diff --git a/Pods/.DS_Store b/Pods/.DS_Store deleted file mode 100644 index 20ba448..0000000 Binary files a/Pods/.DS_Store and /dev/null differ diff --git a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/AMapDemangleNodes.def b/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/AMapDemangleNodes.def deleted file mode 100644 index 3964df2..0000000 --- a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/AMapDemangleNodes.def +++ /dev/null @@ -1,260 +0,0 @@ -//===--- AMapDemangleNodes.def - Demangling Tree Metaprogramming ----*- C++ -*-===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// -// -// This file defines macros useful for macro-metaprogramming with nodes in -// the demangling tree. -// -//===----------------------------------------------------------------------===// - -/// NODE(ID) -/// The node's enumerator value is Node::Kind::ID. - -/// CONTEXT_NODE(ID) -/// Nodes that can serve as contexts for other entities. -#ifndef CONTEXT_NODE -#define CONTEXT_NODE(ID) NODE(ID) -#endif - -CONTEXT_NODE(Allocator) -CONTEXT_NODE(AnonymousContext) -NODE(AnyProtocolConformanceList) -NODE(ArgumentTuple) -NODE(AssociatedType) -NODE(AssociatedTypeRef) -NODE(AssociatedTypeMetadataAccessor) -NODE(DefaultAssociatedTypeMetadataAccessor) -NODE(AssociatedTypeWitnessTableAccessor) -NODE(BaseWitnessTableAccessor) -NODE(AutoClosureType) -NODE(BoundGenericClass) -NODE(BoundGenericEnum) -NODE(BoundGenericStructure) -NODE(BoundGenericProtocol) -NODE(BoundGenericOtherNominalType) -NODE(BoundGenericTypeAlias) -NODE(BoundGenericFunction) -NODE(BuiltinTypeName) -NODE(CFunctionPointer) -CONTEXT_NODE(Class) -NODE(ClassMetadataBaseOffset) -NODE(ConcreteProtocolConformance) -CONTEXT_NODE(Constructor) -NODE(CoroutineContinuationPrototype) -CONTEXT_NODE(Deallocator) -NODE(DeclContext) -CONTEXT_NODE(DefaultArgumentInitializer) -NODE(DependentAssociatedConformance) -NODE(DependentAssociatedTypeRef) -NODE(DependentGenericConformanceRequirement) -NODE(DependentGenericParamCount) -NODE(DependentGenericParamType) -NODE(DependentGenericSameTypeRequirement) -NODE(DependentGenericLayoutRequirement) -NODE(DependentGenericSignature) -NODE(DependentGenericType) -NODE(DependentMemberType) -NODE(DependentPseudogenericSignature) -NODE(DependentProtocolConformanceRoot) -NODE(DependentProtocolConformanceInherited) -NODE(DependentProtocolConformanceAssociated) -CONTEXT_NODE(Destructor) -CONTEXT_NODE(DidSet) -NODE(Directness) -NODE(DynamicAttribute) -NODE(DirectMethodReferenceAttribute) -NODE(DynamicSelf) -NODE(DynamicallyReplaceableFunctionImpl) -NODE(DynamicallyReplaceableFunctionKey) -NODE(DynamicallyReplaceableFunctionVar) -CONTEXT_NODE(Enum) -NODE(EnumCase) -NODE(ErrorType) -NODE(EscapingAutoClosureType) -NODE(NoEscapeFunctionType) -NODE(ExistentialMetatype) -CONTEXT_NODE(ExplicitClosure) -CONTEXT_NODE(Extension) -NODE(FieldOffset) -NODE(FullTypeMetadata) -CONTEXT_NODE(Function) -NODE(FunctionSignatureSpecialization) -NODE(FunctionSignatureSpecializationParam) -NODE(FunctionSignatureSpecializationParamKind) -NODE(FunctionSignatureSpecializationParamPayload) -NODE(FunctionType) -NODE(GenericPartialSpecialization) -NODE(GenericPartialSpecializationNotReAbstracted) -NODE(GenericProtocolWitnessTable) -NODE(GenericProtocolWitnessTableInstantiationFunction) -NODE(ResilientProtocolWitnessTable) -NODE(GenericSpecialization) -NODE(GenericSpecializationNotReAbstracted) -NODE(GenericSpecializationParam) -NODE(InlinedGenericFunction) -NODE(GenericTypeMetadataPattern) -CONTEXT_NODE(Getter) -NODE(Global) -CONTEXT_NODE(GlobalGetter) -NODE(Identifier) -NODE(Index) -CONTEXT_NODE(IVarInitializer) -CONTEXT_NODE(IVarDestroyer) -NODE(ImplEscaping) -NODE(ImplConvention) -NODE(ImplFunctionAttribute) -NODE(ImplFunctionType) -CONTEXT_NODE(ImplicitClosure) -NODE(ImplParameter) -NODE(ImplResult) -NODE(ImplErrorResult) -NODE(InOut) -NODE(InfixOperator) -CONTEXT_NODE(Initializer) -NODE(KeyPathGetterThunkHelper) -NODE(KeyPathSetterThunkHelper) -NODE(KeyPathEqualsThunkHelper) -NODE(KeyPathHashThunkHelper) -NODE(LazyProtocolWitnessTableAccessor) -NODE(LazyProtocolWitnessTableCacheVariable) -NODE(LocalDeclName) -CONTEXT_NODE(MaterializeForSet) -NODE(MergedFunction) -NODE(Metatype) -NODE(MetatypeRepresentation) -NODE(Metaclass) -NODE(MethodLookupFunction) -NODE(ObjCMetadataUpdateFunction) -CONTEXT_NODE(ModifyAccessor) -CONTEXT_NODE(Module) -CONTEXT_NODE(NativeOwningAddressor) -CONTEXT_NODE(NativeOwningMutableAddressor) -CONTEXT_NODE(NativePinningAddressor) -CONTEXT_NODE(NativePinningMutableAddressor) -NODE(NominalTypeDescriptor) -NODE(NonObjCAttribute) -NODE(Number) -NODE(ObjCAttribute) -NODE(ObjCBlock) -CONTEXT_NODE(OtherNominalType) -CONTEXT_NODE(OwningAddressor) -CONTEXT_NODE(OwningMutableAddressor) -NODE(PartialApplyForwarder) -NODE(PartialApplyObjCForwarder) -NODE(PostfixOperator) -NODE(PrefixOperator) -NODE(PrivateDeclName) -NODE(PropertyDescriptor) -CONTEXT_NODE(Protocol) -CONTEXT_NODE(ProtocolSymbolicReference) -NODE(ProtocolConformance) -NODE(ProtocolConformanceRefInTypeModule) -NODE(ProtocolConformanceRefInProtocolModule) -NODE(ProtocolConformanceRefInOtherModule) -NODE(ProtocolDescriptor) -NODE(ProtocolConformanceDescriptor) -NODE(ProtocolList) -NODE(ProtocolListWithClass) -NODE(ProtocolListWithAnyObject) -NODE(ProtocolSelfConformanceDescriptor) -NODE(ProtocolSelfConformanceWitness) -NODE(ProtocolSelfConformanceWitnessTable) -NODE(ProtocolWitness) -NODE(ProtocolWitnessTable) -NODE(ProtocolWitnessTableAccessor) -NODE(ProtocolWitnessTablePattern) -NODE(ReabstractionThunk) -NODE(ReabstractionThunkHelper) -CONTEXT_NODE(ReadAccessor) -NODE(RelatedEntityDeclName) -NODE(RetroactiveConformance) -NODE(ReturnType) -NODE(Shared) -NODE(Owned) -NODE(SILBoxType) -NODE(SILBoxTypeWithLayout) -NODE(SILBoxLayout) -NODE(SILBoxMutableField) -NODE(SILBoxImmutableField) -CONTEXT_NODE(Setter) -NODE(SpecializationPassID) -NODE(IsSerialized) -CONTEXT_NODE(Static) -CONTEXT_NODE(Structure) -CONTEXT_NODE(Subscript) -NODE(Suffix) -NODE(ThinFunctionType) -NODE(Tuple) -NODE(TupleElement) -NODE(TupleElementName) -NODE(Type) -CONTEXT_NODE(TypeSymbolicReference) -CONTEXT_NODE(TypeAlias) -NODE(TypeList) -NODE(TypeMangling) -NODE(TypeMetadata) -NODE(TypeMetadataAccessFunction) -NODE(TypeMetadataCompletionFunction) -NODE(TypeMetadataInstantiationCache) -NODE(TypeMetadataInstantiationFunction) -NODE(TypeMetadataSingletonInitializationCache) -NODE(TypeMetadataLazyCache) -NODE(UncurriedFunctionType) -#define REF_STORAGE(Name, ...) NODE(Name) -#include "AMapReferenceStorage.def" -CONTEXT_NODE(UnsafeAddressor) -CONTEXT_NODE(UnsafeMutableAddressor) -NODE(ValueWitness) -NODE(ValueWitnessTable) -CONTEXT_NODE(Variable) -NODE(VTableThunk) -NODE(VTableAttribute) // note: old mangling only -CONTEXT_NODE(WillSet) -NODE(ReflectionMetadataBuiltinDescriptor) -NODE(ReflectionMetadataFieldDescriptor) -NODE(ReflectionMetadataAssocTypeDescriptor) -NODE(ReflectionMetadataSuperclassDescriptor) -NODE(GenericTypeParamDecl) -NODE(CurryThunk) -NODE(DispatchThunk) -NODE(MethodDescriptor) -NODE(ProtocolRequirementsBaseDescriptor) -NODE(AssociatedConformanceDescriptor) -NODE(DefaultAssociatedConformanceAccessor) -NODE(BaseConformanceDescriptor) -NODE(AssociatedTypeDescriptor) -NODE(ThrowsAnnotation) -NODE(EmptyList) -NODE(FirstElementMarker) -NODE(VariadicMarker) -NODE(OutlinedBridgedMethod) -NODE(OutlinedCopy) -NODE(OutlinedConsume) -NODE(OutlinedRetain) -NODE(OutlinedRelease) -NODE(OutlinedInitializeWithTake) -NODE(OutlinedInitializeWithCopy) -NODE(OutlinedAssignWithTake) -NODE(OutlinedAssignWithCopy) -NODE(OutlinedDestroy) -NODE(OutlinedVariable) -NODE(AssocTypePath) -NODE(LabelList) -NODE(ModuleDescriptor) -NODE(ExtensionDescriptor) -NODE(AnonymousDescriptor) -NODE(AssociatedTypeGenericParamRef) -NODE(SugaredOptional) -NODE(SugaredArray) -NODE(SugaredDictionary) -NODE(SugaredParen) -#undef CONTEXT_NODE -#undef NODE diff --git a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/AMapFoundationKit b/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/AMapFoundationKit deleted file mode 100644 index 0f89528..0000000 Binary files a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/AMapFoundationKit and /dev/null differ diff --git a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/AMapReferenceStorage.def b/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/AMapReferenceStorage.def deleted file mode 100644 index f74ded7..0000000 --- a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/AMapReferenceStorage.def +++ /dev/null @@ -1,197 +0,0 @@ -//===--- AMapReferenceStorage.def - Non-default reference storage ---*- C++ -*-===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2018 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// -// -// This file defines non-default reference storage kind macros used for -// macro-metaprogramming. -// -//===----------------------------------------------------------------------===// - -/// There are two fundamental reference storage types: checked and unchecked. -/// Checked storage types have runtime enforced correctness. -/// Unchecked storage types have no runtime enforced correctness. -/// -/// Checked reference storage types are also subcategorized by loadability. -/// * Always loadable: The compiler may move the reference or use registers. -/// * Never loadable: The runtime (etc) tracks the address of the reference. -/// * Sometimes loadable: If the reference is a native object, then it is -/// always loadable. Otherwise fall back to never loadable semantics, a.k.a. -/// "address only". -/// -/// Unchecked reference storage types are always loadable. -/// -/// The primary macros therefore are: -/// * ALWAYS_LOADABLE_CHECKED_REF_STORAGE -/// * SOMETIMES_LOADABLE_CHECKED_REF_STORAGE -/// * NEVER_LOADABLE_CHECKED_REF_STORAGE -/// * UNCHECKED_REF_STORAGE -/// -/// Helper macros include: -/// * CHECKED_REF_STORAGE -- Any checked reference storage type. Specifically -/// "always", "sometimes", and "never" -- but not "unchecked". -/// * LOADABLE_REF_STORAGE -- Any loadable reference storage type. Specifically -/// "always", "sometimes", and "unchecked" -- but not "never". -/// * ALWAYS_OR_SOMETIMES_LOADABLE_CHECKED_REF_STORAGE -- self describing. -/// * NEVER_OR_SOMETIMES_LOADABLE_CHECKED_REF_STORAGE -- self describing. -/// -/// SUBSYSTEMS NOTES -/// -/// In general, reference storage types are barely visible in the user facing -/// type system and therefore AST clients above SIL can get away with -/// just REF_STORAGE, or CHECKED_REF_STORAGE with UNCHECKED_REF_STORAGE. -/// -/// When it comes to SIL aware AST clients, loadability matters. The best way -/// to understand how the helper macros are used is to look at SILNodes.def. -/// What follows is a short -- possibly not up to date -- summary: -/// -/// UNCHECKED_REF_STORAGE -/// Name##RetainValueInst -/// Name##ReleaseValueInst -/// LOADABLE_REF_STORAGE -/// Ref*ToNameInst -/// Name*ToRefInst -/// NEVER_OR_SOMETIMES_LOADABLE_CHECKED_REF_STORAGE -/// Load##Name##Inst -/// Store##Name##Inst -/// ALWAYS_OR_SOMETIMES_LOADABLE_CHECKED_REF_STORAGE -/// Copy##Name##ValueInst -/// StrongRetain##Name##Inst -/// Name##RetainInst -/// Name##ReleaseInst -/// -/// After helper macro expansion: -/// -/// UNCHECKED_REF_STORAGE -/// Ref*ToNameInst -/// Name*ToRefInst -/// Name##RetainValueInst -/// Name##ReleaseValueInst -/// ALWAYS_LOADABLE_CHECKED_REF_STORAGE -/// Ref*ToNameInst -/// Name*ToRefInst -/// Copy##Name##ValueInst -/// StrongRetain##Name##Inst -/// Name##RetainInst -/// Name##ReleaseInst -/// SOMETIMES_LOADABLE_CHECKED_REF_STORAGE -/// Ref*ToNameInst -/// Name*ToRefInst -/// Load##Name##Inst -/// Store##Name##Inst -/// Copy##Name##ValueInst -/// StrongRetain##Name##Inst -/// Name##RetainInst -/// Name##ReleaseInst -/// NEVER_LOADABLE_CHECKED_REF_STORAGE -/// Load##Name##Inst -/// Store##Name##Inst -/// -/// Finally, a note about IRGen: TypeInfos need to be created per reference -/// storage type, and SOMETIMES_LOADABLE_CHECKED_REF_STORAGE needs *two* -/// TypeInfos to be created. One for the loadable scenario, and one for the -/// address-only scenario. - - -#ifndef REF_STORAGE -#define REF_STORAGE(Name, name, NAME) -#endif - -#ifdef ALWAYS_OR_SOMETIMES_LOADABLE_CHECKED_REF_STORAGE -#if defined(ALWAYS_LOADABLE_CHECKED_REF_STORAGE) || \ -defined(SOMETIMES_LOADABLE_CHECKED_REF_STORAGE) -#error Overlapping meta-programming macros -#endif -#define ALWAYS_LOADABLE_CHECKED_REF_STORAGE(Name, name, NAME) \ -ALWAYS_OR_SOMETIMES_LOADABLE_CHECKED_REF_STORAGE(Name, name, NAME) -#define SOMETIMES_LOADABLE_CHECKED_REF_STORAGE(Name, name, NAME) \ -ALWAYS_OR_SOMETIMES_LOADABLE_CHECKED_REF_STORAGE(Name, name, NAME) -#endif - -#ifdef NEVER_OR_SOMETIMES_LOADABLE_CHECKED_REF_STORAGE -#if defined(NEVER_LOADABLE_CHECKED_REF_STORAGE) || \ -defined(SOMETIMES_LOADABLE_CHECKED_REF_STORAGE) -#error Overlapping meta-programming macros -#endif -#define NEVER_LOADABLE_CHECKED_REF_STORAGE(Name, name, NAME) \ -NEVER_OR_SOMETIMES_LOADABLE_CHECKED_REF_STORAGE(Name, name, NAME) -#define SOMETIMES_LOADABLE_CHECKED_REF_STORAGE(Name, name, NAME) \ -NEVER_OR_SOMETIMES_LOADABLE_CHECKED_REF_STORAGE(Name, name, NAME) -#endif - -#ifdef LOADABLE_REF_STORAGE -#if defined(ALWAYS_LOADABLE_CHECKED_REF_STORAGE) || \ -defined(SOMETIMES_LOADABLE_CHECKED_REF_STORAGE) || \ -defined(UNCHECKED_REF_STORAGE) -#error Overlapping meta-programming macros -#endif -#define ALWAYS_LOADABLE_CHECKED_REF_STORAGE(Name, name, NAME) \ -LOADABLE_REF_STORAGE(Name, name, NAME) -#define SOMETIMES_LOADABLE_CHECKED_REF_STORAGE(Name, name, NAME) \ -LOADABLE_REF_STORAGE(Name, name, NAME) -#define UNCHECKED_REF_STORAGE(Name, name, NAME) \ -LOADABLE_REF_STORAGE(Name, name, NAME) -#endif - -#ifdef CHECKED_REF_STORAGE -#if defined(SOMETIMES_LOADABLE_CHECKED_REF_STORAGE) || \ -defined(ALWAYS_LOADABLE_CHECKED_REF_STORAGE) || \ -defined(NEVER_LOADABLE_CHECKED_REF_STORAGE) -#error Overlapping meta-programming macros -#endif -#define ALWAYS_LOADABLE_CHECKED_REF_STORAGE(Name, name, NAME) \ -CHECKED_REF_STORAGE(Name, name, NAME) -#define SOMETIMES_LOADABLE_CHECKED_REF_STORAGE(Name, name, NAME) \ -CHECKED_REF_STORAGE(Name, name, NAME) -#define NEVER_LOADABLE_CHECKED_REF_STORAGE(Name, name, NAME) \ -CHECKED_REF_STORAGE(Name, name, NAME) -#endif - -#ifndef NEVER_LOADABLE_CHECKED_REF_STORAGE -#define NEVER_LOADABLE_CHECKED_REF_STORAGE(Name, name, NAME) \ -REF_STORAGE(Name, name, NAME) -#endif - -#ifndef SOMETIMES_LOADABLE_CHECKED_REF_STORAGE -#define SOMETIMES_LOADABLE_CHECKED_REF_STORAGE(Name, name, NAME) \ -REF_STORAGE(Name, name, NAME) -#endif - -#ifndef ALWAYS_LOADABLE_CHECKED_REF_STORAGE -#define ALWAYS_LOADABLE_CHECKED_REF_STORAGE(Name, name, NAME) \ -REF_STORAGE(Name, name, NAME) -#endif - -#ifndef UNCHECKED_REF_STORAGE -#define UNCHECKED_REF_STORAGE(Name, name, NAME) \ -REF_STORAGE(Name, name, NAME) -#endif - -#ifndef REF_STORAGE_RANGE -#define REF_STORAGE_RANGE(First, Last) -#endif - -// NOTE: You will need to update ReferenceOwnership in ModuleFormat.h. -//NEVER_LOADABLE_CHECKED_REF_STORAGE(Weak, weak, WEAK) -//SOMETIMES_LOADABLE_CHECKED_REF_STORAGE(Unowned, unowned, UNOWNED) -//UNCHECKED_REF_STORAGE(Unmanaged, unmanaged, UNMANAGED) -REF_STORAGE_RANGE(Weak, Unmanaged) - -#undef REF_STORAGE -#undef NEVER_LOADABLE_CHECKED_REF_STORAGE -#undef ALWAYS_LOADABLE_CHECKED_REF_STORAGE -#undef SOMETIMES_LOADABLE_CHECKED_REF_STORAGE -#undef UNCHECKED_REF_STORAGE -#undef REF_STORAGE_RANGE - -#undef ALWAYS_OR_SOMETIMES_LOADABLE_CHECKED_REF_STORAGE -#undef NEVER_OR_SOMETIMES_LOADABLE_CHECKED_REF_STORAGE -#undef LOADABLE_REF_STORAGE -#undef CHECKED_REF_STORAGE diff --git a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/AMapStandardTypesMangling.def b/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/AMapStandardTypesMangling.def deleted file mode 100644 index f44b5fe..0000000 --- a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/AMapStandardTypesMangling.def +++ /dev/null @@ -1,68 +0,0 @@ -//===--- AMapStandardTypesMangling - Mangling Metaprogramming ---*- C++ -*-===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -/// STANDARD_TYPE(KIND, MANGLING, TYPENAME) -/// The 1-character MANGLING for a known TYPENAME of KIND. - -STANDARD_TYPE(Structure, A, AutoreleasingUnsafeMutablePointer) -STANDARD_TYPE(Structure, a, Array) -STANDARD_TYPE(Structure, b, Bool) -STANDARD_TYPE(Structure, c, UnicodeScalar) -STANDARD_TYPE(Structure, D, Dictionary) -STANDARD_TYPE(Structure, d, Double) -STANDARD_TYPE(Structure, f, Float) -STANDARD_TYPE(Structure, h, Set) -STANDARD_TYPE(Structure, I, DefaultIndices) -STANDARD_TYPE(Structure, i, Int) -STANDARD_TYPE(Structure, J, Character) -STANDARD_TYPE(Structure, N, ClosedRange) -STANDARD_TYPE(Structure, n, Range) -STANDARD_TYPE(Structure, O, ObjectIdentifier) -STANDARD_TYPE(Structure, P, UnsafePointer) -STANDARD_TYPE(Structure, p, UnsafeMutablePointer) -STANDARD_TYPE(Structure, R, UnsafeBufferPointer) -STANDARD_TYPE(Structure, r, UnsafeMutableBufferPointer) -STANDARD_TYPE(Structure, S, String) -STANDARD_TYPE(Structure, s, Substring) -STANDARD_TYPE(Structure, u, UInt) -STANDARD_TYPE(Structure, V, UnsafeRawPointer) -STANDARD_TYPE(Structure, v, UnsafeMutableRawPointer) -STANDARD_TYPE(Structure, W, UnsafeRawBufferPointer) -STANDARD_TYPE(Structure, w, UnsafeMutableRawBufferPointer) - -STANDARD_TYPE(Enum, q, Optional) - -STANDARD_TYPE(Protocol, B, BinaryFloatingPoint) -STANDARD_TYPE(Protocol, E, Encodable) -STANDARD_TYPE(Protocol, e, Decodable) -STANDARD_TYPE(Protocol, F, FloatingPoint) -STANDARD_TYPE(Protocol, G, RandomNumberGenerator) -STANDARD_TYPE(Protocol, H, Hashable) -STANDARD_TYPE(Protocol, j, Numeric) -STANDARD_TYPE(Protocol, K, BidirectionalCollection) -STANDARD_TYPE(Protocol, k, RandomAccessCollection) -STANDARD_TYPE(Protocol, L, Comparable) -STANDARD_TYPE(Protocol, l, Collection) -STANDARD_TYPE(Protocol, M, MutableCollection) -STANDARD_TYPE(Protocol, m, RangeReplaceableCollection) -STANDARD_TYPE(Protocol, Q, Equatable) -STANDARD_TYPE(Protocol, T, Sequence) -STANDARD_TYPE(Protocol, t, IteratorProtocol) -STANDARD_TYPE(Protocol, U, UnsignedInteger) -STANDARD_TYPE(Protocol, X, RangeExpression) -STANDARD_TYPE(Protocol, x, Strideable) -STANDARD_TYPE(Protocol, Y, RawRepresentable) -STANDARD_TYPE(Protocol, y, StringProtocol) -STANDARD_TYPE(Protocol, Z, SignedInteger) -STANDARD_TYPE(Protocol, z, BinaryInteger) - -#undef STANDARD_TYPE diff --git a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/AMapValueWitnessMangling.def b/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/AMapValueWitnessMangling.def deleted file mode 100644 index e69de29..0000000 diff --git a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/Headers/AMapFoundationConst.h b/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/Headers/AMapFoundationConst.h deleted file mode 100644 index 000ffac..0000000 --- a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/Headers/AMapFoundationConst.h +++ /dev/null @@ -1,70 +0,0 @@ -// -// AMapFoundationConst.h -// AMapFoundationKit -// -// Created by JL on 2019/7/22. -// Copyright © 2019 Amap.com. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef NSInteger AMapFoundationNSErrorCode; - -//ErrorDomain:文件不存在 错误码:-555555 -extern NSErrorDomain const AMapFoundationNSErrorFileDonotExist; -extern AMapFoundationNSErrorCode const AMapFoundationNSErrorFileDonotExistCode; - -//ErrorDomain:文件路径不合法 错误码:-555556 -extern NSErrorDomain const AMapFoundationNSErrorFilePathInvaild; -extern AMapFoundationNSErrorCode const AMapFoundationNSErrorFilePathInvaildCode; - -//ErrorDomain:指定类型的日志文件不存在 错误码:-555557 -extern NSErrorDomain const AMapFoundationNSErrorTypeLogDonotExist; -extern AMapFoundationNSErrorCode const AMapFoundationNSErrorTypeLogDonotExistCode; - -//ErrorDomain:待上传的数据为空(可能是组装/压缩时出错) 错误码:-555558 -extern NSErrorDomain const AMapFoundationNSErrorUploadDataIsEmpty; -extern AMapFoundationNSErrorCode const AMapFoundationNSErrorUploadDataIsEmptyCode; - -//ErrorDomain:参数错误 错误码:-444444 -extern NSErrorDomain const AMapFoundationNSErrorParametersInvalid; -extern AMapFoundationNSErrorCode const AMapFoundationNSErrorParametersInvalidCode; - - -extern NSErrorDomain const AMapFoundationNSErrorCloudConfigDisable; -extern AMapFoundationNSErrorCode const AMapFoundationNSErrorCloudConfigDisableCode; - -extern NSErrorDomain const AMapFoundationNSErrorNetworkUnusable; -extern AMapFoundationNSErrorCode const AMapFoundationNSErrorNetworkUnusableCode; - -extern NSErrorDomain const AMapFoundationNSErrorCurrentworkIsRunning; -extern AMapFoundationNSErrorCode const AMapFoundationNSErrorCurrentworkIsRunningCode; - -extern NSErrorDomain const AMapFoundationNSErrorCurrentUploadSizeHaveExcess; -extern AMapFoundationNSErrorCode const AMapFoundationNSErrorCurrentUploadSizeHaveExcessCode; - - -extern NSErrorDomain const AMapFoundationErrorPrivacyShowUnknow; -extern AMapFoundationNSErrorCode const AMapFoundationErrorPrivacyShowUnknowCode; - -extern NSErrorDomain const AMapFoundationErrorPrivacyShowNoShow; -extern AMapFoundationNSErrorCode const AMapFoundationErrorPrivacyShowNoShowCode; - -extern NSErrorDomain const AMapFoundationErrorPrivacyInfoUnknow; -extern AMapFoundationNSErrorCode const AMapFoundationErrorPrivacyInfoUnknowCode; - -extern NSErrorDomain const AMapFoundationErrorPrivacyInfoNotContain; -extern AMapFoundationNSErrorCode const AMapFoundationErrorPrivacyInfoNotContainCode; - -extern NSErrorDomain const AMapFoundationErrorPrivacyAgreeUnknow; -extern AMapFoundationNSErrorCode const AMapFoundationErrorPrivacyAgreeUnknowCode; - -extern NSErrorDomain const AMapFoundationErrorPrivacyAgreeNotAgreee; -extern AMapFoundationNSErrorCode const AMapFoundationErrorPrivacyAgreeNotAgreeeCode; - -extern NSErrorDomain const AMapFoundationErrorInvaildUserKey; -extern AMapFoundationNSErrorCode const AMapFoundationErrorInvaildUserKeyCode; - -NS_ASSUME_NONNULL_END diff --git a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/Headers/AMapFoundationKit.h b/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/Headers/AMapFoundationKit.h deleted file mode 100644 index 258e115..0000000 --- a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/Headers/AMapFoundationKit.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// AMapFoundationKit.h -// AMapFoundationKit -// -// Created by xiaoming han on 15/10/28. -// Copyright © 2015年 Amap. All rights reserved. -// - -#import -#import -#import -#import -#import -#import - -#import diff --git a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/Headers/AMapFoundationVersion.h b/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/Headers/AMapFoundationVersion.h deleted file mode 100644 index 124d170..0000000 --- a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/Headers/AMapFoundationVersion.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// AMapFoundationVersion.h -// AMapFoundation -// -// Created by xiaoming han on 15/10/26. -// Copyright © 2015年 Amap. All rights reserved. -// - -#import - -#ifndef AMapFoundationVersion_h -#define AMapFoundationVersion_h - -#define AMapFoundationVersionNumber 10802 - -FOUNDATION_EXTERN NSString * const AMapFoundationVersion; -FOUNDATION_EXTERN NSString * const AMapFoundationName; - -#endif /* AMapFoundationVersion_h */ diff --git a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/Headers/AMapServices.h b/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/Headers/AMapServices.h deleted file mode 100644 index d23eaba..0000000 --- a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/Headers/AMapServices.h +++ /dev/null @@ -1,63 +0,0 @@ -// -// AMapSearchServices.h -// AMapSearchKit -// -// Created by xiaoming han on 15/6/18. -// Copyright (c) 2015年 xiaoming han. All rights reserved. -// - -#import - - -/** - * 是否为海外用户...海外用户,SDK内部会屏蔽一些操作 默认为NO. - * @warning AMapServices初始化之前,设置才能生效 - */ -extern BOOL _amapLocationOverseas; - -// 显示隐私弹窗状态 -1: unknow , 0 : 未显示 , 1 : 已显示 -typedef NS_ENUM(NSInteger, AMapPrivacyShowStatus) -{ - AMapPrivacyShowStatusUnknow = -1, - AMapPrivacyShowStatusNotShow = 0, - AMapPrivacyShowStatusDidShow = 1, -}; - -// 集成SDK隐私信息状态 -1: unknow , 0 : 未集成 , 1 : 已集成 -typedef NS_ENUM(NSInteger, AMapPrivacyInfoStatus) -{ - AMapPrivacyInfoStatusUnknow = -1, - AMapPrivacyInfoStatusNotContain = 0, - AMapPrivacyInfoStatusDidContain = 1, -}; - -// 用户同意隐私状态 -1: unknow , 0 : 未同意 , 1 : 已同意 -typedef NS_ENUM(NSInteger, AMapPrivacyAgreeStatus) -{ - AMapPrivacyAgreeStatusUnknow = -1, - AMapPrivacyAgreeStatusNotAgree = 0, - AMapPrivacyAgreeStatusDidAgree = 1, -}; - -///高德SDK服务类 -@interface AMapServices : NSObject - -/** - * @brief 获取单例 - */ -+ (AMapServices *)sharedServices; - - -///APIkey。设置key,需要在高德官网控制台绑定对应的bundleid。 -@property (nonatomic, copy) NSString *apiKey; - -///是否开启HTTPS,从1.3.3版本开始默认为YES。 -@property (nonatomic, assign) BOOL enableHTTPS; - -///是否启用崩溃日志上传。默认为YES, 只有在真机上设置有效。\n开启崩溃日志上传有助于我们更好的了解SDK的状况,可以帮助我们持续优化和改进SDK。需要注意的是,SDK内部是通过设置NSUncaughtExceptionHandler来捕获异常的,如果您的APP中使用了其他收集崩溃日志的SDK,或者自己有设置NSUncaughtExceptionHandler的话,请保证 AMapServices 的初始化是在其他设置NSUncaughtExceptionHandler操作之后进行的,我们的handler会再处理完异常后调用前一次设置的handler,保证之前设置的handler会被执行。 -@property (nonatomic, assign) BOOL crashReportEnabled __attribute__((deprecated("从v1.5.7开始废弃,调用无任何作用"))); - -///设备标识,取自idfv。用于排查问题时提供。 -@property (nonatomic, readonly) NSString *identifier; - -@end diff --git a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/Headers/AMapURLSearch.h b/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/Headers/AMapURLSearch.h deleted file mode 100644 index 9379f4f..0000000 --- a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/Headers/AMapURLSearch.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// AMapURLSearch.h -// AMapFoundation -// -// Created by xiaoming han on 15/10/28. -// Copyright © 2015年 Amap. All rights reserved. -// - -#import -#import "AMapURLSearchConfig.h" - -///调起高德地图URL进行搜索,若是调起失败,可使用`+ (void)getLatestAMapApp;`方法获取最新版高德地图app. -@interface AMapURLSearch : NSObject - -/** - * @brief 打开高德地图AppStore页面 - */ -+ (void)getLatestAMapApp; - -/** - * @brief 调起高德地图app驾车导航. - * @param config 配置参数. - * @return 是否成功.若为YES则成功调起,若为NO则无法调起. - */ -+ (BOOL)openAMapNavigation:(AMapNaviConfig *)config; - -/** - * @brief 调起高德地图app进行路径规划. - * @param config 配置参数. - * @return 是否成功. - */ -+ (BOOL)openAMapRouteSearch:(AMapRouteConfig *)config; - -/** - * @brief 调起高德地图app进行POI搜索. - * @param config 配置参数. - * @return 是否成功. - */ -+ (BOOL)openAMapPOISearch:(AMapPOIConfig *)config; - -@end diff --git a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/Headers/AMapURLSearchConfig.h b/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/Headers/AMapURLSearchConfig.h deleted file mode 100644 index 666b492..0000000 --- a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/Headers/AMapURLSearchConfig.h +++ /dev/null @@ -1,79 +0,0 @@ -// -// MAMapURLSearchConfig.h -// MAMapKitNew -// -// Created by xiaoming han on 15/5/25. -// Copyright (c) 2015年 xiaoming han. All rights reserved. -// - -#import -#import -#import "AMapURLSearchType.h" - -///导航配置信息 -@interface AMapNaviConfig : NSObject - -///应用返回的Scheme -@property (nonatomic, copy) NSString *appScheme; - -///应用名称 -@property (nonatomic, copy) NSString *appName; - -///终点 -@property (nonatomic, assign) CLLocationCoordinate2D destination; - -///导航策略 -@property (nonatomic, assign) AMapDrivingStrategy strategy; - -@end - -#pragma mark - - -///路径搜索配置信息 -@interface AMapRouteConfig : NSObject - -///应用返回的Scheme -@property (nonatomic, copy) NSString *appScheme; - -///应用名称 -@property (nonatomic, copy) NSString *appName; - -///起点坐标 -@property (nonatomic, assign) CLLocationCoordinate2D startCoordinate; - -///终点坐标 -@property (nonatomic, assign) CLLocationCoordinate2D destinationCoordinate; - -///驾车策略 -@property (nonatomic, assign) AMapDrivingStrategy drivingStrategy; - -///公交策略 -@property (nonatomic, assign) AMapTransitStrategy transitStrategy; - -///路径规划类型 -@property (nonatomic, assign) AMapRouteSearchType routeType; - -@end - -#pragma mark - - -///POI搜索配置信息 -@interface AMapPOIConfig : NSObject - -///应用返回的Scheme -@property (nonatomic, copy) NSString *appScheme; - -///应用名称 -@property (nonatomic, copy) NSString *appName; - -///搜索关键字 -@property (nonatomic, copy) NSString *keywords; - -///左上角坐标 -@property (nonatomic, assign) CLLocationCoordinate2D leftTopCoordinate; - -///右下角坐标 -@property (nonatomic, assign) CLLocationCoordinate2D rightBottomCoordinate; - -@end - diff --git a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/Headers/AMapURLSearchType.h b/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/Headers/AMapURLSearchType.h deleted file mode 100644 index 424d905..0000000 --- a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/Headers/AMapURLSearchType.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// MAMapURLSearchType.h -// MAMapKitNew -// -// Created by xiaoming han on 15/5/25. -// Copyright (c) 2015年 xiaoming han. All rights reserved. -// - -///驾车策略 -typedef NS_ENUM(NSInteger, AMapDrivingStrategy) -{ - AMapDrivingStrategyFastest = 0, ///<速度最快 - AMapDrivingStrategyMinFare = 1, ///<避免收费 - AMapDrivingStrategyShortest = 2, ///<距离最短 - - AMapDrivingStrategyNoHighways = 3, ///<不走高速 - AMapDrivingStrategyAvoidCongestion = 4, ///<躲避拥堵 - - AMapDrivingStrategyAvoidHighwaysAndFare = 5, ///<不走高速且避免收费 - AMapDrivingStrategyAvoidHighwaysAndCongestion = 6, ///<不走高速且躲避拥堵 - AMapDrivingStrategyAvoidFareAndCongestion = 7, ///<躲避收费和拥堵 - AMapDrivingStrategyAvoidHighwaysAndFareAndCongestion = 8 ///<不走高速躲避收费和拥堵 -}; - -///公交策略 -typedef NS_ENUM(NSInteger, AMapTransitStrategy) -{ - AMapTransitStrategyFastest = 0,///<最快捷 - AMapTransitStrategyMinFare = 1,///<最经济 - AMapTransitStrategyMinTransfer = 2,///<最少换乘 - AMapTransitStrategyMinWalk = 3,///<最少步行 - AMapTransitStrategyMostComfortable = 4,///<最舒适 - AMapTransitStrategyAvoidSubway = 5,///<不乘地铁 -}; - -///路径规划类型 -typedef NS_ENUM(NSInteger, AMapRouteSearchType) -{ - AMapRouteSearchTypeDriving = 0, ///<驾车 - AMapRouteSearchTypeTransit = 1, ///<公交 - AMapRouteSearchTypeWalking = 2, ///<步行 -}; - - diff --git a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/Headers/AMapUtility.h b/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/Headers/AMapUtility.h deleted file mode 100644 index 6cb2692..0000000 --- a/Pods/AMapFoundation-NO-IDFA/AMapFoundationKit.framework/Headers/AMapUtility.h +++ /dev/null @@ -1,50 +0,0 @@ -// -// AMapUtility.h -// AMapFoundation -// -// Created by xiaoming han on 15/10/27. -// Copyright © 2015年 Amap. All rights reserved. -// - -#import -#import - -//工具方法 - -/** - * @brief 如果字符串为nil则返回空字符串 - */ -FOUNDATION_STATIC_INLINE NSString * AMapEmptyStringIfNil(NSString *s) -{ - return s ? s : @""; -} - -///坐标类型枚举 -typedef NS_ENUM(NSInteger, AMapCoordinateType) -{ - AMapCoordinateTypeAMap = -1, /// -#import "AMapGeoFenceRegionObj.h" - -// 以下类涉及的坐标需要使用高德坐标系坐标(GCJ02) - -@protocol AMapGeoFenceManagerDelegate; - -///地理围栏监听状态类型 -typedef NS_OPTIONS(NSUInteger, AMapGeoFenceActiveAction) -{ - AMapGeoFenceActiveActionNone = 0, ///< 不进行监听 - AMapGeoFenceActiveActionInside = 1 << 0, ///< 在范围内 - AMapGeoFenceActiveActionOutside = 1 << 1, ///< 在范围外 - AMapGeoFenceActiveActionStayed = 1 << 2, ///< 停留(在范围内超过10分钟) -}; - -///地理围栏任务状态类型 -typedef NS_OPTIONS(NSUInteger, AMapGeoFenceRegionActiveStatus) -{ - AMapGeoFenceRegionActiveUNMonitor = 0, ///< 未注册 - AMapGeoFenceRegionActiveMonitoring = 1 << 0, ///< 正在监控 - AMapGeoFenceRegionActivePaused = 1 << 1, ///< 暂停监控 -}; - -///地理围栏管理类(since 2.3.0) -@interface AMapGeoFenceManager : NSObject - - -///实现了 AMapGeoFenceManagerDelegate 协议的类指针。 -@property (nonatomic, weak) id delegate; - - -///需要进行通知的行为,默认为AMapGeoFenceActiveActionInside。 -@property (nonatomic, assign) AMapGeoFenceActiveAction activeAction; - - -///指定定位是否会被系统自动暂停。默认为NO。 -@property (nonatomic, assign) BOOL pausesLocationUpdatesAutomatically; - - -///是否允许后台定位。默认为NO。只在iOS 9.0及之后起作用。设置为YES的时候必须保证 Background Modes 中的 Location updates 处于选中状态,否则会抛出异常。 -@property (nonatomic, assign) BOOL allowsBackgroundLocationUpdates; - -///检测是否存在虚拟定位风险,默认为NO,即不检测。 \n如果设置为YES,检测到风险后,会通过amapGeoFenceManager:didGeoFencesStatusChangedForRegion:customID:error: 的error给出风险提示,error的格式为error.domain==AMapGeoFenceErrorDomain; error.code==AMapGeoFenceErroFailureLocating; -@property (nonatomic, assign) BOOL detectRiskOfFakeLocation; - - -/** - * @brief 添加一个圆形围栏 - * @param center 围栏的中心点经纬度坐标 - * @param radius 围栏的半径,单位:米,要求大于0 - * @param customID 用户自定义ID,可选,SDK原值返回 - */ -- (void)addCircleRegionForMonitoringWithCenter:(CLLocationCoordinate2D)center radius:(CLLocationDistance)radius customID:(NSString *)customID; - - -/** - * @brief 根据经纬度坐标数据添加一个闭合的多边形围栏,点与点之间按顺序尾部相连, 第一个点与最后一个点相连 - * @param coordinates 经纬度坐标点数据,coordinates对应的内存会拷贝,调用者负责该内存的释放 - * @param count 经纬度坐标点的个数,不可小于3个 - * @param customID 用户自定义ID,可选,SDK原值返回 - */ -- (void)addPolygonRegionForMonitoringWithCoordinates:(CLLocationCoordinate2D *)coordinates count:(NSInteger)count customID:(NSString *)customID; - - -/** - * @brief 根据要查询的关键字,类型,城市等信息,添加一个或者多个POI地理围栏 - * @param keyword 要查询的关键字,多个关键字用“|”分割,必填,keyword和type两者至少必选其一 - * @param type 要查询的POI类型,多个类型用“|”分割,必填,keyword和type两者至少必选其一,具体分类编码和规则详见: http://lbs.amap.com/api/webservice/guide/api/search/#text - * @param city 要查询的城市 - * @param size 要查询的数据的条数,(0,25],传入<=0的值为10,传入大于25的值为25,默认10 - * @param customID 用户自定义ID,可选,SDK原值返回 - */ -- (void)addKeywordPOIRegionForMonitoringWithKeyword:(NSString *)keyword POIType:(NSString *)type city:(NSString *)city size:(NSInteger)size customID:(NSString *)customID; - - -/** - * @brief 根据要查询的点的经纬度,搜索半径等信息,添加一个或者多个POI围栏 - * @param locationPoint 点的经纬度坐标,必填 - * @param aroundRadius 查询半径,单位:米,(0,50000],超出范围取3000,默认3000 - * @param keyword 要查询的关键字,多个关键字用“|”分割,可选 - * @param type 要查询的POI类型,多个类型用“|”分割,可选 - * @param size 要查询的数据的条数,(0,25],传入<=0的值为10,传入大于25的值为25,默认10 - * @param customID 用户自定义ID,可选,SDK原值返回 - */ -- (void)addAroundPOIRegionForMonitoringWithLocationPoint:(CLLocationCoordinate2D)locationPoint aroundRadius:(NSInteger)aroundRadius keyword:(NSString *)keyword POIType:(NSString *)type size:(NSInteger)size customID:(NSString *)customID; - - -/** - * @brief 根据要查询的行政区域关键字,添加一个或者多个行政区域围栏 - * @param districtName 行政区域关键字,必填,只支持单个关键词语:行政区名称、citycode、adcode,规则详见: http://lbs.amap.com/api/webservice/guide/api/district/#district - * @param customID 用户自定义ID,可选,SDK原值返回 - */ -- (void)addDistrictRegionForMonitoringWithDistrictName:(NSString *)districtName customID:(NSString *)customID; - -/** - * @brief 获取指定围栏的运行状态 - * @param region 要获取运行状态的围栏 - * @return 返回指定围栏的运行状态 - */ -- (AMapGeoFenceRegionActiveStatus)statusWithGeoFenceRegion:(AMapGeoFenceRegion *)region; - -/** - * @brief 根据customID获得所有已经注册的围栏,如果customID传nil,则返回全部已注册围栏 - * @param customID 用户执行添加围栏函数时传入的customID - * @return 获得的围栏构成的数组,如果没有结果,返回nil - */ -- (NSArray *)geoFenceRegionsWithCustomID:(NSString *)customID; - -/** - * @brief 根据customID获得所有正在监控的围栏,如果customID传nil,则返回全部正在监控的围栏 - * @param customID 用户执行添加围栏函数时传入的customID - * @return 获得的围栏构成的数组,如果没有结果,返回nil - */ -- (NSArray *)monitoringGeoFenceRegionsWithCustomID:(NSString *)customID; - -/** - * @brief 根据customID获得所有已经暂停的围栏,如果customID传nil,则返回全部已经暂停的围栏 - * @param customID 用户执行添加围栏函数时传入的customID - * @return 获得的围栏构成的数组,如果没有结果,返回nil - */ -- (NSArray *)pausedGeoFenceRegionsWithCustomID:(NSString *)customID; - - -/** - * @brief 暂停指定customID的围栏 - * @param customID 用户执行添加围栏函数时传入的customID - * @return 返回被暂停围栏的数组,如果没有围栏被暂停,返回nil - */ -- (NSArray *)pauseGeoFenceRegionsWithCustomID:(NSString *)customID; - - -/** - * @brief 暂停指定围栏 - * @param region 要暂停监控的围栏 - * @return 返回指定围栏是否被暂停,如果指定围栏没有注册,则返回NO - */ -- (BOOL)pauseTheGeoFenceRegion:(AMapGeoFenceRegion *)region; - -/** - * @brief 根据customID开始监控已经暂停的围栏 - * @param customID 用户执行添加围栏函数时传入的customID - * @return 返回开始监控的围栏构成的数组 - */ -- (NSArray *)startGeoFenceRegionsWithCustomID:(NSString *)customID; - -/** - * @brief 开始监控指定围栏 - * @param region 要开始监控的围栏 - * @return 返回指定围栏是否开始监控,如果指定围栏没有注册,则返回NO - */ -- (BOOL)startTheGeoFenceRegion:(AMapGeoFenceRegion *)region; - -/** - * @brief 移除指定围栏 - * @param region 要停止监控的围栏 - */ -- (void)removeTheGeoFenceRegion:(AMapGeoFenceRegion *)region; - -/** - * @brief 移除指定customID的围栏 - * @param customID 用户执行添加围栏函数时传入的customID - */ -- (void)removeGeoFenceRegionsWithCustomID:(NSString *)customID; - -/** - * @brief 移除所有围栏 - */ -- (void)removeAllGeoFenceRegions; - -@end - -///地理围栏代理协议(since 2.3.0),该协议定义了获取地理围栏相关回调方法,包括添加、状态改变等。 -@protocol AMapGeoFenceManagerDelegate - -@required - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 140000 - -/** - * @brief iOS14及以上版本使用地理围栏功能,需要在plist中配置NSLocationTemporaryUsageDescriptionDictionary字典描述,且添加自定义Key描述地理围栏的使用场景,此描述会在申请临时精确定位权限的弹窗中展示。该回调触发条件:拥有定位权限,但是没有获得精确定位权限的情况下,会触发该回调。此方法实现调用申请临时精确定位权限API即可: - * [locationManager requestTemporaryFullAccuracyAuthorizationWithPurposeKey:@"PurposeKey" completion:^(NSError *error){ - * if(completion){ - * completion(error); - * } - * }]; (必须调用,不然无法正常获取临时精确定位权限) - * @param manager 地理围栏管理类。 - * @param locationManager 需要申请临时精确定位权限的locationManager。 - * @param completion 临时精确定位权限API回调结果。直接返回系统error即可 - * @since 2.6.7 - */ -- (void)amapLocationManager:(AMapGeoFenceManager *)manager doRequireTemporaryFullAccuracyAuth:(CLLocationManager*)locationManager completion:(void(^)(NSError *error))completion; - -#endif - -@optional - -/** - * @brief 当plist配置NSLocationAlwaysUsageDescription或者NSLocationAlwaysAndWhenInUseUsageDescription,并且[CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined,会调用代理的此方法。 - 此方法实现申请后台权限API即可:[locationManager requestAlwaysAuthorization](必须调用,不然无法正常获取定位权限) - * @param manager 地理围栏管理类。 - * @param locationManager 需要申请后台定位权限的locationManager。 - * @since 2.6.2 - */ -- (void)amapGeoFenceManager:(AMapGeoFenceManager *)manager doRequireLocationAuth:(CLLocationManager*)locationManager; - -/** - * @brief 添加地理围栏完成后的回调,成功与失败都会调用 - * @param manager 地理围栏管理类 - * @param regions 成功添加的一个或多个地理围栏构成的数组 - * @param customID 用户执行添加围栏函数时传入的customID - * @param error 添加失败的错误信息 - */ -- (void)amapGeoFenceManager:(AMapGeoFenceManager *)manager didAddRegionForMonitoringFinished:(NSArray *)regions customID:(NSString *)customID error:(NSError *)error; - - -/** - * @brief 地理围栏状态改变时回调,当围栏状态的值发生改变,定位失败都会调用 - * @param manager 地理围栏管理类 - * @param region 状态改变的地理围栏 - * @param customID 用户执行添加围栏函数时传入的customID - * @param error 错误信息,如定位相关的错误 - */ -- (void)amapGeoFenceManager:(AMapGeoFenceManager *)manager didGeoFencesStatusChangedForRegion:(AMapGeoFenceRegion *)region customID:(NSString *)customID error:(NSError *)error; - -@end diff --git a/Pods/AMapLocation-NO-IDFA/AMapLocationKit.framework/Headers/AMapGeoFenceRegionObj.h b/Pods/AMapLocation-NO-IDFA/AMapLocationKit.framework/Headers/AMapGeoFenceRegionObj.h deleted file mode 100644 index 833fa9c..0000000 --- a/Pods/AMapLocation-NO-IDFA/AMapLocationKit.framework/Headers/AMapGeoFenceRegionObj.h +++ /dev/null @@ -1,120 +0,0 @@ -// -// AMapGeoFenceRegionObj.h -// AMapLocationKit -// -// Created by hanxiaoming on 16/12/5. -// Copyright © 2016年 Amap. All rights reserved. -// - -#import "AMapLocationCommonObj.h" - - -///AMapGeoFence Region State -typedef NS_ENUM(NSInteger, AMapGeoFenceRegionStatus) -{ - AMapGeoFenceRegionStatusUnknown = 0, ///< 未知 - AMapGeoFenceRegionStatusInside = 1, ///< 在范围内 - AMapGeoFenceRegionStatusOutside = 2, ///< 在范围外 - AMapGeoFenceRegionStatusStayed = 3, ///< 停留(在范围内超过10分钟) -}; - -typedef NS_ENUM(NSInteger, AMapGeoFenceRegionType) -{ - AMapGeoFenceRegionTypeCircle = 0, /// 圆形地理围栏 - AMapGeoFenceRegionTypePolygon = 1, /// 多边形地理围栏 - AMapGeoFenceRegionTypePOI = 2, /// 兴趣点(POI)地理围栏 - AMapGeoFenceRegionTypeDistrict = 3, /// 行政区划地理围栏 -}; - -#pragma mark - AMapGeoFenceRegion - - -///地理围栏基类,不可直接使用。(since 2.3.0) -@interface AMapGeoFenceRegion : NSObject - - -///AMapGeoFenceRegion的唯一标识符 -@property (nonatomic, copy, readonly) NSString *identifier; - - -///用户自定义ID,可为nil。 -@property (nonatomic, copy, readonly) NSString *customID; - - -///坐标点和围栏的关系,比如用户的位置和围栏的关系 -@property (nonatomic, assign) AMapGeoFenceRegionStatus fenceStatus; - -///用户自定义ID,可为nil。 -@property (nonatomic, assign) AMapGeoFenceRegionType regionType; - -///缓存最近获取的定位信息,可能会存在延时,可为nil,会在获取定位时更新 -@property (nonatomic, copy) CLLocation *currentLocation; - -@end - - -#pragma mark - AMapLocationCircleRegion - - -///圆形地理围栏(since 2.3.0) -@interface AMapGeoFenceCircleRegion : AMapGeoFenceRegion - - -///中心点的经纬度坐标 -@property (nonatomic, readonly) CLLocationCoordinate2D center; - - -///半径,单位:米 -@property (nonatomic, readonly) CLLocationDistance radius; - -@end - - -#pragma mark -AMapGeoFencePolygonRegion - - -///多边形地理围栏(since 2.3.0) -@interface AMapGeoFencePolygonRegion : AMapGeoFenceRegion - - -///经纬度坐标点数据 -@property (nonatomic, readonly) CLLocationCoordinate2D *coordinates; - - -///经纬度坐标点的个数 -@property (nonatomic, readonly) NSInteger count; - - -@end - - -#pragma mark -AMapGeoFencePOIRegion - - -///兴趣点(POI)地理围栏(since 2.3.0) -@interface AMapGeoFencePOIRegion : AMapGeoFenceCircleRegion - - -///POI信息 -@property (nonatomic, strong, readonly) AMapLocationPOIItem *POIItem; - - -@end - - -#pragma mark -AMapGeoFenceDistrictRegion - - -///行政区划地理围栏(since 2.3.0) -@interface AMapGeoFenceDistrictRegion : AMapGeoFenceRegion - - -///行政区域信息 -@property (nonatomic, strong, readonly) AMapLocationDistrictItem *districtItem; - - -///行政区域轮廓坐标点,每个行政区可能有多个模块,每个模块的坐标点数组由AMapLocationPoint构成 -@property (nonatomic, copy, readonly) NSArray *> *polylinePoints; - - -@end diff --git a/Pods/AMapLocation-NO-IDFA/AMapLocationKit.framework/Headers/AMapLocationCommonObj.h b/Pods/AMapLocation-NO-IDFA/AMapLocationKit.framework/Headers/AMapLocationCommonObj.h deleted file mode 100644 index d5529d0..0000000 --- a/Pods/AMapLocation-NO-IDFA/AMapLocationKit.framework/Headers/AMapLocationCommonObj.h +++ /dev/null @@ -1,203 +0,0 @@ -// -// AMapLocationCommonObj.h -// AMapLocationKit -// -// Created by AutoNavi on 15/10/22. -// Copyright © 2015年 Amap. All rights reserved. -// - -#import -#import -#import - - -///AMapLocation errorDomain -extern NSString * const AMapLocationErrorDomain; - -///AMapLocation errorCode -typedef NS_ENUM(NSInteger, AMapLocationErrorCode) -{ - AMapLocationErrorUnknown = 1, ///<未知错误 - AMapLocationErrorLocateFailed = 2, ///<定位错误 - AMapLocationErrorReGeocodeFailed = 3, ///<逆地理错误 - AMapLocationErrorTimeOut = 4, ///<超时 - AMapLocationErrorCanceled = 5, ///<取消 - AMapLocationErrorCannotFindHost = 6, ///<找不到主机 - AMapLocationErrorBadURL = 7, /// - -///格式化地址 -@property (nonatomic, copy) NSString *formattedAddress; - -///国家 -@property (nonatomic, copy) NSString *country; - -///省/直辖市 -@property (nonatomic, copy) NSString *province; - -///市 -@property (nonatomic, copy) NSString *city; - -///区 -@property (nonatomic, copy) NSString *district; - -///乡镇 -@property (nonatomic, copy) NSString *township __attribute__((deprecated("该字段从v2.2.0版本起不再返回数据,建议您使用AMapSearchKit的逆地理功能获取."))); - -///社区 -@property (nonatomic, copy) NSString *neighborhood __attribute__((deprecated("该字段从v2.2.0版本起不再返回数据,建议您使用AMapSearchKit的逆地理功能获取."))); - -///建筑 -@property (nonatomic, copy) NSString *building __attribute__((deprecated("该字段从v2.2.0版本起不再返回数据,建议您使用AMapSearchKit的逆地理功能获取."))); - -///城市编码 -@property (nonatomic, copy) NSString *citycode; - -///区域编码 -@property (nonatomic, copy) NSString *adcode; - -///街道名称 -@property (nonatomic, copy) NSString *street; - -///门牌号 -@property (nonatomic, copy) NSString *number; - -///兴趣点名称 -@property (nonatomic, copy) NSString *POIName; - -///所属兴趣点名称 -@property (nonatomic, copy) NSString *AOIName; - -@end - -#pragma mark - AMapLocationPoint - -///经纬度坐标点对象 -@interface AMapLocationPoint : NSObject - -///纬度 -@property (nonatomic, assign) CGFloat latitude; - -///经度 -@property (nonatomic, assign) CGFloat longitude; - -/** - * @brief AMapNaviPoint类对象的初始化函数 - * @param lat 纬度 - * @param lon 经度 - * @return AMapNaviPoint类对象id - */ -+ (AMapLocationPoint *)locationWithLatitude:(CGFloat)lat longitude:(CGFloat)lon; - -@end - -///POI信息 -@interface AMapLocationPOIItem : NSObject - -///id -@property (nonatomic, copy) NSString *pId; - -///名称 -@property (nonatomic, copy) NSString *name; - -///类型 -@property (nonatomic, copy) NSString *type; - -///类型编码 -@property (nonatomic, copy) NSString *typeCode; - -///地址信息 -@property (nonatomic, copy) NSString *address; - -///经纬度 -@property (nonatomic, strong) AMapLocationPoint *location; - -///电话号码 -@property (nonatomic, copy) NSString *tel; - -///省份 -@property (nonatomic, copy) NSString *province; - -///城市 -@property (nonatomic, copy) NSString *city; - -///区 -@property (nonatomic, copy) NSString *district; - -@end - -///行政区域信息 -@interface AMapLocationDistrictItem : NSObject - -///城市编码 -@property (nonatomic, copy) NSString *cityCode; - -///区域编码 -@property (nonatomic, copy) NSString *districtCode; - -///区名 -@property (nonatomic, copy) NSString *district; - -///行政区域轮廓坐标点,每个行政区可能有多个模块,每个模块的坐标点数组由AMapLocationPoint构成 -@property (nonatomic, copy) NSArray *> *polylinePoints; - -@end - -///AMapLocation CoordinateType -typedef NS_ENUM(NSUInteger, AMapLocationCoordinateType) -{ - AMapLocationCoordinateTypeBaidu = 0, /// - -#import -#import -#import - -#import -#import -#import diff --git a/Pods/AMapLocation-NO-IDFA/AMapLocationKit.framework/Headers/AMapLocationManager.h b/Pods/AMapLocation-NO-IDFA/AMapLocationKit.framework/Headers/AMapLocationManager.h deleted file mode 100644 index d151d77..0000000 --- a/Pods/AMapLocation-NO-IDFA/AMapLocationKit.framework/Headers/AMapLocationManager.h +++ /dev/null @@ -1,282 +0,0 @@ -// -// AMapLocationManager.h -// AMapLocationKit -// -// Created by AutoNavi on 15/10/22. -// Copyright © 2015年 Amap. All rights reserved. -// - -#import -#import -#import "AMapLocationCommonObj.h" -#import "AMapLocationRegionObj.h" - -/** - * @brief AMapLocatingCompletionBlock 单次定位返回Block - * @param location 定位信息 - * @param regeocode 逆地理信息 - * @param error 错误信息,参考 AMapLocationErrorCode - */ -typedef void (^AMapLocatingCompletionBlock)(CLLocation *location, AMapLocationReGeocode *regeocode, NSError *error); - -@protocol AMapLocationManagerDelegate; - -#pragma mark - AMapLocationManager - -///AMapLocationManager类。初始化之前请设置 AMapServices 中的apikey(例如:[AMapServices sharedServices].apiKey = @"您的key"),否则将无法正常使用服务. -@interface AMapLocationManager : NSObject - -///实现了 AMapLocationManagerDelegate 协议的类指针。 -@property (nonatomic, weak) id delegate; - -///设定定位的最小更新距离。单位米,默认为 kCLDistanceFilterNone,表示只要检测到设备位置发生变化就会更新位置信息。 -@property(nonatomic, assign) CLLocationDistance distanceFilter; - -///设定期望的定位精度。单位米,默认为 kCLLocationAccuracyBest。定位服务会尽可能去获取满足desiredAccuracy的定位结果,但不保证一定会得到满足期望的结果。 -///注意:设置为kCLLocationAccuracyBest或kCLLocationAccuracyBestForNavigation时,单次定位会在达到locationTimeout设定的时间后,将时间内获取到的最高精度的定位结果返回。 -///⚠️ 当iOS14及以上版本,模糊定位权限下可能拿不到设置精度的经纬度 -@property(nonatomic, assign) CLLocationAccuracy desiredAccuracy; - -///指定定位是否会被系统自动暂停。默认为NO。 -@property(nonatomic, assign) BOOL pausesLocationUpdatesAutomatically; - -///是否允许后台定位。默认为NO。只在iOS 9.0及之后起作用。设置为YES的时候必须保证 Background Modes 中的 Location updates 处于选中状态,否则会抛出异常。由于iOS系统限制,需要在定位未开始之前或定位停止之后,修改该属性的值才会有效果。 -@property(nonatomic, assign) BOOL allowsBackgroundLocationUpdates; - -///指定单次定位超时时间,默认为10s。最小值是2s。注意单次定位请求前设置。注意: 单次定位超时时间从确定了定位权限(非kCLAuthorizationStatusNotDetermined状态)后开始计算。 -@property(nonatomic, assign) NSInteger locationTimeout; - -///指定单次定位逆地理超时时间,默认为5s。最小值是2s。注意单次定位请求前设置。 -@property(nonatomic, assign) NSInteger reGeocodeTimeout; - -///连续定位是否返回逆地理信息,默认NO。 -@property (nonatomic, assign) BOOL locatingWithReGeocode; - -///逆地址语言类型,默认是AMapLocationRegionLanguageDefault -@property (nonatomic, assign) AMapLocationReGeocodeLanguage reGeocodeLanguage; - -///获取被监控的region集合。 -@property (nonatomic, readonly, copy) NSSet *monitoredRegions; - -///检测是否存在虚拟定位风险,默认为NO,不检测。 \n注意:设置为YES时,单次定位通过 AMapLocatingCompletionBlock 的error给出虚拟定位风险提示;连续定位通过 amapLocationManager:didFailWithError: 方法的error给出虚拟定位风险提示。error格式为 error.domain==AMapLocationErrorDomain; error.code==AMapLocationErrorRiskOfFakeLocation; \n附带的error的详细信息参考 error.localizedDescription 中的描述以及 error.userInfo 中的信息(error.userInfo.AMapLocationRiskyLocateResult 表示有虚拟风险的定位结果; error.userInfo.AMapLocationAccessoryInfo 表示外接辅助设备信息)。 -@property (nonatomic, assign) BOOL detectRiskOfFakeLocation; - - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 140000 - -/** - * @brief 设置定位数据回调精度模式,默认为AMapLocationAccuracyFullAndReduce。\n - 注意:如果定位时未获得定位权限,则首先会调用申请定位权限API,实际定位精度权限取决于用户的权限设置。\n - * ————————————————————————————————————————————————————————————————\n - * | 设置选项 | doRequireTemporaryFullAccuracyAuth | 异常/定位数据回调 |\n - * | AMapLocationFullAndReduceAccuracy | 会触发申请临时精确定位回调 | 如果未获得精确定位权限,则依然开启定位,回调模糊定位 |\n - * | AMapLocationFullAccuracy | 会触发申请临时精确定位回调 | 如果未获得精确定位权限,则不开启定位,回调error |\n - * | AMapLocationReduceAccuracy | 不会触发申请临时精确定位回调 | 根据当前定位精度权限,回调定位数据 |\n - * ————————————————————————————————————————————————————————————————\n - * 当设置AMapLocationFullAndReduceAccuracy时,定位数据回调可通过currentAuthorization判断当前是否是精确定位 - * @since 2.6.7 - */ -@property (nonatomic, assign) AMapLocationAccuracyMode locationAccuracyMode API_AVAILABLE(ios(14.0)); - -/** - * @brief 获取当前定位精度权限。 - * @since 2.6.7 - */ -@property (nonatomic, readonly) CLAccuracyAuthorization currentAuthorization API_AVAILABLE(ios(14.0)); - -#endif - -/** - * @brief 设备是否支持方向识别 - * @return YES:设备支持方向识别 ; NO:设备不支持支持方向识别 - */ -+ (BOOL)headingAvailable; - -/** - * @brief 开始获取设备朝向,如果设备支持方向识别,则会通过代理回调方法 - */ -- (void)startUpdatingHeading; - -/** - * @brief 停止获取设备朝向 - */ -- (void)stopUpdatingHeading; - -/** - * @brief 停止设备朝向校准显示 - */ -- (void)dismissHeadingCalibrationDisplay; - -/** - * @brief 单次定位。如果当前正在连续定位,调用此方法将会失败,返回NO。\n该方法将会根据设定的 desiredAccuracy 去获取定位信息。如果获取的定位信息精确度低于 desiredAccuracy ,将会持续的等待定位信息,直到超时后通过completionBlock返回精度最高的定位信息。\n可以通过 stopUpdatingLocation 方法去取消正在进行的单次定位请求。 - * @param withReGeocode 是否带有逆地理信息(获取逆地理信息需要联网) - * @param completionBlock 单次定位完成后的Block - * @return 是否成功添加单次定位Request - */ -- (BOOL)requestLocationWithReGeocode:(BOOL)withReGeocode completionBlock:(AMapLocatingCompletionBlock)completionBlock; - -/** - * @brief 开始连续定位。调用此方法会cancel掉所有的单次定位请求。 - */ -- (void)startUpdatingLocation; - -/** - * @brief 停止连续定位。调用此方法会cancel掉所有的单次定位请求,可以用来取消单次定位。 - */ -- (void)stopUpdatingLocation; - -/** - * @brief 开始监控指定的region。如果已经存在相同identifier的region,则之前的region将会被移除。对 AMapLocationCircleRegion 类实例,将会优先监控radius小的region。 - * @param region 要被监控的范围 - */ -- (void)startMonitoringForRegion:(AMapLocationRegion *)region __attribute__((deprecated("请使用AMapGeoFenceManager"))); - -/** - * @brief 停止监控指定的region - * @param region 要停止监控的范围 - */ -- (void)stopMonitoringForRegion:(AMapLocationRegion *)region __attribute__((deprecated("请使用AMapGeoFenceManager"))); - -/** - * @brief 查询一个region的当前状态。查询结果通过amapLocationManager:didDetermineState:forRegion:回调返回 - * @param region 要查询的region - */ -- (void)requestStateForRegion:(AMapLocationRegion *)region __attribute__((deprecated("请使用AMapGeoFenceManager"))); - -#pragma mark - Privacy 隐私合规 -/** - * @brief 更新App是否显示隐私弹窗的状态,隐私弹窗是否包含高德SDK隐私协议内容的状态,注意:必须在AMapLocationManager实例化之前调用. since 2.8.0 - * @param showStatus 隐私弹窗状态 - * @param containStatus 包含高德SDK隐私协议状态 - */ -+ (void)updatePrivacyShow:(AMapPrivacyShowStatus)showStatus privacyInfo:(AMapPrivacyInfoStatus)containStatus; -/** -* @brief 更新用户授权高德SDK隐私协议状态,注意:必须在AMapLocationManager实例化之前调用. since 2.8.0 -* @param agreeStatus 用户授权高德SDK隐私协议状态 -*/ -+ (void)updatePrivacyAgree:(AMapPrivacyAgreeStatus)agreeStatus; - -@end - -#pragma mark - AMapLocationManagerDelegate - -///AMapLocationManagerDelegate 协议定义了发生错误时的错误回调方法,连续定位的回调方法等。 -@protocol AMapLocationManagerDelegate - -@optional - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 140000 - -/** - * @brief 触发前提条件:1、plist配置NSLocationTemporaryUsageDescriptionDictionary。2、locationAccuracyMode设置为AMapLocationFullAndReduceAccuracy/AMapLocationFullAccuracy。3、当前用户已授权过定位权限,且为模糊定位权限。触发时机:满足前提条件时,再次发起定位请求会调用代理的此方法。此方法实现调用申请临时精确定位权限API即可: - * [manager requestTemporaryFullAccuracyAuthorizationWithPurposeKey:@"PurposeKey" completion:^(NSError *error){ - * if(completion){ - * completion(error); - * } - * }]; (必须调用,不然无法正常获取临时精确定位权限) - * @param manager 定位 AMapLocationManager 类。 - * @param locationManager 需要申请临时精确定位权限的locationManager。 - * @param completion 临时精确定位权限API回调结果,error: 直接返回系统error即可。 - * @since 2.6.7 - */ -- (void)amapLocationManager:(AMapLocationManager *)manager doRequireTemporaryFullAccuracyAuth:(CLLocationManager*)locationManager completion:(void(^)(NSError *error))completion; - -#endif - -/** - * @brief 当plist配置NSLocationAlwaysUsageDescription或者NSLocationAlwaysAndWhenInUseUsageDescription,并且[CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined,会调用代理的此方法。 - 此方法实现调用申请后台权限API即可:[locationManager requestAlwaysAuthorization] (必须调用,不然无法正常获取定位权限) - * @param manager 定位 AMapLocationManager 类。 - * @param locationManager 需要申请后台定位权限的locationManager。 - * @since 2.6.2 - */ -- (void)amapLocationManager:(AMapLocationManager *)manager doRequireLocationAuth:(CLLocationManager*)locationManager; - -/** - * @brief 当定位发生错误时,会调用代理的此方法。 - * @param manager 定位 AMapLocationManager 类。 - * @param error 返回的错误,参考 CLError 。 - */ -- (void)amapLocationManager:(AMapLocationManager *)manager didFailWithError:(NSError *)error; - -/** - * @brief 连续定位回调函数.注意:本方法已被废弃,如果实现了amapLocationManager:didUpdateLocation:reGeocode:方法,则本方法将不会回调。 - * @param manager 定位 AMapLocationManager 类。 - * @param location 定位结果。 - */ -- (void)amapLocationManager:(AMapLocationManager *)manager didUpdateLocation:(CLLocation *)location; - -/** - * @brief 连续定位回调函数.注意:如果实现了本方法,则定位信息不会通过amapLocationManager:didUpdateLocation:方法回调。 - * @param manager 定位 AMapLocationManager 类。 - * @param location 定位结果。 - * @param reGeocode 逆地理信息。 - */ -- (void)amapLocationManager:(AMapLocationManager *)manager didUpdateLocation:(CLLocation *)location reGeocode:(AMapLocationReGeocode *)reGeocode; - -/** - * @brief 定位权限状态改变时回调函数。注意:iOS13及之前版本回调 - * @param manager 定位 AMapLocationManager 类。 - * @param status 定位权限状态。 - */ -- (void)amapLocationManager:(AMapLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status; - -/** - * @brief 定位权限状态改变时回调函数。注意:iOS14及之后版本回调 - * @param manager 定位 AMapLocationManager 类。 - * @param locationManager 定位CLLocationManager类,可通过locationManager.authorizationStatus获取定位权限,通过locationManager.accuracyAuthorization获取定位精度权限 - */ -- (void)amapLocationManager:(AMapLocationManager *)manager locationManagerDidChangeAuthorization:(CLLocationManager*)locationManager; - -/** - * @brief 是否显示设备朝向校准 - * @param manager 定位 AMapLocationManager 类。 - * @return 是否显示设备朝向校准 - */ -- (BOOL)amapLocationManagerShouldDisplayHeadingCalibration:(AMapLocationManager *)manager; - -/** - * @brief 设备方向改变时回调函数 - * @param manager 定位 AMapLocationManager 类。 - * @param newHeading 设备朝向。 - */ -- (void)amapLocationManager:(AMapLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading; - -/** - * @brief 开始监控region回调函数 - * @param manager 定位 AMapLocationManager 类。 - * @param region 开始监控的region。 - */ -- (void)amapLocationManager:(AMapLocationManager *)manager didStartMonitoringForRegion:(AMapLocationRegion *)region __attribute__((deprecated("请使用AMapGeoFenceManager"))); - -/** - * @brief 进入region回调函数 - * @param manager 定位 AMapLocationManager 类。 - * @param region 进入的region。 - */ -- (void)amapLocationManager:(AMapLocationManager *)manager didEnterRegion:(AMapLocationRegion *)region __attribute__((deprecated("请使用AMapGeoFenceManager"))); - -/** - * @brief 离开region回调函数 - * @param manager 定位 AMapLocationManager 类。 - * @param region 离开的region。 - */ -- (void)amapLocationManager:(AMapLocationManager *)manager didExitRegion:(AMapLocationRegion *)region __attribute__((deprecated("请使用AMapGeoFenceManager"))); - -/** - * @brief 查询region状态回调函数 - * @param manager 定位 AMapLocationManager 类。 - * @param state 查询的region的状态。 - * @param region 查询的region。 - */ -- (void)amapLocationManager:(AMapLocationManager *)manager didDetermineState:(AMapLocationRegionState)state forRegion:(AMapLocationRegion *)region __attribute__((deprecated("请使用AMapGeoFenceManager"))); - -/** - * @brief 监控region失败回调函数 - * @param manager 定位 AMapLocationManager 类。 - * @param region 失败的region。 - * @param error 错误信息,参考 AMapLocationErrorCode 。 - */ -- (void)amapLocationManager:(AMapLocationManager *)manager monitoringDidFailForRegion:(AMapLocationRegion *)region withError:(NSError *)error __attribute__((deprecated("请使用AMapGeoFenceManager"))); - -@end diff --git a/Pods/AMapLocation-NO-IDFA/AMapLocationKit.framework/Headers/AMapLocationRegionObj.h b/Pods/AMapLocation-NO-IDFA/AMapLocationKit.framework/Headers/AMapLocationRegionObj.h deleted file mode 100644 index ed74aad..0000000 --- a/Pods/AMapLocation-NO-IDFA/AMapLocationKit.framework/Headers/AMapLocationRegionObj.h +++ /dev/null @@ -1,90 +0,0 @@ -// -// AMapLocationRegionObj.h -// AMapLocationKit -// -// Created by AutoNavi on 15/11/27. -// Copyright © 2015年 Amap. All rights reserved. -// - -#import "AMapLocationCommonObj.h" - -// 以下类涉及的坐标需要使用高德坐标系坐标(GCJ02) - -#pragma mark - AMapLocationRegion - - -///AMapLocationRegion类,该类提供范围类的基本信息,并无具体实现,不要直接使用。 -@interface AMapLocationRegion : NSObject - -///AMapLocationRegion的identifier -@property (nonatomic, copy, readonly) NSString *identifier; - -///当进入region范围时是否通知,默认YES -@property (nonatomic, assign) BOOL notifyOnEntry; - -///当离开region范围时是否通知,默认YES -@property (nonatomic, assign) BOOL notifyOnExit; - -/** - * @brief 初始化方法 - * @param identifier 唯一标识符,必填,不可为nil - */ -- (instancetype)initWithIdentifier:(NSString *)identifier; - -/** - * @brief 坐标点是否在范围内 - * @param coordinate 要判断的坐标点 - * @return 是否在范围内 - */ -- (BOOL)containsCoordinate:(CLLocationCoordinate2D)coordinate; - -@end - -#pragma mark - AMapLocationCircleRegion - - -///AMapLocationCircleRegion类,定义一个圆形范围。 -@interface AMapLocationCircleRegion : AMapLocationRegion - -///中心点的经纬度坐标 -@property (nonatomic, readonly) CLLocationCoordinate2D center; - -///半径,单位:米 -@property (nonatomic, readonly) CLLocationDistance radius; - -/** - * @brief 根据中心点和半径生成圆形范围 - * @param center 中心点的经纬度坐标 - * @param radius 半径,单位:米 - * @param identifier 唯一标识符,必填,不可为nil - * @return AMapLocationCircleRegion类实例 - */ -- (instancetype)initWithCenter:(CLLocationCoordinate2D)center radius:(CLLocationDistance)radius identifier:(NSString *)identifier; - - -@end - -#pragma mark - AMapLocationPolygonRegion - - -///AMapLocationCircleRegion类,定义一个闭合多边形范围,点与点之间按顺序尾部相连, 第一个点与最后一个点相连。 -@interface AMapLocationPolygonRegion : AMapLocationRegion - -///经纬度坐标点数据 -@property (nonatomic, readonly) CLLocationCoordinate2D *coordinates; - -///经纬度坐标点的个数 -@property (nonatomic, readonly) NSInteger count; - -/** - * @brief 根据经纬度坐标数据生成闭合多边形范围 - * @param coordinates 经纬度坐标点数据,coordinates对应的内存会拷贝,调用者负责该内存的释放 - * @param count 经纬度坐标点的个数,不可小于3个 - * @param identifier 唯一标识符,必填,不可为nil - * @return AMapLocationCircleRegion类实例 - */ -- (instancetype)initWithCoordinates:(CLLocationCoordinate2D *)coordinates count:(NSInteger)count identifier:(NSString *)identifier; - - - -@end diff --git a/Pods/AMapLocation-NO-IDFA/AMapLocationKit.framework/Headers/AMapLocationVersion.h b/Pods/AMapLocation-NO-IDFA/AMapLocationKit.framework/Headers/AMapLocationVersion.h deleted file mode 100644 index ba29600..0000000 --- a/Pods/AMapLocation-NO-IDFA/AMapLocationKit.framework/Headers/AMapLocationVersion.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// AMapLoctionVersion.h -// AMapLocationKit -// -// Created by AutoNavi on 16/1/22. -// Copyright © 2016年 Amap. All rights reserved. -// - -#import -#import - -#ifndef AMapLoctionVersion_h -#define AMapLoctionVersion_h - -#define AMapLocationVersionNumber 201000 -#define AMapLocationFoundationVersionMinRequired 10700 - -// 依赖库版本检测 -#if AMapFoundationVersionNumber < AMapLocationFoundationVersionMinRequired -#error "The AMapFoundationKit version is less than minimum required, please update! Any questions please to visit http://lbs.amap.com" -#endif - -FOUNDATION_EXTERN NSString * const AMapLocationVersion; -FOUNDATION_EXTERN NSString * const AMapLocationName; - -#endif /* AMapLoctionVersion_h */ diff --git a/Pods/AMapLocation-NO-IDFA/AMapLocationKit.framework/Modules/module.modulemap b/Pods/AMapLocation-NO-IDFA/AMapLocationKit.framework/Modules/module.modulemap deleted file mode 100644 index 6a1a586..0000000 --- a/Pods/AMapLocation-NO-IDFA/AMapLocationKit.framework/Modules/module.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module AMapLocationKit { - umbrella header "AMapLocationKit.h" - - export * - module * { export * } -} diff --git a/Pods/AMapLocation-NO-IDFA/AMapLocationKit.framework/version.txt b/Pods/AMapLocation-NO-IDFA/AMapLocationKit.framework/version.txt deleted file mode 100644 index 2cc6ae7..0000000 --- a/Pods/AMapLocation-NO-IDFA/AMapLocationKit.framework/version.txt +++ /dev/null @@ -1 +0,0 @@ -2.10.0+loc.2427ccc diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/.DS_Store b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/.DS_Store deleted file mode 100644 index 66ac937..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/.DS_Store and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/3d_navi_sky_day.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/3d_navi_sky_day.data deleted file mode 100644 index 1987d45..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/3d_navi_sky_day.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/3d_sky_day.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/3d_sky_day.data deleted file mode 100644 index c0975de..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/3d_sky_day.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/3d_sky_night.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/3d_sky_night.data deleted file mode 100644 index 3f1eeaa..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/3d_sky_night.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/1015_1.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/1015_1.png deleted file mode 100644 index 3edab19..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/1015_1.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/1015_2.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/1015_2.png deleted file mode 100644 index 0f4044d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/1015_2.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/1016_1.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/1016_1.png deleted file mode 100644 index 3285339..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/1016_1.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/1016_2.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/1016_2.png deleted file mode 100644 index 18c1614..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/1016_2.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/cross_bk_grass_day.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/cross_bk_grass_day.png deleted file mode 100644 index b699004..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/cross_bk_grass_day.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/cross_bk_grass_night.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/cross_bk_grass_night.png deleted file mode 100644 index a42e8ce..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/cross_bk_grass_night.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/cross_sky_day.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/cross_sky_day.png deleted file mode 100644 index 8af2167..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/cross_sky_day.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/cross_sky_night.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/cross_sky_night.png deleted file mode 100644 index 80322ab..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/cross_sky_night.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/crossing_day_bk.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/crossing_day_bk.data deleted file mode 100644 index fff1b61..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/crossing_day_bk.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/crossing_nigth_bk.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/crossing_nigth_bk.data deleted file mode 100644 index 928155e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/crossing_nigth_bk.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/d_yellow_day.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/d_yellow_day.png deleted file mode 100644 index 39a10c5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/d_yellow_day.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/d_yellow_night.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/d_yellow_night.png deleted file mode 100644 index 2b5f54c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/d_yellow_night.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/exit_label_bk_main_day.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/exit_label_bk_main_day.png deleted file mode 100644 index 2cc5acb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/exit_label_bk_main_day.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/exit_label_bk_secondary_day.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/exit_label_bk_secondary_day.png deleted file mode 100644 index 55f58a1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/exit_label_bk_secondary_day.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/grass_day.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/grass_day.png deleted file mode 100644 index a57fe33..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/grass_day.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/grass_night.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/grass_night.png deleted file mode 100644 index 0820386..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/grass_night.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/icons_42_18_1615218949.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/icons_42_18_1615218949.data deleted file mode 100644 index f6f2d71..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/icons_42_18_1615218949.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/road_bottom_day.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/road_bottom_day.png deleted file mode 100644 index 5ef99c4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/road_bottom_day.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/road_bottom_night.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/road_bottom_night.png deleted file mode 100644 index 0e0bb9e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/road_bottom_night.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/roadbk_main_day.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/roadbk_main_day.png deleted file mode 100644 index c3732fe..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/roadbk_main_day.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/roadbk_main_night.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/roadbk_main_night.png deleted file mode 100644 index f9f1ae2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/VM3DRes/roadbk_main_night.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/anscii.fnt b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/anscii.fnt deleted file mode 100644 index cccf994..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/anscii.fnt +++ /dev/null @@ -1,191 +0,0 @@ -info face="Arial" size=32 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1 outline=0 -common lineHeight=32 base=26 scaleW=256 scaleH=256 pages=1 packed=0 alphaChnl=1 redChnl=0 greenChnl=0 blueChnl=0 -page id=0 file="anscii_0.png" -chars count=95 -char id=32 x=110 y=22 width=3 height=1 xoffset=-1 yoffset=31 xadvance=8 page=0 chnl=15 -char id=33 x=199 y=63 width=4 height=20 xoffset=2 yoffset=6 xadvance=8 page=0 chnl=15 -char id=34 x=242 y=79 width=10 height=7 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=15 -char id=35 x=0 y=48 width=16 height=20 xoffset=-1 yoffset=6 xadvance=15 page=0 chnl=15 -char id=36 x=94 y=0 width=15 height=23 xoffset=0 yoffset=5 xadvance=15 page=0 chnl=15 -char id=37 x=161 y=0 width=22 height=20 xoffset=1 yoffset=6 xadvance=24 page=0 chnl=15 -char id=38 x=132 y=21 width=17 height=20 xoffset=1 yoffset=6 xadvance=18 page=0 chnl=15 -char id=39 x=0 y=106 width=5 height=7 xoffset=0 yoffset=6 xadvance=5 page=0 chnl=15 -char id=40 x=47 y=0 width=8 height=25 xoffset=1 yoffset=6 xadvance=9 page=0 chnl=15 -char id=41 x=56 y=0 width=8 height=25 xoffset=1 yoffset=6 xadvance=9 page=0 chnl=15 -char id=42 x=230 y=79 width=11 height=8 xoffset=0 yoffset=6 xadvance=11 page=0 chnl=15 -char id=43 x=187 y=84 width=14 height=12 xoffset=1 yoffset=10 xadvance=16 page=0 chnl=15 -char id=44 x=6 y=106 width=4 height=6 xoffset=2 yoffset=24 xadvance=8 page=0 chnl=15 -char id=45 x=53 y=106 width=9 height=2 xoffset=0 yoffset=18 xadvance=9 page=0 chnl=15 -char id=46 x=209 y=79 width=4 height=2 xoffset=2 yoffset=24 xadvance=8 page=0 chnl=15 -char id=47 x=153 y=63 width=10 height=20 xoffset=-1 yoffset=6 xadvance=8 page=0 chnl=15 -char id=48 x=15 y=69 width=14 height=20 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=15 -char id=49 x=164 y=63 width=9 height=20 xoffset=2 yoffset=6 xadvance=15 page=0 chnl=15 -char id=50 x=134 y=42 width=14 height=20 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=15 -char id=51 x=59 y=68 width=13 height=20 xoffset=1 yoffset=6 xadvance=15 page=0 chnl=15 -char id=52 x=179 y=42 width=14 height=20 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=15 -char id=53 x=45 y=69 width=13 height=20 xoffset=1 yoffset=6 xadvance=15 page=0 chnl=15 -char id=54 x=194 y=42 width=14 height=20 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=15 -char id=55 x=115 y=66 width=13 height=20 xoffset=1 yoffset=6 xadvance=15 page=0 chnl=15 -char id=56 x=102 y=45 width=15 height=20 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=15 -char id=57 x=118 y=43 width=15 height=20 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=15 -char id=58 x=251 y=63 width=4 height=15 xoffset=2 yoffset=11 xadvance=8 page=0 chnl=15 -char id=59 x=204 y=63 width=4 height=19 xoffset=2 yoffset=11 xadvance=8 page=0 chnl=15 -char id=60 x=172 y=84 width=14 height=13 xoffset=1 yoffset=10 xadvance=16 page=0 chnl=15 -char id=61 x=215 y=79 width=14 height=8 xoffset=1 yoffset=12 xadvance=16 page=0 chnl=15 -char id=62 x=157 y=84 width=14 height=13 xoffset=1 yoffset=10 xadvance=16 page=0 chnl=15 -char id=63 x=101 y=68 width=13 height=20 xoffset=1 yoffset=6 xadvance=15 page=0 chnl=15 -char id=64 x=0 y=0 width=26 height=26 xoffset=1 yoffset=6 xadvance=27 page=0 chnl=15 -char id=65 x=227 y=0 width=19 height=20 xoffset=-1 yoffset=6 xadvance=18 page=0 chnl=15 -char id=66 x=17 y=48 width=16 height=20 xoffset=1 yoffset=6 xadvance=18 page=0 chnl=15 -char id=67 x=58 y=26 width=18 height=20 xoffset=1 yoffset=6 xadvance=20 page=0 chnl=15 -char id=68 x=168 y=21 width=17 height=20 xoffset=2 yoffset=6 xadvance=20 page=0 chnl=15 -char id=69 x=51 y=47 width=16 height=20 xoffset=1 yoffset=6 xadvance=18 page=0 chnl=15 -char id=70 x=240 y=21 width=15 height=20 xoffset=2 yoffset=6 xadvance=17 page=0 chnl=15 -char id=71 x=0 y=27 width=19 height=20 xoffset=1 yoffset=6 xadvance=21 page=0 chnl=15 -char id=72 x=186 y=21 width=17 height=20 xoffset=1 yoffset=6 xadvance=19 page=0 chnl=15 -char id=73 x=184 y=63 width=4 height=20 xoffset=2 yoffset=6 xadvance=8 page=0 chnl=15 -char id=74 x=129 y=64 width=12 height=20 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=15 -char id=75 x=39 y=26 width=18 height=20 xoffset=1 yoffset=6 xadvance=18 page=0 chnl=15 -char id=76 x=0 y=69 width=14 height=20 xoffset=1 yoffset=6 xadvance=15 page=0 chnl=15 -char id=77 x=184 y=0 width=21 height=20 xoffset=1 yoffset=6 xadvance=23 page=0 chnl=15 -char id=78 x=96 y=24 width=17 height=20 xoffset=1 yoffset=6 xadvance=19 page=0 chnl=15 -char id=79 x=206 y=0 width=20 height=20 xoffset=1 yoffset=6 xadvance=21 page=0 chnl=15 -char id=80 x=85 y=47 width=16 height=20 xoffset=1 yoffset=6 xadvance=17 page=0 chnl=15 -char id=81 x=110 y=0 width=21 height=21 xoffset=0 yoffset=6 xadvance=21 page=0 chnl=15 -char id=82 x=77 y=26 width=18 height=20 xoffset=2 yoffset=6 xadvance=20 page=0 chnl=15 -char id=83 x=68 y=47 width=16 height=20 xoffset=1 yoffset=6 xadvance=18 page=0 chnl=15 -char id=84 x=34 y=48 width=16 height=20 xoffset=0 yoffset=6 xadvance=16 page=0 chnl=15 -char id=85 x=204 y=21 width=17 height=20 xoffset=1 yoffset=6 xadvance=19 page=0 chnl=15 -char id=86 x=222 y=21 width=17 height=20 xoffset=0 yoffset=6 xadvance=17 page=0 chnl=15 -char id=87 x=132 y=0 width=28 height=20 xoffset=0 yoffset=6 xadvance=28 page=0 chnl=15 -char id=88 x=150 y=21 width=17 height=20 xoffset=0 yoffset=6 xadvance=17 page=0 chnl=15 -char id=89 x=20 y=27 width=18 height=20 xoffset=0 yoffset=6 xadvance=18 page=0 chnl=15 -char id=90 x=114 y=22 width=17 height=20 xoffset=0 yoffset=6 xadvance=17 page=0 chnl=15 -char id=91 x=73 y=0 width=7 height=25 xoffset=1 yoffset=6 xadvance=8 page=0 chnl=15 -char id=92 x=174 y=63 width=9 height=20 xoffset=-1 yoffset=6 xadvance=8 page=0 chnl=15 -char id=93 x=65 y=0 width=7 height=25 xoffset=0 yoffset=6 xadvance=8 page=0 chnl=15 -char id=94 x=202 y=84 width=12 height=10 xoffset=0 yoffset=6 xadvance=12 page=0 chnl=15 -char id=95 x=35 y=106 width=17 height=2 xoffset=-1 yoffset=29 xadvance=15 page=0 chnl=15 -char id=96 x=28 y=106 width=6 height=4 xoffset=1 yoffset=6 xadvance=9 page=0 chnl=15 -char id=97 x=48 y=90 width=14 height=15 xoffset=0 yoffset=11 xadvance=15 page=0 chnl=15 -char id=98 x=149 y=42 width=14 height=20 xoffset=1 yoffset=6 xadvance=15 page=0 chnl=15 -char id=99 x=106 y=89 width=13 height=15 xoffset=0 yoffset=11 xadvance=14 page=0 chnl=15 -char id=100 x=164 y=42 width=14 height=20 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=15 -char id=101 x=0 y=90 width=15 height=15 xoffset=0 yoffset=11 xadvance=15 page=0 chnl=15 -char id=102 x=142 y=63 width=10 height=20 xoffset=-1 yoffset=6 xadvance=7 page=0 chnl=15 -char id=103 x=209 y=42 width=14 height=20 xoffset=0 yoffset=11 xadvance=15 page=0 chnl=15 -char id=104 x=73 y=68 width=13 height=20 xoffset=1 yoffset=6 xadvance=15 page=0 chnl=15 -char id=105 x=189 y=63 width=4 height=20 xoffset=1 yoffset=6 xadvance=6 page=0 chnl=15 -char id=106 x=81 y=0 width=7 height=25 xoffset=-2 yoffset=6 xadvance=6 page=0 chnl=15 -char id=107 x=87 y=68 width=13 height=20 xoffset=1 yoffset=6 xadvance=14 page=0 chnl=15 -char id=108 x=194 y=63 width=4 height=20 xoffset=1 yoffset=6 xadvance=6 page=0 chnl=15 -char id=109 x=209 y=63 width=20 height=15 xoffset=1 yoffset=11 xadvance=22 page=0 chnl=15 -char id=110 x=78 y=89 width=13 height=15 xoffset=1 yoffset=11 xadvance=15 page=0 chnl=15 -char id=111 x=16 y=90 width=15 height=15 xoffset=0 yoffset=11 xadvance=15 page=0 chnl=15 -char id=112 x=30 y=69 width=14 height=20 xoffset=1 yoffset=11 xadvance=15 page=0 chnl=15 -char id=113 x=224 y=42 width=14 height=20 xoffset=0 yoffset=11 xadvance=15 page=0 chnl=15 -char id=114 x=147 y=84 width=9 height=15 xoffset=1 yoffset=11 xadvance=9 page=0 chnl=15 -char id=115 x=63 y=89 width=14 height=15 xoffset=0 yoffset=11 xadvance=14 page=0 chnl=15 -char id=116 x=247 y=0 width=8 height=20 xoffset=0 yoffset=6 xadvance=8 page=0 chnl=15 -char id=117 x=92 y=89 width=13 height=15 xoffset=1 yoffset=11 xadvance=15 page=0 chnl=15 -char id=118 x=32 y=90 width=15 height=15 xoffset=-1 yoffset=11 xadvance=13 page=0 chnl=15 -char id=119 x=230 y=63 width=20 height=15 xoffset=-1 yoffset=11 xadvance=19 page=0 chnl=15 -char id=120 x=134 y=85 width=12 height=15 xoffset=0 yoffset=11 xadvance=12 page=0 chnl=15 -char id=121 x=239 y=42 width=14 height=20 xoffset=0 yoffset=11 xadvance=14 page=0 chnl=15 -char id=122 x=120 y=87 width=13 height=15 xoffset=0 yoffset=11 xadvance=13 page=0 chnl=15 -char id=123 x=37 y=0 width=9 height=25 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=15 -char id=124 x=89 y=0 width=4 height=25 xoffset=1 yoffset=6 xadvance=6 page=0 chnl=15 -char id=125 x=27 y=0 width=9 height=25 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=15 -char id=126 x=11 y=106 width=16 height=4 xoffset=0 yoffset=14 xadvance=16 page=0 chnl=15 -kernings count=91 -kerning first=32 second=65 amount=-2 -kerning first=32 second=84 amount=-1 -kerning first=32 second=89 amount=-1 -kerning first=121 second=46 amount=-2 -kerning first=121 second=44 amount=-2 -kerning first=119 second=46 amount=-2 -kerning first=119 second=44 amount=-2 -kerning first=118 second=46 amount=-2 -kerning first=118 second=44 amount=-2 -kerning first=114 second=46 amount=-2 -kerning first=49 second=49 amount=-2 -kerning first=65 second=32 amount=-2 -kerning first=65 second=84 amount=-2 -kerning first=65 second=86 amount=-2 -kerning first=65 second=87 amount=-1 -kerning first=65 second=89 amount=-2 -kerning first=65 second=118 amount=-1 -kerning first=65 second=119 amount=-1 -kerning first=65 second=121 amount=-1 -kerning first=114 second=44 amount=-2 -kerning first=70 second=44 amount=-3 -kerning first=70 second=46 amount=-3 -kerning first=70 second=65 amount=-2 -kerning first=76 second=32 amount=-1 -kerning first=76 second=84 amount=-2 -kerning first=76 second=86 amount=-2 -kerning first=76 second=87 amount=-2 -kerning first=76 second=89 amount=-2 -kerning first=76 second=121 amount=-1 -kerning first=102 second=102 amount=-1 -kerning first=80 second=32 amount=-1 -kerning first=80 second=44 amount=-4 -kerning first=80 second=46 amount=-4 -kerning first=80 second=65 amount=-2 -kerning first=82 second=84 amount=-1 -kerning first=82 second=86 amount=-1 -kerning first=82 second=87 amount=-1 -kerning first=82 second=89 amount=-1 -kerning first=84 second=32 amount=-1 -kerning first=84 second=44 amount=-3 -kerning first=84 second=45 amount=-2 -kerning first=84 second=46 amount=-3 -kerning first=84 second=58 amount=-3 -kerning first=89 second=118 amount=-2 -kerning first=84 second=65 amount=-2 -kerning first=84 second=79 amount=-1 -kerning first=84 second=97 amount=-3 -kerning first=84 second=99 amount=-3 -kerning first=84 second=101 amount=-3 -kerning first=84 second=105 amount=-1 -kerning first=84 second=111 amount=-3 -kerning first=84 second=114 amount=-1 -kerning first=84 second=115 amount=-3 -kerning first=84 second=117 amount=-1 -kerning first=84 second=119 amount=-2 -kerning first=84 second=121 amount=-2 -kerning first=86 second=44 amount=-3 -kerning first=86 second=45 amount=-2 -kerning first=86 second=46 amount=-3 -kerning first=86 second=58 amount=-1 -kerning first=89 second=117 amount=-2 -kerning first=86 second=65 amount=-2 -kerning first=86 second=97 amount=-2 -kerning first=86 second=101 amount=-2 -kerning first=86 second=105 amount=-1 -kerning first=86 second=111 amount=-2 -kerning first=86 second=114 amount=-1 -kerning first=86 second=117 amount=-1 -kerning first=86 second=121 amount=-1 -kerning first=87 second=44 amount=-2 -kerning first=87 second=45 amount=-1 -kerning first=87 second=46 amount=-2 -kerning first=87 second=58 amount=-1 -kerning first=89 second=113 amount=-3 -kerning first=87 second=65 amount=-1 -kerning first=87 second=97 amount=-1 -kerning first=87 second=101 amount=-1 -kerning first=89 second=112 amount=-2 -kerning first=87 second=111 amount=-1 -kerning first=87 second=114 amount=-1 -kerning first=87 second=117 amount=-1 -kerning first=89 second=111 amount=-3 -kerning first=89 second=32 amount=-1 -kerning first=89 second=44 amount=-4 -kerning first=89 second=45 amount=-3 -kerning first=89 second=46 amount=-4 -kerning first=89 second=58 amount=-2 -kerning first=89 second=105 amount=-1 -kerning first=89 second=65 amount=-2 -kerning first=89 second=97 amount=-2 -kerning first=89 second=101 amount=-3 diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/anscii_0.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/anscii_0.png deleted file mode 100644 index 25305da..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/anscii_0.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/bktile.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/bktile.data deleted file mode 100644 index bb2a17f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/bktile.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/bktile_n.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/bktile_n.data deleted file mode 100644 index 5181b70..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/bktile_n.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/config_1_21_1680057984.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/config_1_21_1680057984.data deleted file mode 100644 index 7efbd3c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/config_1_21_1680057984.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/config_2_21_1680057984.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/config_2_21_1680057984.data deleted file mode 100644 index 9dbd2dd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/config_2_21_1680057984.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/dash.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/dash.data deleted file mode 100644 index da1b48f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/dash.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/dash_cd.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/dash_cd.data deleted file mode 100644 index 3a59032..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/dash_cd.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/dash_tq.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/dash_tq.data deleted file mode 100644 index c721927..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/dash_tq.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_10_21_1680057953.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_10_21_1680057953.data deleted file mode 100644 index 5ab8393..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_10_21_1680057953.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_11_21_1680057953.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_11_21_1680057953.data deleted file mode 100644 index ee400c7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_11_21_1680057953.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_1_21_1680057953.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_1_21_1680057953.data deleted file mode 100644 index d2e63af..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_1_21_1680057953.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_201_21_1680057953.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_201_21_1680057953.data deleted file mode 100644 index 4b7b983..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_201_21_1680057953.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_25_21_1680057953.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_25_21_1680057953.data deleted file mode 100644 index 5c0c802..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_25_21_1680057953.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_2_21_1680057953.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_2_21_1680057953.data deleted file mode 100644 index 3beebed..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_2_21_1680057953.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_3_21_1680057953.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_3_21_1680057953.data deleted file mode 100644 index 20c6c74..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_3_21_1680057953.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_40_21_1680057953.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_40_21_1680057953.data deleted file mode 100644 index 73f33c3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_40_21_1680057953.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_4_21_1680057953.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_4_21_1680057953.data deleted file mode 100644 index 23b3fdc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_4_21_1680057953.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_50_21_1680057953.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_50_21_1680057953.data deleted file mode 100644 index 712fd75..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_50_21_1680057953.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_5_21_1680057953.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_5_21_1680057953.data deleted file mode 100644 index fcb9110..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_5_21_1680057953.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_60_21_1680057953.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_60_21_1680057953.data deleted file mode 100644 index 75f0071..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_60_21_1680057953.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_65_21_1680057953.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_65_21_1680057953.data deleted file mode 100644 index f406c01..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_65_21_1680057953.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_6_21_1680057953.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_6_21_1680057953.data deleted file mode 100644 index 7a0048b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_6_21_1680057953.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_74_21_1680057953.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_74_21_1680057953.data deleted file mode 100644 index 0ad6c4b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_74_21_1680057953.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_9_21_1684757273.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_9_21_1684757273.data deleted file mode 100644 index 2ff2f7b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/icons_9_21_1684757273.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/laneprofile_1_21_1681099982.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/laneprofile_1_21_1681099982.data deleted file mode 100644 index 7639641..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/laneprofile_1_21_1681099982.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/laneprofile_low_1_21_1680057984.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/laneprofile_low_1_21_1680057984.data deleted file mode 100644 index ade61e5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/laneprofile_low_1_21_1680057984.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/laneprofile_mid_1_21_1680057984.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/laneprofile_mid_1_21_1680057984.data deleted file mode 100644 index ade61e5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/laneprofile_mid_1_21_1680057984.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/lineround.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/lineround.data deleted file mode 100644 index 0231b37..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/lineround.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/mapprofile_1_21_1680057984.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/mapprofile_1_21_1680057984.data deleted file mode 100644 index 5c9426e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/mapprofile_1_21_1680057984.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/mapprofile_2_21_1680057984.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/mapprofile_2_21_1680057984.data deleted file mode 100644 index f8d7989..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/mapprofile_2_21_1680057984.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/search_scenic_icon.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/search_scenic_icon.data deleted file mode 100644 index 896934b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/search_scenic_icon.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_0_21_1681133945.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_0_21_1681133945.data deleted file mode 100644 index e37a1e9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_0_21_1681133945.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_100_s_21_1670999202.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_100_s_21_1670999202.data deleted file mode 100644 index 59ecb28..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_100_s_21_1670999202.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_16_s_21_1678776309.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_16_s_21_1678776309.data deleted file mode 100644 index 7c2cdbe..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_16_s_21_1678776309.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_17_s_21_1655347084.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_17_s_21_1655347084.data deleted file mode 100644 index 664b73f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_17_s_21_1655347084.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_18_s_21_1678776921.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_18_s_21_1678776921.data deleted file mode 100644 index 0226e55..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_18_s_21_1678776921.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_19_s_21_1678776357.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_19_s_21_1678776357.data deleted file mode 100644 index 2b74458..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_19_s_21_1678776357.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_1_d_21_1716369317.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_1_d_21_1716369317.data deleted file mode 100644 index e9c51c5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_1_d_21_1716369317.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_1_s_21_1716369317.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_1_s_21_1716369317.data deleted file mode 100644 index 75dc23b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_1_s_21_1716369317.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_1_sh_21_1684757273.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_1_sh_21_1684757273.data deleted file mode 100644 index e9fec1d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_1_sh_21_1684757273.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_1_sh_l_21_1684757273.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_1_sh_l_21_1684757273.data deleted file mode 100644 index 3baf8bf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_1_sh_l_21_1684757273.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_1_sh_m_21_1684757273.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_1_sh_m_21_1684757273.data deleted file mode 100644 index 7cdb22a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_1_sh_m_21_1684757273.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_1_sl_21_1716369317.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_1_sl_21_1716369317.data deleted file mode 100644 index 920f651..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_1_sl_21_1716369317.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_29_s_21_1679988739.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_29_s_21_1679988739.data deleted file mode 100644 index 4d8e8dd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_29_s_21_1679988739.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_2_d_21_1685432206.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_2_d_21_1685432206.data deleted file mode 100644 index 85c6581..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_2_d_21_1685432206.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_2_s_21_1685432206.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_2_s_21_1685432206.data deleted file mode 100644 index e318a34..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_2_s_21_1685432206.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_2_sh_21_1684757273.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_2_sh_21_1684757273.data deleted file mode 100644 index 3ec5692..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_2_sh_21_1684757273.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_2_sh_l_21_1684757273.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_2_sh_l_21_1684757273.data deleted file mode 100644 index 45a3111..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_2_sh_l_21_1684757273.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_2_sh_m_21_1684757273.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_2_sh_m_21_1684757273.data deleted file mode 100644 index c96827e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_2_sh_m_21_1684757273.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_2_sl_21_1685432206.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_2_sl_21_1685432206.data deleted file mode 100644 index fc2299d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_2_sl_21_1685432206.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_35_s_21_1681131121.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_35_s_21_1681131121.data deleted file mode 100644 index eb93147..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_35_s_21_1681131121.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_35_sh_21_1680057953.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_35_sh_21_1680057953.data deleted file mode 100644 index 22d0943..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_35_sh_21_1680057953.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_35_sl_21_1681131121.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_35_sl_21_1681131121.data deleted file mode 100644 index 0ecf7a4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_35_sl_21_1681131121.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_36_s_21_1678777060.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_36_s_21_1678777060.data deleted file mode 100644 index 6a9c172..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_36_s_21_1678777060.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_36_sh_21_1680057953.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_36_sh_21_1680057953.data deleted file mode 100644 index 5f82118..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_36_sh_21_1680057953.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_36_sl_21_1678777060.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_36_sl_21_1678777060.data deleted file mode 100644 index bf52789..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_36_sl_21_1678777060.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_38_s_21_1678777083.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_38_s_21_1678777083.data deleted file mode 100644 index 5e6601c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_38_s_21_1678777083.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_39_s_21_1678777105.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_39_s_21_1678777105.data deleted file mode 100644 index 8a824e0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_39_s_21_1678777105.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_3_s_21_1678710524.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_3_s_21_1678710524.data deleted file mode 100644 index 79fca9c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_3_s_21_1678710524.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_4_s_21_1685348571.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_4_s_21_1685348571.data deleted file mode 100644 index aedc303..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_4_s_21_1685348571.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_50_s_21_1675145929.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_50_s_21_1675145929.data deleted file mode 100644 index aa5d3b0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_50_s_21_1675145929.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_5_s_21_1685348588.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_5_s_21_1685348588.data deleted file mode 100644 index 8bd65d1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_5_s_21_1685348588.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_6_s_21_1678776860.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_6_s_21_1678776860.data deleted file mode 100644 index a37b1c5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_6_s_21_1678776860.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_8_s_21_1678776272.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_8_s_21_1678776272.data deleted file mode 100644 index e39b608..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/style_8_s_21_1678776272.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/styleiconslist.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/styleiconslist.data deleted file mode 100644 index a5619f1..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/styleiconslist.data +++ /dev/null @@ -1,57 +0,0 @@ -56 -config_1_21_1680057984.data -config_2_21_1680057984.data -icons_9_21_1684757273.data -icons_10_21_1680057953.data -icons_11_21_1680057953.data -icons_1_21_1680057953.data -icons_201_21_1680057953.data -icons_25_21_1680057953.data -icons_2_21_1680057953.data -icons_3_21_1680057953.data -icons_40_21_1680057953.data -icons_4_21_1680057953.data -icons_50_21_1680057953.data -icons_5_21_1680057953.data -icons_60_21_1680057953.data -icons_65_21_1680057953.data -icons_6_21_1680057953.data -icons_74_21_1680057953.data -laneprofile_1_21_1681099982.data -laneprofile_low_1_21_1680057984.data -laneprofile_mid_1_21_1680057984.data -mapprofile_1_21_1680057984.data -mapprofile_2_21_1680057984.data -style_0_21_1681133945.data -style_16_s_21_1678776309.data -style_17_s_21_1655347084.data -style_18_s_21_1678776921.data -style_19_s_21_1678776357.data -style_1_d_21_1716369317.data -style_1_s_21_1716369317.data -style_1_sh_21_1684757273.data -style_1_sh_l_21_1684757273.data -style_1_sh_m_21_1684757273.data -style_1_sl_21_1716369317.data -style_29_s_21_1679988739.data -style_2_d_21_1685432206.data -style_2_s_21_1685432206.data -style_2_sh_21_1684757273.data -style_2_sh_l_21_1684757273.data -style_2_sh_m_21_1684757273.data -style_2_sl_21_1685432206.data -style_35_s_21_1681131121.data -style_35_sh_21_1680057953.data -style_35_sl_21_1681131121.data -style_36_s_21_1678777060.data -style_36_sh_21_1680057953.data -style_36_sl_21_1678777060.data -style_38_s_21_1678777083.data -style_39_s_21_1678777105.data -style_3_s_21_1678710524.data -style_4_s_21_1685348571.data -style_50_s_21_1675145929.data -style_5_s_21_1685348588.data -style_6_s_21_1678776860.data -style_8_s_21_1678776272.data -style_100_s_21_1670999202.data diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc3d_allinone.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc3d_allinone.data deleted file mode 100644 index 6d8baaa..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc3d_allinone.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc3d_blind_allinone.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc3d_blind_allinone.data deleted file mode 100644 index 34eb198..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc3d_blind_allinone.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc3d_l_allinone.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc3d_l_allinone.data deleted file mode 100644 index 75a6b11..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc3d_l_allinone.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc3d_n_allinone.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc3d_n_allinone.data deleted file mode 100644 index b71d16a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc3d_n_allinone.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc3d_n_l_allinone.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc3d_n_l_allinone.data deleted file mode 100644 index 87509cf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc3d_n_l_allinone.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc_allinone.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc_allinone.data deleted file mode 100644 index cfdd6a3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc_allinone.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc_blind_allinone.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc_blind_allinone.data deleted file mode 100644 index 61e3f66..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc_blind_allinone.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc_l_allinone.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc_l_allinone.data deleted file mode 100644 index b7adf48..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc_l_allinone.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc_n_allinone.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc_n_allinone.data deleted file mode 100644 index 339188c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc_n_allinone.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc_n_l_allinone.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc_n_l_allinone.data deleted file mode 100644 index 26a0a70..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/AMap3D.bundle/tmc_n_l_allinone.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/GNaviConfig.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/GNaviConfig.xml deleted file mode 100644 index fb3eff1..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/GNaviConfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - ./data/ - ./diff/ - ./res900/ - ./log/ - - diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/customStyle/style-for-custom_0_18_1620911152.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/customStyle/style-for-custom_0_18_1620911152.data deleted file mode 100644 index 3d0d136..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/customStyle/style-for-custom_0_18_1620911152.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/high-frequency-devices.plist b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/high-frequency-devices.plist deleted file mode 100644 index df99713..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/high-frequency-devices.plist +++ /dev/null @@ -1,12 +0,0 @@ - - - - - iPhone14,2 - iPhone14,3 - iPhone15,2 - iPhone15,3 - iPhone16,1 - iPhone16,2 - - diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/icons.bundle/icons_1_18_1620803672.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/icons.bundle/icons_1_18_1620803672.data deleted file mode 100644 index e54cc68..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/icons.bundle/icons_1_18_1620803672.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/icons.bundle/icons_2_18_1620803665.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/icons.bundle/icons_2_18_1620803665.data deleted file mode 100644 index 4db9e20..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/icons.bundle/icons_2_18_1620803665.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/icons.bundle/icons_4_18_1624863920.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/icons.bundle/icons_4_18_1624863920.data deleted file mode 100644 index 4754659..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/icons.bundle/icons_4_18_1624863920.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/icons.bundle/icons_50_18_1621241047.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/icons.bundle/icons_50_18_1621241047.data deleted file mode 100644 index bfba766..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/icons.bundle/icons_50_18_1621241047.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/arrow_line_3d_inner.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/arrow_line_3d_inner.png deleted file mode 100644 index 11a0b1a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/arrow_line_3d_inner.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/arrow_line_3d_outer.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/arrow_line_3d_outer.png deleted file mode 100644 index f2b40cb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/arrow_line_3d_outer.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/arrow_line_3d_shadow.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/arrow_line_3d_shadow.png deleted file mode 100644 index e531d68..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/arrow_line_3d_shadow.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/arrow_line_inner.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/arrow_line_inner.png deleted file mode 100644 index 6c3e709..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/arrow_line_inner.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/arrow_line_outer.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/arrow_line_outer.png deleted file mode 100644 index 26ddb2c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/arrow_line_outer.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/calloutArrowMask.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/calloutArrowMask.png deleted file mode 100644 index a89c653..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/calloutArrowMask.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/calloutArrowMask@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/calloutArrowMask@2x.png deleted file mode 100644 index f3e2cf2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/calloutArrowMask@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/greenPin.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/greenPin.png deleted file mode 100644 index 20d0424..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/greenPin.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/greenPin@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/greenPin@2x.png deleted file mode 100644 index 54d0460..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/greenPin@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/greenPin@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/greenPin@3x.png deleted file mode 100644 index cd5c6a3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/greenPin@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/greenPin_lift.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/greenPin_lift.png deleted file mode 100644 index 48f5c1b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/greenPin_lift.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/greenPin_lift@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/greenPin_lift@2x.png deleted file mode 100644 index 20d15d7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/greenPin_lift@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/greenPin_lift@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/greenPin_lift@3x.png deleted file mode 100644 index f2598b7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/greenPin_lift@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/infowindow.jpg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/infowindow.jpg deleted file mode 100644 index 03ddf73..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/infowindow.jpg and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/lineDashTexture.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/lineDashTexture.png deleted file mode 100644 index 20c7df8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/lineDashTexture.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/lineDashTextureDot.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/lineDashTextureDot.png deleted file mode 100644 index 1092c26..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/lineDashTextureDot.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/lineTexture.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/lineTexture.png deleted file mode 100644 index a3d7e71..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/lineTexture.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/lineTextureThin.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/lineTextureThin.png deleted file mode 100644 index 4755362..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/lineTextureThin.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/marker_blue.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/marker_blue.png deleted file mode 100644 index 6368615..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/marker_blue.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/marker_blue@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/marker_blue@2x.png deleted file mode 100644 index ddb06df..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/marker_blue@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/offline_clear@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/offline_clear@2x.png deleted file mode 100644 index aed3659..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/offline_clear@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/offline_down@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/offline_down@2x.png deleted file mode 100644 index b950a2f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/offline_down@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/offline_shouqi@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/offline_shouqi@2x.png deleted file mode 100644 index 9ac82af..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/offline_shouqi@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/offline_shouqi_2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/offline_shouqi_2@2x.png deleted file mode 100644 index b00a79b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/offline_shouqi_2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/offline_sousuo@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/offline_sousuo@2x.png deleted file mode 100644 index 23eed11..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/offline_sousuo@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/offline_zhankai@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/offline_zhankai@2x.png deleted file mode 100644 index 0056674..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/offline_zhankai@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/offline_zhankai_2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/offline_zhankai_2@2x.png deleted file mode 100644 index 86ce247..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/offline_zhankai_2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/particle_fog.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/particle_fog.png deleted file mode 100644 index f1aa1e7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/particle_fog.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/particle_haze.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/particle_haze.png deleted file mode 100644 index e24725a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/particle_haze.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/particle_rain.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/particle_rain.png deleted file mode 100644 index bcb304b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/particle_rain.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/particle_snow.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/particle_snow.png deleted file mode 100644 index 984abeb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/particle_snow.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/particle_sun_0.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/particle_sun_0.png deleted file mode 100644 index 8ffaeea..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/particle_sun_0.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/particle_sun_1.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/particle_sun_1.png deleted file mode 100644 index b57761e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/particle_sun_1.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/pin_shadow.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/pin_shadow.png deleted file mode 100644 index 4f85ff1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/pin_shadow.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/pin_shadow@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/pin_shadow@2x.png deleted file mode 100644 index 8acfc67..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/pin_shadow@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/pin_shadow@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/pin_shadow@3x.png deleted file mode 100644 index fc16658..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/pin_shadow@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/purplePin.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/purplePin.png deleted file mode 100644 index ffe3892..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/purplePin.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/purplePin@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/purplePin@2x.png deleted file mode 100644 index 4a08cf2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/purplePin@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/purplePin@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/purplePin@3x.png deleted file mode 100644 index 2f92d11..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/purplePin@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/purplePin_lift.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/purplePin_lift.png deleted file mode 100644 index bf1f8f4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/purplePin_lift.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/purplePin_lift@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/purplePin_lift@2x.png deleted file mode 100644 index ef2b2a6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/purplePin_lift@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/purplePin_lift@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/purplePin_lift@3x.png deleted file mode 100644 index d58f14f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/purplePin_lift@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/redPin.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/redPin.png deleted file mode 100644 index 1cf4744..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/redPin.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/redPin@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/redPin@2x.png deleted file mode 100644 index 0882272..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/redPin@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/redPin@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/redPin@3x.png deleted file mode 100644 index 2a66034..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/redPin@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/redPin_lift.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/redPin_lift.png deleted file mode 100644 index 24c4b9a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/redPin_lift.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/redPin_lift@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/redPin_lift@2x.png deleted file mode 100644 index cfee8aa..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/redPin_lift@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/redPin_lift@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/redPin_lift@3x.png deleted file mode 100644 index 5d90fa3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/redPin_lift@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/select_.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/select_.png deleted file mode 100644 index 5889ed2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/select_.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/select_@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/select_@2x.png deleted file mode 100644 index 5889ed2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/select_@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/select_@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/select_@3x.png deleted file mode 100644 index dd955cd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/select_@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/terrainDefault.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/terrainDefault.png deleted file mode 100644 index 11ef10f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/terrainDefault.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/traffic_texture_blue.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/traffic_texture_blue.png deleted file mode 100644 index c54767e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/traffic_texture_blue.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/traffic_texture_darkred.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/traffic_texture_darkred.png deleted file mode 100644 index 7935f1a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/traffic_texture_darkred.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/traffic_texture_gray.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/traffic_texture_gray.png deleted file mode 100644 index 2a36842..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/traffic_texture_gray.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/traffic_texture_green.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/traffic_texture_green.png deleted file mode 100644 index 1cad28c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/traffic_texture_green.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/traffic_texture_red.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/traffic_texture_red.png deleted file mode 100644 index fccb898..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/traffic_texture_red.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/traffic_texture_yellow.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/traffic_texture_yellow.png deleted file mode 100644 index b222b87..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/images/traffic_texture_yellow.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/offline/offlinePackage.plist b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/offline/offlinePackage.plist deleted file mode 100644 index 786118a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/offline/offlinePackage.plist and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/res.ck b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/res.ck deleted file mode 100644 index 53bd2cf..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/res.ck +++ /dev/null @@ -1 +0,0 @@ -6a99be7e3b71ecdfbba3067b4547be1f \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/res.zip b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/res.zip deleted file mode 100644 index 3e01a9f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/res.zip and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/skybox-1/back.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/skybox-1/back.png deleted file mode 100644 index 3593e2a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/skybox-1/back.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/skybox-1/bottom.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/skybox-1/bottom.png deleted file mode 100644 index 7275992..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/skybox-1/bottom.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/skybox-1/front.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/skybox-1/front.png deleted file mode 100644 index 3497949..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/skybox-1/front.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/skybox-1/left.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/skybox-1/left.png deleted file mode 100644 index 3728f1a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/skybox-1/left.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/skybox-1/right.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/skybox-1/right.png deleted file mode 100644 index cdc69ed..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/skybox-1/right.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/skybox-1/top.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/skybox-1/top.png deleted file mode 100644 index e9488ae..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/skybox-1/top.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/terrainStyle.data b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/terrainStyle.data deleted file mode 100644 index 769b336..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle/terrainStyle.data and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/audios/autoReroute.mp3 b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/audios/autoReroute.mp3 deleted file mode 100644 index 26e205a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/audios/autoReroute.mp3 and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/audios/edog_dingdong.mp3 b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/audios/edog_dingdong.mp3 deleted file mode 100644 index 034119b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/audios/edog_dingdong.mp3 and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/audios/naviCarema.mp3 b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/audios/naviCarema.mp3 deleted file mode 100644 index 9d8926a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/audios/naviCarema.mp3 and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/audios/naviprompt.mp3 b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/audios/naviprompt.mp3 deleted file mode 100644 index f6ceb49..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/audios/naviprompt.mp3 and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/GSafeConfig.dat b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/GSafeConfig.dat deleted file mode 100644 index 83eb54c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/GSafeConfig.dat and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/changeplay.bin b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/changeplay.bin deleted file mode 100644 index b210cc1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/changeplay.bin and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/cloud_novago_detail_config.bin b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/cloud_novago_detail_config.bin deleted file mode 100644 index 6a3556a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/cloud_novago_detail_config.bin and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/custom_voice_bus.bin b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/custom_voice_bus.bin deleted file mode 100644 index fea8828..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/custom_voice_bus.bin and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/custom_voice_elec.bin b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/custom_voice_elec.bin deleted file mode 100644 index cf5239e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/custom_voice_elec.bin and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/custom_voice_ride.bin b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/custom_voice_ride.bin deleted file mode 100644 index 937c368..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/custom_voice_ride.bin and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/custom_voice_walk.bin b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/custom_voice_walk.bin deleted file mode 100644 index 4d52420..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/custom_voice_walk.bin and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/default_config.bin b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/default_config.bin deleted file mode 100644 index 8ac80ca..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/default_config.bin and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/default_config_eng.bin b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/default_config_eng.bin deleted file mode 100644 index 33c9f93..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/default_config_eng.bin and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/guidelua.bin b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/guidelua.bin deleted file mode 100644 index d439d0c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/guidelua.bin and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/lane_navi_config.bin b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/lane_navi_config.bin deleted file mode 100644 index 2f933a2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/lane_navi_config.bin and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/lane_sound_config.bin b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/lane_sound_config.bin deleted file mode 100644 index 4063149..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/lane_sound_config.bin and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/novice_config.bin b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/novice_config.bin deleted file mode 100644 index 5ece8b2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/novice_config.bin and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/odd_config.bin b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/odd_config.bin deleted file mode 100644 index ada6657..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/odd_config.bin and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/sound_base_config.bin b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/sound_base_config.bin deleted file mode 100644 index d4fb011..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/guide/sound_base_config.bin and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/route/road_config.bin b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/route/road_config.bin deleted file mode 100644 index 5d9b37e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/core/tts/route/road_config.bin and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/arrow/finearrow.json b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/arrow/finearrow.json deleted file mode 100644 index ea8a539..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/arrow/finearrow.json +++ /dev/null @@ -1 +0,0 @@ -[{"level":[18,19,20],"width":12,"headWidthRate":2.0,"headAngle":60.0,"hang":0.1,"height":0.6,"purfleWidthRatio1":0.1,"purfleWidthRatio2":0.15,"shadowPurfleWidthRatio":0.45,"surfaceColor":"0xffffffff","purfleColor1":"0xff005BC8","purfleColor2":"0xff00a2ff","wallColor":"0xff1368CF","shadowColor":"0x66000000","shadowAngle":180.0,"shadowOffsetRate":0.625,"headFittleScale":0.25,"bodyInnerFittleScale":0.25,"bodyOuterFittleScale":0.5}] diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/camera/defualtCloud.json b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/camera/defualtCloud.json deleted file mode 100644 index 64c8f86..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/camera/defualtCloud.json +++ /dev/null @@ -1 +0,0 @@ -{"condition":[{"roadClass":0,"type":5,"priority":12,"speed":40},{"roadClass":6,"type":5,"priority":12,"speed":40},{"roadClass":9,"type":4,"priority":11,"speed":20}],"breakRuleCameraSubType":[{"collision":0,"enablepop":1,"state":0,"type":14,"priority":40},{"collision":0,"enablepop":1,"state":0,"type":21,"priority":28},{"collision":0,"enablepop":1,"state":0,"type":15,"priority":39},{"collision":0,"enablepop":1,"state":0,"type":10,"priority":37},{"collision":0,"enablepop":1,"state":0,"type":19,"priority":36},{"collision":0,"enablepop":1,"state":0,"type":20,"priority":35},{"collision":0,"enablepop":1,"state":0,"type":2,"priority":34},{"collision":0,"enablepop":1,"state":0,"type":5,"priority":33},{"collision":0,"enablepop":1,"state":0,"type":18,"priority":32},{"collision":1,"enablepop":0,"state":0,"type":0,"priority":0}],"cameraType":[{"collision":0,"enablepop":1,"state":1,"type":8,"priority":60},{"collision":0,"enablepop":1,"state":1,"type":9,"priority":60},{"collision":0,"enablepop":1,"state":1,"type":0,"priority":59},{"collision":0,"enablepop":1,"state":1,"type":4,"priority":50},{"collision":0,"enablepop":1,"state":1,"type":5,"priority":49},{"collision":1,"enablepop":0,"state":0,"type":11,"priority":9},{"collision":1,"enablepop":0,"state":0,"type":3,"priority":8},{"collision":1,"enablepop":1,"state":0,"type":2,"priority":7},{"collision":1,"enablepop":1,"state":0,"type":6,"priority":6},{"collision":1,"enablepop":0,"state":0,"type":1,"priority":5}]} diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/camera/defualtCloudExt.json b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/camera/defualtCloudExt.json deleted file mode 100644 index e8d8d45..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/camera/defualtCloudExt.json +++ /dev/null @@ -1,30 +0,0 @@ -{"cameraType":[{"type":7,"state":1,"collision":0,"enablepop":1}, -{"type":25,"state":1,"collision":0,"enablepop":1}, -{"type":26,"state":1,"collision":0,"enablepop":1}, -{"type":30,"state":0,"collision":1,"enablepop":1}, -{"type":15,"state":0,"collision":1,"enablepop":1}, -{"type":10,"state":0,"collision":1,"enablepop":1}, -{"type":19,"state":0,"collision":1,"enablepop":1}, -{"type":20,"state":0,"collision":1,"enablepop":1}, -{"type":2,"state":0,"collision":1,"enablepop":1}, -{"type":5,"state":0,"collision":1,"enablepop":1}, -{"type":18,"state":0,"collision":1,"enablepop":1}, -{"type":21,"state":0,"collision":1,"enablepop":1}, -{"type":17,"state":0,"collision":1,"enablepop":1}, -{"type":99,"state":0,"collision":1,"enablepop":1}, -{"type":16,"state":0,"collision":1,"enablepop":1}, -{"type":29,"state":0,"collision":1,"enablepop":1}, -{"type":28,"state":0,"collision":1,"enablepop":1}, -{"type":24,"state":0,"collision":1,"enablepop":1}, -{"type":1,"state":0,"collision":1,"enablepop":1}, -{"type":100,"state":0,"collision":1,"enablepop":0}, -{"type":102,"state":0,"collision":1,"enablepop":0}, -{"type":6,"state":0,"collision":1,"enablepop":0}, -{"type":8,"state":0,"collision":1,"enablepop":0}, -{"type":11,"state":0,"collision":1,"enablepop":1}, -{"type":12,"state":0,"collision":1,"enablepop":1}, -{"type":13,"state":0,"collision":1,"enablepop":0}, -{"type":14,"state":0,"collision":1,"enablepop":1}, -{"type":23,"state":0,"collision":1,"enablepop":0}, -{"type":3,"state":0,"collision":1,"enablepop":0}, -{"type":4,"state":0,"collision":1,"enablepop":0}]} diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/camera/localConfig.json b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/camera/localConfig.json deleted file mode 100644 index 0e3013e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/camera/localConfig.json +++ /dev/null @@ -1 +0,0 @@ -{"popCameraDist":[{"roadClass":0,"popDistance":2000,"mustPopDistance":1000},{"roadClass":1,"popDistance":800,"mustPopDistance":800},{"roadClass":2,"popDistance":800,"mustPopDistance":800},{"roadClass":7,"popDistance":700,"mustPopDistance":700},{"roadClass":6,"popDistance":1500,"mustPopDistance":1000}],"defPopDistance":{"roadClass":0,"popDistance":500,"mustPopDistance":500}} diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/camera/titleDetailConfig.json b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/camera/titleDetailConfig.json deleted file mode 100644 index 53c9b83..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/camera/titleDetailConfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{"titles":[{"type":1,"mainTitle":"违规用灯拍照","subtitle":"抓拍违规使用转向灯、远光灯"},{"type":2,"mainTitle":"不系安全带拍照","subtitle":"抓拍前后排不系安全带"},{"type":3,"mainTitle":"违法拍照","subtitle":"抓拍违反交通规则的驾驶行为"},{"type":4,"mainTitle":"违法拍照","subtitle":"抓拍违反交通规则的驾驶行为"},{"type":5,"mainTitle":"接打电话拍照","subtitle":"抓拍驾车接打电话"},{"type":7,"mainTitle":"测速{maxspeed}拍照","subtitle":"抓拍超速行驶"},{"type":8,"mainTitle":"违法拍照","subtitle":"抓拍违反交通规则的驾驶行为"},{"type":10,"mainTitle":"闯红灯拍照","subtitle":"抓拍违规闯红灯行为"},{"type":11,"mainTitle":"尾号限行拍照","subtitle":"抓拍不按规定驾驶当日限行尾号汽车"},{"type":12,"mainTitle":"环保限行拍照","subtitle":"抓拍不符合国家环保排放标准的车辆"},{"type":13,"mainTitle":"违法拍照","subtitle":"抓拍违反交通规则的驾驶行为"},{"type":14,"mainTitle":"车道违规拍照","subtitle":"抓拍路口不按车道规定方向驾驶行为"},{"type":15,"mainTitle":"礼让行人拍照","subtitle":"抓拍行车不礼让行人"},{"type":16,"mainTitle":"逆向行驶拍照","subtitle":"抓拍路口及路段中逆向行驶"},{"type":17,"mainTitle":"违章停车拍照","subtitle":"抓拍违反道路交通安全法律停放机动车"},{"type":18,"mainTitle":"非机动车道拍照","subtitle":"抓拍违规占用非机动车道行驶"},{"type":19,"mainTitle":"公交车道拍照","subtitle":"抓拍违规占用公交车道行驶"},{"type":20,"mainTitle":"应急车道拍照","subtitle":"抓拍违规占用应急车道行驶"},{"type":21,"mainTitle":"禁止鸣笛拍照","subtitle":"抓拍违反道路交通安全法律鸣笛行为"},{"type":23,"mainTitle":"违法拍照","subtitle":"抓拍违反交通规则的驾驶行为"},{"type":24,"mainTitle":"违规过铁路道口拍照","subtitle":"抓拍通过铁路道口时违反交通信号或者管理人员指挥行驶"},{"type":25,"mainTitle":"区间测速{maxspeed}起点拍照","subtitle":"抓拍区间内超速行驶"},{"type":26,"mainTitle":"区间测速{maxspeed}终点拍照","subtitle":"抓拍区间内超速行驶"},{"type":28,"mainTitle":"车间距拍照","subtitle":"抓拍不与前车保持安全距离行驶"},{"type":29,"mainTitle":"禁止空驶拍照","subtitle":"抓拍空车(无乘客)车辆驶入多乘员通道行为"},{"type":30,"mainTitle":"压线拍照","subtitle":"抓拍违规压实线、导流线、网格线"},{"type":99,"mainTitle":"ETC计费拍照","subtitle":"仅用于计费拍照"},{"type":100,"mainTitle":"违法拍照","subtitle":"抓拍违反交通规则的驾驶行为"},{"type":101,"mainTitle":"违法拍照","subtitle":"抓拍违反交通规则的驾驶行为"}, - {"type":100000,"mainTitle":"连续区间测速拍照","subtitle":"此处为区间测速{end}的终点和下一段区间测速{start}的起点,抓拍区间内超速行驶。"}] -} diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/carLayer/smartAnimation.json b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/carLayer/smartAnimation.json deleted file mode 100644 index 7f10127..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/carLayer/smartAnimation.json +++ /dev/null @@ -1 +0,0 @@ -{"animations":[{"name":"smartAnimation","overlays":[{"overlayGuid":-2000054,"itemGuid":1,"animationType":6,"afterend":2,"animationstyle":0,"advisefps":10,"delay":0,"duration":600,"value":{"from":1,"to":0.7}},{"overlayGuid":-2000054,"itemGuid":1,"animationType":6,"afterend":2,"animationstyle":0,"advisefps":10,"delay":600,"duration":1000,"value":{"from":0.7,"to":1.0}},{"overlayGuid":-2000053,"itemGuid":4,"animationType":6,"afterend":2,"animationstyle":0,"advisefps":10,"delay":0,"duration":600,"value":{"from":1.0,"to":0.7}},{"overlayGuid":-2000053,"itemGuid":4,"animationType":6,"afterend":2,"animationstyle":0,"advisefps":10,"delay":600,"duration":1000,"value":{"from":0.7,"to":1.0}},{"overlayGuid":-2000053,"itemGuid":5,"animationType":13,"afterend":1,"delay":0,"advisefps":10,"duration":600,"value":{"from":0.6,"to":1.15}},{"overlayGuid":-2000053,"itemGuid":5,"animationType":13,"afterend":1,"advisefps":10,"delay":600,"duration":1000,"value":{"from":1.15,"to":0.6}}]}],"versionCode":0} diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/carLayer/weakAnimation.json b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/carLayer/weakAnimation.json deleted file mode 100644 index 7360a9d..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/carLayer/weakAnimation.json +++ /dev/null @@ -1 +0,0 @@ -{"animations":[{"name":"weakAnimation","overlays":[{"overlayGuid":-2000054,"itemGuid":1,"animationType":6,"afterend":2,"animationstyle":0,"advisefps":10,"delay":0,"duration":600,"value":{"from":1,"to":0.7}},{"overlayGuid":-2000054,"itemGuid":1,"animationType":6,"afterend":2,"animationstyle":0,"advisefps":10,"delay":600,"duration":1000,"value":{"from":0.7,"to":1.0}},{"overlayGuid":-2000053,"itemGuid":4,"animationType":6,"afterend":2,"animationstyle":0,"advisefps":10,"delay":0,"duration":600,"value":{"from":1.0,"to":0.7}},{"overlayGuid":-2000053,"itemGuid":4,"animationType":6,"afterend":2,"animationstyle":0,"advisefps":10,"delay":600,"duration":1000,"value":{"from":0.7,"to":1.0}}]}],"versionCode":0} diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/0024ad22e57ca581049e6a417f680b8a.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/0024ad22e57ca581049e6a417f680b8a.xml deleted file mode 100644 index a172550..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/0024ad22e57ca581049e6a417f680b8a.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
-
- -
- -
-
- -
-
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/026f6b0e972f963b7be58ea043b1bbc3.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/026f6b0e972f963b7be58ea043b1bbc3.xml deleted file mode 100644 index 82e58cd..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/026f6b0e972f963b7be58ea043b1bbc3.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - -
- - - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/03575db6ab5f6065bb7ec4c2006a0544.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/03575db6ab5f6065bb7ec4c2006a0544.xml deleted file mode 100644 index 502e2cb..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/03575db6ab5f6065bb7ec4c2006a0544.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - - -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/048989d970cad9007b71d9928c8e0fdd.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/048989d970cad9007b71d9928c8e0fdd.xml deleted file mode 100644 index 8897cbf..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/048989d970cad9007b71d9928c8e0fdd.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
- - -
- - - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/048d4be5b5cf76cf7b56db5b9da92a79.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/048d4be5b5cf76cf7b56db5b9da92a79.xml deleted file mode 100644 index 54670ae..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/048d4be5b5cf76cf7b56db5b9da92a79.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - -
- - -
- - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/04bce8b880d9d8fbdfea18f2c717e6ee.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/04bce8b880d9d8fbdfea18f2c717e6ee.xml deleted file mode 100644 index 7bd46ca..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/04bce8b880d9d8fbdfea18f2c717e6ee.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
- -
- - - - - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/074b85d99fb1c889e8ee827913190cf3.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/074b85d99fb1c889e8ee827913190cf3.xml deleted file mode 100644 index 11067d4..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/074b85d99fb1c889e8ee827913190cf3.xml +++ /dev/null @@ -1 +0,0 @@ -{"CollisionPrioLongtrip":{"mainPrio":1000,"subPrio":13050},"CollisionPrioWIAPrivatePoint":{"mainPrio":120,"subPrio":3060},"CollisionPrioWIAPrivatePointTravel":{"mainPrio":120,"subPrio":1410},"CollisionPrioTravelScenicRoute":{"mainPrio":120,"subPrio":45},"CollisionPrioLaneNaviSolidLineBubbleNew":{"mainPrio":120,"subPrio":1400},"CollisionPrioLaneNaviMixSort":{"mainPrio":120,"subPrio":1350},"CollisionPrioTravelRouteSearch":{"mainPrio":120,"subPrio":1300},"CollisionPrioTollGate1":{"mainPrio":120,"subPrio":3510},"CollisionPrioCurveMeetOpCarPoint":{"mainPrio":120,"subPrio":160},"CollisionPrioCurveMeetSector":{"mainPrio":120,"subPrio":110},"CollisionPrioCurveMeetLine":{"mainPrio":120,"subPrio":60},"CollisionPrioLaneCurveMeetSkeleton":{"mainPrio":120,"subPrio":200},"CollisionPrioLaneCurveMeetArrow":{"mainPrio":120,"subPrio":150},"CollisionPrioLaneCurveMeetSector":{"mainPrio":120,"subPrio":100},"CollisionPrioLaneCurveMeetPolygon":{"mainPrio":120,"subPrio":50},"CollisionPrioLaneNaviWhiteArrow":{"mainPrio":120,"subPrio":400},"CollisionPrioSmartMapCommon":{"mainPrio":120,"subPrio":2710},"CollisionPrioAlongWayBadWeather":{"mainPrio":120,"subPrio":2610},"CollisionDriveCongestionWordAlt":{"mainPrio":120,"subPrio":2560},"CollisionPrioSuppluDepot":{"mainPrio":120,"subPrio":2210},"CollisionGreenerBubble":{"mainPrio":120,"subPrio":2160},"CollisionPrioAlongWaySearchPittingPoint":{"mainPrio":120,"subPrio":2310},"CollisionDriveCongestionBubble":{"mainPrio":120,"subPrio":1960},"CollisionPrioMissingStationIcon":{"mainPrio":120,"subPrio":2260},"CollisionPrioNewEnergyRecommendBubble":{"mainPrio":120,"subPrio":2110},"CollisionPrioPlanTrafficEvent":{"mainPrio":120,"subPrio":910},"CollisionPrioTravelCalorieBubble":{"mainPrio":120,"subPrio":1400},"CollisionPrioConDoubleLineWithIcon":{"mainPrio":120,"subPrio":2010},"CollisionPrioGreenWave":{"mainPrio":120,"subPrio":2660},"CollisionPrioTollGate":{"mainPrio":120,"subPrio":2910},"CollisionPrioAlongWaySearchMainPoint":{"mainPrio":120,"subPrio":3410},"CollisionYawAoiGeneral":{"mainPrio":120,"subPrio":4460},"CollisionPrioBubble":{"mainPrio":1000,"subPrio":14000},"CollisionPrioCustomRouteLine":{"mainPrio":1000,"subPrio":15000},"CollisionPrioCustomRoutePoint":{"mainPrio":1000,"subPrio":15001},"CollisionPrioBusGuideBusPathLine":{"mainPrio":80,"subPrio":65},"CollisionPrioWalkEndThumbnail":{"mainPrio":120,"subPrio":1650},"CollisionPrioravelBusinessHoursPopup":{"mainPrio":120,"subPrio":1500},"CollisionPrioTravelInFloor":{"mainPrio":120,"subPrio":1600},"CollisionPrioTravelSubWayExit":{"mainPrio":120,"subPrio":1550},"CollisionPrioTravelStartEndPoint":{"mainPrio":120,"subPrio":1450},"CollisionPrioTravelNarrowRoad":{"mainPrio":120,"subPrio":1350},"CollisionPrioTravelUpAndDownHill":{"mainPrio":120,"subPrio":1250},"CollisionPrioTravelReverseBubbleTip":{"mainPrio":120,"subPrio":1200},"CollisionPrioTravelReverseIconTip":{"mainPrio":120,"subPrio":1150},"CollisionPrioNightWideRoadPoint":{"mainPrio":120,"subPrio":1100},"CollisionPrioTravelRealTimeBusPopup":{"mainPrio":120,"subPrio":1050},"CollisionPrioTravelActionPointTip":{"mainPrio":120,"subPrio":1000},"CollisionPrioTravelActionPoint":{"mainPrio":120,"subPrio":950},"CollisionPrioTravelBuildingEntry":{"mainPrio":120,"subPrio":900},"CollisionPrioTravelIncidentPopup":{"mainPrio":120,"subPrio":850},"CollisionPrioTravelRoutePathLinePopPoint":{"mainPrio":120,"subPrio":800},"CollisionPrioTravelNightSecurity":{"mainPrio":120,"subPrio":750},"CollisionPrioTravelCoolPlace":{"mainPrio":120,"subPrio":700},"CollisionPrioTravelIncidentPoint":{"mainPrio":120,"subPrio":650},"CollisionPrioTravelRoutePathLineSelPoint":{"mainPrio":120,"subPrio":600},"CollisionPrioBusGuideTipsBubble":{"mainPrio":120,"subPrio":1450},"CollisionPrioBusGuideRealTimeBubble":{"mainPrio":120,"subPrio":1400},"CollisionPrioBusGuideTaxiBubble":{"mainPrio":120,"subPrio":1350},"CollisionPrioBusStationThumbnailBubble":{"mainPrio":120,"subPrio":1300},"CollisionPrioBusGuideEndPoint":{"mainPrio":120,"subPrio":1250},"CollisionPrioBusGuideStartPoint":{"mainPrio":120,"subPrio":1200},"CollisionPrioBusGuideRouteBubbleGetOff":{"mainPrio":120,"subPrio":1150},"CollisionPrioBusGuideRouteBubbleGetOn":{"mainPrio":120,"subPrio":1100},"CollisionPrioBusGuideBubbleSwitch":{"mainPrio":120,"subPrio":1050},"CollisionPrioBusExchangeBubbleGetOn":{"mainPrio":120,"subPrio":1000},"CollisionPrioBusGuideBubbleGetOff":{"mainPrio":120,"subPrio":950},"CollisionPrioBusGuideFacility":{"mainPrio":120,"subPrio":900},"CollisionPrioBusGuideRouteFocusTips":{"mainPrio":120,"subPrio":850},"CollisionPrioBusGuideRouteCommonTips":{"mainPrio":120,"subPrio":800},"CollisionPrioBusGuideBubbleleThrough":{"mainPrio":120,"subPrio":750},"CollisionPrioBusGuideBubbleleTrain":{"mainPrio":120,"subPrio":700},"CollisionPrioBusGuideRouteGetOff":{"mainPrio":120,"subPrio":650},"CollisionPrioBusGuideRouteGetOn":{"mainPrio":120,"subPrio":600},"CollisionPrioBusGuideRealTimeSkeletonCar":{"mainPrio":120,"subPrio":550},"CollisionPrioBusGuideRealTimeCar":{"mainPrio":120,"subPrio":500},"CollisionPrioBusGuideGetOn":{"mainPrio":120,"subPrio":450},"CollisionPrioBusGuideGetOff":{"mainPrio":120,"subPrio":400},"CollisionPrioBusGuideSwitch":{"mainPrio":120,"subPrio":350},"CollisionPrioBusGuideThrough":{"mainPrio":120,"subPrio":300},"CollisionPrioBusGuideSubwayEntrance":{"mainPrio":120,"subPrio":250},"CollisionPrioBusGuideRideIcon":{"mainPrio":120,"subPrio":200},"CollisionPrioBusGuideTaxiPoint":{"mainPrio":120,"subPrio":150},"CollisionPrioBusGuideBase":{"mainPrio":120,"subPrio":100},"CollisionPrioBusGuideRealtimeLine":{"mainPrio":60,"subPrio":15},"CollisionPrioTravelGuideIncidentPopup":{"mainPrio":120,"subPrio":550},"CollisionPrioTravelGuideActionPopup":{"mainPrio":120,"subPrio":500},"CollisionPrioTravelTurnTip":{"mainPrio":120,"subPrio":450},"CollisionPrioTravelGuideBoard":{"mainPrio":120,"subPrio":400},"CollisionPrioTravelPloygonPoi":{"mainPrio":120,"subPrio":350},"CollisionPrioTravelMilestone":{"mainPrio":120,"subPrio":300},"CollisionPrioTravelAlongWay":{"mainPrio":120,"subPrio":250},"CollisionPrioTravelGuideIncidentPoint":{"mainPrio":120,"subPrio":200},"CollisionPrioTravelGuideActionPoint":{"mainPrio":120,"subPrio":150},"CollisionPrioTravelPathStartEndPoint":{"mainPrio":120,"subPrio":100},"CollisionPrioTravelNaviProjectionDot":{"mainPrio":120,"subPrio":50},"CollisionPrioTravelRoutePathLineUnselPoint":{"mainPrio":120,"subPrio":0},"CollisionPrioTravelScenicRouteFootLine":{"mainPrio":80,"subPrio":0},"CollisionPrioTravelRouteFootLine":{"mainPrio":60,"subPrio":26},"CollisionPrioTravelPloygonLine":{"mainPrio":60,"subPrio":19},"CollisionPrioTravelPathStartPointBicycle":{"mainPrio":60,"subPrio":18},"CollisionPrioLaneNaviAGroupBubble":{"mainPrio":120,"subPrio":1300},"CollisionPrioLaneNaviDistanceBubbleCamera":{"mainPrio":120,"subPrio":1250},"CollisionPrioLaneNaviBubbleCamera":{"mainPrio":120,"subPrio":1200},"CollisionPrioLaneNaviSolidLineBubble":{"mainPrio":120,"subPrio":1150},"CollisionPrioLaneNaviTrafficLightBubble":{"mainPrio":120,"subPrio":1100},"CollisionPrioLaneNaviCongestionBubble":{"mainPrio":120,"subPrio":1050},"CollisionPrioLaneNaviCongestTrafficLight":{"mainPrio":120,"subPrio":1000},"CollisionPrioLaneNaviMultiPathBubble":{"mainPrio":120,"subPrio":950},"CollisionPrioLaneNaviTrafficEventBubble":{"mainPrio":120,"subPrio":900},"CollisionPrioLaneRouteCharacteristicBubble":{"mainPrio":120,"subPrio":850},"CollisionPrioLaneNaviRouteViaIconPoint":{"mainPrio":120,"subPrio":800},"CollisionPrioLaneNaviRouteEndIconPoint":{"mainPrio":120,"subPrio":750},"CollisionPrioLaneNaviRouteStartIconPoint":{"mainPrio":120,"subPrio":700},"CollisionPrioLaneNaviCarEndLine":{"mainPrio":120,"subPrio":650},"CollisionPrioLaneNaviAGroupIcon":{"mainPrio":120,"subPrio":600},"CollisionPrioLaneNaviTrafficEventIcon":{"mainPrio":120,"subPrio":550},"CollisionPrioLaneNaviTrafficLightIcon":{"mainPrio":120,"subPrio":500},"CollisionPrioLaneNaviWingArrow":{"mainPrio":120,"subPrio":450},"CollisionPrioLaneNaviNormalCamera":{"mainPrio":120,"subPrio":350},"CollisionPrioLaneNaviEndCirclePoint":{"mainPrio":120,"subPrio":300},"CollisionPrioLaneNaviStartCirclePoint":{"mainPrio":120,"subPrio":250},"CollisionPrioLaneNaviMultiPath":{"mainPrio":120,"subPrio":0},"CollisionPrioNaviCar":{"mainPrio":1000,"subPrio":13000},"CollisionPrioNaviEndIconPoint":{"mainPrio":1000,"subPrio":12500},"CollisionPrioFocus":{"mainPrio":1000,"subPrio":0},"CollisionParkingExitBubble":{"mainPrio":120,"subPrio":4410},"CollisionPrioAGroupBubble":{"mainPrio":120,"subPrio":4360},"CollisionPrioNewRouteBubble":{"mainPrio":120,"subPrio":4310},"CollisionPrioConfusePointBubble":{"mainPrio":120,"subPrio":4260},"CollisionPrioTrafficLightBubble":{"mainPrio":120,"subPrio":4210},"CollisionPrioBubbleCamera":{"mainPrio":120,"subPrio":4160},"CollisionPrioDistanceBubbleCamera":{"mainPrio":120,"subPrio":4110},"CollisionPrioGuideDriveInterval":{"mainPrio":120,"subPrio":4060},"CollisionPrioDestinationIcon":{"mainPrio":120,"subPrio":4010},"CollisionPrioCommonTrafficLightBubble":{"mainPrio":120,"subPrio":4460},"CollisionPrioCongestionBubble":{"mainPrio":120,"subPrio":3910},"CollisionPrioCongestTrafficLight":{"mainPrio":120,"subPrio":3860},"CollisionPrioMultiRouteBubble":{"mainPrio":120,"subPrio":3810},"CollisionPrioBlueGuideBoard":{"mainPrio":120,"subPrio":3760},"CollisionPrioTREventBubble":{"mainPrio":120,"subPrio":3710},"CollisionPrioGuideDynamicNaviEventBubble":{"mainPrio":120,"subPrio":3660},"CollisionPrioDynamicRouteExBubble":{"mainPrio":120,"subPrio":3610},"CollisionPrioTrafficTrendsBubble":{"mainPrio":120,"subPrio":3560},"CollisionPrioAvoidTipsBubble":{"mainPrio":120,"subPrio":3460},"CollisionPrioRouteViaIconPoint":{"mainPrio":120,"subPrio":3360},"CollisionPrioRouteEndIconPoint":{"mainPrio":120,"subPrio":3310},"CollisionPrioRouteStartIconPoint":{"mainPrio":120,"subPrio":3260},"CollisionPrioRouteStartViaEndIconPoint":{"mainPrio":120,"subPrio":3210},"CollisionPrioPoiAreaMainEndPoint":{"mainPrio":120,"subPrio":3160},"CollisionPrioStartBubble":{"mainPrio":120,"subPrio":3110},"CollisionPrioRecommendParking":{"mainPrio":120,"subPrio":3010},"CollisionPrioAlongWayWeatherBubble":{"mainPrio":120,"subPrio":2960},"CollisionPrioGuideDynamicNaviEventIcon":{"mainPrio":120,"subPrio":2860},"CollisionPrioMissingStation":{"mainPrio":120,"subPrio":2810},"CollisionPrioDrivePass":{"mainPrio":120,"subPrio":2760},"CollisionPrioAlongWayService":{"mainPrio":120,"subPrio":2510},"CollisionPrioGuideStartViaEndIconPoint":{"mainPrio":120,"subPrio":2460},"CollisionPrioNaviLine":{"mainPrio":120,"subPrio":2410},"CollisionPrioAlongWaySearch":{"mainPrio":120,"subPrio":2360},"CollisionPrioNewEnergyRecommendNormal":{"mainPrio":120,"subPrio":2060},"CollisionPrioNewEnergyNormal":{"mainPrio":120,"subPrio":1910},"CollisionPrioAlongWayWeather":{"mainPrio":120,"subPrio":1860},"CollisionPrioFamiliarRoad":{"mainPrio":120,"subPrio":1810},"CollisionPrioAGroupDestintion":{"mainPrio":120,"subPrio":1760},"CollisionPrioAGroupName":{"mainPrio":120,"subPrio":1710},"CollisionPrioAGroupIcon":{"mainPrio":120,"subPrio":1660},"CollisionPrioEtaAbnormalAct":{"mainPrio":120,"subPrio":1560},"CollisionPrioDataMninigEvent":{"mainPrio":120,"subPrio":1510},"CollisionPrioTREvent":{"mainPrio":120,"subPrio":1460},"CollisionPrioGuideTMCIncidentEvent":{"mainPrio":120,"subPrio":1410},"CollisionPrioGuideTMCLight":{"mainPrio":120,"subPrio":1360},"CollisionPrioNormalCamera":{"mainPrio":120,"subPrio":1310},"CollisionPrioRouteLimitEvent":{"mainPrio":120,"subPrio":1260},"CollisionPrioRouteForbiddenEvent":{"mainPrio":120,"subPrio":1210},"CollisionPrioRouteIncidentOnPath":{"mainPrio":120,"subPrio":1160},"CollisionPrioPointViaCity":{"mainPrio":120,"subPrio":1110},"CollisionPrioViaRoadPoint":{"mainPrio":120,"subPrio":1060},"CollisionPrioRouteIncidentOutofPath":{"mainPrio":120,"subPrio":1010},"CollisionPrioRouteJamIcon":{"mainPrio":120,"subPrio":960},"CollisionPrioDynamicEndAreaBubble":{"mainPrio":120,"subPrio":860},"CollisionPrioPoiEndPointName":{"mainPrio":120,"subPrio":820},"CollisionPrioFootStation":{"mainPrio":120,"subPrio":810},"CollisionPrioPointPoiChild":{"mainPrio":120,"subPrio":760},"CollisionPrioPointPoiChildYawSupress":{"mainPrio":120,"subPrio":710},"CollisionPrioNaviEndCirclePoint":{"mainPrio":120,"subPrio":660},"CollisionPrioNaviStartCirclePoint":{"mainPrio":120,"subPrio":610},"CollisionPrioNaviStartViaEndCirclePoint":{"mainPrio":120,"subPrio":560},"CollisionPrioCruiseCar":{"mainPrio":120,"subPrio":510},"CollisionPrioCruiseCarStentil":{"mainPrio":120,"subPrio":460},"CollisionPrioCruiseSecurityTips":{"mainPrio":120,"subPrio":410},"CollisionPrioCruiseCamera":{"mainPrio":120,"subPrio":360},"CollisionPrioCruiseTraffic":{"mainPrio":120,"subPrio":310},"CollisionPrioCruiseCongestionPoint":{"mainPrio":120,"subPrio":260},"CollisionPrioPointAfterLabel":{"mainPrio":120,"subPrio":10},"CollisionPrioNaviLineAfterLabel":{"mainPrio":120,"subPrio":5},"CollisionPrioArrowAfterBuilding":{"mainPrio":80,"subPrio":36},"CollisionPrioBlockedLine":{"mainPrio":80,"subPrio":35},"CollisionPrioBlockedLineAlter":{"mainPrio":80,"subPrio":23},"CollisionPrioMissingStationLine":{"mainPrio":80,"subPrio":22},"CollisionPrioCruiseCongestionLine":{"mainPrio":80,"subPrio":21},"CollisionPrioRouteAfterBuilding":{"mainPrio":80,"subPrio":20},"CollisionPrioInterestPoint":{"mainPrio":80,"subPrio":19},"CollisionPrioPolylineAfterBuilding":{"mainPrio":80,"subPrio":10},"CollisionPrioNaviCarStentil":{"mainPrio":80,"subPrio":0},"CollisionPrioArrowBeforeBuilding":{"mainPrio":60,"subPrio":40},"CollisionPrioRouteBeforeBuilding":{"mainPrio":60,"subPrio":20},"CollisionPrioPolylineBeforeBuilding":{"mainPrio":60,"subPrio":10},"CollisionPrioPolygonBeforeBuilding":{"mainPrio":60,"subPrio":0}} diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/07ebd11050af8a1cd41a06e621f1480e.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/07ebd11050af8a1cd41a06e621f1480e.xml deleted file mode 100644 index 0bf0b9d..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/07ebd11050af8a1cd41a06e621f1480e.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":1410,"prio_key":"CollisionPrioWIAPrivatePointTravel","state_controls":[],"point_datas":[{"type":0,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500042,"anchorX":0.5,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":0},{"resId":500075,"anchorX":0.5,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":2}],"normalAnimations":[],"focusAnimations":[],"focusCard_datas":[{"resId":501054,"anchorX":0.5,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":0}],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100014,"route":false,"alt_route":false,"screen":false,"point_filter":false,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":0,"marker_type":1},{"group_id":100014,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":2},{"group_id":100014,"route":false,"alt_route":false,"screen":false,"point_filter":false,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":0,"marker_type":1}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/090474e3bb4313d99c0956fcf8423c90.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/090474e3bb4313d99c0956fcf8423c90.xml deleted file mode 100644 index b8a5f94..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/090474e3bb4313d99c0956fcf8423c90.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - -
-
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/0990cf89e269c2bca79aa0cdf8c1865a.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/0990cf89e269c2bca79aa0cdf8c1865a.xml deleted file mode 100644 index 28d2e14..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/0990cf89e269c2bca79aa0cdf8c1865a.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/0a84bc917dc2c0a8a7e03453e22b2f8c.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/0a84bc917dc2c0a8a7e03453e22b2f8c.xml deleted file mode 100644 index 8dbd924..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/0a84bc917dc2c0a8a7e03453e22b2f8c.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/0c1161e9b070d554df241a4d6b0cf94f.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/0c1161e9b070d554df241a4d6b0cf94f.xml deleted file mode 100644 index 02f1fb0..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/0c1161e9b070d554df241a4d6b0cf94f.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":3410,"prio_key":"CollisionPrioLongtrip","state_controls":[{"token":1281,"show_states":{"0":false,"1":false,"2":true}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[1],"card_datas":[{"resId":500033,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500033,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1}],"normalAnimations":[],"focusAnimations":[],"focusCard_datas":[],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":0,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/0dc2249670409c73b2904fc04f231ce4.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/0dc2249670409c73b2904fc04f231ce4.xml deleted file mode 100644 index 284e64c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/0dc2249670409c73b2904fc04f231ce4.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - -
-
-
- - - -
- -
- - - -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/0e0f83d3b4f2eb54b5cf0fa17072025c.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/0e0f83d3b4f2eb54b5cf0fa17072025c.xml deleted file mode 100644 index 5f332ac..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/0e0f83d3b4f2eb54b5cf0fa17072025c.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - -
-
-
-
- - -
- -
-
- - -
-
- - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/0ef8706ebc39e7275de60728922342f1.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/0ef8706ebc39e7275de60728922342f1.xml deleted file mode 100644 index ca03a5c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/0ef8706ebc39e7275de60728922342f1.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - -
- - -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/0ff8aaae042b8eef9ed5b41dd7566b60.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/0ff8aaae042b8eef9ed5b41dd7566b60.xml deleted file mode 100644 index 8ef461e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/0ff8aaae042b8eef9ed5b41dd7566b60.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -
- - -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/1067f4ebb9097c1595be6123e7ac61e4.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/1067f4ebb9097c1595be6123e7ac61e4.xml deleted file mode 100644 index 63c136f..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/1067f4ebb9097c1595be6123e7ac61e4.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - -
-
- - -
- - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/109e3ca56aa85d336edeae87bb231ab5.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/109e3ca56aa85d336edeae87bb231ab5.xml deleted file mode 100644 index 5888c1d..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/109e3ca56aa85d336edeae87bb231ab5.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/10a4485aa9657d65e55bdcfe24f115d5.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/10a4485aa9657d65e55bdcfe24f115d5.xml deleted file mode 100644 index bbcd724..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/10a4485aa9657d65e55bdcfe24f115d5.xml +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/1138cb11db6b453062b4f6a7c740a917.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/1138cb11db6b453062b4f6a7c740a917.xml deleted file mode 100644 index bdb85d1..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/1138cb11db6b453062b4f6a7c740a917.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - -
- - -
- - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/11b8fa5870f00c3ba2616ff976adb087.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/11b8fa5870f00c3ba2616ff976adb087.xml deleted file mode 100644 index 5145e4c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/11b8fa5870f00c3ba2616ff976adb087.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- -
- - -
- -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/12c4238a43a693183bdeffd85429358f.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/12c4238a43a693183bdeffd85429358f.xml deleted file mode 100644 index 34da947..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/12c4238a43a693183bdeffd85429358f.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - -
-
-
-
- - -
- - - - - - - -
-
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/140a8aace5b2c60054c509a7eb633eb5.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/140a8aace5b2c60054c509a7eb633eb5.xml deleted file mode 100644 index c00d0b0..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/140a8aace5b2c60054c509a7eb633eb5.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - -
- - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/14ae69d5e480ab2e066f359758eb089d.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/14ae69d5e480ab2e066f359758eb089d.xml deleted file mode 100644 index 7eaade6..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/14ae69d5e480ab2e066f359758eb089d.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - -
-
-
- - -
- -
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/1694fb4794a6881103f9e563fa622441.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/1694fb4794a6881103f9e563fa622441.xml deleted file mode 100644 index 6ce7ed1..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/1694fb4794a6881103f9e563fa622441.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/17818a3acf6c30b0ce829c1a8deef8fa.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/17818a3acf6c30b0ce829c1a8deef8fa.xml deleted file mode 100644 index cb9540e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/17818a3acf6c30b0ce829c1a8deef8fa.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - -
- - -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/1afcc3a2514efc603e2727287d387bd3.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/1afcc3a2514efc603e2727287d387bd3.xml deleted file mode 100644 index 83c47e3..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/1afcc3a2514efc603e2727287d387bd3.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - -
-
-
-
- - -
- - - -
-
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/1dcdc62fb71e5127ccb346000af5c1a8.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/1dcdc62fb71e5127ccb346000af5c1a8.xml deleted file mode 100644 index 8965045..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/1dcdc62fb71e5127ccb346000af5c1a8.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
- - -
-
- - -
- -
-
- - - -
- - -
- -
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/1fd6a4d6e36c533ac91941338f0d390d.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/1fd6a4d6e36c533ac91941338f0d390d.xml deleted file mode 100644 index 48e3230..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/1fd6a4d6e36c533ac91941338f0d390d.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - -
- - - -
-
\ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/20ea7fcaa71d747acc1cda105455cfaa.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/20ea7fcaa71d747acc1cda105455cfaa.xml deleted file mode 100644 index bda7a25..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/20ea7fcaa71d747acc1cda105455cfaa.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
- - - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2170f47f717ca341198ff1709aca6345.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2170f47f717ca341198ff1709aca6345.xml deleted file mode 100644 index e7fd823..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2170f47f717ca341198ff1709aca6345.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/21ced4f75091e8db12a0f4f289c2259c.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/21ced4f75091e8db12a0f4f289c2259c.xml deleted file mode 100644 index 7ba9d4d..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/21ced4f75091e8db12a0f4f289c2259c.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":3410,"prio_key":"CollisionPrioLongtrip","state_controls":[{"token":1281,"show_states":{"0":false,"1":false,"2":true}},{"token":1289,"show_states":{"1":false,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[1],"card_datas":[{"resId":500026,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500026,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500026,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500026,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500068,"anchorX":1,"anchorY":1,"textureStyle":"extend1","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1}],"normalAnimations":[],"focusAnimations":[],"focusOpType":3,"focusCard_datas":[{"resId":501072,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":501072,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":501072,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":501072,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1}],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3},{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/23028ef12b754a703a45185b68b619a2.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/23028ef12b754a703a45185b68b619a2.xml deleted file mode 100644 index aa55faf..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/23028ef12b754a703a45185b68b619a2.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/237cc32c9c601b15bf1a2eb5535e8051.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/237cc32c9c601b15bf1a2eb5535e8051.xml deleted file mode 100644 index 2eeeb5e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/237cc32c9c601b15bf1a2eb5535e8051.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -
- - -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/242881c241ab77acf8dc0ec706387c60.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/242881c241ab77acf8dc0ec706387c60.xml deleted file mode 100644 index 64be139..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/242881c241ab77acf8dc0ec706387c60.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - -
- - -
- - - -
-
-
\ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/242df22e4cd4546cd29fcd4e5b87b488.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/242df22e4cd4546cd29fcd4e5b87b488.xml deleted file mode 100644 index 9fb26ec..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/242df22e4cd4546cd29fcd4e5b87b488.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":1400,"prio_key":"CollisionPrioLaneNaviSolidLineBubbleNew","state_controls":[{"token":1283,"show_states":{"0":false,"1":true,"2":false,"3":false}}],"point_datas":[{"type":0,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500024,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":1}],"normalAnimations":[],"focusCard_datas":[],"isPoiFilter":false}],"clickable":false,"is_carplay":true,"is_hd_layer":true,"behavior_type":0},"collision_datas":{"items":[]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/24c5343372c9af0e436f2ad0281a293b.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/24c5343372c9af0e436f2ad0281a293b.xml deleted file mode 100644 index c3eb901..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/24c5343372c9af0e436f2ad0281a293b.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2575f9139864dff0364ba82628438af5.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2575f9139864dff0364ba82628438af5.xml deleted file mode 100644 index 944dcd5..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2575f9139864dff0364ba82628438af5.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - -
-
- -
- - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/25f3cf93aee905f698e502354a4cb2ad.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/25f3cf93aee905f698e502354a4cb2ad.xml deleted file mode 100644 index 77c8c65..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/25f3cf93aee905f698e502354a4cb2ad.xml +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
- - - -
- -
- -
- -
- -
-
-
- - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/272c7de8f2541f50c9f1a89fcfb7b590.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/272c7de8f2541f50c9f1a89fcfb7b590.xml deleted file mode 100644 index b303be7..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/272c7de8f2541f50c9f1a89fcfb7b590.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":1400,"prio_key":"CollisionPrioLaneNaviSolidLineBubbleNew","state_controls":[{"token":1283,"show_states":{"0":false,"1":true,"2":false,"3":false}}],"point_datas":[{"type":0,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500021,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":1}],"normalAnimations":[],"focusCard_datas":[],"isPoiFilter":false}],"clickable":false,"is_carplay":true,"is_hd_layer":true,"behavior_type":0},"collision_datas":{"items":[]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/27379be05f708d525a805e9270207cfa.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/27379be05f708d525a805e9270207cfa.xml deleted file mode 100644 index e377ee6..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/27379be05f708d525a805e9270207cfa.xml +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
- - -
-
- - - -
- -
-
- - - - - - - -
- -
- -
- -
- -
-
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/278172563dc7442bfb000e1808f9bd8c.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/278172563dc7442bfb000e1808f9bd8c.xml deleted file mode 100644 index c97baf4..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/278172563dc7442bfb000e1808f9bd8c.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
- -
- - - - - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/28b94da0b819cab513211b2387963082.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/28b94da0b819cab513211b2387963082.xml deleted file mode 100644 index 2ad13a8..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/28b94da0b819cab513211b2387963082.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - -
- -
- -
-
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/28d9f5cd5577c48612a20f1cc49efd93.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/28d9f5cd5577c48612a20f1cc49efd93.xml deleted file mode 100644 index f98830a..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/28d9f5cd5577c48612a20f1cc49efd93.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - -
-
- -
- -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2a941039cdc6ad235fd8d96d120caa5e.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2a941039cdc6ad235fd8d96d120caa5e.xml deleted file mode 100644 index 8df3018..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2a941039cdc6ad235fd8d96d120caa5e.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - -
-
- -
- -
-
- - -
- -
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2ade1346697b0e3370c2533b19fc9c7e.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2ade1346697b0e3370c2533b19fc9c7e.xml deleted file mode 100644 index 3f5637f..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2ade1346697b0e3370c2533b19fc9c7e.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - -
-
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2b214ffecb5b599892c5e66ba62f02cc.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2b214ffecb5b599892c5e66ba62f02cc.xml deleted file mode 100644 index 13e7fcf..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2b214ffecb5b599892c5e66ba62f02cc.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2b3d62bef3a2bd8759415a3d5f2da9aa.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2b3d62bef3a2bd8759415a3d5f2da9aa.xml deleted file mode 100644 index 74cd2f7..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2b3d62bef3a2bd8759415a3d5f2da9aa.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":1000,"sub_priority":13100,"prio_key":"CollisionPrioLongtriprecommend","state_controls":[{"token":1281,"show_states":{"0":false,"1":false,"2":true}},{"token":1289,"show_states":{"1":false,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[1],"card_datas":[{"resId":500060,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500060,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500060,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500060,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1}],"normalAnimations":[],"focusAnimations":[],"focusOpType":3,"focusCard_datas":[{"resId":501063,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":501063,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":501063,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":501063,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1}],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3},{"group_id":null,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2b596250f2002fa470105132c97bd34f.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2b596250f2002fa470105132c97bd34f.xml deleted file mode 100644 index 03c77b7..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2b596250f2002fa470105132c97bd34f.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - -
- - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2b5d0c5c7a5e4698f732292aeb6454a3.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2b5d0c5c7a5e4698f732292aeb6454a3.xml deleted file mode 100644 index 9ac3d50..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2b5d0c5c7a5e4698f732292aeb6454a3.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - -
-
-
-
-
- - - -
-
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2c286177dc75f08db7ff94ab690e3d65.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2c286177dc75f08db7ff94ab690e3d65.xml deleted file mode 100644 index 4b40c82..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2c286177dc75f08db7ff94ab690e3d65.xml +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- -
-
- - -
- -
-
- - -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2d6fa735f94b9ae23df601c943004d91.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2d6fa735f94b9ae23df601c943004d91.xml deleted file mode 100644 index 1ffa9c5..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2d6fa735f94b9ae23df601c943004d91.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":1900,"prio_key":"CollisionServiceFlow","state_controls":[{"token":1281,"show_states":{"0":true,"1":true,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500072,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":0},{"resId":500072,"anchorX":0.5,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":0},{"resId":500072,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":0}],"normalAnimations":[],"focusAnimations":[],"focusOpType":0,"focusCard_datas":[],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":true,"alt_route":true,"screen":true,"point_filter":true,"view_filter":true,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":0,"marker_type":1}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2db91d7361196457fec4002680295463.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2db91d7361196457fec4002680295463.xml deleted file mode 100644 index af278ea..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2db91d7361196457fec4002680295463.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2dbc15d81faa3a6d7c1bf068a921434a.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2dbc15d81faa3a6d7c1bf068a921434a.xml deleted file mode 100644 index 8640824..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2dbc15d81faa3a6d7c1bf068a921434a.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- -
- -
- - -
- -
-
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2e50d002dba3d9413be42b05e3895d2a.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2e50d002dba3d9413be42b05e3895d2a.xml deleted file mode 100644 index f2dfae9..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2e50d002dba3d9413be42b05e3895d2a.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2ff82f7e164f4903d3030620028c5119.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2ff82f7e164f4903d3030620028c5119.xml deleted file mode 100644 index 0c45574..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/2ff82f7e164f4903d3030620028c5119.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/3001024229ba6942472f54f9966cd8eb.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/3001024229ba6942472f54f9966cd8eb.xml deleted file mode 100644 index 423a5ab..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/3001024229ba6942472f54f9966cd8eb.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - -
-
-
-
- - -
- -
-
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/302ac73f940e8f654d31a36d0e7ada63.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/302ac73f940e8f654d31a36d0e7ada63.xml deleted file mode 100644 index da8e35b..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/302ac73f940e8f654d31a36d0e7ada63.xml +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - - - - -
- -
-
- - - - - - - -
- -
- -
- -
- -
-
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/303ad5bd73733dab1a311be5390e9c3e.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/303ad5bd73733dab1a311be5390e9c3e.xml deleted file mode 100644 index 0775341..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/303ad5bd73733dab1a311be5390e9c3e.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - -
- - -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/31518edfb988d58580051d74c45c157f.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/31518edfb988d58580051d74c45c157f.xml deleted file mode 100644 index 661aa9c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/31518edfb988d58580051d74c45c157f.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/344f4698b820bd8a01d286a1eeb9901a.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/344f4698b820bd8a01d286a1eeb9901a.xml deleted file mode 100644 index 6752356..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/344f4698b820bd8a01d286a1eeb9901a.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":1960,"prio_key":"CollisionDriveCongestionBubble","state_controls":[{"token":1281,"show_states":{"0":true,"1":true,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500007,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":20,"top":15,"right":20,"bottom":25},"is_focus":"1","paramType":1},{"resId":500007,"anchorX":0.5,"anchorY":1,"textureStyle":"","padding":{"left":20,"top":10,"right":20,"bottom":25},"is_focus":"1","paramType":1},{"resId":500007,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":20,"top":15,"right":20,"bottom":25},"is_focus":"1","paramType":1},{"resId":500007,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":20,"top":15,"right":20,"bottom":25},"is_focus":"1","paramType":1},{"resId":500007,"anchorX":0.5,"anchorY":0,"textureStyle":"","padding":{"left":15,"top":15,"right":15,"bottom":25},"is_focus":"1","paramType":1},{"resId":500007,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":20,"top":15,"right":20,"bottom":25},"is_focus":"1","paramType":1}],"normalAnimations":[],"focusOpType":2,"focusCard_datas":[],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":true,"alt_route":true,"screen":false,"point_filter":true,"view_filter":true,"area_percent":0.2,"route_percent":0.25,"alt_route_percent":0.6,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/35554bf58304d0e2faf5bcae5173b3db.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/35554bf58304d0e2faf5bcae5173b3db.xml deleted file mode 100644 index 729b3a5..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/35554bf58304d0e2faf5bcae5173b3db.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
- - -
- - - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/361ad8f2567e26cf149b8c756e118964.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/361ad8f2567e26cf149b8c756e118964.xml deleted file mode 100644 index e7ba62b..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/361ad8f2567e26cf149b8c756e118964.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":3410,"prio_key":"CollisionPrioLongtrip","state_controls":[{"token":1281,"show_states":{"0":false,"1":false,"2":true}},{"token":1289,"show_states":{"1":false,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[1],"card_datas":[{"resId":500030,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500030,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500030,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500030,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1}],"normalAnimations":[],"focusAnimations":[],"focusOpType":3,"focusCard_datas":[{"resId":501064,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":501064,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":501064,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":501064,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1}],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3},{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/3666f29c02a2c4423dfdb9ffeb12d562.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/3666f29c02a2c4423dfdb9ffeb12d562.xml deleted file mode 100644 index f8b5446..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/3666f29c02a2c4423dfdb9ffeb12d562.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - -
-
-
- - -
-
- -
- - -
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/368a2a45801e213a9736fd5dc00e5693.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/368a2a45801e213a9736fd5dc00e5693.xml deleted file mode 100644 index 2585f31..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/368a2a45801e213a9736fd5dc00e5693.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - -
- - -
-
- -
- - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/37e68683eeb54b23ea55173bfa0b6ebf.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/37e68683eeb54b23ea55173bfa0b6ebf.xml deleted file mode 100644 index d60ba33..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/37e68683eeb54b23ea55173bfa0b6ebf.xml +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - - -
- -
-
- - - - - - - -
- -
- -
- -
- -
-
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/38197bf63c2036f335adcc5908ea7a44.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/38197bf63c2036f335adcc5908ea7a44.xml deleted file mode 100644 index 695ea97..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/38197bf63c2036f335adcc5908ea7a44.xml +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
- - -
-
- - -
- -
-
- - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/38f688590d5dba98cbb4d2dbcef31580.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/38f688590d5dba98cbb4d2dbcef31580.xml deleted file mode 100644 index 12c5335..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/38f688590d5dba98cbb4d2dbcef31580.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -
- - -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/39aa0d5559a850514dcd42e27c65e0fd.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/39aa0d5559a850514dcd42e27c65e0fd.xml deleted file mode 100644 index 0a4883c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/39aa0d5559a850514dcd42e27c65e0fd.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - -
-
-
-
- - -
- -
-
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/3c8984a4bd89e812e23f6406c0665a39.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/3c8984a4bd89e812e23f6406c0665a39.xml deleted file mode 100644 index 66f14c0..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/3c8984a4bd89e812e23f6406c0665a39.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":1000,"sub_priority":13050,"prio_key":"CollisionPrioLongtrip","state_controls":[{"token":1281,"show_states":{"0":true,"1":true,"2":true}},{"token":1289,"show_states":{"1":false,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[1],"card_datas":[{"resId":500056,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500056,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500056,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500056,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1}],"normalAnimations":[],"focusAnimations":[],"focusOpType":3,"focusCard_datas":[{"resId":501060,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":501060,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":501060,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":501060,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1}],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3},{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/3d8910fdbf92577c85666a0f1b3f1818.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/3d8910fdbf92577c85666a0f1b3f1818.xml deleted file mode 100644 index c970c7c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/3d8910fdbf92577c85666a0f1b3f1818.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/3e003fd1119c399322169200e7f501a4.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/3e003fd1119c399322169200e7f501a4.xml deleted file mode 100644 index 59e25e6..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/3e003fd1119c399322169200e7f501a4.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":3460,"prio_key":"CollisionPrioTollGate1","state_controls":[{"token":1281,"show_states":{"0":true,"1":true,"2":false}}],"point_datas":[{"type":1,"min_zoom":"10.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500019,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":1},{"resId":500019,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":1}],"normalAnimations":[],"focusCard_datas":[],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":0,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/40674916663dfb71e10775cf05294834.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/40674916663dfb71e10775cf05294834.xml deleted file mode 100644 index b085066..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/40674916663dfb71e10775cf05294834.xml +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - - -
- -
-
- - - - - - - -
- -
- -
- -
- -
-
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/409a06887a2ff3b04b94a78eee82dad4.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/409a06887a2ff3b04b94a78eee82dad4.xml deleted file mode 100644 index 58bcd64..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/409a06887a2ff3b04b94a78eee82dad4.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - -
- - -
- - - - - -
-
-
\ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/421d337e2506db326ec896b26028d078.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/421d337e2506db326ec896b26028d078.xml deleted file mode 100644 index 9d5de8e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/421d337e2506db326ec896b26028d078.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
- - - -
- -
-
- - - -
- -
- -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/4367b59449faad37e76b0a2ec0282e60.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/4367b59449faad37e76b0a2ec0282e60.xml deleted file mode 100644 index 106b69a..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/4367b59449faad37e76b0a2ec0282e60.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - -
- - - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/43c483c99f5a5053d67754c5d69449bc.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/43c483c99f5a5053d67754c5d69449bc.xml deleted file mode 100644 index b65d82a..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/43c483c99f5a5053d67754c5d69449bc.xml +++ /dev/null @@ -1 +0,0 @@ -{"overlay":{"autoFocus":true,"collisionGroupId":100001,"focusIcon":{"ancorY":1,"ancorX":1},"focusStyleId":100001,"isCoverable":false,"isDodgeRoute":false,"isPoiFilter":false,"itemPriority":1,"mainPriority":120,"maxLevel":20,"minLevel":9,"normalIcon":{"ancorY":1,"ancorX":1},"normalStyleId":100001,"subPriority":2100},"overlayTmp":[{"anchors":[{"anchorX":1,"anchorY":1},{"anchorX":0,"anchorY":1},{"anchorX":1,"anchorY":0},{"anchorX":0,"anchorY":0}],"layouts":[{"xml":"\n\n
\n
\n \n
\n \n\n \n
\n
\n
\n\n"},{"xml":"\n\n
\n
\n \n
\n \n\n \n
\n
\n
\n\n"},{"xml":"\n\n
\n
\n \n
\n \n\n \n
\n
\n
\n\n"},{"xml":"\n\n
\n
\n \n
\n \n\n \n
\n
\n
\n\n"}],"padding":[{"left":25,"top":15,"right":25,"bottom":12},{"left":15,"top":25,"right":25,"bottom":12},{"left":15,"top":25,"right":12,"bottom":25},{"left":25,"top":15,"right":12,"bottom":25}],"styleId":100001}]} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/43d4cc6628b8c62b06dda1f615300815.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/43d4cc6628b8c62b06dda1f615300815.xml deleted file mode 100644 index 2481761..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/43d4cc6628b8c62b06dda1f615300815.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - -
-
-
- -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/43edae303ce58e7deb356c1a6c46c8d9.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/43edae303ce58e7deb356c1a6c46c8d9.xml deleted file mode 100644 index daecee6..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/43edae303ce58e7deb356c1a6c46c8d9.xml +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
- - -
-
- - -
- -
-
- - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/448539d9b0785f3983f04fe12c6a9f88.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/448539d9b0785f3983f04fe12c6a9f88.xml deleted file mode 100644 index 1c5b4ad..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/448539d9b0785f3983f04fe12c6a9f88.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - -
-
-
- - - -
- - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/44d9d78f32ff421c731d4eba7efffa3f.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/44d9d78f32ff421c731d4eba7efffa3f.xml deleted file mode 100644 index 66f3b75..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/44d9d78f32ff421c731d4eba7efffa3f.xml +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -
- -
- - - - -
- -
-
- -
- - - - -
- -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/451e9ffe85184d25d04c101f1ec8e08b.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/451e9ffe85184d25d04c101f1ec8e08b.xml deleted file mode 100644 index 1118795..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/451e9ffe85184d25d04c101f1ec8e08b.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - - -
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/493f90abffd774f87ae51e8e8d5a7a60.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/493f90abffd774f87ae51e8e8d5a7a60.xml deleted file mode 100644 index b40ee32..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/493f90abffd774f87ae51e8e8d5a7a60.xml +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - - - -
-
-
-
-
-
-
- - -
- - - -
- -
- -
-
- -
- - - -
- -
- - - - - - -
- -
-
-
-
- -
-
- -
-
-
-
-
- -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/4d290bed865500477f7024829c2ed2b5.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/4d290bed865500477f7024829c2ed2b5.xml deleted file mode 100644 index eec56e9..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/4d290bed865500477f7024829c2ed2b5.xml +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
- -
- - - - - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/4dfee973bcfb5d3f6617faac3886a18d.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/4dfee973bcfb5d3f6617faac3886a18d.xml deleted file mode 100644 index 5cc4727..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/4dfee973bcfb5d3f6617faac3886a18d.xml +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
- -
- - -
- - -
- -
- - - -
-
-
- - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/4ea466d31dfb8b08c25f56e19f659c46.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/4ea466d31dfb8b08c25f56e19f659c46.xml deleted file mode 100644 index 9ec2249..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/4ea466d31dfb8b08c25f56e19f659c46.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":1960,"prio_key":"CollisionDriveCongestionBubble","state_controls":[{"token":1281,"show_states":{"0":true,"1":true,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500008,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":20,"top":15,"right":20,"bottom":25},"is_focus":"1","paramType":1},{"resId":500008,"anchorX":0.5,"anchorY":1,"textureStyle":"","padding":{"left":20,"top":10,"right":20,"bottom":25},"is_focus":"1","paramType":1},{"resId":500008,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":20,"top":15,"right":20,"bottom":25},"is_focus":"1","paramType":1},{"resId":500008,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":20,"top":15,"right":20,"bottom":25},"is_focus":"1","paramType":1},{"resId":500008,"anchorX":0.5,"anchorY":0,"textureStyle":"","padding":{"left":15,"top":15,"right":15,"bottom":25},"is_focus":"1","paramType":1},{"resId":500008,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":20,"top":15,"right":20,"bottom":25},"is_focus":"1","paramType":1}],"normalAnimations":[],"focusOpType":2,"focusCard_datas":[],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":true,"alt_route":true,"screen":false,"point_filter":true,"view_filter":true,"area_percent":0.2,"route_percent":0.25,"alt_route_percent":0.6,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/4f041af434bfa8750d331c01706fee19.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/4f041af434bfa8750d331c01706fee19.xml deleted file mode 100644 index f223b76..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/4f041af434bfa8750d331c01706fee19.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5026562e22fdbbffceadcb1a936a0f1d.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5026562e22fdbbffceadcb1a936a0f1d.xml deleted file mode 100644 index 4f926a1..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5026562e22fdbbffceadcb1a936a0f1d.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- -
- -
- - -
- -
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/504d06ece8adf65003175c6be0a19a7b.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/504d06ece8adf65003175c6be0a19a7b.xml deleted file mode 100644 index f711293..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/504d06ece8adf65003175c6be0a19a7b.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":2460,"prio_key":"CollisionPrioGreenWave","state_controls":[{"token":1281,"show_states":{"0":true,"1":true,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500004,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":20,"top":15,"right":20,"bottom":25},"is_focus":"1","paramType":1},{"resId":500004,"anchorX":0.5,"anchorY":1,"textureStyle":"","padding":{"left":20,"top":10,"right":20,"bottom":25},"is_focus":"1","paramType":1},{"resId":500004,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":20,"top":15,"right":20,"bottom":25},"is_focus":"1","paramType":1},{"resId":500004,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":20,"top":15,"right":20,"bottom":25},"is_focus":"1","paramType":1},{"resId":500004,"anchorX":0.5,"anchorY":0,"textureStyle":"","padding":{"left":15,"top":15,"right":15,"bottom":25},"is_focus":"1","paramType":1},{"resId":500004,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":20,"top":15,"right":20,"bottom":25},"is_focus":"1","paramType":1}],"normalAnimations":[],"focusOpType":2,"focusCard_datas":[],"isPoiFilter":false}],"clickable":false,"is_carplay":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":true,"alt_route":true,"screen":false,"point_filter":true,"view_filter":true,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":0,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5057ccf170b5c8bba690e6711172e038.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5057ccf170b5c8bba690e6711172e038.xml deleted file mode 100644 index 17b4db0..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5057ccf170b5c8bba690e6711172e038.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":3010,"prio_key":"CollisionPrioNight","state_controls":[{"token":1281,"show_states":{"0":true,"1":true,"2":true}},{"token":1289,"show_states":{"1":false,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[1],"card_datas":[{"resId":500057,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1}],"normalAnimations":[],"focusAnimations":[],"focusOpType":3,"focusCard_datas":[{"resId":500061,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":500061,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":500061,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":500061,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1}],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3},{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/50ae80b2405d03902546c22f3005b1c6.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/50ae80b2405d03902546c22f3005b1c6.xml deleted file mode 100644 index 68e9782..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/50ae80b2405d03902546c22f3005b1c6.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - $labelFontSize = __scene.pageType == 3 || __scene.pageType == 21 ? 28 : 24 - $infoFontSize = __scene.pageType == 3 || __scene.pageType == 21 ? 32 : 28 - $labelVisible = along.gasDiscountFlag > 0 || along.labelType == 2 || along.labelType == 3 ? 'display' : 'none' - $labelStyle = along.gasDiscountFlag > 0 ? 'background-image: linear-gradient(to left,#FD9800,#FFC000);' : 'background-image: linear-gradient(to left,#3299FF,#5BBEFE);' - $label = along.gasDiscountFlag > 0 ? '优惠' : (along.labelType == 2 ? '最近' : (along.labelType == 3 ? '顺路' : '')) - $text = along.bubbleText - -
-
-
- -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5107c1e1136c37646ef5fa6adb5173f7.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5107c1e1136c37646ef5fa6adb5173f7.xml deleted file mode 100644 index cc8bb9e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5107c1e1136c37646ef5fa6adb5173f7.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":3410,"prio_key":"CollisionPrioLongtrip","state_controls":[{"token":1281,"show_states":{"0":true,"1":true,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500025,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500025,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500025,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500025,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1}],"normalAnimations":[],"focusAnimations":[],"focusOpType":0,"focusCard_datas":[],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/534aedc9b94121ac9ff218706c3280e4.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/534aedc9b94121ac9ff218706c3280e4.xml deleted file mode 100644 index e272ed5..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/534aedc9b94121ac9ff218706c3280e4.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
- - -
-
- - - -
- - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/542cadfc5cac7d810c5d73ef6e7d8f0e.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/542cadfc5cac7d810c5d73ef6e7d8f0e.xml deleted file mode 100644 index 184a5bb..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/542cadfc5cac7d810c5d73ef6e7d8f0e.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - -
-
- -
-
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/54eed8b50f910766361d8f71f1073253.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/54eed8b50f910766361d8f71f1073253.xml deleted file mode 100644 index b1e518b..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/54eed8b50f910766361d8f71f1073253.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - -
-
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/55648e640a902e89486d6af471f7a6d0.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/55648e640a902e89486d6af471f7a6d0.xml deleted file mode 100644 index 6377857..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/55648e640a902e89486d6af471f7a6d0.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - -
- - - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/559c881856a1cfd8969a890807124c94.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/559c881856a1cfd8969a890807124c94.xml deleted file mode 100644 index 6b71085..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/559c881856a1cfd8969a890807124c94.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/55b1afe9f3a59a85d89217dbddcabccc.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/55b1afe9f3a59a85d89217dbddcabccc.xml deleted file mode 100644 index d71b75a..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/55b1afe9f3a59a85d89217dbddcabccc.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":3060,"prio_key":"CollisionPrioLongtripcameraservice","state_controls":[{"token":1281,"show_states":{"0":false,"1":false,"2":true}},{"token":1289,"show_states":{"1":false,"2":false}}],"point_datas":[{"type":1,"min_zoom":"9.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500055,"anchorX":0.5,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"9.0f","max_zoom":"20.0f","is_focus":"1","paramType":1}],"normalAnimations":[],"focusAnimations":[],"focusOpType":0,"focusCard_datas":[],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/56cb9e945476ccd51b5f8c85c3965d2c.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/56cb9e945476ccd51b5f8c85c3965d2c.xml deleted file mode 100644 index 2d41d6a..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/56cb9e945476ccd51b5f8c85c3965d2c.xml +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- -
- -
- - - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/570c96db3d835ef2147c5a2d90b563f4.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/570c96db3d835ef2147c5a2d90b563f4.xml deleted file mode 100644 index 937aaf4..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/570c96db3d835ef2147c5a2d90b563f4.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
-
- - - -
- -
- -
-
- - -
-
-
\ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5710bacee94d927acebfbf1d939ce3f0.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5710bacee94d927acebfbf1d939ce3f0.xml deleted file mode 100644 index 815c8c4..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5710bacee94d927acebfbf1d939ce3f0.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5718997b55facf1925a92f0ac8acfd10.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5718997b55facf1925a92f0ac8acfd10.xml deleted file mode 100644 index 23fdfe9..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5718997b55facf1925a92f0ac8acfd10.xml +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - -
- - - -
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/580f7726ad1710cc46e90abc6455ac3a.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/580f7726ad1710cc46e90abc6455ac3a.xml deleted file mode 100644 index 0c8459c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/580f7726ad1710cc46e90abc6455ac3a.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
- - - -
- -
-
- - - -
- -
-
- - - - - - - -
- -
- -
- -
- -
-
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5937224f2afa90e570641f3ff5cefced.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5937224f2afa90e570641f3ff5cefced.xml deleted file mode 100644 index e9bb744..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5937224f2afa90e570641f3ff5cefced.xml +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - - -
-
-
-
-
-
-
- - -
- - - -
- -
- -
-
- -
- - - -
- -
-
- - - -
- -
- - - -
-
- -
-
- -
- - -
-
-
- -
-
- -
-
-
-
-
- -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/59ef4acc9cb64469861ea564cff0b6cd.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/59ef4acc9cb64469861ea564cff0b6cd.xml deleted file mode 100644 index 589bb47..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/59ef4acc9cb64469861ea564cff0b6cd.xml +++ /dev/null @@ -1 +0,0 @@ -{"overlay":{"autoFocus":true,"collisionGroupId":100001,"focusIcon":{"ancorY":1,"ancorX":1},"focusStyleId":100000,"isCoverable":false,"isDodgeRoute":false,"isPoiFilter":false,"itemPriority":1,"mainPriority":120,"maxLevel":20,"minLevel":10,"normalIcon":{"ancorY":1,"ancorX":1},"normalStyleId":100000,"subPriority":2910},"overlayTmp":[{"anchors":[{"anchorX":1,"anchorY":1},{"anchorX":0,"anchorY":1}],"layouts":[{"xml":"\n\n
\n
\n
\n
\n \n
\n \n\n
\n \n\n \n
\n
\n
\n\n \n
\n\n \n
\n
\n\n"},{"xml":"\n\n
\n
\n
\n
\n \n
\n \n\n
\n \n\n \n
\n
\n
\n\n \n
\n\n \n
\n
\n\n"}],"padding":[{"left":0,"top":0,"right":0,"bottom":0},{"left":0,"top":0,"right":0,"bottom":0}],"styleId":100000}]} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5a504c7c6d44738145d38d91d435fcf3.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5a504c7c6d44738145d38d91d435fcf3.xml deleted file mode 100644 index c356ba9..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5a504c7c6d44738145d38d91d435fcf3.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5df8b1035bba4fd47ed79b5d2be55502.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5df8b1035bba4fd47ed79b5d2be55502.xml deleted file mode 100644 index 0d64485..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5df8b1035bba4fd47ed79b5d2be55502.xml +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - -
- - -
-
- -
- - -
- - - -
- -
- - - - -
- - - -
-
-
-
- - - - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5e2b3ac1493777640aa631e15f726c31.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5e2b3ac1493777640aa631e15f726c31.xml deleted file mode 100644 index 2031534..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/5e2b3ac1493777640aa631e15f726c31.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":1400,"prio_key":"CollisionPrioTravelStartEndPoint","state_controls":[{"token":1287,"show_states":{"0":true,"1":true,"2":true,"3":false}},{"token":1288,"show_states":{"0":false,"1":true}}],"point_datas":[{"type":0,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500016,"anchorX":0.5,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":1}],"normalAnimations":[],"focusOpType":0,"focusCard_datas":[],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100014,"route":false,"alt_route":false,"screen":false,"point_filter":false,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/61e87f43ddf89a2428a9a3f32f368712.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/61e87f43ddf89a2428a9a3f32f368712.xml deleted file mode 100644 index 92d714d..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/61e87f43ddf89a2428a9a3f32f368712.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - -
-
-
-
- - - -
-
-
- - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/61f0f9f8253b48f384836f39b4bf5095.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/61f0f9f8253b48f384836f39b4bf5095.xml deleted file mode 100644 index ec4313d..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/61f0f9f8253b48f384836f39b4bf5095.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":3410,"prio_key":"CollisionPrioLongtrip","state_controls":[{"token":1281,"show_states":{"0":false,"1":false,"2":true}},{"token":1289,"show_states":{"1":false,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[1],"card_datas":[{"resId":500031,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500031,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500031,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500031,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1}],"normalAnimations":[],"focusAnimations":[],"focusOpType":3,"focusCard_datas":[{"resId":500058,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":500058,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":500058,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":500058,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1}],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3},{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/645cfd36a49348b98f45ac7f95fff749.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/645cfd36a49348b98f45ac7f95fff749.xml deleted file mode 100644 index f94b8c8..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/645cfd36a49348b98f45ac7f95fff749.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - -
-
-
-
- - -
- - - - - - - -
-
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/65e25802f3a3f9354dac1d2a799ea493.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/65e25802f3a3f9354dac1d2a799ea493.xml deleted file mode 100644 index 3ee6677..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/65e25802f3a3f9354dac1d2a799ea493.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":910,"prio_key":"CollisionPrioPlanTrafficEvent","state_controls":[{"token":1281,"show_states":{"0":true,"1":true,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"7.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500005,"anchorX":0.5,"anchorY":0.5,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":0}],"normalAnimations":[],"focusOpType":2,"focusCard_datas":[],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":false,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":0,"marker_type":1}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/660ffbf9a4d92a18b0824eeb3e0ff6e1.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/660ffbf9a4d92a18b0824eeb3e0ff6e1.xml deleted file mode 100644 index fbdc88e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/660ffbf9a4d92a18b0824eeb3e0ff6e1.xml +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - - -
- -
-
- - - - - - - -
- -
- -
- -
- -
-
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/666f311880ae8a3160fa2951c4230ea1.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/666f311880ae8a3160fa2951c4230ea1.xml deleted file mode 100644 index a365adf..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/666f311880ae8a3160fa2951c4230ea1.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - -
-
- - - -
- -
- -
- - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/67bfa5108268aaf9907426a7f7a8230d.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/67bfa5108268aaf9907426a7f7a8230d.xml deleted file mode 100644 index 58cdb67..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/67bfa5108268aaf9907426a7f7a8230d.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - -
- - - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/685fe6f1ce6f3ded63de6ca00b1fbc44.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/685fe6f1ce6f3ded63de6ca00b1fbc44.xml deleted file mode 100644 index 4e12477..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/685fe6f1ce6f3ded63de6ca00b1fbc44.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/6ab4b3a0d6d5f840789331177b33f8d2.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/6ab4b3a0d6d5f840789331177b33f8d2.xml deleted file mode 100644 index a385509..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/6ab4b3a0d6d5f840789331177b33f8d2.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- -
- -
- -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/6b98372160e7bf6d8d055fbb9f16396d.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/6b98372160e7bf6d8d055fbb9f16396d.xml deleted file mode 100644 index caeecec..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/6b98372160e7bf6d8d055fbb9f16396d.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - -
- -
-
\ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/6d825ac02135f7f4209423ba2f7bf020.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/6d825ac02135f7f4209423ba2f7bf020.xml deleted file mode 100644 index cf6a1a5..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/6d825ac02135f7f4209423ba2f7bf020.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - - -
-
- -
-
- - -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/6dd499d5d0fa93fac18545594ce17056.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/6dd499d5d0fa93fac18545594ce17056.xml deleted file mode 100644 index 8ee9f8e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/6dd499d5d0fa93fac18545594ce17056.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":1250,"prio_key":"CollisionPrioTravelUpAndDownHill","state_controls":[{"token":1287,"show_states":{"0":true,"1":true,"2":true,"3":false}},{"token":1288,"show_states":{"0":true,"1":false}}],"point_datas":[{"type":0,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500027,"anchorX":0.5,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":1}],"normalAnimations":[],"focusCard_datas":[],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100014,"route":false,"alt_route":false,"screen":false,"point_filter":false,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/6ee787cdb82811a7d7fab36e24a94c13.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/6ee787cdb82811a7d7fab36e24a94c13.xml deleted file mode 100644 index 14dffc3..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/6ee787cdb82811a7d7fab36e24a94c13.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/6f15b9c931c01cf0cde12988dbdd4dcf.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/6f15b9c931c01cf0cde12988dbdd4dcf.xml deleted file mode 100644 index 3a21186..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/6f15b9c931c01cf0cde12988dbdd4dcf.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":9999,"prio_key":" CollisionPrioRouteSearchRecommend","state_controls":[{"token":1281,"show_states":{"0":true,"1":true,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500048,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500048,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1}],"normalAnimations":[],"focusAnimations":[{"type":1,"animationParam":{"duration":200,"param1":1,"param2":0.01}},{"type":1,"animationParam":{"duration":3000,"param1":0.01,"param2":0.01}},{"type":1,"animationParam":{"duration":200,"param1":0.01,"param2":1}}],"focusOpType":0,"focusCard_datas":[],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":true,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":0,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/6f5ce80e60b11ab866fd47bf4865c06e.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/6f5ce80e60b11ab866fd47bf4865c06e.xml deleted file mode 100644 index c0c0934..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/6f5ce80e60b11ab866fd47bf4865c06e.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - -
-
- - -
- -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/71056ce831a77bfd6b5d335e11c26c19.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/71056ce831a77bfd6b5d335e11c26c19.xml deleted file mode 100644 index 43dd886..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/71056ce831a77bfd6b5d335e11c26c19.xml +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
- -
- - -
- - -
- -
- - - -
-
-
- - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/712ace170192a3dbdab4a1eccf055f8b.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/712ace170192a3dbdab4a1eccf055f8b.xml deleted file mode 100644 index 5b9d4f6..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/712ace170192a3dbdab4a1eccf055f8b.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - $labelFontSize = __scene.pageType == 3 || __scene.pageType == 21 ? 28 : 24 - $infoFontSize = __scene.pageType == 3 || __scene.pageType == 21 ? 32 : 28 - $labelVisible = along.gasDiscountFlag > 0 || along.labelType == 2 || along.labelType == 3 ? 'display' : 'none' - $labelStyle = along.gasDiscountFlag > 0 ? 'background-image: linear-gradient(to left,#FD9800,#FFC000);' : 'background-image: linear-gradient(to left,#3299FF,#5BBEFE);' - $label = along.gasDiscountFlag > 0 ? '优惠' : (along.labelType == 2 ? '最近' : (along.labelType == 3 ? '顺路' : '')) - $text = along.bubbleText - -
-
-
-
- -
- -
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/716ff24068cdcd3368f6e13d95666e3d.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/716ff24068cdcd3368f6e13d95666e3d.xml deleted file mode 100644 index b36cac5..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/716ff24068cdcd3368f6e13d95666e3d.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":1410,"prio_key":"CollisionPrioWIAPrivatePointTravel","state_controls":[],"point_datas":[{"type":0,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500040,"anchorX":0.5,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":0},{"resId":500073,"anchorX":0.5,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":2}],"normalAnimations":[],"focusAnimations":[],"focusOpType":0,"focusCard_datas":[],"isPoiFilter":false}],"clickable":false,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100014,"route":false,"alt_route":false,"screen":false,"point_filter":false,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":0,"marker_type":1},{"group_id":100014,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":2}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/72a7b0b75172f8169af99338c76189dc.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/72a7b0b75172f8169af99338c76189dc.xml deleted file mode 100644 index 0c4c869..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/72a7b0b75172f8169af99338c76189dc.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/730d35f500dd2a9d9ed0dfb3ac9a10c4.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/730d35f500dd2a9d9ed0dfb3ac9a10c4.xml deleted file mode 100644 index 3954bd7..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/730d35f500dd2a9d9ed0dfb3ac9a10c4.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
- - - -
-
-
-
\ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/7329940e301addadf307a1b19bcdd109.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/7329940e301addadf307a1b19bcdd109.xml deleted file mode 100644 index 3e33da8..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/7329940e301addadf307a1b19bcdd109.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":910,"prio_key":"CollisionPrioPlanTrafficEvent","state_controls":[{"token":1281,"show_states":{"0":true,"1":true,"2":false}}],"point_datas":[{"type":2,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500012,"anchorX":0.5,"anchorY":0.5,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":0}],"normalAnimations":[],"focusOpType":2,"focusCard_datas":[],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":true,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0.2,"route_percent":0.25,"alt_route_percent":0.6,"badcase_policy":1,"marker_type":1}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/73fcaf36019e63eb662d2532d668b01c.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/73fcaf36019e63eb662d2532d668b01c.xml deleted file mode 100644 index 6001e7e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/73fcaf36019e63eb662d2532d668b01c.xml +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
-
- - - -
- -
-
- - - -
- -
- - - -
-
-
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/74b2dc540fd3e647c902d0ccf74d9c2d.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/74b2dc540fd3e647c902d0ccf74d9c2d.xml deleted file mode 100644 index 7a5b6d6..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/74b2dc540fd3e647c902d0ccf74d9c2d.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - -
-
-
- -
- - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/757467526516f0d7f6a368b0da372c44.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/757467526516f0d7f6a368b0da372c44.xml deleted file mode 100644 index 550a615..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/757467526516f0d7f6a368b0da372c44.xml +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
- -
- - -
- - -
- -
- - - -
-
-
- - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/75856a3afc653effae416fbc1479a771.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/75856a3afc653effae416fbc1479a771.xml deleted file mode 100644 index 62c7804..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/75856a3afc653effae416fbc1479a771.xml +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - -
- - -
-
- -
- - -
- - - -
- -
- - - - -
- - - -
-
-
-
- - - - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/759e9a1a41b4d2619c1be1bb753f9807.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/759e9a1a41b4d2619c1be1bb753f9807.xml deleted file mode 100644 index f8269bd..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/759e9a1a41b4d2619c1be1bb753f9807.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -
-
-
-
- - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/777bf5998390b2caf771df5cf353e8d5.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/777bf5998390b2caf771df5cf353e8d5.xml deleted file mode 100644 index 1498514..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/777bf5998390b2caf771df5cf353e8d5.xml +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - -
- - -
-
- -
- - -
- - - -
- -
- - - - -
- - - -
-
-
-
- - - - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/77b4a2b83f8ad69eb9231af543c4d670.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/77b4a2b83f8ad69eb9231af543c4d670.xml deleted file mode 100644 index ee7d1ef..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/77b4a2b83f8ad69eb9231af543c4d670.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":3410,"prio_key":"CollisionPrioLongtrip","state_controls":[{"token":1281,"show_states":{"0":false,"1":false,"2":true}},{"token":1289,"show_states":{"1":false,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[1],"card_datas":[{"resId":500029,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500029,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500029,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500029,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500071,"anchorX":1,"anchorY":1,"textureStyle":"extend1","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1}],"normalAnimations":[],"focusAnimations":[],"focusOpType":3,"focusCard_datas":[{"resId":501066,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":501066,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":501066,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":501066,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1}],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3},{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/7890e5762530139eb7a7614254972c98.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/7890e5762530139eb7a7614254972c98.xml deleted file mode 100644 index 017c610..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/7890e5762530139eb7a7614254972c98.xml +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/78d0d82f1edbb1222287a166287a86a2.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/78d0d82f1edbb1222287a166287a86a2.xml deleted file mode 100644 index d488395..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/78d0d82f1edbb1222287a166287a86a2.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-
- - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/799e92c6e987ba7b7a275755e473a89f.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/799e92c6e987ba7b7a275755e473a89f.xml deleted file mode 100644 index 50915b5..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/799e92c6e987ba7b7a275755e473a89f.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
- - -
- - - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/7a8d7a8c4a8001e738d48280229a1823.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/7a8d7a8c4a8001e738d48280229a1823.xml deleted file mode 100644 index e52be5e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/7a8d7a8c4a8001e738d48280229a1823.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - -
- - -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/7cdb7e6cabce06d564d42d919160ea7b.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/7cdb7e6cabce06d564d42d919160ea7b.xml deleted file mode 100644 index 663b7b4..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/7cdb7e6cabce06d564d42d919160ea7b.xml +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- - - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/7d055af5a07fc7cd19a0f664a8e0f3d7.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/7d055af5a07fc7cd19a0f664a8e0f3d7.xml deleted file mode 100644 index adceaa3..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/7d055af5a07fc7cd19a0f664a8e0f3d7.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - -
- - - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/7d90902b81246b1cd3bb848e34262eb7.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/7d90902b81246b1cd3bb848e34262eb7.xml deleted file mode 100644 index f6983da..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/7d90902b81246b1cd3bb848e34262eb7.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/7f9c3cfd7d7758e016c6ff71b9df4149.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/7f9c3cfd7d7758e016c6ff71b9df4149.xml deleted file mode 100644 index 1f445c7..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/7f9c3cfd7d7758e016c6ff71b9df4149.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - -
- -
-
- -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/7fb67c5a6f8e8c0e543840a6ebdc61a8.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/7fb67c5a6f8e8c0e543840a6ebdc61a8.xml deleted file mode 100644 index 854bccb..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/7fb67c5a6f8e8c0e543840a6ebdc61a8.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - -
- - - -
-
\ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/80eae8344e4591b094215f00c0c295b5.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/80eae8344e4591b094215f00c0c295b5.xml deleted file mode 100644 index d94e1cd..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/80eae8344e4591b094215f00c0c295b5.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - -
-
- -
- - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/822874794be84553616f883feaa6a881.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/822874794be84553616f883feaa6a881.xml deleted file mode 100644 index af13698..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/822874794be84553616f883feaa6a881.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/824488b5f7b9b034aeb9e9956869d19a.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/824488b5f7b9b034aeb9e9956869d19a.xml deleted file mode 100644 index d99291d..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/824488b5f7b9b034aeb9e9956869d19a.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - -
- - -
- -
- -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8369fa3544d8c922e2a6f5b8951efdbb.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8369fa3544d8c922e2a6f5b8951efdbb.xml deleted file mode 100644 index d6651d0..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8369fa3544d8c922e2a6f5b8951efdbb.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/840b686b0ada4b6cd567c0140ce29d37.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/840b686b0ada4b6cd567c0140ce29d37.xml deleted file mode 100644 index 3ac0d63..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/840b686b0ada4b6cd567c0140ce29d37.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - -
- - - - -
- - - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/849b0b8a957ca99e6eafbb0bf0178a20.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/849b0b8a957ca99e6eafbb0bf0178a20.xml deleted file mode 100644 index dd963ec..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/849b0b8a957ca99e6eafbb0bf0178a20.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
- - - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/85c568d44b4caf7ea92a433c30bd7007.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/85c568d44b4caf7ea92a433c30bd7007.xml deleted file mode 100644 index 0329bfd..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/85c568d44b4caf7ea92a433c30bd7007.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":2100,"prio_key":"CollisionGreenerBubble","state_controls":[{"token":1281,"show_states":{"0":true,"1":true,"2":false}}],"point_datas":[{"type":1,"min_zoom":"9.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500003,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":25,"top":15,"right":25,"bottom":12},"is_focus":"1","paramType":1},{"resId":500003,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":15,"top":25,"right":25,"bottom":12},"is_focus":"1","paramType":1},{"resId":500003,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":15,"top":25,"right":12,"bottom":25},"is_focus":"1","paramType":1},{"resId":500003,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":25,"top":15,"right":12,"bottom":25},"is_focus":"1","paramType":1}],"normalAnimations":[],"focusOpType":2,"focusCard_datas":[],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":0,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/866e5a841d7b6f8e72744a88525a1e9b.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/866e5a841d7b6f8e72744a88525a1e9b.xml deleted file mode 100644 index f9078fd..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/866e5a841d7b6f8e72744a88525a1e9b.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - -
- - -
- - - -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/868c39d2cf8b4ffae3f5bdb87aa598c2.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/868c39d2cf8b4ffae3f5bdb87aa598c2.xml deleted file mode 100644 index 9258341..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/868c39d2cf8b4ffae3f5bdb87aa598c2.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8751705337d179cd0a2e8e1122341638.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8751705337d179cd0a2e8e1122341638.xml deleted file mode 100644 index 5aa7f4c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8751705337d179cd0a2e8e1122341638.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
- - - -
- -
-
- - - -
- -
-
- - - - - - - -
- -
- -
- -
- -
-
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/878c69befab5e9c0c1ad566beed28832.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/878c69befab5e9c0c1ad566beed28832.xml deleted file mode 100644 index d95458a..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/878c69befab5e9c0c1ad566beed28832.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - -
-
-
- - -
- -
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/880d72ac32ebc20cc4cd0b42c11aeb46.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/880d72ac32ebc20cc4cd0b42c11aeb46.xml deleted file mode 100644 index 0e8174c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/880d72ac32ebc20cc4cd0b42c11aeb46.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/891334c8c3efeb99da223290049e9e6e.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/891334c8c3efeb99da223290049e9e6e.xml deleted file mode 100644 index 5b77eed..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/891334c8c3efeb99da223290049e9e6e.xml +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
-
- -
- - - -
- -
-
-
- -
- -
- -
- -
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8aeeb07e903776486c627950455f3c4a.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8aeeb07e903776486c627950455f3c4a.xml deleted file mode 100644 index 7c19635..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8aeeb07e903776486c627950455f3c4a.xml +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- -
- -
- - -
- -
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8b2df14efaffa9d52ebf8ad753556203.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8b2df14efaffa9d52ebf8ad753556203.xml deleted file mode 100644 index 40762b8..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8b2df14efaffa9d52ebf8ad753556203.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
- - - -
- - -
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8b37851bd0fa0c03985287f946a23489.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8b37851bd0fa0c03985287f946a23489.xml deleted file mode 100644 index 8de257a..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8b37851bd0fa0c03985287f946a23489.xml +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - - -
- -
-
- - - - - - - -
- -
- -
- -
- -
-
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8b5cebf54b6f79d86fb6a1774c16cfe9.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8b5cebf54b6f79d86fb6a1774c16cfe9.xml deleted file mode 100644 index 35852de..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8b5cebf54b6f79d86fb6a1774c16cfe9.xml +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - - - - -
- -
-
- - - - - - - -
- -
- -
- -
- -
-
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8cd98cef08c1d9d3b3b973c42385f762.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8cd98cef08c1d9d3b3b973c42385f762.xml deleted file mode 100644 index 8523fa4..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8cd98cef08c1d9d3b3b973c42385f762.xml +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- -
-
- - -
- -
-
- - -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8f07d801b268017355dcef71ea35378b.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8f07d801b268017355dcef71ea35378b.xml deleted file mode 100644 index 3b9e8dc..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8f07d801b268017355dcef71ea35378b.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- - -
- - - - - - - -
- -
-
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8f230ab6295fdd35608246c0803a2fea.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8f230ab6295fdd35608246c0803a2fea.xml deleted file mode 100644 index 1ba4fdd..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8f230ab6295fdd35608246c0803a2fea.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8f4f26bf198ff1eb944d6a21ed5f3cd6.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8f4f26bf198ff1eb944d6a21ed5f3cd6.xml deleted file mode 100644 index 142eac6..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8f4f26bf198ff1eb944d6a21ed5f3cd6.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":45,"prio_key":"CollisionPrioTravelScenicRoute","state_controls":[{"token":1287,"show_states":{"0":true,"1":true,"2":true,"3":false}},{"token":1288,"show_states":{"0":true,"1":false}}],"point_datas":[{"type":1,"min_zoom":"10.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500035,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":1},{"resId":500035,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":1}],"normalAnimations":[],"focusOpType":2,"focusCard_datas":[],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100014,"route":true,"alt_route":true,"screen":false,"point_filter":true,"view_filter":true,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":0,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8fd0e1a3b522b50d75ac9358f3b54538.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8fd0e1a3b522b50d75ac9358f3b54538.xml deleted file mode 100644 index 8c9887e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/8fd0e1a3b522b50d75ac9358f3b54538.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/90a118a25739be524226ea81b2d69e27.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/90a118a25739be524226ea81b2d69e27.xml deleted file mode 100644 index fe55731..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/90a118a25739be524226ea81b2d69e27.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - -
-
- - - - - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9205cb7ec30dc4fe2524ed0d6ab8ee50.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9205cb7ec30dc4fe2524ed0d6ab8ee50.xml deleted file mode 100644 index e0ff94b..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9205cb7ec30dc4fe2524ed0d6ab8ee50.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - -
-
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/92146d4a056ebd26740b344669e162af.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/92146d4a056ebd26740b344669e162af.xml deleted file mode 100644 index 25f62e3..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/92146d4a056ebd26740b344669e162af.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - - -
-
- -
-
- - -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9229cbee2f82849531fa17ef581fc822.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9229cbee2f82849531fa17ef581fc822.xml deleted file mode 100644 index e5f6b30..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9229cbee2f82849531fa17ef581fc822.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":3460,"prio_key":"CollisionPrioTollGate1","state_controls":[{"token":1281,"show_states":{"0":true,"1":true,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[{"routelength_max":300000,"min_level":"6.0f","max_level":"10.0f"},{"routelength_min":300001,"routelength_max":600000,"min_level":"5.0f","max_level":"10.0f"},{"routelength_min":600001,"routelength_max":10000000,"min_level":"4.0f","max_level":"10.0f"}],"click_motiontype":[],"card_datas":[{"resId":500018,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":1},{"resId":500018,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":1}],"normalAnimations":[],"focusCard_datas":[],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":true,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":0,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/922df6eec52d1a6276ca9c6fb1b74551.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/922df6eec52d1a6276ca9c6fb1b74551.xml deleted file mode 100644 index a42efb2..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/922df6eec52d1a6276ca9c6fb1b74551.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - -
- - -
- - - -
-
-
\ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/924986f412a3f5e5ff8fca8a053284fb.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/924986f412a3f5e5ff8fca8a053284fb.xml deleted file mode 100644 index 17178f6..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/924986f412a3f5e5ff8fca8a053284fb.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
- - - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9573b003776e345988708803ed64a2e1.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9573b003776e345988708803ed64a2e1.xml deleted file mode 100644 index eed0399..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9573b003776e345988708803ed64a2e1.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/960ca314166bc5519f61958f0cc13472.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/960ca314166bc5519f61958f0cc13472.xml deleted file mode 100644 index bb1d3db..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/960ca314166bc5519f61958f0cc13472.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/96f4d55e8eae91be4a9adb3536069f70.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/96f4d55e8eae91be4a9adb3536069f70.xml deleted file mode 100644 index ee48272..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/96f4d55e8eae91be4a9adb3536069f70.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - -
- - - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/96fa200c41513aeac4e101b2c4bf957a.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/96fa200c41513aeac4e101b2c4bf957a.xml deleted file mode 100644 index 92677e0..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/96fa200c41513aeac4e101b2c4bf957a.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - -
-
- -
- -
-
- - -
- -
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9700511ce54159aa07f612d99113bd20.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9700511ce54159aa07f612d99113bd20.xml deleted file mode 100644 index c164f50..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9700511ce54159aa07f612d99113bd20.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - -
-
-
- -
- -
-
- - -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/974fdbe32cf30a6952cb97e292358e74.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/974fdbe32cf30a6952cb97e292358e74.xml deleted file mode 100644 index 92fb098..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/974fdbe32cf30a6952cb97e292358e74.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - -
- - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/977a7dd888c847dcf85812ec6be06f92.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/977a7dd888c847dcf85812ec6be06f92.xml deleted file mode 100644 index 630038e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/977a7dd888c847dcf85812ec6be06f92.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - -
- - - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/979bbce6cdc47d92b2a854305a61777f.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/979bbce6cdc47d92b2a854305a61777f.xml deleted file mode 100644 index 7b67ec9..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/979bbce6cdc47d92b2a854305a61777f.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - -
-
- -
- - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9ad5274dcee2da5dc3f801b6e1d3471f.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9ad5274dcee2da5dc3f801b6e1d3471f.xml deleted file mode 100644 index 446aef4..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9ad5274dcee2da5dc3f801b6e1d3471f.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9b10ae9aa4bb773283bf778f6c7dcc3c.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9b10ae9aa4bb773283bf778f6c7dcc3c.xml deleted file mode 100644 index 16f07c1..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9b10ae9aa4bb773283bf778f6c7dcc3c.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
- -
-
-
- - -
- - -
-
\ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9b408443529a6b7058e416ae2120ccc5.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9b408443529a6b7058e416ae2120ccc5.xml deleted file mode 100644 index 913c8d8..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9b408443529a6b7058e416ae2120ccc5.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9c2baf7361be1f7ae5c2766b12abba40.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9c2baf7361be1f7ae5c2766b12abba40.xml deleted file mode 100644 index f2d3f60..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9c2baf7361be1f7ae5c2766b12abba40.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - -
-
- - -
- -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9cd2b84e27a81df3787f2bd2fca5d275.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9cd2b84e27a81df3787f2bd2fca5d275.xml deleted file mode 100644 index 3b36e36..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9cd2b84e27a81df3787f2bd2fca5d275.xml +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - - - -
- -
-
- -
- - - - -
- -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9e0d0c22bdc63eeb3f1ad940aeb27bcb.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9e0d0c22bdc63eeb3f1ad940aeb27bcb.xml deleted file mode 100644 index 6169915..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9e0d0c22bdc63eeb3f1ad940aeb27bcb.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":1960,"prio_key":"CollisionDriveCongestionBubble","state_controls":[{"token":1281,"show_states":{"0":true,"1":true,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500009,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":20,"top":15,"right":20,"bottom":25},"is_focus":"1","paramType":1},{"resId":500009,"anchorX":0.5,"anchorY":1,"textureStyle":"","padding":{"left":20,"top":10,"right":20,"bottom":25},"is_focus":"1","paramType":1},{"resId":500009,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":20,"top":15,"right":20,"bottom":25},"is_focus":"1","paramType":1},{"resId":500009,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":20,"top":15,"right":20,"bottom":25},"is_focus":"1","paramType":1},{"resId":500009,"anchorX":0.5,"anchorY":0,"textureStyle":"","padding":{"left":15,"top":15,"right":15,"bottom":25},"is_focus":"1","paramType":1},{"resId":500009,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":20,"top":15,"right":20,"bottom":25},"is_focus":"1","paramType":1}],"normalAnimations":[],"focusOpType":2,"focusCard_datas":[],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":true,"alt_route":true,"screen":false,"point_filter":true,"view_filter":true,"area_percent":0.2,"route_percent":0.25,"alt_route_percent":0.6,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9ed491944db0eee2ede283a4bd2890f7.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9ed491944db0eee2ede283a4bd2890f7.xml deleted file mode 100644 index 541e77c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9ed491944db0eee2ede283a4bd2890f7.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
-
- -
- -
-
- -
-
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9f00b4bda2a2b954354fa67aba665437.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9f00b4bda2a2b954354fa67aba665437.xml deleted file mode 100644 index 51d0fb7..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9f00b4bda2a2b954354fa67aba665437.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - -
- - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9f2432eca7a4fb42e534053c5979a02c.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9f2432eca7a4fb42e534053c5979a02c.xml deleted file mode 100644 index c9eaaf0..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/9f2432eca7a4fb42e534053c5979a02c.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
-
- - - -
- -
- -
-
- - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a0182e02a002afd38fca6efd00688823.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a0182e02a002afd38fca6efd00688823.xml deleted file mode 100644 index 4ef110b..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a0182e02a002afd38fca6efd00688823.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a09732c399d8a406aeba2a38a7a89f06.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a09732c399d8a406aeba2a38a7a89f06.xml deleted file mode 100644 index e71b489..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a09732c399d8a406aeba2a38a7a89f06.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a11a29af193a84e209be37a7f85f5efa.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a11a29af193a84e209be37a7f85f5efa.xml deleted file mode 100644 index 3688909..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a11a29af193a84e209be37a7f85f5efa.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - -
-
-
-
- -
- - -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a15e82b7bb72493616f7ef7458724100.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a15e82b7bb72493616f7ef7458724100.xml deleted file mode 100644 index 0ee2477..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a15e82b7bb72493616f7ef7458724100.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a2cea9df811f9a4581608a6a1a2e699f.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a2cea9df811f9a4581608a6a1a2e699f.xml deleted file mode 100644 index 47c7d9a..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a2cea9df811f9a4581608a6a1a2e699f.xml +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
- -
- - -
- -
- - - - - - - - - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a307d3a5efbff9a90c63535c76048a3d.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a307d3a5efbff9a90c63535c76048a3d.xml deleted file mode 100644 index 30a5f0c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a307d3a5efbff9a90c63535c76048a3d.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - -
-
-
- -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a40469d3338b49bbf0b47dc710582f5c.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a40469d3338b49bbf0b47dc710582f5c.xml deleted file mode 100644 index be34105..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a40469d3338b49bbf0b47dc710582f5c.xml +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
- - - -
- -
- -
- -
- -
-
-
- - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a44802357d49ffe80d16751f72283d13.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a44802357d49ffe80d16751f72283d13.xml deleted file mode 100644 index 8498831..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a44802357d49ffe80d16751f72283d13.xml +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - - - -
- -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a46b277974040ab267467a8af2beee88.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a46b277974040ab267467a8af2beee88.xml deleted file mode 100644 index 668b657..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a46b277974040ab267467a8af2beee88.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - -
-
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a4da39220a5e9f8ee655c0948ad50edb.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a4da39220a5e9f8ee655c0948ad50edb.xml deleted file mode 100644 index 36259a0..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a4da39220a5e9f8ee655c0948ad50edb.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - -
-
-
- - - -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a5257667afd88312814180facde5edc8.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a5257667afd88312814180facde5edc8.xml deleted file mode 100644 index 402d34e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a5257667afd88312814180facde5edc8.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
-
- - -
- -
-
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a5c97ebe93b91ac799e414fbf7560e9c.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a5c97ebe93b91ac799e414fbf7560e9c.xml deleted file mode 100644 index a80d0ad..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a5c97ebe93b91ac799e414fbf7560e9c.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a64a659329998ee3d4b6d3001715ca70.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a64a659329998ee3d4b6d3001715ca70.xml deleted file mode 100644 index 42c6458..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a64a659329998ee3d4b6d3001715ca70.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
- -
- - - - - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a6970b5e9ba5cb1249ba3f97ec0b0d85.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a6970b5e9ba5cb1249ba3f97ec0b0d85.xml deleted file mode 100644 index 371efa5..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a6970b5e9ba5cb1249ba3f97ec0b0d85.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - -
- - -
- -
- -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a6cd046b7e0923d70c71c3c48d714892.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a6cd046b7e0923d70c71c3c48d714892.xml deleted file mode 100644 index c2241cd..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a6cd046b7e0923d70c71c3c48d714892.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - -
- - - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a7161fa77f836843e5fd8f8441f4bc64.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a7161fa77f836843e5fd8f8441f4bc64.xml deleted file mode 100644 index 5b28dfa..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a7161fa77f836843e5fd8f8441f4bc64.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a9084b82cb03907a719ce0412c27440d.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a9084b82cb03907a719ce0412c27440d.xml deleted file mode 100644 index 9200c41..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/a9084b82cb03907a719ce0412c27440d.xml +++ /dev/null @@ -1 +0,0 @@ -{"layer_info":{"prio_key":"CollisionPrioMissingStationLine"},"line_datas":[{"line_params":{"line_type":0,"fill_color":"0xFFFFFFFF","border_color":"0xFF37BCFF","use_cap":false,"line_width":16,"border_line_width":50,"texture_len":32,"texture_anchor":{"x1":0,"y1":0.5,"x2":1,"y2":0.5},"fill_res_id":10005,"border_res_id":10005},"visible":false}]} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/aab91bc51ad41bb5f4f451f35f5eb90c.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/aab91bc51ad41bb5f4f451f35f5eb90c.xml deleted file mode 100644 index f57d4a2..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/aab91bc51ad41bb5f4f451f35f5eb90c.xml +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
- - -
- - - -
-
-
- - -
- - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/aae897e046255bcabc76bf0bac10f957.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/aae897e046255bcabc76bf0bac10f957.xml deleted file mode 100644 index 6c953a5..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/aae897e046255bcabc76bf0bac10f957.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":3410,"prio_key":"CollisionPrioLongtrip","state_controls":[{"token":1281,"show_states":{"0":false,"1":false,"2":true}},{"token":1289,"show_states":{"1":false,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[1],"card_datas":[{"resId":500032,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500032,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500032,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500032,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1}],"normalAnimations":[],"focusAnimations":[],"focusOpType":3,"focusCard_datas":[{"resId":501065,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":501065,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":501065,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":501065,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1}],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3},{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ab05d2898cd356ca8c2914be24957eeb.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ab05d2898cd356ca8c2914be24957eeb.xml deleted file mode 100644 index 695d60d..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ab05d2898cd356ca8c2914be24957eeb.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - -
-
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ab115e586e1dddb9dc54cc99fe96ac6e.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ab115e586e1dddb9dc54cc99fe96ac6e.xml deleted file mode 100644 index 8c7f7ff..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ab115e586e1dddb9dc54cc99fe96ac6e.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":1000,"sub_priority":13050,"prio_key":"CollisionPrioLongtrip","state_controls":[{"token":1281,"show_states":{"0":false,"1":false,"2":true}},{"token":1289,"show_states":{"1":false,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[1],"card_datas":[{"resId":500049,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500049,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500049,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500049,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1}],"normalAnimations":[],"focusAnimations":[],"focusOpType":3,"focusCard_datas":[{"resId":501057,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":501057,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":501057,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":501057,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1}],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3},{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ab1473d56151dba26d4d387e66b286ee.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ab1473d56151dba26d4d387e66b286ee.xml deleted file mode 100644 index 3744d77..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ab1473d56151dba26d4d387e66b286ee.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - -
- - -
- - - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/aca437f759f014327a02099da519feaf.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/aca437f759f014327a02099da519feaf.xml deleted file mode 100644 index 3ab4047..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/aca437f759f014327a02099da519feaf.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - -
-
-
-
- - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ad891a2b15e6552e036f8d2ffe4dfefa.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ad891a2b15e6552e036f8d2ffe4dfefa.xml deleted file mode 100644 index 335f3a9..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ad891a2b15e6552e036f8d2ffe4dfefa.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":1960,"prio_key":"CollisionDriveCongestionBubble","state_controls":[{"token":1281,"show_states":{"0":true,"1":true,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500011,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":20,"top":15,"right":20,"bottom":25},"is_focus":"1","paramType":1},{"resId":500011,"anchorX":0.5,"anchorY":1,"textureStyle":"","padding":{"left":20,"top":10,"right":20,"bottom":25},"is_focus":"1","paramType":1},{"resId":500011,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":20,"top":15,"right":20,"bottom":25},"is_focus":"1","paramType":1},{"resId":500011,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":20,"top":15,"right":20,"bottom":25},"is_focus":"1","paramType":1},{"resId":500011,"anchorX":0.5,"anchorY":0,"textureStyle":"","padding":{"left":15,"top":15,"right":15,"bottom":25},"is_focus":"1","paramType":1},{"resId":500011,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":20,"top":15,"right":20,"bottom":25},"is_focus":"1","paramType":1}],"normalAnimations":[],"focusOpType":2,"focusCard_datas":[],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":true,"alt_route":true,"screen":false,"point_filter":true,"view_filter":true,"area_percent":0.2,"route_percent":0.25,"alt_route_percent":0.6,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ae66bbb61f02d290279cae66b81e6542.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ae66bbb61f02d290279cae66b81e6542.xml deleted file mode 100644 index 43acf4e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ae66bbb61f02d290279cae66b81e6542.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - -
-
- - - -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ae756a4056633565ce7b1aa3aacfe6f5.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ae756a4056633565ce7b1aa3aacfe6f5.xml deleted file mode 100644 index 6a462cf..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ae756a4056633565ce7b1aa3aacfe6f5.xml +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
- - - -
- - -
- -
- - - - - - - - - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/af9bb0cff2c2d0923aacb6444c640ccd.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/af9bb0cff2c2d0923aacb6444c640ccd.xml deleted file mode 100644 index 6e229c5..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/af9bb0cff2c2d0923aacb6444c640ccd.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - $bgId = along.bgId - $brandIconId = along.brandIconId - $poiIndex = along.iconIndex - $fontSize = along.iconIndex>=10 ? 24 : 28 - -
-
-
- -
- -
-
-
\ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b09737244cf06165e1b29c394a482d40.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b09737244cf06165e1b29c394a482d40.xml deleted file mode 100644 index 8a7a574..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b09737244cf06165e1b29c394a482d40.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":3410,"prio_key":"CollisionPrioLongtrip","state_controls":[{"token":1281,"show_states":{"0":false,"1":false,"2":true}},{"token":1289,"show_states":{"1":false,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[1],"card_datas":[{"resId":500028,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500028,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500028,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500028,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500070,"anchorX":1,"anchorY":1,"textureStyle":"extend1","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1}],"normalAnimations":[],"focusAnimations":[],"focusOpType":3,"focusCard_datas":[{"resId":501067,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":501067,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":501067,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":501067,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1}],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3},{"group_id":null,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b16e64a5bb9e3065a606bb0008a006bb.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b16e64a5bb9e3065a606bb0008a006bb.xml deleted file mode 100644 index dbe41b4..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b16e64a5bb9e3065a606bb0008a006bb.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - $labelFontSize = __scene.pageType == 3 || __scene.pageType == 21 ? 28 : 24 - $infoFontSize = __scene.pageType == 3 || __scene.pageType == 21 ? 32 : 28 - $labelVisible = along.gasDiscountFlag > 0 || along.labelType == 2 || along.labelType == 3 ? 'display' : 'none' - $labelStyle = along.gasDiscountFlag > 0 ? 'background-image: linear-gradient(to left,#FD9800,#FFC000);' : 'background-image: linear-gradient(to left,#3299FF,#5BBEFE);' - $label = along.gasDiscountFlag > 0 ? '优惠' : (along.labelType == 2 ? '最近' : (along.labelType == 3 ? '顺路' : '')) - $text = along.bubbleText - -
-
-
- -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b228e82d0792f1cc57722fef7edd8cc3.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b228e82d0792f1cc57722fef7edd8cc3.xml deleted file mode 100644 index 21d1422..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b228e82d0792f1cc57722fef7edd8cc3.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":3060,"prio_key":"CollisionPrioWIAPrivatePoint","state_controls":[],"point_datas":[{"type":0,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500047,"anchorX":0.5,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":0},{"resId":500074,"anchorX":0.5,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":2}],"normalAnimations":[],"focusAnimations":[],"focusCard_datas":[{"resId":501056,"anchorX":0.5,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":0}],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":false,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":0,"marker_type":1},{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":2},{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":false,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":0,"marker_type":1}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b2862e3c93819b754db1948a858c58f2.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b2862e3c93819b754db1948a858c58f2.xml deleted file mode 100644 index 2019280..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b2862e3c93819b754db1948a858c58f2.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - -
- - -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b2a5859b38586481c6ee2492d040c465.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b2a5859b38586481c6ee2492d040c465.xml deleted file mode 100644 index 6a58b44..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b2a5859b38586481c6ee2492d040c465.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - -
-
-
-
-
- -
- - -
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b33b0ac95ceae0855c02d825f8deca47.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b33b0ac95ceae0855c02d825f8deca47.xml deleted file mode 100644 index 9b5b58c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b33b0ac95ceae0855c02d825f8deca47.xml +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
- - -
-
- - - -
- -
-
- - - - - - - -
- -
- -
- -
- -
-
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b391c87af03ae60fe1fbdbbc8210c00f.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b391c87af03ae60fe1fbdbbc8210c00f.xml deleted file mode 100644 index 3207046..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b391c87af03ae60fe1fbdbbc8210c00f.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - -
-
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b3b5656d761d67830eafef0096f36e19.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b3b5656d761d67830eafef0096f36e19.xml deleted file mode 100644 index 5c8d027..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b3b5656d761d67830eafef0096f36e19.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b4f44e76b81740918ea1af0ab8e31c00.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b4f44e76b81740918ea1af0ab8e31c00.xml deleted file mode 100644 index 9b0e64f..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b4f44e76b81740918ea1af0ab8e31c00.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":3060,"prio_key":"CollisionPrioWIAPrivatePoint","state_controls":[],"point_datas":[{"type":0,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500041,"anchorX":0.5,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":0},{"resId":500076,"anchorX":0.5,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":2}],"normalAnimations":[],"focusAnimations":[],"focusOpType":1,"focusCard_datas":[{"resId":500077,"anchorX":0.5,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":0}],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100000,"route":false,"alt_route":false,"screen":false,"point_filter":false,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":0,"marker_type":1},{"group_id":100000,"route":false,"alt_route":false,"screen":false,"point_filter":false,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":0,"marker_type":1},{"group_id":100000,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":2}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b5ffe098eee3325753d9d9317bc05271.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b5ffe098eee3325753d9d9317bc05271.xml deleted file mode 100644 index 1b5743c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b5ffe098eee3325753d9d9317bc05271.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - -
-
-
-
- - - -
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b819ab4aeb1c3f5214971fef2c4d6ba8.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b819ab4aeb1c3f5214971fef2c4d6ba8.xml deleted file mode 100644 index 8118134..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b819ab4aeb1c3f5214971fef2c4d6ba8.xml +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
-
- - - -
- -
-
- - - -
- -
- - - -
-
-
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b8588d79574c0b69b9762b0af9eb6fae.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b8588d79574c0b69b9762b0af9eb6fae.xml deleted file mode 100644 index 6af173b..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/b8588d79574c0b69b9762b0af9eb6fae.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
- - -
- - - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/bb2fcdce982a3b347f17e53d8a186a2d.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/bb2fcdce982a3b347f17e53d8a186a2d.xml deleted file mode 100644 index d99d183..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/bb2fcdce982a3b347f17e53d8a186a2d.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/bbcfae00e2ff574518d170b227af19c9.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/bbcfae00e2ff574518d170b227af19c9.xml deleted file mode 100644 index 29200dd..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/bbcfae00e2ff574518d170b227af19c9.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - -
- - - - - - -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/be36be1d5f2eb4961eb37d5c3b3d426f.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/be36be1d5f2eb4961eb37d5c3b3d426f.xml deleted file mode 100644 index 183b5fa..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/be36be1d5f2eb4961eb37d5c3b3d426f.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
- - - -
- -
-
- - - -
- - - -
- -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/bf218e28dedb7030a6954b2d7588a2c1.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/bf218e28dedb7030a6954b2d7588a2c1.xml deleted file mode 100644 index 69a66dd..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/bf218e28dedb7030a6954b2d7588a2c1.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/bf8e4d41f579bc7429c426f831b04b93.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/bf8e4d41f579bc7429c426f831b04b93.xml deleted file mode 100644 index 49d131d..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/bf8e4d41f579bc7429c426f831b04b93.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - -
-
-
- - - -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/bfdeb15ee1ead1740a245ab99fb122f3.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/bfdeb15ee1ead1740a245ab99fb122f3.xml deleted file mode 100644 index befc89a..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/bfdeb15ee1ead1740a245ab99fb122f3.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
- - -
- - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c01d92f1939050b2821f18298f7ad485.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c01d92f1939050b2821f18298f7ad485.xml deleted file mode 100644 index 1666aa9..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c01d92f1939050b2821f18298f7ad485.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c091277c1296f450b259a6b18792d8a9.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c091277c1296f450b259a6b18792d8a9.xml deleted file mode 100644 index addb7d5..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c091277c1296f450b259a6b18792d8a9.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - -
-
- -
-
- -
- -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c0927e26602770741f65a049a9353503.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c0927e26602770741f65a049a9353503.xml deleted file mode 100644 index 26e15e0..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c0927e26602770741f65a049a9353503.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c1551fc8217fa7fd891703c4bf473ae6.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c1551fc8217fa7fd891703c4bf473ae6.xml deleted file mode 100644 index e3be1e5..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c1551fc8217fa7fd891703c4bf473ae6.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - $labelFontSize = __scene.pageType == 3 || __scene.pageType == 21 ? 28 : 24 - $infoFontSize = __scene.pageType == 3 || __scene.pageType == 21 ? 32 : 28 - $labelVisible = along.gasDiscountFlag > 0 || along.labelType == 2 || along.labelType == 3 ? 'display' : 'none' - $labelStyle = along.gasDiscountFlag > 0 ? 'background-image: linear-gradient(to left,#FD9800,#FFC000);' : 'background-image: linear-gradient(to left,#3299FF,#5BBEFE);' - $label = along.gasDiscountFlag > 0 ? '优惠' : (along.labelType == 2 ? '最近' : (along.labelType == 3 ? '顺路' : '')) - $text = along.bubbleText - -
-
-
-
- -
- -
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c1b625a00fdc7fc43de33419b9365278.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c1b625a00fdc7fc43de33419b9365278.xml deleted file mode 100644 index 163f9f9..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c1b625a00fdc7fc43de33419b9365278.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
- - -
-
- -
- - -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c42a2b4699c6c938d670c51449e79558.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c42a2b4699c6c938d670c51449e79558.xml deleted file mode 100644 index 1a1307e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c42a2b4699c6c938d670c51449e79558.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":1000,"sub_priority":13050,"prio_key":"CollisionPrioLongtrip","state_controls":[{"token":1281,"show_states":{"0":false,"1":false,"2":true}},{"token":1289,"show_states":{"1":false,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[1],"card_datas":[{"resId":500065,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500065,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500065,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500065,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1}],"normalAnimations":[],"focusAnimations":[],"focusOpType":3,"focusCard_datas":[{"resId":500069,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":500069,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":500069,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":500069,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1}],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3},{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c58713219ebd5660ac2d239d52ccf79f.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c58713219ebd5660ac2d239d52ccf79f.xml deleted file mode 100644 index 1f67706..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c58713219ebd5660ac2d239d52ccf79f.xml +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
- -
- - -
- - -
- -
- - - -
-
-
- - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c6239b768c35af331bb5e310af4d4abc.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c6239b768c35af331bb5e310af4d4abc.xml deleted file mode 100644 index dca8a14..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c6239b768c35af331bb5e310af4d4abc.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":3410,"prio_key":"CollisionPrioLongtrip","state_controls":[{"token":1281,"show_states":{"0":false,"1":false,"2":true}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[1],"card_datas":[{"resId":500034,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":1}],"normalAnimations":[],"focusCard_datas":[],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":0,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c6c66ca62cd2ef14d4f3d140cd1e86be.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c6c66ca62cd2ef14d4f3d140cd1e86be.xml deleted file mode 100644 index 0ee6a2f..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c6c66ca62cd2ef14d4f3d140cd1e86be.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - -
-
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c7555999ee4b68376d5a803e99e9fd2e.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c7555999ee4b68376d5a803e99e9fd2e.xml deleted file mode 100644 index 7096c98..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c7555999ee4b68376d5a803e99e9fd2e.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":1400,"prio_key":"CollisionPrioLaneNaviSolidLineBubbleNew","state_controls":[{"token":1283,"show_states":{"0":false,"1":true,"2":false,"3":false}}],"point_datas":[{"type":0,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500022,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":1}],"normalAnimations":[],"focusCard_datas":[],"isPoiFilter":false}],"clickable":false,"is_carplay":true,"is_hd_layer":true,"behavior_type":0},"collision_datas":{"items":[]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c837c55d0777041b465711e9748c3c3c.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c837c55d0777041b465711e9748c3c3c.xml deleted file mode 100644 index 0bceb19..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c837c55d0777041b465711e9748c3c3c.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - -
-
- -
- - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c8bc0cd0c1a7fc6c04d1d4b9a8aab58f.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c8bc0cd0c1a7fc6c04d1d4b9a8aab58f.xml deleted file mode 100644 index 7631382..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c8bc0cd0c1a7fc6c04d1d4b9a8aab58f.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":1350,"prio_key":"CollisionPrioTravelCalorieBubble","state_controls":[],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500014,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":1},{"resId":500014,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":1}],"normalAnimations":[{"type":0,"animationParam":{"duration":500,"param1":0,"param2":1}}],"focusOpType":2,"focusCard_datas":[],"isPoiFilter":false}],"clickable":false,"is_carplay":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100014,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":0,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c8e34d138317cc1f9af978d333d07fac.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c8e34d138317cc1f9af978d333d07fac.xml deleted file mode 100644 index 2090cb5..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c8e34d138317cc1f9af978d333d07fac.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - - -
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c9c0fecaa2350defe4ec34f4129521dc.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c9c0fecaa2350defe4ec34f4129521dc.xml deleted file mode 100644 index 1727816..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/c9c0fecaa2350defe4ec34f4129521dc.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - -
-
- -
- - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/cd70332c86e3149b0c57887dd203bd3f.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/cd70332c86e3149b0c57887dd203bd3f.xml deleted file mode 100644 index ae6df94..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/cd70332c86e3149b0c57887dd203bd3f.xml +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
- -
- - -
- -
- - - - - - - - - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/cd85523f89be957f4e8a50b560982398.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/cd85523f89be957f4e8a50b560982398.xml deleted file mode 100644 index c1f433c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/cd85523f89be957f4e8a50b560982398.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/cf7da4b9c5f5878979cf00bcb49e8748.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/cf7da4b9c5f5878979cf00bcb49e8748.xml deleted file mode 100644 index c60a255..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/cf7da4b9c5f5878979cf00bcb49e8748.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - -
- - - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/cf967e61a502f7378c67b422eb6b38e7.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/cf967e61a502f7378c67b422eb6b38e7.xml deleted file mode 100644 index 3ded110..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/cf967e61a502f7378c67b422eb6b38e7.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/config.json b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/config.json deleted file mode 100644 index e74c168..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/config.json +++ /dev/null @@ -1 +0,0 @@ -{"zipVersion":"0.0.0.249","versionId":248,"divInfoId":213,"divVersion":"12.10.0","uuid":"LOUlYYZr","name":"c1","templates":{"10062":{"res":{"200021":{"name":"edac95d141ded19dd323b28135cd242d","files":"edac95d141ded19dd323b28135cd242d@2x.png,edac95d141ded19dd323b28135cd242d@3x.png,edac95d141ded19dd323b28135cd242d@dark@2x.png,edac95d141ded19dd323b28135cd242d@dark@3x.png"}},"xml":"d548675d7b26c09785bd7d6739b72817.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/d1744da535bff479975f888aa76eda19.zip"},"10212":{"res":{"10046":{"name":"b7c1b1348a10ab841cc8b916d3a5ab8c","files":"b7c1b1348a10ab841cc8b916d3a5ab8c@2x.webp,b7c1b1348a10ab841cc8b916d3a5ab8c@3x.webp"}},"xml":"9f00b4bda2a2b954354fa67aba665437.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/adde9603806231462a4bf6d880a9313b.zip"},"10213":{"res":{"10046":{"name":"b7c1b1348a10ab841cc8b916d3a5ab8c","files":"b7c1b1348a10ab841cc8b916d3a5ab8c@2x.webp,b7c1b1348a10ab841cc8b916d3a5ab8c@3x.webp"},"10214":{"name":"be6ba1d7e112df4e2491dd8f9412b3fe","files":"be6ba1d7e112df4e2491dd8f9412b3fe@2x.webp,be6ba1d7e112df4e2491dd8f9412b3fe@3x.webp"},"10215":{"name":"1f0477c7aa139d99816e7ab07dd4fa60","files":"1f0477c7aa139d99816e7ab07dd4fa60@2x.webp,1f0477c7aa139d99816e7ab07dd4fa60@3x.webp"}},"xml":"666f311880ae8a3160fa2951c4230ea1.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/48849d5df051a13352d54099cbbe4cff.zip"},"10220":{"res":{"10042":{"name":"c641886320d60b7376778327e55ee9c7","files":"c641886320d60b7376778327e55ee9c7@2x.webp,c641886320d60b7376778327e55ee9c7@3x.webp"},"10043":{"name":"3841e75f5d14c7f7e8c5fb952c849b75","files":"3841e75f5d14c7f7e8c5fb952c849b75@2x.webp,3841e75f5d14c7f7e8c5fb952c849b75@3x.webp"},"10044":{"name":"be3ba3a695bc7185bc217bc36a03898d","files":"be3ba3a695bc7185bc217bc36a03898d@2x.webp,be3ba3a695bc7185bc217bc36a03898d@3x.webp"},"10045":{"name":"fc35253f63051ac991997641468f81f3","files":"fc35253f63051ac991997641468f81f3@2x.webp,fc35253f63051ac991997641468f81f3@3x.webp"},"10046":{"name":"b7c1b1348a10ab841cc8b916d3a5ab8c","files":"b7c1b1348a10ab841cc8b916d3a5ab8c@2x.webp,b7c1b1348a10ab841cc8b916d3a5ab8c@3x.webp"},"10047":{"name":"53933895caaea91f86b51261b3057e56","files":"53933895caaea91f86b51261b3057e56@2x.webp,53933895caaea91f86b51261b3057e56@3x.webp"},"10048":{"name":"6bde3780d8e7bc82a8c4f5faabdbfef6","files":"6bde3780d8e7bc82a8c4f5faabdbfef6@2x.webp,6bde3780d8e7bc82a8c4f5faabdbfef6@3x.webp"},"10049":{"name":"9501fac5e0d166549bb6466ef8792926","files":"9501fac5e0d166549bb6466ef8792926@2x.webp,9501fac5e0d166549bb6466ef8792926@3x.webp"},"10050":{"name":"b9760ba1bd7dd4e33fcd135bbb77d57e","files":"b9760ba1bd7dd4e33fcd135bbb77d57e@2x.webp,b9760ba1bd7dd4e33fcd135bbb77d57e@3x.webp"},"10051":{"name":"7d7cdb616d46e81dab31bbd5a6acd481","files":"7d7cdb616d46e81dab31bbd5a6acd481@2x.webp,7d7cdb616d46e81dab31bbd5a6acd481@3x.webp"},"10052":{"name":"b1ef724e8e7357d6683ee3d1d5c11687","files":"b1ef724e8e7357d6683ee3d1d5c11687@2x.webp,b1ef724e8e7357d6683ee3d1d5c11687@3x.webp"},"10200":{"name":"80263ba8bf205d767826d1c573ef0f41","files":"80263ba8bf205d767826d1c573ef0f41@2x.webp,80263ba8bf205d767826d1c573ef0f41@3x.webp"},"10201":{"name":"50fced87da57d1f6df527f0e79c76fc3","files":"50fced87da57d1f6df527f0e79c76fc3@2x.webp,50fced87da57d1f6df527f0e79c76fc3@3x.webp"},"10202":{"name":"21656018544d3886116be63863ef2817","files":"21656018544d3886116be63863ef2817@2x.webp,21656018544d3886116be63863ef2817@3x.webp"},"10203":{"name":"144bc75bf968a3757ea9db8f4c2fe614","files":"144bc75bf968a3757ea9db8f4c2fe614@2x.webp,144bc75bf968a3757ea9db8f4c2fe614@3x.webp"},"10204":{"name":"32ce6855303838db2243f7dd28d04e18","files":"32ce6855303838db2243f7dd28d04e18@2x.webp,32ce6855303838db2243f7dd28d04e18@3x.webp"},"10205":{"name":"b8006d21e8d5b8516428b9937b82cacc","files":"b8006d21e8d5b8516428b9937b82cacc@2x.webp,b8006d21e8d5b8516428b9937b82cacc@3x.webp"},"10206":{"name":"fe751fbb24ef429394641e36ab8eb4f2","files":"fe751fbb24ef429394641e36ab8eb4f2@2x.webp,fe751fbb24ef429394641e36ab8eb4f2@3x.webp"},"10208":{"name":"6d8409abdbced6864059b97026fd5cad","files":"6d8409abdbced6864059b97026fd5cad@2x.webp,6d8409abdbced6864059b97026fd5cad@3x.webp"},"10209":{"name":"eedd58e1fef6f894fe46e9acf5754812","files":"eedd58e1fef6f894fe46e9acf5754812@2x.webp,eedd58e1fef6f894fe46e9acf5754812@3x.webp"},"10222":{"name":"d7cef758b8aebc6ecbbc1d9ad1e552cc","files":"d7cef758b8aebc6ecbbc1d9ad1e552cc@2x.webp,d7cef758b8aebc6ecbbc1d9ad1e552cc@3x.webp"},"10224":{"name":"302e6c2f6ff4713607a5a9b65e0e9afa","files":"302e6c2f6ff4713607a5a9b65e0e9afa@2x.webp,302e6c2f6ff4713607a5a9b65e0e9afa@3x.webp"},"10226":{"name":"614c795756e5a617374fc6b977e809a0","files":"614c795756e5a617374fc6b977e809a0@2x.webp,614c795756e5a617374fc6b977e809a0@3x.webp"},"10228":{"name":"90fdeeb71ac86a856c537958b985f3a6","files":"90fdeeb71ac86a856c537958b985f3a6@2x.webp,90fdeeb71ac86a856c537958b985f3a6@3x.webp"},"10230":{"name":"24d9b14be942dcef31393b9b6c0a6426","files":"24d9b14be942dcef31393b9b6c0a6426@2x.webp,24d9b14be942dcef31393b9b6c0a6426@3x.webp"},"10242":{"name":"bb6d91170ddee009d5437fdafd58f40e","files":"bb6d91170ddee009d5437fdafd58f40e@2x.webp,bb6d91170ddee009d5437fdafd58f40e@3x.webp"},"10244":{"name":"bb6d91170ddee009d5437fdafd58f40e","files":"bb6d91170ddee009d5437fdafd58f40e@2x.webp,bb6d91170ddee009d5437fdafd58f40e@3x.webp"},"10246":{"name":"bb6d91170ddee009d5437fdafd58f40e","files":"bb6d91170ddee009d5437fdafd58f40e@2x.webp,bb6d91170ddee009d5437fdafd58f40e@3x.webp"},"10248":{"name":"c8b0adb41d7074b7ee8409ba1804765f","files":"c8b0adb41d7074b7ee8409ba1804765f@2x.webp,c8b0adb41d7074b7ee8409ba1804765f@3x.webp"}},"xml":"979bbce6cdc47d92b2a854305a61777f.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/b12f8f6e8d4571ccdc8ed1d03894e203.zip"},"10221":{"res":{"10042":{"name":"c641886320d60b7376778327e55ee9c7","files":"c641886320d60b7376778327e55ee9c7@2x.webp,c641886320d60b7376778327e55ee9c7@3x.webp"},"10043":{"name":"3841e75f5d14c7f7e8c5fb952c849b75","files":"3841e75f5d14c7f7e8c5fb952c849b75@2x.webp,3841e75f5d14c7f7e8c5fb952c849b75@3x.webp"},"10044":{"name":"be3ba3a695bc7185bc217bc36a03898d","files":"be3ba3a695bc7185bc217bc36a03898d@2x.webp,be3ba3a695bc7185bc217bc36a03898d@3x.webp"},"10045":{"name":"fc35253f63051ac991997641468f81f3","files":"fc35253f63051ac991997641468f81f3@2x.webp,fc35253f63051ac991997641468f81f3@3x.webp"},"10046":{"name":"b7c1b1348a10ab841cc8b916d3a5ab8c","files":"b7c1b1348a10ab841cc8b916d3a5ab8c@2x.webp,b7c1b1348a10ab841cc8b916d3a5ab8c@3x.webp"},"10047":{"name":"53933895caaea91f86b51261b3057e56","files":"53933895caaea91f86b51261b3057e56@2x.webp,53933895caaea91f86b51261b3057e56@3x.webp"},"10048":{"name":"6bde3780d8e7bc82a8c4f5faabdbfef6","files":"6bde3780d8e7bc82a8c4f5faabdbfef6@2x.webp,6bde3780d8e7bc82a8c4f5faabdbfef6@3x.webp"},"10049":{"name":"9501fac5e0d166549bb6466ef8792926","files":"9501fac5e0d166549bb6466ef8792926@2x.webp,9501fac5e0d166549bb6466ef8792926@3x.webp"},"10050":{"name":"b9760ba1bd7dd4e33fcd135bbb77d57e","files":"b9760ba1bd7dd4e33fcd135bbb77d57e@2x.webp,b9760ba1bd7dd4e33fcd135bbb77d57e@3x.webp"},"10051":{"name":"7d7cdb616d46e81dab31bbd5a6acd481","files":"7d7cdb616d46e81dab31bbd5a6acd481@2x.webp,7d7cdb616d46e81dab31bbd5a6acd481@3x.webp"},"10052":{"name":"b1ef724e8e7357d6683ee3d1d5c11687","files":"b1ef724e8e7357d6683ee3d1d5c11687@2x.webp,b1ef724e8e7357d6683ee3d1d5c11687@3x.webp"},"10200":{"name":"80263ba8bf205d767826d1c573ef0f41","files":"80263ba8bf205d767826d1c573ef0f41@2x.webp,80263ba8bf205d767826d1c573ef0f41@3x.webp"},"10201":{"name":"50fced87da57d1f6df527f0e79c76fc3","files":"50fced87da57d1f6df527f0e79c76fc3@2x.webp,50fced87da57d1f6df527f0e79c76fc3@3x.webp"},"10202":{"name":"21656018544d3886116be63863ef2817","files":"21656018544d3886116be63863ef2817@2x.webp,21656018544d3886116be63863ef2817@3x.webp"},"10203":{"name":"144bc75bf968a3757ea9db8f4c2fe614","files":"144bc75bf968a3757ea9db8f4c2fe614@2x.webp,144bc75bf968a3757ea9db8f4c2fe614@3x.webp"},"10204":{"name":"32ce6855303838db2243f7dd28d04e18","files":"32ce6855303838db2243f7dd28d04e18@2x.webp,32ce6855303838db2243f7dd28d04e18@3x.webp"},"10205":{"name":"b8006d21e8d5b8516428b9937b82cacc","files":"b8006d21e8d5b8516428b9937b82cacc@2x.webp,b8006d21e8d5b8516428b9937b82cacc@3x.webp"},"10206":{"name":"fe751fbb24ef429394641e36ab8eb4f2","files":"fe751fbb24ef429394641e36ab8eb4f2@2x.webp,fe751fbb24ef429394641e36ab8eb4f2@3x.webp"},"10208":{"name":"6d8409abdbced6864059b97026fd5cad","files":"6d8409abdbced6864059b97026fd5cad@2x.webp,6d8409abdbced6864059b97026fd5cad@3x.webp"},"10209":{"name":"eedd58e1fef6f894fe46e9acf5754812","files":"eedd58e1fef6f894fe46e9acf5754812@2x.webp,eedd58e1fef6f894fe46e9acf5754812@3x.webp"},"10222":{"name":"d7cef758b8aebc6ecbbc1d9ad1e552cc","files":"d7cef758b8aebc6ecbbc1d9ad1e552cc@2x.webp,d7cef758b8aebc6ecbbc1d9ad1e552cc@3x.webp"},"10225":{"name":"918bff9a06d1a44cb749896b00f549e4","files":"918bff9a06d1a44cb749896b00f549e4@2x.webp,918bff9a06d1a44cb749896b00f549e4@3x.webp"},"10227":{"name":"3b68cfe726a0d41fdd620c3d8103c204","files":"3b68cfe726a0d41fdd620c3d8103c204@2x.webp,3b68cfe726a0d41fdd620c3d8103c204@3x.webp"},"10229":{"name":"ab5e1bee10c8807b79afb3481d816200","files":"ab5e1bee10c8807b79afb3481d816200@2x.webp,ab5e1bee10c8807b79afb3481d816200@3x.webp"},"10231":{"name":"77593f775bfee2a25208395d0f6c2171","files":"77593f775bfee2a25208395d0f6c2171@2x.webp,77593f775bfee2a25208395d0f6c2171@3x.webp"},"10243":{"name":"284d32a43a70f3156048e6e31c86ddf7","files":"284d32a43a70f3156048e6e31c86ddf7@2x.webp,284d32a43a70f3156048e6e31c86ddf7@3x.webp"},"10245":{"name":"284d32a43a70f3156048e6e31c86ddf7","files":"284d32a43a70f3156048e6e31c86ddf7@2x.webp,284d32a43a70f3156048e6e31c86ddf7@3x.webp"},"10247":{"name":"284d32a43a70f3156048e6e31c86ddf7","files":"284d32a43a70f3156048e6e31c86ddf7@2x.webp,284d32a43a70f3156048e6e31c86ddf7@3x.webp"},"10249":{"name":"a267ddbfc96602f0fff318ddd6f67522","files":"a267ddbfc96602f0fff318ddd6f67522@2x.webp,a267ddbfc96602f0fff318ddd6f67522@3x.webp"}},"xml":"2575f9139864dff0364ba82628438af5.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/af1afcd3b6dee7a797a8ca91f50a7764.zip"},"10232":{"res":{"10050":{"name":"b9760ba1bd7dd4e33fcd135bbb77d57e","files":"b9760ba1bd7dd4e33fcd135bbb77d57e@2x.webp,b9760ba1bd7dd4e33fcd135bbb77d57e@3x.webp"},"10208":{"name":"6d8409abdbced6864059b97026fd5cad","files":"6d8409abdbced6864059b97026fd5cad@2x.webp,6d8409abdbced6864059b97026fd5cad@3x.webp"},"10234":{"name":"9435ec0931cae6a50d06babc7a5b42b2","files":"9435ec0931cae6a50d06babc7a5b42b2@2x.webp,9435ec0931cae6a50d06babc7a5b42b2@3x.webp"},"10235":{"name":"89d3f4196fefc6fb7187953e2b022408","files":"89d3f4196fefc6fb7187953e2b022408@2x.webp,89d3f4196fefc6fb7187953e2b022408@3x.webp"}},"xml":"880d72ac32ebc20cc4cd0b42c11aeb46.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/ec3ed04be67cc12e4594db5bcf379198.zip"},"10233":{"res":{"10050":{"name":"b9760ba1bd7dd4e33fcd135bbb77d57e","files":"b9760ba1bd7dd4e33fcd135bbb77d57e@2x.webp,b9760ba1bd7dd4e33fcd135bbb77d57e@3x.webp"},"10208":{"name":"6d8409abdbced6864059b97026fd5cad","files":"6d8409abdbced6864059b97026fd5cad@2x.webp,6d8409abdbced6864059b97026fd5cad@3x.webp"},"10234":{"name":"9435ec0931cae6a50d06babc7a5b42b2","files":"9435ec0931cae6a50d06babc7a5b42b2@2x.webp,9435ec0931cae6a50d06babc7a5b42b2@3x.webp"},"10235":{"name":"89d3f4196fefc6fb7187953e2b022408","files":"89d3f4196fefc6fb7187953e2b022408@2x.webp,89d3f4196fefc6fb7187953e2b022408@3x.webp"}},"xml":"1694fb4794a6881103f9e563fa622441.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/d13d55cc5db42000092c1094eabb096e.zip"},"10236":{"res":{},"xml":"c1b625a00fdc7fc43de33419b9365278.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/5b466485a37d7f870f5db57368e4b5eb.zip"},"10237":{"res":{},"xml":"368a2a45801e213a9736fd5dc00e5693.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/20cc98a6ce270ac9130ea8384c66cc7c.zip"},"10238":{"res":{},"xml":"c091277c1296f450b259a6b18792d8a9.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/53a51f5cea75cbf099d6fd1725d18bed.zip"},"10239":{"res":{},"xml":"7f9c3cfd7d7758e016c6ff71b9df4149.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/4fe7c52fde4d0952d81d42d34e133168.zip"},"10240":{"res":{"10050":{"name":"b9760ba1bd7dd4e33fcd135bbb77d57e","files":"b9760ba1bd7dd4e33fcd135bbb77d57e@2x.webp,b9760ba1bd7dd4e33fcd135bbb77d57e@3x.webp"},"10234":{"name":"9435ec0931cae6a50d06babc7a5b42b2","files":"9435ec0931cae6a50d06babc7a5b42b2@2x.webp,9435ec0931cae6a50d06babc7a5b42b2@3x.webp"}},"xml":"0a84bc917dc2c0a8a7e03453e22b2f8c.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/ddc7fa02ed4fd35b5dd3814647ca97c8.zip"},"10241":{"res":{"10208":{"name":"6d8409abdbced6864059b97026fd5cad","files":"6d8409abdbced6864059b97026fd5cad@2x.webp,6d8409abdbced6864059b97026fd5cad@3x.webp"},"10235":{"name":"89d3f4196fefc6fb7187953e2b022408","files":"89d3f4196fefc6fb7187953e2b022408@2x.webp,89d3f4196fefc6fb7187953e2b022408@3x.webp"}},"xml":"1694fb4794a6881103f9e563fa622441.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/9653d754dfa58f0b2ce1b9add0a5e12e.zip"},"10250":{"res":{"10042":{"name":"c641886320d60b7376778327e55ee9c7","files":"c641886320d60b7376778327e55ee9c7@2x.webp,c641886320d60b7376778327e55ee9c7@3x.webp"},"10043":{"name":"3841e75f5d14c7f7e8c5fb952c849b75","files":"3841e75f5d14c7f7e8c5fb952c849b75@2x.webp,3841e75f5d14c7f7e8c5fb952c849b75@3x.webp"},"10044":{"name":"be3ba3a695bc7185bc217bc36a03898d","files":"be3ba3a695bc7185bc217bc36a03898d@2x.webp,be3ba3a695bc7185bc217bc36a03898d@3x.webp"},"10045":{"name":"fc35253f63051ac991997641468f81f3","files":"fc35253f63051ac991997641468f81f3@2x.webp,fc35253f63051ac991997641468f81f3@3x.webp"},"10046":{"name":"b7c1b1348a10ab841cc8b916d3a5ab8c","files":"b7c1b1348a10ab841cc8b916d3a5ab8c@2x.webp,b7c1b1348a10ab841cc8b916d3a5ab8c@3x.webp"},"10047":{"name":"53933895caaea91f86b51261b3057e56","files":"53933895caaea91f86b51261b3057e56@2x.webp,53933895caaea91f86b51261b3057e56@3x.webp"},"10048":{"name":"6bde3780d8e7bc82a8c4f5faabdbfef6","files":"6bde3780d8e7bc82a8c4f5faabdbfef6@2x.webp,6bde3780d8e7bc82a8c4f5faabdbfef6@3x.webp"},"10049":{"name":"9501fac5e0d166549bb6466ef8792926","files":"9501fac5e0d166549bb6466ef8792926@2x.webp,9501fac5e0d166549bb6466ef8792926@3x.webp"},"10050":{"name":"b9760ba1bd7dd4e33fcd135bbb77d57e","files":"b9760ba1bd7dd4e33fcd135bbb77d57e@2x.webp,b9760ba1bd7dd4e33fcd135bbb77d57e@3x.webp"},"10051":{"name":"7d7cdb616d46e81dab31bbd5a6acd481","files":"7d7cdb616d46e81dab31bbd5a6acd481@2x.webp,7d7cdb616d46e81dab31bbd5a6acd481@3x.webp"},"10052":{"name":"b1ef724e8e7357d6683ee3d1d5c11687","files":"b1ef724e8e7357d6683ee3d1d5c11687@2x.webp,b1ef724e8e7357d6683ee3d1d5c11687@3x.webp"},"10200":{"name":"80263ba8bf205d767826d1c573ef0f41","files":"80263ba8bf205d767826d1c573ef0f41@2x.webp,80263ba8bf205d767826d1c573ef0f41@3x.webp"},"10201":{"name":"50fced87da57d1f6df527f0e79c76fc3","files":"50fced87da57d1f6df527f0e79c76fc3@2x.webp,50fced87da57d1f6df527f0e79c76fc3@3x.webp"},"10202":{"name":"21656018544d3886116be63863ef2817","files":"21656018544d3886116be63863ef2817@2x.webp,21656018544d3886116be63863ef2817@3x.webp"},"10203":{"name":"144bc75bf968a3757ea9db8f4c2fe614","files":"144bc75bf968a3757ea9db8f4c2fe614@2x.webp,144bc75bf968a3757ea9db8f4c2fe614@3x.webp"},"10204":{"name":"32ce6855303838db2243f7dd28d04e18","files":"32ce6855303838db2243f7dd28d04e18@2x.webp,32ce6855303838db2243f7dd28d04e18@3x.webp"},"10205":{"name":"b8006d21e8d5b8516428b9937b82cacc","files":"b8006d21e8d5b8516428b9937b82cacc@2x.webp,b8006d21e8d5b8516428b9937b82cacc@3x.webp"},"10206":{"name":"fe751fbb24ef429394641e36ab8eb4f2","files":"fe751fbb24ef429394641e36ab8eb4f2@2x.webp,fe751fbb24ef429394641e36ab8eb4f2@3x.webp"},"10208":{"name":"6d8409abdbced6864059b97026fd5cad","files":"6d8409abdbced6864059b97026fd5cad@2x.webp,6d8409abdbced6864059b97026fd5cad@3x.webp"},"10209":{"name":"eedd58e1fef6f894fe46e9acf5754812","files":"eedd58e1fef6f894fe46e9acf5754812@2x.webp,eedd58e1fef6f894fe46e9acf5754812@3x.webp"},"10222":{"name":"d7cef758b8aebc6ecbbc1d9ad1e552cc","files":"d7cef758b8aebc6ecbbc1d9ad1e552cc@2x.webp,d7cef758b8aebc6ecbbc1d9ad1e552cc@3x.webp"},"10224":{"name":"302e6c2f6ff4713607a5a9b65e0e9afa","files":"302e6c2f6ff4713607a5a9b65e0e9afa@2x.webp,302e6c2f6ff4713607a5a9b65e0e9afa@3x.webp"},"10226":{"name":"614c795756e5a617374fc6b977e809a0","files":"614c795756e5a617374fc6b977e809a0@2x.webp,614c795756e5a617374fc6b977e809a0@3x.webp"},"10228":{"name":"90fdeeb71ac86a856c537958b985f3a6","files":"90fdeeb71ac86a856c537958b985f3a6@2x.webp,90fdeeb71ac86a856c537958b985f3a6@3x.webp"},"10230":{"name":"24d9b14be942dcef31393b9b6c0a6426","files":"24d9b14be942dcef31393b9b6c0a6426@2x.webp,24d9b14be942dcef31393b9b6c0a6426@3x.webp"},"10242":{"name":"bb6d91170ddee009d5437fdafd58f40e","files":"bb6d91170ddee009d5437fdafd58f40e@2x.webp,bb6d91170ddee009d5437fdafd58f40e@3x.webp"},"10244":{"name":"bb6d91170ddee009d5437fdafd58f40e","files":"bb6d91170ddee009d5437fdafd58f40e@2x.webp,bb6d91170ddee009d5437fdafd58f40e@3x.webp"},"10246":{"name":"bb6d91170ddee009d5437fdafd58f40e","files":"bb6d91170ddee009d5437fdafd58f40e@2x.webp,bb6d91170ddee009d5437fdafd58f40e@3x.webp"},"10248":{"name":"c8b0adb41d7074b7ee8409ba1804765f","files":"c8b0adb41d7074b7ee8409ba1804765f@2x.webp,c8b0adb41d7074b7ee8409ba1804765f@3x.webp"}},"xml":"c9c0fecaa2350defe4ec34f4129521dc.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/e788f364d3daf3a48cc6348775ea54d9.zip"},"10251":{"res":{"10042":{"name":"c641886320d60b7376778327e55ee9c7","files":"c641886320d60b7376778327e55ee9c7@2x.webp,c641886320d60b7376778327e55ee9c7@3x.webp"},"10043":{"name":"3841e75f5d14c7f7e8c5fb952c849b75","files":"3841e75f5d14c7f7e8c5fb952c849b75@2x.webp,3841e75f5d14c7f7e8c5fb952c849b75@3x.webp"},"10044":{"name":"be3ba3a695bc7185bc217bc36a03898d","files":"be3ba3a695bc7185bc217bc36a03898d@2x.webp,be3ba3a695bc7185bc217bc36a03898d@3x.webp"},"10045":{"name":"fc35253f63051ac991997641468f81f3","files":"fc35253f63051ac991997641468f81f3@2x.webp,fc35253f63051ac991997641468f81f3@3x.webp"},"10046":{"name":"b7c1b1348a10ab841cc8b916d3a5ab8c","files":"b7c1b1348a10ab841cc8b916d3a5ab8c@2x.webp,b7c1b1348a10ab841cc8b916d3a5ab8c@3x.webp"},"10047":{"name":"53933895caaea91f86b51261b3057e56","files":"53933895caaea91f86b51261b3057e56@2x.webp,53933895caaea91f86b51261b3057e56@3x.webp"},"10048":{"name":"6bde3780d8e7bc82a8c4f5faabdbfef6","files":"6bde3780d8e7bc82a8c4f5faabdbfef6@2x.webp,6bde3780d8e7bc82a8c4f5faabdbfef6@3x.webp"},"10049":{"name":"9501fac5e0d166549bb6466ef8792926","files":"9501fac5e0d166549bb6466ef8792926@2x.webp,9501fac5e0d166549bb6466ef8792926@3x.webp"},"10050":{"name":"b9760ba1bd7dd4e33fcd135bbb77d57e","files":"b9760ba1bd7dd4e33fcd135bbb77d57e@2x.webp,b9760ba1bd7dd4e33fcd135bbb77d57e@3x.webp"},"10051":{"name":"7d7cdb616d46e81dab31bbd5a6acd481","files":"7d7cdb616d46e81dab31bbd5a6acd481@2x.webp,7d7cdb616d46e81dab31bbd5a6acd481@3x.webp"},"10052":{"name":"b1ef724e8e7357d6683ee3d1d5c11687","files":"b1ef724e8e7357d6683ee3d1d5c11687@2x.webp,b1ef724e8e7357d6683ee3d1d5c11687@3x.webp"},"10200":{"name":"80263ba8bf205d767826d1c573ef0f41","files":"80263ba8bf205d767826d1c573ef0f41@2x.webp,80263ba8bf205d767826d1c573ef0f41@3x.webp"},"10201":{"name":"50fced87da57d1f6df527f0e79c76fc3","files":"50fced87da57d1f6df527f0e79c76fc3@2x.webp,50fced87da57d1f6df527f0e79c76fc3@3x.webp"},"10202":{"name":"21656018544d3886116be63863ef2817","files":"21656018544d3886116be63863ef2817@2x.webp,21656018544d3886116be63863ef2817@3x.webp"},"10203":{"name":"144bc75bf968a3757ea9db8f4c2fe614","files":"144bc75bf968a3757ea9db8f4c2fe614@2x.webp,144bc75bf968a3757ea9db8f4c2fe614@3x.webp"},"10204":{"name":"32ce6855303838db2243f7dd28d04e18","files":"32ce6855303838db2243f7dd28d04e18@2x.webp,32ce6855303838db2243f7dd28d04e18@3x.webp"},"10205":{"name":"b8006d21e8d5b8516428b9937b82cacc","files":"b8006d21e8d5b8516428b9937b82cacc@2x.webp,b8006d21e8d5b8516428b9937b82cacc@3x.webp"},"10206":{"name":"fe751fbb24ef429394641e36ab8eb4f2","files":"fe751fbb24ef429394641e36ab8eb4f2@2x.webp,fe751fbb24ef429394641e36ab8eb4f2@3x.webp"},"10208":{"name":"6d8409abdbced6864059b97026fd5cad","files":"6d8409abdbced6864059b97026fd5cad@2x.webp,6d8409abdbced6864059b97026fd5cad@3x.webp"},"10209":{"name":"eedd58e1fef6f894fe46e9acf5754812","files":"eedd58e1fef6f894fe46e9acf5754812@2x.webp,eedd58e1fef6f894fe46e9acf5754812@3x.webp"},"10222":{"name":"d7cef758b8aebc6ecbbc1d9ad1e552cc","files":"d7cef758b8aebc6ecbbc1d9ad1e552cc@2x.webp,d7cef758b8aebc6ecbbc1d9ad1e552cc@3x.webp"},"10225":{"name":"918bff9a06d1a44cb749896b00f549e4","files":"918bff9a06d1a44cb749896b00f549e4@2x.webp,918bff9a06d1a44cb749896b00f549e4@3x.webp"},"10227":{"name":"3b68cfe726a0d41fdd620c3d8103c204","files":"3b68cfe726a0d41fdd620c3d8103c204@2x.webp,3b68cfe726a0d41fdd620c3d8103c204@3x.webp"},"10229":{"name":"ab5e1bee10c8807b79afb3481d816200","files":"ab5e1bee10c8807b79afb3481d816200@2x.webp,ab5e1bee10c8807b79afb3481d816200@3x.webp"},"10231":{"name":"77593f775bfee2a25208395d0f6c2171","files":"77593f775bfee2a25208395d0f6c2171@2x.webp,77593f775bfee2a25208395d0f6c2171@3x.webp"},"10243":{"name":"284d32a43a70f3156048e6e31c86ddf7","files":"284d32a43a70f3156048e6e31c86ddf7@2x.webp,284d32a43a70f3156048e6e31c86ddf7@3x.webp"},"10245":{"name":"284d32a43a70f3156048e6e31c86ddf7","files":"284d32a43a70f3156048e6e31c86ddf7@2x.webp,284d32a43a70f3156048e6e31c86ddf7@3x.webp"},"10247":{"name":"284d32a43a70f3156048e6e31c86ddf7","files":"284d32a43a70f3156048e6e31c86ddf7@2x.webp,284d32a43a70f3156048e6e31c86ddf7@3x.webp"},"10249":{"name":"a267ddbfc96602f0fff318ddd6f67522","files":"a267ddbfc96602f0fff318ddd6f67522@2x.webp,a267ddbfc96602f0fff318ddd6f67522@3x.webp"}},"xml":"c837c55d0777041b465711e9748c3c3c.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/a4bea971ad568810d0de529b8426b5ba.zip"},"30001":{"res":{},"xml":"6ab4b3a0d6d5f840789331177b33f8d2.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/7604b8711db85a5915cefdfc3ab9d6f1.zip"},"30002":{"res":{},"xml":"72a7b0b75172f8169af99338c76189dc.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/11a45984282106d61934235f79d8b1ac.zip"},"30003":{"res":{"10405":{"name":"63aca18fa73a3f0625a542ec5f58dd56","files":"63aca18fa73a3f0625a542ec5f58dd56@2x.png,63aca18fa73a3f0625a542ec5f58dd56@3x.png"},"10406":{"name":"ee8b428c744d3668f2aab007e7cfbbd5","files":"ee8b428c744d3668f2aab007e7cfbbd5@3x.png,ee8b428c744d3668f2aab007e7cfbbd5@2x.png"},"30025":{"name":"dc76f5b326b638c53a7ce3388fcded04","files":"dc76f5b326b638c53a7ce3388fcded04.svg,dc76f5b326b638c53a7ce3388fcded04@dark.svg"},"30031":{"name":"9ce4b5953e0c2fdafa6547bd525f72a3","files":"9ce4b5953e0c2fdafa6547bd525f72a3@2x.png,9ce4b5953e0c2fdafa6547bd525f72a3@3x.png,9ce4b5953e0c2fdafa6547bd525f72a3@dark@2x.png,9ce4b5953e0c2fdafa6547bd525f72a3@dark@3x.png"},"30050":{"name":"0d2de15c7b7d19313a9f81b015acbcd2","files":"0d2de15c7b7d19313a9f81b015acbcd2@2x.png,0d2de15c7b7d19313a9f81b015acbcd2@3x.png"},"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"}},"xml":"2dbc15d81faa3a6d7c1bf068a921434a.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/e56c913ae8f609a571fd788b353fac8f.zip"},"30004":{"res":{"10403":{"name":"01d3b188dff8b420d538e7ba9c773280","files":"01d3b188dff8b420d538e7ba9c773280.svg"},"10404":{"name":"601bea3e274a7f2e746c8fdcc5d633cb","files":"601bea3e274a7f2e746c8fdcc5d633cb.svg"},"10500":{"name":"e56e637ff132b892a5493071f2916a1e","files":"e56e637ff132b892a5493071f2916a1e.svg"},"10501":{"name":"32a90ab433e19b0d47a3e58c5fae6565","files":"32a90ab433e19b0d47a3e58c5fae6565.svg"},"10502":{"name":"cfc7f0d9b6b6389058ddb64e0f2934c7","files":"cfc7f0d9b6b6389058ddb64e0f2934c7.svg"},"10503":{"name":"a31b55d670bc1cd20ba0fbed35dcef82","files":"a31b55d670bc1cd20ba0fbed35dcef82.svg"},"10505":{"name":"cfc7f0d9b6b6389058ddb64e0f2934c7","files":"cfc7f0d9b6b6389058ddb64e0f2934c7.svg"},"10511":{"name":"445a596c510438eb0c49699139241935","files":"445a596c510438eb0c49699139241935.svg"},"10512":{"name":"601bea3e274a7f2e746c8fdcc5d633cb","files":"601bea3e274a7f2e746c8fdcc5d633cb.svg"},"30025":{"name":"dc76f5b326b638c53a7ce3388fcded04","files":"dc76f5b326b638c53a7ce3388fcded04.svg,dc76f5b326b638c53a7ce3388fcded04@dark.svg"},"30027":{"name":"26b0553c575ad66167c10f9f756b6742","files":"26b0553c575ad66167c10f9f756b6742@2x.png,26b0553c575ad66167c10f9f756b6742@3x.png"},"30028":{"name":"9a0341b7338c149cc74c97f6011f50bd","files":"9a0341b7338c149cc74c97f6011f50bd@2x.png,9a0341b7338c149cc74c97f6011f50bd@3x.png"},"30031":{"name":"9ce4b5953e0c2fdafa6547bd525f72a3","files":"9ce4b5953e0c2fdafa6547bd525f72a3@2x.png,9ce4b5953e0c2fdafa6547bd525f72a3@3x.png,9ce4b5953e0c2fdafa6547bd525f72a3@dark@2x.png,9ce4b5953e0c2fdafa6547bd525f72a3@dark@3x.png"},"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"}},"xml":"891334c8c3efeb99da223290049e9e6e.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/2fcb9d76466b180f7df36b5961c214c1.zip"},"30005":{"res":{"30025":{"name":"dc76f5b326b638c53a7ce3388fcded04","files":"dc76f5b326b638c53a7ce3388fcded04.svg,dc76f5b326b638c53a7ce3388fcded04@dark.svg"},"30031":{"name":"9ce4b5953e0c2fdafa6547bd525f72a3","files":"9ce4b5953e0c2fdafa6547bd525f72a3@2x.png,9ce4b5953e0c2fdafa6547bd525f72a3@3x.png,9ce4b5953e0c2fdafa6547bd525f72a3@dark@2x.png,9ce4b5953e0c2fdafa6547bd525f72a3@dark@3x.png"},"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"}},"xml":"8aeeb07e903776486c627950455f3c4a.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/92146c0313dcbae65b5395ffbf126e64.zip"},"30006":{"res":{"30025":{"name":"dc76f5b326b638c53a7ce3388fcded04","files":"dc76f5b326b638c53a7ce3388fcded04.svg,dc76f5b326b638c53a7ce3388fcded04@dark.svg"},"30031":{"name":"9ce4b5953e0c2fdafa6547bd525f72a3","files":"9ce4b5953e0c2fdafa6547bd525f72a3@2x.png,9ce4b5953e0c2fdafa6547bd525f72a3@3x.png,9ce4b5953e0c2fdafa6547bd525f72a3@dark@2x.png,9ce4b5953e0c2fdafa6547bd525f72a3@dark@3x.png"},"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"}},"xml":"78d0d82f1edbb1222287a166287a86a2.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/4d1a8fc6cab66cfd00abae7b5d62b41a.zip"},"30007":{"res":{"30025":{"name":"dc76f5b326b638c53a7ce3388fcded04","files":"dc76f5b326b638c53a7ce3388fcded04.svg,dc76f5b326b638c53a7ce3388fcded04@dark.svg"},"30031":{"name":"9ce4b5953e0c2fdafa6547bd525f72a3","files":"9ce4b5953e0c2fdafa6547bd525f72a3@2x.png,9ce4b5953e0c2fdafa6547bd525f72a3@3x.png,9ce4b5953e0c2fdafa6547bd525f72a3@dark@2x.png,9ce4b5953e0c2fdafa6547bd525f72a3@dark@3x.png"},"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"}},"xml":"f5e3f7e4b63aab2a0a5c6aa4c67a4f06.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/60bb154cb5e59f2213a0dea9518882f1.zip"},"30008":{"res":{"30025":{"name":"dc76f5b326b638c53a7ce3388fcded04","files":"dc76f5b326b638c53a7ce3388fcded04.svg,dc76f5b326b638c53a7ce3388fcded04@dark.svg"},"30029":{"name":"b3892c9e6dc7bc88a3875ab0d8522755","files":"b3892c9e6dc7bc88a3875ab0d8522755@2x.png,b3892c9e6dc7bc88a3875ab0d8522755@3x.png"},"30031":{"name":"9ce4b5953e0c2fdafa6547bd525f72a3","files":"9ce4b5953e0c2fdafa6547bd525f72a3@2x.png,9ce4b5953e0c2fdafa6547bd525f72a3@3x.png,9ce4b5953e0c2fdafa6547bd525f72a3@dark@2x.png,9ce4b5953e0c2fdafa6547bd525f72a3@dark@3x.png"},"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"}},"xml":"25f3cf93aee905f698e502354a4cb2ad.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/abd13133408c9a5e1c69095748b505a3.zip"},"30009":{"res":{"30025":{"name":"dc76f5b326b638c53a7ce3388fcded04","files":"dc76f5b326b638c53a7ce3388fcded04.svg,dc76f5b326b638c53a7ce3388fcded04@dark.svg"},"30029":{"name":"b3892c9e6dc7bc88a3875ab0d8522755","files":"b3892c9e6dc7bc88a3875ab0d8522755@2x.png,b3892c9e6dc7bc88a3875ab0d8522755@3x.png"},"30031":{"name":"9ce4b5953e0c2fdafa6547bd525f72a3","files":"9ce4b5953e0c2fdafa6547bd525f72a3@2x.png,9ce4b5953e0c2fdafa6547bd525f72a3@3x.png,9ce4b5953e0c2fdafa6547bd525f72a3@dark@2x.png,9ce4b5953e0c2fdafa6547bd525f72a3@dark@3x.png"},"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"}},"xml":"a40469d3338b49bbf0b47dc710582f5c.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/f8b47aeb66b747a752282f140dd87971.zip"},"30010":{"res":{"10042":{"name":"c641886320d60b7376778327e55ee9c7","files":"c641886320d60b7376778327e55ee9c7@2x.webp,c641886320d60b7376778327e55ee9c7@3x.webp"},"10043":{"name":"3841e75f5d14c7f7e8c5fb952c849b75","files":"3841e75f5d14c7f7e8c5fb952c849b75@2x.webp,3841e75f5d14c7f7e8c5fb952c849b75@3x.webp"},"10044":{"name":"be3ba3a695bc7185bc217bc36a03898d","files":"be3ba3a695bc7185bc217bc36a03898d@2x.webp,be3ba3a695bc7185bc217bc36a03898d@3x.webp"},"10045":{"name":"fc35253f63051ac991997641468f81f3","files":"fc35253f63051ac991997641468f81f3@2x.webp,fc35253f63051ac991997641468f81f3@3x.webp"},"10046":{"name":"b7c1b1348a10ab841cc8b916d3a5ab8c","files":"b7c1b1348a10ab841cc8b916d3a5ab8c@2x.webp,b7c1b1348a10ab841cc8b916d3a5ab8c@3x.webp"},"10047":{"name":"53933895caaea91f86b51261b3057e56","files":"53933895caaea91f86b51261b3057e56@2x.webp,53933895caaea91f86b51261b3057e56@3x.webp"},"10048":{"name":"6bde3780d8e7bc82a8c4f5faabdbfef6","files":"6bde3780d8e7bc82a8c4f5faabdbfef6@2x.webp,6bde3780d8e7bc82a8c4f5faabdbfef6@3x.webp"},"10049":{"name":"9501fac5e0d166549bb6466ef8792926","files":"9501fac5e0d166549bb6466ef8792926@2x.webp,9501fac5e0d166549bb6466ef8792926@3x.webp"},"10050":{"name":"b9760ba1bd7dd4e33fcd135bbb77d57e","files":"b9760ba1bd7dd4e33fcd135bbb77d57e@2x.webp,b9760ba1bd7dd4e33fcd135bbb77d57e@3x.webp"},"10051":{"name":"7d7cdb616d46e81dab31bbd5a6acd481","files":"7d7cdb616d46e81dab31bbd5a6acd481@2x.webp,7d7cdb616d46e81dab31bbd5a6acd481@3x.webp"},"10052":{"name":"b1ef724e8e7357d6683ee3d1d5c11687","files":"b1ef724e8e7357d6683ee3d1d5c11687@2x.webp,b1ef724e8e7357d6683ee3d1d5c11687@3x.webp"},"10200":{"name":"80263ba8bf205d767826d1c573ef0f41","files":"80263ba8bf205d767826d1c573ef0f41@2x.webp,80263ba8bf205d767826d1c573ef0f41@3x.webp"},"10201":{"name":"50fced87da57d1f6df527f0e79c76fc3","files":"50fced87da57d1f6df527f0e79c76fc3@2x.webp,50fced87da57d1f6df527f0e79c76fc3@3x.webp"},"10202":{"name":"21656018544d3886116be63863ef2817","files":"21656018544d3886116be63863ef2817@2x.webp,21656018544d3886116be63863ef2817@3x.webp"},"10203":{"name":"144bc75bf968a3757ea9db8f4c2fe614","files":"144bc75bf968a3757ea9db8f4c2fe614@2x.webp,144bc75bf968a3757ea9db8f4c2fe614@3x.webp"},"10204":{"name":"32ce6855303838db2243f7dd28d04e18","files":"32ce6855303838db2243f7dd28d04e18@2x.webp,32ce6855303838db2243f7dd28d04e18@3x.webp"},"10205":{"name":"b8006d21e8d5b8516428b9937b82cacc","files":"b8006d21e8d5b8516428b9937b82cacc@2x.webp,b8006d21e8d5b8516428b9937b82cacc@3x.webp"},"10206":{"name":"fe751fbb24ef429394641e36ab8eb4f2","files":"fe751fbb24ef429394641e36ab8eb4f2@2x.webp,fe751fbb24ef429394641e36ab8eb4f2@3x.webp"},"10208":{"name":"6d8409abdbced6864059b97026fd5cad","files":"6d8409abdbced6864059b97026fd5cad@2x.webp,6d8409abdbced6864059b97026fd5cad@3x.webp"},"10209":{"name":"eedd58e1fef6f894fe46e9acf5754812","files":"eedd58e1fef6f894fe46e9acf5754812@2x.webp,eedd58e1fef6f894fe46e9acf5754812@3x.webp"},"10222":{"name":"d7cef758b8aebc6ecbbc1d9ad1e552cc","files":"d7cef758b8aebc6ecbbc1d9ad1e552cc@2x.webp,d7cef758b8aebc6ecbbc1d9ad1e552cc@3x.webp"},"10225":{"name":"918bff9a06d1a44cb749896b00f549e4","files":"918bff9a06d1a44cb749896b00f549e4@2x.webp,918bff9a06d1a44cb749896b00f549e4@3x.webp"},"10227":{"name":"3b68cfe726a0d41fdd620c3d8103c204","files":"3b68cfe726a0d41fdd620c3d8103c204@2x.webp,3b68cfe726a0d41fdd620c3d8103c204@3x.webp"},"10229":{"name":"ab5e1bee10c8807b79afb3481d816200","files":"ab5e1bee10c8807b79afb3481d816200@2x.webp,ab5e1bee10c8807b79afb3481d816200@3x.webp"},"10231":{"name":"77593f775bfee2a25208395d0f6c2171","files":"77593f775bfee2a25208395d0f6c2171@2x.webp,77593f775bfee2a25208395d0f6c2171@3x.webp"},"10243":{"name":"284d32a43a70f3156048e6e31c86ddf7","files":"284d32a43a70f3156048e6e31c86ddf7@2x.webp,284d32a43a70f3156048e6e31c86ddf7@3x.webp"},"10245":{"name":"284d32a43a70f3156048e6e31c86ddf7","files":"284d32a43a70f3156048e6e31c86ddf7@2x.webp,284d32a43a70f3156048e6e31c86ddf7@3x.webp"},"10247":{"name":"284d32a43a70f3156048e6e31c86ddf7","files":"284d32a43a70f3156048e6e31c86ddf7@2x.webp,284d32a43a70f3156048e6e31c86ddf7@3x.webp"},"10249":{"name":"a267ddbfc96602f0fff318ddd6f67522","files":"a267ddbfc96602f0fff318ddd6f67522@2x.webp,a267ddbfc96602f0fff318ddd6f67522@3x.webp"}},"xml":"7d055af5a07fc7cd19a0f664a8e0f3d7.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/ec4dec6856f3771174df71b7fcbcb1a3.zip"},"30011":{"res":{"10042":{"name":"c641886320d60b7376778327e55ee9c7","files":"c641886320d60b7376778327e55ee9c7@2x.webp,c641886320d60b7376778327e55ee9c7@3x.webp"},"10043":{"name":"3841e75f5d14c7f7e8c5fb952c849b75","files":"3841e75f5d14c7f7e8c5fb952c849b75@2x.webp,3841e75f5d14c7f7e8c5fb952c849b75@3x.webp"},"10044":{"name":"be3ba3a695bc7185bc217bc36a03898d","files":"be3ba3a695bc7185bc217bc36a03898d@2x.webp,be3ba3a695bc7185bc217bc36a03898d@3x.webp"},"10045":{"name":"fc35253f63051ac991997641468f81f3","files":"fc35253f63051ac991997641468f81f3@2x.webp,fc35253f63051ac991997641468f81f3@3x.webp"},"10046":{"name":"b7c1b1348a10ab841cc8b916d3a5ab8c","files":"b7c1b1348a10ab841cc8b916d3a5ab8c@2x.webp,b7c1b1348a10ab841cc8b916d3a5ab8c@3x.webp"},"10047":{"name":"53933895caaea91f86b51261b3057e56","files":"53933895caaea91f86b51261b3057e56@2x.webp,53933895caaea91f86b51261b3057e56@3x.webp"},"10048":{"name":"6bde3780d8e7bc82a8c4f5faabdbfef6","files":"6bde3780d8e7bc82a8c4f5faabdbfef6@2x.webp,6bde3780d8e7bc82a8c4f5faabdbfef6@3x.webp"},"10049":{"name":"9501fac5e0d166549bb6466ef8792926","files":"9501fac5e0d166549bb6466ef8792926@2x.webp,9501fac5e0d166549bb6466ef8792926@3x.webp"},"10050":{"name":"b9760ba1bd7dd4e33fcd135bbb77d57e","files":"b9760ba1bd7dd4e33fcd135bbb77d57e@2x.webp,b9760ba1bd7dd4e33fcd135bbb77d57e@3x.webp"},"10051":{"name":"7d7cdb616d46e81dab31bbd5a6acd481","files":"7d7cdb616d46e81dab31bbd5a6acd481@2x.webp,7d7cdb616d46e81dab31bbd5a6acd481@3x.webp"},"10052":{"name":"b1ef724e8e7357d6683ee3d1d5c11687","files":"b1ef724e8e7357d6683ee3d1d5c11687@2x.webp,b1ef724e8e7357d6683ee3d1d5c11687@3x.webp"},"10200":{"name":"80263ba8bf205d767826d1c573ef0f41","files":"80263ba8bf205d767826d1c573ef0f41@2x.webp,80263ba8bf205d767826d1c573ef0f41@3x.webp"},"10201":{"name":"50fced87da57d1f6df527f0e79c76fc3","files":"50fced87da57d1f6df527f0e79c76fc3@2x.webp,50fced87da57d1f6df527f0e79c76fc3@3x.webp"},"10202":{"name":"21656018544d3886116be63863ef2817","files":"21656018544d3886116be63863ef2817@2x.webp,21656018544d3886116be63863ef2817@3x.webp"},"10203":{"name":"144bc75bf968a3757ea9db8f4c2fe614","files":"144bc75bf968a3757ea9db8f4c2fe614@2x.webp,144bc75bf968a3757ea9db8f4c2fe614@3x.webp"},"10204":{"name":"32ce6855303838db2243f7dd28d04e18","files":"32ce6855303838db2243f7dd28d04e18@2x.webp,32ce6855303838db2243f7dd28d04e18@3x.webp"},"10205":{"name":"b8006d21e8d5b8516428b9937b82cacc","files":"b8006d21e8d5b8516428b9937b82cacc@2x.webp,b8006d21e8d5b8516428b9937b82cacc@3x.webp"},"10206":{"name":"fe751fbb24ef429394641e36ab8eb4f2","files":"fe751fbb24ef429394641e36ab8eb4f2@2x.webp,fe751fbb24ef429394641e36ab8eb4f2@3x.webp"},"10208":{"name":"6d8409abdbced6864059b97026fd5cad","files":"6d8409abdbced6864059b97026fd5cad@2x.webp,6d8409abdbced6864059b97026fd5cad@3x.webp"},"10209":{"name":"eedd58e1fef6f894fe46e9acf5754812","files":"eedd58e1fef6f894fe46e9acf5754812@2x.webp,eedd58e1fef6f894fe46e9acf5754812@3x.webp"},"10222":{"name":"d7cef758b8aebc6ecbbc1d9ad1e552cc","files":"d7cef758b8aebc6ecbbc1d9ad1e552cc@2x.webp,d7cef758b8aebc6ecbbc1d9ad1e552cc@3x.webp"},"10224":{"name":"302e6c2f6ff4713607a5a9b65e0e9afa","files":"302e6c2f6ff4713607a5a9b65e0e9afa@2x.webp,302e6c2f6ff4713607a5a9b65e0e9afa@3x.webp"},"10226":{"name":"614c795756e5a617374fc6b977e809a0","files":"614c795756e5a617374fc6b977e809a0@2x.webp,614c795756e5a617374fc6b977e809a0@3x.webp"},"10228":{"name":"90fdeeb71ac86a856c537958b985f3a6","files":"90fdeeb71ac86a856c537958b985f3a6@2x.webp,90fdeeb71ac86a856c537958b985f3a6@3x.webp"},"10230":{"name":"24d9b14be942dcef31393b9b6c0a6426","files":"24d9b14be942dcef31393b9b6c0a6426@2x.webp,24d9b14be942dcef31393b9b6c0a6426@3x.webp"},"10242":{"name":"bb6d91170ddee009d5437fdafd58f40e","files":"bb6d91170ddee009d5437fdafd58f40e@2x.webp,bb6d91170ddee009d5437fdafd58f40e@3x.webp"},"10244":{"name":"bb6d91170ddee009d5437fdafd58f40e","files":"bb6d91170ddee009d5437fdafd58f40e@2x.webp,bb6d91170ddee009d5437fdafd58f40e@3x.webp"},"10246":{"name":"bb6d91170ddee009d5437fdafd58f40e","files":"bb6d91170ddee009d5437fdafd58f40e@2x.webp,bb6d91170ddee009d5437fdafd58f40e@3x.webp"},"10248":{"name":"c8b0adb41d7074b7ee8409ba1804765f","files":"c8b0adb41d7074b7ee8409ba1804765f@2x.webp,c8b0adb41d7074b7ee8409ba1804765f@3x.webp"}},"xml":"67bfa5108268aaf9907426a7f7a8230d.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/a3b63ab2c288934558cfcefb0c4df47a.zip"},"30013":{"res":{"10042":{"name":"c641886320d60b7376778327e55ee9c7","files":"c641886320d60b7376778327e55ee9c7@2x.webp,c641886320d60b7376778327e55ee9c7@3x.webp"},"10043":{"name":"3841e75f5d14c7f7e8c5fb952c849b75","files":"3841e75f5d14c7f7e8c5fb952c849b75@2x.webp,3841e75f5d14c7f7e8c5fb952c849b75@3x.webp"},"10044":{"name":"be3ba3a695bc7185bc217bc36a03898d","files":"be3ba3a695bc7185bc217bc36a03898d@2x.webp,be3ba3a695bc7185bc217bc36a03898d@3x.webp"},"10045":{"name":"fc35253f63051ac991997641468f81f3","files":"fc35253f63051ac991997641468f81f3@2x.webp,fc35253f63051ac991997641468f81f3@3x.webp"},"10046":{"name":"b7c1b1348a10ab841cc8b916d3a5ab8c","files":"b7c1b1348a10ab841cc8b916d3a5ab8c@2x.webp,b7c1b1348a10ab841cc8b916d3a5ab8c@3x.webp"},"10047":{"name":"53933895caaea91f86b51261b3057e56","files":"53933895caaea91f86b51261b3057e56@2x.webp,53933895caaea91f86b51261b3057e56@3x.webp"},"10048":{"name":"6bde3780d8e7bc82a8c4f5faabdbfef6","files":"6bde3780d8e7bc82a8c4f5faabdbfef6@2x.webp,6bde3780d8e7bc82a8c4f5faabdbfef6@3x.webp"},"10049":{"name":"9501fac5e0d166549bb6466ef8792926","files":"9501fac5e0d166549bb6466ef8792926@2x.webp,9501fac5e0d166549bb6466ef8792926@3x.webp"},"10050":{"name":"b9760ba1bd7dd4e33fcd135bbb77d57e","files":"b9760ba1bd7dd4e33fcd135bbb77d57e@2x.webp,b9760ba1bd7dd4e33fcd135bbb77d57e@3x.webp"},"10051":{"name":"7d7cdb616d46e81dab31bbd5a6acd481","files":"7d7cdb616d46e81dab31bbd5a6acd481@2x.webp,7d7cdb616d46e81dab31bbd5a6acd481@3x.webp"},"10052":{"name":"b1ef724e8e7357d6683ee3d1d5c11687","files":"b1ef724e8e7357d6683ee3d1d5c11687@2x.webp,b1ef724e8e7357d6683ee3d1d5c11687@3x.webp"},"10200":{"name":"80263ba8bf205d767826d1c573ef0f41","files":"80263ba8bf205d767826d1c573ef0f41@2x.webp,80263ba8bf205d767826d1c573ef0f41@3x.webp"},"10201":{"name":"50fced87da57d1f6df527f0e79c76fc3","files":"50fced87da57d1f6df527f0e79c76fc3@2x.webp,50fced87da57d1f6df527f0e79c76fc3@3x.webp"},"10202":{"name":"21656018544d3886116be63863ef2817","files":"21656018544d3886116be63863ef2817@2x.webp,21656018544d3886116be63863ef2817@3x.webp"},"10203":{"name":"144bc75bf968a3757ea9db8f4c2fe614","files":"144bc75bf968a3757ea9db8f4c2fe614@2x.webp,144bc75bf968a3757ea9db8f4c2fe614@3x.webp"},"10204":{"name":"32ce6855303838db2243f7dd28d04e18","files":"32ce6855303838db2243f7dd28d04e18@2x.webp,32ce6855303838db2243f7dd28d04e18@3x.webp"},"10205":{"name":"b8006d21e8d5b8516428b9937b82cacc","files":"b8006d21e8d5b8516428b9937b82cacc@2x.webp,b8006d21e8d5b8516428b9937b82cacc@3x.webp"},"10206":{"name":"fe751fbb24ef429394641e36ab8eb4f2","files":"fe751fbb24ef429394641e36ab8eb4f2@2x.webp,fe751fbb24ef429394641e36ab8eb4f2@3x.webp"},"10208":{"name":"6d8409abdbced6864059b97026fd5cad","files":"6d8409abdbced6864059b97026fd5cad@2x.webp,6d8409abdbced6864059b97026fd5cad@3x.webp"},"10209":{"name":"eedd58e1fef6f894fe46e9acf5754812","files":"eedd58e1fef6f894fe46e9acf5754812@2x.webp,eedd58e1fef6f894fe46e9acf5754812@3x.webp"},"10222":{"name":"d7cef758b8aebc6ecbbc1d9ad1e552cc","files":"d7cef758b8aebc6ecbbc1d9ad1e552cc@2x.webp,d7cef758b8aebc6ecbbc1d9ad1e552cc@3x.webp"},"10224":{"name":"302e6c2f6ff4713607a5a9b65e0e9afa","files":"302e6c2f6ff4713607a5a9b65e0e9afa@2x.webp,302e6c2f6ff4713607a5a9b65e0e9afa@3x.webp"},"10226":{"name":"614c795756e5a617374fc6b977e809a0","files":"614c795756e5a617374fc6b977e809a0@2x.webp,614c795756e5a617374fc6b977e809a0@3x.webp"},"10228":{"name":"90fdeeb71ac86a856c537958b985f3a6","files":"90fdeeb71ac86a856c537958b985f3a6@2x.webp,90fdeeb71ac86a856c537958b985f3a6@3x.webp"},"10230":{"name":"24d9b14be942dcef31393b9b6c0a6426","files":"24d9b14be942dcef31393b9b6c0a6426@2x.webp,24d9b14be942dcef31393b9b6c0a6426@3x.webp"},"10242":{"name":"bb6d91170ddee009d5437fdafd58f40e","files":"bb6d91170ddee009d5437fdafd58f40e@2x.webp,bb6d91170ddee009d5437fdafd58f40e@3x.webp"},"10244":{"name":"bb6d91170ddee009d5437fdafd58f40e","files":"bb6d91170ddee009d5437fdafd58f40e@2x.webp,bb6d91170ddee009d5437fdafd58f40e@3x.webp"},"10246":{"name":"bb6d91170ddee009d5437fdafd58f40e","files":"bb6d91170ddee009d5437fdafd58f40e@2x.webp,bb6d91170ddee009d5437fdafd58f40e@3x.webp"},"10248":{"name":"c8b0adb41d7074b7ee8409ba1804765f","files":"c8b0adb41d7074b7ee8409ba1804765f@2x.webp,c8b0adb41d7074b7ee8409ba1804765f@3x.webp"}},"xml":"4367b59449faad37e76b0a2ec0282e60.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/07b9298fcd8767f60fdb95d448bde43a.zip"},"30014":{"res":{"10042":{"name":"c641886320d60b7376778327e55ee9c7","files":"c641886320d60b7376778327e55ee9c7@2x.webp,c641886320d60b7376778327e55ee9c7@3x.webp"},"10043":{"name":"3841e75f5d14c7f7e8c5fb952c849b75","files":"3841e75f5d14c7f7e8c5fb952c849b75@2x.webp,3841e75f5d14c7f7e8c5fb952c849b75@3x.webp"},"10044":{"name":"be3ba3a695bc7185bc217bc36a03898d","files":"be3ba3a695bc7185bc217bc36a03898d@2x.webp,be3ba3a695bc7185bc217bc36a03898d@3x.webp"},"10045":{"name":"fc35253f63051ac991997641468f81f3","files":"fc35253f63051ac991997641468f81f3@2x.webp,fc35253f63051ac991997641468f81f3@3x.webp"},"10046":{"name":"b7c1b1348a10ab841cc8b916d3a5ab8c","files":"b7c1b1348a10ab841cc8b916d3a5ab8c@2x.webp,b7c1b1348a10ab841cc8b916d3a5ab8c@3x.webp"},"10047":{"name":"53933895caaea91f86b51261b3057e56","files":"53933895caaea91f86b51261b3057e56@2x.webp,53933895caaea91f86b51261b3057e56@3x.webp"},"10048":{"name":"6bde3780d8e7bc82a8c4f5faabdbfef6","files":"6bde3780d8e7bc82a8c4f5faabdbfef6@2x.webp,6bde3780d8e7bc82a8c4f5faabdbfef6@3x.webp"},"10049":{"name":"9501fac5e0d166549bb6466ef8792926","files":"9501fac5e0d166549bb6466ef8792926@2x.webp,9501fac5e0d166549bb6466ef8792926@3x.webp"},"10050":{"name":"b9760ba1bd7dd4e33fcd135bbb77d57e","files":"b9760ba1bd7dd4e33fcd135bbb77d57e@2x.webp,b9760ba1bd7dd4e33fcd135bbb77d57e@3x.webp"},"10051":{"name":"7d7cdb616d46e81dab31bbd5a6acd481","files":"7d7cdb616d46e81dab31bbd5a6acd481@2x.webp,7d7cdb616d46e81dab31bbd5a6acd481@3x.webp"},"10052":{"name":"b1ef724e8e7357d6683ee3d1d5c11687","files":"b1ef724e8e7357d6683ee3d1d5c11687@2x.webp,b1ef724e8e7357d6683ee3d1d5c11687@3x.webp"},"10200":{"name":"80263ba8bf205d767826d1c573ef0f41","files":"80263ba8bf205d767826d1c573ef0f41@2x.webp,80263ba8bf205d767826d1c573ef0f41@3x.webp"},"10201":{"name":"50fced87da57d1f6df527f0e79c76fc3","files":"50fced87da57d1f6df527f0e79c76fc3@2x.webp,50fced87da57d1f6df527f0e79c76fc3@3x.webp"},"10202":{"name":"21656018544d3886116be63863ef2817","files":"21656018544d3886116be63863ef2817@2x.webp,21656018544d3886116be63863ef2817@3x.webp"},"10203":{"name":"144bc75bf968a3757ea9db8f4c2fe614","files":"144bc75bf968a3757ea9db8f4c2fe614@2x.webp,144bc75bf968a3757ea9db8f4c2fe614@3x.webp"},"10204":{"name":"32ce6855303838db2243f7dd28d04e18","files":"32ce6855303838db2243f7dd28d04e18@2x.webp,32ce6855303838db2243f7dd28d04e18@3x.webp"},"10205":{"name":"b8006d21e8d5b8516428b9937b82cacc","files":"b8006d21e8d5b8516428b9937b82cacc@2x.webp,b8006d21e8d5b8516428b9937b82cacc@3x.webp"},"10206":{"name":"fe751fbb24ef429394641e36ab8eb4f2","files":"fe751fbb24ef429394641e36ab8eb4f2@2x.webp,fe751fbb24ef429394641e36ab8eb4f2@3x.webp"},"10208":{"name":"6d8409abdbced6864059b97026fd5cad","files":"6d8409abdbced6864059b97026fd5cad@2x.webp,6d8409abdbced6864059b97026fd5cad@3x.webp"},"10209":{"name":"eedd58e1fef6f894fe46e9acf5754812","files":"eedd58e1fef6f894fe46e9acf5754812@2x.webp,eedd58e1fef6f894fe46e9acf5754812@3x.webp"},"10222":{"name":"d7cef758b8aebc6ecbbc1d9ad1e552cc","files":"d7cef758b8aebc6ecbbc1d9ad1e552cc@2x.webp,d7cef758b8aebc6ecbbc1d9ad1e552cc@3x.webp"},"10225":{"name":"918bff9a06d1a44cb749896b00f549e4","files":"918bff9a06d1a44cb749896b00f549e4@2x.webp,918bff9a06d1a44cb749896b00f549e4@3x.webp"},"10227":{"name":"3b68cfe726a0d41fdd620c3d8103c204","files":"3b68cfe726a0d41fdd620c3d8103c204@2x.webp,3b68cfe726a0d41fdd620c3d8103c204@3x.webp"},"10229":{"name":"ab5e1bee10c8807b79afb3481d816200","files":"ab5e1bee10c8807b79afb3481d816200@2x.webp,ab5e1bee10c8807b79afb3481d816200@3x.webp"},"10231":{"name":"77593f775bfee2a25208395d0f6c2171","files":"77593f775bfee2a25208395d0f6c2171@2x.webp,77593f775bfee2a25208395d0f6c2171@3x.webp"},"10243":{"name":"284d32a43a70f3156048e6e31c86ddf7","files":"284d32a43a70f3156048e6e31c86ddf7@2x.webp,284d32a43a70f3156048e6e31c86ddf7@3x.webp"},"10245":{"name":"284d32a43a70f3156048e6e31c86ddf7","files":"284d32a43a70f3156048e6e31c86ddf7@2x.webp,284d32a43a70f3156048e6e31c86ddf7@3x.webp"},"10247":{"name":"284d32a43a70f3156048e6e31c86ddf7","files":"284d32a43a70f3156048e6e31c86ddf7@2x.webp,284d32a43a70f3156048e6e31c86ddf7@3x.webp"},"10249":{"name":"a267ddbfc96602f0fff318ddd6f67522","files":"a267ddbfc96602f0fff318ddd6f67522@2x.webp,a267ddbfc96602f0fff318ddd6f67522@3x.webp"}},"xml":"977a7dd888c847dcf85812ec6be06f92.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/7e31510b6134d79737b6ff1fa20c5480.zip"},"30030":{"res":{"30031":{"name":"9ce4b5953e0c2fdafa6547bd525f72a3","files":"9ce4b5953e0c2fdafa6547bd525f72a3@2x.png,9ce4b5953e0c2fdafa6547bd525f72a3@3x.png,9ce4b5953e0c2fdafa6547bd525f72a3@dark@2x.png,9ce4b5953e0c2fdafa6547bd525f72a3@dark@3x.png"},"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"205030":{"name":"80bac297aaee8bc951a5e1f9038c633b","files":"80bac297aaee8bc951a5e1f9038c633b@2x.webp,80bac297aaee8bc951a5e1f9038c633b@3x.webp"},"205031":{"name":"08c894b329a86fce4180710af6db8b18","files":"08c894b329a86fce4180710af6db8b18@2x.webp,08c894b329a86fce4180710af6db8b18@3x.webp"}},"xml":"9f2432eca7a4fb42e534053c5979a02c.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/e3d52cce41ebd07310fdbd9e2bd3295c.zip"},"30032":{"res":{"30025":{"name":"dc76f5b326b638c53a7ce3388fcded04","files":"dc76f5b326b638c53a7ce3388fcded04.svg,dc76f5b326b638c53a7ce3388fcded04@dark.svg"},"30034":{"name":"0c778c73839e0d63eb5d5c590125b076","files":"0c778c73839e0d63eb5d5c590125b076@2x.png,0c778c73839e0d63eb5d5c590125b076@3x.png,0c778c73839e0d63eb5d5c590125b076@dark@2x.png,0c778c73839e0d63eb5d5c590125b076@dark@3x.png"},"30037":{"name":"dc2a8eb1e53311d1abfc7e4ba40fa51b","files":"dc2a8eb1e53311d1abfc7e4ba40fa51b@2x.png,dc2a8eb1e53311d1abfc7e4ba40fa51b@3x.png,dc2a8eb1e53311d1abfc7e4ba40fa51b@dark@2x.png,dc2a8eb1e53311d1abfc7e4ba40fa51b@dark@3x.png"}},"xml":"5026562e22fdbbffceadcb1a936a0f1d.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/9fb69ec9259d086463f0f715ae6da87e.zip"},"30045":{"res":{"30046":{"name":"c37f1d504e81f827706ce95fe568de16","files":"c37f1d504e81f827706ce95fe568de16@2x.webp,c37f1d504e81f827706ce95fe568de16@3x.webp"},"30047":{"name":"19e1665c3391a750d09691fc619eeb60","files":"19e1665c3391a750d09691fc619eeb60@2x.png,19e1665c3391a750d09691fc619eeb60@3x.png"},"30052":{"name":"b3f4815368f3d7dc9b0421a4f5f15622","files":"b3f4815368f3d7dc9b0421a4f5f15622@2x.png,b3f4815368f3d7dc9b0421a4f5f15622@3x.png"}},"xml":"2b5d0c5c7a5e4698f732292aeb6454a3.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/0d632dd4de91f4a78e71891a491402c2.zip"},"30048":{"res":{},"xml":"43d4cc6628b8c62b06dda1f615300815.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/4a9a2312f3f6785908f2936e83051be2.zip"},"30049":{"res":{},"xml":"6f5ce80e60b11ab866fd47bf4865c06e.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/c34fafe695352c9587f90739f8eb431e.zip"},"30051":{"res":{"30031":{"name":"9ce4b5953e0c2fdafa6547bd525f72a3","files":"9ce4b5953e0c2fdafa6547bd525f72a3@2x.png,9ce4b5953e0c2fdafa6547bd525f72a3@3x.png,9ce4b5953e0c2fdafa6547bd525f72a3@dark@2x.png,9ce4b5953e0c2fdafa6547bd525f72a3@dark@3x.png"},"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"205030":{"name":"80bac297aaee8bc951a5e1f9038c633b","files":"80bac297aaee8bc951a5e1f9038c633b@2x.webp,80bac297aaee8bc951a5e1f9038c633b@3x.webp"},"205031":{"name":"08c894b329a86fce4180710af6db8b18","files":"08c894b329a86fce4180710af6db8b18@2x.webp,08c894b329a86fce4180710af6db8b18@3x.webp"}},"xml":"570c96db3d835ef2147c5a2d90b563f4.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/25fcfa6efc77c8d4981745c674f50fe3.zip"},"30302":{"res":{"231233":{"name":"67bea5ec4b559992cd38153718977443","files":"67bea5ec4b559992cd38153718977443@2x.webp,67bea5ec4b559992cd38153718977443@3x.webp"}},"xml":"a0182e02a002afd38fca6efd00688823.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/e6c42a8ea504c6ab2c8d4ba379ec6cfd.zip"},"30303":{"res":{"30306":{"name":"cc15ec258f82cbd22c3d16a1c0d9f5b0","files":"cc15ec258f82cbd22c3d16a1c0d9f5b0@2x.webp,cc15ec258f82cbd22c3d16a1c0d9f5b0@3x.webp"},"30307":{"name":"bb2bf598dc58cbf5b60e987e987c093d","files":"bb2bf598dc58cbf5b60e987e987c093d@2x.webp,bb2bf598dc58cbf5b60e987e987c093d@3x.webp"},"30308":{"name":"253b4ea273ba6d7c861de15acb8ccdf3","files":"253b4ea273ba6d7c861de15acb8ccdf3@2x.webp,253b4ea273ba6d7c861de15acb8ccdf3@3x.webp"},"30309":{"name":"94262bddb114f9d04770b996ad9be65d","files":"94262bddb114f9d04770b996ad9be65d@2x.webp,94262bddb114f9d04770b996ad9be65d@3x.webp"},"140550":{"name":"0c05b7e01b5528d095ec3209cef85b89","files":"0c05b7e01b5528d095ec3209cef85b89@2x.png,0c05b7e01b5528d095ec3209cef85b89@3x.png,0c05b7e01b5528d095ec3209cef85b89@dark@2x.png,0c05b7e01b5528d095ec3209cef85b89@dark@3x.png"}},"xml":"d4c83652e4498028dd2f451029dd6108.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/f8cfde204a193ca37373b782c20154a0.zip"},"40002":{"res":{"30025":{"name":"dc76f5b326b638c53a7ce3388fcded04","files":"dc76f5b326b638c53a7ce3388fcded04.svg,dc76f5b326b638c53a7ce3388fcded04@dark.svg"},"150007":{"name":"2fc554862b49d17ffb67fb8625a99ec3","files":"2fc554862b49d17ffb67fb8625a99ec3@2x.png,2fc554862b49d17ffb67fb8625a99ec3@3x.png,2fc554862b49d17ffb67fb8625a99ec3@dark@2x.png,2fc554862b49d17ffb67fb8625a99ec3@dark@3x.png"}},"xml":"448539d9b0785f3983f04fe12c6a9f88.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/ef26ea5fb65e639efa516a84a33a6b4e.zip"},"40003":{"res":{},"xml":"960ca314166bc5519f61958f0cc13472.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/d03fb727cd4c5768c80e4f75aba73042.zip"},"40004":{"res":{},"xml":"2ade1346697b0e3370c2533b19fc9c7e.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/e4d44d19c31bb9af3c2df704353675fb.zip"},"40005":{"res":{},"xml":"a46b277974040ab267467a8af2beee88.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/9efa5526041909fff29c6b34a83c659c.zip"},"40006":{"res":{"40007":{"name":"6803f08a8404db6343d3f384a6d8c45c","files":"6803f08a8404db6343d3f384a6d8c45c@2x.png,6803f08a8404db6343d3f384a6d8c45c@3x.png,6803f08a8404db6343d3f384a6d8c45c@dark@2x.png,6803f08a8404db6343d3f384a6d8c45c@dark@3x.png"},"40008":{"name":"07655950803c9452d996ce3a99ffc05a","files":"07655950803c9452d996ce3a99ffc05a@2x.png,07655950803c9452d996ce3a99ffc05a@3x.png,07655950803c9452d996ce3a99ffc05a@dark@2x.png,07655950803c9452d996ce3a99ffc05a@dark@3x.png"}},"xml":"39aa0d5559a850514dcd42e27c65e0fd.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/337d0ae011bf72fb5e21e54ba3af1d55.zip"},"40009":{"res":{},"xml":"b391c87af03ae60fe1fbdbbc8210c00f.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/9e12bd90d0e825f45666053d6ea6611c.zip"},"55001":{"res":{"55002":{"name":"72aa7a214b6607113972764cbdf9cf4c","files":"72aa7a214b6607113972764cbdf9cf4c@2x.webp,72aa7a214b6607113972764cbdf9cf4c@3x.webp"},"55003":{"name":"0150c9aaf437d8d0926b9bdb58ddf026","files":"0150c9aaf437d8d0926b9bdb58ddf026@2x.webp,0150c9aaf437d8d0926b9bdb58ddf026@3x.webp"}},"xml":"55648e640a902e89486d6af471f7a6d0.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/a5b6f093ed238478bcaf6f8c972a39dc.zip"},"70003":{"res":{"10058":{"name":"e3a120428ca15738655158de84465772","files":"e3a120428ca15738655158de84465772@2x.webp,e3a120428ca15738655158de84465772@3x.webp,e3a120428ca15738655158de84465772@dark@2x.webp,e3a120428ca15738655158de84465772@dark@3x.webp"},"10101":{"name":"0061d7fcbf0d74d87001d7539f8e3068","files":"0061d7fcbf0d74d87001d7539f8e3068@2x.webp,0061d7fcbf0d74d87001d7539f8e3068@3x.webp"},"10102":{"name":"269c9f9334aacc685480c5a8c422f2a2","files":"269c9f9334aacc685480c5a8c422f2a2@2x.webp,269c9f9334aacc685480c5a8c422f2a2@3x.webp"},"10103":{"name":"52a745e0659695cc16a8361130615728","files":"52a745e0659695cc16a8361130615728@2x.webp,52a745e0659695cc16a8361130615728@3x.webp"},"10104":{"name":"ad4b4620e0d97b9550bd65ce50803806","files":"ad4b4620e0d97b9550bd65ce50803806@2x.webp,ad4b4620e0d97b9550bd65ce50803806@3x.webp"},"10105":{"name":"27d2a6a25d7683d7704f47a864af0c74","files":"27d2a6a25d7683d7704f47a864af0c74@2x.webp,27d2a6a25d7683d7704f47a864af0c74@3x.webp"},"10106":{"name":"177a2e935dbfd7a16f50628558666534","files":"177a2e935dbfd7a16f50628558666534@2x.webp,177a2e935dbfd7a16f50628558666534@3x.webp"},"10107":{"name":"455772e40d5bb22e676ab38425c5051f","files":"455772e40d5bb22e676ab38425c5051f@2x.webp,455772e40d5bb22e676ab38425c5051f@3x.webp"},"10108":{"name":"36b37bfa19e8e1d0892e5af0b9ec533a","files":"36b37bfa19e8e1d0892e5af0b9ec533a@2x.webp,36b37bfa19e8e1d0892e5af0b9ec533a@3x.webp"},"10109":{"name":"e790241a20c409e2c93a775c852924e8","files":"e790241a20c409e2c93a775c852924e8@2x.webp,e790241a20c409e2c93a775c852924e8@3x.webp"},"10110":{"name":"ea341b949b090fdfec346f92434a6741","files":"ea341b949b090fdfec346f92434a6741@2x.webp,ea341b949b090fdfec346f92434a6741@3x.webp"},"10111":{"name":"da8fb28a429477c64174c24ce844da8c","files":"da8fb28a429477c64174c24ce844da8c@2x.webp,da8fb28a429477c64174c24ce844da8c@3x.webp"},"10112":{"name":"97b82d2bd23f110bb5da21494b092acf","files":"97b82d2bd23f110bb5da21494b092acf@2x.webp,97b82d2bd23f110bb5da21494b092acf@3x.webp"},"10113":{"name":"33fb7234f5e7566e1a5287509106f28a","files":"33fb7234f5e7566e1a5287509106f28a@2x.webp,33fb7234f5e7566e1a5287509106f28a@3x.webp"},"10114":{"name":"76cedb11d57855bcaf631e43dc161258","files":"76cedb11d57855bcaf631e43dc161258@2x.webp,76cedb11d57855bcaf631e43dc161258@3x.webp"},"10115":{"name":"42bbd2a6928037b149fe1a1925b34678","files":"42bbd2a6928037b149fe1a1925b34678@2x.webp,42bbd2a6928037b149fe1a1925b34678@3x.webp"},"10116":{"name":"59e225996edd90971173af5ee94aa8a3","files":"59e225996edd90971173af5ee94aa8a3@2x.webp,59e225996edd90971173af5ee94aa8a3@3x.webp"}},"xml":"924986f412a3f5e5ff8fca8a053284fb.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/12946f0368fb7b6573b261b4c70800aa.zip"},"110220":{"res":{"110223":{"name":"e646b0b08279c12f5bfedcdc0980ad56","files":"e646b0b08279c12f5bfedcdc0980ad56@2x.webp,e646b0b08279c12f5bfedcdc0980ad56@3x.webp"},"110224":{"name":"5fd793c030f0be5f48a6763653dae44c","files":"5fd793c030f0be5f48a6763653dae44c@2x.webp,5fd793c030f0be5f48a6763653dae44c@3x.webp"},"110225":{"name":"2db3a88eab6183849bd619083cc8c4a6","files":"2db3a88eab6183849bd619083cc8c4a6@2x.webp,2db3a88eab6183849bd619083cc8c4a6@3x.webp"},"110228":{"name":"6bb36b38f824828b6128e804aa8c281f","files":"6bb36b38f824828b6128e804aa8c281f@2x.webp,6bb36b38f824828b6128e804aa8c281f@3x.webp"}},"xml":"df19d4bc8f4bef3d9dd138446afecb89.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/bd901a92f8fcc35cbd37e5267d231565.zip"},"110234":{"res":{"110223":{"name":"e646b0b08279c12f5bfedcdc0980ad56","files":"e646b0b08279c12f5bfedcdc0980ad56@2x.webp,e646b0b08279c12f5bfedcdc0980ad56@3x.webp"},"110224":{"name":"5fd793c030f0be5f48a6763653dae44c","files":"5fd793c030f0be5f48a6763653dae44c@2x.webp,5fd793c030f0be5f48a6763653dae44c@3x.webp"},"110225":{"name":"2db3a88eab6183849bd619083cc8c4a6","files":"2db3a88eab6183849bd619083cc8c4a6@2x.webp,2db3a88eab6183849bd619083cc8c4a6@3x.webp"},"110232":{"name":"028a8c213144c7603f5e2b971cbfd8d5","files":"028a8c213144c7603f5e2b971cbfd8d5@2x.webp,028a8c213144c7603f5e2b971cbfd8d5@3x.webp"}},"xml":"e60cf83fb2ec8aad33b5f65849bf5fab.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/4e90097964f93fa36683a415436dc146.zip"},"110430":{"res":{"110410":{"name":"40ddc18acf28ab33ecd8a9006a84590b","files":"40ddc18acf28ab33ecd8a9006a84590b.webp"},"110412":{"name":"ceb5612e42be0c66f4af717365bad49f","files":"ceb5612e42be0c66f4af717365bad49f.webp"},"110414":{"name":"55d1e0b7d683dc592147df68fd5f9f11","files":"55d1e0b7d683dc592147df68fd5f9f11.webp"},"110416":{"name":"73df2bee158428e8460f43abb3095a9d","files":"73df2bee158428e8460f43abb3095a9d.webp"},"110418":{"name":"8d6a10e5deb837be5ec8e80a852d2c8d","files":"8d6a10e5deb837be5ec8e80a852d2c8d.webp"},"110426":{"name":"f1f4b6bf82a73a8650f8f7580bd2fea7","files":"f1f4b6bf82a73a8650f8f7580bd2fea7@2x.webp,f1f4b6bf82a73a8650f8f7580bd2fea7@3x.webp"},"110427":{"name":"f554a15f1517c0657c97df2fea9dd93e","files":"f554a15f1517c0657c97df2fea9dd93e@2x.webp,f554a15f1517c0657c97df2fea9dd93e@3x.webp"}},"xml":"2b596250f2002fa470105132c97bd34f.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/c1460fe20ea121b3fd5a43b93d34f93c.zip"},"110502":{"res":{"110518":{"name":"61aa6966406ffbf708cb84285f1ae9b3","files":"61aa6966406ffbf708cb84285f1ae9b3@2x.png,61aa6966406ffbf708cb84285f1ae9b3@3x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@2x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@3x.png"},"110524":{"name":"631f1702b6eac783ba9fe1768eb71681","files":"631f1702b6eac783ba9fe1768eb71681.svg"},"110528":{"name":"5c90b8d2a8e1860f5b27d16ff8388f2d","files":"5c90b8d2a8e1860f5b27d16ff8388f2d.svg"},"110552":{"name":"9e0dd10c0f2d6c058d46e04089f479ab","files":"9e0dd10c0f2d6c058d46e04089f479ab.svg"},"110553":{"name":"93ba7b065e1e1fff0773f8614677ad02","files":"93ba7b065e1e1fff0773f8614677ad02.svg"},"110554":{"name":"336c051d6af7d46b8907a5bf5c5384c9","files":"336c051d6af7d46b8907a5bf5c5384c9.svg,336c051d6af7d46b8907a5bf5c5384c9@dark.svg"},"110555":{"name":"b90a5b031e202533b4e7af7ba1ae8ca7","files":"b90a5b031e202533b4e7af7ba1ae8ca7.svg,b90a5b031e202533b4e7af7ba1ae8ca7@dark.svg"},"110556":{"name":"71fb1eb30b3b1b3ed4676712f11819b0","files":"71fb1eb30b3b1b3ed4676712f11819b0.svg,71fb1eb30b3b1b3ed4676712f11819b0@dark.svg"},"110557":{"name":"46ef7232f70af2554a1be95758d52497","files":"46ef7232f70af2554a1be95758d52497.svg"},"110558":{"name":"3064a1f62d769b7edccaafb9013c1563","files":"3064a1f62d769b7edccaafb9013c1563.svg"},"110559":{"name":"db3e7f43a24ee970bb1be8b6fb1d7189","files":"db3e7f43a24ee970bb1be8b6fb1d7189.svg"},"110560":{"name":"d6615a0fecc3f5b0283bd39b1bb86364","files":"d6615a0fecc3f5b0283bd39b1bb86364.svg"},"110561":{"name":"646d147a394f3fd6337e142d4d0d8539","files":"646d147a394f3fd6337e142d4d0d8539.svg"},"110562":{"name":"1ef5ad3f55865bd5f5cf5db90e1fcbf8","files":"1ef5ad3f55865bd5f5cf5db90e1fcbf8.svg"},"110563":{"name":"12c1c91ec50b210e03c3a26078d534be","files":"12c1c91ec50b210e03c3a26078d534be.svg"}},"xml":"a64a659329998ee3d4b6d3001715ca70.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/f745d00cee11f6fa8ada7c0fbac6d6e2.zip"},"110505":{"res":{"110507":{"name":"e64ace02ff60890fdd98ff95fbeae45a","files":"e64ace02ff60890fdd98ff95fbeae45a@2x.webp,e64ace02ff60890fdd98ff95fbeae45a@3x.webp"},"110508":{"name":"9a864b02b1af716d311f3236fb07840e","files":"9a864b02b1af716d311f3236fb07840e@2x.webp,9a864b02b1af716d311f3236fb07840e@3x.webp"},"110509":{"name":"95316921753d8afcea0d2c984d762778","files":"95316921753d8afcea0d2c984d762778@2x.webp,95316921753d8afcea0d2c984d762778@3x.webp"},"110510":{"name":"98a2f8f6d7b3ab9e6261897352849fe3","files":"98a2f8f6d7b3ab9e6261897352849fe3@2x.webp,98a2f8f6d7b3ab9e6261897352849fe3@3x.webp"},"110515":{"name":"898908cd580180cf9b182d95b6e409b4","files":"898908cd580180cf9b182d95b6e409b4@2x.webp,898908cd580180cf9b182d95b6e409b4@3x.webp"},"110570":{"name":"ce0751a4ed430b4c9944c495bf167102","files":"ce0751a4ed430b4c9944c495bf167102@2x.webp,ce0751a4ed430b4c9944c495bf167102@3x.webp"},"110571":{"name":"1ca6653004e6839fab91bc35ab9976b0","files":"1ca6653004e6839fab91bc35ab9976b0@2x.webp,1ca6653004e6839fab91bc35ab9976b0@3x.webp"},"110572":{"name":"93c2ba3fb33ab782a76031426c46fd81","files":"93c2ba3fb33ab782a76031426c46fd81@2x.webp,93c2ba3fb33ab782a76031426c46fd81@3x.webp"},"110573":{"name":"aad5b85ee72d117b7035a08af82e43a3","files":"aad5b85ee72d117b7035a08af82e43a3@2x.webp,aad5b85ee72d117b7035a08af82e43a3@3x.webp"},"110574":{"name":"09978ad2b2288eae691c650faa9d0363","files":"09978ad2b2288eae691c650faa9d0363@2x.webp,09978ad2b2288eae691c650faa9d0363@3x.webp"},"110575":{"name":"85241b1eb671aea17c13155142342d5c","files":"85241b1eb671aea17c13155142342d5c@2x.webp,85241b1eb671aea17c13155142342d5c@3x.webp"},"110576":{"name":"f6c3ae511ee11ca3b0f9d0acb91a0e33","files":"f6c3ae511ee11ca3b0f9d0acb91a0e33@2x.webp,f6c3ae511ee11ca3b0f9d0acb91a0e33@3x.webp"},"110578":{"name":"edee6c288be358cf8661227862692be1","files":"edee6c288be358cf8661227862692be1@2x.png,edee6c288be358cf8661227862692be1@3x.png"},"231240":{"name":"439d6014edf841ff60ef1328360d6aae","files":"439d6014edf841ff60ef1328360d6aae@2x.png,439d6014edf841ff60ef1328360d6aae@3x.png"},"231241":{"name":"f8fdae00ef5d9ec736ec42d980e7162f","files":"f8fdae00ef5d9ec736ec42d980e7162f.png"}},"xml":"75856a3afc653effae416fbc1479a771.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/cdd7f91b15817d22fe202ebda31ba009.zip"},"110506":{"res":{"110513":{"name":"3b394937edb3db25b28e3aae352f87f9","files":"3b394937edb3db25b28e3aae352f87f9@2x.webp,3b394937edb3db25b28e3aae352f87f9@3x.webp"},"110515":{"name":"898908cd580180cf9b182d95b6e409b4","files":"898908cd580180cf9b182d95b6e409b4@2x.webp,898908cd580180cf9b182d95b6e409b4@3x.webp"},"110570":{"name":"ce0751a4ed430b4c9944c495bf167102","files":"ce0751a4ed430b4c9944c495bf167102@2x.webp,ce0751a4ed430b4c9944c495bf167102@3x.webp"},"110571":{"name":"1ca6653004e6839fab91bc35ab9976b0","files":"1ca6653004e6839fab91bc35ab9976b0@2x.webp,1ca6653004e6839fab91bc35ab9976b0@3x.webp"},"110572":{"name":"93c2ba3fb33ab782a76031426c46fd81","files":"93c2ba3fb33ab782a76031426c46fd81@2x.webp,93c2ba3fb33ab782a76031426c46fd81@3x.webp"},"110573":{"name":"aad5b85ee72d117b7035a08af82e43a3","files":"aad5b85ee72d117b7035a08af82e43a3@2x.webp,aad5b85ee72d117b7035a08af82e43a3@3x.webp"},"110574":{"name":"09978ad2b2288eae691c650faa9d0363","files":"09978ad2b2288eae691c650faa9d0363@2x.webp,09978ad2b2288eae691c650faa9d0363@3x.webp"},"110575":{"name":"85241b1eb671aea17c13155142342d5c","files":"85241b1eb671aea17c13155142342d5c@2x.webp,85241b1eb671aea17c13155142342d5c@3x.webp"},"110576":{"name":"f6c3ae511ee11ca3b0f9d0acb91a0e33","files":"f6c3ae511ee11ca3b0f9d0acb91a0e33@2x.webp,f6c3ae511ee11ca3b0f9d0acb91a0e33@3x.webp"},"110578":{"name":"edee6c288be358cf8661227862692be1","files":"edee6c288be358cf8661227862692be1@2x.png,edee6c288be358cf8661227862692be1@3x.png"}},"xml":"757467526516f0d7f6a368b0da372c44.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/e7f3047d397159c1fa3b3241de7165cb.zip"},"110541":{"res":{"110522":{"name":"6098558e8a537a0bef83776c68cdac03","files":"6098558e8a537a0bef83776c68cdac03@2x.png,6098558e8a537a0bef83776c68cdac03@3x.png"},"110524":{"name":"631f1702b6eac783ba9fe1768eb71681","files":"631f1702b6eac783ba9fe1768eb71681.svg"},"110528":{"name":"5c90b8d2a8e1860f5b27d16ff8388f2d","files":"5c90b8d2a8e1860f5b27d16ff8388f2d.svg"},"110552":{"name":"9e0dd10c0f2d6c058d46e04089f479ab","files":"9e0dd10c0f2d6c058d46e04089f479ab.svg"},"110553":{"name":"93ba7b065e1e1fff0773f8614677ad02","files":"93ba7b065e1e1fff0773f8614677ad02.svg"},"110554":{"name":"336c051d6af7d46b8907a5bf5c5384c9","files":"336c051d6af7d46b8907a5bf5c5384c9.svg,336c051d6af7d46b8907a5bf5c5384c9@dark.svg"},"110555":{"name":"b90a5b031e202533b4e7af7ba1ae8ca7","files":"b90a5b031e202533b4e7af7ba1ae8ca7.svg,b90a5b031e202533b4e7af7ba1ae8ca7@dark.svg"},"110556":{"name":"71fb1eb30b3b1b3ed4676712f11819b0","files":"71fb1eb30b3b1b3ed4676712f11819b0.svg,71fb1eb30b3b1b3ed4676712f11819b0@dark.svg"},"110557":{"name":"46ef7232f70af2554a1be95758d52497","files":"46ef7232f70af2554a1be95758d52497.svg"},"110558":{"name":"3064a1f62d769b7edccaafb9013c1563","files":"3064a1f62d769b7edccaafb9013c1563.svg"},"110559":{"name":"db3e7f43a24ee970bb1be8b6fb1d7189","files":"db3e7f43a24ee970bb1be8b6fb1d7189.svg"},"110560":{"name":"d6615a0fecc3f5b0283bd39b1bb86364","files":"d6615a0fecc3f5b0283bd39b1bb86364.svg"},"110561":{"name":"646d147a394f3fd6337e142d4d0d8539","files":"646d147a394f3fd6337e142d4d0d8539.svg"},"110562":{"name":"1ef5ad3f55865bd5f5cf5db90e1fcbf8","files":"1ef5ad3f55865bd5f5cf5db90e1fcbf8.svg"},"110563":{"name":"12c1c91ec50b210e03c3a26078d534be","files":"12c1c91ec50b210e03c3a26078d534be.svg"}},"xml":"278172563dc7442bfb000e1808f9bd8c.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/413edbde6c5ddf64d2ae30ad691d4b5e.zip"},"110550":{"res":{"110524":{"name":"631f1702b6eac783ba9fe1768eb71681","files":"631f1702b6eac783ba9fe1768eb71681.svg"},"110528":{"name":"5c90b8d2a8e1860f5b27d16ff8388f2d","files":"5c90b8d2a8e1860f5b27d16ff8388f2d.svg"},"110544":{"name":"d8870335986a26b370c6b11ea8bc6c96","files":"d8870335986a26b370c6b11ea8bc6c96@2x.png,d8870335986a26b370c6b11ea8bc6c96@3x.png"},"110552":{"name":"9e0dd10c0f2d6c058d46e04089f479ab","files":"9e0dd10c0f2d6c058d46e04089f479ab.svg"},"110553":{"name":"93ba7b065e1e1fff0773f8614677ad02","files":"93ba7b065e1e1fff0773f8614677ad02.svg"},"110554":{"name":"336c051d6af7d46b8907a5bf5c5384c9","files":"336c051d6af7d46b8907a5bf5c5384c9.svg,336c051d6af7d46b8907a5bf5c5384c9@dark.svg"},"110555":{"name":"b90a5b031e202533b4e7af7ba1ae8ca7","files":"b90a5b031e202533b4e7af7ba1ae8ca7.svg,b90a5b031e202533b4e7af7ba1ae8ca7@dark.svg"},"110556":{"name":"71fb1eb30b3b1b3ed4676712f11819b0","files":"71fb1eb30b3b1b3ed4676712f11819b0.svg,71fb1eb30b3b1b3ed4676712f11819b0@dark.svg"},"110557":{"name":"46ef7232f70af2554a1be95758d52497","files":"46ef7232f70af2554a1be95758d52497.svg"},"110558":{"name":"3064a1f62d769b7edccaafb9013c1563","files":"3064a1f62d769b7edccaafb9013c1563.svg"},"110559":{"name":"db3e7f43a24ee970bb1be8b6fb1d7189","files":"db3e7f43a24ee970bb1be8b6fb1d7189.svg"},"110560":{"name":"d6615a0fecc3f5b0283bd39b1bb86364","files":"d6615a0fecc3f5b0283bd39b1bb86364.svg"},"110561":{"name":"646d147a394f3fd6337e142d4d0d8539","files":"646d147a394f3fd6337e142d4d0d8539.svg"},"110562":{"name":"1ef5ad3f55865bd5f5cf5db90e1fcbf8","files":"1ef5ad3f55865bd5f5cf5db90e1fcbf8.svg"},"110563":{"name":"12c1c91ec50b210e03c3a26078d534be","files":"12c1c91ec50b210e03c3a26078d534be.svg"}},"xml":"04bce8b880d9d8fbdfea18f2c717e6ee.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/4c384d52bd79d4a9de02ceee9341a5db.zip"},"110551":{"res":{"110524":{"name":"631f1702b6eac783ba9fe1768eb71681","files":"631f1702b6eac783ba9fe1768eb71681.svg"},"110528":{"name":"5c90b8d2a8e1860f5b27d16ff8388f2d","files":"5c90b8d2a8e1860f5b27d16ff8388f2d.svg"},"110546":{"name":"cc9fde3cdef2061176cd5741a6087685","files":"cc9fde3cdef2061176cd5741a6087685@2x.png,cc9fde3cdef2061176cd5741a6087685@3x.png"},"110547":{"name":"60af243421d6b03dce20a20026a7199b","files":"60af243421d6b03dce20a20026a7199b@2x.png,60af243421d6b03dce20a20026a7199b@3x.png"},"110548":{"name":"a54ddd56ab7af2b74be792448e9302d3","files":"a54ddd56ab7af2b74be792448e9302d3@2x.png,a54ddd56ab7af2b74be792448e9302d3@3x.png"},"110549":{"name":"ef944883e9b173d7831f74622aa9bcca","files":"ef944883e9b173d7831f74622aa9bcca@2x.png,ef944883e9b173d7831f74622aa9bcca@3x.png"},"110552":{"name":"9e0dd10c0f2d6c058d46e04089f479ab","files":"9e0dd10c0f2d6c058d46e04089f479ab.svg"},"110553":{"name":"93ba7b065e1e1fff0773f8614677ad02","files":"93ba7b065e1e1fff0773f8614677ad02.svg"},"110554":{"name":"336c051d6af7d46b8907a5bf5c5384c9","files":"336c051d6af7d46b8907a5bf5c5384c9.svg,336c051d6af7d46b8907a5bf5c5384c9@dark.svg"},"110555":{"name":"b90a5b031e202533b4e7af7ba1ae8ca7","files":"b90a5b031e202533b4e7af7ba1ae8ca7.svg,b90a5b031e202533b4e7af7ba1ae8ca7@dark.svg"},"110556":{"name":"71fb1eb30b3b1b3ed4676712f11819b0","files":"71fb1eb30b3b1b3ed4676712f11819b0.svg,71fb1eb30b3b1b3ed4676712f11819b0@dark.svg"},"110557":{"name":"46ef7232f70af2554a1be95758d52497","files":"46ef7232f70af2554a1be95758d52497.svg"},"110558":{"name":"3064a1f62d769b7edccaafb9013c1563","files":"3064a1f62d769b7edccaafb9013c1563.svg"},"110559":{"name":"db3e7f43a24ee970bb1be8b6fb1d7189","files":"db3e7f43a24ee970bb1be8b6fb1d7189.svg"},"110560":{"name":"d6615a0fecc3f5b0283bd39b1bb86364","files":"d6615a0fecc3f5b0283bd39b1bb86364.svg"},"110561":{"name":"646d147a394f3fd6337e142d4d0d8539","files":"646d147a394f3fd6337e142d4d0d8539.svg"},"110562":{"name":"1ef5ad3f55865bd5f5cf5db90e1fcbf8","files":"1ef5ad3f55865bd5f5cf5db90e1fcbf8.svg"},"110563":{"name":"12c1c91ec50b210e03c3a26078d534be","files":"12c1c91ec50b210e03c3a26078d534be.svg"}},"xml":"4d290bed865500477f7024829c2ed2b5.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/42b9ae5630c1341c14e3dae31cab2c3e.zip"},"110565":{"res":{"110518":{"name":"61aa6966406ffbf708cb84285f1ae9b3","files":"61aa6966406ffbf708cb84285f1ae9b3@2x.png,61aa6966406ffbf708cb84285f1ae9b3@3x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@2x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@3x.png"},"110524":{"name":"631f1702b6eac783ba9fe1768eb71681","files":"631f1702b6eac783ba9fe1768eb71681.svg"},"110528":{"name":"5c90b8d2a8e1860f5b27d16ff8388f2d","files":"5c90b8d2a8e1860f5b27d16ff8388f2d.svg"},"110552":{"name":"9e0dd10c0f2d6c058d46e04089f479ab","files":"9e0dd10c0f2d6c058d46e04089f479ab.svg"},"110553":{"name":"93ba7b065e1e1fff0773f8614677ad02","files":"93ba7b065e1e1fff0773f8614677ad02.svg"},"110554":{"name":"336c051d6af7d46b8907a5bf5c5384c9","files":"336c051d6af7d46b8907a5bf5c5384c9.svg,336c051d6af7d46b8907a5bf5c5384c9@dark.svg"},"110555":{"name":"b90a5b031e202533b4e7af7ba1ae8ca7","files":"b90a5b031e202533b4e7af7ba1ae8ca7.svg,b90a5b031e202533b4e7af7ba1ae8ca7@dark.svg"},"110556":{"name":"71fb1eb30b3b1b3ed4676712f11819b0","files":"71fb1eb30b3b1b3ed4676712f11819b0.svg,71fb1eb30b3b1b3ed4676712f11819b0@dark.svg"},"110557":{"name":"46ef7232f70af2554a1be95758d52497","files":"46ef7232f70af2554a1be95758d52497.svg"},"110558":{"name":"3064a1f62d769b7edccaafb9013c1563","files":"3064a1f62d769b7edccaafb9013c1563.svg"},"110559":{"name":"db3e7f43a24ee970bb1be8b6fb1d7189","files":"db3e7f43a24ee970bb1be8b6fb1d7189.svg"},"110560":{"name":"d6615a0fecc3f5b0283bd39b1bb86364","files":"d6615a0fecc3f5b0283bd39b1bb86364.svg"},"110561":{"name":"646d147a394f3fd6337e142d4d0d8539","files":"646d147a394f3fd6337e142d4d0d8539.svg"},"110562":{"name":"1ef5ad3f55865bd5f5cf5db90e1fcbf8","files":"1ef5ad3f55865bd5f5cf5db90e1fcbf8.svg"},"110563":{"name":"12c1c91ec50b210e03c3a26078d534be","files":"12c1c91ec50b210e03c3a26078d534be.svg"},"110593":{"name":"4e08801ea258ed36721532eaaa8f050c","files":"4e08801ea258ed36721532eaaa8f050c@2x.png,4e08801ea258ed36721532eaaa8f050c@3x.png"},"110696":{"name":"493270a97569941c9f590dced09fba8f","files":"493270a97569941c9f590dced09fba8f@2x.png,493270a97569941c9f590dced09fba8f@3x.png"}},"xml":"a2cea9df811f9a4581608a6a1a2e699f.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/d1cc496574bde205ec9fe9561de55f18.zip"},"110566":{"res":{"110518":{"name":"61aa6966406ffbf708cb84285f1ae9b3","files":"61aa6966406ffbf708cb84285f1ae9b3@2x.png,61aa6966406ffbf708cb84285f1ae9b3@3x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@2x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@3x.png"},"110524":{"name":"631f1702b6eac783ba9fe1768eb71681","files":"631f1702b6eac783ba9fe1768eb71681.svg"},"110528":{"name":"5c90b8d2a8e1860f5b27d16ff8388f2d","files":"5c90b8d2a8e1860f5b27d16ff8388f2d.svg"},"110552":{"name":"9e0dd10c0f2d6c058d46e04089f479ab","files":"9e0dd10c0f2d6c058d46e04089f479ab.svg"},"110553":{"name":"93ba7b065e1e1fff0773f8614677ad02","files":"93ba7b065e1e1fff0773f8614677ad02.svg"},"110554":{"name":"336c051d6af7d46b8907a5bf5c5384c9","files":"336c051d6af7d46b8907a5bf5c5384c9.svg,336c051d6af7d46b8907a5bf5c5384c9@dark.svg"},"110555":{"name":"b90a5b031e202533b4e7af7ba1ae8ca7","files":"b90a5b031e202533b4e7af7ba1ae8ca7.svg,b90a5b031e202533b4e7af7ba1ae8ca7@dark.svg"},"110556":{"name":"71fb1eb30b3b1b3ed4676712f11819b0","files":"71fb1eb30b3b1b3ed4676712f11819b0.svg,71fb1eb30b3b1b3ed4676712f11819b0@dark.svg"},"110557":{"name":"46ef7232f70af2554a1be95758d52497","files":"46ef7232f70af2554a1be95758d52497.svg"},"110558":{"name":"3064a1f62d769b7edccaafb9013c1563","files":"3064a1f62d769b7edccaafb9013c1563.svg"},"110559":{"name":"db3e7f43a24ee970bb1be8b6fb1d7189","files":"db3e7f43a24ee970bb1be8b6fb1d7189.svg"},"110560":{"name":"d6615a0fecc3f5b0283bd39b1bb86364","files":"d6615a0fecc3f5b0283bd39b1bb86364.svg"},"110561":{"name":"646d147a394f3fd6337e142d4d0d8539","files":"646d147a394f3fd6337e142d4d0d8539.svg"},"110562":{"name":"1ef5ad3f55865bd5f5cf5db90e1fcbf8","files":"1ef5ad3f55865bd5f5cf5db90e1fcbf8.svg"},"110563":{"name":"12c1c91ec50b210e03c3a26078d534be","files":"12c1c91ec50b210e03c3a26078d534be.svg"},"110564":{"name":"898572a03110cc3526d099f6d4faee70","files":"898572a03110cc3526d099f6d4faee70.svg"},"110593":{"name":"4e08801ea258ed36721532eaaa8f050c","files":"4e08801ea258ed36721532eaaa8f050c@2x.png,4e08801ea258ed36721532eaaa8f050c@3x.png"},"110595":{"name":"8fa51a7ff320b3a92e15adfa7dffb34a","files":"8fa51a7ff320b3a92e15adfa7dffb34a@2x.png,8fa51a7ff320b3a92e15adfa7dffb34a@3x.png"},"110696":{"name":"493270a97569941c9f590dced09fba8f","files":"493270a97569941c9f590dced09fba8f@2x.png,493270a97569941c9f590dced09fba8f@3x.png"},"110697":{"name":"e23187543db7c491a5ea3bfe1aaf8bf7","files":"e23187543db7c491a5ea3bfe1aaf8bf7.svg"}},"xml":"ffe14d1a067a21f711e0e41437f18587.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/f44bee79490e137fd665e499f7a4a2ce.zip"},"110567":{"res":{"110522":{"name":"6098558e8a537a0bef83776c68cdac03","files":"6098558e8a537a0bef83776c68cdac03@2x.png,6098558e8a537a0bef83776c68cdac03@3x.png"},"110524":{"name":"631f1702b6eac783ba9fe1768eb71681","files":"631f1702b6eac783ba9fe1768eb71681.svg"},"110528":{"name":"5c90b8d2a8e1860f5b27d16ff8388f2d","files":"5c90b8d2a8e1860f5b27d16ff8388f2d.svg"},"110552":{"name":"9e0dd10c0f2d6c058d46e04089f479ab","files":"9e0dd10c0f2d6c058d46e04089f479ab.svg"},"110553":{"name":"93ba7b065e1e1fff0773f8614677ad02","files":"93ba7b065e1e1fff0773f8614677ad02.svg"},"110554":{"name":"336c051d6af7d46b8907a5bf5c5384c9","files":"336c051d6af7d46b8907a5bf5c5384c9.svg,336c051d6af7d46b8907a5bf5c5384c9@dark.svg"},"110555":{"name":"b90a5b031e202533b4e7af7ba1ae8ca7","files":"b90a5b031e202533b4e7af7ba1ae8ca7.svg,b90a5b031e202533b4e7af7ba1ae8ca7@dark.svg"},"110556":{"name":"71fb1eb30b3b1b3ed4676712f11819b0","files":"71fb1eb30b3b1b3ed4676712f11819b0.svg,71fb1eb30b3b1b3ed4676712f11819b0@dark.svg"},"110557":{"name":"46ef7232f70af2554a1be95758d52497","files":"46ef7232f70af2554a1be95758d52497.svg"},"110558":{"name":"3064a1f62d769b7edccaafb9013c1563","files":"3064a1f62d769b7edccaafb9013c1563.svg"},"110559":{"name":"db3e7f43a24ee970bb1be8b6fb1d7189","files":"db3e7f43a24ee970bb1be8b6fb1d7189.svg"},"110560":{"name":"d6615a0fecc3f5b0283bd39b1bb86364","files":"d6615a0fecc3f5b0283bd39b1bb86364.svg"},"110561":{"name":"646d147a394f3fd6337e142d4d0d8539","files":"646d147a394f3fd6337e142d4d0d8539.svg"},"110562":{"name":"1ef5ad3f55865bd5f5cf5db90e1fcbf8","files":"1ef5ad3f55865bd5f5cf5db90e1fcbf8.svg"},"110563":{"name":"12c1c91ec50b210e03c3a26078d534be","files":"12c1c91ec50b210e03c3a26078d534be.svg"},"110594":{"name":"7e2c5f24d4b264b7cf82a67447ae89e1","files":"7e2c5f24d4b264b7cf82a67447ae89e1@2x.png,7e2c5f24d4b264b7cf82a67447ae89e1@3x.png"},"110696":{"name":"493270a97569941c9f590dced09fba8f","files":"493270a97569941c9f590dced09fba8f@2x.png,493270a97569941c9f590dced09fba8f@3x.png"}},"xml":"cd70332c86e3149b0c57887dd203bd3f.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/b33529d845097007dc450d9639dc1105.zip"},"110568":{"res":{"110522":{"name":"6098558e8a537a0bef83776c68cdac03","files":"6098558e8a537a0bef83776c68cdac03@2x.png,6098558e8a537a0bef83776c68cdac03@3x.png"},"110524":{"name":"631f1702b6eac783ba9fe1768eb71681","files":"631f1702b6eac783ba9fe1768eb71681.svg"},"110528":{"name":"5c90b8d2a8e1860f5b27d16ff8388f2d","files":"5c90b8d2a8e1860f5b27d16ff8388f2d.svg"},"110552":{"name":"9e0dd10c0f2d6c058d46e04089f479ab","files":"9e0dd10c0f2d6c058d46e04089f479ab.svg"},"110553":{"name":"93ba7b065e1e1fff0773f8614677ad02","files":"93ba7b065e1e1fff0773f8614677ad02.svg"},"110554":{"name":"336c051d6af7d46b8907a5bf5c5384c9","files":"336c051d6af7d46b8907a5bf5c5384c9.svg,336c051d6af7d46b8907a5bf5c5384c9@dark.svg"},"110555":{"name":"b90a5b031e202533b4e7af7ba1ae8ca7","files":"b90a5b031e202533b4e7af7ba1ae8ca7.svg,b90a5b031e202533b4e7af7ba1ae8ca7@dark.svg"},"110556":{"name":"71fb1eb30b3b1b3ed4676712f11819b0","files":"71fb1eb30b3b1b3ed4676712f11819b0.svg,71fb1eb30b3b1b3ed4676712f11819b0@dark.svg"},"110557":{"name":"46ef7232f70af2554a1be95758d52497","files":"46ef7232f70af2554a1be95758d52497.svg"},"110558":{"name":"3064a1f62d769b7edccaafb9013c1563","files":"3064a1f62d769b7edccaafb9013c1563.svg"},"110559":{"name":"db3e7f43a24ee970bb1be8b6fb1d7189","files":"db3e7f43a24ee970bb1be8b6fb1d7189.svg"},"110560":{"name":"d6615a0fecc3f5b0283bd39b1bb86364","files":"d6615a0fecc3f5b0283bd39b1bb86364.svg"},"110561":{"name":"646d147a394f3fd6337e142d4d0d8539","files":"646d147a394f3fd6337e142d4d0d8539.svg"},"110562":{"name":"1ef5ad3f55865bd5f5cf5db90e1fcbf8","files":"1ef5ad3f55865bd5f5cf5db90e1fcbf8.svg"},"110563":{"name":"12c1c91ec50b210e03c3a26078d534be","files":"12c1c91ec50b210e03c3a26078d534be.svg"},"110564":{"name":"898572a03110cc3526d099f6d4faee70","files":"898572a03110cc3526d099f6d4faee70.svg"},"110593":{"name":"4e08801ea258ed36721532eaaa8f050c","files":"4e08801ea258ed36721532eaaa8f050c@2x.png,4e08801ea258ed36721532eaaa8f050c@3x.png"},"110595":{"name":"8fa51a7ff320b3a92e15adfa7dffb34a","files":"8fa51a7ff320b3a92e15adfa7dffb34a@2x.png,8fa51a7ff320b3a92e15adfa7dffb34a@3x.png"},"110696":{"name":"493270a97569941c9f590dced09fba8f","files":"493270a97569941c9f590dced09fba8f@2x.png,493270a97569941c9f590dced09fba8f@3x.png"},"110697":{"name":"e23187543db7c491a5ea3bfe1aaf8bf7","files":"e23187543db7c491a5ea3bfe1aaf8bf7.svg"}},"xml":"ae756a4056633565ce7b1aa3aacfe6f5.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/f7b89cec08beea94b658274594918610.zip"},"110590":{"res":{"110518":{"name":"61aa6966406ffbf708cb84285f1ae9b3","files":"61aa6966406ffbf708cb84285f1ae9b3@2x.png,61aa6966406ffbf708cb84285f1ae9b3@3x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@2x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@3x.png"},"110582":{"name":"d3ce5d3afba1bd41edbaef89afb4c6a2","files":"d3ce5d3afba1bd41edbaef89afb4c6a2@2x.png,d3ce5d3afba1bd41edbaef89afb4c6a2@3x.png"},"110583":{"name":"915c849da5fedc04e8a875757e8edf25","files":"915c849da5fedc04e8a875757e8edf25@2x.png,915c849da5fedc04e8a875757e8edf25@3x.png"},"110602":{"name":"018942fb377bddcad7275e356ffe5b9a","files":"018942fb377bddcad7275e356ffe5b9a@2x.webp,018942fb377bddcad7275e356ffe5b9a@3x.webp"}},"xml":"840b686b0ada4b6cd567c0140ce29d37.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/0fb54c4e8f063492e0c6bc8cc3b5934b.zip"},"110591":{"res":{"110584":{"name":"1fc3f1d14d1b24ba706c4e2311bf19d8","files":"1fc3f1d14d1b24ba706c4e2311bf19d8@2x.png,1fc3f1d14d1b24ba706c4e2311bf19d8@3x.png"},"110585":{"name":"906db5183324c5e7c0d4aab374a1d9c7","files":"906db5183324c5e7c0d4aab374a1d9c7@2x.png,906db5183324c5e7c0d4aab374a1d9c7@3x.png"},"110586":{"name":"872c8dfcdde30d7f101922dda60df4bf","files":"872c8dfcdde30d7f101922dda60df4bf@2x.png,872c8dfcdde30d7f101922dda60df4bf@3x.png"},"110587":{"name":"a113c26f3f96a1efe227ca04f2f5a29d","files":"a113c26f3f96a1efe227ca04f2f5a29d@2x.png,a113c26f3f96a1efe227ca04f2f5a29d@3x.png"},"110603":{"name":"018942fb377bddcad7275e356ffe5b9a","files":"018942fb377bddcad7275e356ffe5b9a@2x.webp,018942fb377bddcad7275e356ffe5b9a@3x.webp"}},"xml":"048d4be5b5cf76cf7b56db5b9da92a79.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/1d77237108114a895383e975f4168b36.zip"},"110592":{"res":{"110518":{"name":"61aa6966406ffbf708cb84285f1ae9b3","files":"61aa6966406ffbf708cb84285f1ae9b3@2x.png,61aa6966406ffbf708cb84285f1ae9b3@3x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@2x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@3x.png"}},"xml":"a5c97ebe93b91ac799e414fbf7560e9c.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/dcf392b4074c0482164bc11dd79acedb.zip"},"110704":{"res":{"110700":{"name":"50e84b409feb86818f38427ca25f5a19","files":"50e84b409feb86818f38427ca25f5a19@2x.webp,50e84b409feb86818f38427ca25f5a19@3x.webp"},"110701":{"name":"945352810243949fb45aceb4e09a5b99","files":"945352810243949fb45aceb4e09a5b99@2x.png,945352810243949fb45aceb4e09a5b99@3x.png"}},"xml":"878c69befab5e9c0c1ad566beed28832.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/24b23ee576f917895dbd3de54942d86a.zip"},"110800":{"res":{"110360":{"name":"d8ce951ace7311087579e5bb374f4b3b","files":"d8ce951ace7311087579e5bb374f4b3b.webp"},"110710":{"name":"9333d548d31852e5a4d37f49149c9dcc","files":"9333d548d31852e5a4d37f49149c9dcc@2x.webp,9333d548d31852e5a4d37f49149c9dcc@3x.webp"},"110711":{"name":"9ee2b4413fed3ccc18267158bce1b5e1","files":"9ee2b4413fed3ccc18267158bce1b5e1@2x.webp,9ee2b4413fed3ccc18267158bce1b5e1@3x.webp"},"110712":{"name":"fedf6ffcb69e3f2c33f8883d9c0d0126","files":"fedf6ffcb69e3f2c33f8883d9c0d0126@2x.webp,fedf6ffcb69e3f2c33f8883d9c0d0126@3x.webp"},"110713":{"name":"2c859ff0918e18a6f8e014bcd1ace9b9","files":"2c859ff0918e18a6f8e014bcd1ace9b9@2x.webp,2c859ff0918e18a6f8e014bcd1ace9b9@3x.webp"},"110714":{"name":"6e5718c20ce3bb6d727bcef483f2d2d8","files":"6e5718c20ce3bb6d727bcef483f2d2d8@2x.webp"},"110715":{"name":"3269f41b8a8a86965e550dc0ec450825","files":"3269f41b8a8a86965e550dc0ec450825@2x.webp"},"110716":{"name":"be0f6695a8bfb4cf60c14f7307b4a44e","files":"be0f6695a8bfb4cf60c14f7307b4a44e@2x.webp,be0f6695a8bfb4cf60c14f7307b4a44e@3x.webp"},"110717":{"name":"28d88269d756152c39ce2954a5cf6765","files":"28d88269d756152c39ce2954a5cf6765@2x.webp"},"110719":{"name":"ec0bdfbd279d56115a75056a441082fd","files":"ec0bdfbd279d56115a75056a441082fd@2x.webp,ec0bdfbd279d56115a75056a441082fd@3x.webp"},"110720":{"name":"33ee6bd6ab359381f203fb7274d7f65b","files":"33ee6bd6ab359381f203fb7274d7f65b@2x.webp,33ee6bd6ab359381f203fb7274d7f65b@3x.webp"},"110721":{"name":"f74342f719057bf95d328801fe0b4511","files":"f74342f719057bf95d328801fe0b4511@2x.webp,f74342f719057bf95d328801fe0b4511@3x.webp"},"110722":{"name":"27e2813f5cd9dbdd6d9738776f54d9c2","files":"27e2813f5cd9dbdd6d9738776f54d9c2@2x.webp,27e2813f5cd9dbdd6d9738776f54d9c2@3x.webp"},"110723":{"name":"2a4f7653dea55b195ba1a0be3acfaeb0","files":"2a4f7653dea55b195ba1a0be3acfaeb0@2x.webp,2a4f7653dea55b195ba1a0be3acfaeb0@3x.webp"},"110724":{"name":"26ec149ca3308ecbaad14bd1ad9e44f5","files":"26ec149ca3308ecbaad14bd1ad9e44f5@2x.webp,26ec149ca3308ecbaad14bd1ad9e44f5@3x.webp"},"110725":{"name":"9c97984259b44d2b3c61fe02af932fcd","files":"9c97984259b44d2b3c61fe02af932fcd@2x.webp,9c97984259b44d2b3c61fe02af932fcd@3x.webp"},"110726":{"name":"3f44d147fa8a9ae20d4d335aa6dfb186","files":"3f44d147fa8a9ae20d4d335aa6dfb186@2x.webp,3f44d147fa8a9ae20d4d335aa6dfb186@3x.webp"},"110727":{"name":"cc84f650646e7bd4bea5ead90c3ad8a5","files":"cc84f650646e7bd4bea5ead90c3ad8a5@2x.webp,cc84f650646e7bd4bea5ead90c3ad8a5@3x.webp"},"110728":{"name":"423b95f5466bf84ede59d10467067339","files":"423b95f5466bf84ede59d10467067339@2x.webp,423b95f5466bf84ede59d10467067339@3x.webp"},"231032":{"name":"04343d706f96a477c6ec6f79b82e35d4","files":"04343d706f96a477c6ec6f79b82e35d4@2x.webp,04343d706f96a477c6ec6f79b82e35d4@3x.webp"},"231033":{"name":"33ee6bd6ab359381f203fb7274d7f65b","files":"33ee6bd6ab359381f203fb7274d7f65b@2x.webp,33ee6bd6ab359381f203fb7274d7f65b@3x.webp"},"231035":{"name":"968e3af112fabdfe07f362f33a9f6cd1","files":"968e3af112fabdfe07f362f33a9f6cd1@2x.webp,968e3af112fabdfe07f362f33a9f6cd1@3x.webp"},"231036":{"name":"6025d172f320c4f141e04dd9bdaaf9d8","files":"6025d172f320c4f141e04dd9bdaaf9d8@2x.webp,6025d172f320c4f141e04dd9bdaaf9d8@3x.webp"},"231037":{"name":"9b3736480655335f3eb727eb237fc43d","files":"9b3736480655335f3eb727eb237fc43d@2x.webp,9b3736480655335f3eb727eb237fc43d@3x.webp"},"231038":{"name":"7c3484a1423742d63eac8eeeb7b2e4d0","files":"7c3484a1423742d63eac8eeeb7b2e4d0@2x.webp,7c3484a1423742d63eac8eeeb7b2e4d0@3x.webp"},"231039":{"name":"8a14788052514b7f38f06f2e90d5e714","files":"8a14788052514b7f38f06f2e90d5e714@2x.webp,8a14788052514b7f38f06f2e90d5e714@3x.webp"},"231040":{"name":"674396bac066c9fff951dcca0a45a115","files":"674396bac066c9fff951dcca0a45a115@2x.webp,674396bac066c9fff951dcca0a45a115@3x.webp"}},"xml":"140a8aace5b2c60054c509a7eb633eb5.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/7a273d81615faa995f9dbb0d667b86e9.zip"},"110810":{"res":{"110516":{"name":"910f2ad97c376011fd70883f6f5185d1","files":"910f2ad97c376011fd70883f6f5185d1@2x.png,910f2ad97c376011fd70883f6f5185d1@3x.png,910f2ad97c376011fd70883f6f5185d1@dark@2x.png,910f2ad97c376011fd70883f6f5185d1@dark@3x.png"},"110518":{"name":"61aa6966406ffbf708cb84285f1ae9b3","files":"61aa6966406ffbf708cb84285f1ae9b3@2x.png,61aa6966406ffbf708cb84285f1ae9b3@3x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@2x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@3x.png"}},"xml":"8fd0e1a3b522b50d75ac9358f3b54538.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/4d08b5e8d6e221585c736057720fbc69.zip"},"110811":{"res":{"110586":{"name":"872c8dfcdde30d7f101922dda60df4bf","files":"872c8dfcdde30d7f101922dda60df4bf@2x.png,872c8dfcdde30d7f101922dda60df4bf@3x.png"},"110587":{"name":"a113c26f3f96a1efe227ca04f2f5a29d","files":"a113c26f3f96a1efe227ca04f2f5a29d@2x.png,a113c26f3f96a1efe227ca04f2f5a29d@3x.png"}},"xml":"ff856b03d2983b90ed4979ba7b3b6fc0.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/3dfce20e0bad45bf68cbe18280f70974.zip"},"110812":{"res":{"110518":{"name":"61aa6966406ffbf708cb84285f1ae9b3","files":"61aa6966406ffbf708cb84285f1ae9b3@2x.png,61aa6966406ffbf708cb84285f1ae9b3@3x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@2x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@3x.png"},"110570":{"name":"ce0751a4ed430b4c9944c495bf167102","files":"ce0751a4ed430b4c9944c495bf167102@2x.webp,ce0751a4ed430b4c9944c495bf167102@3x.webp"},"110578":{"name":"edee6c288be358cf8661227862692be1","files":"edee6c288be358cf8661227862692be1@2x.png,edee6c288be358cf8661227862692be1@3x.png"}},"xml":"7cdb7e6cabce06d564d42d919160ea7b.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/b27485db74f1b321cdfedce8555e14a2.zip"},"110813":{"res":{"110570":{"name":"ce0751a4ed430b4c9944c495bf167102","files":"ce0751a4ed430b4c9944c495bf167102@2x.webp,ce0751a4ed430b4c9944c495bf167102@3x.webp"},"110578":{"name":"edee6c288be358cf8661227862692be1","files":"edee6c288be358cf8661227862692be1@2x.png,edee6c288be358cf8661227862692be1@3x.png"},"110586":{"name":"872c8dfcdde30d7f101922dda60df4bf","files":"872c8dfcdde30d7f101922dda60df4bf@2x.png,872c8dfcdde30d7f101922dda60df4bf@3x.png"},"110587":{"name":"a113c26f3f96a1efe227ca04f2f5a29d","files":"a113c26f3f96a1efe227ca04f2f5a29d@2x.png,a113c26f3f96a1efe227ca04f2f5a29d@3x.png"},"110588":{"name":"198b5984fe82b67fd9c7958f55fb7ed0","files":"198b5984fe82b67fd9c7958f55fb7ed0@2x.png,198b5984fe82b67fd9c7958f55fb7ed0@3x.png"},"110589":{"name":"1c42b168c43b7dce2b32e0c6489493a8","files":"1c42b168c43b7dce2b32e0c6489493a8@2x.png,1c42b168c43b7dce2b32e0c6489493a8@3x.png"}},"xml":"4f041af434bfa8750d331c01706fee19.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/9ae017cd6bfb661a88c37158bb4f6425.zip"},"110850":{"res":{"110339":{"name":"3f04be201052860aa0035b8792c3c77f","files":"3f04be201052860aa0035b8792c3c77f@2x.png,3f04be201052860aa0035b8792c3c77f@3x.png"},"110341":{"name":"7a8399723e8e3319087526abca1a7aab","files":"7a8399723e8e3319087526abca1a7aab@2x.webp,7a8399723e8e3319087526abca1a7aab@3x.webp"},"110343":{"name":"f2353e96d162e91644f063d8fb3ee043","files":"f2353e96d162e91644f063d8fb3ee043@2x.webp,f2353e96d162e91644f063d8fb3ee043@3x.webp"},"110345":{"name":"ca622d3849384ad2b128fe31cebb1da8","files":"ca622d3849384ad2b128fe31cebb1da8@2x.webp,ca622d3849384ad2b128fe31cebb1da8@3x.webp"},"110349":{"name":"efd8a8684ac69153a6b08bd7d370d4c4","files":"efd8a8684ac69153a6b08bd7d370d4c4@2x.webp,efd8a8684ac69153a6b08bd7d370d4c4@3x.webp"},"110359":{"name":"7a77a7227c14eda31d510b3fc43f3a2d","files":"7a77a7227c14eda31d510b3fc43f3a2d@2x.webp,7a77a7227c14eda31d510b3fc43f3a2d@3x.webp"},"110710":{"name":"9333d548d31852e5a4d37f49149c9dcc","files":"9333d548d31852e5a4d37f49149c9dcc@2x.webp,9333d548d31852e5a4d37f49149c9dcc@3x.webp"},"110711":{"name":"9ee2b4413fed3ccc18267158bce1b5e1","files":"9ee2b4413fed3ccc18267158bce1b5e1@2x.webp,9ee2b4413fed3ccc18267158bce1b5e1@3x.webp"},"110712":{"name":"fedf6ffcb69e3f2c33f8883d9c0d0126","files":"fedf6ffcb69e3f2c33f8883d9c0d0126@2x.webp,fedf6ffcb69e3f2c33f8883d9c0d0126@3x.webp"},"110713":{"name":"2c859ff0918e18a6f8e014bcd1ace9b9","files":"2c859ff0918e18a6f8e014bcd1ace9b9@2x.webp,2c859ff0918e18a6f8e014bcd1ace9b9@3x.webp"},"110714":{"name":"6e5718c20ce3bb6d727bcef483f2d2d8","files":"6e5718c20ce3bb6d727bcef483f2d2d8@2x.webp"},"110715":{"name":"3269f41b8a8a86965e550dc0ec450825","files":"3269f41b8a8a86965e550dc0ec450825@2x.webp"},"110716":{"name":"be0f6695a8bfb4cf60c14f7307b4a44e","files":"be0f6695a8bfb4cf60c14f7307b4a44e@2x.webp,be0f6695a8bfb4cf60c14f7307b4a44e@3x.webp"},"110717":{"name":"28d88269d756152c39ce2954a5cf6765","files":"28d88269d756152c39ce2954a5cf6765@2x.webp"},"110719":{"name":"ec0bdfbd279d56115a75056a441082fd","files":"ec0bdfbd279d56115a75056a441082fd@2x.webp,ec0bdfbd279d56115a75056a441082fd@3x.webp"},"110720":{"name":"33ee6bd6ab359381f203fb7274d7f65b","files":"33ee6bd6ab359381f203fb7274d7f65b@2x.webp,33ee6bd6ab359381f203fb7274d7f65b@3x.webp"},"110721":{"name":"f74342f719057bf95d328801fe0b4511","files":"f74342f719057bf95d328801fe0b4511@2x.webp,f74342f719057bf95d328801fe0b4511@3x.webp"},"110722":{"name":"27e2813f5cd9dbdd6d9738776f54d9c2","files":"27e2813f5cd9dbdd6d9738776f54d9c2@2x.webp,27e2813f5cd9dbdd6d9738776f54d9c2@3x.webp"},"110723":{"name":"2a4f7653dea55b195ba1a0be3acfaeb0","files":"2a4f7653dea55b195ba1a0be3acfaeb0@2x.webp,2a4f7653dea55b195ba1a0be3acfaeb0@3x.webp"},"110724":{"name":"26ec149ca3308ecbaad14bd1ad9e44f5","files":"26ec149ca3308ecbaad14bd1ad9e44f5@2x.webp,26ec149ca3308ecbaad14bd1ad9e44f5@3x.webp"},"110725":{"name":"9c97984259b44d2b3c61fe02af932fcd","files":"9c97984259b44d2b3c61fe02af932fcd@2x.webp,9c97984259b44d2b3c61fe02af932fcd@3x.webp"},"110726":{"name":"3f44d147fa8a9ae20d4d335aa6dfb186","files":"3f44d147fa8a9ae20d4d335aa6dfb186@2x.webp,3f44d147fa8a9ae20d4d335aa6dfb186@3x.webp"},"110727":{"name":"cc84f650646e7bd4bea5ead90c3ad8a5","files":"cc84f650646e7bd4bea5ead90c3ad8a5@2x.webp,cc84f650646e7bd4bea5ead90c3ad8a5@3x.webp"},"110728":{"name":"423b95f5466bf84ede59d10467067339","files":"423b95f5466bf84ede59d10467067339@2x.webp,423b95f5466bf84ede59d10467067339@3x.webp"}},"xml":"f785bd41c88db3d72fca6c07ba4ebc57.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/a25a602b29a2632d593b444b9474535d.zip"},"110871":{"res":{"110851":{"name":"ca622d3849384ad2b128fe31cebb1da8","files":"ca622d3849384ad2b128fe31cebb1da8@2x.webp,ca622d3849384ad2b128fe31cebb1da8@3x.webp"},"110852":{"name":"0abc969c428c41203c6779024fa21418","files":"0abc969c428c41203c6779024fa21418@2x.webp,0abc969c428c41203c6779024fa21418@3x.webp"},"110853":{"name":"69822ea9b08ade8d26bbc8d35259c743","files":"69822ea9b08ade8d26bbc8d35259c743@2x.webp,69822ea9b08ade8d26bbc8d35259c743@3x.webp"},"110854":{"name":"82700a75f33ec3baf6a577e2242f21f9","files":"82700a75f33ec3baf6a577e2242f21f9@2x.webp,82700a75f33ec3baf6a577e2242f21f9@3x.webp"},"110855":{"name":"efd8a8684ac69153a6b08bd7d370d4c4","files":"efd8a8684ac69153a6b08bd7d370d4c4@2x.webp,efd8a8684ac69153a6b08bd7d370d4c4@3x.webp"},"110856":{"name":"b748da5efe54bdad7605be2fc216bf18","files":"b748da5efe54bdad7605be2fc216bf18@2x.webp,b748da5efe54bdad7605be2fc216bf18@3x.webp"},"110857":{"name":"7a77a7227c14eda31d510b3fc43f3a2d","files":"7a77a7227c14eda31d510b3fc43f3a2d@2x.webp,7a77a7227c14eda31d510b3fc43f3a2d@3x.webp"}},"xml":"28d9f5cd5577c48612a20f1cc49efd93.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/acd3387dfb6b63b9a55010f9c48648bd.zip"},"110872":{"res":{"110860":{"name":"e623d545f0ad8611253ce2387c70a351","files":"e623d545f0ad8611253ce2387c70a351@2x.webp,e623d545f0ad8611253ce2387c70a351@3x.webp"}},"xml":"bfdeb15ee1ead1740a245ab99fb122f3.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/d4944a6be374a85fa06404ea0d79f545.zip"},"110873":{"res":{"111983":{"name":"dd796e59a9a70a4fc40c29c571bfceff","files":"dd796e59a9a70a4fc40c29c571bfceff@2x.webp,dd796e59a9a70a4fc40c29c571bfceff@3x.webp"},"111984":{"name":"26c616c2e5ae625a63502b17b25f634d","files":"26c616c2e5ae625a63502b17b25f634d@2x.webp,26c616c2e5ae625a63502b17b25f634d@3x.webp"}},"xml":"fda0fb9dd9f42296671d0e802594f537.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/0676447b97b080d24b7e44c64008a7b5.zip"},"110920":{"res":{"110536":{"name":"1be21103e8f7fee3ac2ed18d9656fcf3","files":"1be21103e8f7fee3ac2ed18d9656fcf3@2x.png,1be21103e8f7fee3ac2ed18d9656fcf3@3x.png"},"110537":{"name":"fd1583cb811034be896e7841c6c8bcc3","files":"fd1583cb811034be896e7841c6c8bcc3@2x.png,fd1583cb811034be896e7841c6c8bcc3@3x.png"},"110925":{"name":"68b779fbed7fc379ad7ddc1933cdfc37","files":"68b779fbed7fc379ad7ddc1933cdfc37@2x.png,68b779fbed7fc379ad7ddc1933cdfc37@3x.png"},"110926":{"name":"7a6c97cb0c3e2d1ca87deddd6b0003ab","files":"7a6c97cb0c3e2d1ca87deddd6b0003ab@2x.png,7a6c97cb0c3e2d1ca87deddd6b0003ab@3x.png"},"110927":{"name":"62ac3e36d4dbe178154f28fcac3efa49","files":"62ac3e36d4dbe178154f28fcac3efa49@2x.png,62ac3e36d4dbe178154f28fcac3efa49@3x.png"},"110928":{"name":"62ac3e36d4dbe178154f28fcac3efa49","files":"62ac3e36d4dbe178154f28fcac3efa49@2x.png,62ac3e36d4dbe178154f28fcac3efa49@3x.png"},"110933":{"name":"8c3f7b040dec04eab9be2df287b979ad","files":"8c3f7b040dec04eab9be2df287b979ad@2x.webp,8c3f7b040dec04eab9be2df287b979ad@3x.webp"},"110934":{"name":"368077ed49e37772ad5c99a04cd7e326","files":"368077ed49e37772ad5c99a04cd7e326@2x.webp,368077ed49e37772ad5c99a04cd7e326@3x.webp"},"110935":{"name":"1f665eb6f33ebc4a6293d79b43a8f069","files":"1f665eb6f33ebc4a6293d79b43a8f069.svg"},"110936":{"name":"31ff74d29c97c6229826f39e49462ecf","files":"31ff74d29c97c6229826f39e49462ecf.svg"},"110937":{"name":"c74bd9d45308e41abc2268fae0f7f23b","files":"c74bd9d45308e41abc2268fae0f7f23b.svg"},"110938":{"name":"66590c5e801eae40652a5a116b1b5106","files":"66590c5e801eae40652a5a116b1b5106.svg"},"110939":{"name":"3e6599f5586731a2ab27ac2cada3121d","files":"3e6599f5586731a2ab27ac2cada3121d.svg"},"110940":{"name":"04303d8944d12948899b8b7dc20b1824","files":"04303d8944d12948899b8b7dc20b1824.svg"},"110941":{"name":"83465379ec0862531066600175b473ea","files":"83465379ec0862531066600175b473ea.svg"},"110943":{"name":"0f1c67ea62395a8f0c158b241050f1c1","files":"0f1c67ea62395a8f0c158b241050f1c1.svg"},"110945":{"name":"b99c0b9fed01103d899f1df3f54e676c","files":"b99c0b9fed01103d899f1df3f54e676c@2x.png,b99c0b9fed01103d899f1df3f54e676c@3x.png"},"110946":{"name":"4ccbfd0209fdc01f2b9978b789419d55","files":"4ccbfd0209fdc01f2b9978b789419d55@2x.webp,4ccbfd0209fdc01f2b9978b789419d55@3x.webp"},"110952":{"name":"301a9a5d2794d7df14319e766b00829d","files":"301a9a5d2794d7df14319e766b00829d.svg"},"110953":{"name":"0b09fef69da565d14370bcf4de692964","files":"0b09fef69da565d14370bcf4de692964.svg"},"110954":{"name":"03159daf61f2247d962aeff6afe1be8b","files":"03159daf61f2247d962aeff6afe1be8b.svg"},"110955":{"name":"e0008631e14a201b2dafaddca74f2795","files":"e0008631e14a201b2dafaddca74f2795.svg"},"110956":{"name":"ebb84ead800d104bd67ac6a4a9eebdb3","files":"ebb84ead800d104bd67ac6a4a9eebdb3.svg"},"110957":{"name":"f2bc6f9be52438279b93e7c9b268215c","files":"f2bc6f9be52438279b93e7c9b268215c.svg"},"110958":{"name":"a336bcc0a143d3bf41599ca19dc694ad","files":"a336bcc0a143d3bf41599ca19dc694ad.svg"},"110959":{"name":"cdc4cad8d219571aa8ffcf7f6417a874","files":"cdc4cad8d219571aa8ffcf7f6417a874@2x.png,cdc4cad8d219571aa8ffcf7f6417a874@3x.png"},"110960":{"name":"2e859189a75ff6945e52fbfeb7b725d3","files":"2e859189a75ff6945e52fbfeb7b725d3@2x.png,2e859189a75ff6945e52fbfeb7b725d3@3x.png"},"110961":{"name":"392a970ae75eb5d17a1bf2ca25872d65","files":"392a970ae75eb5d17a1bf2ca25872d65@2x.png,392a970ae75eb5d17a1bf2ca25872d65@3x.png"},"110962":{"name":"4ca81109bbf360be1401d2168485295f","files":"4ca81109bbf360be1401d2168485295f@2x.png,4ca81109bbf360be1401d2168485295f@3x.png"},"110967":{"name":"202f87046e753b37de39e386160d1612","files":"202f87046e753b37de39e386160d1612.svg"},"110979":{"name":"69f28caa9100da53a25067298edce7a0","files":"69f28caa9100da53a25067298edce7a0@2x.png,69f28caa9100da53a25067298edce7a0@3x.png"},"110980":{"name":"d1181790d56184ba7ae21dc395026d5f","files":"d1181790d56184ba7ae21dc395026d5f@2x.png,d1181790d56184ba7ae21dc395026d5f@3x.png"},"110983":{"name":"bd29380115783e69c9b8fbe0240384c2","files":"bd29380115783e69c9b8fbe0240384c2@2x.png,bd29380115783e69c9b8fbe0240384c2@3x.png"},"110984":{"name":"46035ffd6e754de9ebce17f776aa7bfe","files":"46035ffd6e754de9ebce17f776aa7bfe@2x.png,46035ffd6e754de9ebce17f776aa7bfe@3x.png"},"110986":{"name":"9c9bbcfdea03288211fe716e72bc3864","files":"9c9bbcfdea03288211fe716e72bc3864.svg"},"110987":{"name":"dcf3864f6d5efe1c2d4911a37df14786","files":"dcf3864f6d5efe1c2d4911a37df14786.svg"},"110988":{"name":"a91edd5f3ab0e952c6f15dbbe9aa0d5d","files":"a91edd5f3ab0e952c6f15dbbe9aa0d5d.svg"},"110989":{"name":"251ecc12bdbb953b00a80f23c648bb3f","files":"251ecc12bdbb953b00a80f23c648bb3f.svg"},"110990":{"name":"b2054cc12d130f90e9b63695b6daa725","files":"b2054cc12d130f90e9b63695b6daa725.svg"},"110991":{"name":"4c5de5a536f4802fa17e51dd2c4bf64a","files":"4c5de5a536f4802fa17e51dd2c4bf64a.svg"},"110992":{"name":"0333bd51def24dc05f6632341b00a90a","files":"0333bd51def24dc05f6632341b00a90a.svg"},"110993":{"name":"089fc56a083770773f74dec31c4fc89e","files":"089fc56a083770773f74dec31c4fc89e.svg"},"110994":{"name":"b884c6549cc691f9f9bc850905398b0a","files":"b884c6549cc691f9f9bc850905398b0a.svg"},"110995":{"name":"d566d5e53ca2384d70405bf3e3d73f2f","files":"d566d5e53ca2384d70405bf3e3d73f2f.svg"},"110996":{"name":"573f56434317fafc0844a6cc278c5b01","files":"573f56434317fafc0844a6cc278c5b01.svg"},"170002":{"name":"0ca3305ff45f5e70e48a94ae88ba934d","files":"0ca3305ff45f5e70e48a94ae88ba934d@2x.webp,0ca3305ff45f5e70e48a94ae88ba934d@3x.webp"},"170003":{"name":"9cf7eda05ecb383c39534feddc42fe05","files":"9cf7eda05ecb383c39534feddc42fe05@2x.webp,9cf7eda05ecb383c39534feddc42fe05@3x.webp"},"170004":{"name":"9c5eaa0653469a8967859f323dd8084a","files":"9c5eaa0653469a8967859f323dd8084a@2x.webp,9c5eaa0653469a8967859f323dd8084a@3x.webp"},"170005":{"name":"e6e4f0f999b33ac3f828354dee6ad35f","files":"e6e4f0f999b33ac3f828354dee6ad35f@2x.webp,e6e4f0f999b33ac3f828354dee6ad35f@3x.webp"},"170006":{"name":"db7a0c9a055a5199920e47b9b921139f","files":"db7a0c9a055a5199920e47b9b921139f@2x.png,db7a0c9a055a5199920e47b9b921139f@3x.png"},"170007":{"name":"4cbb657f919a2a7d23476da05cbfe4e5","files":"4cbb657f919a2a7d23476da05cbfe4e5@2x.png,4cbb657f919a2a7d23476da05cbfe4e5@3x.png"},"170008":{"name":"d95799e7380dfbf1a03bdb499a5bd151","files":"d95799e7380dfbf1a03bdb499a5bd151@2x.webp,d95799e7380dfbf1a03bdb499a5bd151@3x.webp"},"170009":{"name":"d95799e7380dfbf1a03bdb499a5bd151","files":"d95799e7380dfbf1a03bdb499a5bd151@2x.webp,d95799e7380dfbf1a03bdb499a5bd151@3x.webp"},"170034":{"name":"b8fc14030bc2a38a0da8796805a1da1f","files":"b8fc14030bc2a38a0da8796805a1da1f@2x.webp,b8fc14030bc2a38a0da8796805a1da1f@3x.webp"},"170035":{"name":"3fc9f3de3dc8a7972b16d15293949d00","files":"3fc9f3de3dc8a7972b16d15293949d00@2x.webp,3fc9f3de3dc8a7972b16d15293949d00@3x.webp"},"170036":{"name":"b12a69d5f219151fc8799c4c5af2affa","files":"b12a69d5f219151fc8799c4c5af2affa@2x.webp,b12a69d5f219151fc8799c4c5af2affa@3x.webp"},"170037":{"name":"30a7903a183000ad7d3ae8c3beecc44f","files":"30a7903a183000ad7d3ae8c3beecc44f@2x.webp,30a7903a183000ad7d3ae8c3beecc44f@3x.webp"},"170038":{"name":"4f99a885eee7c155509d097b521e8520","files":"4f99a885eee7c155509d097b521e8520@2x.webp,4f99a885eee7c155509d097b521e8520@3x.webp"},"170039":{"name":"7243441a99160f5e50500c9010d111bd","files":"7243441a99160f5e50500c9010d111bd@2x.webp,7243441a99160f5e50500c9010d111bd@3x.webp"}},"xml":"44d9d78f32ff421c731d4eba7efffa3f.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/bb986d91e5abe28b52aa4c429ab8de8f.zip"},"110921":{"res":{"110536":{"name":"1be21103e8f7fee3ac2ed18d9656fcf3","files":"1be21103e8f7fee3ac2ed18d9656fcf3@2x.png,1be21103e8f7fee3ac2ed18d9656fcf3@3x.png"},"110537":{"name":"fd1583cb811034be896e7841c6c8bcc3","files":"fd1583cb811034be896e7841c6c8bcc3@2x.png,fd1583cb811034be896e7841c6c8bcc3@3x.png"},"110925":{"name":"68b779fbed7fc379ad7ddc1933cdfc37","files":"68b779fbed7fc379ad7ddc1933cdfc37@2x.png,68b779fbed7fc379ad7ddc1933cdfc37@3x.png"},"110926":{"name":"7a6c97cb0c3e2d1ca87deddd6b0003ab","files":"7a6c97cb0c3e2d1ca87deddd6b0003ab@2x.png,7a6c97cb0c3e2d1ca87deddd6b0003ab@3x.png"},"110927":{"name":"62ac3e36d4dbe178154f28fcac3efa49","files":"62ac3e36d4dbe178154f28fcac3efa49@2x.png,62ac3e36d4dbe178154f28fcac3efa49@3x.png"},"110928":{"name":"62ac3e36d4dbe178154f28fcac3efa49","files":"62ac3e36d4dbe178154f28fcac3efa49@2x.png,62ac3e36d4dbe178154f28fcac3efa49@3x.png"},"110933":{"name":"8c3f7b040dec04eab9be2df287b979ad","files":"8c3f7b040dec04eab9be2df287b979ad@2x.webp,8c3f7b040dec04eab9be2df287b979ad@3x.webp"},"110934":{"name":"368077ed49e37772ad5c99a04cd7e326","files":"368077ed49e37772ad5c99a04cd7e326@2x.webp,368077ed49e37772ad5c99a04cd7e326@3x.webp"},"110935":{"name":"1f665eb6f33ebc4a6293d79b43a8f069","files":"1f665eb6f33ebc4a6293d79b43a8f069.svg"},"110936":{"name":"31ff74d29c97c6229826f39e49462ecf","files":"31ff74d29c97c6229826f39e49462ecf.svg"},"110937":{"name":"c74bd9d45308e41abc2268fae0f7f23b","files":"c74bd9d45308e41abc2268fae0f7f23b.svg"},"110938":{"name":"66590c5e801eae40652a5a116b1b5106","files":"66590c5e801eae40652a5a116b1b5106.svg"},"110939":{"name":"3e6599f5586731a2ab27ac2cada3121d","files":"3e6599f5586731a2ab27ac2cada3121d.svg"},"110940":{"name":"04303d8944d12948899b8b7dc20b1824","files":"04303d8944d12948899b8b7dc20b1824.svg"},"110941":{"name":"83465379ec0862531066600175b473ea","files":"83465379ec0862531066600175b473ea.svg"},"110943":{"name":"0f1c67ea62395a8f0c158b241050f1c1","files":"0f1c67ea62395a8f0c158b241050f1c1.svg"},"110945":{"name":"b99c0b9fed01103d899f1df3f54e676c","files":"b99c0b9fed01103d899f1df3f54e676c@2x.png,b99c0b9fed01103d899f1df3f54e676c@3x.png"},"110946":{"name":"4ccbfd0209fdc01f2b9978b789419d55","files":"4ccbfd0209fdc01f2b9978b789419d55@2x.webp,4ccbfd0209fdc01f2b9978b789419d55@3x.webp"},"110952":{"name":"301a9a5d2794d7df14319e766b00829d","files":"301a9a5d2794d7df14319e766b00829d.svg"},"110953":{"name":"0b09fef69da565d14370bcf4de692964","files":"0b09fef69da565d14370bcf4de692964.svg"},"110954":{"name":"03159daf61f2247d962aeff6afe1be8b","files":"03159daf61f2247d962aeff6afe1be8b.svg"},"110955":{"name":"e0008631e14a201b2dafaddca74f2795","files":"e0008631e14a201b2dafaddca74f2795.svg"},"110956":{"name":"ebb84ead800d104bd67ac6a4a9eebdb3","files":"ebb84ead800d104bd67ac6a4a9eebdb3.svg"},"110957":{"name":"f2bc6f9be52438279b93e7c9b268215c","files":"f2bc6f9be52438279b93e7c9b268215c.svg"},"110958":{"name":"a336bcc0a143d3bf41599ca19dc694ad","files":"a336bcc0a143d3bf41599ca19dc694ad.svg"},"110959":{"name":"cdc4cad8d219571aa8ffcf7f6417a874","files":"cdc4cad8d219571aa8ffcf7f6417a874@2x.png,cdc4cad8d219571aa8ffcf7f6417a874@3x.png"},"110960":{"name":"2e859189a75ff6945e52fbfeb7b725d3","files":"2e859189a75ff6945e52fbfeb7b725d3@2x.png,2e859189a75ff6945e52fbfeb7b725d3@3x.png"},"110961":{"name":"392a970ae75eb5d17a1bf2ca25872d65","files":"392a970ae75eb5d17a1bf2ca25872d65@2x.png,392a970ae75eb5d17a1bf2ca25872d65@3x.png"},"110962":{"name":"4ca81109bbf360be1401d2168485295f","files":"4ca81109bbf360be1401d2168485295f@2x.png,4ca81109bbf360be1401d2168485295f@3x.png"},"110967":{"name":"202f87046e753b37de39e386160d1612","files":"202f87046e753b37de39e386160d1612.svg"},"110979":{"name":"69f28caa9100da53a25067298edce7a0","files":"69f28caa9100da53a25067298edce7a0@2x.png,69f28caa9100da53a25067298edce7a0@3x.png"},"110980":{"name":"d1181790d56184ba7ae21dc395026d5f","files":"d1181790d56184ba7ae21dc395026d5f@2x.png,d1181790d56184ba7ae21dc395026d5f@3x.png"},"110983":{"name":"bd29380115783e69c9b8fbe0240384c2","files":"bd29380115783e69c9b8fbe0240384c2@2x.png,bd29380115783e69c9b8fbe0240384c2@3x.png"},"110984":{"name":"46035ffd6e754de9ebce17f776aa7bfe","files":"46035ffd6e754de9ebce17f776aa7bfe@2x.png,46035ffd6e754de9ebce17f776aa7bfe@3x.png"},"110986":{"name":"9c9bbcfdea03288211fe716e72bc3864","files":"9c9bbcfdea03288211fe716e72bc3864.svg"},"110987":{"name":"dcf3864f6d5efe1c2d4911a37df14786","files":"dcf3864f6d5efe1c2d4911a37df14786.svg"},"110988":{"name":"a91edd5f3ab0e952c6f15dbbe9aa0d5d","files":"a91edd5f3ab0e952c6f15dbbe9aa0d5d.svg"},"110989":{"name":"251ecc12bdbb953b00a80f23c648bb3f","files":"251ecc12bdbb953b00a80f23c648bb3f.svg"},"110990":{"name":"b2054cc12d130f90e9b63695b6daa725","files":"b2054cc12d130f90e9b63695b6daa725.svg"},"110991":{"name":"4c5de5a536f4802fa17e51dd2c4bf64a","files":"4c5de5a536f4802fa17e51dd2c4bf64a.svg"},"110992":{"name":"0333bd51def24dc05f6632341b00a90a","files":"0333bd51def24dc05f6632341b00a90a.svg"},"110993":{"name":"089fc56a083770773f74dec31c4fc89e","files":"089fc56a083770773f74dec31c4fc89e.svg"},"110994":{"name":"b884c6549cc691f9f9bc850905398b0a","files":"b884c6549cc691f9f9bc850905398b0a.svg"},"110995":{"name":"d566d5e53ca2384d70405bf3e3d73f2f","files":"d566d5e53ca2384d70405bf3e3d73f2f.svg"},"110996":{"name":"573f56434317fafc0844a6cc278c5b01","files":"573f56434317fafc0844a6cc278c5b01.svg"},"170002":{"name":"0ca3305ff45f5e70e48a94ae88ba934d","files":"0ca3305ff45f5e70e48a94ae88ba934d@2x.webp,0ca3305ff45f5e70e48a94ae88ba934d@3x.webp"},"170003":{"name":"9cf7eda05ecb383c39534feddc42fe05","files":"9cf7eda05ecb383c39534feddc42fe05@2x.webp,9cf7eda05ecb383c39534feddc42fe05@3x.webp"},"170004":{"name":"9c5eaa0653469a8967859f323dd8084a","files":"9c5eaa0653469a8967859f323dd8084a@2x.webp,9c5eaa0653469a8967859f323dd8084a@3x.webp"},"170005":{"name":"e6e4f0f999b33ac3f828354dee6ad35f","files":"e6e4f0f999b33ac3f828354dee6ad35f@2x.webp,e6e4f0f999b33ac3f828354dee6ad35f@3x.webp"},"170006":{"name":"db7a0c9a055a5199920e47b9b921139f","files":"db7a0c9a055a5199920e47b9b921139f@2x.png,db7a0c9a055a5199920e47b9b921139f@3x.png"},"170007":{"name":"4cbb657f919a2a7d23476da05cbfe4e5","files":"4cbb657f919a2a7d23476da05cbfe4e5@2x.png,4cbb657f919a2a7d23476da05cbfe4e5@3x.png"},"170008":{"name":"d95799e7380dfbf1a03bdb499a5bd151","files":"d95799e7380dfbf1a03bdb499a5bd151@2x.webp,d95799e7380dfbf1a03bdb499a5bd151@3x.webp"},"170009":{"name":"d95799e7380dfbf1a03bdb499a5bd151","files":"d95799e7380dfbf1a03bdb499a5bd151@2x.webp,d95799e7380dfbf1a03bdb499a5bd151@3x.webp"},"170034":{"name":"b8fc14030bc2a38a0da8796805a1da1f","files":"b8fc14030bc2a38a0da8796805a1da1f@2x.webp,b8fc14030bc2a38a0da8796805a1da1f@3x.webp"},"170035":{"name":"3fc9f3de3dc8a7972b16d15293949d00","files":"3fc9f3de3dc8a7972b16d15293949d00@2x.webp,3fc9f3de3dc8a7972b16d15293949d00@3x.webp"},"170036":{"name":"b12a69d5f219151fc8799c4c5af2affa","files":"b12a69d5f219151fc8799c4c5af2affa@2x.webp,b12a69d5f219151fc8799c4c5af2affa@3x.webp"},"170037":{"name":"30a7903a183000ad7d3ae8c3beecc44f","files":"30a7903a183000ad7d3ae8c3beecc44f@2x.webp,30a7903a183000ad7d3ae8c3beecc44f@3x.webp"},"170038":{"name":"4f99a885eee7c155509d097b521e8520","files":"4f99a885eee7c155509d097b521e8520@2x.webp,4f99a885eee7c155509d097b521e8520@3x.webp"},"170039":{"name":"7243441a99160f5e50500c9010d111bd","files":"7243441a99160f5e50500c9010d111bd@2x.webp,7243441a99160f5e50500c9010d111bd@3x.webp"}},"xml":"fdf2f339adfaab4b4657246d2a4576b5.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/14078ca60020b332e146ff59dc28d719.zip"},"110922":{"res":{"110925":{"name":"68b779fbed7fc379ad7ddc1933cdfc37","files":"68b779fbed7fc379ad7ddc1933cdfc37@2x.png,68b779fbed7fc379ad7ddc1933cdfc37@3x.png"},"110926":{"name":"7a6c97cb0c3e2d1ca87deddd6b0003ab","files":"7a6c97cb0c3e2d1ca87deddd6b0003ab@2x.png,7a6c97cb0c3e2d1ca87deddd6b0003ab@3x.png"},"110927":{"name":"62ac3e36d4dbe178154f28fcac3efa49","files":"62ac3e36d4dbe178154f28fcac3efa49@2x.png,62ac3e36d4dbe178154f28fcac3efa49@3x.png"},"110928":{"name":"62ac3e36d4dbe178154f28fcac3efa49","files":"62ac3e36d4dbe178154f28fcac3efa49@2x.png,62ac3e36d4dbe178154f28fcac3efa49@3x.png"},"110935":{"name":"1f665eb6f33ebc4a6293d79b43a8f069","files":"1f665eb6f33ebc4a6293d79b43a8f069.svg"},"110936":{"name":"31ff74d29c97c6229826f39e49462ecf","files":"31ff74d29c97c6229826f39e49462ecf.svg"},"110937":{"name":"c74bd9d45308e41abc2268fae0f7f23b","files":"c74bd9d45308e41abc2268fae0f7f23b.svg"},"110938":{"name":"66590c5e801eae40652a5a116b1b5106","files":"66590c5e801eae40652a5a116b1b5106.svg"},"110939":{"name":"3e6599f5586731a2ab27ac2cada3121d","files":"3e6599f5586731a2ab27ac2cada3121d.svg"},"110940":{"name":"04303d8944d12948899b8b7dc20b1824","files":"04303d8944d12948899b8b7dc20b1824.svg"},"110941":{"name":"83465379ec0862531066600175b473ea","files":"83465379ec0862531066600175b473ea.svg"},"110943":{"name":"0f1c67ea62395a8f0c158b241050f1c1","files":"0f1c67ea62395a8f0c158b241050f1c1.svg"},"110952":{"name":"301a9a5d2794d7df14319e766b00829d","files":"301a9a5d2794d7df14319e766b00829d.svg"},"110953":{"name":"0b09fef69da565d14370bcf4de692964","files":"0b09fef69da565d14370bcf4de692964.svg"},"110954":{"name":"03159daf61f2247d962aeff6afe1be8b","files":"03159daf61f2247d962aeff6afe1be8b.svg"},"110955":{"name":"e0008631e14a201b2dafaddca74f2795","files":"e0008631e14a201b2dafaddca74f2795.svg"},"110956":{"name":"ebb84ead800d104bd67ac6a4a9eebdb3","files":"ebb84ead800d104bd67ac6a4a9eebdb3.svg"},"110957":{"name":"f2bc6f9be52438279b93e7c9b268215c","files":"f2bc6f9be52438279b93e7c9b268215c.svg"},"110958":{"name":"a336bcc0a143d3bf41599ca19dc694ad","files":"a336bcc0a143d3bf41599ca19dc694ad.svg"},"110959":{"name":"cdc4cad8d219571aa8ffcf7f6417a874","files":"cdc4cad8d219571aa8ffcf7f6417a874@2x.png,cdc4cad8d219571aa8ffcf7f6417a874@3x.png"},"110960":{"name":"2e859189a75ff6945e52fbfeb7b725d3","files":"2e859189a75ff6945e52fbfeb7b725d3@2x.png,2e859189a75ff6945e52fbfeb7b725d3@3x.png"},"110961":{"name":"392a970ae75eb5d17a1bf2ca25872d65","files":"392a970ae75eb5d17a1bf2ca25872d65@2x.png,392a970ae75eb5d17a1bf2ca25872d65@3x.png"},"110962":{"name":"4ca81109bbf360be1401d2168485295f","files":"4ca81109bbf360be1401d2168485295f@2x.png,4ca81109bbf360be1401d2168485295f@3x.png"},"110967":{"name":"202f87046e753b37de39e386160d1612","files":"202f87046e753b37de39e386160d1612.svg"},"110979":{"name":"69f28caa9100da53a25067298edce7a0","files":"69f28caa9100da53a25067298edce7a0@2x.png,69f28caa9100da53a25067298edce7a0@3x.png"},"110980":{"name":"d1181790d56184ba7ae21dc395026d5f","files":"d1181790d56184ba7ae21dc395026d5f@2x.png,d1181790d56184ba7ae21dc395026d5f@3x.png"},"110983":{"name":"bd29380115783e69c9b8fbe0240384c2","files":"bd29380115783e69c9b8fbe0240384c2@2x.png,bd29380115783e69c9b8fbe0240384c2@3x.png"},"110984":{"name":"46035ffd6e754de9ebce17f776aa7bfe","files":"46035ffd6e754de9ebce17f776aa7bfe@2x.png,46035ffd6e754de9ebce17f776aa7bfe@3x.png"},"110986":{"name":"9c9bbcfdea03288211fe716e72bc3864","files":"9c9bbcfdea03288211fe716e72bc3864.svg"},"110987":{"name":"dcf3864f6d5efe1c2d4911a37df14786","files":"dcf3864f6d5efe1c2d4911a37df14786.svg"},"110988":{"name":"a91edd5f3ab0e952c6f15dbbe9aa0d5d","files":"a91edd5f3ab0e952c6f15dbbe9aa0d5d.svg"},"110989":{"name":"251ecc12bdbb953b00a80f23c648bb3f","files":"251ecc12bdbb953b00a80f23c648bb3f.svg"},"110990":{"name":"b2054cc12d130f90e9b63695b6daa725","files":"b2054cc12d130f90e9b63695b6daa725.svg"},"110991":{"name":"4c5de5a536f4802fa17e51dd2c4bf64a","files":"4c5de5a536f4802fa17e51dd2c4bf64a.svg"},"110992":{"name":"0333bd51def24dc05f6632341b00a90a","files":"0333bd51def24dc05f6632341b00a90a.svg"},"110993":{"name":"089fc56a083770773f74dec31c4fc89e","files":"089fc56a083770773f74dec31c4fc89e.svg"},"110994":{"name":"b884c6549cc691f9f9bc850905398b0a","files":"b884c6549cc691f9f9bc850905398b0a.svg"},"110995":{"name":"d566d5e53ca2384d70405bf3e3d73f2f","files":"d566d5e53ca2384d70405bf3e3d73f2f.svg"},"110996":{"name":"573f56434317fafc0844a6cc278c5b01","files":"573f56434317fafc0844a6cc278c5b01.svg"},"170002":{"name":"0ca3305ff45f5e70e48a94ae88ba934d","files":"0ca3305ff45f5e70e48a94ae88ba934d@2x.webp,0ca3305ff45f5e70e48a94ae88ba934d@3x.webp"},"170003":{"name":"9cf7eda05ecb383c39534feddc42fe05","files":"9cf7eda05ecb383c39534feddc42fe05@2x.webp,9cf7eda05ecb383c39534feddc42fe05@3x.webp"},"170004":{"name":"9c5eaa0653469a8967859f323dd8084a","files":"9c5eaa0653469a8967859f323dd8084a@2x.webp,9c5eaa0653469a8967859f323dd8084a@3x.webp"},"170005":{"name":"e6e4f0f999b33ac3f828354dee6ad35f","files":"e6e4f0f999b33ac3f828354dee6ad35f@2x.webp,e6e4f0f999b33ac3f828354dee6ad35f@3x.webp"},"170006":{"name":"db7a0c9a055a5199920e47b9b921139f","files":"db7a0c9a055a5199920e47b9b921139f@2x.png,db7a0c9a055a5199920e47b9b921139f@3x.png"},"170007":{"name":"4cbb657f919a2a7d23476da05cbfe4e5","files":"4cbb657f919a2a7d23476da05cbfe4e5@2x.png,4cbb657f919a2a7d23476da05cbfe4e5@3x.png"},"170008":{"name":"d95799e7380dfbf1a03bdb499a5bd151","files":"d95799e7380dfbf1a03bdb499a5bd151@2x.webp,d95799e7380dfbf1a03bdb499a5bd151@3x.webp"},"170009":{"name":"d95799e7380dfbf1a03bdb499a5bd151","files":"d95799e7380dfbf1a03bdb499a5bd151@2x.webp,d95799e7380dfbf1a03bdb499a5bd151@3x.webp"},"170034":{"name":"b8fc14030bc2a38a0da8796805a1da1f","files":"b8fc14030bc2a38a0da8796805a1da1f@2x.webp,b8fc14030bc2a38a0da8796805a1da1f@3x.webp"},"170035":{"name":"3fc9f3de3dc8a7972b16d15293949d00","files":"3fc9f3de3dc8a7972b16d15293949d00@2x.webp,3fc9f3de3dc8a7972b16d15293949d00@3x.webp"},"170036":{"name":"b12a69d5f219151fc8799c4c5af2affa","files":"b12a69d5f219151fc8799c4c5af2affa@2x.webp,b12a69d5f219151fc8799c4c5af2affa@3x.webp"},"170037":{"name":"30a7903a183000ad7d3ae8c3beecc44f","files":"30a7903a183000ad7d3ae8c3beecc44f@2x.webp,30a7903a183000ad7d3ae8c3beecc44f@3x.webp"},"170038":{"name":"4f99a885eee7c155509d097b521e8520","files":"4f99a885eee7c155509d097b521e8520@2x.webp,4f99a885eee7c155509d097b521e8520@3x.webp"},"170039":{"name":"7243441a99160f5e50500c9010d111bd","files":"7243441a99160f5e50500c9010d111bd@2x.webp,7243441a99160f5e50500c9010d111bd@3x.webp"}},"xml":"deaef6e14dcf0e6b01c91bfa5fdc2586.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/94933343df63dbfe02f1a06fd02300eb.zip"},"110924":{"res":{"110925":{"name":"68b779fbed7fc379ad7ddc1933cdfc37","files":"68b779fbed7fc379ad7ddc1933cdfc37@2x.png,68b779fbed7fc379ad7ddc1933cdfc37@3x.png"},"110926":{"name":"7a6c97cb0c3e2d1ca87deddd6b0003ab","files":"7a6c97cb0c3e2d1ca87deddd6b0003ab@2x.png,7a6c97cb0c3e2d1ca87deddd6b0003ab@3x.png"},"110927":{"name":"62ac3e36d4dbe178154f28fcac3efa49","files":"62ac3e36d4dbe178154f28fcac3efa49@2x.png,62ac3e36d4dbe178154f28fcac3efa49@3x.png"},"110928":{"name":"62ac3e36d4dbe178154f28fcac3efa49","files":"62ac3e36d4dbe178154f28fcac3efa49@2x.png,62ac3e36d4dbe178154f28fcac3efa49@3x.png"},"110935":{"name":"1f665eb6f33ebc4a6293d79b43a8f069","files":"1f665eb6f33ebc4a6293d79b43a8f069.svg"},"110936":{"name":"31ff74d29c97c6229826f39e49462ecf","files":"31ff74d29c97c6229826f39e49462ecf.svg"},"110937":{"name":"c74bd9d45308e41abc2268fae0f7f23b","files":"c74bd9d45308e41abc2268fae0f7f23b.svg"},"110938":{"name":"66590c5e801eae40652a5a116b1b5106","files":"66590c5e801eae40652a5a116b1b5106.svg"},"110939":{"name":"3e6599f5586731a2ab27ac2cada3121d","files":"3e6599f5586731a2ab27ac2cada3121d.svg"},"110940":{"name":"04303d8944d12948899b8b7dc20b1824","files":"04303d8944d12948899b8b7dc20b1824.svg"},"110941":{"name":"83465379ec0862531066600175b473ea","files":"83465379ec0862531066600175b473ea.svg"},"110943":{"name":"0f1c67ea62395a8f0c158b241050f1c1","files":"0f1c67ea62395a8f0c158b241050f1c1.svg"},"110952":{"name":"301a9a5d2794d7df14319e766b00829d","files":"301a9a5d2794d7df14319e766b00829d.svg"},"110953":{"name":"0b09fef69da565d14370bcf4de692964","files":"0b09fef69da565d14370bcf4de692964.svg"},"110954":{"name":"03159daf61f2247d962aeff6afe1be8b","files":"03159daf61f2247d962aeff6afe1be8b.svg"},"110955":{"name":"e0008631e14a201b2dafaddca74f2795","files":"e0008631e14a201b2dafaddca74f2795.svg"},"110956":{"name":"ebb84ead800d104bd67ac6a4a9eebdb3","files":"ebb84ead800d104bd67ac6a4a9eebdb3.svg"},"110957":{"name":"f2bc6f9be52438279b93e7c9b268215c","files":"f2bc6f9be52438279b93e7c9b268215c.svg"},"110958":{"name":"a336bcc0a143d3bf41599ca19dc694ad","files":"a336bcc0a143d3bf41599ca19dc694ad.svg"},"110959":{"name":"cdc4cad8d219571aa8ffcf7f6417a874","files":"cdc4cad8d219571aa8ffcf7f6417a874@2x.png,cdc4cad8d219571aa8ffcf7f6417a874@3x.png"},"110960":{"name":"2e859189a75ff6945e52fbfeb7b725d3","files":"2e859189a75ff6945e52fbfeb7b725d3@2x.png,2e859189a75ff6945e52fbfeb7b725d3@3x.png"},"110961":{"name":"392a970ae75eb5d17a1bf2ca25872d65","files":"392a970ae75eb5d17a1bf2ca25872d65@2x.png,392a970ae75eb5d17a1bf2ca25872d65@3x.png"},"110962":{"name":"4ca81109bbf360be1401d2168485295f","files":"4ca81109bbf360be1401d2168485295f@2x.png,4ca81109bbf360be1401d2168485295f@3x.png"},"110967":{"name":"202f87046e753b37de39e386160d1612","files":"202f87046e753b37de39e386160d1612.svg"},"110979":{"name":"69f28caa9100da53a25067298edce7a0","files":"69f28caa9100da53a25067298edce7a0@2x.png,69f28caa9100da53a25067298edce7a0@3x.png"},"110980":{"name":"d1181790d56184ba7ae21dc395026d5f","files":"d1181790d56184ba7ae21dc395026d5f@2x.png,d1181790d56184ba7ae21dc395026d5f@3x.png"},"110983":{"name":"bd29380115783e69c9b8fbe0240384c2","files":"bd29380115783e69c9b8fbe0240384c2@2x.png,bd29380115783e69c9b8fbe0240384c2@3x.png"},"110984":{"name":"46035ffd6e754de9ebce17f776aa7bfe","files":"46035ffd6e754de9ebce17f776aa7bfe@2x.png,46035ffd6e754de9ebce17f776aa7bfe@3x.png"},"110986":{"name":"9c9bbcfdea03288211fe716e72bc3864","files":"9c9bbcfdea03288211fe716e72bc3864.svg"},"110987":{"name":"dcf3864f6d5efe1c2d4911a37df14786","files":"dcf3864f6d5efe1c2d4911a37df14786.svg"},"110988":{"name":"a91edd5f3ab0e952c6f15dbbe9aa0d5d","files":"a91edd5f3ab0e952c6f15dbbe9aa0d5d.svg"},"110989":{"name":"251ecc12bdbb953b00a80f23c648bb3f","files":"251ecc12bdbb953b00a80f23c648bb3f.svg"},"110990":{"name":"b2054cc12d130f90e9b63695b6daa725","files":"b2054cc12d130f90e9b63695b6daa725.svg"},"110991":{"name":"4c5de5a536f4802fa17e51dd2c4bf64a","files":"4c5de5a536f4802fa17e51dd2c4bf64a.svg"},"110992":{"name":"0333bd51def24dc05f6632341b00a90a","files":"0333bd51def24dc05f6632341b00a90a.svg"},"110993":{"name":"089fc56a083770773f74dec31c4fc89e","files":"089fc56a083770773f74dec31c4fc89e.svg"},"110994":{"name":"b884c6549cc691f9f9bc850905398b0a","files":"b884c6549cc691f9f9bc850905398b0a.svg"},"110995":{"name":"d566d5e53ca2384d70405bf3e3d73f2f","files":"d566d5e53ca2384d70405bf3e3d73f2f.svg"},"110996":{"name":"573f56434317fafc0844a6cc278c5b01","files":"573f56434317fafc0844a6cc278c5b01.svg"},"170002":{"name":"0ca3305ff45f5e70e48a94ae88ba934d","files":"0ca3305ff45f5e70e48a94ae88ba934d@2x.webp,0ca3305ff45f5e70e48a94ae88ba934d@3x.webp"},"170003":{"name":"9cf7eda05ecb383c39534feddc42fe05","files":"9cf7eda05ecb383c39534feddc42fe05@2x.webp,9cf7eda05ecb383c39534feddc42fe05@3x.webp"},"170004":{"name":"9c5eaa0653469a8967859f323dd8084a","files":"9c5eaa0653469a8967859f323dd8084a@2x.webp,9c5eaa0653469a8967859f323dd8084a@3x.webp"},"170005":{"name":"e6e4f0f999b33ac3f828354dee6ad35f","files":"e6e4f0f999b33ac3f828354dee6ad35f@2x.webp,e6e4f0f999b33ac3f828354dee6ad35f@3x.webp"},"170006":{"name":"db7a0c9a055a5199920e47b9b921139f","files":"db7a0c9a055a5199920e47b9b921139f@2x.png,db7a0c9a055a5199920e47b9b921139f@3x.png"},"170007":{"name":"4cbb657f919a2a7d23476da05cbfe4e5","files":"4cbb657f919a2a7d23476da05cbfe4e5@2x.png,4cbb657f919a2a7d23476da05cbfe4e5@3x.png"},"170008":{"name":"d95799e7380dfbf1a03bdb499a5bd151","files":"d95799e7380dfbf1a03bdb499a5bd151@2x.webp,d95799e7380dfbf1a03bdb499a5bd151@3x.webp"},"170009":{"name":"d95799e7380dfbf1a03bdb499a5bd151","files":"d95799e7380dfbf1a03bdb499a5bd151@2x.webp,d95799e7380dfbf1a03bdb499a5bd151@3x.webp"},"170034":{"name":"b8fc14030bc2a38a0da8796805a1da1f","files":"b8fc14030bc2a38a0da8796805a1da1f@2x.webp,b8fc14030bc2a38a0da8796805a1da1f@3x.webp"},"170035":{"name":"3fc9f3de3dc8a7972b16d15293949d00","files":"3fc9f3de3dc8a7972b16d15293949d00@2x.webp,3fc9f3de3dc8a7972b16d15293949d00@3x.webp"},"170036":{"name":"b12a69d5f219151fc8799c4c5af2affa","files":"b12a69d5f219151fc8799c4c5af2affa@2x.webp,b12a69d5f219151fc8799c4c5af2affa@3x.webp"},"170037":{"name":"30a7903a183000ad7d3ae8c3beecc44f","files":"30a7903a183000ad7d3ae8c3beecc44f@2x.webp,30a7903a183000ad7d3ae8c3beecc44f@3x.webp"},"170038":{"name":"4f99a885eee7c155509d097b521e8520","files":"4f99a885eee7c155509d097b521e8520@2x.webp,4f99a885eee7c155509d097b521e8520@3x.webp"},"170039":{"name":"7243441a99160f5e50500c9010d111bd","files":"7243441a99160f5e50500c9010d111bd@2x.webp,7243441a99160f5e50500c9010d111bd@3x.webp"}},"xml":"a44802357d49ffe80d16751f72283d13.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/f884c4290bff6c773b0436d8739f4b6a.zip"},"110949":{"res":{"110532":{"name":"b28d800387ba469b5dfa52fa567c1ab0","files":"b28d800387ba469b5dfa52fa567c1ab0@2x.png,b28d800387ba469b5dfa52fa567c1ab0@3x.png"},"110533":{"name":"d2522e040f8c413db2755fb1192896e2","files":"d2522e040f8c413db2755fb1192896e2@2x.png,d2522e040f8c413db2755fb1192896e2@3x.png"},"110534":{"name":"83bcb8a59201df47e9ce50d969091904","files":"83bcb8a59201df47e9ce50d969091904@2x.png,83bcb8a59201df47e9ce50d969091904@3x.png"},"110535":{"name":"f4765c8edb61a59726000b57906cd7d8","files":"f4765c8edb61a59726000b57906cd7d8@2x.png,f4765c8edb61a59726000b57906cd7d8@3x.png"},"110536":{"name":"1be21103e8f7fee3ac2ed18d9656fcf3","files":"1be21103e8f7fee3ac2ed18d9656fcf3@2x.png,1be21103e8f7fee3ac2ed18d9656fcf3@3x.png"},"110537":{"name":"fd1583cb811034be896e7841c6c8bcc3","files":"fd1583cb811034be896e7841c6c8bcc3@2x.png,fd1583cb811034be896e7841c6c8bcc3@3x.png"},"110942":{"name":"77fdbf24d7ae0c6b972e27c922ca53fd","files":"77fdbf24d7ae0c6b972e27c922ca53fd.svg"},"170010":{"name":"ad4c97f04099d110ca938bf03134b4fb","files":"ad4c97f04099d110ca938bf03134b4fb@2x.png,ad4c97f04099d110ca938bf03134b4fb@3x.png"},"170011":{"name":"5c3d7d447a2681d0abccb198ac0433e6","files":"5c3d7d447a2681d0abccb198ac0433e6@2x.png,5c3d7d447a2681d0abccb198ac0433e6@3x.png"},"170040":{"name":"16776e5e85b41f8f0fa10e01015fbcfb","files":"16776e5e85b41f8f0fa10e01015fbcfb@2x.png,16776e5e85b41f8f0fa10e01015fbcfb@3x.png"},"170042":{"name":"eba9c3411b07455467ec8dcd85b0fd4c","files":"eba9c3411b07455467ec8dcd85b0fd4c@2x.png,eba9c3411b07455467ec8dcd85b0fd4c@3x.png"}},"xml":"1dcdc62fb71e5127ccb346000af5c1a8.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/c9875d8f936712a869123a1114f4c009.zip"},"110950":{"res":{"110532":{"name":"b28d800387ba469b5dfa52fa567c1ab0","files":"b28d800387ba469b5dfa52fa567c1ab0@2x.png,b28d800387ba469b5dfa52fa567c1ab0@3x.png"},"110533":{"name":"d2522e040f8c413db2755fb1192896e2","files":"d2522e040f8c413db2755fb1192896e2@2x.png,d2522e040f8c413db2755fb1192896e2@3x.png"},"110534":{"name":"83bcb8a59201df47e9ce50d969091904","files":"83bcb8a59201df47e9ce50d969091904@2x.png,83bcb8a59201df47e9ce50d969091904@3x.png"},"110535":{"name":"f4765c8edb61a59726000b57906cd7d8","files":"f4765c8edb61a59726000b57906cd7d8@2x.png,f4765c8edb61a59726000b57906cd7d8@3x.png"},"110536":{"name":"1be21103e8f7fee3ac2ed18d9656fcf3","files":"1be21103e8f7fee3ac2ed18d9656fcf3@2x.png,1be21103e8f7fee3ac2ed18d9656fcf3@3x.png"},"110537":{"name":"fd1583cb811034be896e7841c6c8bcc3","files":"fd1583cb811034be896e7841c6c8bcc3@2x.png,fd1583cb811034be896e7841c6c8bcc3@3x.png"},"170010":{"name":"ad4c97f04099d110ca938bf03134b4fb","files":"ad4c97f04099d110ca938bf03134b4fb@2x.png,ad4c97f04099d110ca938bf03134b4fb@3x.png"},"170011":{"name":"5c3d7d447a2681d0abccb198ac0433e6","files":"5c3d7d447a2681d0abccb198ac0433e6@2x.png,5c3d7d447a2681d0abccb198ac0433e6@3x.png"},"170040":{"name":"16776e5e85b41f8f0fa10e01015fbcfb","files":"16776e5e85b41f8f0fa10e01015fbcfb@2x.png,16776e5e85b41f8f0fa10e01015fbcfb@3x.png"},"170042":{"name":"eba9c3411b07455467ec8dcd85b0fd4c","files":"eba9c3411b07455467ec8dcd85b0fd4c@2x.png,eba9c3411b07455467ec8dcd85b0fd4c@3x.png"}},"xml":"f359e531d5b6b2181434159922d99b7f.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/1770308f8c5f3b35b4fe431ad10faec0.zip"},"110982":{"res":{"110959":{"name":"cdc4cad8d219571aa8ffcf7f6417a874","files":"cdc4cad8d219571aa8ffcf7f6417a874@2x.png,cdc4cad8d219571aa8ffcf7f6417a874@3x.png"},"110960":{"name":"2e859189a75ff6945e52fbfeb7b725d3","files":"2e859189a75ff6945e52fbfeb7b725d3@2x.png,2e859189a75ff6945e52fbfeb7b725d3@3x.png"},"110961":{"name":"392a970ae75eb5d17a1bf2ca25872d65","files":"392a970ae75eb5d17a1bf2ca25872d65@2x.png,392a970ae75eb5d17a1bf2ca25872d65@3x.png"},"110962":{"name":"4ca81109bbf360be1401d2168485295f","files":"4ca81109bbf360be1401d2168485295f@2x.png,4ca81109bbf360be1401d2168485295f@3x.png"},"110979":{"name":"69f28caa9100da53a25067298edce7a0","files":"69f28caa9100da53a25067298edce7a0@2x.png,69f28caa9100da53a25067298edce7a0@3x.png"},"110980":{"name":"d1181790d56184ba7ae21dc395026d5f","files":"d1181790d56184ba7ae21dc395026d5f@2x.png,d1181790d56184ba7ae21dc395026d5f@3x.png"},"110983":{"name":"bd29380115783e69c9b8fbe0240384c2","files":"bd29380115783e69c9b8fbe0240384c2@2x.png,bd29380115783e69c9b8fbe0240384c2@3x.png"},"110984":{"name":"46035ffd6e754de9ebce17f776aa7bfe","files":"46035ffd6e754de9ebce17f776aa7bfe@2x.png,46035ffd6e754de9ebce17f776aa7bfe@3x.png"},"170002":{"name":"0ca3305ff45f5e70e48a94ae88ba934d","files":"0ca3305ff45f5e70e48a94ae88ba934d@2x.webp,0ca3305ff45f5e70e48a94ae88ba934d@3x.webp"},"170003":{"name":"9cf7eda05ecb383c39534feddc42fe05","files":"9cf7eda05ecb383c39534feddc42fe05@2x.webp,9cf7eda05ecb383c39534feddc42fe05@3x.webp"},"170004":{"name":"9c5eaa0653469a8967859f323dd8084a","files":"9c5eaa0653469a8967859f323dd8084a@2x.webp,9c5eaa0653469a8967859f323dd8084a@3x.webp"},"170005":{"name":"e6e4f0f999b33ac3f828354dee6ad35f","files":"e6e4f0f999b33ac3f828354dee6ad35f@2x.webp,e6e4f0f999b33ac3f828354dee6ad35f@3x.webp"},"170036":{"name":"b12a69d5f219151fc8799c4c5af2affa","files":"b12a69d5f219151fc8799c4c5af2affa@2x.webp,b12a69d5f219151fc8799c4c5af2affa@3x.webp"},"170037":{"name":"30a7903a183000ad7d3ae8c3beecc44f","files":"30a7903a183000ad7d3ae8c3beecc44f@2x.webp,30a7903a183000ad7d3ae8c3beecc44f@3x.webp"},"170038":{"name":"4f99a885eee7c155509d097b521e8520","files":"4f99a885eee7c155509d097b521e8520@2x.webp,4f99a885eee7c155509d097b521e8520@3x.webp"},"170039":{"name":"7243441a99160f5e50500c9010d111bd","files":"7243441a99160f5e50500c9010d111bd@2x.webp,7243441a99160f5e50500c9010d111bd@3x.webp"}},"xml":"5a504c7c6d44738145d38d91d435fcf3.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/4f0602db22c0bf5e30824b620337cfb8.zip"},"110997":{"res":{"110935":{"name":"1f665eb6f33ebc4a6293d79b43a8f069","files":"1f665eb6f33ebc4a6293d79b43a8f069.svg"},"110936":{"name":"31ff74d29c97c6229826f39e49462ecf","files":"31ff74d29c97c6229826f39e49462ecf.svg"},"110937":{"name":"c74bd9d45308e41abc2268fae0f7f23b","files":"c74bd9d45308e41abc2268fae0f7f23b.svg"},"110938":{"name":"66590c5e801eae40652a5a116b1b5106","files":"66590c5e801eae40652a5a116b1b5106.svg"},"110939":{"name":"3e6599f5586731a2ab27ac2cada3121d","files":"3e6599f5586731a2ab27ac2cada3121d.svg"},"110940":{"name":"04303d8944d12948899b8b7dc20b1824","files":"04303d8944d12948899b8b7dc20b1824.svg"},"110941":{"name":"83465379ec0862531066600175b473ea","files":"83465379ec0862531066600175b473ea.svg"},"110943":{"name":"0f1c67ea62395a8f0c158b241050f1c1","files":"0f1c67ea62395a8f0c158b241050f1c1.svg"},"110952":{"name":"301a9a5d2794d7df14319e766b00829d","files":"301a9a5d2794d7df14319e766b00829d.svg"},"110953":{"name":"0b09fef69da565d14370bcf4de692964","files":"0b09fef69da565d14370bcf4de692964.svg"},"110954":{"name":"03159daf61f2247d962aeff6afe1be8b","files":"03159daf61f2247d962aeff6afe1be8b.svg"},"110955":{"name":"e0008631e14a201b2dafaddca74f2795","files":"e0008631e14a201b2dafaddca74f2795.svg"},"110956":{"name":"ebb84ead800d104bd67ac6a4a9eebdb3","files":"ebb84ead800d104bd67ac6a4a9eebdb3.svg"},"110957":{"name":"f2bc6f9be52438279b93e7c9b268215c","files":"f2bc6f9be52438279b93e7c9b268215c.svg"},"110958":{"name":"a336bcc0a143d3bf41599ca19dc694ad","files":"a336bcc0a143d3bf41599ca19dc694ad.svg"},"110959":{"name":"cdc4cad8d219571aa8ffcf7f6417a874","files":"cdc4cad8d219571aa8ffcf7f6417a874@2x.png,cdc4cad8d219571aa8ffcf7f6417a874@3x.png"},"110960":{"name":"2e859189a75ff6945e52fbfeb7b725d3","files":"2e859189a75ff6945e52fbfeb7b725d3@2x.png,2e859189a75ff6945e52fbfeb7b725d3@3x.png"},"110961":{"name":"392a970ae75eb5d17a1bf2ca25872d65","files":"392a970ae75eb5d17a1bf2ca25872d65@2x.png,392a970ae75eb5d17a1bf2ca25872d65@3x.png"},"110962":{"name":"4ca81109bbf360be1401d2168485295f","files":"4ca81109bbf360be1401d2168485295f@2x.png,4ca81109bbf360be1401d2168485295f@3x.png"},"110967":{"name":"202f87046e753b37de39e386160d1612","files":"202f87046e753b37de39e386160d1612.svg"},"110979":{"name":"69f28caa9100da53a25067298edce7a0","files":"69f28caa9100da53a25067298edce7a0@2x.png,69f28caa9100da53a25067298edce7a0@3x.png"},"110980":{"name":"d1181790d56184ba7ae21dc395026d5f","files":"d1181790d56184ba7ae21dc395026d5f@2x.png,d1181790d56184ba7ae21dc395026d5f@3x.png"},"110983":{"name":"bd29380115783e69c9b8fbe0240384c2","files":"bd29380115783e69c9b8fbe0240384c2@2x.png,bd29380115783e69c9b8fbe0240384c2@3x.png"},"110984":{"name":"46035ffd6e754de9ebce17f776aa7bfe","files":"46035ffd6e754de9ebce17f776aa7bfe@2x.png,46035ffd6e754de9ebce17f776aa7bfe@3x.png"},"110986":{"name":"9c9bbcfdea03288211fe716e72bc3864","files":"9c9bbcfdea03288211fe716e72bc3864.svg"},"110987":{"name":"dcf3864f6d5efe1c2d4911a37df14786","files":"dcf3864f6d5efe1c2d4911a37df14786.svg"},"110988":{"name":"a91edd5f3ab0e952c6f15dbbe9aa0d5d","files":"a91edd5f3ab0e952c6f15dbbe9aa0d5d.svg"},"110989":{"name":"251ecc12bdbb953b00a80f23c648bb3f","files":"251ecc12bdbb953b00a80f23c648bb3f.svg"},"110990":{"name":"b2054cc12d130f90e9b63695b6daa725","files":"b2054cc12d130f90e9b63695b6daa725.svg"},"110991":{"name":"4c5de5a536f4802fa17e51dd2c4bf64a","files":"4c5de5a536f4802fa17e51dd2c4bf64a.svg"},"110992":{"name":"0333bd51def24dc05f6632341b00a90a","files":"0333bd51def24dc05f6632341b00a90a.svg"},"110993":{"name":"089fc56a083770773f74dec31c4fc89e","files":"089fc56a083770773f74dec31c4fc89e.svg"},"110994":{"name":"b884c6549cc691f9f9bc850905398b0a","files":"b884c6549cc691f9f9bc850905398b0a.svg"},"110995":{"name":"d566d5e53ca2384d70405bf3e3d73f2f","files":"d566d5e53ca2384d70405bf3e3d73f2f.svg"},"110996":{"name":"573f56434317fafc0844a6cc278c5b01","files":"573f56434317fafc0844a6cc278c5b01.svg"},"170002":{"name":"0ca3305ff45f5e70e48a94ae88ba934d","files":"0ca3305ff45f5e70e48a94ae88ba934d@2x.webp,0ca3305ff45f5e70e48a94ae88ba934d@3x.webp"},"170003":{"name":"9cf7eda05ecb383c39534feddc42fe05","files":"9cf7eda05ecb383c39534feddc42fe05@2x.webp,9cf7eda05ecb383c39534feddc42fe05@3x.webp"},"170004":{"name":"9c5eaa0653469a8967859f323dd8084a","files":"9c5eaa0653469a8967859f323dd8084a@2x.webp,9c5eaa0653469a8967859f323dd8084a@3x.webp"},"170005":{"name":"e6e4f0f999b33ac3f828354dee6ad35f","files":"e6e4f0f999b33ac3f828354dee6ad35f@2x.webp,e6e4f0f999b33ac3f828354dee6ad35f@3x.webp"},"170036":{"name":"b12a69d5f219151fc8799c4c5af2affa","files":"b12a69d5f219151fc8799c4c5af2affa@2x.webp,b12a69d5f219151fc8799c4c5af2affa@3x.webp"},"170037":{"name":"30a7903a183000ad7d3ae8c3beecc44f","files":"30a7903a183000ad7d3ae8c3beecc44f@2x.webp,30a7903a183000ad7d3ae8c3beecc44f@3x.webp"},"170038":{"name":"4f99a885eee7c155509d097b521e8520","files":"4f99a885eee7c155509d097b521e8520@2x.webp,4f99a885eee7c155509d097b521e8520@3x.webp"},"170039":{"name":"7243441a99160f5e50500c9010d111bd","files":"7243441a99160f5e50500c9010d111bd@2x.webp,7243441a99160f5e50500c9010d111bd@3x.webp"}},"xml":"849b0b8a957ca99e6eafbb0bf0178a20.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/ee37b6b6484703c109c05bd4f98fde95.zip"},"110998":{"res":{"110536":{"name":"1be21103e8f7fee3ac2ed18d9656fcf3","files":"1be21103e8f7fee3ac2ed18d9656fcf3@2x.png,1be21103e8f7fee3ac2ed18d9656fcf3@3x.png"},"110537":{"name":"fd1583cb811034be896e7841c6c8bcc3","files":"fd1583cb811034be896e7841c6c8bcc3@2x.png,fd1583cb811034be896e7841c6c8bcc3@3x.png"},"110925":{"name":"68b779fbed7fc379ad7ddc1933cdfc37","files":"68b779fbed7fc379ad7ddc1933cdfc37@2x.png,68b779fbed7fc379ad7ddc1933cdfc37@3x.png"},"110926":{"name":"7a6c97cb0c3e2d1ca87deddd6b0003ab","files":"7a6c97cb0c3e2d1ca87deddd6b0003ab@2x.png,7a6c97cb0c3e2d1ca87deddd6b0003ab@3x.png"},"110927":{"name":"62ac3e36d4dbe178154f28fcac3efa49","files":"62ac3e36d4dbe178154f28fcac3efa49@2x.png,62ac3e36d4dbe178154f28fcac3efa49@3x.png"},"110928":{"name":"62ac3e36d4dbe178154f28fcac3efa49","files":"62ac3e36d4dbe178154f28fcac3efa49@2x.png,62ac3e36d4dbe178154f28fcac3efa49@3x.png"},"110933":{"name":"8c3f7b040dec04eab9be2df287b979ad","files":"8c3f7b040dec04eab9be2df287b979ad@2x.webp,8c3f7b040dec04eab9be2df287b979ad@3x.webp"},"110934":{"name":"368077ed49e37772ad5c99a04cd7e326","files":"368077ed49e37772ad5c99a04cd7e326@2x.webp,368077ed49e37772ad5c99a04cd7e326@3x.webp"},"110935":{"name":"1f665eb6f33ebc4a6293d79b43a8f069","files":"1f665eb6f33ebc4a6293d79b43a8f069.svg"},"110936":{"name":"31ff74d29c97c6229826f39e49462ecf","files":"31ff74d29c97c6229826f39e49462ecf.svg"},"110937":{"name":"c74bd9d45308e41abc2268fae0f7f23b","files":"c74bd9d45308e41abc2268fae0f7f23b.svg"},"110938":{"name":"66590c5e801eae40652a5a116b1b5106","files":"66590c5e801eae40652a5a116b1b5106.svg"},"110939":{"name":"3e6599f5586731a2ab27ac2cada3121d","files":"3e6599f5586731a2ab27ac2cada3121d.svg"},"110940":{"name":"04303d8944d12948899b8b7dc20b1824","files":"04303d8944d12948899b8b7dc20b1824.svg"},"110941":{"name":"83465379ec0862531066600175b473ea","files":"83465379ec0862531066600175b473ea.svg"},"110943":{"name":"0f1c67ea62395a8f0c158b241050f1c1","files":"0f1c67ea62395a8f0c158b241050f1c1.svg"},"110945":{"name":"b99c0b9fed01103d899f1df3f54e676c","files":"b99c0b9fed01103d899f1df3f54e676c@2x.png,b99c0b9fed01103d899f1df3f54e676c@3x.png"},"110946":{"name":"4ccbfd0209fdc01f2b9978b789419d55","files":"4ccbfd0209fdc01f2b9978b789419d55@2x.webp,4ccbfd0209fdc01f2b9978b789419d55@3x.webp"},"110952":{"name":"301a9a5d2794d7df14319e766b00829d","files":"301a9a5d2794d7df14319e766b00829d.svg"},"110953":{"name":"0b09fef69da565d14370bcf4de692964","files":"0b09fef69da565d14370bcf4de692964.svg"},"110954":{"name":"03159daf61f2247d962aeff6afe1be8b","files":"03159daf61f2247d962aeff6afe1be8b.svg"},"110955":{"name":"e0008631e14a201b2dafaddca74f2795","files":"e0008631e14a201b2dafaddca74f2795.svg"},"110956":{"name":"ebb84ead800d104bd67ac6a4a9eebdb3","files":"ebb84ead800d104bd67ac6a4a9eebdb3.svg"},"110957":{"name":"f2bc6f9be52438279b93e7c9b268215c","files":"f2bc6f9be52438279b93e7c9b268215c.svg"},"110958":{"name":"a336bcc0a143d3bf41599ca19dc694ad","files":"a336bcc0a143d3bf41599ca19dc694ad.svg"},"110959":{"name":"cdc4cad8d219571aa8ffcf7f6417a874","files":"cdc4cad8d219571aa8ffcf7f6417a874@2x.png,cdc4cad8d219571aa8ffcf7f6417a874@3x.png"},"110960":{"name":"2e859189a75ff6945e52fbfeb7b725d3","files":"2e859189a75ff6945e52fbfeb7b725d3@2x.png,2e859189a75ff6945e52fbfeb7b725d3@3x.png"},"110961":{"name":"392a970ae75eb5d17a1bf2ca25872d65","files":"392a970ae75eb5d17a1bf2ca25872d65@2x.png,392a970ae75eb5d17a1bf2ca25872d65@3x.png"},"110962":{"name":"4ca81109bbf360be1401d2168485295f","files":"4ca81109bbf360be1401d2168485295f@2x.png,4ca81109bbf360be1401d2168485295f@3x.png"},"110963":{"name":"d8c52e3ed1bfefee621238c97cb398fb","files":"d8c52e3ed1bfefee621238c97cb398fb@2x.png,d8c52e3ed1bfefee621238c97cb398fb@3x.png"},"110964":{"name":"02258b146843d98c789009f514aca96a","files":"02258b146843d98c789009f514aca96a@2x.png,02258b146843d98c789009f514aca96a@3x.png"},"110965":{"name":"c658e2e3bd8a70ea2123d4b402e6e4a3","files":"c658e2e3bd8a70ea2123d4b402e6e4a3@2x.png,c658e2e3bd8a70ea2123d4b402e6e4a3@3x.png"},"110966":{"name":"77759ec5ef107cf9c98f30021198d47f","files":"77759ec5ef107cf9c98f30021198d47f@2x.png,77759ec5ef107cf9c98f30021198d47f@3x.png"},"110967":{"name":"202f87046e753b37de39e386160d1612","files":"202f87046e753b37de39e386160d1612.svg"},"110979":{"name":"69f28caa9100da53a25067298edce7a0","files":"69f28caa9100da53a25067298edce7a0@2x.png,69f28caa9100da53a25067298edce7a0@3x.png"},"110980":{"name":"d1181790d56184ba7ae21dc395026d5f","files":"d1181790d56184ba7ae21dc395026d5f@2x.png,d1181790d56184ba7ae21dc395026d5f@3x.png"},"110983":{"name":"bd29380115783e69c9b8fbe0240384c2","files":"bd29380115783e69c9b8fbe0240384c2@2x.png,bd29380115783e69c9b8fbe0240384c2@3x.png"},"110984":{"name":"46035ffd6e754de9ebce17f776aa7bfe","files":"46035ffd6e754de9ebce17f776aa7bfe@2x.png,46035ffd6e754de9ebce17f776aa7bfe@3x.png"},"110986":{"name":"9c9bbcfdea03288211fe716e72bc3864","files":"9c9bbcfdea03288211fe716e72bc3864.svg"},"110987":{"name":"dcf3864f6d5efe1c2d4911a37df14786","files":"dcf3864f6d5efe1c2d4911a37df14786.svg"},"110988":{"name":"a91edd5f3ab0e952c6f15dbbe9aa0d5d","files":"a91edd5f3ab0e952c6f15dbbe9aa0d5d.svg"},"110989":{"name":"251ecc12bdbb953b00a80f23c648bb3f","files":"251ecc12bdbb953b00a80f23c648bb3f.svg"},"110990":{"name":"b2054cc12d130f90e9b63695b6daa725","files":"b2054cc12d130f90e9b63695b6daa725.svg"},"110991":{"name":"4c5de5a536f4802fa17e51dd2c4bf64a","files":"4c5de5a536f4802fa17e51dd2c4bf64a.svg"},"110992":{"name":"0333bd51def24dc05f6632341b00a90a","files":"0333bd51def24dc05f6632341b00a90a.svg"},"110993":{"name":"089fc56a083770773f74dec31c4fc89e","files":"089fc56a083770773f74dec31c4fc89e.svg"},"110994":{"name":"b884c6549cc691f9f9bc850905398b0a","files":"b884c6549cc691f9f9bc850905398b0a.svg"},"110995":{"name":"d566d5e53ca2384d70405bf3e3d73f2f","files":"d566d5e53ca2384d70405bf3e3d73f2f.svg"},"110996":{"name":"573f56434317fafc0844a6cc278c5b01","files":"573f56434317fafc0844a6cc278c5b01.svg"},"170002":{"name":"0ca3305ff45f5e70e48a94ae88ba934d","files":"0ca3305ff45f5e70e48a94ae88ba934d@2x.webp,0ca3305ff45f5e70e48a94ae88ba934d@3x.webp"},"170003":{"name":"9cf7eda05ecb383c39534feddc42fe05","files":"9cf7eda05ecb383c39534feddc42fe05@2x.webp,9cf7eda05ecb383c39534feddc42fe05@3x.webp"},"170004":{"name":"9c5eaa0653469a8967859f323dd8084a","files":"9c5eaa0653469a8967859f323dd8084a@2x.webp,9c5eaa0653469a8967859f323dd8084a@3x.webp"},"170005":{"name":"e6e4f0f999b33ac3f828354dee6ad35f","files":"e6e4f0f999b33ac3f828354dee6ad35f@2x.webp,e6e4f0f999b33ac3f828354dee6ad35f@3x.webp"},"170006":{"name":"db7a0c9a055a5199920e47b9b921139f","files":"db7a0c9a055a5199920e47b9b921139f@2x.png,db7a0c9a055a5199920e47b9b921139f@3x.png"},"170007":{"name":"4cbb657f919a2a7d23476da05cbfe4e5","files":"4cbb657f919a2a7d23476da05cbfe4e5@2x.png,4cbb657f919a2a7d23476da05cbfe4e5@3x.png"},"170008":{"name":"d95799e7380dfbf1a03bdb499a5bd151","files":"d95799e7380dfbf1a03bdb499a5bd151@2x.webp,d95799e7380dfbf1a03bdb499a5bd151@3x.webp"},"170009":{"name":"d95799e7380dfbf1a03bdb499a5bd151","files":"d95799e7380dfbf1a03bdb499a5bd151@2x.webp,d95799e7380dfbf1a03bdb499a5bd151@3x.webp"},"170030":{"name":"75390ab6de9fabf73877f74f94c7b786","files":"75390ab6de9fabf73877f74f94c7b786@2x.webp,75390ab6de9fabf73877f74f94c7b786@3x.webp"},"170031":{"name":"6a08b33266b33b5f2ee0e3740e2b2100","files":"6a08b33266b33b5f2ee0e3740e2b2100@2x.webp,6a08b33266b33b5f2ee0e3740e2b2100@3x.webp"},"170032":{"name":"919182264e029b0d0573353c7abc61c7","files":"919182264e029b0d0573353c7abc61c7@2x.png,919182264e029b0d0573353c7abc61c7@3x.png"},"170033":{"name":"ecf53753b733c1038a61b69bad304e4f","files":"ecf53753b733c1038a61b69bad304e4f@2x.png,ecf53753b733c1038a61b69bad304e4f@3x.png"},"170034":{"name":"b8fc14030bc2a38a0da8796805a1da1f","files":"b8fc14030bc2a38a0da8796805a1da1f@2x.webp,b8fc14030bc2a38a0da8796805a1da1f@3x.webp"},"170035":{"name":"3fc9f3de3dc8a7972b16d15293949d00","files":"3fc9f3de3dc8a7972b16d15293949d00@2x.webp,3fc9f3de3dc8a7972b16d15293949d00@3x.webp"},"170036":{"name":"b12a69d5f219151fc8799c4c5af2affa","files":"b12a69d5f219151fc8799c4c5af2affa@2x.webp,b12a69d5f219151fc8799c4c5af2affa@3x.webp"},"170037":{"name":"30a7903a183000ad7d3ae8c3beecc44f","files":"30a7903a183000ad7d3ae8c3beecc44f@2x.webp,30a7903a183000ad7d3ae8c3beecc44f@3x.webp"},"170038":{"name":"4f99a885eee7c155509d097b521e8520","files":"4f99a885eee7c155509d097b521e8520@2x.webp,4f99a885eee7c155509d097b521e8520@3x.webp"},"170039":{"name":"7243441a99160f5e50500c9010d111bd","files":"7243441a99160f5e50500c9010d111bd@2x.webp,7243441a99160f5e50500c9010d111bd@3x.webp"}},"xml":"9cd2b84e27a81df3787f2bd2fca5d275.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/cdb1b1db5882537ecc312a065998ba74.zip"},"110999":{"res":{"110981":{"name":"26a3a0e2b82c34729fb930761f60ed53","files":"26a3a0e2b82c34729fb930761f60ed53@2x.png,26a3a0e2b82c34729fb930761f60ed53@3x.png"},"110985":{"name":"3376ceb9eee10f9f125cd6bb7b3cb425","files":"3376ceb9eee10f9f125cd6bb7b3cb425@2x.png,3376ceb9eee10f9f125cd6bb7b3cb425@3x.png"}},"xml":"2ff82f7e164f4903d3030620028c5119.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/f64e02c29dc4f9ad24fbe5e91b55ffa3.zip"},"111000":{"res":{"110935":{"name":"1f665eb6f33ebc4a6293d79b43a8f069","files":"1f665eb6f33ebc4a6293d79b43a8f069.svg"},"110936":{"name":"31ff74d29c97c6229826f39e49462ecf","files":"31ff74d29c97c6229826f39e49462ecf.svg"},"110937":{"name":"c74bd9d45308e41abc2268fae0f7f23b","files":"c74bd9d45308e41abc2268fae0f7f23b.svg"},"110938":{"name":"66590c5e801eae40652a5a116b1b5106","files":"66590c5e801eae40652a5a116b1b5106.svg"},"110939":{"name":"3e6599f5586731a2ab27ac2cada3121d","files":"3e6599f5586731a2ab27ac2cada3121d.svg"},"110940":{"name":"04303d8944d12948899b8b7dc20b1824","files":"04303d8944d12948899b8b7dc20b1824.svg"},"110941":{"name":"83465379ec0862531066600175b473ea","files":"83465379ec0862531066600175b473ea.svg"},"110943":{"name":"0f1c67ea62395a8f0c158b241050f1c1","files":"0f1c67ea62395a8f0c158b241050f1c1.svg"},"110952":{"name":"301a9a5d2794d7df14319e766b00829d","files":"301a9a5d2794d7df14319e766b00829d.svg"},"110953":{"name":"0b09fef69da565d14370bcf4de692964","files":"0b09fef69da565d14370bcf4de692964.svg"},"110954":{"name":"03159daf61f2247d962aeff6afe1be8b","files":"03159daf61f2247d962aeff6afe1be8b.svg"},"110955":{"name":"e0008631e14a201b2dafaddca74f2795","files":"e0008631e14a201b2dafaddca74f2795.svg"},"110956":{"name":"ebb84ead800d104bd67ac6a4a9eebdb3","files":"ebb84ead800d104bd67ac6a4a9eebdb3.svg"},"110957":{"name":"f2bc6f9be52438279b93e7c9b268215c","files":"f2bc6f9be52438279b93e7c9b268215c.svg"},"110958":{"name":"a336bcc0a143d3bf41599ca19dc694ad","files":"a336bcc0a143d3bf41599ca19dc694ad.svg"},"110967":{"name":"202f87046e753b37de39e386160d1612","files":"202f87046e753b37de39e386160d1612.svg"},"110981":{"name":"26a3a0e2b82c34729fb930761f60ed53","files":"26a3a0e2b82c34729fb930761f60ed53@2x.png,26a3a0e2b82c34729fb930761f60ed53@3x.png"},"110985":{"name":"3376ceb9eee10f9f125cd6bb7b3cb425","files":"3376ceb9eee10f9f125cd6bb7b3cb425@2x.png,3376ceb9eee10f9f125cd6bb7b3cb425@3x.png"},"110986":{"name":"9c9bbcfdea03288211fe716e72bc3864","files":"9c9bbcfdea03288211fe716e72bc3864.svg"},"110987":{"name":"dcf3864f6d5efe1c2d4911a37df14786","files":"dcf3864f6d5efe1c2d4911a37df14786.svg"},"110988":{"name":"a91edd5f3ab0e952c6f15dbbe9aa0d5d","files":"a91edd5f3ab0e952c6f15dbbe9aa0d5d.svg"},"110989":{"name":"251ecc12bdbb953b00a80f23c648bb3f","files":"251ecc12bdbb953b00a80f23c648bb3f.svg"},"110990":{"name":"b2054cc12d130f90e9b63695b6daa725","files":"b2054cc12d130f90e9b63695b6daa725.svg"},"110991":{"name":"4c5de5a536f4802fa17e51dd2c4bf64a","files":"4c5de5a536f4802fa17e51dd2c4bf64a.svg"},"110992":{"name":"0333bd51def24dc05f6632341b00a90a","files":"0333bd51def24dc05f6632341b00a90a.svg"},"110993":{"name":"089fc56a083770773f74dec31c4fc89e","files":"089fc56a083770773f74dec31c4fc89e.svg"},"110994":{"name":"b884c6549cc691f9f9bc850905398b0a","files":"b884c6549cc691f9f9bc850905398b0a.svg"},"110995":{"name":"d566d5e53ca2384d70405bf3e3d73f2f","files":"d566d5e53ca2384d70405bf3e3d73f2f.svg"},"110996":{"name":"573f56434317fafc0844a6cc278c5b01","files":"573f56434317fafc0844a6cc278c5b01.svg"}},"xml":"cd85523f89be957f4e8a50b560982398.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/5837c6dbc823efbe210fd41c18a7e71f.zip"},"112060":{"res":{"112062":{"name":"dd940adc3c66f21c5b2bdf8ba825cd80","files":"dd940adc3c66f21c5b2bdf8ba825cd80@2x.png,dd940adc3c66f21c5b2bdf8ba825cd80@3x.png,dd940adc3c66f21c5b2bdf8ba825cd80@dark@2x.webp,dd940adc3c66f21c5b2bdf8ba825cd80@dark@3x.webp"},"112063":{"name":"0fc8cf6b318a2097de7ab645df021b7e","files":"0fc8cf6b318a2097de7ab645df021b7e@2x.png,0fc8cf6b318a2097de7ab645df021b7e@3x.png,0fc8cf6b318a2097de7ab645df021b7e@dark@2x.webp,0fc8cf6b318a2097de7ab645df021b7e@dark@3x.webp"},"112064":{"name":"c85adba524c6edad04895f4c2440ed3e","files":"c85adba524c6edad04895f4c2440ed3e@2x.png,c85adba524c6edad04895f4c2440ed3e@3x.png,c85adba524c6edad04895f4c2440ed3e@dark@2x.png,c85adba524c6edad04895f4c2440ed3e@dark@3x.png"},"112065":{"name":"44d4d094167698af75dd595147b9d96e","files":"44d4d094167698af75dd595147b9d96e@2x.webp,44d4d094167698af75dd595147b9d96e@3x.webp,44d4d094167698af75dd595147b9d96e@dark@2x.webp,44d4d094167698af75dd595147b9d96e@dark@3x.webp"},"112066":{"name":"9f0cd58d42222787ebfd3e39568dc744","files":"9f0cd58d42222787ebfd3e39568dc744@2x.webp,9f0cd58d42222787ebfd3e39568dc744@3x.webp"}},"xml":"c8e34d138317cc1f9af978d333d07fac.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/e60873b427ed3dc353a0a234324a485b.zip"},"112061":{"res":{"112066":{"name":"9f0cd58d42222787ebfd3e39568dc744","files":"9f0cd58d42222787ebfd3e39568dc744@2x.webp,9f0cd58d42222787ebfd3e39568dc744@3x.webp"},"112067":{"name":"a388ff8c9cee8573bf561df414c40c33","files":"a388ff8c9cee8573bf561df414c40c33@2x.webp,a388ff8c9cee8573bf561df414c40c33@3x.webp"},"112068":{"name":"2d0765d2eea376a13295712ed487f261","files":"2d0765d2eea376a13295712ed487f261@2x.webp,2d0765d2eea376a13295712ed487f261@3x.webp"},"112069":{"name":"3227e20b23fa2a021feb0a432181cf4d","files":"3227e20b23fa2a021feb0a432181cf4d@2x.png,3227e20b23fa2a021feb0a432181cf4d@3x.png"},"112070":{"name":"7b2647def7a10091cb88ed5ef0ebfd9a","files":"7b2647def7a10091cb88ed5ef0ebfd9a@2x.webp,7b2647def7a10091cb88ed5ef0ebfd9a@3x.webp"}},"xml":"451e9ffe85184d25d04c101f1ec8e08b.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/e57aef385b98220880ed2831e6857bae.zip"},"114705":{"res":{},"xml":"8369fa3544d8c922e2a6f5b8951efdbb.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/a2633fc0c10c03a2d16c3cbfe5b22617.zip"},"115400":{"res":{"115405":{"name":"99b36385205cf7fc0c3d78925b316d43","files":"99b36385205cf7fc0c3d78925b316d43@2x.png,99b36385205cf7fc0c3d78925b316d43@3x.png"},"115406":{"name":"56fc5ef6b4e977e64b6cdb4247a96c07","files":"56fc5ef6b4e977e64b6cdb4247a96c07@2x.png,56fc5ef6b4e977e64b6cdb4247a96c07@3x.png"},"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"}},"xml":"730d35f500dd2a9d9ed0dfb3ac9a10c4.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/7ea678d3162435e0b04515b3d4e779df.zip"},"116006":{"res":{"116013":{"name":"afe6e85983ea31d4e366ef9347e1dd32","files":"afe6e85983ea31d4e366ef9347e1dd32@2x.png,afe6e85983ea31d4e366ef9347e1dd32@3x.png,afe6e85983ea31d4e366ef9347e1dd32@dark@2x.png,afe6e85983ea31d4e366ef9347e1dd32@dark@3x.png"}},"xml":"9700511ce54159aa07f612d99113bd20.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/276131ab5a8c9506d43304f0ffcf2f84.zip"},"118102":{"res":{"110518":{"name":"61aa6966406ffbf708cb84285f1ae9b3","files":"61aa6966406ffbf708cb84285f1ae9b3@2x.png,61aa6966406ffbf708cb84285f1ae9b3@3x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@2x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@3x.png"}},"xml":"5710bacee94d927acebfbf1d939ce3f0.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/933c02e59b4f763e3f6ade3263535544.zip"},"141001":{"res":{"110150":{"name":"cc922285552a7acdf2e60b8f43d14480","files":"cc922285552a7acdf2e60b8f43d14480@2x.webp,cc922285552a7acdf2e60b8f43d14480@3x.webp"},"110151":{"name":"4d0406a7077c1ab54a0ab51530763ff8","files":"4d0406a7077c1ab54a0ab51530763ff8@2x.webp,4d0406a7077c1ab54a0ab51530763ff8@3x.webp"},"110152":{"name":"410cd1d7480ff4d6f03a31464d2d418f","files":"410cd1d7480ff4d6f03a31464d2d418f@2x.webp,410cd1d7480ff4d6f03a31464d2d418f@3x.webp"},"110153":{"name":"7bf3b3c4d541eedf4e89b6fb175f882f","files":"7bf3b3c4d541eedf4e89b6fb175f882f@2x.webp,7bf3b3c4d541eedf4e89b6fb175f882f@3x.webp"},"110154":{"name":"d1cac138116f46f847232bf981bc2e7e","files":"d1cac138116f46f847232bf981bc2e7e@2x.webp,d1cac138116f46f847232bf981bc2e7e@3x.webp"},"110155":{"name":"4f96d34d6fb3298dfa3cedb595c1d954","files":"4f96d34d6fb3298dfa3cedb595c1d954@2x.webp,4f96d34d6fb3298dfa3cedb595c1d954@3x.webp"},"110156":{"name":"1944bfe804bec266843da35d7ca1300e","files":"1944bfe804bec266843da35d7ca1300e@2x.webp,1944bfe804bec266843da35d7ca1300e@3x.webp"},"110157":{"name":"7a0325fb77eb98334b9a7a0ccfcf4ade","files":"7a0325fb77eb98334b9a7a0ccfcf4ade@2x.webp,7a0325fb77eb98334b9a7a0ccfcf4ade@3x.webp"},"110222":{"name":"27585475e3384a586034ac4f0b825231","files":"27585475e3384a586034ac4f0b825231@2x.webp,27585475e3384a586034ac4f0b825231@3x.webp"}},"xml":"542cadfc5cac7d810c5d73ef6e7d8f0e.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/617023f466de36fd39942c4604962645.zip"},"150021":{"res":{"150023":{"name":"67b353716a8d3e102c0d1c6c3512730e","files":"67b353716a8d3e102c0d1c6c3512730e@2x.png,67b353716a8d3e102c0d1c6c3512730e@3x.png"},"150028":{"name":"15e2f202b37cc3a3fe014a51e183e55c","files":"15e2f202b37cc3a3fe014a51e183e55c@2x.png,15e2f202b37cc3a3fe014a51e183e55c@3x.png"}},"xml":"f6eedd46833d03ac3b35b9d2ded6284c.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/7046383673a670723bf85d0a1f290e43.zip"},"150022":{"res":{"150024":{"name":"6259666eb414aa26c3aa67c33335f98b","files":"6259666eb414aa26c3aa67c33335f98b@2x.png,6259666eb414aa26c3aa67c33335f98b@3x.png"}},"xml":"e514e85c8f15e3cc91d5ad7c061abf59.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/4b76ec9160288168cf9a441d358c167c.zip"},"150025":{"res":{"150026":{"name":"a5826af993c9bfcfbce4c747c4a05b34","files":"a5826af993c9bfcfbce4c747c4a05b34@2x.png,a5826af993c9bfcfbce4c747c4a05b34@3x.png"}},"xml":"11b8fa5870f00c3ba2616ff976adb087.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/4f31e26454c18740685dbe4415846708.zip"},"150027":{"res":{},"xml":"80eae8344e4591b094215f00c0c295b5.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/d4e6b6aeae630ac5d00971bc8028c19f.zip"},"150301":{"res":{"150302":{"name":"ba1437855edf5b24647f543669a9afcc","files":"ba1437855edf5b24647f543669a9afcc@2x.png,ba1437855edf5b24647f543669a9afcc@3x.png"},"150303":{"name":"dad27c38d41bc5a5ac4f01132ccf0d5c","files":"dad27c38d41bc5a5ac4f01132ccf0d5c@2x.png,dad27c38d41bc5a5ac4f01132ccf0d5c@3x.png"},"150304":{"name":"7afe4dbe646ac6afb910589f719f58a8","files":"7afe4dbe646ac6afb910589f719f58a8@2x.png,7afe4dbe646ac6afb910589f719f58a8@3x.png"},"150305":{"name":"15b511dad9f2917d0392c994750d96f6","files":"15b511dad9f2917d0392c994750d96f6@2x.png,15b511dad9f2917d0392c994750d96f6@3x.png"}},"xml":"c6c66ca62cd2ef14d4f3d140cd1e86be.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/a1508af19afd918470ae8010d0648974.zip"},"150401":{"res":{"110410":{"name":"40ddc18acf28ab33ecd8a9006a84590b","files":"40ddc18acf28ab33ecd8a9006a84590b.webp"},"110515":{"name":"898908cd580180cf9b182d95b6e409b4","files":"898908cd580180cf9b182d95b6e409b4@2x.webp,898908cd580180cf9b182d95b6e409b4@3x.webp"},"110570":{"name":"ce0751a4ed430b4c9944c495bf167102","files":"ce0751a4ed430b4c9944c495bf167102@2x.webp,ce0751a4ed430b4c9944c495bf167102@3x.webp"},"110571":{"name":"1ca6653004e6839fab91bc35ab9976b0","files":"1ca6653004e6839fab91bc35ab9976b0@2x.webp,1ca6653004e6839fab91bc35ab9976b0@3x.webp"},"110572":{"name":"93c2ba3fb33ab782a76031426c46fd81","files":"93c2ba3fb33ab782a76031426c46fd81@2x.webp,93c2ba3fb33ab782a76031426c46fd81@3x.webp"},"110573":{"name":"aad5b85ee72d117b7035a08af82e43a3","files":"aad5b85ee72d117b7035a08af82e43a3@2x.webp,aad5b85ee72d117b7035a08af82e43a3@3x.webp"},"110574":{"name":"09978ad2b2288eae691c650faa9d0363","files":"09978ad2b2288eae691c650faa9d0363@2x.webp,09978ad2b2288eae691c650faa9d0363@3x.webp"},"110575":{"name":"85241b1eb671aea17c13155142342d5c","files":"85241b1eb671aea17c13155142342d5c@2x.webp,85241b1eb671aea17c13155142342d5c@3x.webp"},"110576":{"name":"f6c3ae511ee11ca3b0f9d0acb91a0e33","files":"f6c3ae511ee11ca3b0f9d0acb91a0e33@2x.webp,f6c3ae511ee11ca3b0f9d0acb91a0e33@3x.webp"},"110578":{"name":"edee6c288be358cf8661227862692be1","files":"edee6c288be358cf8661227862692be1@2x.png,edee6c288be358cf8661227862692be1@3x.png"},"150409":{"name":"2db458d5d04969b0f5eb80238fdbf035","files":"2db458d5d04969b0f5eb80238fdbf035@2x.webp,2db458d5d04969b0f5eb80238fdbf035@3x.webp"},"150410":{"name":"aa46c5d3dcfc2ade03fb072f3f2a9959","files":"aa46c5d3dcfc2ade03fb072f3f2a9959@2x.webp,aa46c5d3dcfc2ade03fb072f3f2a9959@3x.webp"},"231240":{"name":"439d6014edf841ff60ef1328360d6aae","files":"439d6014edf841ff60ef1328360d6aae@2x.png,439d6014edf841ff60ef1328360d6aae@3x.png"},"231241":{"name":"f8fdae00ef5d9ec736ec42d980e7162f","files":"f8fdae00ef5d9ec736ec42d980e7162f.png"}},"xml":"777bf5998390b2caf771df5cf353e8d5.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/a2e86869e65108d1e4889644e3de8451.zip"},"150402":{"res":{"110414":{"name":"55d1e0b7d683dc592147df68fd5f9f11","files":"55d1e0b7d683dc592147df68fd5f9f11.webp"},"110515":{"name":"898908cd580180cf9b182d95b6e409b4","files":"898908cd580180cf9b182d95b6e409b4@2x.webp,898908cd580180cf9b182d95b6e409b4@3x.webp"},"110570":{"name":"ce0751a4ed430b4c9944c495bf167102","files":"ce0751a4ed430b4c9944c495bf167102@2x.webp,ce0751a4ed430b4c9944c495bf167102@3x.webp"},"110571":{"name":"1ca6653004e6839fab91bc35ab9976b0","files":"1ca6653004e6839fab91bc35ab9976b0@2x.webp,1ca6653004e6839fab91bc35ab9976b0@3x.webp"},"110572":{"name":"93c2ba3fb33ab782a76031426c46fd81","files":"93c2ba3fb33ab782a76031426c46fd81@2x.webp,93c2ba3fb33ab782a76031426c46fd81@3x.webp"},"110573":{"name":"aad5b85ee72d117b7035a08af82e43a3","files":"aad5b85ee72d117b7035a08af82e43a3@2x.webp,aad5b85ee72d117b7035a08af82e43a3@3x.webp"},"110574":{"name":"09978ad2b2288eae691c650faa9d0363","files":"09978ad2b2288eae691c650faa9d0363@2x.webp,09978ad2b2288eae691c650faa9d0363@3x.webp"},"110575":{"name":"85241b1eb671aea17c13155142342d5c","files":"85241b1eb671aea17c13155142342d5c@2x.webp,85241b1eb671aea17c13155142342d5c@3x.webp"},"110576":{"name":"f6c3ae511ee11ca3b0f9d0acb91a0e33","files":"f6c3ae511ee11ca3b0f9d0acb91a0e33@2x.webp,f6c3ae511ee11ca3b0f9d0acb91a0e33@3x.webp"},"110578":{"name":"edee6c288be358cf8661227862692be1","files":"edee6c288be358cf8661227862692be1@2x.png,edee6c288be358cf8661227862692be1@3x.png"},"150413":{"name":"179bb23495c7deae023b9372c0ddff7e","files":"179bb23495c7deae023b9372c0ddff7e@2x.webp,179bb23495c7deae023b9372c0ddff7e@3x.webp"}},"xml":"71056ce831a77bfd6b5d335e11c26c19.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/504915f60b7eddcf615cfb63220fcf06.zip"},"150403":{"res":{"110515":{"name":"898908cd580180cf9b182d95b6e409b4","files":"898908cd580180cf9b182d95b6e409b4@2x.webp,898908cd580180cf9b182d95b6e409b4@3x.webp"},"110570":{"name":"ce0751a4ed430b4c9944c495bf167102","files":"ce0751a4ed430b4c9944c495bf167102@2x.webp,ce0751a4ed430b4c9944c495bf167102@3x.webp"},"110571":{"name":"1ca6653004e6839fab91bc35ab9976b0","files":"1ca6653004e6839fab91bc35ab9976b0@2x.webp,1ca6653004e6839fab91bc35ab9976b0@3x.webp"},"110572":{"name":"93c2ba3fb33ab782a76031426c46fd81","files":"93c2ba3fb33ab782a76031426c46fd81@2x.webp,93c2ba3fb33ab782a76031426c46fd81@3x.webp"},"110573":{"name":"aad5b85ee72d117b7035a08af82e43a3","files":"aad5b85ee72d117b7035a08af82e43a3@2x.webp,aad5b85ee72d117b7035a08af82e43a3@3x.webp"},"110574":{"name":"09978ad2b2288eae691c650faa9d0363","files":"09978ad2b2288eae691c650faa9d0363@2x.webp,09978ad2b2288eae691c650faa9d0363@3x.webp"},"110575":{"name":"85241b1eb671aea17c13155142342d5c","files":"85241b1eb671aea17c13155142342d5c@2x.webp,85241b1eb671aea17c13155142342d5c@3x.webp"},"110576":{"name":"f6c3ae511ee11ca3b0f9d0acb91a0e33","files":"f6c3ae511ee11ca3b0f9d0acb91a0e33@2x.webp,f6c3ae511ee11ca3b0f9d0acb91a0e33@3x.webp"},"110578":{"name":"edee6c288be358cf8661227862692be1","files":"edee6c288be358cf8661227862692be1@2x.png,edee6c288be358cf8661227862692be1@3x.png"},"150415":{"name":"3119d8ffd977885570bc229439a981e3","files":"3119d8ffd977885570bc229439a981e3@2x.webp,3119d8ffd977885570bc229439a981e3@3x.webp"},"150416":{"name":"7ce2cd71a0e7df4788f89e1eac3bb9b2","files":"7ce2cd71a0e7df4788f89e1eac3bb9b2@2x.webp,7ce2cd71a0e7df4788f89e1eac3bb9b2@3x.webp"},"150417":{"name":"ac1394283490023185d8719f9cdf9bbb","files":"ac1394283490023185d8719f9cdf9bbb@2x.webp,ac1394283490023185d8719f9cdf9bbb@3x.webp"},"150418":{"name":"0ba76ed46ac5dd57d501708e690a2097","files":"0ba76ed46ac5dd57d501708e690a2097@2x.webp,0ba76ed46ac5dd57d501708e690a2097@3x.webp"},"231240":{"name":"439d6014edf841ff60ef1328360d6aae","files":"439d6014edf841ff60ef1328360d6aae@2x.png,439d6014edf841ff60ef1328360d6aae@3x.png"},"231241":{"name":"f8fdae00ef5d9ec736ec42d980e7162f","files":"f8fdae00ef5d9ec736ec42d980e7162f.png"}},"xml":"f5e89cd6c9d75c33e75076a1c15b644d.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/5acdcb7e6d70829c91f697e65368cef2.zip"},"150404":{"res":{"110515":{"name":"898908cd580180cf9b182d95b6e409b4","files":"898908cd580180cf9b182d95b6e409b4@2x.webp,898908cd580180cf9b182d95b6e409b4@3x.webp"},"110570":{"name":"ce0751a4ed430b4c9944c495bf167102","files":"ce0751a4ed430b4c9944c495bf167102@2x.webp,ce0751a4ed430b4c9944c495bf167102@3x.webp"},"110571":{"name":"1ca6653004e6839fab91bc35ab9976b0","files":"1ca6653004e6839fab91bc35ab9976b0@2x.webp,1ca6653004e6839fab91bc35ab9976b0@3x.webp"},"110572":{"name":"93c2ba3fb33ab782a76031426c46fd81","files":"93c2ba3fb33ab782a76031426c46fd81@2x.webp,93c2ba3fb33ab782a76031426c46fd81@3x.webp"},"110573":{"name":"aad5b85ee72d117b7035a08af82e43a3","files":"aad5b85ee72d117b7035a08af82e43a3@2x.webp,aad5b85ee72d117b7035a08af82e43a3@3x.webp"},"110574":{"name":"09978ad2b2288eae691c650faa9d0363","files":"09978ad2b2288eae691c650faa9d0363@2x.webp,09978ad2b2288eae691c650faa9d0363@3x.webp"},"110575":{"name":"85241b1eb671aea17c13155142342d5c","files":"85241b1eb671aea17c13155142342d5c@2x.webp,85241b1eb671aea17c13155142342d5c@3x.webp"},"110576":{"name":"f6c3ae511ee11ca3b0f9d0acb91a0e33","files":"f6c3ae511ee11ca3b0f9d0acb91a0e33@2x.webp,f6c3ae511ee11ca3b0f9d0acb91a0e33@3x.webp"},"110578":{"name":"edee6c288be358cf8661227862692be1","files":"edee6c288be358cf8661227862692be1@2x.png,edee6c288be358cf8661227862692be1@3x.png"},"150419":{"name":"01e18e9b3551a3e39fa18f30ed578349","files":"01e18e9b3551a3e39fa18f30ed578349@2x.webp,01e18e9b3551a3e39fa18f30ed578349@3x.webp"},"150421":{"name":"e072730f59ecac2c3d9614e2f7c6815f","files":"e072730f59ecac2c3d9614e2f7c6815f@2x.webp,e072730f59ecac2c3d9614e2f7c6815f@3x.webp"}},"xml":"4dfee973bcfb5d3f6617faac3886a18d.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/03f0a45e151a0e9f560894f2659169ee.zip"},"150405":{"res":{"110515":{"name":"898908cd580180cf9b182d95b6e409b4","files":"898908cd580180cf9b182d95b6e409b4@2x.webp,898908cd580180cf9b182d95b6e409b4@3x.webp"},"110570":{"name":"ce0751a4ed430b4c9944c495bf167102","files":"ce0751a4ed430b4c9944c495bf167102@2x.webp,ce0751a4ed430b4c9944c495bf167102@3x.webp"},"110571":{"name":"1ca6653004e6839fab91bc35ab9976b0","files":"1ca6653004e6839fab91bc35ab9976b0@2x.webp,1ca6653004e6839fab91bc35ab9976b0@3x.webp"},"110572":{"name":"93c2ba3fb33ab782a76031426c46fd81","files":"93c2ba3fb33ab782a76031426c46fd81@2x.webp,93c2ba3fb33ab782a76031426c46fd81@3x.webp"},"110573":{"name":"aad5b85ee72d117b7035a08af82e43a3","files":"aad5b85ee72d117b7035a08af82e43a3@2x.webp,aad5b85ee72d117b7035a08af82e43a3@3x.webp"},"110574":{"name":"09978ad2b2288eae691c650faa9d0363","files":"09978ad2b2288eae691c650faa9d0363@2x.webp,09978ad2b2288eae691c650faa9d0363@3x.webp"},"110575":{"name":"85241b1eb671aea17c13155142342d5c","files":"85241b1eb671aea17c13155142342d5c@2x.webp,85241b1eb671aea17c13155142342d5c@3x.webp"},"110576":{"name":"f6c3ae511ee11ca3b0f9d0acb91a0e33","files":"f6c3ae511ee11ca3b0f9d0acb91a0e33@2x.webp,f6c3ae511ee11ca3b0f9d0acb91a0e33@3x.webp"},"110578":{"name":"edee6c288be358cf8661227862692be1","files":"edee6c288be358cf8661227862692be1@2x.png,edee6c288be358cf8661227862692be1@3x.png"},"150423":{"name":"eaf4a9b23fd4908e1ff2ab337390d9cd","files":"eaf4a9b23fd4908e1ff2ab337390d9cd@2x.webp,eaf4a9b23fd4908e1ff2ab337390d9cd@3x.webp"},"150424":{"name":"63be9069b1d51627588fd438f73cf852","files":"63be9069b1d51627588fd438f73cf852@2x.webp,63be9069b1d51627588fd438f73cf852@3x.webp"},"150425":{"name":"a02c86aff977e164276e4a4b6ab56766","files":"a02c86aff977e164276e4a4b6ab56766@2x.webp,a02c86aff977e164276e4a4b6ab56766@3x.webp"},"150426":{"name":"482fc5b95d4b191cd45327e0c0225b8f","files":"482fc5b95d4b191cd45327e0c0225b8f@2x.webp,482fc5b95d4b191cd45327e0c0225b8f@3x.webp"},"231240":{"name":"439d6014edf841ff60ef1328360d6aae","files":"439d6014edf841ff60ef1328360d6aae@2x.png,439d6014edf841ff60ef1328360d6aae@3x.png"},"231241":{"name":"f8fdae00ef5d9ec736ec42d980e7162f","files":"f8fdae00ef5d9ec736ec42d980e7162f.png"}},"xml":"5df8b1035bba4fd47ed79b5d2be55502.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/630b6dd1208f2a886ff3a63ee3ad66f2.zip"},"150406":{"res":{"110515":{"name":"898908cd580180cf9b182d95b6e409b4","files":"898908cd580180cf9b182d95b6e409b4@2x.webp,898908cd580180cf9b182d95b6e409b4@3x.webp"},"110570":{"name":"ce0751a4ed430b4c9944c495bf167102","files":"ce0751a4ed430b4c9944c495bf167102@2x.webp,ce0751a4ed430b4c9944c495bf167102@3x.webp"},"110571":{"name":"1ca6653004e6839fab91bc35ab9976b0","files":"1ca6653004e6839fab91bc35ab9976b0@2x.webp,1ca6653004e6839fab91bc35ab9976b0@3x.webp"},"110572":{"name":"93c2ba3fb33ab782a76031426c46fd81","files":"93c2ba3fb33ab782a76031426c46fd81@2x.webp,93c2ba3fb33ab782a76031426c46fd81@3x.webp"},"110573":{"name":"aad5b85ee72d117b7035a08af82e43a3","files":"aad5b85ee72d117b7035a08af82e43a3@2x.webp,aad5b85ee72d117b7035a08af82e43a3@3x.webp"},"110574":{"name":"09978ad2b2288eae691c650faa9d0363","files":"09978ad2b2288eae691c650faa9d0363@2x.webp,09978ad2b2288eae691c650faa9d0363@3x.webp"},"110575":{"name":"85241b1eb671aea17c13155142342d5c","files":"85241b1eb671aea17c13155142342d5c@2x.webp,85241b1eb671aea17c13155142342d5c@3x.webp"},"110576":{"name":"f6c3ae511ee11ca3b0f9d0acb91a0e33","files":"f6c3ae511ee11ca3b0f9d0acb91a0e33@2x.webp,f6c3ae511ee11ca3b0f9d0acb91a0e33@3x.webp"},"110578":{"name":"edee6c288be358cf8661227862692be1","files":"edee6c288be358cf8661227862692be1@2x.png,edee6c288be358cf8661227862692be1@3x.png"},"150429":{"name":"4eb2981313a7a866d89ce3aaeead9cf5","files":"4eb2981313a7a866d89ce3aaeead9cf5@2x.webp,4eb2981313a7a866d89ce3aaeead9cf5@3x.webp"}},"xml":"c58713219ebd5660ac2d239d52ccf79f.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/2d77db0bf45b99e95d8d5044dc66a02c.zip"},"150440":{"res":{"110516":{"name":"910f2ad97c376011fd70883f6f5185d1","files":"910f2ad97c376011fd70883f6f5185d1@2x.png,910f2ad97c376011fd70883f6f5185d1@3x.png,910f2ad97c376011fd70883f6f5185d1@dark@2x.png,910f2ad97c376011fd70883f6f5185d1@dark@3x.png"},"110518":{"name":"61aa6966406ffbf708cb84285f1ae9b3","files":"61aa6966406ffbf708cb84285f1ae9b3@2x.png,61aa6966406ffbf708cb84285f1ae9b3@3x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@2x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@3x.png"}},"xml":"974fdbe32cf30a6952cb97e292358e74.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/644aa39a929f511a3b8c2a9842d289c3.zip"},"200001":{"res":{"140550":{"name":"0c05b7e01b5528d095ec3209cef85b89","files":"0c05b7e01b5528d095ec3209cef85b89@2x.png,0c05b7e01b5528d095ec3209cef85b89@3x.png,0c05b7e01b5528d095ec3209cef85b89@dark@2x.png,0c05b7e01b5528d095ec3209cef85b89@dark@3x.png"},"140551":{"name":"0acad0ac37ffea35d7843e73cf3d15cc","files":"0acad0ac37ffea35d7843e73cf3d15cc@2x.webp,0acad0ac37ffea35d7843e73cf3d15cc@3x.webp"}},"xml":"bbcfae00e2ff574518d170b227af19c9.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/b6aee4e3ab864284cc88dae67e60a594.zip"},"200004":{"res":{"30025":{"name":"dc76f5b326b638c53a7ce3388fcded04","files":"dc76f5b326b638c53a7ce3388fcded04.svg,dc76f5b326b638c53a7ce3388fcded04@dark.svg"},"116013":{"name":"afe6e85983ea31d4e366ef9347e1dd32","files":"afe6e85983ea31d4e366ef9347e1dd32@2x.png,afe6e85983ea31d4e366ef9347e1dd32@3x.png,afe6e85983ea31d4e366ef9347e1dd32@dark@2x.png,afe6e85983ea31d4e366ef9347e1dd32@dark@3x.png"}},"xml":"0e0f83d3b4f2eb54b5cf0fa17072025c.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/e93902ebc0df98215a52e1fb987f4955.zip"},"200005":{"res":{},"xml":"b3b5656d761d67830eafef0096f36e19.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/9ce6daecd73fac86fab20337e1da6b3f.zip"},"200006":{"res":{},"xml":"a7161fa77f836843e5fd8f8441f4bc64.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/e91392472d67743cd83c993daba275d5.zip"},"200007":{"res":{},"xml":"0990cf89e269c2bca79aa0cdf8c1865a.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/8830326d173d560d7ebb7cc99a0a66d9.zip"},"200008":{"res":{},"xml":"e98a6ec24fdbb3cd067aa7a0e57da51f.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/7f9d0ea04c2987037591d64bac620f49.zip"},"200011":{"res":{"116007":{"name":"98b8fa7085f217378580261665b66ff4","files":"98b8fa7085f217378580261665b66ff4@2x.png,98b8fa7085f217378580261665b66ff4@3x.png,98b8fa7085f217378580261665b66ff4@dark@2x.png,98b8fa7085f217378580261665b66ff4@dark@3x.png"},"116008":{"name":"25026168bd0740af7ed6a3aeaa36d3dd","files":"25026168bd0740af7ed6a3aeaa36d3dd@2x.png,25026168bd0740af7ed6a3aeaa36d3dd@3x.png,25026168bd0740af7ed6a3aeaa36d3dd@dark@2x.png,25026168bd0740af7ed6a3aeaa36d3dd@dark@3x.png"},"116010":{"name":"2c7cab3c1f67c21355856a5793a95a39","files":"2c7cab3c1f67c21355856a5793a95a39@2x.png,2c7cab3c1f67c21355856a5793a95a39@3x.png,2c7cab3c1f67c21355856a5793a95a39@dark@2x.png,2c7cab3c1f67c21355856a5793a95a39@dark@3x.png"},"116011":{"name":"5d3d876fff31ff227b16504368115c9d","files":"5d3d876fff31ff227b16504368115c9d@2x.png,5d3d876fff31ff227b16504368115c9d@3x.png,5d3d876fff31ff227b16504368115c9d@dark@2x.png,5d3d876fff31ff227b16504368115c9d@dark@3x.png"},"150001":{"name":"71ec70c54a4cf739445fca38480fa960","files":"71ec70c54a4cf739445fca38480fa960@2x.png,71ec70c54a4cf739445fca38480fa960@3x.png"},"150002":{"name":"d7311195f6cf9d0227d5adbdef02bb5e","files":"d7311195f6cf9d0227d5adbdef02bb5e@2x.png,d7311195f6cf9d0227d5adbdef02bb5e@3x.png"}},"xml":"92146d4a056ebd26740b344669e162af.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/75f4122203a3d138a8b11f6c14158eaf.zip"},"200012":{"res":{},"xml":"109e3ca56aa85d336edeae87bb231ab5.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/188005cef552817e532550374051f0d6.zip"},"200016":{"res":{},"xml":"d1bc0a92e38ca057abf25305a0a0c73e.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/aed927b1e4ca32904280fccaf02f0acc.zip"},"200019":{"res":{"116007":{"name":"98b8fa7085f217378580261665b66ff4","files":"98b8fa7085f217378580261665b66ff4@2x.png,98b8fa7085f217378580261665b66ff4@3x.png,98b8fa7085f217378580261665b66ff4@dark@2x.png,98b8fa7085f217378580261665b66ff4@dark@3x.png"},"116008":{"name":"25026168bd0740af7ed6a3aeaa36d3dd","files":"25026168bd0740af7ed6a3aeaa36d3dd@2x.png,25026168bd0740af7ed6a3aeaa36d3dd@3x.png,25026168bd0740af7ed6a3aeaa36d3dd@dark@2x.png,25026168bd0740af7ed6a3aeaa36d3dd@dark@3x.png"},"116010":{"name":"2c7cab3c1f67c21355856a5793a95a39","files":"2c7cab3c1f67c21355856a5793a95a39@2x.png,2c7cab3c1f67c21355856a5793a95a39@3x.png,2c7cab3c1f67c21355856a5793a95a39@dark@2x.png,2c7cab3c1f67c21355856a5793a95a39@dark@3x.png"},"116011":{"name":"5d3d876fff31ff227b16504368115c9d","files":"5d3d876fff31ff227b16504368115c9d@2x.png,5d3d876fff31ff227b16504368115c9d@3x.png,5d3d876fff31ff227b16504368115c9d@dark@2x.png,5d3d876fff31ff227b16504368115c9d@dark@3x.png"},"200018":{"name":"c1bec4050ca12990476dc2e48fa61737","files":"c1bec4050ca12990476dc2e48fa61737@2x.png,c1bec4050ca12990476dc2e48fa61737@3x.png"}},"xml":"6d825ac02135f7f4209423ba2f7bf020.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/78f9725e377f4062f6343f81b7889559.zip"},"200020":{"res":{"200021":{"name":"edac95d141ded19dd323b28135cd242d","files":"edac95d141ded19dd323b28135cd242d@2x.png,edac95d141ded19dd323b28135cd242d@3x.png,edac95d141ded19dd323b28135cd242d@dark@2x.png,edac95d141ded19dd323b28135cd242d@dark@3x.png"}},"xml":"ae66bbb61f02d290279cae66b81e6542.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/7044bf4e49d14f72ab7022661aeb42b1.zip"},"200023":{"res":{"200024":{"name":"c950888d4437fb0280a9aa19f2f82fd2","files":"c950888d4437fb0280a9aa19f2f82fd2@2x.png,c950888d4437fb0280a9aa19f2f82fd2@3x.png,c950888d4437fb0280a9aa19f2f82fd2@dark@2x.png,c950888d4437fb0280a9aa19f2f82fd2@dark@3x.png"},"200025":{"name":"75a77c6e9b656676986eabb3123ecc98","files":"75a77c6e9b656676986eabb3123ecc98@2x.png,75a77c6e9b656676986eabb3123ecc98@3x.png,75a77c6e9b656676986eabb3123ecc98@dark@2x.png,75a77c6e9b656676986eabb3123ecc98@dark@3x.png"}},"xml":"db25b039db5a8ee28f972b824cc193e2.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/cf5d92b74b7f590c030e9c8cfc351307.zip"},"200032":{"res":{"30025":{"name":"dc76f5b326b638c53a7ce3388fcded04","files":"dc76f5b326b638c53a7ce3388fcded04.svg,dc76f5b326b638c53a7ce3388fcded04@dark.svg"},"200034":{"name":"7fe76bae7c8335798a91b4a6c4f1b78a","files":"7fe76bae7c8335798a91b4a6c4f1b78a@2x.png,7fe76bae7c8335798a91b4a6c4f1b78a@3x.png,7fe76bae7c8335798a91b4a6c4f1b78a@dark@2x.png,7fe76bae7c8335798a91b4a6c4f1b78a@dark@3x.png"}},"xml":"74b2dc540fd3e647c902d0ccf74d9c2d.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/aa45587f299fd5cdbd653d78ee8f52c6.zip"},"200033":{"res":{"30025":{"name":"dc76f5b326b638c53a7ce3388fcded04","files":"dc76f5b326b638c53a7ce3388fcded04.svg,dc76f5b326b638c53a7ce3388fcded04@dark.svg"},"200035":{"name":"965b9d85c6cd67fae41703ea96ebc78c","files":"965b9d85c6cd67fae41703ea96ebc78c@2x.png,965b9d85c6cd67fae41703ea96ebc78c@3x.png,965b9d85c6cd67fae41703ea96ebc78c@dark@2x.png,965b9d85c6cd67fae41703ea96ebc78c@dark@3x.png"}},"xml":"b5ffe098eee3325753d9d9317bc05271.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/23fbb3e50bf50a27e5e68ab9912d5e55.zip"},"200041":{"res":{"150015":{"name":"22fdb585b4fa2a7e869be0e5d24c7c5b","files":"22fdb585b4fa2a7e869be0e5d24c7c5b@2x.png,22fdb585b4fa2a7e869be0e5d24c7c5b@3x.png,22fdb585b4fa2a7e869be0e5d24c7c5b@dark@2x.png,22fdb585b4fa2a7e869be0e5d24c7c5b@dark@3x.png"},"150016":{"name":"8ba1c373d9acb225912fc6b137b4f05d","files":"8ba1c373d9acb225912fc6b137b4f05d@2x.png,8ba1c373d9acb225912fc6b137b4f05d@3x.png,8ba1c373d9acb225912fc6b137b4f05d@dark@2x.png,8ba1c373d9acb225912fc6b137b4f05d@dark@3x.png"},"150017":{"name":"2560ee737f038bc21d3aeecb77876481","files":"2560ee737f038bc21d3aeecb77876481@2x.png,2560ee737f038bc21d3aeecb77876481@3x.png,2560ee737f038bc21d3aeecb77876481@dark@2x.png,2560ee737f038bc21d3aeecb77876481@dark@3x.png"},"150018":{"name":"36347b82d7cd775069655a8a278ea8f2","files":"36347b82d7cd775069655a8a278ea8f2@2x.png,36347b82d7cd775069655a8a278ea8f2@3x.png,36347b82d7cd775069655a8a278ea8f2@dark@2x.png,36347b82d7cd775069655a8a278ea8f2@dark@3x.png"}},"xml":"559c881856a1cfd8969a890807124c94.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/d0f16bf6ae411049c2ebd936a69bcbf4.zip"},"200100":{"res":{"115026":{"name":"e5942013974c27f653b26ef735d66820","files":"e5942013974c27f653b26ef735d66820@2x.png,e5942013974c27f653b26ef735d66820@3x.png"}},"xml":"10a4485aa9657d65e55bdcfe24f115d5.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/d29e35c89ef0d40de4330a59f49f352a.zip"},"200101":{"res":{"115030":{"name":"f1af5a82a602733cdff3a245d68a17d8","files":"f1af5a82a602733cdff3a245d68a17d8@2x.png,f1af5a82a602733cdff3a245d68a17d8@3x.png,f1af5a82a602733cdff3a245d68a17d8@dark@2x.png,f1af5a82a602733cdff3a245d68a17d8@dark@3x.png"}},"xml":"f07ce4a53c09f76635ec8a020e711d4d.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/b272996b5233829f06d90457b55dfa53.zip"},"200102":{"res":{"30304":{"name":"90a5e5d149950db2338c041e7a128260","files":"90a5e5d149950db2338c041e7a128260@2x.png,90a5e5d149950db2338c041e7a128260@3x.png,90a5e5d149950db2338c041e7a128260@dark@2x.png,90a5e5d149950db2338c041e7a128260@dark@3x.png"}},"xml":"54eed8b50f910766361d8f71f1073253.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/ee1e64680f1176f0af5f127e75d6bd57.zip"},"200112":{"res":{"111001":{"name":"6cd85a353978634f86cc6e3828c8b494","files":"6cd85a353978634f86cc6e3828c8b494@2x.webp,6cd85a353978634f86cc6e3828c8b494@3x.webp"},"111003":{"name":"16d474188cd65f89f018e3a56984b913","files":"16d474188cd65f89f018e3a56984b913@2x.webp,16d474188cd65f89f018e3a56984b913@3x.webp"},"111005":{"name":"258f69f16ecdba4623c48a0daa384ab9","files":"258f69f16ecdba4623c48a0daa384ab9@2x.webp,258f69f16ecdba4623c48a0daa384ab9@3x.webp"},"111007":{"name":"a05b613b81fcd7bb72060d8b2a36cbfd","files":"a05b613b81fcd7bb72060d8b2a36cbfd@2x.webp,a05b613b81fcd7bb72060d8b2a36cbfd@3x.webp"},"111009":{"name":"187fbc5044424471bec6a6304209ebfb","files":"187fbc5044424471bec6a6304209ebfb@2x.webp,187fbc5044424471bec6a6304209ebfb@3x.webp"},"111011":{"name":"187fbc5044424471bec6a6304209ebfb","files":"187fbc5044424471bec6a6304209ebfb@2x.webp,187fbc5044424471bec6a6304209ebfb@3x.webp"},"111013":{"name":"fc1fbc4e3a71497936e481ab7707e761","files":"fc1fbc4e3a71497936e481ab7707e761@2x.webp,fc1fbc4e3a71497936e481ab7707e761@3x.webp"},"111015":{"name":"20371dd5051c6e7f6cb2f71de96c0c6a","files":"20371dd5051c6e7f6cb2f71de96c0c6a@2x.webp,20371dd5051c6e7f6cb2f71de96c0c6a@3x.webp"},"111017":{"name":"20371dd5051c6e7f6cb2f71de96c0c6a","files":"20371dd5051c6e7f6cb2f71de96c0c6a@2x.webp,20371dd5051c6e7f6cb2f71de96c0c6a@3x.webp"},"111019":{"name":"567704d227dad90771b4f782f20e6448","files":"567704d227dad90771b4f782f20e6448@2x.webp,567704d227dad90771b4f782f20e6448@3x.webp"},"111021":{"name":"9d5f8949240b7a1adb5a355783bba672","files":"9d5f8949240b7a1adb5a355783bba672@2x.webp,9d5f8949240b7a1adb5a355783bba672@3x.webp"},"111023":{"name":"c2e00eca842939d61ada20ff26eac4ce","files":"c2e00eca842939d61ada20ff26eac4ce@2x.webp,c2e00eca842939d61ada20ff26eac4ce@3x.webp"},"111025":{"name":"e2594565da2eb0a3f0460eca281d62dc","files":"e2594565da2eb0a3f0460eca281d62dc@2x.webp,e2594565da2eb0a3f0460eca281d62dc@3x.webp"},"111027":{"name":"70ec7ea840b750d120f276c63477ac62","files":"70ec7ea840b750d120f276c63477ac62@2x.webp,70ec7ea840b750d120f276c63477ac62@3x.webp"},"111029":{"name":"70ec7ea840b750d120f276c63477ac62","files":"70ec7ea840b750d120f276c63477ac62@2x.webp,70ec7ea840b750d120f276c63477ac62@3x.webp"},"111031":{"name":"9638f1dfe24ada201fbd0c74b4294894","files":"9638f1dfe24ada201fbd0c74b4294894@2x.webp,9638f1dfe24ada201fbd0c74b4294894@3x.webp"},"111033":{"name":"98847532b7d9131cb7fd5fce63bbd2fe","files":"98847532b7d9131cb7fd5fce63bbd2fe@2x.webp,98847532b7d9131cb7fd5fce63bbd2fe@3x.webp"},"111035":{"name":"f081231675f6e9dba767b995e2f0a403","files":"f081231675f6e9dba767b995e2f0a403@2x.webp,f081231675f6e9dba767b995e2f0a403@3x.webp"},"111041":{"name":"e833bb5a39908e1040f212c9daa6a5bc","files":"e833bb5a39908e1040f212c9daa6a5bc@2x.webp,e833bb5a39908e1040f212c9daa6a5bc@3x.webp"},"111043":{"name":"315baf253f145091cf1ac1ee72054b74","files":"315baf253f145091cf1ac1ee72054b74@2x.webp,315baf253f145091cf1ac1ee72054b74@3x.webp"},"111045":{"name":"25360e162e9b1965b49d2b4a7edd6ff7","files":"25360e162e9b1965b49d2b4a7edd6ff7@2x.webp,25360e162e9b1965b49d2b4a7edd6ff7@3x.webp"},"111047":{"name":"e5d72fa313c7a2c3f49409a5474a66da","files":"e5d72fa313c7a2c3f49409a5474a66da@2x.webp,e5d72fa313c7a2c3f49409a5474a66da@3x.webp"},"111049":{"name":"090d908189e0e31ddccf937ce472688a","files":"090d908189e0e31ddccf937ce472688a@2x.webp,090d908189e0e31ddccf937ce472688a@3x.webp"},"111051":{"name":"391fc0389fc66310ca3b8af9a87847d6","files":"391fc0389fc66310ca3b8af9a87847d6@2x.webp,391fc0389fc66310ca3b8af9a87847d6@3x.webp"},"111053":{"name":"67c823b3003d9cace5160a85fb78e735","files":"67c823b3003d9cace5160a85fb78e735@2x.webp,67c823b3003d9cace5160a85fb78e735@3x.webp"},"111055":{"name":"9d5f8949240b7a1adb5a355783bba672","files":"9d5f8949240b7a1adb5a355783bba672@2x.webp,9d5f8949240b7a1adb5a355783bba672@3x.webp"},"111057":{"name":"b80a7cf2aab7a4f816635efd10bbf5cc","files":"b80a7cf2aab7a4f816635efd10bbf5cc@2x.webp,b80a7cf2aab7a4f816635efd10bbf5cc@3x.webp"},"111059":{"name":"5749aa360a07eb429190d658eab61976","files":"5749aa360a07eb429190d658eab61976@2x.png,5749aa360a07eb429190d658eab61976@3x.png"},"111061":{"name":"4d71840210dd86f5139eb7e54c965eb9","files":"4d71840210dd86f5139eb7e54c965eb9@2x.webp,4d71840210dd86f5139eb7e54c965eb9@3x.webp"},"111063":{"name":"1939f579d4aad5f0de31d85dd0fb52a8","files":"1939f579d4aad5f0de31d85dd0fb52a8@2x.webp,1939f579d4aad5f0de31d85dd0fb52a8@3x.webp"},"111065":{"name":"25360e162e9b1965b49d2b4a7edd6ff7","files":"25360e162e9b1965b49d2b4a7edd6ff7@2x.webp,25360e162e9b1965b49d2b4a7edd6ff7@3x.webp"},"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"}},"xml":"242881c241ab77acf8dc0ec706387c60.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/4e4b31874bffb6896717e417fc14b3b0.zip"},"200113":{"res":{"111001":{"name":"6cd85a353978634f86cc6e3828c8b494","files":"6cd85a353978634f86cc6e3828c8b494@2x.webp,6cd85a353978634f86cc6e3828c8b494@3x.webp"},"111003":{"name":"16d474188cd65f89f018e3a56984b913","files":"16d474188cd65f89f018e3a56984b913@2x.webp,16d474188cd65f89f018e3a56984b913@3x.webp"},"111005":{"name":"258f69f16ecdba4623c48a0daa384ab9","files":"258f69f16ecdba4623c48a0daa384ab9@2x.webp,258f69f16ecdba4623c48a0daa384ab9@3x.webp"},"111007":{"name":"a05b613b81fcd7bb72060d8b2a36cbfd","files":"a05b613b81fcd7bb72060d8b2a36cbfd@2x.webp,a05b613b81fcd7bb72060d8b2a36cbfd@3x.webp"},"111009":{"name":"187fbc5044424471bec6a6304209ebfb","files":"187fbc5044424471bec6a6304209ebfb@2x.webp,187fbc5044424471bec6a6304209ebfb@3x.webp"},"111011":{"name":"187fbc5044424471bec6a6304209ebfb","files":"187fbc5044424471bec6a6304209ebfb@2x.webp,187fbc5044424471bec6a6304209ebfb@3x.webp"},"111013":{"name":"fc1fbc4e3a71497936e481ab7707e761","files":"fc1fbc4e3a71497936e481ab7707e761@2x.webp,fc1fbc4e3a71497936e481ab7707e761@3x.webp"},"111015":{"name":"20371dd5051c6e7f6cb2f71de96c0c6a","files":"20371dd5051c6e7f6cb2f71de96c0c6a@2x.webp,20371dd5051c6e7f6cb2f71de96c0c6a@3x.webp"},"111017":{"name":"20371dd5051c6e7f6cb2f71de96c0c6a","files":"20371dd5051c6e7f6cb2f71de96c0c6a@2x.webp,20371dd5051c6e7f6cb2f71de96c0c6a@3x.webp"},"111019":{"name":"567704d227dad90771b4f782f20e6448","files":"567704d227dad90771b4f782f20e6448@2x.webp,567704d227dad90771b4f782f20e6448@3x.webp"},"111021":{"name":"9d5f8949240b7a1adb5a355783bba672","files":"9d5f8949240b7a1adb5a355783bba672@2x.webp,9d5f8949240b7a1adb5a355783bba672@3x.webp"},"111023":{"name":"c2e00eca842939d61ada20ff26eac4ce","files":"c2e00eca842939d61ada20ff26eac4ce@2x.webp,c2e00eca842939d61ada20ff26eac4ce@3x.webp"},"111025":{"name":"e2594565da2eb0a3f0460eca281d62dc","files":"e2594565da2eb0a3f0460eca281d62dc@2x.webp,e2594565da2eb0a3f0460eca281d62dc@3x.webp"},"111027":{"name":"70ec7ea840b750d120f276c63477ac62","files":"70ec7ea840b750d120f276c63477ac62@2x.webp,70ec7ea840b750d120f276c63477ac62@3x.webp"},"111029":{"name":"70ec7ea840b750d120f276c63477ac62","files":"70ec7ea840b750d120f276c63477ac62@2x.webp,70ec7ea840b750d120f276c63477ac62@3x.webp"},"111031":{"name":"9638f1dfe24ada201fbd0c74b4294894","files":"9638f1dfe24ada201fbd0c74b4294894@2x.webp,9638f1dfe24ada201fbd0c74b4294894@3x.webp"},"111033":{"name":"98847532b7d9131cb7fd5fce63bbd2fe","files":"98847532b7d9131cb7fd5fce63bbd2fe@2x.webp,98847532b7d9131cb7fd5fce63bbd2fe@3x.webp"},"111035":{"name":"f081231675f6e9dba767b995e2f0a403","files":"f081231675f6e9dba767b995e2f0a403@2x.webp,f081231675f6e9dba767b995e2f0a403@3x.webp"},"111041":{"name":"e833bb5a39908e1040f212c9daa6a5bc","files":"e833bb5a39908e1040f212c9daa6a5bc@2x.webp,e833bb5a39908e1040f212c9daa6a5bc@3x.webp"},"111043":{"name":"315baf253f145091cf1ac1ee72054b74","files":"315baf253f145091cf1ac1ee72054b74@2x.webp,315baf253f145091cf1ac1ee72054b74@3x.webp"},"111045":{"name":"25360e162e9b1965b49d2b4a7edd6ff7","files":"25360e162e9b1965b49d2b4a7edd6ff7@2x.webp,25360e162e9b1965b49d2b4a7edd6ff7@3x.webp"},"111047":{"name":"e5d72fa313c7a2c3f49409a5474a66da","files":"e5d72fa313c7a2c3f49409a5474a66da@2x.webp,e5d72fa313c7a2c3f49409a5474a66da@3x.webp"},"111049":{"name":"090d908189e0e31ddccf937ce472688a","files":"090d908189e0e31ddccf937ce472688a@2x.webp,090d908189e0e31ddccf937ce472688a@3x.webp"},"111051":{"name":"391fc0389fc66310ca3b8af9a87847d6","files":"391fc0389fc66310ca3b8af9a87847d6@2x.webp,391fc0389fc66310ca3b8af9a87847d6@3x.webp"},"111053":{"name":"67c823b3003d9cace5160a85fb78e735","files":"67c823b3003d9cace5160a85fb78e735@2x.webp,67c823b3003d9cace5160a85fb78e735@3x.webp"},"111055":{"name":"9d5f8949240b7a1adb5a355783bba672","files":"9d5f8949240b7a1adb5a355783bba672@2x.webp,9d5f8949240b7a1adb5a355783bba672@3x.webp"},"111057":{"name":"b80a7cf2aab7a4f816635efd10bbf5cc","files":"b80a7cf2aab7a4f816635efd10bbf5cc@2x.webp,b80a7cf2aab7a4f816635efd10bbf5cc@3x.webp"},"111059":{"name":"5749aa360a07eb429190d658eab61976","files":"5749aa360a07eb429190d658eab61976@2x.png,5749aa360a07eb429190d658eab61976@3x.png"},"111061":{"name":"4d71840210dd86f5139eb7e54c965eb9","files":"4d71840210dd86f5139eb7e54c965eb9@2x.webp,4d71840210dd86f5139eb7e54c965eb9@3x.webp"},"111063":{"name":"1939f579d4aad5f0de31d85dd0fb52a8","files":"1939f579d4aad5f0de31d85dd0fb52a8@2x.webp,1939f579d4aad5f0de31d85dd0fb52a8@3x.webp"},"111065":{"name":"25360e162e9b1965b49d2b4a7edd6ff7","files":"25360e162e9b1965b49d2b4a7edd6ff7@2x.webp,25360e162e9b1965b49d2b4a7edd6ff7@3x.webp"},"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"}},"xml":"409a06887a2ff3b04b94a78eee82dad4.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/5d7edd85a1f1eff7d0fda3370a0555c3.zip"},"200114":{"res":{"150252":{"name":"5e731b275341c6d3ff285d8ea10393ac","files":"5e731b275341c6d3ff285d8ea10393ac@2x.webp,5e731b275341c6d3ff285d8ea10393ac@3x.webp"},"150253":{"name":"1a01b5f6d62e49925dc26e23e6694650","files":"1a01b5f6d62e49925dc26e23e6694650@2x.webp,1a01b5f6d62e49925dc26e23e6694650@3x.webp"}},"xml":"822874794be84553616f883feaa6a881.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/26533e54dc0db0b70ba0fe84abc012dc.zip"},"200115":{"res":{"150250":{"name":"3482aee8ccd72d014199844bc5d4fb75","files":"3482aee8ccd72d014199844bc5d4fb75@2x.webp,3482aee8ccd72d014199844bc5d4fb75@3x.webp"},"150251":{"name":"5dd2ef8359139596eb4fc46766209886","files":"5dd2ef8359139596eb4fc46766209886@2x.webp,5dd2ef8359139596eb4fc46766209886@3x.webp"}},"xml":"2e50d002dba3d9413be42b05e3895d2a.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/aba1a304ebec7dc72ce62fe2db078b3e.zip"},"200116":{"res":{"150254":{"name":"0010636093a5d4d07fcaf968d7d155cb","files":"0010636093a5d4d07fcaf968d7d155cb@2x.webp,0010636093a5d4d07fcaf968d7d155cb@3x.webp"},"150255":{"name":"b23958ce01d7c2fcf9be2cd7c2af1645","files":"b23958ce01d7c2fcf9be2cd7c2af1645@2x.webp,b23958ce01d7c2fcf9be2cd7c2af1645@3x.webp"},"205004":{"name":"869eec010d44d521645fdc16e7b4bbda","files":"869eec010d44d521645fdc16e7b4bbda@2x.webp,869eec010d44d521645fdc16e7b4bbda@3x.webp"},"205005":{"name":"41a37e915f7bc340955b696fd7b73cc6","files":"41a37e915f7bc340955b696fd7b73cc6@2x.webp,41a37e915f7bc340955b696fd7b73cc6@3x.webp"}},"xml":"303ad5bd73733dab1a311be5390e9c3e.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/8d6d3b4ab7176ddc87cb51160e4d7803.zip"},"200117":{"res":{"150254":{"name":"0010636093a5d4d07fcaf968d7d155cb","files":"0010636093a5d4d07fcaf968d7d155cb@2x.webp,0010636093a5d4d07fcaf968d7d155cb@3x.webp"},"150255":{"name":"b23958ce01d7c2fcf9be2cd7c2af1645","files":"b23958ce01d7c2fcf9be2cd7c2af1645@2x.webp,b23958ce01d7c2fcf9be2cd7c2af1645@3x.webp"},"205004":{"name":"869eec010d44d521645fdc16e7b4bbda","files":"869eec010d44d521645fdc16e7b4bbda@2x.webp,869eec010d44d521645fdc16e7b4bbda@3x.webp"},"205005":{"name":"41a37e915f7bc340955b696fd7b73cc6","files":"41a37e915f7bc340955b696fd7b73cc6@2x.webp,41a37e915f7bc340955b696fd7b73cc6@3x.webp"}},"xml":"38f688590d5dba98cbb4d2dbcef31580.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/1b6dbfd38bb9347e2120ba65fbaf6d29.zip"},"200118":{"res":{"110518":{"name":"61aa6966406ffbf708cb84285f1ae9b3","files":"61aa6966406ffbf708cb84285f1ae9b3@2x.png,61aa6966406ffbf708cb84285f1ae9b3@3x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@2x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@3x.png"}},"xml":"1138cb11db6b453062b4f6a7c740a917.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/456b6dc4d797f6960544606e2fa1f647.zip"},"200120":{"res":{"200122":{"name":"9a5592f15f18a449bee291d59fe10d0d","files":"9a5592f15f18a449bee291d59fe10d0d@2x.png,9a5592f15f18a449bee291d59fe10d0d@3x.png"},"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"}},"xml":"7fb67c5a6f8e8c0e543840a6ebdc61a8.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/29e6ac7074cf9c6d342ca32dc3d0ed16.zip"},"200121":{"res":{"200122":{"name":"9a5592f15f18a449bee291d59fe10d0d","files":"9a5592f15f18a449bee291d59fe10d0d@2x.png,9a5592f15f18a449bee291d59fe10d0d@3x.png"},"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"}},"xml":"922df6eec52d1a6276ca9c6fb1b74551.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/4cdf76ff3ec0bed83ff4e3abb0350315.zip"},"200123":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"}},"xml":"1fd6a4d6e36c533ac91941338f0d390d.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/3424687e0f6a297165f81086ccd4aca2.zip"},"200124":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"}},"xml":"ab1473d56151dba26d4d387e66b286ee.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/c2943d4942bde2482456fb6770113483.zip"},"200125":{"res":{"150260":{"name":"3c5638e7b8d2e62e7cad095fecb4bf8d","files":"3c5638e7b8d2e62e7cad095fecb4bf8d@2x.webp,3c5638e7b8d2e62e7cad095fecb4bf8d@3x.webp"},"205009":{"name":"39a28e1aec0e62aa335aa9f578f94149","files":"39a28e1aec0e62aa335aa9f578f94149@2x.webp,39a28e1aec0e62aa335aa9f578f94149@3x.webp"}},"xml":"b2862e3c93819b754db1948a858c58f2.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/2a5bf405dcf59e692050407bd223a84f.zip"},"200126":{"res":{"111001":{"name":"6cd85a353978634f86cc6e3828c8b494","files":"6cd85a353978634f86cc6e3828c8b494@2x.webp,6cd85a353978634f86cc6e3828c8b494@3x.webp"},"111003":{"name":"16d474188cd65f89f018e3a56984b913","files":"16d474188cd65f89f018e3a56984b913@2x.webp,16d474188cd65f89f018e3a56984b913@3x.webp"},"111005":{"name":"258f69f16ecdba4623c48a0daa384ab9","files":"258f69f16ecdba4623c48a0daa384ab9@2x.webp,258f69f16ecdba4623c48a0daa384ab9@3x.webp"},"111007":{"name":"a05b613b81fcd7bb72060d8b2a36cbfd","files":"a05b613b81fcd7bb72060d8b2a36cbfd@2x.webp,a05b613b81fcd7bb72060d8b2a36cbfd@3x.webp"},"111009":{"name":"187fbc5044424471bec6a6304209ebfb","files":"187fbc5044424471bec6a6304209ebfb@2x.webp,187fbc5044424471bec6a6304209ebfb@3x.webp"},"111011":{"name":"187fbc5044424471bec6a6304209ebfb","files":"187fbc5044424471bec6a6304209ebfb@2x.webp,187fbc5044424471bec6a6304209ebfb@3x.webp"},"111013":{"name":"fc1fbc4e3a71497936e481ab7707e761","files":"fc1fbc4e3a71497936e481ab7707e761@2x.webp,fc1fbc4e3a71497936e481ab7707e761@3x.webp"},"111015":{"name":"20371dd5051c6e7f6cb2f71de96c0c6a","files":"20371dd5051c6e7f6cb2f71de96c0c6a@2x.webp,20371dd5051c6e7f6cb2f71de96c0c6a@3x.webp"},"111017":{"name":"20371dd5051c6e7f6cb2f71de96c0c6a","files":"20371dd5051c6e7f6cb2f71de96c0c6a@2x.webp,20371dd5051c6e7f6cb2f71de96c0c6a@3x.webp"},"111019":{"name":"567704d227dad90771b4f782f20e6448","files":"567704d227dad90771b4f782f20e6448@2x.webp,567704d227dad90771b4f782f20e6448@3x.webp"},"111021":{"name":"9d5f8949240b7a1adb5a355783bba672","files":"9d5f8949240b7a1adb5a355783bba672@2x.webp,9d5f8949240b7a1adb5a355783bba672@3x.webp"},"111023":{"name":"c2e00eca842939d61ada20ff26eac4ce","files":"c2e00eca842939d61ada20ff26eac4ce@2x.webp,c2e00eca842939d61ada20ff26eac4ce@3x.webp"},"111025":{"name":"e2594565da2eb0a3f0460eca281d62dc","files":"e2594565da2eb0a3f0460eca281d62dc@2x.webp,e2594565da2eb0a3f0460eca281d62dc@3x.webp"},"111027":{"name":"70ec7ea840b750d120f276c63477ac62","files":"70ec7ea840b750d120f276c63477ac62@2x.webp,70ec7ea840b750d120f276c63477ac62@3x.webp"},"111029":{"name":"70ec7ea840b750d120f276c63477ac62","files":"70ec7ea840b750d120f276c63477ac62@2x.webp,70ec7ea840b750d120f276c63477ac62@3x.webp"},"111031":{"name":"9638f1dfe24ada201fbd0c74b4294894","files":"9638f1dfe24ada201fbd0c74b4294894@2x.webp,9638f1dfe24ada201fbd0c74b4294894@3x.webp"},"111033":{"name":"98847532b7d9131cb7fd5fce63bbd2fe","files":"98847532b7d9131cb7fd5fce63bbd2fe@2x.webp,98847532b7d9131cb7fd5fce63bbd2fe@3x.webp"},"111035":{"name":"f081231675f6e9dba767b995e2f0a403","files":"f081231675f6e9dba767b995e2f0a403@2x.webp,f081231675f6e9dba767b995e2f0a403@3x.webp"},"111041":{"name":"e833bb5a39908e1040f212c9daa6a5bc","files":"e833bb5a39908e1040f212c9daa6a5bc@2x.webp,e833bb5a39908e1040f212c9daa6a5bc@3x.webp"},"111043":{"name":"315baf253f145091cf1ac1ee72054b74","files":"315baf253f145091cf1ac1ee72054b74@2x.webp,315baf253f145091cf1ac1ee72054b74@3x.webp"},"111045":{"name":"25360e162e9b1965b49d2b4a7edd6ff7","files":"25360e162e9b1965b49d2b4a7edd6ff7@2x.webp,25360e162e9b1965b49d2b4a7edd6ff7@3x.webp"},"111047":{"name":"e5d72fa313c7a2c3f49409a5474a66da","files":"e5d72fa313c7a2c3f49409a5474a66da@2x.webp,e5d72fa313c7a2c3f49409a5474a66da@3x.webp"},"111049":{"name":"090d908189e0e31ddccf937ce472688a","files":"090d908189e0e31ddccf937ce472688a@2x.webp,090d908189e0e31ddccf937ce472688a@3x.webp"},"111051":{"name":"391fc0389fc66310ca3b8af9a87847d6","files":"391fc0389fc66310ca3b8af9a87847d6@2x.webp,391fc0389fc66310ca3b8af9a87847d6@3x.webp"},"111053":{"name":"67c823b3003d9cace5160a85fb78e735","files":"67c823b3003d9cace5160a85fb78e735@2x.webp,67c823b3003d9cace5160a85fb78e735@3x.webp"},"111055":{"name":"9d5f8949240b7a1adb5a355783bba672","files":"9d5f8949240b7a1adb5a355783bba672@2x.webp,9d5f8949240b7a1adb5a355783bba672@3x.webp"},"111057":{"name":"b80a7cf2aab7a4f816635efd10bbf5cc","files":"b80a7cf2aab7a4f816635efd10bbf5cc@2x.webp,b80a7cf2aab7a4f816635efd10bbf5cc@3x.webp"},"111059":{"name":"5749aa360a07eb429190d658eab61976","files":"5749aa360a07eb429190d658eab61976@2x.png,5749aa360a07eb429190d658eab61976@3x.png"},"111061":{"name":"4d71840210dd86f5139eb7e54c965eb9","files":"4d71840210dd86f5139eb7e54c965eb9@2x.webp,4d71840210dd86f5139eb7e54c965eb9@3x.webp"},"111063":{"name":"1939f579d4aad5f0de31d85dd0fb52a8","files":"1939f579d4aad5f0de31d85dd0fb52a8@2x.webp,1939f579d4aad5f0de31d85dd0fb52a8@3x.webp"},"111065":{"name":"25360e162e9b1965b49d2b4a7edd6ff7","files":"25360e162e9b1965b49d2b4a7edd6ff7@2x.webp,25360e162e9b1965b49d2b4a7edd6ff7@3x.webp"},"205013":{"name":"7cc3b73c2cd925031151089135910cf1","files":"7cc3b73c2cd925031151089135910cf1@2x.png,7cc3b73c2cd925031151089135910cf1@3x.png,7cc3b73c2cd925031151089135910cf1@dark@2x.png,7cc3b73c2cd925031151089135910cf1@dark@3x.png"}},"xml":"759e9a1a41b4d2619c1be1bb753f9807.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/97ef57386851cd492343fff7676afa57.zip"},"200130":{"res":{"205023":{"name":"22747f34eed23ac4f269f44d9d1a2ea5","files":"22747f34eed23ac4f269f44d9d1a2ea5@2x.png,22747f34eed23ac4f269f44d9d1a2ea5@3x.png"},"205032":{"name":"9908b4466cef0fe4f0034f00e7a1cb04","files":"9908b4466cef0fe4f0034f00e7a1cb04@2x.webp,9908b4466cef0fe4f0034f00e7a1cb04@3x.webp"},"205033":{"name":"22747f34eed23ac4f269f44d9d1a2ea5","files":"22747f34eed23ac4f269f44d9d1a2ea5@2x.png,22747f34eed23ac4f269f44d9d1a2ea5@3x.png"},"205034":{"name":"9908b4466cef0fe4f0034f00e7a1cb04","files":"9908b4466cef0fe4f0034f00e7a1cb04@2x.webp,9908b4466cef0fe4f0034f00e7a1cb04@3x.webp"}},"xml":"a6cd046b7e0923d70c71c3c48d714892.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/3ed7353d6ade27dcb8d1102976bc69be.zip"},"200131":{"res":{"110518":{"name":"61aa6966406ffbf708cb84285f1ae9b3","files":"61aa6966406ffbf708cb84285f1ae9b3@2x.png,61aa6966406ffbf708cb84285f1ae9b3@3x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@2x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@3x.png"}},"xml":"9b408443529a6b7058e416ae2120ccc5.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/208aa3d9de32518ee5452e9086ad838c.zip"},"200132":{"res":{"110518":{"name":"61aa6966406ffbf708cb84285f1ae9b3","files":"61aa6966406ffbf708cb84285f1ae9b3@2x.png,61aa6966406ffbf708cb84285f1ae9b3@3x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@2x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@3x.png"}},"xml":"d86119db84afee8123acdad5c1d6a034.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/80fc08d03752c9b9100acc4e91ea3c98.zip"},"200136":{"res":{"110544":{"name":"d8870335986a26b370c6b11ea8bc6c96","files":"d8870335986a26b370c6b11ea8bc6c96@2x.png,d8870335986a26b370c6b11ea8bc6c96@3x.png"},"200137":{"name":"296bca3a8cfae9bd6830c6963c0eda3d","files":"296bca3a8cfae9bd6830c6963c0eda3d@2x.png,296bca3a8cfae9bd6830c6963c0eda3d@3x.png"}},"xml":"0ef8706ebc39e7275de60728922342f1.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/7d0cc5cd8526579e778af659152c9128.zip"},"200141":{"res":{},"xml":"8f07d801b268017355dcef71ea35378b.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/eef4bc4d1efa53c561df45b0bc21ea0c.zip"},"200144":{"res":{"200146":{"name":"407e74cca8187673d501d368b4ba7a45","files":"407e74cca8187673d501d368b4ba7a45@2x.webp,407e74cca8187673d501d368b4ba7a45@3x.webp"},"200148":{"name":"139faaac665f28845ed995e7070f27e8","files":"139faaac665f28845ed995e7070f27e8@2x.webp,139faaac665f28845ed995e7070f27e8@3x.webp"}},"xml":"eafa03f04cb5cc7391827e6b2c395d17.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/7811b297b6cef6c685ae187bfbb36772.zip"},"200145":{"res":{"200147":{"name":"1a1d5ebcdc9a5db268d11084cc32399f","files":"1a1d5ebcdc9a5db268d11084cc32399f@2x.webp,1a1d5ebcdc9a5db268d11084cc32399f@3x.webp"},"200149":{"name":"75f62a8038b4e7fda0149a6319b6f5d1","files":"75f62a8038b4e7fda0149a6319b6f5d1@2x.webp,75f62a8038b4e7fda0149a6319b6f5d1@3x.webp"}},"xml":"bb2fcdce982a3b347f17e53d8a186a2d.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/d28e44c1fa1ec144bcf8522aa4998201.zip"},"200201":{"res":{"200207":{"name":"98b5293d1af8588541724e51f1230d44","files":"98b5293d1af8588541724e51f1230d44@2x.webp,98b5293d1af8588541724e51f1230d44@3x.webp"},"200208":{"name":"e00fbb57db9a2f67b7b53ae0c6e6b1c8","files":"e00fbb57db9a2f67b7b53ae0c6e6b1c8@2x.webp,e00fbb57db9a2f67b7b53ae0c6e6b1c8@3x.webp"},"200209":{"name":"e3644d2320d51ed9e31f95e957d4d4b3","files":"e3644d2320d51ed9e31f95e957d4d4b3@2x.webp,e3644d2320d51ed9e31f95e957d4d4b3@3x.webp"},"200210":{"name":"8d15b945275efe2db048100ffeadefbe","files":"8d15b945275efe2db048100ffeadefbe@2x.webp,8d15b945275efe2db048100ffeadefbe@3x.webp"},"200211":{"name":"9ecd653a8fac7f932cbd0c57dc262b60","files":"9ecd653a8fac7f932cbd0c57dc262b60@2x.webp,9ecd653a8fac7f932cbd0c57dc262b60@3x.webp"},"200212":{"name":"399ee4d55df24457d396d757ac8511b5","files":"399ee4d55df24457d396d757ac8511b5@2x.webp,399ee4d55df24457d396d757ac8511b5@3x.webp"},"200213":{"name":"2a54032aa68e062a31c054f763ed9a59","files":"2a54032aa68e062a31c054f763ed9a59@2x.webp,2a54032aa68e062a31c054f763ed9a59@3x.webp"},"200214":{"name":"29592e458a59531a0f364110527417fd","files":"29592e458a59531a0f364110527417fd@2x.webp,29592e458a59531a0f364110527417fd@3x.webp"},"200215":{"name":"d9fe1f561a3063929a8a98ddb555c3d5","files":"d9fe1f561a3063929a8a98ddb555c3d5@2x.webp,d9fe1f561a3063929a8a98ddb555c3d5@3x.webp"},"200216":{"name":"70a4ac45fc03e925d297cc3a0c3108e1","files":"70a4ac45fc03e925d297cc3a0c3108e1@2x.webp,70a4ac45fc03e925d297cc3a0c3108e1@3x.webp"},"200217":{"name":"24eec37393234be160503a6db3c6d36a","files":"24eec37393234be160503a6db3c6d36a@2x.webp,24eec37393234be160503a6db3c6d36a@3x.webp"},"200218":{"name":"6ac6e89d06fbcec60a613bf854bdd4b7","files":"6ac6e89d06fbcec60a613bf854bdd4b7@2x.webp,6ac6e89d06fbcec60a613bf854bdd4b7@3x.webp"},"200219":{"name":"c35e2ffd87742222b05462c946a34b18","files":"c35e2ffd87742222b05462c946a34b18@2x.png,c35e2ffd87742222b05462c946a34b18@3x.png"},"200220":{"name":"4968661787f623f8c1884cff6f184685","files":"4968661787f623f8c1884cff6f184685@2x.png,4968661787f623f8c1884cff6f184685@3x.png"},"200221":{"name":"391fac611f1843c8f34ccdf44b668e31","files":"391fac611f1843c8f34ccdf44b668e31@2x.png,391fac611f1843c8f34ccdf44b668e31@3x.png"},"200240":{"name":"c1cca8f6ee8482cbecdb137083c5b047","files":"c1cca8f6ee8482cbecdb137083c5b047@2x.webp,c1cca8f6ee8482cbecdb137083c5b047@3x.webp"},"200241":{"name":"3be33e02216c988ebd3c2fa69def9ffa","files":"3be33e02216c988ebd3c2fa69def9ffa@2x.webp,3be33e02216c988ebd3c2fa69def9ffa@3x.webp"},"200242":{"name":"3cf1afbdcc6f52204ea5b91f9e51004a","files":"3cf1afbdcc6f52204ea5b91f9e51004a@2x.webp,3cf1afbdcc6f52204ea5b91f9e51004a@3x.webp"},"200243":{"name":"864c0ef65b587a029a9ffb7a899bb450","files":"864c0ef65b587a029a9ffb7a899bb450@2x.webp,864c0ef65b587a029a9ffb7a899bb450@3x.webp"},"200244":{"name":"0074c99e49853d2d7aebc70280ac1a67","files":"0074c99e49853d2d7aebc70280ac1a67@2x.png,0074c99e49853d2d7aebc70280ac1a67@3x.png"},"200245":{"name":"78f7e43339aef1f08327b68c3adfa00b","files":"78f7e43339aef1f08327b68c3adfa00b@2x.webp,78f7e43339aef1f08327b68c3adfa00b@3x.webp"},"231330":{"name":"40e2d7c2feea70beeb34946784c4b0e1","files":"40e2d7c2feea70beeb34946784c4b0e1@2x.png,40e2d7c2feea70beeb34946784c4b0e1@3x.png"}},"xml":"af9bb0cff2c2d0923aacb6444c640ccd.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/9cb3c99b42d75a1a5541e36e2c1347fa.zip"},"200202":{"res":{"200207":{"name":"98b5293d1af8588541724e51f1230d44","files":"98b5293d1af8588541724e51f1230d44@2x.webp,98b5293d1af8588541724e51f1230d44@3x.webp"},"200208":{"name":"e00fbb57db9a2f67b7b53ae0c6e6b1c8","files":"e00fbb57db9a2f67b7b53ae0c6e6b1c8@2x.webp,e00fbb57db9a2f67b7b53ae0c6e6b1c8@3x.webp"},"200209":{"name":"e3644d2320d51ed9e31f95e957d4d4b3","files":"e3644d2320d51ed9e31f95e957d4d4b3@2x.webp,e3644d2320d51ed9e31f95e957d4d4b3@3x.webp"},"200210":{"name":"8d15b945275efe2db048100ffeadefbe","files":"8d15b945275efe2db048100ffeadefbe@2x.webp,8d15b945275efe2db048100ffeadefbe@3x.webp"},"200211":{"name":"9ecd653a8fac7f932cbd0c57dc262b60","files":"9ecd653a8fac7f932cbd0c57dc262b60@2x.webp,9ecd653a8fac7f932cbd0c57dc262b60@3x.webp"},"200212":{"name":"399ee4d55df24457d396d757ac8511b5","files":"399ee4d55df24457d396d757ac8511b5@2x.webp,399ee4d55df24457d396d757ac8511b5@3x.webp"},"200213":{"name":"2a54032aa68e062a31c054f763ed9a59","files":"2a54032aa68e062a31c054f763ed9a59@2x.webp,2a54032aa68e062a31c054f763ed9a59@3x.webp"},"200214":{"name":"29592e458a59531a0f364110527417fd","files":"29592e458a59531a0f364110527417fd@2x.webp,29592e458a59531a0f364110527417fd@3x.webp"},"200215":{"name":"d9fe1f561a3063929a8a98ddb555c3d5","files":"d9fe1f561a3063929a8a98ddb555c3d5@2x.webp,d9fe1f561a3063929a8a98ddb555c3d5@3x.webp"},"200216":{"name":"70a4ac45fc03e925d297cc3a0c3108e1","files":"70a4ac45fc03e925d297cc3a0c3108e1@2x.webp,70a4ac45fc03e925d297cc3a0c3108e1@3x.webp"},"200217":{"name":"24eec37393234be160503a6db3c6d36a","files":"24eec37393234be160503a6db3c6d36a@2x.webp,24eec37393234be160503a6db3c6d36a@3x.webp"},"200218":{"name":"6ac6e89d06fbcec60a613bf854bdd4b7","files":"6ac6e89d06fbcec60a613bf854bdd4b7@2x.webp,6ac6e89d06fbcec60a613bf854bdd4b7@3x.webp"},"200219":{"name":"c35e2ffd87742222b05462c946a34b18","files":"c35e2ffd87742222b05462c946a34b18@2x.png,c35e2ffd87742222b05462c946a34b18@3x.png"},"200220":{"name":"4968661787f623f8c1884cff6f184685","files":"4968661787f623f8c1884cff6f184685@2x.png,4968661787f623f8c1884cff6f184685@3x.png"},"200221":{"name":"391fac611f1843c8f34ccdf44b668e31","files":"391fac611f1843c8f34ccdf44b668e31@2x.png,391fac611f1843c8f34ccdf44b668e31@3x.png"},"200250":{"name":"48f760982e4576973dfc9962f3a840c6","files":"48f760982e4576973dfc9962f3a840c6@2x.webp,48f760982e4576973dfc9962f3a840c6@3x.webp"},"200251":{"name":"20e080796622db17d90056821acf7f48","files":"20e080796622db17d90056821acf7f48@2x.webp,20e080796622db17d90056821acf7f48@3x.webp"},"200252":{"name":"3209441441d2a4f3827ca6f5e87488be","files":"3209441441d2a4f3827ca6f5e87488be@2x.webp,3209441441d2a4f3827ca6f5e87488be@3x.webp"},"200253":{"name":"d97a7f04b70fe5297bc7bedeb0ead9cc","files":"d97a7f04b70fe5297bc7bedeb0ead9cc@2x.webp,d97a7f04b70fe5297bc7bedeb0ead9cc@3x.webp"},"200254":{"name":"9daf2b8666ffce740437b686fc8b7b59","files":"9daf2b8666ffce740437b686fc8b7b59@2x.png,9daf2b8666ffce740437b686fc8b7b59@3x.png"},"200255":{"name":"cfd3bcc6f1c65aaaa6db028e4104ee85","files":"cfd3bcc6f1c65aaaa6db028e4104ee85@2x.webp,cfd3bcc6f1c65aaaa6db028e4104ee85@3x.webp"}},"xml":"d6f99573cf16f821874a199378490952.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/99e63f65ee8d211782bf71ab0d4b9ae9.zip"},"200203":{"res":{"110516":{"name":"910f2ad97c376011fd70883f6f5185d1","files":"910f2ad97c376011fd70883f6f5185d1@2x.png,910f2ad97c376011fd70883f6f5185d1@3x.png,910f2ad97c376011fd70883f6f5185d1@dark@2x.png,910f2ad97c376011fd70883f6f5185d1@dark@3x.png"},"110517":{"name":"f0545aa9335264b60bc836de3c88279f","files":"f0545aa9335264b60bc836de3c88279f@2x.png,f0545aa9335264b60bc836de3c88279f@3x.png,f0545aa9335264b60bc836de3c88279f@dark@2x.png,f0545aa9335264b60bc836de3c88279f@dark@3x.png"},"110518":{"name":"61aa6966406ffbf708cb84285f1ae9b3","files":"61aa6966406ffbf708cb84285f1ae9b3@2x.png,61aa6966406ffbf708cb84285f1ae9b3@3x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@2x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@3x.png"},"110519":{"name":"a4d621e2dfbad243f8dddb24a7974298","files":"a4d621e2dfbad243f8dddb24a7974298@2x.png,a4d621e2dfbad243f8dddb24a7974298@3x.png,a4d621e2dfbad243f8dddb24a7974298@dark@2x.png,a4d621e2dfbad243f8dddb24a7974298@dark@3x.png"}},"xml":"50ae80b2405d03902546c22f3005b1c6.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/f6c10f06459d4b1a8c8e81cf666a14a2.zip"},"200204":{"res":{"110516":{"name":"910f2ad97c376011fd70883f6f5185d1","files":"910f2ad97c376011fd70883f6f5185d1@2x.png,910f2ad97c376011fd70883f6f5185d1@3x.png,910f2ad97c376011fd70883f6f5185d1@dark@2x.png,910f2ad97c376011fd70883f6f5185d1@dark@3x.png"},"110517":{"name":"f0545aa9335264b60bc836de3c88279f","files":"f0545aa9335264b60bc836de3c88279f@2x.png,f0545aa9335264b60bc836de3c88279f@3x.png,f0545aa9335264b60bc836de3c88279f@dark@2x.png,f0545aa9335264b60bc836de3c88279f@dark@3x.png"},"110518":{"name":"61aa6966406ffbf708cb84285f1ae9b3","files":"61aa6966406ffbf708cb84285f1ae9b3@2x.png,61aa6966406ffbf708cb84285f1ae9b3@3x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@2x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@3x.png"},"110519":{"name":"a4d621e2dfbad243f8dddb24a7974298","files":"a4d621e2dfbad243f8dddb24a7974298@2x.png,a4d621e2dfbad243f8dddb24a7974298@3x.png,a4d621e2dfbad243f8dddb24a7974298@dark@2x.png,a4d621e2dfbad243f8dddb24a7974298@dark@3x.png"}},"xml":"b16e64a5bb9e3065a606bb0008a006bb.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/f5c16bdad7cf7311edd705d74d569558.zip"},"200205":{"res":{"110520":{"name":"43e3ff8cd4a10543301d0160a8b4501d","files":"43e3ff8cd4a10543301d0160a8b4501d@2x.png,43e3ff8cd4a10543301d0160a8b4501d@3x.png"},"110521":{"name":"89e2f448d1cf6d5d9df81a7a893f4aa2","files":"89e2f448d1cf6d5d9df81a7a893f4aa2@2x.png,89e2f448d1cf6d5d9df81a7a893f4aa2@3x.png"},"110522":{"name":"6098558e8a537a0bef83776c68cdac03","files":"6098558e8a537a0bef83776c68cdac03@2x.png,6098558e8a537a0bef83776c68cdac03@3x.png"},"110523":{"name":"36055629860ea2cd999f77e528814515","files":"36055629860ea2cd999f77e528814515@2x.png,36055629860ea2cd999f77e528814515@3x.png"}},"xml":"712ace170192a3dbdab4a1eccf055f8b.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/d7ca05779bad8465c80433494b3d6af1.zip"},"200206":{"res":{"110520":{"name":"43e3ff8cd4a10543301d0160a8b4501d","files":"43e3ff8cd4a10543301d0160a8b4501d@2x.png,43e3ff8cd4a10543301d0160a8b4501d@3x.png"},"110521":{"name":"89e2f448d1cf6d5d9df81a7a893f4aa2","files":"89e2f448d1cf6d5d9df81a7a893f4aa2@2x.png,89e2f448d1cf6d5d9df81a7a893f4aa2@3x.png"},"110522":{"name":"6098558e8a537a0bef83776c68cdac03","files":"6098558e8a537a0bef83776c68cdac03@2x.png,6098558e8a537a0bef83776c68cdac03@3x.png"},"110523":{"name":"36055629860ea2cd999f77e528814515","files":"36055629860ea2cd999f77e528814515@2x.png,36055629860ea2cd999f77e528814515@3x.png"}},"xml":"c1551fc8217fa7fd891703c4bf473ae6.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/67fd0adec3a40cc0bd39fd7664f82745.zip"},"200256":{"res":{"200271":{"name":"eb9142a1791bf08e7fecdc2f2261e561","files":"eb9142a1791bf08e7fecdc2f2261e561@2x.webp,eb9142a1791bf08e7fecdc2f2261e561@3x.webp,eb9142a1791bf08e7fecdc2f2261e561@dark@2x.webp,eb9142a1791bf08e7fecdc2f2261e561@dark@3x.webp"},"200273":{"name":"85c96fbc2e73a33d3c8bcf6c61642751","files":"85c96fbc2e73a33d3c8bcf6c61642751@2x.webp,85c96fbc2e73a33d3c8bcf6c61642751@3x.webp,85c96fbc2e73a33d3c8bcf6c61642751@dark@2x.webp,85c96fbc2e73a33d3c8bcf6c61642751@dark@3x.webp"},"200275":{"name":"6ec0f1d6529240a9d5ac57e12b7295cd","files":"6ec0f1d6529240a9d5ac57e12b7295cd@2x.webp,6ec0f1d6529240a9d5ac57e12b7295cd@3x.webp,6ec0f1d6529240a9d5ac57e12b7295cd@dark@2x.webp,6ec0f1d6529240a9d5ac57e12b7295cd@dark@3x.webp"},"200276":{"name":"290122181d741a5bf54df95c01b57948","files":"290122181d741a5bf54df95c01b57948@2x.webp,290122181d741a5bf54df95c01b57948@3x.webp,290122181d741a5bf54df95c01b57948@dark@2x.webp,290122181d741a5bf54df95c01b57948@dark@3x.webp"},"200279":{"name":"58dda7c20ebc64d9f4f33421aefe2bfc","files":"58dda7c20ebc64d9f4f33421aefe2bfc@2x.webp,58dda7c20ebc64d9f4f33421aefe2bfc@3x.webp,58dda7c20ebc64d9f4f33421aefe2bfc@dark@2x.webp,58dda7c20ebc64d9f4f33421aefe2bfc@dark@3x.webp"},"200280":{"name":"e943cc0960ad851a566070a0334b9578","files":"e943cc0960ad851a566070a0334b9578@2x.webp,e943cc0960ad851a566070a0334b9578@3x.webp,e943cc0960ad851a566070a0334b9578@dark@2x.webp,e943cc0960ad851a566070a0334b9578@dark@3x.webp"},"200281":{"name":"8288d41f67e6becf551d34dc8790c0c4","files":"8288d41f67e6becf551d34dc8790c0c4@2x.webp,8288d41f67e6becf551d34dc8790c0c4@3x.webp,8288d41f67e6becf551d34dc8790c0c4@dark@2x.webp,8288d41f67e6becf551d34dc8790c0c4@dark@3x.webp"},"200282":{"name":"17736889a31f2585a7adb1d02ec81e81","files":"17736889a31f2585a7adb1d02ec81e81@2x.webp,17736889a31f2585a7adb1d02ec81e81@3x.webp,17736889a31f2585a7adb1d02ec81e81@dark@2x.webp,17736889a31f2585a7adb1d02ec81e81@dark@3x.webp"},"200284":{"name":"366424e216ae1b22daea5460702215aa","files":"366424e216ae1b22daea5460702215aa@2x.webp,366424e216ae1b22daea5460702215aa@3x.webp,366424e216ae1b22daea5460702215aa@dark@2x.webp,366424e216ae1b22daea5460702215aa@dark@3x.webp"},"200286":{"name":"b262270029ba6f8dae25fec2b129410e","files":"b262270029ba6f8dae25fec2b129410e@2x.webp,b262270029ba6f8dae25fec2b129410e@3x.webp,b262270029ba6f8dae25fec2b129410e@dark@2x.webp,b262270029ba6f8dae25fec2b129410e@dark@3x.webp"},"200288":{"name":"e68dc52bd2efa6682714d6e947fa5629","files":"e68dc52bd2efa6682714d6e947fa5629@2x.webp,e68dc52bd2efa6682714d6e947fa5629@3x.webp,e68dc52bd2efa6682714d6e947fa5629@dark@2x.webp,e68dc52bd2efa6682714d6e947fa5629@dark@3x.webp"},"200290":{"name":"dd8a627a449c93d3fbe6e71fd302e5c2","files":"dd8a627a449c93d3fbe6e71fd302e5c2@2x.webp,dd8a627a449c93d3fbe6e71fd302e5c2@3x.webp,dd8a627a449c93d3fbe6e71fd302e5c2@dark@2x.webp,dd8a627a449c93d3fbe6e71fd302e5c2@dark@3x.webp"},"200292":{"name":"78eee33626a68d57bec7b6ba8fd87361","files":"78eee33626a68d57bec7b6ba8fd87361@2x.webp,78eee33626a68d57bec7b6ba8fd87361@3x.webp,78eee33626a68d57bec7b6ba8fd87361@dark@2x.webp,78eee33626a68d57bec7b6ba8fd87361@dark@3x.webp"},"200294":{"name":"b4a90aa6dca51439ec038fad9d13a668","files":"b4a90aa6dca51439ec038fad9d13a668@2x.webp,b4a90aa6dca51439ec038fad9d13a668@3x.webp,b4a90aa6dca51439ec038fad9d13a668@dark@2x.webp,b4a90aa6dca51439ec038fad9d13a668@dark@3x.webp"},"200296":{"name":"25b4b06c4d19b76ce4c294b5aa66e609","files":"25b4b06c4d19b76ce4c294b5aa66e609@2x.webp,25b4b06c4d19b76ce4c294b5aa66e609@3x.webp,25b4b06c4d19b76ce4c294b5aa66e609@dark@2x.webp,25b4b06c4d19b76ce4c294b5aa66e609@dark@3x.webp"},"200298":{"name":"fc0c959d46cbfea88c77a4addce9614c","files":"fc0c959d46cbfea88c77a4addce9614c@2x.webp,fc0c959d46cbfea88c77a4addce9614c@3x.webp,fc0c959d46cbfea88c77a4addce9614c@dark@2x.webp,fc0c959d46cbfea88c77a4addce9614c@dark@3x.webp"},"200300":{"name":"eff82b28ba1cabe1dc7c79df840ec60e","files":"eff82b28ba1cabe1dc7c79df840ec60e@2x.webp,eff82b28ba1cabe1dc7c79df840ec60e@3x.webp,eff82b28ba1cabe1dc7c79df840ec60e@dark@2x.webp,eff82b28ba1cabe1dc7c79df840ec60e@dark@3x.webp"},"200302":{"name":"7281e5e5f99c736502a20d9349aba5e9","files":"7281e5e5f99c736502a20d9349aba5e9@2x.webp,7281e5e5f99c736502a20d9349aba5e9@3x.webp,7281e5e5f99c736502a20d9349aba5e9@dark@2x.webp,7281e5e5f99c736502a20d9349aba5e9@dark@3x.webp"},"200303":{"name":"00ff3097263b698e997c1e6d5ce39104","files":"00ff3097263b698e997c1e6d5ce39104@2x.png,00ff3097263b698e997c1e6d5ce39104@3x.png,00ff3097263b698e997c1e6d5ce39104@dark@2x.png,00ff3097263b698e997c1e6d5ce39104@dark@3x.png"},"200304":{"name":"7f53a4308520c09e2a5fce74e36307ff","files":"7f53a4308520c09e2a5fce74e36307ff@2x.webp,7f53a4308520c09e2a5fce74e36307ff@3x.webp,7f53a4308520c09e2a5fce74e36307ff@dark@2x.webp,7f53a4308520c09e2a5fce74e36307ff@dark@3x.webp"},"200306":{"name":"055ae12b4672b23f6428b1be0ac37ad8","files":"055ae12b4672b23f6428b1be0ac37ad8@2x.webp,055ae12b4672b23f6428b1be0ac37ad8@3x.webp,055ae12b4672b23f6428b1be0ac37ad8@dark@2x.webp,055ae12b4672b23f6428b1be0ac37ad8@dark@3x.webp"},"200308":{"name":"f88e9bffd942a2e78f4fa99f172e95d8","files":"f88e9bffd942a2e78f4fa99f172e95d8@2x.webp,f88e9bffd942a2e78f4fa99f172e95d8@3x.webp,f88e9bffd942a2e78f4fa99f172e95d8@dark@2x.webp,f88e9bffd942a2e78f4fa99f172e95d8@dark@3x.webp"},"200310":{"name":"f6e3783a691cd4623901a7866fe3066e","files":"f6e3783a691cd4623901a7866fe3066e@2x.webp,f6e3783a691cd4623901a7866fe3066e@3x.webp,f6e3783a691cd4623901a7866fe3066e@dark@2x.webp,f6e3783a691cd4623901a7866fe3066e@dark@3x.webp"},"200312":{"name":"a96a85a0933d64133d0df8b29a7bdd8e","files":"a96a85a0933d64133d0df8b29a7bdd8e@2x.png,a96a85a0933d64133d0df8b29a7bdd8e@3x.png,a96a85a0933d64133d0df8b29a7bdd8e@dark@2x.png,a96a85a0933d64133d0df8b29a7bdd8e@dark@3x.png"},"200314":{"name":"291f8ad820624b26e45150a49ed80abe","files":"291f8ad820624b26e45150a49ed80abe@2x.png,291f8ad820624b26e45150a49ed80abe@3x.png,291f8ad820624b26e45150a49ed80abe@dark@2x.png,291f8ad820624b26e45150a49ed80abe@dark@3x.png"},"200316":{"name":"be25ba12eff8306fda8cb26861750584","files":"be25ba12eff8306fda8cb26861750584@2x.png,be25ba12eff8306fda8cb26861750584@3x.png,be25ba12eff8306fda8cb26861750584@dark@2x.png,be25ba12eff8306fda8cb26861750584@dark@3x.png"},"200330":{"name":"b868af8e479bdfb581936ea0d0a35f51","files":"b868af8e479bdfb581936ea0d0a35f51@2x.png,b868af8e479bdfb581936ea0d0a35f51@3x.png,b868af8e479bdfb581936ea0d0a35f51@dark@2x.png,b868af8e479bdfb581936ea0d0a35f51@dark@3x.png"},"200332":{"name":"db09becff59298d758742757802ad02c","files":"db09becff59298d758742757802ad02c@2x.png,db09becff59298d758742757802ad02c@3x.png,db09becff59298d758742757802ad02c@dark@2x.png,db09becff59298d758742757802ad02c@dark@3x.png"},"200334":{"name":"dd0fa105b13a3e6f4bc01f39e95c8ebd","files":"dd0fa105b13a3e6f4bc01f39e95c8ebd@2x.png,dd0fa105b13a3e6f4bc01f39e95c8ebd@3x.png,dd0fa105b13a3e6f4bc01f39e95c8ebd@dark@2x.png,dd0fa105b13a3e6f4bc01f39e95c8ebd@dark@3x.png"},"200351":{"name":"2b838cbe135b907fb34159794b584c01","files":"2b838cbe135b907fb34159794b584c01@2x.webp,2b838cbe135b907fb34159794b584c01@3x.webp"},"200353":{"name":"b76eb989ef8ebe5162d23fb79c26fdde","files":"b76eb989ef8ebe5162d23fb79c26fdde@2x.webp,b76eb989ef8ebe5162d23fb79c26fdde@3x.webp"},"200355":{"name":"75a6edecd34b71deaa30b03bc67d5efb","files":"75a6edecd34b71deaa30b03bc67d5efb@2x.webp,75a6edecd34b71deaa30b03bc67d5efb@3x.webp"},"200356":{"name":"f83f718998772469ad96f640e43266e6","files":"f83f718998772469ad96f640e43266e6@2x.webp,f83f718998772469ad96f640e43266e6@3x.webp"},"200359":{"name":"a65f29fc406a834886a63738b9b6e2d8","files":"a65f29fc406a834886a63738b9b6e2d8@2x.webp,a65f29fc406a834886a63738b9b6e2d8@3x.webp"},"200360":{"name":"a0e9a427a8a8adc83bdd9f1fae3887b8","files":"a0e9a427a8a8adc83bdd9f1fae3887b8@2x.webp,a0e9a427a8a8adc83bdd9f1fae3887b8@3x.webp"},"200361":{"name":"fd89d70b71eaebbf2ff264e2ebf14004","files":"fd89d70b71eaebbf2ff264e2ebf14004@2x.webp,fd89d70b71eaebbf2ff264e2ebf14004@3x.webp"},"200362":{"name":"cecc89573126da56aec9deb93ae44682","files":"cecc89573126da56aec9deb93ae44682@2x.webp,cecc89573126da56aec9deb93ae44682@3x.webp"},"200364":{"name":"9025e5fc3d239e216e6474637a771c7b","files":"9025e5fc3d239e216e6474637a771c7b@2x.webp,9025e5fc3d239e216e6474637a771c7b@3x.webp"},"200366":{"name":"b465ae7c6477d2788eace93fdd35e1c7","files":"b465ae7c6477d2788eace93fdd35e1c7@2x.webp,b465ae7c6477d2788eace93fdd35e1c7@3x.webp"},"200368":{"name":"f2a5460c6b5c110b328aeacd9770d696","files":"f2a5460c6b5c110b328aeacd9770d696@2x.webp,f2a5460c6b5c110b328aeacd9770d696@3x.webp"},"200370":{"name":"3fd48cfa30e75a022558d801956ec10d","files":"3fd48cfa30e75a022558d801956ec10d@2x.webp,3fd48cfa30e75a022558d801956ec10d@3x.webp"},"200372":{"name":"3d7f80a3308009c951bde717573012d8","files":"3d7f80a3308009c951bde717573012d8@2x.webp,3d7f80a3308009c951bde717573012d8@3x.webp"},"200374":{"name":"3a875593fdd5200f80a6f8cb699358ab","files":"3a875593fdd5200f80a6f8cb699358ab@2x.webp,3a875593fdd5200f80a6f8cb699358ab@3x.webp"},"200376":{"name":"5ea9665941b640fedc827173a93ce9a0","files":"5ea9665941b640fedc827173a93ce9a0@2x.webp,5ea9665941b640fedc827173a93ce9a0@3x.webp"},"200378":{"name":"79143554e93abe41ee4edaf98ba97b84","files":"79143554e93abe41ee4edaf98ba97b84@2x.webp,79143554e93abe41ee4edaf98ba97b84@3x.webp"},"200380":{"name":"a896e977ba0243ffb3c958cb0ad566e7","files":"a896e977ba0243ffb3c958cb0ad566e7@2x.webp,a896e977ba0243ffb3c958cb0ad566e7@3x.webp"},"200382":{"name":"9928e4e60b6bcf84a24b89c733cf8a20","files":"9928e4e60b6bcf84a24b89c733cf8a20@2x.webp,9928e4e60b6bcf84a24b89c733cf8a20@3x.webp"},"200383":{"name":"1e44f305ccbd3ca047393e01cd2ae365","files":"1e44f305ccbd3ca047393e01cd2ae365@2x.png,1e44f305ccbd3ca047393e01cd2ae365@3x.png"},"200384":{"name":"2bcdb5093cdf198623b7efa7929fb521","files":"2bcdb5093cdf198623b7efa7929fb521@2x.webp,2bcdb5093cdf198623b7efa7929fb521@3x.webp"},"200386":{"name":"7ffb40a545a5016e214da19f032c3682","files":"7ffb40a545a5016e214da19f032c3682@2x.webp,7ffb40a545a5016e214da19f032c3682@3x.webp"},"200388":{"name":"281f3564a1195cf8bbb7e056f175ee1a","files":"281f3564a1195cf8bbb7e056f175ee1a@2x.webp,281f3564a1195cf8bbb7e056f175ee1a@3x.webp"},"200390":{"name":"05fee6af1402f1e21e37dc7e1e6bde2f","files":"05fee6af1402f1e21e37dc7e1e6bde2f@2x.webp,05fee6af1402f1e21e37dc7e1e6bde2f@3x.webp"},"200392":{"name":"3772dbb8967c3822595e72cb34daf96e","files":"3772dbb8967c3822595e72cb34daf96e@2x.png,3772dbb8967c3822595e72cb34daf96e@3x.png"},"200394":{"name":"045d05ddc2fcf660b1b2983dc60e89f4","files":"045d05ddc2fcf660b1b2983dc60e89f4@2x.png,045d05ddc2fcf660b1b2983dc60e89f4@3x.png"},"200396":{"name":"46b875d6af052c42bceee39b4327739e","files":"46b875d6af052c42bceee39b4327739e@2x.png,46b875d6af052c42bceee39b4327739e@3x.png"},"200401":{"name":"ff4f7eb6f7354f25a36c90942277e0f4","files":"ff4f7eb6f7354f25a36c90942277e0f4@2x.webp,ff4f7eb6f7354f25a36c90942277e0f4@3x.webp,ff4f7eb6f7354f25a36c90942277e0f4@dark@2x.webp,ff4f7eb6f7354f25a36c90942277e0f4@dark@3x.webp"},"200402":{"name":"7dc815ccccb592980bba4d8f9bbfcd0c","files":"7dc815ccccb592980bba4d8f9bbfcd0c@2x.webp,7dc815ccccb592980bba4d8f9bbfcd0c@3x.webp,7dc815ccccb592980bba4d8f9bbfcd0c@dark@2x.webp,7dc815ccccb592980bba4d8f9bbfcd0c@dark@3x.webp"},"200403":{"name":"077773a61efe6cb4e20abd4cf302dd04","files":"077773a61efe6cb4e20abd4cf302dd04@2x.webp,077773a61efe6cb4e20abd4cf302dd04@3x.webp,077773a61efe6cb4e20abd4cf302dd04@dark@2x.webp,077773a61efe6cb4e20abd4cf302dd04@dark@3x.webp"},"200404":{"name":"7ad8b01261052647d71b64a5437643cf","files":"7ad8b01261052647d71b64a5437643cf@2x.webp,7ad8b01261052647d71b64a5437643cf@3x.webp,7ad8b01261052647d71b64a5437643cf@dark@2x.webp,7ad8b01261052647d71b64a5437643cf@dark@3x.webp"},"200405":{"name":"ae12da3849f333d71376ae4e3b6b491b","files":"ae12da3849f333d71376ae4e3b6b491b@2x.webp,ae12da3849f333d71376ae4e3b6b491b@3x.webp,ae12da3849f333d71376ae4e3b6b491b@dark@2x.webp,ae12da3849f333d71376ae4e3b6b491b@dark@3x.webp"},"200406":{"name":"7ae7c8e5d16b7515b71d97abb1e9e80f","files":"7ae7c8e5d16b7515b71d97abb1e9e80f@2x.webp,7ae7c8e5d16b7515b71d97abb1e9e80f@3x.webp,7ae7c8e5d16b7515b71d97abb1e9e80f@dark@2x.webp,7ae7c8e5d16b7515b71d97abb1e9e80f@dark@3x.webp"},"200407":{"name":"9642078df71da0c8d4ef362f2e6353a2","files":"9642078df71da0c8d4ef362f2e6353a2@2x.webp,9642078df71da0c8d4ef362f2e6353a2@3x.webp,9642078df71da0c8d4ef362f2e6353a2@dark@2x.webp,9642078df71da0c8d4ef362f2e6353a2@dark@3x.webp"},"200408":{"name":"fc43cf389dd4a30d19d65a309d9bbb04","files":"fc43cf389dd4a30d19d65a309d9bbb04@2x.webp,fc43cf389dd4a30d19d65a309d9bbb04@3x.webp"},"200409":{"name":"ef4071460347910f74f19bf70b837d52","files":"ef4071460347910f74f19bf70b837d52@2x.webp,ef4071460347910f74f19bf70b837d52@3x.webp"},"200410":{"name":"4154df6704c21143e65eda4d7105d6d8","files":"4154df6704c21143e65eda4d7105d6d8@2x.webp,4154df6704c21143e65eda4d7105d6d8@3x.webp"},"200411":{"name":"4e604219e44016e12e51f333468f37ba","files":"4e604219e44016e12e51f333468f37ba@2x.webp,4e604219e44016e12e51f333468f37ba@3x.webp"},"200412":{"name":"514540e5b72d1acce5b7bf5490426b53","files":"514540e5b72d1acce5b7bf5490426b53@2x.webp,514540e5b72d1acce5b7bf5490426b53@3x.webp"},"200413":{"name":"6e9b44275c566c3ca9924ba5b87a79ac","files":"6e9b44275c566c3ca9924ba5b87a79ac@2x.webp,6e9b44275c566c3ca9924ba5b87a79ac@3x.webp"},"200414":{"name":"824141eac143f38f6624c33a4242dd3f","files":"824141eac143f38f6624c33a4242dd3f@2x.webp,824141eac143f38f6624c33a4242dd3f@3x.webp"},"200415":{"name":"b21a58eb8556cfcd267423e13b23aa74","files":"b21a58eb8556cfcd267423e13b23aa74@2x.png,b21a58eb8556cfcd267423e13b23aa74@3x.png,b21a58eb8556cfcd267423e13b23aa74@dark@2x.png,b21a58eb8556cfcd267423e13b23aa74@dark@3x.png"},"200416":{"name":"936c749c9f0b63d04b24277809c19da0","files":"936c749c9f0b63d04b24277809c19da0@2x.png,936c749c9f0b63d04b24277809c19da0@3x.png"},"200417":{"name":"8642e88ac86d5b11cf15404dc5b2e46b","files":"8642e88ac86d5b11cf15404dc5b2e46b@2x.png,8642e88ac86d5b11cf15404dc5b2e46b@3x.png,8642e88ac86d5b11cf15404dc5b2e46b@dark@2x.png,8642e88ac86d5b11cf15404dc5b2e46b@dark@3x.png"},"200418":{"name":"fa88b5faec06c1ead43ed4a2ee0431d3","files":"fa88b5faec06c1ead43ed4a2ee0431d3@2x.png,fa88b5faec06c1ead43ed4a2ee0431d3@3x.png"},"200419":{"name":"96365ebc4a14c2d7f744f6dea90515b4","files":"96365ebc4a14c2d7f744f6dea90515b4@2x.png,96365ebc4a14c2d7f744f6dea90515b4@3x.png,96365ebc4a14c2d7f744f6dea90515b4@dark@2x.png,96365ebc4a14c2d7f744f6dea90515b4@dark@3x.png"},"200420":{"name":"11121a7da593cf7b5e34e85af27c49c9","files":"11121a7da593cf7b5e34e85af27c49c9@2x.png,11121a7da593cf7b5e34e85af27c49c9@3x.png"},"200421":{"name":"5260f0293cb75b69438dfd25d328be9d","files":"5260f0293cb75b69438dfd25d328be9d@2x.png,5260f0293cb75b69438dfd25d328be9d@3x.png,5260f0293cb75b69438dfd25d328be9d@dark@2x.png,5260f0293cb75b69438dfd25d328be9d@dark@3x.png"},"200422":{"name":"eb3aab1d56b009dd75bbb7e2a9a5d0e8","files":"eb3aab1d56b009dd75bbb7e2a9a5d0e8@2x.png,eb3aab1d56b009dd75bbb7e2a9a5d0e8@3x.png"},"200517":{"name":"3fe9c48fc33a0659429744be7e2b1658","files":"3fe9c48fc33a0659429744be7e2b1658@2x.png,3fe9c48fc33a0659429744be7e2b1658@3x.png,3fe9c48fc33a0659429744be7e2b1658@dark@2x.png,3fe9c48fc33a0659429744be7e2b1658@dark@3x.png"},"200518":{"name":"0517872bd9a830e2e006296fe011757d","files":"0517872bd9a830e2e006296fe011757d@2x.png,0517872bd9a830e2e006296fe011757d@3x.png"},"200519":{"name":"5c1ffa1ab8e63c4996a7316f01093fc8","files":"5c1ffa1ab8e63c4996a7316f01093fc8@2x.png,5c1ffa1ab8e63c4996a7316f01093fc8@3x.png,5c1ffa1ab8e63c4996a7316f01093fc8@dark@2x.png,5c1ffa1ab8e63c4996a7316f01093fc8@dark@3x.png"},"200520":{"name":"227dc579dbbade0bd0100b4e2eae3fa9","files":"227dc579dbbade0bd0100b4e2eae3fa9@2x.png,227dc579dbbade0bd0100b4e2eae3fa9@3x.png"},"200521":{"name":"7fb07505f958df974b5ae1bbd58ead2d","files":"7fb07505f958df974b5ae1bbd58ead2d@2x.png,7fb07505f958df974b5ae1bbd58ead2d@3x.png,7fb07505f958df974b5ae1bbd58ead2d@dark@2x.png,7fb07505f958df974b5ae1bbd58ead2d@dark@3x.png"},"200522":{"name":"93b46b3da2edb8e8cebd4a9ead4179df","files":"93b46b3da2edb8e8cebd4a9ead4179df@2x.png,93b46b3da2edb8e8cebd4a9ead4179df@3x.png"},"200599":{"name":"524ec94c3b2ef19335632dfa0e03a785","files":"524ec94c3b2ef19335632dfa0e03a785@2x.png,524ec94c3b2ef19335632dfa0e03a785@3x.png"},"202000":{"name":"e7352a4aeab411678a6dcc62992c249b","files":"e7352a4aeab411678a6dcc62992c249b@2x.png,e7352a4aeab411678a6dcc62992c249b@3x.png"},"202002":{"name":"84cc8b9c47d82dc5d099cf10a7ab31f5","files":"84cc8b9c47d82dc5d099cf10a7ab31f5@2x.png,84cc8b9c47d82dc5d099cf10a7ab31f5@3x.png"},"202004":{"name":"df0015c04954bf2b0e05469d9619d5a9","files":"df0015c04954bf2b0e05469d9619d5a9@2x.png,df0015c04954bf2b0e05469d9619d5a9@3x.png"}},"xml":"e0fc2df6f049760e0fbd9628610b7d86.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/27e67b4863767954f24663bfe6fa70ed.zip"},"200257":{"res":{"200501":{"name":"11339fd17cef8f3ad4103bc7ff15bbbb","files":"11339fd17cef8f3ad4103bc7ff15bbbb@2x.webp,11339fd17cef8f3ad4103bc7ff15bbbb@3x.webp,11339fd17cef8f3ad4103bc7ff15bbbb@dark@2x.webp,11339fd17cef8f3ad4103bc7ff15bbbb@dark@3x.webp"},"200502":{"name":"d8a25617405251aa9d7b08e46ab3a87e","files":"d8a25617405251aa9d7b08e46ab3a87e@2x.webp,d8a25617405251aa9d7b08e46ab3a87e@3x.webp,d8a25617405251aa9d7b08e46ab3a87e@dark@2x.webp,d8a25617405251aa9d7b08e46ab3a87e@dark@3x.webp"},"200503":{"name":"bf5f7accc47c6f9dd63ee18603312fa2","files":"bf5f7accc47c6f9dd63ee18603312fa2@2x.webp,bf5f7accc47c6f9dd63ee18603312fa2@3x.webp,bf5f7accc47c6f9dd63ee18603312fa2@dark@2x.webp,bf5f7accc47c6f9dd63ee18603312fa2@dark@3x.webp"},"200504":{"name":"10ad4988408dbd1a15a757b0ed5d195a","files":"10ad4988408dbd1a15a757b0ed5d195a@2x.webp,10ad4988408dbd1a15a757b0ed5d195a@3x.webp,10ad4988408dbd1a15a757b0ed5d195a@dark@2x.webp,10ad4988408dbd1a15a757b0ed5d195a@dark@3x.webp"},"200505":{"name":"f4791cfe9a8c3609666cc79f2f5f808a","files":"f4791cfe9a8c3609666cc79f2f5f808a@2x.webp,f4791cfe9a8c3609666cc79f2f5f808a@3x.webp,f4791cfe9a8c3609666cc79f2f5f808a@dark@2x.webp,f4791cfe9a8c3609666cc79f2f5f808a@dark@3x.webp"},"200506":{"name":"0c5d9dc05f7dab8cd9be57b63bd438aa","files":"0c5d9dc05f7dab8cd9be57b63bd438aa@2x.webp,0c5d9dc05f7dab8cd9be57b63bd438aa@3x.webp,0c5d9dc05f7dab8cd9be57b63bd438aa@dark@2x.webp,0c5d9dc05f7dab8cd9be57b63bd438aa@dark@3x.webp"},"200507":{"name":"de22dd0818049868925285f926fc298a","files":"de22dd0818049868925285f926fc298a@2x.webp,de22dd0818049868925285f926fc298a@3x.webp,de22dd0818049868925285f926fc298a@dark@2x.webp,de22dd0818049868925285f926fc298a@dark@3x.webp"},"200508":{"name":"bf2dc1e12cc21ad56d92ae49479be4cb","files":"bf2dc1e12cc21ad56d92ae49479be4cb@2x.webp,bf2dc1e12cc21ad56d92ae49479be4cb@3x.webp"},"200509":{"name":"9b66307e72b7bc23ca126816d98d9a32","files":"9b66307e72b7bc23ca126816d98d9a32@2x.webp,9b66307e72b7bc23ca126816d98d9a32@3x.webp"},"200510":{"name":"182aa732400bf50e0db206ec6da8221a","files":"182aa732400bf50e0db206ec6da8221a@2x.webp,182aa732400bf50e0db206ec6da8221a@3x.webp"},"200511":{"name":"bd3acb4578778c434fe3529891c79ab2","files":"bd3acb4578778c434fe3529891c79ab2@2x.webp,bd3acb4578778c434fe3529891c79ab2@3x.webp"},"200512":{"name":"df67eeeaa695d22546da6f7909a477db","files":"df67eeeaa695d22546da6f7909a477db@2x.webp,df67eeeaa695d22546da6f7909a477db@3x.webp"},"200513":{"name":"da6b672c6bf20855439a8062addc3158","files":"da6b672c6bf20855439a8062addc3158@2x.webp,da6b672c6bf20855439a8062addc3158@3x.webp"},"200514":{"name":"802d8362f63cd85e83c666f96d256e7c","files":"802d8362f63cd85e83c666f96d256e7c@2x.webp,802d8362f63cd85e83c666f96d256e7c@3x.webp"},"200515":{"name":"5bfe2816c1736e9965c94a0f1744befd","files":"5bfe2816c1736e9965c94a0f1744befd@2x.png,5bfe2816c1736e9965c94a0f1744befd@3x.png,5bfe2816c1736e9965c94a0f1744befd@dark@2x.png,5bfe2816c1736e9965c94a0f1744befd@dark@3x.png"},"200516":{"name":"1030787cfa228464173cb38a4946eabc","files":"1030787cfa228464173cb38a4946eabc@2x.png,1030787cfa228464173cb38a4946eabc@3x.png"},"200530":{"name":"60c2a960a78c714d9d5c61bb1ec2951d","files":"60c2a960a78c714d9d5c61bb1ec2951d@2x.webp,60c2a960a78c714d9d5c61bb1ec2951d@3x.webp,60c2a960a78c714d9d5c61bb1ec2951d@dark@2x.webp,60c2a960a78c714d9d5c61bb1ec2951d@dark@3x.webp"},"200531":{"name":"276af6af5625ac6a090fcbdb41a931b1","files":"276af6af5625ac6a090fcbdb41a931b1@2x.webp,276af6af5625ac6a090fcbdb41a931b1@3x.webp,276af6af5625ac6a090fcbdb41a931b1@dark@2x.webp,276af6af5625ac6a090fcbdb41a931b1@dark@3x.webp"},"200532":{"name":"84fb6062c7d90403e9052b6d8cd78b87","files":"84fb6062c7d90403e9052b6d8cd78b87@2x.webp,84fb6062c7d90403e9052b6d8cd78b87@3x.webp,84fb6062c7d90403e9052b6d8cd78b87@dark@2x.webp,84fb6062c7d90403e9052b6d8cd78b87@dark@3x.webp"},"200533":{"name":"612471c43e1ce383515afd5a13f4a015","files":"612471c43e1ce383515afd5a13f4a015@2x.webp,612471c43e1ce383515afd5a13f4a015@3x.webp,612471c43e1ce383515afd5a13f4a015@dark@2x.webp,612471c43e1ce383515afd5a13f4a015@dark@3x.webp"},"200534":{"name":"39f46f286301fbce1df1ed084bf89fff","files":"39f46f286301fbce1df1ed084bf89fff@2x.webp,39f46f286301fbce1df1ed084bf89fff@3x.webp,39f46f286301fbce1df1ed084bf89fff@dark@2x.webp,39f46f286301fbce1df1ed084bf89fff@dark@3x.webp"},"200535":{"name":"5378609cce43bbcc64aac3565887e7b9","files":"5378609cce43bbcc64aac3565887e7b9@2x.webp,5378609cce43bbcc64aac3565887e7b9@3x.webp,5378609cce43bbcc64aac3565887e7b9@dark@2x.webp,5378609cce43bbcc64aac3565887e7b9@dark@3x.webp"},"200536":{"name":"b656f01c445263097e83730196914b59","files":"b656f01c445263097e83730196914b59@2x.webp,b656f01c445263097e83730196914b59@3x.webp,b656f01c445263097e83730196914b59@dark@2x.webp,b656f01c445263097e83730196914b59@dark@3x.webp"},"200537":{"name":"22900c397cbd099a9f8e3b5026d738a5","files":"22900c397cbd099a9f8e3b5026d738a5@2x.webp,22900c397cbd099a9f8e3b5026d738a5@3x.webp,22900c397cbd099a9f8e3b5026d738a5@dark@2x.webp,22900c397cbd099a9f8e3b5026d738a5@dark@3x.webp"},"200538":{"name":"645013db8cfb4a650c6bdb8261d9c67f","files":"645013db8cfb4a650c6bdb8261d9c67f@2x.webp,645013db8cfb4a650c6bdb8261d9c67f@3x.webp,645013db8cfb4a650c6bdb8261d9c67f@dark@2x.webp,645013db8cfb4a650c6bdb8261d9c67f@dark@3x.webp"},"200539":{"name":"741661f723f5dd40709e301058a87ca1","files":"741661f723f5dd40709e301058a87ca1@2x.webp,741661f723f5dd40709e301058a87ca1@3x.webp,741661f723f5dd40709e301058a87ca1@dark@2x.webp,741661f723f5dd40709e301058a87ca1@dark@3x.webp"},"200540":{"name":"a659bf7fa7eea226545cdd75fa4da1a3","files":"a659bf7fa7eea226545cdd75fa4da1a3@2x.webp,a659bf7fa7eea226545cdd75fa4da1a3@3x.webp,a659bf7fa7eea226545cdd75fa4da1a3@dark@2x.webp,a659bf7fa7eea226545cdd75fa4da1a3@dark@3x.webp"},"200541":{"name":"9258c358e7c21bf04ee0e4c24ef50659","files":"9258c358e7c21bf04ee0e4c24ef50659@2x.webp,9258c358e7c21bf04ee0e4c24ef50659@3x.webp,9258c358e7c21bf04ee0e4c24ef50659@dark@2x.webp,9258c358e7c21bf04ee0e4c24ef50659@dark@3x.webp"},"200542":{"name":"7ce8d7a6bb420fd92abc46e9fb525d09","files":"7ce8d7a6bb420fd92abc46e9fb525d09@2x.webp,7ce8d7a6bb420fd92abc46e9fb525d09@3x.webp,7ce8d7a6bb420fd92abc46e9fb525d09@dark@2x.webp,7ce8d7a6bb420fd92abc46e9fb525d09@dark@3x.webp"},"200543":{"name":"a3c32e751ccfa13d1c94bdf83b01b523","files":"a3c32e751ccfa13d1c94bdf83b01b523@2x.webp,a3c32e751ccfa13d1c94bdf83b01b523@3x.webp,a3c32e751ccfa13d1c94bdf83b01b523@dark@2x.webp,a3c32e751ccfa13d1c94bdf83b01b523@dark@3x.webp"},"200544":{"name":"32b641a3dd662e2024aeb711aac48b37","files":"32b641a3dd662e2024aeb711aac48b37@2x.webp,32b641a3dd662e2024aeb711aac48b37@3x.webp,32b641a3dd662e2024aeb711aac48b37@dark@2x.webp,32b641a3dd662e2024aeb711aac48b37@dark@3x.webp"},"200545":{"name":"7cb5d9ffd93f52b88c57601dd95b3467","files":"7cb5d9ffd93f52b88c57601dd95b3467@2x.webp,7cb5d9ffd93f52b88c57601dd95b3467@3x.webp,7cb5d9ffd93f52b88c57601dd95b3467@dark@2x.webp,7cb5d9ffd93f52b88c57601dd95b3467@dark@3x.webp"},"200546":{"name":"49c37e9c39513ed0d38fce6f8a994ed5","files":"49c37e9c39513ed0d38fce6f8a994ed5@2x.webp,49c37e9c39513ed0d38fce6f8a994ed5@3x.webp,49c37e9c39513ed0d38fce6f8a994ed5@dark@2x.webp,49c37e9c39513ed0d38fce6f8a994ed5@dark@3x.webp"},"200547":{"name":"566bb48f7b2af92bfebb3e6e012be6ed","files":"566bb48f7b2af92bfebb3e6e012be6ed@2x.webp,566bb48f7b2af92bfebb3e6e012be6ed@3x.webp,566bb48f7b2af92bfebb3e6e012be6ed@dark@2x.webp,566bb48f7b2af92bfebb3e6e012be6ed@dark@3x.webp"},"200548":{"name":"5fd4afb50ddeb75c755f7ea453924996","files":"5fd4afb50ddeb75c755f7ea453924996@2x.webp,5fd4afb50ddeb75c755f7ea453924996@3x.webp,5fd4afb50ddeb75c755f7ea453924996@dark@2x.webp,5fd4afb50ddeb75c755f7ea453924996@dark@3x.webp"},"200549":{"name":"ae0e0bb421a8b77aa6066f2a33b691fc","files":"ae0e0bb421a8b77aa6066f2a33b691fc@2x.webp,ae0e0bb421a8b77aa6066f2a33b691fc@3x.webp,ae0e0bb421a8b77aa6066f2a33b691fc@dark@2x.webp,ae0e0bb421a8b77aa6066f2a33b691fc@dark@3x.webp"},"200550":{"name":"2dba9e582dd66dc63296b9917fe3b19b","files":"2dba9e582dd66dc63296b9917fe3b19b@2x.webp,2dba9e582dd66dc63296b9917fe3b19b@3x.webp,2dba9e582dd66dc63296b9917fe3b19b@dark@2x.webp,2dba9e582dd66dc63296b9917fe3b19b@dark@3x.webp"},"200551":{"name":"9eacd285eaa3807567ccec12eb1b5f3f","files":"9eacd285eaa3807567ccec12eb1b5f3f@2x.webp,9eacd285eaa3807567ccec12eb1b5f3f@3x.webp,9eacd285eaa3807567ccec12eb1b5f3f@dark@2x.webp,9eacd285eaa3807567ccec12eb1b5f3f@dark@3x.webp"},"200552":{"name":"53d9b1725becafe63cc586ca64cd6293","files":"53d9b1725becafe63cc586ca64cd6293@2x.png,53d9b1725becafe63cc586ca64cd6293@3x.png,53d9b1725becafe63cc586ca64cd6293@dark@2x.png,53d9b1725becafe63cc586ca64cd6293@dark@3x.png"},"200553":{"name":"ed09c458b07211ddd044c9c8915ff9e1","files":"ed09c458b07211ddd044c9c8915ff9e1@2x.png,ed09c458b07211ddd044c9c8915ff9e1@3x.png,ed09c458b07211ddd044c9c8915ff9e1@dark@2x.png,ed09c458b07211ddd044c9c8915ff9e1@dark@3x.png"},"200554":{"name":"e3cca42a050065b3eb40325dd6c1e445","files":"e3cca42a050065b3eb40325dd6c1e445@2x.png,e3cca42a050065b3eb40325dd6c1e445@3x.png,e3cca42a050065b3eb40325dd6c1e445@dark@2x.png,e3cca42a050065b3eb40325dd6c1e445@dark@3x.png"},"200560":{"name":"1680866e0ba53cda422a36c87b89d14b","files":"1680866e0ba53cda422a36c87b89d14b@2x.webp,1680866e0ba53cda422a36c87b89d14b@3x.webp"},"200561":{"name":"f79a95756358c82883ca62fa4d9df39e","files":"f79a95756358c82883ca62fa4d9df39e@2x.webp,f79a95756358c82883ca62fa4d9df39e@3x.webp"},"200562":{"name":"14f041ac7842b2d4fb6edf7abc53cbd6","files":"14f041ac7842b2d4fb6edf7abc53cbd6@2x.webp,14f041ac7842b2d4fb6edf7abc53cbd6@3x.webp"},"200563":{"name":"bc806306c5201640897e77f936df7798","files":"bc806306c5201640897e77f936df7798@2x.webp,bc806306c5201640897e77f936df7798@3x.webp"},"200564":{"name":"52e94eb3ff2aa2a0c99c810226b51f42","files":"52e94eb3ff2aa2a0c99c810226b51f42@2x.webp,52e94eb3ff2aa2a0c99c810226b51f42@3x.webp"},"200565":{"name":"c60e1c3a4d41d910d0b1ed33577bd627","files":"c60e1c3a4d41d910d0b1ed33577bd627@2x.webp,c60e1c3a4d41d910d0b1ed33577bd627@3x.webp"},"200566":{"name":"9c0443f7cf85c812a9ed94c6d068be06","files":"9c0443f7cf85c812a9ed94c6d068be06@2x.webp,9c0443f7cf85c812a9ed94c6d068be06@3x.webp"},"200567":{"name":"6814da58836e1b48b16275ad6d7645ea","files":"6814da58836e1b48b16275ad6d7645ea@2x.webp,6814da58836e1b48b16275ad6d7645ea@3x.webp"},"200568":{"name":"8bb362b25a1a5dba9eff3be7577fa999","files":"8bb362b25a1a5dba9eff3be7577fa999@2x.webp,8bb362b25a1a5dba9eff3be7577fa999@3x.webp"},"200569":{"name":"592b717c432d4e33953b909d8570c591","files":"592b717c432d4e33953b909d8570c591@2x.webp,592b717c432d4e33953b909d8570c591@3x.webp"},"200570":{"name":"19fedb8088953b27998f936637eb275d","files":"19fedb8088953b27998f936637eb275d@2x.webp,19fedb8088953b27998f936637eb275d@3x.webp"},"200571":{"name":"c3c914dba10f797ac7d0a4bf7cc677ca","files":"c3c914dba10f797ac7d0a4bf7cc677ca@2x.webp,c3c914dba10f797ac7d0a4bf7cc677ca@3x.webp"},"200572":{"name":"e5c25c684c9f25e1d9e51b8182413b80","files":"e5c25c684c9f25e1d9e51b8182413b80@2x.webp,e5c25c684c9f25e1d9e51b8182413b80@3x.webp"},"200573":{"name":"99805526ac3fba60462c0d4fe5617860","files":"99805526ac3fba60462c0d4fe5617860@2x.webp,99805526ac3fba60462c0d4fe5617860@3x.webp"},"200574":{"name":"129db31547bcf836dde4d87aa33cdeca","files":"129db31547bcf836dde4d87aa33cdeca@2x.webp,129db31547bcf836dde4d87aa33cdeca@3x.webp"},"200575":{"name":"07760669f65733ccb21d083cebf10015","files":"07760669f65733ccb21d083cebf10015@2x.webp,07760669f65733ccb21d083cebf10015@3x.webp"},"200576":{"name":"b32cbdcec4286449ee11c792ba0079ec","files":"b32cbdcec4286449ee11c792ba0079ec@2x.webp,b32cbdcec4286449ee11c792ba0079ec@3x.webp"},"200577":{"name":"66548fc9b4b09e36b847797a3528e72c","files":"66548fc9b4b09e36b847797a3528e72c@2x.webp,66548fc9b4b09e36b847797a3528e72c@3x.webp"},"200578":{"name":"bcd4194b4268e2b81373421cd3d04c5c","files":"bcd4194b4268e2b81373421cd3d04c5c@2x.webp,bcd4194b4268e2b81373421cd3d04c5c@3x.webp"},"200579":{"name":"ff03a62bd71b83d9041b1251ba8ba24f","files":"ff03a62bd71b83d9041b1251ba8ba24f@2x.webp,ff03a62bd71b83d9041b1251ba8ba24f@3x.webp"},"200580":{"name":"2be25b7bf311ebd38210c6de292ff486","files":"2be25b7bf311ebd38210c6de292ff486@2x.webp,2be25b7bf311ebd38210c6de292ff486@3x.webp"},"200581":{"name":"381ed7c4ce0dc38bdb5f995b2e488b6a","files":"381ed7c4ce0dc38bdb5f995b2e488b6a@2x.webp,381ed7c4ce0dc38bdb5f995b2e488b6a@3x.webp"},"200582":{"name":"3343c14705a2afe02050298bc8643ba8","files":"3343c14705a2afe02050298bc8643ba8@2x.png,3343c14705a2afe02050298bc8643ba8@3x.png"},"200583":{"name":"93a51f67ba52f2d48967eb183291e0f9","files":"93a51f67ba52f2d48967eb183291e0f9@2x.png,93a51f67ba52f2d48967eb183291e0f9@3x.png"},"200584":{"name":"ec604a3683a1deaa79fab759041db72e","files":"ec604a3683a1deaa79fab759041db72e@2x.png,ec604a3683a1deaa79fab759041db72e@3x.png"},"200599":{"name":"524ec94c3b2ef19335632dfa0e03a785","files":"524ec94c3b2ef19335632dfa0e03a785@2x.png,524ec94c3b2ef19335632dfa0e03a785@3x.png"}},"xml":"0dc2249670409c73b2904fc04f231ce4.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/1150fabd4ced905e943cf2844bd0949e.zip"},"200260":{"res":{"30306":{"name":"cc15ec258f82cbd22c3d16a1c0d9f5b0","files":"cc15ec258f82cbd22c3d16a1c0d9f5b0@2x.webp,cc15ec258f82cbd22c3d16a1c0d9f5b0@3x.webp"},"30307":{"name":"bb2bf598dc58cbf5b60e987e987c093d","files":"bb2bf598dc58cbf5b60e987e987c093d@2x.webp,bb2bf598dc58cbf5b60e987e987c093d@3x.webp"},"30308":{"name":"253b4ea273ba6d7c861de15acb8ccdf3","files":"253b4ea273ba6d7c861de15acb8ccdf3@2x.webp,253b4ea273ba6d7c861de15acb8ccdf3@3x.webp"},"30309":{"name":"94262bddb114f9d04770b996ad9be65d","files":"94262bddb114f9d04770b996ad9be65d@2x.webp,94262bddb114f9d04770b996ad9be65d@3x.webp"},"140550":{"name":"0c05b7e01b5528d095ec3209cef85b89","files":"0c05b7e01b5528d095ec3209cef85b89@2x.png,0c05b7e01b5528d095ec3209cef85b89@3x.png,0c05b7e01b5528d095ec3209cef85b89@dark@2x.png,0c05b7e01b5528d095ec3209cef85b89@dark@3x.png"}},"xml":"cf967e61a502f7378c67b422eb6b38e7.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/21b2d2a2f9e8ec5d729b07d3c3d7f8fb.zip"},"200261":{"res":{"30306":{"name":"cc15ec258f82cbd22c3d16a1c0d9f5b0","files":"cc15ec258f82cbd22c3d16a1c0d9f5b0@2x.webp,cc15ec258f82cbd22c3d16a1c0d9f5b0@3x.webp"},"30307":{"name":"bb2bf598dc58cbf5b60e987e987c093d","files":"bb2bf598dc58cbf5b60e987e987c093d@2x.webp,bb2bf598dc58cbf5b60e987e987c093d@3x.webp"},"30308":{"name":"253b4ea273ba6d7c861de15acb8ccdf3","files":"253b4ea273ba6d7c861de15acb8ccdf3@2x.webp,253b4ea273ba6d7c861de15acb8ccdf3@3x.webp"},"30309":{"name":"94262bddb114f9d04770b996ad9be65d","files":"94262bddb114f9d04770b996ad9be65d@2x.webp,94262bddb114f9d04770b996ad9be65d@3x.webp"},"140550":{"name":"0c05b7e01b5528d095ec3209cef85b89","files":"0c05b7e01b5528d095ec3209cef85b89@2x.png,0c05b7e01b5528d095ec3209cef85b89@3x.png,0c05b7e01b5528d095ec3209cef85b89@dark@2x.png,0c05b7e01b5528d095ec3209cef85b89@dark@3x.png"}},"xml":"eeb471a47eb84ef9f42ce0d3e06d8058.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/d26d3630a5a2eaa44799fa5c0cfc18ab.zip"},"200262":{"res":{"200272":{"name":"1465175b98cc7dd2f61ca69f998cdf01","files":"1465175b98cc7dd2f61ca69f998cdf01@2x.webp,1465175b98cc7dd2f61ca69f998cdf01@3x.webp,1465175b98cc7dd2f61ca69f998cdf01@dark@2x.webp,1465175b98cc7dd2f61ca69f998cdf01@dark@3x.webp"},"200274":{"name":"23c1c8c1535d52dd59994442da8fbca7","files":"23c1c8c1535d52dd59994442da8fbca7@2x.webp,23c1c8c1535d52dd59994442da8fbca7@3x.webp,23c1c8c1535d52dd59994442da8fbca7@dark@2x.webp,23c1c8c1535d52dd59994442da8fbca7@dark@3x.webp"},"200283":{"name":"523fa4032e8fddf1735233aec3a1cdf0","files":"523fa4032e8fddf1735233aec3a1cdf0@2x.webp,523fa4032e8fddf1735233aec3a1cdf0@3x.webp,523fa4032e8fddf1735233aec3a1cdf0@dark@2x.webp,523fa4032e8fddf1735233aec3a1cdf0@dark@3x.webp"},"200285":{"name":"8f2b4b71b32a73b9bb0e483866069efa","files":"8f2b4b71b32a73b9bb0e483866069efa@2x.png,8f2b4b71b32a73b9bb0e483866069efa@3x.png,8f2b4b71b32a73b9bb0e483866069efa@dark@2x.png,8f2b4b71b32a73b9bb0e483866069efa@dark@3x.png"},"200287":{"name":"6b9e55fa3fa6826a3d8301c1e39444c7","files":"6b9e55fa3fa6826a3d8301c1e39444c7@2x.png,6b9e55fa3fa6826a3d8301c1e39444c7@3x.png,6b9e55fa3fa6826a3d8301c1e39444c7@dark@2x.png,6b9e55fa3fa6826a3d8301c1e39444c7@dark@3x.png"},"200289":{"name":"4a027744b4fce5d632317022937508b9","files":"4a027744b4fce5d632317022937508b9@2x.png,4a027744b4fce5d632317022937508b9@3x.png,4a027744b4fce5d632317022937508b9@dark@2x.png,4a027744b4fce5d632317022937508b9@dark@3x.png"},"200291":{"name":"8784744fc57f86aeef0a732389d0d46a","files":"8784744fc57f86aeef0a732389d0d46a@2x.png,8784744fc57f86aeef0a732389d0d46a@3x.png,8784744fc57f86aeef0a732389d0d46a@dark@2x.png,8784744fc57f86aeef0a732389d0d46a@dark@3x.png"},"200293":{"name":"c92a6f02ebaf273ed2ed73cb10a0246d","files":"c92a6f02ebaf273ed2ed73cb10a0246d@2x.png,c92a6f02ebaf273ed2ed73cb10a0246d@3x.png,c92a6f02ebaf273ed2ed73cb10a0246d@dark@2x.png,c92a6f02ebaf273ed2ed73cb10a0246d@dark@3x.png"},"200295":{"name":"cb47a6dd477ce63d56faadf676d4f9db","files":"cb47a6dd477ce63d56faadf676d4f9db@2x.png,cb47a6dd477ce63d56faadf676d4f9db@3x.png,cb47a6dd477ce63d56faadf676d4f9db@dark@2x.png,cb47a6dd477ce63d56faadf676d4f9db@dark@3x.png"},"200297":{"name":"5fc8bb78802927f48ad485efb381d28c","files":"5fc8bb78802927f48ad485efb381d28c@2x.png,5fc8bb78802927f48ad485efb381d28c@3x.png,5fc8bb78802927f48ad485efb381d28c@dark@2x.png,5fc8bb78802927f48ad485efb381d28c@dark@3x.png"},"200299":{"name":"d5b739eef5d17e8ee07ea840789b4a97","files":"d5b739eef5d17e8ee07ea840789b4a97@2x.webp,d5b739eef5d17e8ee07ea840789b4a97@3x.webp,d5b739eef5d17e8ee07ea840789b4a97@dark@2x.webp,d5b739eef5d17e8ee07ea840789b4a97@dark@3x.webp"},"200301":{"name":"fb987c97be6c3da8c5dcbfa4b90bd746","files":"fb987c97be6c3da8c5dcbfa4b90bd746@2x.png,fb987c97be6c3da8c5dcbfa4b90bd746@3x.png,fb987c97be6c3da8c5dcbfa4b90bd746@dark@2x.png,fb987c97be6c3da8c5dcbfa4b90bd746@dark@3x.png"},"200305":{"name":"9441c41b5fe9c0de7240ab5c5b5ac571","files":"9441c41b5fe9c0de7240ab5c5b5ac571@2x.png,9441c41b5fe9c0de7240ab5c5b5ac571@3x.png,9441c41b5fe9c0de7240ab5c5b5ac571@dark@2x.png,9441c41b5fe9c0de7240ab5c5b5ac571@dark@3x.png"},"200307":{"name":"f2bc1d8ad9fe1b622adecd2fd70cbbb6","files":"f2bc1d8ad9fe1b622adecd2fd70cbbb6@2x.png,f2bc1d8ad9fe1b622adecd2fd70cbbb6@3x.png,f2bc1d8ad9fe1b622adecd2fd70cbbb6@dark@2x.png,f2bc1d8ad9fe1b622adecd2fd70cbbb6@dark@3x.png"},"200309":{"name":"250dcd31258cbcfc3b1e4b0f3f7daadc","files":"250dcd31258cbcfc3b1e4b0f3f7daadc@2x.png,250dcd31258cbcfc3b1e4b0f3f7daadc@3x.png,250dcd31258cbcfc3b1e4b0f3f7daadc@dark@2x.png,250dcd31258cbcfc3b1e4b0f3f7daadc@dark@3x.png"},"200311":{"name":"b7ea77e08f3ea4b755a75fb80356a23e","files":"b7ea77e08f3ea4b755a75fb80356a23e@2x.png,b7ea77e08f3ea4b755a75fb80356a23e@3x.png,b7ea77e08f3ea4b755a75fb80356a23e@dark@2x.png,b7ea77e08f3ea4b755a75fb80356a23e@dark@3x.png"},"200313":{"name":"20dafbab2431b3346ac44459ffdbd553","files":"20dafbab2431b3346ac44459ffdbd553@2x.png,20dafbab2431b3346ac44459ffdbd553@3x.png,20dafbab2431b3346ac44459ffdbd553@dark@2x.png,20dafbab2431b3346ac44459ffdbd553@dark@3x.png"},"200315":{"name":"175878900d3b6710157b6c225ce7cbec","files":"175878900d3b6710157b6c225ce7cbec@2x.png,175878900d3b6710157b6c225ce7cbec@3x.png,175878900d3b6710157b6c225ce7cbec@dark@2x.png,175878900d3b6710157b6c225ce7cbec@dark@3x.png"},"200317":{"name":"c715fc73303bae41857e0ad611ed45de","files":"c715fc73303bae41857e0ad611ed45de@2x.png,c715fc73303bae41857e0ad611ed45de@3x.png,c715fc73303bae41857e0ad611ed45de@dark@2x.png,c715fc73303bae41857e0ad611ed45de@dark@3x.png"},"200320":{"name":"96c62b3e917b45782ab6b4ec36afde87","files":"96c62b3e917b45782ab6b4ec36afde87@2x.webp,96c62b3e917b45782ab6b4ec36afde87@3x.webp,96c62b3e917b45782ab6b4ec36afde87@dark@2x.webp,96c62b3e917b45782ab6b4ec36afde87@dark@3x.webp"},"200321":{"name":"94fe6167d4512b9942af8857054c3563","files":"94fe6167d4512b9942af8857054c3563@2x.webp,94fe6167d4512b9942af8857054c3563@3x.webp,94fe6167d4512b9942af8857054c3563@dark@2x.webp,94fe6167d4512b9942af8857054c3563@dark@3x.webp"},"200322":{"name":"b04754658a6c2bf667dd931e3669d3ce","files":"b04754658a6c2bf667dd931e3669d3ce@2x.webp,b04754658a6c2bf667dd931e3669d3ce@3x.webp,b04754658a6c2bf667dd931e3669d3ce@dark@2x.webp,b04754658a6c2bf667dd931e3669d3ce@dark@3x.webp"},"200323":{"name":"e1f35338ccddd69ea4b80642e3f239d8","files":"e1f35338ccddd69ea4b80642e3f239d8@2x.webp,e1f35338ccddd69ea4b80642e3f239d8@3x.webp,e1f35338ccddd69ea4b80642e3f239d8@dark@2x.webp,e1f35338ccddd69ea4b80642e3f239d8@dark@3x.webp"},"200324":{"name":"db2360168a5fe8481f6dc2cdec9d7633","files":"db2360168a5fe8481f6dc2cdec9d7633@2x.webp,db2360168a5fe8481f6dc2cdec9d7633@3x.webp,db2360168a5fe8481f6dc2cdec9d7633@dark@2x.webp,db2360168a5fe8481f6dc2cdec9d7633@dark@3x.webp"},"200331":{"name":"b6dad609cff78e3963a6ccf36ec0144b","files":"b6dad609cff78e3963a6ccf36ec0144b@2x.png,b6dad609cff78e3963a6ccf36ec0144b@3x.png,b6dad609cff78e3963a6ccf36ec0144b@dark@2x.png,b6dad609cff78e3963a6ccf36ec0144b@dark@3x.png"},"200333":{"name":"dd6dd48e0ac43cb9cf0b8cc87f373841","files":"dd6dd48e0ac43cb9cf0b8cc87f373841@2x.png,dd6dd48e0ac43cb9cf0b8cc87f373841@3x.png,dd6dd48e0ac43cb9cf0b8cc87f373841@dark@2x.png,dd6dd48e0ac43cb9cf0b8cc87f373841@dark@3x.png"},"200335":{"name":"5d9ac4853ad1aa034898541ebab005cd","files":"5d9ac4853ad1aa034898541ebab005cd@2x.png,5d9ac4853ad1aa034898541ebab005cd@3x.png,5d9ac4853ad1aa034898541ebab005cd@dark@2x.png,5d9ac4853ad1aa034898541ebab005cd@dark@3x.png"},"200352":{"name":"2a7347a362208e9ce2ca7941f8611293","files":"2a7347a362208e9ce2ca7941f8611293@2x.webp,2a7347a362208e9ce2ca7941f8611293@3x.webp"},"200354":{"name":"f56e47feb9ae6b01facb3f7a6f697db9","files":"f56e47feb9ae6b01facb3f7a6f697db9@2x.webp,f56e47feb9ae6b01facb3f7a6f697db9@3x.webp"},"200357":{"name":"096d0922e502d94fb5c630d78b16b127","files":"096d0922e502d94fb5c630d78b16b127@2x.webp,096d0922e502d94fb5c630d78b16b127@3x.webp"},"200358":{"name":"b7d80b51c88c55fde5a41fd61d7e02d1","files":"b7d80b51c88c55fde5a41fd61d7e02d1@2x.webp,b7d80b51c88c55fde5a41fd61d7e02d1@3x.webp"},"200363":{"name":"d6f96016838716ff0f495ad6ea5f2c69","files":"d6f96016838716ff0f495ad6ea5f2c69@2x.webp,d6f96016838716ff0f495ad6ea5f2c69@3x.webp"},"200365":{"name":"526779327f5d871ab6b07b2b420b30f1","files":"526779327f5d871ab6b07b2b420b30f1@2x.png,526779327f5d871ab6b07b2b420b30f1@3x.png"},"200367":{"name":"7d6caf500ff237d5e1ee8adeccae47c6","files":"7d6caf500ff237d5e1ee8adeccae47c6@2x.png,7d6caf500ff237d5e1ee8adeccae47c6@3x.png"},"200369":{"name":"049180f4f46e88813801d1e944a1b8d3","files":"049180f4f46e88813801d1e944a1b8d3@2x.png,049180f4f46e88813801d1e944a1b8d3@3x.png"},"200371":{"name":"43d6cbef30d72fbb00befdeb39731837","files":"43d6cbef30d72fbb00befdeb39731837@2x.png,43d6cbef30d72fbb00befdeb39731837@3x.png"},"200373":{"name":"47a87273a5e7c0c7a3ebc21ff32047ee","files":"47a87273a5e7c0c7a3ebc21ff32047ee@2x.png,47a87273a5e7c0c7a3ebc21ff32047ee@3x.png"},"200375":{"name":"b4efc90c9c4812706953cc22f5f51fb5","files":"b4efc90c9c4812706953cc22f5f51fb5@2x.png,b4efc90c9c4812706953cc22f5f51fb5@3x.png"},"200377":{"name":"8f8c9d681c4ef545e0bae547b0056722","files":"8f8c9d681c4ef545e0bae547b0056722@2x.png,8f8c9d681c4ef545e0bae547b0056722@3x.png"},"200379":{"name":"e5e2b1a605b415195779164f20c1a860","files":"e5e2b1a605b415195779164f20c1a860@2x.webp,e5e2b1a605b415195779164f20c1a860@3x.webp"},"200381":{"name":"2740b1d66bee5c680b74fd4f6a6b2e4c","files":"2740b1d66bee5c680b74fd4f6a6b2e4c@2x.png,2740b1d66bee5c680b74fd4f6a6b2e4c@3x.png"},"200385":{"name":"eb53eea76af2c3c01e3a271a7e1c1200","files":"eb53eea76af2c3c01e3a271a7e1c1200@2x.png,eb53eea76af2c3c01e3a271a7e1c1200@3x.png"},"200387":{"name":"45169e5b7dd7c5e2831d3fcb05d5d58b","files":"45169e5b7dd7c5e2831d3fcb05d5d58b@2x.png,45169e5b7dd7c5e2831d3fcb05d5d58b@3x.png"},"200389":{"name":"f4322b3dc9bd299a494734a39f724165","files":"f4322b3dc9bd299a494734a39f724165@2x.png,f4322b3dc9bd299a494734a39f724165@3x.png"},"200391":{"name":"f28e6dedde26b35d16868c72454f90dc","files":"f28e6dedde26b35d16868c72454f90dc@2x.png,f28e6dedde26b35d16868c72454f90dc@3x.png"},"200393":{"name":"26fdc818e76f6530b1f2cad6e7da2ce6","files":"26fdc818e76f6530b1f2cad6e7da2ce6@2x.png,26fdc818e76f6530b1f2cad6e7da2ce6@3x.png"},"200395":{"name":"50e1b470efadbbcc3cfa6224dee36d45","files":"50e1b470efadbbcc3cfa6224dee36d45@2x.png,50e1b470efadbbcc3cfa6224dee36d45@3x.png"},"200397":{"name":"0fc4b092e62861a0361cadece5d65bb3","files":"0fc4b092e62861a0361cadece5d65bb3@2x.png,0fc4b092e62861a0361cadece5d65bb3@3x.png"},"200398":{"name":"42a741445cf17550fad25819d0627bcd","files":"42a741445cf17550fad25819d0627bcd@2x.webp,42a741445cf17550fad25819d0627bcd@3x.webp"},"200399":{"name":"0eee54cf4852648c2cd998f08656ed5b","files":"0eee54cf4852648c2cd998f08656ed5b@2x.webp,0eee54cf4852648c2cd998f08656ed5b@3x.webp"},"200400":{"name":"87c66996a844871a9f580e56feb2eb4e","files":"87c66996a844871a9f580e56feb2eb4e@2x.webp,87c66996a844871a9f580e56feb2eb4e@3x.webp"},"200537":{"name":"22900c397cbd099a9f8e3b5026d738a5","files":"22900c397cbd099a9f8e3b5026d738a5@2x.webp,22900c397cbd099a9f8e3b5026d738a5@3x.webp,22900c397cbd099a9f8e3b5026d738a5@dark@2x.webp,22900c397cbd099a9f8e3b5026d738a5@dark@3x.webp"},"200567":{"name":"6814da58836e1b48b16275ad6d7645ea","files":"6814da58836e1b48b16275ad6d7645ea@2x.webp,6814da58836e1b48b16275ad6d7645ea@3x.webp"},"200601":{"name":"0c3f0fbf37f0284795f904c8bf18f764","files":"0c3f0fbf37f0284795f904c8bf18f764@2x.webp,0c3f0fbf37f0284795f904c8bf18f764@3x.webp,0c3f0fbf37f0284795f904c8bf18f764@dark@2x.webp,0c3f0fbf37f0284795f904c8bf18f764@dark@3x.webp"},"200602":{"name":"82f8a4fb3b053eec566e510b17770511","files":"82f8a4fb3b053eec566e510b17770511@2x.webp,82f8a4fb3b053eec566e510b17770511@3x.webp,82f8a4fb3b053eec566e510b17770511@dark@2x.webp,82f8a4fb3b053eec566e510b17770511@dark@3x.webp"},"200603":{"name":"3fad8ba4e8d91b461aa16a47bbce0697","files":"3fad8ba4e8d91b461aa16a47bbce0697@2x.webp,3fad8ba4e8d91b461aa16a47bbce0697@3x.webp,3fad8ba4e8d91b461aa16a47bbce0697@dark@2x.webp,3fad8ba4e8d91b461aa16a47bbce0697@dark@3x.webp"},"200604":{"name":"adc00b089028cb7ccd3dd83fe194c22a","files":"adc00b089028cb7ccd3dd83fe194c22a@2x.webp,adc00b089028cb7ccd3dd83fe194c22a@3x.webp,adc00b089028cb7ccd3dd83fe194c22a@dark@2x.webp,adc00b089028cb7ccd3dd83fe194c22a@dark@3x.webp"},"200605":{"name":"98d60ab2841ca0bc2f04a418d994518d","files":"98d60ab2841ca0bc2f04a418d994518d@2x.webp,98d60ab2841ca0bc2f04a418d994518d@3x.webp,98d60ab2841ca0bc2f04a418d994518d@dark@2x.webp,98d60ab2841ca0bc2f04a418d994518d@dark@3x.webp"},"200606":{"name":"eb161215c00e7b75aac47cc2263604ca","files":"eb161215c00e7b75aac47cc2263604ca@2x.webp,eb161215c00e7b75aac47cc2263604ca@3x.webp,eb161215c00e7b75aac47cc2263604ca@dark@2x.webp,eb161215c00e7b75aac47cc2263604ca@dark@3x.webp"},"200607":{"name":"0849299deb512f3847fdff8d1030e03d","files":"0849299deb512f3847fdff8d1030e03d@2x.png,0849299deb512f3847fdff8d1030e03d@3x.png,0849299deb512f3847fdff8d1030e03d@dark@2x.png,0849299deb512f3847fdff8d1030e03d@dark@3x.png"},"200608":{"name":"15fc71c6177d63a083491827432eb17d","files":"15fc71c6177d63a083491827432eb17d@2x.png,15fc71c6177d63a083491827432eb17d@3x.png,15fc71c6177d63a083491827432eb17d@dark@2x.png,15fc71c6177d63a083491827432eb17d@dark@3x.png"},"200609":{"name":"0c947386d0a9f0daf397ce405a592e78","files":"0c947386d0a9f0daf397ce405a592e78@2x.png,0c947386d0a9f0daf397ce405a592e78@3x.png,0c947386d0a9f0daf397ce405a592e78@dark@2x.png,0c947386d0a9f0daf397ce405a592e78@dark@3x.png"},"200610":{"name":"85afc658b4426b1e4dc41a3d74658248","files":"85afc658b4426b1e4dc41a3d74658248@2x.png,85afc658b4426b1e4dc41a3d74658248@3x.png,85afc658b4426b1e4dc41a3d74658248@dark@2x.png,85afc658b4426b1e4dc41a3d74658248@dark@3x.png"},"200611":{"name":"68eccd4e6caf1c073cf6c6f3cd042010","files":"68eccd4e6caf1c073cf6c6f3cd042010@2x.png,68eccd4e6caf1c073cf6c6f3cd042010@3x.png"},"200612":{"name":"362dccfebe331c2cbb5347ea8350d5c8","files":"362dccfebe331c2cbb5347ea8350d5c8@2x.png,362dccfebe331c2cbb5347ea8350d5c8@3x.png"},"200701":{"name":"ec610c2b9a633df4dab8303daa65f17d","files":"ec610c2b9a633df4dab8303daa65f17d@2x.webp,ec610c2b9a633df4dab8303daa65f17d@3x.webp"},"200702":{"name":"e0540ea2689da723da874b5b02604ca0","files":"e0540ea2689da723da874b5b02604ca0@2x.webp,e0540ea2689da723da874b5b02604ca0@3x.webp"},"200703":{"name":"07fbda3f20a346312c44c155ab16ed86","files":"07fbda3f20a346312c44c155ab16ed86@2x.webp,07fbda3f20a346312c44c155ab16ed86@3x.webp"},"200704":{"name":"e619b875d44b0a61e209ea49a95da6d2","files":"e619b875d44b0a61e209ea49a95da6d2@2x.webp,e619b875d44b0a61e209ea49a95da6d2@3x.webp"},"200705":{"name":"22d44690f51d9e01db82446907d00b1c","files":"22d44690f51d9e01db82446907d00b1c@2x.webp,22d44690f51d9e01db82446907d00b1c@3x.webp"},"200706":{"name":"22eb32477c2a04ae891d11caa94ccaa8","files":"22eb32477c2a04ae891d11caa94ccaa8@2x.webp,22eb32477c2a04ae891d11caa94ccaa8@3x.webp"},"200707":{"name":"de34929943ab652e3cffc73430a518e8","files":"de34929943ab652e3cffc73430a518e8@2x.png,de34929943ab652e3cffc73430a518e8@3x.png"},"200708":{"name":"57546a1e984d11954051cffeeda71e2e","files":"57546a1e984d11954051cffeeda71e2e@2x.png,57546a1e984d11954051cffeeda71e2e@3x.png"},"200709":{"name":"fc2e2dd879aa7116005a9bd90c2c93a3","files":"fc2e2dd879aa7116005a9bd90c2c93a3@2x.png,fc2e2dd879aa7116005a9bd90c2c93a3@3x.png"},"200710":{"name":"3662b6f8fd98fe31c3a17b910f86baed","files":"3662b6f8fd98fe31c3a17b910f86baed@2x.png,3662b6f8fd98fe31c3a17b910f86baed@3x.png"},"202001":{"name":"8945b967f878fd6fd0b6f45510212077","files":"8945b967f878fd6fd0b6f45510212077@2x.png,8945b967f878fd6fd0b6f45510212077@3x.png"},"202003":{"name":"46012ec3110f45bbc6c6ec6fd339836b","files":"46012ec3110f45bbc6c6ec6fd339836b@2x.png,46012ec3110f45bbc6c6ec6fd339836b@3x.png"},"202005":{"name":"984eb290656b222dd165c03b14522343","files":"984eb290656b222dd165c03b14522343@2x.png,984eb290656b222dd165c03b14522343@3x.png"}},"xml":"5937224f2afa90e570641f3ff5cefced.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/020c5189c6505d9941be8009f5a42a63.zip"},"200263":{"res":{"200258":{"name":"22761a7e5e54263d79e031524f2dcdba","files":"22761a7e5e54263d79e031524f2dcdba@2x.webp,22761a7e5e54263d79e031524f2dcdba@3x.webp,22761a7e5e54263d79e031524f2dcdba@dark@2x.webp,22761a7e5e54263d79e031524f2dcdba@dark@3x.webp"},"200259":{"name":"6d2aa2aed44469c7195dd702da660b02","files":"6d2aa2aed44469c7195dd702da660b02@2x.webp,6d2aa2aed44469c7195dd702da660b02@3x.webp,6d2aa2aed44469c7195dd702da660b02@dark@2x.webp,6d2aa2aed44469c7195dd702da660b02@dark@3x.webp"},"200349":{"name":"c69d99e8ca0df41cef8370c77d94769f","files":"c69d99e8ca0df41cef8370c77d94769f@2x.webp,c69d99e8ca0df41cef8370c77d94769f@3x.webp"},"200350":{"name":"0774c7e92036f27b6cdbbbb1bf406518","files":"0774c7e92036f27b6cdbbbb1bf406518@2x.webp,0774c7e92036f27b6cdbbbb1bf406518@3x.webp"},"200801":{"name":"ccacabe6bda27e6359f2af9c0b4a1b82","files":"ccacabe6bda27e6359f2af9c0b4a1b82@2x.png,ccacabe6bda27e6359f2af9c0b4a1b82@3x.png,ccacabe6bda27e6359f2af9c0b4a1b82@dark@2x.png,ccacabe6bda27e6359f2af9c0b4a1b82@dark@3x.png"},"200802":{"name":"a3a8294117820ba2d3650c4c32df4e11","files":"a3a8294117820ba2d3650c4c32df4e11@2x.png,a3a8294117820ba2d3650c4c32df4e11@3x.png,a3a8294117820ba2d3650c4c32df4e11@dark@2x.png,a3a8294117820ba2d3650c4c32df4e11@dark@3x.png"},"200803":{"name":"834544d400b38836c69c053549cd1f2b","files":"834544d400b38836c69c053549cd1f2b@2x.png,834544d400b38836c69c053549cd1f2b@3x.png,834544d400b38836c69c053549cd1f2b@dark@2x.png,834544d400b38836c69c053549cd1f2b@dark@3x.png"},"200804":{"name":"49e61a66737c15df738d24e56c3893f8","files":"49e61a66737c15df738d24e56c3893f8@2x.png,49e61a66737c15df738d24e56c3893f8@3x.png,49e61a66737c15df738d24e56c3893f8@dark@2x.png,49e61a66737c15df738d24e56c3893f8@dark@3x.png"},"200805":{"name":"b2ebdcedb715b08ed990f635f95fb69c","files":"b2ebdcedb715b08ed990f635f95fb69c@2x.png,b2ebdcedb715b08ed990f635f95fb69c@3x.png,b2ebdcedb715b08ed990f635f95fb69c@dark@2x.png,b2ebdcedb715b08ed990f635f95fb69c@dark@3x.png"},"200806":{"name":"619b16ad560e624596cf6639967b0f0e","files":"619b16ad560e624596cf6639967b0f0e@2x.png,619b16ad560e624596cf6639967b0f0e@3x.png,619b16ad560e624596cf6639967b0f0e@dark@2x.png,619b16ad560e624596cf6639967b0f0e@dark@3x.png"},"200807":{"name":"1132e90fd554cead2f201960bd9be4d8","files":"1132e90fd554cead2f201960bd9be4d8@2x.png,1132e90fd554cead2f201960bd9be4d8@3x.png,1132e90fd554cead2f201960bd9be4d8@dark@2x.png,1132e90fd554cead2f201960bd9be4d8@dark@3x.png"},"200808":{"name":"128406e4435c258e4b9b374e52f4b20c","files":"128406e4435c258e4b9b374e52f4b20c@2x.png,128406e4435c258e4b9b374e52f4b20c@3x.png,128406e4435c258e4b9b374e52f4b20c@dark@2x.png,128406e4435c258e4b9b374e52f4b20c@dark@3x.png"},"200809":{"name":"b93c5d01fdf9ad6f74165639ed90beb0","files":"b93c5d01fdf9ad6f74165639ed90beb0@2x.png,b93c5d01fdf9ad6f74165639ed90beb0@3x.png,b93c5d01fdf9ad6f74165639ed90beb0@dark@2x.png,b93c5d01fdf9ad6f74165639ed90beb0@dark@3x.png"},"200810":{"name":"c286b4de60e6d07688b5bcb23ec16c94","files":"c286b4de60e6d07688b5bcb23ec16c94@2x.png,c286b4de60e6d07688b5bcb23ec16c94@3x.png,c286b4de60e6d07688b5bcb23ec16c94@dark@2x.png,c286b4de60e6d07688b5bcb23ec16c94@dark@3x.png"},"200811":{"name":"6baa73bebbfb780588a071b8b9d43b9d","files":"6baa73bebbfb780588a071b8b9d43b9d@2x.png,6baa73bebbfb780588a071b8b9d43b9d@3x.png,6baa73bebbfb780588a071b8b9d43b9d@dark@2x.png,6baa73bebbfb780588a071b8b9d43b9d@dark@3x.png"},"200901":{"name":"231d9facc6ad70ad5f6b54d6ec1bfbe9","files":"231d9facc6ad70ad5f6b54d6ec1bfbe9@2x.png,231d9facc6ad70ad5f6b54d6ec1bfbe9@3x.png"},"200902":{"name":"9a292bd5f3878a8fa1794131a37464da","files":"9a292bd5f3878a8fa1794131a37464da@2x.png,9a292bd5f3878a8fa1794131a37464da@3x.png"},"200903":{"name":"e9074ad47041ffeefa479584b2eafddd","files":"e9074ad47041ffeefa479584b2eafddd@2x.png,e9074ad47041ffeefa479584b2eafddd@3x.png"},"200904":{"name":"e9074ad47041ffeefa479584b2eafddd","files":"e9074ad47041ffeefa479584b2eafddd@2x.png,e9074ad47041ffeefa479584b2eafddd@3x.png"},"200905":{"name":"489a2d01b3c5e7771f3248faed2ec058","files":"489a2d01b3c5e7771f3248faed2ec058@2x.png,489a2d01b3c5e7771f3248faed2ec058@3x.png"},"200906":{"name":"1dc56f0eb8cb9477b027a11bdaddc860","files":"1dc56f0eb8cb9477b027a11bdaddc860@2x.png,1dc56f0eb8cb9477b027a11bdaddc860@3x.png"},"200907":{"name":"9bedf4b68742fc05f4a610f3445c70fd","files":"9bedf4b68742fc05f4a610f3445c70fd@2x.png,9bedf4b68742fc05f4a610f3445c70fd@3x.png"},"200908":{"name":"238e789703d371c6f9bcbc1fd5a663fd","files":"238e789703d371c6f9bcbc1fd5a663fd@2x.png,238e789703d371c6f9bcbc1fd5a663fd@3x.png"},"200909":{"name":"dd0de33f2cd3325357f924a32142efaa","files":"dd0de33f2cd3325357f924a32142efaa@2x.png,dd0de33f2cd3325357f924a32142efaa@3x.png"},"200910":{"name":"0b96371b9815413471b11985757007af","files":"0b96371b9815413471b11985757007af@2x.png,0b96371b9815413471b11985757007af@3x.png"},"200911":{"name":"73511d5e18bf2c9182d783a645f9ddc7","files":"73511d5e18bf2c9182d783a645f9ddc7@2x.png,73511d5e18bf2c9182d783a645f9ddc7@3x.png"},"201100":{"name":"cb2e8bcc8dfa81f5f4fad048017ef5b0","files":"cb2e8bcc8dfa81f5f4fad048017ef5b0@2x.png,cb2e8bcc8dfa81f5f4fad048017ef5b0@3x.png,cb2e8bcc8dfa81f5f4fad048017ef5b0@dark@2x.png,cb2e8bcc8dfa81f5f4fad048017ef5b0@dark@3x.png"},"201101":{"name":"8cf9b0f52768665877cac5580cb9dad8","files":"8cf9b0f52768665877cac5580cb9dad8@2x.png,8cf9b0f52768665877cac5580cb9dad8@3x.png,8cf9b0f52768665877cac5580cb9dad8@dark@2x.png,8cf9b0f52768665877cac5580cb9dad8@dark@3x.png"},"201102":{"name":"e5d908aa885442d3c87f80d9f06ce621","files":"e5d908aa885442d3c87f80d9f06ce621@2x.png,e5d908aa885442d3c87f80d9f06ce621@3x.png,e5d908aa885442d3c87f80d9f06ce621@dark@2x.png,e5d908aa885442d3c87f80d9f06ce621@dark@3x.png"},"201103":{"name":"a27f88e26ad39497291d70c729bb191e","files":"a27f88e26ad39497291d70c729bb191e@2x.png,a27f88e26ad39497291d70c729bb191e@3x.png,a27f88e26ad39497291d70c729bb191e@dark@2x.png,a27f88e26ad39497291d70c729bb191e@dark@3x.png"},"201104":{"name":"91d15d915d03904740c78dc9616699c9","files":"91d15d915d03904740c78dc9616699c9@2x.png,91d15d915d03904740c78dc9616699c9@3x.png,91d15d915d03904740c78dc9616699c9@dark@2x.png,91d15d915d03904740c78dc9616699c9@dark@3x.png"},"201105":{"name":"10051cce62d04cc6cc5b8eed3ba65a93","files":"10051cce62d04cc6cc5b8eed3ba65a93@2x.png,10051cce62d04cc6cc5b8eed3ba65a93@3x.png,10051cce62d04cc6cc5b8eed3ba65a93@dark@2x.png,10051cce62d04cc6cc5b8eed3ba65a93@dark@3x.png"},"201106":{"name":"422dbc7ccbb1984476226bc150d54ab1","files":"422dbc7ccbb1984476226bc150d54ab1@2x.png,422dbc7ccbb1984476226bc150d54ab1@3x.png,422dbc7ccbb1984476226bc150d54ab1@dark@2x.png,422dbc7ccbb1984476226bc150d54ab1@dark@3x.png"},"201107":{"name":"322ba924efcad3924ed53621e913c37f","files":"322ba924efcad3924ed53621e913c37f@2x.png,322ba924efcad3924ed53621e913c37f@3x.png,322ba924efcad3924ed53621e913c37f@dark@2x.png,322ba924efcad3924ed53621e913c37f@dark@3x.png"},"201108":{"name":"2ce72c208301bdb98f5553694b117d6e","files":"2ce72c208301bdb98f5553694b117d6e@2x.png,2ce72c208301bdb98f5553694b117d6e@3x.png,2ce72c208301bdb98f5553694b117d6e@dark@2x.png,2ce72c208301bdb98f5553694b117d6e@dark@3x.png"},"201109":{"name":"310d1360c75b8253f33e081c824c4548","files":"310d1360c75b8253f33e081c824c4548@2x.png,310d1360c75b8253f33e081c824c4548@3x.png,310d1360c75b8253f33e081c824c4548@dark@2x.png,310d1360c75b8253f33e081c824c4548@dark@3x.png"},"201110":{"name":"a4af3d8c3783a6a7eb4e136c19f78f6d","files":"a4af3d8c3783a6a7eb4e136c19f78f6d@2x.png,a4af3d8c3783a6a7eb4e136c19f78f6d@3x.png,a4af3d8c3783a6a7eb4e136c19f78f6d@dark@2x.png,a4af3d8c3783a6a7eb4e136c19f78f6d@dark@3x.png"},"201111":{"name":"0bbcc690f8e45f2d98dd4f4a20250be9","files":"0bbcc690f8e45f2d98dd4f4a20250be9@2x.png,0bbcc690f8e45f2d98dd4f4a20250be9@3x.png,0bbcc690f8e45f2d98dd4f4a20250be9@dark@2x.png,0bbcc690f8e45f2d98dd4f4a20250be9@dark@3x.png"},"201112":{"name":"d6edbdd4f8d23279779cfa992d8e93fd","files":"d6edbdd4f8d23279779cfa992d8e93fd@2x.png,d6edbdd4f8d23279779cfa992d8e93fd@3x.png,d6edbdd4f8d23279779cfa992d8e93fd@dark@2x.png,d6edbdd4f8d23279779cfa992d8e93fd@dark@3x.png"},"201113":{"name":"783cfa243a3fab883587ae7e575c846e","files":"783cfa243a3fab883587ae7e575c846e@2x.png,783cfa243a3fab883587ae7e575c846e@3x.png,783cfa243a3fab883587ae7e575c846e@dark@2x.png,783cfa243a3fab883587ae7e575c846e@dark@3x.png"},"201114":{"name":"ce4d74aff4deaf6d026113a8eaab5fe7","files":"ce4d74aff4deaf6d026113a8eaab5fe7@2x.png,ce4d74aff4deaf6d026113a8eaab5fe7@3x.png,ce4d74aff4deaf6d026113a8eaab5fe7@dark@2x.png,ce4d74aff4deaf6d026113a8eaab5fe7@dark@3x.png"},"201115":{"name":"15cf357586b934176f2d5241231fd2b6","files":"15cf357586b934176f2d5241231fd2b6@2x.png,15cf357586b934176f2d5241231fd2b6@3x.png,15cf357586b934176f2d5241231fd2b6@dark@2x.png,15cf357586b934176f2d5241231fd2b6@dark@3x.png"},"201116":{"name":"e283a79ff33e684985d4e6263045dc81","files":"e283a79ff33e684985d4e6263045dc81@2x.png,e283a79ff33e684985d4e6263045dc81@3x.png,e283a79ff33e684985d4e6263045dc81@dark@2x.png,e283a79ff33e684985d4e6263045dc81@dark@3x.png"},"201117":{"name":"297e4180ed81664b8d504e81584bae45","files":"297e4180ed81664b8d504e81584bae45@2x.png,297e4180ed81664b8d504e81584bae45@3x.png,297e4180ed81664b8d504e81584bae45@dark@2x.png,297e4180ed81664b8d504e81584bae45@dark@3x.png"},"201118":{"name":"0b63e55d7bb5f46c76980b31c9683aec","files":"0b63e55d7bb5f46c76980b31c9683aec@2x.png,0b63e55d7bb5f46c76980b31c9683aec@3x.png,0b63e55d7bb5f46c76980b31c9683aec@dark@2x.png,0b63e55d7bb5f46c76980b31c9683aec@dark@3x.png"},"201119":{"name":"0fa38455d201b97eca7fb7a1bad576d1","files":"0fa38455d201b97eca7fb7a1bad576d1@2x.png,0fa38455d201b97eca7fb7a1bad576d1@3x.png,0fa38455d201b97eca7fb7a1bad576d1@dark@2x.png,0fa38455d201b97eca7fb7a1bad576d1@dark@3x.png"},"201120":{"name":"818dc70e180cd72a17238b73ceaf02ff","files":"818dc70e180cd72a17238b73ceaf02ff@2x.png,818dc70e180cd72a17238b73ceaf02ff@3x.png,818dc70e180cd72a17238b73ceaf02ff@dark@2x.png,818dc70e180cd72a17238b73ceaf02ff@dark@3x.png"},"201121":{"name":"ab70e01926f1320487cd3b2a51b9e721","files":"ab70e01926f1320487cd3b2a51b9e721@2x.png,ab70e01926f1320487cd3b2a51b9e721@3x.png,ab70e01926f1320487cd3b2a51b9e721@dark@2x.png,ab70e01926f1320487cd3b2a51b9e721@dark@3x.png"},"201122":{"name":"701cde5e82b97378f2037a954df13b8e","files":"701cde5e82b97378f2037a954df13b8e@2x.png,701cde5e82b97378f2037a954df13b8e@3x.png,701cde5e82b97378f2037a954df13b8e@dark@2x.png,701cde5e82b97378f2037a954df13b8e@dark@3x.png"},"201123":{"name":"32096d91833884d76fc70bd74dc7ed50","files":"32096d91833884d76fc70bd74dc7ed50@2x.png,32096d91833884d76fc70bd74dc7ed50@3x.png,32096d91833884d76fc70bd74dc7ed50@dark@2x.png,32096d91833884d76fc70bd74dc7ed50@dark@3x.png"},"201124":{"name":"e3091867c4a2fa686b9e77e1695f6d3d","files":"e3091867c4a2fa686b9e77e1695f6d3d@2x.png,e3091867c4a2fa686b9e77e1695f6d3d@3x.png,e3091867c4a2fa686b9e77e1695f6d3d@dark@2x.png,e3091867c4a2fa686b9e77e1695f6d3d@dark@3x.png"},"201300":{"name":"6e5943c4ef23870b8814233497dba0a6","files":"6e5943c4ef23870b8814233497dba0a6@2x.png,6e5943c4ef23870b8814233497dba0a6@3x.png"},"201301":{"name":"cf0ea13d3e7c6c9d932b9e23d759ce63","files":"cf0ea13d3e7c6c9d932b9e23d759ce63@2x.png,cf0ea13d3e7c6c9d932b9e23d759ce63@3x.png"},"201302":{"name":"677104672847f846cc4388717be99193","files":"677104672847f846cc4388717be99193@2x.png,677104672847f846cc4388717be99193@3x.png"},"201303":{"name":"a3442798b8ef7c8043cbead2c91f73de","files":"a3442798b8ef7c8043cbead2c91f73de@2x.png,a3442798b8ef7c8043cbead2c91f73de@3x.png"},"201304":{"name":"80a07ea3b022c58b519d4dfeb2304554","files":"80a07ea3b022c58b519d4dfeb2304554@2x.png,80a07ea3b022c58b519d4dfeb2304554@3x.png"},"201305":{"name":"ebf332948071453fe21a572688fb30c8","files":"ebf332948071453fe21a572688fb30c8@2x.png,ebf332948071453fe21a572688fb30c8@3x.png"},"201306":{"name":"16be004908c57b43e9ce61b17abd013c","files":"16be004908c57b43e9ce61b17abd013c@2x.png,16be004908c57b43e9ce61b17abd013c@3x.png"},"201307":{"name":"e05dce060eca37c62467205b72dd1489","files":"e05dce060eca37c62467205b72dd1489@2x.png,e05dce060eca37c62467205b72dd1489@3x.png"},"201308":{"name":"9b2f96381ab4650bfe794f40f7fe630d","files":"9b2f96381ab4650bfe794f40f7fe630d@2x.png,9b2f96381ab4650bfe794f40f7fe630d@3x.png"},"201309":{"name":"934ed4dc2bc9e7b62f2c75ad2dc808e7","files":"934ed4dc2bc9e7b62f2c75ad2dc808e7@2x.png,934ed4dc2bc9e7b62f2c75ad2dc808e7@3x.png"},"201310":{"name":"2f96200c66127ff7219f58a1231d6657","files":"2f96200c66127ff7219f58a1231d6657@2x.png,2f96200c66127ff7219f58a1231d6657@3x.png"},"201311":{"name":"f44b755f3f4279f404766c9b3358d8fc","files":"f44b755f3f4279f404766c9b3358d8fc@2x.png,f44b755f3f4279f404766c9b3358d8fc@3x.png"},"201312":{"name":"78c463fe892740a9a1a2f40ba3c448db","files":"78c463fe892740a9a1a2f40ba3c448db@2x.png,78c463fe892740a9a1a2f40ba3c448db@3x.png"},"201313":{"name":"05d62c6de95a662195d3fc635f023d5a","files":"05d62c6de95a662195d3fc635f023d5a@2x.png,05d62c6de95a662195d3fc635f023d5a@3x.png"},"201314":{"name":"361e39c328b3cbb7f8c54e48fa6c882d","files":"361e39c328b3cbb7f8c54e48fa6c882d@2x.png,361e39c328b3cbb7f8c54e48fa6c882d@3x.png"},"201315":{"name":"847047d76bbca806ea5532c96fa0aede","files":"847047d76bbca806ea5532c96fa0aede@2x.png,847047d76bbca806ea5532c96fa0aede@3x.png"},"201316":{"name":"93041aa1e6b171413cf4332577fb74d5","files":"93041aa1e6b171413cf4332577fb74d5@2x.png,93041aa1e6b171413cf4332577fb74d5@3x.png"},"201317":{"name":"e8e62e88828717a06f437e20aa15078c","files":"e8e62e88828717a06f437e20aa15078c@2x.png,e8e62e88828717a06f437e20aa15078c@3x.png"},"201318":{"name":"9bf59b7c718e40fc26b9c3c818a51536","files":"9bf59b7c718e40fc26b9c3c818a51536@2x.png,9bf59b7c718e40fc26b9c3c818a51536@3x.png"},"201319":{"name":"7cd1d5ac4406c27a0e973c3b1e352221","files":"7cd1d5ac4406c27a0e973c3b1e352221@2x.png,7cd1d5ac4406c27a0e973c3b1e352221@3x.png"},"201320":{"name":"dfa3e5d159e508cbb66bd076947cbe7a","files":"dfa3e5d159e508cbb66bd076947cbe7a@2x.png,dfa3e5d159e508cbb66bd076947cbe7a@3x.png"},"201321":{"name":"30e5150aafc4b096537c3c1b731c3bfb","files":"30e5150aafc4b096537c3c1b731c3bfb@2x.png,30e5150aafc4b096537c3c1b731c3bfb@3x.png"},"201322":{"name":"1824cc97d7eabce19791ce35197ad578","files":"1824cc97d7eabce19791ce35197ad578@2x.png,1824cc97d7eabce19791ce35197ad578@3x.png"},"201323":{"name":"7c2aee26f47707f8caf81236ec08e261","files":"7c2aee26f47707f8caf81236ec08e261@2x.png,7c2aee26f47707f8caf81236ec08e261@3x.png"},"201324":{"name":"726b9933768e17630497a7df61e62ea5","files":"726b9933768e17630497a7df61e62ea5@2x.png,726b9933768e17630497a7df61e62ea5@3x.png"}},"xml":"6ee787cdb82811a7d7fab36e24a94c13.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/21ee3de12761c3021e44064397945054.zip"},"200264":{"res":{"200272":{"name":"1465175b98cc7dd2f61ca69f998cdf01","files":"1465175b98cc7dd2f61ca69f998cdf01@2x.webp,1465175b98cc7dd2f61ca69f998cdf01@3x.webp,1465175b98cc7dd2f61ca69f998cdf01@dark@2x.webp,1465175b98cc7dd2f61ca69f998cdf01@dark@3x.webp"},"200274":{"name":"23c1c8c1535d52dd59994442da8fbca7","files":"23c1c8c1535d52dd59994442da8fbca7@2x.webp,23c1c8c1535d52dd59994442da8fbca7@3x.webp,23c1c8c1535d52dd59994442da8fbca7@dark@2x.webp,23c1c8c1535d52dd59994442da8fbca7@dark@3x.webp"},"200283":{"name":"523fa4032e8fddf1735233aec3a1cdf0","files":"523fa4032e8fddf1735233aec3a1cdf0@2x.webp,523fa4032e8fddf1735233aec3a1cdf0@3x.webp,523fa4032e8fddf1735233aec3a1cdf0@dark@2x.webp,523fa4032e8fddf1735233aec3a1cdf0@dark@3x.webp"},"200285":{"name":"8f2b4b71b32a73b9bb0e483866069efa","files":"8f2b4b71b32a73b9bb0e483866069efa@2x.png,8f2b4b71b32a73b9bb0e483866069efa@3x.png,8f2b4b71b32a73b9bb0e483866069efa@dark@2x.png,8f2b4b71b32a73b9bb0e483866069efa@dark@3x.png"},"200287":{"name":"6b9e55fa3fa6826a3d8301c1e39444c7","files":"6b9e55fa3fa6826a3d8301c1e39444c7@2x.png,6b9e55fa3fa6826a3d8301c1e39444c7@3x.png,6b9e55fa3fa6826a3d8301c1e39444c7@dark@2x.png,6b9e55fa3fa6826a3d8301c1e39444c7@dark@3x.png"},"200289":{"name":"4a027744b4fce5d632317022937508b9","files":"4a027744b4fce5d632317022937508b9@2x.png,4a027744b4fce5d632317022937508b9@3x.png,4a027744b4fce5d632317022937508b9@dark@2x.png,4a027744b4fce5d632317022937508b9@dark@3x.png"},"200291":{"name":"8784744fc57f86aeef0a732389d0d46a","files":"8784744fc57f86aeef0a732389d0d46a@2x.png,8784744fc57f86aeef0a732389d0d46a@3x.png,8784744fc57f86aeef0a732389d0d46a@dark@2x.png,8784744fc57f86aeef0a732389d0d46a@dark@3x.png"},"200293":{"name":"c92a6f02ebaf273ed2ed73cb10a0246d","files":"c92a6f02ebaf273ed2ed73cb10a0246d@2x.png,c92a6f02ebaf273ed2ed73cb10a0246d@3x.png,c92a6f02ebaf273ed2ed73cb10a0246d@dark@2x.png,c92a6f02ebaf273ed2ed73cb10a0246d@dark@3x.png"},"200295":{"name":"cb47a6dd477ce63d56faadf676d4f9db","files":"cb47a6dd477ce63d56faadf676d4f9db@2x.png,cb47a6dd477ce63d56faadf676d4f9db@3x.png,cb47a6dd477ce63d56faadf676d4f9db@dark@2x.png,cb47a6dd477ce63d56faadf676d4f9db@dark@3x.png"},"200297":{"name":"5fc8bb78802927f48ad485efb381d28c","files":"5fc8bb78802927f48ad485efb381d28c@2x.png,5fc8bb78802927f48ad485efb381d28c@3x.png,5fc8bb78802927f48ad485efb381d28c@dark@2x.png,5fc8bb78802927f48ad485efb381d28c@dark@3x.png"},"200299":{"name":"d5b739eef5d17e8ee07ea840789b4a97","files":"d5b739eef5d17e8ee07ea840789b4a97@2x.webp,d5b739eef5d17e8ee07ea840789b4a97@3x.webp,d5b739eef5d17e8ee07ea840789b4a97@dark@2x.webp,d5b739eef5d17e8ee07ea840789b4a97@dark@3x.webp"},"200301":{"name":"fb987c97be6c3da8c5dcbfa4b90bd746","files":"fb987c97be6c3da8c5dcbfa4b90bd746@2x.png,fb987c97be6c3da8c5dcbfa4b90bd746@3x.png,fb987c97be6c3da8c5dcbfa4b90bd746@dark@2x.png,fb987c97be6c3da8c5dcbfa4b90bd746@dark@3x.png"},"200305":{"name":"9441c41b5fe9c0de7240ab5c5b5ac571","files":"9441c41b5fe9c0de7240ab5c5b5ac571@2x.png,9441c41b5fe9c0de7240ab5c5b5ac571@3x.png,9441c41b5fe9c0de7240ab5c5b5ac571@dark@2x.png,9441c41b5fe9c0de7240ab5c5b5ac571@dark@3x.png"},"200307":{"name":"f2bc1d8ad9fe1b622adecd2fd70cbbb6","files":"f2bc1d8ad9fe1b622adecd2fd70cbbb6@2x.png,f2bc1d8ad9fe1b622adecd2fd70cbbb6@3x.png,f2bc1d8ad9fe1b622adecd2fd70cbbb6@dark@2x.png,f2bc1d8ad9fe1b622adecd2fd70cbbb6@dark@3x.png"},"200309":{"name":"250dcd31258cbcfc3b1e4b0f3f7daadc","files":"250dcd31258cbcfc3b1e4b0f3f7daadc@2x.png,250dcd31258cbcfc3b1e4b0f3f7daadc@3x.png,250dcd31258cbcfc3b1e4b0f3f7daadc@dark@2x.png,250dcd31258cbcfc3b1e4b0f3f7daadc@dark@3x.png"},"200311":{"name":"b7ea77e08f3ea4b755a75fb80356a23e","files":"b7ea77e08f3ea4b755a75fb80356a23e@2x.png,b7ea77e08f3ea4b755a75fb80356a23e@3x.png,b7ea77e08f3ea4b755a75fb80356a23e@dark@2x.png,b7ea77e08f3ea4b755a75fb80356a23e@dark@3x.png"},"200313":{"name":"20dafbab2431b3346ac44459ffdbd553","files":"20dafbab2431b3346ac44459ffdbd553@2x.png,20dafbab2431b3346ac44459ffdbd553@3x.png,20dafbab2431b3346ac44459ffdbd553@dark@2x.png,20dafbab2431b3346ac44459ffdbd553@dark@3x.png"},"200315":{"name":"175878900d3b6710157b6c225ce7cbec","files":"175878900d3b6710157b6c225ce7cbec@2x.png,175878900d3b6710157b6c225ce7cbec@3x.png,175878900d3b6710157b6c225ce7cbec@dark@2x.png,175878900d3b6710157b6c225ce7cbec@dark@3x.png"},"200317":{"name":"c715fc73303bae41857e0ad611ed45de","files":"c715fc73303bae41857e0ad611ed45de@2x.png,c715fc73303bae41857e0ad611ed45de@3x.png,c715fc73303bae41857e0ad611ed45de@dark@2x.png,c715fc73303bae41857e0ad611ed45de@dark@3x.png"},"200320":{"name":"96c62b3e917b45782ab6b4ec36afde87","files":"96c62b3e917b45782ab6b4ec36afde87@2x.webp,96c62b3e917b45782ab6b4ec36afde87@3x.webp,96c62b3e917b45782ab6b4ec36afde87@dark@2x.webp,96c62b3e917b45782ab6b4ec36afde87@dark@3x.webp"},"200321":{"name":"94fe6167d4512b9942af8857054c3563","files":"94fe6167d4512b9942af8857054c3563@2x.webp,94fe6167d4512b9942af8857054c3563@3x.webp,94fe6167d4512b9942af8857054c3563@dark@2x.webp,94fe6167d4512b9942af8857054c3563@dark@3x.webp"},"200322":{"name":"b04754658a6c2bf667dd931e3669d3ce","files":"b04754658a6c2bf667dd931e3669d3ce@2x.webp,b04754658a6c2bf667dd931e3669d3ce@3x.webp,b04754658a6c2bf667dd931e3669d3ce@dark@2x.webp,b04754658a6c2bf667dd931e3669d3ce@dark@3x.webp"},"200323":{"name":"e1f35338ccddd69ea4b80642e3f239d8","files":"e1f35338ccddd69ea4b80642e3f239d8@2x.webp,e1f35338ccddd69ea4b80642e3f239d8@3x.webp,e1f35338ccddd69ea4b80642e3f239d8@dark@2x.webp,e1f35338ccddd69ea4b80642e3f239d8@dark@3x.webp"},"200324":{"name":"db2360168a5fe8481f6dc2cdec9d7633","files":"db2360168a5fe8481f6dc2cdec9d7633@2x.webp,db2360168a5fe8481f6dc2cdec9d7633@3x.webp,db2360168a5fe8481f6dc2cdec9d7633@dark@2x.webp,db2360168a5fe8481f6dc2cdec9d7633@dark@3x.webp"},"200331":{"name":"b6dad609cff78e3963a6ccf36ec0144b","files":"b6dad609cff78e3963a6ccf36ec0144b@2x.png,b6dad609cff78e3963a6ccf36ec0144b@3x.png,b6dad609cff78e3963a6ccf36ec0144b@dark@2x.png,b6dad609cff78e3963a6ccf36ec0144b@dark@3x.png"},"200333":{"name":"dd6dd48e0ac43cb9cf0b8cc87f373841","files":"dd6dd48e0ac43cb9cf0b8cc87f373841@2x.png,dd6dd48e0ac43cb9cf0b8cc87f373841@3x.png,dd6dd48e0ac43cb9cf0b8cc87f373841@dark@2x.png,dd6dd48e0ac43cb9cf0b8cc87f373841@dark@3x.png"},"200335":{"name":"5d9ac4853ad1aa034898541ebab005cd","files":"5d9ac4853ad1aa034898541ebab005cd@2x.png,5d9ac4853ad1aa034898541ebab005cd@3x.png,5d9ac4853ad1aa034898541ebab005cd@dark@2x.png,5d9ac4853ad1aa034898541ebab005cd@dark@3x.png"},"200352":{"name":"2a7347a362208e9ce2ca7941f8611293","files":"2a7347a362208e9ce2ca7941f8611293@2x.webp,2a7347a362208e9ce2ca7941f8611293@3x.webp"},"200354":{"name":"f56e47feb9ae6b01facb3f7a6f697db9","files":"f56e47feb9ae6b01facb3f7a6f697db9@2x.webp,f56e47feb9ae6b01facb3f7a6f697db9@3x.webp"},"200357":{"name":"096d0922e502d94fb5c630d78b16b127","files":"096d0922e502d94fb5c630d78b16b127@2x.webp,096d0922e502d94fb5c630d78b16b127@3x.webp"},"200358":{"name":"b7d80b51c88c55fde5a41fd61d7e02d1","files":"b7d80b51c88c55fde5a41fd61d7e02d1@2x.webp,b7d80b51c88c55fde5a41fd61d7e02d1@3x.webp"},"200363":{"name":"d6f96016838716ff0f495ad6ea5f2c69","files":"d6f96016838716ff0f495ad6ea5f2c69@2x.webp,d6f96016838716ff0f495ad6ea5f2c69@3x.webp"},"200365":{"name":"526779327f5d871ab6b07b2b420b30f1","files":"526779327f5d871ab6b07b2b420b30f1@2x.png,526779327f5d871ab6b07b2b420b30f1@3x.png"},"200367":{"name":"7d6caf500ff237d5e1ee8adeccae47c6","files":"7d6caf500ff237d5e1ee8adeccae47c6@2x.png,7d6caf500ff237d5e1ee8adeccae47c6@3x.png"},"200369":{"name":"049180f4f46e88813801d1e944a1b8d3","files":"049180f4f46e88813801d1e944a1b8d3@2x.png,049180f4f46e88813801d1e944a1b8d3@3x.png"},"200371":{"name":"43d6cbef30d72fbb00befdeb39731837","files":"43d6cbef30d72fbb00befdeb39731837@2x.png,43d6cbef30d72fbb00befdeb39731837@3x.png"},"200373":{"name":"47a87273a5e7c0c7a3ebc21ff32047ee","files":"47a87273a5e7c0c7a3ebc21ff32047ee@2x.png,47a87273a5e7c0c7a3ebc21ff32047ee@3x.png"},"200375":{"name":"b4efc90c9c4812706953cc22f5f51fb5","files":"b4efc90c9c4812706953cc22f5f51fb5@2x.png,b4efc90c9c4812706953cc22f5f51fb5@3x.png"},"200377":{"name":"8f8c9d681c4ef545e0bae547b0056722","files":"8f8c9d681c4ef545e0bae547b0056722@2x.png,8f8c9d681c4ef545e0bae547b0056722@3x.png"},"200379":{"name":"e5e2b1a605b415195779164f20c1a860","files":"e5e2b1a605b415195779164f20c1a860@2x.webp,e5e2b1a605b415195779164f20c1a860@3x.webp"},"200381":{"name":"2740b1d66bee5c680b74fd4f6a6b2e4c","files":"2740b1d66bee5c680b74fd4f6a6b2e4c@2x.png,2740b1d66bee5c680b74fd4f6a6b2e4c@3x.png"},"200385":{"name":"eb53eea76af2c3c01e3a271a7e1c1200","files":"eb53eea76af2c3c01e3a271a7e1c1200@2x.png,eb53eea76af2c3c01e3a271a7e1c1200@3x.png"},"200387":{"name":"45169e5b7dd7c5e2831d3fcb05d5d58b","files":"45169e5b7dd7c5e2831d3fcb05d5d58b@2x.png,45169e5b7dd7c5e2831d3fcb05d5d58b@3x.png"},"200389":{"name":"f4322b3dc9bd299a494734a39f724165","files":"f4322b3dc9bd299a494734a39f724165@2x.png,f4322b3dc9bd299a494734a39f724165@3x.png"},"200391":{"name":"f28e6dedde26b35d16868c72454f90dc","files":"f28e6dedde26b35d16868c72454f90dc@2x.png,f28e6dedde26b35d16868c72454f90dc@3x.png"},"200393":{"name":"26fdc818e76f6530b1f2cad6e7da2ce6","files":"26fdc818e76f6530b1f2cad6e7da2ce6@2x.png,26fdc818e76f6530b1f2cad6e7da2ce6@3x.png"},"200395":{"name":"50e1b470efadbbcc3cfa6224dee36d45","files":"50e1b470efadbbcc3cfa6224dee36d45@2x.png,50e1b470efadbbcc3cfa6224dee36d45@3x.png"},"200397":{"name":"0fc4b092e62861a0361cadece5d65bb3","files":"0fc4b092e62861a0361cadece5d65bb3@2x.png,0fc4b092e62861a0361cadece5d65bb3@3x.png"},"200398":{"name":"42a741445cf17550fad25819d0627bcd","files":"42a741445cf17550fad25819d0627bcd@2x.webp,42a741445cf17550fad25819d0627bcd@3x.webp"},"200399":{"name":"0eee54cf4852648c2cd998f08656ed5b","files":"0eee54cf4852648c2cd998f08656ed5b@2x.webp,0eee54cf4852648c2cd998f08656ed5b@3x.webp"},"200400":{"name":"87c66996a844871a9f580e56feb2eb4e","files":"87c66996a844871a9f580e56feb2eb4e@2x.webp,87c66996a844871a9f580e56feb2eb4e@3x.webp"},"200601":{"name":"0c3f0fbf37f0284795f904c8bf18f764","files":"0c3f0fbf37f0284795f904c8bf18f764@2x.webp,0c3f0fbf37f0284795f904c8bf18f764@3x.webp,0c3f0fbf37f0284795f904c8bf18f764@dark@2x.webp,0c3f0fbf37f0284795f904c8bf18f764@dark@3x.webp"},"200602":{"name":"82f8a4fb3b053eec566e510b17770511","files":"82f8a4fb3b053eec566e510b17770511@2x.webp,82f8a4fb3b053eec566e510b17770511@3x.webp,82f8a4fb3b053eec566e510b17770511@dark@2x.webp,82f8a4fb3b053eec566e510b17770511@dark@3x.webp"},"200603":{"name":"3fad8ba4e8d91b461aa16a47bbce0697","files":"3fad8ba4e8d91b461aa16a47bbce0697@2x.webp,3fad8ba4e8d91b461aa16a47bbce0697@3x.webp,3fad8ba4e8d91b461aa16a47bbce0697@dark@2x.webp,3fad8ba4e8d91b461aa16a47bbce0697@dark@3x.webp"},"200604":{"name":"adc00b089028cb7ccd3dd83fe194c22a","files":"adc00b089028cb7ccd3dd83fe194c22a@2x.webp,adc00b089028cb7ccd3dd83fe194c22a@3x.webp,adc00b089028cb7ccd3dd83fe194c22a@dark@2x.webp,adc00b089028cb7ccd3dd83fe194c22a@dark@3x.webp"},"200605":{"name":"98d60ab2841ca0bc2f04a418d994518d","files":"98d60ab2841ca0bc2f04a418d994518d@2x.webp,98d60ab2841ca0bc2f04a418d994518d@3x.webp,98d60ab2841ca0bc2f04a418d994518d@dark@2x.webp,98d60ab2841ca0bc2f04a418d994518d@dark@3x.webp"},"200606":{"name":"eb161215c00e7b75aac47cc2263604ca","files":"eb161215c00e7b75aac47cc2263604ca@2x.webp,eb161215c00e7b75aac47cc2263604ca@3x.webp,eb161215c00e7b75aac47cc2263604ca@dark@2x.webp,eb161215c00e7b75aac47cc2263604ca@dark@3x.webp"},"200607":{"name":"0849299deb512f3847fdff8d1030e03d","files":"0849299deb512f3847fdff8d1030e03d@2x.png,0849299deb512f3847fdff8d1030e03d@3x.png,0849299deb512f3847fdff8d1030e03d@dark@2x.png,0849299deb512f3847fdff8d1030e03d@dark@3x.png"},"200608":{"name":"15fc71c6177d63a083491827432eb17d","files":"15fc71c6177d63a083491827432eb17d@2x.png,15fc71c6177d63a083491827432eb17d@3x.png,15fc71c6177d63a083491827432eb17d@dark@2x.png,15fc71c6177d63a083491827432eb17d@dark@3x.png"},"200609":{"name":"0c947386d0a9f0daf397ce405a592e78","files":"0c947386d0a9f0daf397ce405a592e78@2x.png,0c947386d0a9f0daf397ce405a592e78@3x.png,0c947386d0a9f0daf397ce405a592e78@dark@2x.png,0c947386d0a9f0daf397ce405a592e78@dark@3x.png"},"200610":{"name":"85afc658b4426b1e4dc41a3d74658248","files":"85afc658b4426b1e4dc41a3d74658248@2x.png,85afc658b4426b1e4dc41a3d74658248@3x.png,85afc658b4426b1e4dc41a3d74658248@dark@2x.png,85afc658b4426b1e4dc41a3d74658248@dark@3x.png"},"200611":{"name":"68eccd4e6caf1c073cf6c6f3cd042010","files":"68eccd4e6caf1c073cf6c6f3cd042010@2x.png,68eccd4e6caf1c073cf6c6f3cd042010@3x.png"},"200612":{"name":"362dccfebe331c2cbb5347ea8350d5c8","files":"362dccfebe331c2cbb5347ea8350d5c8@2x.png,362dccfebe331c2cbb5347ea8350d5c8@3x.png"},"200701":{"name":"ec610c2b9a633df4dab8303daa65f17d","files":"ec610c2b9a633df4dab8303daa65f17d@2x.webp,ec610c2b9a633df4dab8303daa65f17d@3x.webp"},"200702":{"name":"e0540ea2689da723da874b5b02604ca0","files":"e0540ea2689da723da874b5b02604ca0@2x.webp,e0540ea2689da723da874b5b02604ca0@3x.webp"},"200703":{"name":"07fbda3f20a346312c44c155ab16ed86","files":"07fbda3f20a346312c44c155ab16ed86@2x.webp,07fbda3f20a346312c44c155ab16ed86@3x.webp"},"200704":{"name":"e619b875d44b0a61e209ea49a95da6d2","files":"e619b875d44b0a61e209ea49a95da6d2@2x.webp,e619b875d44b0a61e209ea49a95da6d2@3x.webp"},"200705":{"name":"22d44690f51d9e01db82446907d00b1c","files":"22d44690f51d9e01db82446907d00b1c@2x.webp,22d44690f51d9e01db82446907d00b1c@3x.webp"},"200706":{"name":"22eb32477c2a04ae891d11caa94ccaa8","files":"22eb32477c2a04ae891d11caa94ccaa8@2x.webp,22eb32477c2a04ae891d11caa94ccaa8@3x.webp"},"200707":{"name":"de34929943ab652e3cffc73430a518e8","files":"de34929943ab652e3cffc73430a518e8@2x.png,de34929943ab652e3cffc73430a518e8@3x.png"},"200708":{"name":"57546a1e984d11954051cffeeda71e2e","files":"57546a1e984d11954051cffeeda71e2e@2x.png,57546a1e984d11954051cffeeda71e2e@3x.png"},"200709":{"name":"fc2e2dd879aa7116005a9bd90c2c93a3","files":"fc2e2dd879aa7116005a9bd90c2c93a3@2x.png,fc2e2dd879aa7116005a9bd90c2c93a3@3x.png"},"200710":{"name":"3662b6f8fd98fe31c3a17b910f86baed","files":"3662b6f8fd98fe31c3a17b910f86baed@2x.png,3662b6f8fd98fe31c3a17b910f86baed@3x.png"},"202001":{"name":"8945b967f878fd6fd0b6f45510212077","files":"8945b967f878fd6fd0b6f45510212077@2x.png,8945b967f878fd6fd0b6f45510212077@3x.png"},"202003":{"name":"46012ec3110f45bbc6c6ec6fd339836b","files":"46012ec3110f45bbc6c6ec6fd339836b@2x.png,46012ec3110f45bbc6c6ec6fd339836b@3x.png"},"202005":{"name":"984eb290656b222dd165c03b14522343","files":"984eb290656b222dd165c03b14522343@2x.png,984eb290656b222dd165c03b14522343@3x.png"}},"xml":"493f90abffd774f87ae51e8e8d5a7a60.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/b45f3f3112514627a0cb31f64515b6f4.zip"},"200265":{"res":{"200272":{"name":"1465175b98cc7dd2f61ca69f998cdf01","files":"1465175b98cc7dd2f61ca69f998cdf01@2x.webp,1465175b98cc7dd2f61ca69f998cdf01@3x.webp,1465175b98cc7dd2f61ca69f998cdf01@dark@2x.webp,1465175b98cc7dd2f61ca69f998cdf01@dark@3x.webp"},"200274":{"name":"23c1c8c1535d52dd59994442da8fbca7","files":"23c1c8c1535d52dd59994442da8fbca7@2x.webp,23c1c8c1535d52dd59994442da8fbca7@3x.webp,23c1c8c1535d52dd59994442da8fbca7@dark@2x.webp,23c1c8c1535d52dd59994442da8fbca7@dark@3x.webp"},"200283":{"name":"523fa4032e8fddf1735233aec3a1cdf0","files":"523fa4032e8fddf1735233aec3a1cdf0@2x.webp,523fa4032e8fddf1735233aec3a1cdf0@3x.webp,523fa4032e8fddf1735233aec3a1cdf0@dark@2x.webp,523fa4032e8fddf1735233aec3a1cdf0@dark@3x.webp"},"200285":{"name":"8f2b4b71b32a73b9bb0e483866069efa","files":"8f2b4b71b32a73b9bb0e483866069efa@2x.png,8f2b4b71b32a73b9bb0e483866069efa@3x.png,8f2b4b71b32a73b9bb0e483866069efa@dark@2x.png,8f2b4b71b32a73b9bb0e483866069efa@dark@3x.png"},"200287":{"name":"6b9e55fa3fa6826a3d8301c1e39444c7","files":"6b9e55fa3fa6826a3d8301c1e39444c7@2x.png,6b9e55fa3fa6826a3d8301c1e39444c7@3x.png,6b9e55fa3fa6826a3d8301c1e39444c7@dark@2x.png,6b9e55fa3fa6826a3d8301c1e39444c7@dark@3x.png"},"200289":{"name":"4a027744b4fce5d632317022937508b9","files":"4a027744b4fce5d632317022937508b9@2x.png,4a027744b4fce5d632317022937508b9@3x.png,4a027744b4fce5d632317022937508b9@dark@2x.png,4a027744b4fce5d632317022937508b9@dark@3x.png"},"200291":{"name":"8784744fc57f86aeef0a732389d0d46a","files":"8784744fc57f86aeef0a732389d0d46a@2x.png,8784744fc57f86aeef0a732389d0d46a@3x.png,8784744fc57f86aeef0a732389d0d46a@dark@2x.png,8784744fc57f86aeef0a732389d0d46a@dark@3x.png"},"200293":{"name":"c92a6f02ebaf273ed2ed73cb10a0246d","files":"c92a6f02ebaf273ed2ed73cb10a0246d@2x.png,c92a6f02ebaf273ed2ed73cb10a0246d@3x.png,c92a6f02ebaf273ed2ed73cb10a0246d@dark@2x.png,c92a6f02ebaf273ed2ed73cb10a0246d@dark@3x.png"},"200295":{"name":"cb47a6dd477ce63d56faadf676d4f9db","files":"cb47a6dd477ce63d56faadf676d4f9db@2x.png,cb47a6dd477ce63d56faadf676d4f9db@3x.png,cb47a6dd477ce63d56faadf676d4f9db@dark@2x.png,cb47a6dd477ce63d56faadf676d4f9db@dark@3x.png"},"200297":{"name":"5fc8bb78802927f48ad485efb381d28c","files":"5fc8bb78802927f48ad485efb381d28c@2x.png,5fc8bb78802927f48ad485efb381d28c@3x.png,5fc8bb78802927f48ad485efb381d28c@dark@2x.png,5fc8bb78802927f48ad485efb381d28c@dark@3x.png"},"200299":{"name":"d5b739eef5d17e8ee07ea840789b4a97","files":"d5b739eef5d17e8ee07ea840789b4a97@2x.webp,d5b739eef5d17e8ee07ea840789b4a97@3x.webp,d5b739eef5d17e8ee07ea840789b4a97@dark@2x.webp,d5b739eef5d17e8ee07ea840789b4a97@dark@3x.webp"},"200301":{"name":"fb987c97be6c3da8c5dcbfa4b90bd746","files":"fb987c97be6c3da8c5dcbfa4b90bd746@2x.png,fb987c97be6c3da8c5dcbfa4b90bd746@3x.png,fb987c97be6c3da8c5dcbfa4b90bd746@dark@2x.png,fb987c97be6c3da8c5dcbfa4b90bd746@dark@3x.png"},"200305":{"name":"9441c41b5fe9c0de7240ab5c5b5ac571","files":"9441c41b5fe9c0de7240ab5c5b5ac571@2x.png,9441c41b5fe9c0de7240ab5c5b5ac571@3x.png,9441c41b5fe9c0de7240ab5c5b5ac571@dark@2x.png,9441c41b5fe9c0de7240ab5c5b5ac571@dark@3x.png"},"200307":{"name":"f2bc1d8ad9fe1b622adecd2fd70cbbb6","files":"f2bc1d8ad9fe1b622adecd2fd70cbbb6@2x.png,f2bc1d8ad9fe1b622adecd2fd70cbbb6@3x.png,f2bc1d8ad9fe1b622adecd2fd70cbbb6@dark@2x.png,f2bc1d8ad9fe1b622adecd2fd70cbbb6@dark@3x.png"},"200309":{"name":"250dcd31258cbcfc3b1e4b0f3f7daadc","files":"250dcd31258cbcfc3b1e4b0f3f7daadc@2x.png,250dcd31258cbcfc3b1e4b0f3f7daadc@3x.png,250dcd31258cbcfc3b1e4b0f3f7daadc@dark@2x.png,250dcd31258cbcfc3b1e4b0f3f7daadc@dark@3x.png"},"200311":{"name":"b7ea77e08f3ea4b755a75fb80356a23e","files":"b7ea77e08f3ea4b755a75fb80356a23e@2x.png,b7ea77e08f3ea4b755a75fb80356a23e@3x.png,b7ea77e08f3ea4b755a75fb80356a23e@dark@2x.png,b7ea77e08f3ea4b755a75fb80356a23e@dark@3x.png"},"200313":{"name":"20dafbab2431b3346ac44459ffdbd553","files":"20dafbab2431b3346ac44459ffdbd553@2x.png,20dafbab2431b3346ac44459ffdbd553@3x.png,20dafbab2431b3346ac44459ffdbd553@dark@2x.png,20dafbab2431b3346ac44459ffdbd553@dark@3x.png"},"200315":{"name":"175878900d3b6710157b6c225ce7cbec","files":"175878900d3b6710157b6c225ce7cbec@2x.png,175878900d3b6710157b6c225ce7cbec@3x.png,175878900d3b6710157b6c225ce7cbec@dark@2x.png,175878900d3b6710157b6c225ce7cbec@dark@3x.png"},"200317":{"name":"c715fc73303bae41857e0ad611ed45de","files":"c715fc73303bae41857e0ad611ed45de@2x.png,c715fc73303bae41857e0ad611ed45de@3x.png,c715fc73303bae41857e0ad611ed45de@dark@2x.png,c715fc73303bae41857e0ad611ed45de@dark@3x.png"},"200320":{"name":"96c62b3e917b45782ab6b4ec36afde87","files":"96c62b3e917b45782ab6b4ec36afde87@2x.webp,96c62b3e917b45782ab6b4ec36afde87@3x.webp,96c62b3e917b45782ab6b4ec36afde87@dark@2x.webp,96c62b3e917b45782ab6b4ec36afde87@dark@3x.webp"},"200321":{"name":"94fe6167d4512b9942af8857054c3563","files":"94fe6167d4512b9942af8857054c3563@2x.webp,94fe6167d4512b9942af8857054c3563@3x.webp,94fe6167d4512b9942af8857054c3563@dark@2x.webp,94fe6167d4512b9942af8857054c3563@dark@3x.webp"},"200322":{"name":"b04754658a6c2bf667dd931e3669d3ce","files":"b04754658a6c2bf667dd931e3669d3ce@2x.webp,b04754658a6c2bf667dd931e3669d3ce@3x.webp,b04754658a6c2bf667dd931e3669d3ce@dark@2x.webp,b04754658a6c2bf667dd931e3669d3ce@dark@3x.webp"},"200323":{"name":"e1f35338ccddd69ea4b80642e3f239d8","files":"e1f35338ccddd69ea4b80642e3f239d8@2x.webp,e1f35338ccddd69ea4b80642e3f239d8@3x.webp,e1f35338ccddd69ea4b80642e3f239d8@dark@2x.webp,e1f35338ccddd69ea4b80642e3f239d8@dark@3x.webp"},"200324":{"name":"db2360168a5fe8481f6dc2cdec9d7633","files":"db2360168a5fe8481f6dc2cdec9d7633@2x.webp,db2360168a5fe8481f6dc2cdec9d7633@3x.webp,db2360168a5fe8481f6dc2cdec9d7633@dark@2x.webp,db2360168a5fe8481f6dc2cdec9d7633@dark@3x.webp"},"200331":{"name":"b6dad609cff78e3963a6ccf36ec0144b","files":"b6dad609cff78e3963a6ccf36ec0144b@2x.png,b6dad609cff78e3963a6ccf36ec0144b@3x.png,b6dad609cff78e3963a6ccf36ec0144b@dark@2x.png,b6dad609cff78e3963a6ccf36ec0144b@dark@3x.png"},"200333":{"name":"dd6dd48e0ac43cb9cf0b8cc87f373841","files":"dd6dd48e0ac43cb9cf0b8cc87f373841@2x.png,dd6dd48e0ac43cb9cf0b8cc87f373841@3x.png,dd6dd48e0ac43cb9cf0b8cc87f373841@dark@2x.png,dd6dd48e0ac43cb9cf0b8cc87f373841@dark@3x.png"},"200335":{"name":"5d9ac4853ad1aa034898541ebab005cd","files":"5d9ac4853ad1aa034898541ebab005cd@2x.png,5d9ac4853ad1aa034898541ebab005cd@3x.png,5d9ac4853ad1aa034898541ebab005cd@dark@2x.png,5d9ac4853ad1aa034898541ebab005cd@dark@3x.png"},"200352":{"name":"2a7347a362208e9ce2ca7941f8611293","files":"2a7347a362208e9ce2ca7941f8611293@2x.webp,2a7347a362208e9ce2ca7941f8611293@3x.webp"},"200354":{"name":"f56e47feb9ae6b01facb3f7a6f697db9","files":"f56e47feb9ae6b01facb3f7a6f697db9@2x.webp,f56e47feb9ae6b01facb3f7a6f697db9@3x.webp"},"200357":{"name":"096d0922e502d94fb5c630d78b16b127","files":"096d0922e502d94fb5c630d78b16b127@2x.webp,096d0922e502d94fb5c630d78b16b127@3x.webp"},"200358":{"name":"b7d80b51c88c55fde5a41fd61d7e02d1","files":"b7d80b51c88c55fde5a41fd61d7e02d1@2x.webp,b7d80b51c88c55fde5a41fd61d7e02d1@3x.webp"},"200363":{"name":"d6f96016838716ff0f495ad6ea5f2c69","files":"d6f96016838716ff0f495ad6ea5f2c69@2x.webp,d6f96016838716ff0f495ad6ea5f2c69@3x.webp"},"200365":{"name":"526779327f5d871ab6b07b2b420b30f1","files":"526779327f5d871ab6b07b2b420b30f1@2x.png,526779327f5d871ab6b07b2b420b30f1@3x.png"},"200367":{"name":"7d6caf500ff237d5e1ee8adeccae47c6","files":"7d6caf500ff237d5e1ee8adeccae47c6@2x.png,7d6caf500ff237d5e1ee8adeccae47c6@3x.png"},"200369":{"name":"049180f4f46e88813801d1e944a1b8d3","files":"049180f4f46e88813801d1e944a1b8d3@2x.png,049180f4f46e88813801d1e944a1b8d3@3x.png"},"200371":{"name":"43d6cbef30d72fbb00befdeb39731837","files":"43d6cbef30d72fbb00befdeb39731837@2x.png,43d6cbef30d72fbb00befdeb39731837@3x.png"},"200373":{"name":"47a87273a5e7c0c7a3ebc21ff32047ee","files":"47a87273a5e7c0c7a3ebc21ff32047ee@2x.png,47a87273a5e7c0c7a3ebc21ff32047ee@3x.png"},"200375":{"name":"b4efc90c9c4812706953cc22f5f51fb5","files":"b4efc90c9c4812706953cc22f5f51fb5@2x.png,b4efc90c9c4812706953cc22f5f51fb5@3x.png"},"200377":{"name":"8f8c9d681c4ef545e0bae547b0056722","files":"8f8c9d681c4ef545e0bae547b0056722@2x.png,8f8c9d681c4ef545e0bae547b0056722@3x.png"},"200379":{"name":"e5e2b1a605b415195779164f20c1a860","files":"e5e2b1a605b415195779164f20c1a860@2x.webp,e5e2b1a605b415195779164f20c1a860@3x.webp"},"200381":{"name":"2740b1d66bee5c680b74fd4f6a6b2e4c","files":"2740b1d66bee5c680b74fd4f6a6b2e4c@2x.png,2740b1d66bee5c680b74fd4f6a6b2e4c@3x.png"},"200385":{"name":"eb53eea76af2c3c01e3a271a7e1c1200","files":"eb53eea76af2c3c01e3a271a7e1c1200@2x.png,eb53eea76af2c3c01e3a271a7e1c1200@3x.png"},"200387":{"name":"45169e5b7dd7c5e2831d3fcb05d5d58b","files":"45169e5b7dd7c5e2831d3fcb05d5d58b@2x.png,45169e5b7dd7c5e2831d3fcb05d5d58b@3x.png"},"200389":{"name":"f4322b3dc9bd299a494734a39f724165","files":"f4322b3dc9bd299a494734a39f724165@2x.png,f4322b3dc9bd299a494734a39f724165@3x.png"},"200391":{"name":"f28e6dedde26b35d16868c72454f90dc","files":"f28e6dedde26b35d16868c72454f90dc@2x.png,f28e6dedde26b35d16868c72454f90dc@3x.png"},"200393":{"name":"26fdc818e76f6530b1f2cad6e7da2ce6","files":"26fdc818e76f6530b1f2cad6e7da2ce6@2x.png,26fdc818e76f6530b1f2cad6e7da2ce6@3x.png"},"200395":{"name":"50e1b470efadbbcc3cfa6224dee36d45","files":"50e1b470efadbbcc3cfa6224dee36d45@2x.png,50e1b470efadbbcc3cfa6224dee36d45@3x.png"},"200397":{"name":"0fc4b092e62861a0361cadece5d65bb3","files":"0fc4b092e62861a0361cadece5d65bb3@2x.png,0fc4b092e62861a0361cadece5d65bb3@3x.png"},"200398":{"name":"42a741445cf17550fad25819d0627bcd","files":"42a741445cf17550fad25819d0627bcd@2x.webp,42a741445cf17550fad25819d0627bcd@3x.webp"},"200399":{"name":"0eee54cf4852648c2cd998f08656ed5b","files":"0eee54cf4852648c2cd998f08656ed5b@2x.webp,0eee54cf4852648c2cd998f08656ed5b@3x.webp"},"200400":{"name":"87c66996a844871a9f580e56feb2eb4e","files":"87c66996a844871a9f580e56feb2eb4e@2x.webp,87c66996a844871a9f580e56feb2eb4e@3x.webp"},"200601":{"name":"0c3f0fbf37f0284795f904c8bf18f764","files":"0c3f0fbf37f0284795f904c8bf18f764@2x.webp,0c3f0fbf37f0284795f904c8bf18f764@3x.webp,0c3f0fbf37f0284795f904c8bf18f764@dark@2x.webp,0c3f0fbf37f0284795f904c8bf18f764@dark@3x.webp"},"200602":{"name":"82f8a4fb3b053eec566e510b17770511","files":"82f8a4fb3b053eec566e510b17770511@2x.webp,82f8a4fb3b053eec566e510b17770511@3x.webp,82f8a4fb3b053eec566e510b17770511@dark@2x.webp,82f8a4fb3b053eec566e510b17770511@dark@3x.webp"},"200603":{"name":"3fad8ba4e8d91b461aa16a47bbce0697","files":"3fad8ba4e8d91b461aa16a47bbce0697@2x.webp,3fad8ba4e8d91b461aa16a47bbce0697@3x.webp,3fad8ba4e8d91b461aa16a47bbce0697@dark@2x.webp,3fad8ba4e8d91b461aa16a47bbce0697@dark@3x.webp"},"200604":{"name":"adc00b089028cb7ccd3dd83fe194c22a","files":"adc00b089028cb7ccd3dd83fe194c22a@2x.webp,adc00b089028cb7ccd3dd83fe194c22a@3x.webp,adc00b089028cb7ccd3dd83fe194c22a@dark@2x.webp,adc00b089028cb7ccd3dd83fe194c22a@dark@3x.webp"},"200605":{"name":"98d60ab2841ca0bc2f04a418d994518d","files":"98d60ab2841ca0bc2f04a418d994518d@2x.webp,98d60ab2841ca0bc2f04a418d994518d@3x.webp,98d60ab2841ca0bc2f04a418d994518d@dark@2x.webp,98d60ab2841ca0bc2f04a418d994518d@dark@3x.webp"},"200606":{"name":"eb161215c00e7b75aac47cc2263604ca","files":"eb161215c00e7b75aac47cc2263604ca@2x.webp,eb161215c00e7b75aac47cc2263604ca@3x.webp,eb161215c00e7b75aac47cc2263604ca@dark@2x.webp,eb161215c00e7b75aac47cc2263604ca@dark@3x.webp"},"200607":{"name":"0849299deb512f3847fdff8d1030e03d","files":"0849299deb512f3847fdff8d1030e03d@2x.png,0849299deb512f3847fdff8d1030e03d@3x.png,0849299deb512f3847fdff8d1030e03d@dark@2x.png,0849299deb512f3847fdff8d1030e03d@dark@3x.png"},"200608":{"name":"15fc71c6177d63a083491827432eb17d","files":"15fc71c6177d63a083491827432eb17d@2x.png,15fc71c6177d63a083491827432eb17d@3x.png,15fc71c6177d63a083491827432eb17d@dark@2x.png,15fc71c6177d63a083491827432eb17d@dark@3x.png"},"200609":{"name":"0c947386d0a9f0daf397ce405a592e78","files":"0c947386d0a9f0daf397ce405a592e78@2x.png,0c947386d0a9f0daf397ce405a592e78@3x.png,0c947386d0a9f0daf397ce405a592e78@dark@2x.png,0c947386d0a9f0daf397ce405a592e78@dark@3x.png"},"200610":{"name":"85afc658b4426b1e4dc41a3d74658248","files":"85afc658b4426b1e4dc41a3d74658248@2x.png,85afc658b4426b1e4dc41a3d74658248@3x.png,85afc658b4426b1e4dc41a3d74658248@dark@2x.png,85afc658b4426b1e4dc41a3d74658248@dark@3x.png"},"200611":{"name":"68eccd4e6caf1c073cf6c6f3cd042010","files":"68eccd4e6caf1c073cf6c6f3cd042010@2x.png,68eccd4e6caf1c073cf6c6f3cd042010@3x.png"},"200612":{"name":"362dccfebe331c2cbb5347ea8350d5c8","files":"362dccfebe331c2cbb5347ea8350d5c8@2x.png,362dccfebe331c2cbb5347ea8350d5c8@3x.png"},"200701":{"name":"ec610c2b9a633df4dab8303daa65f17d","files":"ec610c2b9a633df4dab8303daa65f17d@2x.webp,ec610c2b9a633df4dab8303daa65f17d@3x.webp"},"200702":{"name":"e0540ea2689da723da874b5b02604ca0","files":"e0540ea2689da723da874b5b02604ca0@2x.webp,e0540ea2689da723da874b5b02604ca0@3x.webp"},"200703":{"name":"07fbda3f20a346312c44c155ab16ed86","files":"07fbda3f20a346312c44c155ab16ed86@2x.webp,07fbda3f20a346312c44c155ab16ed86@3x.webp"},"200704":{"name":"e619b875d44b0a61e209ea49a95da6d2","files":"e619b875d44b0a61e209ea49a95da6d2@2x.webp,e619b875d44b0a61e209ea49a95da6d2@3x.webp"},"200705":{"name":"22d44690f51d9e01db82446907d00b1c","files":"22d44690f51d9e01db82446907d00b1c@2x.webp,22d44690f51d9e01db82446907d00b1c@3x.webp"},"200706":{"name":"22eb32477c2a04ae891d11caa94ccaa8","files":"22eb32477c2a04ae891d11caa94ccaa8@2x.webp,22eb32477c2a04ae891d11caa94ccaa8@3x.webp"},"200707":{"name":"de34929943ab652e3cffc73430a518e8","files":"de34929943ab652e3cffc73430a518e8@2x.png,de34929943ab652e3cffc73430a518e8@3x.png"},"200708":{"name":"57546a1e984d11954051cffeeda71e2e","files":"57546a1e984d11954051cffeeda71e2e@2x.png,57546a1e984d11954051cffeeda71e2e@3x.png"},"200709":{"name":"fc2e2dd879aa7116005a9bd90c2c93a3","files":"fc2e2dd879aa7116005a9bd90c2c93a3@2x.png,fc2e2dd879aa7116005a9bd90c2c93a3@3x.png"},"200710":{"name":"3662b6f8fd98fe31c3a17b910f86baed","files":"3662b6f8fd98fe31c3a17b910f86baed@2x.png,3662b6f8fd98fe31c3a17b910f86baed@3x.png"},"202001":{"name":"8945b967f878fd6fd0b6f45510212077","files":"8945b967f878fd6fd0b6f45510212077@2x.png,8945b967f878fd6fd0b6f45510212077@3x.png"},"202003":{"name":"46012ec3110f45bbc6c6ec6fd339836b","files":"46012ec3110f45bbc6c6ec6fd339836b@2x.png,46012ec3110f45bbc6c6ec6fd339836b@3x.png"},"202005":{"name":"984eb290656b222dd165c03b14522343","files":"984eb290656b222dd165c03b14522343@2x.png,984eb290656b222dd165c03b14522343@3x.png"}},"xml":"f39bef063e604f7b18f234319112ab25.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/068ffa27fdfb8fd20ce936ae34c6f436.zip"},"201000":{"res":{"200272":{"name":"1465175b98cc7dd2f61ca69f998cdf01","files":"1465175b98cc7dd2f61ca69f998cdf01@2x.webp,1465175b98cc7dd2f61ca69f998cdf01@3x.webp,1465175b98cc7dd2f61ca69f998cdf01@dark@2x.webp,1465175b98cc7dd2f61ca69f998cdf01@dark@3x.webp"},"200274":{"name":"23c1c8c1535d52dd59994442da8fbca7","files":"23c1c8c1535d52dd59994442da8fbca7@2x.webp,23c1c8c1535d52dd59994442da8fbca7@3x.webp,23c1c8c1535d52dd59994442da8fbca7@dark@2x.webp,23c1c8c1535d52dd59994442da8fbca7@dark@3x.webp"},"200283":{"name":"523fa4032e8fddf1735233aec3a1cdf0","files":"523fa4032e8fddf1735233aec3a1cdf0@2x.webp,523fa4032e8fddf1735233aec3a1cdf0@3x.webp,523fa4032e8fddf1735233aec3a1cdf0@dark@2x.webp,523fa4032e8fddf1735233aec3a1cdf0@dark@3x.webp"},"200285":{"name":"8f2b4b71b32a73b9bb0e483866069efa","files":"8f2b4b71b32a73b9bb0e483866069efa@2x.png,8f2b4b71b32a73b9bb0e483866069efa@3x.png,8f2b4b71b32a73b9bb0e483866069efa@dark@2x.png,8f2b4b71b32a73b9bb0e483866069efa@dark@3x.png"},"200287":{"name":"6b9e55fa3fa6826a3d8301c1e39444c7","files":"6b9e55fa3fa6826a3d8301c1e39444c7@2x.png,6b9e55fa3fa6826a3d8301c1e39444c7@3x.png,6b9e55fa3fa6826a3d8301c1e39444c7@dark@2x.png,6b9e55fa3fa6826a3d8301c1e39444c7@dark@3x.png"},"200289":{"name":"4a027744b4fce5d632317022937508b9","files":"4a027744b4fce5d632317022937508b9@2x.png,4a027744b4fce5d632317022937508b9@3x.png,4a027744b4fce5d632317022937508b9@dark@2x.png,4a027744b4fce5d632317022937508b9@dark@3x.png"},"200291":{"name":"8784744fc57f86aeef0a732389d0d46a","files":"8784744fc57f86aeef0a732389d0d46a@2x.png,8784744fc57f86aeef0a732389d0d46a@3x.png,8784744fc57f86aeef0a732389d0d46a@dark@2x.png,8784744fc57f86aeef0a732389d0d46a@dark@3x.png"},"200293":{"name":"c92a6f02ebaf273ed2ed73cb10a0246d","files":"c92a6f02ebaf273ed2ed73cb10a0246d@2x.png,c92a6f02ebaf273ed2ed73cb10a0246d@3x.png,c92a6f02ebaf273ed2ed73cb10a0246d@dark@2x.png,c92a6f02ebaf273ed2ed73cb10a0246d@dark@3x.png"},"200295":{"name":"cb47a6dd477ce63d56faadf676d4f9db","files":"cb47a6dd477ce63d56faadf676d4f9db@2x.png,cb47a6dd477ce63d56faadf676d4f9db@3x.png,cb47a6dd477ce63d56faadf676d4f9db@dark@2x.png,cb47a6dd477ce63d56faadf676d4f9db@dark@3x.png"},"200297":{"name":"5fc8bb78802927f48ad485efb381d28c","files":"5fc8bb78802927f48ad485efb381d28c@2x.png,5fc8bb78802927f48ad485efb381d28c@3x.png,5fc8bb78802927f48ad485efb381d28c@dark@2x.png,5fc8bb78802927f48ad485efb381d28c@dark@3x.png"},"200299":{"name":"d5b739eef5d17e8ee07ea840789b4a97","files":"d5b739eef5d17e8ee07ea840789b4a97@2x.webp,d5b739eef5d17e8ee07ea840789b4a97@3x.webp,d5b739eef5d17e8ee07ea840789b4a97@dark@2x.webp,d5b739eef5d17e8ee07ea840789b4a97@dark@3x.webp"},"200301":{"name":"fb987c97be6c3da8c5dcbfa4b90bd746","files":"fb987c97be6c3da8c5dcbfa4b90bd746@2x.png,fb987c97be6c3da8c5dcbfa4b90bd746@3x.png,fb987c97be6c3da8c5dcbfa4b90bd746@dark@2x.png,fb987c97be6c3da8c5dcbfa4b90bd746@dark@3x.png"},"200302":{"name":"7281e5e5f99c736502a20d9349aba5e9","files":"7281e5e5f99c736502a20d9349aba5e9@2x.webp,7281e5e5f99c736502a20d9349aba5e9@3x.webp,7281e5e5f99c736502a20d9349aba5e9@dark@2x.webp,7281e5e5f99c736502a20d9349aba5e9@dark@3x.webp"},"200303":{"name":"00ff3097263b698e997c1e6d5ce39104","files":"00ff3097263b698e997c1e6d5ce39104@2x.png,00ff3097263b698e997c1e6d5ce39104@3x.png,00ff3097263b698e997c1e6d5ce39104@dark@2x.png,00ff3097263b698e997c1e6d5ce39104@dark@3x.png"},"200305":{"name":"9441c41b5fe9c0de7240ab5c5b5ac571","files":"9441c41b5fe9c0de7240ab5c5b5ac571@2x.png,9441c41b5fe9c0de7240ab5c5b5ac571@3x.png,9441c41b5fe9c0de7240ab5c5b5ac571@dark@2x.png,9441c41b5fe9c0de7240ab5c5b5ac571@dark@3x.png"},"200307":{"name":"f2bc1d8ad9fe1b622adecd2fd70cbbb6","files":"f2bc1d8ad9fe1b622adecd2fd70cbbb6@2x.png,f2bc1d8ad9fe1b622adecd2fd70cbbb6@3x.png,f2bc1d8ad9fe1b622adecd2fd70cbbb6@dark@2x.png,f2bc1d8ad9fe1b622adecd2fd70cbbb6@dark@3x.png"},"200309":{"name":"250dcd31258cbcfc3b1e4b0f3f7daadc","files":"250dcd31258cbcfc3b1e4b0f3f7daadc@2x.png,250dcd31258cbcfc3b1e4b0f3f7daadc@3x.png,250dcd31258cbcfc3b1e4b0f3f7daadc@dark@2x.png,250dcd31258cbcfc3b1e4b0f3f7daadc@dark@3x.png"},"200311":{"name":"b7ea77e08f3ea4b755a75fb80356a23e","files":"b7ea77e08f3ea4b755a75fb80356a23e@2x.png,b7ea77e08f3ea4b755a75fb80356a23e@3x.png,b7ea77e08f3ea4b755a75fb80356a23e@dark@2x.png,b7ea77e08f3ea4b755a75fb80356a23e@dark@3x.png"},"200313":{"name":"20dafbab2431b3346ac44459ffdbd553","files":"20dafbab2431b3346ac44459ffdbd553@2x.png,20dafbab2431b3346ac44459ffdbd553@3x.png,20dafbab2431b3346ac44459ffdbd553@dark@2x.png,20dafbab2431b3346ac44459ffdbd553@dark@3x.png"},"200315":{"name":"175878900d3b6710157b6c225ce7cbec","files":"175878900d3b6710157b6c225ce7cbec@2x.png,175878900d3b6710157b6c225ce7cbec@3x.png,175878900d3b6710157b6c225ce7cbec@dark@2x.png,175878900d3b6710157b6c225ce7cbec@dark@3x.png"},"200317":{"name":"c715fc73303bae41857e0ad611ed45de","files":"c715fc73303bae41857e0ad611ed45de@2x.png,c715fc73303bae41857e0ad611ed45de@3x.png,c715fc73303bae41857e0ad611ed45de@dark@2x.png,c715fc73303bae41857e0ad611ed45de@dark@3x.png"},"200320":{"name":"96c62b3e917b45782ab6b4ec36afde87","files":"96c62b3e917b45782ab6b4ec36afde87@2x.webp,96c62b3e917b45782ab6b4ec36afde87@3x.webp,96c62b3e917b45782ab6b4ec36afde87@dark@2x.webp,96c62b3e917b45782ab6b4ec36afde87@dark@3x.webp"},"200321":{"name":"94fe6167d4512b9942af8857054c3563","files":"94fe6167d4512b9942af8857054c3563@2x.webp,94fe6167d4512b9942af8857054c3563@3x.webp,94fe6167d4512b9942af8857054c3563@dark@2x.webp,94fe6167d4512b9942af8857054c3563@dark@3x.webp"},"200322":{"name":"b04754658a6c2bf667dd931e3669d3ce","files":"b04754658a6c2bf667dd931e3669d3ce@2x.webp,b04754658a6c2bf667dd931e3669d3ce@3x.webp,b04754658a6c2bf667dd931e3669d3ce@dark@2x.webp,b04754658a6c2bf667dd931e3669d3ce@dark@3x.webp"},"200323":{"name":"e1f35338ccddd69ea4b80642e3f239d8","files":"e1f35338ccddd69ea4b80642e3f239d8@2x.webp,e1f35338ccddd69ea4b80642e3f239d8@3x.webp,e1f35338ccddd69ea4b80642e3f239d8@dark@2x.webp,e1f35338ccddd69ea4b80642e3f239d8@dark@3x.webp"},"200324":{"name":"db2360168a5fe8481f6dc2cdec9d7633","files":"db2360168a5fe8481f6dc2cdec9d7633@2x.webp,db2360168a5fe8481f6dc2cdec9d7633@3x.webp,db2360168a5fe8481f6dc2cdec9d7633@dark@2x.webp,db2360168a5fe8481f6dc2cdec9d7633@dark@3x.webp"},"200331":{"name":"b6dad609cff78e3963a6ccf36ec0144b","files":"b6dad609cff78e3963a6ccf36ec0144b@2x.png,b6dad609cff78e3963a6ccf36ec0144b@3x.png,b6dad609cff78e3963a6ccf36ec0144b@dark@2x.png,b6dad609cff78e3963a6ccf36ec0144b@dark@3x.png"},"200333":{"name":"dd6dd48e0ac43cb9cf0b8cc87f373841","files":"dd6dd48e0ac43cb9cf0b8cc87f373841@2x.png,dd6dd48e0ac43cb9cf0b8cc87f373841@3x.png,dd6dd48e0ac43cb9cf0b8cc87f373841@dark@2x.png,dd6dd48e0ac43cb9cf0b8cc87f373841@dark@3x.png"},"200335":{"name":"5d9ac4853ad1aa034898541ebab005cd","files":"5d9ac4853ad1aa034898541ebab005cd@2x.png,5d9ac4853ad1aa034898541ebab005cd@3x.png,5d9ac4853ad1aa034898541ebab005cd@dark@2x.png,5d9ac4853ad1aa034898541ebab005cd@dark@3x.png"},"200352":{"name":"2a7347a362208e9ce2ca7941f8611293","files":"2a7347a362208e9ce2ca7941f8611293@2x.webp,2a7347a362208e9ce2ca7941f8611293@3x.webp"},"200354":{"name":"f56e47feb9ae6b01facb3f7a6f697db9","files":"f56e47feb9ae6b01facb3f7a6f697db9@2x.webp,f56e47feb9ae6b01facb3f7a6f697db9@3x.webp"},"200357":{"name":"096d0922e502d94fb5c630d78b16b127","files":"096d0922e502d94fb5c630d78b16b127@2x.webp,096d0922e502d94fb5c630d78b16b127@3x.webp"},"200358":{"name":"b7d80b51c88c55fde5a41fd61d7e02d1","files":"b7d80b51c88c55fde5a41fd61d7e02d1@2x.webp,b7d80b51c88c55fde5a41fd61d7e02d1@3x.webp"},"200363":{"name":"d6f96016838716ff0f495ad6ea5f2c69","files":"d6f96016838716ff0f495ad6ea5f2c69@2x.webp,d6f96016838716ff0f495ad6ea5f2c69@3x.webp"},"200365":{"name":"526779327f5d871ab6b07b2b420b30f1","files":"526779327f5d871ab6b07b2b420b30f1@2x.png,526779327f5d871ab6b07b2b420b30f1@3x.png"},"200367":{"name":"7d6caf500ff237d5e1ee8adeccae47c6","files":"7d6caf500ff237d5e1ee8adeccae47c6@2x.png,7d6caf500ff237d5e1ee8adeccae47c6@3x.png"},"200369":{"name":"049180f4f46e88813801d1e944a1b8d3","files":"049180f4f46e88813801d1e944a1b8d3@2x.png,049180f4f46e88813801d1e944a1b8d3@3x.png"},"200371":{"name":"43d6cbef30d72fbb00befdeb39731837","files":"43d6cbef30d72fbb00befdeb39731837@2x.png,43d6cbef30d72fbb00befdeb39731837@3x.png"},"200373":{"name":"47a87273a5e7c0c7a3ebc21ff32047ee","files":"47a87273a5e7c0c7a3ebc21ff32047ee@2x.png,47a87273a5e7c0c7a3ebc21ff32047ee@3x.png"},"200375":{"name":"b4efc90c9c4812706953cc22f5f51fb5","files":"b4efc90c9c4812706953cc22f5f51fb5@2x.png,b4efc90c9c4812706953cc22f5f51fb5@3x.png"},"200377":{"name":"8f8c9d681c4ef545e0bae547b0056722","files":"8f8c9d681c4ef545e0bae547b0056722@2x.png,8f8c9d681c4ef545e0bae547b0056722@3x.png"},"200379":{"name":"e5e2b1a605b415195779164f20c1a860","files":"e5e2b1a605b415195779164f20c1a860@2x.webp,e5e2b1a605b415195779164f20c1a860@3x.webp"},"200381":{"name":"2740b1d66bee5c680b74fd4f6a6b2e4c","files":"2740b1d66bee5c680b74fd4f6a6b2e4c@2x.png,2740b1d66bee5c680b74fd4f6a6b2e4c@3x.png"},"200382":{"name":"9928e4e60b6bcf84a24b89c733cf8a20","files":"9928e4e60b6bcf84a24b89c733cf8a20@2x.webp,9928e4e60b6bcf84a24b89c733cf8a20@3x.webp"},"200383":{"name":"1e44f305ccbd3ca047393e01cd2ae365","files":"1e44f305ccbd3ca047393e01cd2ae365@2x.png,1e44f305ccbd3ca047393e01cd2ae365@3x.png"},"200385":{"name":"eb53eea76af2c3c01e3a271a7e1c1200","files":"eb53eea76af2c3c01e3a271a7e1c1200@2x.png,eb53eea76af2c3c01e3a271a7e1c1200@3x.png"},"200387":{"name":"45169e5b7dd7c5e2831d3fcb05d5d58b","files":"45169e5b7dd7c5e2831d3fcb05d5d58b@2x.png,45169e5b7dd7c5e2831d3fcb05d5d58b@3x.png"},"200389":{"name":"f4322b3dc9bd299a494734a39f724165","files":"f4322b3dc9bd299a494734a39f724165@2x.png,f4322b3dc9bd299a494734a39f724165@3x.png"},"200391":{"name":"f28e6dedde26b35d16868c72454f90dc","files":"f28e6dedde26b35d16868c72454f90dc@2x.png,f28e6dedde26b35d16868c72454f90dc@3x.png"},"200393":{"name":"26fdc818e76f6530b1f2cad6e7da2ce6","files":"26fdc818e76f6530b1f2cad6e7da2ce6@2x.png,26fdc818e76f6530b1f2cad6e7da2ce6@3x.png"},"200395":{"name":"50e1b470efadbbcc3cfa6224dee36d45","files":"50e1b470efadbbcc3cfa6224dee36d45@2x.png,50e1b470efadbbcc3cfa6224dee36d45@3x.png"},"200397":{"name":"0fc4b092e62861a0361cadece5d65bb3","files":"0fc4b092e62861a0361cadece5d65bb3@2x.png,0fc4b092e62861a0361cadece5d65bb3@3x.png"},"200398":{"name":"42a741445cf17550fad25819d0627bcd","files":"42a741445cf17550fad25819d0627bcd@2x.webp,42a741445cf17550fad25819d0627bcd@3x.webp"},"200399":{"name":"0eee54cf4852648c2cd998f08656ed5b","files":"0eee54cf4852648c2cd998f08656ed5b@2x.webp,0eee54cf4852648c2cd998f08656ed5b@3x.webp"},"200400":{"name":"87c66996a844871a9f580e56feb2eb4e","files":"87c66996a844871a9f580e56feb2eb4e@2x.webp,87c66996a844871a9f580e56feb2eb4e@3x.webp"},"201003":{"name":"2971cbd397735619d5723a1c53eb49c5","files":"2971cbd397735619d5723a1c53eb49c5@2x.png,2971cbd397735619d5723a1c53eb49c5@3x.png,2971cbd397735619d5723a1c53eb49c5@dark@2x.png,2971cbd397735619d5723a1c53eb49c5@dark@3x.png"},"201004":{"name":"663fac0edd9015002386499e9eec5bd0","files":"663fac0edd9015002386499e9eec5bd0@2x.png,663fac0edd9015002386499e9eec5bd0@3x.png"},"201090":{"name":"9566fd4721a3b7816e0e1ce993240400","files":"9566fd4721a3b7816e0e1ce993240400@2x.png,9566fd4721a3b7816e0e1ce993240400@3x.png,9566fd4721a3b7816e0e1ce993240400@dark@2x.png,9566fd4721a3b7816e0e1ce993240400@dark@3x.png"},"201091":{"name":"938e35f203b669b4dae5739099d145f9","files":"938e35f203b669b4dae5739099d145f9@2x.png,938e35f203b669b4dae5739099d145f9@3x.png"},"201092":{"name":"c6c27d2f9c6ca30e8b2d9821f05d9e77","files":"c6c27d2f9c6ca30e8b2d9821f05d9e77@2x.png,c6c27d2f9c6ca30e8b2d9821f05d9e77@3x.png,c6c27d2f9c6ca30e8b2d9821f05d9e77@dark@2x.png,c6c27d2f9c6ca30e8b2d9821f05d9e77@dark@3x.png"},"201093":{"name":"129f649a0dcaf06259335a71bb1d7350","files":"129f649a0dcaf06259335a71bb1d7350@2x.png,129f649a0dcaf06259335a71bb1d7350@3x.png"},"202001":{"name":"8945b967f878fd6fd0b6f45510212077","files":"8945b967f878fd6fd0b6f45510212077@2x.png,8945b967f878fd6fd0b6f45510212077@3x.png"},"202003":{"name":"46012ec3110f45bbc6c6ec6fd339836b","files":"46012ec3110f45bbc6c6ec6fd339836b@2x.png,46012ec3110f45bbc6c6ec6fd339836b@3x.png"},"202005":{"name":"984eb290656b222dd165c03b14522343","files":"984eb290656b222dd165c03b14522343@2x.png,984eb290656b222dd165c03b14522343@3x.png"}},"xml":"3666f29c02a2c4423dfdb9ffeb12d562.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/ba3595faff9d7c8819bab81b9bf91397.zip"},"201002":{"res":{"201100":{"name":"cb2e8bcc8dfa81f5f4fad048017ef5b0","files":"cb2e8bcc8dfa81f5f4fad048017ef5b0@2x.png,cb2e8bcc8dfa81f5f4fad048017ef5b0@3x.png,cb2e8bcc8dfa81f5f4fad048017ef5b0@dark@2x.png,cb2e8bcc8dfa81f5f4fad048017ef5b0@dark@3x.png"},"201101":{"name":"8cf9b0f52768665877cac5580cb9dad8","files":"8cf9b0f52768665877cac5580cb9dad8@2x.png,8cf9b0f52768665877cac5580cb9dad8@3x.png,8cf9b0f52768665877cac5580cb9dad8@dark@2x.png,8cf9b0f52768665877cac5580cb9dad8@dark@3x.png"},"201102":{"name":"e5d908aa885442d3c87f80d9f06ce621","files":"e5d908aa885442d3c87f80d9f06ce621@2x.png,e5d908aa885442d3c87f80d9f06ce621@3x.png,e5d908aa885442d3c87f80d9f06ce621@dark@2x.png,e5d908aa885442d3c87f80d9f06ce621@dark@3x.png"},"201103":{"name":"a27f88e26ad39497291d70c729bb191e","files":"a27f88e26ad39497291d70c729bb191e@2x.png,a27f88e26ad39497291d70c729bb191e@3x.png,a27f88e26ad39497291d70c729bb191e@dark@2x.png,a27f88e26ad39497291d70c729bb191e@dark@3x.png"},"201104":{"name":"91d15d915d03904740c78dc9616699c9","files":"91d15d915d03904740c78dc9616699c9@2x.png,91d15d915d03904740c78dc9616699c9@3x.png,91d15d915d03904740c78dc9616699c9@dark@2x.png,91d15d915d03904740c78dc9616699c9@dark@3x.png"},"201105":{"name":"10051cce62d04cc6cc5b8eed3ba65a93","files":"10051cce62d04cc6cc5b8eed3ba65a93@2x.png,10051cce62d04cc6cc5b8eed3ba65a93@3x.png,10051cce62d04cc6cc5b8eed3ba65a93@dark@2x.png,10051cce62d04cc6cc5b8eed3ba65a93@dark@3x.png"},"201106":{"name":"422dbc7ccbb1984476226bc150d54ab1","files":"422dbc7ccbb1984476226bc150d54ab1@2x.png,422dbc7ccbb1984476226bc150d54ab1@3x.png,422dbc7ccbb1984476226bc150d54ab1@dark@2x.png,422dbc7ccbb1984476226bc150d54ab1@dark@3x.png"},"201107":{"name":"322ba924efcad3924ed53621e913c37f","files":"322ba924efcad3924ed53621e913c37f@2x.png,322ba924efcad3924ed53621e913c37f@3x.png,322ba924efcad3924ed53621e913c37f@dark@2x.png,322ba924efcad3924ed53621e913c37f@dark@3x.png"},"201108":{"name":"2ce72c208301bdb98f5553694b117d6e","files":"2ce72c208301bdb98f5553694b117d6e@2x.png,2ce72c208301bdb98f5553694b117d6e@3x.png,2ce72c208301bdb98f5553694b117d6e@dark@2x.png,2ce72c208301bdb98f5553694b117d6e@dark@3x.png"},"201109":{"name":"310d1360c75b8253f33e081c824c4548","files":"310d1360c75b8253f33e081c824c4548@2x.png,310d1360c75b8253f33e081c824c4548@3x.png,310d1360c75b8253f33e081c824c4548@dark@2x.png,310d1360c75b8253f33e081c824c4548@dark@3x.png"},"201110":{"name":"a4af3d8c3783a6a7eb4e136c19f78f6d","files":"a4af3d8c3783a6a7eb4e136c19f78f6d@2x.png,a4af3d8c3783a6a7eb4e136c19f78f6d@3x.png,a4af3d8c3783a6a7eb4e136c19f78f6d@dark@2x.png,a4af3d8c3783a6a7eb4e136c19f78f6d@dark@3x.png"},"201111":{"name":"0bbcc690f8e45f2d98dd4f4a20250be9","files":"0bbcc690f8e45f2d98dd4f4a20250be9@2x.png,0bbcc690f8e45f2d98dd4f4a20250be9@3x.png,0bbcc690f8e45f2d98dd4f4a20250be9@dark@2x.png,0bbcc690f8e45f2d98dd4f4a20250be9@dark@3x.png"},"201112":{"name":"d6edbdd4f8d23279779cfa992d8e93fd","files":"d6edbdd4f8d23279779cfa992d8e93fd@2x.png,d6edbdd4f8d23279779cfa992d8e93fd@3x.png,d6edbdd4f8d23279779cfa992d8e93fd@dark@2x.png,d6edbdd4f8d23279779cfa992d8e93fd@dark@3x.png"},"201113":{"name":"783cfa243a3fab883587ae7e575c846e","files":"783cfa243a3fab883587ae7e575c846e@2x.png,783cfa243a3fab883587ae7e575c846e@3x.png,783cfa243a3fab883587ae7e575c846e@dark@2x.png,783cfa243a3fab883587ae7e575c846e@dark@3x.png"},"201114":{"name":"ce4d74aff4deaf6d026113a8eaab5fe7","files":"ce4d74aff4deaf6d026113a8eaab5fe7@2x.png,ce4d74aff4deaf6d026113a8eaab5fe7@3x.png,ce4d74aff4deaf6d026113a8eaab5fe7@dark@2x.png,ce4d74aff4deaf6d026113a8eaab5fe7@dark@3x.png"},"201115":{"name":"15cf357586b934176f2d5241231fd2b6","files":"15cf357586b934176f2d5241231fd2b6@2x.png,15cf357586b934176f2d5241231fd2b6@3x.png,15cf357586b934176f2d5241231fd2b6@dark@2x.png,15cf357586b934176f2d5241231fd2b6@dark@3x.png"},"201116":{"name":"e283a79ff33e684985d4e6263045dc81","files":"e283a79ff33e684985d4e6263045dc81@2x.png,e283a79ff33e684985d4e6263045dc81@3x.png,e283a79ff33e684985d4e6263045dc81@dark@2x.png,e283a79ff33e684985d4e6263045dc81@dark@3x.png"},"201117":{"name":"297e4180ed81664b8d504e81584bae45","files":"297e4180ed81664b8d504e81584bae45@2x.png,297e4180ed81664b8d504e81584bae45@3x.png,297e4180ed81664b8d504e81584bae45@dark@2x.png,297e4180ed81664b8d504e81584bae45@dark@3x.png"},"201118":{"name":"0b63e55d7bb5f46c76980b31c9683aec","files":"0b63e55d7bb5f46c76980b31c9683aec@2x.png,0b63e55d7bb5f46c76980b31c9683aec@3x.png,0b63e55d7bb5f46c76980b31c9683aec@dark@2x.png,0b63e55d7bb5f46c76980b31c9683aec@dark@3x.png"},"201119":{"name":"0fa38455d201b97eca7fb7a1bad576d1","files":"0fa38455d201b97eca7fb7a1bad576d1@2x.png,0fa38455d201b97eca7fb7a1bad576d1@3x.png,0fa38455d201b97eca7fb7a1bad576d1@dark@2x.png,0fa38455d201b97eca7fb7a1bad576d1@dark@3x.png"},"201120":{"name":"818dc70e180cd72a17238b73ceaf02ff","files":"818dc70e180cd72a17238b73ceaf02ff@2x.png,818dc70e180cd72a17238b73ceaf02ff@3x.png,818dc70e180cd72a17238b73ceaf02ff@dark@2x.png,818dc70e180cd72a17238b73ceaf02ff@dark@3x.png"},"201121":{"name":"ab70e01926f1320487cd3b2a51b9e721","files":"ab70e01926f1320487cd3b2a51b9e721@2x.png,ab70e01926f1320487cd3b2a51b9e721@3x.png,ab70e01926f1320487cd3b2a51b9e721@dark@2x.png,ab70e01926f1320487cd3b2a51b9e721@dark@3x.png"},"201122":{"name":"701cde5e82b97378f2037a954df13b8e","files":"701cde5e82b97378f2037a954df13b8e@2x.png,701cde5e82b97378f2037a954df13b8e@3x.png,701cde5e82b97378f2037a954df13b8e@dark@2x.png,701cde5e82b97378f2037a954df13b8e@dark@3x.png"},"201123":{"name":"32096d91833884d76fc70bd74dc7ed50","files":"32096d91833884d76fc70bd74dc7ed50@2x.png,32096d91833884d76fc70bd74dc7ed50@3x.png,32096d91833884d76fc70bd74dc7ed50@dark@2x.png,32096d91833884d76fc70bd74dc7ed50@dark@3x.png"},"201124":{"name":"e3091867c4a2fa686b9e77e1695f6d3d","files":"e3091867c4a2fa686b9e77e1695f6d3d@2x.png,e3091867c4a2fa686b9e77e1695f6d3d@3x.png,e3091867c4a2fa686b9e77e1695f6d3d@dark@2x.png,e3091867c4a2fa686b9e77e1695f6d3d@dark@3x.png"},"201300":{"name":"6e5943c4ef23870b8814233497dba0a6","files":"6e5943c4ef23870b8814233497dba0a6@2x.png,6e5943c4ef23870b8814233497dba0a6@3x.png"},"201301":{"name":"cf0ea13d3e7c6c9d932b9e23d759ce63","files":"cf0ea13d3e7c6c9d932b9e23d759ce63@2x.png,cf0ea13d3e7c6c9d932b9e23d759ce63@3x.png"},"201302":{"name":"677104672847f846cc4388717be99193","files":"677104672847f846cc4388717be99193@2x.png,677104672847f846cc4388717be99193@3x.png"},"201303":{"name":"a3442798b8ef7c8043cbead2c91f73de","files":"a3442798b8ef7c8043cbead2c91f73de@2x.png,a3442798b8ef7c8043cbead2c91f73de@3x.png"},"201304":{"name":"80a07ea3b022c58b519d4dfeb2304554","files":"80a07ea3b022c58b519d4dfeb2304554@2x.png,80a07ea3b022c58b519d4dfeb2304554@3x.png"},"201305":{"name":"ebf332948071453fe21a572688fb30c8","files":"ebf332948071453fe21a572688fb30c8@2x.png,ebf332948071453fe21a572688fb30c8@3x.png"},"201306":{"name":"16be004908c57b43e9ce61b17abd013c","files":"16be004908c57b43e9ce61b17abd013c@2x.png,16be004908c57b43e9ce61b17abd013c@3x.png"},"201307":{"name":"e05dce060eca37c62467205b72dd1489","files":"e05dce060eca37c62467205b72dd1489@2x.png,e05dce060eca37c62467205b72dd1489@3x.png"},"201308":{"name":"9b2f96381ab4650bfe794f40f7fe630d","files":"9b2f96381ab4650bfe794f40f7fe630d@2x.png,9b2f96381ab4650bfe794f40f7fe630d@3x.png"},"201309":{"name":"934ed4dc2bc9e7b62f2c75ad2dc808e7","files":"934ed4dc2bc9e7b62f2c75ad2dc808e7@2x.png,934ed4dc2bc9e7b62f2c75ad2dc808e7@3x.png"},"201310":{"name":"2f96200c66127ff7219f58a1231d6657","files":"2f96200c66127ff7219f58a1231d6657@2x.png,2f96200c66127ff7219f58a1231d6657@3x.png"},"201311":{"name":"f44b755f3f4279f404766c9b3358d8fc","files":"f44b755f3f4279f404766c9b3358d8fc@2x.png,f44b755f3f4279f404766c9b3358d8fc@3x.png"},"201312":{"name":"78c463fe892740a9a1a2f40ba3c448db","files":"78c463fe892740a9a1a2f40ba3c448db@2x.png,78c463fe892740a9a1a2f40ba3c448db@3x.png"},"201313":{"name":"05d62c6de95a662195d3fc635f023d5a","files":"05d62c6de95a662195d3fc635f023d5a@2x.png,05d62c6de95a662195d3fc635f023d5a@3x.png"},"201314":{"name":"361e39c328b3cbb7f8c54e48fa6c882d","files":"361e39c328b3cbb7f8c54e48fa6c882d@2x.png,361e39c328b3cbb7f8c54e48fa6c882d@3x.png"},"201315":{"name":"847047d76bbca806ea5532c96fa0aede","files":"847047d76bbca806ea5532c96fa0aede@2x.png,847047d76bbca806ea5532c96fa0aede@3x.png"},"201316":{"name":"93041aa1e6b171413cf4332577fb74d5","files":"93041aa1e6b171413cf4332577fb74d5@2x.png,93041aa1e6b171413cf4332577fb74d5@3x.png"},"201317":{"name":"e8e62e88828717a06f437e20aa15078c","files":"e8e62e88828717a06f437e20aa15078c@2x.png,e8e62e88828717a06f437e20aa15078c@3x.png"},"201318":{"name":"9bf59b7c718e40fc26b9c3c818a51536","files":"9bf59b7c718e40fc26b9c3c818a51536@2x.png,9bf59b7c718e40fc26b9c3c818a51536@3x.png"},"201319":{"name":"7cd1d5ac4406c27a0e973c3b1e352221","files":"7cd1d5ac4406c27a0e973c3b1e352221@2x.png,7cd1d5ac4406c27a0e973c3b1e352221@3x.png"},"201320":{"name":"dfa3e5d159e508cbb66bd076947cbe7a","files":"dfa3e5d159e508cbb66bd076947cbe7a@2x.png,dfa3e5d159e508cbb66bd076947cbe7a@3x.png"},"201321":{"name":"30e5150aafc4b096537c3c1b731c3bfb","files":"30e5150aafc4b096537c3c1b731c3bfb@2x.png,30e5150aafc4b096537c3c1b731c3bfb@3x.png"},"201322":{"name":"1824cc97d7eabce19791ce35197ad578","files":"1824cc97d7eabce19791ce35197ad578@2x.png,1824cc97d7eabce19791ce35197ad578@3x.png"},"201323":{"name":"7c2aee26f47707f8caf81236ec08e261","files":"7c2aee26f47707f8caf81236ec08e261@2x.png,7c2aee26f47707f8caf81236ec08e261@3x.png"},"201324":{"name":"726b9933768e17630497a7df61e62ea5","files":"726b9933768e17630497a7df61e62ea5@2x.png,726b9933768e17630497a7df61e62ea5@3x.png"}},"xml":"a5257667afd88312814180facde5edc8.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/c24500862a573e511977f6228fba6ea2.zip"},"201005":{"res":{},"xml":"24c5343372c9af0e436f2ad0281a293b.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/767f06c5a0ab88a42b9cfdc6fec3800d.zip"},"202430":{"res":{"200271":{"name":"eb9142a1791bf08e7fecdc2f2261e561","files":"eb9142a1791bf08e7fecdc2f2261e561@2x.webp,eb9142a1791bf08e7fecdc2f2261e561@3x.webp,eb9142a1791bf08e7fecdc2f2261e561@dark@2x.webp,eb9142a1791bf08e7fecdc2f2261e561@dark@3x.webp"},"200273":{"name":"85c96fbc2e73a33d3c8bcf6c61642751","files":"85c96fbc2e73a33d3c8bcf6c61642751@2x.webp,85c96fbc2e73a33d3c8bcf6c61642751@3x.webp,85c96fbc2e73a33d3c8bcf6c61642751@dark@2x.webp,85c96fbc2e73a33d3c8bcf6c61642751@dark@3x.webp"},"200275":{"name":"6ec0f1d6529240a9d5ac57e12b7295cd","files":"6ec0f1d6529240a9d5ac57e12b7295cd@2x.webp,6ec0f1d6529240a9d5ac57e12b7295cd@3x.webp,6ec0f1d6529240a9d5ac57e12b7295cd@dark@2x.webp,6ec0f1d6529240a9d5ac57e12b7295cd@dark@3x.webp"},"200276":{"name":"290122181d741a5bf54df95c01b57948","files":"290122181d741a5bf54df95c01b57948@2x.webp,290122181d741a5bf54df95c01b57948@3x.webp,290122181d741a5bf54df95c01b57948@dark@2x.webp,290122181d741a5bf54df95c01b57948@dark@3x.webp"},"200279":{"name":"58dda7c20ebc64d9f4f33421aefe2bfc","files":"58dda7c20ebc64d9f4f33421aefe2bfc@2x.webp,58dda7c20ebc64d9f4f33421aefe2bfc@3x.webp,58dda7c20ebc64d9f4f33421aefe2bfc@dark@2x.webp,58dda7c20ebc64d9f4f33421aefe2bfc@dark@3x.webp"},"200280":{"name":"e943cc0960ad851a566070a0334b9578","files":"e943cc0960ad851a566070a0334b9578@2x.webp,e943cc0960ad851a566070a0334b9578@3x.webp,e943cc0960ad851a566070a0334b9578@dark@2x.webp,e943cc0960ad851a566070a0334b9578@dark@3x.webp"},"200281":{"name":"8288d41f67e6becf551d34dc8790c0c4","files":"8288d41f67e6becf551d34dc8790c0c4@2x.webp,8288d41f67e6becf551d34dc8790c0c4@3x.webp,8288d41f67e6becf551d34dc8790c0c4@dark@2x.webp,8288d41f67e6becf551d34dc8790c0c4@dark@3x.webp"},"200282":{"name":"17736889a31f2585a7adb1d02ec81e81","files":"17736889a31f2585a7adb1d02ec81e81@2x.webp,17736889a31f2585a7adb1d02ec81e81@3x.webp,17736889a31f2585a7adb1d02ec81e81@dark@2x.webp,17736889a31f2585a7adb1d02ec81e81@dark@3x.webp"},"200284":{"name":"366424e216ae1b22daea5460702215aa","files":"366424e216ae1b22daea5460702215aa@2x.webp,366424e216ae1b22daea5460702215aa@3x.webp,366424e216ae1b22daea5460702215aa@dark@2x.webp,366424e216ae1b22daea5460702215aa@dark@3x.webp"},"200286":{"name":"b262270029ba6f8dae25fec2b129410e","files":"b262270029ba6f8dae25fec2b129410e@2x.webp,b262270029ba6f8dae25fec2b129410e@3x.webp,b262270029ba6f8dae25fec2b129410e@dark@2x.webp,b262270029ba6f8dae25fec2b129410e@dark@3x.webp"},"200288":{"name":"e68dc52bd2efa6682714d6e947fa5629","files":"e68dc52bd2efa6682714d6e947fa5629@2x.webp,e68dc52bd2efa6682714d6e947fa5629@3x.webp,e68dc52bd2efa6682714d6e947fa5629@dark@2x.webp,e68dc52bd2efa6682714d6e947fa5629@dark@3x.webp"},"200290":{"name":"dd8a627a449c93d3fbe6e71fd302e5c2","files":"dd8a627a449c93d3fbe6e71fd302e5c2@2x.webp,dd8a627a449c93d3fbe6e71fd302e5c2@3x.webp,dd8a627a449c93d3fbe6e71fd302e5c2@dark@2x.webp,dd8a627a449c93d3fbe6e71fd302e5c2@dark@3x.webp"},"200292":{"name":"78eee33626a68d57bec7b6ba8fd87361","files":"78eee33626a68d57bec7b6ba8fd87361@2x.webp,78eee33626a68d57bec7b6ba8fd87361@3x.webp,78eee33626a68d57bec7b6ba8fd87361@dark@2x.webp,78eee33626a68d57bec7b6ba8fd87361@dark@3x.webp"},"200294":{"name":"b4a90aa6dca51439ec038fad9d13a668","files":"b4a90aa6dca51439ec038fad9d13a668@2x.webp,b4a90aa6dca51439ec038fad9d13a668@3x.webp,b4a90aa6dca51439ec038fad9d13a668@dark@2x.webp,b4a90aa6dca51439ec038fad9d13a668@dark@3x.webp"},"200296":{"name":"25b4b06c4d19b76ce4c294b5aa66e609","files":"25b4b06c4d19b76ce4c294b5aa66e609@2x.webp,25b4b06c4d19b76ce4c294b5aa66e609@3x.webp,25b4b06c4d19b76ce4c294b5aa66e609@dark@2x.webp,25b4b06c4d19b76ce4c294b5aa66e609@dark@3x.webp"},"200298":{"name":"fc0c959d46cbfea88c77a4addce9614c","files":"fc0c959d46cbfea88c77a4addce9614c@2x.webp,fc0c959d46cbfea88c77a4addce9614c@3x.webp,fc0c959d46cbfea88c77a4addce9614c@dark@2x.webp,fc0c959d46cbfea88c77a4addce9614c@dark@3x.webp"},"200300":{"name":"eff82b28ba1cabe1dc7c79df840ec60e","files":"eff82b28ba1cabe1dc7c79df840ec60e@2x.webp,eff82b28ba1cabe1dc7c79df840ec60e@3x.webp,eff82b28ba1cabe1dc7c79df840ec60e@dark@2x.webp,eff82b28ba1cabe1dc7c79df840ec60e@dark@3x.webp"},"200302":{"name":"7281e5e5f99c736502a20d9349aba5e9","files":"7281e5e5f99c736502a20d9349aba5e9@2x.webp,7281e5e5f99c736502a20d9349aba5e9@3x.webp,7281e5e5f99c736502a20d9349aba5e9@dark@2x.webp,7281e5e5f99c736502a20d9349aba5e9@dark@3x.webp"},"200303":{"name":"00ff3097263b698e997c1e6d5ce39104","files":"00ff3097263b698e997c1e6d5ce39104@2x.png,00ff3097263b698e997c1e6d5ce39104@3x.png,00ff3097263b698e997c1e6d5ce39104@dark@2x.png,00ff3097263b698e997c1e6d5ce39104@dark@3x.png"},"200304":{"name":"7f53a4308520c09e2a5fce74e36307ff","files":"7f53a4308520c09e2a5fce74e36307ff@2x.webp,7f53a4308520c09e2a5fce74e36307ff@3x.webp,7f53a4308520c09e2a5fce74e36307ff@dark@2x.webp,7f53a4308520c09e2a5fce74e36307ff@dark@3x.webp"},"200306":{"name":"055ae12b4672b23f6428b1be0ac37ad8","files":"055ae12b4672b23f6428b1be0ac37ad8@2x.webp,055ae12b4672b23f6428b1be0ac37ad8@3x.webp,055ae12b4672b23f6428b1be0ac37ad8@dark@2x.webp,055ae12b4672b23f6428b1be0ac37ad8@dark@3x.webp"},"200308":{"name":"f88e9bffd942a2e78f4fa99f172e95d8","files":"f88e9bffd942a2e78f4fa99f172e95d8@2x.webp,f88e9bffd942a2e78f4fa99f172e95d8@3x.webp,f88e9bffd942a2e78f4fa99f172e95d8@dark@2x.webp,f88e9bffd942a2e78f4fa99f172e95d8@dark@3x.webp"},"200310":{"name":"f6e3783a691cd4623901a7866fe3066e","files":"f6e3783a691cd4623901a7866fe3066e@2x.webp,f6e3783a691cd4623901a7866fe3066e@3x.webp,f6e3783a691cd4623901a7866fe3066e@dark@2x.webp,f6e3783a691cd4623901a7866fe3066e@dark@3x.webp"},"200312":{"name":"a96a85a0933d64133d0df8b29a7bdd8e","files":"a96a85a0933d64133d0df8b29a7bdd8e@2x.png,a96a85a0933d64133d0df8b29a7bdd8e@3x.png,a96a85a0933d64133d0df8b29a7bdd8e@dark@2x.png,a96a85a0933d64133d0df8b29a7bdd8e@dark@3x.png"},"200314":{"name":"291f8ad820624b26e45150a49ed80abe","files":"291f8ad820624b26e45150a49ed80abe@2x.png,291f8ad820624b26e45150a49ed80abe@3x.png,291f8ad820624b26e45150a49ed80abe@dark@2x.png,291f8ad820624b26e45150a49ed80abe@dark@3x.png"},"200316":{"name":"be25ba12eff8306fda8cb26861750584","files":"be25ba12eff8306fda8cb26861750584@2x.png,be25ba12eff8306fda8cb26861750584@3x.png,be25ba12eff8306fda8cb26861750584@dark@2x.png,be25ba12eff8306fda8cb26861750584@dark@3x.png"},"200330":{"name":"b868af8e479bdfb581936ea0d0a35f51","files":"b868af8e479bdfb581936ea0d0a35f51@2x.png,b868af8e479bdfb581936ea0d0a35f51@3x.png,b868af8e479bdfb581936ea0d0a35f51@dark@2x.png,b868af8e479bdfb581936ea0d0a35f51@dark@3x.png"},"200332":{"name":"db09becff59298d758742757802ad02c","files":"db09becff59298d758742757802ad02c@2x.png,db09becff59298d758742757802ad02c@3x.png,db09becff59298d758742757802ad02c@dark@2x.png,db09becff59298d758742757802ad02c@dark@3x.png"},"200334":{"name":"dd0fa105b13a3e6f4bc01f39e95c8ebd","files":"dd0fa105b13a3e6f4bc01f39e95c8ebd@2x.png,dd0fa105b13a3e6f4bc01f39e95c8ebd@3x.png,dd0fa105b13a3e6f4bc01f39e95c8ebd@dark@2x.png,dd0fa105b13a3e6f4bc01f39e95c8ebd@dark@3x.png"},"200351":{"name":"2b838cbe135b907fb34159794b584c01","files":"2b838cbe135b907fb34159794b584c01@2x.webp,2b838cbe135b907fb34159794b584c01@3x.webp"},"200353":{"name":"b76eb989ef8ebe5162d23fb79c26fdde","files":"b76eb989ef8ebe5162d23fb79c26fdde@2x.webp,b76eb989ef8ebe5162d23fb79c26fdde@3x.webp"},"200355":{"name":"75a6edecd34b71deaa30b03bc67d5efb","files":"75a6edecd34b71deaa30b03bc67d5efb@2x.webp,75a6edecd34b71deaa30b03bc67d5efb@3x.webp"},"200356":{"name":"f83f718998772469ad96f640e43266e6","files":"f83f718998772469ad96f640e43266e6@2x.webp,f83f718998772469ad96f640e43266e6@3x.webp"},"200359":{"name":"a65f29fc406a834886a63738b9b6e2d8","files":"a65f29fc406a834886a63738b9b6e2d8@2x.webp,a65f29fc406a834886a63738b9b6e2d8@3x.webp"},"200360":{"name":"a0e9a427a8a8adc83bdd9f1fae3887b8","files":"a0e9a427a8a8adc83bdd9f1fae3887b8@2x.webp,a0e9a427a8a8adc83bdd9f1fae3887b8@3x.webp"},"200361":{"name":"fd89d70b71eaebbf2ff264e2ebf14004","files":"fd89d70b71eaebbf2ff264e2ebf14004@2x.webp,fd89d70b71eaebbf2ff264e2ebf14004@3x.webp"},"200362":{"name":"cecc89573126da56aec9deb93ae44682","files":"cecc89573126da56aec9deb93ae44682@2x.webp,cecc89573126da56aec9deb93ae44682@3x.webp"},"200364":{"name":"9025e5fc3d239e216e6474637a771c7b","files":"9025e5fc3d239e216e6474637a771c7b@2x.webp,9025e5fc3d239e216e6474637a771c7b@3x.webp"},"200366":{"name":"b465ae7c6477d2788eace93fdd35e1c7","files":"b465ae7c6477d2788eace93fdd35e1c7@2x.webp,b465ae7c6477d2788eace93fdd35e1c7@3x.webp"},"200368":{"name":"f2a5460c6b5c110b328aeacd9770d696","files":"f2a5460c6b5c110b328aeacd9770d696@2x.webp,f2a5460c6b5c110b328aeacd9770d696@3x.webp"},"200370":{"name":"3fd48cfa30e75a022558d801956ec10d","files":"3fd48cfa30e75a022558d801956ec10d@2x.webp,3fd48cfa30e75a022558d801956ec10d@3x.webp"},"200372":{"name":"3d7f80a3308009c951bde717573012d8","files":"3d7f80a3308009c951bde717573012d8@2x.webp,3d7f80a3308009c951bde717573012d8@3x.webp"},"200374":{"name":"3a875593fdd5200f80a6f8cb699358ab","files":"3a875593fdd5200f80a6f8cb699358ab@2x.webp,3a875593fdd5200f80a6f8cb699358ab@3x.webp"},"200376":{"name":"5ea9665941b640fedc827173a93ce9a0","files":"5ea9665941b640fedc827173a93ce9a0@2x.webp,5ea9665941b640fedc827173a93ce9a0@3x.webp"},"200378":{"name":"79143554e93abe41ee4edaf98ba97b84","files":"79143554e93abe41ee4edaf98ba97b84@2x.webp,79143554e93abe41ee4edaf98ba97b84@3x.webp"},"200380":{"name":"a896e977ba0243ffb3c958cb0ad566e7","files":"a896e977ba0243ffb3c958cb0ad566e7@2x.webp,a896e977ba0243ffb3c958cb0ad566e7@3x.webp"},"200382":{"name":"9928e4e60b6bcf84a24b89c733cf8a20","files":"9928e4e60b6bcf84a24b89c733cf8a20@2x.webp,9928e4e60b6bcf84a24b89c733cf8a20@3x.webp"},"200383":{"name":"1e44f305ccbd3ca047393e01cd2ae365","files":"1e44f305ccbd3ca047393e01cd2ae365@2x.png,1e44f305ccbd3ca047393e01cd2ae365@3x.png"},"200384":{"name":"2bcdb5093cdf198623b7efa7929fb521","files":"2bcdb5093cdf198623b7efa7929fb521@2x.webp,2bcdb5093cdf198623b7efa7929fb521@3x.webp"},"200386":{"name":"7ffb40a545a5016e214da19f032c3682","files":"7ffb40a545a5016e214da19f032c3682@2x.webp,7ffb40a545a5016e214da19f032c3682@3x.webp"},"200388":{"name":"281f3564a1195cf8bbb7e056f175ee1a","files":"281f3564a1195cf8bbb7e056f175ee1a@2x.webp,281f3564a1195cf8bbb7e056f175ee1a@3x.webp"},"200390":{"name":"05fee6af1402f1e21e37dc7e1e6bde2f","files":"05fee6af1402f1e21e37dc7e1e6bde2f@2x.webp,05fee6af1402f1e21e37dc7e1e6bde2f@3x.webp"},"200392":{"name":"3772dbb8967c3822595e72cb34daf96e","files":"3772dbb8967c3822595e72cb34daf96e@2x.png,3772dbb8967c3822595e72cb34daf96e@3x.png"},"200394":{"name":"045d05ddc2fcf660b1b2983dc60e89f4","files":"045d05ddc2fcf660b1b2983dc60e89f4@2x.png,045d05ddc2fcf660b1b2983dc60e89f4@3x.png"},"200396":{"name":"46b875d6af052c42bceee39b4327739e","files":"46b875d6af052c42bceee39b4327739e@2x.png,46b875d6af052c42bceee39b4327739e@3x.png"},"200401":{"name":"ff4f7eb6f7354f25a36c90942277e0f4","files":"ff4f7eb6f7354f25a36c90942277e0f4@2x.webp,ff4f7eb6f7354f25a36c90942277e0f4@3x.webp,ff4f7eb6f7354f25a36c90942277e0f4@dark@2x.webp,ff4f7eb6f7354f25a36c90942277e0f4@dark@3x.webp"},"200402":{"name":"7dc815ccccb592980bba4d8f9bbfcd0c","files":"7dc815ccccb592980bba4d8f9bbfcd0c@2x.webp,7dc815ccccb592980bba4d8f9bbfcd0c@3x.webp,7dc815ccccb592980bba4d8f9bbfcd0c@dark@2x.webp,7dc815ccccb592980bba4d8f9bbfcd0c@dark@3x.webp"},"200403":{"name":"077773a61efe6cb4e20abd4cf302dd04","files":"077773a61efe6cb4e20abd4cf302dd04@2x.webp,077773a61efe6cb4e20abd4cf302dd04@3x.webp,077773a61efe6cb4e20abd4cf302dd04@dark@2x.webp,077773a61efe6cb4e20abd4cf302dd04@dark@3x.webp"},"200404":{"name":"7ad8b01261052647d71b64a5437643cf","files":"7ad8b01261052647d71b64a5437643cf@2x.webp,7ad8b01261052647d71b64a5437643cf@3x.webp,7ad8b01261052647d71b64a5437643cf@dark@2x.webp,7ad8b01261052647d71b64a5437643cf@dark@3x.webp"},"200405":{"name":"ae12da3849f333d71376ae4e3b6b491b","files":"ae12da3849f333d71376ae4e3b6b491b@2x.webp,ae12da3849f333d71376ae4e3b6b491b@3x.webp,ae12da3849f333d71376ae4e3b6b491b@dark@2x.webp,ae12da3849f333d71376ae4e3b6b491b@dark@3x.webp"},"200406":{"name":"7ae7c8e5d16b7515b71d97abb1e9e80f","files":"7ae7c8e5d16b7515b71d97abb1e9e80f@2x.webp,7ae7c8e5d16b7515b71d97abb1e9e80f@3x.webp,7ae7c8e5d16b7515b71d97abb1e9e80f@dark@2x.webp,7ae7c8e5d16b7515b71d97abb1e9e80f@dark@3x.webp"},"200407":{"name":"9642078df71da0c8d4ef362f2e6353a2","files":"9642078df71da0c8d4ef362f2e6353a2@2x.webp,9642078df71da0c8d4ef362f2e6353a2@3x.webp,9642078df71da0c8d4ef362f2e6353a2@dark@2x.webp,9642078df71da0c8d4ef362f2e6353a2@dark@3x.webp"},"200408":{"name":"fc43cf389dd4a30d19d65a309d9bbb04","files":"fc43cf389dd4a30d19d65a309d9bbb04@2x.webp,fc43cf389dd4a30d19d65a309d9bbb04@3x.webp"},"200409":{"name":"ef4071460347910f74f19bf70b837d52","files":"ef4071460347910f74f19bf70b837d52@2x.webp,ef4071460347910f74f19bf70b837d52@3x.webp"},"200410":{"name":"4154df6704c21143e65eda4d7105d6d8","files":"4154df6704c21143e65eda4d7105d6d8@2x.webp,4154df6704c21143e65eda4d7105d6d8@3x.webp"},"200411":{"name":"4e604219e44016e12e51f333468f37ba","files":"4e604219e44016e12e51f333468f37ba@2x.webp,4e604219e44016e12e51f333468f37ba@3x.webp"},"200412":{"name":"514540e5b72d1acce5b7bf5490426b53","files":"514540e5b72d1acce5b7bf5490426b53@2x.webp,514540e5b72d1acce5b7bf5490426b53@3x.webp"},"200413":{"name":"6e9b44275c566c3ca9924ba5b87a79ac","files":"6e9b44275c566c3ca9924ba5b87a79ac@2x.webp,6e9b44275c566c3ca9924ba5b87a79ac@3x.webp"},"200414":{"name":"824141eac143f38f6624c33a4242dd3f","files":"824141eac143f38f6624c33a4242dd3f@2x.webp,824141eac143f38f6624c33a4242dd3f@3x.webp"},"200415":{"name":"b21a58eb8556cfcd267423e13b23aa74","files":"b21a58eb8556cfcd267423e13b23aa74@2x.png,b21a58eb8556cfcd267423e13b23aa74@3x.png,b21a58eb8556cfcd267423e13b23aa74@dark@2x.png,b21a58eb8556cfcd267423e13b23aa74@dark@3x.png"},"200416":{"name":"936c749c9f0b63d04b24277809c19da0","files":"936c749c9f0b63d04b24277809c19da0@2x.png,936c749c9f0b63d04b24277809c19da0@3x.png"},"200417":{"name":"8642e88ac86d5b11cf15404dc5b2e46b","files":"8642e88ac86d5b11cf15404dc5b2e46b@2x.png,8642e88ac86d5b11cf15404dc5b2e46b@3x.png,8642e88ac86d5b11cf15404dc5b2e46b@dark@2x.png,8642e88ac86d5b11cf15404dc5b2e46b@dark@3x.png"},"200418":{"name":"fa88b5faec06c1ead43ed4a2ee0431d3","files":"fa88b5faec06c1ead43ed4a2ee0431d3@2x.png,fa88b5faec06c1ead43ed4a2ee0431d3@3x.png"},"200419":{"name":"96365ebc4a14c2d7f744f6dea90515b4","files":"96365ebc4a14c2d7f744f6dea90515b4@2x.png,96365ebc4a14c2d7f744f6dea90515b4@3x.png,96365ebc4a14c2d7f744f6dea90515b4@dark@2x.png,96365ebc4a14c2d7f744f6dea90515b4@dark@3x.png"},"200420":{"name":"11121a7da593cf7b5e34e85af27c49c9","files":"11121a7da593cf7b5e34e85af27c49c9@2x.png,11121a7da593cf7b5e34e85af27c49c9@3x.png"},"200421":{"name":"5260f0293cb75b69438dfd25d328be9d","files":"5260f0293cb75b69438dfd25d328be9d@2x.png,5260f0293cb75b69438dfd25d328be9d@3x.png,5260f0293cb75b69438dfd25d328be9d@dark@2x.png,5260f0293cb75b69438dfd25d328be9d@dark@3x.png"},"200422":{"name":"eb3aab1d56b009dd75bbb7e2a9a5d0e8","files":"eb3aab1d56b009dd75bbb7e2a9a5d0e8@2x.png,eb3aab1d56b009dd75bbb7e2a9a5d0e8@3x.png"},"200517":{"name":"3fe9c48fc33a0659429744be7e2b1658","files":"3fe9c48fc33a0659429744be7e2b1658@2x.png,3fe9c48fc33a0659429744be7e2b1658@3x.png,3fe9c48fc33a0659429744be7e2b1658@dark@2x.png,3fe9c48fc33a0659429744be7e2b1658@dark@3x.png"},"200518":{"name":"0517872bd9a830e2e006296fe011757d","files":"0517872bd9a830e2e006296fe011757d@2x.png,0517872bd9a830e2e006296fe011757d@3x.png"},"200519":{"name":"5c1ffa1ab8e63c4996a7316f01093fc8","files":"5c1ffa1ab8e63c4996a7316f01093fc8@2x.png,5c1ffa1ab8e63c4996a7316f01093fc8@3x.png,5c1ffa1ab8e63c4996a7316f01093fc8@dark@2x.png,5c1ffa1ab8e63c4996a7316f01093fc8@dark@3x.png"},"200520":{"name":"227dc579dbbade0bd0100b4e2eae3fa9","files":"227dc579dbbade0bd0100b4e2eae3fa9@2x.png,227dc579dbbade0bd0100b4e2eae3fa9@3x.png"},"200521":{"name":"7fb07505f958df974b5ae1bbd58ead2d","files":"7fb07505f958df974b5ae1bbd58ead2d@2x.png,7fb07505f958df974b5ae1bbd58ead2d@3x.png,7fb07505f958df974b5ae1bbd58ead2d@dark@2x.png,7fb07505f958df974b5ae1bbd58ead2d@dark@3x.png"},"200522":{"name":"93b46b3da2edb8e8cebd4a9ead4179df","files":"93b46b3da2edb8e8cebd4a9ead4179df@2x.png,93b46b3da2edb8e8cebd4a9ead4179df@3x.png"},"200599":{"name":"524ec94c3b2ef19335632dfa0e03a785","files":"524ec94c3b2ef19335632dfa0e03a785@2x.png,524ec94c3b2ef19335632dfa0e03a785@3x.png"},"201548":{"name":"cb8348b946ee603ff057b63a8f7aa876","files":"cb8348b946ee603ff057b63a8f7aa876@2x.png,cb8348b946ee603ff057b63a8f7aa876@3x.png,cb8348b946ee603ff057b63a8f7aa876@dark@2x.png,cb8348b946ee603ff057b63a8f7aa876@dark@3x.png"},"201549":{"name":"a83988bf88d9a0f9b1485632993c3fca","files":"a83988bf88d9a0f9b1485632993c3fca@2x.png,a83988bf88d9a0f9b1485632993c3fca@3x.png"},"201552":{"name":"cc4932973481494bbb8fa051f5d37b49","files":"cc4932973481494bbb8fa051f5d37b49@2x.png,cc4932973481494bbb8fa051f5d37b49@3x.png,cc4932973481494bbb8fa051f5d37b49@dark@2x.png,cc4932973481494bbb8fa051f5d37b49@dark@3x.png"},"201553":{"name":"a90ea51f5310ded50259fc2142ecdfb5","files":"a90ea51f5310ded50259fc2142ecdfb5@2x.png,a90ea51f5310ded50259fc2142ecdfb5@3x.png"},"201556":{"name":"512c9b06914b8f31976ea75532653e08","files":"512c9b06914b8f31976ea75532653e08@2x.png,512c9b06914b8f31976ea75532653e08@3x.png,512c9b06914b8f31976ea75532653e08@dark@2x.png,512c9b06914b8f31976ea75532653e08@dark@3x.png"},"201557":{"name":"9c2ad81b09c539ba471cdba769782ae3","files":"9c2ad81b09c539ba471cdba769782ae3@2x.png,9c2ad81b09c539ba471cdba769782ae3@3x.png"},"201560":{"name":"4563371b9f1be1309aad73850a9737be","files":"4563371b9f1be1309aad73850a9737be@2x.png,4563371b9f1be1309aad73850a9737be@3x.png,4563371b9f1be1309aad73850a9737be@dark@2x.png,4563371b9f1be1309aad73850a9737be@dark@3x.png"},"201561":{"name":"6c635cf7b4b8fb970e94b6324199ab48","files":"6c635cf7b4b8fb970e94b6324199ab48@2x.png,6c635cf7b4b8fb970e94b6324199ab48@3x.png"},"202000":{"name":"e7352a4aeab411678a6dcc62992c249b","files":"e7352a4aeab411678a6dcc62992c249b@2x.png,e7352a4aeab411678a6dcc62992c249b@3x.png"},"202002":{"name":"84cc8b9c47d82dc5d099cf10a7ab31f5","files":"84cc8b9c47d82dc5d099cf10a7ab31f5@2x.png,84cc8b9c47d82dc5d099cf10a7ab31f5@3x.png"},"202004":{"name":"df0015c04954bf2b0e05469d9619d5a9","files":"df0015c04954bf2b0e05469d9619d5a9@2x.png,df0015c04954bf2b0e05469d9619d5a9@3x.png"},"202450":{"name":"0c7f3bf1fc35ab8b2aa4d10637715cb7","files":"0c7f3bf1fc35ab8b2aa4d10637715cb7@2x.png,0c7f3bf1fc35ab8b2aa4d10637715cb7@3x.png"},"202451":{"name":"077773a61efe6cb4e20abd4cf302dd04","files":"077773a61efe6cb4e20abd4cf302dd04@2x.webp,077773a61efe6cb4e20abd4cf302dd04@3x.webp,077773a61efe6cb4e20abd4cf302dd04@dark@2x.webp,077773a61efe6cb4e20abd4cf302dd04@dark@3x.webp"},"202452":{"name":"4154df6704c21143e65eda4d7105d6d8","files":"4154df6704c21143e65eda4d7105d6d8@2x.webp,4154df6704c21143e65eda4d7105d6d8@3x.webp"},"202453":{"name":"7dc815ccccb592980bba4d8f9bbfcd0c","files":"7dc815ccccb592980bba4d8f9bbfcd0c@2x.webp,7dc815ccccb592980bba4d8f9bbfcd0c@3x.webp,7dc815ccccb592980bba4d8f9bbfcd0c@dark@2x.webp,7dc815ccccb592980bba4d8f9bbfcd0c@dark@3x.webp"},"202454":{"name":"ef4071460347910f74f19bf70b837d52","files":"ef4071460347910f74f19bf70b837d52@2x.webp,ef4071460347910f74f19bf70b837d52@3x.webp"}},"xml":"61e87f43ddf89a2428a9a3f32f368712.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/40296fdd153def007750d512de61a902.zip"},"202431":{"res":{"200501":{"name":"11339fd17cef8f3ad4103bc7ff15bbbb","files":"11339fd17cef8f3ad4103bc7ff15bbbb@2x.webp,11339fd17cef8f3ad4103bc7ff15bbbb@3x.webp,11339fd17cef8f3ad4103bc7ff15bbbb@dark@2x.webp,11339fd17cef8f3ad4103bc7ff15bbbb@dark@3x.webp"},"200502":{"name":"d8a25617405251aa9d7b08e46ab3a87e","files":"d8a25617405251aa9d7b08e46ab3a87e@2x.webp,d8a25617405251aa9d7b08e46ab3a87e@3x.webp,d8a25617405251aa9d7b08e46ab3a87e@dark@2x.webp,d8a25617405251aa9d7b08e46ab3a87e@dark@3x.webp"},"200503":{"name":"bf5f7accc47c6f9dd63ee18603312fa2","files":"bf5f7accc47c6f9dd63ee18603312fa2@2x.webp,bf5f7accc47c6f9dd63ee18603312fa2@3x.webp,bf5f7accc47c6f9dd63ee18603312fa2@dark@2x.webp,bf5f7accc47c6f9dd63ee18603312fa2@dark@3x.webp"},"200504":{"name":"10ad4988408dbd1a15a757b0ed5d195a","files":"10ad4988408dbd1a15a757b0ed5d195a@2x.webp,10ad4988408dbd1a15a757b0ed5d195a@3x.webp,10ad4988408dbd1a15a757b0ed5d195a@dark@2x.webp,10ad4988408dbd1a15a757b0ed5d195a@dark@3x.webp"},"200505":{"name":"f4791cfe9a8c3609666cc79f2f5f808a","files":"f4791cfe9a8c3609666cc79f2f5f808a@2x.webp,f4791cfe9a8c3609666cc79f2f5f808a@3x.webp,f4791cfe9a8c3609666cc79f2f5f808a@dark@2x.webp,f4791cfe9a8c3609666cc79f2f5f808a@dark@3x.webp"},"200506":{"name":"0c5d9dc05f7dab8cd9be57b63bd438aa","files":"0c5d9dc05f7dab8cd9be57b63bd438aa@2x.webp,0c5d9dc05f7dab8cd9be57b63bd438aa@3x.webp,0c5d9dc05f7dab8cd9be57b63bd438aa@dark@2x.webp,0c5d9dc05f7dab8cd9be57b63bd438aa@dark@3x.webp"},"200507":{"name":"de22dd0818049868925285f926fc298a","files":"de22dd0818049868925285f926fc298a@2x.webp,de22dd0818049868925285f926fc298a@3x.webp,de22dd0818049868925285f926fc298a@dark@2x.webp,de22dd0818049868925285f926fc298a@dark@3x.webp"},"200508":{"name":"bf2dc1e12cc21ad56d92ae49479be4cb","files":"bf2dc1e12cc21ad56d92ae49479be4cb@2x.webp,bf2dc1e12cc21ad56d92ae49479be4cb@3x.webp"},"200509":{"name":"9b66307e72b7bc23ca126816d98d9a32","files":"9b66307e72b7bc23ca126816d98d9a32@2x.webp,9b66307e72b7bc23ca126816d98d9a32@3x.webp"},"200510":{"name":"182aa732400bf50e0db206ec6da8221a","files":"182aa732400bf50e0db206ec6da8221a@2x.webp,182aa732400bf50e0db206ec6da8221a@3x.webp"},"200511":{"name":"bd3acb4578778c434fe3529891c79ab2","files":"bd3acb4578778c434fe3529891c79ab2@2x.webp,bd3acb4578778c434fe3529891c79ab2@3x.webp"},"200512":{"name":"df67eeeaa695d22546da6f7909a477db","files":"df67eeeaa695d22546da6f7909a477db@2x.webp,df67eeeaa695d22546da6f7909a477db@3x.webp"},"200513":{"name":"da6b672c6bf20855439a8062addc3158","files":"da6b672c6bf20855439a8062addc3158@2x.webp,da6b672c6bf20855439a8062addc3158@3x.webp"},"200514":{"name":"802d8362f63cd85e83c666f96d256e7c","files":"802d8362f63cd85e83c666f96d256e7c@2x.webp,802d8362f63cd85e83c666f96d256e7c@3x.webp"},"200515":{"name":"5bfe2816c1736e9965c94a0f1744befd","files":"5bfe2816c1736e9965c94a0f1744befd@2x.png,5bfe2816c1736e9965c94a0f1744befd@3x.png,5bfe2816c1736e9965c94a0f1744befd@dark@2x.png,5bfe2816c1736e9965c94a0f1744befd@dark@3x.png"},"200516":{"name":"1030787cfa228464173cb38a4946eabc","files":"1030787cfa228464173cb38a4946eabc@2x.png,1030787cfa228464173cb38a4946eabc@3x.png"},"200530":{"name":"60c2a960a78c714d9d5c61bb1ec2951d","files":"60c2a960a78c714d9d5c61bb1ec2951d@2x.webp,60c2a960a78c714d9d5c61bb1ec2951d@3x.webp,60c2a960a78c714d9d5c61bb1ec2951d@dark@2x.webp,60c2a960a78c714d9d5c61bb1ec2951d@dark@3x.webp"},"200531":{"name":"276af6af5625ac6a090fcbdb41a931b1","files":"276af6af5625ac6a090fcbdb41a931b1@2x.webp,276af6af5625ac6a090fcbdb41a931b1@3x.webp,276af6af5625ac6a090fcbdb41a931b1@dark@2x.webp,276af6af5625ac6a090fcbdb41a931b1@dark@3x.webp"},"200532":{"name":"84fb6062c7d90403e9052b6d8cd78b87","files":"84fb6062c7d90403e9052b6d8cd78b87@2x.webp,84fb6062c7d90403e9052b6d8cd78b87@3x.webp,84fb6062c7d90403e9052b6d8cd78b87@dark@2x.webp,84fb6062c7d90403e9052b6d8cd78b87@dark@3x.webp"},"200533":{"name":"612471c43e1ce383515afd5a13f4a015","files":"612471c43e1ce383515afd5a13f4a015@2x.webp,612471c43e1ce383515afd5a13f4a015@3x.webp,612471c43e1ce383515afd5a13f4a015@dark@2x.webp,612471c43e1ce383515afd5a13f4a015@dark@3x.webp"},"200534":{"name":"39f46f286301fbce1df1ed084bf89fff","files":"39f46f286301fbce1df1ed084bf89fff@2x.webp,39f46f286301fbce1df1ed084bf89fff@3x.webp,39f46f286301fbce1df1ed084bf89fff@dark@2x.webp,39f46f286301fbce1df1ed084bf89fff@dark@3x.webp"},"200535":{"name":"5378609cce43bbcc64aac3565887e7b9","files":"5378609cce43bbcc64aac3565887e7b9@2x.webp,5378609cce43bbcc64aac3565887e7b9@3x.webp,5378609cce43bbcc64aac3565887e7b9@dark@2x.webp,5378609cce43bbcc64aac3565887e7b9@dark@3x.webp"},"200536":{"name":"b656f01c445263097e83730196914b59","files":"b656f01c445263097e83730196914b59@2x.webp,b656f01c445263097e83730196914b59@3x.webp,b656f01c445263097e83730196914b59@dark@2x.webp,b656f01c445263097e83730196914b59@dark@3x.webp"},"200537":{"name":"22900c397cbd099a9f8e3b5026d738a5","files":"22900c397cbd099a9f8e3b5026d738a5@2x.webp,22900c397cbd099a9f8e3b5026d738a5@3x.webp,22900c397cbd099a9f8e3b5026d738a5@dark@2x.webp,22900c397cbd099a9f8e3b5026d738a5@dark@3x.webp"},"200538":{"name":"645013db8cfb4a650c6bdb8261d9c67f","files":"645013db8cfb4a650c6bdb8261d9c67f@2x.webp,645013db8cfb4a650c6bdb8261d9c67f@3x.webp,645013db8cfb4a650c6bdb8261d9c67f@dark@2x.webp,645013db8cfb4a650c6bdb8261d9c67f@dark@3x.webp"},"200539":{"name":"741661f723f5dd40709e301058a87ca1","files":"741661f723f5dd40709e301058a87ca1@2x.webp,741661f723f5dd40709e301058a87ca1@3x.webp,741661f723f5dd40709e301058a87ca1@dark@2x.webp,741661f723f5dd40709e301058a87ca1@dark@3x.webp"},"200540":{"name":"a659bf7fa7eea226545cdd75fa4da1a3","files":"a659bf7fa7eea226545cdd75fa4da1a3@2x.webp,a659bf7fa7eea226545cdd75fa4da1a3@3x.webp,a659bf7fa7eea226545cdd75fa4da1a3@dark@2x.webp,a659bf7fa7eea226545cdd75fa4da1a3@dark@3x.webp"},"200541":{"name":"9258c358e7c21bf04ee0e4c24ef50659","files":"9258c358e7c21bf04ee0e4c24ef50659@2x.webp,9258c358e7c21bf04ee0e4c24ef50659@3x.webp,9258c358e7c21bf04ee0e4c24ef50659@dark@2x.webp,9258c358e7c21bf04ee0e4c24ef50659@dark@3x.webp"},"200542":{"name":"7ce8d7a6bb420fd92abc46e9fb525d09","files":"7ce8d7a6bb420fd92abc46e9fb525d09@2x.webp,7ce8d7a6bb420fd92abc46e9fb525d09@3x.webp,7ce8d7a6bb420fd92abc46e9fb525d09@dark@2x.webp,7ce8d7a6bb420fd92abc46e9fb525d09@dark@3x.webp"},"200543":{"name":"a3c32e751ccfa13d1c94bdf83b01b523","files":"a3c32e751ccfa13d1c94bdf83b01b523@2x.webp,a3c32e751ccfa13d1c94bdf83b01b523@3x.webp,a3c32e751ccfa13d1c94bdf83b01b523@dark@2x.webp,a3c32e751ccfa13d1c94bdf83b01b523@dark@3x.webp"},"200544":{"name":"32b641a3dd662e2024aeb711aac48b37","files":"32b641a3dd662e2024aeb711aac48b37@2x.webp,32b641a3dd662e2024aeb711aac48b37@3x.webp,32b641a3dd662e2024aeb711aac48b37@dark@2x.webp,32b641a3dd662e2024aeb711aac48b37@dark@3x.webp"},"200545":{"name":"7cb5d9ffd93f52b88c57601dd95b3467","files":"7cb5d9ffd93f52b88c57601dd95b3467@2x.webp,7cb5d9ffd93f52b88c57601dd95b3467@3x.webp,7cb5d9ffd93f52b88c57601dd95b3467@dark@2x.webp,7cb5d9ffd93f52b88c57601dd95b3467@dark@3x.webp"},"200546":{"name":"49c37e9c39513ed0d38fce6f8a994ed5","files":"49c37e9c39513ed0d38fce6f8a994ed5@2x.webp,49c37e9c39513ed0d38fce6f8a994ed5@3x.webp,49c37e9c39513ed0d38fce6f8a994ed5@dark@2x.webp,49c37e9c39513ed0d38fce6f8a994ed5@dark@3x.webp"},"200547":{"name":"566bb48f7b2af92bfebb3e6e012be6ed","files":"566bb48f7b2af92bfebb3e6e012be6ed@2x.webp,566bb48f7b2af92bfebb3e6e012be6ed@3x.webp,566bb48f7b2af92bfebb3e6e012be6ed@dark@2x.webp,566bb48f7b2af92bfebb3e6e012be6ed@dark@3x.webp"},"200548":{"name":"5fd4afb50ddeb75c755f7ea453924996","files":"5fd4afb50ddeb75c755f7ea453924996@2x.webp,5fd4afb50ddeb75c755f7ea453924996@3x.webp,5fd4afb50ddeb75c755f7ea453924996@dark@2x.webp,5fd4afb50ddeb75c755f7ea453924996@dark@3x.webp"},"200549":{"name":"ae0e0bb421a8b77aa6066f2a33b691fc","files":"ae0e0bb421a8b77aa6066f2a33b691fc@2x.webp,ae0e0bb421a8b77aa6066f2a33b691fc@3x.webp,ae0e0bb421a8b77aa6066f2a33b691fc@dark@2x.webp,ae0e0bb421a8b77aa6066f2a33b691fc@dark@3x.webp"},"200550":{"name":"2dba9e582dd66dc63296b9917fe3b19b","files":"2dba9e582dd66dc63296b9917fe3b19b@2x.webp,2dba9e582dd66dc63296b9917fe3b19b@3x.webp,2dba9e582dd66dc63296b9917fe3b19b@dark@2x.webp,2dba9e582dd66dc63296b9917fe3b19b@dark@3x.webp"},"200551":{"name":"9eacd285eaa3807567ccec12eb1b5f3f","files":"9eacd285eaa3807567ccec12eb1b5f3f@2x.webp,9eacd285eaa3807567ccec12eb1b5f3f@3x.webp,9eacd285eaa3807567ccec12eb1b5f3f@dark@2x.webp,9eacd285eaa3807567ccec12eb1b5f3f@dark@3x.webp"},"200552":{"name":"53d9b1725becafe63cc586ca64cd6293","files":"53d9b1725becafe63cc586ca64cd6293@2x.png,53d9b1725becafe63cc586ca64cd6293@3x.png,53d9b1725becafe63cc586ca64cd6293@dark@2x.png,53d9b1725becafe63cc586ca64cd6293@dark@3x.png"},"200553":{"name":"ed09c458b07211ddd044c9c8915ff9e1","files":"ed09c458b07211ddd044c9c8915ff9e1@2x.png,ed09c458b07211ddd044c9c8915ff9e1@3x.png,ed09c458b07211ddd044c9c8915ff9e1@dark@2x.png,ed09c458b07211ddd044c9c8915ff9e1@dark@3x.png"},"200554":{"name":"e3cca42a050065b3eb40325dd6c1e445","files":"e3cca42a050065b3eb40325dd6c1e445@2x.png,e3cca42a050065b3eb40325dd6c1e445@3x.png,e3cca42a050065b3eb40325dd6c1e445@dark@2x.png,e3cca42a050065b3eb40325dd6c1e445@dark@3x.png"},"200560":{"name":"1680866e0ba53cda422a36c87b89d14b","files":"1680866e0ba53cda422a36c87b89d14b@2x.webp,1680866e0ba53cda422a36c87b89d14b@3x.webp"},"200561":{"name":"f79a95756358c82883ca62fa4d9df39e","files":"f79a95756358c82883ca62fa4d9df39e@2x.webp,f79a95756358c82883ca62fa4d9df39e@3x.webp"},"200562":{"name":"14f041ac7842b2d4fb6edf7abc53cbd6","files":"14f041ac7842b2d4fb6edf7abc53cbd6@2x.webp,14f041ac7842b2d4fb6edf7abc53cbd6@3x.webp"},"200563":{"name":"bc806306c5201640897e77f936df7798","files":"bc806306c5201640897e77f936df7798@2x.webp,bc806306c5201640897e77f936df7798@3x.webp"},"200564":{"name":"52e94eb3ff2aa2a0c99c810226b51f42","files":"52e94eb3ff2aa2a0c99c810226b51f42@2x.webp,52e94eb3ff2aa2a0c99c810226b51f42@3x.webp"},"200565":{"name":"c60e1c3a4d41d910d0b1ed33577bd627","files":"c60e1c3a4d41d910d0b1ed33577bd627@2x.webp,c60e1c3a4d41d910d0b1ed33577bd627@3x.webp"},"200566":{"name":"9c0443f7cf85c812a9ed94c6d068be06","files":"9c0443f7cf85c812a9ed94c6d068be06@2x.webp,9c0443f7cf85c812a9ed94c6d068be06@3x.webp"},"200567":{"name":"6814da58836e1b48b16275ad6d7645ea","files":"6814da58836e1b48b16275ad6d7645ea@2x.webp,6814da58836e1b48b16275ad6d7645ea@3x.webp"},"200568":{"name":"8bb362b25a1a5dba9eff3be7577fa999","files":"8bb362b25a1a5dba9eff3be7577fa999@2x.webp,8bb362b25a1a5dba9eff3be7577fa999@3x.webp"},"200569":{"name":"592b717c432d4e33953b909d8570c591","files":"592b717c432d4e33953b909d8570c591@2x.webp,592b717c432d4e33953b909d8570c591@3x.webp"},"200570":{"name":"19fedb8088953b27998f936637eb275d","files":"19fedb8088953b27998f936637eb275d@2x.webp,19fedb8088953b27998f936637eb275d@3x.webp"},"200571":{"name":"c3c914dba10f797ac7d0a4bf7cc677ca","files":"c3c914dba10f797ac7d0a4bf7cc677ca@2x.webp,c3c914dba10f797ac7d0a4bf7cc677ca@3x.webp"},"200572":{"name":"e5c25c684c9f25e1d9e51b8182413b80","files":"e5c25c684c9f25e1d9e51b8182413b80@2x.webp,e5c25c684c9f25e1d9e51b8182413b80@3x.webp"},"200573":{"name":"99805526ac3fba60462c0d4fe5617860","files":"99805526ac3fba60462c0d4fe5617860@2x.webp,99805526ac3fba60462c0d4fe5617860@3x.webp"},"200574":{"name":"129db31547bcf836dde4d87aa33cdeca","files":"129db31547bcf836dde4d87aa33cdeca@2x.webp,129db31547bcf836dde4d87aa33cdeca@3x.webp"},"200575":{"name":"07760669f65733ccb21d083cebf10015","files":"07760669f65733ccb21d083cebf10015@2x.webp,07760669f65733ccb21d083cebf10015@3x.webp"},"200576":{"name":"b32cbdcec4286449ee11c792ba0079ec","files":"b32cbdcec4286449ee11c792ba0079ec@2x.webp,b32cbdcec4286449ee11c792ba0079ec@3x.webp"},"200577":{"name":"66548fc9b4b09e36b847797a3528e72c","files":"66548fc9b4b09e36b847797a3528e72c@2x.webp,66548fc9b4b09e36b847797a3528e72c@3x.webp"},"200578":{"name":"bcd4194b4268e2b81373421cd3d04c5c","files":"bcd4194b4268e2b81373421cd3d04c5c@2x.webp,bcd4194b4268e2b81373421cd3d04c5c@3x.webp"},"200579":{"name":"ff03a62bd71b83d9041b1251ba8ba24f","files":"ff03a62bd71b83d9041b1251ba8ba24f@2x.webp,ff03a62bd71b83d9041b1251ba8ba24f@3x.webp"},"200580":{"name":"2be25b7bf311ebd38210c6de292ff486","files":"2be25b7bf311ebd38210c6de292ff486@2x.webp,2be25b7bf311ebd38210c6de292ff486@3x.webp"},"200581":{"name":"381ed7c4ce0dc38bdb5f995b2e488b6a","files":"381ed7c4ce0dc38bdb5f995b2e488b6a@2x.webp,381ed7c4ce0dc38bdb5f995b2e488b6a@3x.webp"},"200582":{"name":"3343c14705a2afe02050298bc8643ba8","files":"3343c14705a2afe02050298bc8643ba8@2x.png,3343c14705a2afe02050298bc8643ba8@3x.png"},"200583":{"name":"93a51f67ba52f2d48967eb183291e0f9","files":"93a51f67ba52f2d48967eb183291e0f9@2x.png,93a51f67ba52f2d48967eb183291e0f9@3x.png"},"200584":{"name":"ec604a3683a1deaa79fab759041db72e","files":"ec604a3683a1deaa79fab759041db72e@2x.png,ec604a3683a1deaa79fab759041db72e@3x.png"},"200599":{"name":"524ec94c3b2ef19335632dfa0e03a785","files":"524ec94c3b2ef19335632dfa0e03a785@2x.png,524ec94c3b2ef19335632dfa0e03a785@3x.png"},"201542":{"name":"087b654548d8365253452d9ac102a61d","files":"087b654548d8365253452d9ac102a61d@2x.png,087b654548d8365253452d9ac102a61d@3x.png,087b654548d8365253452d9ac102a61d@dark@2x.png,087b654548d8365253452d9ac102a61d@dark@3x.png"},"201543":{"name":"9431f74ee143f290b54195b94f341c0b","files":"9431f74ee143f290b54195b94f341c0b@2x.png,9431f74ee143f290b54195b94f341c0b@3x.png"},"201544":{"name":"18f8ffbb0fa94a8da9fc0d57fe6f2004","files":"18f8ffbb0fa94a8da9fc0d57fe6f2004@2x.png,18f8ffbb0fa94a8da9fc0d57fe6f2004@3x.png,18f8ffbb0fa94a8da9fc0d57fe6f2004@dark@2x.png,18f8ffbb0fa94a8da9fc0d57fe6f2004@dark@3x.png"},"201545":{"name":"451df8f5d65bbf1a433bf8a96c2bbcbe","files":"451df8f5d65bbf1a433bf8a96c2bbcbe@2x.png,451df8f5d65bbf1a433bf8a96c2bbcbe@3x.png"},"201546":{"name":"686195cd39b2db223756f1db9fdf0b58","files":"686195cd39b2db223756f1db9fdf0b58@2x.png,686195cd39b2db223756f1db9fdf0b58@3x.png,686195cd39b2db223756f1db9fdf0b58@dark@2x.png,686195cd39b2db223756f1db9fdf0b58@dark@3x.png"},"201547":{"name":"41884422e73f35a101cc13c93eeb353c","files":"41884422e73f35a101cc13c93eeb353c@2x.png,41884422e73f35a101cc13c93eeb353c@3x.png"},"201550":{"name":"a801c8e071b214e0b0420f57490bca40","files":"a801c8e071b214e0b0420f57490bca40@2x.png,a801c8e071b214e0b0420f57490bca40@3x.png,a801c8e071b214e0b0420f57490bca40@dark@2x.png,a801c8e071b214e0b0420f57490bca40@dark@3x.png"},"201551":{"name":"11c525db83cfcd59bf0706ba64895fa5","files":"11c525db83cfcd59bf0706ba64895fa5@2x.png,11c525db83cfcd59bf0706ba64895fa5@3x.png"},"201554":{"name":"3a5aff9d59560fbfb110d4482dee08cc","files":"3a5aff9d59560fbfb110d4482dee08cc@2x.png,3a5aff9d59560fbfb110d4482dee08cc@3x.png"},"201555":{"name":"b4df151f79b842b59e4bf6c80099de53","files":"b4df151f79b842b59e4bf6c80099de53@2x.png,b4df151f79b842b59e4bf6c80099de53@3x.png"},"201558":{"name":"972cc62f0ca4b08a0dbd48c64e483047","files":"972cc62f0ca4b08a0dbd48c64e483047@2x.png,972cc62f0ca4b08a0dbd48c64e483047@3x.png,972cc62f0ca4b08a0dbd48c64e483047@dark@2x.png,972cc62f0ca4b08a0dbd48c64e483047@dark@3x.png"},"201559":{"name":"1c2b4d11de7a5dcdbcadc51ae98298bc","files":"1c2b4d11de7a5dcdbcadc51ae98298bc@2x.png,1c2b4d11de7a5dcdbcadc51ae98298bc@3x.png"},"201562":{"name":"eca349bc4f1d752cbae122fa68e161fa","files":"eca349bc4f1d752cbae122fa68e161fa@2x.png,eca349bc4f1d752cbae122fa68e161fa@3x.png,eca349bc4f1d752cbae122fa68e161fa@dark@2x.png,eca349bc4f1d752cbae122fa68e161fa@dark@3x.png"},"201563":{"name":"f958a72a15fb1332a5cf23d9e19ccf9f","files":"f958a72a15fb1332a5cf23d9e19ccf9f@2x.png,f958a72a15fb1332a5cf23d9e19ccf9f@3x.png"},"202455":{"name":"bf5f7accc47c6f9dd63ee18603312fa2","files":"bf5f7accc47c6f9dd63ee18603312fa2@2x.webp,bf5f7accc47c6f9dd63ee18603312fa2@3x.webp,bf5f7accc47c6f9dd63ee18603312fa2@dark@2x.webp,bf5f7accc47c6f9dd63ee18603312fa2@dark@3x.webp"},"202456":{"name":"182aa732400bf50e0db206ec6da8221a","files":"182aa732400bf50e0db206ec6da8221a@2x.webp,182aa732400bf50e0db206ec6da8221a@3x.webp"},"202457":{"name":"d8a25617405251aa9d7b08e46ab3a87e","files":"d8a25617405251aa9d7b08e46ab3a87e@2x.webp,d8a25617405251aa9d7b08e46ab3a87e@3x.webp,d8a25617405251aa9d7b08e46ab3a87e@dark@2x.webp,d8a25617405251aa9d7b08e46ab3a87e@dark@3x.webp"},"202458":{"name":"9b66307e72b7bc23ca126816d98d9a32","files":"9b66307e72b7bc23ca126816d98d9a32@2x.webp,9b66307e72b7bc23ca126816d98d9a32@3x.webp"}},"xml":"1067f4ebb9097c1595be6123e7ac61e4.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/529fb294dc9d0a20864161af22454932.zip"},"204001":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"}},"xml":"6b98372160e7bf6d8d055fbb9f16396d.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/0c45e848a226ea22e721671f0328d3da.zip"},"204002":{"res":{"10401":{"name":"127777d480526d35dedb89afdbd8bfc2","files":"127777d480526d35dedb89afdbd8bfc2@2x.png,127777d480526d35dedb89afdbd8bfc2@3x.png"},"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"}},"xml":"534aedc9b94121ac9ff218706c3280e4.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/e029c54d8cd95532ea1a7e3b2085dd64.zip"},"204103":{"res":{"204104":{"name":"f9d5402302b53114bb01ffab8140b6ea","files":"f9d5402302b53114bb01ffab8140b6ea@2x.webp,f9d5402302b53114bb01ffab8140b6ea@3x.webp,f9d5402302b53114bb01ffab8140b6ea@dark@2x.webp,f9d5402302b53114bb01ffab8140b6ea@dark@3x.webp"},"204105":{"name":"45e6f758a16f2666bb78223275221bad","files":"45e6f758a16f2666bb78223275221bad@2x.webp,45e6f758a16f2666bb78223275221bad@3x.webp,45e6f758a16f2666bb78223275221bad@dark@2x.webp,45e6f758a16f2666bb78223275221bad@dark@3x.webp"}},"xml":"ab05d2898cd356ca8c2914be24957eeb.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/5b2dbc193345fca407bd95e128d5518a.zip"},"205001":{"res":{"205004":{"name":"869eec010d44d521645fdc16e7b4bbda","files":"869eec010d44d521645fdc16e7b4bbda@2x.webp,869eec010d44d521645fdc16e7b4bbda@3x.webp"},"205006":{"name":"6462e589441382eb9c3f8799c5199b19","files":"6462e589441382eb9c3f8799c5199b19@2x.png,6462e589441382eb9c3f8799c5199b19@3x.png,6462e589441382eb9c3f8799c5199b19@dark@2x.png,6462e589441382eb9c3f8799c5199b19@dark@3x.png"}},"xml":"96fa200c41513aeac4e101b2c4bf957a.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/e81ce04045256b67a449d19ad4c2bb18.zip"},"205002":{"res":{"205007":{"name":"8fb9927c0e8d919937fac3ab5d47c8f3","files":"8fb9927c0e8d919937fac3ab5d47c8f3@2x.png,8fb9927c0e8d919937fac3ab5d47c8f3@3x.png,8fb9927c0e8d919937fac3ab5d47c8f3@dark@2x.png,8fb9927c0e8d919937fac3ab5d47c8f3@dark@3x.png"},"205009":{"name":"39a28e1aec0e62aa335aa9f578f94149","files":"39a28e1aec0e62aa335aa9f578f94149@2x.webp,39a28e1aec0e62aa335aa9f578f94149@3x.webp"}},"xml":"2a941039cdc6ad235fd8d96d120caa5e.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/6ec07ec5b3c8b28508ea0c8a9fc966e6.zip"},"205008":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"205028":{"name":"ac84a3fd9aacb2e2e5591707d0e9d9e3","files":"ac84a3fd9aacb2e2e5591707d0e9d9e3@2x.png,ac84a3fd9aacb2e2e5591707d0e9d9e3@3x.png,ac84a3fd9aacb2e2e5591707d0e9d9e3@dark@2x.png,ac84a3fd9aacb2e2e5591707d0e9d9e3@dark@3x.png"},"205029":{"name":"2c605f5cdc1f8b71254d5d76a5c0107e","files":"2c605f5cdc1f8b71254d5d76a5c0107e@2x.png,2c605f5cdc1f8b71254d5d76a5c0107e@3x.png,2c605f5cdc1f8b71254d5d76a5c0107e@dark@2x.png,2c605f5cdc1f8b71254d5d76a5c0107e@dark@3x.png"}},"xml":"be36be1d5f2eb4961eb37d5c3b3d426f.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/434babee22d0be1d13acd013aa94cc35.zip"},"205021":{"res":{"205012":{"name":"2107ed2f6375d48ea8882ed55bead027","files":"2107ed2f6375d48ea8882ed55bead027.svg,2107ed2f6375d48ea8882ed55bead027@dark.svg"},"205017":{"name":"0f73530254a52fba9132572ca486c6da","files":"0f73530254a52fba9132572ca486c6da@2x.png,0f73530254a52fba9132572ca486c6da@3x.png,0f73530254a52fba9132572ca486c6da@dark@2x.png,0f73530254a52fba9132572ca486c6da@dark@3x.png"},"205018":{"name":"8e56107188f30f8f6034748b806811fe","files":"8e56107188f30f8f6034748b806811fe@2x.png,8e56107188f30f8f6034748b806811fe@3x.png,8e56107188f30f8f6034748b806811fe@dark@2x.png,8e56107188f30f8f6034748b806811fe@dark@3x.png"},"205019":{"name":"a71245423569cef6b611e61c5a07de53","files":"a71245423569cef6b611e61c5a07de53@2x.png,a71245423569cef6b611e61c5a07de53@3x.png,a71245423569cef6b611e61c5a07de53@dark@2x.png,a71245423569cef6b611e61c5a07de53@dark@3x.png"},"205020":{"name":"bfca2d48a7ab3e25dc4a51761d8ac4db","files":"bfca2d48a7ab3e25dc4a51761d8ac4db@2x.png,bfca2d48a7ab3e25dc4a51761d8ac4db@3x.png,bfca2d48a7ab3e25dc4a51761d8ac4db@dark@2x.png,bfca2d48a7ab3e25dc4a51761d8ac4db@dark@3x.png"}},"xml":"fbb528ab9bb1f8a9b252ab24112ca4a5.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/938068643488ae2f7440cd0648758309.zip"},"205024":{"res":{"205013":{"name":"7cc3b73c2cd925031151089135910cf1","files":"7cc3b73c2cd925031151089135910cf1@2x.png,7cc3b73c2cd925031151089135910cf1@3x.png,7cc3b73c2cd925031151089135910cf1@dark@2x.png,7cc3b73c2cd925031151089135910cf1@dark@3x.png"},"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"205015":{"name":"103c30e2596dc22fa8b7526aceb6be16","files":"103c30e2596dc22fa8b7526aceb6be16@2x.png,103c30e2596dc22fa8b7526aceb6be16@3x.png,103c30e2596dc22fa8b7526aceb6be16@dark@2x.png,103c30e2596dc22fa8b7526aceb6be16@dark@3x.png"},"205016":{"name":"77bb877dcca7edcca1f64442b522e408","files":"77bb877dcca7edcca1f64442b522e408@2x.png,77bb877dcca7edcca1f64442b522e408@3x.png,77bb877dcca7edcca1f64442b522e408@dark@2x.png,77bb877dcca7edcca1f64442b522e408@dark@3x.png"}},"xml":"421d337e2506db326ec896b26028d078.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/d6c9f6c7bba26cbefe182fc7b712d0e9.zip"},"205026":{"res":{"205004":{"name":"869eec010d44d521645fdc16e7b4bbda","files":"869eec010d44d521645fdc16e7b4bbda@2x.webp,869eec010d44d521645fdc16e7b4bbda@3x.webp"}},"xml":"237cc32c9c601b15bf1a2eb5535e8051.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/eb88e912cec8142ca8481a5a0f0d3656.zip"},"205027":{"res":{"205009":{"name":"39a28e1aec0e62aa335aa9f578f94149","files":"39a28e1aec0e62aa335aa9f578f94149@2x.webp,39a28e1aec0e62aa335aa9f578f94149@3x.webp"}},"xml":"0ff8aaae042b8eef9ed5b41dd7566b60.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/081e9442baf3719757fed3dc696819cb.zip"},"231000":{"res":{"110518":{"name":"61aa6966406ffbf708cb84285f1ae9b3","files":"61aa6966406ffbf708cb84285f1ae9b3@2x.png,61aa6966406ffbf708cb84285f1ae9b3@3x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@2x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@3x.png"}},"xml":"8f230ab6295fdd35608246c0803a2fea.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/16009a6dac774506a9b236f1e774c0ed.zip"},"231001":{"res":{"110586":{"name":"872c8dfcdde30d7f101922dda60df4bf","files":"872c8dfcdde30d7f101922dda60df4bf@2x.png,872c8dfcdde30d7f101922dda60df4bf@3x.png"},"110587":{"name":"a113c26f3f96a1efe227ca04f2f5a29d","files":"a113c26f3f96a1efe227ca04f2f5a29d@2x.png,a113c26f3f96a1efe227ca04f2f5a29d@3x.png"},"110588":{"name":"198b5984fe82b67fd9c7958f55fb7ed0","files":"198b5984fe82b67fd9c7958f55fb7ed0@2x.png,198b5984fe82b67fd9c7958f55fb7ed0@3x.png"},"110589":{"name":"1c42b168c43b7dce2b32e0c6489493a8","files":"1c42b168c43b7dce2b32e0c6489493a8@2x.png,1c42b168c43b7dce2b32e0c6489493a8@3x.png"}},"xml":"fa05ca58c75e94f828233ca7f2365f39.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/62a032f18fcab6acf2aebd1b9555ea4b.zip"},"231013":{"res":{"231017":{"name":"621a22d903b924825d554f75fdc6b504","files":"621a22d903b924825d554f75fdc6b504@2x.png,621a22d903b924825d554f75fdc6b504@3x.png"},"231023":{"name":"eeb8a4179e7e1b7c0ccdf15e4e718f8f","files":"eeb8a4179e7e1b7c0ccdf15e4e718f8f@2x.webp,eeb8a4179e7e1b7c0ccdf15e4e718f8f@3x.webp"},"231024":{"name":"23e60d52bd85de596c1cb5b346b22052","files":"23e60d52bd85de596c1cb5b346b22052@2x.webp,23e60d52bd85de596c1cb5b346b22052@3x.webp"},"231026":{"name":"7f87ba1e1ec465496e8f0ae721b6d209","files":"7f87ba1e1ec465496e8f0ae721b6d209@2x.webp,7f87ba1e1ec465496e8f0ae721b6d209@3x.webp"},"231027":{"name":"e1f02b215b9bc80ead6771750a51c2ab","files":"e1f02b215b9bc80ead6771750a51c2ab@2x.webp,e1f02b215b9bc80ead6771750a51c2ab@3x.webp"},"231028":{"name":"c60a74563b622216f8d0a4c02e008a1d","files":"c60a74563b622216f8d0a4c02e008a1d@2x.webp,c60a74563b622216f8d0a4c02e008a1d@3x.webp"},"231029":{"name":"00511505a52a3d20e9a26b473e2a8858","files":"00511505a52a3d20e9a26b473e2a8858@2x.webp,00511505a52a3d20e9a26b473e2a8858@3x.webp"},"231030":{"name":"47f67afe757f70b54c18e3839add280a","files":"47f67afe757f70b54c18e3839add280a@2x.webp,47f67afe757f70b54c18e3839add280a@3x.webp"},"231031":{"name":"02e030d22ab860261b9f27bd5eaaaebe","files":"02e030d22ab860261b9f27bd5eaaaebe@2x.webp,02e030d22ab860261b9f27bd5eaaaebe@3x.webp"}},"xml":"048989d970cad9007b71d9928c8e0fdd.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/919d13c922e55ebc64ca7843700a603c.zip"},"231014":{"res":{"231018":{"name":"9ab17a88e02905474e069acb55fda96e","files":"9ab17a88e02905474e069acb55fda96e@2x.png,9ab17a88e02905474e069acb55fda96e@3x.png"},"231023":{"name":"eeb8a4179e7e1b7c0ccdf15e4e718f8f","files":"eeb8a4179e7e1b7c0ccdf15e4e718f8f@2x.webp,eeb8a4179e7e1b7c0ccdf15e4e718f8f@3x.webp"},"231024":{"name":"23e60d52bd85de596c1cb5b346b22052","files":"23e60d52bd85de596c1cb5b346b22052@2x.webp,23e60d52bd85de596c1cb5b346b22052@3x.webp"},"231026":{"name":"7f87ba1e1ec465496e8f0ae721b6d209","files":"7f87ba1e1ec465496e8f0ae721b6d209@2x.webp,7f87ba1e1ec465496e8f0ae721b6d209@3x.webp"},"231027":{"name":"e1f02b215b9bc80ead6771750a51c2ab","files":"e1f02b215b9bc80ead6771750a51c2ab@2x.webp,e1f02b215b9bc80ead6771750a51c2ab@3x.webp"},"231028":{"name":"c60a74563b622216f8d0a4c02e008a1d","files":"c60a74563b622216f8d0a4c02e008a1d@2x.webp,c60a74563b622216f8d0a4c02e008a1d@3x.webp"},"231029":{"name":"00511505a52a3d20e9a26b473e2a8858","files":"00511505a52a3d20e9a26b473e2a8858@2x.webp,00511505a52a3d20e9a26b473e2a8858@3x.webp"},"231030":{"name":"47f67afe757f70b54c18e3839add280a","files":"47f67afe757f70b54c18e3839add280a@2x.webp,47f67afe757f70b54c18e3839add280a@3x.webp"},"231031":{"name":"02e030d22ab860261b9f27bd5eaaaebe","files":"02e030d22ab860261b9f27bd5eaaaebe@2x.webp,02e030d22ab860261b9f27bd5eaaaebe@3x.webp"}},"xml":"799e92c6e987ba7b7a275755e473a89f.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/55d28bd5bb259180a5913b6c4c81aa43.zip"},"231048":{"res":{"231049":{"name":"00e62f58cea77ddb81001b8b76393ed4","files":"00e62f58cea77ddb81001b8b76393ed4@2x.webp,00e62f58cea77ddb81001b8b76393ed4@3x.webp,00e62f58cea77ddb81001b8b76393ed4@dark@2x.webp,00e62f58cea77ddb81001b8b76393ed4@dark@3x.webp"},"231050":{"name":"461b63ed34fb15e632a904ddc9584ee1","files":"461b63ed34fb15e632a904ddc9584ee1@2x.webp,461b63ed34fb15e632a904ddc9584ee1@3x.webp,461b63ed34fb15e632a904ddc9584ee1@dark@2x.webp,461b63ed34fb15e632a904ddc9584ee1@dark@3x.webp"},"231051":{"name":"a75d6b4d23029b4a6c17bd8f058f859e","files":"a75d6b4d23029b4a6c17bd8f058f859e@2x.webp,a75d6b4d23029b4a6c17bd8f058f859e@3x.webp,a75d6b4d23029b4a6c17bd8f058f859e@dark@2x.webp,a75d6b4d23029b4a6c17bd8f058f859e@dark@3x.webp"},"231052":{"name":"b6ce38bd658cf5bd328fd823f2438e6b","files":"b6ce38bd658cf5bd328fd823f2438e6b@2x.webp,b6ce38bd658cf5bd328fd823f2438e6b@3x.webp,b6ce38bd658cf5bd328fd823f2438e6b@dark@2x.webp,b6ce38bd658cf5bd328fd823f2438e6b@dark@3x.webp"},"231053":{"name":"4b3ec8e56a4eea0bbe0dd9838dbf6b5d","files":"4b3ec8e56a4eea0bbe0dd9838dbf6b5d@2x.webp,4b3ec8e56a4eea0bbe0dd9838dbf6b5d@3x.webp"}},"xml":"20ea7fcaa71d747acc1cda105455cfaa.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/86b7cf85568a707c6fa7936e4899ffdc.zip"},"231054":{"res":{"231058":{"name":"422387d10dbb5c0c82f8f77e1e17c098","files":"422387d10dbb5c0c82f8f77e1e17c098.svg"},"231059":{"name":"a953738771f1dedf009ef5a1e8f7bb94","files":"a953738771f1dedf009ef5a1e8f7bb94.svg"},"231060":{"name":"3104763363b46095b9bee60c20ebb795","files":"3104763363b46095b9bee60c20ebb795.svg"},"231061":{"name":"513f13356e5c7b2203c8ac0a6f7edfba","files":"513f13356e5c7b2203c8ac0a6f7edfba.svg"},"231062":{"name":"48ef9dfa1f3494c5b4ecf5e39ba1eb92","files":"48ef9dfa1f3494c5b4ecf5e39ba1eb92.svg"},"231063":{"name":"3c8531b29a4438c7eb086130daa44407","files":"3c8531b29a4438c7eb086130daa44407.svg"},"231064":{"name":"26c28cde1354f7a1fdf968244e33c755","files":"26c28cde1354f7a1fdf968244e33c755.svg"},"231065":{"name":"622d5765d322c4784e58980c567dbe93","files":"622d5765d322c4784e58980c567dbe93.svg"},"231066":{"name":"26450fc789d729d0a145a9ab7a651b21","files":"26450fc789d729d0a145a9ab7a651b21.svg"},"231067":{"name":"3344d1983f2641d88f151f1d6d7db192","files":"3344d1983f2641d88f151f1d6d7db192.svg"},"231068":{"name":"66565f0edba1bde93baad6d7a21196a0","files":"66565f0edba1bde93baad6d7a21196a0.svg"},"231069":{"name":"3ab4453db4fc99e41a1396639eb42668","files":"3ab4453db4fc99e41a1396639eb42668.svg"},"231070":{"name":"3ad65230ca279f770347a709d7373b6c","files":"3ad65230ca279f770347a709d7373b6c.svg"},"231071":{"name":"57984338c59b59cec5a3cb3c8974f796","files":"57984338c59b59cec5a3cb3c8974f796.svg"},"231072":{"name":"0a7f5e0dfe32217f29e7161152cec22b","files":"0a7f5e0dfe32217f29e7161152cec22b.svg"},"231073":{"name":"6a536dd3c5c0cb4b0794f1be56bb24b2","files":"6a536dd3c5c0cb4b0794f1be56bb24b2.svg"},"231074":{"name":"0368d8cd82fc5a41d0fc6cdb7cb76f7b","files":"0368d8cd82fc5a41d0fc6cdb7cb76f7b.svg"},"231075":{"name":"fc323e2e587758ba697a3f186cc8fc55","files":"fc323e2e587758ba697a3f186cc8fc55.svg"},"231076":{"name":"81bd9cb4d0515099bee88b7378b1ebdf","files":"81bd9cb4d0515099bee88b7378b1ebdf.svg"},"231077":{"name":"b14c6714f84ea326e80ff5b4ad8a2bb5","files":"b14c6714f84ea326e80ff5b4ad8a2bb5.svg"},"231078":{"name":"b517c5b0cc9c887ca985dfc05dbc422c","files":"b517c5b0cc9c887ca985dfc05dbc422c.svg"},"231079":{"name":"758d8554526098b55c585803ff3a4c6f","files":"758d8554526098b55c585803ff3a4c6f.svg"},"231080":{"name":"ebb0bd2a72df35de93ad85501378b3c2","files":"ebb0bd2a72df35de93ad85501378b3c2.svg"},"231081":{"name":"304a2a69cf72ed87f3194ec9ba8a950e","files":"304a2a69cf72ed87f3194ec9ba8a950e.svg"},"231082":{"name":"a10ddf1eb313a519bd849f71dd32699c","files":"a10ddf1eb313a519bd849f71dd32699c.svg"},"231083":{"name":"c96fa65d58deaf2368e8c61a3457ca32","files":"c96fa65d58deaf2368e8c61a3457ca32.svg"},"231084":{"name":"c57c651e7c413016276f36f500a2443d","files":"c57c651e7c413016276f36f500a2443d@2x.webp,c57c651e7c413016276f36f500a2443d@3x.webp"},"231085":{"name":"1a9cf399b47dab33a8e66f7eefad974f","files":"1a9cf399b47dab33a8e66f7eefad974f@2x.webp,1a9cf399b47dab33a8e66f7eefad974f@3x.webp"},"231086":{"name":"8a1bacb21091749633d9a873b92311a5","files":"8a1bacb21091749633d9a873b92311a5@2x.webp,8a1bacb21091749633d9a873b92311a5@3x.webp"},"231087":{"name":"c11c493c740b791573dda97ba7b3fb56","files":"c11c493c740b791573dda97ba7b3fb56@2x.webp,c11c493c740b791573dda97ba7b3fb56@3x.webp"},"231088":{"name":"53026451ab5be6417d37f022b721c58c","files":"53026451ab5be6417d37f022b721c58c@2x.webp,53026451ab5be6417d37f022b721c58c@3x.webp"},"231089":{"name":"4b3d8c761adde317944a859e6a6bce41","files":"4b3d8c761adde317944a859e6a6bce41@2x.webp,4b3d8c761adde317944a859e6a6bce41@3x.webp"},"231091":{"name":"2bc2cc38a5b41d709c27b3062967128b","files":"2bc2cc38a5b41d709c27b3062967128b@2x.webp,2bc2cc38a5b41d709c27b3062967128b@3x.webp"}},"xml":"2b214ffecb5b599892c5e66ba62f02cc.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/b4c0311514c41c1de180bb5bf0db260a.zip"},"231055":{"res":{"231092":{"name":"a9c5dd52a8b27687894cdc8d4472a72c","files":"a9c5dd52a8b27687894cdc8d4472a72c@2x.webp,a9c5dd52a8b27687894cdc8d4472a72c@3x.webp"},"231093":{"name":"e3603f3282fd273775714608b5010f1c","files":"e3603f3282fd273775714608b5010f1c.svg"},"231094":{"name":"bc57984e1140437eb975bd1af17a5d2d","files":"bc57984e1140437eb975bd1af17a5d2d.svg"},"231095":{"name":"367e50987fdfb6239ae47c440b151009","files":"367e50987fdfb6239ae47c440b151009.svg"},"231096":{"name":"68b3eceae98abe80cc944c2bd4a19269","files":"68b3eceae98abe80cc944c2bd4a19269.svg"},"231097":{"name":"0a23c78e6ba034372ccbb1a2ed77ac31","files":"0a23c78e6ba034372ccbb1a2ed77ac31.svg"},"231098":{"name":"45b8da91d5834aabe7622b457a84b280","files":"45b8da91d5834aabe7622b457a84b280.svg"},"231099":{"name":"3c73104678a60c014e28fa64b52f01aa","files":"3c73104678a60c014e28fa64b52f01aa.svg"},"231100":{"name":"f07c99702d5ae32c23b79353836a343d","files":"f07c99702d5ae32c23b79353836a343d.svg"},"231101":{"name":"e3ec48822d1fc6c9c78d6253d59e9b8a","files":"e3ec48822d1fc6c9c78d6253d59e9b8a.svg"},"231102":{"name":"e04e8cc3654f4b3fc2c39087cd981ea9","files":"e04e8cc3654f4b3fc2c39087cd981ea9.svg"},"231103":{"name":"3968d8278363c5a3f811379d154186d5","files":"3968d8278363c5a3f811379d154186d5.svg"},"231104":{"name":"f77c5521287dd466822b3d5a3033f08c","files":"f77c5521287dd466822b3d5a3033f08c.svg"},"231105":{"name":"c73a5935047ee603c977f10ed3b92e4c","files":"c73a5935047ee603c977f10ed3b92e4c.svg"},"231106":{"name":"19498dcbfe56697eb6e305552a67af89","files":"19498dcbfe56697eb6e305552a67af89.svg"},"231107":{"name":"0e0300cda3f8f204b7133f7147c8f684","files":"0e0300cda3f8f204b7133f7147c8f684.svg"},"231108":{"name":"7e4f0d01e71cb278ecab495914f93e52","files":"7e4f0d01e71cb278ecab495914f93e52.svg"},"231109":{"name":"3e11280cd0853e364414031b284eb79d","files":"3e11280cd0853e364414031b284eb79d.svg"},"231110":{"name":"19cd3d4e95816d40e900bd4f6b6e1f3f","files":"19cd3d4e95816d40e900bd4f6b6e1f3f.svg"},"231111":{"name":"4fc12c33e3560547c8f399e519821205","files":"4fc12c33e3560547c8f399e519821205.svg"},"231112":{"name":"24671544ec0aa75bbe7f74364844fc0f","files":"24671544ec0aa75bbe7f74364844fc0f.svg"},"231113":{"name":"c0ff9e5d56703b48c87ca776c037f50f","files":"c0ff9e5d56703b48c87ca776c037f50f.svg"},"231114":{"name":"542cc3a761eeea0d178a4bed967db179","files":"542cc3a761eeea0d178a4bed967db179.svg"},"231115":{"name":"c65a89be2d6fbc96dea1975355a22057","files":"c65a89be2d6fbc96dea1975355a22057.svg"},"231116":{"name":"f37ce20a77e940247d9b146842fa1797","files":"f37ce20a77e940247d9b146842fa1797.svg"},"231117":{"name":"562f1f1fe996ddf99fc7bf94fb3cafbb","files":"562f1f1fe996ddf99fc7bf94fb3cafbb.svg"},"231118":{"name":"300feb2d68fdb3c0882312c4dfa12fa8","files":"300feb2d68fdb3c0882312c4dfa12fa8.svg"},"231123":{"name":"dc0dea0ccb80026b5d50fc561280f82a","files":"dc0dea0ccb80026b5d50fc561280f82a@2x.webp,dc0dea0ccb80026b5d50fc561280f82a@3x.webp"},"231124":{"name":"37a8bdab3769fd8623f1beadb80e1a47","files":"37a8bdab3769fd8623f1beadb80e1a47@2x.webp,37a8bdab3769fd8623f1beadb80e1a47@3x.webp"},"231125":{"name":"0dd83962dd369e6a4f5bf002c45eaf7c","files":"0dd83962dd369e6a4f5bf002c45eaf7c@2x.webp,0dd83962dd369e6a4f5bf002c45eaf7c@3x.webp"},"231126":{"name":"a6a1dcd75b97967431f0bae280618aa9","files":"a6a1dcd75b97967431f0bae280618aa9@2x.webp,a6a1dcd75b97967431f0bae280618aa9@3x.webp"},"231127":{"name":"d46b2e06932b3923e4cbbfd78c660263","files":"d46b2e06932b3923e4cbbfd78c660263@2x.webp,d46b2e06932b3923e4cbbfd78c660263@3x.webp"},"231128":{"name":"a784662cf05b3fcb11158f83d8c5aa72","files":"a784662cf05b3fcb11158f83d8c5aa72@2x.webp,a784662cf05b3fcb11158f83d8c5aa72@3x.webp"}},"xml":"bf218e28dedb7030a6954b2d7588a2c1.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/e0430706295259af6bc05f98e2342a71.zip"},"231056":{"res":{},"xml":"96f4d55e8eae91be4a9adb3536069f70.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/3dde459aa14ebd81714775f1490f95f1.zip"},"231057":{"res":{},"xml":"d5694597d1592c713080f84384592f03.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/a5890fbd6297f887dce9e0d04f6a7ce0.zip"},"231119":{"res":{"231058":{"name":"422387d10dbb5c0c82f8f77e1e17c098","files":"422387d10dbb5c0c82f8f77e1e17c098.svg"},"231059":{"name":"a953738771f1dedf009ef5a1e8f7bb94","files":"a953738771f1dedf009ef5a1e8f7bb94.svg"},"231060":{"name":"3104763363b46095b9bee60c20ebb795","files":"3104763363b46095b9bee60c20ebb795.svg"},"231061":{"name":"513f13356e5c7b2203c8ac0a6f7edfba","files":"513f13356e5c7b2203c8ac0a6f7edfba.svg"},"231062":{"name":"48ef9dfa1f3494c5b4ecf5e39ba1eb92","files":"48ef9dfa1f3494c5b4ecf5e39ba1eb92.svg"},"231063":{"name":"3c8531b29a4438c7eb086130daa44407","files":"3c8531b29a4438c7eb086130daa44407.svg"},"231064":{"name":"26c28cde1354f7a1fdf968244e33c755","files":"26c28cde1354f7a1fdf968244e33c755.svg"},"231065":{"name":"622d5765d322c4784e58980c567dbe93","files":"622d5765d322c4784e58980c567dbe93.svg"},"231066":{"name":"26450fc789d729d0a145a9ab7a651b21","files":"26450fc789d729d0a145a9ab7a651b21.svg"},"231067":{"name":"3344d1983f2641d88f151f1d6d7db192","files":"3344d1983f2641d88f151f1d6d7db192.svg"},"231068":{"name":"66565f0edba1bde93baad6d7a21196a0","files":"66565f0edba1bde93baad6d7a21196a0.svg"},"231069":{"name":"3ab4453db4fc99e41a1396639eb42668","files":"3ab4453db4fc99e41a1396639eb42668.svg"},"231070":{"name":"3ad65230ca279f770347a709d7373b6c","files":"3ad65230ca279f770347a709d7373b6c.svg"},"231071":{"name":"57984338c59b59cec5a3cb3c8974f796","files":"57984338c59b59cec5a3cb3c8974f796.svg"},"231072":{"name":"0a7f5e0dfe32217f29e7161152cec22b","files":"0a7f5e0dfe32217f29e7161152cec22b.svg"},"231073":{"name":"6a536dd3c5c0cb4b0794f1be56bb24b2","files":"6a536dd3c5c0cb4b0794f1be56bb24b2.svg"},"231074":{"name":"0368d8cd82fc5a41d0fc6cdb7cb76f7b","files":"0368d8cd82fc5a41d0fc6cdb7cb76f7b.svg"},"231075":{"name":"fc323e2e587758ba697a3f186cc8fc55","files":"fc323e2e587758ba697a3f186cc8fc55.svg"},"231076":{"name":"81bd9cb4d0515099bee88b7378b1ebdf","files":"81bd9cb4d0515099bee88b7378b1ebdf.svg"},"231077":{"name":"b14c6714f84ea326e80ff5b4ad8a2bb5","files":"b14c6714f84ea326e80ff5b4ad8a2bb5.svg"},"231078":{"name":"b517c5b0cc9c887ca985dfc05dbc422c","files":"b517c5b0cc9c887ca985dfc05dbc422c.svg"},"231079":{"name":"758d8554526098b55c585803ff3a4c6f","files":"758d8554526098b55c585803ff3a4c6f.svg"},"231080":{"name":"ebb0bd2a72df35de93ad85501378b3c2","files":"ebb0bd2a72df35de93ad85501378b3c2.svg"},"231081":{"name":"304a2a69cf72ed87f3194ec9ba8a950e","files":"304a2a69cf72ed87f3194ec9ba8a950e.svg"},"231082":{"name":"a10ddf1eb313a519bd849f71dd32699c","files":"a10ddf1eb313a519bd849f71dd32699c.svg"},"231083":{"name":"c96fa65d58deaf2368e8c61a3457ca32","files":"c96fa65d58deaf2368e8c61a3457ca32.svg"},"231084":{"name":"c57c651e7c413016276f36f500a2443d","files":"c57c651e7c413016276f36f500a2443d@2x.webp,c57c651e7c413016276f36f500a2443d@3x.webp"},"231091":{"name":"2bc2cc38a5b41d709c27b3062967128b","files":"2bc2cc38a5b41d709c27b3062967128b@2x.webp,2bc2cc38a5b41d709c27b3062967128b@3x.webp"}},"xml":"23028ef12b754a703a45185b68b619a2.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/e8e76cb70e189b35bf68c28d2f71efd1.zip"},"231120":{"res":{"231092":{"name":"a9c5dd52a8b27687894cdc8d4472a72c","files":"a9c5dd52a8b27687894cdc8d4472a72c@2x.webp,a9c5dd52a8b27687894cdc8d4472a72c@3x.webp"},"231093":{"name":"e3603f3282fd273775714608b5010f1c","files":"e3603f3282fd273775714608b5010f1c.svg"},"231094":{"name":"bc57984e1140437eb975bd1af17a5d2d","files":"bc57984e1140437eb975bd1af17a5d2d.svg"},"231095":{"name":"367e50987fdfb6239ae47c440b151009","files":"367e50987fdfb6239ae47c440b151009.svg"},"231096":{"name":"68b3eceae98abe80cc944c2bd4a19269","files":"68b3eceae98abe80cc944c2bd4a19269.svg"},"231097":{"name":"0a23c78e6ba034372ccbb1a2ed77ac31","files":"0a23c78e6ba034372ccbb1a2ed77ac31.svg"},"231098":{"name":"45b8da91d5834aabe7622b457a84b280","files":"45b8da91d5834aabe7622b457a84b280.svg"},"231099":{"name":"3c73104678a60c014e28fa64b52f01aa","files":"3c73104678a60c014e28fa64b52f01aa.svg"},"231100":{"name":"f07c99702d5ae32c23b79353836a343d","files":"f07c99702d5ae32c23b79353836a343d.svg"},"231101":{"name":"e3ec48822d1fc6c9c78d6253d59e9b8a","files":"e3ec48822d1fc6c9c78d6253d59e9b8a.svg"},"231102":{"name":"e04e8cc3654f4b3fc2c39087cd981ea9","files":"e04e8cc3654f4b3fc2c39087cd981ea9.svg"},"231103":{"name":"3968d8278363c5a3f811379d154186d5","files":"3968d8278363c5a3f811379d154186d5.svg"},"231104":{"name":"f77c5521287dd466822b3d5a3033f08c","files":"f77c5521287dd466822b3d5a3033f08c.svg"},"231105":{"name":"c73a5935047ee603c977f10ed3b92e4c","files":"c73a5935047ee603c977f10ed3b92e4c.svg"},"231106":{"name":"19498dcbfe56697eb6e305552a67af89","files":"19498dcbfe56697eb6e305552a67af89.svg"},"231107":{"name":"0e0300cda3f8f204b7133f7147c8f684","files":"0e0300cda3f8f204b7133f7147c8f684.svg"},"231108":{"name":"7e4f0d01e71cb278ecab495914f93e52","files":"7e4f0d01e71cb278ecab495914f93e52.svg"},"231109":{"name":"3e11280cd0853e364414031b284eb79d","files":"3e11280cd0853e364414031b284eb79d.svg"},"231110":{"name":"19cd3d4e95816d40e900bd4f6b6e1f3f","files":"19cd3d4e95816d40e900bd4f6b6e1f3f.svg"},"231111":{"name":"4fc12c33e3560547c8f399e519821205","files":"4fc12c33e3560547c8f399e519821205.svg"},"231112":{"name":"24671544ec0aa75bbe7f74364844fc0f","files":"24671544ec0aa75bbe7f74364844fc0f.svg"},"231113":{"name":"c0ff9e5d56703b48c87ca776c037f50f","files":"c0ff9e5d56703b48c87ca776c037f50f.svg"},"231114":{"name":"542cc3a761eeea0d178a4bed967db179","files":"542cc3a761eeea0d178a4bed967db179.svg"},"231115":{"name":"c65a89be2d6fbc96dea1975355a22057","files":"c65a89be2d6fbc96dea1975355a22057.svg"},"231116":{"name":"f37ce20a77e940247d9b146842fa1797","files":"f37ce20a77e940247d9b146842fa1797.svg"},"231117":{"name":"562f1f1fe996ddf99fc7bf94fb3cafbb","files":"562f1f1fe996ddf99fc7bf94fb3cafbb.svg"},"231118":{"name":"300feb2d68fdb3c0882312c4dfa12fa8","files":"300feb2d68fdb3c0882312c4dfa12fa8.svg"}},"xml":"fbf64754143cb78c16821ef43fcc970d.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/57553ca1bc2d71c01efcef3b5a1d7593.zip"},"231121":{"res":{"231084":{"name":"c57c651e7c413016276f36f500a2443d","files":"c57c651e7c413016276f36f500a2443d@2x.webp,c57c651e7c413016276f36f500a2443d@3x.webp"},"231091":{"name":"2bc2cc38a5b41d709c27b3062967128b","files":"2bc2cc38a5b41d709c27b3062967128b@2x.webp,2bc2cc38a5b41d709c27b3062967128b@3x.webp"},"231093":{"name":"e3603f3282fd273775714608b5010f1c","files":"e3603f3282fd273775714608b5010f1c.svg"},"231094":{"name":"bc57984e1140437eb975bd1af17a5d2d","files":"bc57984e1140437eb975bd1af17a5d2d.svg"},"231095":{"name":"367e50987fdfb6239ae47c440b151009","files":"367e50987fdfb6239ae47c440b151009.svg"},"231096":{"name":"68b3eceae98abe80cc944c2bd4a19269","files":"68b3eceae98abe80cc944c2bd4a19269.svg"},"231097":{"name":"0a23c78e6ba034372ccbb1a2ed77ac31","files":"0a23c78e6ba034372ccbb1a2ed77ac31.svg"},"231098":{"name":"45b8da91d5834aabe7622b457a84b280","files":"45b8da91d5834aabe7622b457a84b280.svg"},"231099":{"name":"3c73104678a60c014e28fa64b52f01aa","files":"3c73104678a60c014e28fa64b52f01aa.svg"},"231100":{"name":"f07c99702d5ae32c23b79353836a343d","files":"f07c99702d5ae32c23b79353836a343d.svg"},"231101":{"name":"e3ec48822d1fc6c9c78d6253d59e9b8a","files":"e3ec48822d1fc6c9c78d6253d59e9b8a.svg"},"231102":{"name":"e04e8cc3654f4b3fc2c39087cd981ea9","files":"e04e8cc3654f4b3fc2c39087cd981ea9.svg"},"231103":{"name":"3968d8278363c5a3f811379d154186d5","files":"3968d8278363c5a3f811379d154186d5.svg"},"231104":{"name":"f77c5521287dd466822b3d5a3033f08c","files":"f77c5521287dd466822b3d5a3033f08c.svg"},"231105":{"name":"c73a5935047ee603c977f10ed3b92e4c","files":"c73a5935047ee603c977f10ed3b92e4c.svg"},"231106":{"name":"19498dcbfe56697eb6e305552a67af89","files":"19498dcbfe56697eb6e305552a67af89.svg"},"231107":{"name":"0e0300cda3f8f204b7133f7147c8f684","files":"0e0300cda3f8f204b7133f7147c8f684.svg"},"231108":{"name":"7e4f0d01e71cb278ecab495914f93e52","files":"7e4f0d01e71cb278ecab495914f93e52.svg"},"231109":{"name":"3e11280cd0853e364414031b284eb79d","files":"3e11280cd0853e364414031b284eb79d.svg"},"231110":{"name":"19cd3d4e95816d40e900bd4f6b6e1f3f","files":"19cd3d4e95816d40e900bd4f6b6e1f3f.svg"},"231111":{"name":"4fc12c33e3560547c8f399e519821205","files":"4fc12c33e3560547c8f399e519821205.svg"},"231112":{"name":"24671544ec0aa75bbe7f74364844fc0f","files":"24671544ec0aa75bbe7f74364844fc0f.svg"},"231113":{"name":"c0ff9e5d56703b48c87ca776c037f50f","files":"c0ff9e5d56703b48c87ca776c037f50f.svg"},"231114":{"name":"542cc3a761eeea0d178a4bed967db179","files":"542cc3a761eeea0d178a4bed967db179.svg"},"231115":{"name":"c65a89be2d6fbc96dea1975355a22057","files":"c65a89be2d6fbc96dea1975355a22057.svg"},"231116":{"name":"f37ce20a77e940247d9b146842fa1797","files":"f37ce20a77e940247d9b146842fa1797.svg"},"231117":{"name":"562f1f1fe996ddf99fc7bf94fb3cafbb","files":"562f1f1fe996ddf99fc7bf94fb3cafbb.svg"},"231118":{"name":"300feb2d68fdb3c0882312c4dfa12fa8","files":"300feb2d68fdb3c0882312c4dfa12fa8.svg"}},"xml":"2db91d7361196457fec4002680295463.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/1a9f1965f6c4c26dbf4150f66c3c239d.zip"},"231122":{"res":{},"xml":"eaef18add894e8ee5f6dba6cdcaf0a8d.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/c615809d1b3c7c018986cbb79e4f8bf5.zip"},"231230":{"res":{"231232":{"name":"649c2878679ac3b10d44188716426b86","files":"649c2878679ac3b10d44188716426b86@2x.webp,649c2878679ac3b10d44188716426b86@3x.webp"}},"xml":"31518edfb988d58580051d74c45c157f.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/07e00aee4e80922b5b6084cf83766ade.zip"},"231234":{"res":{"10056":{"name":"9bfd7086086395320a80a29492df33e7","files":"9bfd7086086395320a80a29492df33e7@2x.webp,9bfd7086086395320a80a29492df33e7@3x.webp,9bfd7086086395320a80a29492df33e7@dark@2x.webp,9bfd7086086395320a80a29492df33e7@dark@3x.webp"},"10057":{"name":"77c7cf623f41d9d009f042899a3e6182","files":"77c7cf623f41d9d009f042899a3e6182@2x.webp,77c7cf623f41d9d009f042899a3e6182@3x.webp,77c7cf623f41d9d009f042899a3e6182@dark@2x.webp,77c7cf623f41d9d009f042899a3e6182@dark@3x.webp"},"10058":{"name":"e3a120428ca15738655158de84465772","files":"e3a120428ca15738655158de84465772@2x.webp,e3a120428ca15738655158de84465772@3x.webp,e3a120428ca15738655158de84465772@dark@2x.webp,e3a120428ca15738655158de84465772@dark@3x.webp"},"10059":{"name":"3f6fbc81b967e0cf1256d0ece75dfc45","files":"3f6fbc81b967e0cf1256d0ece75dfc45@2x.webp,3f6fbc81b967e0cf1256d0ece75dfc45@3x.webp,3f6fbc81b967e0cf1256d0ece75dfc45@dark@2x.webp,3f6fbc81b967e0cf1256d0ece75dfc45@dark@3x.webp"}},"xml":"c01d92f1939050b2821f18298f7ad485.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/0ea505eddbb024628c4d542a30fd2067.zip"},"231237":{"res":{"30025":{"name":"dc76f5b326b638c53a7ce3388fcded04","files":"dc76f5b326b638c53a7ce3388fcded04.svg,dc76f5b326b638c53a7ce3388fcded04@dark.svg"},"231049":{"name":"00e62f58cea77ddb81001b8b76393ed4","files":"00e62f58cea77ddb81001b8b76393ed4@2x.webp,00e62f58cea77ddb81001b8b76393ed4@3x.webp,00e62f58cea77ddb81001b8b76393ed4@dark@2x.webp,00e62f58cea77ddb81001b8b76393ed4@dark@3x.webp"},"231050":{"name":"461b63ed34fb15e632a904ddc9584ee1","files":"461b63ed34fb15e632a904ddc9584ee1@2x.webp,461b63ed34fb15e632a904ddc9584ee1@3x.webp,461b63ed34fb15e632a904ddc9584ee1@dark@2x.webp,461b63ed34fb15e632a904ddc9584ee1@dark@3x.webp"},"231051":{"name":"a75d6b4d23029b4a6c17bd8f058f859e","files":"a75d6b4d23029b4a6c17bd8f058f859e@2x.webp,a75d6b4d23029b4a6c17bd8f058f859e@3x.webp,a75d6b4d23029b4a6c17bd8f058f859e@dark@2x.webp,a75d6b4d23029b4a6c17bd8f058f859e@dark@3x.webp"},"231052":{"name":"b6ce38bd658cf5bd328fd823f2438e6b","files":"b6ce38bd658cf5bd328fd823f2438e6b@2x.webp,b6ce38bd658cf5bd328fd823f2438e6b@3x.webp,b6ce38bd658cf5bd328fd823f2438e6b@dark@2x.webp,b6ce38bd658cf5bd328fd823f2438e6b@dark@3x.webp"}},"xml":"d312bf85dfb8ad0a8609f03895114777.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/71ed9e501db4c3b14f572ed5f18c6404.zip"},"231238":{"res":{"231503":{"name":"28d7351424cc344ffb37e062cc864c09","files":"28d7351424cc344ffb37e062cc864c09@2x.png,28d7351424cc344ffb37e062cc864c09@3x.png"},"231504":{"name":"28b934befbc86880f58e9f093f77e786","files":"28b934befbc86880f58e9f093f77e786@2x.png,28b934befbc86880f58e9f093f77e786@3x.png"},"231505":{"name":"89824acaf3e015eebc7569c344aecd1f","files":"89824acaf3e015eebc7569c344aecd1f@2x.png,89824acaf3e015eebc7569c344aecd1f@3x.png"},"231506":{"name":"e9ad142e7dda7d2adf254142b09775cf","files":"e9ad142e7dda7d2adf254142b09775cf@2x.png,e9ad142e7dda7d2adf254142b09775cf@3x.png"},"231507":{"name":"53111c0bae6821b70fd9fe3ade4bda41","files":"53111c0bae6821b70fd9fe3ade4bda41@2x.png,53111c0bae6821b70fd9fe3ade4bda41@3x.png"}},"xml":"56cb9e945476ccd51b5f8c85c3965d2c.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/0457e97215968d83bdda28f38a9c2637.zip"},"231300":{"res":{"110300":{"name":"14af8b8bc31df7a41c8a854a9c93d69f","files":"14af8b8bc31df7a41c8a854a9c93d69f@2x.webp,14af8b8bc31df7a41c8a854a9c93d69f@3x.webp"},"115000":{"name":"5f24eaa385c471e3970f18ca646d6cb8","files":"5f24eaa385c471e3970f18ca646d6cb8@2x.webp,5f24eaa385c471e3970f18ca646d6cb8@3x.webp"},"115001":{"name":"831148b494bf99f77eb71969e490dfbc","files":"831148b494bf99f77eb71969e490dfbc@2x.webp,831148b494bf99f77eb71969e490dfbc@3x.webp"},"115002":{"name":"be076eee347515467a5b14c25b3d2112","files":"be076eee347515467a5b14c25b3d2112@2x.webp,be076eee347515467a5b14c25b3d2112@3x.webp"},"115003":{"name":"83a933b102d32f3e27b80608d929df2f","files":"83a933b102d32f3e27b80608d929df2f@2x.webp,83a933b102d32f3e27b80608d929df2f@3x.webp"},"231303":{"name":"d1d138adcb61fec08596314eebc0e7e5","files":"d1d138adcb61fec08596314eebc0e7e5@2x.png,d1d138adcb61fec08596314eebc0e7e5@3x.png"},"231304":{"name":"ec801d2e2a48d10f7b6873e4c3faea67","files":"ec801d2e2a48d10f7b6873e4c3faea67@2x.png,ec801d2e2a48d10f7b6873e4c3faea67@3x.png"},"231305":{"name":"d007cccc4b83a0e5b8ba4bc1275a89de","files":"d007cccc4b83a0e5b8ba4bc1275a89de@2x.png,d007cccc4b83a0e5b8ba4bc1275a89de@3x.png"},"231306":{"name":"a11d5543bddced048566291579acd9b4","files":"a11d5543bddced048566291579acd9b4@2x.png,a11d5543bddced048566291579acd9b4@3x.png"},"231314":{"name":"77d96d07f533c068ed56e96e763c2ede","files":"77d96d07f533c068ed56e96e763c2ede@2x.png,77d96d07f533c068ed56e96e763c2ede@3x.png"},"231315":{"name":"aae085bf63fb8e37ab395d82b8850425","files":"aae085bf63fb8e37ab395d82b8850425@2x.png,aae085bf63fb8e37ab395d82b8850425@3x.png"},"231327":{"name":"7c4859f654882b423381bff6a2f70215","files":"7c4859f654882b423381bff6a2f70215@2x.png,7c4859f654882b423381bff6a2f70215@3x.png"},"231328":{"name":"3202f9cb892a9055867b77a7383e1650","files":"3202f9cb892a9055867b77a7383e1650@2x.png,3202f9cb892a9055867b77a7383e1650@3x.png"}},"xml":"9205cb7ec30dc4fe2524ed0d6ab8ee50.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/46cce41ba35de1418957c2df4d940081.zip"},"231301":{"res":{"110518":{"name":"61aa6966406ffbf708cb84285f1ae9b3","files":"61aa6966406ffbf708cb84285f1ae9b3@2x.png,61aa6966406ffbf708cb84285f1ae9b3@3x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@2x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@3x.png"}},"xml":"868c39d2cf8b4ffae3f5bdb87aa598c2.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/608bc55efa28764927145dcb903eb8f7.zip"},"231302":{"res":{"231308":{"name":"46a56f7c48b29af93b4a789ac480f319","files":"46a56f7c48b29af93b4a789ac480f319@2x.webp,46a56f7c48b29af93b4a789ac480f319@3x.webp"},"231309":{"name":"a3de686af361b8a605671852ea5e8e29","files":"a3de686af361b8a605671852ea5e8e29@2x.webp,a3de686af361b8a605671852ea5e8e29@3x.webp"},"231310":{"name":"fb00fb4135e4a11c5aa5822c0ec61b94","files":"fb00fb4135e4a11c5aa5822c0ec61b94@2x.webp,fb00fb4135e4a11c5aa5822c0ec61b94@3x.webp"},"231311":{"name":"37e92280c23e79d5e2f914c159584434","files":"37e92280c23e79d5e2f914c159584434@2x.webp,37e92280c23e79d5e2f914c159584434@3x.webp"},"231312":{"name":"abcfeaf3288685eac3e5d97b6103a3dc","files":"abcfeaf3288685eac3e5d97b6103a3dc@2x.webp,abcfeaf3288685eac3e5d97b6103a3dc@3x.webp"}},"xml":"12c4238a43a693183bdeffd85429358f.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/455b71fafe8651a8eb5c665d639393f4.zip"},"231317":{"res":{"231308":{"name":"46a56f7c48b29af93b4a789ac480f319","files":"46a56f7c48b29af93b4a789ac480f319@2x.webp,46a56f7c48b29af93b4a789ac480f319@3x.webp"},"231309":{"name":"a3de686af361b8a605671852ea5e8e29","files":"a3de686af361b8a605671852ea5e8e29@2x.webp,a3de686af361b8a605671852ea5e8e29@3x.webp"},"231310":{"name":"fb00fb4135e4a11c5aa5822c0ec61b94","files":"fb00fb4135e4a11c5aa5822c0ec61b94@2x.webp,fb00fb4135e4a11c5aa5822c0ec61b94@3x.webp"},"231311":{"name":"37e92280c23e79d5e2f914c159584434","files":"37e92280c23e79d5e2f914c159584434@2x.webp,37e92280c23e79d5e2f914c159584434@3x.webp"},"231312":{"name":"abcfeaf3288685eac3e5d97b6103a3dc","files":"abcfeaf3288685eac3e5d97b6103a3dc@2x.webp,abcfeaf3288685eac3e5d97b6103a3dc@3x.webp"}},"xml":"645cfd36a49348b98f45ac7f95fff749.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/285be8e5e0b28a94c83b7e59127cd40f.zip"},"231324":{"res":{"205013":{"name":"7cc3b73c2cd925031151089135910cf1","files":"7cc3b73c2cd925031151089135910cf1@2x.png,7cc3b73c2cd925031151089135910cf1@3x.png,7cc3b73c2cd925031151089135910cf1@dark@2x.png,7cc3b73c2cd925031151089135910cf1@dark@3x.png"},"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"205015":{"name":"103c30e2596dc22fa8b7526aceb6be16","files":"103c30e2596dc22fa8b7526aceb6be16@2x.png,103c30e2596dc22fa8b7526aceb6be16@3x.png,103c30e2596dc22fa8b7526aceb6be16@dark@2x.png,103c30e2596dc22fa8b7526aceb6be16@dark@3x.png"},"205016":{"name":"77bb877dcca7edcca1f64442b522e408","files":"77bb877dcca7edcca1f64442b522e408@2x.png,77bb877dcca7edcca1f64442b522e408@3x.png,77bb877dcca7edcca1f64442b522e408@dark@2x.png,77bb877dcca7edcca1f64442b522e408@dark@3x.png"},"231325":{"name":"20485e5347136a184421b4fc03fce4cf","files":"20485e5347136a184421b4fc03fce4cf@2x.png,20485e5347136a184421b4fc03fce4cf@3x.png"}},"xml":"7d90902b81246b1cd3bb848e34262eb7.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/96c8acce139dc5b1f7b09798633e948d.zip"},"231326":{"res":{"10058":{"name":"e3a120428ca15738655158de84465772","files":"e3a120428ca15738655158de84465772@2x.webp,e3a120428ca15738655158de84465772@3x.webp,e3a120428ca15738655158de84465772@dark@2x.webp,e3a120428ca15738655158de84465772@dark@3x.webp"}},"xml":"c0927e26602770741f65a049a9353503.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/85c067a557b5033261c8d1772796cdac.zip"},"231337":{"res":{"200210":{"name":"8d15b945275efe2db048100ffeadefbe","files":"8d15b945275efe2db048100ffeadefbe@2x.webp,8d15b945275efe2db048100ffeadefbe@3x.webp"},"200243":{"name":"864c0ef65b587a029a9ffb7a899bb450","files":"864c0ef65b587a029a9ffb7a899bb450@2x.webp,864c0ef65b587a029a9ffb7a899bb450@3x.webp"}},"xml":"bf8e4d41f579bc7429c426f831b04b93.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/b09dfdf8be9afdfdbde11733b9565c73.zip"},"231338":{"res":{"200210":{"name":"8d15b945275efe2db048100ffeadefbe","files":"8d15b945275efe2db048100ffeadefbe@2x.webp,8d15b945275efe2db048100ffeadefbe@3x.webp"},"200253":{"name":"d97a7f04b70fe5297bc7bedeb0ead9cc","files":"d97a7f04b70fe5297bc7bedeb0ead9cc@2x.webp,d97a7f04b70fe5297bc7bedeb0ead9cc@3x.webp"}},"xml":"a4da39220a5e9f8ee655c0948ad50edb.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/d0d9442b98affd908d8ba8678ac4d572.zip"},"300005":{"res":{"300001":{"name":"b7f112d815cb2df7e4d72e1d907d025d","files":"b7f112d815cb2df7e4d72e1d907d025d.webp"},"300002":{"name":"430c8c01e5a7fcb14eb627ee36251775","files":"430c8c01e5a7fcb14eb627ee36251775.webp"},"300010":{"name":"2f0040aac321ab4df19ba3031fbe8b67","files":"2f0040aac321ab4df19ba3031fbe8b67@2x.webp,2f0040aac321ab4df19ba3031fbe8b67@3x.webp"},"300011":{"name":"8b620ba4e97000ad1ef915b3254057a2","files":"8b620ba4e97000ad1ef915b3254057a2@2x.webp,8b620ba4e97000ad1ef915b3254057a2@3x.webp"},"300012":{"name":"c28ed5df1bc433c1d958c88b34fe0a76","files":"c28ed5df1bc433c1d958c88b34fe0a76@2x.webp,c28ed5df1bc433c1d958c88b34fe0a76@3x.webp"},"300013":{"name":"e3544197b9a086a7b82000b622672657","files":"e3544197b9a086a7b82000b622672657@2x.webp,e3544197b9a086a7b82000b622672657@3x.webp"},"300014":{"name":"5bc92bae3a0389218f8ed2f3718ff936","files":"5bc92bae3a0389218f8ed2f3718ff936@2x.webp,5bc92bae3a0389218f8ed2f3718ff936@3x.webp"},"300018":{"name":"c55dfe73073f723dce55347789080818","files":"c55dfe73073f723dce55347789080818@2x.webp,c55dfe73073f723dce55347789080818@3x.webp"},"300019":{"name":"ca0af3cc5c3b13c69ae83e7649234b6f","files":"ca0af3cc5c3b13c69ae83e7649234b6f@2x.webp,ca0af3cc5c3b13c69ae83e7649234b6f@3x.webp"},"300020":{"name":"027d25a2b24dc3c8f44efc5440ea3eb0","files":"027d25a2b24dc3c8f44efc5440ea3eb0@2x.webp,027d25a2b24dc3c8f44efc5440ea3eb0@3x.webp"},"300021":{"name":"1c428464a9964665d2ec8d1b14d81c0e","files":"1c428464a9964665d2ec8d1b14d81c0e@2x.webp,1c428464a9964665d2ec8d1b14d81c0e@3x.webp"},"300022":{"name":"3a5b085362c05b7732f5d5877bbbd99f","files":"3a5b085362c05b7732f5d5877bbbd99f@2x.webp,3a5b085362c05b7732f5d5877bbbd99f@3x.webp"}},"xml":"866e5a841d7b6f8e72744a88525a1e9b.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/7b3d93154fdb910f657cd98f8086a47b.zip"},"300006":{"res":{"300003":{"name":"0ecaed8de2d3d497a8776cb44170181c","files":"0ecaed8de2d3d497a8776cb44170181c@2x.webp,0ecaed8de2d3d497a8776cb44170181c@3x.webp"},"300015":{"name":"65388e39261e8646342e8829aa750b99","files":"65388e39261e8646342e8829aa750b99@2x.webp,65388e39261e8646342e8829aa750b99@3x.webp"},"300031":{"name":"391ffc1064adad189910567cbc5cb780","files":"391ffc1064adad189910567cbc5cb780@2x.png,391ffc1064adad189910567cbc5cb780@3x.png,391ffc1064adad189910567cbc5cb780@dark@2x.png,391ffc1064adad189910567cbc5cb780@dark@3x.png"},"300032":{"name":"bc47c5a4363537a89fae32fe74d91482","files":"bc47c5a4363537a89fae32fe74d91482@2x.png,bc47c5a4363537a89fae32fe74d91482@3x.png"},"300045":{"name":"2d1bc4db4522df134b0af39a34416b8c","files":"2d1bc4db4522df134b0af39a34416b8c@2x.webp,2d1bc4db4522df134b0af39a34416b8c@3x.webp"}},"xml":"28b94da0b819cab513211b2387963082.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/db909bbedb713a9ac24497b117034349.zip"},"300008":{"res":{"300037":{"name":"985f49aa13fc0bd6b2b895ce6a2f13bc","files":"985f49aa13fc0bd6b2b895ce6a2f13bc@2x.webp,985f49aa13fc0bd6b2b895ce6a2f13bc@3x.webp"},"300038":{"name":"fce3c465eb202169d1530fe8ea5d14ed","files":"fce3c465eb202169d1530fe8ea5d14ed@2x.webp,fce3c465eb202169d1530fe8ea5d14ed@3x.webp"},"300046":{"name":"7a395051d356d22fb29118d02907f0d1","files":"7a395051d356d22fb29118d02907f0d1@2x.png,7a395051d356d22fb29118d02907f0d1@3x.png"},"300048":{"name":"985f49aa13fc0bd6b2b895ce6a2f13bc","files":"985f49aa13fc0bd6b2b895ce6a2f13bc@2x.webp,985f49aa13fc0bd6b2b895ce6a2f13bc@3x.webp"},"300050":{"name":"7a395051d356d22fb29118d02907f0d1","files":"7a395051d356d22fb29118d02907f0d1@2x.png,7a395051d356d22fb29118d02907f0d1@3x.png"}},"xml":"026f6b0e972f963b7be58ea043b1bbc3.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/7574d60508db23328ef5eee3be84f5c7.zip"},"300009":{"res":{"300037":{"name":"985f49aa13fc0bd6b2b895ce6a2f13bc","files":"985f49aa13fc0bd6b2b895ce6a2f13bc@2x.webp,985f49aa13fc0bd6b2b895ce6a2f13bc@3x.webp"},"300038":{"name":"fce3c465eb202169d1530fe8ea5d14ed","files":"fce3c465eb202169d1530fe8ea5d14ed@2x.webp,fce3c465eb202169d1530fe8ea5d14ed@3x.webp"},"300047":{"name":"b623f4642dea9077eccdcc570568808e","files":"b623f4642dea9077eccdcc570568808e@2x.png,b623f4642dea9077eccdcc570568808e@3x.png"},"300049":{"name":"fce3c465eb202169d1530fe8ea5d14ed","files":"fce3c465eb202169d1530fe8ea5d14ed@2x.webp,fce3c465eb202169d1530fe8ea5d14ed@3x.webp"},"300051":{"name":"b623f4642dea9077eccdcc570568808e","files":"b623f4642dea9077eccdcc570568808e@2x.png,b623f4642dea9077eccdcc570568808e@3x.png"}},"xml":"cf7da4b9c5f5878979cf00bcb49e8748.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/7be24e6ea05d5bb116498284646311ab.zip"},"300040":{"res":{"300043":{"name":"196bfbad8455ae17a4d82fb84a71337e","files":"196bfbad8455ae17a4d82fb84a71337e@2x.webp,196bfbad8455ae17a4d82fb84a71337e@3x.webp"}},"xml":"a15e82b7bb72493616f7ef7458724100.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/83694c36ba6a39cd4207e2db881a9295.zip"},"500002":{"res":{"30025":{"name":"dc76f5b326b638c53a7ce3388fcded04","files":"dc76f5b326b638c53a7ce3388fcded04.svg,dc76f5b326b638c53a7ce3388fcded04@dark.svg"},"231318":{"name":"4b5436405c27855e3724862aa033c170","files":"4b5436405c27855e3724862aa033c170@2x.png,4b5436405c27855e3724862aa033c170@3x.png"},"231319":{"name":"7575001fb5f32a0eace1066439d96efd","files":"7575001fb5f32a0eace1066439d96efd@2x.png,7575001fb5f32a0eace1066439d96efd@3x.png"},"231320":{"name":"a07a957007353173f656dc0a98510f1d","files":"a07a957007353173f656dc0a98510f1d@2x.png,a07a957007353173f656dc0a98510f1d@3x.png"},"231321":{"name":"3348818127e84917d38a40d31dc94856","files":"3348818127e84917d38a40d31dc94856@2x.png,3348818127e84917d38a40d31dc94856@3x.png"},"231322":{"name":"3723130515b88e8ce0d455be8b020679","files":"3723130515b88e8ce0d455be8b020679@2x.png,3723130515b88e8ce0d455be8b020679@3x.png"},"231323":{"name":"efb215d2e0a65aa8cae70c84cf275ba7","files":"efb215d2e0a65aa8cae70c84cf275ba7@2x.png,efb215d2e0a65aa8cae70c84cf275ba7@3x.png"}},"xml":"8b2df14efaffa9d52ebf8ad753556203.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/f07309a8e0976bb2da7fec67479406f5.zip"},"500003":{"res":{"110516":{"name":"910f2ad97c376011fd70883f6f5185d1","files":"910f2ad97c376011fd70883f6f5185d1@2x.png,910f2ad97c376011fd70883f6f5185d1@3x.png,910f2ad97c376011fd70883f6f5185d1@dark@2x.png,910f2ad97c376011fd70883f6f5185d1@dark@3x.png"},"110517":{"name":"f0545aa9335264b60bc836de3c88279f","files":"f0545aa9335264b60bc836de3c88279f@2x.png,f0545aa9335264b60bc836de3c88279f@3x.png,f0545aa9335264b60bc836de3c88279f@dark@2x.png,f0545aa9335264b60bc836de3c88279f@dark@3x.png"},"110518":{"name":"61aa6966406ffbf708cb84285f1ae9b3","files":"61aa6966406ffbf708cb84285f1ae9b3@2x.png,61aa6966406ffbf708cb84285f1ae9b3@3x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@2x.png,61aa6966406ffbf708cb84285f1ae9b3@dark@3x.png"},"110519":{"name":"a4d621e2dfbad243f8dddb24a7974298","files":"a4d621e2dfbad243f8dddb24a7974298@2x.png,a4d621e2dfbad243f8dddb24a7974298@3x.png,a4d621e2dfbad243f8dddb24a7974298@dark@2x.png,a4d621e2dfbad243f8dddb24a7974298@dark@3x.png"},"202500":{"name":"85d1d60bcfbb2a6758d537bf61ccc142","files":"85d1d60bcfbb2a6758d537bf61ccc142@2x.png,85d1d60bcfbb2a6758d537bf61ccc142@3x.png"}},"xml":"e612bfb83b74d489ce9b4f0c4399a5a2.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/0d5b683f00b264756fbfdf8d8e762178.zip"},"500004":{"res":{"231318":{"name":"4b5436405c27855e3724862aa033c170","files":"4b5436405c27855e3724862aa033c170@2x.png,4b5436405c27855e3724862aa033c170@3x.png"},"231319":{"name":"7575001fb5f32a0eace1066439d96efd","files":"7575001fb5f32a0eace1066439d96efd@2x.png,7575001fb5f32a0eace1066439d96efd@3x.png"},"231320":{"name":"a07a957007353173f656dc0a98510f1d","files":"a07a957007353173f656dc0a98510f1d@2x.png,a07a957007353173f656dc0a98510f1d@3x.png"},"231321":{"name":"3348818127e84917d38a40d31dc94856","files":"3348818127e84917d38a40d31dc94856@2x.png,3348818127e84917d38a40d31dc94856@3x.png"},"231322":{"name":"3723130515b88e8ce0d455be8b020679","files":"3723130515b88e8ce0d455be8b020679@2x.png,3723130515b88e8ce0d455be8b020679@3x.png"},"231323":{"name":"efb215d2e0a65aa8cae70c84cf275ba7","files":"efb215d2e0a65aa8cae70c84cf275ba7@2x.png,efb215d2e0a65aa8cae70c84cf275ba7@3x.png"},"231331":{"name":"a40a11af86d10a701ac838e6651878db","files":"a40a11af86d10a701ac838e6651878db@2x.png,a40a11af86d10a701ac838e6651878db@3x.png"}},"xml":"a09732c399d8a406aeba2a38a7a89f06.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/064873b09289dfeb45e5712d7b449510.zip"},"500005":{"res":{"231332":{"name":"4a36486582fd158b27c4a6e96bfc6105","files":"4a36486582fd158b27c4a6e96bfc6105@2x.png,4a36486582fd158b27c4a6e96bfc6105@3x.png"},"231333":{"name":"fb51be33a2ae14b7d07616e272b82f0d","files":"fb51be33a2ae14b7d07616e272b82f0d@2x.png,fb51be33a2ae14b7d07616e272b82f0d@3x.png"},"231334":{"name":"6d5dfef90f6aa2a34e4529b1e3ecb8ec","files":"6d5dfef90f6aa2a34e4529b1e3ecb8ec@2x.png,6d5dfef90f6aa2a34e4529b1e3ecb8ec@3x.png"},"231335":{"name":"44e9e6b88a0e5fa971809cf4308162ad","files":"44e9e6b88a0e5fa971809cf4308162ad@2x.webp,44e9e6b88a0e5fa971809cf4308162ad@3x.webp"}},"xml":"090474e3bb4313d99c0956fcf8423c90.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/e6b4397f1a54d808bf818e36d8844055.zip"},"500006":{"res":{"231332":{"name":"4a36486582fd158b27c4a6e96bfc6105","files":"4a36486582fd158b27c4a6e96bfc6105@2x.png,4a36486582fd158b27c4a6e96bfc6105@3x.png"},"231333":{"name":"fb51be33a2ae14b7d07616e272b82f0d","files":"fb51be33a2ae14b7d07616e272b82f0d@2x.png,fb51be33a2ae14b7d07616e272b82f0d@3x.png"},"231334":{"name":"6d5dfef90f6aa2a34e4529b1e3ecb8ec","files":"6d5dfef90f6aa2a34e4529b1e3ecb8ec@2x.png,6d5dfef90f6aa2a34e4529b1e3ecb8ec@3x.png"},"231335":{"name":"44e9e6b88a0e5fa971809cf4308162ad","files":"44e9e6b88a0e5fa971809cf4308162ad@2x.webp,44e9e6b88a0e5fa971809cf4308162ad@3x.webp"}},"xml":"090474e3bb4313d99c0956fcf8423c90.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/e6b4397f1a54d808bf818e36d8844055.zip"},"500007":{"res":{"231318":{"name":"4b5436405c27855e3724862aa033c170","files":"4b5436405c27855e3724862aa033c170@2x.png,4b5436405c27855e3724862aa033c170@3x.png"},"231319":{"name":"7575001fb5f32a0eace1066439d96efd","files":"7575001fb5f32a0eace1066439d96efd@2x.png,7575001fb5f32a0eace1066439d96efd@3x.png"},"231320":{"name":"a07a957007353173f656dc0a98510f1d","files":"a07a957007353173f656dc0a98510f1d@2x.png,a07a957007353173f656dc0a98510f1d@3x.png"},"231321":{"name":"3348818127e84917d38a40d31dc94856","files":"3348818127e84917d38a40d31dc94856@2x.png,3348818127e84917d38a40d31dc94856@3x.png"},"231322":{"name":"3723130515b88e8ce0d455be8b020679","files":"3723130515b88e8ce0d455be8b020679@2x.png,3723130515b88e8ce0d455be8b020679@3x.png"},"231323":{"name":"efb215d2e0a65aa8cae70c84cf275ba7","files":"efb215d2e0a65aa8cae70c84cf275ba7@2x.png,efb215d2e0a65aa8cae70c84cf275ba7@3x.png"}},"xml":"fced2a3a21870f5d3c81a1f32350156f.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/0e416f7e604996e1772b16e916b23de3.zip"},"500008":{"res":{"231318":{"name":"4b5436405c27855e3724862aa033c170","files":"4b5436405c27855e3724862aa033c170@2x.png,4b5436405c27855e3724862aa033c170@3x.png"},"231319":{"name":"7575001fb5f32a0eace1066439d96efd","files":"7575001fb5f32a0eace1066439d96efd@2x.png,7575001fb5f32a0eace1066439d96efd@3x.png"},"231320":{"name":"a07a957007353173f656dc0a98510f1d","files":"a07a957007353173f656dc0a98510f1d@2x.png,a07a957007353173f656dc0a98510f1d@3x.png"},"231321":{"name":"3348818127e84917d38a40d31dc94856","files":"3348818127e84917d38a40d31dc94856@2x.png,3348818127e84917d38a40d31dc94856@3x.png"},"231322":{"name":"3723130515b88e8ce0d455be8b020679","files":"3723130515b88e8ce0d455be8b020679@2x.png,3723130515b88e8ce0d455be8b020679@3x.png"},"231323":{"name":"efb215d2e0a65aa8cae70c84cf275ba7","files":"efb215d2e0a65aa8cae70c84cf275ba7@2x.png,efb215d2e0a65aa8cae70c84cf275ba7@3x.png"}},"xml":"5718997b55facf1925a92f0ac8acfd10.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/38e6ec36c11b73e2eda19d43e47ea929.zip"},"500009":{"res":{"231318":{"name":"4b5436405c27855e3724862aa033c170","files":"4b5436405c27855e3724862aa033c170@2x.png,4b5436405c27855e3724862aa033c170@3x.png"},"231319":{"name":"7575001fb5f32a0eace1066439d96efd","files":"7575001fb5f32a0eace1066439d96efd@2x.png,7575001fb5f32a0eace1066439d96efd@3x.png"},"231320":{"name":"a07a957007353173f656dc0a98510f1d","files":"a07a957007353173f656dc0a98510f1d@2x.png,a07a957007353173f656dc0a98510f1d@3x.png"},"231321":{"name":"3348818127e84917d38a40d31dc94856","files":"3348818127e84917d38a40d31dc94856@2x.png,3348818127e84917d38a40d31dc94856@3x.png"},"231322":{"name":"3723130515b88e8ce0d455be8b020679","files":"3723130515b88e8ce0d455be8b020679@2x.png,3723130515b88e8ce0d455be8b020679@3x.png"},"231323":{"name":"efb215d2e0a65aa8cae70c84cf275ba7","files":"efb215d2e0a65aa8cae70c84cf275ba7@2x.png,efb215d2e0a65aa8cae70c84cf275ba7@3x.png"}},"xml":"e899ea1520c69e71aaf023791a99f4d7.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/11cd586de98c1258f02f92b67a25f3e4.zip"},"500010":{"res":{"231318":{"name":"4b5436405c27855e3724862aa033c170","files":"4b5436405c27855e3724862aa033c170@2x.png,4b5436405c27855e3724862aa033c170@3x.png"},"231319":{"name":"7575001fb5f32a0eace1066439d96efd","files":"7575001fb5f32a0eace1066439d96efd@2x.png,7575001fb5f32a0eace1066439d96efd@3x.png"},"231320":{"name":"a07a957007353173f656dc0a98510f1d","files":"a07a957007353173f656dc0a98510f1d@2x.png,a07a957007353173f656dc0a98510f1d@3x.png"},"231321":{"name":"3348818127e84917d38a40d31dc94856","files":"3348818127e84917d38a40d31dc94856@2x.png,3348818127e84917d38a40d31dc94856@3x.png"},"231322":{"name":"3723130515b88e8ce0d455be8b020679","files":"3723130515b88e8ce0d455be8b020679@2x.png,3723130515b88e8ce0d455be8b020679@3x.png"},"231323":{"name":"efb215d2e0a65aa8cae70c84cf275ba7","files":"efb215d2e0a65aa8cae70c84cf275ba7@2x.png,efb215d2e0a65aa8cae70c84cf275ba7@3x.png"}},"xml":"f92ed8029faf2a0d1ba4d0f8059a330e.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/5fadfa3636505e5fcd7d8b42bd8f8eba.zip"},"500011":{"res":{"231318":{"name":"4b5436405c27855e3724862aa033c170","files":"4b5436405c27855e3724862aa033c170@2x.png,4b5436405c27855e3724862aa033c170@3x.png"},"231319":{"name":"7575001fb5f32a0eace1066439d96efd","files":"7575001fb5f32a0eace1066439d96efd@2x.png,7575001fb5f32a0eace1066439d96efd@3x.png"},"231320":{"name":"a07a957007353173f656dc0a98510f1d","files":"a07a957007353173f656dc0a98510f1d@2x.png,a07a957007353173f656dc0a98510f1d@3x.png"},"231321":{"name":"3348818127e84917d38a40d31dc94856","files":"3348818127e84917d38a40d31dc94856@2x.png,3348818127e84917d38a40d31dc94856@3x.png"},"231322":{"name":"3723130515b88e8ce0d455be8b020679","files":"3723130515b88e8ce0d455be8b020679@2x.png,3723130515b88e8ce0d455be8b020679@3x.png"},"231323":{"name":"efb215d2e0a65aa8cae70c84cf275ba7","files":"efb215d2e0a65aa8cae70c84cf275ba7@2x.png,efb215d2e0a65aa8cae70c84cf275ba7@3x.png"}},"xml":"7890e5762530139eb7a7614254972c98.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/34f174cd9daad4c06a15cb2e83ac179b.zip"},"500012":{"res":{},"xml":"9ad5274dcee2da5dc3f801b6e1d3471f.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/f6f303796be657619f944bebfd9e98aa.zip"},"500014":{"res":{"231400":{"name":"c7419e8219ece43fd151a22d8a569073","files":"c7419e8219ece43fd151a22d8a569073@2x.png,c7419e8219ece43fd151a22d8a569073@3x.png"},"231401":{"name":"d635d6b27d4839ae39ba7cd563837679","files":"d635d6b27d4839ae39ba7cd563837679@2x.png,d635d6b27d4839ae39ba7cd563837679@3x.png"},"231402":{"name":"5e1f4adb04131d0611d732971694c40c","files":"5e1f4adb04131d0611d732971694c40c@2x.png,5e1f4adb04131d0611d732971694c40c@3x.png"},"231403":{"name":"c565708b6902da24efdd524bdf90cc12","files":"c565708b6902da24efdd524bdf90cc12@2x.png,c565708b6902da24efdd524bdf90cc12@3x.png"},"231404":{"name":"6bde3efc44c7ccaf3f74219c626d2fad","files":"6bde3efc44c7ccaf3f74219c626d2fad@2x.png,6bde3efc44c7ccaf3f74219c626d2fad@3x.png"},"231405":{"name":"e53f914588a31670bfb78a255e7b826d","files":"e53f914588a31670bfb78a255e7b826d@2x.png,e53f914588a31670bfb78a255e7b826d@3x.png"},"231406":{"name":"f0de4c5f559ebc89d7db61a87eeda245","files":"f0de4c5f559ebc89d7db61a87eeda245@2x.png,f0de4c5f559ebc89d7db61a87eeda245@3x.png"},"231407":{"name":"23050405e8e86efd08b9b02f99af68f4","files":"23050405e8e86efd08b9b02f99af68f4@2x.png,23050405e8e86efd08b9b02f99af68f4@3x.png"},"231408":{"name":"185e23d4c2a44815f5babb26ea23458c","files":"185e23d4c2a44815f5babb26ea23458c@2x.png,185e23d4c2a44815f5babb26ea23458c@3x.png"},"231409":{"name":"8951901b1fffae9dafb9fdc1ee81f212","files":"8951901b1fffae9dafb9fdc1ee81f212@2x.png,8951901b1fffae9dafb9fdc1ee81f212@3x.png"},"231410":{"name":"ff7f0fd9b43414bda72f19c165f062ed","files":"ff7f0fd9b43414bda72f19c165f062ed@2x.png,ff7f0fd9b43414bda72f19c165f062ed@3x.png"},"231411":{"name":"1ea3bba43e89dc40d817015e118440b9","files":"1ea3bba43e89dc40d817015e118440b9@2x.png,1ea3bba43e89dc40d817015e118440b9@3x.png"},"231412":{"name":"9c9f6b9110ac1040ae1e83ae43fd8209","files":"9c9f6b9110ac1040ae1e83ae43fd8209@2x.png,9c9f6b9110ac1040ae1e83ae43fd8209@3x.png"},"231413":{"name":"8db79634a594e96e5a5caf2c38696714","files":"8db79634a594e96e5a5caf2c38696714@2x.png,8db79634a594e96e5a5caf2c38696714@3x.png"},"231414":{"name":"44419344ece0cd20c1bea3dc83992852","files":"44419344ece0cd20c1bea3dc83992852@2x.png,44419344ece0cd20c1bea3dc83992852@3x.png"},"231415":{"name":"3d302087e7b868c2ba4db2db8099a6e7","files":"3d302087e7b868c2ba4db2db8099a6e7@2x.png,3d302087e7b868c2ba4db2db8099a6e7@3x.png"},"231416":{"name":"b37e99f19bc193ddd6a2f2fb21ce31d0","files":"b37e99f19bc193ddd6a2f2fb21ce31d0@2x.png,b37e99f19bc193ddd6a2f2fb21ce31d0@3x.png"},"231417":{"name":"0f2de8ffe5bd83f531fb86b6d05ddbce","files":"0f2de8ffe5bd83f531fb86b6d05ddbce@2x.png,0f2de8ffe5bd83f531fb86b6d05ddbce@3x.png"},"231418":{"name":"eea514ce086d7f9b7a62dd41979d641a","files":"eea514ce086d7f9b7a62dd41979d641a@2x.png,eea514ce086d7f9b7a62dd41979d641a@3x.png"},"231419":{"name":"0e2cbf269dfc152e1ab8cbae2e8512aa","files":"0e2cbf269dfc152e1ab8cbae2e8512aa@2x.png,0e2cbf269dfc152e1ab8cbae2e8512aa@3x.png"},"231420":{"name":"e10fff8f3cb1bfda69f2ddded89bcb6c","files":"e10fff8f3cb1bfda69f2ddded89bcb6c@2x.png,e10fff8f3cb1bfda69f2ddded89bcb6c@3x.png"},"231421":{"name":"73d65769730824ba5068f9bc152d15ea","files":"73d65769730824ba5068f9bc152d15ea@2x.png,73d65769730824ba5068f9bc152d15ea@3x.png"},"231422":{"name":"3767d978d91d3e089e76e00876b164a9","files":"3767d978d91d3e089e76e00876b164a9@2x.png,3767d978d91d3e089e76e00876b164a9@3x.png"},"231423":{"name":"2b2609dd6bff310f57465c5ebb080f1d","files":"2b2609dd6bff310f57465c5ebb080f1d@2x.png,2b2609dd6bff310f57465c5ebb080f1d@3x.png"},"231424":{"name":"91822bac661d81c9aecab3c2b6357d94","files":"91822bac661d81c9aecab3c2b6357d94@2x.png,91822bac661d81c9aecab3c2b6357d94@3x.png"},"231425":{"name":"7db8fae7d342e0df4ea4c7e43d9f95cf","files":"7db8fae7d342e0df4ea4c7e43d9f95cf@2x.png,7db8fae7d342e0df4ea4c7e43d9f95cf@3x.png"}},"xml":"03575db6ab5f6065bb7ec4c2006a0544.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/acba7cd547bf9f61cfbb4255c984125a.zip"},"500016":{"res":{"231329":{"name":"0b6da8bbd4bf100a04e9b0480979e092","files":"0b6da8bbd4bf100a04e9b0480979e092@2x.png,0b6da8bbd4bf100a04e9b0480979e092@3x.png"},"231336":{"name":"ca64ba21861a8b0f3a05598f343b260f","files":"ca64ba21861a8b0f3a05598f343b260f@2x.png,ca64ba21861a8b0f3a05598f343b260f@3x.png"}},"xml":"1afcc3a2514efc603e2727287d387bd3.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/c5dc731a2b4a4006a600931bb3193d0f.zip"},"500017":{"res":{"110702":{"name":"8b66ad9d8ac1f18f7eb1fba76e72ef95","files":"8b66ad9d8ac1f18f7eb1fba76e72ef95@2x.png,8b66ad9d8ac1f18f7eb1fba76e72ef95@3x.png"}},"xml":"aab91bc51ad41bb5f4f451f35f5eb90c.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/3e41a66cbd576edd3b41b0738f3d8754.zip"},"500018":{"res":{"110702":{"name":"8b66ad9d8ac1f18f7eb1fba76e72ef95","files":"8b66ad9d8ac1f18f7eb1fba76e72ef95@2x.png,8b66ad9d8ac1f18f7eb1fba76e72ef95@3x.png"}},"xml":"a11a29af193a84e209be37a7f85f5efa.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/65c067a07a7ec5539f6d1aa83345256d.zip"},"500019":{"res":{},"xml":"9b10ae9aa4bb773283bf778f6c7dcc3c.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/dc0dab75b044aad1b62a639dae0f59e6.zip"},"500021":{"res":{"200155":{"name":"6b63405e53e19df62dd9f27262390bef","files":"6b63405e53e19df62dd9f27262390bef@2x.webp,6b63405e53e19df62dd9f27262390bef@3x.webp"},"200157":{"name":"f6e44fdf25b066cd342b8e9edfd94af7","files":"f6e44fdf25b066cd342b8e9edfd94af7@2x.webp,f6e44fdf25b066cd342b8e9edfd94af7@3x.webp"}},"xml":"3001024229ba6942472f54f9966cd8eb.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/76d481aaab9c44235b7aa5089e4a6977.zip"},"500022":{"res":{"200154":{"name":"bfd4ecc3e9473a4b4c5e371631f0906a","files":"bfd4ecc3e9473a4b4c5e371631f0906a@2x.webp,bfd4ecc3e9473a4b4c5e371631f0906a@3x.webp"},"200156":{"name":"ea6302f9677307cd7668c82eb8227a45","files":"ea6302f9677307cd7668c82eb8227a45@2x.webp,ea6302f9677307cd7668c82eb8227a45@3x.webp"}},"xml":"b2a5859b38586481c6ee2492d040c465.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/ba81d46471b729e66c700e387ec4d67c.zip"},"500023":{"res":{"200157":{"name":"f6e44fdf25b066cd342b8e9edfd94af7","files":"f6e44fdf25b066cd342b8e9edfd94af7@2x.webp,f6e44fdf25b066cd342b8e9edfd94af7@3x.webp"},"200159":{"name":"8dd6646ddcece365f1a33c0e41447158","files":"8dd6646ddcece365f1a33c0e41447158@2x.webp,8dd6646ddcece365f1a33c0e41447158@3x.webp"}},"xml":"fb935be9f51dc6a63ce1dcf4450d54a6.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/ac38f95e9f2c5078bb730091600afbd4.zip"},"500024":{"res":{"200156":{"name":"ea6302f9677307cd7668c82eb8227a45","files":"ea6302f9677307cd7668c82eb8227a45@2x.webp,ea6302f9677307cd7668c82eb8227a45@3x.webp"},"200158":{"name":"ff257b9e621a5dde87e5fbf3f61d80cb","files":"ff257b9e621a5dde87e5fbf3f61d80cb@2x.webp,ff257b9e621a5dde87e5fbf3f61d80cb@3x.webp"}},"xml":"f2be1978ed8cc38349c5240bcbec8ce5.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/b2c93c8e1ffc5fa6487442560fd3641d.zip"},"500025":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"b33b0ac95ceae0855c02d825f8deca47.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/9dc304c47772d28278d7e4f523724931.zip"},"500026":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"b33b0ac95ceae0855c02d825f8deca47.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/9dc304c47772d28278d7e4f523724931.zip"},"500027":{"res":{"231500":{"name":"acc5f319a98810b58e7bfc71a56765fc","files":"acc5f319a98810b58e7bfc71a56765fc@2x.png,acc5f319a98810b58e7bfc71a56765fc@3x.png"},"231501":{"name":"94669584165a1eab902816d5c6b5b643","files":"94669584165a1eab902816d5c6b5b643@2x.png,94669584165a1eab902816d5c6b5b643@3x.png"},"231502":{"name":"1732b3864facd15357126a345ba2c9f4","files":"1732b3864facd15357126a345ba2c9f4@3x.png,1732b3864facd15357126a345ba2c9f4@2x.png"}},"xml":"14ae69d5e480ab2e066f359758eb089d.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/64dd9ee5ff7a5161a83effa3ed4d6659.zip"},"500028":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"40674916663dfb71e10775cf05294834.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/a10b5bc25552f583f8e357c7642f29ef.zip"},"500029":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"40674916663dfb71e10775cf05294834.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/a10b5bc25552f583f8e357c7642f29ef.zip"},"500030":{"res":{"205013":{"name":"7cc3b73c2cd925031151089135910cf1","files":"7cc3b73c2cd925031151089135910cf1@2x.png,7cc3b73c2cd925031151089135910cf1@3x.png,7cc3b73c2cd925031151089135910cf1@dark@2x.png,7cc3b73c2cd925031151089135910cf1@dark@3x.png"},"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"205015":{"name":"103c30e2596dc22fa8b7526aceb6be16","files":"103c30e2596dc22fa8b7526aceb6be16@2x.png,103c30e2596dc22fa8b7526aceb6be16@3x.png,103c30e2596dc22fa8b7526aceb6be16@dark@2x.png,103c30e2596dc22fa8b7526aceb6be16@dark@3x.png"},"205016":{"name":"77bb877dcca7edcca1f64442b522e408","files":"77bb877dcca7edcca1f64442b522e408@2x.png,77bb877dcca7edcca1f64442b522e408@3x.png,77bb877dcca7edcca1f64442b522e408@dark@2x.png,77bb877dcca7edcca1f64442b522e408@dark@3x.png"},"231602":{"name":"8299338e40952f5f979957f002768c4a","files":"8299338e40952f5f979957f002768c4a@2x.png,8299338e40952f5f979957f002768c4a@3x.png"}},"xml":"2c286177dc75f08db7ff94ab690e3d65.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/b0ca5ea847bae40b05c3b409db3fe104.zip"},"500031":{"res":{"205013":{"name":"7cc3b73c2cd925031151089135910cf1","files":"7cc3b73c2cd925031151089135910cf1@2x.png,7cc3b73c2cd925031151089135910cf1@3x.png,7cc3b73c2cd925031151089135910cf1@dark@2x.png,7cc3b73c2cd925031151089135910cf1@dark@3x.png"},"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"205015":{"name":"103c30e2596dc22fa8b7526aceb6be16","files":"103c30e2596dc22fa8b7526aceb6be16@2x.png,103c30e2596dc22fa8b7526aceb6be16@3x.png,103c30e2596dc22fa8b7526aceb6be16@dark@2x.png,103c30e2596dc22fa8b7526aceb6be16@dark@3x.png"},"205016":{"name":"77bb877dcca7edcca1f64442b522e408","files":"77bb877dcca7edcca1f64442b522e408@2x.png,77bb877dcca7edcca1f64442b522e408@3x.png,77bb877dcca7edcca1f64442b522e408@dark@2x.png,77bb877dcca7edcca1f64442b522e408@dark@3x.png"},"231602":{"name":"8299338e40952f5f979957f002768c4a","files":"8299338e40952f5f979957f002768c4a@2x.png,8299338e40952f5f979957f002768c4a@3x.png"}},"xml":"2c286177dc75f08db7ff94ab690e3d65.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/b0ca5ea847bae40b05c3b409db3fe104.zip"},"500032":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"}},"xml":"d9a4cf1356e7c2c0888f4ed6470e7173.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/1c59f2503a55f841f05218d681e5b3d1.zip"},"500033":{"res":{"110702":{"name":"8b66ad9d8ac1f18f7eb1fba76e72ef95","files":"8b66ad9d8ac1f18f7eb1fba76e72ef95@2x.png,8b66ad9d8ac1f18f7eb1fba76e72ef95@3x.png"}},"xml":"f8d0f5069097be843ebf53ee0883a2b5.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/2405ab3b3783c8713825d2e552809055.zip"},"500034":{"res":{"110158":{"name":"7f667364d59976a9b6ffc0647d32919d","files":"7f667364d59976a9b6ffc0647d32919d@2x.png,7f667364d59976a9b6ffc0647d32919d@3x.png"}},"xml":"9c2baf7361be1f7ae5c2766b12abba40.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/04ff3daeb8840b3cc6dc746b8a5e49e2.zip"},"500035":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"231430":{"name":"cdcec79624cab74e08d61402582da024","files":"cdcec79624cab74e08d61402582da024@2x.png,cdcec79624cab74e08d61402582da024@3x.png"},"231431":{"name":"b657fec87faa12241d7e1f144fd94e67","files":"b657fec87faa12241d7e1f144fd94e67@2x.png,b657fec87faa12241d7e1f144fd94e67@3x.png"},"231432":{"name":"be2195048a47b1c56a344d7053b0d52e","files":"be2195048a47b1c56a344d7053b0d52e@2x.png,be2195048a47b1c56a344d7053b0d52e@3x.png"},"231433":{"name":"797f8433ec5eab754bb7f50b1703a2d6","files":"797f8433ec5eab754bb7f50b1703a2d6@2x.png,797f8433ec5eab754bb7f50b1703a2d6@3x.png"},"231434":{"name":"8ee72c4ee5d5c13dfa9bd66c44da0e1e","files":"8ee72c4ee5d5c13dfa9bd66c44da0e1e@2x.png,8ee72c4ee5d5c13dfa9bd66c44da0e1e@3x.png"},"231435":{"name":"d70e0bccc775b34658b728da6afca6e3","files":"d70e0bccc775b34658b728da6afca6e3@2x.png,d70e0bccc775b34658b728da6afca6e3@3x.png"},"231436":{"name":"d70e0bccc775b34658b728da6afca6e3","files":"d70e0bccc775b34658b728da6afca6e3@2x.png,d70e0bccc775b34658b728da6afca6e3@3x.png"},"231437":{"name":"d19cd1a9ce541932a90e7e5a16084e92","files":"d19cd1a9ce541932a90e7e5a16084e92@2x.png,d19cd1a9ce541932a90e7e5a16084e92@3x.png"},"231438":{"name":"ea6efaebba08d40aaa110037485cedda","files":"ea6efaebba08d40aaa110037485cedda@2x.png,ea6efaebba08d40aaa110037485cedda@3x.png"},"231439":{"name":"37d83a7164887664cf280a2ce5f49a19","files":"37d83a7164887664cf280a2ce5f49a19@2x.png,37d83a7164887664cf280a2ce5f49a19@3x.png"},"231440":{"name":"cc478f08a380adeb34e77fbb8d91a431","files":"cc478f08a380adeb34e77fbb8d91a431@2x.png,cc478f08a380adeb34e77fbb8d91a431@3x.png"},"231441":{"name":"9769f3e509da058956466bd0977ef9a6","files":"9769f3e509da058956466bd0977ef9a6@2x.png,9769f3e509da058956466bd0977ef9a6@3x.png"},"231442":{"name":"fff5f0e609e1bd15df54e972fa0d6ddf","files":"fff5f0e609e1bd15df54e972fa0d6ddf@2x.png,fff5f0e609e1bd15df54e972fa0d6ddf@3x.png"},"231443":{"name":"634417897110aa3d6f7aa27bdedd27d6","files":"634417897110aa3d6f7aa27bdedd27d6@2x.png,634417897110aa3d6f7aa27bdedd27d6@3x.png"},"231444":{"name":"a03b1ff1cef3bf25869c99e3631eef65","files":"a03b1ff1cef3bf25869c99e3631eef65@2x.png,a03b1ff1cef3bf25869c99e3631eef65@3x.png"},"231445":{"name":"ce3193895a1ca0bb6dcb9c61e25bb5f2","files":"ce3193895a1ca0bb6dcb9c61e25bb5f2@2x.png,ce3193895a1ca0bb6dcb9c61e25bb5f2@3x.png"},"231446":{"name":"2807b195068fc2a6679c7e05ca0d9039","files":"2807b195068fc2a6679c7e05ca0d9039@2x.png,2807b195068fc2a6679c7e05ca0d9039@3x.png"}},"xml":"ef3448f2b12918696d88d46fcb8bbdb8.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/5551924a2cf48be536e3eb81cf7d8239.zip"},"500036":{"res":{},"xml":"3d8910fdbf92577c85666a0f1b3f1818.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/80a3b9094da26896e6d996c484bf7c7a.zip"},"500037":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"8b37851bd0fa0c03985287f946a23489.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/fb59acc9969389dcd20aea6c988d5418.zip"},"500038":{"res":{},"xml":"3d8910fdbf92577c85666a0f1b3f1818.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/80a3b9094da26896e6d996c484bf7c7a.zip"},"500039":{"res":{},"xml":"7a8d7a8c4a8001e738d48280229a1823.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/5e0fa7b4cf205fd025aa62657177002b.zip"},"500040":{"res":{},"xml":"a6970b5e9ba5cb1249ba3f97ec0b0d85.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/de2e60e337ce75f8bf739e17a532f732.zip"},"500041":{"res":{},"xml":"a6970b5e9ba5cb1249ba3f97ec0b0d85.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/de2e60e337ce75f8bf739e17a532f732.zip"},"500042":{"res":{},"xml":"a6970b5e9ba5cb1249ba3f97ec0b0d85.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/de2e60e337ce75f8bf739e17a532f732.zip"},"500043":{"res":{},"xml":"17818a3acf6c30b0ce829c1a8deef8fa.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/028af8fc53bbdfcab993721d77eae678.zip"},"500044":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"8b37851bd0fa0c03985287f946a23489.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/fb59acc9969389dcd20aea6c988d5418.zip"},"500045":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"8b37851bd0fa0c03985287f946a23489.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/fb59acc9969389dcd20aea6c988d5418.zip"},"500046":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"660ffbf9a4d92a18b0824eeb3e0ff6e1.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/f8c7d8d3d6f6b00ee6cdf0d331d9613f.zip"},"500047":{"res":{},"xml":"a6970b5e9ba5cb1249ba3f97ec0b0d85.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/de2e60e337ce75f8bf739e17a532f732.zip"},"500048":{"res":{},"xml":"9573b003776e345988708803ed64a2e1.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/b681b3fc990f122709756d0606696bfc.zip"},"500049":{"res":{"232102":{"name":"e0ca62fd7fd142a0e5164fd88153164f","files":"e0ca62fd7fd142a0e5164fd88153164f@2x.png,e0ca62fd7fd142a0e5164fd88153164f@3x.png,e0ca62fd7fd142a0e5164fd88153164f@dark@2x.png,e0ca62fd7fd142a0e5164fd88153164f@dark@3x.png"}},"xml":"0024ad22e57ca581049e6a417f680b8a.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/0e45a31d132355476440065bccc2b507.zip"},"500050":{"res":{},"xml":"17818a3acf6c30b0ce829c1a8deef8fa.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/028af8fc53bbdfcab993721d77eae678.zip"},"500051":{"res":{},"xml":"3d8910fdbf92577c85666a0f1b3f1818.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/80a3b9094da26896e6d996c484bf7c7a.zip"},"500052":{"res":{},"xml":"17818a3acf6c30b0ce829c1a8deef8fa.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/028af8fc53bbdfcab993721d77eae678.zip"},"500053":{"res":{},"xml":"3d8910fdbf92577c85666a0f1b3f1818.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/80a3b9094da26896e6d996c484bf7c7a.zip"},"500054":{"res":{"231611":{"name":"3e20d2f33d823066a989ce45d868dac6","files":"3e20d2f33d823066a989ce45d868dac6@2x.png,3e20d2f33d823066a989ce45d868dac6@3x.png,3e20d2f33d823066a989ce45d868dac6@dark@2x.png,3e20d2f33d823066a989ce45d868dac6@dark@3x.png"}},"xml":"fd319fd41441142e64aa1a1f97ccac66.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/a7fb12531538217875f9c0bbbabc1082.zip"},"500055":{"res":{"232104":{"name":"8ed414b2ebfd5a846045752177447d08","files":"8ed414b2ebfd5a846045752177447d08@2x.png,8ed414b2ebfd5a846045752177447d08@3x.png,8ed414b2ebfd5a846045752177447d08@dark@2x.png,8ed414b2ebfd5a846045752177447d08@dark@3x.png"}},"xml":"e37a6920156c488368ff5b71f7328bad.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/e961c102c3bab0ce03cdffad3e7735a7.zip"},"500056":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"}},"xml":"38197bf63c2036f335adcc5908ea7a44.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/02df055781d04c4f263dfeb08892245a.zip"},"500057":{"res":{"205013":{"name":"7cc3b73c2cd925031151089135910cf1","files":"7cc3b73c2cd925031151089135910cf1@2x.png,7cc3b73c2cd925031151089135910cf1@3x.png,7cc3b73c2cd925031151089135910cf1@dark@2x.png,7cc3b73c2cd925031151089135910cf1@dark@3x.png"}},"xml":"aca437f759f014327a02099da519feaf.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/cafaec613fc9a7b89ea1a042690ed5c2.zip"},"500058":{"res":{"231602":{"name":"8299338e40952f5f979957f002768c4a","files":"8299338e40952f5f979957f002768c4a@2x.png,8299338e40952f5f979957f002768c4a@3x.png"},"231610":{"name":"97146901fbf934e423e47772cbe8e199","files":"97146901fbf934e423e47772cbe8e199@2x.png,97146901fbf934e423e47772cbe8e199@3x.png,97146901fbf934e423e47772cbe8e199@dark@2x.png,97146901fbf934e423e47772cbe8e199@dark@3x.png"}},"xml":"8cd98cef08c1d9d3b3b973c42385f762.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/ebe63f72f7b9a0ed5f4589ae2d24e36b.zip"},"500059":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"40674916663dfb71e10775cf05294834.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/a10b5bc25552f583f8e357c7642f29ef.zip"},"500060":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"40674916663dfb71e10775cf05294834.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/a10b5bc25552f583f8e357c7642f29ef.zip"},"500061":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"}},"xml":"35554bf58304d0e2faf5bcae5173b3db.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/ad435daa069dc6447c5f22e620df29f9.zip"},"500062":{"res":{"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231610":{"name":"97146901fbf934e423e47772cbe8e199","files":"97146901fbf934e423e47772cbe8e199@2x.png,97146901fbf934e423e47772cbe8e199@3x.png,97146901fbf934e423e47772cbe8e199@dark@2x.png,97146901fbf934e423e47772cbe8e199@dark@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"37e68683eeb54b23ea55173bfa0b6ebf.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/47221a14e4273e869da8a60ab5e242f0.zip"},"500063":{"res":{"232100":{"name":"bda0bdaccf2400824d7efefb3c1ecdf3","files":"bda0bdaccf2400824d7efefb3c1ecdf3@2x.png,bda0bdaccf2400824d7efefb3c1ecdf3@dark@3x.png,bda0bdaccf2400824d7efefb3c1ecdf3@dark@2x.png"},"232101":{"name":"1358521f838a6cafa85f2c44e473c238","files":"1358521f838a6cafa85f2c44e473c238@2x.png,1358521f838a6cafa85f2c44e473c238@3x.png,1358521f838a6cafa85f2c44e473c238@dark@2x.png,1358521f838a6cafa85f2c44e473c238@dark@3x.png"}},"xml":"a307d3a5efbff9a90c63535c76048a3d.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/1d876caf7845ef39ed4660484b51c96a.zip"},"500064":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"302ac73f940e8f654d31a36d0e7ada63.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/adb66723f88d6322af1bc076f12ec724.zip"},"500065":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"302ac73f940e8f654d31a36d0e7ada63.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/adb66723f88d6322af1bc076f12ec724.zip"},"500066":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"8751705337d179cd0a2e8e1122341638.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/c9bb670cf027d0289135e48770a19a78.zip"},"500067":{"res":{"232102":{"name":"e0ca62fd7fd142a0e5164fd88153164f","files":"e0ca62fd7fd142a0e5164fd88153164f@2x.png,e0ca62fd7fd142a0e5164fd88153164f@3x.png,e0ca62fd7fd142a0e5164fd88153164f@dark@2x.png,e0ca62fd7fd142a0e5164fd88153164f@dark@3x.png"}},"xml":"b819ab4aeb1c3f5214971fef2c4d6ba8.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/4ee5867bc6c948a57714de9453ad8394.zip"},"500068":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"8b37851bd0fa0c03985287f946a23489.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/fb59acc9969389dcd20aea6c988d5418.zip"},"500069":{"res":{"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231610":{"name":"97146901fbf934e423e47772cbe8e199","files":"97146901fbf934e423e47772cbe8e199@2x.png,97146901fbf934e423e47772cbe8e199@3x.png,97146901fbf934e423e47772cbe8e199@dark@2x.png,97146901fbf934e423e47772cbe8e199@dark@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"8b5cebf54b6f79d86fb6a1774c16cfe9.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/5a9a591329f0a6f4a1bb973d01ea763c.zip"},"500070":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"660ffbf9a4d92a18b0824eeb3e0ff6e1.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/f8c7d8d3d6f6b00ee6cdf0d331d9613f.zip"},"500071":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"8b37851bd0fa0c03985287f946a23489.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/fb59acc9969389dcd20aea6c988d5418.zip"},"500072":{"res":{},"xml":"90a118a25739be524226ea81b2d69e27.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/4d35ae03257af1b8254c3da85d9ee260.zip"},"500073":{"res":{},"xml":"2170f47f717ca341198ff1709aca6345.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/22172bafd1a7862892e06f0e08825bb6.zip"},"500074":{"res":{},"xml":"2170f47f717ca341198ff1709aca6345.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/22172bafd1a7862892e06f0e08825bb6.zip"},"500075":{"res":{},"xml":"2170f47f717ca341198ff1709aca6345.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/22172bafd1a7862892e06f0e08825bb6.zip"},"500076":{"res":{},"xml":"685fe6f1ce6f3ded63de6ca00b1fbc44.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/9b62f226a75975b41cba2687a499e387.zip"},"500077":{"res":{},"xml":"824488b5f7b9b034aeb9e9956869d19a.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/46932307dc8f5b7d56c821ed72379e58.zip"},"501054":{"res":{},"xml":"824488b5f7b9b034aeb9e9956869d19a.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/46932307dc8f5b7d56c821ed72379e58.zip"},"501056":{"res":{},"xml":"824488b5f7b9b034aeb9e9956869d19a.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/46932307dc8f5b7d56c821ed72379e58.zip"},"501057":{"res":{"232103":{"name":"f3e963082096a5cce03b2ebfde5cd523","files":"f3e963082096a5cce03b2ebfde5cd523@2x.png,f3e963082096a5cce03b2ebfde5cd523@3x.png,f3e963082096a5cce03b2ebfde5cd523@dark@2x.png,f3e963082096a5cce03b2ebfde5cd523@dark@3x.png"}},"xml":"9ed491944db0eee2ede283a4bd2890f7.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/a297c4730feac72cb19f74dd0a92ea4e.zip"},"501059":{"res":{"205014":{"name":"2ad81d3ed281825ffb4ed8d8c6d37a6e","files":"2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png,2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png"},"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"b33b0ac95ceae0855c02d825f8deca47.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/9dc304c47772d28278d7e4f523724931.zip"},"501060":{"res":{"231610":{"name":"97146901fbf934e423e47772cbe8e199","files":"97146901fbf934e423e47772cbe8e199@2x.png,97146901fbf934e423e47772cbe8e199@3x.png,97146901fbf934e423e47772cbe8e199@dark@2x.png,97146901fbf934e423e47772cbe8e199@dark@3x.png"}},"xml":"43edae303ce58e7deb356c1a6c46c8d9.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/706a9c9ceec31a20d6490e43c283cd73.zip"},"501063":{"res":{"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231610":{"name":"97146901fbf934e423e47772cbe8e199","files":"97146901fbf934e423e47772cbe8e199@2x.png,97146901fbf934e423e47772cbe8e199@3x.png,97146901fbf934e423e47772cbe8e199@dark@2x.png,97146901fbf934e423e47772cbe8e199@dark@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"37e68683eeb54b23ea55173bfa0b6ebf.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/47221a14e4273e869da8a60ab5e242f0.zip"},"501064":{"res":{"231602":{"name":"8299338e40952f5f979957f002768c4a","files":"8299338e40952f5f979957f002768c4a@2x.png,8299338e40952f5f979957f002768c4a@3x.png"},"231610":{"name":"97146901fbf934e423e47772cbe8e199","files":"97146901fbf934e423e47772cbe8e199@2x.png,97146901fbf934e423e47772cbe8e199@3x.png,97146901fbf934e423e47772cbe8e199@dark@2x.png,97146901fbf934e423e47772cbe8e199@dark@3x.png"}},"xml":"8cd98cef08c1d9d3b3b973c42385f762.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/ebe63f72f7b9a0ed5f4589ae2d24e36b.zip"},"501065":{"res":{"231610":{"name":"97146901fbf934e423e47772cbe8e199","files":"97146901fbf934e423e47772cbe8e199@2x.png,97146901fbf934e423e47772cbe8e199@3x.png,97146901fbf934e423e47772cbe8e199@dark@2x.png,97146901fbf934e423e47772cbe8e199@dark@3x.png"}},"xml":"b8588d79574c0b69b9762b0af9eb6fae.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/860ffb05ffa0c1ad131506b91302b3c0.zip"},"501066":{"res":{"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231610":{"name":"97146901fbf934e423e47772cbe8e199","files":"97146901fbf934e423e47772cbe8e199@2x.png,97146901fbf934e423e47772cbe8e199@3x.png,97146901fbf934e423e47772cbe8e199@dark@2x.png,97146901fbf934e423e47772cbe8e199@dark@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"37e68683eeb54b23ea55173bfa0b6ebf.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/47221a14e4273e869da8a60ab5e242f0.zip"},"501067":{"res":{"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231610":{"name":"97146901fbf934e423e47772cbe8e199","files":"97146901fbf934e423e47772cbe8e199@2x.png,97146901fbf934e423e47772cbe8e199@3x.png,97146901fbf934e423e47772cbe8e199@dark@2x.png,97146901fbf934e423e47772cbe8e199@dark@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"37e68683eeb54b23ea55173bfa0b6ebf.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/47221a14e4273e869da8a60ab5e242f0.zip"},"501072":{"res":{"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231610":{"name":"97146901fbf934e423e47772cbe8e199","files":"97146901fbf934e423e47772cbe8e199@2x.png,97146901fbf934e423e47772cbe8e199@3x.png,97146901fbf934e423e47772cbe8e199@dark@2x.png,97146901fbf934e423e47772cbe8e199@dark@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"27379be05f708d525a805e9270207cfa.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/21ef31c79ab54899f575dfc3f330740d.zip"},"502068":{"res":{"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231610":{"name":"97146901fbf934e423e47772cbe8e199","files":"97146901fbf934e423e47772cbe8e199@2x.png,97146901fbf934e423e47772cbe8e199@3x.png,97146901fbf934e423e47772cbe8e199@dark@2x.png,97146901fbf934e423e47772cbe8e199@dark@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"8b5cebf54b6f79d86fb6a1774c16cfe9.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/5a9a591329f0a6f4a1bb973d01ea763c.zip"},"502070":{"res":{"231600":{"name":"f7828665d3e8bc9bc91134b4fcd93e69","files":"f7828665d3e8bc9bc91134b4fcd93e69@2x.png,f7828665d3e8bc9bc91134b4fcd93e69@3x.png"},"231601":{"name":"7ebbd3327ff7772c91801c00c374d843","files":"7ebbd3327ff7772c91801c00c374d843@2x.png,7ebbd3327ff7772c91801c00c374d843@3x.png"},"231603":{"name":"29e6bf1579fcbd9a047512464d66745b","files":"29e6bf1579fcbd9a047512464d66745b@2x.png,29e6bf1579fcbd9a047512464d66745b@3x.png"},"231604":{"name":"5d2e260a17bdcf008fdd2872a8b6eb14","files":"5d2e260a17bdcf008fdd2872a8b6eb14@2x.png,5d2e260a17bdcf008fdd2872a8b6eb14@3x.png"},"231605":{"name":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce","files":"fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@2x.png,fcfc4d7d30fc8cfff5dd2fb1ee5f34ce@3x.png"},"231606":{"name":"7cb230891ac22dec992ed6259c2d5777","files":"7cb230891ac22dec992ed6259c2d5777@2x.png,7cb230891ac22dec992ed6259c2d5777@3x.png"},"231607":{"name":"9076719035f628d5e7a71fcc0e2f9798","files":"9076719035f628d5e7a71fcc0e2f9798@2x.png,9076719035f628d5e7a71fcc0e2f9798@3x.png"},"231608":{"name":"d182f5a10f71373807a204fed177b3cf","files":"d182f5a10f71373807a204fed177b3cf@2x.png,d182f5a10f71373807a204fed177b3cf@3x.png"},"231609":{"name":"4c582092b2d64001835a735f8ac02c84","files":"4c582092b2d64001835a735f8ac02c84@2x.png,4c582092b2d64001835a735f8ac02c84@3x.png"},"231610":{"name":"97146901fbf934e423e47772cbe8e199","files":"97146901fbf934e423e47772cbe8e199@2x.png,97146901fbf934e423e47772cbe8e199@3x.png,97146901fbf934e423e47772cbe8e199@dark@2x.png,97146901fbf934e423e47772cbe8e199@dark@3x.png"},"231620":{"name":"9db4b1f1cf2ebdfb8e84d03da5762cfe","files":"9db4b1f1cf2ebdfb8e84d03da5762cfe@2x.png,9db4b1f1cf2ebdfb8e84d03da5762cfe@3x.png"},"231621":{"name":"ea049524d4375bca933bad8c29e2424d","files":"ea049524d4375bca933bad8c29e2424d@2x.png,ea049524d4375bca933bad8c29e2424d@3x.png"},"231622":{"name":"9b9df03d1a66c2bc16a3315e9d3e2d8e","files":"9b9df03d1a66c2bc16a3315e9d3e2d8e@2x.png,9b9df03d1a66c2bc16a3315e9d3e2d8e@3x.png"},"231623":{"name":"dfe0326416eedafa499a02ef800e44c5","files":"dfe0326416eedafa499a02ef800e44c5@2x.png,dfe0326416eedafa499a02ef800e44c5@3x.png"}},"xml":"580f7726ad1710cc46e90abc6455ac3a.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/5473088e2781157fec2ec7cacc0a3214.zip"},"502071":{"res":{"232103":{"name":"f3e963082096a5cce03b2ebfde5cd523","files":"f3e963082096a5cce03b2ebfde5cd523@2x.png,f3e963082096a5cce03b2ebfde5cd523@3x.png,f3e963082096a5cce03b2ebfde5cd523@dark@2x.png,f3e963082096a5cce03b2ebfde5cd523@dark@3x.png"}},"xml":"73fcaf36019e63eb662d2532d668b01c.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/1252864bb90471093d87ef317c33af90.zip"},"RouteBubble_Longtrip_Electric_normal":{"xml":"77b4a2b83f8ad69eb9231af543c4d670.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/755851df5c51be39ec4caa035787d288.zip"},"RouteBubble_Longtrip_Road_normal":{"xml":"361ad8f2567e26cf149b8c756e118964.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/cfd5ece8db0fba7f876e97993c7576a6.zip"},"RouteBubble_Longtrip_Weather_normal":{"xml":"aae897e046255bcabc76bf0bac10f957.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/a15e1254dc7061415f96354fab9c9a68.zip"},"RouteBubble_Longtrip_Gas_normal":{"xml":"b09737244cf06165e1b29c394a482d40.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/2575f31ccba78ff8e77b6babbf1024ba.zip"},"RouteBubble_WIA_TravelPlan":{"xml":"07ebd11050af8a1cd41a06e621f1480e.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/fd308de922a900925551c9eb83d865a7.zip"},"RouteBubble_WIA_TravelGuide":{"xml":"716ff24068cdcd3368f6e13d95666e3d.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/9b72148f2f2aa4312ffba18f3ef65900.zip"},"RouteBubble_WIA_DriveGuide":{"xml":"b4f44e76b81740918ea1af0ab8e31c00.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/3197d670714b3b80799efb4910dad965.zip"},"RouteBubble_Longtrip_camera_Interval":{"xml":"ab115e586e1dddb9dc54cc99fe96ac6e.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/25adbde03857954eef2c82957f42e215.zip"},"RouteBubble_WIA_DrivePlan":{"xml":"b228e82d0792f1cc57722fef7edd8cc3.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/417e2a2933ac173eb404077d7e8f1f38.zip"},"RouteBubble_RouteSearchRecommend":{"xml":"6f15b9c931c01cf0cde12988dbdd4dcf.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/be3c6ca7c9d55843479af01ef5d3f0a7.zip"},"RouteBubble_Longtrip_Electric_choose":{"xml":"f76c61a2c9f63fbf9390a4d08816548e.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/f87c3898446dff0e5795abd89d3f98a5.zip"},"RouteBubble_Longtrip_Gas_recommend":{"xml":"2b3d62bef3a2bd8759415a3d5f2da9aa.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/f4a107fc96081e588a5e4e6d75711091.zip"},"RouteBubble_ViaPointBubble":{"xml":"2d6fa735f94b9ae23df601c943004d91.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/5eefcbe8627797aa553add67883675a6.zip"},"RouteBubble_Longtrip_Service_plan":{"xml":"5107c1e1136c37646ef5fa6adb5173f7.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/0e9affc14f921158c0ffd6db767ab861.zip"},"RouteBubble_Longtrip_Gas_choose":{"xml":"c42a2b4699c6c938d670c51449e79558.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/f367a65f215ab28ac4ca115accd7a2c3.zip"},"RouteBubble_night":{"xml":"5057ccf170b5c8bba690e6711172e038.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/0f149c63ed8b2d8abe436b0602a9949c.zip"},"RouteBubble_Longtrip_City_normal":{"xml":"61f0f9f8253b48f384836f39b4bf5095.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/a67967d373a9c9469ad63672c6dc8389.zip"},"RouteBubble_Longtrip_camera_Intensive":{"xml":"e78f8965442f6c1b85c3fe53cd8df1f8.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/0db5e1d636dd5d026f84a8eb0ba690b2.zip"},"RouteBubble_Longtrip_Service_plan_dot":{"xml":"e9ee904c324b89c417413ce4bc8cf9ba.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/b7f9c4489d941dd38d91e3cc875e60b0.zip"},"RouteBubble_Longtrip_CameraService":{"xml":"55b1afe9f3a59a85d89217dbddcabccc.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/e54babfd1e3b2ed77bbd26fef32c179c.zip"},"RouteBubble_Longtrip_Service_alert":{"xml":"e2d01ebca5535fe5240f0018ccb6bc5e.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/1b686441b7609d20057d01a4c7a28bc0.zip"},"RouteBubble_SolidLineRightNight":{"res":{},"xml":"de3e709c819c305b52bec74ed785b290.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/dd662d817f794a0eb480a3bf3fa29122.zip"},"RouteBubble_Longtrip_Electric_recommend":{"xml":"e56c494260ad788bf843ed4ab309ee1f.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/717ececf7880a9e4f0c377b1bcdb7eb0.zip"},"RouteBubble_Longtrip_Toll_entrance":{"res":{},"xml":"c6239b768c35af331bb5e310af4d4abc.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/620a40853e580ea25db9a590f37debbf.zip"},"RouteBubble_DrivePass":{"res":{},"xml":"db57e9e8ed29489d775c59681b8608a7.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/f12338db613d04ce4d8a7d2173eb19e3.zip"},"RouteBubble_SolidLineLeftNight":{"res":{},"xml":"242df22e4cd4546cd29fcd4e5b87b488.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/2d8821a6acb81f826f0684e8c492d801.zip"},"RouteBubble_TravelCalorieBubble":{"res":{},"xml":"c8bc0cd0c1a7fc6c04d1d4b9a8aab58f.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/b5d4445ad158862157c571b86912f05b.zip"},"RouteBubble_SolidLineRight":{"res":{},"xml":"272c7de8f2541f50c9f1a89fcfb7b590.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/e54837e4dd4c9fe56016c9cd67b32171.zip"},"RouteBubble_GreenWave":{"res":{},"xml":"504d06ece8adf65003175c6be0a19a7b.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/3b0ebd8d4fa7d5e727f7d58bc400c7db.zip"},"RouteBubble_TrafficEvent":{"res":{},"xml":"65e25802f3a3f9354dac1d2a799ea493.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/14b447642a4ca394f7e933dedceb0b06.zip"},"RouteBubble_TrafficEventAlter":{"res":{},"xml":"d60f19467c3df787c247e10e4bb5b84b.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/a9f85886b3213175146165c99a4f6ac4.zip"},"RouteBubble_CongestionWordAlt":{"res":{},"xml":"7329940e301addadf307a1b19bcdd109.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/ccc91c0f975d3ee94cd2d809018a9240.zip"},"RouteBubble_OperationTime":{"res":{},"xml":"5e2b3ac1493777640aa631e15f726c31.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/9dad351d4629d665503bb89271a65859.zip"},"RouteBubble_ForbidBubble":{"res":{},"xml":"6dd499d5d0fa93fac18545594ce17056.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/c1425ccad1738b00b47377c56ebf81a8.zip"},"RouteBubble_GreenerBubble":{"res":{},"xml":"85c568d44b4caf7ea92a433c30bd7007.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/c95b277cfb90dc56ff9e42d42d3e8de7.zip"},"RouteBubble_ConMarqueeWithIcon":{"res":{},"xml":"4ea466d31dfb8b08c25f56e19f659c46.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/54651c3c90688f9e7723e4adebc80098.zip"},"RouteBubble_ConMarqueeWithPic":{"res":{},"xml":"344f4698b820bd8a01d286a1eeb9901a.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/f0e2cfdabda2bdae7453924166362ac5.zip"},"RouteBubble_FestivalToolGate_detailed":{"res":{},"xml":"dfc26435c0799d4c6d275b502f4b3645.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/725925d272195bd8bef4f9107bd38eca.zip"},"RouteBubble_ConDoubleLineWithIcon":{"res":{},"xml":"9e0d0c22bdc63eeb3f1ad940aeb27bcb.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/1103463824a0368b0e7cb9b00e3eb9b1.zip"},"RouteBubble_ConDoubleLineWithPic":{"res":{},"xml":"e817037d438017b1908db88d378a9c87.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/95b1c7b048b703bc9da667e219d2e99a.zip"},"RouteVmap_HighwayTollGate":{"res":{},"xml":"59ef4acc9cb64469861ea564cff0b6cd.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/a4c693d900526cfb4236fe941d8c4303.zip"},"RouteLine_ElectronicEyeRoadSection":{"res":{},"xml":"a9084b82cb03907a719ce0412c27440d.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/5e87d839dde9abbf1b1143fee6e7d4b1.zip"},"RouteLine_IntervalSpeedSection":{"res":{},"xml":"a9084b82cb03907a719ce0412c27440d.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/5e87d839dde9abbf1b1143fee6e7d4b1.zip"},"RouteBubble_TravelPlanScenicRoute":{"res":{},"xml":"8f4f26bf198ff1eb944d6a21ed5f3cd6.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/f7b04993defd339fab83e89967a1f2d7.zip"},"RouteLine_Shine":{"res":{},"xml":"a9084b82cb03907a719ce0412c27440d.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/5e87d839dde9abbf1b1143fee6e7d4b1.zip"},"RouteBubble_SolidLineLeft":{"res":{},"xml":"c7555999ee4b68376d5a803e99e9fd2e.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/6b1f92b232065bb18765fce0fdb60557.zip"},"CollisionPrioirtyInfo":{"res":{},"xml":"074b85d99fb1c889e8ee827913190cf3.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/b235329455a27c71589e8051205dfef9.zip"},"RouteBubble_ConSingleline":{"res":{},"xml":"ad891a2b15e6552e036f8d2ffe4dfefa.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/8ac94424e41ab08bfd66d2500e013147.zip"},"RouteBubble_Longtrip_Toll_normal":{"xml":"0c1161e9b070d554df241a4d6b0cf94f.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/454da6bb95f17e5cdca9495957626921.zip"},"RouteBubble_Longtrip_camera_Endpoint":{"xml":"e4aa7089132f62ecb1888a23791bcc21.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/793f64f37a7b500f5071657890e9155a.zip"},"RouteBubble_shine":{"xml":"3c8984a4bd89e812e23f6406c0665a39.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/cc4dbaec983dbd388808f817e7f26404.zip"},"RouteVmap_GreenerBubble":{"res":{},"xml":"43c483c99f5a5053d67754c5d69449bc.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/2c943f2a197ff8bcd2577174e0bf74a2.zip"},"RouteBubble_FestivalToolGate_entrance":{"res":{},"xml":"3e003fd1119c399322169200e7f501a4.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/d9be42c33991cd8cea47a3195a9e91ad.zip"},"RouteBubble_FestivalToolGate_simple":{"res":{},"xml":"9229cbee2f82849531fa17ef581fc822.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/a27b9a531dc81ab8d7511c06453d735e.zip"},"RouteBubble_Longtrip_Service_normal":{"xml":"21ced4f75091e8db12a0f4f289c2259c.xml","zipUrl":"https://asset.amap.com/activity/VAPP-bubble2cloud/public/bubble/202305/2efb9b49c12b661bc842af06eb69f666.zip"}},"originDivInfoId":null} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d1bc0a92e38ca057abf25305a0a0c73e.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d1bc0a92e38ca057abf25305a0a0c73e.xml deleted file mode 100644 index 7d48f2a..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d1bc0a92e38ca057abf25305a0a0c73e.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d312bf85dfb8ad0a8609f03895114777.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d312bf85dfb8ad0a8609f03895114777.xml deleted file mode 100644 index 6c9851c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d312bf85dfb8ad0a8609f03895114777.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
- - - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d4c83652e4498028dd2f451029dd6108.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d4c83652e4498028dd2f451029dd6108.xml deleted file mode 100644 index db168b9..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d4c83652e4498028dd2f451029dd6108.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - -
-
-
- - -
- - - -
-
-
- - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d548675d7b26c09785bd7d6739b72817.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d548675d7b26c09785bd7d6739b72817.xml deleted file mode 100644 index dc61bdc..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d548675d7b26c09785bd7d6739b72817.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - -
- - - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d5694597d1592c713080f84384592f03.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d5694597d1592c713080f84384592f03.xml deleted file mode 100644 index 7274e87..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d5694597d1592c713080f84384592f03.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - -
- - - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d60f19467c3df787c247e10e4bb5b84b.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d60f19467c3df787c247e10e4bb5b84b.xml deleted file mode 100644 index 8ba457e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d60f19467c3df787c247e10e4bb5b84b.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":910,"prio_key":"CollisionPrioPlanTrafficEvent","state_controls":[{"token":1281,"show_states":{"0":true,"1":true,"2":false}}],"point_datas":[{"type":2,"min_zoom":"3.0f","max_zoom":"7.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500006,"anchorX":0.5,"anchorY":0.5,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":0}],"normalAnimations":[],"focusOpType":2,"focusCard_datas":[],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":false,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":0,"marker_type":1}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d6f99573cf16f821874a199378490952.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d6f99573cf16f821874a199378490952.xml deleted file mode 100644 index e5edbd0..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d6f99573cf16f821874a199378490952.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - $bgId = along.bgId - $brandIconId = along.brandIconId - $poiIndex = along.iconIndex - $fontSize = along.iconIndex>=10 ? 36 : 42 - -
-
-
- -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d86119db84afee8123acdad5c1d6a034.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d86119db84afee8123acdad5c1d6a034.xml deleted file mode 100644 index 46955db..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d86119db84afee8123acdad5c1d6a034.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d9a4cf1356e7c2c0888f4ed6470e7173.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d9a4cf1356e7c2c0888f4ed6470e7173.xml deleted file mode 100644 index c5c7a88..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/d9a4cf1356e7c2c0888f4ed6470e7173.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
- - -
- - - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/db25b039db5a8ee28f972b824cc193e2.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/db25b039db5a8ee28f972b824cc193e2.xml deleted file mode 100644 index f37c9e4..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/db25b039db5a8ee28f972b824cc193e2.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/db57e9e8ed29489d775c59681b8608a7.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/db57e9e8ed29489d775c59681b8608a7.xml deleted file mode 100644 index a918277..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/db57e9e8ed29489d775c59681b8608a7.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":2460,"prio_key":"CollisionPrioDrivePass","state_controls":[{"token":1281,"show_states":{"0":true,"1":true,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500002,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":0},{"resId":500002,"anchorX":0.5,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":0},{"resId":500002,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":0},{"resId":500002,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":0},{"resId":500002,"anchorX":0.5,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":0},{"resId":500002,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":0}],"normalAnimations":[],"focusCard_datas":[],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":true,"alt_route":true,"screen":true,"point_filter":true,"view_filter":true,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":0,"marker_type":0}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/de3e709c819c305b52bec74ed785b290.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/de3e709c819c305b52bec74ed785b290.xml deleted file mode 100644 index 26090d9..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/de3e709c819c305b52bec74ed785b290.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":1400,"prio_key":"CollisionPrioLaneNaviSolidLineBubbleNew","state_controls":[{"token":1283,"show_states":{"0":false,"1":true,"2":false,"3":false}}],"point_datas":[{"type":0,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500023,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":1}],"normalAnimations":[],"focusCard_datas":[],"isPoiFilter":false}],"clickable":false,"is_carplay":true,"is_hd_layer":true,"behavior_type":0},"collision_datas":{"items":[]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/deaef6e14dcf0e6b01c91bfa5fdc2586.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/deaef6e14dcf0e6b01c91bfa5fdc2586.xml deleted file mode 100644 index c289bfb..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/deaef6e14dcf0e6b01c91bfa5fdc2586.xml +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -
- -
- - - - -
- -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/df19d4bc8f4bef3d9dd138446afecb89.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/df19d4bc8f4bef3d9dd138446afecb89.xml deleted file mode 100644 index 014fc1e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/df19d4bc8f4bef3d9dd138446afecb89.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - - -
- - -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/dfc26435c0799d4c6d275b502f4b3645.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/dfc26435c0799d4c6d275b502f4b3645.xml deleted file mode 100644 index fdcbe70..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/dfc26435c0799d4c6d275b502f4b3645.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":3460,"prio_key":"CollisionPrioTollGate1","state_controls":[{"token":1281,"show_states":{"0":true,"1":true,"2":false}}],"point_datas":[{"type":1,"min_zoom":"10.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500017,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":1},{"resId":500017,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"is_focus":"1","paramType":1}],"normalAnimations":[],"focusCard_datas":[],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":true,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":0,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e0fc2df6f049760e0fbd9628610b7d86.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e0fc2df6f049760e0fbd9628610b7d86.xml deleted file mode 100644 index fc6a2a7..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e0fc2df6f049760e0fbd9628610b7d86.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - -
-
-
- - - -
- -
- - - -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e2d01ebca5535fe5240f0018ccb6bc5e.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e2d01ebca5535fe5240f0018ccb6bc5e.xml deleted file mode 100644 index d331541..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e2d01ebca5535fe5240f0018ccb6bc5e.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":1000,"sub_priority":13050,"prio_key":"CollisionPrioLongtrip","state_controls":[{"token":1281,"show_states":{"0":false,"1":false,"2":true}},{"token":1289,"show_states":{"1":false,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[1],"card_datas":[{"resId":500066,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500066,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500066,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500066,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1}],"normalAnimations":[],"focusAnimations":[],"focusOpType":3,"focusCard_datas":[{"resId":502070,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":502070,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":502070,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":502070,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1}],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":null,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3},{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e37a6920156c488368ff5b71f7328bad.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e37a6920156c488368ff5b71f7328bad.xml deleted file mode 100644 index 8c10e03..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e37a6920156c488368ff5b71f7328bad.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e4aa7089132f62ecb1888a23791bcc21.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e4aa7089132f62ecb1888a23791bcc21.xml deleted file mode 100644 index 0d2933c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e4aa7089132f62ecb1888a23791bcc21.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":1000,"sub_priority":13050,"prio_key":"CollisionPrioLongtrip","state_controls":[{"token":1281,"show_states":{"0":false,"1":false,"2":true}},{"token":1289,"show_states":{"1":false,"2":false}}],"point_datas":[{"type":1,"min_zoom":"9.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500063,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"9.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500063,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"9.0f","max_zoom":"20.0f","is_focus":"1","paramType":1}],"normalAnimations":[],"focusAnimations":[],"focusOpType":0,"focusCard_datas":[],"isPoiFilter":false}],"clickable":false,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e514e85c8f15e3cc91d5ad7c061abf59.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e514e85c8f15e3cc91d5ad7c061abf59.xml deleted file mode 100644 index bf23e3b..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e514e85c8f15e3cc91d5ad7c061abf59.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
-
- -
- - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e56c494260ad788bf843ed4ab309ee1f.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e56c494260ad788bf843ed4ab309ee1f.xml deleted file mode 100644 index 7e8fd98..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e56c494260ad788bf843ed4ab309ee1f.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":1000,"sub_priority":13100,"prio_key":"CollisionPrioLongtriprecommend","state_controls":[{"token":1281,"show_states":{"0":false,"1":false,"2":true}},{"token":1289,"show_states":{"1":false,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[1],"card_datas":[{"resId":500059,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500059,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500059,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500059,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1}],"normalAnimations":[],"focusAnimations":[],"focusOpType":3,"focusCard_datas":[{"resId":500062,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":500062,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":500062,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":500062,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1}],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3},{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e60cf83fb2ec8aad33b5f65849bf5fab.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e60cf83fb2ec8aad33b5f65849bf5fab.xml deleted file mode 100644 index 8455832..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e60cf83fb2ec8aad33b5f65849bf5fab.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - - -
- - -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e612bfb83b74d489ce9b4f0c4399a5a2.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e612bfb83b74d489ce9b4f0c4399a5a2.xml deleted file mode 100644 index e29bfa0..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e612bfb83b74d489ce9b4f0c4399a5a2.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
- - - -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e78f8965442f6c1b85c3fe53cd8df1f8.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e78f8965442f6c1b85c3fe53cd8df1f8.xml deleted file mode 100644 index ae6b0d2..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e78f8965442f6c1b85c3fe53cd8df1f8.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":1000,"sub_priority":13050,"prio_key":"CollisionPrioLongtrip","state_controls":[{"token":1281,"show_states":{"0":false,"1":false,"2":true}},{"token":1289,"show_states":{"1":false,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[1],"card_datas":[{"resId":500067,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500067,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500067,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500067,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1}],"normalAnimations":[],"focusAnimations":[],"focusOpType":3,"focusCard_datas":[{"resId":502071,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":502071,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":502071,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":502071,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1}],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3},{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e817037d438017b1908db88d378a9c87.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e817037d438017b1908db88d378a9c87.xml deleted file mode 100644 index 89697c4..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e817037d438017b1908db88d378a9c87.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":120,"sub_priority":1960,"prio_key":"CollisionDriveCongestionBubble","state_controls":[{"token":1281,"show_states":{"0":true,"1":true,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500010,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":20,"top":15,"right":20,"bottom":25},"is_focus":"1","paramType":1},{"resId":500010,"anchorX":0.5,"anchorY":1,"textureStyle":"","padding":{"left":20,"top":10,"right":20,"bottom":25},"is_focus":"1","paramType":1},{"resId":500010,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":20,"top":15,"right":20,"bottom":25},"is_focus":"1","paramType":1},{"resId":500010,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":20,"top":15,"right":20,"bottom":25},"is_focus":"1","paramType":1},{"resId":500010,"anchorX":0.5,"anchorY":0,"textureStyle":"","padding":{"left":15,"top":15,"right":15,"bottom":25},"is_focus":"1","paramType":1},{"resId":500010,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":20,"top":15,"right":20,"bottom":25},"is_focus":"1","paramType":1}],"normalAnimations":[],"focusOpType":2,"focusCard_datas":[],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":true,"alt_route":true,"screen":false,"point_filter":true,"view_filter":true,"area_percent":0.2,"route_percent":0.25,"alt_route_percent":0.6,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e899ea1520c69e71aaf023791a99f4d7.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e899ea1520c69e71aaf023791a99f4d7.xml deleted file mode 100644 index 49b62d0..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e899ea1520c69e71aaf023791a99f4d7.xml +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - - -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e98a6ec24fdbb3cd067aa7a0e57da51f.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e98a6ec24fdbb3cd067aa7a0e57da51f.xml deleted file mode 100644 index 4a6d46e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e98a6ec24fdbb3cd067aa7a0e57da51f.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e9ee904c324b89c417413ce4bc8cf9ba.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e9ee904c324b89c417413ce4bc8cf9ba.xml deleted file mode 100644 index 364f9a8..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/e9ee904c324b89c417413ce4bc8cf9ba.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":1000,"sub_priority":13050,"prio_key":"CollisionPrioLongtrip","state_controls":[{"token":1281,"show_states":{"0":true,"1":true,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[],"card_datas":[{"resId":500054,"anchorX":0.5,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"9.0f","is_focus":"1","paramType":1},{"resId":501059,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"9.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":501059,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"9.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":501059,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"9.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":501059,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"9.0f","max_zoom":"20.0f","is_focus":"1","paramType":1}],"normalAnimations":[],"focusAnimations":[],"focusOpType":0,"focusCard_datas":[],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":true,"alt_route":false,"screen":false,"point_filter":false,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3},{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/eaef18add894e8ee5f6dba6cdcaf0a8d.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/eaef18add894e8ee5f6dba6cdcaf0a8d.xml deleted file mode 100644 index 43c0c89..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/eaef18add894e8ee5f6dba6cdcaf0a8d.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - -
- - - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/eafa03f04cb5cc7391827e6b2c395d17.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/eafa03f04cb5cc7391827e6b2c395d17.xml deleted file mode 100644 index 6540db8..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/eafa03f04cb5cc7391827e6b2c395d17.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/eeb471a47eb84ef9f42ce0d3e06d8058.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/eeb471a47eb84ef9f42ce0d3e06d8058.xml deleted file mode 100644 index ad2022b..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/eeb471a47eb84ef9f42ce0d3e06d8058.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ef3448f2b12918696d88d46fcb8bbdb8.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ef3448f2b12918696d88d46fcb8bbdb8.xml deleted file mode 100644 index dde77f9..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ef3448f2b12918696d88d46fcb8bbdb8.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - -
-
- - -
-
- -
- - -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f07ce4a53c09f76635ec8a020e711d4d.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f07ce4a53c09f76635ec8a020e711d4d.xml deleted file mode 100644 index 6144c6f..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f07ce4a53c09f76635ec8a020e711d4d.xml +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f2be1978ed8cc38349c5240bcbec8ce5.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f2be1978ed8cc38349c5240bcbec8ce5.xml deleted file mode 100644 index c31928e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f2be1978ed8cc38349c5240bcbec8ce5.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - -
-
-
-
-
- -
- - -
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f359e531d5b6b2181434159922d99b7f.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f359e531d5b6b2181434159922d99b7f.xml deleted file mode 100644 index c4d0caf..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f359e531d5b6b2181434159922d99b7f.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
- - -
- - -
- -
- - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f39bef063e604f7b18f234319112ab25.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f39bef063e604f7b18f234319112ab25.xml deleted file mode 100644 index 5954e5e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f39bef063e604f7b18f234319112ab25.xml +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - - -
-
-
-
-
-
-
- - -
- - - -
- -
- -
-
- -
- - - -
- -
-
- -
- -
- -
- - -
-
-
- -
-
- -
-
-
-
-
- -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f5e3f7e4b63aab2a0a5c6aa4c67a4f06.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f5e3f7e4b63aab2a0a5c6aa4c67a4f06.xml deleted file mode 100644 index d47ab81..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f5e3f7e4b63aab2a0a5c6aa4c67a4f06.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-
- - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f5e89cd6c9d75c33e75076a1c15b644d.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f5e89cd6c9d75c33e75076a1c15b644d.xml deleted file mode 100644 index b83c60f..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f5e89cd6c9d75c33e75076a1c15b644d.xml +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - -
- - -
-
- -
- - -
- - - -
- -
- - - - -
- - - -
-
-
-
- - - - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f6eedd46833d03ac3b35b9d2ded6284c.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f6eedd46833d03ac3b35b9d2ded6284c.xml deleted file mode 100644 index 5c3953c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f6eedd46833d03ac3b35b9d2ded6284c.xml +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- -
-
- -
-
- -
- - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f76c61a2c9f63fbf9390a4d08816548e.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f76c61a2c9f63fbf9390a4d08816548e.xml deleted file mode 100644 index 060e4e2..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f76c61a2c9f63fbf9390a4d08816548e.xml +++ /dev/null @@ -1 +0,0 @@ -{"point_datas":{"main_priority":1000,"sub_priority":13050,"prio_key":"CollisionPrioLongtrip","state_controls":[{"token":1281,"show_states":{"0":false,"1":false,"2":true}},{"token":1289,"show_states":{"1":false,"2":false}}],"point_datas":[{"type":1,"min_zoom":"3.0f","max_zoom":"20.0f","scalelevel_baseon_route":[],"click_motiontype":[1],"card_datas":[{"resId":500064,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500064,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500064,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1},{"resId":500064,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"1","paramType":1}],"normalAnimations":[],"focusAnimations":[],"focusOpType":3,"focusCard_datas":[{"resId":502068,"anchorX":1,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":502068,"anchorX":1,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":502068,"anchorX":0,"anchorY":1,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1},{"resId":502068,"anchorX":0,"anchorY":0,"textureStyle":"","padding":{"left":0,"top":0,"right":0,"bottom":0},"min_zoom":"3.0f","max_zoom":"20.0f","is_focus":"0","paramType":1}],"isPoiFilter":false}],"clickable":true,"is_carplay":false,"is_hd_layer":false,"behavior_type":0},"collision_datas":{"items":[{"group_id":100001,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3},{"group_id":null,"route":false,"alt_route":false,"screen":false,"point_filter":true,"view_filter":false,"area_percent":0,"route_percent":0,"alt_route_percent":0,"badcase_policy":1,"marker_type":3}]}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f785bd41c88db3d72fca6c07ba4ebc57.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f785bd41c88db3d72fca6c07ba4ebc57.xml deleted file mode 100644 index e755d5f..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f785bd41c88db3d72fca6c07ba4ebc57.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - -
- - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f8d0f5069097be843ebf53ee0883a2b5.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f8d0f5069097be843ebf53ee0883a2b5.xml deleted file mode 100644 index 4f0ac84..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f8d0f5069097be843ebf53ee0883a2b5.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
- - -
- - - -
-
-
- - -
- - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f92ed8029faf2a0d1ba4d0f8059a330e.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f92ed8029faf2a0d1ba4d0f8059a330e.xml deleted file mode 100644 index 1c250f8..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/f92ed8029faf2a0d1ba4d0f8059a330e.xml +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - -
- -
- - - -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/fa05ca58c75e94f828233ca7f2365f39.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/fa05ca58c75e94f828233ca7f2365f39.xml deleted file mode 100644 index 47cc1ed..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/fa05ca58c75e94f828233ca7f2365f39.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - -
-
- - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/fb935be9f51dc6a63ce1dcf4450d54a6.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/fb935be9f51dc6a63ce1dcf4450d54a6.xml deleted file mode 100644 index 1bdd8da..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/fb935be9f51dc6a63ce1dcf4450d54a6.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - -
-
-
-
- - -
- -
-
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/fbb528ab9bb1f8a9b252ab24112ca4a5.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/fbb528ab9bb1f8a9b252ab24112ca4a5.xml deleted file mode 100644 index f6c0f9b..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/fbb528ab9bb1f8a9b252ab24112ca4a5.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - - -
-
- -
- - - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/fbf64754143cb78c16821ef43fcc970d.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/fbf64754143cb78c16821ef43fcc970d.xml deleted file mode 100644 index 0417d84..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/fbf64754143cb78c16821ef43fcc970d.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/fced2a3a21870f5d3c81a1f32350156f.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/fced2a3a21870f5d3c81a1f32350156f.xml deleted file mode 100644 index ffa0712..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/fced2a3a21870f5d3c81a1f32350156f.xml +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - -
- -
- - -
- - - -
-
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/fd319fd41441142e64aa1a1f97ccac66.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/fd319fd41441142e64aa1a1f97ccac66.xml deleted file mode 100644 index fd68466..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/fd319fd41441142e64aa1a1f97ccac66.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - -
- -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/fda0fb9dd9f42296671d0e802594f537.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/fda0fb9dd9f42296671d0e802594f537.xml deleted file mode 100644 index 60a4644..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/fda0fb9dd9f42296671d0e802594f537.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - -
- -
- -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/fdf2f339adfaab4b4657246d2a4576b5.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/fdf2f339adfaab4b4657246d2a4576b5.xml deleted file mode 100644 index 4102fe7..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/fdf2f339adfaab4b4657246d2a4576b5.xml +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - - - -
- -
-
- -
- - - - -
- -
-
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ff856b03d2983b90ed4979ba7b3b6fc0.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ff856b03d2983b90ed4979ba7b3b6fc0.xml deleted file mode 100644 index c54e73d..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ff856b03d2983b90ed4979ba7b3b6fc0.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- - -
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ffe14d1a067a21f711e0e41437f18587.xml b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ffe14d1a067a21f711e0e41437f18587.xml deleted file mode 100644 index 770ea6b..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/cloudres/C1TemplateAssets/ffe14d1a067a21f711e0e41437f18587.xml +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
- - - -
- - -
- -
- - - - - - - - - -
-
-
diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/collision/collisionLayerDefine.json b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/collision/collisionLayerDefine.json deleted file mode 100644 index 3c215e2..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/collision/collisionLayerDefine.json +++ /dev/null @@ -1 +0,0 @@ -{"version":[1210,140],"data":[{"id":[100001,2000002,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]},{"i":[2,2]},{"i":[9,2]},{"i":[5,2]}],"type":1},{"id":[100001,2000002,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]},{"i":[2,2]},{"i":[9,2]},{"i":[5,2]}],"itemcategory":110003,"type":1},{"id":[100001,2000002,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]},{"i":[2,2]},{"i":[9,2]},{"i":[5,2]}],"itemcategory":110002,"type":1},{"id":[100001,2000069,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]},{"i":[2,2]},{"i":[9,2]},{"i":[5,2]}],"type":1},{"id":[100001,2000070,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]},{"i":[2,2]},{"i":[9,2]},{"i":[5,2]}],"type":1},{"id":[100001,2001006,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]},{"i":[2,2]},{"i":[9,2]},{"i":[5,2]}],"markerType":3,"type":1},{"id":[100001,2000071,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]},{"i":[2,2]},{"i":[9,2]},{"i":[5,2]}],"type":1,"dirs":[{"dir":[0.5,0.5,18,26,18,10]}]},{"id":[100001,2000003,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"itemcategory":110004,"type":1},{"id":[100001,2000003,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"itemcategory":110005,"type":1},{"id":[100001,2000072,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"type":1},{"id":[100001,2000073,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"type":1},{"id":[100001,2000029,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"badCasePolicy":1},{"id":[100001,2000030,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}]},{"id":[100001,2000005,1],"scene":[{"i":[2,12]}],"type":1},{"id":[100001,2000011,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"badCasePolicy":1,"dirs":[{"dir":[1,1,0,0,20,20]},{"dir":[0,1,20,0,0,20]}]},{"id":[100001,2000012,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"dirs":[{"dir":[1,1,0,0,20,20]},{"dir":[0,1,20,0,0,20]}]},{"id":[100001,2000009,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"badCasePolicy":1,"dirs":[{"dir":[1,1,0,0,5,5]},{"dir":[0,1,5,0,0,5]}]},{"id":[100001,2000010,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"dirs":[{"dir":[1,1,0,0,5,5]},{"dir":[0,1,5,0,0,5]}]},{"id":[100001,2000018,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"badCasePolicy":1,"dirs":[{"dir":[0.9,0.9,0,0,30,30]}]},{"id":[100001,2000050,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"badCasePolicy":1,"coverArea":0.6,"dirs":[{"dir":[0.9,0.9,0,0,30,30]}]},{"id":[100001,2000051,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"bdata":14,"badCasePolicy":1,"coverArea":0.3,"routeCoverArea":0.3,"altRouteCoverArea":0.6,"dirs":[{"dir":[0.95,0.9,0,0,30,30]},{"dir":[0.05,0.9,0,0,30,30]}]},{"id":[100001,2000024,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]},{"i":[2,2]},{"i":[9,2]},{"i":[5,2]}],"bdata":31,"badCasePolicy":1,"coverArea":0.2,"routeCoverArea":0.1,"altRouteCoverArea":0.5,"dirs":[{"dir":[0.5,0,10,24,10,10]},{"dir":[0,1,64,10,10,10]},{"dir":[1,1,10,10,64,10]}]},{"id":[100001,2000024,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]},{"i":[2,2]},{"i":[9,2]},{"i":[5,2]}],"itemcategory":110014,"bdata":31,"badCasePolicy":1,"coverArea":0.2,"routeCoverArea":0.1,"altRouteCoverArea":0.5,"dirs":[{"dir":[0.5,0,10,24,10,10]},{"dir":[1,1,10,10,64,10]}]},{"id":[100001,2001007,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]},{"i":[2,2]},{"i":[9,2]},{"i":[5,2]}],"bdata":31,"coverArea":0.2,"routeCoverArea":0.1,"altRouteCoverArea":0.5,"dirs":[{"dir":[0.5,0]},{"dir":[1,0.5]}]},{"id":[100001,2001008,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]},{"i":[2,2]},{"i":[9,2]},{"i":[5,2]}],"bdata":31,"coverArea":0.2,"routeCoverArea":0.1,"altRouteCoverArea":0.5,"dirs":[{"dir":[0.5,0]},{"dir":[1,1]}]},{"id":[100001,2000063,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]},{"i":[2,2]},{"i":[9,2]},{"i":[5,2]}],"bdata":31,"coverArea":0.35,"routeCoverArea":0.05,"altRouteCoverArea":0.9,"dirs":[{"dir":[0,1]},{"dir":[1,1]},{"dir":[0,0]},{"dir":[1,0]},{"dir":[0.5,0]}]},{"id":[100001,2000025,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]},{"i":[2,2]},{"i":[9,2]},{"i":[5,2]}],"badCasePolicy":1},{"id":[100001,2000026,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]},{"i":[2,2]},{"i":[9,2]},{"i":[5,2]}],"type":1},{"id":[100001,2000037,1],"scene":[{"i":[2,1]}],"markerType":3,"bdata":15,"badCasePolicy":1,"dirs":[{"dir":[1,0.5]},{"dir":[0,0.5]}]},{"id":[100001,2000037,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]},{"i":[2,2]},{"i":[9,2]},{"i":[5,2]}],"itemcategory":110013},{"id":[100000,2000037,1],"scene":[{"i":[2,3]}],"markerType":3,"bdata":15,"badCasePolicy":1,"dirs":[{"dir":[1,0.5]},{"dir":[0,0.5]}]},{"id":[100000,2000037,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]},{"i":[2,2]},{"i":[9,2]},{"i":[5,2]}],"itemcategory":110013},{"id":[100001,2000055,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]},{"i":[2,2]},{"i":[9,2]},{"i":[5,2]}],"bdata":0,"badCasePolicy":1,"dirs":[{"dir":[0,1,40,0,0,0]}]},{"id":[100001,2000054,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]},{"i":[2,2]},{"i":[9,2]},{"i":[5,2]}],"bdata":31,"coverArea":0.35,"routeCoverArea":0.05,"altRouteCoverArea":0.9,"pprio":[5,1,3,2],"dirs":[{"dir":[0,1,20,0,0,20]},{"dir":[1,1,0,0,20,20]},{"dir":[0,0,20,20,0,0]},{"dir":[1,0,0,20,20,0]},{"dir":[0.5,0,0,20,0,0]}]},{"id":[100001,2000057,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]},{"i":[2,12]}],"badCasePolicy":1},{"id":[100001,2000064,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"markerType":1,"badCasePolicy":1,"coverArea":0.2,"markerPrio":2},{"id":[100001,2000064,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"markerType":3,"bdata":2,"badCasePolicy":1,"markerPolicy":1,"markerPrio":1,"dirs":[{"dir":[0,1,10,0,10,30]},{"dir":[1,1,10,0,10,30]},{"dir":[1,0,10,0,10,0]},{"dir":[0,0,10,0,10,0]}]},{"id":[100001,2000087,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"bdata":31,"coverArea":0.3,"routeCoverArea":0.2,"altRouteCoverArea":0.8,"dirs":[{"dir":[1,1]},{"dir":[1,0]},{"dir":[0,1]},{"dir":[0,0]}]},{"id":[100001,2000090,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"markerType":2,"bdata":13,"badCasePolicy":1,"markerPrio":1},{"id":[100001,2000090,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"markerType":1,"markerPrio":2},{"id":[100001,2000090,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"itemcategory":110012,"markerType":2,"bdata":13,"badCasePolicy":1,"markerPrio":1},{"id":[100001,2000090,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"itemcategory":110012,"markerType":1,"markerPrio":2},{"id":[100001,10000001,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"bdata":15,"coverArea":0.1,"routeCoverArea":0.1,"pprio":[1,10,4,3],"dirs":[{"dir":[1,1]},{"dir":[1,0]},{"dir":[0,1]},{"dir":[0,0]},{"dir":[0.5,1,0,0,0,20]},{"dir":[0.5,0,0,20,0,0]}]},{"id":[100001,10000001,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"itemcategory":1,"bdata":6,"badCasePolicy":1,"dirs":[{"dir":[0.5,0.5]}]},{"id":[100001,10000001,4],"itemcategory":1,"bdata":6,"badCasePolicy":1,"dirs":[{"dir":[0.5,0.5]}]},{"id":[100001,10000001,4],"bdata":15,"coverArea":0.1,"routeCoverArea":0.1,"pprio":[1,10,4,3],"dirs":[{"dir":[1,1]},{"dir":[1,0]},{"dir":[0,1]},{"dir":[0,0]},{"dir":[0.5,1,0,0,0,20]},{"dir":[0.5,0,0,20,0,0]}]},{"id":[100001,2001001,1],"scene":[{"i":[2,1]}],"bdata":31,"badCasePolicy":1,"coverArea":0.4,"routeCoverArea":0.4,"altRouteCoverArea":0.8,"dirs":[{"dir":[0,1,20,0,0,24]},{"dir":[1,1,0,0,20,24]}]},{"id":[100000,2000100,1],"scene":[{"i":[2,3]},{"i":[8,3]}],"bdata":31,"coverArea":0.4,"routeCoverArea":0.4,"altRouteCoverArea":0.8,"dirs":[{"dir":[0,1]},{"dir":[0,0]},{"dir":[1,1]},{"dir":[1,0]}]},{"id":[100001,2001003,1],"scene":[{"i":[2,1]},{"i":[5,1]}],"bdata":12},{"id":[100001,2001004,1],"scene":[{"i":[2,1]},{"i":[5,1]}],"bdata":31,"coverArea":0.1,"routeCoverArea":0.25,"altRouteCoverArea":0.5,"dirs":[{"dir":[0,1,18,0,0,20]},{"dir":[1,1,0,0,18,20]},{"dir":[1,0,0,18,20,0]},{"dir":[0,0,18,20,0,0]}]},{"id":[100001,2000081,1],"scene":[{"i":[2,1]}],"badCasePolicy":1,"coverArea":0.1},{"id":[100001,2000080,1],"scene":[{"i":[2,1]}],"type":1},{"id":[100001,2000079,1],"scene":[{"i":[2,1]}],"bdata":15,"badCasePolicy":1,"coverArea":0.4,"routeCoverArea":0.3,"dirs":[{"dir":[0,1,0,20,0,20]},{"dir":[1,1,0,20,0,20]},{"dir":[1,0,0,20,0,20]},{"dir":[0,0,0,20,0,20]}]},{"id":[100000,2000036,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"bdata":15,"coverArea":0.1,"routeCoverArea":0.5,"dirs":[{"dir":[0,1,38,20,28,40]},{"dir":[1,1,28,20,38,40]},{"dir":[1,0,28,40,38,20]},{"dir":[0,0,38,40,28,20]}]},{"id":[100000,2000082,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"bdata":14,"coverArea":0.1,"routeCoverArea":0.1,"dirs":[{"dir":[0,1]},{"dir":[1,1]},{"dir":[1,0]},{"dir":[0,0]},{"dir":[0.5,0]}]},{"id":[100001,2001009,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"markerType":1,"bdata":0,"badCasePolicy":1,"markerPrio":3,"dirs":[{"dir":[0.5,1]}]},{"id":[100001,2001009,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"markerType":2,"bdata":0,"badCasePolicy":1,"markerPolicy":1,"markerPrio":2,"dirs":[{"dir":[0,0.5,0,0,0,45]},{"dir":[1,0.5,0,0,0,45]},{"dir":[0.5,0]}]},{"id":[100001,2001009,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"markerType":3,"bdata":0,"badCasePolicy":1,"markerPolicy":1,"markerPrio":1,"dirs":[{"dir":[0.5,0]}]},{"id":[100008,2001009,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"markerType":1,"bdata":0,"badCasePolicy":1,"markerPrio":3,"dirs":[{"dir":[0.5,1]}]},{"id":[100008,2001009,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"markerType":2,"bdata":0,"badCasePolicy":1,"markerPolicy":1,"markerPrio":2,"dirs":[{"dir":[0,0.5,0,0,0,45]},{"dir":[1,0.5,0,0,0,45]},{"dir":[0.5,0]}]},{"id":[100008,2001009,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"markerType":3,"bdata":0,"badCasePolicy":1,"markerPolicy":1,"markerPrio":1,"dirs":[{"dir":[0.5,0]}]},{"id":[100001,2001011,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"markerType":1,"badCasePolicy":1,"coverArea":0.6,"dirs":[{"dir":[0.5,1]}]},{"id":[100001,2001011,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"markerType":2,"badCasePolicy":1,"coverArea":0.1,"dirs":[{"dir":[0.5,0]}]},{"id":[100008,2001011,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"markerType":1,"badCasePolicy":1,"coverArea":0.6,"dirs":[{"dir":[0.5,1]}]},{"id":[100008,2001011,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"markerType":2,"badCasePolicy":1,"coverArea":0.1,"dirs":[{"dir":[0.5,0]}]},{"id":[100000,2000092,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"bdata":14,"badCasePolicy":1,"coverArea":0.1,"routeCoverArea":0.1,"dirs":[{"dir":[0,1]},{"dir":[1,1]}]},{"id":[100000,2000074,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":110010,"bdata":14,"coverArea":0.1,"routeCoverArea":0.1,"dirs":[{"dir":[0,1]},{"dir":[0,0]},{"dir":[1,1]},{"dir":[1,0]}]},{"id":[100000,2000074,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":110009,"bdata":14,"coverArea":0.1,"routeCoverArea":0.1,"dirs":[{"dir":[1,1]},{"dir":[1,0]},{"dir":[0,1]},{"dir":[0,0]}]},{"id":[100000,2000076,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":110000,"type":1},{"id":[100000,2000061,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"type":1},{"id":[100000,2000077,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":110000,"type":1},{"id":[100000,2000042,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"badCasePolicy":1,"dirs":[{"dir":[0,1,22,0,0,22]},{"dir":[1,1,0,0,22,22]},{"dir":[0,0,22,22,0,0]},{"dir":[1,0,0,22,22,0]}]},{"id":[100000,2000044,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"dirs":[{"dir":[1,1]},{"dir":[0,1]},{"dir":[1,0]},{"dir":[0,0]}]},{"id":[100000,2000035,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"bdata":15,"badCasePolicy":1,"coverArea":0.5,"routeCoverArea":0.1,"dirs":[{"dir":[0,1,22,0,0,22]},{"dir":[1,1,0,0,22,22]},{"dir":[0,0,22,22,0,0]},{"dir":[1,0,0,22,22,0]}]},{"id":[100000,2000002,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":110003,"type":1},{"id":[100000,2000070,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"type":1},{"id":[100000,2000003,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":110005,"type":1},{"id":[100000,2000073,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"type":1},{"id":[100000,2000053,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"type":1},{"id":[100000,2000057,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"badCasePolicy":1},{"id":[100000,2000083,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"markerType":1},{"id":[100000,2000083,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"markerType":3,"bdata":15,"badCasePolicy":1,"routeCoverArea":0.1,"dirs":[{"dir":[0,1]},{"dir":[1,1]}]},{"id":[100000,2000086,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"markerType":1},{"id":[100000,2000086,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"markerType":3,"bdata":15,"badCasePolicy":1,"routeCoverArea":0.1,"dirs":[{"dir":[0,1]},{"dir":[1,1]}]},{"id":[100000,2000084,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"bdata":15,"badCasePolicy":1},{"id":[100002,2000016,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]},{"i":[2,12]}],"bdata":7,"badCasePolicy":1},{"id":[100002,2000075,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":110001,"type":1},{"id":[100002,2000075,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":110008,"type":1},{"id":[100003,2000015,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]},{"i":[2,12]}],"bdata":6,"badCasePolicy":1},{"id":[100003,2000002,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]},{"i":[2,12]}],"itemcategory":110002,"type":1},{"id":[100003,2000002,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]},{"i":[2,12]}],"itemcategory":110003,"type":1},{"id":[100003,2000069,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]},{"i":[2,12]}],"type":1},{"id":[100003,2000070,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]},{"i":[2,12]}],"type":1},{"id":[100003,2000003,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]},{"i":[2,12]}],"itemcategory":110004,"type":1},{"id":[100003,2000003,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]},{"i":[2,12]}],"itemcategory":110005,"type":1},{"id":[100003,2000072,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]},{"i":[2,12]}],"type":1},{"id":[100003,2000073,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]},{"i":[2,12]}],"type":1},{"id":[100004,2000048,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"bdata":2,"coverArea":0.1,"dirs":[{"dir":[0,1,37,0,0,42]},{"dir":[0,0.1,37,22,0,0]},{"dir":[1,0.1,0,22,37,0]},{"dir":[1,1,0,0,37,42]}]},{"id":[100005,2000041,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"bdata":6,"badCasePolicy":1},{"id":[100005,2000045,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"bdata":6,"badCasePolicy":1},{"id":[100005,2000075,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":110001,"badCasePolicy":1,"coverArea":0.1},{"id":[100005,2000075,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":110008,"type":1},{"id":[100006,2000013,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"bdata":3,"badCasePolicy":1},{"id":[100007,2000075,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":110001,"badCasePolicy":1,"coverArea":0.1},{"id":[100007,2000075,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":110008,"type":1},{"id":[100007,2000076,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":110000,"type":1},{"id":[100007,2000077,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":110000,"type":1},{"id":[100007,2000061,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"type":1},{"id":[100007,2000006,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"type":1},{"id":[100008,2000007,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"markerType":1,"badCasePolicy":1,"coverArea":0.2,"markerPrio":2},{"id":[100008,2000007,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"markerType":3,"bdata":2,"badCasePolicy":1,"markerPolicy":1,"markerPrio":1,"dirs":[{"dir":[0,1,10,0,10,30]},{"dir":[1,1,10,0,10,30]},{"dir":[1,0,10,0,10,0]},{"dir":[0,0,10,0,10,0]}]},{"id":[100009,2000024,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"bdata":31,"badCasePolicy":1,"coverArea":0.2,"routeCoverArea":0.1,"altRouteCoverArea":0.5,"dirs":[{"dir":[0.5,0,10,24,10,10]},{"dir":[0,0.5,64,10,10,10]},{"dir":[1,0.5,10,10,64,10]}]},{"id":[100010,2000060,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"bdata":5,"dirs":[{"dir":[0,1]},{"dir":[1,1]}]},{"id":[100000,2000062,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"bdata":14,"badCasePolicy":1,"dirs":[{"dir":[0,1]},{"dir":[1,1]}]},{"id":[100000,2000066,1],"scene":[{"i":[2,3]},{"i":[5,3]}],"bdata":14,"badCasePolicy":1,"coverArea":0.2,"dirs":[{"dir":[0,1,24,0,0,24]},{"dir":[1,1,0,0,24,24]}]},{"id":[100011,2000076,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":110000,"type":1},{"id":[100011,2000075,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":110001,"badCasePolicy":1,"coverArea":0.1},{"id":[100011,2000075,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":110008,"type":1},{"id":[100011,2000061,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"type":1},{"id":[100012,2000043,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[5,3]}],"bdata":7,"pprio":[1,10,4,3],"dirs":[{"dir":[1,1]},{"dir":[0,1]},{"dir":[0,0]},{"dir":[1,0]}]},{"id":[100012,2000044,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[5,3]}],"markerType":3,"bdata":7,"dirs":[{"dir":[1,1]},{"dir":[0,1]},{"dir":[0,0]},{"dir":[1,0]}]},{"id":[100012,2000039,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[5,3]}],"badCasePolicy":1},{"id":[100013,2100001,1],"scene":[{"i":[2,3]},{"i":[8,3]}],"itemcategory":110001,"badCasePolicy":1,"coverArea":0.1},{"id":[100013,2100001,1],"scene":[{"i":[2,3]},{"i":[8,3]}],"itemcategory":110008,"type":1},{"id":[100013,2100002,1],"scene":[{"i":[2,3]},{"i":[8,3]}],"itemcategory":110000,"type":1},{"id":[100013,2100003,1],"scene":[{"i":[2,3]},{"i":[8,3]}],"itemcategory":110000,"type":1},{"id":[100013,2100005,1],"scene":[{"i":[2,3]},{"i":[8,3]}],"itemcategory":110016,"bdata":14,"dirs":[{"dir":[0,1,36,20,28,40]}]},{"id":[100013,2100005,1],"scene":[{"i":[2,3]},{"i":[8,3]}],"itemcategory":110015,"bdata":14,"dirs":[{"dir":[1,1,28,20,36,40]}]},{"id":[100013,2100006,1],"scene":[{"i":[2,3]},{"i":[8,3]}],"bdata":14,"coverArea":0.1,"dirs":[{"dir":[0,1]}]},{"id":[100013,2100013,1],"scene":[{"i":[2,3]},{"i":[8,3]}],"bdata":14,"badCasePolicy":1,"coverArea":0.1,"dirs":[{"dir":[0,1]}]},{"id":[100013,2100010,1],"scene":[{"i":[2,3]}],"dirs":[{"dir":[0,1,15,0,0,25]}]},{"id":[100013,2100008,1],"scene":[{"i":[2,3]},{"i":[8,3]}],"badCasePolicy":1,"dirs":[{"dir":[0,1]}]},{"id":[100013,2100007,1],"scene":[{"i":[2,3]},{"i":[8,3]}]},{"id":[100000,2000088,1],"scene":[{"i":[2,3]},{"i":[5,3]}],"bdata":6,"dirs":[{"dir":[1,1,0,0,22,22]},{"dir":[0,1,22,0,0,22]}]},{"id":[100000,2000093,1],"scene":[{"i":[2,3]},{"i":[5,3]}],"bdata":6,"dirs":[{"dir":[1,1,0,0,22,22]},{"dir":[0,1,22,0,0,22]}]},{"id":[100001,2000091,1],"scene":[{"i":[2,1]}],"markerType":3,"bdata":15,"coverArea":0.1,"routeCoverArea":0.1,"markerPrio":1,"dirs":[{"dir":[0.5,0]},{"dir":[0.5,1]},{"dir":[1,1]},{"dir":[0,1]}]},{"id":[100001,2000091,1],"scene":[{"i":[2,1]}],"markerPrio":2},{"id":[100001,2000091,1],"scene":[{"i":[2,1]}],"itemcategory":110011,"markerType":3,"markerPrio":1,"dirs":[{"dir":[0.5,0]}]},{"id":[100001,2000091,1],"scene":[{"i":[2,1]}],"itemcategory":110011,"markerPrio":2},{"id":[100001,20000000,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"bdata":31,"badCasePolicy":1},{"id":[100001,10000002,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"bdata":31,"coverArea":0.2,"routeCoverArea":0.1,"altRouteCoverArea":0.5,"dirs":[{"dir":[1,1]},{"dir":[1,0]},{"dir":[0,1]},{"dir":[0,0]},{"dir":[0.5,1,0,0,0,20]},{"dir":[0.5,0,0,20,0,0]}]},{"id":[100001,10000002,1],"scene":[{"i":[2,1]},{"i":[8,1]},{"i":[9,1]},{"i":[5,1]}],"itemcategory":101001,"bdata":6,"badCasePolicy":1,"dirs":[{"dir":[0.5,0.5]}]},{"id":[100013,2100011,1],"scene":[{"i":[2,3]},{"i":[8,3]}],"type":1},{"id":[100013,2100012,1],"scene":[{"i":[2,3]},{"i":[8,3]}],"type":1},{"id":[100019,2100017,1],"scene":[{"i":[2,3]},{"i":[8,3]}],"badCasePolicy":1},{"id":[100013,2100022,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]}],"bdata":7,"badCasePolicy":1,"coverArea":0.35,"dirs":[{"dir":[0,1,22,0,0,22]},{"dir":[1,1,0,0,22,22]},{"dir":[0,0,22,22,0,0]},{"dir":[1,0,0,22,22,0]}]},{"id":[100014,1000101,1],"scene":[{"i":[1,1]}],"bdata":5,"pprio":[4,30,20,10],"dirs":[{"dir":[1,1]},{"dir":[1,0]},{"dir":[0,1]},{"dir":[0,0]}]},{"id":[100014,1000109,1],"scene":[{"i":[1,1]},{"i":[1,2]},{"i":[4,1]},{"i":[4,2]}],"markerType":3,"bdata":5,"dirs":[{"dir":[1,1]},{"dir":[1,0]},{"dir":[0,1]},{"dir":[0,0]}]},{"id":[100014,1000109,1],"scene":[{"i":[1,1]},{"i":[1,2]},{"i":[4,1]},{"i":[4,2]}],"itemcategory":110017,"markerType":3,"bdata":5,"dirs":[{"dir":[0,0.5]},{"dir":[1,0.5]}]},{"id":[100014,1000102,1],"scene":[{"i":[1,1]},{"i":[1,2]},{"i":[4,1]},{"i":[4,2]}],"badCasePolicy":1,"dirs":[{"dir":[1,1]},{"dir":[1,0]},{"dir":[0,1]},{"dir":[0,0]}]},{"id":[100014,1000102,1],"scene":[{"i":[4,1]},{"i":[4,2]}],"itemcategory":110017,"bdata":5,"dirs":[{"dir":[0,0.5]},{"dir":[1,0.5]}]},{"id":[100014,1000110,1],"scene":[{"i":[4,3]}],"bdata":5,"dirs":[{"dir":[1,1]},{"dir":[1,0]},{"dir":[0,1]},{"dir":[0,0]}]},{"id":[100014,1000111,1],"scene":[{"i":[4,1]},{"i":[4,3]},{"i":[4,2]}],"bdata":5,"dirs":[{"dir":[1,1]},{"dir":[1,0]},{"dir":[0,1]},{"dir":[0,0]}]},{"id":[100001,1000200,1],"scene":[{"i":[4,1]}],"markerType":1,"badCasePolicy":1,"coverArea":0.2,"dirs":[{"dir":[0.5,1]}]},{"id":[100000,1000200,1],"scene":[{"i":[4,3]}],"markerType":1,"badCasePolicy":1,"coverArea":0.2,"dirs":[{"dir":[0.5,1]}]},{"id":[100014,1000112,1],"scene":[{"i":[4,1]},{"i":[4,3]},{"i":[4,2]}],"markerType":3,"bdata":5,"dirs":[{"dir":[1,1]},{"dir":[1,0]},{"dir":[0,1]},{"dir":[0,0]}]},{"id":[100014,1000020,1],"scene":[{"i":[4,3]}],"bdata":5,"coverArea":0.1,"pprio":[1,5,300,3],"dirs":[{"dir":[0.5,1,0,0,0,36]},{"dir":[0,1,18,0,0,18]},{"dir":[0,0,18,18,0,0]},{"dir":[0.5,0,0,36,0,0]},{"dir":[1,0,0,18,18,0]},{"dir":[1,1,0,0,18,18]}]},{"id":[100014,1000021,1],"scene":[{"i":[4,3]}],"type":1},{"id":[100014,1000103,1],"scene":[{"i":[1,1]},{"i":[4,1]},{"i":[1,3]},{"i":[4,3]}],"bdata":5,"dirs":[{"dir":[1,1]},{"dir":[1,0]},{"dir":[0,1]},{"dir":[0,0]}]},{"id":[100014,1000104,1],"scene":[{"i":[1,1]},{"i":[4,1]},{"i":[1,2]},{"i":[4,2]},{"i":[1,3]},{"i":[4,3]}],"bdata":5,"dirs":[{"dir":[0.5,0]},{"dir":[0,0.5]},{"dir":[1,0.5]}]},{"id":[100014,1000105,1],"scene":[{"i":[1,1]},{"i":[4,1]},{"i":[1,2]},{"i":[4,2]},{"i":[1,3]},{"i":[4,3]}],"badCasePolicy":1,"dirs":[{"dir":[0,1]}]},{"id":[100014,1000116,1],"scene":[{"i":[1,1]},{"i":[4,1]}],"bdata":7,"dirs":[{"dir":[1,1,0,10,40,10]},{"dir":[1,0,0,10,40,10]},{"dir":[0,1,40,10,0,10]},{"dir":[0,0,40,10,0,10]}]},{"id":[100014,2000071,1],"scene":[{"i":[1,1]},{"i":[4,1]},{"i":[1,2]},{"i":[4,2]},{"i":[1,3]},{"i":[4,3]}],"type":1,"dirs":[{"dir":[0.5,0.5,8,16,8,0]}]},{"id":[100014,1000106,1],"scene":[{"i":[1,3]}],"badCasePolicy":1},{"id":[100015,1000005,1],"scene":[{"i":[3,3]}],"bdata":7,"dirs":[{"dir":[0,1,35,0,0,35]},{"dir":[1,1,0,0,35,35]},{"dir":[0,0,35,35,0,0]},{"dir":[1,0,0,35,35,0]}]},{"id":[100015,1000007,1],"scene":[{"i":[3,3]}],"bdata":7,"dirs":[{"dir":[0,1,35,0,0,35]},{"dir":[1,1,0,0,35,35]},{"dir":[0,0,35,35,0,0]},{"dir":[1,0,0,35,35,0]}]},{"id":[100015,1000008,1],"scene":[{"i":[3,3]}],"bdata":7,"dirs":[{"dir":[0,1,35,0,0,35]},{"dir":[1,1,0,0,35,35]},{"dir":[0,0,35,35,0,0]},{"dir":[1,0,0,35,35,0]}]},{"id":[100015,1000009,1],"scene":[{"i":[3,3]}],"bdata":7,"dirs":[{"dir":[0,1,35,0,0,35]},{"dir":[1,1,0,0,35,35]},{"dir":[0,0,35,35,0,0]},{"dir":[1,0,0,35,35,0]}]},{"id":[100015,1000020,1],"scene":[{"i":[3,3]}],"bdata":5,"coverArea":0.1,"dirs":[{"dir":[0.5,1,0,0,0,36]},{"dir":[0,1,18,0,0,18]},{"dir":[0,0,18,18,0,0]},{"dir":[0.5,0,0,36,0,0]},{"dir":[1,0,0,18,18,0]},{"dir":[1,1,0,0,18,18]}]},{"id":[100015,1000010,1],"scene":[{"i":[3,3]}],"bdata":7,"dirs":[{"dir":[0,0.5,25,0,0,0]},{"dir":[0.5,0,0,25,0,0]},{"dir":[1,0.5,0,0,25,0]},{"dir":[0.5,1,0,0,0,25]}]},{"id":[100015,1000002,1],"scene":[{"i":[3,3]}],"bdata":7,"dirs":[{"dir":[0,0]},{"dir":[1,0]}]},{"id":[100015,1000003,1],"scene":[{"i":[3,3]}],"bdata":7,"coverArea":0.1,"dirs":[{"dir":[0.5,1,0,0,0,35]},{"dir":[0,0.5,35,0,0,0]},{"dir":[1,0.5,0,0,35,0]},{"dir":[0.5,0,0,35,0,0]}]},{"id":[100015,1000004,1],"scene":[{"i":[3,3]}],"bdata":7,"coverArea":0.1,"dirs":[{"dir":[0.5,1,0,0,0,35]},{"dir":[0,0.5,35,0,0,0]},{"dir":[1,0.5,0,0,35,0]},{"dir":[0.5,0,0,35,0,0]}]},{"id":[100015,1000026,1],"scene":[{"i":[3,3]}],"bdata":7,"dirs":[{"dir":[0,0]},{"dir":[1,0]}]},{"id":[100015,1000027,1],"scene":[{"i":[3,3]}],"bdata":7,"dirs":[{"dir":[0,0]},{"dir":[1,0]}]},{"id":[100015,1000023,1],"scene":[{"i":[3,3]}],"bdata":5,"dirs":[{"dir":[0.5,1]},{"dir":[0.5,0]},{"dir":[1,0]},{"dir":[0,1]}]},{"id":[100015,1000024,1],"scene":[{"i":[3,3]}],"bdata":5,"dirs":[{"dir":[0.5,1]},{"dir":[0.5,0]},{"dir":[1,0]},{"dir":[0,1]}]},{"id":[100015,100052,1],"scene":[{"i":[3,3]}],"markerType":1},{"id":[100015,1000018,1],"scene":[{"i":[3,3]}]},{"id":[100015,1000019,1],"scene":[{"i":[3,3]}]},{"id":[100014,1000108,1],"scene":[{"i":[4,1]},{"i":[4,3]}],"bdata":7,"pprio":[4,5,4,3],"dirs":[{"dir":[1,1]},{"dir":[1,0]},{"dir":[0,1]},{"dir":[0,0]}]},{"id":[100016,1000107,1],"scene":[{"i":[1,1]}],"badCasePolicy":1,"coverArea":0.7},{"id":[100017,2002000,1],"scene":[{"i":[2,9]}],"bdata":6,"coverArea":0.2,"dirs":[{"dir":[1,1]},{"dir":[1,0]},{"dir":[0,1]},{"dir":[0,0]}]},{"id":[100017,2002001,1],"scene":[{"i":[2,9]}],"bdata":6},{"id":[100017,2002002,1],"scene":[{"i":[2,9]}],"bdata":6,"dirs":[{"dir":[0,1]}]},{"id":[100017,2002003,1],"scene":[{"i":[2,9]}],"bdata":6,"dirs":[{"dir":[0.5,1]}]},{"id":[100017,2002004,1],"scene":[{"i":[2,9]}],"type":1},{"id":[100018,2002100,1],"scene":[{"i":[8,9]}],"bdata":6,"coverArea":0.2,"dirs":[{"dir":[0.0212,0.875]}]},{"id":[100018,2002101,1],"scene":[{"i":[8,9]}],"bdata":6},{"id":[100018,2002102,1],"scene":[{"i":[8,9]}],"bdata":6,"dirs":[{"dir":[0.5,1]}]},{"id":[100018,2002003,1],"scene":[{"i":[8,9]}],"bdata":6,"dirs":[{"dir":[0.5,1]}]},{"id":[100018,2002104,1],"scene":[{"i":[8,9]}],"type":1},{"id":[100000,20000102,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":1100019,"badCasePolicy":1,"coverArea":0.1,"dirs":[{"dir":[0,1,40,0,0,40]},{"dir":[1,1,0,0,40,40]}]},{"id":[100000,20000102,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":1100020,"coverArea":0.4,"dirs":[{"dir":[0,1,40,0,0,40]},{"dir":[1,1,0,0,40,40]}]},{"id":[100000,20000105,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":1100019,"badCasePolicy":1,"coverArea":0.1,"dirs":[{"dir":[0,1,40,0,0,40]},{"dir":[1,1,0,0,40,40]}]},{"id":[100000,20000105,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":1100020,"coverArea":0.4,"dirs":[{"dir":[0,1,40,0,0,40]},{"dir":[1,1,0,0,40,40]}]},{"id":[100007,20000102,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":1100019,"badCasePolicy":1,"coverArea":0.1,"dirs":[{"dir":[0,1,40,0,0,40]},{"dir":[1,1,0,0,40,40]}]},{"id":[100007,20000102,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":1100020,"coverArea":0.4,"dirs":[{"dir":[0,1,40,0,0,40]},{"dir":[1,1,0,0,40,40]}]},{"id":[100007,20000105,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":1100019,"badCasePolicy":1,"coverArea":0.1,"dirs":[{"dir":[0,1,40,0,0,40]},{"dir":[1,1,0,0,40,40]}]},{"id":[100007,20000105,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":1100020,"coverArea":0.4,"dirs":[{"dir":[0,1,40,0,0,40]},{"dir":[1,1,0,0,40,40]}]},{"id":[100011,20000102,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":1100019,"badCasePolicy":1,"coverArea":0.1,"dirs":[{"dir":[0,1,40,0,0,40]},{"dir":[1,1,0,0,40,40]}]},{"id":[100011,20000102,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":1100020,"coverArea":0.4,"dirs":[{"dir":[0,1,40,0,0,40]},{"dir":[1,1,0,0,40,40]}]},{"id":[100011,20000105,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":1100019,"badCasePolicy":1,"coverArea":0.1,"dirs":[{"dir":[0,1,40,0,0,40]},{"dir":[1,1,0,0,40,40]}]},{"id":[100011,20000105,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":1100020,"coverArea":0.4,"dirs":[{"dir":[0,1,40,0,0,40]},{"dir":[1,1,0,0,40,40]}]},{"id":[100000,20000102,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":1100019,"badCasePolicy":1,"coverArea":0.1,"dirs":[{"dir":[0,1,40,0,0,40]},{"dir":[1,1,0,0,40,40]}]},{"id":[100000,20000102,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":1100020,"coverArea":0.4,"dirs":[{"dir":[0,1,40,0,0,40]},{"dir":[1,1,0,0,40,40]}]},{"id":[100000,20000105,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":1100019,"badCasePolicy":1,"coverArea":0.1,"dirs":[{"dir":[0,1,40,0,0,40]},{"dir":[1,1,0,0,40,40]}]},{"id":[100000,20000105,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":1100020,"coverArea":0.4,"dirs":[{"dir":[0,1,40,0,0,40]},{"dir":[1,1,0,0,40,40]}]},{"id":[100007,20000102,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":1100019,"badCasePolicy":1,"coverArea":0.1,"dirs":[{"dir":[0,1,40,0,0,40]},{"dir":[1,1,0,0,40,40]}]},{"id":[100007,20000102,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":1100020,"coverArea":0.4,"dirs":[{"dir":[0,1,40,0,0,40]},{"dir":[1,1,0,0,40,40]}]},{"id":[100007,20000105,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":1100019,"badCasePolicy":1,"coverArea":0.1,"dirs":[{"dir":[0,1,40,0,0,40]},{"dir":[1,1,0,0,40,40]}]},{"id":[100007,20000105,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":1100020,"coverArea":0.4,"dirs":[{"dir":[0,1,40,0,0,40]},{"dir":[1,1,0,0,40,40]}]},{"id":[100011,20000102,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":1100019,"badCasePolicy":1,"coverArea":0.1,"dirs":[{"dir":[0,1,40,0,0,40]},{"dir":[1,1,0,0,40,40]}]},{"id":[100011,20000102,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":1100020,"coverArea":0.4,"dirs":[{"dir":[0,1,40,0,0,40]},{"dir":[1,1,0,0,40,40]}]},{"id":[100011,20000105,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":1100019,"badCasePolicy":1,"coverArea":0.1,"dirs":[{"dir":[0,1,40,0,0,40]},{"dir":[1,1,0,0,40,40]}]},{"id":[100011,20000105,1],"scene":[{"i":[2,3]},{"i":[8,3]},{"i":[2,21]},{"i":[2,8]},{"i":[5,3]},{"i":[9,3]}],"itemcategory":1100020,"coverArea":0.4,"dirs":[{"dir":[0,1,40,0,0,40]},{"dir":[1,1,0,0,40,40]}]},{"id":[100014,1000115,1],"scene":[{"i":[4,1]}],"dirs":[{"dir":[0.5,1]}]},{"id":[100014,10020021,1],"scene":[{"i":[17,27]},{"i":[17,27]}],"bdata":7,"dirs":[{"dir":[1,1]},{"dir":[1,0]},{"dir":[0,1]},{"dir":[0,0]}]},{"id":[100014,10020015,1],"scene":[{"i":[1,1]},{"i":[4,1]}],"bdata":7,"dirs":[{"dir":[1,1,0,10,40,10]},{"dir":[1,0,0,10,40,0]},{"dir":[0,1,40,10,0,10]},{"dir":[0,0,40,10,0,10]}]},{"id":[100015,1000011,1],"scene":[{"i":[3,3]}],"itemcategory":110018,"markerType":3,"dirs":[{"dir":[0,0.5]},{"dir":[1,0.5]}]},{"id":[100015,1000014,1],"scene":[{"i":[3,3]}]}]} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/dynamicscale/scaleconfig.json b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/dynamicscale/scaleconfig.json deleted file mode 100644 index 89a505c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/horusAssets/dynamicscale/scaleconfig.json +++ /dev/null @@ -1 +0,0 @@ -{"baseConfig":{"roadClassGroup":{"0":1,"1":2,"2":2,"3":3,"4":3,"5":6,"6":4,"7":5,"8":6,"9":6,"10":6},"fragmentDist":500,"scaleInterval":{"minValue":12.500000,"maxValue":19.000000},"segmentCurvatureValue":15.000000,"linkCurvatureValue":{"1":10.000000,"2":15.000000,"3":15.000000,"4":15.000000,"5":15.000000,"6":15.000000},"minLengths":[{"intInterval":{"minValue":0,"maxValue":100},"intValue":150},{"intInterval":{"minValue":100,"maxValue":200},"intValue":250},{"intInterval":{"minValue":200,"maxValue":300},"intValue":300},{"intInterval":{"minValue":300,"maxValue":500},"intValue":500}],"paddingScaleConfig":{"topScale":0.370000,"largeTopScale":0.350000,"topScaleCross":0.580000,"topScaleLandscape":0.200000,"bottom":193,"bottomross":133,"bottomLandscape":100}},"portraitConfig":{"configService":{"roadClassConfig":{"scaleStrategy":[{"roadGroup":1,"curvatureSpeeds":[{"curvature":{"minValue":0.000000,"maxValue":10.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":30},"scale":14.670000},{"speed":{"minValue":30,"maxValue":50},"scale":14.500000},{"speed":{"minValue":50,"maxValue":70},"scale":14.340000},{"speed":{"minValue":70,"maxValue":90},"scale":14.090000},{"speed":{"minValue":90,"maxValue":110},"scale":13.900000},{"speed":{"minValue":110,"maxValue":120},"scale":13.700000},{"speed":{"minValue":120,"maxValue":600},"scale":13.400000}]},{"curvature":{"minValue":10.000000,"maxValue":65535.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":30},"scale":16.799999},{"speed":{"minValue":30,"maxValue":50},"scale":16.400000},{"speed":{"minValue":50,"maxValue":70},"scale":16.000000},{"speed":{"minValue":70,"maxValue":90},"scale":15.800000},{"speed":{"minValue":90,"maxValue":110},"scale":15.600000},{"speed":{"minValue":110,"maxValue":120},"scale":15.400000},{"speed":{"minValue":120,"maxValue":1000000},"scale":15.250000}]}]},{"roadGroup":2,"curvatureSpeeds":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":25},"scale":16.500000},{"speed":{"minValue":25,"maxValue":40},"scale":16.000000},{"speed":{"minValue":40,"maxValue":60},"scale":15.500000},{"speed":{"minValue":60,"maxValue":75},"scale":15.000000},{"speed":{"minValue":75,"maxValue":90},"scale":14.750000},{"speed":{"minValue":90,"maxValue":1000000},"scale":14.500000}]},{"curvature":{"minValue":15.000000,"maxValue":25.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":40},"scale":17.709999},{"speed":{"minValue":40,"maxValue":55},"scale":17.400000},{"speed":{"minValue":55,"maxValue":70},"scale":17.100000},{"speed":{"minValue":70,"maxValue":1000000},"scale":16.900000}]},{"curvature":{"minValue":25.000000,"maxValue":35.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":40},"scale":18.000000},{"speed":{"minValue":40,"maxValue":55},"scale":17.799999},{"speed":{"minValue":55,"maxValue":65},"scale":17.600000},{"speed":{"minValue":65,"maxValue":1000000},"scale":17.400000}]},{"curvature":{"minValue":35.000000,"maxValue":65535.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":35},"scale":18.670000},{"speed":{"minValue":35,"maxValue":50},"scale":18.340000},{"speed":{"minValue":50,"maxValue":65},"scale":18.000000},{"speed":{"minValue":65,"maxValue":1000000},"scale":17.799999}]}]},{"roadGroup":3,"curvatureSpeeds":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":25},"scale":16.500000},{"speed":{"minValue":25,"maxValue":40},"scale":16.000000},{"speed":{"minValue":40,"maxValue":55},"scale":15.500000},{"speed":{"minValue":55,"maxValue":70},"scale":15.000000},{"speed":{"minValue":70,"maxValue":1000000},"scale":14.840000}]},{"curvature":{"minValue":15.000000,"maxValue":25.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":40},"scale":17.799999},{"speed":{"minValue":40,"maxValue":60},"scale":17.500000},{"speed":{"minValue":60,"maxValue":1000000},"scale":17.209999}]},{"curvature":{"minValue":25.000000,"maxValue":35.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":35},"scale":18.170000},{"speed":{"minValue":35,"maxValue":55},"scale":17.900000},{"speed":{"minValue":55,"maxValue":1000000},"scale":17.709999}]},{"curvature":{"minValue":35.000000,"maxValue":65535.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":30},"scale":18.670000},{"speed":{"minValue":30,"maxValue":50},"scale":18.340000},{"speed":{"minValue":50,"maxValue":1000000},"scale":18.000000}]}]},{"roadGroup":4,"curvatureSpeeds":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":25},"scale":15.500000},{"speed":{"minValue":25,"maxValue":45},"scale":15.000000},{"speed":{"minValue":45,"maxValue":60},"scale":14.750000},{"speed":{"minValue":60,"maxValue":75},"scale":14.500000},{"speed":{"minValue":75,"maxValue":1000000},"scale":14.250000}]},{"curvature":{"minValue":15.000000,"maxValue":65535.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":25},"scale":17.600000},{"speed":{"minValue":25,"maxValue":45},"scale":17.000000},{"speed":{"minValue":45,"maxValue":60},"scale":16.709999},{"speed":{"minValue":60,"maxValue":75},"scale":16.400000},{"speed":{"minValue":75,"maxValue":1000000},"scale":16.000000}]}]},{"roadGroup":5,"curvatureSpeeds":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":25},"scale":15.750000},{"speed":{"minValue":25,"maxValue":40},"scale":15.250000},{"speed":{"minValue":40,"maxValue":60},"scale":14.920000},{"speed":{"minValue":60,"maxValue":75},"scale":14.750000},{"speed":{"minValue":75,"maxValue":1000000},"scale":14.590000}]},{"curvature":{"minValue":15.000000,"maxValue":65535.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":25},"scale":17.799999},{"speed":{"minValue":25,"maxValue":40},"scale":17.400000},{"speed":{"minValue":40,"maxValue":60},"scale":16.900000},{"speed":{"minValue":60,"maxValue":75},"scale":16.600000},{"speed":{"minValue":75,"maxValue":1000000},"scale":16.209999}]}]},{"roadGroup":6,"curvatureSpeeds":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":25},"scale":16.500000},{"speed":{"minValue":25,"maxValue":40},"scale":16.000000},{"speed":{"minValue":40,"maxValue":55},"scale":15.750000},{"speed":{"minValue":55,"maxValue":70},"scale":15.500000},{"speed":{"minValue":70,"maxValue":1000000},"scale":15.000000}]},{"curvature":{"minValue":15.000000,"maxValue":25.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":40},"scale":17.799999},{"speed":{"minValue":40,"maxValue":60},"scale":17.500000},{"speed":{"minValue":60,"maxValue":1000000},"scale":17.209999}]},{"curvature":{"minValue":25.000000,"maxValue":35.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":35},"scale":18.170000},{"speed":{"minValue":35,"maxValue":55},"scale":17.900000},{"speed":{"minValue":55,"maxValue":1000000},"scale":17.709999}]},{"curvature":{"minValue":35.000000,"maxValue":65535.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":30},"scale":18.670000},{"speed":{"minValue":30,"maxValue":50},"scale":18.340000},{"speed":{"minValue":50,"maxValue":1000000},"scale":18.000000}]}]}],"minCurvatureLen":500,"minScaleChangeInterval":10,"minGuaranteeLength":200},"actionConfig":{"continueStrategy":[{"roadGroup":1,"scale":{"minValue":12.800000,"maxValue":15.750000}},{"roadGroup":2,"scale":{"minValue":13.400000,"maxValue":16.799999}},{"roadGroup":3,"scale":{"minValue":13.400000,"maxValue":17.000000}},{"roadGroup":4,"scale":{"minValue":13.000000,"maxValue":16.500000}},{"roadGroup":5,"scale":{"minValue":13.400000,"maxValue":16.799999}},{"roadGroup":6,"scale":{"minValue":13.400000,"maxValue":17.209999}}],"continueBendStrategy":[{"roadGroup":1,"scale":{"minValue":13.000000,"maxValue":17.000000}},{"roadGroup":2,"scale":{"minValue":13.400000,"maxValue":17.500000}},{"roadGroup":3,"scale":{"minValue":13.400000,"maxValue":18.000000}},{"roadGroup":4,"scale":{"minValue":13.000000,"maxValue":17.400000}},{"roadGroup":5,"scale":{"minValue":13.400000,"maxValue":17.799999}},{"roadGroup":6,"scale":{"minValue":13.400000,"maxValue":18.000000}}],"normalStrategy":[{"roadGroup":1,"scale":{"minValue":12.800000,"maxValue":17.000000}},{"roadGroup":2,"scale":{"minValue":13.400000,"maxValue":17.500000}},{"roadGroup":3,"scale":{"minValue":13.400000,"maxValue":17.799999}},{"roadGroup":4,"scale":{"minValue":13.000000,"maxValue":17.500000}},{"roadGroup":5,"scale":{"minValue":13.400000,"maxValue":17.600000}},{"roadGroup":6,"scale":{"minValue":13.400000,"maxValue":17.799999}}],"crossStrategy":[{"roadGroup":1,"scale":{"minValue":15.000000,"maxValue":17.799999}},{"roadGroup":2,"scale":{"minValue":16.000000,"maxValue":18.000000}},{"roadGroup":3,"scale":{"minValue":16.000000,"maxValue":18.000000}},{"roadGroup":4,"scale":{"minValue":15.000000,"maxValue":17.799999}},{"roadGroup":5,"scale":{"minValue":15.500000,"maxValue":18.000000}},{"roadGroup":6,"scale":{"minValue":16.000000,"maxValue":18.000000}}],"noCrossStrategy":[{"roadGroup":1,"scale":{"minValue":15.500000,"maxValue":18.000000}},{"roadGroup":2,"scale":{"minValue":16.000000,"maxValue":18.340000}},{"roadGroup":3,"scale":{"minValue":16.000000,"maxValue":18.340000}},{"roadGroup":4,"scale":{"minValue":16.000000,"maxValue":18.000000}},{"roadGroup":5,"scale":{"minValue":16.000000,"maxValue":18.340000}},{"roadGroup":6,"scale":{"minValue":16.500000,"maxValue":18.340000}}],"preStartOffset":[{"roadGroup":1,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":10.000000},"speedIntervalCondition":[{"intInterval":{"minValue":60,"maxValue":75},"intValue":3500},{"intInterval":{"minValue":75,"maxValue":95},"intValue":4000},{"intInterval":{"minValue":95,"maxValue":110},"intValue":4750},{"intInterval":{"minValue":110,"maxValue":120},"intValue":5500},{"intInterval":{"minValue":120,"maxValue":1000000},"intValue":6000}]}]},{"roadGroup":2,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":35,"maxValue":50},"intValue":1900},{"intInterval":{"minValue":50,"maxValue":60},"intValue":2100},{"intInterval":{"minValue":60,"maxValue":75},"intValue":2400},{"intInterval":{"minValue":75,"maxValue":90},"intValue":2700},{"intInterval":{"minValue":90,"maxValue":110},"intValue":3000},{"intInterval":{"minValue":110,"maxValue":1000000},"intValue":3500}]}]},{"roadGroup":3,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":40,"maxValue":50},"intValue":1700},{"intInterval":{"minValue":50,"maxValue":60},"intValue":2000},{"intInterval":{"minValue":60,"maxValue":75},"intValue":2300},{"intInterval":{"minValue":75,"maxValue":90},"intValue":2500},{"intInterval":{"minValue":90,"maxValue":1000000},"intValue":3000}]}]},{"roadGroup":4,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":40,"maxValue":55},"intValue":2700},{"intInterval":{"minValue":55,"maxValue":70},"intValue":3000},{"intInterval":{"minValue":70,"maxValue":80},"intValue":3500},{"intInterval":{"minValue":80,"maxValue":1000000},"intValue":4000}]}]},{"roadGroup":5,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":40,"maxValue":50},"intValue":2000},{"intInterval":{"minValue":50,"maxValue":60},"intValue":2300},{"intInterval":{"minValue":60,"maxValue":70},"intValue":2700},{"intInterval":{"minValue":70,"maxValue":80},"intValue":3000},{"intInterval":{"minValue":80,"maxValue":1000000},"intValue":3500}]}]},{"roadGroup":6,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":40,"maxValue":50},"intValue":1700},{"intInterval":{"minValue":50,"maxValue":60},"intValue":2000},{"intInterval":{"minValue":60,"maxValue":70},"intValue":2300},{"intInterval":{"minValue":70,"maxValue":80},"intValue":2500},{"intInterval":{"minValue":80,"maxValue":1000000},"intValue":2800}]}]}],"startOffset":[{"roadGroup":1,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":10.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":60},"intValue":3000}]},{"curvature":{"minValue":10.000000,"maxValue":65535.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":1500}]}]},{"roadGroup":2,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":35},"intValue":1700}]},{"curvature":{"minValue":15.000000,"maxValue":25.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":400}]},{"curvature":{"minValue":25.000000,"maxValue":35.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":200}]},{"curvature":{"minValue":35.000000,"maxValue":65535.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":150}]}]},{"roadGroup":3,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":40},"intValue":1400}]},{"curvature":{"minValue":15.000000,"maxValue":25.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":350}]},{"curvature":{"minValue":25.000000,"maxValue":35.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":200}]},{"curvature":{"minValue":35.000000,"maxValue":65535.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":150}]}]},{"roadGroup":4,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":40},"intValue":2300}]},{"curvature":{"minValue":15.000000,"maxValue":65535.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":1000}]}]},{"roadGroup":5,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":40},"intValue":1800}]},{"curvature":{"minValue":15.000000,"maxValue":65535.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":1000}]}]},{"roadGroup":6,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":35},"intValue":1400}]},{"curvature":{"minValue":15.000000,"maxValue":25.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":350}]},{"curvature":{"minValue":25.000000,"maxValue":35.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":150}]},{"curvature":{"minValue":35.000000,"maxValue":65535.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":100}]}]}],"rcStrategy":[{"roadGroup":1,"roadDist":450},{"roadGroup":2,"roadDist":280},{"roadGroup":3,"roadDist":200},{"roadGroup":4,"roadDist":280},{"roadGroup":5,"roadDist":200},{"roadGroup":6,"roadDist":180}],"actionUTurnOffset":[{"roadGroup":1,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":10.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":3000}]},{"curvature":{"minValue":10.000000,"maxValue":65535.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":1000}]}]},{"roadGroup":2,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":1800}]},{"curvature":{"minValue":15.000000,"maxValue":25.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":500}]},{"curvature":{"minValue":25.000000,"maxValue":35.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":400}]},{"curvature":{"minValue":35.000000,"maxValue":65535.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":300}]}]},{"roadGroup":3,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":1500}]},{"curvature":{"minValue":15.000000,"maxValue":25.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":500}]},{"curvature":{"minValue":25.000000,"maxValue":35.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":350}]},{"curvature":{"minValue":35.000000,"maxValue":65535.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":200}]}]},{"roadGroup":4,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":2000}]},{"curvature":{"minValue":15.000000,"maxValue":65535.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":800}]}]},{"roadGroup":5,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":1750}]},{"curvature":{"minValue":15.000000,"maxValue":65535.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":600}]}]},{"roadGroup":6,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":1300}]},{"curvature":{"minValue":15.000000,"maxValue":25.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":500}]},{"curvature":{"minValue":25.000000,"maxValue":35.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":400}]},{"curvature":{"minValue":35.000000,"maxValue":65535.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":300}]}]}],"actionTurnLeftGroupDist":20,"actionGroupDist":200,"actionAdditionalDist":10,"actionUTurnMinScale":14.000000,"continueAdditionalDist":25,"continueActionValidDist":[{"roadGroup":1,"roadDist":800},{"roadGroup":2,"roadDist":300},{"roadGroup":3,"roadDist":300},{"roadGroup":4,"roadDist":500},{"roadGroup":5,"roadDist":400},{"roadGroup":6,"roadDist":200}]},"cameraConfig":{"singleCameraStrategy":[{"roadGroup":1,"intervalStrategy":[{"curvatureInterval":{"minValue":0,"maxValue":10},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":30},"scale":16.000000},{"speedInterval":{"minValue":30,"maxValue":50},"scale":15.750000},{"speedInterval":{"minValue":50,"maxValue":70},"scale":15.500000},{"speedInterval":{"minValue":70,"maxValue":90},"scale":15.200000},{"speedInterval":{"minValue":90,"maxValue":110},"scale":14.970000},{"speedInterval":{"minValue":110,"maxValue":120},"scale":14.870000},{"speedInterval":{"minValue":120,"maxValue":1000000},"scale":14.750000}]},{"curvatureInterval":{"minValue":10,"maxValue":65535},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":30},"scale":16.500000},{"speedInterval":{"minValue":30,"maxValue":50},"scale":16.000000},{"speedInterval":{"minValue":50,"maxValue":70},"scale":15.750000},{"speedInterval":{"minValue":70,"maxValue":90},"scale":15.500000},{"speedInterval":{"minValue":90,"maxValue":110},"scale":15.250000},{"speedInterval":{"minValue":110,"maxValue":120},"scale":15.000000},{"speedInterval":{"minValue":120,"maxValue":1000000},"scale":14.920000}]}]},{"roadGroup":2,"intervalStrategy":[{"curvatureInterval":{"minValue":0,"maxValue":15},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scale":17.000000},{"speedInterval":{"minValue":25,"maxValue":40},"scale":16.500000},{"speedInterval":{"minValue":40,"maxValue":60},"scale":16.000000},{"speedInterval":{"minValue":60,"maxValue":75},"scale":15.600000},{"speedInterval":{"minValue":75,"maxValue":90},"scale":15.300000},{"speedInterval":{"minValue":90,"maxValue":1000000},"scale":15.000000}]},{"curvatureInterval":{"minValue":15,"maxValue":25},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":40},"scale":17.799999},{"speedInterval":{"minValue":40,"maxValue":55},"scale":17.600000},{"speedInterval":{"minValue":55,"maxValue":70},"scale":17.400000},{"speedInterval":{"minValue":70,"maxValue":1000000},"scale":17.209999}]},{"curvatureInterval":{"minValue":25,"maxValue":35},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":40},"scale":18.340000},{"speedInterval":{"minValue":40,"maxValue":55},"scale":18.000000},{"speedInterval":{"minValue":55,"maxValue":65},"scale":17.799999},{"speedInterval":{"minValue":65,"maxValue":1000000},"scale":17.600000}]},{"curvatureInterval":{"minValue":35,"maxValue":65535},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":35},"scale":18.670000},{"speedInterval":{"minValue":35,"maxValue":50},"scale":18.340000},{"speedInterval":{"minValue":50,"maxValue":65},"scale":18.000000},{"speedInterval":{"minValue":65,"maxValue":1000000},"scale":17.799999}]}]},{"roadGroup":3,"intervalStrategy":[{"curvatureInterval":{"minValue":0,"maxValue":15},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scale":17.000000},{"speedInterval":{"minValue":25,"maxValue":40},"scale":16.500000},{"speedInterval":{"minValue":40,"maxValue":55},"scale":16.000000},{"speedInterval":{"minValue":55,"maxValue":70},"scale":15.750000},{"speedInterval":{"minValue":70,"maxValue":1000000},"scale":15.500000}]},{"curvatureInterval":{"minValue":15,"maxValue":25},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":40},"scale":18.000000},{"speedInterval":{"minValue":40,"maxValue":60},"scale":17.709999},{"speedInterval":{"minValue":60,"maxValue":1000000},"scale":17.500000}]},{"curvatureInterval":{"minValue":25,"maxValue":35},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":35},"scale":18.340000},{"speedInterval":{"minValue":35,"maxValue":55},"scale":18.000000},{"speedInterval":{"minValue":55,"maxValue":1000000},"scale":17.799999}]},{"curvatureInterval":{"minValue":35,"maxValue":65535},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":30},"scale":18.670000},{"speedInterval":{"minValue":30,"maxValue":50},"scale":18.340000},{"speedInterval":{"minValue":50,"maxValue":1000000},"scale":18.000000}]}]},{"roadGroup":4,"intervalStrategy":[{"curvatureInterval":{"minValue":0,"maxValue":15},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scale":16.500000},{"speedInterval":{"minValue":25,"maxValue":45},"scale":16.000000},{"speedInterval":{"minValue":45,"maxValue":60},"scale":15.700000},{"speedInterval":{"minValue":60,"maxValue":75},"scale":15.400000},{"speedInterval":{"minValue":75,"maxValue":1000000},"scale":15.000000}]},{"curvatureInterval":{"minValue":15,"maxValue":65535},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scale":18.000000},{"speedInterval":{"minValue":25,"maxValue":45},"scale":17.400000},{"speedInterval":{"minValue":45,"maxValue":60},"scale":16.799999},{"speedInterval":{"minValue":60,"maxValue":75},"scale":16.400000},{"speedInterval":{"minValue":75,"maxValue":1000000},"scale":16.000000}]}]},{"roadGroup":5,"intervalStrategy":[{"curvatureInterval":{"minValue":0,"maxValue":15},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scale":16.500000},{"speedInterval":{"minValue":25,"maxValue":40},"scale":16.000000},{"speedInterval":{"minValue":40,"maxValue":60},"scale":15.750000},{"speedInterval":{"minValue":60,"maxValue":75},"scale":15.500000},{"speedInterval":{"minValue":75,"maxValue":1000000},"scale":15.200000}]},{"curvatureInterval":{"minValue":15,"maxValue":65535},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scale":18.000000},{"speedInterval":{"minValue":25,"maxValue":40},"scale":17.500000},{"speedInterval":{"minValue":40,"maxValue":60},"scale":17.000000},{"speedInterval":{"minValue":60,"maxValue":75},"scale":16.709999},{"speedInterval":{"minValue":75,"maxValue":1000000},"scale":16.400000}]}]},{"roadGroup":6,"intervalStrategy":[{"curvatureInterval":{"minValue":0,"maxValue":15},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scale":17.000000},{"speedInterval":{"minValue":25,"maxValue":40},"scale":16.600000},{"speedInterval":{"minValue":40,"maxValue":60},"scale":16.209999},{"speedInterval":{"minValue":60,"maxValue":80},"scale":15.900000},{"speedInterval":{"minValue":80,"maxValue":1000000},"scale":15.700000}]},{"curvatureInterval":{"minValue":15,"maxValue":25},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":40},"scale":18.000000},{"speedInterval":{"minValue":40,"maxValue":60},"scale":17.799999},{"speedInterval":{"minValue":60,"maxValue":1000000},"scale":17.600000}]},{"curvatureInterval":{"minValue":25,"maxValue":35},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":35},"scale":18.340000},{"speedInterval":{"minValue":35,"maxValue":55},"scale":18.000000},{"speedInterval":{"minValue":55,"maxValue":1000000},"scale":17.799999}]},{"curvatureInterval":{"minValue":35,"maxValue":65535},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":30},"scale":18.670000},{"speedInterval":{"minValue":30,"maxValue":50},"scale":18.340000},{"speedInterval":{"minValue":50,"maxValue":1000000},"scale":18.000000}]}]}],"multiCameraStrategy":[{"roadGroup":1,"intervalStrategy":[{"curvatureInterval":{"minValue":0,"maxValue":10},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":30},"scaleInterval":{"minValue":14.340000,"maxValue":16.500000}},{"speedInterval":{"minValue":30,"maxValue":50},"scaleInterval":{"minValue":14.000000,"maxValue":16.000000}},{"speedInterval":{"minValue":50,"maxValue":70},"scaleInterval":{"minValue":13.800000,"maxValue":15.750000}},{"speedInterval":{"minValue":70,"maxValue":90},"scaleInterval":{"minValue":13.600000,"maxValue":15.500000}},{"speedInterval":{"minValue":90,"maxValue":110},"scaleInterval":{"minValue":13.400000,"maxValue":15.250000}},{"speedInterval":{"minValue":110,"maxValue":120},"scaleInterval":{"minValue":13.200000,"maxValue":15.000000}},{"speedInterval":{"minValue":120,"maxValue":1000000},"scaleInterval":{"minValue":13.000000,"maxValue":14.920000}}]},{"curvatureInterval":{"minValue":10,"maxValue":65535},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":30},"scaleInterval":{"minValue":14.340000,"maxValue":17.400000}},{"speedInterval":{"minValue":30,"maxValue":50},"scaleInterval":{"minValue":14.000000,"maxValue":16.799999}},{"speedInterval":{"minValue":50,"maxValue":70},"scaleInterval":{"minValue":13.800000,"maxValue":16.400000}},{"speedInterval":{"minValue":70,"maxValue":90},"scaleInterval":{"minValue":13.600000,"maxValue":15.900000}},{"speedInterval":{"minValue":90,"maxValue":110},"scaleInterval":{"minValue":13.400000,"maxValue":15.600000}},{"speedInterval":{"minValue":110,"maxValue":120},"scaleInterval":{"minValue":13.200000,"maxValue":15.250000}},{"speedInterval":{"minValue":120,"maxValue":1000000},"scaleInterval":{"minValue":13.000000,"maxValue":15.000000}}]}]},{"roadGroup":2,"intervalStrategy":[{"curvatureInterval":{"minValue":0,"maxValue":15},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scaleInterval":{"minValue":15.000000,"maxValue":17.500000}},{"speedInterval":{"minValue":25,"maxValue":40},"scaleInterval":{"minValue":14.670000,"maxValue":17.000000}},{"speedInterval":{"minValue":40,"maxValue":60},"scaleInterval":{"minValue":14.340000,"maxValue":16.500000}},{"speedInterval":{"minValue":60,"maxValue":75},"scaleInterval":{"minValue":14.000000,"maxValue":16.000000}},{"speedInterval":{"minValue":75,"maxValue":90},"scaleInterval":{"minValue":13.800000,"maxValue":15.750000}},{"speedInterval":{"minValue":90,"maxValue":1000000},"scaleInterval":{"minValue":13.600000,"maxValue":15.500000}}]},{"curvatureInterval":{"minValue":15,"maxValue":25},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":40},"scaleInterval":{"minValue":15.750000,"maxValue":18.000000}},{"speedInterval":{"minValue":40,"maxValue":55},"scaleInterval":{"minValue":15.500000,"maxValue":17.799999}},{"speedInterval":{"minValue":55,"maxValue":70},"scaleInterval":{"minValue":15.000000,"maxValue":17.600000}},{"speedInterval":{"minValue":70,"maxValue":1000000},"scaleInterval":{"minValue":14.670000,"maxValue":17.400000}}]},{"curvatureInterval":{"minValue":25,"maxValue":35},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":40},"scaleInterval":{"minValue":15.750000,"maxValue":18.670000}},{"speedInterval":{"minValue":40,"maxValue":55},"scaleInterval":{"minValue":15.500000,"maxValue":18.340000}},{"speedInterval":{"minValue":55,"maxValue":65},"scaleInterval":{"minValue":15.000000,"maxValue":18.000000}},{"speedInterval":{"minValue":65,"maxValue":1000000},"scaleInterval":{"minValue":14.670000,"maxValue":17.799999}}]},{"curvatureInterval":{"minValue":35,"maxValue":65535},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":35},"scaleInterval":{"minValue":16.000000,"maxValue":18.840000}},{"speedInterval":{"minValue":35,"maxValue":50},"scaleInterval":{"minValue":15.500000,"maxValue":18.500000}},{"speedInterval":{"minValue":50,"maxValue":65},"scaleInterval":{"minValue":15.000000,"maxValue":18.170000}},{"speedInterval":{"minValue":65,"maxValue":1000000},"scaleInterval":{"minValue":14.670000,"maxValue":17.900000}}]}]},{"roadGroup":3,"intervalStrategy":[{"curvatureInterval":{"minValue":0,"maxValue":15},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scaleInterval":{"minValue":15.500000,"maxValue":17.500000}},{"speedInterval":{"minValue":25,"maxValue":40},"scaleInterval":{"minValue":14.840000,"maxValue":17.000000}},{"speedInterval":{"minValue":40,"maxValue":55},"scaleInterval":{"minValue":14.670000,"maxValue":16.500000}},{"speedInterval":{"minValue":55,"maxValue":70},"scaleInterval":{"minValue":14.340000,"maxValue":16.000000}},{"speedInterval":{"minValue":70,"maxValue":1000000},"scaleInterval":{"minValue":14.000000,"maxValue":15.750000}}]},{"curvatureInterval":{"minValue":15,"maxValue":25},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":40},"scaleInterval":{"minValue":15.750000,"maxValue":18.000000}},{"speedInterval":{"minValue":40,"maxValue":60},"scaleInterval":{"minValue":15.250000,"maxValue":17.799999}},{"speedInterval":{"minValue":60,"maxValue":1000000},"scaleInterval":{"minValue":15.000000,"maxValue":17.600000}}]},{"curvatureInterval":{"minValue":25,"maxValue":35},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":35},"scaleInterval":{"minValue":16.400000,"maxValue":18.340000}},{"speedInterval":{"minValue":35,"maxValue":55},"scaleInterval":{"minValue":16.209999,"maxValue":18.000000}},{"speedInterval":{"minValue":55,"maxValue":1000000},"scaleInterval":{"minValue":16.000000,"maxValue":17.799999}}]},{"curvatureInterval":{"minValue":35,"maxValue":65535},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":30},"scaleInterval":{"minValue":16.500000,"maxValue":18.670000}},{"speedInterval":{"minValue":30,"maxValue":50},"scaleInterval":{"minValue":16.209999,"maxValue":18.340000}},{"speedInterval":{"minValue":50,"maxValue":1000000},"scaleInterval":{"minValue":16.000000,"maxValue":18.000000}}]}]},{"roadGroup":4,"intervalStrategy":[{"curvatureInterval":{"minValue":0,"maxValue":15},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scaleInterval":{"minValue":14.670000,"maxValue":17.000000}},{"speedInterval":{"minValue":25,"maxValue":45},"scaleInterval":{"minValue":14.340000,"maxValue":16.500000}},{"speedInterval":{"minValue":45,"maxValue":60},"scaleInterval":{"minValue":14.170000,"maxValue":16.000000}},{"speedInterval":{"minValue":60,"maxValue":75},"scaleInterval":{"minValue":14.000000,"maxValue":15.750000}},{"speedInterval":{"minValue":75,"maxValue":1000000},"scaleInterval":{"minValue":13.800000,"maxValue":15.500000}}]},{"curvatureInterval":{"minValue":15,"maxValue":65535},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scaleInterval":{"minValue":14.670000,"maxValue":18.670000}},{"speedInterval":{"minValue":25,"maxValue":45},"scaleInterval":{"minValue":14.340000,"maxValue":18.340000}},{"speedInterval":{"minValue":45,"maxValue":60},"scaleInterval":{"minValue":14.170000,"maxValue":17.500000}},{"speedInterval":{"minValue":60,"maxValue":75},"scaleInterval":{"minValue":14.000000,"maxValue":17.000000}},{"speedInterval":{"minValue":75,"maxValue":1000000},"scaleInterval":{"minValue":13.800000,"maxValue":16.709999}}]}]},{"roadGroup":5,"intervalStrategy":[{"curvatureInterval":{"minValue":0,"maxValue":15},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scaleInterval":{"minValue":15.500000,"maxValue":18.000000}},{"speedInterval":{"minValue":25,"maxValue":45},"scaleInterval":{"minValue":15.000000,"maxValue":17.000000}},{"speedInterval":{"minValue":45,"maxValue":60},"scaleInterval":{"minValue":14.670000,"maxValue":16.500000}},{"speedInterval":{"minValue":60,"maxValue":75},"scaleInterval":{"minValue":14.340000,"maxValue":16.000000}},{"speedInterval":{"minValue":75,"maxValue":1000000},"scaleInterval":{"minValue":14.000000,"maxValue":15.750000}}]},{"curvatureInterval":{"minValue":15,"maxValue":65535},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scaleInterval":{"minValue":15.500000,"maxValue":19.000000}},{"speedInterval":{"minValue":25,"maxValue":45},"scaleInterval":{"minValue":15.000000,"maxValue":18.000000}},{"speedInterval":{"minValue":45,"maxValue":60},"scaleInterval":{"minValue":14.670000,"maxValue":17.500000}},{"speedInterval":{"minValue":60,"maxValue":75},"scaleInterval":{"minValue":14.340000,"maxValue":17.000000}},{"speedInterval":{"minValue":75,"maxValue":1000000},"scaleInterval":{"minValue":14.000000,"maxValue":16.709999}}]}]},{"roadGroup":6,"intervalStrategy":[{"curvatureInterval":{"minValue":0,"maxValue":15},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scaleInterval":{"minValue":15.500000,"maxValue":17.500000}},{"speedInterval":{"minValue":25,"maxValue":40},"scaleInterval":{"minValue":15.000000,"maxValue":17.000000}},{"speedInterval":{"minValue":40,"maxValue":60},"scaleInterval":{"minValue":14.750000,"maxValue":16.500000}},{"speedInterval":{"minValue":60,"maxValue":80},"scaleInterval":{"minValue":14.500000,"maxValue":16.299999}},{"speedInterval":{"minValue":80,"maxValue":1000000},"scaleInterval":{"minValue":14.670000,"maxValue":16.000000}}]},{"curvatureInterval":{"minValue":15,"maxValue":25},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":40},"scaleInterval":{"minValue":15.750000,"maxValue":18.000000}},{"speedInterval":{"minValue":40,"maxValue":60},"scaleInterval":{"minValue":15.500000,"maxValue":17.799999}},{"speedInterval":{"minValue":60,"maxValue":1000000},"scaleInterval":{"minValue":15.250000,"maxValue":17.600000}}]},{"curvatureInterval":{"minValue":25,"maxValue":35},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":35},"scaleInterval":{"minValue":16.400000,"maxValue":18.340000}},{"speedInterval":{"minValue":35,"maxValue":55},"scaleInterval":{"minValue":16.209999,"maxValue":18.000000}},{"speedInterval":{"minValue":55,"maxValue":1000000},"scaleInterval":{"minValue":16.000000,"maxValue":17.799999}}]},{"curvatureInterval":{"minValue":35,"maxValue":65535},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":30},"scaleInterval":{"minValue":16.500000,"maxValue":18.670000}},{"speedInterval":{"minValue":30,"maxValue":50},"scaleInterval":{"minValue":16.400000,"maxValue":18.340000}},{"speedInterval":{"minValue":50,"maxValue":1000000},"scaleInterval":{"minValue":16.000000,"maxValue":18.000000}}]}]}],"effectParam":[{"roadGroup":1,"highCurvatureStartOffset":1000,"lowCurvatureStartOffset":2000,"multiCameraDist":2000},{"roadGroup":2,"highCurvatureStartOffset":300,"lowCurvatureStartOffset":800,"multiCameraDist":800},{"roadGroup":3,"highCurvatureStartOffset":200,"lowCurvatureStartOffset":500,"multiCameraDist":500},{"roadGroup":4,"highCurvatureStartOffset":400,"lowCurvatureStartOffset":1500,"multiCameraDist":1500},{"roadGroup":5,"highCurvatureStartOffset":300,"lowCurvatureStartOffset":600,"multiCameraDist":700},{"roadGroup":6,"highCurvatureStartOffset":150,"lowCurvatureStartOffset":400,"multiCameraDist":500}]},"endPointConfig":{"offsetInterval":{"minValue":700,"maxValue":2000},"roadGroupDist":[{"roadGroup":1,"roadDist":4000},{"roadGroup":4,"roadDist":3500},{"roadGroup":5,"roadDist":3000}],"curvatureOffset":200,"intervalDist":10,"scaleStrategy":[{"distInterval":{"minValue":2000,"maxValue":2147483647},"scaleInterval":{"minValue":14.670000,"maxValue":16.500000}},{"distInterval":{"minValue":1500,"maxValue":2000},"scaleInterval":{"minValue":14.670000,"maxValue":16.600000}},{"distInterval":{"minValue":1000,"maxValue":1500},"scaleInterval":{"minValue":14.840000,"maxValue":16.799999}},{"distInterval":{"minValue":700,"maxValue":1000},"scaleInterval":{"minValue":15.000000,"maxValue":17.000000}},{"distInterval":{"minValue":400,"maxValue":700},"scaleInterval":{"minValue":15.500000,"maxValue":17.500000}},{"distInterval":{"minValue":200,"maxValue":400},"scaleInterval":{"minValue":15.800000,"maxValue":17.799999}},{"distInterval":{"minValue":100,"maxValue":200},"scaleInterval":{"minValue":16.000000,"maxValue":18.000000}},{"distInterval":{"minValue":0,"maxValue":100},"scaleInterval":{"minValue":16.400000,"maxValue":18.500000}}],"noEffectLength":50,"actionEffectLen":100},"slipConfig":{"dist":3000,"intervalDist":25,"curvature":25.000000,"minLengths":[{"intInterval":{"minValue":0,"maxValue":100},"intValue":150},{"intInterval":{"minValue":100,"maxValue":150},"intValue":200},{"intInterval":{"minValue":150,"maxValue":200},"intValue":250},{"intInterval":{"minValue":200,"maxValue":300},"intValue":300},{"intInterval":{"minValue":300,"maxValue":500},"intValue":500}],"minAngle":100.000000,"maxPreIgnoreLinkLen":300,"maxPostIgnoreLinkLen":50,"splitCurvature":5,"splitDistance":50,"mergeDistance":50},"bendConfig":{"normalStrategy":[{"roadGroup":1,"scale":{"minValue":14.670000,"maxValue":15.250000}},{"roadGroup":2,"scale":{"minValue":15.000000,"maxValue":16.799999}},{"roadGroup":3,"scale":{"minValue":15.000000,"maxValue":16.799999}},{"roadGroup":4,"scale":{"minValue":14.670000,"maxValue":16.000000}},{"roadGroup":5,"scale":{"minValue":14.670000,"maxValue":16.000000}},{"roadGroup":6,"scale":{"minValue":15.000000,"maxValue":17.000000}}],"preStartOffset":[],"startOffset":[],"minEffectDis":200,"minCuvatureDis":50,"angleValue":30.000000}},"configClient":{"congestionConfig":{"scaleStrategy":[{"roadGroup":0,"scaleCondition":[{"distance":{"minValue":0,"maxValue":100},"scale":18.340000},{"distance":{"minValue":100,"maxValue":150},"scale":18.000000},{"distance":{"minValue":150,"maxValue":200},"scale":17.709999},{"distance":{"minValue":200,"maxValue":300},"scale":17.400000},{"distance":{"minValue":300,"maxValue":400},"scale":17.000000},{"distance":{"minValue":400,"maxValue":500},"scale":16.750000},{"distance":{"minValue":500,"maxValue":600},"scale":16.500000},{"distance":{"minValue":600,"maxValue":800},"scale":16.299999},{"distance":{"minValue":800,"maxValue":1000},"scale":16.000000},{"distance":{"minValue":1000,"maxValue":1200},"scale":15.800000},{"distance":{"minValue":1200,"maxValue":1400},"scale":15.600000},{"distance":{"minValue":1400,"maxValue":1600},"scale":15.300000},{"distance":{"minValue":1600,"maxValue":1800},"scale":15.000000},{"distance":{"minValue":1800,"maxValue":2000},"scale":14.900000},{"distance":{"minValue":2000,"maxValue":2300},"scale":14.800000},{"distance":{"minValue":2300,"maxValue":2600},"scale":14.700000},{"distance":{"minValue":2600,"maxValue":3000},"scale":14.590000},{"distance":{"minValue":3000,"maxValue":3300},"scale":14.470000},{"distance":{"minValue":3300,"maxValue":3600},"scale":14.340000},{"distance":{"minValue":3600,"maxValue":4000},"scale":14.170000},{"distance":{"minValue":4000,"maxValue":4500},"scale":14.000000},{"distance":{"minValue":4500,"maxValue":5000},"scale":13.850000}]},{"roadGroup":1,"scaleCondition":[{"distance":{"minValue":5000,"maxValue":2147483647},"scale":13.650000}]},{"roadGroup":2,"scaleCondition":[{"distance":{"minValue":5000,"maxValue":2147483647},"scale":13.800000}]},{"roadGroup":3,"scaleCondition":[{"distance":{"minValue":5000,"maxValue":2147483647},"scale":13.800000}]},{"roadGroup":4,"scaleCondition":[{"distance":{"minValue":5000,"maxValue":2147483647},"scale":13.700000}]},{"roadGroup":5,"scaleCondition":[{"distance":{"minValue":5000,"maxValue":2147483647},"scale":13.750000}]},{"roadGroup":6,"scaleCondition":[{"distance":{"minValue":5000,"maxValue":2147483647},"scale":13.820000}]}],"smallScaleStrategy":[{"roadGroup":0,"scaleCondition":[{"distance":{"minValue":0,"maxValue":100},"scale":18.170000},{"distance":{"minValue":100,"maxValue":150},"scale":17.799999},{"distance":{"minValue":150,"maxValue":200},"scale":17.400000},{"distance":{"minValue":200,"maxValue":300},"scale":17.000000},{"distance":{"minValue":300,"maxValue":400},"scale":16.799999},{"distance":{"minValue":400,"maxValue":500},"scale":16.549999},{"distance":{"minValue":500,"maxValue":600},"scale":16.299999},{"distance":{"minValue":600,"maxValue":800},"scale":16.000000},{"distance":{"minValue":800,"maxValue":1000},"scale":15.800000},{"distance":{"minValue":1000,"maxValue":1200},"scale":15.550000},{"distance":{"minValue":1200,"maxValue":1400},"scale":15.250000},{"distance":{"minValue":1400,"maxValue":1600},"scale":15.000000},{"distance":{"minValue":1600,"maxValue":1800},"scale":14.900000},{"distance":{"minValue":1800,"maxValue":2000},"scale":14.800000},{"distance":{"minValue":2000,"maxValue":2300},"scale":14.700000},{"distance":{"minValue":2300,"maxValue":2600},"scale":14.590000},{"distance":{"minValue":2600,"maxValue":3000},"scale":14.440000},{"distance":{"minValue":3000,"maxValue":3300},"scale":14.340000},{"distance":{"minValue":3300,"maxValue":3600},"scale":14.170000},{"distance":{"minValue":3600,"maxValue":4000},"scale":14.000000},{"distance":{"minValue":4000,"maxValue":4500},"scale":13.900000},{"distance":{"minValue":4500,"maxValue":5000},"scale":13.750000}]},{"roadGroup":1,"scaleCondition":[{"distance":{"minValue":5000,"maxValue":2147483647},"scale":13.500000}]},{"roadGroup":2,"scaleCondition":[{"distance":{"minValue":5000,"maxValue":2147483647},"scale":13.700000}]},{"roadGroup":3,"scaleCondition":[{"distance":{"minValue":5000,"maxValue":2147483647},"scale":13.700000}]},{"roadGroup":4,"scaleCondition":[{"distance":{"minValue":5000,"maxValue":2147483647},"scale":13.600000}]},{"roadGroup":5,"scaleCondition":[{"distance":{"minValue":5000,"maxValue":2147483647},"scale":13.650000}]},{"roadGroup":6,"scaleCondition":[{"distance":{"minValue":5000,"maxValue":2147483647},"scale":13.720000}]}],"minPriorEffectDist":[{"roadGroup":1,"roadDist":1000},{"roadGroup":2,"roadDist":200},{"roadGroup":3,"roadDist":200},{"roadGroup":4,"roadDist":400},{"roadGroup":5,"roadDist":200},{"roadGroup":6,"roadDist":200}],"maxSpeed":60,"maxHighSpeedDuration":20,"startOffset":100,"endOffset":30,"minValidLength":130,"actionEffectDist":[{"roadGroup":1,"roadDist":800},{"roadGroup":2,"roadDist":500},{"roadGroup":3,"roadDist":500},{"roadGroup":4,"roadDist":600},{"roadGroup":5,"roadDist":500},{"roadGroup":6,"roadDist":400}],"actionGhatEffectDist":[{"roadGroup":1,"roadDist":800},{"roadGroup":2,"roadDist":250},{"roadGroup":3,"roadDist":250},{"roadGroup":4,"roadDist":600},{"roadGroup":5,"roadDist":500},{"roadGroup":6,"roadDist":200}],"minStartChangeDist":500},"actionConfig":{"actionSlowScaleStrategy":{"minValue":12.800000,"maxValue":16.500000}},"cameraConfig":{"minScaleChangeInterval":10},"slipConfig":{"jctContinueStrategy":{"scaleStrategy":[{"roadGroup":0,"scale":{"minValue":15.000000,"maxValue":17.000000}}],"startOffset":200},"scaleStrategy":[{"distInterval":{"minValue":2000,"maxValue":2147483647},"scaleInterval":{"minValue":14.340000,"maxValue":16.799999}},{"distInterval":{"minValue":1500,"maxValue":2000},"scaleInterval":{"minValue":14.500000,"maxValue":17.000000}},{"distInterval":{"minValue":1000,"maxValue":1500},"scaleInterval":{"minValue":14.670000,"maxValue":17.209999}},{"distInterval":{"minValue":700,"maxValue":1000},"scaleInterval":{"minValue":14.840000,"maxValue":17.600000}},{"distInterval":{"minValue":400,"maxValue":700},"scaleInterval":{"minValue":15.000000,"maxValue":17.799999}},{"distInterval":{"minValue":200,"maxValue":400},"scaleInterval":{"minValue":15.500000,"maxValue":18.340000}},{"distInterval":{"minValue":100,"maxValue":200},"scaleInterval":{"minValue":16.000000,"maxValue":18.670000}},{"distInterval":{"minValue":0,"maxValue":100},"scaleInterval":{"minValue":16.500000,"maxValue":19.000000}}]},"turnLaneConfig":{"scale":17.799999},"pitchConfig":{"zoomPitchs":[{"zoomLevel":13.000000,"pitchAngle":10.000000},{"zoomLevel":13.500000,"pitchAngle":12.500000},{"zoomLevel":14.000000,"pitchAngle":15.000000},{"zoomLevel":14.330000,"pitchAngle":16.000000},{"zoomLevel":14.670000,"pitchAngle":18.000000},{"zoomLevel":15.000000,"pitchAngle":20.000000},{"zoomLevel":15.500000,"pitchAngle":25.000000},{"zoomLevel":16.000000,"pitchAngle":30.000000},{"zoomLevel":17.000000,"pitchAngle":25.000000},{"zoomLevel":18.000000,"pitchAngle":15.000000},{"zoomLevel":19.000000,"pitchAngle":10.000000},{"zoomLevel":20.000000,"pitchAngle":0.000000}]},"rollAngleConfig":{"needFixMinAngle":30.000000,"needFixMaxAngle":90.000000,"fixedMinAngle":1.000000,"fixedMaxAngle":30.000000,"secondAngle":10.000000,"rollAngles":[{"sceneType":5,"value":5,"seconds":1,"curveValue":5,"curveSeconds":1},{"sceneType":3,"value":5,"seconds":1,"curveValue":5,"curveSeconds":1},{"sceneType":4,"value":5,"seconds":1,"curveValue":5,"curveSeconds":1},{"sceneType":1,"value":5,"seconds":1,"curveValue":5,"curveSeconds":1},{"sceneType":2,"value":5,"seconds":1,"curveValue":5,"curveSeconds":1},{"sceneType":7,"value":5,"seconds":1,"curveValue":0,"curveSeconds":0},{"sceneType":10,"value":5,"seconds":1,"curveValue":0,"curveSeconds":0},{"sceneType":11,"value":5,"seconds":1,"curveValue":0,"curveSeconds":0},{"sceneType":12,"value":5,"seconds":1,"curveValue":0,"curveSeconds":0}]},"parkingConfig":{"scaleStrategy":{"minValue":18.000000,"maxValue":20.000000}}}},"horizontalConfig":{"configService":{"roadClassConfig":{"scaleStrategy":[{"roadGroup":1,"curvatureSpeeds":[{"curvature":{"minValue":0.000000,"maxValue":10.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":30},"scale":15.500000},{"speed":{"minValue":30,"maxValue":50},"scale":15.000000},{"speed":{"minValue":50,"maxValue":70},"scale":14.670000},{"speed":{"minValue":70,"maxValue":90},"scale":14.420000},{"speed":{"minValue":90,"maxValue":110},"scale":14.170000},{"speed":{"minValue":110,"maxValue":120},"scale":13.950000},{"speed":{"minValue":120,"maxValue":1000000},"scale":13.800000}]},{"curvature":{"minValue":10.000000,"maxValue":65535.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":30},"scale":17.000000},{"speed":{"minValue":30,"maxValue":50},"scale":16.500000},{"speed":{"minValue":50,"maxValue":70},"scale":16.000000},{"speed":{"minValue":70,"maxValue":90},"scale":15.800000},{"speed":{"minValue":90,"maxValue":110},"scale":15.600000},{"speed":{"minValue":110,"maxValue":120},"scale":15.400000},{"speed":{"minValue":120,"maxValue":1000000},"scale":15.200000}]}]},{"roadGroup":2,"curvatureSpeeds":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":25},"scale":17.000000},{"speed":{"minValue":25,"maxValue":40},"scale":16.500000},{"speed":{"minValue":40,"maxValue":60},"scale":16.000000},{"speed":{"minValue":60,"maxValue":75},"scale":15.750000},{"speed":{"minValue":75,"maxValue":90},"scale":15.500000},{"speed":{"minValue":90,"maxValue":1000000},"scale":15.250000}]},{"curvature":{"minValue":15.000000,"maxValue":25.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":40},"scale":17.600000},{"speed":{"minValue":40,"maxValue":55},"scale":17.299999},{"speed":{"minValue":55,"maxValue":70},"scale":17.000000},{"speed":{"minValue":70,"maxValue":1000000},"scale":16.709999}]},{"curvature":{"minValue":25.000000,"maxValue":35.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":40},"scale":17.900000},{"speed":{"minValue":40,"maxValue":55},"scale":17.709999},{"speed":{"minValue":55,"maxValue":65},"scale":17.400000},{"speed":{"minValue":65,"maxValue":1000000},"scale":17.000000}]},{"curvature":{"minValue":35.000000,"maxValue":65535.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":35},"scale":18.340000},{"speed":{"minValue":35,"maxValue":50},"scale":17.900000},{"speed":{"minValue":50,"maxValue":65},"scale":17.600000},{"speed":{"minValue":65,"maxValue":1000000},"scale":17.209999}]}]},{"roadGroup":3,"curvatureSpeeds":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":25},"scale":17.209999},{"speed":{"minValue":25,"maxValue":40},"scale":16.799999},{"speed":{"minValue":40,"maxValue":55},"scale":16.209999},{"speed":{"minValue":55,"maxValue":70},"scale":15.750000},{"speed":{"minValue":70,"maxValue":1000000},"scale":15.500000}]},{"curvature":{"minValue":15.000000,"maxValue":25.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":40},"scale":17.799999},{"speed":{"minValue":40,"maxValue":60},"scale":17.400000},{"speed":{"minValue":60,"maxValue":1000000},"scale":17.000000}]},{"curvature":{"minValue":25.000000,"maxValue":35.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":35},"scale":18.000000},{"speed":{"minValue":35,"maxValue":55},"scale":17.799999},{"speed":{"minValue":55,"maxValue":1000000},"scale":17.400000}]},{"curvature":{"minValue":35.000000,"maxValue":65535.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":30},"scale":18.340000},{"speed":{"minValue":30,"maxValue":50},"scale":17.900000},{"speed":{"minValue":50,"maxValue":1000000},"scale":17.600000}]}]},{"roadGroup":4,"curvatureSpeeds":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":25},"scale":16.400000},{"speed":{"minValue":25,"maxValue":45},"scale":15.900000},{"speed":{"minValue":45,"maxValue":60},"scale":15.600000},{"speed":{"minValue":60,"maxValue":75},"scale":15.300000},{"speed":{"minValue":75,"maxValue":1000000},"scale":14.940000}]},{"curvature":{"minValue":15.000000,"maxValue":65535.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":25},"scale":17.600000},{"speed":{"minValue":25,"maxValue":45},"scale":17.000000},{"speed":{"minValue":45,"maxValue":60},"scale":16.400000},{"speed":{"minValue":60,"maxValue":75},"scale":16.000000},{"speed":{"minValue":75,"maxValue":1000000},"scale":15.700000}]}]},{"roadGroup":5,"curvatureSpeeds":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":25},"scale":16.500000},{"speed":{"minValue":25,"maxValue":40},"scale":16.000000},{"speed":{"minValue":40,"maxValue":60},"scale":15.700000},{"speed":{"minValue":60,"maxValue":75},"scale":15.400000},{"speed":{"minValue":75,"maxValue":1000000},"scale":15.000000}]},{"curvature":{"minValue":15.000000,"maxValue":65535.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":25},"scale":17.799999},{"speed":{"minValue":25,"maxValue":45},"scale":17.209999},{"speed":{"minValue":45,"maxValue":60},"scale":16.600000},{"speed":{"minValue":60,"maxValue":75},"scale":16.000000},{"speed":{"minValue":75,"maxValue":1000000},"scale":15.800000}]}]},{"roadGroup":6,"curvatureSpeeds":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":25},"scale":17.000000},{"speed":{"minValue":25,"maxValue":40},"scale":16.600000},{"speed":{"minValue":40,"maxValue":55},"scale":16.209999},{"speed":{"minValue":55,"maxValue":70},"scale":15.750000},{"speed":{"minValue":70,"maxValue":1000000},"scale":15.500000}]},{"curvature":{"minValue":15.000000,"maxValue":25.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":40},"scale":17.799999},{"speed":{"minValue":40,"maxValue":60},"scale":17.400000},{"speed":{"minValue":60,"maxValue":1000000},"scale":17.000000}]},{"curvature":{"minValue":25.000000,"maxValue":35.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":35},"scale":18.170000},{"speed":{"minValue":35,"maxValue":55},"scale":17.799999},{"speed":{"minValue":55,"maxValue":1000000},"scale":17.500000}]},{"curvature":{"minValue":35.000000,"maxValue":65535.000000},"speedScales":[{"speed":{"minValue":0,"maxValue":30},"scale":18.500000},{"speed":{"minValue":30,"maxValue":50},"scale":18.000000},{"speed":{"minValue":50,"maxValue":1000000},"scale":17.799999}]}]}],"minCurvatureLen":500,"minScaleChangeInterval":10,"minGuaranteeLength":200},"actionConfig":{"continueStrategy":[{"roadGroup":1,"scale":{"minValue":12.800000,"maxValue":15.750000}},{"roadGroup":2,"scale":{"minValue":13.400000,"maxValue":16.799999}},{"roadGroup":3,"scale":{"minValue":13.400000,"maxValue":17.000000}},{"roadGroup":4,"scale":{"minValue":13.000000,"maxValue":16.500000}},{"roadGroup":5,"scale":{"minValue":13.400000,"maxValue":16.799999}},{"roadGroup":6,"scale":{"minValue":13.400000,"maxValue":17.209999}}],"continueBendStrategy":[{"roadGroup":1,"scale":{"minValue":13.000000,"maxValue":17.799999}},{"roadGroup":2,"scale":{"minValue":13.400000,"maxValue":18.000000}},{"roadGroup":3,"scale":{"minValue":13.400000,"maxValue":18.000000}},{"roadGroup":4,"scale":{"minValue":13.000000,"maxValue":17.799999}},{"roadGroup":5,"scale":{"minValue":13.400000,"maxValue":18.000000}},{"roadGroup":6,"scale":{"minValue":13.400000,"maxValue":18.340000}}],"normalStrategy":[{"roadGroup":1,"scale":{"minValue":13.000000,"maxValue":18.000000}},{"roadGroup":2,"scale":{"minValue":13.400000,"maxValue":19.000000}},{"roadGroup":3,"scale":{"minValue":13.400000,"maxValue":19.000000}},{"roadGroup":4,"scale":{"minValue":13.000000,"maxValue":18.500000}},{"roadGroup":5,"scale":{"minValue":13.400000,"maxValue":18.670000}},{"roadGroup":6,"scale":{"minValue":13.400000,"maxValue":20.000000}}],"crossStrategy":[{"roadGroup":1,"scale":{"minValue":15.500000,"maxValue":18.340000}},{"roadGroup":2,"scale":{"minValue":16.000000,"maxValue":18.500000}},{"roadGroup":3,"scale":{"minValue":16.000000,"maxValue":18.500000}},{"roadGroup":4,"scale":{"minValue":16.000000,"maxValue":18.340000}},{"roadGroup":5,"scale":{"minValue":16.000000,"maxValue":18.500000}},{"roadGroup":6,"scale":{"minValue":16.500000,"maxValue":20.000000}}],"noCrossStrategy":[{"roadGroup":1,"scale":{"minValue":15.500000,"maxValue":18.000000}},{"roadGroup":2,"scale":{"minValue":16.000000,"maxValue":18.340000}},{"roadGroup":3,"scale":{"minValue":16.000000,"maxValue":18.340000}},{"roadGroup":4,"scale":{"minValue":16.000000,"maxValue":18.000000}},{"roadGroup":5,"scale":{"minValue":16.000000,"maxValue":18.340000}},{"roadGroup":6,"scale":{"minValue":16.500000,"maxValue":18.340000}}],"preStartOffset":[{"roadGroup":1,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":10.000000},"speedIntervalCondition":[{"intInterval":{"minValue":60,"maxValue":75},"intValue":1800},{"intInterval":{"minValue":75,"maxValue":95},"intValue":2000},{"intInterval":{"minValue":95,"maxValue":110},"intValue":2300},{"intInterval":{"minValue":110,"maxValue":120},"intValue":2600},{"intInterval":{"minValue":120,"maxValue":1000000},"intValue":3000}]}]},{"roadGroup":2,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":35},"intValue":800},{"intInterval":{"minValue":35,"maxValue":50},"intValue":900},{"intInterval":{"minValue":50,"maxValue":60},"intValue":1000},{"intInterval":{"minValue":60,"maxValue":75},"intValue":1100},{"intInterval":{"minValue":75,"maxValue":90},"intValue":1200},{"intInterval":{"minValue":90,"maxValue":110},"intValue":1300},{"intInterval":{"minValue":110,"maxValue":1000000},"intValue":1500}]}]},{"roadGroup":3,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":40},"intValue":600},{"intInterval":{"minValue":40,"maxValue":50},"intValue":800},{"intInterval":{"minValue":50,"maxValue":60},"intValue":900},{"intInterval":{"minValue":60,"maxValue":75},"intValue":1000},{"intInterval":{"minValue":75,"maxValue":90},"intValue":1200},{"intInterval":{"minValue":90,"maxValue":1000000},"intValue":1400}]}]},{"roadGroup":4,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":40,"maxValue":55},"intValue":1300},{"intInterval":{"minValue":55,"maxValue":70},"intValue":1500},{"intInterval":{"minValue":70,"maxValue":80},"intValue":1800},{"intInterval":{"minValue":80,"maxValue":1000000},"intValue":2200}]}]},{"roadGroup":5,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":40,"maxValue":50},"intValue":1200},{"intInterval":{"minValue":50,"maxValue":60},"intValue":1400},{"intInterval":{"minValue":60,"maxValue":70},"intValue":1600},{"intInterval":{"minValue":70,"maxValue":80},"intValue":1800},{"intInterval":{"minValue":80,"maxValue":1000000},"intValue":2000}]}]},{"roadGroup":6,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":40,"maxValue":50},"intValue":1000},{"intInterval":{"minValue":50,"maxValue":60},"intValue":1200},{"intInterval":{"minValue":60,"maxValue":70},"intValue":1400},{"intInterval":{"minValue":70,"maxValue":80},"intValue":1500},{"intInterval":{"minValue":80,"maxValue":1000000},"intValue":1700}]}]}],"startOffset":[{"roadGroup":1,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":10.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":60},"intValue":1500}]},{"curvature":{"minValue":10.000000,"maxValue":65535.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":800}]}]},{"roadGroup":2,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":35},"intValue":800}]},{"curvature":{"minValue":15.000000,"maxValue":25.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":275}]},{"curvature":{"minValue":25.000000,"maxValue":35.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":200}]},{"curvature":{"minValue":35.000000,"maxValue":65535.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":150}]}]},{"roadGroup":3,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":40},"intValue":600}]},{"curvature":{"minValue":15.000000,"maxValue":25.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":275}]},{"curvature":{"minValue":25.000000,"maxValue":35.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":200}]},{"curvature":{"minValue":35.000000,"maxValue":65535.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":150}]}]},{"roadGroup":4,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":40},"intValue":1000}]},{"curvature":{"minValue":15.000000,"maxValue":65535.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":600}]}]},{"roadGroup":5,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":40},"intValue":1000}]},{"curvature":{"minValue":15.000000,"maxValue":65535.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":600}]}]},{"roadGroup":6,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":40},"intValue":800}]},{"curvature":{"minValue":15.000000,"maxValue":35.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":200}]},{"curvature":{"minValue":35.000000,"maxValue":50.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":150}]},{"curvature":{"minValue":50.000000,"maxValue":65535.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":100}]}]}],"rcStrategy":[{"roadGroup":1,"roadDist":1200},{"roadGroup":2,"roadDist":600},{"roadGroup":3,"roadDist":600},{"roadGroup":4,"roadDist":1000},{"roadGroup":5,"roadDist":800},{"roadGroup":6,"roadDist":700}],"actionUTurnOffset":[{"roadGroup":1,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":10.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":3000}]},{"curvature":{"minValue":10.000000,"maxValue":65535.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":1000}]}]},{"roadGroup":2,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":1800}]},{"curvature":{"minValue":15.000000,"maxValue":25.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":500}]},{"curvature":{"minValue":25.000000,"maxValue":35.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":400}]},{"curvature":{"minValue":35.000000,"maxValue":65535.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":300}]}]},{"roadGroup":3,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":1500}]},{"curvature":{"minValue":15.000000,"maxValue":25.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":500}]},{"curvature":{"minValue":25.000000,"maxValue":35.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":350}]},{"curvature":{"minValue":35.000000,"maxValue":65535.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":200}]}]},{"roadGroup":4,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":2000}]},{"curvature":{"minValue":15.000000,"maxValue":65535.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":800}]}]},{"roadGroup":5,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":1750}]},{"curvature":{"minValue":15.000000,"maxValue":65535.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":600}]}]},{"roadGroup":6,"speedIntervalOffset":[{"curvature":{"minValue":0.000000,"maxValue":15.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":1300}]},{"curvature":{"minValue":15.000000,"maxValue":25.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":500}]},{"curvature":{"minValue":25.000000,"maxValue":35.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":400}]},{"curvature":{"minValue":35.000000,"maxValue":65535.000000},"speedIntervalCondition":[{"intInterval":{"minValue":0,"maxValue":1000000},"intValue":300}]}]}],"actionTurnLeftGroupDist":20,"actionGroupDist":200,"actionAdditionalDist":10,"actionUTurnMinScale":14.000000,"continueAdditionalDist":60,"continueActionValidDist":[{"roadGroup":1,"roadDist":500},{"roadGroup":2,"roadDist":300},{"roadGroup":3,"roadDist":300},{"roadGroup":4,"roadDist":500},{"roadGroup":5,"roadDist":400},{"roadGroup":6,"roadDist":200}]},"cameraConfig":{"singleCameraStrategy":[{"roadGroup":1,"intervalStrategy":[{"curvatureInterval":{"minValue":0,"maxValue":10},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":30},"scale":16.400000},{"speedInterval":{"minValue":30,"maxValue":50},"scale":15.750000},{"speedInterval":{"minValue":50,"maxValue":70},"scale":15.250000},{"speedInterval":{"minValue":70,"maxValue":90},"scale":14.920000},{"speedInterval":{"minValue":90,"maxValue":110},"scale":14.750000},{"speedInterval":{"minValue":110,"maxValue":120},"scale":14.500000},{"speedInterval":{"minValue":120,"maxValue":1000000},"scale":14.340000}]},{"curvatureInterval":{"minValue":10,"maxValue":65535},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":30},"scale":17.500000},{"speedInterval":{"minValue":30,"maxValue":50},"scale":17.000000},{"speedInterval":{"minValue":50,"maxValue":70},"scale":16.709999},{"speedInterval":{"minValue":70,"maxValue":90},"scale":16.500000},{"speedInterval":{"minValue":90,"maxValue":110},"scale":16.209999},{"speedInterval":{"minValue":110,"maxValue":120},"scale":16.000000},{"speedInterval":{"minValue":120,"maxValue":1000000},"scale":15.750000}]}]},{"roadGroup":2,"intervalStrategy":[{"curvatureInterval":{"minValue":0,"maxValue":15},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scale":17.600000},{"speedInterval":{"minValue":25,"maxValue":40},"scale":17.000000},{"speedInterval":{"minValue":40,"maxValue":60},"scale":16.709999},{"speedInterval":{"minValue":60,"maxValue":75},"scale":16.400000},{"speedInterval":{"minValue":75,"maxValue":90},"scale":16.209999},{"speedInterval":{"minValue":90,"maxValue":1000000},"scale":16.000000}]},{"curvatureInterval":{"minValue":15,"maxValue":25},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":40},"scale":17.799999},{"speedInterval":{"minValue":40,"maxValue":55},"scale":17.500000},{"speedInterval":{"minValue":55,"maxValue":70},"scale":17.209999},{"speedInterval":{"minValue":70,"maxValue":1000000},"scale":16.900000}]},{"curvatureInterval":{"minValue":25,"maxValue":35},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":40},"scale":18.170000},{"speedInterval":{"minValue":40,"maxValue":55},"scale":17.900000},{"speedInterval":{"minValue":55,"maxValue":65},"scale":17.600000},{"speedInterval":{"minValue":65,"maxValue":1000000},"scale":17.209999}]},{"curvatureInterval":{"minValue":35,"maxValue":65535},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":35},"scale":18.500000},{"speedInterval":{"minValue":35,"maxValue":50},"scale":18.170000},{"speedInterval":{"minValue":50,"maxValue":65},"scale":17.799999},{"speedInterval":{"minValue":65,"maxValue":1000000},"scale":17.500000}]}]},{"roadGroup":3,"intervalStrategy":[{"curvatureInterval":{"minValue":0,"maxValue":15},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scale":18.000000},{"speedInterval":{"minValue":25,"maxValue":40},"scale":17.600000},{"speedInterval":{"minValue":40,"maxValue":55},"scale":17.209999},{"speedInterval":{"minValue":55,"maxValue":70},"scale":17.000000},{"speedInterval":{"minValue":70,"maxValue":1000000},"scale":16.709999}]},{"curvatureInterval":{"minValue":15,"maxValue":25},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":40},"scale":18.000000},{"speedInterval":{"minValue":40,"maxValue":60},"scale":17.799999},{"speedInterval":{"minValue":60,"maxValue":1000000},"scale":17.400000}]},{"curvatureInterval":{"minValue":25,"maxValue":35},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":35},"scale":18.340000},{"speedInterval":{"minValue":35,"maxValue":55},"scale":18.000000},{"speedInterval":{"minValue":55,"maxValue":1000000},"scale":17.799999}]},{"curvatureInterval":{"minValue":35,"maxValue":65535},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":30},"scale":18.670000},{"speedInterval":{"minValue":30,"maxValue":50},"scale":18.340000},{"speedInterval":{"minValue":50,"maxValue":1000000},"scale":18.000000}]}]},{"roadGroup":4,"intervalStrategy":[{"curvatureInterval":{"minValue":0,"maxValue":15},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scale":16.799999},{"speedInterval":{"minValue":25,"maxValue":45},"scale":16.500000},{"speedInterval":{"minValue":45,"maxValue":60},"scale":16.209999},{"speedInterval":{"minValue":60,"maxValue":75},"scale":16.000000},{"speedInterval":{"minValue":75,"maxValue":1000000},"scale":15.800000}]},{"curvatureInterval":{"minValue":15,"maxValue":65535},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scale":18.000000},{"speedInterval":{"minValue":25,"maxValue":45},"scale":17.600000},{"speedInterval":{"minValue":45,"maxValue":60},"scale":17.000000},{"speedInterval":{"minValue":60,"maxValue":75},"scale":16.709999},{"speedInterval":{"minValue":75,"maxValue":1000000},"scale":16.400000}]}]},{"roadGroup":5,"intervalStrategy":[{"curvatureInterval":{"minValue":0,"maxValue":15},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scale":16.799999},{"speedInterval":{"minValue":25,"maxValue":40},"scale":16.600000},{"speedInterval":{"minValue":40,"maxValue":60},"scale":16.400000},{"speedInterval":{"minValue":60,"maxValue":75},"scale":16.209999},{"speedInterval":{"minValue":75,"maxValue":1000000},"scale":16.000000}]},{"curvatureInterval":{"minValue":15,"maxValue":65535},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scale":18.340000},{"speedInterval":{"minValue":25,"maxValue":40},"scale":17.799999},{"speedInterval":{"minValue":40,"maxValue":60},"scale":17.209999},{"speedInterval":{"minValue":60,"maxValue":75},"scale":16.709999},{"speedInterval":{"minValue":75,"maxValue":1000000},"scale":16.400000}]}]},{"roadGroup":6,"intervalStrategy":[{"curvatureInterval":{"minValue":0,"maxValue":15},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scale":17.600000},{"speedInterval":{"minValue":25,"maxValue":40},"scale":17.209999},{"speedInterval":{"minValue":40,"maxValue":60},"scale":16.709999},{"speedInterval":{"minValue":60,"maxValue":80},"scale":16.400000},{"speedInterval":{"minValue":80,"maxValue":1000000},"scale":16.000000}]},{"curvatureInterval":{"minValue":15,"maxValue":25},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":40},"scale":18.340000},{"speedInterval":{"minValue":40,"maxValue":60},"scale":17.799999},{"speedInterval":{"minValue":60,"maxValue":1000000},"scale":17.400000}]},{"curvatureInterval":{"minValue":25,"maxValue":35},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":35},"scale":18.500000},{"speedInterval":{"minValue":35,"maxValue":55},"scale":18.170000},{"speedInterval":{"minValue":55,"maxValue":1000000},"scale":17.799999}]},{"curvatureInterval":{"minValue":35,"maxValue":65535},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":30},"scale":18.670000},{"speedInterval":{"minValue":30,"maxValue":50},"scale":18.340000},{"speedInterval":{"minValue":50,"maxValue":1000000},"scale":18.000000}]}]}],"multiCameraStrategy":[{"roadGroup":1,"intervalStrategy":[{"curvatureInterval":{"minValue":0,"maxValue":10},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":30},"scaleInterval":{"minValue":14.340000,"maxValue":17.000000}},{"speedInterval":{"minValue":30,"maxValue":50},"scaleInterval":{"minValue":14.000000,"maxValue":16.400000}},{"speedInterval":{"minValue":50,"maxValue":70},"scaleInterval":{"minValue":13.800000,"maxValue":15.900000}},{"speedInterval":{"minValue":70,"maxValue":90},"scaleInterval":{"minValue":13.600000,"maxValue":15.600000}},{"speedInterval":{"minValue":90,"maxValue":110},"scaleInterval":{"minValue":13.400000,"maxValue":15.300000}},{"speedInterval":{"minValue":110,"maxValue":120},"scaleInterval":{"minValue":13.200000,"maxValue":15.000000}},{"speedInterval":{"minValue":120,"maxValue":1000000},"scaleInterval":{"minValue":13.000000,"maxValue":14.840000}}]},{"curvatureInterval":{"minValue":10,"maxValue":65535},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":30},"scaleInterval":{"minValue":14.340000,"maxValue":18.340000}},{"speedInterval":{"minValue":30,"maxValue":50},"scaleInterval":{"minValue":14.000000,"maxValue":17.799999}},{"speedInterval":{"minValue":50,"maxValue":70},"scaleInterval":{"minValue":13.800000,"maxValue":17.209999}},{"speedInterval":{"minValue":70,"maxValue":90},"scaleInterval":{"minValue":13.600000,"maxValue":16.900000}},{"speedInterval":{"minValue":90,"maxValue":110},"scaleInterval":{"minValue":13.400000,"maxValue":16.600000}},{"speedInterval":{"minValue":110,"maxValue":120},"scaleInterval":{"minValue":13.200000,"maxValue":16.400000}},{"speedInterval":{"minValue":120,"maxValue":1000000},"scaleInterval":{"minValue":13.000000,"maxValue":16.100000}}]}]},{"roadGroup":2,"intervalStrategy":[{"curvatureInterval":{"minValue":0,"maxValue":15},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scaleInterval":{"minValue":15.000000,"maxValue":18.500000}},{"speedInterval":{"minValue":25,"maxValue":40},"scaleInterval":{"minValue":14.670000,"maxValue":18.000000}},{"speedInterval":{"minValue":40,"maxValue":60},"scaleInterval":{"minValue":14.340000,"maxValue":17.500000}},{"speedInterval":{"minValue":60,"maxValue":75},"scaleInterval":{"minValue":14.000000,"maxValue":17.209999}},{"speedInterval":{"minValue":75,"maxValue":90},"scaleInterval":{"minValue":13.800000,"maxValue":16.799999}},{"speedInterval":{"minValue":90,"maxValue":1000000},"scaleInterval":{"minValue":13.600000,"maxValue":16.500000}}]},{"curvatureInterval":{"minValue":15,"maxValue":25},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":40},"scaleInterval":{"minValue":15.750000,"maxValue":18.340000}},{"speedInterval":{"minValue":40,"maxValue":55},"scaleInterval":{"minValue":15.500000,"maxValue":17.799999}},{"speedInterval":{"minValue":55,"maxValue":70},"scaleInterval":{"minValue":15.000000,"maxValue":17.600000}},{"speedInterval":{"minValue":70,"maxValue":1000000},"scaleInterval":{"minValue":14.670000,"maxValue":17.400000}}]},{"curvatureInterval":{"minValue":25,"maxValue":35},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":45},"scaleInterval":{"minValue":15.750000,"maxValue":18.500000}},{"speedInterval":{"minValue":45,"maxValue":55},"scaleInterval":{"minValue":15.500000,"maxValue":18.170000}},{"speedInterval":{"minValue":55,"maxValue":65},"scaleInterval":{"minValue":15.000000,"maxValue":17.799999}},{"speedInterval":{"minValue":65,"maxValue":1000000},"scaleInterval":{"minValue":14.670000,"maxValue":17.600000}}]},{"curvatureInterval":{"minValue":35,"maxValue":65535},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":35},"scaleInterval":{"minValue":16.000000,"maxValue":18.670000}},{"speedInterval":{"minValue":35,"maxValue":50},"scaleInterval":{"minValue":15.500000,"maxValue":18.340000}},{"speedInterval":{"minValue":50,"maxValue":65},"scaleInterval":{"minValue":15.000000,"maxValue":18.000000}},{"speedInterval":{"minValue":65,"maxValue":1000000},"scaleInterval":{"minValue":14.670000,"maxValue":17.799999}}]}]},{"roadGroup":3,"intervalStrategy":[{"curvatureInterval":{"minValue":0,"maxValue":15},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scaleInterval":{"minValue":15.500000,"maxValue":18.840000}},{"speedInterval":{"minValue":25,"maxValue":40},"scaleInterval":{"minValue":14.840000,"maxValue":18.500000}},{"speedInterval":{"minValue":40,"maxValue":55},"scaleInterval":{"minValue":14.670000,"maxValue":18.000000}},{"speedInterval":{"minValue":55,"maxValue":70},"scaleInterval":{"minValue":14.340000,"maxValue":17.709999}},{"speedInterval":{"minValue":70,"maxValue":1000000},"scaleInterval":{"minValue":14.000000,"maxValue":17.209999}}]},{"curvatureInterval":{"minValue":15,"maxValue":35},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":40},"scaleInterval":{"minValue":15.750000,"maxValue":18.670000}},{"speedInterval":{"minValue":40,"maxValue":60},"scaleInterval":{"minValue":15.250000,"maxValue":18.340000}},{"speedInterval":{"minValue":60,"maxValue":1000000},"scaleInterval":{"minValue":15.000000,"maxValue":17.799999}}]},{"curvatureInterval":{"minValue":35,"maxValue":50},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":35},"scaleInterval":{"minValue":16.400000,"maxValue":19.000000}},{"speedInterval":{"minValue":35,"maxValue":55},"scaleInterval":{"minValue":16.209999,"maxValue":18.500000}},{"speedInterval":{"minValue":55,"maxValue":1000000},"scaleInterval":{"minValue":16.000000,"maxValue":18.000000}}]},{"curvatureInterval":{"minValue":50,"maxValue":65535},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":30},"scaleInterval":{"minValue":16.500000,"maxValue":19.000000}},{"speedInterval":{"minValue":30,"maxValue":50},"scaleInterval":{"minValue":16.209999,"maxValue":18.670000}},{"speedInterval":{"minValue":50,"maxValue":1000000},"scaleInterval":{"minValue":16.000000,"maxValue":18.340000}}]}]},{"roadGroup":4,"intervalStrategy":[{"curvatureInterval":{"minValue":0,"maxValue":15},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scaleInterval":{"minValue":14.670000,"maxValue":18.000000}},{"speedInterval":{"minValue":25,"maxValue":45},"scaleInterval":{"minValue":14.340000,"maxValue":17.600000}},{"speedInterval":{"minValue":45,"maxValue":60},"scaleInterval":{"minValue":14.170000,"maxValue":17.000000}},{"speedInterval":{"minValue":60,"maxValue":75},"scaleInterval":{"minValue":14.000000,"maxValue":16.709999}},{"speedInterval":{"minValue":75,"maxValue":1000000},"scaleInterval":{"minValue":13.800000,"maxValue":16.400000}}]},{"curvatureInterval":{"minValue":15,"maxValue":65535},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scaleInterval":{"minValue":14.670000,"maxValue":18.670000}},{"speedInterval":{"minValue":25,"maxValue":45},"scaleInterval":{"minValue":14.340000,"maxValue":18.340000}},{"speedInterval":{"minValue":45,"maxValue":60},"scaleInterval":{"minValue":14.170000,"maxValue":17.799999}},{"speedInterval":{"minValue":60,"maxValue":75},"scaleInterval":{"minValue":14.000000,"maxValue":17.400000}},{"speedInterval":{"minValue":75,"maxValue":1000000},"scaleInterval":{"minValue":13.800000,"maxValue":17.000000}}]}]},{"roadGroup":5,"intervalStrategy":[{"curvatureInterval":{"minValue":0,"maxValue":15},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scaleInterval":{"minValue":15.500000,"maxValue":18.500000}},{"speedInterval":{"minValue":25,"maxValue":45},"scaleInterval":{"minValue":15.000000,"maxValue":18.000000}},{"speedInterval":{"minValue":45,"maxValue":60},"scaleInterval":{"minValue":14.670000,"maxValue":17.600000}},{"speedInterval":{"minValue":60,"maxValue":75},"scaleInterval":{"minValue":14.340000,"maxValue":17.000000}},{"speedInterval":{"minValue":75,"maxValue":1000000},"scaleInterval":{"minValue":14.000000,"maxValue":16.709999}}]},{"curvatureInterval":{"minValue":15,"maxValue":65535},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scaleInterval":{"minValue":15.500000,"maxValue":19.000000}},{"speedInterval":{"minValue":25,"maxValue":45},"scaleInterval":{"minValue":15.000000,"maxValue":18.340000}},{"speedInterval":{"minValue":45,"maxValue":60},"scaleInterval":{"minValue":14.670000,"maxValue":17.799999}},{"speedInterval":{"minValue":60,"maxValue":75},"scaleInterval":{"minValue":14.340000,"maxValue":17.400000}},{"speedInterval":{"minValue":75,"maxValue":1000000},"scaleInterval":{"minValue":14.000000,"maxValue":17.000000}}]}]},{"roadGroup":6,"intervalStrategy":[{"curvatureInterval":{"minValue":0,"maxValue":15},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":25},"scaleInterval":{"minValue":15.500000,"maxValue":18.000000}},{"speedInterval":{"minValue":25,"maxValue":40},"scaleInterval":{"minValue":15.000000,"maxValue":17.709999}},{"speedInterval":{"minValue":40,"maxValue":60},"scaleInterval":{"minValue":14.750000,"maxValue":17.400000}},{"speedInterval":{"minValue":60,"maxValue":80},"scaleInterval":{"minValue":14.500000,"maxValue":16.900000}},{"speedInterval":{"minValue":80,"maxValue":1000000},"scaleInterval":{"minValue":14.670000,"maxValue":16.600000}}]},{"curvatureInterval":{"minValue":15,"maxValue":25},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":40},"scaleInterval":{"minValue":15.750000,"maxValue":18.670000}},{"speedInterval":{"minValue":40,"maxValue":60},"scaleInterval":{"minValue":15.500000,"maxValue":18.340000}},{"speedInterval":{"minValue":60,"maxValue":1000000},"scaleInterval":{"minValue":15.250000,"maxValue":18.000000}}]},{"curvatureInterval":{"minValue":25,"maxValue":35},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":35},"scaleInterval":{"minValue":16.400000,"maxValue":18.670000}},{"speedInterval":{"minValue":35,"maxValue":55},"scaleInterval":{"minValue":16.209999,"maxValue":18.340000}},{"speedInterval":{"minValue":55,"maxValue":1000000},"scaleInterval":{"minValue":16.000000,"maxValue":18.000000}}]},{"curvatureInterval":{"minValue":35,"maxValue":65535},"speedInterval":[{"speedInterval":{"minValue":0,"maxValue":30},"scaleInterval":{"minValue":16.500000,"maxValue":18.670000}},{"speedInterval":{"minValue":30,"maxValue":50},"scaleInterval":{"minValue":16.400000,"maxValue":18.340000}},{"speedInterval":{"minValue":50,"maxValue":1000000},"scaleInterval":{"minValue":16.000000,"maxValue":18.000000}}]}]}],"effectParam":[{"roadGroup":1,"highCurvatureStartOffset":1000,"lowCurvatureStartOffset":2000,"multiCameraDist":2000},{"roadGroup":2,"highCurvatureStartOffset":300,"lowCurvatureStartOffset":800,"multiCameraDist":800},{"roadGroup":3,"highCurvatureStartOffset":200,"lowCurvatureStartOffset":500,"multiCameraDist":500},{"roadGroup":4,"highCurvatureStartOffset":400,"lowCurvatureStartOffset":1500,"multiCameraDist":1500},{"roadGroup":5,"highCurvatureStartOffset":300,"lowCurvatureStartOffset":600,"multiCameraDist":700},{"roadGroup":6,"highCurvatureStartOffset":150,"lowCurvatureStartOffset":400,"multiCameraDist":500}]},"endPointConfig":{"offsetInterval":{"minValue":300,"maxValue":1000},"roadGroupDist":[],"curvatureOffset":200,"intervalDist":10,"scaleStrategy":[{"distInterval":{"minValue":700,"maxValue":1000},"scaleInterval":{"minValue":15.000000,"maxValue":17.400000}},{"distInterval":{"minValue":400,"maxValue":700},"scaleInterval":{"minValue":15.500000,"maxValue":17.709999}},{"distInterval":{"minValue":200,"maxValue":400},"scaleInterval":{"minValue":15.800000,"maxValue":17.799999}},{"distInterval":{"minValue":100,"maxValue":200},"scaleInterval":{"minValue":16.000000,"maxValue":18.340000}},{"distInterval":{"minValue":0,"maxValue":100},"scaleInterval":{"minValue":16.400000,"maxValue":18.670000}}],"noEffectLength":50,"actionEffectLen":100},"slipConfig":{"dist":3000,"intervalDist":25,"curvature":25.000000,"minLengths":[{"intInterval":{"minValue":0,"maxValue":100},"intValue":150},{"intInterval":{"minValue":100,"maxValue":150},"intValue":200},{"intInterval":{"minValue":150,"maxValue":200},"intValue":250},{"intInterval":{"minValue":200,"maxValue":300},"intValue":300},{"intInterval":{"minValue":300,"maxValue":500},"intValue":500}],"minAngle":100.000000,"maxPreIgnoreLinkLen":300,"maxPostIgnoreLinkLen":50,"splitCurvature":5,"splitDistance":50,"mergeDistance":50},"bendConfig":{"normalStrategy":[{"roadGroup":1,"scale":{"minValue":14.670000,"maxValue":15.250000}},{"roadGroup":2,"scale":{"minValue":15.000000,"maxValue":16.799999}},{"roadGroup":3,"scale":{"minValue":15.000000,"maxValue":16.799999}},{"roadGroup":4,"scale":{"minValue":14.670000,"maxValue":16.000000}},{"roadGroup":5,"scale":{"minValue":14.670000,"maxValue":16.000000}},{"roadGroup":6,"scale":{"minValue":15.000000,"maxValue":17.000000}}],"preStartOffset":[],"startOffset":[],"minEffectDis":200,"minCuvatureDis":50,"angleValue":30.000000}},"configClient":{"congestionConfig":{"scaleStrategy":[{"roadGroup":0,"scaleCondition":[{"distance":{"minValue":0,"maxValue":100},"scale":18.340000},{"distance":{"minValue":100,"maxValue":150},"scale":18.000000},{"distance":{"minValue":150,"maxValue":200},"scale":17.799999},{"distance":{"minValue":200,"maxValue":300},"scale":17.500000},{"distance":{"minValue":300,"maxValue":400},"scale":17.000000},{"distance":{"minValue":400,"maxValue":500},"scale":16.799999},{"distance":{"minValue":500,"maxValue":600},"scale":16.500000},{"distance":{"minValue":600,"maxValue":800},"scale":16.000000},{"distance":{"minValue":800,"maxValue":1000},"scale":15.800000},{"distance":{"minValue":1000,"maxValue":1200},"scale":15.600000},{"distance":{"minValue":1200,"maxValue":1400},"scale":15.400000},{"distance":{"minValue":1400,"maxValue":1600},"scale":15.150000},{"distance":{"minValue":1600,"maxValue":1800},"scale":14.970000},{"distance":{"minValue":1800,"maxValue":2000},"scale":14.870000},{"distance":{"minValue":2000,"maxValue":2300},"scale":14.780000},{"distance":{"minValue":2300,"maxValue":2600},"scale":14.670000},{"distance":{"minValue":2600,"maxValue":3000},"scale":14.500000}]},{"roadGroup":1,"scaleCondition":[{"distance":{"minValue":3000,"maxValue":2147483647},"scale":14.000000}]},{"roadGroup":2,"scaleCondition":[{"distance":{"minValue":3000,"maxValue":2147483647},"scale":14.250000}]},{"roadGroup":3,"scaleCondition":[{"distance":{"minValue":3000,"maxValue":2147483647},"scale":14.340000}]},{"roadGroup":4,"scaleCondition":[{"distance":{"minValue":3000,"maxValue":2147483647},"scale":14.170000}]},{"roadGroup":5,"scaleCondition":[{"distance":{"minValue":3000,"maxValue":2147483647},"scale":14.170000}]},{"roadGroup":6,"scaleCondition":[{"distance":{"minValue":3000,"maxValue":2147483647},"scale":14.340000}]}],"smallScaleStrategy":[],"minPriorEffectDist":[{"roadGroup":1,"roadDist":1000},{"roadGroup":2,"roadDist":200},{"roadGroup":3,"roadDist":200},{"roadGroup":4,"roadDist":400},{"roadGroup":5,"roadDist":200},{"roadGroup":6,"roadDist":200}],"maxSpeed":60,"maxHighSpeedDuration":20,"startOffset":50,"endOffset":20,"minValidLength":130,"actionEffectDist":[{"roadGroup":1,"roadDist":800},{"roadGroup":2,"roadDist":500},{"roadGroup":3,"roadDist":500},{"roadGroup":4,"roadDist":600},{"roadGroup":5,"roadDist":500},{"roadGroup":6,"roadDist":400}],"actionGhatEffectDist":[{"roadGroup":1,"roadDist":800},{"roadGroup":2,"roadDist":250},{"roadGroup":3,"roadDist":250},{"roadGroup":4,"roadDist":600},{"roadGroup":5,"roadDist":500},{"roadGroup":6,"roadDist":200}],"minStartChangeDist":500},"actionConfig":{"actionSlowScaleStrategy":{"minValue":13.400000,"maxValue":17.600000}},"cameraConfig":{"minScaleChangeInterval":10},"slipConfig":{"jctContinueStrategy":{"scaleStrategy":[{"roadGroup":0,"scale":{"minValue":15.000000,"maxValue":17.000000}}],"startOffset":200},"scaleStrategy":[{"distInterval":{"minValue":2000,"maxValue":2147483647},"scaleInterval":{"minValue":13.400000,"maxValue":15.500000}},{"distInterval":{"minValue":1500,"maxValue":2000},"scaleInterval":{"minValue":13.600000,"maxValue":16.000000}},{"distInterval":{"minValue":1000,"maxValue":1500},"scaleInterval":{"minValue":13.800000,"maxValue":16.500000}},{"distInterval":{"minValue":700,"maxValue":1000},"scaleInterval":{"minValue":14.000000,"maxValue":17.000000}},{"distInterval":{"minValue":400,"maxValue":700},"scaleInterval":{"minValue":14.340000,"maxValue":17.299999}},{"distInterval":{"minValue":200,"maxValue":400},"scaleInterval":{"minValue":14.670000,"maxValue":17.600000}},{"distInterval":{"minValue":100,"maxValue":200},"scaleInterval":{"minValue":15.000000,"maxValue":17.900000}},{"distInterval":{"minValue":0,"maxValue":100},"scaleInterval":{"minValue":16.000000,"maxValue":18.340000}}]},"turnLaneConfig":{"scale":17.799999},"pitchConfig":{"zoomPitchs":[{"zoomLevel":13.000000,"pitchAngle":25.000000},{"zoomLevel":13.400000,"pitchAngle":27.500000},{"zoomLevel":14.000000,"pitchAngle":30.000000},{"zoomLevel":14.330000,"pitchAngle":32.500000},{"zoomLevel":14.670000,"pitchAngle":35.000000},{"zoomLevel":15.000000,"pitchAngle":37.500000},{"zoomLevel":15.500000,"pitchAngle":40.000000},{"zoomLevel":16.000000,"pitchAngle":40.000000},{"zoomLevel":17.000000,"pitchAngle":37.500000},{"zoomLevel":18.000000,"pitchAngle":35.000000},{"zoomLevel":19.000000,"pitchAngle":32.500000},{"zoomLevel":20.000000,"pitchAngle":30.000000}]},"rollAngleConfig":{"needFixMinAngle":30.000000,"needFixMaxAngle":90.000000,"fixedMinAngle":1.000000,"fixedMaxAngle":30.000000,"secondAngle":5.000000,"rollAngles":[]},"parkingConfig":{"scaleStrategy":{"minValue":18.000000,"maxValue":20.000000}}}}} \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0010636093a5d4d07fcaf968d7d155cb@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0010636093a5d4d07fcaf968d7d155cb@2x.webp deleted file mode 100644 index bae5b05..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0010636093a5d4d07fcaf968d7d155cb@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0010636093a5d4d07fcaf968d7d155cb@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0010636093a5d4d07fcaf968d7d155cb@3x.webp deleted file mode 100644 index 3a27528..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0010636093a5d4d07fcaf968d7d155cb@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00511505a52a3d20e9a26b473e2a8858@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00511505a52a3d20e9a26b473e2a8858@2x.webp deleted file mode 100644 index 3e78ec1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00511505a52a3d20e9a26b473e2a8858@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00511505a52a3d20e9a26b473e2a8858@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00511505a52a3d20e9a26b473e2a8858@3x.webp deleted file mode 100644 index 30eff46..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00511505a52a3d20e9a26b473e2a8858@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0061d7fcbf0d74d87001d7539f8e3068@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0061d7fcbf0d74d87001d7539f8e3068@2x.webp deleted file mode 100644 index 0961756..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0061d7fcbf0d74d87001d7539f8e3068@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0061d7fcbf0d74d87001d7539f8e3068@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0061d7fcbf0d74d87001d7539f8e3068@3x.webp deleted file mode 100644 index bbb89a9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0061d7fcbf0d74d87001d7539f8e3068@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0074c99e49853d2d7aebc70280ac1a67@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0074c99e49853d2d7aebc70280ac1a67@2x.png deleted file mode 100644 index fb2ae70..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0074c99e49853d2d7aebc70280ac1a67@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0074c99e49853d2d7aebc70280ac1a67@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0074c99e49853d2d7aebc70280ac1a67@3x.png deleted file mode 100644 index cfa6e27..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0074c99e49853d2d7aebc70280ac1a67@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00e62f58cea77ddb81001b8b76393ed4@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00e62f58cea77ddb81001b8b76393ed4@2x.webp deleted file mode 100644 index b0f1064..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00e62f58cea77ddb81001b8b76393ed4@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00e62f58cea77ddb81001b8b76393ed4@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00e62f58cea77ddb81001b8b76393ed4@3x.webp deleted file mode 100644 index b7e7ea3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00e62f58cea77ddb81001b8b76393ed4@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00e62f58cea77ddb81001b8b76393ed4@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00e62f58cea77ddb81001b8b76393ed4@dark@2x.webp deleted file mode 100644 index 7255b03..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00e62f58cea77ddb81001b8b76393ed4@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00e62f58cea77ddb81001b8b76393ed4@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00e62f58cea77ddb81001b8b76393ed4@dark@3x.webp deleted file mode 100644 index a8db6a3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00e62f58cea77ddb81001b8b76393ed4@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00ff3097263b698e997c1e6d5ce39104@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00ff3097263b698e997c1e6d5ce39104@2x.png deleted file mode 100644 index ba1cd45..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00ff3097263b698e997c1e6d5ce39104@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00ff3097263b698e997c1e6d5ce39104@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00ff3097263b698e997c1e6d5ce39104@3x.png deleted file mode 100644 index 1fbe6ec..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00ff3097263b698e997c1e6d5ce39104@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00ff3097263b698e997c1e6d5ce39104@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00ff3097263b698e997c1e6d5ce39104@dark@2x.png deleted file mode 100644 index 3b1f170..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00ff3097263b698e997c1e6d5ce39104@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00ff3097263b698e997c1e6d5ce39104@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00ff3097263b698e997c1e6d5ce39104@dark@3x.png deleted file mode 100644 index 048f173..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/00ff3097263b698e997c1e6d5ce39104@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0150c9aaf437d8d0926b9bdb58ddf026@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0150c9aaf437d8d0926b9bdb58ddf026@2x.webp deleted file mode 100644 index f14f1bd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0150c9aaf437d8d0926b9bdb58ddf026@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0150c9aaf437d8d0926b9bdb58ddf026@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0150c9aaf437d8d0926b9bdb58ddf026@3x.webp deleted file mode 100644 index eb626d4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0150c9aaf437d8d0926b9bdb58ddf026@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/018942fb377bddcad7275e356ffe5b9a@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/018942fb377bddcad7275e356ffe5b9a@2x.webp deleted file mode 100644 index e68c49b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/018942fb377bddcad7275e356ffe5b9a@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/018942fb377bddcad7275e356ffe5b9a@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/018942fb377bddcad7275e356ffe5b9a@3x.webp deleted file mode 100644 index 232dd39..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/018942fb377bddcad7275e356ffe5b9a@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/01e18e9b3551a3e39fa18f30ed578349@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/01e18e9b3551a3e39fa18f30ed578349@2x.webp deleted file mode 100644 index 62bec25..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/01e18e9b3551a3e39fa18f30ed578349@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/01e18e9b3551a3e39fa18f30ed578349@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/01e18e9b3551a3e39fa18f30ed578349@3x.webp deleted file mode 100644 index 8596543..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/01e18e9b3551a3e39fa18f30ed578349@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/02258b146843d98c789009f514aca96a@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/02258b146843d98c789009f514aca96a@2x.png deleted file mode 100644 index c455292..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/02258b146843d98c789009f514aca96a@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/02258b146843d98c789009f514aca96a@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/02258b146843d98c789009f514aca96a@3x.png deleted file mode 100644 index 079ed45..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/02258b146843d98c789009f514aca96a@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/027d25a2b24dc3c8f44efc5440ea3eb0@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/027d25a2b24dc3c8f44efc5440ea3eb0@2x.webp deleted file mode 100644 index fd45899..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/027d25a2b24dc3c8f44efc5440ea3eb0@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/027d25a2b24dc3c8f44efc5440ea3eb0@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/027d25a2b24dc3c8f44efc5440ea3eb0@3x.webp deleted file mode 100644 index d01cb35..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/027d25a2b24dc3c8f44efc5440ea3eb0@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/028a8c213144c7603f5e2b971cbfd8d5@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/028a8c213144c7603f5e2b971cbfd8d5@2x.webp deleted file mode 100644 index 4185a66..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/028a8c213144c7603f5e2b971cbfd8d5@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/028a8c213144c7603f5e2b971cbfd8d5@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/028a8c213144c7603f5e2b971cbfd8d5@3x.webp deleted file mode 100644 index 04081e2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/028a8c213144c7603f5e2b971cbfd8d5@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/02e030d22ab860261b9f27bd5eaaaebe@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/02e030d22ab860261b9f27bd5eaaaebe@2x.webp deleted file mode 100644 index 992153d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/02e030d22ab860261b9f27bd5eaaaebe@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/02e030d22ab860261b9f27bd5eaaaebe@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/02e030d22ab860261b9f27bd5eaaaebe@3x.webp deleted file mode 100644 index 2ac2da5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/02e030d22ab860261b9f27bd5eaaaebe@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/04343d706f96a477c6ec6f79b82e35d4@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/04343d706f96a477c6ec6f79b82e35d4@2x.webp deleted file mode 100644 index 71b6929..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/04343d706f96a477c6ec6f79b82e35d4@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/04343d706f96a477c6ec6f79b82e35d4@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/04343d706f96a477c6ec6f79b82e35d4@3x.webp deleted file mode 100644 index 1efcf18..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/04343d706f96a477c6ec6f79b82e35d4@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/045d05ddc2fcf660b1b2983dc60e89f4@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/045d05ddc2fcf660b1b2983dc60e89f4@2x.png deleted file mode 100644 index b95c701..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/045d05ddc2fcf660b1b2983dc60e89f4@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/045d05ddc2fcf660b1b2983dc60e89f4@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/045d05ddc2fcf660b1b2983dc60e89f4@3x.png deleted file mode 100644 index 3ac100e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/045d05ddc2fcf660b1b2983dc60e89f4@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0517872bd9a830e2e006296fe011757d@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0517872bd9a830e2e006296fe011757d@2x.png deleted file mode 100644 index 15bf180..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0517872bd9a830e2e006296fe011757d@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0517872bd9a830e2e006296fe011757d@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0517872bd9a830e2e006296fe011757d@3x.png deleted file mode 100644 index ffe2735..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0517872bd9a830e2e006296fe011757d@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/055ae12b4672b23f6428b1be0ac37ad8@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/055ae12b4672b23f6428b1be0ac37ad8@2x.webp deleted file mode 100644 index 3ae5493..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/055ae12b4672b23f6428b1be0ac37ad8@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/055ae12b4672b23f6428b1be0ac37ad8@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/055ae12b4672b23f6428b1be0ac37ad8@3x.webp deleted file mode 100644 index e8a2536..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/055ae12b4672b23f6428b1be0ac37ad8@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/055ae12b4672b23f6428b1be0ac37ad8@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/055ae12b4672b23f6428b1be0ac37ad8@dark@2x.webp deleted file mode 100644 index 77a79a4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/055ae12b4672b23f6428b1be0ac37ad8@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/055ae12b4672b23f6428b1be0ac37ad8@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/055ae12b4672b23f6428b1be0ac37ad8@dark@3x.webp deleted file mode 100644 index a8680c2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/055ae12b4672b23f6428b1be0ac37ad8@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/05fee6af1402f1e21e37dc7e1e6bde2f@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/05fee6af1402f1e21e37dc7e1e6bde2f@2x.webp deleted file mode 100644 index d278900..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/05fee6af1402f1e21e37dc7e1e6bde2f@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/05fee6af1402f1e21e37dc7e1e6bde2f@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/05fee6af1402f1e21e37dc7e1e6bde2f@3x.webp deleted file mode 100644 index 8e500d0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/05fee6af1402f1e21e37dc7e1e6bde2f@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/07655950803c9452d996ce3a99ffc05a@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/07655950803c9452d996ce3a99ffc05a@2x.png deleted file mode 100644 index 35525c8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/07655950803c9452d996ce3a99ffc05a@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/07655950803c9452d996ce3a99ffc05a@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/07655950803c9452d996ce3a99ffc05a@3x.png deleted file mode 100644 index fd0817f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/07655950803c9452d996ce3a99ffc05a@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/07655950803c9452d996ce3a99ffc05a@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/07655950803c9452d996ce3a99ffc05a@dark@2x.png deleted file mode 100644 index 0d9051b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/07655950803c9452d996ce3a99ffc05a@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/07655950803c9452d996ce3a99ffc05a@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/07655950803c9452d996ce3a99ffc05a@dark@3x.png deleted file mode 100644 index c3f7925..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/07655950803c9452d996ce3a99ffc05a@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/07760669f65733ccb21d083cebf10015@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/07760669f65733ccb21d083cebf10015@2x.webp deleted file mode 100644 index 4a3b00e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/07760669f65733ccb21d083cebf10015@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/07760669f65733ccb21d083cebf10015@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/07760669f65733ccb21d083cebf10015@3x.webp deleted file mode 100644 index 111278f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/07760669f65733ccb21d083cebf10015@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/077773a61efe6cb4e20abd4cf302dd04@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/077773a61efe6cb4e20abd4cf302dd04@2x.webp deleted file mode 100644 index 6885209..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/077773a61efe6cb4e20abd4cf302dd04@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/077773a61efe6cb4e20abd4cf302dd04@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/077773a61efe6cb4e20abd4cf302dd04@3x.webp deleted file mode 100644 index d1a7028..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/077773a61efe6cb4e20abd4cf302dd04@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/077773a61efe6cb4e20abd4cf302dd04@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/077773a61efe6cb4e20abd4cf302dd04@dark@2x.webp deleted file mode 100644 index 8015b20..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/077773a61efe6cb4e20abd4cf302dd04@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/077773a61efe6cb4e20abd4cf302dd04@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/077773a61efe6cb4e20abd4cf302dd04@dark@3x.webp deleted file mode 100644 index f5de12b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/077773a61efe6cb4e20abd4cf302dd04@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/087b654548d8365253452d9ac102a61d@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/087b654548d8365253452d9ac102a61d@2x.png deleted file mode 100644 index a9b06f1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/087b654548d8365253452d9ac102a61d@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/087b654548d8365253452d9ac102a61d@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/087b654548d8365253452d9ac102a61d@3x.png deleted file mode 100644 index 82ecf5c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/087b654548d8365253452d9ac102a61d@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/087b654548d8365253452d9ac102a61d@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/087b654548d8365253452d9ac102a61d@dark@2x.png deleted file mode 100644 index 9986ee1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/087b654548d8365253452d9ac102a61d@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/087b654548d8365253452d9ac102a61d@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/087b654548d8365253452d9ac102a61d@dark@3x.png deleted file mode 100644 index e4b4394..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/087b654548d8365253452d9ac102a61d@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/08c894b329a86fce4180710af6db8b18@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/08c894b329a86fce4180710af6db8b18@2x.webp deleted file mode 100644 index 19a8ea0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/08c894b329a86fce4180710af6db8b18@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/08c894b329a86fce4180710af6db8b18@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/08c894b329a86fce4180710af6db8b18@3x.webp deleted file mode 100644 index 8fcf986..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/08c894b329a86fce4180710af6db8b18@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/090d908189e0e31ddccf937ce472688a@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/090d908189e0e31ddccf937ce472688a@2x.webp deleted file mode 100644 index c701d95..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/090d908189e0e31ddccf937ce472688a@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/090d908189e0e31ddccf937ce472688a@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/090d908189e0e31ddccf937ce472688a@3x.webp deleted file mode 100644 index 4e604ba..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/090d908189e0e31ddccf937ce472688a@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/09978ad2b2288eae691c650faa9d0363@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/09978ad2b2288eae691c650faa9d0363@2x.webp deleted file mode 100644 index c4fce98..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/09978ad2b2288eae691c650faa9d0363@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/09978ad2b2288eae691c650faa9d0363@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/09978ad2b2288eae691c650faa9d0363@3x.webp deleted file mode 100644 index c600a05..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/09978ad2b2288eae691c650faa9d0363@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0abc969c428c41203c6779024fa21418@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0abc969c428c41203c6779024fa21418@2x.webp deleted file mode 100644 index 9520451..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0abc969c428c41203c6779024fa21418@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0abc969c428c41203c6779024fa21418@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0abc969c428c41203c6779024fa21418@3x.webp deleted file mode 100644 index 578c648..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0abc969c428c41203c6779024fa21418@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0acad0ac37ffea35d7843e73cf3d15cc@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0acad0ac37ffea35d7843e73cf3d15cc@2x.webp deleted file mode 100644 index 22439bf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0acad0ac37ffea35d7843e73cf3d15cc@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0acad0ac37ffea35d7843e73cf3d15cc@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0acad0ac37ffea35d7843e73cf3d15cc@3x.webp deleted file mode 100644 index e1f6149..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0acad0ac37ffea35d7843e73cf3d15cc@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0ba76ed46ac5dd57d501708e690a2097@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0ba76ed46ac5dd57d501708e690a2097@2x.webp deleted file mode 100644 index 2549fab..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0ba76ed46ac5dd57d501708e690a2097@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0ba76ed46ac5dd57d501708e690a2097@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0ba76ed46ac5dd57d501708e690a2097@3x.webp deleted file mode 100644 index 74d22a4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0ba76ed46ac5dd57d501708e690a2097@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c05b7e01b5528d095ec3209cef85b89@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c05b7e01b5528d095ec3209cef85b89@2x.png deleted file mode 100644 index 7bd701f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c05b7e01b5528d095ec3209cef85b89@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c05b7e01b5528d095ec3209cef85b89@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c05b7e01b5528d095ec3209cef85b89@3x.png deleted file mode 100644 index dd609e4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c05b7e01b5528d095ec3209cef85b89@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c05b7e01b5528d095ec3209cef85b89@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c05b7e01b5528d095ec3209cef85b89@dark@2x.png deleted file mode 100644 index cdb80f9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c05b7e01b5528d095ec3209cef85b89@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c05b7e01b5528d095ec3209cef85b89@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c05b7e01b5528d095ec3209cef85b89@dark@3x.png deleted file mode 100644 index 27e2e0c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c05b7e01b5528d095ec3209cef85b89@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c5d9dc05f7dab8cd9be57b63bd438aa@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c5d9dc05f7dab8cd9be57b63bd438aa@2x.webp deleted file mode 100644 index e8c4ded..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c5d9dc05f7dab8cd9be57b63bd438aa@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c5d9dc05f7dab8cd9be57b63bd438aa@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c5d9dc05f7dab8cd9be57b63bd438aa@3x.webp deleted file mode 100644 index f872e92..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c5d9dc05f7dab8cd9be57b63bd438aa@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c5d9dc05f7dab8cd9be57b63bd438aa@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c5d9dc05f7dab8cd9be57b63bd438aa@dark@2x.webp deleted file mode 100644 index e1cf989..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c5d9dc05f7dab8cd9be57b63bd438aa@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c5d9dc05f7dab8cd9be57b63bd438aa@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c5d9dc05f7dab8cd9be57b63bd438aa@dark@3x.webp deleted file mode 100644 index b88720c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c5d9dc05f7dab8cd9be57b63bd438aa@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c778c73839e0d63eb5d5c590125b076@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c778c73839e0d63eb5d5c590125b076@2x.png deleted file mode 100644 index 1995c90..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c778c73839e0d63eb5d5c590125b076@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c778c73839e0d63eb5d5c590125b076@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c778c73839e0d63eb5d5c590125b076@3x.png deleted file mode 100644 index b8fc528..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c778c73839e0d63eb5d5c590125b076@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c778c73839e0d63eb5d5c590125b076@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c778c73839e0d63eb5d5c590125b076@dark@2x.png deleted file mode 100644 index 80462a6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c778c73839e0d63eb5d5c590125b076@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c778c73839e0d63eb5d5c590125b076@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c778c73839e0d63eb5d5c590125b076@dark@3x.png deleted file mode 100644 index bd4411a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c778c73839e0d63eb5d5c590125b076@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c7f3bf1fc35ab8b2aa4d10637715cb7@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c7f3bf1fc35ab8b2aa4d10637715cb7@2x.png deleted file mode 100644 index 27a14fc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c7f3bf1fc35ab8b2aa4d10637715cb7@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c7f3bf1fc35ab8b2aa4d10637715cb7@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c7f3bf1fc35ab8b2aa4d10637715cb7@3x.png deleted file mode 100644 index 4367955..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0c7f3bf1fc35ab8b2aa4d10637715cb7@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0ca3305ff45f5e70e48a94ae88ba934d@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0ca3305ff45f5e70e48a94ae88ba934d@2x.webp deleted file mode 100644 index da8c04a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0ca3305ff45f5e70e48a94ae88ba934d@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0ca3305ff45f5e70e48a94ae88ba934d@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0ca3305ff45f5e70e48a94ae88ba934d@3x.webp deleted file mode 100644 index 1ec0c6c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0ca3305ff45f5e70e48a94ae88ba934d@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0d2de15c7b7d19313a9f81b015acbcd2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0d2de15c7b7d19313a9f81b015acbcd2@2x.png deleted file mode 100644 index b29b79e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0d2de15c7b7d19313a9f81b015acbcd2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0d2de15c7b7d19313a9f81b015acbcd2@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0d2de15c7b7d19313a9f81b015acbcd2@3x.png deleted file mode 100644 index 261969a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0d2de15c7b7d19313a9f81b015acbcd2@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0dd83962dd369e6a4f5bf002c45eaf7c@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0dd83962dd369e6a4f5bf002c45eaf7c@2x.webp deleted file mode 100644 index f61ef53..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0dd83962dd369e6a4f5bf002c45eaf7c@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0dd83962dd369e6a4f5bf002c45eaf7c@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0dd83962dd369e6a4f5bf002c45eaf7c@3x.webp deleted file mode 100644 index 723bb79..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0dd83962dd369e6a4f5bf002c45eaf7c@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0ecaed8de2d3d497a8776cb44170181c@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0ecaed8de2d3d497a8776cb44170181c@2x.webp deleted file mode 100644 index 9d77fe6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0ecaed8de2d3d497a8776cb44170181c@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0ecaed8de2d3d497a8776cb44170181c@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0ecaed8de2d3d497a8776cb44170181c@3x.webp deleted file mode 100644 index 908e32c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0ecaed8de2d3d497a8776cb44170181c@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0f73530254a52fba9132572ca486c6da@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0f73530254a52fba9132572ca486c6da@2x.png deleted file mode 100644 index 880b962..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0f73530254a52fba9132572ca486c6da@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0f73530254a52fba9132572ca486c6da@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0f73530254a52fba9132572ca486c6da@3x.png deleted file mode 100644 index 07cdbaa..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0f73530254a52fba9132572ca486c6da@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0f73530254a52fba9132572ca486c6da@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0f73530254a52fba9132572ca486c6da@dark@2x.png deleted file mode 100644 index 37f2862..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0f73530254a52fba9132572ca486c6da@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0f73530254a52fba9132572ca486c6da@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0f73530254a52fba9132572ca486c6da@dark@3x.png deleted file mode 100644 index 9791b71..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0f73530254a52fba9132572ca486c6da@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0fc8cf6b318a2097de7ab645df021b7e@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0fc8cf6b318a2097de7ab645df021b7e@2x.png deleted file mode 100644 index 40e0a7c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0fc8cf6b318a2097de7ab645df021b7e@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0fc8cf6b318a2097de7ab645df021b7e@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0fc8cf6b318a2097de7ab645df021b7e@3x.png deleted file mode 100644 index e780ac1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0fc8cf6b318a2097de7ab645df021b7e@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0fc8cf6b318a2097de7ab645df021b7e@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0fc8cf6b318a2097de7ab645df021b7e@dark@2x.webp deleted file mode 100644 index 4b0032d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0fc8cf6b318a2097de7ab645df021b7e@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0fc8cf6b318a2097de7ab645df021b7e@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0fc8cf6b318a2097de7ab645df021b7e@dark@3x.webp deleted file mode 100644 index 1aa7af5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/0fc8cf6b318a2097de7ab645df021b7e@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1030787cfa228464173cb38a4946eabc@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1030787cfa228464173cb38a4946eabc@2x.png deleted file mode 100644 index 124d3c7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1030787cfa228464173cb38a4946eabc@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1030787cfa228464173cb38a4946eabc@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1030787cfa228464173cb38a4946eabc@3x.png deleted file mode 100644 index 4434268..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1030787cfa228464173cb38a4946eabc@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/103c30e2596dc22fa8b7526aceb6be16@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/103c30e2596dc22fa8b7526aceb6be16@2x.png deleted file mode 100644 index cc536aa..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/103c30e2596dc22fa8b7526aceb6be16@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/103c30e2596dc22fa8b7526aceb6be16@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/103c30e2596dc22fa8b7526aceb6be16@3x.png deleted file mode 100644 index 1cf1a1e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/103c30e2596dc22fa8b7526aceb6be16@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/103c30e2596dc22fa8b7526aceb6be16@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/103c30e2596dc22fa8b7526aceb6be16@dark@2x.png deleted file mode 100644 index a033cfe..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/103c30e2596dc22fa8b7526aceb6be16@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/103c30e2596dc22fa8b7526aceb6be16@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/103c30e2596dc22fa8b7526aceb6be16@dark@3x.png deleted file mode 100644 index 19e109f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/103c30e2596dc22fa8b7526aceb6be16@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/10ad4988408dbd1a15a757b0ed5d195a@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/10ad4988408dbd1a15a757b0ed5d195a@2x.webp deleted file mode 100644 index a3f892c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/10ad4988408dbd1a15a757b0ed5d195a@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/10ad4988408dbd1a15a757b0ed5d195a@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/10ad4988408dbd1a15a757b0ed5d195a@3x.webp deleted file mode 100644 index cca20c8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/10ad4988408dbd1a15a757b0ed5d195a@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/10ad4988408dbd1a15a757b0ed5d195a@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/10ad4988408dbd1a15a757b0ed5d195a@dark@2x.webp deleted file mode 100644 index 07c29df..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/10ad4988408dbd1a15a757b0ed5d195a@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/10ad4988408dbd1a15a757b0ed5d195a@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/10ad4988408dbd1a15a757b0ed5d195a@dark@3x.webp deleted file mode 100644 index 79ea7d5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/10ad4988408dbd1a15a757b0ed5d195a@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/11121a7da593cf7b5e34e85af27c49c9@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/11121a7da593cf7b5e34e85af27c49c9@2x.png deleted file mode 100644 index 8c88281..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/11121a7da593cf7b5e34e85af27c49c9@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/11121a7da593cf7b5e34e85af27c49c9@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/11121a7da593cf7b5e34e85af27c49c9@3x.png deleted file mode 100644 index d92491f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/11121a7da593cf7b5e34e85af27c49c9@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/11339fd17cef8f3ad4103bc7ff15bbbb@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/11339fd17cef8f3ad4103bc7ff15bbbb@2x.webp deleted file mode 100644 index 9227895..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/11339fd17cef8f3ad4103bc7ff15bbbb@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/11339fd17cef8f3ad4103bc7ff15bbbb@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/11339fd17cef8f3ad4103bc7ff15bbbb@3x.webp deleted file mode 100644 index a99e3df..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/11339fd17cef8f3ad4103bc7ff15bbbb@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/11339fd17cef8f3ad4103bc7ff15bbbb@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/11339fd17cef8f3ad4103bc7ff15bbbb@dark@2x.webp deleted file mode 100644 index b00597c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/11339fd17cef8f3ad4103bc7ff15bbbb@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/11339fd17cef8f3ad4103bc7ff15bbbb@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/11339fd17cef8f3ad4103bc7ff15bbbb@dark@3x.webp deleted file mode 100644 index 2239797..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/11339fd17cef8f3ad4103bc7ff15bbbb@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/11c525db83cfcd59bf0706ba64895fa5@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/11c525db83cfcd59bf0706ba64895fa5@2x.png deleted file mode 100644 index 23d136e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/11c525db83cfcd59bf0706ba64895fa5@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/11c525db83cfcd59bf0706ba64895fa5@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/11c525db83cfcd59bf0706ba64895fa5@3x.png deleted file mode 100644 index efefc9b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/11c525db83cfcd59bf0706ba64895fa5@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/127777d480526d35dedb89afdbd8bfc2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/127777d480526d35dedb89afdbd8bfc2@2x.png deleted file mode 100644 index 7a5645a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/127777d480526d35dedb89afdbd8bfc2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/127777d480526d35dedb89afdbd8bfc2@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/127777d480526d35dedb89afdbd8bfc2@3x.png deleted file mode 100644 index b7950d6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/127777d480526d35dedb89afdbd8bfc2@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/129db31547bcf836dde4d87aa33cdeca@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/129db31547bcf836dde4d87aa33cdeca@2x.webp deleted file mode 100644 index de55c76..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/129db31547bcf836dde4d87aa33cdeca@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/129db31547bcf836dde4d87aa33cdeca@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/129db31547bcf836dde4d87aa33cdeca@3x.webp deleted file mode 100644 index 4ca98e5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/129db31547bcf836dde4d87aa33cdeca@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/139faaac665f28845ed995e7070f27e8@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/139faaac665f28845ed995e7070f27e8@2x.webp deleted file mode 100644 index 15822d1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/139faaac665f28845ed995e7070f27e8@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/139faaac665f28845ed995e7070f27e8@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/139faaac665f28845ed995e7070f27e8@3x.webp deleted file mode 100644 index 5ceafa6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/139faaac665f28845ed995e7070f27e8@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/144bc75bf968a3757ea9db8f4c2fe614@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/144bc75bf968a3757ea9db8f4c2fe614@2x.webp deleted file mode 100644 index 1d38d00..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/144bc75bf968a3757ea9db8f4c2fe614@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/144bc75bf968a3757ea9db8f4c2fe614@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/144bc75bf968a3757ea9db8f4c2fe614@3x.webp deleted file mode 100644 index 8d9a9ed..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/144bc75bf968a3757ea9db8f4c2fe614@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/14af8b8bc31df7a41c8a854a9c93d69f@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/14af8b8bc31df7a41c8a854a9c93d69f@2x.webp deleted file mode 100644 index 39d19a7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/14af8b8bc31df7a41c8a854a9c93d69f@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/14af8b8bc31df7a41c8a854a9c93d69f@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/14af8b8bc31df7a41c8a854a9c93d69f@3x.webp deleted file mode 100644 index d1bb294..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/14af8b8bc31df7a41c8a854a9c93d69f@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/14f041ac7842b2d4fb6edf7abc53cbd6@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/14f041ac7842b2d4fb6edf7abc53cbd6@2x.webp deleted file mode 100644 index 85c24fc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/14f041ac7842b2d4fb6edf7abc53cbd6@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/14f041ac7842b2d4fb6edf7abc53cbd6@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/14f041ac7842b2d4fb6edf7abc53cbd6@3x.webp deleted file mode 100644 index eec513d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/14f041ac7842b2d4fb6edf7abc53cbd6@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/15b511dad9f2917d0392c994750d96f6@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/15b511dad9f2917d0392c994750d96f6@2x.png deleted file mode 100644 index afccf68..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/15b511dad9f2917d0392c994750d96f6@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/15b511dad9f2917d0392c994750d96f6@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/15b511dad9f2917d0392c994750d96f6@3x.png deleted file mode 100644 index 99eaecd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/15b511dad9f2917d0392c994750d96f6@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/15e2f202b37cc3a3fe014a51e183e55c@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/15e2f202b37cc3a3fe014a51e183e55c@2x.png deleted file mode 100644 index 3d075d9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/15e2f202b37cc3a3fe014a51e183e55c@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/15e2f202b37cc3a3fe014a51e183e55c@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/15e2f202b37cc3a3fe014a51e183e55c@3x.png deleted file mode 100644 index 32ac702..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/15e2f202b37cc3a3fe014a51e183e55c@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/16776e5e85b41f8f0fa10e01015fbcfb@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/16776e5e85b41f8f0fa10e01015fbcfb@2x.png deleted file mode 100644 index 9a07b91..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/16776e5e85b41f8f0fa10e01015fbcfb@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/16776e5e85b41f8f0fa10e01015fbcfb@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/16776e5e85b41f8f0fa10e01015fbcfb@3x.png deleted file mode 100644 index 6bbcf08..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/16776e5e85b41f8f0fa10e01015fbcfb@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1680866e0ba53cda422a36c87b89d14b@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1680866e0ba53cda422a36c87b89d14b@2x.webp deleted file mode 100644 index c0c556d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1680866e0ba53cda422a36c87b89d14b@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1680866e0ba53cda422a36c87b89d14b@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1680866e0ba53cda422a36c87b89d14b@3x.webp deleted file mode 100644 index 75cd526..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1680866e0ba53cda422a36c87b89d14b@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/16d474188cd65f89f018e3a56984b913@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/16d474188cd65f89f018e3a56984b913@2x.webp deleted file mode 100644 index 27e6407..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/16d474188cd65f89f018e3a56984b913@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/16d474188cd65f89f018e3a56984b913@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/16d474188cd65f89f018e3a56984b913@3x.webp deleted file mode 100644 index 6cc2783..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/16d474188cd65f89f018e3a56984b913@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/17736889a31f2585a7adb1d02ec81e81@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/17736889a31f2585a7adb1d02ec81e81@2x.webp deleted file mode 100644 index 512dcd4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/17736889a31f2585a7adb1d02ec81e81@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/17736889a31f2585a7adb1d02ec81e81@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/17736889a31f2585a7adb1d02ec81e81@3x.webp deleted file mode 100644 index 5be4f2e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/17736889a31f2585a7adb1d02ec81e81@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/17736889a31f2585a7adb1d02ec81e81@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/17736889a31f2585a7adb1d02ec81e81@dark@2x.webp deleted file mode 100644 index bd49ece..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/17736889a31f2585a7adb1d02ec81e81@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/17736889a31f2585a7adb1d02ec81e81@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/17736889a31f2585a7adb1d02ec81e81@dark@3x.webp deleted file mode 100644 index 9cbd7e2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/17736889a31f2585a7adb1d02ec81e81@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/177a2e935dbfd7a16f50628558666534@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/177a2e935dbfd7a16f50628558666534@2x.webp deleted file mode 100644 index 40df7b9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/177a2e935dbfd7a16f50628558666534@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/177a2e935dbfd7a16f50628558666534@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/177a2e935dbfd7a16f50628558666534@3x.webp deleted file mode 100644 index d7b5fb8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/177a2e935dbfd7a16f50628558666534@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/179bb23495c7deae023b9372c0ddff7e@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/179bb23495c7deae023b9372c0ddff7e@2x.webp deleted file mode 100644 index a2c5974..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/179bb23495c7deae023b9372c0ddff7e@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/179bb23495c7deae023b9372c0ddff7e@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/179bb23495c7deae023b9372c0ddff7e@3x.webp deleted file mode 100644 index e9f0ca8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/179bb23495c7deae023b9372c0ddff7e@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/182aa732400bf50e0db206ec6da8221a@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/182aa732400bf50e0db206ec6da8221a@2x.webp deleted file mode 100644 index 6e12aa2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/182aa732400bf50e0db206ec6da8221a@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/182aa732400bf50e0db206ec6da8221a@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/182aa732400bf50e0db206ec6da8221a@3x.webp deleted file mode 100644 index 7e53de6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/182aa732400bf50e0db206ec6da8221a@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/187fbc5044424471bec6a6304209ebfb@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/187fbc5044424471bec6a6304209ebfb@2x.webp deleted file mode 100644 index 20870d1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/187fbc5044424471bec6a6304209ebfb@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/187fbc5044424471bec6a6304209ebfb@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/187fbc5044424471bec6a6304209ebfb@3x.webp deleted file mode 100644 index 4e40280..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/187fbc5044424471bec6a6304209ebfb@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/18f8ffbb0fa94a8da9fc0d57fe6f2004@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/18f8ffbb0fa94a8da9fc0d57fe6f2004@2x.png deleted file mode 100644 index 09f723b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/18f8ffbb0fa94a8da9fc0d57fe6f2004@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/18f8ffbb0fa94a8da9fc0d57fe6f2004@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/18f8ffbb0fa94a8da9fc0d57fe6f2004@3x.png deleted file mode 100644 index 8a7cab3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/18f8ffbb0fa94a8da9fc0d57fe6f2004@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/18f8ffbb0fa94a8da9fc0d57fe6f2004@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/18f8ffbb0fa94a8da9fc0d57fe6f2004@dark@2x.png deleted file mode 100644 index ea23153..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/18f8ffbb0fa94a8da9fc0d57fe6f2004@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/18f8ffbb0fa94a8da9fc0d57fe6f2004@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/18f8ffbb0fa94a8da9fc0d57fe6f2004@dark@3x.png deleted file mode 100644 index 0562519..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/18f8ffbb0fa94a8da9fc0d57fe6f2004@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1939f579d4aad5f0de31d85dd0fb52a8@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1939f579d4aad5f0de31d85dd0fb52a8@2x.webp deleted file mode 100644 index 8292914..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1939f579d4aad5f0de31d85dd0fb52a8@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1939f579d4aad5f0de31d85dd0fb52a8@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1939f579d4aad5f0de31d85dd0fb52a8@3x.webp deleted file mode 100644 index d98d14d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1939f579d4aad5f0de31d85dd0fb52a8@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1944bfe804bec266843da35d7ca1300e@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1944bfe804bec266843da35d7ca1300e@2x.webp deleted file mode 100644 index f663735..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1944bfe804bec266843da35d7ca1300e@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1944bfe804bec266843da35d7ca1300e@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1944bfe804bec266843da35d7ca1300e@3x.webp deleted file mode 100644 index da44ce0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1944bfe804bec266843da35d7ca1300e@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/196bfbad8455ae17a4d82fb84a71337e@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/196bfbad8455ae17a4d82fb84a71337e@2x.webp deleted file mode 100644 index 7d1a273..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/196bfbad8455ae17a4d82fb84a71337e@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/196bfbad8455ae17a4d82fb84a71337e@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/196bfbad8455ae17a4d82fb84a71337e@3x.webp deleted file mode 100644 index 4710f72..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/196bfbad8455ae17a4d82fb84a71337e@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/198b5984fe82b67fd9c7958f55fb7ed0@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/198b5984fe82b67fd9c7958f55fb7ed0@2x.png deleted file mode 100644 index b5fad3f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/198b5984fe82b67fd9c7958f55fb7ed0@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/198b5984fe82b67fd9c7958f55fb7ed0@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/198b5984fe82b67fd9c7958f55fb7ed0@3x.png deleted file mode 100644 index 6154f41..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/198b5984fe82b67fd9c7958f55fb7ed0@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/19e1665c3391a750d09691fc619eeb60@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/19e1665c3391a750d09691fc619eeb60@2x.png deleted file mode 100644 index 1a3c367..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/19e1665c3391a750d09691fc619eeb60@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/19e1665c3391a750d09691fc619eeb60@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/19e1665c3391a750d09691fc619eeb60@3x.png deleted file mode 100644 index 81b809a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/19e1665c3391a750d09691fc619eeb60@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/19fedb8088953b27998f936637eb275d@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/19fedb8088953b27998f936637eb275d@2x.webp deleted file mode 100644 index eb9026b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/19fedb8088953b27998f936637eb275d@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/19fedb8088953b27998f936637eb275d@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/19fedb8088953b27998f936637eb275d@3x.webp deleted file mode 100644 index dbeacfd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/19fedb8088953b27998f936637eb275d@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1a01b5f6d62e49925dc26e23e6694650@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1a01b5f6d62e49925dc26e23e6694650@2x.webp deleted file mode 100644 index c5ded52..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1a01b5f6d62e49925dc26e23e6694650@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1a01b5f6d62e49925dc26e23e6694650@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1a01b5f6d62e49925dc26e23e6694650@3x.webp deleted file mode 100644 index a6eb19e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1a01b5f6d62e49925dc26e23e6694650@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1a1d5ebcdc9a5db268d11084cc32399f@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1a1d5ebcdc9a5db268d11084cc32399f@2x.webp deleted file mode 100644 index 30dda2f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1a1d5ebcdc9a5db268d11084cc32399f@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1a1d5ebcdc9a5db268d11084cc32399f@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1a1d5ebcdc9a5db268d11084cc32399f@3x.webp deleted file mode 100644 index 63ebc63..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1a1d5ebcdc9a5db268d11084cc32399f@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1a9cf399b47dab33a8e66f7eefad974f@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1a9cf399b47dab33a8e66f7eefad974f@2x.webp deleted file mode 100644 index e4bd11c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1a9cf399b47dab33a8e66f7eefad974f@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1a9cf399b47dab33a8e66f7eefad974f@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1a9cf399b47dab33a8e66f7eefad974f@3x.webp deleted file mode 100644 index b26d55e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1a9cf399b47dab33a8e66f7eefad974f@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1be21103e8f7fee3ac2ed18d9656fcf3@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1be21103e8f7fee3ac2ed18d9656fcf3@2x.png deleted file mode 100644 index 483ef6c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1be21103e8f7fee3ac2ed18d9656fcf3@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1be21103e8f7fee3ac2ed18d9656fcf3@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1be21103e8f7fee3ac2ed18d9656fcf3@3x.png deleted file mode 100644 index f13ce9c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1be21103e8f7fee3ac2ed18d9656fcf3@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1c2b4d11de7a5dcdbcadc51ae98298bc@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1c2b4d11de7a5dcdbcadc51ae98298bc@2x.png deleted file mode 100644 index c6acc0d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1c2b4d11de7a5dcdbcadc51ae98298bc@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1c2b4d11de7a5dcdbcadc51ae98298bc@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1c2b4d11de7a5dcdbcadc51ae98298bc@3x.png deleted file mode 100644 index 769bb61..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1c2b4d11de7a5dcdbcadc51ae98298bc@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1c428464a9964665d2ec8d1b14d81c0e@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1c428464a9964665d2ec8d1b14d81c0e@2x.webp deleted file mode 100644 index 7c0876d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1c428464a9964665d2ec8d1b14d81c0e@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1c428464a9964665d2ec8d1b14d81c0e@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1c428464a9964665d2ec8d1b14d81c0e@3x.webp deleted file mode 100644 index ca2d45c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1c428464a9964665d2ec8d1b14d81c0e@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1c42b168c43b7dce2b32e0c6489493a8@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1c42b168c43b7dce2b32e0c6489493a8@2x.png deleted file mode 100644 index 0ff4710..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1c42b168c43b7dce2b32e0c6489493a8@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1c42b168c43b7dce2b32e0c6489493a8@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1c42b168c43b7dce2b32e0c6489493a8@3x.png deleted file mode 100644 index b378c53..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1c42b168c43b7dce2b32e0c6489493a8@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1ca6653004e6839fab91bc35ab9976b0@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1ca6653004e6839fab91bc35ab9976b0@2x.webp deleted file mode 100644 index 2ef19b2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1ca6653004e6839fab91bc35ab9976b0@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1ca6653004e6839fab91bc35ab9976b0@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1ca6653004e6839fab91bc35ab9976b0@3x.webp deleted file mode 100644 index d540e79..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1ca6653004e6839fab91bc35ab9976b0@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1e44f305ccbd3ca047393e01cd2ae365@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1e44f305ccbd3ca047393e01cd2ae365@2x.png deleted file mode 100644 index 3b1f170..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1e44f305ccbd3ca047393e01cd2ae365@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1e44f305ccbd3ca047393e01cd2ae365@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1e44f305ccbd3ca047393e01cd2ae365@3x.png deleted file mode 100644 index 048f173..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1e44f305ccbd3ca047393e01cd2ae365@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1f0477c7aa139d99816e7ab07dd4fa60@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1f0477c7aa139d99816e7ab07dd4fa60@2x.webp deleted file mode 100644 index 4a3928a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1f0477c7aa139d99816e7ab07dd4fa60@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1f0477c7aa139d99816e7ab07dd4fa60@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1f0477c7aa139d99816e7ab07dd4fa60@3x.webp deleted file mode 100644 index 624c478..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1f0477c7aa139d99816e7ab07dd4fa60@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1fc3f1d14d1b24ba706c4e2311bf19d8@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1fc3f1d14d1b24ba706c4e2311bf19d8@2x.png deleted file mode 100644 index 5c06e04..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1fc3f1d14d1b24ba706c4e2311bf19d8@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1fc3f1d14d1b24ba706c4e2311bf19d8@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1fc3f1d14d1b24ba706c4e2311bf19d8@3x.png deleted file mode 100644 index f8cb3ad..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/1fc3f1d14d1b24ba706c4e2311bf19d8@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/20371dd5051c6e7f6cb2f71de96c0c6a@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/20371dd5051c6e7f6cb2f71de96c0c6a@2x.webp deleted file mode 100644 index 22ea158..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/20371dd5051c6e7f6cb2f71de96c0c6a@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/20371dd5051c6e7f6cb2f71de96c0c6a@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/20371dd5051c6e7f6cb2f71de96c0c6a@3x.webp deleted file mode 100644 index 18860e2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/20371dd5051c6e7f6cb2f71de96c0c6a@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/20485e5347136a184421b4fc03fce4cf@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/20485e5347136a184421b4fc03fce4cf@2x.png deleted file mode 100644 index 4c68b8d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/20485e5347136a184421b4fc03fce4cf@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/20485e5347136a184421b4fc03fce4cf@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/20485e5347136a184421b4fc03fce4cf@3x.png deleted file mode 100644 index 4e31d34..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/20485e5347136a184421b4fc03fce4cf@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/20e080796622db17d90056821acf7f48@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/20e080796622db17d90056821acf7f48@2x.webp deleted file mode 100644 index e0e4e94..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/20e080796622db17d90056821acf7f48@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/20e080796622db17d90056821acf7f48@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/20e080796622db17d90056821acf7f48@3x.webp deleted file mode 100644 index 895f37f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/20e080796622db17d90056821acf7f48@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/21656018544d3886116be63863ef2817@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/21656018544d3886116be63863ef2817@2x.webp deleted file mode 100644 index 51c96e5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/21656018544d3886116be63863ef2817@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/21656018544d3886116be63863ef2817@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/21656018544d3886116be63863ef2817@3x.webp deleted file mode 100644 index 13a6a73..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/21656018544d3886116be63863ef2817@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22747f34eed23ac4f269f44d9d1a2ea5@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22747f34eed23ac4f269f44d9d1a2ea5@2x.png deleted file mode 100644 index d91d81c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22747f34eed23ac4f269f44d9d1a2ea5@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22747f34eed23ac4f269f44d9d1a2ea5@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22747f34eed23ac4f269f44d9d1a2ea5@3x.png deleted file mode 100644 index a2ca8d4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22747f34eed23ac4f269f44d9d1a2ea5@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/227dc579dbbade0bd0100b4e2eae3fa9@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/227dc579dbbade0bd0100b4e2eae3fa9@2x.png deleted file mode 100644 index 6da80e4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/227dc579dbbade0bd0100b4e2eae3fa9@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/227dc579dbbade0bd0100b4e2eae3fa9@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/227dc579dbbade0bd0100b4e2eae3fa9@3x.png deleted file mode 100644 index a6c6d79..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/227dc579dbbade0bd0100b4e2eae3fa9@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22900c397cbd099a9f8e3b5026d738a5@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22900c397cbd099a9f8e3b5026d738a5@2x.webp deleted file mode 100644 index 7792f36..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22900c397cbd099a9f8e3b5026d738a5@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22900c397cbd099a9f8e3b5026d738a5@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22900c397cbd099a9f8e3b5026d738a5@3x.webp deleted file mode 100644 index 8265269..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22900c397cbd099a9f8e3b5026d738a5@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22900c397cbd099a9f8e3b5026d738a5@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22900c397cbd099a9f8e3b5026d738a5@dark@2x.webp deleted file mode 100644 index ca873af..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22900c397cbd099a9f8e3b5026d738a5@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22900c397cbd099a9f8e3b5026d738a5@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22900c397cbd099a9f8e3b5026d738a5@dark@3x.webp deleted file mode 100644 index c3d5336..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22900c397cbd099a9f8e3b5026d738a5@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22fdb585b4fa2a7e869be0e5d24c7c5b@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22fdb585b4fa2a7e869be0e5d24c7c5b@2x.png deleted file mode 100644 index 4595ab0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22fdb585b4fa2a7e869be0e5d24c7c5b@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22fdb585b4fa2a7e869be0e5d24c7c5b@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22fdb585b4fa2a7e869be0e5d24c7c5b@3x.png deleted file mode 100644 index 86c7795..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22fdb585b4fa2a7e869be0e5d24c7c5b@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22fdb585b4fa2a7e869be0e5d24c7c5b@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22fdb585b4fa2a7e869be0e5d24c7c5b@dark@2x.png deleted file mode 100644 index 3ec4df9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22fdb585b4fa2a7e869be0e5d24c7c5b@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22fdb585b4fa2a7e869be0e5d24c7c5b@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22fdb585b4fa2a7e869be0e5d24c7c5b@dark@3x.png deleted file mode 100644 index ff42627..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/22fdb585b4fa2a7e869be0e5d24c7c5b@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/23e60d52bd85de596c1cb5b346b22052@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/23e60d52bd85de596c1cb5b346b22052@2x.webp deleted file mode 100644 index c023dfe..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/23e60d52bd85de596c1cb5b346b22052@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/23e60d52bd85de596c1cb5b346b22052@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/23e60d52bd85de596c1cb5b346b22052@3x.webp deleted file mode 100644 index 1cb99b2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/23e60d52bd85de596c1cb5b346b22052@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/24d9b14be942dcef31393b9b6c0a6426@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/24d9b14be942dcef31393b9b6c0a6426@2x.webp deleted file mode 100644 index ba9e4ff..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/24d9b14be942dcef31393b9b6c0a6426@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/24d9b14be942dcef31393b9b6c0a6426@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/24d9b14be942dcef31393b9b6c0a6426@3x.webp deleted file mode 100644 index 9d658ad..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/24d9b14be942dcef31393b9b6c0a6426@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/24eec37393234be160503a6db3c6d36a@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/24eec37393234be160503a6db3c6d36a@2x.webp deleted file mode 100644 index 3c52513..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/24eec37393234be160503a6db3c6d36a@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/24eec37393234be160503a6db3c6d36a@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/24eec37393234be160503a6db3c6d36a@3x.webp deleted file mode 100644 index ca4e08b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/24eec37393234be160503a6db3c6d36a@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25026168bd0740af7ed6a3aeaa36d3dd@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25026168bd0740af7ed6a3aeaa36d3dd@2x.png deleted file mode 100644 index 88f3ee6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25026168bd0740af7ed6a3aeaa36d3dd@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25026168bd0740af7ed6a3aeaa36d3dd@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25026168bd0740af7ed6a3aeaa36d3dd@3x.png deleted file mode 100644 index 7336d25..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25026168bd0740af7ed6a3aeaa36d3dd@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25026168bd0740af7ed6a3aeaa36d3dd@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25026168bd0740af7ed6a3aeaa36d3dd@dark@2x.png deleted file mode 100644 index 47af278..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25026168bd0740af7ed6a3aeaa36d3dd@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25026168bd0740af7ed6a3aeaa36d3dd@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25026168bd0740af7ed6a3aeaa36d3dd@dark@3x.png deleted file mode 100644 index 1c31975..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25026168bd0740af7ed6a3aeaa36d3dd@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25360e162e9b1965b49d2b4a7edd6ff7@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25360e162e9b1965b49d2b4a7edd6ff7@2x.webp deleted file mode 100644 index 23828aa..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25360e162e9b1965b49d2b4a7edd6ff7@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25360e162e9b1965b49d2b4a7edd6ff7@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25360e162e9b1965b49d2b4a7edd6ff7@3x.webp deleted file mode 100644 index bc6a0ba..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25360e162e9b1965b49d2b4a7edd6ff7@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/253b4ea273ba6d7c861de15acb8ccdf3@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/253b4ea273ba6d7c861de15acb8ccdf3@2x.webp deleted file mode 100644 index d828829..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/253b4ea273ba6d7c861de15acb8ccdf3@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/253b4ea273ba6d7c861de15acb8ccdf3@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/253b4ea273ba6d7c861de15acb8ccdf3@3x.webp deleted file mode 100644 index 973969d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/253b4ea273ba6d7c861de15acb8ccdf3@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2560ee737f038bc21d3aeecb77876481@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2560ee737f038bc21d3aeecb77876481@2x.png deleted file mode 100644 index 8eae7a6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2560ee737f038bc21d3aeecb77876481@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2560ee737f038bc21d3aeecb77876481@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2560ee737f038bc21d3aeecb77876481@3x.png deleted file mode 100644 index 6680ee0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2560ee737f038bc21d3aeecb77876481@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2560ee737f038bc21d3aeecb77876481@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2560ee737f038bc21d3aeecb77876481@dark@2x.png deleted file mode 100644 index 80c694e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2560ee737f038bc21d3aeecb77876481@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2560ee737f038bc21d3aeecb77876481@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2560ee737f038bc21d3aeecb77876481@dark@3x.png deleted file mode 100644 index 3965ec0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2560ee737f038bc21d3aeecb77876481@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/258f69f16ecdba4623c48a0daa384ab9@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/258f69f16ecdba4623c48a0daa384ab9@2x.webp deleted file mode 100644 index 334a6ea..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/258f69f16ecdba4623c48a0daa384ab9@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/258f69f16ecdba4623c48a0daa384ab9@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/258f69f16ecdba4623c48a0daa384ab9@3x.webp deleted file mode 100644 index e93e9d6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/258f69f16ecdba4623c48a0daa384ab9@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25b4b06c4d19b76ce4c294b5aa66e609@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25b4b06c4d19b76ce4c294b5aa66e609@2x.webp deleted file mode 100644 index 5fe85ee..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25b4b06c4d19b76ce4c294b5aa66e609@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25b4b06c4d19b76ce4c294b5aa66e609@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25b4b06c4d19b76ce4c294b5aa66e609@3x.webp deleted file mode 100644 index b36f83f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25b4b06c4d19b76ce4c294b5aa66e609@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25b4b06c4d19b76ce4c294b5aa66e609@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25b4b06c4d19b76ce4c294b5aa66e609@dark@2x.webp deleted file mode 100644 index 43bbf6c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25b4b06c4d19b76ce4c294b5aa66e609@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25b4b06c4d19b76ce4c294b5aa66e609@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25b4b06c4d19b76ce4c294b5aa66e609@dark@3x.webp deleted file mode 100644 index 43bbf6c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/25b4b06c4d19b76ce4c294b5aa66e609@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/269c9f9334aacc685480c5a8c422f2a2@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/269c9f9334aacc685480c5a8c422f2a2@2x.webp deleted file mode 100644 index 030377b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/269c9f9334aacc685480c5a8c422f2a2@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/269c9f9334aacc685480c5a8c422f2a2@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/269c9f9334aacc685480c5a8c422f2a2@3x.webp deleted file mode 100644 index 6bb3dde..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/269c9f9334aacc685480c5a8c422f2a2@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/26a3a0e2b82c34729fb930761f60ed53@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/26a3a0e2b82c34729fb930761f60ed53@2x.png deleted file mode 100644 index 9c4738a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/26a3a0e2b82c34729fb930761f60ed53@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/26a3a0e2b82c34729fb930761f60ed53@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/26a3a0e2b82c34729fb930761f60ed53@3x.png deleted file mode 100644 index 8b433e7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/26a3a0e2b82c34729fb930761f60ed53@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/26b0553c575ad66167c10f9f756b6742@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/26b0553c575ad66167c10f9f756b6742@2x.png deleted file mode 100644 index 4d48cbb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/26b0553c575ad66167c10f9f756b6742@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/26b0553c575ad66167c10f9f756b6742@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/26b0553c575ad66167c10f9f756b6742@3x.png deleted file mode 100644 index d44f91f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/26b0553c575ad66167c10f9f756b6742@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/26c616c2e5ae625a63502b17b25f634d@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/26c616c2e5ae625a63502b17b25f634d@2x.webp deleted file mode 100644 index a612810..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/26c616c2e5ae625a63502b17b25f634d@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/26c616c2e5ae625a63502b17b25f634d@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/26c616c2e5ae625a63502b17b25f634d@3x.webp deleted file mode 100644 index b53432b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/26c616c2e5ae625a63502b17b25f634d@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/26ec149ca3308ecbaad14bd1ad9e44f5@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/26ec149ca3308ecbaad14bd1ad9e44f5@2x.webp deleted file mode 100644 index 6b985e8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/26ec149ca3308ecbaad14bd1ad9e44f5@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/26ec149ca3308ecbaad14bd1ad9e44f5@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/26ec149ca3308ecbaad14bd1ad9e44f5@3x.webp deleted file mode 100644 index dc9cf9b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/26ec149ca3308ecbaad14bd1ad9e44f5@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/27585475e3384a586034ac4f0b825231@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/27585475e3384a586034ac4f0b825231@2x.webp deleted file mode 100644 index b314228..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/27585475e3384a586034ac4f0b825231@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/27585475e3384a586034ac4f0b825231@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/27585475e3384a586034ac4f0b825231@3x.webp deleted file mode 100644 index 0cc93c8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/27585475e3384a586034ac4f0b825231@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/276af6af5625ac6a090fcbdb41a931b1@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/276af6af5625ac6a090fcbdb41a931b1@2x.webp deleted file mode 100644 index ed79585..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/276af6af5625ac6a090fcbdb41a931b1@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/276af6af5625ac6a090fcbdb41a931b1@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/276af6af5625ac6a090fcbdb41a931b1@3x.webp deleted file mode 100644 index 9acd690..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/276af6af5625ac6a090fcbdb41a931b1@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/276af6af5625ac6a090fcbdb41a931b1@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/276af6af5625ac6a090fcbdb41a931b1@dark@2x.webp deleted file mode 100644 index 97967ab..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/276af6af5625ac6a090fcbdb41a931b1@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/276af6af5625ac6a090fcbdb41a931b1@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/276af6af5625ac6a090fcbdb41a931b1@dark@3x.webp deleted file mode 100644 index fef8279..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/276af6af5625ac6a090fcbdb41a931b1@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/27d2a6a25d7683d7704f47a864af0c74@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/27d2a6a25d7683d7704f47a864af0c74@2x.webp deleted file mode 100644 index 5c44327..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/27d2a6a25d7683d7704f47a864af0c74@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/27d2a6a25d7683d7704f47a864af0c74@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/27d2a6a25d7683d7704f47a864af0c74@3x.webp deleted file mode 100644 index 66aefd0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/27d2a6a25d7683d7704f47a864af0c74@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/27e2813f5cd9dbdd6d9738776f54d9c2@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/27e2813f5cd9dbdd6d9738776f54d9c2@2x.webp deleted file mode 100644 index d408d1c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/27e2813f5cd9dbdd6d9738776f54d9c2@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/27e2813f5cd9dbdd6d9738776f54d9c2@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/27e2813f5cd9dbdd6d9738776f54d9c2@3x.webp deleted file mode 100644 index a3cd5a8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/27e2813f5cd9dbdd6d9738776f54d9c2@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/281f3564a1195cf8bbb7e056f175ee1a@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/281f3564a1195cf8bbb7e056f175ee1a@2x.webp deleted file mode 100644 index 8c22404..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/281f3564a1195cf8bbb7e056f175ee1a@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/281f3564a1195cf8bbb7e056f175ee1a@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/281f3564a1195cf8bbb7e056f175ee1a@3x.webp deleted file mode 100644 index e54e200..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/281f3564a1195cf8bbb7e056f175ee1a@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/284d32a43a70f3156048e6e31c86ddf7@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/284d32a43a70f3156048e6e31c86ddf7@2x.webp deleted file mode 100644 index 29ff3b5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/284d32a43a70f3156048e6e31c86ddf7@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/284d32a43a70f3156048e6e31c86ddf7@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/284d32a43a70f3156048e6e31c86ddf7@3x.webp deleted file mode 100644 index f264834..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/284d32a43a70f3156048e6e31c86ddf7@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/28b934befbc86880f58e9f093f77e786@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/28b934befbc86880f58e9f093f77e786@2x.png deleted file mode 100644 index 8209132..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/28b934befbc86880f58e9f093f77e786@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/28b934befbc86880f58e9f093f77e786@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/28b934befbc86880f58e9f093f77e786@3x.png deleted file mode 100644 index bf557d0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/28b934befbc86880f58e9f093f77e786@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/28d7351424cc344ffb37e062cc864c09@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/28d7351424cc344ffb37e062cc864c09@2x.png deleted file mode 100644 index 31d328e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/28d7351424cc344ffb37e062cc864c09@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/28d7351424cc344ffb37e062cc864c09@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/28d7351424cc344ffb37e062cc864c09@3x.png deleted file mode 100644 index 490366f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/28d7351424cc344ffb37e062cc864c09@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/28d88269d756152c39ce2954a5cf6765@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/28d88269d756152c39ce2954a5cf6765@2x.webp deleted file mode 100644 index fdd2677..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/28d88269d756152c39ce2954a5cf6765@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/290122181d741a5bf54df95c01b57948@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/290122181d741a5bf54df95c01b57948@2x.webp deleted file mode 100644 index 5d78fc4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/290122181d741a5bf54df95c01b57948@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/290122181d741a5bf54df95c01b57948@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/290122181d741a5bf54df95c01b57948@3x.webp deleted file mode 100644 index 40cb447..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/290122181d741a5bf54df95c01b57948@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/290122181d741a5bf54df95c01b57948@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/290122181d741a5bf54df95c01b57948@dark@2x.webp deleted file mode 100644 index 3e7d59b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/290122181d741a5bf54df95c01b57948@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/290122181d741a5bf54df95c01b57948@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/290122181d741a5bf54df95c01b57948@dark@3x.webp deleted file mode 100644 index 3f1df33..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/290122181d741a5bf54df95c01b57948@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/291f8ad820624b26e45150a49ed80abe@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/291f8ad820624b26e45150a49ed80abe@2x.png deleted file mode 100644 index 54a9fac..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/291f8ad820624b26e45150a49ed80abe@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/291f8ad820624b26e45150a49ed80abe@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/291f8ad820624b26e45150a49ed80abe@3x.png deleted file mode 100644 index 9ae4b8b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/291f8ad820624b26e45150a49ed80abe@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/291f8ad820624b26e45150a49ed80abe@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/291f8ad820624b26e45150a49ed80abe@dark@2x.png deleted file mode 100644 index b95c701..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/291f8ad820624b26e45150a49ed80abe@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/291f8ad820624b26e45150a49ed80abe@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/291f8ad820624b26e45150a49ed80abe@dark@3x.png deleted file mode 100644 index 3ac100e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/291f8ad820624b26e45150a49ed80abe@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/29592e458a59531a0f364110527417fd@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/29592e458a59531a0f364110527417fd@2x.webp deleted file mode 100644 index 201bccc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/29592e458a59531a0f364110527417fd@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/29592e458a59531a0f364110527417fd@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/29592e458a59531a0f364110527417fd@3x.webp deleted file mode 100644 index 14b2ff3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/29592e458a59531a0f364110527417fd@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/296bca3a8cfae9bd6830c6963c0eda3d@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/296bca3a8cfae9bd6830c6963c0eda3d@2x.png deleted file mode 100644 index 15fa21d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/296bca3a8cfae9bd6830c6963c0eda3d@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/296bca3a8cfae9bd6830c6963c0eda3d@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/296bca3a8cfae9bd6830c6963c0eda3d@3x.png deleted file mode 100644 index 25b5cbd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/296bca3a8cfae9bd6830c6963c0eda3d@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2a4f7653dea55b195ba1a0be3acfaeb0@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2a4f7653dea55b195ba1a0be3acfaeb0@2x.webp deleted file mode 100644 index 16ea173..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2a4f7653dea55b195ba1a0be3acfaeb0@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2a4f7653dea55b195ba1a0be3acfaeb0@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2a4f7653dea55b195ba1a0be3acfaeb0@3x.webp deleted file mode 100644 index 90fb8bc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2a4f7653dea55b195ba1a0be3acfaeb0@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2a54032aa68e062a31c054f763ed9a59@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2a54032aa68e062a31c054f763ed9a59@2x.webp deleted file mode 100644 index 2e05bf0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2a54032aa68e062a31c054f763ed9a59@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2a54032aa68e062a31c054f763ed9a59@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2a54032aa68e062a31c054f763ed9a59@3x.webp deleted file mode 100644 index 9077654..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2a54032aa68e062a31c054f763ed9a59@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png deleted file mode 100644 index 29b9b59..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2ad81d3ed281825ffb4ed8d8c6d37a6e@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png deleted file mode 100644 index 8456ec4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2ad81d3ed281825ffb4ed8d8c6d37a6e@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png deleted file mode 100644 index 7688ac6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png deleted file mode 100644 index 0424391..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2ad81d3ed281825ffb4ed8d8c6d37a6e@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2b838cbe135b907fb34159794b584c01@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2b838cbe135b907fb34159794b584c01@2x.webp deleted file mode 100644 index 7a4f010..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2b838cbe135b907fb34159794b584c01@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2b838cbe135b907fb34159794b584c01@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2b838cbe135b907fb34159794b584c01@3x.webp deleted file mode 100644 index 6d99dcb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2b838cbe135b907fb34159794b584c01@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2bc2cc38a5b41d709c27b3062967128b@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2bc2cc38a5b41d709c27b3062967128b@2x.webp deleted file mode 100644 index dd702ea..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2bc2cc38a5b41d709c27b3062967128b@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2bc2cc38a5b41d709c27b3062967128b@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2bc2cc38a5b41d709c27b3062967128b@3x.webp deleted file mode 100644 index 401b6ae..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2bc2cc38a5b41d709c27b3062967128b@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2bcdb5093cdf198623b7efa7929fb521@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2bcdb5093cdf198623b7efa7929fb521@2x.webp deleted file mode 100644 index 4dfc147..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2bcdb5093cdf198623b7efa7929fb521@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2bcdb5093cdf198623b7efa7929fb521@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2bcdb5093cdf198623b7efa7929fb521@3x.webp deleted file mode 100644 index e5a69e5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2bcdb5093cdf198623b7efa7929fb521@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2be25b7bf311ebd38210c6de292ff486@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2be25b7bf311ebd38210c6de292ff486@2x.webp deleted file mode 100644 index 9f2c326..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2be25b7bf311ebd38210c6de292ff486@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2be25b7bf311ebd38210c6de292ff486@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2be25b7bf311ebd38210c6de292ff486@3x.webp deleted file mode 100644 index 2c7c61b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2be25b7bf311ebd38210c6de292ff486@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c605f5cdc1f8b71254d5d76a5c0107e@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c605f5cdc1f8b71254d5d76a5c0107e@2x.png deleted file mode 100644 index e7d0e6d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c605f5cdc1f8b71254d5d76a5c0107e@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c605f5cdc1f8b71254d5d76a5c0107e@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c605f5cdc1f8b71254d5d76a5c0107e@3x.png deleted file mode 100644 index 6051ee8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c605f5cdc1f8b71254d5d76a5c0107e@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c605f5cdc1f8b71254d5d76a5c0107e@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c605f5cdc1f8b71254d5d76a5c0107e@dark@2x.png deleted file mode 100644 index b2c77a6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c605f5cdc1f8b71254d5d76a5c0107e@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c605f5cdc1f8b71254d5d76a5c0107e@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c605f5cdc1f8b71254d5d76a5c0107e@dark@3x.png deleted file mode 100644 index 740e86f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c605f5cdc1f8b71254d5d76a5c0107e@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c7cab3c1f67c21355856a5793a95a39@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c7cab3c1f67c21355856a5793a95a39@2x.png deleted file mode 100644 index 47cce51..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c7cab3c1f67c21355856a5793a95a39@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c7cab3c1f67c21355856a5793a95a39@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c7cab3c1f67c21355856a5793a95a39@3x.png deleted file mode 100644 index 81d31d0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c7cab3c1f67c21355856a5793a95a39@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c7cab3c1f67c21355856a5793a95a39@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c7cab3c1f67c21355856a5793a95a39@dark@2x.png deleted file mode 100644 index a48d938..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c7cab3c1f67c21355856a5793a95a39@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c7cab3c1f67c21355856a5793a95a39@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c7cab3c1f67c21355856a5793a95a39@dark@3x.png deleted file mode 100644 index fff5d1b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c7cab3c1f67c21355856a5793a95a39@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c859ff0918e18a6f8e014bcd1ace9b9@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c859ff0918e18a6f8e014bcd1ace9b9@2x.webp deleted file mode 100644 index 8165ce7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c859ff0918e18a6f8e014bcd1ace9b9@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c859ff0918e18a6f8e014bcd1ace9b9@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c859ff0918e18a6f8e014bcd1ace9b9@3x.webp deleted file mode 100644 index 8e932e5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2c859ff0918e18a6f8e014bcd1ace9b9@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2d0765d2eea376a13295712ed487f261@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2d0765d2eea376a13295712ed487f261@2x.webp deleted file mode 100644 index 4b0032d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2d0765d2eea376a13295712ed487f261@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2d0765d2eea376a13295712ed487f261@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2d0765d2eea376a13295712ed487f261@3x.webp deleted file mode 100644 index 1aa7af5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2d0765d2eea376a13295712ed487f261@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2d1bc4db4522df134b0af39a34416b8c@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2d1bc4db4522df134b0af39a34416b8c@2x.webp deleted file mode 100644 index 3a60859..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2d1bc4db4522df134b0af39a34416b8c@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2d1bc4db4522df134b0af39a34416b8c@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2d1bc4db4522df134b0af39a34416b8c@3x.webp deleted file mode 100644 index 4605ae8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2d1bc4db4522df134b0af39a34416b8c@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2db3a88eab6183849bd619083cc8c4a6@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2db3a88eab6183849bd619083cc8c4a6@2x.webp deleted file mode 100644 index 8331255..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2db3a88eab6183849bd619083cc8c4a6@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2db3a88eab6183849bd619083cc8c4a6@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2db3a88eab6183849bd619083cc8c4a6@3x.webp deleted file mode 100644 index 1411c2e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2db3a88eab6183849bd619083cc8c4a6@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2db458d5d04969b0f5eb80238fdbf035@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2db458d5d04969b0f5eb80238fdbf035@2x.webp deleted file mode 100644 index 0ce013c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2db458d5d04969b0f5eb80238fdbf035@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2db458d5d04969b0f5eb80238fdbf035@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2db458d5d04969b0f5eb80238fdbf035@3x.webp deleted file mode 100644 index 45fa7d9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2db458d5d04969b0f5eb80238fdbf035@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2dba9e582dd66dc63296b9917fe3b19b@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2dba9e582dd66dc63296b9917fe3b19b@2x.webp deleted file mode 100644 index 5f270da..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2dba9e582dd66dc63296b9917fe3b19b@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2dba9e582dd66dc63296b9917fe3b19b@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2dba9e582dd66dc63296b9917fe3b19b@3x.webp deleted file mode 100644 index 4006c2e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2dba9e582dd66dc63296b9917fe3b19b@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2dba9e582dd66dc63296b9917fe3b19b@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2dba9e582dd66dc63296b9917fe3b19b@dark@2x.webp deleted file mode 100644 index 9f2c326..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2dba9e582dd66dc63296b9917fe3b19b@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2dba9e582dd66dc63296b9917fe3b19b@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2dba9e582dd66dc63296b9917fe3b19b@dark@3x.webp deleted file mode 100644 index 2c7c61b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2dba9e582dd66dc63296b9917fe3b19b@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2e859189a75ff6945e52fbfeb7b725d3@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2e859189a75ff6945e52fbfeb7b725d3@2x.png deleted file mode 100644 index b83b267..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2e859189a75ff6945e52fbfeb7b725d3@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2e859189a75ff6945e52fbfeb7b725d3@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2e859189a75ff6945e52fbfeb7b725d3@3x.png deleted file mode 100644 index ed8555a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2e859189a75ff6945e52fbfeb7b725d3@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2f0040aac321ab4df19ba3031fbe8b67@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2f0040aac321ab4df19ba3031fbe8b67@2x.webp deleted file mode 100644 index 7faf8d7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2f0040aac321ab4df19ba3031fbe8b67@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2f0040aac321ab4df19ba3031fbe8b67@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2f0040aac321ab4df19ba3031fbe8b67@3x.webp deleted file mode 100644 index a0ebea7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2f0040aac321ab4df19ba3031fbe8b67@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2fc554862b49d17ffb67fb8625a99ec3@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2fc554862b49d17ffb67fb8625a99ec3@2x.png deleted file mode 100644 index e243550..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2fc554862b49d17ffb67fb8625a99ec3@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2fc554862b49d17ffb67fb8625a99ec3@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2fc554862b49d17ffb67fb8625a99ec3@3x.png deleted file mode 100644 index 8e1a1f0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2fc554862b49d17ffb67fb8625a99ec3@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2fc554862b49d17ffb67fb8625a99ec3@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2fc554862b49d17ffb67fb8625a99ec3@dark@2x.png deleted file mode 100644 index 2150aa3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2fc554862b49d17ffb67fb8625a99ec3@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2fc554862b49d17ffb67fb8625a99ec3@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2fc554862b49d17ffb67fb8625a99ec3@dark@3x.png deleted file mode 100644 index c05f57c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/2fc554862b49d17ffb67fb8625a99ec3@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/302e6c2f6ff4713607a5a9b65e0e9afa@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/302e6c2f6ff4713607a5a9b65e0e9afa@2x.webp deleted file mode 100644 index 869f174..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/302e6c2f6ff4713607a5a9b65e0e9afa@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/302e6c2f6ff4713607a5a9b65e0e9afa@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/302e6c2f6ff4713607a5a9b65e0e9afa@3x.webp deleted file mode 100644 index 080338a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/302e6c2f6ff4713607a5a9b65e0e9afa@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/30a7903a183000ad7d3ae8c3beecc44f@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/30a7903a183000ad7d3ae8c3beecc44f@2x.webp deleted file mode 100644 index 600c41c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/30a7903a183000ad7d3ae8c3beecc44f@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/30a7903a183000ad7d3ae8c3beecc44f@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/30a7903a183000ad7d3ae8c3beecc44f@3x.webp deleted file mode 100644 index 5c862fb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/30a7903a183000ad7d3ae8c3beecc44f@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3119d8ffd977885570bc229439a981e3@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3119d8ffd977885570bc229439a981e3@2x.webp deleted file mode 100644 index 7d9e3ff..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3119d8ffd977885570bc229439a981e3@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3119d8ffd977885570bc229439a981e3@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3119d8ffd977885570bc229439a981e3@3x.webp deleted file mode 100644 index 2015e8b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3119d8ffd977885570bc229439a981e3@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/315baf253f145091cf1ac1ee72054b74@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/315baf253f145091cf1ac1ee72054b74@2x.webp deleted file mode 100644 index 68d20fd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/315baf253f145091cf1ac1ee72054b74@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/315baf253f145091cf1ac1ee72054b74@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/315baf253f145091cf1ac1ee72054b74@3x.webp deleted file mode 100644 index 6b424d6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/315baf253f145091cf1ac1ee72054b74@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3202f9cb892a9055867b77a7383e1650@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3202f9cb892a9055867b77a7383e1650@2x.png deleted file mode 100644 index 43edda6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3202f9cb892a9055867b77a7383e1650@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3202f9cb892a9055867b77a7383e1650@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3202f9cb892a9055867b77a7383e1650@3x.png deleted file mode 100644 index 4d44e67..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3202f9cb892a9055867b77a7383e1650@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3209441441d2a4f3827ca6f5e87488be@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3209441441d2a4f3827ca6f5e87488be@2x.webp deleted file mode 100644 index 4a3c490..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3209441441d2a4f3827ca6f5e87488be@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3209441441d2a4f3827ca6f5e87488be@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3209441441d2a4f3827ca6f5e87488be@3x.webp deleted file mode 100644 index 34c03c8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3209441441d2a4f3827ca6f5e87488be@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3227e20b23fa2a021feb0a432181cf4d@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3227e20b23fa2a021feb0a432181cf4d@2x.png deleted file mode 100644 index f63c9e0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3227e20b23fa2a021feb0a432181cf4d@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3227e20b23fa2a021feb0a432181cf4d@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3227e20b23fa2a021feb0a432181cf4d@3x.png deleted file mode 100644 index eb6057b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3227e20b23fa2a021feb0a432181cf4d@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3269f41b8a8a86965e550dc0ec450825@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3269f41b8a8a86965e550dc0ec450825@2x.webp deleted file mode 100644 index d08134c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3269f41b8a8a86965e550dc0ec450825@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/32b641a3dd662e2024aeb711aac48b37@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/32b641a3dd662e2024aeb711aac48b37@2x.webp deleted file mode 100644 index e276ca1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/32b641a3dd662e2024aeb711aac48b37@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/32b641a3dd662e2024aeb711aac48b37@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/32b641a3dd662e2024aeb711aac48b37@3x.webp deleted file mode 100644 index de90f80..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/32b641a3dd662e2024aeb711aac48b37@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/32b641a3dd662e2024aeb711aac48b37@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/32b641a3dd662e2024aeb711aac48b37@dark@2x.webp deleted file mode 100644 index de55c76..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/32b641a3dd662e2024aeb711aac48b37@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/32b641a3dd662e2024aeb711aac48b37@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/32b641a3dd662e2024aeb711aac48b37@dark@3x.webp deleted file mode 100644 index 4ca98e5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/32b641a3dd662e2024aeb711aac48b37@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/32ce6855303838db2243f7dd28d04e18@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/32ce6855303838db2243f7dd28d04e18@2x.webp deleted file mode 100644 index 95fca7c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/32ce6855303838db2243f7dd28d04e18@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/32ce6855303838db2243f7dd28d04e18@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/32ce6855303838db2243f7dd28d04e18@3x.webp deleted file mode 100644 index 5869510..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/32ce6855303838db2243f7dd28d04e18@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3343c14705a2afe02050298bc8643ba8@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3343c14705a2afe02050298bc8643ba8@2x.png deleted file mode 100644 index f4b30c6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3343c14705a2afe02050298bc8643ba8@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3343c14705a2afe02050298bc8643ba8@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3343c14705a2afe02050298bc8643ba8@3x.png deleted file mode 100644 index ddfa0d5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3343c14705a2afe02050298bc8643ba8@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3376ceb9eee10f9f125cd6bb7b3cb425@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3376ceb9eee10f9f125cd6bb7b3cb425@2x.png deleted file mode 100644 index 9f16c40..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3376ceb9eee10f9f125cd6bb7b3cb425@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3376ceb9eee10f9f125cd6bb7b3cb425@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3376ceb9eee10f9f125cd6bb7b3cb425@3x.png deleted file mode 100644 index 2ad35ad..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3376ceb9eee10f9f125cd6bb7b3cb425@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/33ee6bd6ab359381f203fb7274d7f65b@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/33ee6bd6ab359381f203fb7274d7f65b@2x.webp deleted file mode 100644 index e9ab65a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/33ee6bd6ab359381f203fb7274d7f65b@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/33ee6bd6ab359381f203fb7274d7f65b@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/33ee6bd6ab359381f203fb7274d7f65b@3x.webp deleted file mode 100644 index f68bfe2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/33ee6bd6ab359381f203fb7274d7f65b@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/33fb7234f5e7566e1a5287509106f28a@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/33fb7234f5e7566e1a5287509106f28a@2x.webp deleted file mode 100644 index 08ae542..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/33fb7234f5e7566e1a5287509106f28a@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/33fb7234f5e7566e1a5287509106f28a@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/33fb7234f5e7566e1a5287509106f28a@3x.webp deleted file mode 100644 index 68c343d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/33fb7234f5e7566e1a5287509106f28a@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3482aee8ccd72d014199844bc5d4fb75@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3482aee8ccd72d014199844bc5d4fb75@2x.webp deleted file mode 100644 index 45f3c7c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3482aee8ccd72d014199844bc5d4fb75@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3482aee8ccd72d014199844bc5d4fb75@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3482aee8ccd72d014199844bc5d4fb75@3x.webp deleted file mode 100644 index 76eebd7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3482aee8ccd72d014199844bc5d4fb75@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/36055629860ea2cd999f77e528814515@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/36055629860ea2cd999f77e528814515@2x.png deleted file mode 100644 index e16c3db..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/36055629860ea2cd999f77e528814515@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/36055629860ea2cd999f77e528814515@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/36055629860ea2cd999f77e528814515@3x.png deleted file mode 100644 index a31345b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/36055629860ea2cd999f77e528814515@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/36347b82d7cd775069655a8a278ea8f2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/36347b82d7cd775069655a8a278ea8f2@2x.png deleted file mode 100644 index 035e9ef..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/36347b82d7cd775069655a8a278ea8f2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/36347b82d7cd775069655a8a278ea8f2@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/36347b82d7cd775069655a8a278ea8f2@3x.png deleted file mode 100644 index 782eebb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/36347b82d7cd775069655a8a278ea8f2@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/36347b82d7cd775069655a8a278ea8f2@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/36347b82d7cd775069655a8a278ea8f2@dark@2x.png deleted file mode 100644 index 0b01d64..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/36347b82d7cd775069655a8a278ea8f2@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/36347b82d7cd775069655a8a278ea8f2@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/36347b82d7cd775069655a8a278ea8f2@dark@3x.png deleted file mode 100644 index e13d339..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/36347b82d7cd775069655a8a278ea8f2@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/366424e216ae1b22daea5460702215aa@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/366424e216ae1b22daea5460702215aa@2x.webp deleted file mode 100644 index 806a1d8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/366424e216ae1b22daea5460702215aa@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/366424e216ae1b22daea5460702215aa@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/366424e216ae1b22daea5460702215aa@3x.webp deleted file mode 100644 index 79484bf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/366424e216ae1b22daea5460702215aa@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/366424e216ae1b22daea5460702215aa@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/366424e216ae1b22daea5460702215aa@dark@2x.webp deleted file mode 100644 index 7632ee2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/366424e216ae1b22daea5460702215aa@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/366424e216ae1b22daea5460702215aa@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/366424e216ae1b22daea5460702215aa@dark@3x.webp deleted file mode 100644 index 0415a72..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/366424e216ae1b22daea5460702215aa@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/368077ed49e37772ad5c99a04cd7e326@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/368077ed49e37772ad5c99a04cd7e326@2x.webp deleted file mode 100644 index c294caa..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/368077ed49e37772ad5c99a04cd7e326@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/368077ed49e37772ad5c99a04cd7e326@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/368077ed49e37772ad5c99a04cd7e326@3x.webp deleted file mode 100644 index f9420b8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/368077ed49e37772ad5c99a04cd7e326@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/36b37bfa19e8e1d0892e5af0b9ec533a@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/36b37bfa19e8e1d0892e5af0b9ec533a@2x.webp deleted file mode 100644 index b71a4a6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/36b37bfa19e8e1d0892e5af0b9ec533a@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/36b37bfa19e8e1d0892e5af0b9ec533a@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/36b37bfa19e8e1d0892e5af0b9ec533a@3x.webp deleted file mode 100644 index d5cc581..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/36b37bfa19e8e1d0892e5af0b9ec533a@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3772dbb8967c3822595e72cb34daf96e@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3772dbb8967c3822595e72cb34daf96e@2x.png deleted file mode 100644 index 6cb25e5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3772dbb8967c3822595e72cb34daf96e@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3772dbb8967c3822595e72cb34daf96e@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3772dbb8967c3822595e72cb34daf96e@3x.png deleted file mode 100644 index f5fa18c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3772dbb8967c3822595e72cb34daf96e@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/37a8bdab3769fd8623f1beadb80e1a47@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/37a8bdab3769fd8623f1beadb80e1a47@2x.webp deleted file mode 100644 index 7af1732..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/37a8bdab3769fd8623f1beadb80e1a47@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/37a8bdab3769fd8623f1beadb80e1a47@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/37a8bdab3769fd8623f1beadb80e1a47@3x.webp deleted file mode 100644 index 18b8066..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/37a8bdab3769fd8623f1beadb80e1a47@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/37e92280c23e79d5e2f914c159584434@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/37e92280c23e79d5e2f914c159584434@2x.webp deleted file mode 100644 index e9decbf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/37e92280c23e79d5e2f914c159584434@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/37e92280c23e79d5e2f914c159584434@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/37e92280c23e79d5e2f914c159584434@3x.webp deleted file mode 100644 index f3c67eb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/37e92280c23e79d5e2f914c159584434@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/381ed7c4ce0dc38bdb5f995b2e488b6a@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/381ed7c4ce0dc38bdb5f995b2e488b6a@2x.webp deleted file mode 100644 index 4c6c8a5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/381ed7c4ce0dc38bdb5f995b2e488b6a@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/381ed7c4ce0dc38bdb5f995b2e488b6a@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/381ed7c4ce0dc38bdb5f995b2e488b6a@3x.webp deleted file mode 100644 index 116f7fb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/381ed7c4ce0dc38bdb5f995b2e488b6a@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3841e75f5d14c7f7e8c5fb952c849b75@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3841e75f5d14c7f7e8c5fb952c849b75@2x.webp deleted file mode 100644 index 05f8570..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3841e75f5d14c7f7e8c5fb952c849b75@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3841e75f5d14c7f7e8c5fb952c849b75@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3841e75f5d14c7f7e8c5fb952c849b75@3x.webp deleted file mode 100644 index 140fd62..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3841e75f5d14c7f7e8c5fb952c849b75@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/391fac611f1843c8f34ccdf44b668e31@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/391fac611f1843c8f34ccdf44b668e31@2x.png deleted file mode 100644 index 08e54af..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/391fac611f1843c8f34ccdf44b668e31@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/391fac611f1843c8f34ccdf44b668e31@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/391fac611f1843c8f34ccdf44b668e31@3x.png deleted file mode 100644 index d270996..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/391fac611f1843c8f34ccdf44b668e31@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/391fc0389fc66310ca3b8af9a87847d6@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/391fc0389fc66310ca3b8af9a87847d6@2x.webp deleted file mode 100644 index bf235bf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/391fc0389fc66310ca3b8af9a87847d6@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/391fc0389fc66310ca3b8af9a87847d6@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/391fc0389fc66310ca3b8af9a87847d6@3x.webp deleted file mode 100644 index 036a548..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/391fc0389fc66310ca3b8af9a87847d6@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/391ffc1064adad189910567cbc5cb780@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/391ffc1064adad189910567cbc5cb780@2x.png deleted file mode 100644 index d9e7bb2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/391ffc1064adad189910567cbc5cb780@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/391ffc1064adad189910567cbc5cb780@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/391ffc1064adad189910567cbc5cb780@3x.png deleted file mode 100644 index 263b1d9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/391ffc1064adad189910567cbc5cb780@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/391ffc1064adad189910567cbc5cb780@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/391ffc1064adad189910567cbc5cb780@dark@2x.png deleted file mode 100644 index 50f3157..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/391ffc1064adad189910567cbc5cb780@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/391ffc1064adad189910567cbc5cb780@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/391ffc1064adad189910567cbc5cb780@dark@3x.png deleted file mode 100644 index aa0d724..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/391ffc1064adad189910567cbc5cb780@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/392a970ae75eb5d17a1bf2ca25872d65@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/392a970ae75eb5d17a1bf2ca25872d65@2x.png deleted file mode 100644 index c5b5e17..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/392a970ae75eb5d17a1bf2ca25872d65@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/392a970ae75eb5d17a1bf2ca25872d65@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/392a970ae75eb5d17a1bf2ca25872d65@3x.png deleted file mode 100644 index feb8412..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/392a970ae75eb5d17a1bf2ca25872d65@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/399ee4d55df24457d396d757ac8511b5@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/399ee4d55df24457d396d757ac8511b5@2x.webp deleted file mode 100644 index cb66997..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/399ee4d55df24457d396d757ac8511b5@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/399ee4d55df24457d396d757ac8511b5@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/399ee4d55df24457d396d757ac8511b5@3x.webp deleted file mode 100644 index 6c48d5e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/399ee4d55df24457d396d757ac8511b5@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/39a28e1aec0e62aa335aa9f578f94149@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/39a28e1aec0e62aa335aa9f578f94149@2x.webp deleted file mode 100644 index f1f0889..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/39a28e1aec0e62aa335aa9f578f94149@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/39a28e1aec0e62aa335aa9f578f94149@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/39a28e1aec0e62aa335aa9f578f94149@3x.webp deleted file mode 100644 index ab16801..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/39a28e1aec0e62aa335aa9f578f94149@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/39f46f286301fbce1df1ed084bf89fff@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/39f46f286301fbce1df1ed084bf89fff@2x.webp deleted file mode 100644 index db14100..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/39f46f286301fbce1df1ed084bf89fff@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/39f46f286301fbce1df1ed084bf89fff@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/39f46f286301fbce1df1ed084bf89fff@3x.webp deleted file mode 100644 index 241838d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/39f46f286301fbce1df1ed084bf89fff@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/39f46f286301fbce1df1ed084bf89fff@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/39f46f286301fbce1df1ed084bf89fff@dark@2x.webp deleted file mode 100644 index 7db764d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/39f46f286301fbce1df1ed084bf89fff@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/39f46f286301fbce1df1ed084bf89fff@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/39f46f286301fbce1df1ed084bf89fff@dark@3x.webp deleted file mode 100644 index 4a6eee7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/39f46f286301fbce1df1ed084bf89fff@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3a5aff9d59560fbfb110d4482dee08cc@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3a5aff9d59560fbfb110d4482dee08cc@2x.png deleted file mode 100644 index 844c18f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3a5aff9d59560fbfb110d4482dee08cc@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3a5aff9d59560fbfb110d4482dee08cc@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3a5aff9d59560fbfb110d4482dee08cc@3x.png deleted file mode 100644 index 7d9aa4a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3a5aff9d59560fbfb110d4482dee08cc@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3a5b085362c05b7732f5d5877bbbd99f@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3a5b085362c05b7732f5d5877bbbd99f@2x.webp deleted file mode 100644 index 598791f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3a5b085362c05b7732f5d5877bbbd99f@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3a5b085362c05b7732f5d5877bbbd99f@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3a5b085362c05b7732f5d5877bbbd99f@3x.webp deleted file mode 100644 index 9558314..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3a5b085362c05b7732f5d5877bbbd99f@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3a875593fdd5200f80a6f8cb699358ab@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3a875593fdd5200f80a6f8cb699358ab@2x.webp deleted file mode 100644 index 1b2f6d5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3a875593fdd5200f80a6f8cb699358ab@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3a875593fdd5200f80a6f8cb699358ab@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3a875593fdd5200f80a6f8cb699358ab@3x.webp deleted file mode 100644 index 0d54583..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3a875593fdd5200f80a6f8cb699358ab@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3b394937edb3db25b28e3aae352f87f9@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3b394937edb3db25b28e3aae352f87f9@2x.webp deleted file mode 100644 index 19f8f4b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3b394937edb3db25b28e3aae352f87f9@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3b394937edb3db25b28e3aae352f87f9@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3b394937edb3db25b28e3aae352f87f9@3x.webp deleted file mode 100644 index e5a3923..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3b394937edb3db25b28e3aae352f87f9@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3b68cfe726a0d41fdd620c3d8103c204@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3b68cfe726a0d41fdd620c3d8103c204@2x.webp deleted file mode 100644 index 9b317f5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3b68cfe726a0d41fdd620c3d8103c204@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3b68cfe726a0d41fdd620c3d8103c204@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3b68cfe726a0d41fdd620c3d8103c204@3x.webp deleted file mode 100644 index c9e2daf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3b68cfe726a0d41fdd620c3d8103c204@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3be33e02216c988ebd3c2fa69def9ffa@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3be33e02216c988ebd3c2fa69def9ffa@2x.webp deleted file mode 100644 index e5f7ee9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3be33e02216c988ebd3c2fa69def9ffa@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3be33e02216c988ebd3c2fa69def9ffa@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3be33e02216c988ebd3c2fa69def9ffa@3x.webp deleted file mode 100644 index 08234c5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3be33e02216c988ebd3c2fa69def9ffa@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3c5638e7b8d2e62e7cad095fecb4bf8d@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3c5638e7b8d2e62e7cad095fecb4bf8d@2x.webp deleted file mode 100644 index a353298..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3c5638e7b8d2e62e7cad095fecb4bf8d@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3c5638e7b8d2e62e7cad095fecb4bf8d@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3c5638e7b8d2e62e7cad095fecb4bf8d@3x.webp deleted file mode 100644 index 6f6aa4e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3c5638e7b8d2e62e7cad095fecb4bf8d@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3cf1afbdcc6f52204ea5b91f9e51004a@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3cf1afbdcc6f52204ea5b91f9e51004a@2x.webp deleted file mode 100644 index 2002f18..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3cf1afbdcc6f52204ea5b91f9e51004a@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3cf1afbdcc6f52204ea5b91f9e51004a@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3cf1afbdcc6f52204ea5b91f9e51004a@3x.webp deleted file mode 100644 index c1880c8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3cf1afbdcc6f52204ea5b91f9e51004a@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3d7f80a3308009c951bde717573012d8@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3d7f80a3308009c951bde717573012d8@2x.webp deleted file mode 100644 index 6578155..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3d7f80a3308009c951bde717573012d8@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3d7f80a3308009c951bde717573012d8@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3d7f80a3308009c951bde717573012d8@3x.webp deleted file mode 100644 index 2c79e53..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3d7f80a3308009c951bde717573012d8@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3f04be201052860aa0035b8792c3c77f@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3f04be201052860aa0035b8792c3c77f@2x.png deleted file mode 100644 index 3a775e8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3f04be201052860aa0035b8792c3c77f@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3f04be201052860aa0035b8792c3c77f@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3f04be201052860aa0035b8792c3c77f@3x.png deleted file mode 100644 index 2169027..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3f04be201052860aa0035b8792c3c77f@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3f44d147fa8a9ae20d4d335aa6dfb186@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3f44d147fa8a9ae20d4d335aa6dfb186@2x.webp deleted file mode 100644 index ab0f072..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3f44d147fa8a9ae20d4d335aa6dfb186@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3f44d147fa8a9ae20d4d335aa6dfb186@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3f44d147fa8a9ae20d4d335aa6dfb186@3x.webp deleted file mode 100644 index da44792..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3f44d147fa8a9ae20d4d335aa6dfb186@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3f6fbc81b967e0cf1256d0ece75dfc45@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3f6fbc81b967e0cf1256d0ece75dfc45@2x.webp deleted file mode 100644 index 68ede77..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3f6fbc81b967e0cf1256d0ece75dfc45@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3f6fbc81b967e0cf1256d0ece75dfc45@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3f6fbc81b967e0cf1256d0ece75dfc45@3x.webp deleted file mode 100644 index 66c2be7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3f6fbc81b967e0cf1256d0ece75dfc45@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3f6fbc81b967e0cf1256d0ece75dfc45@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3f6fbc81b967e0cf1256d0ece75dfc45@dark@2x.webp deleted file mode 100644 index 25a5a86..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3f6fbc81b967e0cf1256d0ece75dfc45@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3f6fbc81b967e0cf1256d0ece75dfc45@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3f6fbc81b967e0cf1256d0ece75dfc45@dark@3x.webp deleted file mode 100644 index 266ac0e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3f6fbc81b967e0cf1256d0ece75dfc45@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3fc9f3de3dc8a7972b16d15293949d00@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3fc9f3de3dc8a7972b16d15293949d00@2x.webp deleted file mode 100644 index 1813297..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3fc9f3de3dc8a7972b16d15293949d00@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3fc9f3de3dc8a7972b16d15293949d00@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3fc9f3de3dc8a7972b16d15293949d00@3x.webp deleted file mode 100644 index fb6031f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3fc9f3de3dc8a7972b16d15293949d00@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3fd48cfa30e75a022558d801956ec10d@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3fd48cfa30e75a022558d801956ec10d@2x.webp deleted file mode 100644 index 42ea0c3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3fd48cfa30e75a022558d801956ec10d@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3fd48cfa30e75a022558d801956ec10d@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3fd48cfa30e75a022558d801956ec10d@3x.webp deleted file mode 100644 index 640d8a4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3fd48cfa30e75a022558d801956ec10d@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3fe9c48fc33a0659429744be7e2b1658@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3fe9c48fc33a0659429744be7e2b1658@2x.png deleted file mode 100644 index eb942ba..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3fe9c48fc33a0659429744be7e2b1658@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3fe9c48fc33a0659429744be7e2b1658@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3fe9c48fc33a0659429744be7e2b1658@3x.png deleted file mode 100644 index 42c3281..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3fe9c48fc33a0659429744be7e2b1658@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3fe9c48fc33a0659429744be7e2b1658@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3fe9c48fc33a0659429744be7e2b1658@dark@2x.png deleted file mode 100644 index 15bf180..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3fe9c48fc33a0659429744be7e2b1658@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3fe9c48fc33a0659429744be7e2b1658@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3fe9c48fc33a0659429744be7e2b1658@dark@3x.png deleted file mode 100644 index ffe2735..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/3fe9c48fc33a0659429744be7e2b1658@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/407e74cca8187673d501d368b4ba7a45@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/407e74cca8187673d501d368b4ba7a45@2x.webp deleted file mode 100644 index a295f3e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/407e74cca8187673d501d368b4ba7a45@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/407e74cca8187673d501d368b4ba7a45@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/407e74cca8187673d501d368b4ba7a45@3x.webp deleted file mode 100644 index 1d54df7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/407e74cca8187673d501d368b4ba7a45@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/40ddc18acf28ab33ecd8a9006a84590b.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/40ddc18acf28ab33ecd8a9006a84590b.webp deleted file mode 100644 index e7db9c7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/40ddc18acf28ab33ecd8a9006a84590b.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/40e2d7c2feea70beeb34946784c4b0e1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/40e2d7c2feea70beeb34946784c4b0e1@2x.png deleted file mode 100644 index adcb65d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/40e2d7c2feea70beeb34946784c4b0e1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/40e2d7c2feea70beeb34946784c4b0e1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/40e2d7c2feea70beeb34946784c4b0e1@3x.png deleted file mode 100644 index 9efa1f5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/40e2d7c2feea70beeb34946784c4b0e1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/410cd1d7480ff4d6f03a31464d2d418f@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/410cd1d7480ff4d6f03a31464d2d418f@2x.webp deleted file mode 100644 index d212c90..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/410cd1d7480ff4d6f03a31464d2d418f@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/410cd1d7480ff4d6f03a31464d2d418f@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/410cd1d7480ff4d6f03a31464d2d418f@3x.webp deleted file mode 100644 index afc21b0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/410cd1d7480ff4d6f03a31464d2d418f@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4154df6704c21143e65eda4d7105d6d8@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4154df6704c21143e65eda4d7105d6d8@2x.webp deleted file mode 100644 index 8015b20..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4154df6704c21143e65eda4d7105d6d8@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4154df6704c21143e65eda4d7105d6d8@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4154df6704c21143e65eda4d7105d6d8@3x.webp deleted file mode 100644 index f5de12b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4154df6704c21143e65eda4d7105d6d8@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/41884422e73f35a101cc13c93eeb353c@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/41884422e73f35a101cc13c93eeb353c@2x.png deleted file mode 100644 index 83b5481..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/41884422e73f35a101cc13c93eeb353c@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/41884422e73f35a101cc13c93eeb353c@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/41884422e73f35a101cc13c93eeb353c@3x.png deleted file mode 100644 index 4d34267..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/41884422e73f35a101cc13c93eeb353c@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/41a37e915f7bc340955b696fd7b73cc6@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/41a37e915f7bc340955b696fd7b73cc6@2x.webp deleted file mode 100644 index 1b50f39..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/41a37e915f7bc340955b696fd7b73cc6@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/41a37e915f7bc340955b696fd7b73cc6@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/41a37e915f7bc340955b696fd7b73cc6@3x.webp deleted file mode 100644 index fc57ab2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/41a37e915f7bc340955b696fd7b73cc6@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/423b95f5466bf84ede59d10467067339@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/423b95f5466bf84ede59d10467067339@2x.webp deleted file mode 100644 index df486de..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/423b95f5466bf84ede59d10467067339@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/423b95f5466bf84ede59d10467067339@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/423b95f5466bf84ede59d10467067339@3x.webp deleted file mode 100644 index a1c8343..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/423b95f5466bf84ede59d10467067339@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/42bbd2a6928037b149fe1a1925b34678@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/42bbd2a6928037b149fe1a1925b34678@2x.webp deleted file mode 100644 index 0e6b467..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/42bbd2a6928037b149fe1a1925b34678@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/42bbd2a6928037b149fe1a1925b34678@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/42bbd2a6928037b149fe1a1925b34678@3x.webp deleted file mode 100644 index 7c1326c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/42bbd2a6928037b149fe1a1925b34678@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/430c8c01e5a7fcb14eb627ee36251775.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/430c8c01e5a7fcb14eb627ee36251775.webp deleted file mode 100644 index 07a95db..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/430c8c01e5a7fcb14eb627ee36251775.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/439d6014edf841ff60ef1328360d6aae@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/439d6014edf841ff60ef1328360d6aae@2x.png deleted file mode 100644 index 1f2584c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/439d6014edf841ff60ef1328360d6aae@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/439d6014edf841ff60ef1328360d6aae@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/439d6014edf841ff60ef1328360d6aae@3x.png deleted file mode 100644 index 71c0e32..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/439d6014edf841ff60ef1328360d6aae@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/43e3ff8cd4a10543301d0160a8b4501d@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/43e3ff8cd4a10543301d0160a8b4501d@2x.png deleted file mode 100644 index b3fe55b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/43e3ff8cd4a10543301d0160a8b4501d@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/43e3ff8cd4a10543301d0160a8b4501d@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/43e3ff8cd4a10543301d0160a8b4501d@3x.png deleted file mode 100644 index b3d6ffe..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/43e3ff8cd4a10543301d0160a8b4501d@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/44d4d094167698af75dd595147b9d96e@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/44d4d094167698af75dd595147b9d96e@2x.webp deleted file mode 100644 index b99bb5b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/44d4d094167698af75dd595147b9d96e@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/44d4d094167698af75dd595147b9d96e@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/44d4d094167698af75dd595147b9d96e@3x.webp deleted file mode 100644 index 65fb84f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/44d4d094167698af75dd595147b9d96e@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/44d4d094167698af75dd595147b9d96e@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/44d4d094167698af75dd595147b9d96e@dark@2x.webp deleted file mode 100644 index b0e4f4f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/44d4d094167698af75dd595147b9d96e@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/44d4d094167698af75dd595147b9d96e@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/44d4d094167698af75dd595147b9d96e@dark@3x.webp deleted file mode 100644 index 836175d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/44d4d094167698af75dd595147b9d96e@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/451df8f5d65bbf1a433bf8a96c2bbcbe@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/451df8f5d65bbf1a433bf8a96c2bbcbe@2x.png deleted file mode 100644 index ea23153..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/451df8f5d65bbf1a433bf8a96c2bbcbe@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/451df8f5d65bbf1a433bf8a96c2bbcbe@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/451df8f5d65bbf1a433bf8a96c2bbcbe@3x.png deleted file mode 100644 index ea23153..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/451df8f5d65bbf1a433bf8a96c2bbcbe@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/455772e40d5bb22e676ab38425c5051f@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/455772e40d5bb22e676ab38425c5051f@2x.webp deleted file mode 100644 index 0230597..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/455772e40d5bb22e676ab38425c5051f@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/455772e40d5bb22e676ab38425c5051f@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/455772e40d5bb22e676ab38425c5051f@3x.webp deleted file mode 100644 index 5b38cd3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/455772e40d5bb22e676ab38425c5051f@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4563371b9f1be1309aad73850a9737be@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4563371b9f1be1309aad73850a9737be@2x.png deleted file mode 100644 index ab8ea72..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4563371b9f1be1309aad73850a9737be@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4563371b9f1be1309aad73850a9737be@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4563371b9f1be1309aad73850a9737be@3x.png deleted file mode 100644 index b0f4879..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4563371b9f1be1309aad73850a9737be@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4563371b9f1be1309aad73850a9737be@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4563371b9f1be1309aad73850a9737be@dark@2x.png deleted file mode 100644 index 8b4764f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4563371b9f1be1309aad73850a9737be@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4563371b9f1be1309aad73850a9737be@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4563371b9f1be1309aad73850a9737be@dark@3x.png deleted file mode 100644 index aaa2f06..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4563371b9f1be1309aad73850a9737be@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/45e6f758a16f2666bb78223275221bad@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/45e6f758a16f2666bb78223275221bad@2x.webp deleted file mode 100644 index 787df90..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/45e6f758a16f2666bb78223275221bad@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/45e6f758a16f2666bb78223275221bad@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/45e6f758a16f2666bb78223275221bad@3x.webp deleted file mode 100644 index 6de4064..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/45e6f758a16f2666bb78223275221bad@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/45e6f758a16f2666bb78223275221bad@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/45e6f758a16f2666bb78223275221bad@dark@2x.webp deleted file mode 100644 index 16d7d1a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/45e6f758a16f2666bb78223275221bad@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/45e6f758a16f2666bb78223275221bad@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/45e6f758a16f2666bb78223275221bad@dark@3x.webp deleted file mode 100644 index dc09146..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/45e6f758a16f2666bb78223275221bad@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/46035ffd6e754de9ebce17f776aa7bfe@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/46035ffd6e754de9ebce17f776aa7bfe@2x.png deleted file mode 100644 index 975d924..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/46035ffd6e754de9ebce17f776aa7bfe@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/46035ffd6e754de9ebce17f776aa7bfe@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/46035ffd6e754de9ebce17f776aa7bfe@3x.png deleted file mode 100644 index fe8f3b5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/46035ffd6e754de9ebce17f776aa7bfe@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/461b63ed34fb15e632a904ddc9584ee1@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/461b63ed34fb15e632a904ddc9584ee1@2x.webp deleted file mode 100644 index b8844bc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/461b63ed34fb15e632a904ddc9584ee1@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/461b63ed34fb15e632a904ddc9584ee1@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/461b63ed34fb15e632a904ddc9584ee1@3x.webp deleted file mode 100644 index 7969f22..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/461b63ed34fb15e632a904ddc9584ee1@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/461b63ed34fb15e632a904ddc9584ee1@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/461b63ed34fb15e632a904ddc9584ee1@dark@2x.webp deleted file mode 100644 index 2b4b728..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/461b63ed34fb15e632a904ddc9584ee1@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/461b63ed34fb15e632a904ddc9584ee1@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/461b63ed34fb15e632a904ddc9584ee1@dark@3x.webp deleted file mode 100644 index 890c0b0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/461b63ed34fb15e632a904ddc9584ee1@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/46a56f7c48b29af93b4a789ac480f319@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/46a56f7c48b29af93b4a789ac480f319@2x.webp deleted file mode 100644 index fc801cc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/46a56f7c48b29af93b4a789ac480f319@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/46a56f7c48b29af93b4a789ac480f319@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/46a56f7c48b29af93b4a789ac480f319@3x.webp deleted file mode 100644 index 7915c36..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/46a56f7c48b29af93b4a789ac480f319@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/46b875d6af052c42bceee39b4327739e@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/46b875d6af052c42bceee39b4327739e@2x.png deleted file mode 100644 index 8408073..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/46b875d6af052c42bceee39b4327739e@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/46b875d6af052c42bceee39b4327739e@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/46b875d6af052c42bceee39b4327739e@3x.png deleted file mode 100644 index b2e7756..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/46b875d6af052c42bceee39b4327739e@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/47f67afe757f70b54c18e3839add280a@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/47f67afe757f70b54c18e3839add280a@2x.webp deleted file mode 100644 index 7b33043..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/47f67afe757f70b54c18e3839add280a@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/47f67afe757f70b54c18e3839add280a@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/47f67afe757f70b54c18e3839add280a@3x.webp deleted file mode 100644 index 1326267..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/47f67afe757f70b54c18e3839add280a@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/482fc5b95d4b191cd45327e0c0225b8f@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/482fc5b95d4b191cd45327e0c0225b8f@2x.webp deleted file mode 100644 index 83efe55..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/482fc5b95d4b191cd45327e0c0225b8f@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/482fc5b95d4b191cd45327e0c0225b8f@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/482fc5b95d4b191cd45327e0c0225b8f@3x.webp deleted file mode 100644 index d48db9a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/482fc5b95d4b191cd45327e0c0225b8f@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/48f760982e4576973dfc9962f3a840c6@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/48f760982e4576973dfc9962f3a840c6@2x.webp deleted file mode 100644 index 35ad986..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/48f760982e4576973dfc9962f3a840c6@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/48f760982e4576973dfc9962f3a840c6@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/48f760982e4576973dfc9962f3a840c6@3x.webp deleted file mode 100644 index a52638e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/48f760982e4576973dfc9962f3a840c6@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/493270a97569941c9f590dced09fba8f@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/493270a97569941c9f590dced09fba8f@2x.png deleted file mode 100644 index 0a795f1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/493270a97569941c9f590dced09fba8f@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/493270a97569941c9f590dced09fba8f@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/493270a97569941c9f590dced09fba8f@3x.png deleted file mode 100644 index efff2c4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/493270a97569941c9f590dced09fba8f@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4968661787f623f8c1884cff6f184685@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4968661787f623f8c1884cff6f184685@2x.png deleted file mode 100644 index 3e7663b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4968661787f623f8c1884cff6f184685@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4968661787f623f8c1884cff6f184685@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4968661787f623f8c1884cff6f184685@3x.png deleted file mode 100644 index 8499fa4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4968661787f623f8c1884cff6f184685@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/49c37e9c39513ed0d38fce6f8a994ed5@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/49c37e9c39513ed0d38fce6f8a994ed5@2x.webp deleted file mode 100644 index 7164fb6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/49c37e9c39513ed0d38fce6f8a994ed5@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/49c37e9c39513ed0d38fce6f8a994ed5@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/49c37e9c39513ed0d38fce6f8a994ed5@3x.webp deleted file mode 100644 index dc5a961..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/49c37e9c39513ed0d38fce6f8a994ed5@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/49c37e9c39513ed0d38fce6f8a994ed5@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/49c37e9c39513ed0d38fce6f8a994ed5@dark@2x.webp deleted file mode 100644 index 3d46ed6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/49c37e9c39513ed0d38fce6f8a994ed5@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/49c37e9c39513ed0d38fce6f8a994ed5@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/49c37e9c39513ed0d38fce6f8a994ed5@dark@3x.webp deleted file mode 100644 index bf38626..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/49c37e9c39513ed0d38fce6f8a994ed5@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4b3d8c761adde317944a859e6a6bce41@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4b3d8c761adde317944a859e6a6bce41@2x.webp deleted file mode 100644 index c8bf680..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4b3d8c761adde317944a859e6a6bce41@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4b3d8c761adde317944a859e6a6bce41@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4b3d8c761adde317944a859e6a6bce41@3x.webp deleted file mode 100644 index e5978d0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4b3d8c761adde317944a859e6a6bce41@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4b3ec8e56a4eea0bbe0dd9838dbf6b5d@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4b3ec8e56a4eea0bbe0dd9838dbf6b5d@2x.webp deleted file mode 100644 index df66df2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4b3ec8e56a4eea0bbe0dd9838dbf6b5d@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4b3ec8e56a4eea0bbe0dd9838dbf6b5d@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4b3ec8e56a4eea0bbe0dd9838dbf6b5d@3x.webp deleted file mode 100644 index 676cf2c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4b3ec8e56a4eea0bbe0dd9838dbf6b5d@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4ca81109bbf360be1401d2168485295f@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4ca81109bbf360be1401d2168485295f@2x.png deleted file mode 100644 index 112245f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4ca81109bbf360be1401d2168485295f@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4ca81109bbf360be1401d2168485295f@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4ca81109bbf360be1401d2168485295f@3x.png deleted file mode 100644 index 5b0b3ae..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4ca81109bbf360be1401d2168485295f@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4cbb657f919a2a7d23476da05cbfe4e5@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4cbb657f919a2a7d23476da05cbfe4e5@2x.png deleted file mode 100644 index 7db935c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4cbb657f919a2a7d23476da05cbfe4e5@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4cbb657f919a2a7d23476da05cbfe4e5@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4cbb657f919a2a7d23476da05cbfe4e5@3x.png deleted file mode 100644 index 84d0b1e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4cbb657f919a2a7d23476da05cbfe4e5@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4ccbfd0209fdc01f2b9978b789419d55@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4ccbfd0209fdc01f2b9978b789419d55@2x.webp deleted file mode 100644 index efc993e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4ccbfd0209fdc01f2b9978b789419d55@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4ccbfd0209fdc01f2b9978b789419d55@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4ccbfd0209fdc01f2b9978b789419d55@3x.webp deleted file mode 100644 index f4aea36..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4ccbfd0209fdc01f2b9978b789419d55@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4d0406a7077c1ab54a0ab51530763ff8@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4d0406a7077c1ab54a0ab51530763ff8@2x.webp deleted file mode 100644 index e713fca..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4d0406a7077c1ab54a0ab51530763ff8@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4d0406a7077c1ab54a0ab51530763ff8@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4d0406a7077c1ab54a0ab51530763ff8@3x.webp deleted file mode 100644 index 69ab077..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4d0406a7077c1ab54a0ab51530763ff8@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4d71840210dd86f5139eb7e54c965eb9@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4d71840210dd86f5139eb7e54c965eb9@2x.webp deleted file mode 100644 index d653e35..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4d71840210dd86f5139eb7e54c965eb9@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4d71840210dd86f5139eb7e54c965eb9@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4d71840210dd86f5139eb7e54c965eb9@3x.webp deleted file mode 100644 index 06e05e6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4d71840210dd86f5139eb7e54c965eb9@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4e08801ea258ed36721532eaaa8f050c@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4e08801ea258ed36721532eaaa8f050c@2x.png deleted file mode 100644 index 35631f9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4e08801ea258ed36721532eaaa8f050c@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4e08801ea258ed36721532eaaa8f050c@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4e08801ea258ed36721532eaaa8f050c@3x.png deleted file mode 100644 index 9cc4003..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4e08801ea258ed36721532eaaa8f050c@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4e604219e44016e12e51f333468f37ba@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4e604219e44016e12e51f333468f37ba@2x.webp deleted file mode 100644 index 63573a8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4e604219e44016e12e51f333468f37ba@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4e604219e44016e12e51f333468f37ba@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4e604219e44016e12e51f333468f37ba@3x.webp deleted file mode 100644 index c90dee1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4e604219e44016e12e51f333468f37ba@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4eb2981313a7a866d89ce3aaeead9cf5@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4eb2981313a7a866d89ce3aaeead9cf5@2x.webp deleted file mode 100644 index 3afc2df..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4eb2981313a7a866d89ce3aaeead9cf5@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4eb2981313a7a866d89ce3aaeead9cf5@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4eb2981313a7a866d89ce3aaeead9cf5@3x.webp deleted file mode 100644 index ebae38b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4eb2981313a7a866d89ce3aaeead9cf5@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4f96d34d6fb3298dfa3cedb595c1d954@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4f96d34d6fb3298dfa3cedb595c1d954@2x.webp deleted file mode 100644 index 6bbc377..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4f96d34d6fb3298dfa3cedb595c1d954@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4f96d34d6fb3298dfa3cedb595c1d954@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4f96d34d6fb3298dfa3cedb595c1d954@3x.webp deleted file mode 100644 index 63780cd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4f96d34d6fb3298dfa3cedb595c1d954@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4f99a885eee7c155509d097b521e8520@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4f99a885eee7c155509d097b521e8520@2x.webp deleted file mode 100644 index 167fc8a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4f99a885eee7c155509d097b521e8520@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4f99a885eee7c155509d097b521e8520@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4f99a885eee7c155509d097b521e8520@3x.webp deleted file mode 100644 index 83dca5e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/4f99a885eee7c155509d097b521e8520@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/50e84b409feb86818f38427ca25f5a19@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/50e84b409feb86818f38427ca25f5a19@2x.webp deleted file mode 100644 index 6cb04a1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/50e84b409feb86818f38427ca25f5a19@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/50e84b409feb86818f38427ca25f5a19@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/50e84b409feb86818f38427ca25f5a19@3x.webp deleted file mode 100644 index 87883b2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/50e84b409feb86818f38427ca25f5a19@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/50fced87da57d1f6df527f0e79c76fc3@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/50fced87da57d1f6df527f0e79c76fc3@2x.webp deleted file mode 100644 index bd7ee00..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/50fced87da57d1f6df527f0e79c76fc3@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/50fced87da57d1f6df527f0e79c76fc3@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/50fced87da57d1f6df527f0e79c76fc3@3x.webp deleted file mode 100644 index e073543..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/50fced87da57d1f6df527f0e79c76fc3@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/512c9b06914b8f31976ea75532653e08@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/512c9b06914b8f31976ea75532653e08@2x.png deleted file mode 100644 index dc1b8f6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/512c9b06914b8f31976ea75532653e08@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/512c9b06914b8f31976ea75532653e08@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/512c9b06914b8f31976ea75532653e08@3x.png deleted file mode 100644 index d54e6d1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/512c9b06914b8f31976ea75532653e08@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/512c9b06914b8f31976ea75532653e08@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/512c9b06914b8f31976ea75532653e08@dark@2x.png deleted file mode 100644 index f9e3de6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/512c9b06914b8f31976ea75532653e08@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/512c9b06914b8f31976ea75532653e08@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/512c9b06914b8f31976ea75532653e08@dark@3x.png deleted file mode 100644 index 4765e28..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/512c9b06914b8f31976ea75532653e08@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/514540e5b72d1acce5b7bf5490426b53@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/514540e5b72d1acce5b7bf5490426b53@2x.webp deleted file mode 100644 index 0969e85..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/514540e5b72d1acce5b7bf5490426b53@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/514540e5b72d1acce5b7bf5490426b53@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/514540e5b72d1acce5b7bf5490426b53@3x.webp deleted file mode 100644 index 56ea2a1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/514540e5b72d1acce5b7bf5490426b53@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/524ec94c3b2ef19335632dfa0e03a785@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/524ec94c3b2ef19335632dfa0e03a785@2x.png deleted file mode 100644 index 1cc853d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/524ec94c3b2ef19335632dfa0e03a785@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/524ec94c3b2ef19335632dfa0e03a785@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/524ec94c3b2ef19335632dfa0e03a785@3x.png deleted file mode 100644 index 1cc853d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/524ec94c3b2ef19335632dfa0e03a785@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5260f0293cb75b69438dfd25d328be9d@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5260f0293cb75b69438dfd25d328be9d@2x.png deleted file mode 100644 index 7b10fd5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5260f0293cb75b69438dfd25d328be9d@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5260f0293cb75b69438dfd25d328be9d@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5260f0293cb75b69438dfd25d328be9d@3x.png deleted file mode 100644 index 188ff59..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5260f0293cb75b69438dfd25d328be9d@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5260f0293cb75b69438dfd25d328be9d@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5260f0293cb75b69438dfd25d328be9d@dark@2x.png deleted file mode 100644 index 323213d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5260f0293cb75b69438dfd25d328be9d@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5260f0293cb75b69438dfd25d328be9d@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5260f0293cb75b69438dfd25d328be9d@dark@3x.png deleted file mode 100644 index 028c165..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5260f0293cb75b69438dfd25d328be9d@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/52a745e0659695cc16a8361130615728@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/52a745e0659695cc16a8361130615728@2x.webp deleted file mode 100644 index dec7acf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/52a745e0659695cc16a8361130615728@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/52a745e0659695cc16a8361130615728@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/52a745e0659695cc16a8361130615728@3x.webp deleted file mode 100644 index b5a243f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/52a745e0659695cc16a8361130615728@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/52e94eb3ff2aa2a0c99c810226b51f42@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/52e94eb3ff2aa2a0c99c810226b51f42@2x.webp deleted file mode 100644 index 7db764d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/52e94eb3ff2aa2a0c99c810226b51f42@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/52e94eb3ff2aa2a0c99c810226b51f42@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/52e94eb3ff2aa2a0c99c810226b51f42@3x.webp deleted file mode 100644 index 4a6eee7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/52e94eb3ff2aa2a0c99c810226b51f42@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53026451ab5be6417d37f022b721c58c@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53026451ab5be6417d37f022b721c58c@2x.webp deleted file mode 100644 index 75e68b0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53026451ab5be6417d37f022b721c58c@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53026451ab5be6417d37f022b721c58c@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53026451ab5be6417d37f022b721c58c@3x.webp deleted file mode 100644 index 8248861..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53026451ab5be6417d37f022b721c58c@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53111c0bae6821b70fd9fe3ade4bda41@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53111c0bae6821b70fd9fe3ade4bda41@2x.png deleted file mode 100644 index 1fe8b35..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53111c0bae6821b70fd9fe3ade4bda41@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53111c0bae6821b70fd9fe3ade4bda41@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53111c0bae6821b70fd9fe3ade4bda41@3x.png deleted file mode 100644 index 80833db..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53111c0bae6821b70fd9fe3ade4bda41@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5378609cce43bbcc64aac3565887e7b9@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5378609cce43bbcc64aac3565887e7b9@2x.webp deleted file mode 100644 index 964a41a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5378609cce43bbcc64aac3565887e7b9@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5378609cce43bbcc64aac3565887e7b9@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5378609cce43bbcc64aac3565887e7b9@3x.webp deleted file mode 100644 index 9f6da01..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5378609cce43bbcc64aac3565887e7b9@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5378609cce43bbcc64aac3565887e7b9@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5378609cce43bbcc64aac3565887e7b9@dark@2x.webp deleted file mode 100644 index f5281bd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5378609cce43bbcc64aac3565887e7b9@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5378609cce43bbcc64aac3565887e7b9@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5378609cce43bbcc64aac3565887e7b9@dark@3x.webp deleted file mode 100644 index 9ac639d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5378609cce43bbcc64aac3565887e7b9@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53933895caaea91f86b51261b3057e56@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53933895caaea91f86b51261b3057e56@2x.webp deleted file mode 100644 index ad3dcb1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53933895caaea91f86b51261b3057e56@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53933895caaea91f86b51261b3057e56@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53933895caaea91f86b51261b3057e56@3x.webp deleted file mode 100644 index 8b5b1ed..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53933895caaea91f86b51261b3057e56@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53d9b1725becafe63cc586ca64cd6293@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53d9b1725becafe63cc586ca64cd6293@2x.png deleted file mode 100644 index 77776db..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53d9b1725becafe63cc586ca64cd6293@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53d9b1725becafe63cc586ca64cd6293@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53d9b1725becafe63cc586ca64cd6293@3x.png deleted file mode 100644 index e3fc624..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53d9b1725becafe63cc586ca64cd6293@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53d9b1725becafe63cc586ca64cd6293@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53d9b1725becafe63cc586ca64cd6293@dark@2x.png deleted file mode 100644 index f4b30c6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53d9b1725becafe63cc586ca64cd6293@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53d9b1725becafe63cc586ca64cd6293@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53d9b1725becafe63cc586ca64cd6293@dark@3x.png deleted file mode 100644 index ddfa0d5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/53d9b1725becafe63cc586ca64cd6293@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/55d1e0b7d683dc592147df68fd5f9f11.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/55d1e0b7d683dc592147df68fd5f9f11.webp deleted file mode 100644 index 263e5b3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/55d1e0b7d683dc592147df68fd5f9f11.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/566bb48f7b2af92bfebb3e6e012be6ed@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/566bb48f7b2af92bfebb3e6e012be6ed@2x.webp deleted file mode 100644 index a6e6f27..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/566bb48f7b2af92bfebb3e6e012be6ed@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/566bb48f7b2af92bfebb3e6e012be6ed@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/566bb48f7b2af92bfebb3e6e012be6ed@3x.webp deleted file mode 100644 index de0f273..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/566bb48f7b2af92bfebb3e6e012be6ed@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/566bb48f7b2af92bfebb3e6e012be6ed@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/566bb48f7b2af92bfebb3e6e012be6ed@dark@2x.webp deleted file mode 100644 index 58c646b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/566bb48f7b2af92bfebb3e6e012be6ed@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/566bb48f7b2af92bfebb3e6e012be6ed@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/566bb48f7b2af92bfebb3e6e012be6ed@dark@3x.webp deleted file mode 100644 index ea9f1d7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/566bb48f7b2af92bfebb3e6e012be6ed@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/567704d227dad90771b4f782f20e6448@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/567704d227dad90771b4f782f20e6448@2x.webp deleted file mode 100644 index e8fb4a1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/567704d227dad90771b4f782f20e6448@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/567704d227dad90771b4f782f20e6448@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/567704d227dad90771b4f782f20e6448@3x.webp deleted file mode 100644 index 7de69a1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/567704d227dad90771b4f782f20e6448@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/56fc5ef6b4e977e64b6cdb4247a96c07@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/56fc5ef6b4e977e64b6cdb4247a96c07@2x.png deleted file mode 100644 index 85c6e13..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/56fc5ef6b4e977e64b6cdb4247a96c07@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/56fc5ef6b4e977e64b6cdb4247a96c07@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/56fc5ef6b4e977e64b6cdb4247a96c07@3x.png deleted file mode 100644 index cc1e634..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/56fc5ef6b4e977e64b6cdb4247a96c07@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5749aa360a07eb429190d658eab61976@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5749aa360a07eb429190d658eab61976@2x.png deleted file mode 100644 index 9b658fe..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5749aa360a07eb429190d658eab61976@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5749aa360a07eb429190d658eab61976@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5749aa360a07eb429190d658eab61976@3x.png deleted file mode 100644 index 23dea0c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5749aa360a07eb429190d658eab61976@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/58dda7c20ebc64d9f4f33421aefe2bfc@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/58dda7c20ebc64d9f4f33421aefe2bfc@2x.webp deleted file mode 100644 index 612cd49..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/58dda7c20ebc64d9f4f33421aefe2bfc@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/58dda7c20ebc64d9f4f33421aefe2bfc@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/58dda7c20ebc64d9f4f33421aefe2bfc@3x.webp deleted file mode 100644 index a81915d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/58dda7c20ebc64d9f4f33421aefe2bfc@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/58dda7c20ebc64d9f4f33421aefe2bfc@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/58dda7c20ebc64d9f4f33421aefe2bfc@dark@2x.webp deleted file mode 100644 index b908646..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/58dda7c20ebc64d9f4f33421aefe2bfc@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/58dda7c20ebc64d9f4f33421aefe2bfc@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/58dda7c20ebc64d9f4f33421aefe2bfc@dark@3x.webp deleted file mode 100644 index ce2dd34..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/58dda7c20ebc64d9f4f33421aefe2bfc@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/592b717c432d4e33953b909d8570c591@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/592b717c432d4e33953b909d8570c591@2x.webp deleted file mode 100644 index 4a59b08..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/592b717c432d4e33953b909d8570c591@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/592b717c432d4e33953b909d8570c591@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/592b717c432d4e33953b909d8570c591@3x.webp deleted file mode 100644 index 443879a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/592b717c432d4e33953b909d8570c591@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/59e225996edd90971173af5ee94aa8a3@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/59e225996edd90971173af5ee94aa8a3@2x.webp deleted file mode 100644 index adc1e7d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/59e225996edd90971173af5ee94aa8a3@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/59e225996edd90971173af5ee94aa8a3@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/59e225996edd90971173af5ee94aa8a3@3x.webp deleted file mode 100644 index f2ca8b7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/59e225996edd90971173af5ee94aa8a3@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5bc92bae3a0389218f8ed2f3718ff936@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5bc92bae3a0389218f8ed2f3718ff936@2x.webp deleted file mode 100644 index 42bf8af..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5bc92bae3a0389218f8ed2f3718ff936@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5bc92bae3a0389218f8ed2f3718ff936@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5bc92bae3a0389218f8ed2f3718ff936@3x.webp deleted file mode 100644 index 83c20a9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5bc92bae3a0389218f8ed2f3718ff936@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5bfe2816c1736e9965c94a0f1744befd@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5bfe2816c1736e9965c94a0f1744befd@2x.png deleted file mode 100644 index e7762c0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5bfe2816c1736e9965c94a0f1744befd@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5bfe2816c1736e9965c94a0f1744befd@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5bfe2816c1736e9965c94a0f1744befd@3x.png deleted file mode 100644 index 0f14680..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5bfe2816c1736e9965c94a0f1744befd@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5bfe2816c1736e9965c94a0f1744befd@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5bfe2816c1736e9965c94a0f1744befd@dark@2x.png deleted file mode 100644 index 124d3c7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5bfe2816c1736e9965c94a0f1744befd@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5bfe2816c1736e9965c94a0f1744befd@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5bfe2816c1736e9965c94a0f1744befd@dark@3x.png deleted file mode 100644 index 4434268..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5bfe2816c1736e9965c94a0f1744befd@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5c1ffa1ab8e63c4996a7316f01093fc8@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5c1ffa1ab8e63c4996a7316f01093fc8@2x.png deleted file mode 100644 index 891e5e8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5c1ffa1ab8e63c4996a7316f01093fc8@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5c1ffa1ab8e63c4996a7316f01093fc8@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5c1ffa1ab8e63c4996a7316f01093fc8@3x.png deleted file mode 100644 index c6cd5ea..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5c1ffa1ab8e63c4996a7316f01093fc8@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5c1ffa1ab8e63c4996a7316f01093fc8@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5c1ffa1ab8e63c4996a7316f01093fc8@dark@2x.png deleted file mode 100644 index 6da80e4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5c1ffa1ab8e63c4996a7316f01093fc8@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5c1ffa1ab8e63c4996a7316f01093fc8@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5c1ffa1ab8e63c4996a7316f01093fc8@dark@3x.png deleted file mode 100644 index a6c6d79..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5c1ffa1ab8e63c4996a7316f01093fc8@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5c3d7d447a2681d0abccb198ac0433e6@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5c3d7d447a2681d0abccb198ac0433e6@2x.png deleted file mode 100644 index a0aa0c8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5c3d7d447a2681d0abccb198ac0433e6@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5c3d7d447a2681d0abccb198ac0433e6@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5c3d7d447a2681d0abccb198ac0433e6@3x.png deleted file mode 100644 index 152c509..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5c3d7d447a2681d0abccb198ac0433e6@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5d3d876fff31ff227b16504368115c9d@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5d3d876fff31ff227b16504368115c9d@2x.png deleted file mode 100644 index eddd9c6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5d3d876fff31ff227b16504368115c9d@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5d3d876fff31ff227b16504368115c9d@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5d3d876fff31ff227b16504368115c9d@3x.png deleted file mode 100644 index b864c16..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5d3d876fff31ff227b16504368115c9d@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5d3d876fff31ff227b16504368115c9d@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5d3d876fff31ff227b16504368115c9d@dark@2x.png deleted file mode 100644 index d0ca4ae..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5d3d876fff31ff227b16504368115c9d@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5d3d876fff31ff227b16504368115c9d@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5d3d876fff31ff227b16504368115c9d@dark@3x.png deleted file mode 100644 index a0678f7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5d3d876fff31ff227b16504368115c9d@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5dd2ef8359139596eb4fc46766209886@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5dd2ef8359139596eb4fc46766209886@2x.webp deleted file mode 100644 index 7e63531..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5dd2ef8359139596eb4fc46766209886@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5dd2ef8359139596eb4fc46766209886@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5dd2ef8359139596eb4fc46766209886@3x.webp deleted file mode 100644 index 8121454..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5dd2ef8359139596eb4fc46766209886@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5e731b275341c6d3ff285d8ea10393ac@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5e731b275341c6d3ff285d8ea10393ac@2x.webp deleted file mode 100644 index 9c54fb1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5e731b275341c6d3ff285d8ea10393ac@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5e731b275341c6d3ff285d8ea10393ac@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5e731b275341c6d3ff285d8ea10393ac@3x.webp deleted file mode 100644 index f71825b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5e731b275341c6d3ff285d8ea10393ac@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5ea9665941b640fedc827173a93ce9a0@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5ea9665941b640fedc827173a93ce9a0@2x.webp deleted file mode 100644 index 43bbf6c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5ea9665941b640fedc827173a93ce9a0@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5ea9665941b640fedc827173a93ce9a0@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5ea9665941b640fedc827173a93ce9a0@3x.webp deleted file mode 100644 index 43bbf6c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5ea9665941b640fedc827173a93ce9a0@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5f24eaa385c471e3970f18ca646d6cb8@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5f24eaa385c471e3970f18ca646d6cb8@2x.webp deleted file mode 100644 index e9477a4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5f24eaa385c471e3970f18ca646d6cb8@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5f24eaa385c471e3970f18ca646d6cb8@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5f24eaa385c471e3970f18ca646d6cb8@3x.webp deleted file mode 100644 index 48b058a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5f24eaa385c471e3970f18ca646d6cb8@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5fd4afb50ddeb75c755f7ea453924996@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5fd4afb50ddeb75c755f7ea453924996@2x.webp deleted file mode 100644 index ea9929c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5fd4afb50ddeb75c755f7ea453924996@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5fd4afb50ddeb75c755f7ea453924996@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5fd4afb50ddeb75c755f7ea453924996@3x.webp deleted file mode 100644 index 5f060f1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5fd4afb50ddeb75c755f7ea453924996@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5fd4afb50ddeb75c755f7ea453924996@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5fd4afb50ddeb75c755f7ea453924996@dark@2x.webp deleted file mode 100644 index 1063096..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5fd4afb50ddeb75c755f7ea453924996@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5fd4afb50ddeb75c755f7ea453924996@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5fd4afb50ddeb75c755f7ea453924996@dark@3x.webp deleted file mode 100644 index c64cc2a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5fd4afb50ddeb75c755f7ea453924996@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5fd793c030f0be5f48a6763653dae44c@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5fd793c030f0be5f48a6763653dae44c@2x.webp deleted file mode 100644 index ac8c1a1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5fd793c030f0be5f48a6763653dae44c@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5fd793c030f0be5f48a6763653dae44c@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5fd793c030f0be5f48a6763653dae44c@3x.webp deleted file mode 100644 index d1dbc55..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/5fd793c030f0be5f48a6763653dae44c@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6025d172f320c4f141e04dd9bdaaf9d8@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6025d172f320c4f141e04dd9bdaaf9d8@2x.webp deleted file mode 100644 index a6a9f61..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6025d172f320c4f141e04dd9bdaaf9d8@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6025d172f320c4f141e04dd9bdaaf9d8@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6025d172f320c4f141e04dd9bdaaf9d8@3x.webp deleted file mode 100644 index 1bd34c7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6025d172f320c4f141e04dd9bdaaf9d8@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6098558e8a537a0bef83776c68cdac03@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6098558e8a537a0bef83776c68cdac03@2x.png deleted file mode 100644 index 1d8ae69..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6098558e8a537a0bef83776c68cdac03@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6098558e8a537a0bef83776c68cdac03@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6098558e8a537a0bef83776c68cdac03@3x.png deleted file mode 100644 index c0ff4eb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6098558e8a537a0bef83776c68cdac03@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/60af243421d6b03dce20a20026a7199b@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/60af243421d6b03dce20a20026a7199b@2x.png deleted file mode 100644 index 79268a6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/60af243421d6b03dce20a20026a7199b@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/60af243421d6b03dce20a20026a7199b@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/60af243421d6b03dce20a20026a7199b@3x.png deleted file mode 100644 index 594ed51..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/60af243421d6b03dce20a20026a7199b@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/60c2a960a78c714d9d5c61bb1ec2951d@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/60c2a960a78c714d9d5c61bb1ec2951d@2x.webp deleted file mode 100644 index 82f4002..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/60c2a960a78c714d9d5c61bb1ec2951d@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/60c2a960a78c714d9d5c61bb1ec2951d@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/60c2a960a78c714d9d5c61bb1ec2951d@3x.webp deleted file mode 100644 index ed328aa..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/60c2a960a78c714d9d5c61bb1ec2951d@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/60c2a960a78c714d9d5c61bb1ec2951d@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/60c2a960a78c714d9d5c61bb1ec2951d@dark@2x.webp deleted file mode 100644 index c0c556d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/60c2a960a78c714d9d5c61bb1ec2951d@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/60c2a960a78c714d9d5c61bb1ec2951d@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/60c2a960a78c714d9d5c61bb1ec2951d@dark@3x.webp deleted file mode 100644 index 75cd526..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/60c2a960a78c714d9d5c61bb1ec2951d@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/612471c43e1ce383515afd5a13f4a015@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/612471c43e1ce383515afd5a13f4a015@2x.webp deleted file mode 100644 index d4b000b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/612471c43e1ce383515afd5a13f4a015@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/612471c43e1ce383515afd5a13f4a015@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/612471c43e1ce383515afd5a13f4a015@3x.webp deleted file mode 100644 index f16bc5e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/612471c43e1ce383515afd5a13f4a015@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/612471c43e1ce383515afd5a13f4a015@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/612471c43e1ce383515afd5a13f4a015@dark@2x.webp deleted file mode 100644 index d4b000b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/612471c43e1ce383515afd5a13f4a015@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/612471c43e1ce383515afd5a13f4a015@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/612471c43e1ce383515afd5a13f4a015@dark@3x.webp deleted file mode 100644 index f16bc5e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/612471c43e1ce383515afd5a13f4a015@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/614c795756e5a617374fc6b977e809a0@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/614c795756e5a617374fc6b977e809a0@2x.webp deleted file mode 100644 index 783d0cb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/614c795756e5a617374fc6b977e809a0@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/614c795756e5a617374fc6b977e809a0@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/614c795756e5a617374fc6b977e809a0@3x.webp deleted file mode 100644 index 7d4e228..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/614c795756e5a617374fc6b977e809a0@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/61aa6966406ffbf708cb84285f1ae9b3@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/61aa6966406ffbf708cb84285f1ae9b3@2x.png deleted file mode 100644 index af80b1d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/61aa6966406ffbf708cb84285f1ae9b3@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/61aa6966406ffbf708cb84285f1ae9b3@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/61aa6966406ffbf708cb84285f1ae9b3@3x.png deleted file mode 100644 index 02d5563..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/61aa6966406ffbf708cb84285f1ae9b3@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/61aa6966406ffbf708cb84285f1ae9b3@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/61aa6966406ffbf708cb84285f1ae9b3@dark@2x.png deleted file mode 100644 index ce07b51..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/61aa6966406ffbf708cb84285f1ae9b3@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/61aa6966406ffbf708cb84285f1ae9b3@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/61aa6966406ffbf708cb84285f1ae9b3@dark@3x.png deleted file mode 100644 index 41ff965..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/61aa6966406ffbf708cb84285f1ae9b3@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/621a22d903b924825d554f75fdc6b504@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/621a22d903b924825d554f75fdc6b504@2x.png deleted file mode 100644 index c05a4a2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/621a22d903b924825d554f75fdc6b504@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/621a22d903b924825d554f75fdc6b504@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/621a22d903b924825d554f75fdc6b504@3x.png deleted file mode 100644 index c34b88a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/621a22d903b924825d554f75fdc6b504@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6259666eb414aa26c3aa67c33335f98b@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6259666eb414aa26c3aa67c33335f98b@2x.png deleted file mode 100644 index 2fb69e6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6259666eb414aa26c3aa67c33335f98b@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6259666eb414aa26c3aa67c33335f98b@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6259666eb414aa26c3aa67c33335f98b@3x.png deleted file mode 100644 index 9305b38..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6259666eb414aa26c3aa67c33335f98b@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/62ac3e36d4dbe178154f28fcac3efa49@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/62ac3e36d4dbe178154f28fcac3efa49@2x.png deleted file mode 100644 index 3a32467..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/62ac3e36d4dbe178154f28fcac3efa49@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/62ac3e36d4dbe178154f28fcac3efa49@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/62ac3e36d4dbe178154f28fcac3efa49@3x.png deleted file mode 100644 index ae5b0c9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/62ac3e36d4dbe178154f28fcac3efa49@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/63aca18fa73a3f0625a542ec5f58dd56@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/63aca18fa73a3f0625a542ec5f58dd56@2x.png deleted file mode 100644 index 0e189d0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/63aca18fa73a3f0625a542ec5f58dd56@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/63aca18fa73a3f0625a542ec5f58dd56@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/63aca18fa73a3f0625a542ec5f58dd56@3x.png deleted file mode 100644 index 418cf83..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/63aca18fa73a3f0625a542ec5f58dd56@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/63be9069b1d51627588fd438f73cf852@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/63be9069b1d51627588fd438f73cf852@2x.webp deleted file mode 100644 index e354e4f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/63be9069b1d51627588fd438f73cf852@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/63be9069b1d51627588fd438f73cf852@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/63be9069b1d51627588fd438f73cf852@3x.webp deleted file mode 100644 index 35e4419..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/63be9069b1d51627588fd438f73cf852@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/645013db8cfb4a650c6bdb8261d9c67f@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/645013db8cfb4a650c6bdb8261d9c67f@2x.webp deleted file mode 100644 index a5bc252..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/645013db8cfb4a650c6bdb8261d9c67f@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/645013db8cfb4a650c6bdb8261d9c67f@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/645013db8cfb4a650c6bdb8261d9c67f@3x.webp deleted file mode 100644 index 16760eb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/645013db8cfb4a650c6bdb8261d9c67f@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/645013db8cfb4a650c6bdb8261d9c67f@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/645013db8cfb4a650c6bdb8261d9c67f@dark@2x.webp deleted file mode 100644 index 0d6923e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/645013db8cfb4a650c6bdb8261d9c67f@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/645013db8cfb4a650c6bdb8261d9c67f@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/645013db8cfb4a650c6bdb8261d9c67f@dark@3x.webp deleted file mode 100644 index 8e8762c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/645013db8cfb4a650c6bdb8261d9c67f@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6462e589441382eb9c3f8799c5199b19@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6462e589441382eb9c3f8799c5199b19@2x.png deleted file mode 100644 index 81088ca..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6462e589441382eb9c3f8799c5199b19@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6462e589441382eb9c3f8799c5199b19@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6462e589441382eb9c3f8799c5199b19@3x.png deleted file mode 100644 index 83df51c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6462e589441382eb9c3f8799c5199b19@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6462e589441382eb9c3f8799c5199b19@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6462e589441382eb9c3f8799c5199b19@dark@2x.png deleted file mode 100644 index ee569cc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6462e589441382eb9c3f8799c5199b19@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6462e589441382eb9c3f8799c5199b19@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6462e589441382eb9c3f8799c5199b19@dark@3x.png deleted file mode 100644 index a7a2c0e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6462e589441382eb9c3f8799c5199b19@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/649c2878679ac3b10d44188716426b86@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/649c2878679ac3b10d44188716426b86@2x.webp deleted file mode 100644 index a42e228..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/649c2878679ac3b10d44188716426b86@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/649c2878679ac3b10d44188716426b86@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/649c2878679ac3b10d44188716426b86@3x.webp deleted file mode 100644 index f987d94..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/649c2878679ac3b10d44188716426b86@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/65388e39261e8646342e8829aa750b99@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/65388e39261e8646342e8829aa750b99@2x.webp deleted file mode 100644 index d22b36e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/65388e39261e8646342e8829aa750b99@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/65388e39261e8646342e8829aa750b99@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/65388e39261e8646342e8829aa750b99@3x.webp deleted file mode 100644 index 55332f0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/65388e39261e8646342e8829aa750b99@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/66548fc9b4b09e36b847797a3528e72c@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/66548fc9b4b09e36b847797a3528e72c@2x.webp deleted file mode 100644 index 58c646b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/66548fc9b4b09e36b847797a3528e72c@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/66548fc9b4b09e36b847797a3528e72c@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/66548fc9b4b09e36b847797a3528e72c@3x.webp deleted file mode 100644 index ea9f1d7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/66548fc9b4b09e36b847797a3528e72c@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/674396bac066c9fff951dcca0a45a115@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/674396bac066c9fff951dcca0a45a115@2x.webp deleted file mode 100644 index 8a4d054..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/674396bac066c9fff951dcca0a45a115@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/674396bac066c9fff951dcca0a45a115@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/674396bac066c9fff951dcca0a45a115@3x.webp deleted file mode 100644 index 0d1e7aa..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/674396bac066c9fff951dcca0a45a115@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/67b353716a8d3e102c0d1c6c3512730e@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/67b353716a8d3e102c0d1c6c3512730e@2x.png deleted file mode 100644 index a24c9aa..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/67b353716a8d3e102c0d1c6c3512730e@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/67b353716a8d3e102c0d1c6c3512730e@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/67b353716a8d3e102c0d1c6c3512730e@3x.png deleted file mode 100644 index 422acb0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/67b353716a8d3e102c0d1c6c3512730e@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/67bea5ec4b559992cd38153718977443@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/67bea5ec4b559992cd38153718977443@2x.webp deleted file mode 100644 index 8798fea..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/67bea5ec4b559992cd38153718977443@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/67bea5ec4b559992cd38153718977443@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/67bea5ec4b559992cd38153718977443@3x.webp deleted file mode 100644 index d1ffed9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/67bea5ec4b559992cd38153718977443@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/67c823b3003d9cace5160a85fb78e735@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/67c823b3003d9cace5160a85fb78e735@2x.webp deleted file mode 100644 index 565df39..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/67c823b3003d9cace5160a85fb78e735@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/67c823b3003d9cace5160a85fb78e735@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/67c823b3003d9cace5160a85fb78e735@3x.webp deleted file mode 100644 index 4ccba1d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/67c823b3003d9cace5160a85fb78e735@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6803f08a8404db6343d3f384a6d8c45c@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6803f08a8404db6343d3f384a6d8c45c@2x.png deleted file mode 100644 index a5a87a9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6803f08a8404db6343d3f384a6d8c45c@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6803f08a8404db6343d3f384a6d8c45c@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6803f08a8404db6343d3f384a6d8c45c@3x.png deleted file mode 100644 index 0ea9dc5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6803f08a8404db6343d3f384a6d8c45c@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6803f08a8404db6343d3f384a6d8c45c@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6803f08a8404db6343d3f384a6d8c45c@dark@2x.png deleted file mode 100644 index 9b295ce..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6803f08a8404db6343d3f384a6d8c45c@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6803f08a8404db6343d3f384a6d8c45c@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6803f08a8404db6343d3f384a6d8c45c@dark@3x.png deleted file mode 100644 index f7a1a5b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6803f08a8404db6343d3f384a6d8c45c@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6814da58836e1b48b16275ad6d7645ea@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6814da58836e1b48b16275ad6d7645ea@2x.webp deleted file mode 100644 index ca873af..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6814da58836e1b48b16275ad6d7645ea@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6814da58836e1b48b16275ad6d7645ea@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6814da58836e1b48b16275ad6d7645ea@3x.webp deleted file mode 100644 index c3d5336..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6814da58836e1b48b16275ad6d7645ea@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/686195cd39b2db223756f1db9fdf0b58@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/686195cd39b2db223756f1db9fdf0b58@2x.png deleted file mode 100644 index d8131d6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/686195cd39b2db223756f1db9fdf0b58@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/686195cd39b2db223756f1db9fdf0b58@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/686195cd39b2db223756f1db9fdf0b58@3x.png deleted file mode 100644 index 589601b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/686195cd39b2db223756f1db9fdf0b58@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/686195cd39b2db223756f1db9fdf0b58@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/686195cd39b2db223756f1db9fdf0b58@dark@2x.png deleted file mode 100644 index 83b5481..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/686195cd39b2db223756f1db9fdf0b58@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/686195cd39b2db223756f1db9fdf0b58@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/686195cd39b2db223756f1db9fdf0b58@dark@3x.png deleted file mode 100644 index 4d34267..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/686195cd39b2db223756f1db9fdf0b58@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/68b779fbed7fc379ad7ddc1933cdfc37@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/68b779fbed7fc379ad7ddc1933cdfc37@2x.png deleted file mode 100644 index 9e2b98f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/68b779fbed7fc379ad7ddc1933cdfc37@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/68b779fbed7fc379ad7ddc1933cdfc37@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/68b779fbed7fc379ad7ddc1933cdfc37@3x.png deleted file mode 100644 index 4bb7c92..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/68b779fbed7fc379ad7ddc1933cdfc37@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/69822ea9b08ade8d26bbc8d35259c743@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/69822ea9b08ade8d26bbc8d35259c743@2x.webp deleted file mode 100644 index 4f35404..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/69822ea9b08ade8d26bbc8d35259c743@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/69822ea9b08ade8d26bbc8d35259c743@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/69822ea9b08ade8d26bbc8d35259c743@3x.webp deleted file mode 100644 index 6d8ac1c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/69822ea9b08ade8d26bbc8d35259c743@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/69f28caa9100da53a25067298edce7a0@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/69f28caa9100da53a25067298edce7a0@2x.png deleted file mode 100644 index b2efb7b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/69f28caa9100da53a25067298edce7a0@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/69f28caa9100da53a25067298edce7a0@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/69f28caa9100da53a25067298edce7a0@3x.png deleted file mode 100644 index 33c2b40..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/69f28caa9100da53a25067298edce7a0@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6a08b33266b33b5f2ee0e3740e2b2100@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6a08b33266b33b5f2ee0e3740e2b2100@2x.webp deleted file mode 100644 index f29e731..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6a08b33266b33b5f2ee0e3740e2b2100@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6a08b33266b33b5f2ee0e3740e2b2100@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6a08b33266b33b5f2ee0e3740e2b2100@3x.webp deleted file mode 100644 index ff03a74..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6a08b33266b33b5f2ee0e3740e2b2100@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6ac6e89d06fbcec60a613bf854bdd4b7@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6ac6e89d06fbcec60a613bf854bdd4b7@2x.webp deleted file mode 100644 index a1156dc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6ac6e89d06fbcec60a613bf854bdd4b7@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6ac6e89d06fbcec60a613bf854bdd4b7@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6ac6e89d06fbcec60a613bf854bdd4b7@3x.webp deleted file mode 100644 index 60c635e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6ac6e89d06fbcec60a613bf854bdd4b7@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6bb36b38f824828b6128e804aa8c281f@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6bb36b38f824828b6128e804aa8c281f@2x.webp deleted file mode 100644 index 774cd0d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6bb36b38f824828b6128e804aa8c281f@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6bb36b38f824828b6128e804aa8c281f@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6bb36b38f824828b6128e804aa8c281f@3x.webp deleted file mode 100644 index a6eb19e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6bb36b38f824828b6128e804aa8c281f@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6bde3780d8e7bc82a8c4f5faabdbfef6@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6bde3780d8e7bc82a8c4f5faabdbfef6@2x.webp deleted file mode 100644 index 6e6472c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6bde3780d8e7bc82a8c4f5faabdbfef6@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6bde3780d8e7bc82a8c4f5faabdbfef6@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6bde3780d8e7bc82a8c4f5faabdbfef6@3x.webp deleted file mode 100644 index 88cf25c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6bde3780d8e7bc82a8c4f5faabdbfef6@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6c635cf7b4b8fb970e94b6324199ab48@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6c635cf7b4b8fb970e94b6324199ab48@2x.png deleted file mode 100644 index 8b4764f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6c635cf7b4b8fb970e94b6324199ab48@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6c635cf7b4b8fb970e94b6324199ab48@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6c635cf7b4b8fb970e94b6324199ab48@3x.png deleted file mode 100644 index aaa2f06..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6c635cf7b4b8fb970e94b6324199ab48@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6cd85a353978634f86cc6e3828c8b494@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6cd85a353978634f86cc6e3828c8b494@2x.webp deleted file mode 100644 index 335b2bf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6cd85a353978634f86cc6e3828c8b494@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6cd85a353978634f86cc6e3828c8b494@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6cd85a353978634f86cc6e3828c8b494@3x.webp deleted file mode 100644 index b23e7e8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6cd85a353978634f86cc6e3828c8b494@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6d8409abdbced6864059b97026fd5cad@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6d8409abdbced6864059b97026fd5cad@2x.webp deleted file mode 100644 index 3e5c65a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6d8409abdbced6864059b97026fd5cad@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6d8409abdbced6864059b97026fd5cad@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6d8409abdbced6864059b97026fd5cad@3x.webp deleted file mode 100644 index 47836d4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6d8409abdbced6864059b97026fd5cad@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6e5718c20ce3bb6d727bcef483f2d2d8@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6e5718c20ce3bb6d727bcef483f2d2d8@2x.webp deleted file mode 100644 index ad45f26..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6e5718c20ce3bb6d727bcef483f2d2d8@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6e9b44275c566c3ca9924ba5b87a79ac@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6e9b44275c566c3ca9924ba5b87a79ac@2x.webp deleted file mode 100644 index 39fcde0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6e9b44275c566c3ca9924ba5b87a79ac@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6e9b44275c566c3ca9924ba5b87a79ac@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6e9b44275c566c3ca9924ba5b87a79ac@3x.webp deleted file mode 100644 index 894cf2c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6e9b44275c566c3ca9924ba5b87a79ac@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6ec0f1d6529240a9d5ac57e12b7295cd@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6ec0f1d6529240a9d5ac57e12b7295cd@2x.webp deleted file mode 100644 index 3c2f408..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6ec0f1d6529240a9d5ac57e12b7295cd@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6ec0f1d6529240a9d5ac57e12b7295cd@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6ec0f1d6529240a9d5ac57e12b7295cd@3x.webp deleted file mode 100644 index 0d60ebe..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6ec0f1d6529240a9d5ac57e12b7295cd@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6ec0f1d6529240a9d5ac57e12b7295cd@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6ec0f1d6529240a9d5ac57e12b7295cd@dark@2x.webp deleted file mode 100644 index fcd0dbd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6ec0f1d6529240a9d5ac57e12b7295cd@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6ec0f1d6529240a9d5ac57e12b7295cd@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6ec0f1d6529240a9d5ac57e12b7295cd@dark@3x.webp deleted file mode 100644 index 12343a0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/6ec0f1d6529240a9d5ac57e12b7295cd@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/70a4ac45fc03e925d297cc3a0c3108e1@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/70a4ac45fc03e925d297cc3a0c3108e1@2x.webp deleted file mode 100644 index 7c2032e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/70a4ac45fc03e925d297cc3a0c3108e1@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/70a4ac45fc03e925d297cc3a0c3108e1@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/70a4ac45fc03e925d297cc3a0c3108e1@3x.webp deleted file mode 100644 index 8549b88..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/70a4ac45fc03e925d297cc3a0c3108e1@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/70ec7ea840b750d120f276c63477ac62@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/70ec7ea840b750d120f276c63477ac62@2x.webp deleted file mode 100644 index 64f813c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/70ec7ea840b750d120f276c63477ac62@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/70ec7ea840b750d120f276c63477ac62@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/70ec7ea840b750d120f276c63477ac62@3x.webp deleted file mode 100644 index 8926acb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/70ec7ea840b750d120f276c63477ac62@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/71ec70c54a4cf739445fca38480fa960@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/71ec70c54a4cf739445fca38480fa960@2x.png deleted file mode 100644 index 98be071..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/71ec70c54a4cf739445fca38480fa960@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/71ec70c54a4cf739445fca38480fa960@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/71ec70c54a4cf739445fca38480fa960@3x.png deleted file mode 100644 index 641459a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/71ec70c54a4cf739445fca38480fa960@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7243441a99160f5e50500c9010d111bd@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7243441a99160f5e50500c9010d111bd@2x.webp deleted file mode 100644 index cf6d48e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7243441a99160f5e50500c9010d111bd@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7243441a99160f5e50500c9010d111bd@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7243441a99160f5e50500c9010d111bd@3x.webp deleted file mode 100644 index db9c4af..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7243441a99160f5e50500c9010d111bd@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7281e5e5f99c736502a20d9349aba5e9@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7281e5e5f99c736502a20d9349aba5e9@2x.webp deleted file mode 100644 index 3e8bf7b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7281e5e5f99c736502a20d9349aba5e9@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7281e5e5f99c736502a20d9349aba5e9@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7281e5e5f99c736502a20d9349aba5e9@3x.webp deleted file mode 100644 index 3e4ed3b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7281e5e5f99c736502a20d9349aba5e9@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7281e5e5f99c736502a20d9349aba5e9@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7281e5e5f99c736502a20d9349aba5e9@dark@2x.webp deleted file mode 100644 index 2b972df..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7281e5e5f99c736502a20d9349aba5e9@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7281e5e5f99c736502a20d9349aba5e9@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7281e5e5f99c736502a20d9349aba5e9@dark@3x.webp deleted file mode 100644 index 12ccd0a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7281e5e5f99c736502a20d9349aba5e9@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/72aa7a214b6607113972764cbdf9cf4c@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/72aa7a214b6607113972764cbdf9cf4c@2x.webp deleted file mode 100644 index 3b01001..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/72aa7a214b6607113972764cbdf9cf4c@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/72aa7a214b6607113972764cbdf9cf4c@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/72aa7a214b6607113972764cbdf9cf4c@3x.webp deleted file mode 100644 index 8db1ff2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/72aa7a214b6607113972764cbdf9cf4c@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/73df2bee158428e8460f43abb3095a9d.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/73df2bee158428e8460f43abb3095a9d.webp deleted file mode 100644 index 4ec783f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/73df2bee158428e8460f43abb3095a9d.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/741661f723f5dd40709e301058a87ca1@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/741661f723f5dd40709e301058a87ca1@2x.webp deleted file mode 100644 index 00cb4a6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/741661f723f5dd40709e301058a87ca1@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/741661f723f5dd40709e301058a87ca1@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/741661f723f5dd40709e301058a87ca1@3x.webp deleted file mode 100644 index 59e2947..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/741661f723f5dd40709e301058a87ca1@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/741661f723f5dd40709e301058a87ca1@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/741661f723f5dd40709e301058a87ca1@dark@2x.webp deleted file mode 100644 index 4a59b08..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/741661f723f5dd40709e301058a87ca1@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/741661f723f5dd40709e301058a87ca1@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/741661f723f5dd40709e301058a87ca1@dark@3x.webp deleted file mode 100644 index 443879a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/741661f723f5dd40709e301058a87ca1@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75390ab6de9fabf73877f74f94c7b786@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75390ab6de9fabf73877f74f94c7b786@2x.webp deleted file mode 100644 index a8f7d69..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75390ab6de9fabf73877f74f94c7b786@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75390ab6de9fabf73877f74f94c7b786@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75390ab6de9fabf73877f74f94c7b786@3x.webp deleted file mode 100644 index 89861cd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75390ab6de9fabf73877f74f94c7b786@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75a6edecd34b71deaa30b03bc67d5efb@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75a6edecd34b71deaa30b03bc67d5efb@2x.webp deleted file mode 100644 index fcd0dbd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75a6edecd34b71deaa30b03bc67d5efb@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75a6edecd34b71deaa30b03bc67d5efb@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75a6edecd34b71deaa30b03bc67d5efb@3x.webp deleted file mode 100644 index 12343a0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75a6edecd34b71deaa30b03bc67d5efb@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75a77c6e9b656676986eabb3123ecc98@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75a77c6e9b656676986eabb3123ecc98@2x.png deleted file mode 100644 index 36070d0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75a77c6e9b656676986eabb3123ecc98@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75a77c6e9b656676986eabb3123ecc98@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75a77c6e9b656676986eabb3123ecc98@3x.png deleted file mode 100644 index 614273c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75a77c6e9b656676986eabb3123ecc98@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75a77c6e9b656676986eabb3123ecc98@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75a77c6e9b656676986eabb3123ecc98@dark@2x.png deleted file mode 100644 index 031f755..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75a77c6e9b656676986eabb3123ecc98@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75a77c6e9b656676986eabb3123ecc98@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75a77c6e9b656676986eabb3123ecc98@dark@3x.png deleted file mode 100644 index cd5f37c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75a77c6e9b656676986eabb3123ecc98@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75f62a8038b4e7fda0149a6319b6f5d1@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75f62a8038b4e7fda0149a6319b6f5d1@2x.webp deleted file mode 100644 index 6fd383b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75f62a8038b4e7fda0149a6319b6f5d1@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75f62a8038b4e7fda0149a6319b6f5d1@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75f62a8038b4e7fda0149a6319b6f5d1@3x.webp deleted file mode 100644 index 8b65e03..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/75f62a8038b4e7fda0149a6319b6f5d1@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/76cedb11d57855bcaf631e43dc161258@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/76cedb11d57855bcaf631e43dc161258@2x.webp deleted file mode 100644 index e84275a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/76cedb11d57855bcaf631e43dc161258@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/76cedb11d57855bcaf631e43dc161258@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/76cedb11d57855bcaf631e43dc161258@3x.webp deleted file mode 100644 index af92a82..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/76cedb11d57855bcaf631e43dc161258@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77593f775bfee2a25208395d0f6c2171@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77593f775bfee2a25208395d0f6c2171@2x.webp deleted file mode 100644 index 9e26e20..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77593f775bfee2a25208395d0f6c2171@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77593f775bfee2a25208395d0f6c2171@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77593f775bfee2a25208395d0f6c2171@3x.webp deleted file mode 100644 index b829820..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77593f775bfee2a25208395d0f6c2171@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77759ec5ef107cf9c98f30021198d47f@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77759ec5ef107cf9c98f30021198d47f@2x.png deleted file mode 100644 index 4bc7711..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77759ec5ef107cf9c98f30021198d47f@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77759ec5ef107cf9c98f30021198d47f@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77759ec5ef107cf9c98f30021198d47f@3x.png deleted file mode 100644 index f142c35..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77759ec5ef107cf9c98f30021198d47f@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77bb877dcca7edcca1f64442b522e408@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77bb877dcca7edcca1f64442b522e408@2x.png deleted file mode 100644 index ac56dac..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77bb877dcca7edcca1f64442b522e408@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77bb877dcca7edcca1f64442b522e408@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77bb877dcca7edcca1f64442b522e408@3x.png deleted file mode 100644 index 333a459..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77bb877dcca7edcca1f64442b522e408@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77bb877dcca7edcca1f64442b522e408@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77bb877dcca7edcca1f64442b522e408@dark@2x.png deleted file mode 100644 index 1da6aad..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77bb877dcca7edcca1f64442b522e408@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77bb877dcca7edcca1f64442b522e408@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77bb877dcca7edcca1f64442b522e408@dark@3x.png deleted file mode 100644 index 8aed8aa..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77bb877dcca7edcca1f64442b522e408@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77c7cf623f41d9d009f042899a3e6182@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77c7cf623f41d9d009f042899a3e6182@2x.webp deleted file mode 100644 index 7de295e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77c7cf623f41d9d009f042899a3e6182@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77c7cf623f41d9d009f042899a3e6182@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77c7cf623f41d9d009f042899a3e6182@3x.webp deleted file mode 100644 index d91ff75..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77c7cf623f41d9d009f042899a3e6182@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77c7cf623f41d9d009f042899a3e6182@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77c7cf623f41d9d009f042899a3e6182@dark@2x.webp deleted file mode 100644 index e86f763..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77c7cf623f41d9d009f042899a3e6182@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77c7cf623f41d9d009f042899a3e6182@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77c7cf623f41d9d009f042899a3e6182@dark@3x.webp deleted file mode 100644 index 6f3f8dd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77c7cf623f41d9d009f042899a3e6182@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77d96d07f533c068ed56e96e763c2ede@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77d96d07f533c068ed56e96e763c2ede@2x.png deleted file mode 100644 index ce68926..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77d96d07f533c068ed56e96e763c2ede@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77d96d07f533c068ed56e96e763c2ede@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77d96d07f533c068ed56e96e763c2ede@3x.png deleted file mode 100644 index ea3fcc0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/77d96d07f533c068ed56e96e763c2ede@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/78eee33626a68d57bec7b6ba8fd87361@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/78eee33626a68d57bec7b6ba8fd87361@2x.webp deleted file mode 100644 index a928495..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/78eee33626a68d57bec7b6ba8fd87361@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/78eee33626a68d57bec7b6ba8fd87361@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/78eee33626a68d57bec7b6ba8fd87361@3x.webp deleted file mode 100644 index 5e42e00..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/78eee33626a68d57bec7b6ba8fd87361@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/78eee33626a68d57bec7b6ba8fd87361@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/78eee33626a68d57bec7b6ba8fd87361@dark@2x.webp deleted file mode 100644 index 6578155..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/78eee33626a68d57bec7b6ba8fd87361@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/78eee33626a68d57bec7b6ba8fd87361@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/78eee33626a68d57bec7b6ba8fd87361@dark@3x.webp deleted file mode 100644 index 2c79e53..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/78eee33626a68d57bec7b6ba8fd87361@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/78f7e43339aef1f08327b68c3adfa00b@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/78f7e43339aef1f08327b68c3adfa00b@2x.webp deleted file mode 100644 index 92ac038..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/78f7e43339aef1f08327b68c3adfa00b@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/78f7e43339aef1f08327b68c3adfa00b@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/78f7e43339aef1f08327b68c3adfa00b@3x.webp deleted file mode 100644 index b8f1bda..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/78f7e43339aef1f08327b68c3adfa00b@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/79143554e93abe41ee4edaf98ba97b84@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/79143554e93abe41ee4edaf98ba97b84@2x.webp deleted file mode 100644 index 16f61e5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/79143554e93abe41ee4edaf98ba97b84@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/79143554e93abe41ee4edaf98ba97b84@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/79143554e93abe41ee4edaf98ba97b84@3x.webp deleted file mode 100644 index e752858..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/79143554e93abe41ee4edaf98ba97b84@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a0325fb77eb98334b9a7a0ccfcf4ade@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a0325fb77eb98334b9a7a0ccfcf4ade@2x.webp deleted file mode 100644 index 1df3dec..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a0325fb77eb98334b9a7a0ccfcf4ade@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a0325fb77eb98334b9a7a0ccfcf4ade@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a0325fb77eb98334b9a7a0ccfcf4ade@3x.webp deleted file mode 100644 index b250e97..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a0325fb77eb98334b9a7a0ccfcf4ade@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a395051d356d22fb29118d02907f0d1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a395051d356d22fb29118d02907f0d1@2x.png deleted file mode 100644 index c91face..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a395051d356d22fb29118d02907f0d1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a395051d356d22fb29118d02907f0d1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a395051d356d22fb29118d02907f0d1@3x.png deleted file mode 100644 index 424e0a3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a395051d356d22fb29118d02907f0d1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a6c97cb0c3e2d1ca87deddd6b0003ab@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a6c97cb0c3e2d1ca87deddd6b0003ab@2x.png deleted file mode 100644 index 11de4cd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a6c97cb0c3e2d1ca87deddd6b0003ab@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a6c97cb0c3e2d1ca87deddd6b0003ab@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a6c97cb0c3e2d1ca87deddd6b0003ab@3x.png deleted file mode 100644 index 0c2c4da..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a6c97cb0c3e2d1ca87deddd6b0003ab@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a77a7227c14eda31d510b3fc43f3a2d@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a77a7227c14eda31d510b3fc43f3a2d@2x.webp deleted file mode 100644 index 83faa14..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a77a7227c14eda31d510b3fc43f3a2d@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a77a7227c14eda31d510b3fc43f3a2d@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a77a7227c14eda31d510b3fc43f3a2d@3x.webp deleted file mode 100644 index 15a4186..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a77a7227c14eda31d510b3fc43f3a2d@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a8399723e8e3319087526abca1a7aab@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a8399723e8e3319087526abca1a7aab@2x.webp deleted file mode 100644 index 35b82a5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a8399723e8e3319087526abca1a7aab@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a8399723e8e3319087526abca1a7aab@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a8399723e8e3319087526abca1a7aab@3x.webp deleted file mode 100644 index 8071bf9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7a8399723e8e3319087526abca1a7aab@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ad8b01261052647d71b64a5437643cf@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ad8b01261052647d71b64a5437643cf@2x.webp deleted file mode 100644 index 8371c30..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ad8b01261052647d71b64a5437643cf@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ad8b01261052647d71b64a5437643cf@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ad8b01261052647d71b64a5437643cf@3x.webp deleted file mode 100644 index 6f08942..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ad8b01261052647d71b64a5437643cf@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ad8b01261052647d71b64a5437643cf@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ad8b01261052647d71b64a5437643cf@dark@2x.webp deleted file mode 100644 index 63573a8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ad8b01261052647d71b64a5437643cf@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ad8b01261052647d71b64a5437643cf@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ad8b01261052647d71b64a5437643cf@dark@3x.webp deleted file mode 100644 index c90dee1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ad8b01261052647d71b64a5437643cf@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ae7c8e5d16b7515b71d97abb1e9e80f@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ae7c8e5d16b7515b71d97abb1e9e80f@2x.webp deleted file mode 100644 index 1102dfc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ae7c8e5d16b7515b71d97abb1e9e80f@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ae7c8e5d16b7515b71d97abb1e9e80f@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ae7c8e5d16b7515b71d97abb1e9e80f@3x.webp deleted file mode 100644 index 834d19d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ae7c8e5d16b7515b71d97abb1e9e80f@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ae7c8e5d16b7515b71d97abb1e9e80f@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ae7c8e5d16b7515b71d97abb1e9e80f@dark@2x.webp deleted file mode 100644 index 39fcde0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ae7c8e5d16b7515b71d97abb1e9e80f@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ae7c8e5d16b7515b71d97abb1e9e80f@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ae7c8e5d16b7515b71d97abb1e9e80f@dark@3x.webp deleted file mode 100644 index 894cf2c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ae7c8e5d16b7515b71d97abb1e9e80f@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7afe4dbe646ac6afb910589f719f58a8@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7afe4dbe646ac6afb910589f719f58a8@2x.png deleted file mode 100644 index 62c6682..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7afe4dbe646ac6afb910589f719f58a8@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7afe4dbe646ac6afb910589f719f58a8@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7afe4dbe646ac6afb910589f719f58a8@3x.png deleted file mode 100644 index e5393bb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7afe4dbe646ac6afb910589f719f58a8@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7b2647def7a10091cb88ed5ef0ebfd9a@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7b2647def7a10091cb88ed5ef0ebfd9a@2x.webp deleted file mode 100644 index b0e4f4f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7b2647def7a10091cb88ed5ef0ebfd9a@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7b2647def7a10091cb88ed5ef0ebfd9a@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7b2647def7a10091cb88ed5ef0ebfd9a@3x.webp deleted file mode 100644 index 836175d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7b2647def7a10091cb88ed5ef0ebfd9a@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7bf3b3c4d541eedf4e89b6fb175f882f@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7bf3b3c4d541eedf4e89b6fb175f882f@2x.webp deleted file mode 100644 index 3949478..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7bf3b3c4d541eedf4e89b6fb175f882f@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7bf3b3c4d541eedf4e89b6fb175f882f@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7bf3b3c4d541eedf4e89b6fb175f882f@3x.webp deleted file mode 100644 index efc6b82..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7bf3b3c4d541eedf4e89b6fb175f882f@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7c3484a1423742d63eac8eeeb7b2e4d0@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7c3484a1423742d63eac8eeeb7b2e4d0@2x.webp deleted file mode 100644 index 8e968e9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7c3484a1423742d63eac8eeeb7b2e4d0@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7c3484a1423742d63eac8eeeb7b2e4d0@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7c3484a1423742d63eac8eeeb7b2e4d0@3x.webp deleted file mode 100644 index 8ffe61d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7c3484a1423742d63eac8eeeb7b2e4d0@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7c4859f654882b423381bff6a2f70215@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7c4859f654882b423381bff6a2f70215@2x.png deleted file mode 100644 index b89c8bb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7c4859f654882b423381bff6a2f70215@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7c4859f654882b423381bff6a2f70215@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7c4859f654882b423381bff6a2f70215@3x.png deleted file mode 100644 index 37ff133..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7c4859f654882b423381bff6a2f70215@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7cb5d9ffd93f52b88c57601dd95b3467@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7cb5d9ffd93f52b88c57601dd95b3467@2x.webp deleted file mode 100644 index 4556702..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7cb5d9ffd93f52b88c57601dd95b3467@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7cb5d9ffd93f52b88c57601dd95b3467@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7cb5d9ffd93f52b88c57601dd95b3467@3x.webp deleted file mode 100644 index 7eca472..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7cb5d9ffd93f52b88c57601dd95b3467@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7cb5d9ffd93f52b88c57601dd95b3467@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7cb5d9ffd93f52b88c57601dd95b3467@dark@2x.webp deleted file mode 100644 index 4a3b00e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7cb5d9ffd93f52b88c57601dd95b3467@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7cb5d9ffd93f52b88c57601dd95b3467@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7cb5d9ffd93f52b88c57601dd95b3467@dark@3x.webp deleted file mode 100644 index 111278f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7cb5d9ffd93f52b88c57601dd95b3467@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7cc3b73c2cd925031151089135910cf1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7cc3b73c2cd925031151089135910cf1@2x.png deleted file mode 100644 index 3184d65..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7cc3b73c2cd925031151089135910cf1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7cc3b73c2cd925031151089135910cf1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7cc3b73c2cd925031151089135910cf1@3x.png deleted file mode 100644 index d971099..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7cc3b73c2cd925031151089135910cf1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7cc3b73c2cd925031151089135910cf1@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7cc3b73c2cd925031151089135910cf1@dark@2x.png deleted file mode 100644 index ebdbd58..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7cc3b73c2cd925031151089135910cf1@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7cc3b73c2cd925031151089135910cf1@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7cc3b73c2cd925031151089135910cf1@dark@3x.png deleted file mode 100644 index 2d86045..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7cc3b73c2cd925031151089135910cf1@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ce2cd71a0e7df4788f89e1eac3bb9b2@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ce2cd71a0e7df4788f89e1eac3bb9b2@2x.webp deleted file mode 100644 index a54b951..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ce2cd71a0e7df4788f89e1eac3bb9b2@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ce2cd71a0e7df4788f89e1eac3bb9b2@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ce2cd71a0e7df4788f89e1eac3bb9b2@3x.webp deleted file mode 100644 index b250091..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ce2cd71a0e7df4788f89e1eac3bb9b2@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ce8d7a6bb420fd92abc46e9fb525d09@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ce8d7a6bb420fd92abc46e9fb525d09@2x.webp deleted file mode 100644 index 1c11dac..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ce8d7a6bb420fd92abc46e9fb525d09@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ce8d7a6bb420fd92abc46e9fb525d09@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ce8d7a6bb420fd92abc46e9fb525d09@3x.webp deleted file mode 100644 index af1e754..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ce8d7a6bb420fd92abc46e9fb525d09@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ce8d7a6bb420fd92abc46e9fb525d09@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ce8d7a6bb420fd92abc46e9fb525d09@dark@2x.webp deleted file mode 100644 index e721cb9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ce8d7a6bb420fd92abc46e9fb525d09@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ce8d7a6bb420fd92abc46e9fb525d09@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ce8d7a6bb420fd92abc46e9fb525d09@dark@3x.webp deleted file mode 100644 index 89c94ac..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ce8d7a6bb420fd92abc46e9fb525d09@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7d7cdb616d46e81dab31bbd5a6acd481@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7d7cdb616d46e81dab31bbd5a6acd481@2x.webp deleted file mode 100644 index cd1dc9d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7d7cdb616d46e81dab31bbd5a6acd481@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7d7cdb616d46e81dab31bbd5a6acd481@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7d7cdb616d46e81dab31bbd5a6acd481@3x.webp deleted file mode 100644 index c789d5f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7d7cdb616d46e81dab31bbd5a6acd481@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7dc815ccccb592980bba4d8f9bbfcd0c@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7dc815ccccb592980bba4d8f9bbfcd0c@2x.webp deleted file mode 100644 index 7082cbc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7dc815ccccb592980bba4d8f9bbfcd0c@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7dc815ccccb592980bba4d8f9bbfcd0c@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7dc815ccccb592980bba4d8f9bbfcd0c@3x.webp deleted file mode 100644 index a49d607..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7dc815ccccb592980bba4d8f9bbfcd0c@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7dc815ccccb592980bba4d8f9bbfcd0c@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7dc815ccccb592980bba4d8f9bbfcd0c@dark@2x.webp deleted file mode 100644 index 5a19b15..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7dc815ccccb592980bba4d8f9bbfcd0c@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7dc815ccccb592980bba4d8f9bbfcd0c@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7dc815ccccb592980bba4d8f9bbfcd0c@dark@3x.webp deleted file mode 100644 index 787f7ff..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7dc815ccccb592980bba4d8f9bbfcd0c@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7e2c5f24d4b264b7cf82a67447ae89e1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7e2c5f24d4b264b7cf82a67447ae89e1@2x.png deleted file mode 100644 index 75f9b45..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7e2c5f24d4b264b7cf82a67447ae89e1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7e2c5f24d4b264b7cf82a67447ae89e1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7e2c5f24d4b264b7cf82a67447ae89e1@3x.png deleted file mode 100644 index ed200a1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7e2c5f24d4b264b7cf82a67447ae89e1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7f53a4308520c09e2a5fce74e36307ff@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7f53a4308520c09e2a5fce74e36307ff@2x.webp deleted file mode 100644 index e63dbd9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7f53a4308520c09e2a5fce74e36307ff@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7f53a4308520c09e2a5fce74e36307ff@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7f53a4308520c09e2a5fce74e36307ff@3x.webp deleted file mode 100644 index 983a9c8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7f53a4308520c09e2a5fce74e36307ff@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7f53a4308520c09e2a5fce74e36307ff@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7f53a4308520c09e2a5fce74e36307ff@dark@2x.webp deleted file mode 100644 index 4dfc147..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7f53a4308520c09e2a5fce74e36307ff@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7f53a4308520c09e2a5fce74e36307ff@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7f53a4308520c09e2a5fce74e36307ff@dark@3x.webp deleted file mode 100644 index e5a69e5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7f53a4308520c09e2a5fce74e36307ff@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7f87ba1e1ec465496e8f0ae721b6d209@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7f87ba1e1ec465496e8f0ae721b6d209@2x.webp deleted file mode 100644 index 3a93ba4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7f87ba1e1ec465496e8f0ae721b6d209@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7f87ba1e1ec465496e8f0ae721b6d209@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7f87ba1e1ec465496e8f0ae721b6d209@3x.webp deleted file mode 100644 index a37adfe..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7f87ba1e1ec465496e8f0ae721b6d209@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7fb07505f958df974b5ae1bbd58ead2d@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7fb07505f958df974b5ae1bbd58ead2d@2x.png deleted file mode 100644 index 98fc43b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7fb07505f958df974b5ae1bbd58ead2d@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7fb07505f958df974b5ae1bbd58ead2d@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7fb07505f958df974b5ae1bbd58ead2d@3x.png deleted file mode 100644 index 5d6b1b7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7fb07505f958df974b5ae1bbd58ead2d@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7fb07505f958df974b5ae1bbd58ead2d@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7fb07505f958df974b5ae1bbd58ead2d@dark@2x.png deleted file mode 100644 index 1ecd38c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7fb07505f958df974b5ae1bbd58ead2d@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7fb07505f958df974b5ae1bbd58ead2d@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7fb07505f958df974b5ae1bbd58ead2d@dark@3x.png deleted file mode 100644 index 86f7690..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7fb07505f958df974b5ae1bbd58ead2d@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7fe76bae7c8335798a91b4a6c4f1b78a@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7fe76bae7c8335798a91b4a6c4f1b78a@2x.png deleted file mode 100644 index b56d17c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7fe76bae7c8335798a91b4a6c4f1b78a@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7fe76bae7c8335798a91b4a6c4f1b78a@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7fe76bae7c8335798a91b4a6c4f1b78a@3x.png deleted file mode 100644 index 780be62..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7fe76bae7c8335798a91b4a6c4f1b78a@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7fe76bae7c8335798a91b4a6c4f1b78a@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7fe76bae7c8335798a91b4a6c4f1b78a@dark@2x.png deleted file mode 100644 index def9f4a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7fe76bae7c8335798a91b4a6c4f1b78a@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7fe76bae7c8335798a91b4a6c4f1b78a@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7fe76bae7c8335798a91b4a6c4f1b78a@dark@3x.png deleted file mode 100644 index dbe47e3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7fe76bae7c8335798a91b4a6c4f1b78a@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ffb40a545a5016e214da19f032c3682@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ffb40a545a5016e214da19f032c3682@2x.webp deleted file mode 100644 index 77a79a4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ffb40a545a5016e214da19f032c3682@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ffb40a545a5016e214da19f032c3682@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ffb40a545a5016e214da19f032c3682@3x.webp deleted file mode 100644 index a8680c2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/7ffb40a545a5016e214da19f032c3682@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/80263ba8bf205d767826d1c573ef0f41@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/80263ba8bf205d767826d1c573ef0f41@2x.webp deleted file mode 100644 index 35ddfd9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/80263ba8bf205d767826d1c573ef0f41@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/80263ba8bf205d767826d1c573ef0f41@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/80263ba8bf205d767826d1c573ef0f41@3x.webp deleted file mode 100644 index 9128458..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/80263ba8bf205d767826d1c573ef0f41@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/802d8362f63cd85e83c666f96d256e7c@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/802d8362f63cd85e83c666f96d256e7c@2x.webp deleted file mode 100644 index 17e0ffc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/802d8362f63cd85e83c666f96d256e7c@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/802d8362f63cd85e83c666f96d256e7c@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/802d8362f63cd85e83c666f96d256e7c@3x.webp deleted file mode 100644 index 2e3aa2c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/802d8362f63cd85e83c666f96d256e7c@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/80bac297aaee8bc951a5e1f9038c633b@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/80bac297aaee8bc951a5e1f9038c633b@2x.webp deleted file mode 100644 index 0b67112..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/80bac297aaee8bc951a5e1f9038c633b@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/80bac297aaee8bc951a5e1f9038c633b@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/80bac297aaee8bc951a5e1f9038c633b@3x.webp deleted file mode 100644 index 831f064..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/80bac297aaee8bc951a5e1f9038c633b@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/824141eac143f38f6624c33a4242dd3f@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/824141eac143f38f6624c33a4242dd3f@2x.webp deleted file mode 100644 index d1ccc61..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/824141eac143f38f6624c33a4242dd3f@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/824141eac143f38f6624c33a4242dd3f@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/824141eac143f38f6624c33a4242dd3f@3x.webp deleted file mode 100644 index 96b5e40..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/824141eac143f38f6624c33a4242dd3f@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/82700a75f33ec3baf6a577e2242f21f9@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/82700a75f33ec3baf6a577e2242f21f9@2x.webp deleted file mode 100644 index 342ff35..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/82700a75f33ec3baf6a577e2242f21f9@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/82700a75f33ec3baf6a577e2242f21f9@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/82700a75f33ec3baf6a577e2242f21f9@3x.webp deleted file mode 100644 index 093e85a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/82700a75f33ec3baf6a577e2242f21f9@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8288d41f67e6becf551d34dc8790c0c4@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8288d41f67e6becf551d34dc8790c0c4@2x.webp deleted file mode 100644 index 27761bd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8288d41f67e6becf551d34dc8790c0c4@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8288d41f67e6becf551d34dc8790c0c4@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8288d41f67e6becf551d34dc8790c0c4@3x.webp deleted file mode 100644 index 997954e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8288d41f67e6becf551d34dc8790c0c4@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8288d41f67e6becf551d34dc8790c0c4@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8288d41f67e6becf551d34dc8790c0c4@dark@2x.webp deleted file mode 100644 index 2af6729..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8288d41f67e6becf551d34dc8790c0c4@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8288d41f67e6becf551d34dc8790c0c4@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8288d41f67e6becf551d34dc8790c0c4@dark@3x.webp deleted file mode 100644 index 78c8cdf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8288d41f67e6becf551d34dc8790c0c4@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/831148b494bf99f77eb71969e490dfbc@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/831148b494bf99f77eb71969e490dfbc@2x.webp deleted file mode 100644 index ba2084f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/831148b494bf99f77eb71969e490dfbc@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/831148b494bf99f77eb71969e490dfbc@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/831148b494bf99f77eb71969e490dfbc@3x.webp deleted file mode 100644 index 5e400ac..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/831148b494bf99f77eb71969e490dfbc@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/83a933b102d32f3e27b80608d929df2f@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/83a933b102d32f3e27b80608d929df2f@2x.webp deleted file mode 100644 index de7217e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/83a933b102d32f3e27b80608d929df2f@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/83a933b102d32f3e27b80608d929df2f@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/83a933b102d32f3e27b80608d929df2f@3x.webp deleted file mode 100644 index ab887bf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/83a933b102d32f3e27b80608d929df2f@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/83bcb8a59201df47e9ce50d969091904@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/83bcb8a59201df47e9ce50d969091904@2x.png deleted file mode 100644 index 0ae96f6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/83bcb8a59201df47e9ce50d969091904@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/83bcb8a59201df47e9ce50d969091904@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/83bcb8a59201df47e9ce50d969091904@3x.png deleted file mode 100644 index 57d7de1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/83bcb8a59201df47e9ce50d969091904@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/84cc8b9c47d82dc5d099cf10a7ab31f5@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/84cc8b9c47d82dc5d099cf10a7ab31f5@2x.png deleted file mode 100644 index 33c63b1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/84cc8b9c47d82dc5d099cf10a7ab31f5@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/84cc8b9c47d82dc5d099cf10a7ab31f5@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/84cc8b9c47d82dc5d099cf10a7ab31f5@3x.png deleted file mode 100644 index 8bd3142..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/84cc8b9c47d82dc5d099cf10a7ab31f5@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/84fb6062c7d90403e9052b6d8cd78b87@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/84fb6062c7d90403e9052b6d8cd78b87@2x.webp deleted file mode 100644 index 1e836b9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/84fb6062c7d90403e9052b6d8cd78b87@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/84fb6062c7d90403e9052b6d8cd78b87@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/84fb6062c7d90403e9052b6d8cd78b87@3x.webp deleted file mode 100644 index c42763a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/84fb6062c7d90403e9052b6d8cd78b87@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/84fb6062c7d90403e9052b6d8cd78b87@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/84fb6062c7d90403e9052b6d8cd78b87@dark@2x.webp deleted file mode 100644 index 85c24fc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/84fb6062c7d90403e9052b6d8cd78b87@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/84fb6062c7d90403e9052b6d8cd78b87@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/84fb6062c7d90403e9052b6d8cd78b87@dark@3x.webp deleted file mode 100644 index eec513d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/84fb6062c7d90403e9052b6d8cd78b87@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/85241b1eb671aea17c13155142342d5c@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/85241b1eb671aea17c13155142342d5c@2x.webp deleted file mode 100644 index be86ddd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/85241b1eb671aea17c13155142342d5c@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/85241b1eb671aea17c13155142342d5c@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/85241b1eb671aea17c13155142342d5c@3x.webp deleted file mode 100644 index 60bd4b8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/85241b1eb671aea17c13155142342d5c@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/85c96fbc2e73a33d3c8bcf6c61642751@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/85c96fbc2e73a33d3c8bcf6c61642751@2x.webp deleted file mode 100644 index 0bfcaa2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/85c96fbc2e73a33d3c8bcf6c61642751@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/85c96fbc2e73a33d3c8bcf6c61642751@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/85c96fbc2e73a33d3c8bcf6c61642751@3x.webp deleted file mode 100644 index b91ade7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/85c96fbc2e73a33d3c8bcf6c61642751@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/85c96fbc2e73a33d3c8bcf6c61642751@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/85c96fbc2e73a33d3c8bcf6c61642751@dark@2x.webp deleted file mode 100644 index 5758f33..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/85c96fbc2e73a33d3c8bcf6c61642751@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/85c96fbc2e73a33d3c8bcf6c61642751@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/85c96fbc2e73a33d3c8bcf6c61642751@dark@3x.webp deleted file mode 100644 index 6f4d88a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/85c96fbc2e73a33d3c8bcf6c61642751@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8642e88ac86d5b11cf15404dc5b2e46b@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8642e88ac86d5b11cf15404dc5b2e46b@2x.png deleted file mode 100644 index 79a0ff8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8642e88ac86d5b11cf15404dc5b2e46b@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8642e88ac86d5b11cf15404dc5b2e46b@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8642e88ac86d5b11cf15404dc5b2e46b@3x.png deleted file mode 100644 index 036a8ba..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8642e88ac86d5b11cf15404dc5b2e46b@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8642e88ac86d5b11cf15404dc5b2e46b@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8642e88ac86d5b11cf15404dc5b2e46b@dark@2x.png deleted file mode 100644 index 884b486..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8642e88ac86d5b11cf15404dc5b2e46b@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8642e88ac86d5b11cf15404dc5b2e46b@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8642e88ac86d5b11cf15404dc5b2e46b@dark@3x.png deleted file mode 100644 index 0562430..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8642e88ac86d5b11cf15404dc5b2e46b@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/864c0ef65b587a029a9ffb7a899bb450@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/864c0ef65b587a029a9ffb7a899bb450@2x.webp deleted file mode 100644 index 5a8176c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/864c0ef65b587a029a9ffb7a899bb450@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/864c0ef65b587a029a9ffb7a899bb450@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/864c0ef65b587a029a9ffb7a899bb450@3x.webp deleted file mode 100644 index a0addc6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/864c0ef65b587a029a9ffb7a899bb450@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/869eec010d44d521645fdc16e7b4bbda@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/869eec010d44d521645fdc16e7b4bbda@2x.webp deleted file mode 100644 index 7180e1a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/869eec010d44d521645fdc16e7b4bbda@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/869eec010d44d521645fdc16e7b4bbda@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/869eec010d44d521645fdc16e7b4bbda@3x.webp deleted file mode 100644 index b39cfbc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/869eec010d44d521645fdc16e7b4bbda@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/872c8dfcdde30d7f101922dda60df4bf@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/872c8dfcdde30d7f101922dda60df4bf@2x.png deleted file mode 100644 index 1c4dd5d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/872c8dfcdde30d7f101922dda60df4bf@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/872c8dfcdde30d7f101922dda60df4bf@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/872c8dfcdde30d7f101922dda60df4bf@3x.png deleted file mode 100644 index 436a662..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/872c8dfcdde30d7f101922dda60df4bf@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/89824acaf3e015eebc7569c344aecd1f@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/89824acaf3e015eebc7569c344aecd1f@2x.png deleted file mode 100644 index a91c685..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/89824acaf3e015eebc7569c344aecd1f@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/89824acaf3e015eebc7569c344aecd1f@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/89824acaf3e015eebc7569c344aecd1f@3x.png deleted file mode 100644 index c397b65..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/89824acaf3e015eebc7569c344aecd1f@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/898908cd580180cf9b182d95b6e409b4@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/898908cd580180cf9b182d95b6e409b4@2x.webp deleted file mode 100644 index 0f73c73..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/898908cd580180cf9b182d95b6e409b4@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/898908cd580180cf9b182d95b6e409b4@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/898908cd580180cf9b182d95b6e409b4@3x.webp deleted file mode 100644 index b07dac3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/898908cd580180cf9b182d95b6e409b4@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/89d3f4196fefc6fb7187953e2b022408@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/89d3f4196fefc6fb7187953e2b022408@2x.webp deleted file mode 100644 index 4171382..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/89d3f4196fefc6fb7187953e2b022408@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/89d3f4196fefc6fb7187953e2b022408@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/89d3f4196fefc6fb7187953e2b022408@3x.webp deleted file mode 100644 index 4009340..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/89d3f4196fefc6fb7187953e2b022408@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/89e2f448d1cf6d5d9df81a7a893f4aa2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/89e2f448d1cf6d5d9df81a7a893f4aa2@2x.png deleted file mode 100644 index 16e573e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/89e2f448d1cf6d5d9df81a7a893f4aa2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/89e2f448d1cf6d5d9df81a7a893f4aa2@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/89e2f448d1cf6d5d9df81a7a893f4aa2@3x.png deleted file mode 100644 index 8a703e3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/89e2f448d1cf6d5d9df81a7a893f4aa2@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8a14788052514b7f38f06f2e90d5e714@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8a14788052514b7f38f06f2e90d5e714@2x.webp deleted file mode 100644 index ff94114..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8a14788052514b7f38f06f2e90d5e714@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8a14788052514b7f38f06f2e90d5e714@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8a14788052514b7f38f06f2e90d5e714@3x.webp deleted file mode 100644 index da5d99f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8a14788052514b7f38f06f2e90d5e714@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8a1bacb21091749633d9a873b92311a5@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8a1bacb21091749633d9a873b92311a5@2x.webp deleted file mode 100644 index 9986092..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8a1bacb21091749633d9a873b92311a5@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8a1bacb21091749633d9a873b92311a5@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8a1bacb21091749633d9a873b92311a5@3x.webp deleted file mode 100644 index af48270..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8a1bacb21091749633d9a873b92311a5@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8b620ba4e97000ad1ef915b3254057a2@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8b620ba4e97000ad1ef915b3254057a2@2x.webp deleted file mode 100644 index dc8e65e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8b620ba4e97000ad1ef915b3254057a2@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8b620ba4e97000ad1ef915b3254057a2@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8b620ba4e97000ad1ef915b3254057a2@3x.webp deleted file mode 100644 index fdd2d0b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8b620ba4e97000ad1ef915b3254057a2@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8ba1c373d9acb225912fc6b137b4f05d@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8ba1c373d9acb225912fc6b137b4f05d@2x.png deleted file mode 100644 index c380382..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8ba1c373d9acb225912fc6b137b4f05d@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8ba1c373d9acb225912fc6b137b4f05d@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8ba1c373d9acb225912fc6b137b4f05d@3x.png deleted file mode 100644 index 229973a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8ba1c373d9acb225912fc6b137b4f05d@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8ba1c373d9acb225912fc6b137b4f05d@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8ba1c373d9acb225912fc6b137b4f05d@dark@2x.png deleted file mode 100644 index 95a6f91..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8ba1c373d9acb225912fc6b137b4f05d@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8ba1c373d9acb225912fc6b137b4f05d@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8ba1c373d9acb225912fc6b137b4f05d@dark@3x.png deleted file mode 100644 index 90b2b63..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8ba1c373d9acb225912fc6b137b4f05d@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8bb362b25a1a5dba9eff3be7577fa999@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8bb362b25a1a5dba9eff3be7577fa999@2x.webp deleted file mode 100644 index 0d6923e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8bb362b25a1a5dba9eff3be7577fa999@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8bb362b25a1a5dba9eff3be7577fa999@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8bb362b25a1a5dba9eff3be7577fa999@3x.webp deleted file mode 100644 index 8e8762c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8bb362b25a1a5dba9eff3be7577fa999@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8c3f7b040dec04eab9be2df287b979ad@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8c3f7b040dec04eab9be2df287b979ad@2x.webp deleted file mode 100644 index 950b496..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8c3f7b040dec04eab9be2df287b979ad@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8c3f7b040dec04eab9be2df287b979ad@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8c3f7b040dec04eab9be2df287b979ad@3x.webp deleted file mode 100644 index f9420b8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8c3f7b040dec04eab9be2df287b979ad@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8d15b945275efe2db048100ffeadefbe@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8d15b945275efe2db048100ffeadefbe@2x.webp deleted file mode 100644 index 2758a7b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8d15b945275efe2db048100ffeadefbe@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8d15b945275efe2db048100ffeadefbe@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8d15b945275efe2db048100ffeadefbe@3x.webp deleted file mode 100644 index c6ff47f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8d15b945275efe2db048100ffeadefbe@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8d6a10e5deb837be5ec8e80a852d2c8d.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8d6a10e5deb837be5ec8e80a852d2c8d.webp deleted file mode 100644 index cbd03b1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8d6a10e5deb837be5ec8e80a852d2c8d.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8e56107188f30f8f6034748b806811fe@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8e56107188f30f8f6034748b806811fe@2x.png deleted file mode 100644 index b4e01be..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8e56107188f30f8f6034748b806811fe@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8e56107188f30f8f6034748b806811fe@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8e56107188f30f8f6034748b806811fe@3x.png deleted file mode 100644 index 23b1e03..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8e56107188f30f8f6034748b806811fe@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8e56107188f30f8f6034748b806811fe@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8e56107188f30f8f6034748b806811fe@dark@2x.png deleted file mode 100644 index ca856e8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8e56107188f30f8f6034748b806811fe@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8e56107188f30f8f6034748b806811fe@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8e56107188f30f8f6034748b806811fe@dark@3x.png deleted file mode 100644 index 50b80de..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8e56107188f30f8f6034748b806811fe@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8fa51a7ff320b3a92e15adfa7dffb34a@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8fa51a7ff320b3a92e15adfa7dffb34a@2x.png deleted file mode 100644 index 17228df..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8fa51a7ff320b3a92e15adfa7dffb34a@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8fa51a7ff320b3a92e15adfa7dffb34a@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8fa51a7ff320b3a92e15adfa7dffb34a@3x.png deleted file mode 100644 index cbad40a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8fa51a7ff320b3a92e15adfa7dffb34a@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8fb9927c0e8d919937fac3ab5d47c8f3@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8fb9927c0e8d919937fac3ab5d47c8f3@2x.png deleted file mode 100644 index 0aaa666..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8fb9927c0e8d919937fac3ab5d47c8f3@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8fb9927c0e8d919937fac3ab5d47c8f3@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8fb9927c0e8d919937fac3ab5d47c8f3@3x.png deleted file mode 100644 index 7581704..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8fb9927c0e8d919937fac3ab5d47c8f3@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8fb9927c0e8d919937fac3ab5d47c8f3@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8fb9927c0e8d919937fac3ab5d47c8f3@dark@2x.png deleted file mode 100644 index 0f523b0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8fb9927c0e8d919937fac3ab5d47c8f3@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8fb9927c0e8d919937fac3ab5d47c8f3@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8fb9927c0e8d919937fac3ab5d47c8f3@dark@3x.png deleted file mode 100644 index 8e5f345..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/8fb9927c0e8d919937fac3ab5d47c8f3@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9025e5fc3d239e216e6474637a771c7b@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9025e5fc3d239e216e6474637a771c7b@2x.webp deleted file mode 100644 index 7632ee2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9025e5fc3d239e216e6474637a771c7b@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9025e5fc3d239e216e6474637a771c7b@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9025e5fc3d239e216e6474637a771c7b@3x.webp deleted file mode 100644 index 0415a72..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9025e5fc3d239e216e6474637a771c7b@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/906db5183324c5e7c0d4aab374a1d9c7@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/906db5183324c5e7c0d4aab374a1d9c7@2x.png deleted file mode 100644 index 9c5e5d8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/906db5183324c5e7c0d4aab374a1d9c7@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/906db5183324c5e7c0d4aab374a1d9c7@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/906db5183324c5e7c0d4aab374a1d9c7@3x.png deleted file mode 100644 index 6b3806d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/906db5183324c5e7c0d4aab374a1d9c7@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/90a5e5d149950db2338c041e7a128260@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/90a5e5d149950db2338c041e7a128260@2x.png deleted file mode 100644 index b6d7b97..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/90a5e5d149950db2338c041e7a128260@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/90a5e5d149950db2338c041e7a128260@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/90a5e5d149950db2338c041e7a128260@3x.png deleted file mode 100644 index cf5186f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/90a5e5d149950db2338c041e7a128260@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/90a5e5d149950db2338c041e7a128260@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/90a5e5d149950db2338c041e7a128260@dark@2x.png deleted file mode 100644 index 2aca67f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/90a5e5d149950db2338c041e7a128260@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/90a5e5d149950db2338c041e7a128260@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/90a5e5d149950db2338c041e7a128260@dark@3x.png deleted file mode 100644 index 53e0d3d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/90a5e5d149950db2338c041e7a128260@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/90fdeeb71ac86a856c537958b985f3a6@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/90fdeeb71ac86a856c537958b985f3a6@2x.webp deleted file mode 100644 index a821b54..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/90fdeeb71ac86a856c537958b985f3a6@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/90fdeeb71ac86a856c537958b985f3a6@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/90fdeeb71ac86a856c537958b985f3a6@3x.webp deleted file mode 100644 index 184e2a7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/90fdeeb71ac86a856c537958b985f3a6@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/910f2ad97c376011fd70883f6f5185d1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/910f2ad97c376011fd70883f6f5185d1@2x.png deleted file mode 100644 index 284db9a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/910f2ad97c376011fd70883f6f5185d1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/910f2ad97c376011fd70883f6f5185d1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/910f2ad97c376011fd70883f6f5185d1@3x.png deleted file mode 100644 index 7116259..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/910f2ad97c376011fd70883f6f5185d1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/910f2ad97c376011fd70883f6f5185d1@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/910f2ad97c376011fd70883f6f5185d1@dark@2x.png deleted file mode 100644 index c12d559..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/910f2ad97c376011fd70883f6f5185d1@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/910f2ad97c376011fd70883f6f5185d1@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/910f2ad97c376011fd70883f6f5185d1@dark@3x.png deleted file mode 100644 index 7f34b8a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/910f2ad97c376011fd70883f6f5185d1@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/915c849da5fedc04e8a875757e8edf25@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/915c849da5fedc04e8a875757e8edf25@2x.png deleted file mode 100644 index 3ba0936..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/915c849da5fedc04e8a875757e8edf25@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/915c849da5fedc04e8a875757e8edf25@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/915c849da5fedc04e8a875757e8edf25@3x.png deleted file mode 100644 index 9fc4eeb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/915c849da5fedc04e8a875757e8edf25@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/918bff9a06d1a44cb749896b00f549e4@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/918bff9a06d1a44cb749896b00f549e4@2x.webp deleted file mode 100644 index e37c01d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/918bff9a06d1a44cb749896b00f549e4@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/918bff9a06d1a44cb749896b00f549e4@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/918bff9a06d1a44cb749896b00f549e4@3x.webp deleted file mode 100644 index ba01d48..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/918bff9a06d1a44cb749896b00f549e4@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/919182264e029b0d0573353c7abc61c7@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/919182264e029b0d0573353c7abc61c7@2x.png deleted file mode 100644 index ac50339..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/919182264e029b0d0573353c7abc61c7@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/919182264e029b0d0573353c7abc61c7@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/919182264e029b0d0573353c7abc61c7@3x.png deleted file mode 100644 index d06c579..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/919182264e029b0d0573353c7abc61c7@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9258c358e7c21bf04ee0e4c24ef50659@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9258c358e7c21bf04ee0e4c24ef50659@2x.webp deleted file mode 100644 index 03fac23..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9258c358e7c21bf04ee0e4c24ef50659@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9258c358e7c21bf04ee0e4c24ef50659@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9258c358e7c21bf04ee0e4c24ef50659@3x.webp deleted file mode 100644 index 9c0135f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9258c358e7c21bf04ee0e4c24ef50659@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9258c358e7c21bf04ee0e4c24ef50659@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9258c358e7c21bf04ee0e4c24ef50659@dark@2x.webp deleted file mode 100644 index 18b6939..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9258c358e7c21bf04ee0e4c24ef50659@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9258c358e7c21bf04ee0e4c24ef50659@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9258c358e7c21bf04ee0e4c24ef50659@dark@3x.webp deleted file mode 100644 index 044192b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9258c358e7c21bf04ee0e4c24ef50659@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9333d548d31852e5a4d37f49149c9dcc@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9333d548d31852e5a4d37f49149c9dcc@2x.webp deleted file mode 100644 index 75fa623..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9333d548d31852e5a4d37f49149c9dcc@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9333d548d31852e5a4d37f49149c9dcc@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9333d548d31852e5a4d37f49149c9dcc@3x.webp deleted file mode 100644 index 1a3b918..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9333d548d31852e5a4d37f49149c9dcc@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/936c749c9f0b63d04b24277809c19da0@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/936c749c9f0b63d04b24277809c19da0@2x.png deleted file mode 100644 index fcde447..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/936c749c9f0b63d04b24277809c19da0@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/936c749c9f0b63d04b24277809c19da0@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/936c749c9f0b63d04b24277809c19da0@3x.png deleted file mode 100644 index 040de46..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/936c749c9f0b63d04b24277809c19da0@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/93a51f67ba52f2d48967eb183291e0f9@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/93a51f67ba52f2d48967eb183291e0f9@2x.png deleted file mode 100644 index 6fc3a6c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/93a51f67ba52f2d48967eb183291e0f9@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/93a51f67ba52f2d48967eb183291e0f9@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/93a51f67ba52f2d48967eb183291e0f9@3x.png deleted file mode 100644 index a8f30e8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/93a51f67ba52f2d48967eb183291e0f9@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/93b46b3da2edb8e8cebd4a9ead4179df@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/93b46b3da2edb8e8cebd4a9ead4179df@2x.png deleted file mode 100644 index 1ecd38c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/93b46b3da2edb8e8cebd4a9ead4179df@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/93b46b3da2edb8e8cebd4a9ead4179df@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/93b46b3da2edb8e8cebd4a9ead4179df@3x.png deleted file mode 100644 index 86f7690..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/93b46b3da2edb8e8cebd4a9ead4179df@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/93c2ba3fb33ab782a76031426c46fd81@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/93c2ba3fb33ab782a76031426c46fd81@2x.webp deleted file mode 100644 index 2da8bfd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/93c2ba3fb33ab782a76031426c46fd81@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/93c2ba3fb33ab782a76031426c46fd81@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/93c2ba3fb33ab782a76031426c46fd81@3x.webp deleted file mode 100644 index 690690e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/93c2ba3fb33ab782a76031426c46fd81@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/94262bddb114f9d04770b996ad9be65d@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/94262bddb114f9d04770b996ad9be65d@2x.webp deleted file mode 100644 index 108f093..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/94262bddb114f9d04770b996ad9be65d@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/94262bddb114f9d04770b996ad9be65d@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/94262bddb114f9d04770b996ad9be65d@3x.webp deleted file mode 100644 index 88bb8cb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/94262bddb114f9d04770b996ad9be65d@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9431f74ee143f290b54195b94f341c0b@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9431f74ee143f290b54195b94f341c0b@2x.png deleted file mode 100644 index 9986ee1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9431f74ee143f290b54195b94f341c0b@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9431f74ee143f290b54195b94f341c0b@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9431f74ee143f290b54195b94f341c0b@3x.png deleted file mode 100644 index e4b4394..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9431f74ee143f290b54195b94f341c0b@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9435ec0931cae6a50d06babc7a5b42b2@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9435ec0931cae6a50d06babc7a5b42b2@2x.webp deleted file mode 100644 index c297786..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9435ec0931cae6a50d06babc7a5b42b2@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9435ec0931cae6a50d06babc7a5b42b2@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9435ec0931cae6a50d06babc7a5b42b2@3x.webp deleted file mode 100644 index 10cc18d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9435ec0931cae6a50d06babc7a5b42b2@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/945352810243949fb45aceb4e09a5b99@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/945352810243949fb45aceb4e09a5b99@2x.png deleted file mode 100644 index d831823..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/945352810243949fb45aceb4e09a5b99@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/945352810243949fb45aceb4e09a5b99@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/945352810243949fb45aceb4e09a5b99@3x.png deleted file mode 100644 index a399263..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/945352810243949fb45aceb4e09a5b99@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9501fac5e0d166549bb6466ef8792926@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9501fac5e0d166549bb6466ef8792926@2x.webp deleted file mode 100644 index 0cb4cc2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9501fac5e0d166549bb6466ef8792926@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9501fac5e0d166549bb6466ef8792926@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9501fac5e0d166549bb6466ef8792926@3x.webp deleted file mode 100644 index 22eaeb8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9501fac5e0d166549bb6466ef8792926@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/95316921753d8afcea0d2c984d762778@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/95316921753d8afcea0d2c984d762778@2x.webp deleted file mode 100644 index f8dc24a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/95316921753d8afcea0d2c984d762778@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/95316921753d8afcea0d2c984d762778@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/95316921753d8afcea0d2c984d762778@3x.webp deleted file mode 100644 index 24ca738..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/95316921753d8afcea0d2c984d762778@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/96365ebc4a14c2d7f744f6dea90515b4@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/96365ebc4a14c2d7f744f6dea90515b4@2x.png deleted file mode 100644 index 383fd81..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/96365ebc4a14c2d7f744f6dea90515b4@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/96365ebc4a14c2d7f744f6dea90515b4@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/96365ebc4a14c2d7f744f6dea90515b4@3x.png deleted file mode 100644 index 9108cac..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/96365ebc4a14c2d7f744f6dea90515b4@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/96365ebc4a14c2d7f744f6dea90515b4@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/96365ebc4a14c2d7f744f6dea90515b4@dark@2x.png deleted file mode 100644 index 8c88281..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/96365ebc4a14c2d7f744f6dea90515b4@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/96365ebc4a14c2d7f744f6dea90515b4@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/96365ebc4a14c2d7f744f6dea90515b4@dark@3x.png deleted file mode 100644 index d92491f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/96365ebc4a14c2d7f744f6dea90515b4@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9638f1dfe24ada201fbd0c74b4294894@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9638f1dfe24ada201fbd0c74b4294894@2x.webp deleted file mode 100644 index 4f6e47c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9638f1dfe24ada201fbd0c74b4294894@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9638f1dfe24ada201fbd0c74b4294894@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9638f1dfe24ada201fbd0c74b4294894@3x.webp deleted file mode 100644 index 6d98751..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9638f1dfe24ada201fbd0c74b4294894@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9642078df71da0c8d4ef362f2e6353a2@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9642078df71da0c8d4ef362f2e6353a2@2x.webp deleted file mode 100644 index c9fdfdf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9642078df71da0c8d4ef362f2e6353a2@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9642078df71da0c8d4ef362f2e6353a2@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9642078df71da0c8d4ef362f2e6353a2@3x.webp deleted file mode 100644 index 00b3085..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9642078df71da0c8d4ef362f2e6353a2@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9642078df71da0c8d4ef362f2e6353a2@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9642078df71da0c8d4ef362f2e6353a2@dark@2x.webp deleted file mode 100644 index d1ccc61..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9642078df71da0c8d4ef362f2e6353a2@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9642078df71da0c8d4ef362f2e6353a2@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9642078df71da0c8d4ef362f2e6353a2@dark@3x.webp deleted file mode 100644 index 96b5e40..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9642078df71da0c8d4ef362f2e6353a2@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/965b9d85c6cd67fae41703ea96ebc78c@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/965b9d85c6cd67fae41703ea96ebc78c@2x.png deleted file mode 100644 index 46ccad6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/965b9d85c6cd67fae41703ea96ebc78c@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/965b9d85c6cd67fae41703ea96ebc78c@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/965b9d85c6cd67fae41703ea96ebc78c@3x.png deleted file mode 100644 index f9a747d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/965b9d85c6cd67fae41703ea96ebc78c@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/965b9d85c6cd67fae41703ea96ebc78c@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/965b9d85c6cd67fae41703ea96ebc78c@dark@2x.png deleted file mode 100644 index c5b703a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/965b9d85c6cd67fae41703ea96ebc78c@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/965b9d85c6cd67fae41703ea96ebc78c@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/965b9d85c6cd67fae41703ea96ebc78c@dark@3x.png deleted file mode 100644 index bc17e30..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/965b9d85c6cd67fae41703ea96ebc78c@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/968e3af112fabdfe07f362f33a9f6cd1@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/968e3af112fabdfe07f362f33a9f6cd1@2x.webp deleted file mode 100644 index 80f66f9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/968e3af112fabdfe07f362f33a9f6cd1@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/968e3af112fabdfe07f362f33a9f6cd1@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/968e3af112fabdfe07f362f33a9f6cd1@3x.webp deleted file mode 100644 index 85e86c1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/968e3af112fabdfe07f362f33a9f6cd1@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/972cc62f0ca4b08a0dbd48c64e483047@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/972cc62f0ca4b08a0dbd48c64e483047@2x.png deleted file mode 100644 index 75e60f8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/972cc62f0ca4b08a0dbd48c64e483047@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/972cc62f0ca4b08a0dbd48c64e483047@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/972cc62f0ca4b08a0dbd48c64e483047@3x.png deleted file mode 100644 index 4eef524..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/972cc62f0ca4b08a0dbd48c64e483047@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/972cc62f0ca4b08a0dbd48c64e483047@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/972cc62f0ca4b08a0dbd48c64e483047@dark@2x.png deleted file mode 100644 index c6acc0d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/972cc62f0ca4b08a0dbd48c64e483047@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/972cc62f0ca4b08a0dbd48c64e483047@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/972cc62f0ca4b08a0dbd48c64e483047@dark@3x.png deleted file mode 100644 index 769bb61..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/972cc62f0ca4b08a0dbd48c64e483047@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/97b82d2bd23f110bb5da21494b092acf@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/97b82d2bd23f110bb5da21494b092acf@2x.webp deleted file mode 100644 index 2a852fc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/97b82d2bd23f110bb5da21494b092acf@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/97b82d2bd23f110bb5da21494b092acf@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/97b82d2bd23f110bb5da21494b092acf@3x.webp deleted file mode 100644 index 0257040..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/97b82d2bd23f110bb5da21494b092acf@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/985f49aa13fc0bd6b2b895ce6a2f13bc@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/985f49aa13fc0bd6b2b895ce6a2f13bc@2x.webp deleted file mode 100644 index fc57409..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/985f49aa13fc0bd6b2b895ce6a2f13bc@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/985f49aa13fc0bd6b2b895ce6a2f13bc@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/985f49aa13fc0bd6b2b895ce6a2f13bc@3x.webp deleted file mode 100644 index 285970e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/985f49aa13fc0bd6b2b895ce6a2f13bc@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98847532b7d9131cb7fd5fce63bbd2fe@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98847532b7d9131cb7fd5fce63bbd2fe@2x.webp deleted file mode 100644 index 2e122a1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98847532b7d9131cb7fd5fce63bbd2fe@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98847532b7d9131cb7fd5fce63bbd2fe@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98847532b7d9131cb7fd5fce63bbd2fe@3x.webp deleted file mode 100644 index 4778f1d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98847532b7d9131cb7fd5fce63bbd2fe@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98a2f8f6d7b3ab9e6261897352849fe3@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98a2f8f6d7b3ab9e6261897352849fe3@2x.webp deleted file mode 100644 index 3aa917d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98a2f8f6d7b3ab9e6261897352849fe3@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98a2f8f6d7b3ab9e6261897352849fe3@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98a2f8f6d7b3ab9e6261897352849fe3@3x.webp deleted file mode 100644 index 24e3f1a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98a2f8f6d7b3ab9e6261897352849fe3@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98b5293d1af8588541724e51f1230d44@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98b5293d1af8588541724e51f1230d44@2x.webp deleted file mode 100644 index 4113683..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98b5293d1af8588541724e51f1230d44@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98b5293d1af8588541724e51f1230d44@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98b5293d1af8588541724e51f1230d44@3x.webp deleted file mode 100644 index 943ce35..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98b5293d1af8588541724e51f1230d44@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98b8fa7085f217378580261665b66ff4@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98b8fa7085f217378580261665b66ff4@2x.png deleted file mode 100644 index f8ddf31..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98b8fa7085f217378580261665b66ff4@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98b8fa7085f217378580261665b66ff4@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98b8fa7085f217378580261665b66ff4@3x.png deleted file mode 100644 index 3ff13a0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98b8fa7085f217378580261665b66ff4@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98b8fa7085f217378580261665b66ff4@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98b8fa7085f217378580261665b66ff4@dark@2x.png deleted file mode 100644 index cb5dbf7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98b8fa7085f217378580261665b66ff4@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98b8fa7085f217378580261665b66ff4@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98b8fa7085f217378580261665b66ff4@dark@3x.png deleted file mode 100644 index 31a8f29..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/98b8fa7085f217378580261665b66ff4@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9908b4466cef0fe4f0034f00e7a1cb04@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9908b4466cef0fe4f0034f00e7a1cb04@2x.webp deleted file mode 100644 index ead0889..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9908b4466cef0fe4f0034f00e7a1cb04@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9908b4466cef0fe4f0034f00e7a1cb04@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9908b4466cef0fe4f0034f00e7a1cb04@3x.webp deleted file mode 100644 index 58e6be4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9908b4466cef0fe4f0034f00e7a1cb04@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9928e4e60b6bcf84a24b89c733cf8a20@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9928e4e60b6bcf84a24b89c733cf8a20@2x.webp deleted file mode 100644 index 2b972df..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9928e4e60b6bcf84a24b89c733cf8a20@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9928e4e60b6bcf84a24b89c733cf8a20@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9928e4e60b6bcf84a24b89c733cf8a20@3x.webp deleted file mode 100644 index 12ccd0a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9928e4e60b6bcf84a24b89c733cf8a20@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/99805526ac3fba60462c0d4fe5617860@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/99805526ac3fba60462c0d4fe5617860@2x.webp deleted file mode 100644 index 9eb9493..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/99805526ac3fba60462c0d4fe5617860@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/99805526ac3fba60462c0d4fe5617860@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/99805526ac3fba60462c0d4fe5617860@3x.webp deleted file mode 100644 index 4cd8a96..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/99805526ac3fba60462c0d4fe5617860@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/99b36385205cf7fc0c3d78925b316d43@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/99b36385205cf7fc0c3d78925b316d43@2x.png deleted file mode 100644 index 68d4294..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/99b36385205cf7fc0c3d78925b316d43@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/99b36385205cf7fc0c3d78925b316d43@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/99b36385205cf7fc0c3d78925b316d43@3x.png deleted file mode 100644 index 712dd7e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/99b36385205cf7fc0c3d78925b316d43@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9a0341b7338c149cc74c97f6011f50bd@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9a0341b7338c149cc74c97f6011f50bd@2x.png deleted file mode 100644 index 50f22de..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9a0341b7338c149cc74c97f6011f50bd@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9a0341b7338c149cc74c97f6011f50bd@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9a0341b7338c149cc74c97f6011f50bd@3x.png deleted file mode 100644 index 6396380..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9a0341b7338c149cc74c97f6011f50bd@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9a5592f15f18a449bee291d59fe10d0d@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9a5592f15f18a449bee291d59fe10d0d@2x.png deleted file mode 100644 index 187461b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9a5592f15f18a449bee291d59fe10d0d@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9a5592f15f18a449bee291d59fe10d0d@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9a5592f15f18a449bee291d59fe10d0d@3x.png deleted file mode 100644 index a2b4085..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9a5592f15f18a449bee291d59fe10d0d@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9a864b02b1af716d311f3236fb07840e@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9a864b02b1af716d311f3236fb07840e@2x.webp deleted file mode 100644 index ca7d989..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9a864b02b1af716d311f3236fb07840e@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9a864b02b1af716d311f3236fb07840e@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9a864b02b1af716d311f3236fb07840e@3x.webp deleted file mode 100644 index 6b5af30..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9a864b02b1af716d311f3236fb07840e@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ab17a88e02905474e069acb55fda96e@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ab17a88e02905474e069acb55fda96e@2x.png deleted file mode 100644 index ac5cb0a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ab17a88e02905474e069acb55fda96e@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ab17a88e02905474e069acb55fda96e@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ab17a88e02905474e069acb55fda96e@3x.png deleted file mode 100644 index 51b8196..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ab17a88e02905474e069acb55fda96e@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9b3736480655335f3eb727eb237fc43d@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9b3736480655335f3eb727eb237fc43d@2x.webp deleted file mode 100644 index 77d5fd2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9b3736480655335f3eb727eb237fc43d@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9b3736480655335f3eb727eb237fc43d@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9b3736480655335f3eb727eb237fc43d@3x.webp deleted file mode 100644 index 7547c6d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9b3736480655335f3eb727eb237fc43d@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9b66307e72b7bc23ca126816d98d9a32@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9b66307e72b7bc23ca126816d98d9a32@2x.webp deleted file mode 100644 index 351118b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9b66307e72b7bc23ca126816d98d9a32@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9b66307e72b7bc23ca126816d98d9a32@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9b66307e72b7bc23ca126816d98d9a32@3x.webp deleted file mode 100644 index e451571..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9b66307e72b7bc23ca126816d98d9a32@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9bfd7086086395320a80a29492df33e7@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9bfd7086086395320a80a29492df33e7@2x.webp deleted file mode 100644 index ebfe575..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9bfd7086086395320a80a29492df33e7@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9bfd7086086395320a80a29492df33e7@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9bfd7086086395320a80a29492df33e7@3x.webp deleted file mode 100644 index d9c0046..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9bfd7086086395320a80a29492df33e7@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9bfd7086086395320a80a29492df33e7@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9bfd7086086395320a80a29492df33e7@dark@2x.webp deleted file mode 100644 index 38c705e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9bfd7086086395320a80a29492df33e7@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9bfd7086086395320a80a29492df33e7@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9bfd7086086395320a80a29492df33e7@dark@3x.webp deleted file mode 100644 index d79d7f1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9bfd7086086395320a80a29492df33e7@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9c0443f7cf85c812a9ed94c6d068be06@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9c0443f7cf85c812a9ed94c6d068be06@2x.webp deleted file mode 100644 index 749df1f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9c0443f7cf85c812a9ed94c6d068be06@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9c0443f7cf85c812a9ed94c6d068be06@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9c0443f7cf85c812a9ed94c6d068be06@3x.webp deleted file mode 100644 index 7fba814..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9c0443f7cf85c812a9ed94c6d068be06@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9c2ad81b09c539ba471cdba769782ae3@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9c2ad81b09c539ba471cdba769782ae3@2x.png deleted file mode 100644 index f9e3de6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9c2ad81b09c539ba471cdba769782ae3@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9c2ad81b09c539ba471cdba769782ae3@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9c2ad81b09c539ba471cdba769782ae3@3x.png deleted file mode 100644 index 4765e28..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9c2ad81b09c539ba471cdba769782ae3@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9c5eaa0653469a8967859f323dd8084a@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9c5eaa0653469a8967859f323dd8084a@2x.webp deleted file mode 100644 index d69911e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9c5eaa0653469a8967859f323dd8084a@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9c5eaa0653469a8967859f323dd8084a@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9c5eaa0653469a8967859f323dd8084a@3x.webp deleted file mode 100644 index 0d2ce77..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9c5eaa0653469a8967859f323dd8084a@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9c97984259b44d2b3c61fe02af932fcd@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9c97984259b44d2b3c61fe02af932fcd@2x.webp deleted file mode 100644 index 1294b91..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9c97984259b44d2b3c61fe02af932fcd@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9c97984259b44d2b3c61fe02af932fcd@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9c97984259b44d2b3c61fe02af932fcd@3x.webp deleted file mode 100644 index 6fcbd3d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9c97984259b44d2b3c61fe02af932fcd@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ce4b5953e0c2fdafa6547bd525f72a3@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ce4b5953e0c2fdafa6547bd525f72a3@2x.png deleted file mode 100644 index 4220660..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ce4b5953e0c2fdafa6547bd525f72a3@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ce4b5953e0c2fdafa6547bd525f72a3@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ce4b5953e0c2fdafa6547bd525f72a3@3x.png deleted file mode 100644 index b18d019..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ce4b5953e0c2fdafa6547bd525f72a3@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ce4b5953e0c2fdafa6547bd525f72a3@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ce4b5953e0c2fdafa6547bd525f72a3@dark@2x.png deleted file mode 100644 index 56ff3cb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ce4b5953e0c2fdafa6547bd525f72a3@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ce4b5953e0c2fdafa6547bd525f72a3@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ce4b5953e0c2fdafa6547bd525f72a3@dark@3x.png deleted file mode 100644 index e3e8ae8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ce4b5953e0c2fdafa6547bd525f72a3@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9cf7eda05ecb383c39534feddc42fe05@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9cf7eda05ecb383c39534feddc42fe05@2x.webp deleted file mode 100644 index 830ceda..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9cf7eda05ecb383c39534feddc42fe05@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9cf7eda05ecb383c39534feddc42fe05@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9cf7eda05ecb383c39534feddc42fe05@3x.webp deleted file mode 100644 index 141b39c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9cf7eda05ecb383c39534feddc42fe05@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9d5f8949240b7a1adb5a355783bba672@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9d5f8949240b7a1adb5a355783bba672@2x.webp deleted file mode 100644 index 7b3c1ce..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9d5f8949240b7a1adb5a355783bba672@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9d5f8949240b7a1adb5a355783bba672@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9d5f8949240b7a1adb5a355783bba672@3x.webp deleted file mode 100644 index 41601ac..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9d5f8949240b7a1adb5a355783bba672@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9daf2b8666ffce740437b686fc8b7b59@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9daf2b8666ffce740437b686fc8b7b59@2x.png deleted file mode 100644 index 25d65d3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9daf2b8666ffce740437b686fc8b7b59@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9daf2b8666ffce740437b686fc8b7b59@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9daf2b8666ffce740437b686fc8b7b59@3x.png deleted file mode 100644 index 6d8ae6f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9daf2b8666ffce740437b686fc8b7b59@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9eacd285eaa3807567ccec12eb1b5f3f@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9eacd285eaa3807567ccec12eb1b5f3f@2x.webp deleted file mode 100644 index 005cf88..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9eacd285eaa3807567ccec12eb1b5f3f@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9eacd285eaa3807567ccec12eb1b5f3f@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9eacd285eaa3807567ccec12eb1b5f3f@3x.webp deleted file mode 100644 index d417a84..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9eacd285eaa3807567ccec12eb1b5f3f@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9eacd285eaa3807567ccec12eb1b5f3f@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9eacd285eaa3807567ccec12eb1b5f3f@dark@2x.webp deleted file mode 100644 index 4c6c8a5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9eacd285eaa3807567ccec12eb1b5f3f@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9eacd285eaa3807567ccec12eb1b5f3f@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9eacd285eaa3807567ccec12eb1b5f3f@dark@3x.webp deleted file mode 100644 index 116f7fb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9eacd285eaa3807567ccec12eb1b5f3f@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ecd653a8fac7f932cbd0c57dc262b60@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ecd653a8fac7f932cbd0c57dc262b60@2x.webp deleted file mode 100644 index 252a15c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ecd653a8fac7f932cbd0c57dc262b60@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ecd653a8fac7f932cbd0c57dc262b60@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ecd653a8fac7f932cbd0c57dc262b60@3x.webp deleted file mode 100644 index d39e973..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ecd653a8fac7f932cbd0c57dc262b60@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ee2b4413fed3ccc18267158bce1b5e1@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ee2b4413fed3ccc18267158bce1b5e1@2x.webp deleted file mode 100644 index ef8414d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ee2b4413fed3ccc18267158bce1b5e1@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ee2b4413fed3ccc18267158bce1b5e1@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ee2b4413fed3ccc18267158bce1b5e1@3x.webp deleted file mode 100644 index 4bd772e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9ee2b4413fed3ccc18267158bce1b5e1@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9f0cd58d42222787ebfd3e39568dc744@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9f0cd58d42222787ebfd3e39568dc744@2x.webp deleted file mode 100644 index 7940565..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9f0cd58d42222787ebfd3e39568dc744@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9f0cd58d42222787ebfd3e39568dc744@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9f0cd58d42222787ebfd3e39568dc744@3x.webp deleted file mode 100644 index 36f77b1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/9f0cd58d42222787ebfd3e39568dc744@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a02c86aff977e164276e4a4b6ab56766@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a02c86aff977e164276e4a4b6ab56766@2x.webp deleted file mode 100644 index dfc7140..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a02c86aff977e164276e4a4b6ab56766@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a02c86aff977e164276e4a4b6ab56766@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a02c86aff977e164276e4a4b6ab56766@3x.webp deleted file mode 100644 index 11174fa..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a02c86aff977e164276e4a4b6ab56766@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a05b613b81fcd7bb72060d8b2a36cbfd@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a05b613b81fcd7bb72060d8b2a36cbfd@2x.webp deleted file mode 100644 index 83825d5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a05b613b81fcd7bb72060d8b2a36cbfd@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a05b613b81fcd7bb72060d8b2a36cbfd@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a05b613b81fcd7bb72060d8b2a36cbfd@3x.webp deleted file mode 100644 index cd3de06..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a05b613b81fcd7bb72060d8b2a36cbfd@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a0e9a427a8a8adc83bdd9f1fae3887b8@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a0e9a427a8a8adc83bdd9f1fae3887b8@2x.webp deleted file mode 100644 index d13483d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a0e9a427a8a8adc83bdd9f1fae3887b8@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a0e9a427a8a8adc83bdd9f1fae3887b8@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a0e9a427a8a8adc83bdd9f1fae3887b8@3x.webp deleted file mode 100644 index c36e893..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a0e9a427a8a8adc83bdd9f1fae3887b8@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a113c26f3f96a1efe227ca04f2f5a29d@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a113c26f3f96a1efe227ca04f2f5a29d@2x.png deleted file mode 100644 index c6de509..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a113c26f3f96a1efe227ca04f2f5a29d@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a113c26f3f96a1efe227ca04f2f5a29d@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a113c26f3f96a1efe227ca04f2f5a29d@3x.png deleted file mode 100644 index 87505d5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a113c26f3f96a1efe227ca04f2f5a29d@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a11d5543bddced048566291579acd9b4@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a11d5543bddced048566291579acd9b4@2x.png deleted file mode 100644 index 0855116..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a11d5543bddced048566291579acd9b4@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a11d5543bddced048566291579acd9b4@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a11d5543bddced048566291579acd9b4@3x.png deleted file mode 100644 index f135730..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a11d5543bddced048566291579acd9b4@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a267ddbfc96602f0fff318ddd6f67522@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a267ddbfc96602f0fff318ddd6f67522@2x.webp deleted file mode 100644 index b902b27..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a267ddbfc96602f0fff318ddd6f67522@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a267ddbfc96602f0fff318ddd6f67522@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a267ddbfc96602f0fff318ddd6f67522@3x.webp deleted file mode 100644 index 46130a4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a267ddbfc96602f0fff318ddd6f67522@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a388ff8c9cee8573bf561df414c40c33@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a388ff8c9cee8573bf561df414c40c33@2x.webp deleted file mode 100644 index 4a67311..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a388ff8c9cee8573bf561df414c40c33@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a388ff8c9cee8573bf561df414c40c33@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a388ff8c9cee8573bf561df414c40c33@3x.webp deleted file mode 100644 index 726c262..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a388ff8c9cee8573bf561df414c40c33@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a3c32e751ccfa13d1c94bdf83b01b523@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a3c32e751ccfa13d1c94bdf83b01b523@2x.webp deleted file mode 100644 index cb9aab1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a3c32e751ccfa13d1c94bdf83b01b523@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a3c32e751ccfa13d1c94bdf83b01b523@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a3c32e751ccfa13d1c94bdf83b01b523@3x.webp deleted file mode 100644 index 23ba9e1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a3c32e751ccfa13d1c94bdf83b01b523@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a3c32e751ccfa13d1c94bdf83b01b523@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a3c32e751ccfa13d1c94bdf83b01b523@dark@2x.webp deleted file mode 100644 index 9eb9493..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a3c32e751ccfa13d1c94bdf83b01b523@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a3c32e751ccfa13d1c94bdf83b01b523@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a3c32e751ccfa13d1c94bdf83b01b523@dark@3x.webp deleted file mode 100644 index 4cd8a96..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a3c32e751ccfa13d1c94bdf83b01b523@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a3de686af361b8a605671852ea5e8e29@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a3de686af361b8a605671852ea5e8e29@2x.webp deleted file mode 100644 index 801161d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a3de686af361b8a605671852ea5e8e29@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a3de686af361b8a605671852ea5e8e29@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a3de686af361b8a605671852ea5e8e29@3x.webp deleted file mode 100644 index 5de7d2c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a3de686af361b8a605671852ea5e8e29@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a4d621e2dfbad243f8dddb24a7974298@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a4d621e2dfbad243f8dddb24a7974298@2x.png deleted file mode 100644 index 9c97d30..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a4d621e2dfbad243f8dddb24a7974298@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a4d621e2dfbad243f8dddb24a7974298@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a4d621e2dfbad243f8dddb24a7974298@3x.png deleted file mode 100644 index 0a9a0ef..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a4d621e2dfbad243f8dddb24a7974298@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a4d621e2dfbad243f8dddb24a7974298@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a4d621e2dfbad243f8dddb24a7974298@dark@2x.png deleted file mode 100644 index e98b839..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a4d621e2dfbad243f8dddb24a7974298@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a4d621e2dfbad243f8dddb24a7974298@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a4d621e2dfbad243f8dddb24a7974298@dark@3x.png deleted file mode 100644 index 12290d0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a4d621e2dfbad243f8dddb24a7974298@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a54ddd56ab7af2b74be792448e9302d3@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a54ddd56ab7af2b74be792448e9302d3@2x.png deleted file mode 100644 index f1791bd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a54ddd56ab7af2b74be792448e9302d3@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a54ddd56ab7af2b74be792448e9302d3@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a54ddd56ab7af2b74be792448e9302d3@3x.png deleted file mode 100644 index 9ba9457..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a54ddd56ab7af2b74be792448e9302d3@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a5826af993c9bfcfbce4c747c4a05b34@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a5826af993c9bfcfbce4c747c4a05b34@2x.png deleted file mode 100644 index 2e4db40..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a5826af993c9bfcfbce4c747c4a05b34@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a5826af993c9bfcfbce4c747c4a05b34@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a5826af993c9bfcfbce4c747c4a05b34@3x.png deleted file mode 100644 index c91b327..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a5826af993c9bfcfbce4c747c4a05b34@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a659bf7fa7eea226545cdd75fa4da1a3@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a659bf7fa7eea226545cdd75fa4da1a3@2x.webp deleted file mode 100644 index e6b7f7b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a659bf7fa7eea226545cdd75fa4da1a3@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a659bf7fa7eea226545cdd75fa4da1a3@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a659bf7fa7eea226545cdd75fa4da1a3@3x.webp deleted file mode 100644 index d86a763..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a659bf7fa7eea226545cdd75fa4da1a3@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a659bf7fa7eea226545cdd75fa4da1a3@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a659bf7fa7eea226545cdd75fa4da1a3@dark@2x.webp deleted file mode 100644 index eb9026b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a659bf7fa7eea226545cdd75fa4da1a3@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a659bf7fa7eea226545cdd75fa4da1a3@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a659bf7fa7eea226545cdd75fa4da1a3@dark@3x.webp deleted file mode 100644 index dbeacfd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a659bf7fa7eea226545cdd75fa4da1a3@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a65f29fc406a834886a63738b9b6e2d8@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a65f29fc406a834886a63738b9b6e2d8@2x.webp deleted file mode 100644 index b908646..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a65f29fc406a834886a63738b9b6e2d8@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a65f29fc406a834886a63738b9b6e2d8@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a65f29fc406a834886a63738b9b6e2d8@3x.webp deleted file mode 100644 index ce2dd34..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a65f29fc406a834886a63738b9b6e2d8@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a6a1dcd75b97967431f0bae280618aa9@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a6a1dcd75b97967431f0bae280618aa9@2x.webp deleted file mode 100644 index cf9ebfb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a6a1dcd75b97967431f0bae280618aa9@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a6a1dcd75b97967431f0bae280618aa9@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a6a1dcd75b97967431f0bae280618aa9@3x.webp deleted file mode 100644 index 97d62dd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a6a1dcd75b97967431f0bae280618aa9@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a71245423569cef6b611e61c5a07de53@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a71245423569cef6b611e61c5a07de53@2x.png deleted file mode 100644 index a87afa6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a71245423569cef6b611e61c5a07de53@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a71245423569cef6b611e61c5a07de53@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a71245423569cef6b611e61c5a07de53@3x.png deleted file mode 100644 index 4bbdb6d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a71245423569cef6b611e61c5a07de53@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a71245423569cef6b611e61c5a07de53@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a71245423569cef6b611e61c5a07de53@dark@2x.png deleted file mode 100644 index ac5d724..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a71245423569cef6b611e61c5a07de53@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a71245423569cef6b611e61c5a07de53@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a71245423569cef6b611e61c5a07de53@dark@3x.png deleted file mode 100644 index ef8728c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a71245423569cef6b611e61c5a07de53@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a75d6b4d23029b4a6c17bd8f058f859e@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a75d6b4d23029b4a6c17bd8f058f859e@2x.webp deleted file mode 100644 index db922b5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a75d6b4d23029b4a6c17bd8f058f859e@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a75d6b4d23029b4a6c17bd8f058f859e@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a75d6b4d23029b4a6c17bd8f058f859e@3x.webp deleted file mode 100644 index bf1d23f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a75d6b4d23029b4a6c17bd8f058f859e@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a75d6b4d23029b4a6c17bd8f058f859e@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a75d6b4d23029b4a6c17bd8f058f859e@dark@2x.webp deleted file mode 100644 index 2c6858a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a75d6b4d23029b4a6c17bd8f058f859e@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a75d6b4d23029b4a6c17bd8f058f859e@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a75d6b4d23029b4a6c17bd8f058f859e@dark@3x.webp deleted file mode 100644 index 8ca97f3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a75d6b4d23029b4a6c17bd8f058f859e@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a784662cf05b3fcb11158f83d8c5aa72@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a784662cf05b3fcb11158f83d8c5aa72@2x.webp deleted file mode 100644 index f6a13c9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a784662cf05b3fcb11158f83d8c5aa72@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a784662cf05b3fcb11158f83d8c5aa72@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a784662cf05b3fcb11158f83d8c5aa72@3x.webp deleted file mode 100644 index 650cbcc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a784662cf05b3fcb11158f83d8c5aa72@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a801c8e071b214e0b0420f57490bca40@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a801c8e071b214e0b0420f57490bca40@2x.png deleted file mode 100644 index 8bac643..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a801c8e071b214e0b0420f57490bca40@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a801c8e071b214e0b0420f57490bca40@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a801c8e071b214e0b0420f57490bca40@3x.png deleted file mode 100644 index 73a75f2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a801c8e071b214e0b0420f57490bca40@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a801c8e071b214e0b0420f57490bca40@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a801c8e071b214e0b0420f57490bca40@dark@2x.png deleted file mode 100644 index 23d136e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a801c8e071b214e0b0420f57490bca40@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a801c8e071b214e0b0420f57490bca40@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a801c8e071b214e0b0420f57490bca40@dark@3x.png deleted file mode 100644 index efefc9b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a801c8e071b214e0b0420f57490bca40@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a83988bf88d9a0f9b1485632993c3fca@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a83988bf88d9a0f9b1485632993c3fca@2x.png deleted file mode 100644 index 2ef9c4b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a83988bf88d9a0f9b1485632993c3fca@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a83988bf88d9a0f9b1485632993c3fca@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a83988bf88d9a0f9b1485632993c3fca@3x.png deleted file mode 100644 index 64f8bcd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a83988bf88d9a0f9b1485632993c3fca@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a896e977ba0243ffb3c958cb0ad566e7@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a896e977ba0243ffb3c958cb0ad566e7@2x.webp deleted file mode 100644 index 2835c99..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a896e977ba0243ffb3c958cb0ad566e7@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a896e977ba0243ffb3c958cb0ad566e7@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a896e977ba0243ffb3c958cb0ad566e7@3x.webp deleted file mode 100644 index 73d2d07..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a896e977ba0243ffb3c958cb0ad566e7@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a90ea51f5310ded50259fc2142ecdfb5@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a90ea51f5310ded50259fc2142ecdfb5@2x.png deleted file mode 100644 index 809345f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a90ea51f5310ded50259fc2142ecdfb5@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a90ea51f5310ded50259fc2142ecdfb5@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a90ea51f5310ded50259fc2142ecdfb5@3x.png deleted file mode 100644 index 9576abc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a90ea51f5310ded50259fc2142ecdfb5@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a96a85a0933d64133d0df8b29a7bdd8e@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a96a85a0933d64133d0df8b29a7bdd8e@2x.png deleted file mode 100644 index c02a364..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a96a85a0933d64133d0df8b29a7bdd8e@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a96a85a0933d64133d0df8b29a7bdd8e@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a96a85a0933d64133d0df8b29a7bdd8e@3x.png deleted file mode 100644 index a4f0edc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a96a85a0933d64133d0df8b29a7bdd8e@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a96a85a0933d64133d0df8b29a7bdd8e@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a96a85a0933d64133d0df8b29a7bdd8e@dark@2x.png deleted file mode 100644 index 6cb25e5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a96a85a0933d64133d0df8b29a7bdd8e@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a96a85a0933d64133d0df8b29a7bdd8e@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a96a85a0933d64133d0df8b29a7bdd8e@dark@3x.png deleted file mode 100644 index f5fa18c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a96a85a0933d64133d0df8b29a7bdd8e@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a9c5dd52a8b27687894cdc8d4472a72c@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a9c5dd52a8b27687894cdc8d4472a72c@2x.webp deleted file mode 100644 index 50235bb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a9c5dd52a8b27687894cdc8d4472a72c@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a9c5dd52a8b27687894cdc8d4472a72c@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a9c5dd52a8b27687894cdc8d4472a72c@3x.webp deleted file mode 100644 index 4743145..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/a9c5dd52a8b27687894cdc8d4472a72c@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/aa46c5d3dcfc2ade03fb072f3f2a9959@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/aa46c5d3dcfc2ade03fb072f3f2a9959@2x.webp deleted file mode 100644 index 7419b6f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/aa46c5d3dcfc2ade03fb072f3f2a9959@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/aa46c5d3dcfc2ade03fb072f3f2a9959@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/aa46c5d3dcfc2ade03fb072f3f2a9959@3x.webp deleted file mode 100644 index 023f1bf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/aa46c5d3dcfc2ade03fb072f3f2a9959@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/aad5b85ee72d117b7035a08af82e43a3@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/aad5b85ee72d117b7035a08af82e43a3@2x.webp deleted file mode 100644 index 2b6de9b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/aad5b85ee72d117b7035a08af82e43a3@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/aad5b85ee72d117b7035a08af82e43a3@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/aad5b85ee72d117b7035a08af82e43a3@3x.webp deleted file mode 100644 index a1533b5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/aad5b85ee72d117b7035a08af82e43a3@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/aae085bf63fb8e37ab395d82b8850425@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/aae085bf63fb8e37ab395d82b8850425@2x.png deleted file mode 100644 index dd8389f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/aae085bf63fb8e37ab395d82b8850425@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/aae085bf63fb8e37ab395d82b8850425@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/aae085bf63fb8e37ab395d82b8850425@3x.png deleted file mode 100644 index 612f061..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/aae085bf63fb8e37ab395d82b8850425@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ab5e1bee10c8807b79afb3481d816200@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ab5e1bee10c8807b79afb3481d816200@2x.webp deleted file mode 100644 index cc64a36..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ab5e1bee10c8807b79afb3481d816200@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ab5e1bee10c8807b79afb3481d816200@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ab5e1bee10c8807b79afb3481d816200@3x.webp deleted file mode 100644 index a684dc4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ab5e1bee10c8807b79afb3481d816200@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/abcfeaf3288685eac3e5d97b6103a3dc@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/abcfeaf3288685eac3e5d97b6103a3dc@2x.webp deleted file mode 100644 index 839224b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/abcfeaf3288685eac3e5d97b6103a3dc@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/abcfeaf3288685eac3e5d97b6103a3dc@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/abcfeaf3288685eac3e5d97b6103a3dc@3x.webp deleted file mode 100644 index c0cf7ae..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/abcfeaf3288685eac3e5d97b6103a3dc@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ac1394283490023185d8719f9cdf9bbb@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ac1394283490023185d8719f9cdf9bbb@2x.webp deleted file mode 100644 index c70a51b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ac1394283490023185d8719f9cdf9bbb@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ac1394283490023185d8719f9cdf9bbb@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ac1394283490023185d8719f9cdf9bbb@3x.webp deleted file mode 100644 index 410fcdb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ac1394283490023185d8719f9cdf9bbb@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ac84a3fd9aacb2e2e5591707d0e9d9e3@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ac84a3fd9aacb2e2e5591707d0e9d9e3@2x.png deleted file mode 100644 index 6227e7a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ac84a3fd9aacb2e2e5591707d0e9d9e3@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ac84a3fd9aacb2e2e5591707d0e9d9e3@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ac84a3fd9aacb2e2e5591707d0e9d9e3@3x.png deleted file mode 100644 index 58aaea3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ac84a3fd9aacb2e2e5591707d0e9d9e3@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ac84a3fd9aacb2e2e5591707d0e9d9e3@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ac84a3fd9aacb2e2e5591707d0e9d9e3@dark@2x.png deleted file mode 100644 index 4513f32..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ac84a3fd9aacb2e2e5591707d0e9d9e3@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ac84a3fd9aacb2e2e5591707d0e9d9e3@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ac84a3fd9aacb2e2e5591707d0e9d9e3@dark@3x.png deleted file mode 100644 index 867c472..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ac84a3fd9aacb2e2e5591707d0e9d9e3@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ad4b4620e0d97b9550bd65ce50803806@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ad4b4620e0d97b9550bd65ce50803806@2x.webp deleted file mode 100644 index 329c989..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ad4b4620e0d97b9550bd65ce50803806@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ad4b4620e0d97b9550bd65ce50803806@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ad4b4620e0d97b9550bd65ce50803806@3x.webp deleted file mode 100644 index 3723bdf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ad4b4620e0d97b9550bd65ce50803806@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ad4c97f04099d110ca938bf03134b4fb@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ad4c97f04099d110ca938bf03134b4fb@2x.png deleted file mode 100644 index cd2c446..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ad4c97f04099d110ca938bf03134b4fb@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ad4c97f04099d110ca938bf03134b4fb@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ad4c97f04099d110ca938bf03134b4fb@3x.png deleted file mode 100644 index 51f6566..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ad4c97f04099d110ca938bf03134b4fb@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ae0e0bb421a8b77aa6066f2a33b691fc@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ae0e0bb421a8b77aa6066f2a33b691fc@2x.webp deleted file mode 100644 index 2eba2ff..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ae0e0bb421a8b77aa6066f2a33b691fc@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ae0e0bb421a8b77aa6066f2a33b691fc@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ae0e0bb421a8b77aa6066f2a33b691fc@3x.webp deleted file mode 100644 index c665dd0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ae0e0bb421a8b77aa6066f2a33b691fc@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ae0e0bb421a8b77aa6066f2a33b691fc@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ae0e0bb421a8b77aa6066f2a33b691fc@dark@2x.webp deleted file mode 100644 index bc5f752..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ae0e0bb421a8b77aa6066f2a33b691fc@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ae0e0bb421a8b77aa6066f2a33b691fc@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ae0e0bb421a8b77aa6066f2a33b691fc@dark@3x.webp deleted file mode 100644 index b9151cc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ae0e0bb421a8b77aa6066f2a33b691fc@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ae12da3849f333d71376ae4e3b6b491b@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ae12da3849f333d71376ae4e3b6b491b@2x.webp deleted file mode 100644 index d755ab3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ae12da3849f333d71376ae4e3b6b491b@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ae12da3849f333d71376ae4e3b6b491b@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ae12da3849f333d71376ae4e3b6b491b@3x.webp deleted file mode 100644 index 87d0ae9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ae12da3849f333d71376ae4e3b6b491b@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ae12da3849f333d71376ae4e3b6b491b@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ae12da3849f333d71376ae4e3b6b491b@dark@2x.webp deleted file mode 100644 index 0969e85..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ae12da3849f333d71376ae4e3b6b491b@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ae12da3849f333d71376ae4e3b6b491b@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ae12da3849f333d71376ae4e3b6b491b@dark@3x.webp deleted file mode 100644 index 56ea2a1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ae12da3849f333d71376ae4e3b6b491b@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/afe6e85983ea31d4e366ef9347e1dd32@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/afe6e85983ea31d4e366ef9347e1dd32@2x.png deleted file mode 100644 index e827038..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/afe6e85983ea31d4e366ef9347e1dd32@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/afe6e85983ea31d4e366ef9347e1dd32@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/afe6e85983ea31d4e366ef9347e1dd32@3x.png deleted file mode 100644 index b453cca..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/afe6e85983ea31d4e366ef9347e1dd32@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/afe6e85983ea31d4e366ef9347e1dd32@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/afe6e85983ea31d4e366ef9347e1dd32@dark@2x.png deleted file mode 100644 index d347373..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/afe6e85983ea31d4e366ef9347e1dd32@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/afe6e85983ea31d4e366ef9347e1dd32@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/afe6e85983ea31d4e366ef9347e1dd32@dark@3x.png deleted file mode 100644 index 0566179..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/afe6e85983ea31d4e366ef9347e1dd32@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/arrow_3d.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/arrow_3d.png deleted file mode 100644 index e531d68..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/arrow_3d.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/arrow_line_inner.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/arrow_line_inner.png deleted file mode 100644 index cb4941b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/arrow_line_inner.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/arrow_line_outer.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/arrow_line_outer.png deleted file mode 100644 index aaf0d39..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/arrow_line_outer.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b12a69d5f219151fc8799c4c5af2affa@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b12a69d5f219151fc8799c4c5af2affa@2x.webp deleted file mode 100644 index 5a41428..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b12a69d5f219151fc8799c4c5af2affa@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b12a69d5f219151fc8799c4c5af2affa@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b12a69d5f219151fc8799c4c5af2affa@3x.webp deleted file mode 100644 index 9c59b0c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b12a69d5f219151fc8799c4c5af2affa@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b1ef724e8e7357d6683ee3d1d5c11687@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b1ef724e8e7357d6683ee3d1d5c11687@2x.webp deleted file mode 100644 index 0274c1c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b1ef724e8e7357d6683ee3d1d5c11687@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b1ef724e8e7357d6683ee3d1d5c11687@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b1ef724e8e7357d6683ee3d1d5c11687@3x.webp deleted file mode 100644 index 344075d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b1ef724e8e7357d6683ee3d1d5c11687@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b21a58eb8556cfcd267423e13b23aa74@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b21a58eb8556cfcd267423e13b23aa74@2x.png deleted file mode 100644 index a032820..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b21a58eb8556cfcd267423e13b23aa74@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b21a58eb8556cfcd267423e13b23aa74@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b21a58eb8556cfcd267423e13b23aa74@3x.png deleted file mode 100644 index a72b274..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b21a58eb8556cfcd267423e13b23aa74@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b21a58eb8556cfcd267423e13b23aa74@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b21a58eb8556cfcd267423e13b23aa74@dark@2x.png deleted file mode 100644 index fcde447..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b21a58eb8556cfcd267423e13b23aa74@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b21a58eb8556cfcd267423e13b23aa74@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b21a58eb8556cfcd267423e13b23aa74@dark@3x.png deleted file mode 100644 index 040de46..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b21a58eb8556cfcd267423e13b23aa74@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b23958ce01d7c2fcf9be2cd7c2af1645@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b23958ce01d7c2fcf9be2cd7c2af1645@2x.webp deleted file mode 100644 index 58f2e9c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b23958ce01d7c2fcf9be2cd7c2af1645@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b23958ce01d7c2fcf9be2cd7c2af1645@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b23958ce01d7c2fcf9be2cd7c2af1645@3x.webp deleted file mode 100644 index bdcaa18..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b23958ce01d7c2fcf9be2cd7c2af1645@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b262270029ba6f8dae25fec2b129410e@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b262270029ba6f8dae25fec2b129410e@2x.webp deleted file mode 100644 index b0ac8d0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b262270029ba6f8dae25fec2b129410e@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b262270029ba6f8dae25fec2b129410e@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b262270029ba6f8dae25fec2b129410e@3x.webp deleted file mode 100644 index 55e0159..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b262270029ba6f8dae25fec2b129410e@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b262270029ba6f8dae25fec2b129410e@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b262270029ba6f8dae25fec2b129410e@dark@2x.webp deleted file mode 100644 index 969e18f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b262270029ba6f8dae25fec2b129410e@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b262270029ba6f8dae25fec2b129410e@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b262270029ba6f8dae25fec2b129410e@dark@3x.webp deleted file mode 100644 index 0aacbc6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b262270029ba6f8dae25fec2b129410e@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b28d800387ba469b5dfa52fa567c1ab0@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b28d800387ba469b5dfa52fa567c1ab0@2x.png deleted file mode 100644 index 4516f64..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b28d800387ba469b5dfa52fa567c1ab0@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b28d800387ba469b5dfa52fa567c1ab0@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b28d800387ba469b5dfa52fa567c1ab0@3x.png deleted file mode 100644 index 3cef357..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b28d800387ba469b5dfa52fa567c1ab0@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b32cbdcec4286449ee11c792ba0079ec@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b32cbdcec4286449ee11c792ba0079ec@2x.webp deleted file mode 100644 index 3d46ed6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b32cbdcec4286449ee11c792ba0079ec@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b32cbdcec4286449ee11c792ba0079ec@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b32cbdcec4286449ee11c792ba0079ec@3x.webp deleted file mode 100644 index bf38626..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b32cbdcec4286449ee11c792ba0079ec@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b3892c9e6dc7bc88a3875ab0d8522755@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b3892c9e6dc7bc88a3875ab0d8522755@2x.png deleted file mode 100644 index b8ddd17..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b3892c9e6dc7bc88a3875ab0d8522755@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b3892c9e6dc7bc88a3875ab0d8522755@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b3892c9e6dc7bc88a3875ab0d8522755@3x.png deleted file mode 100644 index 7de01b5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b3892c9e6dc7bc88a3875ab0d8522755@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b3f4815368f3d7dc9b0421a4f5f15622@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b3f4815368f3d7dc9b0421a4f5f15622@2x.png deleted file mode 100644 index e76e8ad..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b3f4815368f3d7dc9b0421a4f5f15622@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b3f4815368f3d7dc9b0421a4f5f15622@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b3f4815368f3d7dc9b0421a4f5f15622@3x.png deleted file mode 100644 index f00eaea..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b3f4815368f3d7dc9b0421a4f5f15622@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b465ae7c6477d2788eace93fdd35e1c7@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b465ae7c6477d2788eace93fdd35e1c7@2x.webp deleted file mode 100644 index 969e18f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b465ae7c6477d2788eace93fdd35e1c7@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b465ae7c6477d2788eace93fdd35e1c7@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b465ae7c6477d2788eace93fdd35e1c7@3x.webp deleted file mode 100644 index 0aacbc6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b465ae7c6477d2788eace93fdd35e1c7@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b4a90aa6dca51439ec038fad9d13a668@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b4a90aa6dca51439ec038fad9d13a668@2x.webp deleted file mode 100644 index b6b8aee..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b4a90aa6dca51439ec038fad9d13a668@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b4a90aa6dca51439ec038fad9d13a668@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b4a90aa6dca51439ec038fad9d13a668@3x.webp deleted file mode 100644 index 9778123..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b4a90aa6dca51439ec038fad9d13a668@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b4a90aa6dca51439ec038fad9d13a668@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b4a90aa6dca51439ec038fad9d13a668@dark@2x.webp deleted file mode 100644 index 1b2f6d5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b4a90aa6dca51439ec038fad9d13a668@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b4a90aa6dca51439ec038fad9d13a668@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b4a90aa6dca51439ec038fad9d13a668@dark@3x.webp deleted file mode 100644 index 0d54583..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b4a90aa6dca51439ec038fad9d13a668@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b4df151f79b842b59e4bf6c80099de53@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b4df151f79b842b59e4bf6c80099de53@2x.png deleted file mode 100644 index afe6a9f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b4df151f79b842b59e4bf6c80099de53@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b4df151f79b842b59e4bf6c80099de53@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b4df151f79b842b59e4bf6c80099de53@3x.png deleted file mode 100644 index b9aaaf0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b4df151f79b842b59e4bf6c80099de53@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b623f4642dea9077eccdcc570568808e@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b623f4642dea9077eccdcc570568808e@2x.png deleted file mode 100644 index edf398f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b623f4642dea9077eccdcc570568808e@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b623f4642dea9077eccdcc570568808e@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b623f4642dea9077eccdcc570568808e@3x.png deleted file mode 100644 index 975f18c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b623f4642dea9077eccdcc570568808e@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b656f01c445263097e83730196914b59@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b656f01c445263097e83730196914b59@2x.webp deleted file mode 100644 index 5a3c1b2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b656f01c445263097e83730196914b59@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b656f01c445263097e83730196914b59@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b656f01c445263097e83730196914b59@3x.webp deleted file mode 100644 index fc14e24..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b656f01c445263097e83730196914b59@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b656f01c445263097e83730196914b59@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b656f01c445263097e83730196914b59@dark@2x.webp deleted file mode 100644 index 749df1f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b656f01c445263097e83730196914b59@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b656f01c445263097e83730196914b59@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b656f01c445263097e83730196914b59@dark@3x.webp deleted file mode 100644 index 7fba814..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b656f01c445263097e83730196914b59@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b6ce38bd658cf5bd328fd823f2438e6b@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b6ce38bd658cf5bd328fd823f2438e6b@2x.webp deleted file mode 100644 index c0fb70f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b6ce38bd658cf5bd328fd823f2438e6b@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b6ce38bd658cf5bd328fd823f2438e6b@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b6ce38bd658cf5bd328fd823f2438e6b@3x.webp deleted file mode 100644 index 9ed26ee..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b6ce38bd658cf5bd328fd823f2438e6b@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b6ce38bd658cf5bd328fd823f2438e6b@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b6ce38bd658cf5bd328fd823f2438e6b@dark@2x.webp deleted file mode 100644 index 502be74..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b6ce38bd658cf5bd328fd823f2438e6b@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b6ce38bd658cf5bd328fd823f2438e6b@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b6ce38bd658cf5bd328fd823f2438e6b@dark@3x.webp deleted file mode 100644 index 69d7587..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b6ce38bd658cf5bd328fd823f2438e6b@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b748da5efe54bdad7605be2fc216bf18@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b748da5efe54bdad7605be2fc216bf18@2x.webp deleted file mode 100644 index d751914..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b748da5efe54bdad7605be2fc216bf18@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b748da5efe54bdad7605be2fc216bf18@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b748da5efe54bdad7605be2fc216bf18@3x.webp deleted file mode 100644 index 12f144d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b748da5efe54bdad7605be2fc216bf18@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b76eb989ef8ebe5162d23fb79c26fdde@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b76eb989ef8ebe5162d23fb79c26fdde@2x.webp deleted file mode 100644 index 5758f33..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b76eb989ef8ebe5162d23fb79c26fdde@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b76eb989ef8ebe5162d23fb79c26fdde@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b76eb989ef8ebe5162d23fb79c26fdde@3x.webp deleted file mode 100644 index 6f4d88a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b76eb989ef8ebe5162d23fb79c26fdde@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b7c1b1348a10ab841cc8b916d3a5ab8c@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b7c1b1348a10ab841cc8b916d3a5ab8c@2x.webp deleted file mode 100644 index dc4264a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b7c1b1348a10ab841cc8b916d3a5ab8c@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b7c1b1348a10ab841cc8b916d3a5ab8c@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b7c1b1348a10ab841cc8b916d3a5ab8c@3x.webp deleted file mode 100644 index 10fbe93..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b7c1b1348a10ab841cc8b916d3a5ab8c@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b7f112d815cb2df7e4d72e1d907d025d.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b7f112d815cb2df7e4d72e1d907d025d.webp deleted file mode 100644 index 34c4a47..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b7f112d815cb2df7e4d72e1d907d025d.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b8006d21e8d5b8516428b9937b82cacc@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b8006d21e8d5b8516428b9937b82cacc@2x.webp deleted file mode 100644 index cdd4979..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b8006d21e8d5b8516428b9937b82cacc@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b8006d21e8d5b8516428b9937b82cacc@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b8006d21e8d5b8516428b9937b82cacc@3x.webp deleted file mode 100644 index cbba797..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b8006d21e8d5b8516428b9937b82cacc@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b80a7cf2aab7a4f816635efd10bbf5cc@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b80a7cf2aab7a4f816635efd10bbf5cc@2x.webp deleted file mode 100644 index 8c7413b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b80a7cf2aab7a4f816635efd10bbf5cc@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b80a7cf2aab7a4f816635efd10bbf5cc@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b80a7cf2aab7a4f816635efd10bbf5cc@3x.webp deleted file mode 100644 index 71b240d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b80a7cf2aab7a4f816635efd10bbf5cc@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b868af8e479bdfb581936ea0d0a35f51@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b868af8e479bdfb581936ea0d0a35f51@2x.png deleted file mode 100644 index ecfc52c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b868af8e479bdfb581936ea0d0a35f51@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b868af8e479bdfb581936ea0d0a35f51@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b868af8e479bdfb581936ea0d0a35f51@3x.png deleted file mode 100644 index e3a6418..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b868af8e479bdfb581936ea0d0a35f51@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b868af8e479bdfb581936ea0d0a35f51@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b868af8e479bdfb581936ea0d0a35f51@dark@2x.png deleted file mode 100644 index 4fb3b4b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b868af8e479bdfb581936ea0d0a35f51@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b868af8e479bdfb581936ea0d0a35f51@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b868af8e479bdfb581936ea0d0a35f51@dark@3x.png deleted file mode 100644 index 5199462..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b868af8e479bdfb581936ea0d0a35f51@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b8fc14030bc2a38a0da8796805a1da1f@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b8fc14030bc2a38a0da8796805a1da1f@2x.webp deleted file mode 100644 index 4f708df..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b8fc14030bc2a38a0da8796805a1da1f@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b8fc14030bc2a38a0da8796805a1da1f@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b8fc14030bc2a38a0da8796805a1da1f@3x.webp deleted file mode 100644 index fa04b6d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b8fc14030bc2a38a0da8796805a1da1f@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b9760ba1bd7dd4e33fcd135bbb77d57e@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b9760ba1bd7dd4e33fcd135bbb77d57e@2x.webp deleted file mode 100644 index 66d0106..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b9760ba1bd7dd4e33fcd135bbb77d57e@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b9760ba1bd7dd4e33fcd135bbb77d57e@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b9760ba1bd7dd4e33fcd135bbb77d57e@3x.webp deleted file mode 100644 index ce7ff2d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b9760ba1bd7dd4e33fcd135bbb77d57e@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b99c0b9fed01103d899f1df3f54e676c@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b99c0b9fed01103d899f1df3f54e676c@2x.png deleted file mode 100644 index 6b7a911..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b99c0b9fed01103d899f1df3f54e676c@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b99c0b9fed01103d899f1df3f54e676c@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b99c0b9fed01103d899f1df3f54e676c@3x.png deleted file mode 100644 index 48dbf5b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/b99c0b9fed01103d899f1df3f54e676c@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ba1437855edf5b24647f543669a9afcc@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ba1437855edf5b24647f543669a9afcc@2x.png deleted file mode 100644 index e38c4c9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ba1437855edf5b24647f543669a9afcc@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ba1437855edf5b24647f543669a9afcc@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ba1437855edf5b24647f543669a9afcc@3x.png deleted file mode 100644 index 96f345a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ba1437855edf5b24647f543669a9afcc@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bb2bf598dc58cbf5b60e987e987c093d@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bb2bf598dc58cbf5b60e987e987c093d@2x.webp deleted file mode 100644 index f94e75d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bb2bf598dc58cbf5b60e987e987c093d@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bb2bf598dc58cbf5b60e987e987c093d@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bb2bf598dc58cbf5b60e987e987c093d@3x.webp deleted file mode 100644 index 2dc6334..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bb2bf598dc58cbf5b60e987e987c093d@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bb6d91170ddee009d5437fdafd58f40e@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bb6d91170ddee009d5437fdafd58f40e@2x.webp deleted file mode 100644 index a0ab695..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bb6d91170ddee009d5437fdafd58f40e@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bb6d91170ddee009d5437fdafd58f40e@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bb6d91170ddee009d5437fdafd58f40e@3x.webp deleted file mode 100644 index cf9860e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bb6d91170ddee009d5437fdafd58f40e@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bc47c5a4363537a89fae32fe74d91482@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bc47c5a4363537a89fae32fe74d91482@2x.png deleted file mode 100644 index 50f3157..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bc47c5a4363537a89fae32fe74d91482@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bc47c5a4363537a89fae32fe74d91482@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bc47c5a4363537a89fae32fe74d91482@3x.png deleted file mode 100644 index aa0d724..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bc47c5a4363537a89fae32fe74d91482@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bc806306c5201640897e77f936df7798@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bc806306c5201640897e77f936df7798@2x.webp deleted file mode 100644 index d4b000b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bc806306c5201640897e77f936df7798@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bc806306c5201640897e77f936df7798@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bc806306c5201640897e77f936df7798@3x.webp deleted file mode 100644 index f16bc5e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bc806306c5201640897e77f936df7798@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bcd4194b4268e2b81373421cd3d04c5c@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bcd4194b4268e2b81373421cd3d04c5c@2x.webp deleted file mode 100644 index 1063096..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bcd4194b4268e2b81373421cd3d04c5c@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bcd4194b4268e2b81373421cd3d04c5c@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bcd4194b4268e2b81373421cd3d04c5c@3x.webp deleted file mode 100644 index c64cc2a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bcd4194b4268e2b81373421cd3d04c5c@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bd29380115783e69c9b8fbe0240384c2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bd29380115783e69c9b8fbe0240384c2@2x.png deleted file mode 100644 index d4f00ca..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bd29380115783e69c9b8fbe0240384c2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bd29380115783e69c9b8fbe0240384c2@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bd29380115783e69c9b8fbe0240384c2@3x.png deleted file mode 100644 index dcfbfde..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bd29380115783e69c9b8fbe0240384c2@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bd3acb4578778c434fe3529891c79ab2@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bd3acb4578778c434fe3529891c79ab2@2x.webp deleted file mode 100644 index 07c29df..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bd3acb4578778c434fe3529891c79ab2@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bd3acb4578778c434fe3529891c79ab2@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bd3acb4578778c434fe3529891c79ab2@3x.webp deleted file mode 100644 index 79ea7d5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bd3acb4578778c434fe3529891c79ab2@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be076eee347515467a5b14c25b3d2112@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be076eee347515467a5b14c25b3d2112@2x.webp deleted file mode 100644 index 76504a0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be076eee347515467a5b14c25b3d2112@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be076eee347515467a5b14c25b3d2112@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be076eee347515467a5b14c25b3d2112@3x.webp deleted file mode 100644 index e49b0f2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be076eee347515467a5b14c25b3d2112@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be0f6695a8bfb4cf60c14f7307b4a44e@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be0f6695a8bfb4cf60c14f7307b4a44e@2x.webp deleted file mode 100644 index a4b4ea8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be0f6695a8bfb4cf60c14f7307b4a44e@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be0f6695a8bfb4cf60c14f7307b4a44e@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be0f6695a8bfb4cf60c14f7307b4a44e@3x.webp deleted file mode 100644 index e53461b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be0f6695a8bfb4cf60c14f7307b4a44e@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be25ba12eff8306fda8cb26861750584@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be25ba12eff8306fda8cb26861750584@2x.png deleted file mode 100644 index 71dbd21..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be25ba12eff8306fda8cb26861750584@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be25ba12eff8306fda8cb26861750584@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be25ba12eff8306fda8cb26861750584@3x.png deleted file mode 100644 index 7a85f9a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be25ba12eff8306fda8cb26861750584@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be25ba12eff8306fda8cb26861750584@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be25ba12eff8306fda8cb26861750584@dark@2x.png deleted file mode 100644 index 8408073..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be25ba12eff8306fda8cb26861750584@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be25ba12eff8306fda8cb26861750584@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be25ba12eff8306fda8cb26861750584@dark@3x.png deleted file mode 100644 index b2e7756..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be25ba12eff8306fda8cb26861750584@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be3ba3a695bc7185bc217bc36a03898d@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be3ba3a695bc7185bc217bc36a03898d@2x.webp deleted file mode 100644 index 4f473a6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be3ba3a695bc7185bc217bc36a03898d@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be3ba3a695bc7185bc217bc36a03898d@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be3ba3a695bc7185bc217bc36a03898d@3x.webp deleted file mode 100644 index 029a32b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be3ba3a695bc7185bc217bc36a03898d@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be6ba1d7e112df4e2491dd8f9412b3fe@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be6ba1d7e112df4e2491dd8f9412b3fe@2x.webp deleted file mode 100644 index 5130066..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be6ba1d7e112df4e2491dd8f9412b3fe@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be6ba1d7e112df4e2491dd8f9412b3fe@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be6ba1d7e112df4e2491dd8f9412b3fe@3x.webp deleted file mode 100644 index 2bff0a5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/be6ba1d7e112df4e2491dd8f9412b3fe@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bf2dc1e12cc21ad56d92ae49479be4cb@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bf2dc1e12cc21ad56d92ae49479be4cb@2x.webp deleted file mode 100644 index b00597c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bf2dc1e12cc21ad56d92ae49479be4cb@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bf2dc1e12cc21ad56d92ae49479be4cb@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bf2dc1e12cc21ad56d92ae49479be4cb@3x.webp deleted file mode 100644 index 2239797..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bf2dc1e12cc21ad56d92ae49479be4cb@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bf5f7accc47c6f9dd63ee18603312fa2@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bf5f7accc47c6f9dd63ee18603312fa2@2x.webp deleted file mode 100644 index ed221f8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bf5f7accc47c6f9dd63ee18603312fa2@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bf5f7accc47c6f9dd63ee18603312fa2@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bf5f7accc47c6f9dd63ee18603312fa2@3x.webp deleted file mode 100644 index 7011cf7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bf5f7accc47c6f9dd63ee18603312fa2@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bf5f7accc47c6f9dd63ee18603312fa2@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bf5f7accc47c6f9dd63ee18603312fa2@dark@2x.webp deleted file mode 100644 index 6e12aa2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bf5f7accc47c6f9dd63ee18603312fa2@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bf5f7accc47c6f9dd63ee18603312fa2@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bf5f7accc47c6f9dd63ee18603312fa2@dark@3x.webp deleted file mode 100644 index 7e53de6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bf5f7accc47c6f9dd63ee18603312fa2@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bfca2d48a7ab3e25dc4a51761d8ac4db@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bfca2d48a7ab3e25dc4a51761d8ac4db@2x.png deleted file mode 100644 index 4f17051..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bfca2d48a7ab3e25dc4a51761d8ac4db@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bfca2d48a7ab3e25dc4a51761d8ac4db@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bfca2d48a7ab3e25dc4a51761d8ac4db@3x.png deleted file mode 100644 index ba5768d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bfca2d48a7ab3e25dc4a51761d8ac4db@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bfca2d48a7ab3e25dc4a51761d8ac4db@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bfca2d48a7ab3e25dc4a51761d8ac4db@dark@2x.png deleted file mode 100644 index 22bba58..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bfca2d48a7ab3e25dc4a51761d8ac4db@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bfca2d48a7ab3e25dc4a51761d8ac4db@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bfca2d48a7ab3e25dc4a51761d8ac4db@dark@3x.png deleted file mode 100644 index 225b28e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bfca2d48a7ab3e25dc4a51761d8ac4db@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/breath_blue@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/breath_blue@2x.png deleted file mode 100644 index 6d0f43a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/breath_blue@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/breath_blue@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/breath_blue@3x.png deleted file mode 100644 index 5d3cd84..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/breath_blue@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd1@2x.png deleted file mode 100644 index 087825a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd1@3x.png deleted file mode 100644 index fd95ee4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd1_can_del@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd1_can_del@2x.png deleted file mode 100644 index e0a0fbe..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd1_can_del@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd1_can_del@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd1_can_del@3x.png deleted file mode 100644 index 446117b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd1_can_del@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd2@2x.png deleted file mode 100644 index 2497228..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd2@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd2@3x.png deleted file mode 100644 index 3122380..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd2@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd2_can_del@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd2_can_del@2x.png deleted file mode 100644 index 7d01991..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd2_can_del@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd2_can_del@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd2_can_del@3x.png deleted file mode 100644 index 23e1b0b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd2_can_del@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd3@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd3@2x.png deleted file mode 100644 index c14c129..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd3@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd3@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd3@3x.png deleted file mode 100644 index e127d57..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd3@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd3_can_del@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd3_can_del@2x.png deleted file mode 100644 index 3c6c10e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd3_can_del@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd3_can_del@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd3_can_del@3x.png deleted file mode 100644 index 831f657..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd3_can_del@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd@2x.png deleted file mode 100644 index 1508edf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd@3x.png deleted file mode 100644 index fa59254..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd_can_del@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd_can_del@2x.png deleted file mode 100644 index c08d452..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd_can_del@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd_can_del@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd_can_del@3x.png deleted file mode 100644 index 24cf91a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/bubble_midd_can_del@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c11c493c740b791573dda97ba7b3fb56@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c11c493c740b791573dda97ba7b3fb56@2x.webp deleted file mode 100644 index fdbebb2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c11c493c740b791573dda97ba7b3fb56@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c11c493c740b791573dda97ba7b3fb56@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c11c493c740b791573dda97ba7b3fb56@3x.webp deleted file mode 100644 index bd51956..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c11c493c740b791573dda97ba7b3fb56@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c1bec4050ca12990476dc2e48fa61737@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c1bec4050ca12990476dc2e48fa61737@2x.png deleted file mode 100644 index 5234dad..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c1bec4050ca12990476dc2e48fa61737@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c1bec4050ca12990476dc2e48fa61737@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c1bec4050ca12990476dc2e48fa61737@3x.png deleted file mode 100644 index 0d27788..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c1bec4050ca12990476dc2e48fa61737@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c1cca8f6ee8482cbecdb137083c5b047@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c1cca8f6ee8482cbecdb137083c5b047@2x.webp deleted file mode 100644 index 20e55eb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c1cca8f6ee8482cbecdb137083c5b047@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c1cca8f6ee8482cbecdb137083c5b047@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c1cca8f6ee8482cbecdb137083c5b047@3x.webp deleted file mode 100644 index 3cb6c20..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c1cca8f6ee8482cbecdb137083c5b047@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c28ed5df1bc433c1d958c88b34fe0a76@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c28ed5df1bc433c1d958c88b34fe0a76@2x.webp deleted file mode 100644 index 9b14461..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c28ed5df1bc433c1d958c88b34fe0a76@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c28ed5df1bc433c1d958c88b34fe0a76@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c28ed5df1bc433c1d958c88b34fe0a76@3x.webp deleted file mode 100644 index 2da9393..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c28ed5df1bc433c1d958c88b34fe0a76@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c2e00eca842939d61ada20ff26eac4ce@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c2e00eca842939d61ada20ff26eac4ce@2x.webp deleted file mode 100644 index b049746..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c2e00eca842939d61ada20ff26eac4ce@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c2e00eca842939d61ada20ff26eac4ce@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c2e00eca842939d61ada20ff26eac4ce@3x.webp deleted file mode 100644 index b1d9d93..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c2e00eca842939d61ada20ff26eac4ce@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c35e2ffd87742222b05462c946a34b18@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c35e2ffd87742222b05462c946a34b18@2x.png deleted file mode 100644 index 42d919d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c35e2ffd87742222b05462c946a34b18@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c35e2ffd87742222b05462c946a34b18@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c35e2ffd87742222b05462c946a34b18@3x.png deleted file mode 100644 index 345bfcd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c35e2ffd87742222b05462c946a34b18@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c37f1d504e81f827706ce95fe568de16@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c37f1d504e81f827706ce95fe568de16@2x.webp deleted file mode 100644 index 24ef23f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c37f1d504e81f827706ce95fe568de16@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c37f1d504e81f827706ce95fe568de16@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c37f1d504e81f827706ce95fe568de16@3x.webp deleted file mode 100644 index b61ee41..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c37f1d504e81f827706ce95fe568de16@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c3c914dba10f797ac7d0a4bf7cc677ca@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c3c914dba10f797ac7d0a4bf7cc677ca@2x.webp deleted file mode 100644 index 18b6939..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c3c914dba10f797ac7d0a4bf7cc677ca@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c3c914dba10f797ac7d0a4bf7cc677ca@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c3c914dba10f797ac7d0a4bf7cc677ca@3x.webp deleted file mode 100644 index 044192b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c3c914dba10f797ac7d0a4bf7cc677ca@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c55dfe73073f723dce55347789080818@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c55dfe73073f723dce55347789080818@2x.webp deleted file mode 100644 index 710abf5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c55dfe73073f723dce55347789080818@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c55dfe73073f723dce55347789080818@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c55dfe73073f723dce55347789080818@3x.webp deleted file mode 100644 index 52778cd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c55dfe73073f723dce55347789080818@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c57c651e7c413016276f36f500a2443d@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c57c651e7c413016276f36f500a2443d@2x.webp deleted file mode 100644 index cb51f5d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c57c651e7c413016276f36f500a2443d@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c57c651e7c413016276f36f500a2443d@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c57c651e7c413016276f36f500a2443d@3x.webp deleted file mode 100644 index e61bc89..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c57c651e7c413016276f36f500a2443d@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c60a74563b622216f8d0a4c02e008a1d@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c60a74563b622216f8d0a4c02e008a1d@2x.webp deleted file mode 100644 index ae4d73e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c60a74563b622216f8d0a4c02e008a1d@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c60a74563b622216f8d0a4c02e008a1d@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c60a74563b622216f8d0a4c02e008a1d@3x.webp deleted file mode 100644 index e243ee9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c60a74563b622216f8d0a4c02e008a1d@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c60e1c3a4d41d910d0b1ed33577bd627@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c60e1c3a4d41d910d0b1ed33577bd627@2x.webp deleted file mode 100644 index f5281bd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c60e1c3a4d41d910d0b1ed33577bd627@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c60e1c3a4d41d910d0b1ed33577bd627@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c60e1c3a4d41d910d0b1ed33577bd627@3x.webp deleted file mode 100644 index 9ac639d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c60e1c3a4d41d910d0b1ed33577bd627@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c641886320d60b7376778327e55ee9c7@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c641886320d60b7376778327e55ee9c7@2x.webp deleted file mode 100644 index 300e61b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c641886320d60b7376778327e55ee9c7@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c641886320d60b7376778327e55ee9c7@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c641886320d60b7376778327e55ee9c7@3x.webp deleted file mode 100644 index 216f2d6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c641886320d60b7376778327e55ee9c7@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c658e2e3bd8a70ea2123d4b402e6e4a3@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c658e2e3bd8a70ea2123d4b402e6e4a3@2x.png deleted file mode 100644 index 29260a6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c658e2e3bd8a70ea2123d4b402e6e4a3@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c658e2e3bd8a70ea2123d4b402e6e4a3@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c658e2e3bd8a70ea2123d4b402e6e4a3@3x.png deleted file mode 100644 index 534b014..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c658e2e3bd8a70ea2123d4b402e6e4a3@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c85adba524c6edad04895f4c2440ed3e@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c85adba524c6edad04895f4c2440ed3e@2x.png deleted file mode 100644 index 34200d6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c85adba524c6edad04895f4c2440ed3e@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c85adba524c6edad04895f4c2440ed3e@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c85adba524c6edad04895f4c2440ed3e@3x.png deleted file mode 100644 index ce0a23a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c85adba524c6edad04895f4c2440ed3e@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c85adba524c6edad04895f4c2440ed3e@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c85adba524c6edad04895f4c2440ed3e@dark@2x.png deleted file mode 100644 index f63c9e0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c85adba524c6edad04895f4c2440ed3e@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c85adba524c6edad04895f4c2440ed3e@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c85adba524c6edad04895f4c2440ed3e@dark@3x.png deleted file mode 100644 index eb6057b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c85adba524c6edad04895f4c2440ed3e@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c8b0adb41d7074b7ee8409ba1804765f@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c8b0adb41d7074b7ee8409ba1804765f@2x.webp deleted file mode 100644 index 716caae..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c8b0adb41d7074b7ee8409ba1804765f@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c8b0adb41d7074b7ee8409ba1804765f@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c8b0adb41d7074b7ee8409ba1804765f@3x.webp deleted file mode 100644 index 1dbc4f6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c8b0adb41d7074b7ee8409ba1804765f@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c950888d4437fb0280a9aa19f2f82fd2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c950888d4437fb0280a9aa19f2f82fd2@2x.png deleted file mode 100644 index c03f2ee..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c950888d4437fb0280a9aa19f2f82fd2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c950888d4437fb0280a9aa19f2f82fd2@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c950888d4437fb0280a9aa19f2f82fd2@3x.png deleted file mode 100644 index 8fae1be..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c950888d4437fb0280a9aa19f2f82fd2@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c950888d4437fb0280a9aa19f2f82fd2@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c950888d4437fb0280a9aa19f2f82fd2@dark@2x.png deleted file mode 100644 index c7daf7d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c950888d4437fb0280a9aa19f2f82fd2@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c950888d4437fb0280a9aa19f2f82fd2@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c950888d4437fb0280a9aa19f2f82fd2@dark@3x.png deleted file mode 100644 index 7bf3da9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/c950888d4437fb0280a9aa19f2f82fd2@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ca0af3cc5c3b13c69ae83e7649234b6f@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ca0af3cc5c3b13c69ae83e7649234b6f@2x.webp deleted file mode 100644 index 80ac605..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ca0af3cc5c3b13c69ae83e7649234b6f@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ca0af3cc5c3b13c69ae83e7649234b6f@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ca0af3cc5c3b13c69ae83e7649234b6f@3x.webp deleted file mode 100644 index 9c0d5a4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ca0af3cc5c3b13c69ae83e7649234b6f@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ca622d3849384ad2b128fe31cebb1da8@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ca622d3849384ad2b128fe31cebb1da8@2x.webp deleted file mode 100644 index e765e7a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ca622d3849384ad2b128fe31cebb1da8@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ca622d3849384ad2b128fe31cebb1da8@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ca622d3849384ad2b128fe31cebb1da8@3x.webp deleted file mode 100644 index eae386c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ca622d3849384ad2b128fe31cebb1da8@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/camera_speed_shadow_left_top@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/camera_speed_shadow_left_top@2x.png deleted file mode 100644 index e312ab1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/camera_speed_shadow_left_top@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/camera_speed_shadow_left_top@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/camera_speed_shadow_left_top@3x.png deleted file mode 100644 index a4d9c88..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/camera_speed_shadow_left_top@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/camera_speed_shadow_night_left_top@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/camera_speed_shadow_night_left_top@2x.png deleted file mode 100644 index 305858d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/camera_speed_shadow_night_left_top@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/camera_speed_shadow_night_left_top@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/camera_speed_shadow_night_left_top@3x.png deleted file mode 100644 index 2246e0f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/camera_speed_shadow_night_left_top@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/camera_speed_shadow_night_right_top@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/camera_speed_shadow_night_right_top@2x.png deleted file mode 100644 index 8c102c7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/camera_speed_shadow_night_right_top@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/camera_speed_shadow_night_right_top@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/camera_speed_shadow_night_right_top@3x.png deleted file mode 100644 index dd8e8b4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/camera_speed_shadow_night_right_top@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/camera_speed_shadow_right_top@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/camera_speed_shadow_right_top@2x.png deleted file mode 100644 index 9789742..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/camera_speed_shadow_right_top@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/camera_speed_shadow_right_top@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/camera_speed_shadow_right_top@3x.png deleted file mode 100644 index bcb6a12..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/camera_speed_shadow_right_top@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_around_search_lesstime@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_around_search_lesstime@2x.png deleted file mode 100644 index b73d56e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_around_search_lesstime@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_around_search_lesstime@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_around_search_lesstime@3x.png deleted file mode 100644 index e16657a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_around_search_lesstime@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_around_search_lesstime_hl@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_around_search_lesstime_hl@2x.png deleted file mode 100644 index 37e7dcb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_around_search_lesstime_hl@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_around_search_lesstime_hl@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_around_search_lesstime_hl@3x.png deleted file mode 100644 index 00e2e97..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_around_search_lesstime_hl@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_around_search_lesstime_hl_night@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_around_search_lesstime_hl_night@2x.png deleted file mode 100644 index fcca201..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_around_search_lesstime_hl_night@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_around_search_lesstime_hl_night@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_around_search_lesstime_hl_night@3x.png deleted file mode 100644 index ce30270..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_around_search_lesstime_hl_night@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_around_search_lesstime_night@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_around_search_lesstime_night@2x.png deleted file mode 100644 index 4d288c6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_around_search_lesstime_night@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_around_search_lesstime_night@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_around_search_lesstime_night@3x.png deleted file mode 100644 index 9891719..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_around_search_lesstime_night@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_navi_around_search_shadow@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_navi_around_search_shadow@2x.png deleted file mode 100644 index cbea442..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_navi_around_search_shadow@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_navi_around_search_shadow@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_navi_around_search_shadow@3x.png deleted file mode 100644 index 573ae68..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/car_navi_around_search_shadow@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cb8348b946ee603ff057b63a8f7aa876@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cb8348b946ee603ff057b63a8f7aa876@2x.png deleted file mode 100644 index f5ab337..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cb8348b946ee603ff057b63a8f7aa876@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cb8348b946ee603ff057b63a8f7aa876@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cb8348b946ee603ff057b63a8f7aa876@3x.png deleted file mode 100644 index 5ae9ef2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cb8348b946ee603ff057b63a8f7aa876@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cb8348b946ee603ff057b63a8f7aa876@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cb8348b946ee603ff057b63a8f7aa876@dark@2x.png deleted file mode 100644 index 2ef9c4b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cb8348b946ee603ff057b63a8f7aa876@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cb8348b946ee603ff057b63a8f7aa876@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cb8348b946ee603ff057b63a8f7aa876@dark@3x.png deleted file mode 100644 index 64f8bcd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cb8348b946ee603ff057b63a8f7aa876@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc15ec258f82cbd22c3d16a1c0d9f5b0@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc15ec258f82cbd22c3d16a1c0d9f5b0@2x.webp deleted file mode 100644 index 7ad6eb3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc15ec258f82cbd22c3d16a1c0d9f5b0@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc15ec258f82cbd22c3d16a1c0d9f5b0@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc15ec258f82cbd22c3d16a1c0d9f5b0@3x.webp deleted file mode 100644 index 4063cfb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc15ec258f82cbd22c3d16a1c0d9f5b0@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc4932973481494bbb8fa051f5d37b49@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc4932973481494bbb8fa051f5d37b49@2x.png deleted file mode 100644 index b214d0b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc4932973481494bbb8fa051f5d37b49@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc4932973481494bbb8fa051f5d37b49@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc4932973481494bbb8fa051f5d37b49@3x.png deleted file mode 100644 index d617b8f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc4932973481494bbb8fa051f5d37b49@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc4932973481494bbb8fa051f5d37b49@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc4932973481494bbb8fa051f5d37b49@dark@2x.png deleted file mode 100644 index 809345f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc4932973481494bbb8fa051f5d37b49@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc4932973481494bbb8fa051f5d37b49@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc4932973481494bbb8fa051f5d37b49@dark@3x.png deleted file mode 100644 index 9576abc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc4932973481494bbb8fa051f5d37b49@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc84f650646e7bd4bea5ead90c3ad8a5@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc84f650646e7bd4bea5ead90c3ad8a5@2x.webp deleted file mode 100644 index d3152a9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc84f650646e7bd4bea5ead90c3ad8a5@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc84f650646e7bd4bea5ead90c3ad8a5@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc84f650646e7bd4bea5ead90c3ad8a5@3x.webp deleted file mode 100644 index 304e162..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc84f650646e7bd4bea5ead90c3ad8a5@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc922285552a7acdf2e60b8f43d14480@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc922285552a7acdf2e60b8f43d14480@2x.webp deleted file mode 100644 index 3ea2175..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc922285552a7acdf2e60b8f43d14480@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc922285552a7acdf2e60b8f43d14480@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc922285552a7acdf2e60b8f43d14480@3x.webp deleted file mode 100644 index 6b7a140..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc922285552a7acdf2e60b8f43d14480@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc9fde3cdef2061176cd5741a6087685@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc9fde3cdef2061176cd5741a6087685@2x.png deleted file mode 100644 index 74f180a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc9fde3cdef2061176cd5741a6087685@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc9fde3cdef2061176cd5741a6087685@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc9fde3cdef2061176cd5741a6087685@3x.png deleted file mode 100644 index 364eeac..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cc9fde3cdef2061176cd5741a6087685@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cdc4cad8d219571aa8ffcf7f6417a874@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cdc4cad8d219571aa8ffcf7f6417a874@2x.png deleted file mode 100644 index a67b290..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cdc4cad8d219571aa8ffcf7f6417a874@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cdc4cad8d219571aa8ffcf7f6417a874@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cdc4cad8d219571aa8ffcf7f6417a874@3x.png deleted file mode 100644 index 57b5608..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cdc4cad8d219571aa8ffcf7f6417a874@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ce0751a4ed430b4c9944c495bf167102@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ce0751a4ed430b4c9944c495bf167102@2x.webp deleted file mode 100644 index 1819b1f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ce0751a4ed430b4c9944c495bf167102@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ce0751a4ed430b4c9944c495bf167102@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ce0751a4ed430b4c9944c495bf167102@3x.webp deleted file mode 100644 index 878534f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ce0751a4ed430b4c9944c495bf167102@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ceb5612e42be0c66f4af717365bad49f.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ceb5612e42be0c66f4af717365bad49f.webp deleted file mode 100644 index 5a4cb95..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ceb5612e42be0c66f4af717365bad49f.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cecc89573126da56aec9deb93ae44682@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cecc89573126da56aec9deb93ae44682@2x.webp deleted file mode 100644 index bd49ece..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cecc89573126da56aec9deb93ae44682@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cecc89573126da56aec9deb93ae44682@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cecc89573126da56aec9deb93ae44682@3x.webp deleted file mode 100644 index 9cbd7e2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cecc89573126da56aec9deb93ae44682@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cfd3bcc6f1c65aaaa6db028e4104ee85@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cfd3bcc6f1c65aaaa6db028e4104ee85@2x.webp deleted file mode 100644 index 2c43672..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cfd3bcc6f1c65aaaa6db028e4104ee85@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cfd3bcc6f1c65aaaa6db028e4104ee85@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cfd3bcc6f1c65aaaa6db028e4104ee85@3x.webp deleted file mode 100644 index 9a9178f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cfd3bcc6f1c65aaaa6db028e4104ee85@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_256@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_256@2x.webp deleted file mode 100644 index c86f5f8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_256@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_256@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_256@3x.webp deleted file mode 100644 index 39ce625..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_256@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_256_gray@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_256_gray@2x.webp deleted file mode 100644 index df79700..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_256_gray@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_256_gray@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_256_gray@3x.webp deleted file mode 100644 index 3a310f6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_256_gray@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_opacity_126@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_opacity_126@2x.webp deleted file mode 100644 index 3d3d790..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_opacity_126@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_opacity_126@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_opacity_126@3x.webp deleted file mode 100644 index 542c493..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_opacity_126@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_opacity_126_gray@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_opacity_126_gray@2x.webp deleted file mode 100644 index 1660d66..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_opacity_126_gray@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_opacity_126_gray@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_opacity_126_gray@3x.webp deleted file mode 100644 index b5ae003..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_opacity_126_gray@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_border@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_border@2x.webp deleted file mode 100644 index f1c6fff..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_border@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_border@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_border@3x.webp deleted file mode 100644 index ea08011..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_border@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_border_night@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_border_night@2x.webp deleted file mode 100644 index 8ea1b14..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_border_night@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_east@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_east@2x.webp deleted file mode 100644 index 8017f0e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_east@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_east_night@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_east_night@2x.webp deleted file mode 100644 index 5751431..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_east_night@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_north@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_north@2x.webp deleted file mode 100644 index 36c9c6c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_north@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_north_night@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_north_night@2x.webp deleted file mode 100644 index 6b7180a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_north_night@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_south@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_south@2x.webp deleted file mode 100644 index a7eb7f2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_south@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_south_night@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_south_night@2x.webp deleted file mode 100644 index 31a06e5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_south_night@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_west@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_west@2x.webp deleted file mode 100644 index 4fc5ea5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_west@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_west_night@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_west_night@2x.webp deleted file mode 100644 index c3fc15d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_car_steeringwheel_west_night@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_east@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_east@2x.png deleted file mode 100644 index edac839..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_east@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_east@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_east@3x.png deleted file mode 100644 index 9fc5f63..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_east@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_line@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_line@2x.png deleted file mode 100644 index fec93d8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_line@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_line@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_line@3x.png deleted file mode 100644 index c1254bd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_line@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_north@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_north@2x.png deleted file mode 100644 index 25fc5c3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_north@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_north@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_north@3x.png deleted file mode 100644 index cf51e37..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_north@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_shadow_breathe_blue_256@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_shadow_breathe_blue_256@2x.webp deleted file mode 100644 index c3b2e8d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_shadow_breathe_blue_256@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_shadow_breathe_blue_256@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_shadow_breathe_blue_256@3x.webp deleted file mode 100644 index 17b8bd9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_shadow_breathe_blue_256@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_south@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_south@2x.png deleted file mode 100644 index 6a4e6ea..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_south@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_south@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_south@3x.png deleted file mode 100644 index 2fa5b29..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_south@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_steeringwheel_north_28@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_steeringwheel_north_28@2x.png deleted file mode 100644 index cfe4171..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_steeringwheel_north_28@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_steeringwheel_north_28@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_steeringwheel_north_28@3x.png deleted file mode 100644 index ad3a2ae..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_steeringwheel_north_28@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_steeringwheel_north_28_night@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_steeringwheel_north_28_night@2x.png deleted file mode 100644 index 68740f9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_steeringwheel_north_28_night@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_steeringwheel_north_28_night@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_steeringwheel_north_28_night@3x.png deleted file mode 100644 index 427779d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_steeringwheel_north_28_night@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_west@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_west@2x.png deleted file mode 100644 index 02328f7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_west@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_west@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_west@3x.png deleted file mode 100644 index ca83a34..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compass_west@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compassiconresiddriveplanposcararcgray@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compassiconresiddriveplanposcararcgray@2x.webp deleted file mode 100644 index 7887bbd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compassiconresiddriveplanposcararcgray@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compassiconresiddriveplanposcararcgray@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compassiconresiddriveplanposcararcgray@3x.webp deleted file mode 100644 index 9f56181..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/compassiconresiddriveplanposcararcgray@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/congestion_bubble_left_bottom.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/congestion_bubble_left_bottom.png deleted file mode 100644 index 3886a81..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/congestion_bubble_left_bottom.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/congestion_bubble_left_top.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/congestion_bubble_left_top.png deleted file mode 100644 index 7baa549..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/congestion_bubble_left_top.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/congestion_bubble_right_bottom.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/congestion_bubble_right_bottom.png deleted file mode 100644 index 29badcc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/congestion_bubble_right_bottom.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/congestion_bubble_right_top.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/congestion_bubble_right_top.png deleted file mode 100644 index 88f1dff..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/congestion_bubble_right_top.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_accident_prone@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_accident_prone@2x.png deleted file mode 100644 index 20f0542..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_accident_prone@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_accident_prone@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_accident_prone@3x.png deleted file mode 100644 index 84b29d5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_accident_prone@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_around@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_around@2x.png deleted file mode 100644 index f0b116d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_around@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_around@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_around@3x.png deleted file mode 100644 index 9e4b3a4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_around@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_around_left@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_around_left@2x.png deleted file mode 100644 index 774e9a2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_around_left@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_around_left@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_around_left@3x.png deleted file mode 100644 index 16ad5b5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_around_left@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_around_right@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_around_right@2x.png deleted file mode 100644 index bfaf05f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_around_right@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_around_right@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_around_right@3x.png deleted file mode 100644 index 125e20d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_around_right@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_both_sides_narrow@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_both_sides_narrow@2x.png deleted file mode 100644 index 0d98617..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_both_sides_narrow@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_both_sides_narrow@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_both_sides_narrow@3x.png deleted file mode 100644 index 76202a3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_both_sides_narrow@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_car_intersect_left@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_car_intersect_left@2x.png deleted file mode 100644 index 1a2202b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_car_intersect_left@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_car_intersect_left@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_car_intersect_left@3x.png deleted file mode 100644 index a8cc8c9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_car_intersect_left@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_car_intersect_right@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_car_intersect_right@2x.png deleted file mode 100644 index f97972e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_car_intersect_right@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_car_intersect_right@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_car_intersect_right@3x.png deleted file mode 100644 index 46d4312..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_car_intersect_right@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_continue_detour@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_continue_detour@2x.png deleted file mode 100644 index 0264a29..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_continue_detour@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_continue_detour@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_continue_detour@3x.png deleted file mode 100644 index d6e5fb3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_continue_detour@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_danger@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_danger@2x.png deleted file mode 100644 index b0e486f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_danger@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_danger@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_danger@3x.png deleted file mode 100644 index 831dc05..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_danger@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_donward_slope@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_donward_slope@2x.png deleted file mode 100644 index efc2271..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_donward_slope@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_donward_slope@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_donward_slope@3x.png deleted file mode 100644 index 8198f40..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_donward_slope@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_ferry@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_ferry@2x.png deleted file mode 100644 index 198a978..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_ferry@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_ferry@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_ferry@3x.png deleted file mode 100644 index 97dd9dc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_ferry@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_ground_slippery@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_ground_slippery@2x.png deleted file mode 100644 index a4fa56e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_ground_slippery@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_ground_slippery@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_ground_slippery@3x.png deleted file mode 100644 index 7b7a024..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_ground_slippery@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_keeper_railway_crossing@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_keeper_railway_crossing@2x.png deleted file mode 100644 index 96962df..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_keeper_railway_crossing@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_keeper_railway_crossing@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_keeper_railway_crossing@3x.png deleted file mode 100644 index 00eb649..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_keeper_railway_crossing@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_mountain_danger_left@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_mountain_danger_left@2x.png deleted file mode 100644 index 5972fcf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_mountain_danger_left@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_mountain_danger_left@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_mountain_danger_left@3x.png deleted file mode 100644 index ca446d7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_mountain_danger_left@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_mountain_danger_right@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_mountain_danger_right@2x.png deleted file mode 100644 index 03da28e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_mountain_danger_right@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_mountain_danger_right@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_mountain_danger_right@3x.png deleted file mode 100644 index 72b31cf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_mountain_danger_right@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_narrow_bridge@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_narrow_bridge@2x.png deleted file mode 100644 index 555284e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_narrow_bridge@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_narrow_bridge@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_narrow_bridge@3x.png deleted file mode 100644 index 2a112eb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_narrow_bridge@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_narrow_left_side@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_narrow_left_side@2x.png deleted file mode 100644 index 6123bc2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_narrow_left_side@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_narrow_left_side@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_narrow_left_side@3x.png deleted file mode 100644 index ea94a02..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_narrow_left_side@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_narrow_right_side@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_narrow_right_side@2x.png deleted file mode 100644 index e6dbcfc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_narrow_right_side@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_narrow_right_side@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_narrow_right_side@3x.png deleted file mode 100644 index 086febf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_narrow_right_side@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_no_passing@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_no_passing@2x.png deleted file mode 100644 index 9239465..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_no_passing@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_no_passing@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_no_passing@3x.png deleted file mode 100644 index 5e908b3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_no_passing@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_nokeeper_railway_crossing@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_nokeeper_railway_crossing@2x.png deleted file mode 100644 index f6d38c1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_nokeeper_railway_crossing@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_nokeeper_railway_crossing@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_nokeeper_railway_crossing@3x.png deleted file mode 100644 index f5cdca3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_nokeeper_railway_crossing@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_reverse_detour@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_reverse_detour@2x.png deleted file mode 100644 index 4f2d9f4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_reverse_detour@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_reverse_detour@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_reverse_detour@3x.png deleted file mode 100644 index be69d09..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_reverse_detour@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_rock_fall_left@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_rock_fall_left@2x.png deleted file mode 100644 index 60429dc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_rock_fall_left@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_rock_fall_left@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_rock_fall_left@3x.png deleted file mode 100644 index 324dcc6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_rock_fall_left@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_rock_fall_right@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_rock_fall_right@2x.png deleted file mode 100644 index 26d0a5a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_rock_fall_right@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_rock_fall_right@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_rock_fall_right@3x.png deleted file mode 100644 index f959eca..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_rock_fall_right@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_rough_road@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_rough_road@2x.png deleted file mode 100644 index 312506a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_rough_road@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_rough_road@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_rough_road@3x.png deleted file mode 100644 index 611a1c8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_rough_road@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_sharp_turn_left@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_sharp_turn_left@2x.png deleted file mode 100644 index 0daa4b1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_sharp_turn_left@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_sharp_turn_left@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_sharp_turn_left@3x.png deleted file mode 100644 index 134dd46..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_sharp_turn_left@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_sharp_turn_right@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_sharp_turn_right@2x.png deleted file mode 100644 index 71a7936..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_sharp_turn_right@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_sharp_turn_right@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_sharp_turn_right@3x.png deleted file mode 100644 index 080f832..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_sharp_turn_right@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_slow_down@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_slow_down@2x.png deleted file mode 100644 index 8950f8d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_slow_down@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_slow_down@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_slow_down@3x.png deleted file mode 100644 index 1e69288..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_slow_down@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_through_school@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_through_school@2x.png deleted file mode 100644 index 5950a32..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_through_school@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_through_school@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_through_school@3x.png deleted file mode 100644 index cc26391..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_through_school@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_through_village@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_through_village@2x.png deleted file mode 100644 index d83a876..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_through_village@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_through_village@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_through_village@3x.png deleted file mode 100644 index 70bc83f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_through_village@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_tunnel@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_tunnel@2x.png deleted file mode 100644 index 5d8a189..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_tunnel@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_tunnel@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_tunnel@3x.png deleted file mode 100644 index d24a51a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_tunnel@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_upward_slope@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_upward_slope@2x.png deleted file mode 100644 index 22cd886..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_upward_slope@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_upward_slope@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_upward_slope@3x.png deleted file mode 100644 index e50f389..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_upward_slope@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_water_road@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_water_road@2x.png deleted file mode 100644 index 2455cbf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_water_road@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_water_road@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_water_road@3x.png deleted file mode 100644 index 3eac536..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_water_road@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_wind_area@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_wind_area@2x.png deleted file mode 100644 index e19ac70..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_wind_area@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_wind_area@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_wind_area@3x.png deleted file mode 100644 index c8fdb94..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/cruise_wind_area@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d007cccc4b83a0e5b8ba4bc1275a89de@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d007cccc4b83a0e5b8ba4bc1275a89de@2x.png deleted file mode 100644 index 1268e03..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d007cccc4b83a0e5b8ba4bc1275a89de@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d007cccc4b83a0e5b8ba4bc1275a89de@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d007cccc4b83a0e5b8ba4bc1275a89de@3x.png deleted file mode 100644 index 1a02625..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d007cccc4b83a0e5b8ba4bc1275a89de@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d1181790d56184ba7ae21dc395026d5f@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d1181790d56184ba7ae21dc395026d5f@2x.png deleted file mode 100644 index 1c45656..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d1181790d56184ba7ae21dc395026d5f@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d1181790d56184ba7ae21dc395026d5f@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d1181790d56184ba7ae21dc395026d5f@3x.png deleted file mode 100644 index 07962a8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d1181790d56184ba7ae21dc395026d5f@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d1cac138116f46f847232bf981bc2e7e@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d1cac138116f46f847232bf981bc2e7e@2x.webp deleted file mode 100644 index 496b474..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d1cac138116f46f847232bf981bc2e7e@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d1cac138116f46f847232bf981bc2e7e@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d1cac138116f46f847232bf981bc2e7e@3x.webp deleted file mode 100644 index 628c3af..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d1cac138116f46f847232bf981bc2e7e@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d1d138adcb61fec08596314eebc0e7e5@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d1d138adcb61fec08596314eebc0e7e5@2x.png deleted file mode 100644 index 3b49ad2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d1d138adcb61fec08596314eebc0e7e5@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d1d138adcb61fec08596314eebc0e7e5@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d1d138adcb61fec08596314eebc0e7e5@3x.png deleted file mode 100644 index a7d90bf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d1d138adcb61fec08596314eebc0e7e5@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d2522e040f8c413db2755fb1192896e2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d2522e040f8c413db2755fb1192896e2@2x.png deleted file mode 100644 index 60be381..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d2522e040f8c413db2755fb1192896e2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d2522e040f8c413db2755fb1192896e2@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d2522e040f8c413db2755fb1192896e2@3x.png deleted file mode 100644 index 6ecd9ed..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d2522e040f8c413db2755fb1192896e2@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d3ce5d3afba1bd41edbaef89afb4c6a2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d3ce5d3afba1bd41edbaef89afb4c6a2@2x.png deleted file mode 100644 index 3eed7e9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d3ce5d3afba1bd41edbaef89afb4c6a2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d3ce5d3afba1bd41edbaef89afb4c6a2@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d3ce5d3afba1bd41edbaef89afb4c6a2@3x.png deleted file mode 100644 index fce7afd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d3ce5d3afba1bd41edbaef89afb4c6a2@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d46b2e06932b3923e4cbbfd78c660263@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d46b2e06932b3923e4cbbfd78c660263@2x.webp deleted file mode 100644 index 8df6526..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d46b2e06932b3923e4cbbfd78c660263@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d46b2e06932b3923e4cbbfd78c660263@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d46b2e06932b3923e4cbbfd78c660263@3x.webp deleted file mode 100644 index a363a5b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d46b2e06932b3923e4cbbfd78c660263@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d7311195f6cf9d0227d5adbdef02bb5e@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d7311195f6cf9d0227d5adbdef02bb5e@2x.png deleted file mode 100644 index a5c7dee..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d7311195f6cf9d0227d5adbdef02bb5e@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d7311195f6cf9d0227d5adbdef02bb5e@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d7311195f6cf9d0227d5adbdef02bb5e@3x.png deleted file mode 100644 index 27d2940..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d7311195f6cf9d0227d5adbdef02bb5e@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d7cef758b8aebc6ecbbc1d9ad1e552cc@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d7cef758b8aebc6ecbbc1d9ad1e552cc@2x.webp deleted file mode 100644 index 263d611..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d7cef758b8aebc6ecbbc1d9ad1e552cc@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d7cef758b8aebc6ecbbc1d9ad1e552cc@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d7cef758b8aebc6ecbbc1d9ad1e552cc@3x.webp deleted file mode 100644 index 895a9bc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d7cef758b8aebc6ecbbc1d9ad1e552cc@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8870335986a26b370c6b11ea8bc6c96@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8870335986a26b370c6b11ea8bc6c96@2x.png deleted file mode 100644 index ae74158..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8870335986a26b370c6b11ea8bc6c96@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8870335986a26b370c6b11ea8bc6c96@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8870335986a26b370c6b11ea8bc6c96@3x.png deleted file mode 100644 index c2dcd52..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8870335986a26b370c6b11ea8bc6c96@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8a25617405251aa9d7b08e46ab3a87e@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8a25617405251aa9d7b08e46ab3a87e@2x.webp deleted file mode 100644 index 9174bab..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8a25617405251aa9d7b08e46ab3a87e@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8a25617405251aa9d7b08e46ab3a87e@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8a25617405251aa9d7b08e46ab3a87e@3x.webp deleted file mode 100644 index abe6dcf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8a25617405251aa9d7b08e46ab3a87e@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8a25617405251aa9d7b08e46ab3a87e@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8a25617405251aa9d7b08e46ab3a87e@dark@2x.webp deleted file mode 100644 index 351118b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8a25617405251aa9d7b08e46ab3a87e@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8a25617405251aa9d7b08e46ab3a87e@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8a25617405251aa9d7b08e46ab3a87e@dark@3x.webp deleted file mode 100644 index e451571..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8a25617405251aa9d7b08e46ab3a87e@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8c52e3ed1bfefee621238c97cb398fb@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8c52e3ed1bfefee621238c97cb398fb@2x.png deleted file mode 100644 index b763b4d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8c52e3ed1bfefee621238c97cb398fb@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8c52e3ed1bfefee621238c97cb398fb@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8c52e3ed1bfefee621238c97cb398fb@3x.png deleted file mode 100644 index 10a52ad..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8c52e3ed1bfefee621238c97cb398fb@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8ce951ace7311087579e5bb374f4b3b.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8ce951ace7311087579e5bb374f4b3b.webp deleted file mode 100644 index bc4d594..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d8ce951ace7311087579e5bb374f4b3b.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d95799e7380dfbf1a03bdb499a5bd151@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d95799e7380dfbf1a03bdb499a5bd151@2x.webp deleted file mode 100644 index 2fe72da..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d95799e7380dfbf1a03bdb499a5bd151@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d95799e7380dfbf1a03bdb499a5bd151@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d95799e7380dfbf1a03bdb499a5bd151@3x.webp deleted file mode 100644 index 485410d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d95799e7380dfbf1a03bdb499a5bd151@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d97a7f04b70fe5297bc7bedeb0ead9cc@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d97a7f04b70fe5297bc7bedeb0ead9cc@2x.webp deleted file mode 100644 index 82c949a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d97a7f04b70fe5297bc7bedeb0ead9cc@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d97a7f04b70fe5297bc7bedeb0ead9cc@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d97a7f04b70fe5297bc7bedeb0ead9cc@3x.webp deleted file mode 100644 index 5f9b1f0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d97a7f04b70fe5297bc7bedeb0ead9cc@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d9fe1f561a3063929a8a98ddb555c3d5@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d9fe1f561a3063929a8a98ddb555c3d5@2x.webp deleted file mode 100644 index 30ca4b6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d9fe1f561a3063929a8a98ddb555c3d5@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d9fe1f561a3063929a8a98ddb555c3d5@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d9fe1f561a3063929a8a98ddb555c3d5@3x.webp deleted file mode 100644 index 2c2eb27..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/d9fe1f561a3063929a8a98ddb555c3d5@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/da6b672c6bf20855439a8062addc3158@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/da6b672c6bf20855439a8062addc3158@2x.webp deleted file mode 100644 index e1cf989..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/da6b672c6bf20855439a8062addc3158@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/da6b672c6bf20855439a8062addc3158@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/da6b672c6bf20855439a8062addc3158@3x.webp deleted file mode 100644 index b88720c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/da6b672c6bf20855439a8062addc3158@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/da8fb28a429477c64174c24ce844da8c@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/da8fb28a429477c64174c24ce844da8c@2x.webp deleted file mode 100644 index 532888e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/da8fb28a429477c64174c24ce844da8c@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/da8fb28a429477c64174c24ce844da8c@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/da8fb28a429477c64174c24ce844da8c@3x.webp deleted file mode 100644 index c3cec0d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/da8fb28a429477c64174c24ce844da8c@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dad27c38d41bc5a5ac4f01132ccf0d5c@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dad27c38d41bc5a5ac4f01132ccf0d5c@2x.png deleted file mode 100644 index bdf602c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dad27c38d41bc5a5ac4f01132ccf0d5c@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dad27c38d41bc5a5ac4f01132ccf0d5c@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dad27c38d41bc5a5ac4f01132ccf0d5c@3x.png deleted file mode 100644 index 801e08a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dad27c38d41bc5a5ac4f01132ccf0d5c@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/db09becff59298d758742757802ad02c@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/db09becff59298d758742757802ad02c@2x.png deleted file mode 100644 index 86d787d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/db09becff59298d758742757802ad02c@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/db09becff59298d758742757802ad02c@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/db09becff59298d758742757802ad02c@3x.png deleted file mode 100644 index 0d42413..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/db09becff59298d758742757802ad02c@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/db09becff59298d758742757802ad02c@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/db09becff59298d758742757802ad02c@dark@2x.png deleted file mode 100644 index 33c63b1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/db09becff59298d758742757802ad02c@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/db09becff59298d758742757802ad02c@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/db09becff59298d758742757802ad02c@dark@3x.png deleted file mode 100644 index 8bd3142..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/db09becff59298d758742757802ad02c@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/db7a0c9a055a5199920e47b9b921139f@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/db7a0c9a055a5199920e47b9b921139f@2x.png deleted file mode 100644 index d0718eb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/db7a0c9a055a5199920e47b9b921139f@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/db7a0c9a055a5199920e47b9b921139f@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/db7a0c9a055a5199920e47b9b921139f@3x.png deleted file mode 100644 index dd17bee..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/db7a0c9a055a5199920e47b9b921139f@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dc0dea0ccb80026b5d50fc561280f82a@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dc0dea0ccb80026b5d50fc561280f82a@2x.webp deleted file mode 100644 index 0eb3093..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dc0dea0ccb80026b5d50fc561280f82a@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dc0dea0ccb80026b5d50fc561280f82a@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dc0dea0ccb80026b5d50fc561280f82a@3x.webp deleted file mode 100644 index 61cd994..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dc0dea0ccb80026b5d50fc561280f82a@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dc2a8eb1e53311d1abfc7e4ba40fa51b@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dc2a8eb1e53311d1abfc7e4ba40fa51b@2x.png deleted file mode 100644 index 36bf400..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dc2a8eb1e53311d1abfc7e4ba40fa51b@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dc2a8eb1e53311d1abfc7e4ba40fa51b@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dc2a8eb1e53311d1abfc7e4ba40fa51b@3x.png deleted file mode 100644 index adb26f9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dc2a8eb1e53311d1abfc7e4ba40fa51b@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dc2a8eb1e53311d1abfc7e4ba40fa51b@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dc2a8eb1e53311d1abfc7e4ba40fa51b@dark@2x.png deleted file mode 100644 index ee48720..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dc2a8eb1e53311d1abfc7e4ba40fa51b@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dc2a8eb1e53311d1abfc7e4ba40fa51b@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dc2a8eb1e53311d1abfc7e4ba40fa51b@dark@3x.png deleted file mode 100644 index deb48a3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dc2a8eb1e53311d1abfc7e4ba40fa51b@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd0fa105b13a3e6f4bc01f39e95c8ebd@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd0fa105b13a3e6f4bc01f39e95c8ebd@2x.png deleted file mode 100644 index 8163934..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd0fa105b13a3e6f4bc01f39e95c8ebd@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd0fa105b13a3e6f4bc01f39e95c8ebd@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd0fa105b13a3e6f4bc01f39e95c8ebd@3x.png deleted file mode 100644 index 7a69404..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd0fa105b13a3e6f4bc01f39e95c8ebd@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd0fa105b13a3e6f4bc01f39e95c8ebd@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd0fa105b13a3e6f4bc01f39e95c8ebd@dark@2x.png deleted file mode 100644 index c7900a2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd0fa105b13a3e6f4bc01f39e95c8ebd@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd0fa105b13a3e6f4bc01f39e95c8ebd@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd0fa105b13a3e6f4bc01f39e95c8ebd@dark@3x.png deleted file mode 100644 index d15993d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd0fa105b13a3e6f4bc01f39e95c8ebd@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd796e59a9a70a4fc40c29c571bfceff@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd796e59a9a70a4fc40c29c571bfceff@2x.webp deleted file mode 100644 index adebfa2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd796e59a9a70a4fc40c29c571bfceff@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd796e59a9a70a4fc40c29c571bfceff@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd796e59a9a70a4fc40c29c571bfceff@3x.webp deleted file mode 100644 index c84d024..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd796e59a9a70a4fc40c29c571bfceff@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd8a627a449c93d3fbe6e71fd302e5c2@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd8a627a449c93d3fbe6e71fd302e5c2@2x.webp deleted file mode 100644 index 1121dd7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd8a627a449c93d3fbe6e71fd302e5c2@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd8a627a449c93d3fbe6e71fd302e5c2@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd8a627a449c93d3fbe6e71fd302e5c2@3x.webp deleted file mode 100644 index 060c8ce..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd8a627a449c93d3fbe6e71fd302e5c2@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd8a627a449c93d3fbe6e71fd302e5c2@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd8a627a449c93d3fbe6e71fd302e5c2@dark@2x.webp deleted file mode 100644 index 42ea0c3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd8a627a449c93d3fbe6e71fd302e5c2@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd8a627a449c93d3fbe6e71fd302e5c2@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd8a627a449c93d3fbe6e71fd302e5c2@dark@3x.webp deleted file mode 100644 index 640d8a4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd8a627a449c93d3fbe6e71fd302e5c2@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd940adc3c66f21c5b2bdf8ba825cd80@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd940adc3c66f21c5b2bdf8ba825cd80@2x.png deleted file mode 100644 index 81eeac2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd940adc3c66f21c5b2bdf8ba825cd80@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd940adc3c66f21c5b2bdf8ba825cd80@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd940adc3c66f21c5b2bdf8ba825cd80@3x.png deleted file mode 100644 index 3324d55..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd940adc3c66f21c5b2bdf8ba825cd80@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd940adc3c66f21c5b2bdf8ba825cd80@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd940adc3c66f21c5b2bdf8ba825cd80@dark@2x.webp deleted file mode 100644 index 4a67311..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd940adc3c66f21c5b2bdf8ba825cd80@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd940adc3c66f21c5b2bdf8ba825cd80@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd940adc3c66f21c5b2bdf8ba825cd80@dark@3x.webp deleted file mode 100644 index 726c262..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/dd940adc3c66f21c5b2bdf8ba825cd80@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/de22dd0818049868925285f926fc298a@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/de22dd0818049868925285f926fc298a@2x.webp deleted file mode 100644 index 3848e20..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/de22dd0818049868925285f926fc298a@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/de22dd0818049868925285f926fc298a@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/de22dd0818049868925285f926fc298a@3x.webp deleted file mode 100644 index 2c1a496..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/de22dd0818049868925285f926fc298a@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/de22dd0818049868925285f926fc298a@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/de22dd0818049868925285f926fc298a@dark@2x.webp deleted file mode 100644 index 17e0ffc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/de22dd0818049868925285f926fc298a@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/de22dd0818049868925285f926fc298a@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/de22dd0818049868925285f926fc298a@dark@3x.webp deleted file mode 100644 index 2e3aa2c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/de22dd0818049868925285f926fc298a@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_carreport_bubble@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_carreport_bubble@2x.png deleted file mode 100644 index a2fbb10..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_carreport_bubble@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_common_route_foot_greenpoint@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_common_route_foot_greenpoint@2x.png deleted file mode 100644 index b327bb7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_common_route_foot_greenpoint@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_common_route_foot_greenpoint@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_common_route_foot_greenpoint@3x.png deleted file mode 100644 index 6e5f93c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_common_route_foot_greenpoint@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_atm_highlighted@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_atm_highlighted@2x.png deleted file mode 100644 index 228f7ff..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_atm_highlighted@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_atm_highlighted@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_atm_highlighted@3x.png deleted file mode 100644 index 2bc5855..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_atm_highlighted@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_atm_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_atm_normal@2x.png deleted file mode 100644 index 0fe32de..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_atm_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_atm_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_atm_normal@3x.png deleted file mode 100644 index af6e4bd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_atm_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_electric_highlighted@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_electric_highlighted@2x.png deleted file mode 100644 index 598d95d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_electric_highlighted@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_electric_highlighted@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_electric_highlighted@3x.png deleted file mode 100644 index ebdf3d6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_electric_highlighted@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_electric_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_electric_normal@2x.png deleted file mode 100644 index 22a9642..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_electric_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_electric_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_electric_normal@3x.png deleted file mode 100644 index be259d8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_electric_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_gas_highlighted@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_gas_highlighted@2x.png deleted file mode 100644 index 230823c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_gas_highlighted@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_gas_highlighted@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_gas_highlighted@3x.png deleted file mode 100644 index ef38f7e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_gas_highlighted@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_gas_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_gas_normal@2x.png deleted file mode 100644 index 16033b5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_gas_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_gas_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_gas_normal@3x.png deleted file mode 100644 index 5ca4df6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_gas_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_bus_0@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_bus_0@2x.png deleted file mode 100644 index b3a8ccb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_bus_0@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_bus_0@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_bus_0@3x.png deleted file mode 100644 index e237720..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_bus_0@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_bus_1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_bus_1@2x.png deleted file mode 100644 index 0386b1f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_bus_1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_bus_1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_bus_1@3x.png deleted file mode 100644 index 4526ca5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_bus_1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_bus_2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_bus_2@2x.png deleted file mode 100644 index e73e4b1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_bus_2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_bus_2@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_bus_2@3x.png deleted file mode 100644 index a05f80c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_bus_2@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_bus_4@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_bus_4@2x.png deleted file mode 100644 index 261666a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_bus_4@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_bus_4@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_bus_4@3x.png deleted file mode 100644 index 888986e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_bus_4@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_camera_0@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_camera_0@2x.png deleted file mode 100644 index 21118b3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_camera_0@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_camera_0@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_camera_0@3x.png deleted file mode 100644 index 78866bb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_camera_0@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_camera_1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_camera_1@2x.png deleted file mode 100644 index a41292c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_camera_1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_camera_1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_camera_1@3x.png deleted file mode 100644 index d4b55ea..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_camera_1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_camera_2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_camera_2@2x.png deleted file mode 100644 index ceb33ae..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_camera_2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_camera_2@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_camera_2@3x.png deleted file mode 100644 index 3f493e0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_camera_2@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_camera_4@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_camera_4@2x.png deleted file mode 100644 index f4a95b1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_camera_4@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_camera_4@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_camera_4@3x.png deleted file mode 100644 index e66ed79..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_camera_4@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_emergency_0@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_emergency_0@2x.png deleted file mode 100644 index 41c853b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_emergency_0@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_emergency_0@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_emergency_0@3x.png deleted file mode 100644 index bc8d82b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_emergency_0@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_emergency_1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_emergency_1@2x.png deleted file mode 100644 index e932782..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_emergency_1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_emergency_1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_emergency_1@3x.png deleted file mode 100644 index 891ebcd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_emergency_1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_emergency_2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_emergency_2@2x.png deleted file mode 100644 index fc953a0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_emergency_2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_emergency_2@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_emergency_2@3x.png deleted file mode 100644 index f686f71..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_emergency_2@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_emergency_4@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_emergency_4@2x.png deleted file mode 100644 index afab490..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_emergency_4@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_emergency_4@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_emergency_4@3x.png deleted file mode 100644 index c4b3125..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_emergency_4@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_light_0@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_light_0@2x.png deleted file mode 100644 index 42bc5dd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_light_0@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_light_0@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_light_0@3x.png deleted file mode 100644 index 8ad433d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_light_0@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_light_1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_light_1@2x.png deleted file mode 100644 index 3d0a605..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_light_1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_light_1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_light_1@3x.png deleted file mode 100644 index b0d2fbc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_light_1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_light_2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_light_2@2x.png deleted file mode 100644 index ef1c362..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_light_2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_light_2@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_light_2@3x.png deleted file mode 100644 index 144c2e1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_light_2@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_light_4@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_light_4@2x.png deleted file mode 100644 index 5261f5f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_light_4@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_light_4@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_light_4@3x.png deleted file mode 100644 index 54b881e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_light_4@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_speed_additional@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_speed_additional@2x.png deleted file mode 100644 index 4265f5c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_speed_additional@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_speed_additional@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_speed_additional@3x.png deleted file mode 100644 index 927d751..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_speed_additional@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_speed_left@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_speed_left@2x.png deleted file mode 100644 index e22466e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_speed_left@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_speed_left@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_speed_left@3x.png deleted file mode 100644 index aab1434..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_speed_left@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_speed_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_speed_normal@2x.png deleted file mode 100644 index 351cd33..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_speed_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_speed_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_speed_normal@3x.png deleted file mode 100644 index 017bdfd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_speed_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_speed_right@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_speed_right@2x.png deleted file mode 100644 index accf333..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_speed_right@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_speed_right@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_speed_right@3x.png deleted file mode 100644 index bd53b7e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_speed_right@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_test_speed_0@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_test_speed_0@2x.png deleted file mode 100644 index efa5fd5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_test_speed_0@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_test_speed_0@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_test_speed_0@3x.png deleted file mode 100644 index e8495c4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_test_speed_0@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_test_speed_1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_test_speed_1@2x.png deleted file mode 100644 index bc58dd7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_test_speed_1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_test_speed_1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_test_speed_1@3x.png deleted file mode 100644 index 79bb37b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_test_speed_1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_test_speed_2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_test_speed_2@2x.png deleted file mode 100644 index 405bc80..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_test_speed_2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_test_speed_2@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_test_speed_2@3x.png deleted file mode 100644 index 5e5f9d0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_test_speed_2@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_test_speed_4@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_test_speed_4@2x.png deleted file mode 100644 index c35928f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_test_speed_4@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_test_speed_4@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_test_speed_4@3x.png deleted file mode 100644 index 61ae7fa..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_test_speed_4@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_unemergency_0@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_unemergency_0@2x.png deleted file mode 100644 index 6c44882..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_unemergency_0@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_unemergency_0@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_unemergency_0@3x.png deleted file mode 100644 index 8df61c5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_unemergency_0@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_unemergency_1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_unemergency_1@2x.png deleted file mode 100644 index 0a745d9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_unemergency_1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_unemergency_1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_unemergency_1@3x.png deleted file mode 100644 index 290a5f8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_unemergency_1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_unemergency_2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_unemergency_2@2x.png deleted file mode 100644 index db03a4f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_unemergency_2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_unemergency_2@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_unemergency_2@3x.png deleted file mode 100644 index f68ad4c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_unemergency_2@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_unemergency_4@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_unemergency_4@2x.png deleted file mode 100644 index ccf1d8d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_unemergency_4@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_unemergency_4@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_unemergency_4@3x.png deleted file mode 100644 index ad67845..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_layer_unemergency_4@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_new_location@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_new_location@2x.png deleted file mode 100644 index 6498b05..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_new_location@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_new_location@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_new_location@3x.png deleted file mode 100644 index b29d16d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_new_location@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_new_location_big@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_new_location_big@2x.png deleted file mode 100644 index 6b25363..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_new_location_big@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_new_location_big@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_new_location_big@3x.png deleted file mode 100644 index 5c99cef..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_new_location_big@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_highlighted@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_highlighted@2x.png deleted file mode 100644 index fda8a25..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_highlighted@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_highlighted@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_highlighted@3x.png deleted file mode 100644 index e1f71b0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_highlighted@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_normal@2x.png deleted file mode 100644 index ad14669..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_normal@3x.png deleted file mode 100644 index 3d4ebd9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_sh_highlighted@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_sh_highlighted@2x.png deleted file mode 100644 index 0c84fa6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_sh_highlighted@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_sh_highlighted@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_sh_highlighted@3x.png deleted file mode 100644 index 1636ee5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_sh_highlighted@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_sh_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_sh_normal@2x.png deleted file mode 100644 index fbb0765..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_sh_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_sh_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_sh_normal@3x.png deleted file mode 100644 index a20ced7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_sh_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_sy_highlighted@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_sy_highlighted@2x.png deleted file mode 100644 index 12f2437..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_sy_highlighted@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_sy_highlighted@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_sy_highlighted@3x.png deleted file mode 100644 index 3ba69ac..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_sy_highlighted@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_sy_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_sy_normal@2x.png deleted file mode 100644 index e8bdd68..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_sy_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_sy_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_sy_normal@3x.png deleted file mode 100644 index bc710dc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_oil_sy_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_repair_highlighted@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_repair_highlighted@2x.png deleted file mode 100644 index 4386364..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_repair_highlighted@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_repair_highlighted@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_repair_highlighted@3x.png deleted file mode 100644 index d1178e1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_repair_highlighted@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_repair_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_repair_normal@2x.png deleted file mode 100644 index b9f9b19..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_repair_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_repair_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_repair_normal@3x.png deleted file mode 100644 index 1680fd7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_repair_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_restarea_highlighted@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_restarea_highlighted@2x.png deleted file mode 100644 index 085b85b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_restarea_highlighted@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_restarea_highlighted@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_restarea_highlighted@3x.png deleted file mode 100644 index e608b13..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_restarea_highlighted@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_restarea_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_restarea_normal@2x.png deleted file mode 100644 index 8973edd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_restarea_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_restarea_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_restarea_normal@3x.png deleted file mode 100644 index b7c5503..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_restarea_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_route_brakes@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_route_brakes@2x.png deleted file mode 100644 index b8afa24..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_route_brakes@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_route_overspeed@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_route_overspeed@2x.png deleted file mode 100644 index 6e1723d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_route_overspeed@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_route_rush@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_route_rush@2x.png deleted file mode 100644 index e78f20a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_route_rush@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_route_turn@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_route_turn@2x.png deleted file mode 100644 index f4f4692..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_route_turn@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_startpoint@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_startpoint@2x.png deleted file mode 100644 index 0b24ae4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_startpoint@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_startpoint@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_startpoint@3x.png deleted file mode 100644 index 0752014..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_startpoint@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_toilet_highlighted@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_toilet_highlighted@2x.png deleted file mode 100644 index 8ca0caf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_toilet_highlighted@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_toilet_highlighted@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_toilet_highlighted@3x.png deleted file mode 100644 index 58b8d1c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_toilet_highlighted@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_toilet_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_toilet_normal@2x.png deleted file mode 100644 index 66d91bb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_toilet_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_toilet_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_toilet_normal@3x.png deleted file mode 100644 index 5590a07..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_navi_toilet_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_accident_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_accident_normal@2x.png deleted file mode 100644 index b55d509..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_accident_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_accident_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_accident_normal@3x.png deleted file mode 100644 index b2d112d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_accident_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_announcement_bubble@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_announcement_bubble@2x.png deleted file mode 100644 index 2414c8b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_announcement_bubble@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_announcement_bubble@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_announcement_bubble@3x.png deleted file mode 100644 index 971a5e7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_announcement_bubble@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_announcement_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_announcement_normal@2x.png deleted file mode 100644 index 0e896a3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_announcement_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_announcement_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_announcement_normal@3x.png deleted file mode 100644 index 58a7ed8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_announcement_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_construct_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_construct_normal@2x.png deleted file mode 100644 index 0c6bd59..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_construct_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_construct_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_construct_normal@3x.png deleted file mode 100644 index 7e51799..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_construct_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_densefog_bubble@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_densefog_bubble@2x.png deleted file mode 100644 index 38c0cdb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_densefog_bubble@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_densefog_bubble@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_densefog_bubble@3x.png deleted file mode 100644 index dd3f518..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_densefog_bubble@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_densefog_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_densefog_normal@2x.png deleted file mode 100644 index 24c2e91..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_densefog_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_densefog_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_densefog_normal@3x.png deleted file mode 100644 index 96e27d1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_densefog_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_fixed_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_fixed_normal@2x.png deleted file mode 100644 index 1b0b15c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_fixed_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_fixed_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_fixed_normal@3x.png deleted file mode 100644 index 0e68177..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_fixed_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_heavysnow_bubble@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_heavysnow_bubble@2x.png deleted file mode 100644 index b98d1a0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_heavysnow_bubble@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_heavysnow_bubble@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_heavysnow_bubble@3x.png deleted file mode 100644 index f77ed08..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_heavysnow_bubble@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_heavysnow_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_heavysnow_normal@2x.png deleted file mode 100644 index d23577d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_heavysnow_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_heavysnow_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_heavysnow_normal@3x.png deleted file mode 100644 index 698fd24..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_heavysnow_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_obstacle_bubble@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_obstacle_bubble@2x.png deleted file mode 100644 index 6d48b26..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_obstacle_bubble@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_obstacle_bubble@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_obstacle_bubble@3x.png deleted file mode 100644 index e06992c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_obstacle_bubble@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_obstacle_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_obstacle_normal@2x.png deleted file mode 100644 index 327cffa..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_obstacle_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_obstacle_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_obstacle_normal@3x.png deleted file mode 100644 index 577821e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_obstacle_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_roadclose_bubble@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_roadclose_bubble@2x.png deleted file mode 100644 index 0d8a05a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_roadclose_bubble@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_roadclose_bubble@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_roadclose_bubble@3x.png deleted file mode 100644 index 58a67d8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_roadclose_bubble@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_slow_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_slow_normal@2x.png deleted file mode 100644 index bdc8294..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_slow_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_slow_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_slow_normal@3x.png deleted file mode 100644 index a144501..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_slow_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_trafficcontrol_bubble@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_trafficcontrol_bubble@2x.png deleted file mode 100644 index cd93b36..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_trafficcontrol_bubble@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_trafficcontrol_bubble@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_trafficcontrol_bubble@3x.png deleted file mode 100644 index 82afa36..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_trafficcontrol_bubble@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_trafficcontrol_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_trafficcontrol_normal@2x.png deleted file mode 100644 index 1f9cb50..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_trafficcontrol_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_trafficcontrol_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_trafficcontrol_normal@3x.png deleted file mode 100644 index f07eb31..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_trafficcontrol_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_virtual_bubble@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_virtual_bubble@2x.png deleted file mode 100644 index d112b03..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_virtual_bubble@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_virtual_bubble@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_virtual_bubble@3x.png deleted file mode 100644 index b44c21b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_virtual_bubble@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_virtual_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_virtual_normal@2x.png deleted file mode 100644 index 72d54eb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_virtual_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_virtual_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_virtual_normal@3x.png deleted file mode 100644 index 970e721..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_virtual_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_warning_bubble@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_warning_bubble@2x.png deleted file mode 100644 index 51c0a48..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_warning_bubble@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_warning_bubble@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_warning_bubble@3x.png deleted file mode 100644 index 9c41724..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_warning_bubble@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_warning_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_warning_normal@2x.png deleted file mode 100644 index 68f596c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_warning_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_warning_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_warning_normal@3x.png deleted file mode 100644 index b77acc0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_warning_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_water_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_water_normal@2x.png deleted file mode 100644 index bf878d8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_water_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_water_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_water_normal@3x.png deleted file mode 100644 index 4310492..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/default_path_layer_texture_water_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/df0015c04954bf2b0e05469d9619d5a9@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/df0015c04954bf2b0e05469d9619d5a9@2x.png deleted file mode 100644 index c7900a2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/df0015c04954bf2b0e05469d9619d5a9@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/df0015c04954bf2b0e05469d9619d5a9@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/df0015c04954bf2b0e05469d9619d5a9@3x.png deleted file mode 100644 index d15993d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/df0015c04954bf2b0e05469d9619d5a9@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/df67eeeaa695d22546da6f7909a477db@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/df67eeeaa695d22546da6f7909a477db@2x.webp deleted file mode 100644 index cd43595..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/df67eeeaa695d22546da6f7909a477db@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/df67eeeaa695d22546da6f7909a477db@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/df67eeeaa695d22546da6f7909a477db@3x.webp deleted file mode 100644 index 2d0b83d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/df67eeeaa695d22546da6f7909a477db@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/drive_map_lr_feeroad.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/drive_map_lr_feeroad.png deleted file mode 100644 index 7d728f1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/drive_map_lr_feeroad.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/drive_map_lr_nofeeroad.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/drive_map_lr_nofeeroad.png deleted file mode 100644 index 8d965b8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/drive_map_lr_nofeeroad.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/drive_traffic_accident_accident.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/drive_traffic_accident_accident.png deleted file mode 100644 index 67ba6d5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/drive_traffic_accident_accident.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/drive_traffic_construction.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/drive_traffic_construction.png deleted file mode 100644 index 30b20b0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/drive_traffic_construction.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/drive_traffic_police_law_enforce.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/drive_traffic_police_law_enforce.png deleted file mode 100644 index 9af0e10..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/drive_traffic_police_law_enforce.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/drive_traffic_ponding.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/drive_traffic_ponding.png deleted file mode 100644 index 29a363a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/drive_traffic_ponding.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/drive_traffic_road_slow.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/drive_traffic_road_slow.png deleted file mode 100644 index 7178f17..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/drive_traffic_road_slow.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/drive_traffic_suspected.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/drive_traffic_suspected.png deleted file mode 100644 index 04505c6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/drive_traffic_suspected.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e00fbb57db9a2f67b7b53ae0c6e6b1c8@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e00fbb57db9a2f67b7b53ae0c6e6b1c8@2x.webp deleted file mode 100644 index cd4c3df..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e00fbb57db9a2f67b7b53ae0c6e6b1c8@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e00fbb57db9a2f67b7b53ae0c6e6b1c8@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e00fbb57db9a2f67b7b53ae0c6e6b1c8@3x.webp deleted file mode 100644 index a7863e5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e00fbb57db9a2f67b7b53ae0c6e6b1c8@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e072730f59ecac2c3d9614e2f7c6815f@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e072730f59ecac2c3d9614e2f7c6815f@2x.webp deleted file mode 100644 index 8fc5fc2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e072730f59ecac2c3d9614e2f7c6815f@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e072730f59ecac2c3d9614e2f7c6815f@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e072730f59ecac2c3d9614e2f7c6815f@3x.webp deleted file mode 100644 index f119ecb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e072730f59ecac2c3d9614e2f7c6815f@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e1f02b215b9bc80ead6771750a51c2ab@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e1f02b215b9bc80ead6771750a51c2ab@2x.webp deleted file mode 100644 index 5371e52..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e1f02b215b9bc80ead6771750a51c2ab@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e1f02b215b9bc80ead6771750a51c2ab@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e1f02b215b9bc80ead6771750a51c2ab@3x.webp deleted file mode 100644 index fd23102..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e1f02b215b9bc80ead6771750a51c2ab@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e2594565da2eb0a3f0460eca281d62dc@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e2594565da2eb0a3f0460eca281d62dc@2x.webp deleted file mode 100644 index b98472b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e2594565da2eb0a3f0460eca281d62dc@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e2594565da2eb0a3f0460eca281d62dc@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e2594565da2eb0a3f0460eca281d62dc@3x.webp deleted file mode 100644 index 6f70778..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e2594565da2eb0a3f0460eca281d62dc@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3544197b9a086a7b82000b622672657@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3544197b9a086a7b82000b622672657@2x.webp deleted file mode 100644 index 3cc313e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3544197b9a086a7b82000b622672657@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3544197b9a086a7b82000b622672657@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3544197b9a086a7b82000b622672657@3x.webp deleted file mode 100644 index e051273..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3544197b9a086a7b82000b622672657@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3644d2320d51ed9e31f95e957d4d4b3@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3644d2320d51ed9e31f95e957d4d4b3@2x.webp deleted file mode 100644 index 94adcc2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3644d2320d51ed9e31f95e957d4d4b3@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3644d2320d51ed9e31f95e957d4d4b3@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3644d2320d51ed9e31f95e957d4d4b3@3x.webp deleted file mode 100644 index ee27259..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3644d2320d51ed9e31f95e957d4d4b3@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3a120428ca15738655158de84465772@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3a120428ca15738655158de84465772@2x.webp deleted file mode 100644 index d98f18a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3a120428ca15738655158de84465772@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3a120428ca15738655158de84465772@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3a120428ca15738655158de84465772@3x.webp deleted file mode 100644 index 429f380..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3a120428ca15738655158de84465772@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3a120428ca15738655158de84465772@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3a120428ca15738655158de84465772@dark@2x.webp deleted file mode 100644 index b1dbd9b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3a120428ca15738655158de84465772@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3a120428ca15738655158de84465772@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3a120428ca15738655158de84465772@dark@3x.webp deleted file mode 100644 index 8e9d87d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3a120428ca15738655158de84465772@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3cca42a050065b3eb40325dd6c1e445@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3cca42a050065b3eb40325dd6c1e445@2x.png deleted file mode 100644 index 4562746..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3cca42a050065b3eb40325dd6c1e445@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3cca42a050065b3eb40325dd6c1e445@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3cca42a050065b3eb40325dd6c1e445@3x.png deleted file mode 100644 index 045b1dc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3cca42a050065b3eb40325dd6c1e445@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3cca42a050065b3eb40325dd6c1e445@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3cca42a050065b3eb40325dd6c1e445@dark@2x.png deleted file mode 100644 index b37c103..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3cca42a050065b3eb40325dd6c1e445@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3cca42a050065b3eb40325dd6c1e445@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3cca42a050065b3eb40325dd6c1e445@dark@3x.png deleted file mode 100644 index 81d2399..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e3cca42a050065b3eb40325dd6c1e445@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e5942013974c27f653b26ef735d66820@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e5942013974c27f653b26ef735d66820@2x.png deleted file mode 100644 index dd3ffef..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e5942013974c27f653b26ef735d66820@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e5942013974c27f653b26ef735d66820@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e5942013974c27f653b26ef735d66820@3x.png deleted file mode 100644 index cf8becd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e5942013974c27f653b26ef735d66820@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e5c25c684c9f25e1d9e51b8182413b80@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e5c25c684c9f25e1d9e51b8182413b80@2x.webp deleted file mode 100644 index e721cb9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e5c25c684c9f25e1d9e51b8182413b80@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e5c25c684c9f25e1d9e51b8182413b80@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e5c25c684c9f25e1d9e51b8182413b80@3x.webp deleted file mode 100644 index 89c94ac..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e5c25c684c9f25e1d9e51b8182413b80@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e5d72fa313c7a2c3f49409a5474a66da@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e5d72fa313c7a2c3f49409a5474a66da@2x.webp deleted file mode 100644 index 5bf6f1f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e5d72fa313c7a2c3f49409a5474a66da@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e5d72fa313c7a2c3f49409a5474a66da@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e5d72fa313c7a2c3f49409a5474a66da@3x.webp deleted file mode 100644 index b640a58..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e5d72fa313c7a2c3f49409a5474a66da@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e623d545f0ad8611253ce2387c70a351@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e623d545f0ad8611253ce2387c70a351@2x.webp deleted file mode 100644 index b26b998..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e623d545f0ad8611253ce2387c70a351@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e623d545f0ad8611253ce2387c70a351@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e623d545f0ad8611253ce2387c70a351@3x.webp deleted file mode 100644 index a73b435..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e623d545f0ad8611253ce2387c70a351@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e646b0b08279c12f5bfedcdc0980ad56@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e646b0b08279c12f5bfedcdc0980ad56@2x.webp deleted file mode 100644 index a56a182..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e646b0b08279c12f5bfedcdc0980ad56@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e646b0b08279c12f5bfedcdc0980ad56@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e646b0b08279c12f5bfedcdc0980ad56@3x.webp deleted file mode 100644 index a70fcc8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e646b0b08279c12f5bfedcdc0980ad56@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e64ace02ff60890fdd98ff95fbeae45a@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e64ace02ff60890fdd98ff95fbeae45a@2x.webp deleted file mode 100644 index 613c8b2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e64ace02ff60890fdd98ff95fbeae45a@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e64ace02ff60890fdd98ff95fbeae45a@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e64ace02ff60890fdd98ff95fbeae45a@3x.webp deleted file mode 100644 index fc00e51..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e64ace02ff60890fdd98ff95fbeae45a@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e68dc52bd2efa6682714d6e947fa5629@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e68dc52bd2efa6682714d6e947fa5629@2x.webp deleted file mode 100644 index c89e966..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e68dc52bd2efa6682714d6e947fa5629@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e68dc52bd2efa6682714d6e947fa5629@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e68dc52bd2efa6682714d6e947fa5629@3x.webp deleted file mode 100644 index 6266677..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e68dc52bd2efa6682714d6e947fa5629@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e68dc52bd2efa6682714d6e947fa5629@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e68dc52bd2efa6682714d6e947fa5629@dark@2x.webp deleted file mode 100644 index 3f7e031..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e68dc52bd2efa6682714d6e947fa5629@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e68dc52bd2efa6682714d6e947fa5629@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e68dc52bd2efa6682714d6e947fa5629@dark@3x.webp deleted file mode 100644 index d0a56a3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e68dc52bd2efa6682714d6e947fa5629@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e6e4f0f999b33ac3f828354dee6ad35f@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e6e4f0f999b33ac3f828354dee6ad35f@2x.webp deleted file mode 100644 index 985c835..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e6e4f0f999b33ac3f828354dee6ad35f@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e6e4f0f999b33ac3f828354dee6ad35f@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e6e4f0f999b33ac3f828354dee6ad35f@3x.webp deleted file mode 100644 index c562f11..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e6e4f0f999b33ac3f828354dee6ad35f@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e7352a4aeab411678a6dcc62992c249b@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e7352a4aeab411678a6dcc62992c249b@2x.png deleted file mode 100644 index 4fb3b4b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e7352a4aeab411678a6dcc62992c249b@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e7352a4aeab411678a6dcc62992c249b@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e7352a4aeab411678a6dcc62992c249b@3x.png deleted file mode 100644 index 5199462..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e7352a4aeab411678a6dcc62992c249b@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e790241a20c409e2c93a775c852924e8@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e790241a20c409e2c93a775c852924e8@2x.webp deleted file mode 100644 index ad5df36..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e790241a20c409e2c93a775c852924e8@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e790241a20c409e2c93a775c852924e8@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e790241a20c409e2c93a775c852924e8@3x.webp deleted file mode 100644 index 30b4082..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e790241a20c409e2c93a775c852924e8@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e833bb5a39908e1040f212c9daa6a5bc@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e833bb5a39908e1040f212c9daa6a5bc@2x.webp deleted file mode 100644 index 224ce19..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e833bb5a39908e1040f212c9daa6a5bc@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e833bb5a39908e1040f212c9daa6a5bc@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e833bb5a39908e1040f212c9daa6a5bc@3x.webp deleted file mode 100644 index 4c26949..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e833bb5a39908e1040f212c9daa6a5bc@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e943cc0960ad851a566070a0334b9578@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e943cc0960ad851a566070a0334b9578@2x.webp deleted file mode 100644 index 228e1ad..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e943cc0960ad851a566070a0334b9578@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e943cc0960ad851a566070a0334b9578@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e943cc0960ad851a566070a0334b9578@3x.webp deleted file mode 100644 index 5379f69..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e943cc0960ad851a566070a0334b9578@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e943cc0960ad851a566070a0334b9578@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e943cc0960ad851a566070a0334b9578@dark@2x.webp deleted file mode 100644 index d13483d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e943cc0960ad851a566070a0334b9578@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e943cc0960ad851a566070a0334b9578@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e943cc0960ad851a566070a0334b9578@dark@3x.webp deleted file mode 100644 index c36e893..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e943cc0960ad851a566070a0334b9578@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e9ad142e7dda7d2adf254142b09775cf@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e9ad142e7dda7d2adf254142b09775cf@2x.png deleted file mode 100644 index 963c033..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e9ad142e7dda7d2adf254142b09775cf@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e9ad142e7dda7d2adf254142b09775cf@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e9ad142e7dda7d2adf254142b09775cf@3x.png deleted file mode 100644 index 2e5a6ba..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/e9ad142e7dda7d2adf254142b09775cf@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ea341b949b090fdfec346f92434a6741@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ea341b949b090fdfec346f92434a6741@2x.webp deleted file mode 100644 index ccb5286..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ea341b949b090fdfec346f92434a6741@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ea341b949b090fdfec346f92434a6741@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ea341b949b090fdfec346f92434a6741@3x.webp deleted file mode 100644 index 5174af3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ea341b949b090fdfec346f92434a6741@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eaf4a9b23fd4908e1ff2ab337390d9cd@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eaf4a9b23fd4908e1ff2ab337390d9cd@2x.webp deleted file mode 100644 index 2b2f9ec..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eaf4a9b23fd4908e1ff2ab337390d9cd@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eaf4a9b23fd4908e1ff2ab337390d9cd@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eaf4a9b23fd4908e1ff2ab337390d9cd@3x.webp deleted file mode 100644 index 70b9fdd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eaf4a9b23fd4908e1ff2ab337390d9cd@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eb3aab1d56b009dd75bbb7e2a9a5d0e8@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eb3aab1d56b009dd75bbb7e2a9a5d0e8@2x.png deleted file mode 100644 index 323213d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eb3aab1d56b009dd75bbb7e2a9a5d0e8@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eb3aab1d56b009dd75bbb7e2a9a5d0e8@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eb3aab1d56b009dd75bbb7e2a9a5d0e8@3x.png deleted file mode 100644 index 028c165..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eb3aab1d56b009dd75bbb7e2a9a5d0e8@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eb9142a1791bf08e7fecdc2f2261e561@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eb9142a1791bf08e7fecdc2f2261e561@2x.webp deleted file mode 100644 index 1c52ed1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eb9142a1791bf08e7fecdc2f2261e561@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eb9142a1791bf08e7fecdc2f2261e561@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eb9142a1791bf08e7fecdc2f2261e561@3x.webp deleted file mode 100644 index 5a746e7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eb9142a1791bf08e7fecdc2f2261e561@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eb9142a1791bf08e7fecdc2f2261e561@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eb9142a1791bf08e7fecdc2f2261e561@dark@2x.webp deleted file mode 100644 index 7a4f010..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eb9142a1791bf08e7fecdc2f2261e561@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eb9142a1791bf08e7fecdc2f2261e561@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eb9142a1791bf08e7fecdc2f2261e561@dark@3x.webp deleted file mode 100644 index 6d99dcb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eb9142a1791bf08e7fecdc2f2261e561@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eba9c3411b07455467ec8dcd85b0fd4c@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eba9c3411b07455467ec8dcd85b0fd4c@2x.png deleted file mode 100644 index 431ba4e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eba9c3411b07455467ec8dcd85b0fd4c@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eba9c3411b07455467ec8dcd85b0fd4c@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eba9c3411b07455467ec8dcd85b0fd4c@3x.png deleted file mode 100644 index 1991a6f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eba9c3411b07455467ec8dcd85b0fd4c@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ec0bdfbd279d56115a75056a441082fd@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ec0bdfbd279d56115a75056a441082fd@2x.webp deleted file mode 100644 index ca466e5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ec0bdfbd279d56115a75056a441082fd@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ec0bdfbd279d56115a75056a441082fd@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ec0bdfbd279d56115a75056a441082fd@3x.webp deleted file mode 100644 index a872acb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ec0bdfbd279d56115a75056a441082fd@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ec604a3683a1deaa79fab759041db72e@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ec604a3683a1deaa79fab759041db72e@2x.png deleted file mode 100644 index b37c103..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ec604a3683a1deaa79fab759041db72e@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ec604a3683a1deaa79fab759041db72e@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ec604a3683a1deaa79fab759041db72e@3x.png deleted file mode 100644 index 81d2399..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ec604a3683a1deaa79fab759041db72e@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ec801d2e2a48d10f7b6873e4c3faea67@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ec801d2e2a48d10f7b6873e4c3faea67@2x.png deleted file mode 100644 index 7a55dab..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ec801d2e2a48d10f7b6873e4c3faea67@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ec801d2e2a48d10f7b6873e4c3faea67@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ec801d2e2a48d10f7b6873e4c3faea67@3x.png deleted file mode 100644 index d09f248..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ec801d2e2a48d10f7b6873e4c3faea67@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eca349bc4f1d752cbae122fa68e161fa@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eca349bc4f1d752cbae122fa68e161fa@2x.png deleted file mode 100644 index 4465ad9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eca349bc4f1d752cbae122fa68e161fa@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eca349bc4f1d752cbae122fa68e161fa@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eca349bc4f1d752cbae122fa68e161fa@3x.png deleted file mode 100644 index accb7bc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eca349bc4f1d752cbae122fa68e161fa@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eca349bc4f1d752cbae122fa68e161fa@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eca349bc4f1d752cbae122fa68e161fa@dark@2x.png deleted file mode 100644 index f0821f0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eca349bc4f1d752cbae122fa68e161fa@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eca349bc4f1d752cbae122fa68e161fa@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eca349bc4f1d752cbae122fa68e161fa@dark@3x.png deleted file mode 100644 index 430a084..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eca349bc4f1d752cbae122fa68e161fa@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ecf53753b733c1038a61b69bad304e4f@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ecf53753b733c1038a61b69bad304e4f@2x.png deleted file mode 100644 index 99567a7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ecf53753b733c1038a61b69bad304e4f@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ecf53753b733c1038a61b69bad304e4f@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ecf53753b733c1038a61b69bad304e4f@3x.png deleted file mode 100644 index 0afc7ba..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ecf53753b733c1038a61b69bad304e4f@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ed09c458b07211ddd044c9c8915ff9e1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ed09c458b07211ddd044c9c8915ff9e1@2x.png deleted file mode 100644 index a56630c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ed09c458b07211ddd044c9c8915ff9e1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ed09c458b07211ddd044c9c8915ff9e1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ed09c458b07211ddd044c9c8915ff9e1@3x.png deleted file mode 100644 index 30935da..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ed09c458b07211ddd044c9c8915ff9e1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ed09c458b07211ddd044c9c8915ff9e1@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ed09c458b07211ddd044c9c8915ff9e1@dark@2x.png deleted file mode 100644 index 6fc3a6c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ed09c458b07211ddd044c9c8915ff9e1@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ed09c458b07211ddd044c9c8915ff9e1@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ed09c458b07211ddd044c9c8915ff9e1@dark@3x.png deleted file mode 100644 index a8f30e8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ed09c458b07211ddd044c9c8915ff9e1@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/edac95d141ded19dd323b28135cd242d@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/edac95d141ded19dd323b28135cd242d@2x.png deleted file mode 100644 index 083e594..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/edac95d141ded19dd323b28135cd242d@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/edac95d141ded19dd323b28135cd242d@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/edac95d141ded19dd323b28135cd242d@3x.png deleted file mode 100644 index 1c57cdc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/edac95d141ded19dd323b28135cd242d@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/edac95d141ded19dd323b28135cd242d@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/edac95d141ded19dd323b28135cd242d@dark@2x.png deleted file mode 100644 index 711e653..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/edac95d141ded19dd323b28135cd242d@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/edac95d141ded19dd323b28135cd242d@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/edac95d141ded19dd323b28135cd242d@dark@3x.png deleted file mode 100644 index 24df343..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/edac95d141ded19dd323b28135cd242d@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/edee6c288be358cf8661227862692be1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/edee6c288be358cf8661227862692be1@2x.png deleted file mode 100644 index 2070047..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/edee6c288be358cf8661227862692be1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/edee6c288be358cf8661227862692be1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/edee6c288be358cf8661227862692be1@3x.png deleted file mode 100644 index f938a2c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/edee6c288be358cf8661227862692be1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ee8b428c744d3668f2aab007e7cfbbd5@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ee8b428c744d3668f2aab007e7cfbbd5@2x.png deleted file mode 100644 index b1f01b4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ee8b428c744d3668f2aab007e7cfbbd5@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ee8b428c744d3668f2aab007e7cfbbd5@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ee8b428c744d3668f2aab007e7cfbbd5@3x.png deleted file mode 100644 index 08a9b18..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ee8b428c744d3668f2aab007e7cfbbd5@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eeb8a4179e7e1b7c0ccdf15e4e718f8f@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eeb8a4179e7e1b7c0ccdf15e4e718f8f@2x.webp deleted file mode 100644 index 3f8ac20..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eeb8a4179e7e1b7c0ccdf15e4e718f8f@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eeb8a4179e7e1b7c0ccdf15e4e718f8f@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eeb8a4179e7e1b7c0ccdf15e4e718f8f@3x.webp deleted file mode 100644 index 96220cb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eeb8a4179e7e1b7c0ccdf15e4e718f8f@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eedd58e1fef6f894fe46e9acf5754812@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eedd58e1fef6f894fe46e9acf5754812@2x.webp deleted file mode 100644 index 3e89f48..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eedd58e1fef6f894fe46e9acf5754812@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eedd58e1fef6f894fe46e9acf5754812@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eedd58e1fef6f894fe46e9acf5754812@3x.webp deleted file mode 100644 index 8af7e3c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eedd58e1fef6f894fe46e9acf5754812@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ef4071460347910f74f19bf70b837d52@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ef4071460347910f74f19bf70b837d52@2x.webp deleted file mode 100644 index 5a19b15..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ef4071460347910f74f19bf70b837d52@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ef4071460347910f74f19bf70b837d52@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ef4071460347910f74f19bf70b837d52@3x.webp deleted file mode 100644 index 787f7ff..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ef4071460347910f74f19bf70b837d52@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ef944883e9b173d7831f74622aa9bcca@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ef944883e9b173d7831f74622aa9bcca@2x.png deleted file mode 100644 index ceeda3d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ef944883e9b173d7831f74622aa9bcca@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ef944883e9b173d7831f74622aa9bcca@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ef944883e9b173d7831f74622aa9bcca@3x.png deleted file mode 100644 index 02d79d9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ef944883e9b173d7831f74622aa9bcca@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/efd8a8684ac69153a6b08bd7d370d4c4@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/efd8a8684ac69153a6b08bd7d370d4c4@2x.webp deleted file mode 100644 index f6f8508..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/efd8a8684ac69153a6b08bd7d370d4c4@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/efd8a8684ac69153a6b08bd7d370d4c4@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/efd8a8684ac69153a6b08bd7d370d4c4@3x.webp deleted file mode 100644 index ab55ad7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/efd8a8684ac69153a6b08bd7d370d4c4@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eff82b28ba1cabe1dc7c79df840ec60e@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eff82b28ba1cabe1dc7c79df840ec60e@2x.webp deleted file mode 100644 index 4ca1630..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eff82b28ba1cabe1dc7c79df840ec60e@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eff82b28ba1cabe1dc7c79df840ec60e@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eff82b28ba1cabe1dc7c79df840ec60e@3x.webp deleted file mode 100644 index 51b2960..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eff82b28ba1cabe1dc7c79df840ec60e@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eff82b28ba1cabe1dc7c79df840ec60e@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eff82b28ba1cabe1dc7c79df840ec60e@dark@2x.webp deleted file mode 100644 index 2835c99..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eff82b28ba1cabe1dc7c79df840ec60e@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eff82b28ba1cabe1dc7c79df840ec60e@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eff82b28ba1cabe1dc7c79df840ec60e@dark@3x.webp deleted file mode 100644 index 73d2d07..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/eff82b28ba1cabe1dc7c79df840ec60e@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/event_forbid_go_straight_hl.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/event_forbid_go_straight_hl.png deleted file mode 100644 index 9946b70..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/event_forbid_go_straight_hl.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/event_forbid_turn_hard_left_hl.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/event_forbid_turn_hard_left_hl.png deleted file mode 100644 index 8b3a8eb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/event_forbid_turn_hard_left_hl.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/event_forbid_turn_hard_right_hl.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/event_forbid_turn_hard_right_hl.png deleted file mode 100644 index 7a60fc7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/event_forbid_turn_hard_right_hl.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/event_forbid_turn_left_hl.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/event_forbid_turn_left_hl.png deleted file mode 100644 index fe767e4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/event_forbid_turn_left_hl.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/event_forbid_turn_right_hl.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/event_forbid_turn_right_hl.png deleted file mode 100644 index 435f1f1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/event_forbid_turn_right_hl.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f0545aa9335264b60bc836de3c88279f@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f0545aa9335264b60bc836de3c88279f@2x.png deleted file mode 100644 index 2d9ec70..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f0545aa9335264b60bc836de3c88279f@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f0545aa9335264b60bc836de3c88279f@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f0545aa9335264b60bc836de3c88279f@3x.png deleted file mode 100644 index 544d9d3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f0545aa9335264b60bc836de3c88279f@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f0545aa9335264b60bc836de3c88279f@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f0545aa9335264b60bc836de3c88279f@dark@2x.png deleted file mode 100644 index 74e92d1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f0545aa9335264b60bc836de3c88279f@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f0545aa9335264b60bc836de3c88279f@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f0545aa9335264b60bc836de3c88279f@dark@3x.png deleted file mode 100644 index ba2a6c5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f0545aa9335264b60bc836de3c88279f@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f081231675f6e9dba767b995e2f0a403@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f081231675f6e9dba767b995e2f0a403@2x.webp deleted file mode 100644 index 755e469..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f081231675f6e9dba767b995e2f0a403@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f081231675f6e9dba767b995e2f0a403@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f081231675f6e9dba767b995e2f0a403@3x.webp deleted file mode 100644 index 82daa2b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f081231675f6e9dba767b995e2f0a403@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f1af5a82a602733cdff3a245d68a17d8@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f1af5a82a602733cdff3a245d68a17d8@2x.png deleted file mode 100644 index 3686bd6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f1af5a82a602733cdff3a245d68a17d8@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f1af5a82a602733cdff3a245d68a17d8@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f1af5a82a602733cdff3a245d68a17d8@3x.png deleted file mode 100644 index 0f28c61..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f1af5a82a602733cdff3a245d68a17d8@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f1af5a82a602733cdff3a245d68a17d8@dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f1af5a82a602733cdff3a245d68a17d8@dark@2x.png deleted file mode 100644 index 950b581..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f1af5a82a602733cdff3a245d68a17d8@dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f1af5a82a602733cdff3a245d68a17d8@dark@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f1af5a82a602733cdff3a245d68a17d8@dark@3x.png deleted file mode 100644 index 8e5655c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f1af5a82a602733cdff3a245d68a17d8@dark@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f1f4b6bf82a73a8650f8f7580bd2fea7@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f1f4b6bf82a73a8650f8f7580bd2fea7@2x.webp deleted file mode 100644 index b4c0e6b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f1f4b6bf82a73a8650f8f7580bd2fea7@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f1f4b6bf82a73a8650f8f7580bd2fea7@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f1f4b6bf82a73a8650f8f7580bd2fea7@3x.webp deleted file mode 100644 index dfdb8f8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f1f4b6bf82a73a8650f8f7580bd2fea7@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f2353e96d162e91644f063d8fb3ee043@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f2353e96d162e91644f063d8fb3ee043@2x.webp deleted file mode 100644 index 4bb3973..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f2353e96d162e91644f063d8fb3ee043@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f2353e96d162e91644f063d8fb3ee043@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f2353e96d162e91644f063d8fb3ee043@3x.webp deleted file mode 100644 index d19598b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f2353e96d162e91644f063d8fb3ee043@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f2a5460c6b5c110b328aeacd9770d696@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f2a5460c6b5c110b328aeacd9770d696@2x.webp deleted file mode 100644 index 3f7e031..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f2a5460c6b5c110b328aeacd9770d696@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f2a5460c6b5c110b328aeacd9770d696@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f2a5460c6b5c110b328aeacd9770d696@3x.webp deleted file mode 100644 index d0a56a3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f2a5460c6b5c110b328aeacd9770d696@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f4765c8edb61a59726000b57906cd7d8@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f4765c8edb61a59726000b57906cd7d8@2x.png deleted file mode 100644 index e77a41e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f4765c8edb61a59726000b57906cd7d8@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f4765c8edb61a59726000b57906cd7d8@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f4765c8edb61a59726000b57906cd7d8@3x.png deleted file mode 100644 index d4452a2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f4765c8edb61a59726000b57906cd7d8@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f4791cfe9a8c3609666cc79f2f5f808a@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f4791cfe9a8c3609666cc79f2f5f808a@2x.webp deleted file mode 100644 index e029d68..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f4791cfe9a8c3609666cc79f2f5f808a@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f4791cfe9a8c3609666cc79f2f5f808a@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f4791cfe9a8c3609666cc79f2f5f808a@3x.webp deleted file mode 100644 index f1f5bf7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f4791cfe9a8c3609666cc79f2f5f808a@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f4791cfe9a8c3609666cc79f2f5f808a@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f4791cfe9a8c3609666cc79f2f5f808a@dark@2x.webp deleted file mode 100644 index cd43595..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f4791cfe9a8c3609666cc79f2f5f808a@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f4791cfe9a8c3609666cc79f2f5f808a@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f4791cfe9a8c3609666cc79f2f5f808a@dark@3x.webp deleted file mode 100644 index 2d0b83d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f4791cfe9a8c3609666cc79f2f5f808a@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f554a15f1517c0657c97df2fea9dd93e@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f554a15f1517c0657c97df2fea9dd93e@2x.webp deleted file mode 100644 index 55364a3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f554a15f1517c0657c97df2fea9dd93e@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f554a15f1517c0657c97df2fea9dd93e@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f554a15f1517c0657c97df2fea9dd93e@3x.webp deleted file mode 100644 index 6c6b748..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f554a15f1517c0657c97df2fea9dd93e@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f6c3ae511ee11ca3b0f9d0acb91a0e33@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f6c3ae511ee11ca3b0f9d0acb91a0e33@2x.webp deleted file mode 100644 index be5cc68..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f6c3ae511ee11ca3b0f9d0acb91a0e33@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f6c3ae511ee11ca3b0f9d0acb91a0e33@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f6c3ae511ee11ca3b0f9d0acb91a0e33@3x.webp deleted file mode 100644 index efd181f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f6c3ae511ee11ca3b0f9d0acb91a0e33@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f6e3783a691cd4623901a7866fe3066e@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f6e3783a691cd4623901a7866fe3066e@2x.webp deleted file mode 100644 index 5822f3e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f6e3783a691cd4623901a7866fe3066e@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f6e3783a691cd4623901a7866fe3066e@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f6e3783a691cd4623901a7866fe3066e@3x.webp deleted file mode 100644 index 6679a6e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f6e3783a691cd4623901a7866fe3066e@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f6e3783a691cd4623901a7866fe3066e@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f6e3783a691cd4623901a7866fe3066e@dark@2x.webp deleted file mode 100644 index d278900..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f6e3783a691cd4623901a7866fe3066e@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f6e3783a691cd4623901a7866fe3066e@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f6e3783a691cd4623901a7866fe3066e@dark@3x.webp deleted file mode 100644 index 8e500d0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f6e3783a691cd4623901a7866fe3066e@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f74342f719057bf95d328801fe0b4511@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f74342f719057bf95d328801fe0b4511@2x.webp deleted file mode 100644 index 7014873..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f74342f719057bf95d328801fe0b4511@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f74342f719057bf95d328801fe0b4511@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f74342f719057bf95d328801fe0b4511@3x.webp deleted file mode 100644 index 5e1fa88..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f74342f719057bf95d328801fe0b4511@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f79a95756358c82883ca62fa4d9df39e@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f79a95756358c82883ca62fa4d9df39e@2x.webp deleted file mode 100644 index 97967ab..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f79a95756358c82883ca62fa4d9df39e@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f79a95756358c82883ca62fa4d9df39e@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f79a95756358c82883ca62fa4d9df39e@3x.webp deleted file mode 100644 index fef8279..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f79a95756358c82883ca62fa4d9df39e@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f83f718998772469ad96f640e43266e6@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f83f718998772469ad96f640e43266e6@2x.webp deleted file mode 100644 index 3e7d59b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f83f718998772469ad96f640e43266e6@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f83f718998772469ad96f640e43266e6@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f83f718998772469ad96f640e43266e6@3x.webp deleted file mode 100644 index 3f1df33..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f83f718998772469ad96f640e43266e6@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f88e9bffd942a2e78f4fa99f172e95d8@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f88e9bffd942a2e78f4fa99f172e95d8@2x.webp deleted file mode 100644 index 10e57ed..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f88e9bffd942a2e78f4fa99f172e95d8@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f88e9bffd942a2e78f4fa99f172e95d8@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f88e9bffd942a2e78f4fa99f172e95d8@3x.webp deleted file mode 100644 index b635fb7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f88e9bffd942a2e78f4fa99f172e95d8@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f88e9bffd942a2e78f4fa99f172e95d8@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f88e9bffd942a2e78f4fa99f172e95d8@dark@2x.webp deleted file mode 100644 index 8c22404..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f88e9bffd942a2e78f4fa99f172e95d8@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f88e9bffd942a2e78f4fa99f172e95d8@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f88e9bffd942a2e78f4fa99f172e95d8@dark@3x.webp deleted file mode 100644 index e54e200..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f88e9bffd942a2e78f4fa99f172e95d8@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f8fdae00ef5d9ec736ec42d980e7162f.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f8fdae00ef5d9ec736ec42d980e7162f.png deleted file mode 100644 index 8de3763..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f8fdae00ef5d9ec736ec42d980e7162f.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f958a72a15fb1332a5cf23d9e19ccf9f@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f958a72a15fb1332a5cf23d9e19ccf9f@2x.png deleted file mode 100644 index f0821f0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f958a72a15fb1332a5cf23d9e19ccf9f@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f958a72a15fb1332a5cf23d9e19ccf9f@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f958a72a15fb1332a5cf23d9e19ccf9f@3x.png deleted file mode 100644 index 430a084..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f958a72a15fb1332a5cf23d9e19ccf9f@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f9d5402302b53114bb01ffab8140b6ea@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f9d5402302b53114bb01ffab8140b6ea@2x.webp deleted file mode 100644 index c88a987..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f9d5402302b53114bb01ffab8140b6ea@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f9d5402302b53114bb01ffab8140b6ea@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f9d5402302b53114bb01ffab8140b6ea@3x.webp deleted file mode 100644 index 1b20122..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f9d5402302b53114bb01ffab8140b6ea@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f9d5402302b53114bb01ffab8140b6ea@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f9d5402302b53114bb01ffab8140b6ea@dark@2x.webp deleted file mode 100644 index 813684c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f9d5402302b53114bb01ffab8140b6ea@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f9d5402302b53114bb01ffab8140b6ea@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f9d5402302b53114bb01ffab8140b6ea@dark@3x.webp deleted file mode 100644 index efde7dc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/f9d5402302b53114bb01ffab8140b6ea@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fa88b5faec06c1ead43ed4a2ee0431d3@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fa88b5faec06c1ead43ed4a2ee0431d3@2x.png deleted file mode 100644 index 884b486..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fa88b5faec06c1ead43ed4a2ee0431d3@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fa88b5faec06c1ead43ed4a2ee0431d3@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fa88b5faec06c1ead43ed4a2ee0431d3@3x.png deleted file mode 100644 index 0562430..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fa88b5faec06c1ead43ed4a2ee0431d3@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fb00fb4135e4a11c5aa5822c0ec61b94@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fb00fb4135e4a11c5aa5822c0ec61b94@2x.webp deleted file mode 100644 index 8283201..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fb00fb4135e4a11c5aa5822c0ec61b94@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fb00fb4135e4a11c5aa5822c0ec61b94@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fb00fb4135e4a11c5aa5822c0ec61b94@3x.webp deleted file mode 100644 index c253c60..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fb00fb4135e4a11c5aa5822c0ec61b94@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc0c959d46cbfea88c77a4addce9614c@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc0c959d46cbfea88c77a4addce9614c@2x.webp deleted file mode 100644 index f0b80a2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc0c959d46cbfea88c77a4addce9614c@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc0c959d46cbfea88c77a4addce9614c@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc0c959d46cbfea88c77a4addce9614c@3x.webp deleted file mode 100644 index e17a419..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc0c959d46cbfea88c77a4addce9614c@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc0c959d46cbfea88c77a4addce9614c@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc0c959d46cbfea88c77a4addce9614c@dark@2x.webp deleted file mode 100644 index 16f61e5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc0c959d46cbfea88c77a4addce9614c@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc0c959d46cbfea88c77a4addce9614c@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc0c959d46cbfea88c77a4addce9614c@dark@3x.webp deleted file mode 100644 index e752858..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc0c959d46cbfea88c77a4addce9614c@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc1fbc4e3a71497936e481ab7707e761@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc1fbc4e3a71497936e481ab7707e761@2x.webp deleted file mode 100644 index 1eaee26..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc1fbc4e3a71497936e481ab7707e761@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc1fbc4e3a71497936e481ab7707e761@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc1fbc4e3a71497936e481ab7707e761@3x.webp deleted file mode 100644 index 32e03ea..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc1fbc4e3a71497936e481ab7707e761@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc35253f63051ac991997641468f81f3@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc35253f63051ac991997641468f81f3@2x.webp deleted file mode 100644 index 4b39f3e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc35253f63051ac991997641468f81f3@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc35253f63051ac991997641468f81f3@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc35253f63051ac991997641468f81f3@3x.webp deleted file mode 100644 index 072c838..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc35253f63051ac991997641468f81f3@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc43cf389dd4a30d19d65a309d9bbb04@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc43cf389dd4a30d19d65a309d9bbb04@2x.webp deleted file mode 100644 index b85143b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc43cf389dd4a30d19d65a309d9bbb04@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc43cf389dd4a30d19d65a309d9bbb04@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc43cf389dd4a30d19d65a309d9bbb04@3x.webp deleted file mode 100644 index c3e9146..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fc43cf389dd4a30d19d65a309d9bbb04@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fce3c465eb202169d1530fe8ea5d14ed@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fce3c465eb202169d1530fe8ea5d14ed@2x.webp deleted file mode 100644 index 655b08a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fce3c465eb202169d1530fe8ea5d14ed@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fce3c465eb202169d1530fe8ea5d14ed@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fce3c465eb202169d1530fe8ea5d14ed@3x.webp deleted file mode 100644 index b38ede9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fce3c465eb202169d1530fe8ea5d14ed@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fd1583cb811034be896e7841c6c8bcc3@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fd1583cb811034be896e7841c6c8bcc3@2x.png deleted file mode 100644 index d306078..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fd1583cb811034be896e7841c6c8bcc3@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fd1583cb811034be896e7841c6c8bcc3@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fd1583cb811034be896e7841c6c8bcc3@3x.png deleted file mode 100644 index aa3a1ab..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fd1583cb811034be896e7841c6c8bcc3@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fd89d70b71eaebbf2ff264e2ebf14004@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fd89d70b71eaebbf2ff264e2ebf14004@2x.webp deleted file mode 100644 index 2af6729..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fd89d70b71eaebbf2ff264e2ebf14004@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fd89d70b71eaebbf2ff264e2ebf14004@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fd89d70b71eaebbf2ff264e2ebf14004@3x.webp deleted file mode 100644 index 78c8cdf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fd89d70b71eaebbf2ff264e2ebf14004@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fe751fbb24ef429394641e36ab8eb4f2@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fe751fbb24ef429394641e36ab8eb4f2@2x.webp deleted file mode 100644 index c07a764..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fe751fbb24ef429394641e36ab8eb4f2@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fe751fbb24ef429394641e36ab8eb4f2@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fe751fbb24ef429394641e36ab8eb4f2@3x.webp deleted file mode 100644 index 2c0c2d6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fe751fbb24ef429394641e36ab8eb4f2@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fedf6ffcb69e3f2c33f8883d9c0d0126@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fedf6ffcb69e3f2c33f8883d9c0d0126@2x.webp deleted file mode 100644 index f23f429..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fedf6ffcb69e3f2c33f8883d9c0d0126@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fedf6ffcb69e3f2c33f8883d9c0d0126@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fedf6ffcb69e3f2c33f8883d9c0d0126@3x.webp deleted file mode 100644 index bd35fb6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/fedf6ffcb69e3f2c33f8883d9c0d0126@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ff03a62bd71b83d9041b1251ba8ba24f@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ff03a62bd71b83d9041b1251ba8ba24f@2x.webp deleted file mode 100644 index bc5f752..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ff03a62bd71b83d9041b1251ba8ba24f@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ff03a62bd71b83d9041b1251ba8ba24f@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ff03a62bd71b83d9041b1251ba8ba24f@3x.webp deleted file mode 100644 index b9151cc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ff03a62bd71b83d9041b1251ba8ba24f@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ff4f7eb6f7354f25a36c90942277e0f4@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ff4f7eb6f7354f25a36c90942277e0f4@2x.webp deleted file mode 100644 index 2311cb2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ff4f7eb6f7354f25a36c90942277e0f4@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ff4f7eb6f7354f25a36c90942277e0f4@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ff4f7eb6f7354f25a36c90942277e0f4@3x.webp deleted file mode 100644 index b9cfe98..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ff4f7eb6f7354f25a36c90942277e0f4@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ff4f7eb6f7354f25a36c90942277e0f4@dark@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ff4f7eb6f7354f25a36c90942277e0f4@dark@2x.webp deleted file mode 100644 index b85143b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ff4f7eb6f7354f25a36c90942277e0f4@dark@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ff4f7eb6f7354f25a36c90942277e0f4@dark@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ff4f7eb6f7354f25a36c90942277e0f4@dark@3x.webp deleted file mode 100644 index c3e9146..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ff4f7eb6f7354f25a36c90942277e0f4@dark@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/green_point@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/green_point@2x.png deleted file mode 100644 index 05eca34..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/green_point@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/green_point@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/green_point@3x.png deleted file mode 100644 index 55492b5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/green_point@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/guide_board_bubble_day_left_bottom.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/guide_board_bubble_day_left_bottom.png deleted file mode 100644 index 70012ba..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/guide_board_bubble_day_left_bottom.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/guide_board_bubble_day_left_top.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/guide_board_bubble_day_left_top.png deleted file mode 100644 index b8f3228..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/guide_board_bubble_day_left_top.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/guide_board_bubble_day_right_bottom.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/guide_board_bubble_day_right_bottom.png deleted file mode 100644 index 49b5063..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/guide_board_bubble_day_right_bottom.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/guide_board_bubble_day_right_top.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/guide_board_bubble_day_right_top.png deleted file mode 100644 index fa39384..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/guide_board_bubble_day_right_top.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/guide_board_bubble_night_left_bottom.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/guide_board_bubble_night_left_bottom.png deleted file mode 100644 index 503fce0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/guide_board_bubble_night_left_bottom.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/guide_board_bubble_night_left_top.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/guide_board_bubble_night_left_top.png deleted file mode 100644 index ae2370c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/guide_board_bubble_night_left_top.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/guide_board_bubble_night_right_bottom.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/guide_board_bubble_night_right_bottom.png deleted file mode 100644 index 3a2fe4a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/guide_board_bubble_night_right_bottom.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/guide_board_bubble_night_right_top.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/guide_board_bubble_night_right_top.png deleted file mode 100644 index 49c11d8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/guide_board_bubble_night_right_top.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_lane_way_line_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_lane_way_line_normal@2x.png deleted file mode 100644 index 51a8131..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_lane_way_line_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_lane_way_line_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_lane_way_line_normal@3x.png deleted file mode 100644 index 58ae9d6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_lane_way_line_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_over_speed_anim_bg.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_over_speed_anim_bg.png deleted file mode 100644 index c749200..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_over_speed_anim_bg.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_kilometre_day@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_kilometre_day@2x.png deleted file mode 100644 index c05c567..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_kilometre_day@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_kilometre_day@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_kilometre_day@3x.png deleted file mode 100644 index d35099f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_kilometre_day@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_kilometre_night@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_kilometre_night@2x.png deleted file mode 100644 index 332e13e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_kilometre_night@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_kilometre_night@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_kilometre_night@3x.png deleted file mode 100644 index e62d57c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_kilometre_night@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_logo_day@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_logo_day@2x.png deleted file mode 100644 index d1b11a1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_logo_day@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_logo_night@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_logo_night@2x.png deleted file mode 100644 index 91a5eb0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_logo_night@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_meter_day@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_meter_day@2x.png deleted file mode 100644 index e00a1c4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_meter_day@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_meter_day@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_meter_day@3x.png deleted file mode 100644 index 1ba5cad..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_meter_day@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_meter_night@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_meter_night@2x.png deleted file mode 100644 index 863cfb2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_meter_night@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_meter_night@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_meter_night@3x.png deleted file mode 100644 index 1d1540f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_meter_night@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_number_day@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_number_day@2x.png deleted file mode 100644 index ff177ff..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_number_day@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_number_day@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_number_day@3x.png deleted file mode 100644 index 009804c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_number_day@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_number_night@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_number_night@2x.png deleted file mode 100644 index 3419736..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_number_night@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_number_night@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_number_night@3x.png deleted file mode 100644 index 1c74b6d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_scaleline_number_night@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_decimal_point@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_decimal_point@2x.png deleted file mode 100644 index 9662c44..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_decimal_point@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_decimal_point@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_decimal_point@3x.png deleted file mode 100644 index da63544..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_decimal_point@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_km_h@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_km_h@2x.png deleted file mode 100644 index f5f9d6b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_km_h@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_km_h@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_km_h@3x.png deleted file mode 100644 index 0fc9d88..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_km_h@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_number@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_number@2x.png deleted file mode 100644 index 57375a7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_number@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_number@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_number@3x.png deleted file mode 100644 index 68ffcfa..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_number@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_remaining_meter_distance@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_remaining_meter_distance@2x.png deleted file mode 100644 index a6713ab..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_remaining_meter_distance@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_remaining_meter_distance@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_remaining_meter_distance@3x.png deleted file mode 100644 index ec967b7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_remaining_meter_distance@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_remaining_milemeter_distance@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_remaining_milemeter_distance@2x.png deleted file mode 100644 index 71eb321..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_remaining_milemeter_distance@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_remaining_milemeter_distance@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_remaining_milemeter_distance@3x.png deleted file mode 100644 index 24e54ec..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_remaining_milemeter_distance@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_segment@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_segment@2x.png deleted file mode 100644 index 3a563a7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_segment@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_segment@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_segment@3x.png deleted file mode 100644 index 282ac7c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/ic_navi_speed_segment@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/interval_camera_day_left_bottom.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/interval_camera_day_left_bottom.png deleted file mode 100644 index 0caec12..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/interval_camera_day_left_bottom.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/interval_camera_day_left_top.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/interval_camera_day_left_top.png deleted file mode 100644 index 7690316..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/interval_camera_day_left_top.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/interval_camera_day_right_bottom.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/interval_camera_day_right_bottom.png deleted file mode 100644 index 7f0b40e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/interval_camera_day_right_bottom.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/interval_camera_day_right_top.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/interval_camera_day_right_top.png deleted file mode 100644 index 568928f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/interval_camera_day_right_top.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/interval_camera_night_left_bottom.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/interval_camera_night_left_bottom.png deleted file mode 100644 index 306db6e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/interval_camera_night_left_bottom.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/interval_camera_night_left_top.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/interval_camera_night_left_top.png deleted file mode 100644 index 263e908..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/interval_camera_night_left_top.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/interval_camera_night_right_bottom.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/interval_camera_night_right_bottom.png deleted file mode 100644 index 81eab79..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/interval_camera_night_right_bottom.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/interval_camera_night_right_top.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/interval_camera_night_right_top.png deleted file mode 100644 index 5ce4cab..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/interval_camera_night_right_top.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_0@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_0@2x.png deleted file mode 100644 index 92aee83..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_0@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_0@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_0@3x.png deleted file mode 100644 index d2f4fef..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_0@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_1@2x.png deleted file mode 100644 index 4bce70e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_1@3x.png deleted file mode 100644 index 67f18ce..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_2@2x.png deleted file mode 100644 index e733e90..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_2@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_2@3x.png deleted file mode 100644 index 5c7d69e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_2@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_3@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_3@2x.png deleted file mode 100644 index 08bc752..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_3@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_3@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_3@3x.png deleted file mode 100644 index 5a1deef..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_3@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_4@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_4@2x.png deleted file mode 100644 index 454919b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_4@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_4@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_4@3x.png deleted file mode 100644 index 2e4eb9b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_4@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_5@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_5@2x.png deleted file mode 100644 index 3ab3007..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_5@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_5@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_5@3x.png deleted file mode 100644 index c7a7425..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_5@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_6@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_6@2x.png deleted file mode 100644 index 28948e4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_6@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_6@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_6@3x.png deleted file mode 100644 index 33890be..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_6@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_7@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_7@2x.png deleted file mode 100644 index 4f82e86..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_7@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_7@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_7@3x.png deleted file mode 100644 index b04d9cb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_7@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_8@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_8@2x.png deleted file mode 100644 index 4d500a7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_8@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_8@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_8@3x.png deleted file mode 100644 index eca2f8e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_8@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_9@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_9@2x.png deleted file mode 100644 index 6f694d6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_9@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_9@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_9@3x.png deleted file mode 100644 index c3066c9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_9@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_a@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_a@2x.png deleted file mode 100644 index 8b4bec7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_a@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_a@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_a@3x.png deleted file mode 100644 index 0bcbcab..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_a@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_b@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_b@2x.png deleted file mode 100644 index 22b12ab..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_b@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_b@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_b@3x.png deleted file mode 100644 index 5df6536..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_b@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_c@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_c@2x.png deleted file mode 100644 index eb0dd97..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_c@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_c@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_c@3x.png deleted file mode 100644 index c6ce806..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_c@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_d@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_d@2x.png deleted file mode 100644 index ddfc700..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_d@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_d@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_d@3x.png deleted file mode 100644 index 527714a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_d@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_e@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_e@2x.png deleted file mode 100644 index cd2eccf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_e@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_e@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_e@3x.png deleted file mode 100644 index a5fd786..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_e@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_f@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_f@2x.png deleted file mode 100644 index 919c627..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_f@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_f@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_f@3x.png deleted file mode 100644 index c358f2e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_f@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_g@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_g@2x.png deleted file mode 100644 index efe7600..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_g@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_g@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_g@3x.png deleted file mode 100644 index c68520f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_g@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_h@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_h@2x.png deleted file mode 100644 index 812cb0b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_h@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_h@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_h@3x.png deleted file mode 100644 index 3ee4354..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_h@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_i@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_i@2x.png deleted file mode 100644 index 3b02800..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_i@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_i@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_i@3x.png deleted file mode 100644 index 4181a09..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_i@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_j@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_j@2x.png deleted file mode 100644 index 1d1e450..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_j@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_j@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_j@3x.png deleted file mode 100644 index 36fd575..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_j@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_k@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_k@2x.png deleted file mode 100644 index 785672a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_k@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_k@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_k@3x.png deleted file mode 100644 index 1fa238e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_k@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_l@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_l@2x.png deleted file mode 100644 index f01928f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_l@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_l@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_l@3x.png deleted file mode 100644 index 45d3926..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landback_l@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_00@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_00@2x.png deleted file mode 100644 index d67a753..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_00@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_00@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_00@3x.png deleted file mode 100644 index c75d9b7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_00@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_11@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_11@2x.png deleted file mode 100644 index 6e85418..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_11@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_11@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_11@3x.png deleted file mode 100644 index 2e9f9b0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_11@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_20@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_20@2x.png deleted file mode 100644 index 7a2689d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_20@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_20@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_20@3x.png deleted file mode 100644 index b011d30..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_20@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_21@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_21@2x.png deleted file mode 100644 index d8fc8e0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_21@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_21@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_21@3x.png deleted file mode 100644 index 1d265a5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_21@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_22@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_22@2x.png deleted file mode 100644 index 95884de..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_22@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_22@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_22@3x.png deleted file mode 100644 index eae4ec3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_22@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_33@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_33@2x.png deleted file mode 100644 index 9199d01..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_33@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_33@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_33@3x.png deleted file mode 100644 index aafb4d2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_33@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_40@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_40@2x.png deleted file mode 100644 index d3353a8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_40@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_40@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_40@3x.png deleted file mode 100644 index 23ee0cf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_40@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_43@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_43@2x.png deleted file mode 100644 index a077130..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_43@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_43@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_43@3x.png deleted file mode 100644 index 7941ead..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_43@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_44@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_44@2x.png deleted file mode 100644 index 0c49aab..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_44@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_44@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_44@3x.png deleted file mode 100644 index 8d67aa0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_44@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_55@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_55@2x.png deleted file mode 100644 index 09c5b3c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_55@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_55@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_55@3x.png deleted file mode 100644 index d46ab45..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_55@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_61@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_61@2x.png deleted file mode 100644 index 62a7a6e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_61@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_61@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_61@3x.png deleted file mode 100644 index 2a33f41..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_61@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_63@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_63@2x.png deleted file mode 100644 index 1174b8f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_63@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_63@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_63@3x.png deleted file mode 100644 index 5ffb813..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_63@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_66@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_66@2x.png deleted file mode 100644 index 76e445e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_66@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_66@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_66@3x.png deleted file mode 100644 index 2bb3a39..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_66@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_70@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_70@2x.png deleted file mode 100644 index 7a08f6f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_70@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_70@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_70@3x.png deleted file mode 100644 index 9b5890f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_70@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_71@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_71@2x.png deleted file mode 100644 index 01adb62..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_71@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_71@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_71@3x.png deleted file mode 100644 index f701c35..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_71@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_73@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_73@2x.png deleted file mode 100644 index 9c355bf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_73@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_73@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_73@3x.png deleted file mode 100644 index d5a4e16..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_73@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_77@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_77@2x.png deleted file mode 100644 index 6d245a4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_77@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_77@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_77@3x.png deleted file mode 100644 index 77a795a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_77@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_88@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_88@2x.png deleted file mode 100644 index 735f20d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_88@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_88@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_88@3x.png deleted file mode 100644 index 6fdce1e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_88@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_90@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_90@2x.png deleted file mode 100644 index 3ae6495..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_90@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_90@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_90@3x.png deleted file mode 100644 index 811c220..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_90@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_95@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_95@2x.png deleted file mode 100644 index 589ad1e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_95@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_95@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_95@3x.png deleted file mode 100644 index cabc8f0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_95@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_99@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_99@2x.png deleted file mode 100644 index 46c9a06..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_99@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_99@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_99@3x.png deleted file mode 100644 index 808652b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_99@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_a0@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_a0@2x.png deleted file mode 100644 index c9c5375..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_a0@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_a0@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_a0@3x.png deleted file mode 100644 index d510b46..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_a0@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_a8@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_a8@2x.png deleted file mode 100644 index 3ddf9a3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_a8@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_a8@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_a8@3x.png deleted file mode 100644 index ef11443..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_a8@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_aa@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_aa@2x.png deleted file mode 100644 index 91f39ae..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_aa@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_aa@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_aa@3x.png deleted file mode 100644 index 84eb773..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_aa@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_b1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_b1@2x.png deleted file mode 100644 index 5ccaed1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_b1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_b1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_b1@3x.png deleted file mode 100644 index 0ec6a5f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_b1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_b5@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_b5@2x.png deleted file mode 100644 index 2fd471f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_b5@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_b5@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_b5@3x.png deleted file mode 100644 index 70ba5ae..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_b5@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_bb@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_bb@2x.png deleted file mode 100644 index f7eefd7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_bb@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_bb@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_bb@3x.png deleted file mode 100644 index a3e0bcb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_bb@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_c3@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_c3@2x.png deleted file mode 100644 index a7b3e71..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_c3@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_c3@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_c3@3x.png deleted file mode 100644 index 6e9d38a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_c3@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_c8@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_c8@2x.png deleted file mode 100644 index 9c2e92d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_c8@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_c8@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_c8@3x.png deleted file mode 100644 index ed1f0bb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_c8@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_cc@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_cc@2x.png deleted file mode 100644 index 9c8592b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_cc@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_cc@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_cc@3x.png deleted file mode 100644 index ae73495..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_cc@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_dd@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_dd@2x.png deleted file mode 100644 index bbc2343..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_dd@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_dd@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_dd@3x.png deleted file mode 100644 index e138be1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_dd@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_e1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_e1@2x.png deleted file mode 100644 index f228a8a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_e1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_e1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_e1@3x.png deleted file mode 100644 index fa81979..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_e1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_e5@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_e5@2x.png deleted file mode 100644 index ac032f6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_e5@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_e5@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_e5@3x.png deleted file mode 100644 index e6ca566..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_e5@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_ee@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_ee@2x.png deleted file mode 100644 index 46345ce..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_ee@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_ee@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_ee@3x.png deleted file mode 100644 index e3b1a11..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_ee@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_f0@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_f0@2x.png deleted file mode 100644 index 4fbaf91..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_f0@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_f0@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_f0@3x.png deleted file mode 100644 index f13b2bd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_f0@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_f1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_f1@2x.png deleted file mode 100644 index 03a8979..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_f1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_f1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_f1@3x.png deleted file mode 100644 index 6014896..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_f1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_f5@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_f5@2x.png deleted file mode 100644 index 078bf62..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_f5@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_f5@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_f5@3x.png deleted file mode 100644 index bc82b31..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_f5@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_ff@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_ff@2x.png deleted file mode 100644 index 4d34666..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_ff@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_ff@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_ff@3x.png deleted file mode 100644 index 05bae4f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_ff@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_g3@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_g3@2x.png deleted file mode 100644 index d0fa22b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_g3@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_g3@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_g3@3x.png deleted file mode 100644 index bcd20db..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_g3@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_g5@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_g5@2x.png deleted file mode 100644 index d631edb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_g5@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_g5@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_g5@3x.png deleted file mode 100644 index f9a6d61..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_g5@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_gg@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_gg@2x.png deleted file mode 100644 index d27e9ec..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_gg@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_gg@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_gg@3x.png deleted file mode 100644 index 15d4ad4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_gg@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_h1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_h1@2x.png deleted file mode 100644 index d98923a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_h1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_h1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_h1@3x.png deleted file mode 100644 index 5ebe6f5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_h1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_h3@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_h3@2x.png deleted file mode 100644 index c1b39fb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_h3@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_h3@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_h3@3x.png deleted file mode 100644 index fd8f7d8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_h3@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_h5@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_h5@2x.png deleted file mode 100644 index 60f316b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_h5@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_h5@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_h5@3x.png deleted file mode 100644 index ef62a0a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_h5@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_hh@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_hh@2x.png deleted file mode 100644 index f4b1440..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_hh@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_hh@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_hh@3x.png deleted file mode 100644 index 4ec7116..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_hh@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_i0@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_i0@2x.png deleted file mode 100644 index 72e3535..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_i0@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_i0@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_i0@3x.png deleted file mode 100644 index 78c7a22..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_i0@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_i3@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_i3@2x.png deleted file mode 100644 index a27d0a3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_i3@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_i3@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_i3@3x.png deleted file mode 100644 index 0574381..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_i3@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_i5@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_i5@2x.png deleted file mode 100644 index 42b472c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_i5@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_i5@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_i5@3x.png deleted file mode 100644 index ac25007..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_i5@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_ii@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_ii@2x.png deleted file mode 100644 index 3d373e8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_ii@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_ii@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_ii@3x.png deleted file mode 100644 index 17db359..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_ii@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_j1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_j1@2x.png deleted file mode 100644 index 7f679d8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_j1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_j1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_j1@3x.png deleted file mode 100644 index 8462a5c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_j1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_j8@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_j8@2x.png deleted file mode 100644 index 167425f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_j8@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_j8@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_j8@3x.png deleted file mode 100644 index b7cb2be..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_j8@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_jj@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_jj@2x.png deleted file mode 100644 index 1aae3e7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_jj@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_jj@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_jj@3x.png deleted file mode 100644 index 0dec76f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_jj@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_kk@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_kk@2x.png deleted file mode 100644 index d10823b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_kk@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_kk@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_kk@3x.png deleted file mode 100644 index e4632e7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_kk@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_ll@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_ll@2x.png deleted file mode 100644 index d569074..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_ll@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_ll@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_ll@3x.png deleted file mode 100644 index ed60ef8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/landfront_ll@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/line_in_cross.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/line_in_cross.png deleted file mode 100644 index 21b0eab..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/line_in_cross.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/map_commute.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/map_commute.png deleted file mode 100644 index 2c21261..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/map_commute.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/map_frontlr.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/map_frontlr.png deleted file mode 100644 index 4b06ff6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/map_frontlr.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/map_frontlr@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/map_frontlr@2x.png deleted file mode 100644 index 5378bbf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/map_frontlr@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/map_lr.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/map_lr.png deleted file mode 100644 index a0d4041..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/map_lr.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_day_left_bottom@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_day_left_bottom@2x.png deleted file mode 100644 index 55bdf43..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_day_left_bottom@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_day_left_bottom@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_day_left_bottom@3x.png deleted file mode 100644 index d94b62a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_day_left_bottom@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_day_left_top@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_day_left_top@2x.png deleted file mode 100644 index 4c81b30..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_day_left_top@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_day_left_top@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_day_left_top@3x.png deleted file mode 100644 index f4f49d7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_day_left_top@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_day_right_bottom@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_day_right_bottom@2x.png deleted file mode 100644 index 256b28f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_day_right_bottom@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_day_right_bottom@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_day_right_bottom@3x.png deleted file mode 100644 index 456f66c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_day_right_bottom@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_day_right_top@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_day_right_top@2x.png deleted file mode 100644 index 4c6cb7e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_day_right_top@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_day_right_top@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_day_right_top@3x.png deleted file mode 100644 index f26cb40..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_day_right_top@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_faster_night_left_bottom@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_faster_night_left_bottom@2x.png deleted file mode 100644 index 10be768..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_faster_night_left_bottom@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_faster_night_left_bottom@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_faster_night_left_bottom@3x.png deleted file mode 100644 index 847f5cc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_faster_night_left_bottom@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_faster_night_left_top@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_faster_night_left_top@2x.png deleted file mode 100644 index d1c3b57..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_faster_night_left_top@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_faster_night_left_top@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_faster_night_left_top@3x.png deleted file mode 100644 index e8551c7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_faster_night_left_top@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_faster_night_right_bottom@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_faster_night_right_bottom@2x.png deleted file mode 100644 index 197d887..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_faster_night_right_bottom@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_faster_night_right_bottom@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_faster_night_right_bottom@3x.png deleted file mode 100644 index 4e3e2d4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_faster_night_right_bottom@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_faster_night_right_top@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_faster_night_right_top@2x.png deleted file mode 100644 index 7e85f77..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_faster_night_right_top@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_faster_night_right_top@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_faster_night_right_top@3x.png deleted file mode 100644 index fbb00e0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_faster_night_right_top@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_slower_night_left_bottom@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_slower_night_left_bottom@2x.png deleted file mode 100644 index 2efa572..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_slower_night_left_bottom@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_slower_night_left_bottom@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_slower_night_left_bottom@3x.png deleted file mode 100644 index 1b167dd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_slower_night_left_bottom@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_slower_night_left_top@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_slower_night_left_top@2x.png deleted file mode 100644 index b2caf71..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_slower_night_left_top@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_slower_night_left_top@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_slower_night_left_top@3x.png deleted file mode 100644 index 6fa89a6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_slower_night_left_top@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_slower_night_right_bottom@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_slower_night_right_bottom@2x.png deleted file mode 100644 index 24cd541..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_slower_night_right_bottom@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_slower_night_right_bottom@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_slower_night_right_bottom@3x.png deleted file mode 100644 index 51c789b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_slower_night_right_bottom@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_slower_night_right_top@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_slower_night_right_top@2x.png deleted file mode 100644 index a8a8f1b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_slower_night_right_top@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_slower_night_right_top@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_slower_night_right_top@3x.png deleted file mode 100644 index f86c8d4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_bubble_slower_night_right_top@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_charge_faster_day_icon.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_charge_faster_day_icon.png deleted file mode 100644 index ed17633..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_charge_faster_day_icon.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_charge_faster_night_icon.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_charge_faster_night_icon.png deleted file mode 100644 index 2d076fd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_charge_faster_night_icon.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_charge_slower_day_icon.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_charge_slower_day_icon.png deleted file mode 100644 index a757789..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_charge_slower_day_icon.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_charge_slower_night_icon.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_charge_slower_night_icon.png deleted file mode 100644 index eff905a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_charge_slower_night_icon.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_faster_day_icon.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_faster_day_icon.png deleted file mode 100644 index ed17633..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_faster_day_icon.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_faster_day_icon@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_faster_day_icon@2x.png deleted file mode 100644 index c86d660..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_faster_day_icon@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_faster_day_icon@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_faster_day_icon@3x.png deleted file mode 100644 index e750df2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_faster_day_icon@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_faster_night_icon.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_faster_night_icon.png deleted file mode 100644 index 2d076fd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_faster_night_icon.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_faster_night_icon@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_faster_night_icon@2x.png deleted file mode 100644 index 4212aac..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_faster_night_icon@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_faster_night_icon@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_faster_night_icon@3x.png deleted file mode 100644 index 7c96efe..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_faster_night_icon@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_slower_day_icon.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_slower_day_icon.png deleted file mode 100644 index dfba4d2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_slower_day_icon.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_slower_day_icon@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_slower_day_icon@2x.png deleted file mode 100644 index 9e3e43d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_slower_day_icon@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_slower_day_icon@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_slower_day_icon@3x.png deleted file mode 100644 index 37989d6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_slower_day_icon@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_slower_night_icon.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_slower_night_icon.png deleted file mode 100644 index 3f554e4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_slower_night_icon.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_slower_night_icon@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_slower_night_icon@2x.png deleted file mode 100644 index e10665d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_slower_night_icon@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_slower_night_icon@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_slower_night_icon@3x.png deleted file mode 100644 index d578ced..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/multi_path_traffic_slower_night_icon@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/n_s@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/n_s@2x.png deleted file mode 100644 index 4be4f39..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/n_s@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/n_s@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/n_s@3x.png deleted file mode 100644 index f369716..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/n_s@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/navicenterlogom@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/navicenterlogom@2x.png deleted file mode 100644 index cb5fd0f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/navicenterlogom@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/navicenterlogom@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/navicenterlogom@2x.webp deleted file mode 100644 index 021da28..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/navicenterlogom@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/navicenterlogom@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/navicenterlogom@3x.png deleted file mode 100644 index 0c68a15..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/navicenterlogom@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/navicenterlogom@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/navicenterlogom@3x.webp deleted file mode 100644 index 151f8e5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/navicenterlogom@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/navicenterlogomgray@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/navicenterlogomgray@2x.webp deleted file mode 100644 index 83d4a25..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/navicenterlogomgray@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/navicenterlogomgray@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/navicenterlogomgray@3x.webp deleted file mode 100644 index 6a51f74..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/navicenterlogomgray@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/navicenterlogosmall@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/navicenterlogosmall@2x.webp deleted file mode 100644 index 5cfde66..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/navicenterlogosmall@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/navicenterlogosmall@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/navicenterlogosmall@3x.webp deleted file mode 100644 index 4315062..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/navicenterlogosmall@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/node_facility_trafficlight@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/node_facility_trafficlight@2x.png deleted file mode 100644 index 551b5d8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/node_facility_trafficlight@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/node_facility_trafficlight@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/node_facility_trafficlight@3x.png deleted file mode 100644 index d6ff0c0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/node_facility_trafficlight@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/node_facility_trafficlight_night@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/node_facility_trafficlight_night@2x.png deleted file mode 100644 index c3b4508..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/node_facility_trafficlight_night@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/node_facility_trafficlight_night@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/node_facility_trafficlight_night@3x.png deleted file mode 100644 index 33a394e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/node_facility_trafficlight_night@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/overlay_car_gray2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/overlay_car_gray2@2x.png deleted file mode 100644 index e82e85a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/overlay_car_gray2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/overlay_car_white2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/overlay_car_white2@2x.png deleted file mode 100644 index 374bbfa..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/overlay_car_white2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/overlay_point_end@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/overlay_point_end@2x.png deleted file mode 100644 index 10882d4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/overlay_point_end@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/overlay_point_end@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/overlay_point_end@3x.png deleted file mode 100644 index 1b316b3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/overlay_point_end@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/pin_end_flag@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/pin_end_flag@2x.webp deleted file mode 100644 index a25cf20..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/pin_end_flag@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/pin_end_flag@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/pin_end_flag@3x.webp deleted file mode 100644 index 7aa329b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/pin_end_flag@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/pin_end_minimap_car@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/pin_end_minimap_car@2x.webp deleted file mode 100644 index 5c85733..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/pin_end_minimap_car@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/pin_end_minimap_car@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/pin_end_minimap_car@3x.webp deleted file mode 100644 index 3373150..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/pin_end_minimap_car@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/pin_mid_wayof_minimap_car@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/pin_mid_wayof_minimap_car@2x.png deleted file mode 100644 index a6aa0b2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/pin_mid_wayof_minimap_car@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/pin_mid_wayof_minimap_car@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/pin_mid_wayof_minimap_car@3x.png deleted file mode 100644 index 9c04530..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/pin_mid_wayof_minimap_car@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/pin_start_minimap_car@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/pin_start_minimap_car@2x.webp deleted file mode 100644 index a3b22c5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/pin_start_minimap_car@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/pin_start_minimap_car@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/pin_start_minimap_car@3x.webp deleted file mode 100644 index 825f87c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/pin_start_minimap_car@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/rout_car_viacity.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/rout_car_viacity.png deleted file mode 100644 index b8d97b3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/rout_car_viacity.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_color_dash@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_color_dash@2x.webp deleted file mode 100644 index ddd421f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_color_dash@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_color_flash_blue.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_color_flash_blue.webp deleted file mode 100644 index b092f62..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_color_flash_blue.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_map_gray.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_map_gray.png deleted file mode 100644 index ff5475f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_map_gray.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_solid_fill.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_solid_fill.webp deleted file mode 100644 index a11be70..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_solid_fill.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_solid_stroke.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_solid_stroke.webp deleted file mode 100644 index 574f008..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_solid_stroke.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_arrow@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_arrow@2x.webp deleted file mode 100644 index 70e099f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_arrow@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_background@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_background@2x.webp deleted file mode 100644 index 0335582..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_background@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_background@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_background@3x.webp deleted file mode 100644 index 92cc475..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_background@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_background_night@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_background_night@2x.webp deleted file mode 100644 index 0e2dc6c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_background_night@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_background_night@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_background_night@3x.webp deleted file mode 100644 index 5cbebfd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_background_night@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_port_background@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_port_background@2x.webp deleted file mode 100644 index 0335582..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_port_background@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_port_background@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_port_background@3x.webp deleted file mode 100644 index 92cc475..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_port_background@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_port_background_night@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_port_background_night@2x.webp deleted file mode 100644 index b9a1615..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_port_background_night@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_port_background_night@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_port_background_night@3x.webp deleted file mode 100644 index 5cbebfd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_port_background_night@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_turnarrow.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_turnarrow.webp deleted file mode 100644 index 1a226a6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_turnarrow.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_turnarrowborder.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_turnarrowborder.webp deleted file mode 100644 index 4601776..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_turnarrowborder.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_turnarrowvector.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_turnarrowvector.webp deleted file mode 100644 index 751ff17..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_carcross_turnarrowvector.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_restrict.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_restrict.webp deleted file mode 100644 index daf6aac..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_restrict.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_restrict_checked.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_restrict_checked.webp deleted file mode 100644 index 34bf314..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/route_texture_restrict_checked.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/01d3b188dff8b420d538e7ba9c773280.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/01d3b188dff8b420d538e7ba9c773280.svg deleted file mode 100644 index c957b3c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/01d3b188dff8b420d538e7ba9c773280.svg +++ /dev/null @@ -1 +0,0 @@ -画板备份 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/03159daf61f2247d962aeff6afe1be8b.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/03159daf61f2247d962aeff6afe1be8b.svg deleted file mode 100644 index de6902d..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/03159daf61f2247d962aeff6afe1be8b.svg +++ /dev/null @@ -1 +0,0 @@ -Join_Route_Camera_Illegal_Parking_Night_Normal \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/0333bd51def24dc05f6632341b00a90a.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/0333bd51def24dc05f6632341b00a90a.svg deleted file mode 100644 index bad085a..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/0333bd51def24dc05f6632341b00a90a.svg +++ /dev/null @@ -1 +0,0 @@ -ETC-白天 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/0368d8cd82fc5a41d0fc6cdb7cb76f7b.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/0368d8cd82fc5a41d0fc6cdb7cb76f7b.svg deleted file mode 100644 index 9dece54..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/0368d8cd82fc5a41d0fc6cdb7cb76f7b.svg +++ /dev/null @@ -1 +0,0 @@ -公园 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/04303d8944d12948899b8b7dc20b1824.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/04303d8944d12948899b8b7dc20b1824.svg deleted file mode 100644 index eb97ab3..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/04303d8944d12948899b8b7dc20b1824.svg +++ /dev/null @@ -1 +0,0 @@ -Join_Route_Camera_wrong_side_night \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/089fc56a083770773f74dec31c4fc89e.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/089fc56a083770773f74dec31c4fc89e.svg deleted file mode 100644 index 3ec0850..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/089fc56a083770773f74dec31c4fc89e.svg +++ /dev/null @@ -1 +0,0 @@ -避让行人-白天 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/0a23c78e6ba034372ccbb1a2ed77ac31.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/0a23c78e6ba034372ccbb1a2ed77ac31.svg deleted file mode 100644 index 56db6e9..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/0a23c78e6ba034372ccbb1a2ed77ac31.svg +++ /dev/null @@ -1 +0,0 @@ -甜点 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/0a7f5e0dfe32217f29e7161152cec22b.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/0a7f5e0dfe32217f29e7161152cec22b.svg deleted file mode 100644 index dc46507..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/0a7f5e0dfe32217f29e7161152cec22b.svg +++ /dev/null @@ -1 +0,0 @@ -人文景点通用 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/0b09fef69da565d14370bcf4de692964.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/0b09fef69da565d14370bcf4de692964.svg deleted file mode 100644 index 7962e3d..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/0b09fef69da565d14370bcf4de692964.svg +++ /dev/null @@ -1 +0,0 @@ -Join_Route_Camera_Illegal_Parking_Normal \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/0e0300cda3f8f204b7133f7147c8f684.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/0e0300cda3f8f204b7133f7147c8f684.svg deleted file mode 100644 index 68c3349..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/0e0300cda3f8f204b7133f7147c8f684.svg +++ /dev/null @@ -1 +0,0 @@ -人文景点通用 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/0f1c67ea62395a8f0c158b241050f1c1.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/0f1c67ea62395a8f0c158b241050f1c1.svg deleted file mode 100644 index fc6e6b0..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/0f1c67ea62395a8f0c158b241050f1c1.svg +++ /dev/null @@ -1 +0,0 @@ -Join_Route_Camera_Road_Normal \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/12c1c91ec50b210e03c3a26078d534be.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/12c1c91ec50b210e03c3a26078d534be.svg deleted file mode 100644 index ce88aae..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/12c1c91ec50b210e03c3a26078d534be.svg +++ /dev/null @@ -1 +0,0 @@ -收费-推荐高亮态-night \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/19498dcbfe56697eb6e305552a67af89.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/19498dcbfe56697eb6e305552a67af89.svg deleted file mode 100644 index 875f491..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/19498dcbfe56697eb6e305552a67af89.svg +++ /dev/null @@ -1 +0,0 @@ -电影院 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/19cd3d4e95816d40e900bd4f6b6e1f3f.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/19cd3d4e95816d40e900bd4f6b6e1f3f.svg deleted file mode 100644 index ea4bdcf..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/19cd3d4e95816d40e900bd4f6b6e1f3f.svg +++ /dev/null @@ -1 +0,0 @@ -动物园 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/1ef5ad3f55865bd5f5cf5db90e1fcbf8.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/1ef5ad3f55865bd5f5cf5db90e1fcbf8.svg deleted file mode 100644 index 6ad5b65..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/1ef5ad3f55865bd5f5cf5db90e1fcbf8.svg +++ /dev/null @@ -1 +0,0 @@ -收费-普通态-night \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/1f665eb6f33ebc4a6293d79b43a8f069.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/1f665eb6f33ebc4a6293d79b43a8f069.svg deleted file mode 100644 index e06a456..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/1f665eb6f33ebc4a6293d79b43a8f069.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - Join_Route_Camera_distance - - - - - - - - - - - - - \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/202f87046e753b37de39e386160d1612.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/202f87046e753b37de39e386160d1612.svg deleted file mode 100644 index 723bb8e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/202f87046e753b37de39e386160d1612.svg +++ /dev/null @@ -1 +0,0 @@ -Join_Route_Camera_Green_Normal \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/2107ed2f6375d48ea8882ed55bead027.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/2107ed2f6375d48ea8882ed55bead027.svg deleted file mode 100644 index 49b49c2..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/2107ed2f6375d48ea8882ed55bead027.svg +++ /dev/null @@ -1 +0,0 @@ -icon \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/2107ed2f6375d48ea8882ed55bead027@dark.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/2107ed2f6375d48ea8882ed55bead027@dark.svg deleted file mode 100644 index 7288131..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/2107ed2f6375d48ea8882ed55bead027@dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/24671544ec0aa75bbe7f74364844fc0f.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/24671544ec0aa75bbe7f74364844fc0f.svg deleted file mode 100644 index ecf54ee..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/24671544ec0aa75bbe7f74364844fc0f.svg +++ /dev/null @@ -1 +0,0 @@ -寺庙道观 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/251ecc12bdbb953b00a80f23c648bb3f.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/251ecc12bdbb953b00a80f23c648bb3f.svg deleted file mode 100644 index 157d8cb..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/251ecc12bdbb953b00a80f23c648bb3f.svg +++ /dev/null @@ -1 +0,0 @@ -公交车道-白天 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/26450fc789d729d0a145a9ab7a651b21.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/26450fc789d729d0a145a9ab7a651b21.svg deleted file mode 100644 index 61fb984..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/26450fc789d729d0a145a9ab7a651b21.svg +++ /dev/null @@ -1 +0,0 @@ -椰子树 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/26c28cde1354f7a1fdf968244e33c755.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/26c28cde1354f7a1fdf968244e33c755.svg deleted file mode 100644 index 5326561..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/26c28cde1354f7a1fdf968244e33c755.svg +++ /dev/null @@ -1 +0,0 @@ -店铺通用 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/300feb2d68fdb3c0882312c4dfa12fa8.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/300feb2d68fdb3c0882312c4dfa12fa8.svg deleted file mode 100644 index 32dcc7e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/300feb2d68fdb3c0882312c4dfa12fa8.svg +++ /dev/null @@ -1 +0,0 @@ -通用 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/301a9a5d2794d7df14319e766b00829d.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/301a9a5d2794d7df14319e766b00829d.svg deleted file mode 100644 index 3288f62..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/301a9a5d2794d7df14319e766b00829d.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/304a2a69cf72ed87f3194ec9ba8a950e.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/304a2a69cf72ed87f3194ec9ba8a950e.svg deleted file mode 100644 index 991e06f..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/304a2a69cf72ed87f3194ec9ba8a950e.svg +++ /dev/null @@ -1 +0,0 @@ -图书馆 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3064a1f62d769b7edccaafb9013c1563.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3064a1f62d769b7edccaafb9013c1563.svg deleted file mode 100644 index 7c0831c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3064a1f62d769b7edccaafb9013c1563.svg +++ /dev/null @@ -1 +0,0 @@ -红绿灯-推荐高亮态-night \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3104763363b46095b9bee60c20ebb795.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3104763363b46095b9bee60c20ebb795.svg deleted file mode 100644 index 8b1943c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3104763363b46095b9bee60c20ebb795.svg +++ /dev/null @@ -1 +0,0 @@ -茶艺馆 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/31ff74d29c97c6229826f39e49462ecf.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/31ff74d29c97c6229826f39e49462ecf.svg deleted file mode 100644 index 0e5e3b2..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/31ff74d29c97c6229826f39e49462ecf.svg +++ /dev/null @@ -1 +0,0 @@ -Join_Route_Camera_empty \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/32a90ab433e19b0d47a3e58c5fae6565.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/32a90ab433e19b0d47a3e58c5fae6565.svg deleted file mode 100644 index 3c8c95d..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/32a90ab433e19b0d47a3e58c5fae6565.svg +++ /dev/null @@ -1 +0,0 @@ -观光车/摆渡车 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3344d1983f2641d88f151f1d6d7db192.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3344d1983f2641d88f151f1d6d7db192.svg deleted file mode 100644 index b6bfe0d..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3344d1983f2641d88f151f1d6d7db192.svg +++ /dev/null @@ -1 +0,0 @@ -游乐场 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/336c051d6af7d46b8907a5bf5c5384c9.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/336c051d6af7d46b8907a5bf5c5384c9.svg deleted file mode 100644 index b6362a9..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/336c051d6af7d46b8907a5bf5c5384c9.svg +++ /dev/null @@ -1 +0,0 @@ -红绿灯-普通态 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/336c051d6af7d46b8907a5bf5c5384c9@dark.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/336c051d6af7d46b8907a5bf5c5384c9@dark.svg deleted file mode 100644 index c45b807..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/336c051d6af7d46b8907a5bf5c5384c9@dark.svg +++ /dev/null @@ -1 +0,0 @@ -红绿灯-普通态-night \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/367e50987fdfb6239ae47c440b151009.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/367e50987fdfb6239ae47c440b151009.svg deleted file mode 100644 index bf1aca0..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/367e50987fdfb6239ae47c440b151009.svg +++ /dev/null @@ -1 +0,0 @@ -茶艺馆 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3968d8278363c5a3f811379d154186d5.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3968d8278363c5a3f811379d154186d5.svg deleted file mode 100644 index 2a8c975..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3968d8278363c5a3f811379d154186d5.svg +++ /dev/null @@ -1 +0,0 @@ -采摘园 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3ab4453db4fc99e41a1396639eb42668.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3ab4453db4fc99e41a1396639eb42668.svg deleted file mode 100644 index 2c5f1f8..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3ab4453db4fc99e41a1396639eb42668.svg +++ /dev/null @@ -1 +0,0 @@ -游泳馆 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3ad65230ca279f770347a709d7373b6c.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3ad65230ca279f770347a709d7373b6c.svg deleted file mode 100644 index 6f9091a..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3ad65230ca279f770347a709d7373b6c.svg +++ /dev/null @@ -1 +0,0 @@ -影剧院 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3c73104678a60c014e28fa64b52f01aa.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3c73104678a60c014e28fa64b52f01aa.svg deleted file mode 100644 index 7a69cd9..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3c73104678a60c014e28fa64b52f01aa.svg +++ /dev/null @@ -1 +0,0 @@ -店铺通用 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3c8531b29a4438c7eb086130daa44407.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3c8531b29a4438c7eb086130daa44407.svg deleted file mode 100644 index 2c83636..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3c8531b29a4438c7eb086130daa44407.svg +++ /dev/null @@ -1 +0,0 @@ -商场通用 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3e11280cd0853e364414031b284eb79d.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3e11280cd0853e364414031b284eb79d.svg deleted file mode 100644 index 2c006c7..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3e11280cd0853e364414031b284eb79d.svg +++ /dev/null @@ -1 +0,0 @@ -公园 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3e6599f5586731a2ab27ac2cada3121d.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3e6599f5586731a2ab27ac2cada3121d.svg deleted file mode 100644 index aabb68a..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/3e6599f5586731a2ab27ac2cada3121d.svg +++ /dev/null @@ -1 +0,0 @@ -Join_Route_Camera_wrong_side \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/422387d10dbb5c0c82f8f77e1e17c098.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/422387d10dbb5c0c82f8f77e1e17c098.svg deleted file mode 100644 index 5fce6df..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/422387d10dbb5c0c82f8f77e1e17c098.svg +++ /dev/null @@ -1 +0,0 @@ -餐饮通用 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/445a596c510438eb0c49699139241935.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/445a596c510438eb0c49699139241935.svg deleted file mode 100644 index be9a80c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/445a596c510438eb0c49699139241935.svg +++ /dev/null @@ -1 +0,0 @@ -航站楼@2x \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/45b8da91d5834aabe7622b457a84b280.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/45b8da91d5834aabe7622b457a84b280.svg deleted file mode 100644 index 6171295..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/45b8da91d5834aabe7622b457a84b280.svg +++ /dev/null @@ -1 +0,0 @@ -商场通用 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/46ef7232f70af2554a1be95758d52497.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/46ef7232f70af2554a1be95758d52497.svg deleted file mode 100644 index c45b807..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/46ef7232f70af2554a1be95758d52497.svg +++ /dev/null @@ -1 +0,0 @@ -红绿灯-普通态-night \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/48ef9dfa1f3494c5b4ecf5e39ba1eb92.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/48ef9dfa1f3494c5b4ecf5e39ba1eb92.svg deleted file mode 100644 index 72bda05..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/48ef9dfa1f3494c5b4ecf5e39ba1eb92.svg +++ /dev/null @@ -1 +0,0 @@ -甜点 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/4c5de5a536f4802fa17e51dd2c4bf64a.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/4c5de5a536f4802fa17e51dd2c4bf64a.svg deleted file mode 100644 index 9202367..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/4c5de5a536f4802fa17e51dd2c4bf64a.svg +++ /dev/null @@ -1 +0,0 @@ -非机动车道-白天 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/4fc12c33e3560547c8f399e519821205.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/4fc12c33e3560547c8f399e519821205.svg deleted file mode 100644 index 93c8182..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/4fc12c33e3560547c8f399e519821205.svg +++ /dev/null @@ -1 +0,0 @@ -水族馆 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/513f13356e5c7b2203c8ac0a6f7edfba.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/513f13356e5c7b2203c8ac0a6f7edfba.svg deleted file mode 100644 index 2c6c2da..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/513f13356e5c7b2203c8ac0a6f7edfba.svg +++ /dev/null @@ -1 +0,0 @@ -冷饮店 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/542cc3a761eeea0d178a4bed967db179.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/542cc3a761eeea0d178a4bed967db179.svg deleted file mode 100644 index 5758f12..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/542cc3a761eeea0d178a4bed967db179.svg +++ /dev/null @@ -1 +0,0 @@ -清真寺 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/562f1f1fe996ddf99fc7bf94fb3cafbb.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/562f1f1fe996ddf99fc7bf94fb3cafbb.svg deleted file mode 100644 index 0318def..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/562f1f1fe996ddf99fc7bf94fb3cafbb.svg +++ /dev/null @@ -1 +0,0 @@ -天文馆 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/573f56434317fafc0844a6cc278c5b01.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/573f56434317fafc0844a6cc278c5b01.svg deleted file mode 100644 index 5e36fea..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/573f56434317fafc0844a6cc278c5b01.svg +++ /dev/null @@ -1 +0,0 @@ -安全带-白天 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/57984338c59b59cec5a3cb3c8974f796.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/57984338c59b59cec5a3cb3c8974f796.svg deleted file mode 100644 index ad3fe15..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/57984338c59b59cec5a3cb3c8974f796.svg +++ /dev/null @@ -1 +0,0 @@ -电影院 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/5c90b8d2a8e1860f5b27d16ff8388f2d.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/5c90b8d2a8e1860f5b27d16ff8388f2d.svg deleted file mode 100644 index 0e549cb..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/5c90b8d2a8e1860f5b27d16ff8388f2d.svg +++ /dev/null @@ -1 +0,0 @@ -快气泡-收费icon \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/601bea3e274a7f2e746c8fdcc5d633cb.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/601bea3e274a7f2e746c8fdcc5d633cb.svg deleted file mode 100644 index c11b94d..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/601bea3e274a7f2e746c8fdcc5d633cb.svg +++ /dev/null @@ -1 +0,0 @@ -出入口 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/622d5765d322c4784e58980c567dbe93.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/622d5765d322c4784e58980c567dbe93.svg deleted file mode 100644 index 723b7b1..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/622d5765d322c4784e58980c567dbe93.svg +++ /dev/null @@ -1 +0,0 @@ -超市通用 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/631f1702b6eac783ba9fe1768eb71681.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/631f1702b6eac783ba9fe1768eb71681.svg deleted file mode 100644 index 7a7b981..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/631f1702b6eac783ba9fe1768eb71681.svg +++ /dev/null @@ -1 +0,0 @@ -快气泡-红绿灯icon \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/646d147a394f3fd6337e142d4d0d8539.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/646d147a394f3fd6337e142d4d0d8539.svg deleted file mode 100644 index e006a67..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/646d147a394f3fd6337e142d4d0d8539.svg +++ /dev/null @@ -1 +0,0 @@ -收费-推荐高亮态 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/66565f0edba1bde93baad6d7a21196a0.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/66565f0edba1bde93baad6d7a21196a0.svg deleted file mode 100644 index 13252ca..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/66565f0edba1bde93baad6d7a21196a0.svg +++ /dev/null @@ -1 +0,0 @@ -采摘园 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/66590c5e801eae40652a5a116b1b5106.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/66590c5e801eae40652a5a116b1b5106.svg deleted file mode 100644 index b2bb602..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/66590c5e801eae40652a5a116b1b5106.svg +++ /dev/null @@ -1 +0,0 @@ -Join_Route_Camera_train \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/68b3eceae98abe80cc944c2bd4a19269.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/68b3eceae98abe80cc944c2bd4a19269.svg deleted file mode 100644 index d7afd53..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/68b3eceae98abe80cc944c2bd4a19269.svg +++ /dev/null @@ -1 +0,0 @@ -冷饮店 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/6a536dd3c5c0cb4b0794f1be56bb24b2.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/6a536dd3c5c0cb4b0794f1be56bb24b2.svg deleted file mode 100644 index 97dc8b7..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/6a536dd3c5c0cb4b0794f1be56bb24b2.svg +++ /dev/null @@ -1 +0,0 @@ -纪念馆 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/71fb1eb30b3b1b3ed4676712f11819b0.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/71fb1eb30b3b1b3ed4676712f11819b0.svg deleted file mode 100644 index 899fd01..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/71fb1eb30b3b1b3ed4676712f11819b0.svg +++ /dev/null @@ -1 +0,0 @@ -红绿灯-推荐高亮态 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/71fb1eb30b3b1b3ed4676712f11819b0@dark.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/71fb1eb30b3b1b3ed4676712f11819b0@dark.svg deleted file mode 100644 index 7c0831c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/71fb1eb30b3b1b3ed4676712f11819b0@dark.svg +++ /dev/null @@ -1 +0,0 @@ -红绿灯-推荐高亮态-night \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/758d8554526098b55c585803ff3a4c6f.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/758d8554526098b55c585803ff3a4c6f.svg deleted file mode 100644 index e52d4c4..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/758d8554526098b55c585803ff3a4c6f.svg +++ /dev/null @@ -1 +0,0 @@ -清真寺 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/77fdbf24d7ae0c6b972e27c922ca53fd.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/77fdbf24d7ae0c6b972e27c922ca53fd.svg deleted file mode 100644 index 18de0fe..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/77fdbf24d7ae0c6b972e27c922ca53fd.svg +++ /dev/null @@ -1 +0,0 @@ -编组 3 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/7e4f0d01e71cb278ecab495914f93e52.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/7e4f0d01e71cb278ecab495914f93e52.svg deleted file mode 100644 index a07ba8a..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/7e4f0d01e71cb278ecab495914f93e52.svg +++ /dev/null @@ -1 +0,0 @@ -纪念馆 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/81bd9cb4d0515099bee88b7378b1ebdf.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/81bd9cb4d0515099bee88b7378b1ebdf.svg deleted file mode 100644 index 7eed326..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/81bd9cb4d0515099bee88b7378b1ebdf.svg +++ /dev/null @@ -1 +0,0 @@ -水族馆 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/83465379ec0862531066600175b473ea.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/83465379ec0862531066600175b473ea.svg deleted file mode 100644 index c69a87b..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/83465379ec0862531066600175b473ea.svg +++ /dev/null @@ -1 +0,0 @@ -违规用灯icon \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/898572a03110cc3526d099f6d4faee70.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/898572a03110cc3526d099f6d4faee70.svg deleted file mode 100644 index 43a5701..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/898572a03110cc3526d099f6d4faee70.svg +++ /dev/null @@ -1 +0,0 @@ -赞icon \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/93ba7b065e1e1fff0773f8614677ad02.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/93ba7b065e1e1fff0773f8614677ad02.svg deleted file mode 100644 index 48a8882..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/93ba7b065e1e1fff0773f8614677ad02.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - 快气泡-红绿灯icon - - - - - - - - - \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/9c9bbcfdea03288211fe716e72bc3864.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/9c9bbcfdea03288211fe716e72bc3864.svg deleted file mode 100644 index fa68a6b..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/9c9bbcfdea03288211fe716e72bc3864.svg +++ /dev/null @@ -1 +0,0 @@ -Join_Route_Camera_Speed \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/9e0dd10c0f2d6c058d46e04089f479ab.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/9e0dd10c0f2d6c058d46e04089f479ab.svg deleted file mode 100644 index 67e83a5..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/9e0dd10c0f2d6c058d46e04089f479ab.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - 慢气泡-收费icon - - - - - - - - - \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/a10ddf1eb313a519bd849f71dd32699c.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/a10ddf1eb313a519bd849f71dd32699c.svg deleted file mode 100644 index 4d4dcb8..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/a10ddf1eb313a519bd849f71dd32699c.svg +++ /dev/null @@ -1 +0,0 @@ -天文馆 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/a31b55d670bc1cd20ba0fbed35dcef82.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/a31b55d670bc1cd20ba0fbed35dcef82.svg deleted file mode 100644 index d4ce471..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/a31b55d670bc1cd20ba0fbed35dcef82.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - 轮渡 - - - - - - \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/a336bcc0a143d3bf41599ca19dc694ad.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/a336bcc0a143d3bf41599ca19dc694ad.svg deleted file mode 100644 index c0c351f..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/a336bcc0a143d3bf41599ca19dc694ad.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/a91edd5f3ab0e952c6f15dbbe9aa0d5d.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/a91edd5f3ab0e952c6f15dbbe9aa0d5d.svg deleted file mode 100644 index 5c089cf..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/a91edd5f3ab0e952c6f15dbbe9aa0d5d.svg +++ /dev/null @@ -1 +0,0 @@ -红绿灯-白天 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/a953738771f1dedf009ef5a1e8f7bb94.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/a953738771f1dedf009ef5a1e8f7bb94.svg deleted file mode 100644 index aa36987..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/a953738771f1dedf009ef5a1e8f7bb94.svg +++ /dev/null @@ -1 +0,0 @@ -咖啡厅 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/b14c6714f84ea326e80ff5b4ad8a2bb5.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/b14c6714f84ea326e80ff5b4ad8a2bb5.svg deleted file mode 100644 index 914759e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/b14c6714f84ea326e80ff5b4ad8a2bb5.svg +++ /dev/null @@ -1 +0,0 @@ -寺庙道观 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/b2054cc12d130f90e9b63695b6daa725.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/b2054cc12d130f90e9b63695b6daa725.svg deleted file mode 100644 index 8137f1f..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/b2054cc12d130f90e9b63695b6daa725.svg +++ /dev/null @@ -1 +0,0 @@ -Join_Route_Camera_Emergency_Lane \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/b517c5b0cc9c887ca985dfc05dbc422c.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/b517c5b0cc9c887ca985dfc05dbc422c.svg deleted file mode 100644 index 092a86b..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/b517c5b0cc9c887ca985dfc05dbc422c.svg +++ /dev/null @@ -1 +0,0 @@ -教堂 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/b884c6549cc691f9f9bc850905398b0a.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/b884c6549cc691f9f9bc850905398b0a.svg deleted file mode 100644 index 1e1cbb6..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/b884c6549cc691f9f9bc850905398b0a.svg +++ /dev/null @@ -1 +0,0 @@ -Join_Route_Camera_Pressing_Line \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/b90a5b031e202533b4e7af7ba1ae8ca7.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/b90a5b031e202533b4e7af7ba1ae8ca7.svg deleted file mode 100644 index f907c0b..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/b90a5b031e202533b4e7af7ba1ae8ca7.svg +++ /dev/null @@ -1 +0,0 @@ -红绿灯-普通高亮态 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/b90a5b031e202533b4e7af7ba1ae8ca7@dark.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/b90a5b031e202533b4e7af7ba1ae8ca7@dark.svg deleted file mode 100644 index 7c0831c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/b90a5b031e202533b4e7af7ba1ae8ca7@dark.svg +++ /dev/null @@ -1 +0,0 @@ -红绿灯-推荐高亮态-night \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/bc57984e1140437eb975bd1af17a5d2d.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/bc57984e1140437eb975bd1af17a5d2d.svg deleted file mode 100644 index e881490..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/bc57984e1140437eb975bd1af17a5d2d.svg +++ /dev/null @@ -1 +0,0 @@ -咖啡厅 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/c0ff9e5d56703b48c87ca776c037f50f.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/c0ff9e5d56703b48c87ca776c037f50f.svg deleted file mode 100644 index 95a8d12..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/c0ff9e5d56703b48c87ca776c037f50f.svg +++ /dev/null @@ -1 +0,0 @@ -教堂 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/c65a89be2d6fbc96dea1975355a22057.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/c65a89be2d6fbc96dea1975355a22057.svg deleted file mode 100644 index 2ccb250..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/c65a89be2d6fbc96dea1975355a22057.svg +++ /dev/null @@ -1 +0,0 @@ -美术馆 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/c73a5935047ee603c977f10ed3b92e4c.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/c73a5935047ee603c977f10ed3b92e4c.svg deleted file mode 100644 index 4cf4ecf..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/c73a5935047ee603c977f10ed3b92e4c.svg +++ /dev/null @@ -1 +0,0 @@ -影剧院 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/c74bd9d45308e41abc2268fae0f7f23b.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/c74bd9d45308e41abc2268fae0f7f23b.svg deleted file mode 100644 index 8041590..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/c74bd9d45308e41abc2268fae0f7f23b.svg +++ /dev/null @@ -1 +0,0 @@ -Join_Route_Camera_empty_night \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/c96fa65d58deaf2368e8c61a3457ca32.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/c96fa65d58deaf2368e8c61a3457ca32.svg deleted file mode 100644 index c96bd03..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/c96fa65d58deaf2368e8c61a3457ca32.svg +++ /dev/null @@ -1 +0,0 @@ -通用 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/cfc7f0d9b6b6389058ddb64e0f2934c7.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/cfc7f0d9b6b6389058ddb64e0f2934c7.svg deleted file mode 100644 index 4c099e3..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/cfc7f0d9b6b6389058ddb64e0f2934c7.svg +++ /dev/null @@ -1 +0,0 @@ -缆车 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/d566d5e53ca2384d70405bf3e3d73f2f.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/d566d5e53ca2384d70405bf3e3d73f2f.svg deleted file mode 100644 index 9be599b..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/d566d5e53ca2384d70405bf3e3d73f2f.svg +++ /dev/null @@ -1 +0,0 @@ -Join_Route_Camera_Answer_Phone \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/d6615a0fecc3f5b0283bd39b1bb86364.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/d6615a0fecc3f5b0283bd39b1bb86364.svg deleted file mode 100644 index 5bb8f6a..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/d6615a0fecc3f5b0283bd39b1bb86364.svg +++ /dev/null @@ -1 +0,0 @@ -收费-普通高亮态 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/db3e7f43a24ee970bb1be8b6fb1d7189.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/db3e7f43a24ee970bb1be8b6fb1d7189.svg deleted file mode 100644 index 06d8b0c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/db3e7f43a24ee970bb1be8b6fb1d7189.svg +++ /dev/null @@ -1 +0,0 @@ -收费-普通态 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/dc76f5b326b638c53a7ce3388fcded04.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/dc76f5b326b638c53a7ce3388fcded04.svg deleted file mode 100644 index 6c74ea0..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/dc76f5b326b638c53a7ce3388fcded04.svg +++ /dev/null @@ -1 +0,0 @@ -ic-arrow-right-o \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/dc76f5b326b638c53a7ce3388fcded04@dark.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/dc76f5b326b638c53a7ce3388fcded04@dark.svg deleted file mode 100644 index 802d4e0..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/dc76f5b326b638c53a7ce3388fcded04@dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/dcf3864f6d5efe1c2d4911a37df14786.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/dcf3864f6d5efe1c2d4911a37df14786.svg deleted file mode 100644 index 684a314..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/dcf3864f6d5efe1c2d4911a37df14786.svg +++ /dev/null @@ -1 +0,0 @@ -违章、监控-白天 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/e0008631e14a201b2dafaddca74f2795.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/e0008631e14a201b2dafaddca74f2795.svg deleted file mode 100644 index c907446..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/e0008631e14a201b2dafaddca74f2795.svg +++ /dev/null @@ -1 +0,0 @@ -Join_Route_Camera_Answer_Phone_Night_Normal \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/e04e8cc3654f4b3fc2c39087cd981ea9.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/e04e8cc3654f4b3fc2c39087cd981ea9.svg deleted file mode 100644 index b60a4b8..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/e04e8cc3654f4b3fc2c39087cd981ea9.svg +++ /dev/null @@ -1 +0,0 @@ -游乐场 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/e23187543db7c491a5ea3bfe1aaf8bf7.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/e23187543db7c491a5ea3bfe1aaf8bf7.svg deleted file mode 100644 index 81dd52e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/e23187543db7c491a5ea3bfe1aaf8bf7.svg +++ /dev/null @@ -1 +0,0 @@ -赞icon备份 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/e3603f3282fd273775714608b5010f1c.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/e3603f3282fd273775714608b5010f1c.svg deleted file mode 100644 index 37f189a..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/e3603f3282fd273775714608b5010f1c.svg +++ /dev/null @@ -1 +0,0 @@ -餐饮通用 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/e3ec48822d1fc6c9c78d6253d59e9b8a.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/e3ec48822d1fc6c9c78d6253d59e9b8a.svg deleted file mode 100644 index 47934d3..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/e3ec48822d1fc6c9c78d6253d59e9b8a.svg +++ /dev/null @@ -1 +0,0 @@ -椰子树 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/e56e637ff132b892a5493071f2916a1e.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/e56e637ff132b892a5493071f2916a1e.svg deleted file mode 100644 index da5848a..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/e56e637ff132b892a5493071f2916a1e.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - 步导 - - - - - - \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/ebb0bd2a72df35de93ad85501378b3c2.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/ebb0bd2a72df35de93ad85501378b3c2.svg deleted file mode 100644 index b4d9d89..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/ebb0bd2a72df35de93ad85501378b3c2.svg +++ /dev/null @@ -1 +0,0 @@ -美术馆 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/ebb84ead800d104bd67ac6a4a9eebdb3.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/ebb84ead800d104bd67ac6a4a9eebdb3.svg deleted file mode 100644 index 71c1e7b..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/ebb84ead800d104bd67ac6a4a9eebdb3.svg +++ /dev/null @@ -1 +0,0 @@ -Join_Route_Camera_PressingLine_Night_Normal \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/f07c99702d5ae32c23b79353836a343d.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/f07c99702d5ae32c23b79353836a343d.svg deleted file mode 100644 index d3dee54..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/f07c99702d5ae32c23b79353836a343d.svg +++ /dev/null @@ -1 +0,0 @@ -超市通用 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/f2bc6f9be52438279b93e7c9b268215c.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/f2bc6f9be52438279b93e7c9b268215c.svg deleted file mode 100644 index 4005fb6..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/f2bc6f9be52438279b93e7c9b268215c.svg +++ /dev/null @@ -1 +0,0 @@ -Join_Route_Camera_No_Honking_Normal \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/f37ce20a77e940247d9b146842fa1797.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/f37ce20a77e940247d9b146842fa1797.svg deleted file mode 100644 index cb7c460..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/f37ce20a77e940247d9b146842fa1797.svg +++ /dev/null @@ -1 +0,0 @@ -图书馆 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/f77c5521287dd466822b3d5a3033f08c.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/f77c5521287dd466822b3d5a3033f08c.svg deleted file mode 100644 index be1cb71..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/f77c5521287dd466822b3d5a3033f08c.svg +++ /dev/null @@ -1 +0,0 @@ -游泳馆 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/fc323e2e587758ba697a3f186cc8fc55.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/fc323e2e587758ba697a3f186cc8fc55.svg deleted file mode 100644 index 2952915..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/fc323e2e587758ba697a3f186cc8fc55.svg +++ /dev/null @@ -1 +0,0 @@ -动物园 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/iconresidnightmultiplefastnightlight.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/iconresidnightmultiplefastnightlight.svg deleted file mode 100644 index 853d266..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/iconresidnightmultiplefastnightlight.svg +++ /dev/null @@ -1 +0,0 @@ -快气泡-红绿灯icon夜间快 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/iconresidnightmultiplenightfastcharge.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/iconresidnightmultiplenightfastcharge.svg deleted file mode 100644 index 4e92111..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/iconresidnightmultiplenightfastcharge.svg +++ /dev/null @@ -1 +0,0 @@ -快气泡-收费icon夜间快 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/iconresidnightmultiplenightslowcharge.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/iconresidnightmultiplenightslowcharge.svg deleted file mode 100644 index 0f40a05..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/iconresidnightmultiplenightslowcharge.svg +++ /dev/null @@ -1 +0,0 @@ -慢气泡-收费icon夜间慢 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/iconresidnightmultipleslowcharge.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/iconresidnightmultipleslowcharge.svg deleted file mode 100644 index 70f36dc..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/iconresidnightmultipleslowcharge.svg +++ /dev/null @@ -1 +0,0 @@ -慢气泡-收费icon \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/iconresidnightmultipleslowlight.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/iconresidnightmultipleslowlight.svg deleted file mode 100644 index d1f4648..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/iconresidnightmultipleslowlight.svg +++ /dev/null @@ -1 +0,0 @@ -慢气泡-红绿灯icon \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/iconresidnightmultipleslownightlight.svg b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/iconresidnightmultipleslownightlight.svg deleted file mode 100644 index 6af399b..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/svg/iconresidnightmultipleslownightlight.svg +++ /dev/null @@ -1 +0,0 @@ -慢气泡-红绿灯icon夜间慢 \ No newline at end of file diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/symbol_lane_front_mm@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/symbol_lane_front_mm@2x.webp deleted file mode 100644 index f580fff..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/symbol_lane_front_mm@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/symbol_lane_front_mm@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/symbol_lane_front_mm@3x.webp deleted file mode 100644 index 6c881e3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/symbol_lane_front_mm@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/symbol_lane_front_nn@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/symbol_lane_front_nn@2x.webp deleted file mode 100644 index eb52d84..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/symbol_lane_front_nn@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/symbol_lane_front_nn@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/symbol_lane_front_nn@3x.webp deleted file mode 100644 index 8b006cf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/symbol_lane_front_nn@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/symbol_minimap_background_circle_512.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/symbol_minimap_background_circle_512.png deleted file mode 100644 index e3640c1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/symbol_minimap_background_circle_512.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/symbol_minimap_background_circle_512_night.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/symbol_minimap_background_circle_512_night.png deleted file mode 100644 index 875040c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/symbol_minimap_background_circle_512_night.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/tag_label_tmc_lightbeam@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/tag_label_tmc_lightbeam@2x.webp deleted file mode 100644 index dbb88b8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/tag_label_tmc_lightbeam@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/voice_dest_station_icon@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/voice_dest_station_icon@2x.png deleted file mode 100644 index 26f6ef5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/voice_dest_station_icon@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/voice_dest_station_icon@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/voice_dest_station_icon@3x.png deleted file mode 100644 index 6de8f6b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/image/voice_dest_station_icon@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/resource/car_logo_3d.dat b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/resource/car_logo_3d.dat deleted file mode 100644 index 7118ec1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/resource/car_logo_3d.dat and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/resource/car_logo_gray_3d.dat b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/resource/car_logo_gray_3d.dat deleted file mode 100644 index 00186a9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/resource/car_logo_gray_3d.dat and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/resource/lottie_overspeed_pulse.zip b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/resource/lottie_overspeed_pulse.zip deleted file mode 100644 index 12b2ce3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/resource/lottie_overspeed_pulse.zip and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/resource/lottie_traffic_light.zip b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/resource/lottie_traffic_light.zip deleted file mode 100644 index 2dab528..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/resource/lottie_traffic_light.zip and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/resource/navi_speed_view.zip b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/resource/navi_speed_view.zip deleted file mode 100644 index d3d8ec8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/eyrie/resource/navi_speed_view.zip and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_default_left_bottom.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_default_left_bottom.png deleted file mode 100644 index e12f3ab..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_default_left_bottom.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_default_left_bottom@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_default_left_bottom@2x.png deleted file mode 100644 index 80239d6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_default_left_bottom@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_default_left_top.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_default_left_top.png deleted file mode 100644 index 4cdbe41..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_default_left_top.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_default_left_top@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_default_left_top@2x.png deleted file mode 100644 index a1beb17..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_default_left_top@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_default_right_bottom.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_default_right_bottom.png deleted file mode 100644 index 245b41e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_default_right_bottom.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_default_right_bottom@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_default_right_bottom@2x.png deleted file mode 100644 index 7b279e3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_default_right_bottom@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_default_right_top.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_default_right_top.png deleted file mode 100644 index 6543350..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_default_right_top.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_default_right_top@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_default_right_top@2x.png deleted file mode 100644 index 9035a66..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_default_right_top@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_red_Normal.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_red_Normal.png deleted file mode 100644 index a0362d4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_red_Normal.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_red_Normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_red_Normal@2x.png deleted file mode 100644 index 78ee7ad..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_red_Normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_red_left_Normal.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_red_left_Normal.png deleted file mode 100644 index 013dd15..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_red_left_Normal.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_red_left_Normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_red_left_Normal@2x.png deleted file mode 100644 index 6fe1725..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_commuting_bubble_red_left_Normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_toll.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_toll.png deleted file mode 100644 index bc1e677..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_toll.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_toll@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_toll@2x.png deleted file mode 100644 index 47b7f09..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_toll@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_toll@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_toll@3x.png deleted file mode 100644 index 1cdc5bd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_toll@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_toll_blue.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_toll_blue.png deleted file mode 100644 index 0aa61eb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_toll_blue.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_toll_blue@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_toll_blue@2x.png deleted file mode 100644 index 7fa49c1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_toll_blue@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_toll_blue@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_toll_blue@3x.png deleted file mode 100644 index 0e313a8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_toll_blue@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_traffic.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_traffic.png deleted file mode 100644 index 143b764..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_traffic.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_traffic@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_traffic@2x.png deleted file mode 100644 index f9f9abf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_traffic@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_traffic@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_traffic@3x.png deleted file mode 100644 index 5219d23..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_traffic@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_traffic_blue.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_traffic_blue.png deleted file mode 100644 index 4a1c61b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_traffic_blue.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_traffic_blue@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_traffic_blue@2x.png deleted file mode 100644 index c86d660..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_traffic_blue@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_traffic_blue@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_traffic_blue@3x.png deleted file mode 100644 index e750df2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/bubble/default_path_result_traffic_blue@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_bus_left.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_bus_left.png deleted file mode 100644 index 027f7fc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_bus_left.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_bus_left@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_bus_left@2x.png deleted file mode 100644 index c0756e1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_bus_left@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_bus_left@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_bus_left@3x.png deleted file mode 100644 index f91b2f0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_bus_left@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_bus_right.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_bus_right.png deleted file mode 100644 index 9826e0a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_bus_right.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_bus_right@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_bus_right@2x.png deleted file mode 100644 index f466a08..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_bus_right@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_bus_right@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_bus_right@3x.png deleted file mode 100644 index f80fce6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_bus_right@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_camera_left.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_camera_left.png deleted file mode 100644 index 66d07e3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_camera_left.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_camera_left@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_camera_left@2x.png deleted file mode 100644 index d28ff82..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_camera_left@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_camera_left@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_camera_left@3x.png deleted file mode 100644 index a0fccde..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_camera_left@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_camera_right.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_camera_right.png deleted file mode 100644 index de5fced..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_camera_right.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_camera_right@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_camera_right@2x.png deleted file mode 100644 index ef84559..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_camera_right@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_camera_right@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_camera_right@3x.png deleted file mode 100644 index c30d25a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_camera_right@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_emergency_left.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_emergency_left.png deleted file mode 100644 index fe91065..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_emergency_left.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_emergency_left@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_emergency_left@2x.png deleted file mode 100644 index 2b18d76..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_emergency_left@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_emergency_left@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_emergency_left@3x.png deleted file mode 100644 index 675444e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_emergency_left@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_emergency_right.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_emergency_right.png deleted file mode 100644 index 4b2fed8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_emergency_right.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_emergency_right@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_emergency_right@2x.png deleted file mode 100644 index 173fc92..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_emergency_right@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_emergency_right@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_emergency_right@3x.png deleted file mode 100644 index efca6a6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_emergency_right@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_light_left.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_light_left.png deleted file mode 100644 index 406a5fd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_light_left.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_light_left@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_light_left@2x.png deleted file mode 100644 index 5397ed2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_light_left@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_light_left@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_light_left@3x.png deleted file mode 100644 index 848bd57..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_light_left@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_light_right.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_light_right.png deleted file mode 100644 index 91f2638..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_light_right.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_light_right@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_light_right@2x.png deleted file mode 100644 index cb51830..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_light_right@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_light_right@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_light_right@3x.png deleted file mode 100644 index ba762d7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_light_right@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_speed_left.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_speed_left.png deleted file mode 100644 index e7d01b5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_speed_left.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_speed_left@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_speed_left@2x.png deleted file mode 100644 index 6b5622d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_speed_left@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_speed_left@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_speed_left@3x.png deleted file mode 100644 index 207ffba..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_speed_left@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_speed_right.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_speed_right.png deleted file mode 100644 index 0a4a024..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_speed_right.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_speed_right@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_speed_right@2x.png deleted file mode 100644 index 9374106..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_speed_right@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_speed_right@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_speed_right@3x.png deleted file mode 100644 index 34642c9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/cameratype/default_navi_layer_speed_right@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_common_navibar_prev_highlighted.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_common_navibar_prev_highlighted.png deleted file mode 100644 index e64652a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_common_navibar_prev_highlighted.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_common_navibar_prev_highlighted@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_common_navibar_prev_highlighted@2x.png deleted file mode 100644 index 3c81a38..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_common_navibar_prev_highlighted@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_common_navibar_prev_highlighted@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_common_navibar_prev_highlighted@3x.png deleted file mode 100644 index e9a1cf1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_common_navibar_prev_highlighted@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_common_navibar_prev_normal.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_common_navibar_prev_normal.png deleted file mode 100644 index 92d4715..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_common_navibar_prev_normal.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_common_navibar_prev_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_common_navibar_prev_normal@2x.png deleted file mode 100644 index 0c7d5b0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_common_navibar_prev_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_common_navibar_prev_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_common_navibar_prev_normal@3x.png deleted file mode 100644 index 37db8f9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_common_navibar_prev_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_browse_normal.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_browse_normal.png deleted file mode 100644 index 6c911fd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_browse_normal.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_browse_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_browse_normal@2x.png deleted file mode 100644 index eb46a95..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_browse_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_browse_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_browse_normal@3x.png deleted file mode 100644 index 596a773..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_browse_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_browse_ver_highlighted.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_browse_ver_highlighted.png deleted file mode 100644 index 68dac25..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_browse_ver_highlighted.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_browse_ver_highlighted@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_browse_ver_highlighted@2x.png deleted file mode 100644 index eca678f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_browse_ver_highlighted@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_browse_ver_highlighted@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_browse_ver_highlighted@3x.png deleted file mode 100644 index 6a32dbb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_browse_ver_highlighted@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_charging_day.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_charging_day.png deleted file mode 100644 index de6b234..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_charging_day.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_charging_night.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_charging_night.png deleted file mode 100644 index 0e25d50..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_charging_night.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_continue_arrow_normal.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_continue_arrow_normal.png deleted file mode 100644 index 4e654ea..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_continue_arrow_normal.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_continue_arrow_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_continue_arrow_normal@2x.png deleted file mode 100644 index f77b593..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_continue_arrow_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_continue_arrow_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_continue_arrow_normal@3x.png deleted file mode 100644 index 79b8961..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_continue_arrow_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_continue_background_normal.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_continue_background_normal.png deleted file mode 100644 index 216a9d7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_continue_background_normal.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_continue_background_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_continue_background_normal@2x.png deleted file mode 100644 index 3a717f2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_continue_background_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_footer_icon_close.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_footer_icon_close.png deleted file mode 100644 index a556e5d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_footer_icon_close.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_footer_icon_close@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_footer_icon_close@2x.png deleted file mode 100644 index d794ad3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_footer_icon_close@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_footer_icon_close@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_footer_icon_close@3x.png deleted file mode 100644 index 0c41c9e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_footer_icon_close@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_footer_icon_more.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_footer_icon_more.png deleted file mode 100644 index 9641b2b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_footer_icon_more.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_footer_icon_more@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_footer_icon_more@2x.png deleted file mode 100644 index aeb195d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_footer_icon_more@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_footer_icon_more@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_footer_icon_more@3x.png deleted file mode 100644 index 4ee0edc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_footer_icon_more@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_lan_close_normal.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_lan_close_normal.png deleted file mode 100644 index d27cd75..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_lan_close_normal.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_lan_close_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_lan_close_normal@2x.png deleted file mode 100644 index e32d1f1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_lan_close_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_lan_close_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_lan_close_normal@3x.png deleted file mode 100644 index c5f6d3c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_lan_close_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_lan_more_normal.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_lan_more_normal.png deleted file mode 100644 index 0a9d460..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_lan_more_normal.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_lan_more_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_lan_more_normal@2x.png deleted file mode 100644 index 5fe9a5b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_lan_more_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_lan_more_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_lan_more_normal@3x.png deleted file mode 100644 index 65a7a87..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_lan_more_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_map_compass.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_map_compass.png deleted file mode 100644 index ee8971a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_map_compass.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_map_compass@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_map_compass@2x.png deleted file mode 100644 index 933360e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_map_compass@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_map_compass@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_map_compass@3x.png deleted file mode 100644 index 4870201..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_map_compass@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_route_camera.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_route_camera.png deleted file mode 100644 index 7c621bd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_route_camera.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_route_camera@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_route_camera@2x.png deleted file mode 100644 index fee43ef..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_route_camera@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_route_camera@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_route_camera@3x.png deleted file mode 100644 index cc30bfc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_route_camera@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_set_autoScaleChange_day.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_set_autoScaleChange_day.png deleted file mode 100644 index aa06403..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_set_autoScaleChange_day.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_set_autoScaleChange_night.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_set_autoScaleChange_night.png deleted file mode 100644 index d9d44c7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_set_autoScaleChange_night.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_set_dayNightMode_day.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_set_dayNightMode_day.png deleted file mode 100644 index 5856612..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_set_dayNightMode_day.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_set_dayNightMode_night.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_set_dayNightMode_night.png deleted file mode 100644 index 361c705..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_set_dayNightMode_night.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_seteagle_day@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_seteagle_day@2x.png deleted file mode 100644 index f39dbc0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_seteagle_day@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_seteagle_day@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_seteagle_day@3x.png deleted file mode 100644 index 9490b88..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_seteagle_day@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_seteagle_night@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_seteagle_night@2x.png deleted file mode 100644 index 0859cca..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_seteagle_night@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_seteagle_night@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_seteagle_night@3x.png deleted file mode 100644 index 24ef1cb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_seteagle_night@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_settmc_day@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_settmc_day@2x.png deleted file mode 100644 index 7343347..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_settmc_day@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_settmc_day@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_settmc_day@3x.png deleted file mode 100644 index 2c7f120..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_settmc_day@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_settmc_night@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_settmc_night@2x.png deleted file mode 100644 index 1bb3406..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_settmc_night@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_settmc_night@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_settmc_night@3x.png deleted file mode 100644 index fdf87bc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_settmc_night@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_traffic_light_day@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_traffic_light_day@2x.png deleted file mode 100644 index 10344af..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_traffic_light_day@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_traffic_light_day@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_traffic_light_day@3x.png deleted file mode 100644 index 6fa04eb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_traffic_light_day@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_traffic_light_night@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_traffic_light_night@2x.png deleted file mode 100644 index 0e841e5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_traffic_light_night@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_traffic_light_night@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_traffic_light_night@3x.png deleted file mode 100644 index 93bd6a0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_traffic_light_night@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_zoomin_normal.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_zoomin_normal.png deleted file mode 100644 index 1d26673..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_zoomin_normal.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_zoomin_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_zoomin_normal@2x.png deleted file mode 100644 index 005db55..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_zoomin_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_zoomin_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_zoomin_normal@3x.png deleted file mode 100644 index a148179..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_zoomin_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_zoomout_normal.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_zoomout_normal.png deleted file mode 100644 index 151702b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_zoomout_normal.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_zoomout_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_zoomout_normal@2x.png deleted file mode 100644 index 8daa0b3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_zoomout_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_zoomout_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_zoomout_normal@3x.png deleted file mode 100644 index ab02d08..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/default_navi_zoomout_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_1.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_1.png deleted file mode 100644 index c5e8a76..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_1.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_10.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_10.png deleted file mode 100644 index a2fd399..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_10.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_10@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_10@2x.png deleted file mode 100644 index 9a873cc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_10@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_10@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_10@3x.png deleted file mode 100644 index 0586f78..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_10@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_11.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_11.png deleted file mode 100644 index d5d21f6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_11.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_11@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_11@2x.png deleted file mode 100644 index bfabaf4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_11@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_11@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_11@3x.png deleted file mode 100644 index 71002c0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_11@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_12.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_12.png deleted file mode 100644 index 9e491c4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_12.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_12@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_12@2x.png deleted file mode 100644 index 5bb9a2e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_12@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_12@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_12@3x.png deleted file mode 100644 index 77c4ffe..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_12@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_13.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_13.png deleted file mode 100644 index 106f341..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_13.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_13@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_13@2x.png deleted file mode 100644 index 31d060c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_13@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_13@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_13@3x.png deleted file mode 100644 index 8d83e37..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_13@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_14.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_14.png deleted file mode 100644 index a170e02..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_14.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_14@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_14@2x.png deleted file mode 100644 index 6176417..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_14@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_14@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_14@3x.png deleted file mode 100644 index db00843..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_14@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_15.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_15.png deleted file mode 100644 index 51edcdd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_15.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_15@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_15@2x.png deleted file mode 100644 index 165e4da..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_15@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_15@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_15@3x.png deleted file mode 100644 index 3c4ffac..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_15@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_16.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_16.png deleted file mode 100644 index f48526c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_16.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_16@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_16@2x.png deleted file mode 100644 index 41755dd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_16@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_16@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_16@3x.png deleted file mode 100644 index 15be18a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_16@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_1@2x.png deleted file mode 100644 index fbbd189..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_1@3x.png deleted file mode 100644 index 3adfa4a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_2.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_2.png deleted file mode 100644 index ed7d5f1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_2.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_29.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_29.png deleted file mode 100644 index 1fa0926..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_29.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_29@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_29@2x.png deleted file mode 100644 index 3043817..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_29@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_29@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_29@3x.png deleted file mode 100644 index 93f37c1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_29@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_2@2x.png deleted file mode 100644 index 7d5f95e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_2@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_2@3x.png deleted file mode 100644 index ccf3ea7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_2@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_3.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_3.png deleted file mode 100644 index 6936d46..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_3.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_30.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_30.png deleted file mode 100644 index 70a525b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_30.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_30@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_30@2x.png deleted file mode 100644 index 7f33c37..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_30@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_30@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_30@3x.png deleted file mode 100644 index 193a8da..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_30@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_31.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_31.png deleted file mode 100644 index 93abcdd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_31.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_31@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_31@2x.png deleted file mode 100644 index 8cc4b29..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_31@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_31@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_31@3x.png deleted file mode 100644 index f941ae8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_31@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_3@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_3@2x.png deleted file mode 100644 index fe273ac..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_3@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_3@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_3@3x.png deleted file mode 100644 index 1302fe7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_3@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_4.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_4.png deleted file mode 100644 index 6d9f496..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_4.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_4@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_4@2x.png deleted file mode 100644 index 1f22cb9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_4@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_4@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_4@3x.png deleted file mode 100644 index e442ac1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_4@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_5.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_5.png deleted file mode 100644 index 6bc797a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_5.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_5@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_5@2x.png deleted file mode 100644 index 396ea88..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_5@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_5@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_5@3x.png deleted file mode 100644 index dd73bd8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_5@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_6.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_6.png deleted file mode 100644 index c44b5e7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_6.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_6@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_6@2x.png deleted file mode 100644 index 28a9f4c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_6@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_6@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_6@3x.png deleted file mode 100644 index c4eaa9d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_6@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_7.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_7.png deleted file mode 100644 index b9937b7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_7.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_7@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_7@2x.png deleted file mode 100644 index 59347c0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_7@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_7@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_7@3x.png deleted file mode 100644 index 5150023..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_7@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_8.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_8.png deleted file mode 100644 index 7270c43..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_8.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_8@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_8@2x.png deleted file mode 100644 index ea3f51b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_8@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_8@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_8@3x.png deleted file mode 100644 index 53f16f1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_8@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_9.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_9.png deleted file mode 100644 index 1cfa361..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_9.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_9@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_9@2x.png deleted file mode 100644 index a8412a1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_9@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_9@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_9@3x.png deleted file mode 100644 index 00b2db0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_9@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_remain_dis.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_remain_dis.png deleted file mode 100644 index bc8d11b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_remain_dis.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_remain_dis@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_remain_dis@2x.png deleted file mode 100644 index 7efd3bb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_remain_dis@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_remain_dis@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_remain_dis@3x.png deleted file mode 100644 index 0106510..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_remain_dis@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_remain_time.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_remain_time.png deleted file mode 100644 index be02275..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_remain_time.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_remain_time@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_remain_time@2x.png deleted file mode 100644 index c659450..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_remain_time@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_remain_time@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_remain_time@3x.png deleted file mode 100644 index 7ff4a09..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_remain_time@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_speed.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_speed.png deleted file mode 100644 index 232f9d3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_speed.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_speed@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_speed@2x.png deleted file mode 100644 index 8a06e33..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_speed@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_speed@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_speed@3x.png deleted file mode 100644 index fc1fba7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/hud/default_navi_hud_speed@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_0.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_0.png deleted file mode 100644 index 0447ffc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_0.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_1.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_1.png deleted file mode 100644 index 047e7df..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_1.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_2.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_2.png deleted file mode 100644 index c2f2c6b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_2.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_3.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_3.png deleted file mode 100644 index 3c666de..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_3.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_4.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_4.png deleted file mode 100644 index 2b164b8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_4.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_5.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_5.png deleted file mode 100644 index 29f78da..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_5.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_6.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_6.png deleted file mode 100644 index 4f7a641..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_6.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_7.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_7.png deleted file mode 100644 index 351ebc2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_7.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_8.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_8.png deleted file mode 100644 index 62a3bc5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_8.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_9.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_9.png deleted file mode 100644 index aab1219..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_9.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_a.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_a.png deleted file mode 100644 index d1a0039..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_a.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_b.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_b.png deleted file mode 100644 index 8b90b86..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_b.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_c.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_c.png deleted file mode 100644 index 4937be5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_c.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_d.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_d.png deleted file mode 100644 index 02711ec..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_d.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_e.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_e.png deleted file mode 100644 index d6dc0c8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_e.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_f.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_f.png deleted file mode 100644 index f7e4e53..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_f.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_g.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_g.png deleted file mode 100644 index bd2484d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_g.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_h.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_h.png deleted file mode 100644 index f5d960f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_h.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_i.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_i.png deleted file mode 100644 index 0d08011..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_i.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_j.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_j.png deleted file mode 100644 index abc293d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_j.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_k.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_k.png deleted file mode 100644 index 1604b90..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_k.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_l.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_l.png deleted file mode 100644 index c994e40..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_l.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_m.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_m.png deleted file mode 100644 index 27673c6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_m.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_n.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_n.png deleted file mode 100644 index 928a41c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landback_n.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_0.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_0.png deleted file mode 100644 index 423159e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_0.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_00.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_00.png deleted file mode 100644 index 4340796..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_00.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_1.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_1.png deleted file mode 100644 index a644c42..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_1.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_11.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_11.png deleted file mode 100644 index 2b35cc0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_11.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_20.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_20.png deleted file mode 100644 index 6d2c901..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_20.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_21.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_21.png deleted file mode 100644 index 34c5363..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_21.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_22.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_22.png deleted file mode 100644 index 22474ea..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_22.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_3.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_3.png deleted file mode 100644 index c073010..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_3.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_33.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_33.png deleted file mode 100644 index 75eb35e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_33.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_40.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_40.png deleted file mode 100644 index 1f25fc7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_40.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_43.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_43.png deleted file mode 100644 index e273a62..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_43.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_44.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_44.png deleted file mode 100644 index 75226fe..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_44.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_5.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_5.png deleted file mode 100644 index 08ec564..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_5.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_55.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_55.png deleted file mode 100644 index c9ec97a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_55.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_61.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_61.png deleted file mode 100644 index 820261a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_61.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_63.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_63.png deleted file mode 100644 index d22a65e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_63.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_66.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_66.png deleted file mode 100644 index 473be66..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_66.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_70.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_70.png deleted file mode 100644 index 4a921b1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_70.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_71.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_71.png deleted file mode 100644 index d424cce..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_71.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_73.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_73.png deleted file mode 100644 index 78cb149..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_73.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_77.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_77.png deleted file mode 100644 index d550f89..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_77.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_8.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_8.png deleted file mode 100644 index 110b403..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_8.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_88.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_88.png deleted file mode 100644 index 8216394..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_88.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_90.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_90.png deleted file mode 100644 index b868583..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_90.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_95.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_95.png deleted file mode 100644 index 85bb448..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_95.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_99.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_99.png deleted file mode 100644 index 2edaf65..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_99.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_a0.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_a0.png deleted file mode 100644 index 02b7f40..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_a0.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_a8.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_a8.png deleted file mode 100644 index 0d36eba..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_a8.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_aa.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_aa.png deleted file mode 100644 index adedb8c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_aa.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_b1.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_b1.png deleted file mode 100644 index f3741f7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_b1.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_b5.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_b5.png deleted file mode 100644 index 50a9a27..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_b5.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_bb.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_bb.png deleted file mode 100644 index 2ef2820..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_bb.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_c3.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_c3.png deleted file mode 100644 index 18fd257..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_c3.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_c8.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_c8.png deleted file mode 100644 index ece3d0a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_c8.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_cc.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_cc.png deleted file mode 100644 index 0087f4d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_cc.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_d.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_d.png deleted file mode 100644 index be394be..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_d.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_dd.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_dd.png deleted file mode 100644 index 619325b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_dd.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_e1.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_e1.png deleted file mode 100644 index 9617b5d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_e1.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_e5.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_e5.png deleted file mode 100644 index 8b1e4c9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_e5.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_ee.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_ee.png deleted file mode 100644 index 1a32c47..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_ee.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_f0.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_f0.png deleted file mode 100644 index d07f4e1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_f0.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_f1.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_f1.png deleted file mode 100644 index 18dd1c4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_f1.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_f5.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_f5.png deleted file mode 100644 index 1019452..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_f5.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_ff.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_ff.png deleted file mode 100644 index f38ba26..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_ff.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_g3.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_g3.png deleted file mode 100644 index aa2360c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_g3.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_g5.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_g5.png deleted file mode 100644 index 8cf64e4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_g5.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_gg.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_gg.png deleted file mode 100644 index 39770aa..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_gg.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_h1.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_h1.png deleted file mode 100644 index 01de391..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_h1.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_h3.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_h3.png deleted file mode 100644 index ff07f66..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_h3.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_h5.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_h5.png deleted file mode 100644 index 133b33f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_h5.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_hh.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_hh.png deleted file mode 100644 index 8457ab5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_hh.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_i0.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_i0.png deleted file mode 100644 index 6fb0b0c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_i0.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_i3.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_i3.png deleted file mode 100644 index 3b34564..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_i3.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_i5.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_i5.png deleted file mode 100644 index c3501c7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_i5.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_ii.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_ii.png deleted file mode 100644 index 402e74f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_ii.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_j1.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_j1.png deleted file mode 100644 index ef97dcc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_j1.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_j8.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_j8.png deleted file mode 100644 index 49d384e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_j8.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_jj.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_jj.png deleted file mode 100644 index 4524cb5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_jj.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_kk.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_kk.png deleted file mode 100644 index 22a8713..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_kk.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_ll.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_ll.png deleted file mode 100644 index 0aebb0a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_ll.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_mm.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_mm.png deleted file mode 100644 index 95422ab..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_mm.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_nn.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_nn.png deleted file mode 100644 index 64856c1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/laneInfo/landfront_nn.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/servicearea/navi_icon_catering.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/servicearea/navi_icon_catering.png deleted file mode 100644 index 3f7767b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/servicearea/navi_icon_catering.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/servicearea/navi_icon_fee.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/servicearea/navi_icon_fee.png deleted file mode 100644 index a516b9f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/servicearea/navi_icon_fee.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/servicearea/navi_icon_hotel.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/servicearea/navi_icon_hotel.png deleted file mode 100644 index 850889f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/servicearea/navi_icon_hotel.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/servicearea/navi_icon_petrol.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/servicearea/navi_icon_petrol.png deleted file mode 100644 index 1ffd6c4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/servicearea/navi_icon_petrol.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/servicearea/navi_icon_repair.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/servicearea/navi_icon_repair.png deleted file mode 100644 index 6c2b0f6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/servicearea/navi_icon_repair.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/servicearea/navi_icon_rest.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/servicearea/navi_icon_rest.png deleted file mode 100644 index 93bfb1a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/servicearea/navi_icon_rest.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/servicearea/navi_icon_shopping.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/servicearea/navi_icon_shopping.png deleted file mode 100644 index 897a328..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/servicearea/navi_icon_shopping.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/servicearea/navi_icon_toilet.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/servicearea/navi_icon_toilet.png deleted file mode 100644 index 5f9457c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/servicearea/navi_icon_toilet.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_0.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_0.png deleted file mode 100644 index 004566c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_0.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_0@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_0@2x.png deleted file mode 100644 index 5d5c7a4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_0@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_0@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_0@3x.png deleted file mode 100644 index 2c38e61..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_0@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_1.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_1.png deleted file mode 100644 index 0311f23..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_1.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_10.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_10.png deleted file mode 100644 index 65d50d3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_10.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_10@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_10@2x.png deleted file mode 100644 index 4f591ee..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_10@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_10@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_10@3x.png deleted file mode 100644 index d872351..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_10@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_11.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_11.png deleted file mode 100644 index 7704b01..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_11.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_11@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_11@2x.png deleted file mode 100644 index 17cb64e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_11@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_11@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_11@3x.png deleted file mode 100644 index 9435060..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_11@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_12.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_12.png deleted file mode 100644 index 37088f9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_12.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_12@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_12@2x.png deleted file mode 100644 index 7d53071..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_12@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_12@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_12@3x.png deleted file mode 100644 index a61663a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_12@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_13.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_13.png deleted file mode 100644 index b380604..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_13.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_13@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_13@2x.png deleted file mode 100644 index 96c0e58..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_13@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_13@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_13@3x.png deleted file mode 100644 index 6ecfb32..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_13@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_14@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_14@2x.png deleted file mode 100644 index bd33839..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_14@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_14@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_14@3x.png deleted file mode 100644 index 04a1c52..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_14@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_15.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_15.png deleted file mode 100644 index 1cbcd1d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_15.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_15@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_15@2x.png deleted file mode 100644 index b4533ac..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_15@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_15@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_15@3x.png deleted file mode 100644 index 0748310..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_15@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_16.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_16.png deleted file mode 100644 index dc2e835..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_16.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_16@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_16@2x.png deleted file mode 100644 index f15ea75..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_16@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_16@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_16@3x.png deleted file mode 100644 index 20a11fc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_16@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_17.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_17.png deleted file mode 100644 index 09b441b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_17.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_17@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_17@2x.png deleted file mode 100644 index c48634c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_17@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_17@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_17@3x.png deleted file mode 100644 index 4136e06..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_17@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_18.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_18.png deleted file mode 100644 index c5b3e72..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_18.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_18@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_18@2x.png deleted file mode 100644 index b6375c2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_18@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_18@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_18@3x.png deleted file mode 100644 index 5a86f93..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_18@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_1@2x.png deleted file mode 100644 index 4e855d6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_1@3x.png deleted file mode 100644 index 298ae13..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_2.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_2.png deleted file mode 100644 index 5546912..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_2.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_20@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_20@2x.png deleted file mode 100644 index 05f93f0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_20@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_20@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_20@3x.png deleted file mode 100644 index 7a2a912..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_20@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_2@2x.png deleted file mode 100644 index a7549e3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_2@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_2@3x.png deleted file mode 100644 index 40e1df4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_2@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_3.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_3.png deleted file mode 100644 index 7145344..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_3.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_3@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_3@2x.png deleted file mode 100644 index 3ea0ecb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_3@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_3@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_3@3x.png deleted file mode 100644 index d672686..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_3@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_4.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_4.png deleted file mode 100644 index b2e3ce2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_4.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_4@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_4@2x.png deleted file mode 100644 index 08170fe..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_4@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_4@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_4@3x.png deleted file mode 100644 index 8787f4d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_4@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_5.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_5.png deleted file mode 100644 index 1c096f0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_5.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_5@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_5@2x.png deleted file mode 100644 index 4fdc8a5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_5@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_5@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_5@3x.png deleted file mode 100644 index b880cf8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_5@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_6.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_6.png deleted file mode 100644 index dc995e9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_6.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_65@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_65@2x.webp deleted file mode 100644 index f059f0b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_65@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_65@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_65@3x.webp deleted file mode 100644 index b552067..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_65@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_66@2x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_66@2x.webp deleted file mode 100644 index 00f35e6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_66@2x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_66@3x.webp b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_66@3x.webp deleted file mode 100644 index a3a31a2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_66@3x.webp and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_6@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_6@2x.png deleted file mode 100644 index b951ec4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_6@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_6@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_6@3x.png deleted file mode 100644 index 0f0f028..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_6@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_7.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_7.png deleted file mode 100644 index 1db38b7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_7.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_7@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_7@2x.png deleted file mode 100644 index 16d646e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_7@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_7@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_7@3x.png deleted file mode 100644 index da10486..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_7@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_8.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_8.png deleted file mode 100644 index 8f34f96..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_8.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_8@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_8@2x.png deleted file mode 100644 index ad90708..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_8@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_8@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_8@3x.png deleted file mode 100644 index 5ae356c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_8@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_9.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_9.png deleted file mode 100644 index 004566c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_9.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_9@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_9@2x.png deleted file mode 100644 index 5d5c7a4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_9@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_9@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_9@3x.png deleted file mode 100644 index 2c38e61..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconDrive/default_action_drive_9@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_29@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_29@2x.png deleted file mode 100644 index 5b90e76..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_29@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_29@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_29@3x.png deleted file mode 100644 index fc5cc0e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_29@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_30@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_30@2x.png deleted file mode 100644 index 48a2bd3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_30@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_30@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_30@3x.png deleted file mode 100644 index f0046e3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_30@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_31@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_31@2x.png deleted file mode 100644 index ca44712..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_31@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_31@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_31@3x.png deleted file mode 100644 index e9c9924..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_31@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_32@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_32@2x.png deleted file mode 100644 index 54613cf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_32@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_32@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_32@3x.png deleted file mode 100644 index 9de3ecd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_32@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_33@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_33@2x.png deleted file mode 100644 index 2b20fb9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_33@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_33@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_33@3x.png deleted file mode 100644 index 4d40988..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_33@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_34@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_34@2x.png deleted file mode 100644 index ce7c4da..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_34@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_34@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_34@3x.png deleted file mode 100644 index c2026c5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_34@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_35@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_35@2x.png deleted file mode 100644 index 39b81c3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_35@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_35@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_35@3x.png deleted file mode 100644 index 508e2dd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_35@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_36@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_36@2x.png deleted file mode 100644 index 2ad707f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_36@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_36@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_36@3x.png deleted file mode 100644 index 56abb5b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_36@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_37@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_37@2x.png deleted file mode 100644 index 0f2f0f7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_37@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_37@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_37@3x.png deleted file mode 100644 index a810243..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_37@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_38@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_38@2x.png deleted file mode 100644 index 7b9ca08..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_38@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_38@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_38@3x.png deleted file mode 100644 index 9f65d0e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_38@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_39@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_39@2x.png deleted file mode 100644 index 5b90e76..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_39@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_39@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_39@3x.png deleted file mode 100644 index fc5cc0e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_39@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_40@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_40@2x.png deleted file mode 100644 index aa789e3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_40@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_40@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_40@3x.png deleted file mode 100644 index 22766fa..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_40@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_41@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_41@2x.png deleted file mode 100644 index 19ee8d1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_41@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_41@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_41@3x.png deleted file mode 100644 index 7c0663e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_41@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_42@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_42@2x.png deleted file mode 100644 index 404e1c2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_42@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_42@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_42@3x.png deleted file mode 100644 index d5ed8e2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_42@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_43@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_43@2x.png deleted file mode 100644 index 31e6534..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_43@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_43@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_43@3x.png deleted file mode 100644 index 664fe58..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_43@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_44@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_44@2x.png deleted file mode 100644 index 20a0b4c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_44@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_44@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_44@3x.png deleted file mode 100644 index 2dcc2a4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_44@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_45@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_45@2x.png deleted file mode 100644 index 48a2bd3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_45@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_45@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_45@3x.png deleted file mode 100644 index f0046e3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_45@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_46@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_46@2x.png deleted file mode 100644 index aa789e3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_46@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_46@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_46@3x.png deleted file mode 100644 index 22766fa..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_46@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_47@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_47@2x.png deleted file mode 100644 index ca44712..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_47@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_47@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_47@3x.png deleted file mode 100644 index e9c9924..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_47@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_48@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_48@2x.png deleted file mode 100644 index 9d84e13..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_48@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_48@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_48@3x.png deleted file mode 100644 index 3cd581f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_48@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_49@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_49@2x.png deleted file mode 100644 index 9d84e13..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_49@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_49@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_49@3x.png deleted file mode 100644 index 3cd581f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_49@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_50@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_50@2x.png deleted file mode 100644 index 39b81c3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_50@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_50@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_50@3x.png deleted file mode 100644 index 508e2dd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_50@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_51@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_51@2x.png deleted file mode 100644 index 31e6534..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_51@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_51@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_51@3x.png deleted file mode 100644 index 664fe58..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_51@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_52@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_52@2x.png deleted file mode 100644 index ce7c4da..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_52@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_52@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_52@3x.png deleted file mode 100644 index c2026c5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/images/turnIconTravel/default_action_travel_52@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviCompositeNaviConfirmView.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviCompositeNaviConfirmView.nib deleted file mode 100644 index ff83900..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviCompositeNaviConfirmView.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviCompositeNaviTipsView.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviCompositeNaviTipsView.nib deleted file mode 100644 index 86d2897..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviCompositeNaviTipsView.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviCompositePlanTipsView.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviCompositePlanTipsView.nib deleted file mode 100644 index aee4fb2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviCompositePlanTipsView.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviConfirmQuitToolBarView.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviConfirmQuitToolBarView.nib deleted file mode 100644 index 1dd76cb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviConfirmQuitToolBarView.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviDriveSetViewT.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviDriveSetViewT.nib deleted file mode 100644 index ab725e9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviDriveSetViewT.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviDriveView.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviDriveView.nib deleted file mode 100644 index 0f46105..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviDriveView.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviDriveViewComposite.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviDriveViewComposite.nib deleted file mode 100644 index c16938a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviDriveViewComposite.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRestrictionInfoTableViewCell.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRestrictionInfoTableViewCell.nib deleted file mode 100644 index 7e874d6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRestrictionInfoTableViewCell.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRestrictionInfoViewController.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRestrictionInfoViewController.nib deleted file mode 100644 index 7eeeae4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRestrictionInfoViewController.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRideView.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRideView.nib deleted file mode 100644 index f4782e2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRideView.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteDrivingStrategyPreferenceView.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteDrivingStrategyPreferenceView.nib deleted file mode 100644 index d31c821..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteDrivingStrategyPreferenceView.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteDrivingStrategyPreferenceViewMotor.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteDrivingStrategyPreferenceViewMotor.nib deleted file mode 100644 index 71095f2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteDrivingStrategyPreferenceViewMotor.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRoutePlanViewController.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRoutePlanViewController.nib deleted file mode 100644 index e9e0f71..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRoutePlanViewController.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRoutePlanWorkPlatformView.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRoutePlanWorkPlatformView.nib deleted file mode 100644 index 53a4001..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRoutePlanWorkPlatformView.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteSearchBarView.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteSearchBarView.nib deleted file mode 100644 index 911f3a5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteSearchBarView.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteSearchPOIViewController.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteSearchPOIViewController.nib deleted file mode 100644 index e0fd596..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteSearchPOIViewController.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteSearchTableViewCell.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteSearchTableViewCell.nib deleted file mode 100644 index 794fbd3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteSearchTableViewCell.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteSegmentCollectionReusableView.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteSegmentCollectionReusableView.nib deleted file mode 100644 index d6fd7fc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteSegmentCollectionReusableView.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteSegmentCollectionViewCell.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteSegmentCollectionViewCell.nib deleted file mode 100644 index 7f474ca..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteSegmentCollectionViewCell.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteSegmentHeaderCollectionReusableView.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteSegmentHeaderCollectionReusableView.nib deleted file mode 100644 index 5040f31..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteSegmentHeaderCollectionReusableView.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteWayPOIInputView.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteWayPOIInputView.nib deleted file mode 100644 index 3b8580a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRouteWayPOIInputView.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRoutesSelectCollectionViewCell.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRoutesSelectCollectionViewCell.nib deleted file mode 100644 index 75b6530..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviRoutesSelectCollectionViewCell.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCBottomInfo.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCBottomInfo.nib deleted file mode 100644 index 7a525fe..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCBottomInfo.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCBottomRoad.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCBottomRoad.nib deleted file mode 100644 index 2829993..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCBottomRoad.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCLBBtns.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCLBBtns.nib deleted file mode 100644 index 30ee57b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCLBBtns.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCLaneInfo.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCLaneInfo.nib deleted file mode 100644 index a8f8d3f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCLaneInfo.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCParallelRoadBtns.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCParallelRoadBtns.nib deleted file mode 100644 index 3cc522d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCParallelRoadBtns.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCRBBtns.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCRBBtns.nib deleted file mode 100644 index cdbac94..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCRBBtns.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCRTBtns.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCRTBtns.nib deleted file mode 100644 index bc6e745..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCRTBtns.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCSpeed.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCSpeed.nib deleted file mode 100644 index b063918..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCSpeed.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCTopInfo.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCTopInfo.nib deleted file mode 100644 index 3be8e8b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCTopInfo.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCTopInfoCross.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCTopInfoCross.nib deleted file mode 100644 index 1e167f7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCTopInfoCross.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCTrafficBar.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCTrafficBar.nib deleted file mode 100644 index 430c470..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviVCTrafficBar.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviWalkView.nib b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviWalkView.nib deleted file mode 100644 index f4782e2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/AMapNaviWalkView.nib and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/amap_navi_route_history_close@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/amap_navi_route_history_close@2x.png deleted file mode 100644 index 1977f10..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/amap_navi_route_history_close@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture.png deleted file mode 100644 index 9ea578a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_bad.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_bad.png deleted file mode 100644 index ca40537..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_bad.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_bad_unselected.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_bad_unselected.png deleted file mode 100644 index d3cb901..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_bad_unselected.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_green.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_green.png deleted file mode 100644 index 0e90911..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_green.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_green_unselected.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_green_unselected.png deleted file mode 100644 index 0787007..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_green_unselected.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_grey.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_grey.png deleted file mode 100644 index da910a3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_grey.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_no.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_no.png deleted file mode 100644 index c98fc4d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_no.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_no_unselected.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_no_unselected.png deleted file mode 100644 index ac7ff18..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_no_unselected.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_serious.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_serious.png deleted file mode 100644 index a9a8583..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_serious.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_serious_unselected.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_serious_unselected.png deleted file mode 100644 index 838d8b7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_serious_unselected.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_slow.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_slow.png deleted file mode 100644 index a178e0c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_slow.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_slow_unselected.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_slow_unselected.png deleted file mode 100644 index 52eb7a8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_slow_unselected.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_unselected.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_unselected.png deleted file mode 100644 index b49ff6b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/custtexture_unselected.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_common_route_endpoint_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_common_route_endpoint_normal@2x.png deleted file mode 100644 index 87df806..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_common_route_endpoint_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_common_route_endpoint_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_common_route_endpoint_normal@3x.png deleted file mode 100644 index 4e31a50..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_common_route_endpoint_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_common_route_endpoint_normal_1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_common_route_endpoint_normal_1@2x.png deleted file mode 100644 index 0eee897..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_common_route_endpoint_normal_1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_common_route_endpoint_normal_1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_common_route_endpoint_normal_1@3x.png deleted file mode 100644 index 39a3093..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_common_route_endpoint_normal_1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_common_route_startpoint_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_common_route_startpoint_normal@2x.png deleted file mode 100644 index 3912b3b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_common_route_startpoint_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_common_route_startpoint_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_common_route_startpoint_normal@3x.png deleted file mode 100644 index 779aaee..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_common_route_startpoint_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_fromtopoi_invalid_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_fromtopoi_invalid_normal@2x.png deleted file mode 100644 index b4ff71a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_fromtopoi_invalid_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_headerviewbtn_collapse@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_headerviewbtn_collapse@2x.png deleted file mode 100644 index b360e9e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_headerviewbtn_collapse@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_headerviewbtn_expansion@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_headerviewbtn_expansion@2x.png deleted file mode 100644 index 8962d6f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_headerviewbtn_expansion@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_homepage_history_bus@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_homepage_history_bus@2x.png deleted file mode 100644 index af406f9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_homepage_history_bus@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_poi_1_highlight@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_poi_1_highlight@2x.png deleted file mode 100644 index 9be707b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_poi_1_highlight@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_poi_1_highlight@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_poi_1_highlight@3x.png deleted file mode 100644 index 79ff4d5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_poi_1_highlight@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_poi_2_highlight@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_poi_2_highlight@2x.png deleted file mode 100644 index 7ef9b07..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_poi_2_highlight@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_poi_2_highlight@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_poi_2_highlight@3x.png deleted file mode 100644 index bf33b95..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_poi_2_highlight@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_poi_3_highlight@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_poi_3_highlight@2x.png deleted file mode 100644 index cf4d720..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_poi_3_highlight@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_poi_3_highlight@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_poi_3_highlight@3x.png deleted file mode 100644 index 43ca734..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_poi_3_highlight@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_sugg_subwayicon_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_sugg_subwayicon_normal@2x.png deleted file mode 100644 index 53a0103..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_sugg_subwayicon_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_sugg_tqueryicon_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_sugg_tqueryicon_normal@2x.png deleted file mode 100644 index 1d6e33d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_generalsearch_sugg_tqueryicon_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_a15_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_a15_normal@2x.png deleted file mode 100644 index 828ad51..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_a15_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_a15_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_a15_normal@3x.png deleted file mode 100644 index d58bfc6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_a15_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_a15_normal_dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_a15_normal_dark@2x.png deleted file mode 100644 index ac180d0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_a15_normal_dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_a1_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_a1_normal@2x.png deleted file mode 100644 index d3ad854..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_a1_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_a1_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_a1_normal@3x.png deleted file mode 100644 index 2c2efa7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_a1_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_blank_1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_blank_1@2x.png deleted file mode 100644 index c24529a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_blank_1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_blank_1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_blank_1@3x.png deleted file mode 100644 index 30220fb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_blank_1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_bluetooth_toast@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_bluetooth_toast@2x.png deleted file mode 100644 index 1e59c06..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_bluetooth_toast@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_bluetooth_toast@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_bluetooth_toast@3x.png deleted file mode 100644 index f60d6c2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_bluetooth_toast@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c11_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c11_normal@2x.png deleted file mode 100644 index 9179849..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c11_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c11_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c11_normal@3x.png deleted file mode 100644 index 7741008..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c11_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c16_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c16_normal@2x.png deleted file mode 100644 index ecd9810..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c16_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c16_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c16_normal@3x.png deleted file mode 100644 index 97e9fc4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c16_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c17_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c17_normal@2x.png deleted file mode 100644 index b418e57..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c17_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c17_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c17_normal@3x.png deleted file mode 100644 index 998ef69..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c17_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c27_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c27_normal@2x.png deleted file mode 100644 index 3c6f496..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c27_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c27_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c27_normal@3x.png deleted file mode 100644 index 67d6059..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c27_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c4_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c4_normal@2x.png deleted file mode 100644 index ce1b98a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c4_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c4_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c4_normal@3x.png deleted file mode 100644 index ba0cc32..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c4_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c4_selected@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c4_selected@2x.png deleted file mode 100644 index 3860200..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c4_selected@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c4_selected@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c4_selected@3x.png deleted file mode 100644 index e5c1f57..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c4_selected@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c5_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c5_normal@2x.png deleted file mode 100644 index f6cca1d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c5_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c5_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c5_normal@3x.png deleted file mode 100644 index 82e8906..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c5_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c6_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c6_normal@2x.png deleted file mode 100644 index fefc1d7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c6_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c6_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c6_normal@3x.png deleted file mode 100644 index 0bd0168..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_c6_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_mute_toast@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_mute_toast@2x.png deleted file mode 100644 index 42e0faa..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_mute_toast@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_mute_toast@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_mute_toast@3x.png deleted file mode 100644 index ad533d3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_mute_toast@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_voice_toast@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_voice_toast@2x.png deleted file mode 100644 index 9c09c81..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_voice_toast@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_voice_toast@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_voice_toast@3x.png deleted file mode 100644 index fa0e55f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_icon_voice_toast@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_layer_texture_roadclose_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_layer_texture_roadclose_normal@2x.png deleted file mode 100644 index 1fbb166..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_layer_texture_roadclose_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_loading@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_loading@2x.png deleted file mode 100644 index b55d1ca..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_loading@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_loading_dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_loading_dark@2x.png deleted file mode 100644 index f1c4506..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_loading_dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_loading_icon_c@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_loading_icon_c@2x.png deleted file mode 100644 index 9e28d82..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_loading_icon_c@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_loading_icon_c_dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_loading_icon_c_dark@2x.png deleted file mode 100644 index b5e2d58..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_loading_icon_c_dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_day.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_day.png deleted file mode 100644 index 3d77ba5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_day.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_night.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_night.png deleted file mode 100644 index 500151b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_night.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_quit_day.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_quit_day.png deleted file mode 100644 index 9df7aa3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_quit_day.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_quit_night.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_quit_night.png deleted file mode 100644 index 48aded2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_quit_night.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_ver_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_ver_normal@2x.png deleted file mode 100644 index d76cf31..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_ver_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_ver_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_ver_normal@3x.png deleted file mode 100644 index 819518e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_ver_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_ver_normal_highlighted@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_ver_normal_highlighted@2x.png deleted file mode 100644 index 170a886..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_ver_normal_highlighted@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_ver_normal_highlighted@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_ver_normal_highlighted@3x.png deleted file mode 100644 index d3d9cb3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_ver_normal_highlighted@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_ver_selected@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_ver_selected@2x.png deleted file mode 100644 index 25f7a8d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_ver_selected@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_ver_selected@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_ver_selected@3x.png deleted file mode 100644 index 6727ffb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_browse_ver_selected@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_btn_bg_day.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_btn_bg_day.png deleted file mode 100644 index 2902519..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_btn_bg_day.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_btn_bg_night.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_btn_bg_night.png deleted file mode 100644 index b84950d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_btn_bg_night.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_carlocation_compass@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_carlocation_compass@2x.png deleted file mode 100644 index 48db967..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_carlocation_compass@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_current_speed@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_current_speed@2x.png deleted file mode 100644 index 51a0fe9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_current_speed@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_current_speed@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_current_speed@3x.png deleted file mode 100644 index e7cf784..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_current_speed@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_gpssmartpos@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_gpssmartpos@2x.png deleted file mode 100644 index 95c4069..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_gpssmartpos@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_gpssmartpos@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_gpssmartpos@3x.png deleted file mode 100644 index 4b9fb64..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_gpssmartpos@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_gpsstrong@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_gpsstrong@2x.png deleted file mode 100644 index 2bc43eb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_gpsstrong@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_gpsstrong@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_gpsstrong@3x.png deleted file mode 100644 index 62439fd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_gpsstrong@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_gpsweak@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_gpsweak@2x.png deleted file mode 100644 index 52f393c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_gpsweak@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_gpsweak@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_gpsweak@3x.png deleted file mode 100644 index e51e2f8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_gpsweak@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_minus_day.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_minus_day.png deleted file mode 100644 index 2bb0a90..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_minus_day.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_minus_day_disabled.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_minus_day_disabled.png deleted file mode 100644 index 8a73a0b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_minus_day_disabled.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_minus_night.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_minus_night.png deleted file mode 100644 index c4f9710..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_minus_night.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_minus_night_disabled.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_minus_night_disabled.png deleted file mode 100644 index f24c6f4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_minus_night_disabled.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_mute_day.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_mute_day.png deleted file mode 100644 index 774a5d8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_mute_day.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_mute_night.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_mute_night.png deleted file mode 100644 index e509104..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_mute_night.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_new_location@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_new_location@2x.png deleted file mode 100644 index 7cfd948..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_new_location@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_new_location@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_new_location@3x.png deleted file mode 100644 index afcb7a6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_new_location@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_gpsweakinfo@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_gpsweakinfo@2x.png deleted file mode 100644 index 8480c7c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_gpsweakinfo@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_roadclosure_Normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_roadclosure_Normal@2x.png deleted file mode 100644 index 61449fc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_roadclosure_Normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_roadclosure_Normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_roadclosure_Normal@3x.png deleted file mode 100644 index 79f7b58..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_roadclosure_Normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_success_Normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_success_Normal@2x.png deleted file mode 100644 index 8bd5454..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_success_Normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_success_Normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_success_Normal@3x.png deleted file mode 100644 index 6ecd712..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_success_Normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_trafficcontrol_Normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_trafficcontrol_Normal@2x.png deleted file mode 100644 index 46c5135..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_trafficcontrol_Normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_trafficcontrol_Normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_trafficcontrol_Normal@3x.png deleted file mode 100644 index 50b1dc8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_trafficcontrol_Normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_trafficjam_Normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_trafficjam_Normal@2x.png deleted file mode 100644 index 9277b3b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_trafficjam_Normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_trafficjam_Normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_trafficjam_Normal@3x.png deleted file mode 100644 index a0423e0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_notification_trafficjam_Normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_plus_day.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_plus_day.png deleted file mode 100644 index 15125f9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_plus_day.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_plus_day_disabled.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_plus_day_disabled.png deleted file mode 100644 index 71d2643..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_plus_day_disabled.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_plus_night.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_plus_night.png deleted file mode 100644 index c173605..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_plus_night.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_plus_night_disabled.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_plus_night_disabled.png deleted file mode 100644 index 7c11938..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_plus_night_disabled.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_refresh@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_refresh@2x.png deleted file mode 100644 index 168bdab..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_refresh@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_refresh_day.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_refresh_day.png deleted file mode 100644 index 2443296..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_refresh_day.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_refresh_night.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_refresh_night.png deleted file mode 100644 index 6b1af96..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_refresh_night.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_aux_day@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_aux_day@2x.png deleted file mode 100644 index 6a01b46..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_aux_day@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_aux_day@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_aux_day@3x.png deleted file mode 100644 index 55963d2..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_aux_day@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_aux_night@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_aux_night@2x.png deleted file mode 100644 index c3e41ab..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_aux_night@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_aux_night@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_aux_night@3x.png deleted file mode 100644 index 1a54aaf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_aux_night@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_main_day@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_main_day@2x.png deleted file mode 100644 index af16a38..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_main_day@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_main_day@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_main_day@3x.png deleted file mode 100644 index 82c6556..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_main_day@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_main_night@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_main_night@2x.png deleted file mode 100644 index ce5eceb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_main_night@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_main_night@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_main_night@3x.png deleted file mode 100644 index 3b43fb0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_main_night@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_underElevated_day@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_underElevated_day@2x.png deleted file mode 100644 index f23df01..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_underElevated_day@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_underElevated_day@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_underElevated_day@3x.png deleted file mode 100644 index 74817d7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_underElevated_day@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_underElevated_night@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_underElevated_night@2x.png deleted file mode 100644 index f055ce6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_underElevated_night@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_underElevated_night@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_underElevated_night@3x.png deleted file mode 100644 index 614408c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_underElevated_night@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_upElevated_day@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_upElevated_day@2x.png deleted file mode 100644 index 61eaf3f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_upElevated_day@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_upElevated_day@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_upElevated_day@3x.png deleted file mode 100644 index 232838a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_upElevated_day@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_upElevated_night@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_upElevated_night@2x.png deleted file mode 100644 index ad89888..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_upElevated_night@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_upElevated_night@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_upElevated_night@3x.png deleted file mode 100644 index fc1e923..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_road_switch_upElevated_night@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_route_camera@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_route_camera@2x.png deleted file mode 100644 index 3d96bb9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_route_camera@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_route_camera@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_route_camera@3x.png deleted file mode 100644 index 4a98af8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_route_camera@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_route_trafficlight@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_route_trafficlight@2x.png deleted file mode 100644 index 390c47c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_route_trafficlight@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_nor.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_nor.png deleted file mode 100644 index 83a51fd..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_nor.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_nor@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_nor@2x.png deleted file mode 100644 index 9719145..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_nor@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_nor@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_nor@3x.png deleted file mode 100644 index 0873054..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_nor@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_nor_night.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_nor_night.png deleted file mode 100644 index 78dcc8a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_nor_night.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_nor_night@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_nor_night@2x.png deleted file mode 100644 index 78dcc8a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_nor_night@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_nor_night@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_nor_night@3x.png deleted file mode 100644 index a27c5ce..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_nor_night@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_sel.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_sel.png deleted file mode 100644 index e91992b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_sel.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_sel@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_sel@2x.png deleted file mode 100644 index e91992b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_sel@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_sel@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_sel@3x.png deleted file mode 100644 index f1011ee..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_sel@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_sel_night.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_sel_night.png deleted file mode 100644 index 63572d7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_sel_night.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_sel_night@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_sel_night@2x.png deleted file mode 100644 index 63572d7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_sel_night@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_sel_night@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_sel_night@3x.png deleted file mode 100644 index c7f69ba..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_set_btnbg_sel_night@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_charge_gray@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_charge_gray@2x.png deleted file mode 100644 index 12a8738..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_charge_gray@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_charge_gray_1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_charge_gray_1@2x.png deleted file mode 100644 index 34142ed..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_charge_gray_1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_charge_gray_2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_charge_gray_2@2x.png deleted file mode 100644 index 756b60e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_charge_gray_2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_charge_light@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_charge_light@2x.png deleted file mode 100644 index 2f86be7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_charge_light@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_charge_light_2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_charge_light_2@2x.png deleted file mode 100644 index f653489..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_charge_light_2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_congestion_gray@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_congestion_gray@2x.png deleted file mode 100644 index 2684d0a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_congestion_gray@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_congestion_gray_1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_congestion_gray_1@2x.png deleted file mode 100644 index 142d90b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_congestion_gray_1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_congestion_gray_2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_congestion_gray_2@2x.png deleted file mode 100644 index d422ae4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_congestion_gray_2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_congestion_light@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_congestion_light@2x.png deleted file mode 100644 index 03b4906..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_congestion_light@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_congestion_light_2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_congestion_light_2@2x.png deleted file mode 100644 index 64292d9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_congestion_light_2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_hightway_gray@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_hightway_gray@2x.png deleted file mode 100644 index 55deb92..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_hightway_gray@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_hightway_gray_1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_hightway_gray_1@2x.png deleted file mode 100644 index 3b2a47c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_hightway_gray_1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_hightway_gray_2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_hightway_gray_2@2x.png deleted file mode 100644 index 5e28969..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_hightway_gray_2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_hightway_light@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_hightway_light@2x.png deleted file mode 100644 index d786c4c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_hightway_light@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_hightway_light_2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_hightway_light_2@2x.png deleted file mode 100644 index 5461d3e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_avoid_hightway_light_2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_first_hightway_gray@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_first_hightway_gray@2x.png deleted file mode 100644 index 9065da1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_first_hightway_gray@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_first_hightway_gray_1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_first_hightway_gray_1@2x.png deleted file mode 100644 index e9ab0a5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_first_hightway_gray_1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_first_hightway_gray_2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_first_hightway_gray_2@2x.png deleted file mode 100644 index b1d01d7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_first_hightway_gray_2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_first_hightway_light@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_first_hightway_light@2x.png deleted file mode 100644 index 2671651..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_first_hightway_light@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_first_hightway_light_2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_first_hightway_light_2@2x.png deleted file mode 100644 index 7fc8512..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_first_hightway_light_2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_gray@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_gray@2x.png deleted file mode 100644 index 122fcad..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_gray@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_gray@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_gray@3x.png deleted file mode 100644 index 5cfc5d8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_gray@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_gray_1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_gray_1@2x.png deleted file mode 100644 index d1183cb..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_gray_1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_gray_1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_gray_1@3x.png deleted file mode 100644 index 953552f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_gray_1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_gray_2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_gray_2@2x.png deleted file mode 100644 index 63836f4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_gray_2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_gray_2@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_gray_2@3x.png deleted file mode 100644 index c9f65c5..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_gray_2@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_light@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_light@2x.png deleted file mode 100644 index 34a004f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_light@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_light@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_light@3x.png deleted file mode 100644 index 3e56997..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_light@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_light_2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_light_2@2x.png deleted file mode 100644 index 59d9e46..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_light_2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_light_2@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_light_2@3x.png deleted file mode 100644 index 357d11f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_motor_default_light_2@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_search@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_search@2x.png deleted file mode 100644 index 4d0551f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_setting_search@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_speed_background_normal_Normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_speed_background_normal_Normal@2x.png deleted file mode 100644 index 2f05c8b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_speed_background_normal_Normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_speed_background_normal_Normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_speed_background_normal_Normal@3x.png deleted file mode 100644 index 203647f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_speed_background_normal_Normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_traffic_day_closed.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_traffic_day_closed.png deleted file mode 100644 index 37dd65c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_traffic_day_closed.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_traffic_day_opened.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_traffic_day_opened.png deleted file mode 100644 index 715f81a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_traffic_day_opened.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_traffic_night_closed.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_traffic_night_closed.png deleted file mode 100644 index 3d6dc77..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_traffic_night_closed.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_traffic_night_opened.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_traffic_night_opened.png deleted file mode 100644 index 9cef639..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_traffic_night_opened.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_trafficbar_cursor@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_trafficbar_cursor@2x.png deleted file mode 100644 index cf0d167..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_trafficbar_cursor@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_trafficbar_cursor@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_trafficbar_cursor@3x.png deleted file mode 100644 index bcc2084..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_trafficbar_cursor@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_close_day.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_close_day.png deleted file mode 100644 index 6dfd5cc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_close_day.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_close_night.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_close_night.png deleted file mode 100644 index fa75fc9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_close_night.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_detail_click_day@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_detail_click_day@2x.png deleted file mode 100644 index 31cfed9..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_detail_click_day@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_detail_click_day@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_detail_click_day@3x.png deleted file mode 100644 index 630cf35..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_detail_click_day@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_detail_click_night@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_detail_click_night@2x.png deleted file mode 100644 index 643cb7c..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_detail_click_night@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_detail_click_night@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_detail_click_night@3x.png deleted file mode 100644 index bbad635..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_detail_click_night@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_detail_day@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_detail_day@2x.png deleted file mode 100644 index 8242ff1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_detail_day@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_detail_day@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_detail_day@3x.png deleted file mode 100644 index 1a1026a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_detail_day@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_detail_night@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_detail_night@2x.png deleted file mode 100644 index a47de16..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_detail_night@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_detail_night@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_detail_night@3x.png deleted file mode 100644 index 6b39ff0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_detail_night@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_mute_click@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_mute_click@2x.png deleted file mode 100644 index fb6a04f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_mute_click@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_mute_click@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_mute_click@3x.png deleted file mode 100644 index b59e0d1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_mute_click@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_mute_day@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_mute_day@2x.png deleted file mode 100644 index 3501bb1..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_mute_day@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_mute_day@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_mute_day@3x.png deleted file mode 100644 index ad52faf..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_mute_day@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_mute_night@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_mute_night@2x.png deleted file mode 100644 index 44b8495..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_mute_night@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_mute_night@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_mute_night@3x.png deleted file mode 100644 index b93a7b8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_mute_night@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_open_day.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_open_day.png deleted file mode 100644 index e0090ba..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_open_day.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_open_night.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_open_night.png deleted file mode 100644 index 5d6df95..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_open_night.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_simple_click_day@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_simple_click_day@2x.png deleted file mode 100644 index 038d13e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_simple_click_day@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_simple_click_day@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_simple_click_day@3x.png deleted file mode 100644 index 31608be..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_simple_click_day@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_simple_click_night@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_simple_click_night@2x.png deleted file mode 100644 index e091693..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_simple_click_night@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_simple_click_night@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_simple_click_night@3x.png deleted file mode 100644 index 344e637..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_simple_click_night@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_simple_day@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_simple_day@2x.png deleted file mode 100644 index 945c9e8..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_simple_day@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_simple_day@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_simple_day@3x.png deleted file mode 100644 index 7e30ab7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_simple_day@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_simple_night@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_simple_night@2x.png deleted file mode 100644 index bd1a8d6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_simple_night@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_simple_night@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_simple_night@3x.png deleted file mode 100644 index b44171f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_navi_voice_simple_night@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_-1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_-1@2x.png deleted file mode 100644 index 5da8052..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_-1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_-1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_-1@3x.png deleted file mode 100644 index 99b1ac7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_-1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_0@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_0@2x.png deleted file mode 100644 index cdb4a04..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_0@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_0@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_0@3x.png deleted file mode 100644 index dcc0c79..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_0@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_10@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_10@2x.png deleted file mode 100644 index 98432ab..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_10@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_10@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_10@3x.png deleted file mode 100644 index 779cefc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_10@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_11@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_11@2x.png deleted file mode 100644 index dc903d3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_11@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_11@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_11@3x.png deleted file mode 100644 index 9fa76dc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_11@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_12@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_12@2x.png deleted file mode 100644 index d3a18d7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_12@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_12@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_12@3x.png deleted file mode 100644 index 456c3c6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_12@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_13@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_13@2x.png deleted file mode 100644 index 08be37a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_13@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_13@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_13@3x.png deleted file mode 100644 index bd806f6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_13@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_14@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_14@2x.png deleted file mode 100644 index 705b48f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_14@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_14@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_14@3x.png deleted file mode 100644 index 1c7995e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_14@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_15@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_15@2x.png deleted file mode 100644 index 3dccf97..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_15@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_15@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_15@3x.png deleted file mode 100644 index 75cba0e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_15@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_16@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_16@2x.png deleted file mode 100644 index b8c8b2d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_16@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_16@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_16@3x.png deleted file mode 100644 index 1ab7e54..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_16@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_1@2x.png deleted file mode 100644 index cdb4a04..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_1@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_1@3x.png deleted file mode 100644 index dcc0c79..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_1@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_2@2x.png deleted file mode 100644 index 0df2e18..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_2@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_2@3x.png deleted file mode 100644 index 6eade3a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_2@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_3@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_3@2x.png deleted file mode 100644 index 54ad63a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_3@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_3@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_3@3x.png deleted file mode 100644 index df4918b..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_3@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_4@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_4@2x.png deleted file mode 100644 index fe04330..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_4@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_4@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_4@3x.png deleted file mode 100644 index 36ad99f..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_4@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_5@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_5@2x.png deleted file mode 100644 index 18003b7..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_5@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_5@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_5@3x.png deleted file mode 100644 index c35d37d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_5@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_6@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_6@2x.png deleted file mode 100644 index 4323005..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_6@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_6@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_6@3x.png deleted file mode 100644 index 7f6d25a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_6@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_7@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_7@2x.png deleted file mode 100644 index 544bf22..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_7@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_7@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_7@3x.png deleted file mode 100644 index 4b4b51d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_7@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_8@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_8@2x.png deleted file mode 100644 index baa487e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_8@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_8@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_8@3x.png deleted file mode 100644 index e60e5c0..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_8@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_9@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_9@2x.png deleted file mode 100644 index 3810185..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_9@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_9@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_9@3x.png deleted file mode 100644 index dcc0c79..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_car_action_9@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_ferry_normal_Normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_ferry_normal_Normal@2x.png deleted file mode 100644 index cef6e10..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_ferry_normal_Normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_ferry_normal_Normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_ferry_normal_Normal@3x.png deleted file mode 100644 index c244577..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_ferry_normal_Normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_forbidden_0@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_forbidden_0@2x.png deleted file mode 100644 index c785478..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_forbidden_0@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_forbidden_1@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_forbidden_1@2x.png deleted file mode 100644 index 70f5b6e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_forbidden_1@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_forbidden_2@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_forbidden_2@2x.png deleted file mode 100644 index 443535a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_forbidden_2@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_forbidden_3@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_forbidden_3@2x.png deleted file mode 100644 index 54d9317..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_forbidden_3@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_forbidden_4@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_forbidden_4@2x.png deleted file mode 100644 index c312745..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_forbidden_4@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_midtop_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_midtop_normal@2x.png deleted file mode 100644 index 8b79e2e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_midtop_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_midtop_normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_midtop_normal@3x.png deleted file mode 100644 index 78af723..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_midtop_normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_roadfacility_81@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_roadfacility_81@2x.png deleted file mode 100644 index 3dbdc66..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_roadfacility_81@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_roadfacility_82@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_roadfacility_82@2x.png deleted file mode 100644 index 38a22d6..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_roadfacility_82@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_walk_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_walk_normal@2x.png deleted file mode 100644 index 0bcff37..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_map_walk_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_pathmain_addPOI_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_pathmain_addPOI_normal@2x.png deleted file mode 100644 index 985fb75..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_pathmain_addPOI_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_pathmain_addPOI_normal_dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_pathmain_addPOI_normal_dark@2x.png deleted file mode 100644 index bbd8246..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_pathmain_addPOI_normal_dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_pathmain_changePOI_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_pathmain_changePOI_normal@2x.png deleted file mode 100644 index 3994c43..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_pathmain_changePOI_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_pathmain_changePOI_normal_dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_pathmain_changePOI_normal_dark@2x.png deleted file mode 100644 index 9b22332..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_pathmain_changePOI_normal_dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_pathmain_deletePOI_normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_pathmain_deletePOI_normal@2x.png deleted file mode 100644 index 933be7d..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_pathmain_deletePOI_normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_pathmain_deletePOI_normal_dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_pathmain_deletePOI_normal_dark@2x.png deleted file mode 100644 index 3b6ab06..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_pathmain_deletePOI_normal_dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_restrict_select_arror_Normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_restrict_select_arror_Normal@2x.png deleted file mode 100644 index 07f0c0e..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_restrict_select_arror_Normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_restrict_select_arror_Normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_restrict_select_arror_Normal@3x.png deleted file mode 100644 index 24f0c5a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_restrict_select_arror_Normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_unavoidlimit_close_normal_Normal@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_unavoidlimit_close_normal_Normal@2x.png deleted file mode 100644 index 27f8548..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_unavoidlimit_close_normal_Normal@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_unavoidlimit_close_normal_Normal@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_unavoidlimit_close_normal_Normal@3x.png deleted file mode 100644 index 53d212a..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_path_unavoidlimit_close_normal_Normal@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_route_endpoint_navi@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_route_endpoint_navi@2x.png deleted file mode 100644 index 10882d4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_route_endpoint_navi@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_route_endpoint_navi@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_route_endpoint_navi@3x.png deleted file mode 100644 index 1b316b3..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_route_endpoint_navi@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_route_network_fail@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_route_network_fail@2x.png deleted file mode 100644 index 22a6e73..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_route_network_fail@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_route_network_fail_dark@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_route_network_fail_dark@2x.png deleted file mode 100644 index 2bc17dc..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_route_network_fail_dark@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_route_startpoint_navi@2x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_route_startpoint_navi@2x.png deleted file mode 100644 index 0b24ae4..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_route_startpoint_navi@2x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_route_startpoint_navi@3x.png b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_route_startpoint_navi@3x.png deleted file mode 100644 index 0752014..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle/nibs/default_route_startpoint_navi@3x.png and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviBaseManager.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviBaseManager.h deleted file mode 100644 index 82b11b5..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviBaseManager.h +++ /dev/null @@ -1,124 +0,0 @@ -// -// AMapNaviBaseManager.h -// AMapNaviKit -// -// Created by 刘博 on 16/1/12. -// Copyright © 2016年 Amap. All rights reserved. -// - -#import "AMapNaviCommonObj.h" - -NS_ASSUME_NONNULL_BEGIN - -@class CLLocation; -@class AMapNaviInfo; -@class AMapNaviRoute; -@class AMapNaviLocation; -@class AMapNaviStatisticsInfo; -@class AMapNaviRouteGroup; - -///注意:该类为导航控制器基类,请不要直接使用 -@interface AMapNaviBaseManager : NSObject - -#pragma mark - Navi Mode - -///当前导航模式,参考 AMapNaviMode . -@property (nonatomic, readonly) AMapNaviMode naviMode; - -#pragma mark - Options - -///是否在导航过程中让屏幕常亮,默认YES. -@property (nonatomic, assign) BOOL screenAlwaysBright; - -///指定定位是否会被系统自动暂停。默认为YES。 -@property(nonatomic, assign) BOOL pausesLocationUpdatesAutomatically; - -///是否允许后台定位.默认为NO(只在iOS 9.0及以后版本起作用).注意:设置为YES的时候必须保证 Background Modes 中的 Location updates 处于选中状态,否则会抛出异常. -@property (nonatomic, assign) BOOL allowsBackgroundLocationUpdates; - -#pragma mark - External Location - -///是否采用外部传入定位信息.注意:默认NO. -@property (nonatomic, assign) BOOL enableExternalLocation; - -///外部传入定位信息(enableExternalLocation为YES时有效).该方法坐标需使用WGS84坐标系. -@property (nonatomic, copy) CLLocation *externalLocation; - -///是否使用内置播放器进行导航播报, 如果为YES,就是由导航SDK来播报导航信息. 默认为NO. since 5.5.0 -@property (nonatomic, assign) BOOL isUseInternalTTS; - -/** - * @brief 设置外部传入定位的信息 - * @param externalLocation 外部传入的定位信息 - * @param isAMapCoordinate 外部传入的坐标是否采用高德坐标,YES表示采用高德坐标(GCJ02),NO表示使用WGS84坐标. - */ -- (void)setExternalLocation:(CLLocation *)externalLocation isAMapCoordinate:(BOOL)isAMapCoordinate; - -#pragma mark - 实时导航 & 模拟导航 - -/** - * @brief 设置模拟导航的速度,默认60 - * @param speed 模拟导航的速度(范围:[10,120]; 单位:km/h) - */ -- (void)setEmulatorNaviSpeed:(int)speed; - -/** - * @brief 开始模拟导航. 注意:必须在路径规划成功的情况下,才能够开始模拟导航 - * @return 是否成功 - */ -- (BOOL)startEmulatorNavi; - -/** - * @brief 开始实时导航. 注意:必须在路径规划成功的情况下,才能够开始实时导航 - * @return 是否成功 - */ -- (BOOL)startGPSNavi; - -/** - * @brief 开始模拟导航. 注意:必须传入导航的路线组合routeGroup,才能够开始模拟导航. since 7.7.0 - * @param routeGroup 本次导航需要传入的路线组合 - * @return 是否成功 - */ -- (BOOL)startEmulatorNavi:(AMapNaviRouteGroup *)routeGroup; - -/** - * @brief 开始实时导航. 注意:必须传入导航的路线组合routeGroup,才能够开始实时导航. since 7.7.0 - * @param routeGroup 本次导航需要传入的路线组合 - * @return 是否成功 - */ -- (BOOL)startGPSNavi:(AMapNaviRouteGroup *)routeGroup; - -/** - * @brief 停止导航,包含实时导航和模拟导航 - */ -- (void)stopNavi; - -/** - * @brief 暂停导航,包含实时导航和模拟导航 - */ -- (void)pauseNavi; - -/** - * @brief 继续导航,包含实时导航和模拟导航 - */ -- (void)resumeNavi; - -#pragma mark - Manual - -/** - * @brief 实时导航中手动触发一次信息播报. 注意:该接口仅支持驾车和步行,骑行不支持此功能. - * @return 是否成功 - */ -- (BOOL)readNaviInfoManual; - - -#pragma mark - Navi Guide - -/** - * @brief 获取导航路线的路线详情列表 - * @return 导航路线的路线详情列表,参考 AMapNaviGuide 类. - */ -- (nullable NSArray *)getNaviGuideList __attribute__((deprecated("已废弃,请使用 AMapNaviRoute 中的 guideGroups 替代 since 7.5.0"))); -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviCommonObj.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviCommonObj.h deleted file mode 100644 index 852e096..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviCommonObj.h +++ /dev/null @@ -1,1267 +0,0 @@ -// -// AMapNaviCommonObj.h -// AMapNaviKit -// -// Created by AutoNavi on 14-7-1. -// Copyright (c) 2014年 Amap. All rights reserved. -// - -#import -@class AMapNaviRoute; - -///AMapNavi的错误Domain -extern NSString * const AMapNaviErrorDomain; - -///AMapNavi的错误信息 -typedef NS_ENUM(NSInteger, AMapNaviError) -{ - AMapNaviUnknowError = -1, ///< 未知错误 - AMapNaviErrorNoGPSPermission = -2, ///< 没有定位权限 - AMapNaviErrorNoFullGPSAccuracyPermission = -3, ///< 没有定位的精确位置权限 -}; - -///导航模式 -typedef NS_ENUM(NSInteger, AMapNaviMode) -{ - AMapNaviModeNone = 0, ///< 没有开始导航 - AMapNaviModeGPS, ///< 实时导航 - AMapNaviModeEmulator, ///< 模拟导航 -}; - -///导航界面跟随模式 -typedef NS_ENUM(NSInteger, AMapNaviViewTrackingMode) -{ - AMapNaviViewTrackingModeMapNorth = 0, ///< 0 正北朝上 - AMapNaviViewTrackingModeCarNorth, ///< 1 车头朝上 -}; - -///驾车导航界面显示模式 -typedef NS_ENUM(NSInteger, AMapNaviDriveViewShowMode) -{ - AMapNaviDriveViewShowModeCarPositionLocked = 1, ///< 锁车状态 - AMapNaviDriveViewShowModeOverview = 2, ///< 全览状态 - AMapNaviDriveViewShowModeNormal = 3, ///< 普通状态 -}; - -///骑步行算路策略. since 7.5.0 -typedef NS_ENUM(NSInteger, AMapNaviTravelStrategy) -{ - AMapNaviTravelStrategySingleDefault = 1000, ///< 算路支持一条 - AMapNaviTravelStrategyMultipleDefault = 1001, ///< 算路支持多条 -}; - -///驾车、货车路径规划策略. -typedef NS_ENUM(NSInteger, AMapNaviDrivingStrategy) -{ - AMapNaviDrivingStrategySingleInvalid = -1, ///< -1 非法 - AMapNaviDrivingStrategySingleDefault = 0, ///< 0 单路径: 默认,速度优先(常规最快) - AMapNaviDrivingStrategySingleAvoidCost = 1, ///< 1 单路径: 避免收费 - AMapNaviDrivingStrategySinglePrioritiseDistance = 2, ///< 2 单路径: 距离优先 - AMapNaviDrivingStrategySingleAvoidExpressway = 3, ///< 3 单路径: 不走快速路 - AMapNaviDrivingStrategySingleAvoidCongestion = 4, ///< 4 单路径: 躲避拥堵 - AMapNaviDrivingStrategySinglePrioritiseSpeedCostDistance = 5, ///< 5 单路径: 速度优先 & 费用优先 & 距离优先 - AMapNaviDrivingStrategySingleAvoidHighway = 6, ///< 6 单路径: 不走高速 - AMapNaviDrivingStrategySingleAvoidHighwayAndCost = 7, ///< 7 单路径: 不走高速 & 避免收费 - AMapNaviDrivingStrategySingleAvoidCostAndCongestion = 8, ///< 8 单路径: 避免收费 & 躲避拥堵 - AMapNaviDrivingStrategySingleAvoidHighwayAndCostAndCongestion = 9, ///< 9 单路径: 不走高速 & 避免收费 & 躲避拥堵 - - AMapNaviDrivingStrategyMultipleDefault = 10, ///< 10 多路径: 默认,速度优先(避让拥堵+速度优先+避免收费) - AMapNaviDrivingStrategyMultipleShortestTimeDistance = 11, ///< 11 多路径: 时间最短 & 距离最短 - AMapNaviDrivingStrategyMultipleAvoidCongestion = 12, ///< 12 多路径: 躲避拥堵 - AMapNaviDrivingStrategyMultipleAvoidHighway = 13, ///< 13 多路径: 不走高速 - AMapNaviDrivingStrategyMultipleAvoidCost = 14, ///< 14 多路径: 避免收费 - AMapNaviDrivingStrategyMultipleAvoidHighwayAndCongestion = 15, ///< 15 多路径: 不走高速 & 躲避拥堵 - AMapNaviDrivingStrategyMultipleAvoidHighwayAndCost = 16, ///< 16 多路径: 不走高速 & 避免收费 - AMapNaviDrivingStrategyMultipleAvoidCostAndCongestion = 17, ///< 17 多路径: 避免收费 & 躲避拥堵 - AMapNaviDrivingStrategyMultipleAvoidHighwayAndCostAndCongestion = 18, ///< 18 多路径: 不走高速 & 避免收费 & 躲避拥堵 - AMapNaviDrivingStrategyMultiplePrioritiseHighway = 19, ///< 19 多路径: 高速优先 - AMapNaviDrivingStrategyMultiplePrioritiseHighwayAvoidCongestion = 20, ///< 20 多路径: 高速优先 & 躲避拥堵 - - AMapNaviMotorStrategyMultipleDefault = 2001, ///< 2001 针对摩托车多路径: 默认 since 8.0.0 - AMapNaviMotorStrategyMultipleAvoidHighway = 2002, ///< 2002 针对摩托车多路径: 不走高速 since 8.0.0 - AMapNaviMotorStrategyMultiplePrioritiseHighway = 2003, ///< 2003 针对摩托车多路径: 高速优先 since 8.0.0 - AMapNaviMotorStrategyMultipleAvoidCost = 2004, ///< 2004 针对摩托车多路径: 避免收费 since 8.0.0 -}; - -///路径计算状态 -typedef NS_ENUM(NSInteger, AMapNaviCalcRouteState) -{ - AMapNaviCalcRouteStateEnvFailed = 0, ///< 0 环境初始化错误 - AMapNaviCalcRouteStateSucceed = 1, ///< 1 路径计算成功 - AMapNaviCalcRouteStateNetworkError = 2, ///< 2 网络失败 - AMapNaviCalcRouteStateStartPointError = 3, ///< 3 起点错误 - AMapNaviCalcRouteStateProtocolError = 4, ///< 4 协议解析错误 - AMapNaviCalcRouteStateCallCenterError = 5, ///< 5 呼叫中心错误 - AMapNaviCalcRouteStateEndPointError = 6, ///< 6 终点错误 - AMapNaviCalcRouteStateEncodeFalse = 7, ///< 7 服务端编码错误 - AMapNaviCalcRouteStateLackPreview = 8, ///< 8 数据缺乏预览数据 - AMapNaviCalcRouteStateDataBufError = 9, ///< 9 数据格式错误 - AMapNaviCalcRouteStateStartRouteError = 10, ///< 10 没有找到通向起点的道路 - AMapNaviCalcRouteStateEndRouteError = 11, ///< 11 没有找到通向终点的道路 - AMapNaviCalcRouteStatePassRouteError = 12, ///< 12 没有找到通向途经点的道路 - AMapNaviCalcRouteStateRouteFail = 13, ///< 13 算路失败(未知错误) - AMapNaviCalcRouteStateDistanceTooLong = 19, ///< 19 起点/终点/途经点的距离太长 - AMapNaviCalcRouteStatePassPointError = 21, ///< 21 途经点错误 - AMapNaviCalcRouteStateHaveNewCalcTaskWorking = 2999, ///< 2999 有新的算路任务进行中导致本次算路失败 - AMapNaviCalcRouteStateCLAuthorizationStatusDenied = 3000, ///< 3000 无定位权限 - AMapNaviCalcRouteStateCLAuthorizationReducedAccuracy = 3001,///< 3001 无定位的精确位置权限 -}; - -///导航段转向图标类型 -typedef NS_ENUM(NSInteger, AMapNaviIconType) -{ - AMapNaviIconTypeNone = 0, ///< 0 无定义 - AMapNaviIconTypeDefault, ///< 1 车图标 - AMapNaviIconTypeLeft, ///< 2 左转图标 - AMapNaviIconTypeRight, ///< 3 右转图标 - AMapNaviIconTypeLeftFront, ///< 4 左前方图标 - AMapNaviIconTypeRightFront, ///< 5 右前方图标 - AMapNaviIconTypeLeftBack, ///< 6 左后方图标 - AMapNaviIconTypeRightBack, ///< 7 右后方图标 - AMapNaviIconTypeLeftAndAround, ///< 8 左转掉头图标 - AMapNaviIconTypeStraight, ///< 9 直行图标 - AMapNaviIconTypeArrivedWayPoint, ///< 10 到达途经点图标 - AMapNaviIconTypeEnterRoundabout, ///< 11 进入环岛图标 - AMapNaviIconTypeOutRoundabout, ///< 12 驶出环岛图标 - AMapNaviIconTypeArrivedServiceArea, ///< 13 到达服务区图标 - AMapNaviIconTypeArrivedTollGate, ///< 14 到达收费站图标 - AMapNaviIconTypeArrivedDestination, ///< 15 到达目的地图标 - AMapNaviIconTypeArrivedTunnel, ///< 16 进入隧道图标 - AMapNaviIconTypeEntryLeftRing, ///< 17 进入环岛图标,左侧通行地区的顺时针环岛 - AMapNaviIconTypeLeaveLeftRing, ///< 18 驶出环岛图标,左侧通行地区的顺时针环岛 - AMapNaviIconTypeUTurnRight, ///< 19 右转掉头图标,左侧通行地区的掉头 - AMapNaviIconTypeSpecialContinue, ///< 20 顺行图标(和直行有区别,顺行图标带有虚线) - AMapNaviIconTypeEntryRingLeft, ///< 21 标准小环岛 绕环岛左转,右侧通行地区的逆时针环岛 - AMapNaviIconTypeEntryRingRight, ///< 22 标准小环岛 绕环岛右转,右侧通行地区的逆时针环岛 - AMapNaviIconTypeEntryRingContinue, ///< 23 标准小环岛 绕环岛直行,右侧通行地区的逆时针环岛 - AMapNaviIconTypeEntryRingUTurn, ///< 24 标准小环岛 绕环岛调头,右侧通行地区的逆时针环岛 - AMapNaviIconTypeEntryLeftRingLeft, ///< 25 标准小环岛 绕环岛左转,左侧通行地区的顺时针环岛 - AMapNaviIconTypeEntryLeftRingRight, ///< 26 标准小环岛 绕环岛右转,左侧通行地区的顺时针环岛 - AMapNaviIconTypeEntryLeftRingContinue, ///< 27 标准小环岛 绕环岛直行,左侧通行地区的顺时针环岛 - AMapNaviIconTypeEntryLeftRingUTurn, ///< 28 标准小环岛 绕环岛调头,左侧通行地区的顺时针环岛 - AMapNaviIconTypeCrosswalk, ///< 29 通过人行横道图标 - AMapNaviIconTypeFlyover, ///< 30 通过过街天桥图标 - AMapNaviIconTypeUnderpass, ///< 31 通过地下通道图标 - AMapNaviIconTypeSquare, ///< 32 通过广场图标 - AMapNaviIconTypePark, ///< 33 通过公园图标 - AMapNaviIconTypeStaircase, ///< 34 通过扶梯图标 - AMapNaviIconTypeLift, ///< 35 通过直梯图标 - AMapNaviIconTypeCableway, ///< 36 通过索道图标 - AMapNaviIconTypeOverheadPassage, ///< 37 通过空中通道图标 - AMapNaviIconTypePassage, ///< 38 通过建筑物穿越通道图标 - AMapNaviIconTypeWalks, ///< 39 通过行人道路图标 - AMapNaviIconTypeCruises, ///< 40 通过游船路线图标 - AMapNaviIconTypeSightseeingbus, ///< 41 通过观光车路线图标 - AMapNaviIconTypeSlip, ///< 42 通过滑道图标 - AMapNaviIconTypeStair, ///< 43 通过阶梯图标 - AMapNaviIconTypeSlope, ///< 44 通过斜坡图标 - AMapNaviIconTypeBridge, ///< 45 通过桥图标 - AMapNaviIconTypeFerryboat, ///< 46 通过渡轮图标 - AMapNaviIconTypeSubway, ///< 47 通过地铁图标 - AMapNaviIconTypeEnterBuilding, ///< 48 进入建筑物图标 - AMapNaviIconTypeLeaveBuilding, ///< 49 离开建筑物图标 - AMapNaviIconTypeByElevator, ///< 50 电梯换层图标 - AMapNaviIconTypeByStair, ///< 51 楼梯换层图标 - AMapNaviIconTypeEscalator, ///< 52 扶梯换层图标 - AMapNaviIconTypeLowTrafficCross, ///< 53 非导航段通过红绿灯路口图标 - AMapNaviIconTypeLowCross, ///< 54 非导航段通过普通路口图标 - AMapNaviIconTypeMergeLeft = 65, ///< 65 靠左图标 since 9.0.0 - AMapNaviIconTypeMergeRight = 66, ///< 66 靠右图标 since 9.0.0 -}; - -///导航播报类型. -typedef NS_ENUM(NSInteger, AMapNaviSoundType) -{ - AMapNaviSoundTypeDefault = 0, ///< 默认播报 - AMapNaviSoundTypeNavigationStart = 3016, ///< 开始导航 since 7.8.0 - AMapNaviSoundTypeNavigationEnd = 3017, ///< 到达目的地 since 7.8.0 - AMapNaviSoundTypeYaw = 3004, ///< 偏航播报 since 7.9.0 - AMapNaviSoundTypeInterrupt = 99999, ///< 打断类型(播报内容为空),表示下一句播报很重要,可能会打断前句 since 7.8.0 -}; - -///非导航状态电子眼播报类型 -typedef NS_ENUM(NSInteger, AMapNaviDetectedMode) -{ - AMapNaviDetectedModeNone = 0, ///< 0 关闭所有 - AMapNaviDetectedModeCamera, ///< 1 仅电子眼 - AMapNaviDetectedModeSpecialRoad, ///< 2 仅特殊道路设施 - AMapNaviDetectedModeCameraAndSpecialRoad, ///< 3 电子眼和特殊道路设施 -}; - -///AMapNaviLink的道路类型 -typedef NS_ENUM(NSInteger, AMapNaviRoadClass) -{ - AMapNaviRoadClassHighWay = 0, ///< 0 高速公路 - AMapNaviRoadClassNationalRoad, ///< 1 国道 - AMapNaviRoadClassProvincialRoad, ///< 2 省道 - AMapNaviRoadClassCountyRoad, ///< 3 县道 - AMapNaviRoadClassVillageRoad, ///< 4 乡公路 - AMapNaviRoadClassCountyInternalRoad, ///< 5 县乡村内部道路 - AMapNaviRoadClassMainStreet, ///< 6 主要大街、城市快速道 - AMapNaviRoadClassMainRoad, ///< 7 主要道路 - AMapNaviRoadClassMinorRoad, ///< 8 次要道路 - AMapNaviRoadClassNormalRoad, ///< 9 普通道路 - AMapNaviRoadClassNotNaviRoad, ///< 10 非导航道路 -}; - -///AMapNaviLink的主辅路信息 -typedef NS_ENUM(NSInteger, AMapNaviFormWay) -{ - AMapNaviFormWayNone = -1, ///< -1 无效 - AMapNaviFormWayMainRoad = 1, ///< 1 主路 - AMapNaviFormWayInternalRoad, ///< 2 路口内部道路 - AMapNaviFormWayJCT, ///< 3 JCT道路 - AMapNaviFormWayRoundabout, ///< 4 环岛 - AMapNaviFormWayRestArea, ///< 5 服务区 - AMapNaviFormWayRamp, ///< 6 匝道 - AMapNaviFormWaySideRoad, ///< 7 辅路 - AMapNaviFormWayRampAndJCT, ///< 8 匝道与JCT - AMapNaviFormWayExit, ///< 9 出口 - AMapNaviFormWayEntrance, ///< 10 入口 - AMapNaviFormWayTurnRightRoadA, ///< 11 A类右转专用道 - AMapNaviFormWayTurnRightRoadB, ///< 12 B类右转专用道 - AMapNaviFormWayTurnLeftRoadA, ///< 13 A类左转专用道 - AMapNaviFormWayTurnLeftRoadB, ///< 14 B类左转专用道 - AMapNaviFormWayNormalRoad, ///< 15 普通道路 - AMapNaviFormWayTurnLeftAndRightRoad, ///< 16 左右转专用道 - AMapNaviFormWayRestAreaAndJCT = 53, ///< 53 服务区与JCT - AMapNaviFormWayRestAreaAndRamp = 56, ///< 56 服务区与匝道 - AMapNaviFormWayRestAreaRampJCT = 58, ///< 58 服务区与匝道以及JCT -}; - -///电子眼类型 -typedef NS_ENUM(NSInteger, AMapNaviCameraType) -{ - AMapNaviCameraTypeSpeed = 0, //!< 0 测速摄像 - AMapNaviCameraTypeSurveillance = 1, //!< 1 监控摄像 - AMapNaviCameraTypeTrafficLight = 2, //!< 2 闯红灯拍照 - AMapNaviCameraTypeBreakRule = 3, //!< 3 违章拍照 - AMapNaviCameraTypeBusway = 4, //!< 4 公交专用道摄像头 - AMapNaviCameraTypeEmergencyLane = 5, //!< 5 应急车道摄像头 - AMapNaviCameraTypeBicycleLane = 6, //!< 6 非机动车道摄像头 - AMapNaviCameraTypeIntervalVelocityStart = 8, //!< 8 区间测速起始 - AMapNaviCameraTypeIntervalVelocityEnd = 9, //!< 9 区间测速终止 - AMapNaviCameraTypeFlowSpeed = 10, //!< 10 流动测速电子眼 - AMapNaviCameraTypeETC = 11, //!< 11 ETC计费拍照 since 9.0.0 新增 -}; - -///播报模式 -typedef NS_ENUM(NSInteger, AMapNaviBroadcastMode) -{ - AMapNaviBroadcastModeConcise = 1, ///< 1 经典简洁播报(建议老司机使用) - AMapNaviBroadcastModeDetailed, ///< 2 新手详细播报 -}; - -///道路状态。特别注意:10.0.0新增Default、FineOpen -typedef NS_ENUM(NSInteger, AMapNaviRouteStatus) -{ - AMapNaviRouteStatusUnknow = 0, ///< 0 未知状态 - AMapNaviRouteStatusSmooth, ///< 1 通畅 - AMapNaviRouteStatusSlow, ///< 2 缓行 - AMapNaviRouteStatusJam, ///< 3 阻塞 - AMapNaviRouteStatusSeriousJam, ///< 4 严重阻塞 - AMapNaviRouteStatusDefault, ///< 5 默认路况(内部道路) - AMapNaviRouteStatusFineOpen, ///< 6 极其畅通 -}; - -///路径规划时POI点的起终点类型 -typedef NS_ENUM(NSInteger, AMapNaviRoutePlanPOIType) -{ - AMapNaviRoutePlanPOITypeStart = 0, ///< 0 起点 - AMapNaviRoutePlanPOITypeEnd, ///< 1 终点 - AMapNaviRoutePlanPOITypeWay, ///< 2 途径点 -}; - -///可切换到的主辅路类型 since 5.3.0 -typedef NS_ENUM(NSInteger, AMapNaviParallelRoadStatusFlag) -{ - AMapNaviParallelRoadStatusFlagNone = 0, ///< 0 无主辅路可切换 - AMapNaviParallelRoadStatusFlagAssist = 1, ///< 1 可切换到辅路 - AMapNaviParallelRoadStatusFlagMain = 2, ///< 2 可切换到主路 -}; - -///可切换到的高架上下类型 since 6.6.0 -typedef NS_ENUM(NSInteger, AMapNaviElevatedRoadStatusFlag) -{ - AMapNaviElevatedRoadStatusFlagNone = 0, ///< 0 无高架可切换 - AMapNaviElevatedRoadStatusFlagUnder = 1, ///< 1 可切换到高架下 - AMapNaviElevatedRoadStatusFlagUp = 2, ///< 2 可切换到高架上 -}; - -///导航组件主题皮肤类型 since 5.4.0 -typedef NS_ENUM(NSInteger, AMapNaviCompositeThemeType) -{ - AMapNaviCompositeThemeTypeDefault = 0, ///< 0 蓝色系 - AMapNaviCompositeThemeTypeLight = 1, ///< 1 浅色系 - AMapNaviCompositeThemeTypeDark = 2, ///< 2 暗色系 -}; - -///导航过程中提示音的类型 since 5.4.0 -typedef NS_ENUM(NSInteger, AMapNaviRingType) -{ - AMapNaviRingTypeNULL = 0, ///< 0 无 - AMapNaviRingTypeReroute = 1, ///< 1 偏航重算的提示音 - AMapNaviRingTypeDing = 100, ///< 100 即将到达转向路口时的提示音 - AMapNaviRingTypeDong = 101, ///< 101 导航状态下通过测速电子眼的提示音 - AMapNaviRingTypeElecDing = 102, ///< 102 巡航状态下通过电子眼(所有类型)的提示音 - AMapNaviRingTypeElecOverSpeedDing = 103, ///< 103 巡航状态下电子眼播报点超速时的提示音 -}; - -///卫星定位信号强度类型 since 7.8.0 卫星定位信号强度类型只在导航中才有效 -typedef NS_ENUM(NSInteger, AMapNaviGPSSignalStrength) -{ - AMapNaviGPSSignalStrengthUnknow = 0, //0 信号强度未知 - AMapNaviGPSSignalStrengthStrong = 1, //1 信号强 - AMapNaviGPSSignalStrengthWeak = 2, //2 信号弱 - AMapNaviGPSSignalStrengthSmartPos = 3, //3 智能定位 since 7.8.0 -}; - -///导航组件页面回退的动作类型 since 5.5.0 -typedef NS_ENUM(NSInteger, AMapNaviCompositeVCBackwardActionType) -{ - AMapNaviCompositeVCBackwardActionTypeDismiss = 0, //0 退出了整个导航组件 - AMapNaviCompositeVCBackwardActionTypeNaviPop = 1, //1 退出了导航组件中的导航界面 -}; - -///路径规划类型 since 5.5.0 -typedef NS_ENUM(NSInteger, AMapNaviRoutePlanType) -{ - AMapNaviRoutePlanTypeCommon = 1, ///< 1 直接算路 - AMapNaviRoutePlanTypeYaw = 2, ///< 2 偏航重算 - AMapNaviRoutePlanTypeChangeStratege = 3, ///< 3 切换算路策略 - AMapNaviRoutePlanTypeParallelRoad = 4, ///< 4 平行路切换 - AMapNaviRoutePlanTypeTMC = 5, ///< 5 躲避拥堵 - AMapNaviRoutePlanTypeLimitLine = 6, ///< 6 限行算路(车牌限行) - AMapNaviRoutePlanTypeDamagedRoad = 7, ///< 7 道路关闭 - AMapNaviRoutePlanTypeChangeJnyPnt = 9, ///< 9 停车场模式/沿途搜索设置行程点 - AMapNaviRoutePlanTypeUpdateCityData = 10, ///< 10 更新城市数据引起的重算 - AMapNaviRoutePlanTypeLimitForbid = 11, ///< 11 限时禁行引起的重算(在线) - AMapNaviRoutePlanTypeManualRefresh = 12, ///< 12 手动刷新 - AMapNaviRoutePlanTypeMutiRouteRequest = 14, ///< 14 导航中请求备选路线 - AMapNaviRoutePlanTypeDispatch = 16, ///< 16 交警调度请求路线 - AMapNaviRoutePlanTypePushRouteData = 200, ///< 200 PushRouteData进行导航 -}; - -///自车位置和区间测速电子眼路段的位置关系 since 6.0.0 -typedef NS_ENUM(NSInteger, AMapNaviIntervalCameraPositionState) -{ - AMapNaviIntervalCameraPositionStateNULL = 0, ///< 0 无 - AMapNaviIntervalCameraPositionStateReady = 1, ///< 1 即将进入区间测速路段(还未进入) - AMapNaviIntervalCameraPositionStateIn = 2, ///< 2 在区间测速路段内 - AMapNaviIntervalCameraPositionStateOut = 3, ///< 3 已离开区间测速路段(包括:已经过了测速路段终点 和 中途从区间中离开了) -}; - -///道路设施信息类型 since 6.0.0 -typedef NS_ENUM(NSInteger, AMapNaviRoadFacilityType) -{ - AMapNaviRoadFacilityTypeNULL = 0, ///< 0 无 - AMapNaviRoadFacilityTypeLeftInterflow = 1, ///< 左侧合流 - AMapNaviRoadFacilityTypeRightInterflow = 2, ///< 右侧合流 - AMapNaviRoadFacilityTypeSharpTurn = 3, ///< 急转弯 - AMapNaviRoadFacilityTypeReverseTurn = 4, ///< 反向转弯 - AMapNaviRoadFacilityTypeLinkingTurn = 5, ///< 连续转弯 - AMapNaviRoadFacilityTypeAccidentArea = 6, ///< 事故多发地 - AMapNaviRoadFacilityTypeFallingRocks = 7, ///< 注意落石 - AMapNaviRoadFacilityTypeFailwayCross = 8, ///< 铁路道口 - AMapNaviRoadFacilityTypeSlippery = 9, ///< 易滑 - AMapNaviRoadFacilityTypeMaxSpeedLimit = 10, ///< 最大限速标志 - AMapNaviRoadFacilityTypeMinSpeedLimit = 11, ///< 最小限速标志 - AMapNaviRoadFacilityTypeVillage = 12, ///< 村庄 - AMapNaviRoadFacilityTypeLeftNarrow = 13, ///< 左侧变窄 - AMapNaviRoadFacilityTypeRightNarrow = 14, ///< 右侧变窄 - AMapNaviRoadFacilityTypeDoubleNarrow = 15, ///< 两侧变窄 - AMapNaviRoadFacilityTypeCrosswindArea = 16, ///< 横风区 - AMapNaviRoadFacilityTypeTruckHeightLimit = 81, ///< 货车限高 - AMapNaviRoadFacilityTypeTruckWidthLimit = 82, ///< 货车限宽 - AMapNaviRoadFacilityTypeTruckWeightLimit = 83, ///< 货车限重 - AMapNaviRoadFacilityTypeCheckPoint = 91, ///< 货车检查站 -}; - -///导航过程中关于路线的‘通知信息’的类型 since 6.2.0 -typedef NS_ENUM(NSInteger, AMapNaviRouteNotifyDataType) -{ - AMapNaviRouteNotifyDataTypeNULL = 0, ///< 0 无效 - AMapNaviRouteNotifyDataTypeRestrictArea = 1, ///< 1 限行区域通知 - AMapNaviRouteNotifyDataTypeForbidArea = 2, ///< 2 禁行区域通知 - AMapNaviRouteNotifyDataTypeRoadClosedArea = 3, ///< 3 道路关闭通知 - AMapNaviRouteNotifyDataTypeJamArea = 4, ///< 4 拥堵区域通知 - AMapNaviRouteNotifyDataTypeDispatch = 5, ///< 5 交警路线调度通知 - AMapNaviRouteNotifyDataTypeChangeMainRoute = 20, ///< 20 备选路线切换为主路线的结果通知 - AMapNaviRouteNotifyDataTypeGPSSignalWeak = 21, ///< 21 手机卫星定位信号弱的通知 -}; - -///AMapNaviLink的LinkType类型 since 6.3.0 -typedef NS_ENUM(NSInteger, AMapNaviLinkType) -{ - AMapNaviLinkTypeNull = -1, ///< 无效 - AMapNaviLinkTypeNormalRoad = 0, ///< 普通道路 - AMapNaviLinkTypeFairway = 1, ///< 航道 - AMapNaviLinkTypeUnderPass = 2, ///< 隧道 - AMapNaviLinkTypeBridge = 3, ///< 桥梁 - AMapNaviLinkTypeElevatedRd = 4, ///< 高架路 -}; - -///路径的扎点信息类型 since 6.3.0 -typedef NS_ENUM(NSInteger, AMapNaviRouteIconPointType) -{ - AMapNaviRouteIconPointTypeNULL = -1, ///< 无效类型 - AMapNaviRouteIconPointTypeFoot = 0, ///< 步行扎点 - AMapNaviRouteIconPointTypeVehicleFerry = 1, ///< 汽车轮渡 - AMapNaviRouteIconPointTypeMannedFerry = 2, ///< 载人轮渡 -}; - -///驾车导航网约车模式 since 6.4.0 -typedef NS_ENUM(NSInteger, AMapNaviOnlineCarHailingType) -{ - AMapNaviOnlineCarHailingTypeInvalid = -1, ///< 无效类型 - AMapNaviOnlineCarHailingTypeNone = 0, ///< 非网约车模式, 即正常的默认模式 - AMapNaviOnlineCarHailingTypePickUp = 1, ///< 网约车接驾模式 - AMapNaviOnlineCarHailingTypeTransport = 2, ///< 网约车送驾模式 -}; - -///导航界面中的地图样式类型 since 6.7.0 -typedef NS_ENUM(NSInteger, AMapNaviViewMapModeType) -{ - AMapNaviViewMapModeTypeDay = 0, ///< 白天模式 - AMapNaviViewMapModeTypeNight = 1, ///< 黑夜模式 - AMapNaviViewMapModeTypeDayNightAuto = 2, ///< 根据日出日落时间自动切换白天黑夜 - AMapNaviViewMapModeTypeCustom = 3, ///< 自定义地图样式 (还需传入 MAMapCustomStyleOptions ) -}; - -///导航组件中的语音播报类型 since 7.1.0 -typedef NS_OPTIONS(NSUInteger, AMapNaviCompositeBroadcastType) { - AMapNaviCompositeBroadcastDetailed = 0, ///< 详细播报 - AMapNaviCompositeBroadcastConcise = 1, ///< 简洁播报 - AMapNaviCompositeBroadcastMute = 2, ///< 静音 -}; - -///驾驶三急事件枚举类型 since 9.3.5 -typedef NS_ENUM(NSUInteger, AMapNaviDriveEventType) { - AMapNaviDriveEventNone = 0, ///< 详细播报 - AMapNaviDriveEventLeftTurn = 1, ///< 急转弯-左转 - AMapNaviDriveEventRightTurn = 2, ///< 急转弯-右转 - AMapNaviDriveEventLeftLaneChange = 3, ///< 急超车-左转 - AMapNaviDriveEventRightLaneChange = 4, ///< 急超车-右转 - AMapNaviDriveEventAccelerate = 5, ///< 急加速 - AMapNaviDriveEventBreak = 6 ///<急减速 -}; - -typedef NS_ENUM(NSInteger, AMapNaviOwnershipType) -{ - AMapNaviOwnershipPublicRoad = 0, ///< 公共道路 - AMapNaviOwnershipInternalRoad = 1, ///< 内部道路 - AMapNaviOwnershipPrivateRoad = 2, ///< 私有道路 - AMapNaviOwnershipUndergroundParkRoad = 3, ///< 地下停车场道路 - AMapNaviOwnership3DParkRoad = 4 ///< 立体停车场道路 -}; - -#pragma mark - LaneInfo Image - -/** - * @brief 创建车道信息图片 - * @param laneBackInfo 车道背景信息 - * @param laneSelectInfo 车道选择信息 - * @return 车道信息图片 - */ -FOUNDATION_EXTERN UIImage *CreateLaneInfoImageWithLaneInfo(NSString *laneBackInfo, NSString *laneSelectInfo); - -/** - * @brief 将驾车路线规划的偏好设置转换为驾车路径规划策略.注意:当prioritiseHighway为YES时,将忽略avoidHighway和avoidCost的设置 - * @param multipleRoute 是否多路径规划 - * @param avoidCongestion 是否躲避拥堵 - * @param avoidHighway 是否不走高速 - * @param avoidCost 是否避免收费 - * @param prioritiseHighway 是否高速优先 - * @return AMapNaviDrivingStrategy路径规划策略 - */ -FOUNDATION_EXTERN AMapNaviDrivingStrategy ConvertDrivingPreferenceToDrivingStrategy(BOOL multipleRoute, - BOOL avoidCongestion, - BOOL avoidHighway, - BOOL avoidCost, - BOOL prioritiseHighway); - -#pragma mark - AMapNaviPoint - -@interface AMapNaviPoint : NSObject - -///纬度 -@property (nonatomic, assign) CGFloat latitude; - -///经度 -@property (nonatomic, assign) CGFloat longitude; - -/** - * @brief AMapNaviPoint类对象的初始化函数 - * @param lat 纬度 - * @param lon 经度 - * @return AMapNaviPoint类对象id - */ -+ (AMapNaviPoint *)locationWithLatitude:(CGFloat)lat longitude:(CGFloat)lon; - -/** - * @brief 判断点是否与当前点相同 - * @param aPoint 需要判断的点 - * @return 两个点是否相同 - */ -- (BOOL)isEqualToNaviPoint:(AMapNaviPoint *)aPoint; - -@end - -#pragma mark - AMapNaviPointBounds - -@interface AMapNaviPointBounds : NSObject - -///东北角坐标 -@property (nonatomic, strong) AMapNaviPoint *northEast; - -///西南角坐标 -@property (nonatomic, strong) AMapNaviPoint *southWest; - -/** - * @brief AMapNaviPointBounds类对象的初始化函数 - * @param northEast 东北角经纬度 - * @param southWest 西南角经纬度 - * @return AMapNaviPointBounds类对象id - */ -+ (AMapNaviPointBounds *)pointBoundsWithNorthEast:(AMapNaviPoint *)northEast southWest:(AMapNaviPoint *)southWest; - -@end - -#pragma mark - AMapNaviGuide - -///导航段信息类 -@interface AMapNaviGuide : NSObject - -///导航段名称 -@property (nonatomic, strong) NSString *name; - -///导航段长度 -@property (nonatomic, assign) NSInteger length; - -///导航段时间 -@property (nonatomic, assign) NSInteger time; - -///导航段转向类型 -@property (nonatomic, assign) AMapNaviIconType iconType; - -///导航段路口点的坐标 -@property (nonatomic, strong) AMapNaviPoint *coordinate; - -@end - -#pragma mark - AMapNaviGroupSegment - -///聚合段信息类 since 5.1.0 -@interface AMapNaviGroupSegment : NSObject - -///聚合段名称 -@property (nonatomic, strong) NSString *groupName; - -///聚合段长度,单位:米 -@property (nonatomic, assign) NSInteger distance; - -///聚合段收费金额,单位:元 -@property (nonatomic, assign) NSInteger toll; - -///聚合段包含的起始导航段下标 -@property (nonatomic, assign) NSInteger startSegmentID; - -///聚合段包含导航段个数 -@property (nonatomic, assign) NSInteger segmentCount; - -///聚合段是否到达途径点 -@property (nonatomic, assign) BOOL isArriveWayPoint; - -@end - -#pragma mark - AMapNaviTrafficStatus - -///前方交通路况信息类 -@interface AMapNaviTrafficStatus : NSObject - -///道路状态 -@property (nonatomic, assign) AMapNaviRouteStatus status; - -/* - 带有深绿路况新的表达方式的交通状态 - 畅通状态: 100--200; 而不在 [110,140)深绿、 [160,190)绿内,则路况状态默认为 “畅通”(绿色) - 缓行状态: 200--300; 而不在 [210,290)内, 则路况状态默认为 “缓行”(黄色) - 拥堵状态: 300--400; 而不在 [310,340)拥堵、 [360,390)极度拥堵内,则路况状态默认为“拥堵”(红色) - 无交通流: 900--999; 路况全部为“无交通流” - 在以上区间之外的,包括0 以及所有其他无效值,均按照“未知”处理。 - 特别注意:当前接口为收费接口,您如果申请试用或者正式应用都请通过工单系统提交商务合作类工单进行沟通 https://lbs.amap.com/ since 9.6.0 - */ -@property (nonatomic, assign) NSInteger trafficFineStatus; - -///该交通状态的路段长度 -@property (nonatomic, assign) NSInteger length; - -@end - -#pragma mark - AMapNaviIntervalCameraDynamicInfo - -///区间测速电子眼的动态信息 since 6.0.0 -@interface AMapNaviIntervalCameraDynamicInfo : NSObject - -///区间测速路段的总长度 -@property (nonatomic, assign) NSInteger length; - -///进入区间测速路段后实时的区间路段剩余长度 -@property (nonatomic, assign) NSInteger remainDistance; - -///进入区间测速路段后的实时平均车速 -@property (nonatomic, assign) NSInteger averageSpeed; - -///进入区间测速路段后的剩余路段的合理车速 -@property (nonatomic, assign) NSInteger reasonableSpeedInRemainDist; - -@end - -#pragma mark - AMapNaviCameraInfo - -///电子眼信息类 -@interface AMapNaviCameraInfo : NSObject - -///电子眼类型 -@property (nonatomic, assign) AMapNaviCameraType cameraType; - -///电子眼限速,0表示没有限速, 实际速度表示道路的限速值,单位km/h. 注意:-2表示没有采集到限速数据,-1表示该车道禁行 且只有在cameraType 为AMapNaviCameraTypeIntervalVelocityStart 和AMapNaviCameraTypeIntervalVelocityEnd 的时候生效. -@property (nonatomic, assign) NSInteger cameraSpeed; - -///电子眼经纬度 -@property (nonatomic, strong) AMapNaviPoint *coordinate; - -///到电子眼的距离,-1表示没有剩余距离信息。 -@property (nonatomic, assign) NSInteger distance; - -///区间测速电子眼的动态信息. 注意:只有在导航的过程中且 cameraType 为 AMapNaviCameraTypeIntervalVelocityEnd 的时候才有. since 6.0.0 -@property (nonatomic, strong) AMapNaviIntervalCameraDynamicInfo *intervalCameraDynamicInfo; - -@end - -#pragma mark - AMapNaviServiceAreaInfo - - -///服务区域信息 since 5.0.0 -@interface AMapNaviServiceAreaInfo : NSObject - -///到服务区域的距离 -@property (nonatomic, assign) NSInteger remainDistance; - -///服务区域类型(0服务区,1收费站,2检查站) -@property (nonatomic, assign) NSInteger type; - -///服务区域名称 -@property (nonatomic, strong) NSString *name; - -///服务区域经纬度 -@property (nonatomic, strong) AMapNaviPoint *coordinate; - -///服务区详细信息:按位标识(0-没有,1-有),第0~5位分别表示加油站,餐饮,卫生间,汽修,购物,住宿. since 8.0.0 -@property (nonatomic, assign) NSUInteger sapaDetail; - -@end - -#pragma mark - AMapNaviCruiseInfo - -///巡航模式信息类 -@interface AMapNaviCruiseInfo : NSObject - -///连续启用时间(单位:秒) -@property (nonatomic, assign) NSInteger cruisingDriveTime; - -///连续行驶距离(单位:米) -@property (nonatomic, assign) NSInteger cruisingDriveDistance; - -@end - -#pragma mark - AMapNaviTrafficFacilityInfo - -/** - * 道路设施类型 - * 0:未知道路设施 - * 4:测速拍照 - * 5:违章拍照 - * 12:铁路道口 - * 13:左侧落石 - * 14:事故易发地段 - * 15:路段易滑 - * 16:村庄 - * 18:学校 - * 19:有人看管的铁路道口 - * 20:无人看管的铁路道口 - * 21:道路两侧变窄 - * 22:向左急弯路 - * 23:向右急弯路 - * 24:反向弯路 - * 25:连续弯路 - * 26:左侧车辆交汇处 - * 27:右侧车辆交汇处 - * 28:监控摄像 - * 29:公交专用道拍照 - * 31:禁止超车 - * 36:右侧变窄 - * 37:左侧变窄 - * 38:窄桥 - * 39:左右绕行 - * 40:左侧绕行 - * 41:右侧绕行 - * 42:右侧落石 - * 43:左侧靠山险路 - * 44:右侧靠山险路 - * 47:上陡坡 - * 48:下陡坡 - * 49:过水路面 - * 50:路面不平 - * 52:慢行 - * 53:事故多发,注意危险 - * 54:横风区 - * 58:隧道 - * 59:渡口 - * 92:闯红灯拍照 - * 93:应急车道拍照 - * 94:非机动车道拍照 - * 100:违章高发地 - */ - -///道路交通设施类 -@interface AMapNaviTrafficFacilityInfo : NSObject - -///经纬度 -@property (nonatomic, strong) AMapNaviPoint *coordinate; - -///类型,请参考 “道路设施类型” 的注释 -@property (nonatomic, assign) NSInteger boardcastType; - -///距离设施的剩余距离(单位:米) -@property (nonatomic, assign) NSInteger distance; - -///限速值(单位:公里/小时) -@property (nonatomic, assign) NSInteger limitSpeed; - -@end - -#pragma mark - AMapNaviCruiseLinkStatus - -///巡航拥堵状态下Link的形状点信息 since 6.7.0 -@interface AMapNaviCruiseLinkStatus : NSObject - -///拥堵形状点 -@property (nonatomic, strong) NSArray *shapePoints; - -///拥堵状态 -@property (nonatomic, assign) AMapNaviRouteStatus status; - -@end - -#pragma mark - AMapNaviCruiseCongestionInfo - -///巡航中拥堵区域信息 since 6.7.0 -@interface AMapNaviCruiseCongestionInfo : NSObject - -///拥堵区域道路名 -@property (nonatomic, copy) NSString *roadName; - -///整体拥堵状态 -@property (nonatomic, assign) AMapNaviRouteStatus congestionStatus; - -///预估到达时间 (单位:秒) -@property (nonatomic, assign) NSInteger etaTime; - -///拥堵长度(单位:米) -@property (nonatomic, assign) NSInteger length; - -///拥堵区域的状态描述对象 -@property (nonatomic, strong) AMapNaviCruiseLinkStatus *pLinkData; - -///link数组个数 -@property (nonatomic, assign) NSInteger linkCnt; - -///事件类型,已废弃,since 7.0.0 . -@property (nonatomic, assign) NSInteger eventType __attribute__((deprecated("该字段已废弃,since 7.0.0"))); - -///事件经纬度,已废弃,since 7.0.0 . -@property (nonatomic, strong) AMapNaviPoint *eventPos __attribute__((deprecated("该字段已废弃,since 7.0.0"))); - -@end - -#pragma mark - AMapNaviRouteLabel - -///道路标签信息 since 5.0.0 -@interface AMapNaviRouteLabel : NSObject - -///标签类型 -@property (nonatomic, assign) NSInteger type; - -///标签内容 -@property (nonatomic, strong) NSString *content; - -@end - -#pragma mark - AMapNaviRestrictionInfo - -///路径限行信息 since 5.0.0 -@interface AMapNaviRestrictionInfo : NSObject - -///-1:无效值; 0:外地车限行,建议设置车牌; 1:外地车限行,建议开启限行; 2:已避开限行区域; 3:起点在限行区域内; 4:终点在限行区域内; 5:途经点在限行区域内; 6:途经限行区域; 7:已提前避开即将生效的限行区域; 8:路线上目前有限行, 但根据估算时间,行驶到该限行区域时,限行已失效. -@property (nonatomic, assign) NSInteger titleType; - -///标题 -@property (nonatomic, strong) NSString *title; - -///tips描述,titleType为0或1时才有描述 -@property (nonatomic, strong) NSString *tips; - -///城市代码 -@property (nonatomic, assign) NSInteger cityCode; - -///描述 该字段已废弃,since 6.0.0 -@property (nonatomic, strong) NSString *desc __attribute__((deprecated("该字段已废弃,since 6.0.0"))); - -///该字段已废弃,请使用 titleType . since 6.0.0 -@property (nonatomic, assign) NSInteger type __attribute__((deprecated("该字段已废弃,请使用 titleType . since 6.0.0"))) ; - -@end - -#pragma mark - AMapNaviParallelRoadStatus - -///平行路状态信息 since 5.3.0 -@interface AMapNaviParallelRoadStatus : NSObject - -///主辅路标识(存在主辅路时,可切换到的主辅路类型) -@property (nonatomic, assign) AMapNaviParallelRoadStatusFlag flag; - -///高架上下标识(存在高架时,可切换到的高架上下类型) since 6.6.0 -@property (nonatomic, assign) AMapNaviElevatedRoadStatusFlag hwFlag; - -///道路切换状态; -@property (nonatomic, assign) NSInteger status __attribute__((deprecated("该字段已废弃. since 7.0.0"))); - -@end - -#pragma mark - AMapNaviVehicleInfo - -///车辆信息 since 6.0.0 -@interface AMapNaviVehicleInfo : NSObject - -///车牌号,如"京H1N11", since 8.0.0 支持摩托车车牌号. -@property (nonatomic, strong) NSString *vehicleId; - -///是否开启ETA请求的躲避车辆限行, 默认为YES. 注意:只有设置为YES, 且设置了车牌号才能躲避车辆限行 -@property (nonatomic, assign) BOOL isETARestriction; - -///设置车辆类型, 0:燃油客车; 1:燃油货车; 2:纯电动客车; 3:纯电动货车; 4:插电式混动客车; 5:插电式混动货车; since 8.0.0 新增11:摩托车. 默认0(小车). 注意:只有设置了货车, 其他关于货车的属性设置才会生效 -@property (nonatomic, assign) NSInteger type; - -///算路时是否忽略货车重量, 默认为No, 即不忽略, 也就是算路时会考虑货车的重量. 如为YES,就会忽略货车重量. since 6.2.0 -@property (nonatomic, assign) BOOL isLoadIgnore; - -///设置货车的类型(大小), 1:微型货车; 2:轻型/小型货车; 3:中型货车; 4:重型货车, 默认为2 -@property (nonatomic, assign) NSInteger size; - -///设置货车的轴数(用来计算过路费及限重), 取值[0-255], type = 1时生效, 默认为2 -@property (nonatomic, assign) NSInteger axisNums; - -///设置货车的宽度, 范围:[0-25.5], 单位:米, type = 1时生效, 默认2.5米 -@property (nonatomic, assign) CGFloat width; - -///设置货车的高度, 范围:取值[0-25.5], 单位:米, type = 1时生效, 默认1.6米 -@property (nonatomic, assign) CGFloat height; - -///设置货车的最大长度, 取值[0-25], 单位:米, type = 1时生效, 默认6米 -@property (nonatomic, assign) CGFloat length; - -///设置货车的总重, 范围:取值[0-6553.5], 单位:吨, type = 1时生效, 注意:总重 = 车重 + 核定载重 -@property (nonatomic, assign) CGFloat load; - -///设置货车的核定载重, 范围:取值[0-6553.5], 单位:吨, type = 1时生效 -@property (nonatomic, assign) CGFloat weight; - -///摩托车排量, 单位: 毫升 since 8.0.0 -@property (nonatomic, assign) NSInteger motorcycleCC; - -@end - -#pragma mark - AMapNaviNotAvoidFacilityAndForbiddenInfo - -///导航过程中的没有避开的设施、禁行标志等信息 since 6.0.0 -@interface AMapNaviNotAvoidFacilityAndForbiddenInfo : NSObject - -///类型,1:限高; 2:限宽; 3:限重; 4:禁行 -@property (nonatomic, assign) NSInteger type; - -///禁行类型,-1:无效; 0:禁止左转; 1:禁止右转; 2:禁止左掉头; 3:禁止右掉头; 4:禁止直行 -@property (nonatomic, assign) NSInteger forbiddenType; - -///自车到设施的距离,-1表示没有剩余距离信息。 -@property (nonatomic, assign) NSInteger distance; - -///设施的经纬度 -@property (nonatomic, strong) AMapNaviPoint *coordinate; - -@end - -#pragma mark - AMapNaviRouteForbiddenInfo - -/** 车型 - * 第1位:全部车型 - * 第2位:小车 - * 第3位:微型货车 - * 第4位:轻型货车 - * 第5位:中型货车 - * 第6位:重型货车 - * 第7位:拖挂 - * 第8位:保留 - */ -///路线上的禁行标示信息 since 6.0.0 -@interface AMapNaviRouteForbiddenInfo : NSObject - -///类型, 0:禁止左转; 1:禁止右转; 2:禁止左掉头; 3:禁止右掉头; 4:禁止直行 -@property (nonatomic, assign) NSInteger type; - -///车型, 用一个长度为8的字符串表示,每一位上的数字如果为1, 表示该车型禁行,如果为0, 表示该车型不禁行. 如 '00001110' 表示'中型货车、重型货车、拖挂'禁行 -@property (nonatomic, strong) NSString *vehicleType; - -///禁行标示所在的位置 -@property (nonatomic, strong) AMapNaviPoint *coordinate; - -///禁行相关的时间信息 -@property (nonatomic, strong) NSString *timeDescription; - -///禁行标示所在的道路名 -@property (nonatomic, strong) NSString *roadName; - -@end - -#pragma mark - AMapNaviRoadFacilityInfo - -///道路设施信息 since 6.0.0 -@interface AMapNaviRoadFacilityInfo : NSObject - -///设施类型 -@property (nonatomic, assign) AMapNaviRoadFacilityType type; - -///设施所在的位置 -@property (nonatomic, strong) AMapNaviPoint *coordinate; - -///设施所在的道路名 -@property (nonatomic, strong) NSString *roadName; - -@end - -#pragma mark - AMapNaviRouteNotifyData - -///实时导航过程中关于路线的‘通知信息’ since 6.2.0 -@interface AMapNaviRouteNotifyData : NSObject - -///信息的类型 -@property (nonatomic, assign) AMapNaviRouteNotifyDataType type; - -///是否成功避开了:限行区域、禁行区域、道路关闭区域、拥堵区域; 是否成功了切换了主备选路线 -@property (nonatomic, assign) BOOL success; - -///当前位置距信息发生位置的距离. 注意:-1代表距离无效; 0代表当前已处在信息发生的范围内 -@property (nonatomic, assign) NSInteger distance; - -///信息发生的位置坐标 -@property (nonatomic, strong) AMapNaviPoint *coordinate; - -///信息发生所在道路的名字 -@property (nonatomic, copy) NSString *roadName; - -///信息发生的原因 -@property (nonatomic, copy) NSString *reason; - -///信息的补充说明 -@property (nonatomic, copy) NSString *subTitle; - -@end - -#pragma mark - AMapNaviCongestionInfo - -///实时导航中的拥堵区域信息 since 6.3.0 -@interface AMapNaviCongestionInfo : NSObject - -///离自车位置最近的拥堵区域的总长度(单位:米), 如果当前自车位置已在拥堵区域内,表示的就是剩余的拥堵距离 -@property (nonatomic, assign) NSInteger remainDistance; - -///预计通过该拥区域的时长(单位:秒), 如果当前自车位置已在拥堵区域内,表示的就是剩余拥堵段的通过时长 -@property (nonatomic, assign) NSInteger remainTime; - -///当前自车位置是否在拥堵区域内 -@property (nonatomic, assign) BOOL inCongestionArea; - -///拥堵程度, 只会是: AMapNaviRouteStatusSlow, AMapNaviRouteStatusJam, AMapNaviRouteStatusSeriousJam -@property (nonatomic, assign) AMapNaviRouteStatus status; - -///该拥堵区域的起始Segment的索引 -@property (nonatomic, assign) NSInteger beginSegmentIndex; - -///该拥堵区域的起始Segment中起始link的索引 -@property (nonatomic, assign) NSInteger beginLinkIndex; - -///该拥堵区域的结束Segment的索引 -@property (nonatomic, assign) NSInteger endSegmentIndex; - -///该拥堵区域的结束Segment中结束link的索引 -@property (nonatomic, assign) NSInteger endLinkIndex; - -@end - -#pragma mark - AMapNaviSuggestChangeMainNaviRouteInfo - -///多路线导航模式下,建议将某备选路线切换为主导航路线 since 6.3.0 -@interface AMapNaviSuggestChangeMainNaviRouteInfo : NSObject - -///建议切换为主导航路线的备选路线 -@property (nonatomic, weak) AMapNaviRoute *backupRoute; - -///该备选路线比目前主导航路线节省的时间, 单位:秒 -@property (nonatomic, assign) NSInteger savingTime; - -///该备选路线途径的主要道路名称 -@property (nonatomic, copy) NSString *wayRoadName; - -@end - -#pragma mark - AMapNaviRouteIconPoint - -///路径的扎点信息 since 6.3.0 -@interface AMapNaviRouteIconPoint : NSObject - -///扎点类型 -@property (nonatomic, assign) AMapNaviRouteIconPointType type; - -///扎点坐标点 -@property (nonatomic, strong) AMapNaviPoint *point; - -@end - -#pragma mark - AMapNaviTrafficIncidentInfo - -///路径交通事件信息 since 6.4.0 -@interface AMapNaviTrafficIncidentInfo : NSObject - -///标题 -@property (nonatomic, strong) NSString *title; - -///信息发生的位置坐标 -@property (nonatomic, strong) AMapNaviPoint *coordinate; - -///0:起点所在道路上有避不开的封路事件; 1:途径点所在道路上有避不开的封路事件; 2:终点所在道路上有避不开的封路事件; 3:非起点、非途径点、非终点所在道路上有避不开的封路事件; 4:可以避开的封路事件; 5:路径上的非封路事件; 6:排序干预; 7:终点干预 -@property (nonatomic, assign) NSInteger titleType; - -@end - -#pragma mark - AMapNaviPOIInfo - -///高德POI信息 since 6.4.0 -@interface AMapNaviPOIInfo : NSObject - -///POI的id -@property (nonatomic, copy) NSString *mid; - -///POI的坐标点 -@property (nonatomic, strong) AMapNaviPoint *locPoint; - -///车头方向角度, 默认为-1, 0为正北, 顺时针方向增加. 注意:mid == nil && locPoint != nil && startAngle >=0 才起作用. since 6.6.0 -@property (nonatomic, assign) double startAngle; - -@end - -#pragma mark - AMapNaviParallelRoadInfo - -///平行路切换信息 since 6.6.0 -@interface AMapNaviParallelRoadInfo : NSObject - -///切换类型, 1:主辅路切换; 2:高架桥上下切换 -@property (nonatomic, assign) NSInteger type; - -@end - -#pragma mark - AMapNaviToWayPointInfo - -///当前自车位置到途经点的信息 since 6.7.0 -@interface AMapNaviToWayPointInfo : NSObject - -///途径点POI的id -@property (nonatomic, copy) NSString *mid; - -///途径点的坐标 -@property (nonatomic, strong) AMapNaviPoint *point; - -///剩余的距离,单位:米 -@property (nonatomic, assign) NSInteger remainDistance; - -///剩余的时间,单位:秒 -@property (nonatomic, assign) NSInteger remainTime; - -/// 获取自车位置到前方第一个途径点的红绿灯数量 since 9.5.0 -@property (nonatomic, assign) NSInteger trafficlightNum; - -@end - - -#pragma mark - AMapNaviRouteWayPointInfo - -///路线上的途径点信息 since 6.7.0 -@interface AMapNaviRouteWayPointInfo : NSObject - -///途径点POI的id -@property (nonatomic, copy) NSString *mid; - -///途径点的坐标 -@property (nonatomic, strong) AMapNaviPoint *point; - -///途径点所在的segment在AMapNaviRoute.routeSegments中的索引值 -@property (nonatomic, assign) NSUInteger segmentIndexInRoute; - -///途径点在AMapNaviRoute.routeCoordinates中的索引值 -@property (nonatomic, assign) NSUInteger pointIndexInRoute; - -@end - - -#pragma mark - AMapNaviExitBoardInfo - -///高速或城市快速路的出口路牌信息 since 6.8.0 -@interface AMapNaviExitBoardInfo : NSObject - -///出口编号名字 -@property (nonatomic, strong) NSArray *exitNames; - -///路牌方向名字 -@property (nonatomic, strong) NSArray *directionInfos; - -@end - -#pragma mark - AMapNaviDriveComfort - -///道路舒适度信息 since 9.3.5 -@interface AMapNaviDriveComfort : NSObject - -///驾驶事件类型 -@property (nonatomic, assign) double statusComfortIndex; - -///事件开始地点纬度 -@property (nonatomic, assign) double statusStartLatitude; - -///事件开始地点经度 -@property (nonatomic, assign) double statusStartLongitude; - -///事件结束地点纬度 -@property (nonatomic, assign) double statusEndLatitude; - -///事件结束地点经度 -@property (nonatomic, assign) double statusEndLongitude; - -///事件开始时间 -@property (nonatomic, assign) NSInteger statusStartTime; - -///事件结束时间 -@property (nonatomic, assign) NSInteger statusEndTime; - -@end - -#pragma mark - AMapNaviDriveEvent - -///驾驶三急(急加速/急减速/急转弯)事件信息 since 9.3.5 -@interface AMapNaviDriveEvent : NSObject - -///驾驶事件类型 -@property (nonatomic, assign) AMapNaviDriveEventType eventType; - -///驾驶事件严重程度 -@property (nonatomic, assign) double eventLevel; - -///事件地点纬度 -@property (nonatomic, assign) double eventLatitude; - -///事件地点经度 -@property (nonatomic, assign) double eventLongitude; - -///事件开始时间 -@property (nonatomic, assign) NSInteger eventStartTime; - -///事件结束时间 -@property (nonatomic, assign) NSInteger eventEndTime; - -///事件最大速度 -@property (nonatomic, assign) double eventMaxSpeed; - -///事件最大加速度 -@property (nonatomic, assign) double eventMaxAcc; - -@end - -#pragma mark - AMapNaviPolylineGreyColor - -///路线走过后置灰的颜色. since 7.4.0 -@interface AMapNaviPolylineGreyColor : NSObject - -///填充颜色 -@property (nonatomic, strong) UIColor *fillColor; - -///边框颜色 -@property (nonatomic, strong) UIColor *borderColor; - -///鱼骨线颜色 -@property (nonatomic, strong) UIColor *arrowColor; - -///填充颜色(夜间) -@property (nonatomic, strong) UIColor *fillColorNight; - -///边框颜色(夜间) -@property (nonatomic, strong) UIColor *borderColorNight; - -///鱼骨线颜色(夜间) -@property (nonatomic, strong) UIColor *arrowColorNight; - -@end - -#pragma mark - AMapNaviPolylineTrafficStatusColor - -///路线的路况颜色. since 7.4.0 -@interface AMapNaviPolylineTrafficStatusColor : NSObject - -///路况,表示该颜色将在该路况下生效 -@property (nonatomic, assign) AMapNaviRouteStatus status; - -///当前路线的填充颜色(白天) -@property (nonatomic, strong) UIColor *fillColorHighlight; - -///当前路线的边框颜色(白天) -@property (nonatomic, strong) UIColor *borderColorHighlight; - -///备选路线的填充颜色(白天) -@property (nonatomic, strong) UIColor *fillColor; - -///备选路线的边框颜色(白天) -@property (nonatomic, strong) UIColor *borderColor; - -///当前路线的填充颜色(黑夜) -@property (nonatomic, strong) UIColor *fillColorHighlightNight; - -///当前路线的边框颜色(黑夜) -@property (nonatomic, strong) UIColor *borderColorHighlightNight; - -///备选路线的填充颜色(黑夜) -@property (nonatomic, strong) UIColor *fillColorNight; - -///备选路线的边框颜色(黑夜) -@property (nonatomic, strong) UIColor *borderColorNight; - -@end - -#pragma mark - AMapNaviTMCStatusColor - -///光柱图的颜色。since 10.0.0 -@interface AMapNaviTMCStatusColor : NSObject - -///路况,表示该颜色将在该路况下生效 -@property (nonatomic, assign) AMapNaviRouteStatus status; - -///当前路况对应的光柱图填充颜色 -@property (nonatomic, strong) UIColor *color; - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviCompositeAnnotation.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviCompositeAnnotation.h deleted file mode 100644 index 139e4e8..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviCompositeAnnotation.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// AMapNaviCompositeAnnotation.h -// AMapNaviKit -// -// Created by eidan on 2018/3/26. -// Copyright © 2018年 Amap. All rights reserved. -// - -#import -#import "AMapNaviHeaderHandler.h" - -///导航页添加自定overlay,需要遵守此协议 since 6.7.0 -@protocol AMapNaviCompositeOverlay - -@required - -///导航SDK内部会将该值传给地图进行绘制, 开发者自行实现的对象在遵守协议后, 需对该值赋值, 不能为空. -@property (nonatomic, strong, readonly) MAOverlayRenderer *overlayRender; - -@optional - -///添加的overlay所在层级, 参考MAOverlayLevel, 默认 MAOverlayLevelAboveRoads. -@property (nonatomic, assign, readonly) MAOverlayLevel overlayLevel; - -@end - -///导航界面自定义标注 since 5.5.0 -@interface AMapNaviCompositeCustomAnnotation : NSObject - -///标注的中心坐标 -@property (nonatomic, assign) CLLocationCoordinate2D coordinate; - -///z值,大值在上,默认为0. 类似CALayer的zPosition -@property (nonatomic, assign) NSInteger zIndex; - -///导航界面添加的自定义标注是否可以响应事件,默认为NO. since 7.5.0 -@property (nonatomic, assign) BOOL enable; - -///导航界面添加的自定义标注的复用view的标识,注意:如果两个标注有不同的图标,这个复用标识必须设置,否则会出现复用混乱的现象. since 8.0.0 -@property (nonatomic, copy) NSString *identifier; -/** - * @brief 初始化导航界面自定义标注. since 5.5.0 - * @param coordinate 标注的中心坐标. - * @param view 会被显示在驾车导航界面的地图上. 如需调整view的相对位置,请修改view.frame.origin - * @return id 自定义标注对象 - */ -- (id)initWithCoordinate:(CLLocationCoordinate2D)coordinate view:(UIView *)view; - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviCompositeManager.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviCompositeManager.h deleted file mode 100644 index 70922e0..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviCompositeManager.h +++ /dev/null @@ -1,202 +0,0 @@ -// -// AMapNaviManager.h -// AMapNaviKit -// -// Created by eidan on 2017/5/9. -// Copyright © 2017年 Amap. All rights reserved. -// - -#import "AMapNaviCommonObj.h" - -@class AMapNaviRoute; -@class AMapNaviLocation; -@class AMapNaviCompositeUserConfig; -@class AMapNaviCompositeCustomAnnotation; -@protocol AMapNaviCompositeOverlay; -@protocol MAMapViewDelegate; - -@protocol AMapNaviCompositeManagerDelegate; - -///导航组件类 since 5.1.0 注意:AMapNaviCompositeManager 内部使用了单例 [AMapNaviDriveManager sharedInstance] -@interface AMapNaviCompositeManager : NSObject - -///实现了 AMapNaviCompositeManagerDelegate 协议的类指针 -@property (nonatomic, weak, nullable) iddelegate; - -///当前选择的导航路径的ID -@property (nonatomic, readonly) NSInteger naviRouteID; - -///当前选择的导航路径的信息,参考 AMapNaviRoute 类. -@property (nonatomic, readonly, nullable) AMapNaviRoute *naviRoute; - -///路径规划后的所有路径ID,路径ID为 NSInteger 类型. -@property (nonatomic, readonly, nullable) NSArray *naviRouteIDs; - -///路径规划后的所有路径信息,参考 AMapNaviRoute 类. -@property (nonatomic, readonly, nullable) NSDictionary *naviRoutes; - -/** - * @brief 通过present的方式显示导航组件页面 注意:此函数涉及到UI操作,请在主线程中调用,否则无效. - * @param options 导航组件的配置类,参考 AMapNaviCompositeUserConfig . - */ -- (void)presentRoutePlanViewControllerWithOptions:(AMapNaviCompositeUserConfig *_Nullable)options; - -/** - * @brief 退出导航组件页面 注意:此函数涉及到UI操作,请在主线程中调用,否则无效. since 5.5.0 - * @param animated 是否执行动画 - */ -- (void)dismissWithAnimated:(BOOL)animated; - -/** - * @brief 在驾车导航界面添加自定义标注. 注意:每次退出导航之后,标注都会被清空. since 5.5.0 - * @param annotation 会被显示在驾车导航界面地图上, 具体参考 AMapNaviCompositeCustomAnnotation . - */ -- (void)addAnnotation:(AMapNaviCompositeCustomAnnotation *_Nonnull)annotation; - -/** - * @brief 移除驾车导航界面的自定义标注. since 5.5.0 - * @param annotation 具体参考 AMapNaviCompositeCustomAnnotation . - */ -- (void)removeAnnotation:(AMapNaviCompositeCustomAnnotation *_Nonnull)annotation; - -/** - * @brief 在驾车导航界面添加自定义Overlay. 注意:每次退出导航之后,Overlay都会被清空. since 6.7.0 - * @param customOverlay 会被显示在驾车导航界面地图上, 此对象需遵守AMapNaviCompositeOverlay协议,否则无效, 具体参考官方Demo CustomOverlayCompositeViewController 类 . - */ -- (void)addCustomOverlay:(id _Nonnull)customOverlay; - -/** - * @brief 移除驾车导航界面的自定义Overlay. since 6.7.0 - * @param customOverlay 具体参考 AMapNaviCompositeOverlay . - */ -- (void)removeCustomOverlay:(id _Nonnull)customOverlay; -@end - -///AMapNaviCompositeManagerDelegate 协议 since 5.1.0 -@protocol AMapNaviCompositeManagerDelegate - -@optional - -/** - * @brief 发生错误时,会调用此方法 - * @param compositeManager 导航组件类 - * @param error 错误信息 - */ -- (void)compositeManager:(AMapNaviCompositeManager *_Nonnull)compositeManager error:(NSError *_Nonnull)error; - -/** - * @brief 算路成功后的回调函数, 路径规划页面的算路、导航页面的重算等成功后均会调用此方法 - * @param compositeManager 导航组件类 - */ -- (void)compositeManagerOnCalculateRouteSuccess:(AMapNaviCompositeManager *_Nonnull)compositeManager; - -/** - * @brief 算路成功后的回调函数. since 5.5.0 - * @param compositeManager 导航组件类 - * @param type 路径规划类型,参考 AMapNaviRoutePlanType . - */ -- (void)compositeManager:(AMapNaviCompositeManager *_Nonnull)compositeManager onCalculateRouteSuccessWithType:(AMapNaviRoutePlanType)type; - -/** - * @brief 算路失败后的回调函数,路径规划页面的算路、导航页面的重算等失败后均会调用此方法 - * @param compositeManager 导航组件类 - * @param error 错误信息,error.code参考 AMapNaviCalcRouteState . - */ -- (void)compositeManager:(AMapNaviCompositeManager *_Nonnull)compositeManager onCalculateRouteFailure:(NSError *_Nonnull)error; - -/** - * @brief 开始导航的回调函数 - * @param compositeManager 导航组件类 - * @param naviMode 导航类型,参考 AMapNaviMode . - */ -- (void)compositeManager:(AMapNaviCompositeManager *_Nonnull)compositeManager didStartNavi:(AMapNaviMode)naviMode; - -/** - * @brief SDK需要实时的获取是否正在进行导航信息播报,以便SDK内部控制 "导航播报信息回调函数" 的触发时机,避免出现下一句话打断前一句话的情况. 如果需要自定义"导航语音播报"功能,必须实现此代理 - * @param compositeManager 导航组件类 - * @return 返回当前是否正在进行导航信息播报,如一直返回YES,"导航播报信息回调函数"就一直不会触发,如一直返回NO,就会出现语句打断情况,所以请根据实际情况返回。 - */ -- (BOOL)compositeManagerIsNaviSoundPlaying:(AMapNaviCompositeManager *_Nonnull)compositeManager; - -/** - * @brief 导航播报信息回调函数,此回调函数需要和compositeManagerIsNaviSoundPlaying:配合使用. 如果需要自定义"导航语音播报"功能,必须实现此代理 - * @param compositeManager 导航组件类 - * @param soundString 播报文字 - * @param soundStringType 播报类型,参考 AMapNaviSoundType. 注意:since 6.0.0 AMapNaviSoundType 只返回 AMapNaviSoundTypeDefault - */ -- (void)compositeManager:(AMapNaviCompositeManager *_Nonnull)compositeManager playNaviSoundString:(NSString *_Nullable)soundString soundStringType:(AMapNaviSoundType)soundStringType; - -/** - * @brief 停止导航语音播报的回调函数,当导航SDK需要停止外部语音播报时,会调用此方法. 如果需要自定义"导航语音播报"功能,必须实现此代理 - * @param compositeManager 导航组件类 - */ -- (void)compositeManagerStopPlayNaviSound:(AMapNaviCompositeManager *_Nonnull)compositeManager; - -/** - * @brief 当前位置更新回调(无论是否在导航中,只要当前位置有更新就会回调) - * @param compositeManager 导航组件类 - * @param naviLocation 当前位置信息,参考 AMapNaviLocation 类 - */ -- (void)compositeManager:(AMapNaviCompositeManager *_Nonnull)compositeManager updateNaviLocation:(AMapNaviLocation *_Nullable)naviLocation; - -/** - * @brief 驾车导航页面白天夜间模式切换回调 since 6.7.0 - * @param compositeManager 导航组件类 - * @param showStandardNightType 是否为夜间模式,YES 表示夜间模式,NO 表示白天模式 - */ -- (void)compositeManager:(AMapNaviCompositeManager *_Nonnull)compositeManager didChangeDayNightType:(BOOL)showStandardNightType; - -/** - * @brief 导航到达目的地后的回调函数 - * @param compositeManager 导航组件类 - * @param naviMode 导航类型,参考 AMapNaviMode . - */ -- (void)compositeManager:(AMapNaviCompositeManager *_Nonnull)compositeManager didArrivedDestination:(AMapNaviMode)naviMode; - -/** - * @brief 导航组件页面回退或者退出导航组件时会调用此函数 since 5.5.0 - * @param compositeManager 导航组件类 - * @param backwardActionType 导航组件页面回退的动作类型,参考 AMapNaviCompositeVCBackwardActionType . - */ -- (void)compositeManager:(AMapNaviCompositeManager *_Nonnull)compositeManager didBackwardAction:(AMapNaviCompositeVCBackwardActionType)backwardActionType; - -/** - * @brief 每次进入导航组件时和驾车路径规划策略改变均会调用此方法 since 6.1.0 - * @param compositeManager 导航组件类 - * @param driveStrategy 驾车路径规划策略,参考 AMapNaviDrivingStrategy . - */ -- (void)compositeManager:(AMapNaviCompositeManager *_Nonnull)compositeManager onDriveStrategyChanged:(AMapNaviDrivingStrategy)driveStrategy; - -/** - * @brief 导航到达某个途经点的回调函数 since 6.1.0 - * @param compositeManager 导航组件类 - * @param wayPointIndex 到达途径点的编号,标号从0开始. 注意:如果导航过程进行了路径重算(包含偏航、手动刷新等),wayPointIndex会重新从0开始计数 - */ -- (void)compositeManager:(AMapNaviCompositeManager *_Nonnull)compositeManager onArrivedWayPoint:(int)wayPointIndex; - -/** - * @brief 导航界面地图的日夜模式设置改变的回调函数. since 7.1.0 - * @param type 参考 AMapNaviViewMapModeType . - */ -- (void)compositeManagerDidChangeMapViewModeType:(AMapNaviViewMapModeType)type; - -/** - * @brief 导航语音播报模式设置改变的回调函数. since 7.1.0 - * @param type 参考 AMapNaviCompositeBroadcastType . - */ -- (void)compositeManagerDidChangeBroadcastType:(AMapNaviCompositeBroadcastType)type; - -/** - * @brief 导航界面跟随模式设置改变的回调函数. since 7.1.0 - * @param mode 参考 AMapNaviViewTrackingMode . - */ -- (void)compositeManagerDidChangeTrackingMode:(AMapNaviViewTrackingMode)mode; - -/** - * @brief 比例尺智能缩放设置改变的回调函数. since 7.1.0 - * @param autoZoomMapLevel 锁车模式下是否为了预见下一导航动作自动缩放地图 - */ -- (void)compositeManagerDidChangeAutoZoomMapLevel:(BOOL)autoZoomMapLevel; - -@end - diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviCompositeUserConfig.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviCompositeUserConfig.h deleted file mode 100644 index aa9eeff..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviCompositeUserConfig.h +++ /dev/null @@ -1,182 +0,0 @@ -// -// AMapNaviCompositeUserConfig.h -// AMapNaviKit -// -// Created by eidan on 2017/6/23. -// Copyright © 2017年 Amap. All rights reserved. -// - -#import -#import "AMapNaviCommonObj.h" - -///导航组件的配置类 since 5.2.0 -@interface AMapNaviCompositeUserConfig : NSObject - -/** - * @brief 设置起点、终点、途径点(最多支持三个途径点)来调起路线规划页面,自动完成算路. 如果不设置起点,默认使用的是“我的位置”. - * @param type POI点的起终点类型,参考 AMapNaviRoutePlanPOIType . - * @param locationPoint POI点的经纬度坐标,必填. SDK会使用该坐标点进行路径规划,参考 AMapNaviPoint . - * @param name POI点的名字,选填. SDK会将该名字显示在搜索栏内. 如果不传将使用默认值,如“终点”、“途径点1”. - * @param mid POI点的高德唯一标识ID,选填. 如果传入,SDK将会优先使用此ID对应的POI点的经纬度坐标、名字等信息进行算路和展示. - * @return 是否设置成功 - */ -- (BOOL)setRoutePlanPOIType:(AMapNaviRoutePlanPOIType)type location:(AMapNaviPoint *_Nonnull)locationPoint name:(NSString *_Nullable)name POIId:(NSString *_Nullable)mid; - -/** - * @brief 设置导航组件启动时,直接进入导航界面(跳过路径规划页面)进行算路并自动开始导航. since 5.3.0 - * @param directly 是否直接进入导航界面, 默认值为NO. 注意:如果为YES,为了保证算路成功,还需设置有效的终点,否则会报错 - */ -- (void)setStartNaviDirectly:(BOOL)directly; - -/** - * @brief 设置导航组件的主题皮肤类型. since 5.4.0 - * @param themeType 主题皮肤类型,默认为 AMapNaviCompositeThemeTypeDefault(蓝色),参考 AMapNaviCompositeThemeType . - */ -- (void)setThemeType:(AMapNaviCompositeThemeType)themeType; - -/** - * @brief 设置导航组件启动时,是否需要进行路径规划. 此设置只有在setStartNaviDirectly为YES时,才起作用. since 5.4.0 - * @param need 是否需要进行路径规划,默认为YES. 如果为NO,导航组件启动时将不再进行算路,直接使用 AMapNaviDriveManager 单例已经规划好的路径进行导航 - */ -- (void)setNeedCalculateRouteWhenPresent:(BOOL)need; - -/** - * @brief 设置导航界面顶部信息是否展示随后转向图标. since 6.9.0 - * @param showNextRoadInfo 是否展示随后转向图标,默认为NO,不展示. - */ -- (void)setShowNextRoadInfo:(BOOL)showNextRoadInfo; - -/** - * @brief 设置导航组件界面dismiss时,是否调用 [AMapNaviDriveManager destroyInstance] 来尝试销毁 AMapNaviDriveManager 的单例. since 5.4.0 - * @param need 是否尝试销毁 AMapNaviDriveManager 的单例,默认为YES. - */ -- (void)setNeedDestoryDriveManagerInstanceWhenDismiss:(BOOL)need; - -/** - * @brief 设置当退出实时导航时,是否弹出“确认退出导航”的AlertView. since 5.5.0 - * @param need 是否弹出“确认退出导航”的AlertView,默认为YES. - */ -- (void)setNeedShowConfirmViewWhenStopGPSNavi:(BOOL)need; - -/** - * @brief 设置车辆信息. since 6.0.0 - * @param vehicleInfo 车辆信息,参考 AMapNaviVehicleInfo. - */ -- (void)setVehicleInfo:(nonnull AMapNaviVehicleInfo *)vehicleInfo; - -/** - * @brief 设置驾车导航界面自定义View,该View将显示在界面的底部区域,容器View的宽度为屏幕宽度减去133,高度为46. since 6.1.0 - * @param customView 将被显示在底部区域的自定义view - */ -- (void)addCustomViewToNaviDriveView:(UIView *_Nonnull)customView; - -/** - * @brief 设置驾车导航界面左侧自定义View,该View宽度为63,高度为53,将显示在界面的左侧靠边垂直中心区域. since 6.9.0 - * @param customView 将被显示的自定义view - */ -- (void)addLeftCustomViewToNaviDriveView:(UIView *_Nonnull)customView; - -/** - * @brief 设置驾车导航界面自定义View,该View将显示在界面的底部区域之下,容器View的宽度为屏幕宽度,高度最高为200. 注意: 设置了自定义View,导航界面将自动设置为不支持横屏 since 6.1.0 - * @param customBottomView 将被显示在底部区域之下的自定义view - * @return 是否设置成功(高度超过200将会返回NO) - */ -- (BOOL)addCustomBottomViewToNaviDriveView:(UIView *_Nonnull)customBottomView; - -/** - * @brief 设置驾车路径规划策略. 注意:如设置,将清空用户之前选择的值。如不设置,则取用户之前选择的值,如用户之前无选择过,则取 AMapNaviDrivingStrategyMultipleDefault . since 6.1.0 - * @param driveStrategy 参考 AMapNaviDrivingStrategy . - */ -- (void)setDriveStrategy:(AMapNaviDrivingStrategy)driveStrategy; - -/** - * @brief 设置驾车导航时是否显示路口放大图. since 6.1.0 - * @param need 是否显示路口放大图,默认为YES. - */ -- (void)setShowCrossImage:(BOOL)need; - -/** - * @brief 设置路径规划偏好策略页面是否显示. since 6.1.0 - * @param need 是否显示,默认为YES. - */ -- (void)setShowDrivingStrategyPreferenceView:(BOOL)need; - -/** - * @brief 设置驾车导航界面到达目的地后是否移除路线和牵引线. since 5.5.0 - * @param need 是否移除,默认为NO. - */ -- (void)setRemovePolylineAndVectorlineWhenArrivedDestination:(BOOL)need; - -/** - * @brief 设置多路线导航模式(实时导航中拥有若干条备选路线供用户选择,默认模式), 或单路线导航模式. 注意: 1、设置的导航模式会在下一次主动路径规划时生效. 2、多路线导航模式还需同时满足以下4个条件才能够生效:a.路径规划时 AMapNaviDrivingStrategy 需选用多路径策略; b.起终点的直线距离需<=80KM; c.不能有途径点; d.车辆不能是货车类型. since 6.3.0 - * @param multipleRouteNaviMode YES:多路线导航模式, NO:单路线导航模式. 默认为YES. - */ -- (void)setMultipleRouteNaviMode:(BOOL)multipleRouteNaviMode; - -/** - * @brief 设置货车多路线导航模式(导航中拥有若干条备选路线供用户选择),或单路线导航模式(默认模式)。注意:此方法仅限于在开始导航前调用有效,以下情况不会出现多备选路线:模拟导航、路线存在途经点、路线长度超过80KM。特别注意:当前接口为收费接口,您如果申请试用或者正式应用都请通过工单系统提交商务合作类工单进行沟通 https://lbs.amap.com/。since 9.3.5 - * @param multipleRouteNaviMode YES:多路线导航模式, NO:单路线导航模式. 默认为NO. - */ -- (void)setTruckMultipleRouteNaviMode:(BOOL)multipleRouteNaviMode; - -/** - * @brief 设置多路线导航模式下地图是否显示备选路线. since 6.7.0 - * @param need 是否显示,默认为YES. - */ -- (void)setShowBackupRoute:(BOOL)need; - -/** - * @brief 设置网约车模式. since 6.4.0 - * @param type 参考 AMapNaviOnlineCarHailingType. 默认为 AMapNaviOnlineCarHailingTypeNone (非网约车模式, 即正常模式) - * @return 是否设置成功 - */ -- (BOOL)setOnlineCarHailingType:(AMapNaviOnlineCarHailingType)type; - -/** - * @brief 设置地图是否展示实时路况. since 6.6.0 - * @param need 是否显示,默认为YES. - */ -- (void)setMapShowTraffic:(BOOL)need; - -/** - * @brief 设置导航界面地图的日夜模式. since 7.1.0 - * @param type 参考 AMapNaviViewMapModeType . 默认为 AMapNaviViewMapModeTypeDayNightAuto(自动切换模式) - */ -- (void)setMapViewModeType:(AMapNaviViewMapModeType)type; - -/** - * @brief 设置导航语音播报模式. since 7.1.0 - * @param type 参考 AMapNaviCompositeBroadcastType . 默认为 AMapNaviCompositeBroadcastDetailed(详细播报模式) - */ -- (void)setBroadcastType:(AMapNaviCompositeBroadcastType)type; - -/** - * @brief 设置导航界面跟随模式. since 7.1.0 - * @param mode 参考 AMapNaviViewTrackingMode . 默认为 AMapNaviViewTrackingModeCarNorth(车头朝上) - */ -- (void)setTrackingMode:(AMapNaviViewTrackingMode)mode; - -/** - * @brief 设置比例尺智能缩放. since 7.1.0 - * @param autoZoomMapLevel 锁车模式下是否为了预见下一导航动作自动缩放地图. 默认为YES - */ -- (void)setAutoZoomMapLevel:(BOOL)autoZoomMapLevel; - -/** - * @brief 设置一个 ViewController,SDK内部会使用该 ViewController 来 present 导航组件. since 7.2.0 - * @param presenterViewController SDK会使用该对象来 present 导航组件 - */ -- (void)setPresenterViewController:(UIViewController *_Nonnull)presenterViewController; - -/** - * @brief 设置导航组件规划页面是否展示限行图层 注意:当前接口为付费接口,使用当前接口需要 官网联系https://lbs.amap.com/ 商务 since 9.0.1 - * @param showRestrictareaEnable 组件是否显示限行图层,默认为NO. - */ -- (void)setShowRestrictareaEnable:(BOOL)showRestrictareaEnable; - -/** - * @brief 设置导航组件导航页面驾车模式下是否显示鹰眼地图,显示鹰眼小地图的时候:光柱图和全览按钮隐藏 注意:摩托车模式下设置不生效 since 9.0.2 - * @param showEagleMap 组件是否显示鹰眼地图,默认为NO. - */ -- (void)setShowEagleMap:(BOOL)showEagleMap; -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviDriveDataRepresentable.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviDriveDataRepresentable.h deleted file mode 100644 index 558f9e7..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviDriveDataRepresentable.h +++ /dev/null @@ -1,196 +0,0 @@ -// -// AMapNaviDriveDataRepresentable.h -// AMapNaviKit -// -// Created by 刘博 on 16/1/13. -// Copyright © 2016年 Amap. All rights reserved. -// - -#import "AMapNaviCommonObj.h" - -NS_ASSUME_NONNULL_BEGIN - -@class AMapNaviInfo; -@class AMapNaviRoute; -@class AMapNaviLocation; -@class AMapNaviStatisticsInfo; -@class AMapNaviDriveManager; - -/** - * @brief AMapNaviDriveDataRepresentable协议.实例对象可以通过实现该协议,并将其通过 AMapNaviDriveManager 的addDataRepresentative:方法进行注册,便可获取导航过程中的导航数据更新. - * 可以根据不同需求,选取使用特定的数据进行导航界面自定义. - * AMapNaviDriveView 即通过该协议实现导航过程展示.也可以依据导航数据的更新进行其他的逻辑处理. - */ -@protocol AMapNaviDriveDataRepresentable -@optional - -/** - * @brief 导航模式更新回调. 从5.3.0版本起,算路失败后导航SDK只对外通知算路失败,SDK内部不再执行停止导航的相关逻辑.因此,当算路失败后,不会收到 driveManager:updateNaviMode: 回调; AMapNaviDriveManager.naviMode 不会切换到 AMapNaviModeNone 状态, 而是会保持在 AMapNaviModeGPS or AMapNaviModeEmulator 状态. - * @param driveManager 驾车导航管理类 - * @param naviMode 导航模式,参考 AMapNaviMode 值 - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager updateNaviMode:(AMapNaviMode)naviMode; - -/** - * @brief 路径ID更新回调. 注意:请不要在此回调中调用 -selectNaviRouteWithRouteID: 接口,否则会出现死循环调用. - * @param driveManager 驾车导航管理类 - * @param naviRouteID 导航路径ID - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager updateNaviRouteID:(NSInteger)naviRouteID; - -/** - * @brief 路径信息更新回调. 注意:请不要在此回调中调用 -selectNaviRouteWithRouteID: 接口,否则会出现死循环调用. - * @param driveManager 驾车导航管理类 - * @param naviRoute 路径信息,参考 AMapNaviRoute 类 - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager updateNaviRoute:(nullable AMapNaviRoute *)naviRoute; - -/** - * @brief 导航信息更新回调 - * @param driveManager 驾车导航管理类 - * @param naviInfo 导航信息,参考 AMapNaviInfo 类 - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager updateNaviInfo:(nullable AMapNaviInfo *)naviInfo; - -/** - * @brief 自车位置更新回调 (since 5.0.0,模拟导航和实时导航的自车位置更新都会走此回调) - * @param driveManager 驾车导航管理类 - * @param naviLocation 自车位置信息,参考 AMapNaviLocation 类 - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager updateNaviLocation:(nullable AMapNaviLocation *)naviLocation; - -/** - * @brief 需要显示路口放大图时的回调。注意:10.0.2版本开始,自定义View中如果设置了showCrossImage为YES,回调中crossImage为nil - * @param driveManager 驾车导航管理类 - * @param crossImage 路口放大图Image(宽:高 = 25:16) - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager showCrossImage:(nullable UIImage *)crossImage; - -/** - * @brief 需要隐藏路口放大图时的回调。 - * @param driveManager 驾车导航管理类 - */ -- (void)driveManagerHideCrossImage:(AMapNaviDriveManager *)driveManager; - -/** - * @brief 需要显示车道信息时的回调.可通过 UIImage *CreateLaneInfoImageWithLaneInfo(NSString *laneBackInfo, NSString *laneSelectInfo); 方法创建车道信息图片 - * 0-直行; 1-左转; 2-直行和左转; 3-右转; - * 4-直行和右转; 5-左转掉头; 6-左转和右转; 7-直行和左转和右转; - * 8-右转掉头; 9-直行和左转掉头; 10-直行和右转掉头; 11-左转和左转掉头; - * 12-右转和右转掉头; 13-直行左侧道路变宽; 14-左转和左转掉头左侧变宽; 16-直行和左转和左掉头; - * 17-右转和左掉头; 18-左转和左掉头和右转; 19-直行和右转和左掉头; 20-左转和右掉头; 21-公交车道; 23-可变车道; - * 255-只会出现在laneSelectInfo,表示目前规划的路径,不可以走这个车道 - * - * @param driveManager 驾车导航管理类 - * @param laneBackInfo 车道背景信息,例如:@"1|0|0|4",表示当前道路有4个车道,分别为"左转|直行|直行|右转+直行" - * @param laneSelectInfo 车道前景信息,其个数一定和车道背景信息一样,例如:@"255|0|0|0",表示选择了当前道路的第2、3、4三个直行车道。 - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager showLaneBackInfo:(NSString *)laneBackInfo laneSelectInfo:(NSString *)laneSelectInfo; - -/** - * @brief 需要隐藏车道信息时的回调 - * @param driveManager 驾车导航管理类 - */ -- (void)driveManagerHideLaneInfo:(AMapNaviDriveManager *)driveManager; - -/** - * @brief 路况光柱信息更新回调 - * @param driveManager 驾车导航管理类 - * @param trafficStatus 路况光柱信息数组,参考 AMapNaviTrafficStatus 类 - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager updateTrafficStatus:(nullable NSArray *)trafficStatus; - -/** - * @brief 电子眼信息更新回调 since 5.0.0 - * @param driveManager 驾车导航管理类 - * @param cameraInfos 电子眼信息,参考 AMapNaviCameraInfo 类 - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager updateCameraInfos:(nullable NSArray *)cameraInfos; - -/** - * @brief 服务区和收费站信息更新回调 since 5.0.0 - * @param driveManager 驾车导航管理类 - * @param serviceAreaInfos 服务区信息,参考 AMapNaviServiceAreaInfo 类 - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager updateServiceAreaInfos:(nullable NSArray *)serviceAreaInfos; - -/** - * @brief 通知当前是否可以进行平行道路切换,包括主路、辅路以及高架桥上、高架桥下. since 5.3.0 - * @param driveManager 驾车导航管理类 - * @param parallelRoadStatus 平行道路信息,参考 AMapNaviParallelRoadStatus 类 - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager updateParallelRoadStatus:(nullable AMapNaviParallelRoadStatus *)parallelRoadStatus; - -/** - * @brief 区间电子眼信息更新回调 since 6.0.0 - * @param driveManager 驾车导航管理类 - * @param state 自车位置和区间测速电子眼路段的位置关系,参考 AMapNaviIntervalCameraPositionState 类 - * @param startInfo 电子眼信息,参考 AMapNaviCameraInfo 类 - * @param endInfo 电子眼信息,参考 AMapNaviCameraInfo 类 - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager updateIntervalCameraWithPositionState:(AMapNaviIntervalCameraPositionState)state startInfo:(nullable AMapNaviCameraInfo *)startInfo endInfo:(nullable AMapNaviCameraInfo *)endInfo; - -/** - * @brief 导航中的转向图标更新回调 since 6.2.0 - * @param driveManager 驾车导航管理类 - * @param turnIconImage 导航段转向图标, 默认大小为(255,255) - * @param turnIconType 导航段转向图标类型,参考 AMapNaviIconType 类 - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager updateTurnIconImage:(nullable UIImage *)turnIconImage turnIconType:(AMapNaviIconType)turnIconType; - -/** - * @brief 导航中相对于当前转向图标,下一个转向图标更新回调 since 6.9.0 - * @param driveManager 驾车导航管理类 - * @param turnIconImage 导航段下一个路口转向图标, 默认大小为(255,255) - * @param turnIconType 导航段下一个转向图标类型,参考 AMapNaviIconType 类 - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager updateNextTurnIconImage:(nullable UIImage *)turnIconImage nextTurnIconType:(AMapNaviIconType)turnIconType; - -/** - * @brief 多路线导航模式下的备选路线更新回调, 注意:此函数只有在 driveManager 设置了多路线导航模式才会回调. since 6.3.0 - * @param driveManager 驾车导航管理类 - * @param backupRoutes 备选路线信息数组, 参考 AMapNaviRoute 类 - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager updateBackupRoute:(nullable NSArray *)backupRoutes; - -/** - * @brief 前方拥堵区域信息的更新回调. since 7.5.0 - * @param driveManager 驾车导航管理类 - * @param congestionInfo 拥堵区域信息, 参考 AMapNaviCongestionInfo 类,如果已通过该拥堵区域或者其不再拥堵时,congestionInfo会返回nil - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager updateCongestionInfo:(nullable AMapNaviCongestionInfo *)congestionInfo; - -#pragma mark - 智能巡航 - -/** - * @brief 巡航道路设施信息更新回调.该更新回调只有在detectedMode开启后有效 - * @param driveManager 驾车导航管理类 - * @param trafficFacilities 道路设施信息数组,参考 AMapNaviTrafficFacilityInfo 类 - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager updateTrafficFacilities:(nullable NSArray *)trafficFacilities; - -/** - * @brief 巡航时自车前方电子眼信息.该更新回调只有在detectedMode开启后有效 since 6.7.0 - * @param driveManager 驾车导航管理类 - * @param cameraInfos 电子眼信息数组,参考 AMapNaviTrafficFacilityInfo 类 - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager updateCruiseElecCameraInfos:(NSArray *)cameraInfos; - -/** - * @brief 巡航信息更新回调.该更新回调只有在detectedMode开启后有效 - * @param driveManager 驾车导航管理类 - * @param cruiseInfo 巡航信息,参考 AMapNaviCruiseInfo 类 - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager updateCruiseInfo:(nullable AMapNaviCruiseInfo *)cruiseInfo; - -/** - * @brief 巡航状态下的拥堵区域信息. 该更新回调只有在detectedMode开启后有效 since 6.7.0 - * @param driveManager 驾车导航管理类 - * @param congestionInfo 巡航拥堵信息, 参考 AMapNaviCruiseCongestionInfo 类, 当前方无拥堵信息时, congestionInfo 的值为 nil . - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager updateCruiseCongestionInfo:(AMapNaviCruiseCongestionInfo *)congestionInfo; - - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviDriveManager.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviDriveManager.h deleted file mode 100644 index 64f1b44..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviDriveManager.h +++ /dev/null @@ -1,516 +0,0 @@ -// -// AMapNaviDriveManager.h -// AMapNaviKit -// -// Created by 刘博 on 16/1/12. -// Copyright © 2016年 Amap. All rights reserved. -// - -#import "AMapNaviBaseManager.h" -#import "AMapNaviDriveDataRepresentable.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol AMapNaviDriveManagerDelegate; - -#pragma mark - AMapNaviDriveManager - -///驾车导航管理类 -@interface AMapNaviDriveManager : AMapNaviBaseManager - -#pragma mark - Singleton - -/** - * @brief AMapNaviDriveManager单例. since 5.4.0 - * @return AMapNaviDriveManager实例 - */ -+ (AMapNaviDriveManager *)sharedInstance; - -/** - * @brief 销毁AMapNaviDriveManager单例. AMapNaviDriveManager内存开销比较大,建议不使用时可销毁. since 5.4.0 - * @return 是否销毁成功. 如果返回NO,请检查单例是否被强引用 - */ -+ (BOOL)destroyInstance; - -/** - * @brief 请使用单例替代. since 5.4.0 init已被禁止使用,请使用单例 [AMapNaviDriveManager sharedInstance] 替代,且在调用类的 dealloc 函数或其他适当时机(如导航ViewController被pop时),调用 [AMapNaviDriveManager destroyInstance] 来销毁单例(需要注意如未销毁成功,请检查单例是否被强引用) - */ -- (instancetype)init __attribute__((unavailable("since 5.4.0 init 已被禁止使用,请使用单例 [AMapNaviDriveManager sharedInstance] 替代,且在调用类的 dealloc 函数里或其他适当时机(如导航ViewController被pop时),调用 [AMapNaviDriveManager destroyInstance] 来销毁单例(需要注意如未销毁成功,请检查单例是否被强引用)"))); - -#pragma mark - Delegate - -///实现了 AMapNaviDriveManagerDelegate 协议的类指针 -@property (nonatomic, weak) id delegate; - -#pragma mark - Event Listener - -/** - * @brief 增加用于接收导航回调事件的Listener, 效果等同于delegate. 注意:该方法不会增加实例对象的引用计数(Weak Reference). since 5.4.0 - * @param aListener 实现了 AMapNaviDriveManagerDelegate 协议的实例 - */ -- (void)addEventListener:(id)aListener; - -/** - * @brief 移除用于接收导航回调事件的Listener. since 5.4.0 - * @param aListener 实现了 AMapNaviDriveManagerDelegate 协议的实例 - */ -- (void)removeEventListener:(id)aListener; - -#pragma mark - Data Representative - -/** - * @brief 增加用于展示导航数据的DataRepresentative.注意:该方法不会增加实例对象的引用计数(Weak Reference) - * @param aRepresentative 实现了 AMapNaviDriveDataRepresentable 协议的实例 - */ -- (void)addDataRepresentative:(id)aRepresentative; - -/** - * @brief 移除用于展示导航数据的DataRepresentative - * @param aRepresentative 实现了 AMapNaviDriveDataRepresentable 协议的实例 - */ -- (void)removeDataRepresentative:(id)aRepresentative; - -#pragma mark - Navi Route - -///当前导航路径的ID -@property (nonatomic, readonly) NSInteger naviRouteID; - -///当前导航路径的信息,参考 AMapNaviRoute 类. -@property (nonatomic, readonly, nullable) AMapNaviRoute *naviRoute; - -///多路径规划时的所有路径ID,路径ID为 NSInteger 类型. -@property (nonatomic, readonly, nullable) NSArray *naviRouteIDs; - -///多路径规划时的所有路径信息,参考 AMapNaviRoute 类. -@property (nonatomic, readonly, nullable) NSDictionary *naviRoutes; - -/** - * @brief 多路径规划时选择路径.注意:该方法仅限于在开始导航前使用,开始导航后该方法无效. - * @param routeID 路径ID - * @return 是否选择路径成功 - */ -- (BOOL)selectNaviRouteWithRouteID:(NSInteger)routeID; - -/** - * @brief 切换平行道路, 包括主辅路切换、高架上下切换. 该方法需要配合 AMapNaviDriveDataRepresentable 的 driveManager:updateParallelRoadStatus: 回调使用. since 5.3.0 - * @param parallelRoadInfo 平行路切换信息,参考 AMapNaviParallelRoadInfo. - */ -- (void)switchParallelRoad:(AMapNaviParallelRoadInfo *)parallelRoadInfo; - -/** - * @brief 设置多路线导航模式(实时导航中拥有若干条备选路线供用户选择), 或单路线导航模式(默认模式). 注意: 1、设置的导航模式会在下一次主动路径规划时生效, 建议在 AMapNaviDriveManager 单例初始化时就进行设置. 2、多路线导航模式还需同时满足以下4个条件才能够生效:a.路径规划时 AMapNaviDrivingStrategy 需选用多路径策略; b.起终点的直线距离需<=80KM; c.不能有途径点; d.车辆不能是货车类型. since 6.3.0 - * @param multipleRouteNaviMode YES:多路线导航模式, NO:单路线导航模式(默认) - */ -- (void)setMultipleRouteNaviMode:(BOOL)multipleRouteNaviMode; - -/** - * @brief 设置货车多路线导航模式(导航中拥有若干条备选路线供用户选择), 或单路线导航模式(默认模式)。建议在 AMapNaviDriveManager 单例初始化时就进行设置。注意:此方法仅限于在开始导航前调用有效,以下情况不会出现多备选路线:模拟导航、路线存在途经点、路线长度超过80KM。特别注意:当前接口为收费接口,您如果申请试用或者正式应用都请通过工单系统提交商务合作类工单进行沟通 https://lbs.amap.com/。since 9.3.5 - * @param multipleRouteNaviMode YES:多路线导航模式, NO:单路线导航模式. 默认为NO. - */ -- (void)setTruckMultipleRouteNaviMode:(BOOL)multipleRouteNaviMode; - -#pragma mark - Options - -///导航中是否播报摄像头信息,默认YES. -@property (nonatomic, assign) BOOL updateCameraInfo; - -///导航中是否播报交通信息,默认YES(需要联网). -@property (nonatomic, assign) BOOL updateTrafficInfo; - -///巡航模式,默认为 AMapNaviDetectedModeNone. 注意:1. 如果已经处在导航模式,要开启巡航模式时,需要先调用 stopNavi 来停止导航,再设置 detectedMode 才能生效 2.如果已经处于巡航模式,要开启导航前,需要先调用setDetectedMode(AMapNaviDetectedModeNone) 来关闭巡航,再开启导航 -@property (nonatomic, assign) AMapNaviDetectedMode detectedMode; - -///卫星定位信号强度类型, 参考 AMapNaviGPSSignalStrength since 7.8.0 只在导航中获取卫星定位信号强弱的值才有效 -@property (nonatomic, assign, readonly) AMapNaviGPSSignalStrength gpsSignalStrength; - -///默认为10, 范围为[ 5, 15 ], 单位秒. 表示有连续的10s, 定位信号质量都比较差, 就会触发手机卫星定位信号弱的回调. 值越小, 就越容易触发. since 6.6.0 -@property (nonatomic, assign) NSUInteger gpsWeakDetecedInterval __attribute__((deprecated("已废弃,since 7.8.0"))); - -///设置是否显示红绿灯倒计时。since 10.0.700 -- (void)setIsOpenTrafficLight:(NSString *)key; - -#pragma mark - Calculate Route - -// 以下算路方法需要高德坐标(GCJ02) - -/** - * @brief 不带起点的驾车路径规划 - * @param endPoints 终点坐标.终点列表的尾点为实时导航终点. - * @param wayPoints 途经点坐标,最多支持16个途经点. 超过16个会取前16个. - * @param strategy 路径的计算策略,建议使用 AMapNaviDrivingStrategyMultipleDefault,与[高德地图]默认策略一致 (避让拥堵+速度优先+避免收费) - * @return 规划路径所需条件和参数校验是否成功,不代表算路成功与否 - */ -- (BOOL)calculateDriveRouteWithEndPoints:(NSArray *)endPoints - wayPoints:(nullable NSArray *)wayPoints - drivingStrategy:(AMapNaviDrivingStrategy)strategy; - -/** - * @brief 带起点的驾车路径规划 - * @param startPoints 起点坐标.起点列表的尾点为实时导航起点,其他坐标点为辅助信息,带有方向性,可有效避免算路到马路的另一侧. - * @param endPoints 终点坐标.终点列表的尾点为实时导航终点,其他坐标点为辅助信息,带有方向性,可有效避免算路到马路的另一侧. - * @param wayPoints 途经点坐标,最多支持16个途经点. 超过16个会取前16个 - * @param strategy 路径的计算策略,建议使用 AMapNaviDrivingStrategyMultipleDefault,与[高德地图]默认策略一致 (避让拥堵+速度优先+避免收费) - * @return 规划路径所需条件和参数校验是否成功,不代表算路成功与否 - */ -- (BOOL)calculateDriveRouteWithStartPoints:(NSArray *)startPoints - endPoints:(NSArray *)endPoints - wayPoints:(nullable NSArray *)wayPoints - drivingStrategy:(AMapNaviDrivingStrategy)strategy; - -/** - * @brief 根据高德POIId进行驾车路径规划,为了保证路径规划的准确性,请尽量使用此方法. since 6.1.0 - * @param startPOIId 起点POIId,如果以“我的位置”作为起点,请传nil - * @param endPOIId 终点POIId,必填 - * @param wayPOIIds 途经点POIId,最多支持16个途经点. 超过16个会取前16个 - * @param strategy 路径的计算策略,建议使用 AMapNaviDrivingStrategyMultipleDefault,与[高德地图]默认策略一致 (避让拥堵+速度优先+避免收费) - * @return 规划路径所需条件和参数校验是否成功,不代表算路成功与否 - */ -- (BOOL)calculateDriveRouteWithStartPointPOIId:(nullable NSString *)startPOIId - endPointPOIId:(nonnull NSString *)endPOIId - wayPointsPOIId:(nullable NSArray *)wayPOIIds - drivingStrategy:(AMapNaviDrivingStrategy)strategy; -/** - * @brief 根据高德POIInfo进行驾车路径规划,为了保证路径规划的准确性,请尽量使用此方法. since 6.4.0 - * @param startPOIInfo 起点POIInfo,参考 AMapNaviPOIInfo. 如果以“我的位置”作为起点,请传nil. 如果startPOIInfo不为nil,那么POIID合法,优先使用ID参与算路,否则使用坐标点. - * @param endPOIInfo 终点POIInfo,参考 AMapNaviPOIInfo. 如果POIID合法,优先使用ID参与算路,否则使用坐标点. 注意:POIID和坐标点不能同时为空 - * @param wayPOIInfos 途经点POIInfo,最多支持16个途经点,超过16个会取前16个. 如果POIID合法,优先使用ID参与算路,否则使用坐标点. 注意:POIID和坐标点不能同时为空 - * @param strategy 路径的计算策略,建议使用 AMapNaviDrivingStrategyMultipleDefault,与[高德地图]默认策略一致 (避让拥堵+速度优先+避免收费) - * @return 规划路径所需条件和参数校验是否成功,不代表算路成功与否 - */ -- (BOOL)calculateDriveRouteWithStartPOIInfo:(nullable AMapNaviPOIInfo *)startPOIInfo - endPOIInfo:(nonnull AMapNaviPOIInfo *)endPOIInfo - wayPOIInfos:(nullable NSArray *)wayPOIInfos - drivingStrategy:(AMapNaviDrivingStrategy)strategy; - -/** - * @brief 独立算路能力接口,可用于不干扰本次导航的单独算路场景. since 7.7.0 - * @param startPOIInfo 起点POIInfo,参考 AMapNaviPOIInfo. 如果以“我的位置”作为起点,请传nil. 如果startPOIInfo不为nil,那么POIID合法,优先使用ID参与算路,否则使用坐标点. - * @param endPOIInfo 终点POIInfo,参考 AMapNaviPOIInfo. 如果POIID合法,优先使用ID参与算路,否则使用坐标点. 注意:POIID和坐标点不能同时为空 - * @param wayPOIInfos 途经点POIInfo,最多支持16个途经点,超过16个会取前16个. 如果POIID合法,优先使用ID参与算路,否则使用坐标点. 注意:POIID和坐标点不能同时为空 - * @param strategy 路径的计算策略,建议使用 AMapNaviDrivingStrategyMultipleDefault,与[高德地图]默认策略一致 (避让拥堵+速度优先+避免收费) - * @param callback 算路完成的回调. 算路成功时,routeGroup 不为空;算路失败时,error 不为空,error.code参照 AMapNaviCalcRouteState. - * @return 规划路径所需条件和参数校验是否成功,不代表算路成功与否 - */ -- (BOOL)independentCalculateDriveRouteWithStartPOIInfo:(nullable AMapNaviPOIInfo *)startPOIInfo - endPOIInfo:(nonnull AMapNaviPOIInfo *)endPOIInfo - wayPOIInfos:(nullable NSArray *)wayPOIInfos - drivingStrategy:(AMapNaviDrivingStrategy)strategy - callback:(nullable void (^)(AMapNaviRouteGroup *_Nullable routeGroup, NSError *_Nullable error))callback; -/** - * @brief 导航过程中重新规划路径(起点为当前位置,途经点和终点位置不变) - * @param strategy 路径的计算策略,建议使用 AMapNaviDrivingStrategyMultipleDefault,与[高德地图]默认策略一致 (避让拥堵+速度优先+避免收费) - * @return 重新规划路径所需条件和参数校验是否成功, 不代表算路成功与否, 如非导航状态下调用此方法会返回NO. - */ -- (BOOL)recalculateDriveRouteWithDrivingStrategy:(AMapNaviDrivingStrategy)strategy; - -#pragma mark - Manual - -/** - * @brief 设置车牌信息. 已废弃,请使用 setVehicleInfo: 替代,since 6.0.0 - * @param province 车牌省份缩写,例如:"京" - * @param number 除省份及标点之外,车牌的字母和数字,例如:"NH1N11" - */ -- (void)setVehicleProvince:(NSString *)province number:(NSString *)number __attribute__((deprecated("已废弃,请使用 setVehicleInfo: 替代,since 6.0.0"))); - -/** - * @brief 设置车辆信息. since 6.0.0 - * @param vehicleInfo 车辆信息,参考 AMapNaviVehicleInfo. 如果要清空已设置的车辆信息,传入nil即可. - * @return 是否设置成功 - */ -- (BOOL)setVehicleInfo:(nullable AMapNaviVehicleInfo *)vehicleInfo; - -/** - * @brief 设置播报模式. 注意:如果在导航过程中设置,需要在下次算路后才能起作用,如偏航重算、手动刷新后. - * @param mode 参考 AMapNaviBroadcastMode . 默认新手详细播报( AMapNaviBroadcastModeDetailed ) - * @return 是否成功 - */ -- (BOOL)setBroadcastMode:(AMapNaviBroadcastMode)mode; - -/** - * @brief 设置网约车模式. since 6.4.0 - * @param type 参考 AMapNaviOnlineCarHailingType. 默认为 AMapNaviOnlineCarHailingTypeNone (非网约车模式, 即正常模式) - * @return 是否设置成功 - */ -- (BOOL)setOnlineCarHailingType:(AMapNaviOnlineCarHailingType)type; - -#pragma mark - Traffic Status - -/** - * @brief 获取某一范围内的路况光柱信息 - * @param startPosition 光柱范围在路径中的起始位置,取值范围[0, routeLength) - * @param distance 光柱范围的距离,startPosition + distance 和的取值范围(0, routelength] - * @return 该范围内路况信息数组,可用于绘制光柱,参考 AMapNaviTrafficStatus 类. - */ -- (nullable NSArray *)getTrafficStatusesWithStartPosition:(int)startPosition distance:(int)distance; - -/** - * @brief 获取当前道路的路况光柱信息 - * @return 该范围内路况信息数组,可用于绘制光柱,参考 AMapNaviTrafficStatus 类. - */ -- (nullable NSArray *)getTrafficStatuses; - -#pragma mark - Xcode Simulate Location - -/** - * @brief 设置Xcode模拟定位点是否参与导航. 注意:此方法仅供开发者调试使用. since 6.7.0 - * @param enableNavi 模拟的定位点是否参与导航, 默认为NO. - */ -- (void)setXcodeSimulateLocationEnable:(BOOL)enableNavi __attribute__((deprecated("已废弃,since 7.5.0"))); - -#pragma mark - 服务区详情信息 -/** - * @brief 设置是否打开服务区详情信息. since 8.0.0 - * @param enable 请求服务详情信息的功能是否打开, 默认为NO. - */ -- (void)setServiceAreaDetailsEnable:(BOOL)enable; - -#pragma mark - push路线相关 - -/** - * @brief 路线还原接口。since 9.0.0 - * @param startPOIInfo 起点POIInfo,参考 AMapNaviPOIInfo。如果以“我的位置”作为起点,请传nil。 如果startPOIInfo不为nil,那么POIID合法,优先使用ID参与算路,否则使用坐标点. - * @param endPOIInfo 终点POIInfo,参考 AMapNaviPOIInfo。如果POIID合法,优先使用ID参与算路,否则使用坐标点. 注意:POIID和坐标点不能同时为空 - * @param wayPOIInfos 途经点POIInfo,最多支持16个途经点,超过16个会取前16个。如果POIID合法,优先使用ID参与算路,否则使用坐标点。 注意:POIID和坐标点不能同时为空。 - * @param strategy 路径的计算策略。 - * @return 路线还原是否成功。 - */ -- (BOOL)pushDriveRouteWithRouteGuideData:(nonnull NSData *)routeData - startPOIInfo:(nonnull AMapNaviPOIInfo *)startPOIInfo - endPOIInfo:(nonnull AMapNaviPOIInfo *)endPOIInfo - wayPOIInfos:(nullable NSArray *)wayPOIInfos - drivingStrategy:(AMapNaviDrivingStrategy)strategy; - -// 5.1 算路协议升级后的路线还原接口 routeguide 协议版本号 since 9.0.0 -/** - * @brief 获取导航路线还原版本号。since 9.0.0 - * @return routeguide 协议版本号。 - */ -- (NSString *_Nullable)getPushDataNaviVersion; - -/** - * @brief 获得 routeService 版本号。 - * @return routeService 协议版本号。 - */ -- (NSString *_Nullable)routeSDKVersion; - -/** - * @brief 获得 routeServer 版本号。 - * @return routeServer 协议版本号。 - */ -- (NSString *_Nullable)routeServerVersion; -@end - -#pragma mark - Escort - -@interface AMapNaviDriveManager (Escort) - -/** - * 设置一路护航任务id. 注意:此方法必须在"开始算路"之前设置, 否则无效, since 6.7.0 - * @param missonID 一路护航的任务id - * @return 是否设置成功 - */ -- (BOOL)setEscortMissonID:(NSNumber *)missonID; - -@end - -#pragma mark - Private - -@interface AMapNaviDriveManager (Private) -/** - * @brief 私有静态方法,外部禁止调用. since 7.8.0 - */ -+ (BOOL)setCustomCloudControlEnable:(BOOL)enable; -/** - * @brief 私有实例接口,外部禁止调用. since 7.8.0 - */ -- (BOOL)setExtenalCloudControl:(nullable NSString *)cloudControlString; - -/** - * @brief 获取限行数据接口. 注意:当前接口为付费接口,使用当前接口需要 官网联系https://lbs.amap.com/ 商务 since 9.0.1 - * @param callback 获取限行数据的回调. success 代表是否获取限行数据成功,获取限行数据成功时,responseData 不为空;获取限行数据失败时,errorDesc 不为空. - *1. success 为true response成功时返回结构体: - { - "code": 1, ----code的value 为 1 请求限行数据成功 - "citynums": 1, - "citys": [{ - "citycode": 000, - "rulenums": 1, - "cityname": "XX市", - "title": "XXX限行政策", - "rules": [{ - "ruleid": 1766888, - "ring": 0, - "effect": 1, - "local": 2, - "vehicle": 1, - "time": "全天限行", - "policyname": "二环及以内外地机动车限行", - "summary": "二环路及以内道路(不含外侧辅路)", - "desc": "2021年11月1日起,外地全部机动车限行", - "otherdesc": "", - "centerpoint": "116.397451,39.909060", - "linepoints": "", - "areapoints": ""。 - }] - }] -} - code: - code的value 为 1 请求限行数据成功, code 为value 非1值,则代表限行数据服务返回失败 - areapoints: - 1.在同一限行区域存在一个限行多边形时,限行数据为经度和纬度使用逗号(,)隔开,多个经纬度使用分号(;)隔开; - example一个多边形数据: - |---------------- 多边形1--------------------| 每一个多边形对应一个polygon - lon1,lat1;lon2,lat2;lon3,lat3;lon4,lat4; - 2.在同一限行区域存在多个限行多边形时,多个多边形之间的数据使用竖线 (|) 隔开; - example3个多边形数据: - |---------------- 多边形1--------------------| |----------- 多边形2-----------| |----------- 多边形3-----------| - lon1,lat1;lon2,lat2;lon3,lat3;lon4,lat4| lon5,lat5;lon6,lat6;lon7,lat7| lon8,lat8;lon9,lat9;lon10,lat10 - * 2.success 为false response为空,errorDesc为返回的错误描述 - * @return 获取限行条件是否满足;路线上数据不为空,且路线上有限行信息,则返回YES,否则的话则返回NO;不代表获取限行数据成功与否 -*/ -- (BOOL)getRestrictareaInfoInRoute:(AMapNaviRoute *)route callback:(nonnull void (^)(BOOL responseSuccess, NSString *responseData, NSString *errorDesc))callback; - -@end - -#pragma mark - AMapNaviDriveManagerDelegate -@protocol AMapNaviDriveManagerDelegate -@optional -/** - * @brief 发生错误时,会调用代理的此方法 - * @param driveManager 驾车导航管理类 - * @param error 错误信息 - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager error:(NSError *)error; - -/** - * @brief 驾车路径规划成功后的回调函数,请尽量使用 -driveManager:onCalculateRouteSuccessWithType: 替代此方法 - * @param driveManager 驾车导航管理类 - */ -- (void)driveManagerOnCalculateRouteSuccess:(AMapNaviDriveManager *)driveManager; - -/** - * @brief 驾车路径规划成功后的回调函数 since 6.1.0 - * @param driveManager 驾车导航管理类 - * @param type 路径规划类型,参考 AMapNaviRoutePlanType - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager onCalculateRouteSuccessWithType:(AMapNaviRoutePlanType)type; - -/** - * @brief 驾车路径规划失败后的回调函数. 从5.3.0版本起,算路失败后导航SDK只对外通知算路失败,SDK内部不再执行停止导航的相关逻辑.因此,当算路失败后,不会收到 driveManager:updateNaviMode: 回调; AMapNaviDriveManager.naviMode 不会切换到 AMapNaviModeNone 状态, 而是会保持在 AMapNaviModeGPS or AMapNaviModeEmulator 状态. - * @param driveManager 驾车导航管理类 - * @param error 错误信息,error.code参照 AMapNaviCalcRouteState - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager onCalculateRouteFailure:(NSError *)error; - -/** - * @brief 驾车路径规划失败后的回调函数. since 6.1.0 - * @param driveManager 驾车导航管理类 - * @param error 错误信息,error.code参照 AMapNaviCalcRouteState - * @param type 路径规划类型,参考 AMapNaviRoutePlanType - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager onCalculateRouteFailure:(NSError *)error routePlanType:(AMapNaviRoutePlanType)type; - -/** - * @brief 启动导航后回调函数 - * @param naviMode 导航类型,参考 AMapNaviMode . - * @param driveManager 驾车导航管理类 - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager didStartNavi:(AMapNaviMode)naviMode; - -/** - * @brief 出现偏航需要重新计算路径时的回调函数.偏航后 SDK 内部将自动重新路径规划,该方法将在自动重新路径规划前通知您进行额外的处理,您无需自行算路. - * @param driveManager 驾车导航管理类 - */ -- (void)driveManagerNeedRecalculateRouteForYaw:(AMapNaviDriveManager *)driveManager; - -/** - * @brief 前方遇到拥堵需要重新计算路径时的回调函数.拥堵后 SDK 将自动重新路径规划,该方法将在自动重新路径规划前通知您进行额外的处理,您无需自行算路. - * @param driveManager 驾车导航管理类 - */ -- (void)driveManagerNeedRecalculateRouteForTrafficJam:(AMapNaviDriveManager *)driveManager; - -/** - * @brief 导航到达某个途经点的回调函数 - * @param driveManager 驾车导航管理类 - * @param wayPointIndex 到达的途径点的索引值,表示的是 AMapNaviRoute.wayPointsInfo 的索引. - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager onArrivedWayPoint:(int)wayPointIndex; - -/** - * @brief 开发者请根据实际情况返回是否正在播报语音,如果正在播报语音,请返回YES, 如果没有在播报语音,请返回NO - * @param driveManager 驾车导航管理类 - * @return 如一直返回YES,SDK内部会认为外界声道较忙,导致部分文字无法吐出; 如一直返回NO,文字吐出的频率可能会过快,会出现打断的情况,所以请根据实际情况返回。 - */ -- (BOOL)driveManagerIsNaviSoundPlaying:(AMapNaviDriveManager *)driveManager; - -/** - * @brief 导航播报信息回调函数,此回调函数需要和driveManagerIsNaviSoundPlaying:配合使用 - * @param driveManager 驾车导航管理类 - * @param soundString 播报文字 - * @param soundStringType 播报类型,参考 AMapNaviSoundType. 注意:since 6.0.0 AMapNaviSoundType 只返回 AMapNaviSoundTypeDefault - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager playNaviSoundString:(NSString *)soundString soundStringType:(AMapNaviSoundType)soundStringType; - -/** - * @brief 模拟导航到达目的地后的回调函数 - * @param driveManager 驾车导航管理类 - */ -- (void)driveManagerDidEndEmulatorNavi:(AMapNaviDriveManager *)driveManager; - -/** - * @brief 实时导航到达目的地后的回调函数 - * @param driveManager 驾车导航管理类 - */ -- (void)driveManagerOnArrivedDestination:(AMapNaviDriveManager *)driveManager; - -/** - * @brief 导航(巡航)过程中播放提示音的回调函数. since 5.4.0 - * @param driveManager 驾车导航管理类 - * @param ringType 提示音类型,参考 AMapNaviRingType . - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager onNaviPlayRing:(AMapNaviRingType)ringType; - -/** - * @brief 卫星定位信号强弱回调函数. since 5.5.0 - * @param driveManager 驾车导航管理类 - * @param gpsSignalStrength 卫星定位信号强度类型,参考 AMapNaviGPSSignalStrength . - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager updateGPSSignalStrength:(AMapNaviGPSSignalStrength)gpsSignalStrength; - -/** - * @brief 实时导航中关于路线的‘信息通知’回调. since 6.2.0 - * @param driveManager 驾车导航管理类 - * @param notifyData 通知信息, 参考 AMapNaviRouteNotifyData . - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager postRouteNotification:(AMapNaviRouteNotifyData *)notifyData; - -/** - * @brief 多路线实时导航模式下,建议将某备选路线切换为主导航路线的回调函数. since 6.3.0 - * @param driveManager 驾车导航管理类 - * @param suggestChangeMainNaviRouteInfo 切换主导航路线的相关信息, 参考 AMapNaviSuggestChangeMainNaviRouteInfo . - */ -- (void)driveManager:(AMapNaviDriveManager *)driveManager onSuggestChangeMainNaviRoute:(AMapNaviSuggestChangeMainNaviRouteInfo *)suggestChangeMainNaviRouteInfo; - -/** - * @brief 驾车导航道路舒适度回调。特别注意:当前接口为收费接口,您如果申请试用或者正式应用都请通过工单系统提交商务合作类工单进行沟通 https://lbs.amap.com/ since 9.3.5 - * @param manager 驾车导航管理类 - * @param driveComfort 驾车舒适度信息对象 - */ -- (void)driveManager:(AMapNaviDriveManager *_Nullable)manager onUpdateDriveComfort:(AMapNaviDriveComfort *_Nonnull)driveComfort; - -/** - * 驾车导航三急(急加速/急减速/急转弯)事件回调。特别注意:当前接口为收费接口,您如果申请试用或者正式应用都请通过工单系统提交商务合作类工单进行沟通 https://lbs.amap.com/ since 9.3.5 - * @param manager 驾车导航管理类 - * @param driveEvent 驾驶事件信息对象 - */ -- (void)driveManager:(AMapNaviDriveManager *_Nullable)manager onUpdateDriveEvent:(AMapNaviDriveEvent *_Nonnull)driveEvent; - -/** - * 路段限速值,进入新的路段后,会回调当前路段的限速值,进入没有限速的路段时,限速值回调为0。since 9.6.0 - * @param manager 驾车导航管理类 - * @param speed 路段限速值 - */ -- (void)driveManager:(AMapNaviDriveManager *_Nullable)manager onUpdateNaviSpeedLimitSection:(NSInteger)speed; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviDriveView.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviDriveView.h deleted file mode 100644 index 8e4f634..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviDriveView.h +++ /dev/null @@ -1,344 +0,0 @@ -// -// AMapNaviDriveView.h -// AMapNaviKit -// -// Created by AutoNavi on 15/12/28. -// Copyright © 2016年 Amap. All rights reserved. -// - -#import "AMapNaviHeaderHandler.h" -#import "AMapNaviCommonObj.h" -#import "AMapNaviDriveDataRepresentable.h" -#import "AMapNaviCompositeAnnotation.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol AMapNaviDriveViewDelegate; - -///驾车导航界面.该类实现AMapNaviDriveDataRepresentable协议,可通过 AMapNaviDriveManager 的addDataRepresentative:方法进行注册展示驾车导航过程. -@interface AMapNaviDriveView : UIView - -#pragma mark - Delegate - -///实现了 AMapNaviDriveViewDelegate 协议的类指针 -@property (nonatomic, weak) id delegate; - -///可获得和 MAMapView 原始 Delegate 同样的能力. since 7.0.0 -@property (nonatomic, weak) id mapViewDelegate; - -#pragma mark - Mode Options - -///导航界面跟随模式,默认AMapNaviViewTrackingModeMapNorth -@property (nonatomic, assign) AMapNaviViewTrackingMode trackingMode; - -///导航界面显示模式,默认AMapNaviDriveViewShowModeCarPositionLocked -@property (nonatomic, assign) AMapNaviDriveViewShowMode showMode; - -#pragma mark - Map Options - -///当前地图Logo位置, 必须在 AMapNaviDriveView.bounds 之内,否则会被忽略. 注意:只有showUIElements为NO时,设置此值才有效. since 6.2.0 -@property (nonatomic, assign) CGPoint logoCenter; - -///当前地图Logo的宽高. since 6.2.0 -@property (nonatomic, assign, readonly) CGSize logoSize; - -///当前地图是否显示比例尺,默认NO. 注意:只有showUIElements为NO时,设置此值才有效. -@property (nonatomic, assign) BOOL showScale; - -///当前地图比例尺的原点位置. 注意:只有showUIElements为NO时,设置此值才有效. -@property (nonatomic, assign) CGPoint scaleOrigin; - -///是否显示指南针,默认NO -@property (nonatomic, assign) BOOL showCompass; - -///指南针原点位置. since 6.3.0 -@property (nonatomic, assign) CGPoint compassOrigin; - -///指南针的宽高. since 6.3.0 -@property (nonatomic, assign, readonly) CGSize compassSize; - -///地图是否显示交通路况,默认YES. since 6.1.0 -@property (nonatomic, assign) BOOL mapShowTraffic; - -///当前地图的zoomLevel,修改zoomLevel会进入非锁车状态 -@property (nonatomic, assign) CGFloat mapZoomLevel; - -///锁车模式下是否为了预见下一导航动作自动缩放地图,默认为YES。 since 10.0.2 -@property (nonatomic, assign) BOOL autoZoomMapLevel; - -///非锁车状态下地图cameraDegree,锁车态下内部会处理, 默认35.0, 范围[0,60] -@property (nonatomic, assign) CGFloat cameraDegree; - -///地图的视图锚点. (0, 0)为左上角,(1, 1)为右下角. 可通过设置此值来改变自车图标的默认显示位置. 注意:只有showUIElements为NO时,设置此值才有效 since 6.2.0 -@property (nonatomic, assign) CGPoint screenAnchor; - -///当前地图最大帧数,有效的帧数为:60、30、20、10等能被60整除的数,默认为60. since 6.5.0 -@property (nonatomic, assign) NSUInteger maxRenderFrame; - -///导航界面日夜模式类型, 默认为 AMapNaviViewMapModeTypeDay(白天模式) since 6.7.0 -@property (nonatomic, assign) AMapNaviViewMapModeType mapViewModeType; - -/** - * @brief 自定义地图样式设置,可以支持分级样式配置,如控制不同级别显示不同的颜色(自7.8.0开始使用新版样式,请到官网(lbs.amap.com)更新新版样式文件,否则无法正常显示路口放大图) - * @param styleOptions 自定义样式options. since 6.6.0 - */ -- (void)setCustomMapStyleOptions:(MAMapCustomStyleOptions *)styleOptions; - -///地图是否自动切换白天黑夜模式,默认NO. -@property (nonatomic, assign) BOOL autoSwitchDayNightType __attribute((deprecated("已废弃, 请使用 mapViewModeType 替代 since 6.7.0"))); - -///是否黑夜模式,默认NO. -@property (nonatomic, assign) BOOL showStandardNightType __attribute((deprecated("已废弃, 请使用 mapViewModeType 替代 since 6.7.0"))); - -///当前地图是否开启自定义样式, 默认NO. -@property (nonatomic, assign) BOOL customMapStyleEnabled __attribute((deprecated("已废弃, 请使用 mapViewModeType 替代 since 6.7.0"))); - -/** - * @brief 自定义当前地图样式, 目前仅支持自定义标准类型. 已废弃, 请使用 setCustomMapStyleOptions: since 6.6.0 - * @param customJson 自定义的JSON格式数据. - */ -- (void)setCustomMapStyle:(NSData *)customJson __attribute((deprecated("已废弃, 请使用 setCustomMapStyleOptions: 替代 since 6.6.0"))); - -/** - * @brief 根据web导出数据设置地图样式, 目前仅支持自定义标准类型. 默认不生效,调用customMapStyleEnabled=YES使生效. since 5.1.0 - * @param data 高德web端工具导出的地图样式数据. - */ -- (void)setCustomMapStyleWithWebData:(NSData*)data __attribute((deprecated("已废弃, 请使用 setCustomMapStyleOptions: 替代 since 6.6.0"))); - -#pragma mark - Annoation Options and Overlay Options - -///是否显示实时交通图层(地图路况+路线路况),默认YES -@property (nonatomic, assign) BOOL showTrafficLayer __attribute((deprecated("已废弃, 请使用 mapShowTraffic 结合 -statusTextures: 替代. since 7.4.0"))); - -///路线上是否显示摄像头,默认YES -@property (nonatomic, assign) BOOL showCamera; - -///路线上是否显示转向箭头,默认YES -@property (nonatomic, assign) BOOL showTurnArrow; - -///路线上转弯箭头颜色. since 6.1.0 -@property (nonatomic, strong) UIColor *turnArrowColor; - -///路线上转弯箭头的宽度,设置0恢复默认宽度. since 6.2.0 -@property (nonatomic, assign) CGFloat turnArrowWidth; - -///路线上转弯箭头是否为3D箭头线,默认为YES. since 6.6.0 -@property (nonatomic, assign) BOOL turnArrowIs3D; - -///路线上转弯箭头设置3D箭头的侧边颜色(当turnArrowIs3D为YES时有效). since 6.6.0 -@property (nonatomic, strong) UIColor *turnArrowSideColor; - -///是否显示牵引线,默认YES. since 6.2.0 -@property (nonatomic, assign) BOOL showVectorline; - -///是否显示红绿灯图标,默认YES. since 6.2.0 -@property (nonatomic, assign) BOOL showTrafficLights; - -///是否显示小车图标,默认YES. since 6.2.0 -@property (nonatomic, assign) BOOL showCar; - -///是否显示路线,默认YES. 注意:路线上的相关信息,如摄像头(showCamera)、红绿灯(showTrafficLights)、转向箭头(showTurnArrow)、牵引线(showVectorline)、起终点等也会一同受控制,进行显示和隐藏. since 6.2.0 -@property (nonatomic, assign) BOOL showRoute; - -///多路线导航模式下是否显示备选路线, 默认YES. since 6.7.0 -@property (nonatomic, assign) BOOL showBackupRoute; - -///走过的路线是否置灰,默认为NO. since 6.2.0 -@property (nonatomic, assign) BOOL showGreyAfterPass; - -///路线polyline的宽度,设置0恢复默认宽度 -@property (nonatomic, assign) CGFloat lineWidth; - -///自定义导航界面自车图标的弹出框view, 设置为nil取消弹框. 注意:弹框功能同MAAnnotationView的customCalloutView, 弹框不会触发 mapView:didAnnotationViewCalloutTapped: 方法. since 5.1.0 -@property (nonatomic, strong, nullable) MACustomCalloutView *customCalloutView; - -///路线虚线部分的颜色. since 6.2.0 -@property (nonatomic, strong) UIColor *dashedLineColor; - -// 路线走过后置灰的颜色 since 10.0.2 -@property (nonatomic, strong) AMapNaviPolylineGreyColor *routeGreyColor; - -///路线的路况颜色,根据AMapNaviRouteStatus配置不同道路状态的颜色 since 10.0.2 -@property (nonatomic, copy) NSArray *routeStatusColor; - -//设置自定义View是否显示鹰眼地图,默认为NO。显示鹰眼小地图的时候,光柱图和全览按钮隐藏。 特别注意:当前接口为收费接口,您如果申请试用或者正式应用都请通过工单系统提交商务合作类工单进行沟通 https://lbs.amap.com/。since 10.0.2 -@property (nonatomic, assign) BOOL showEagleMap; - -///是否显示电子眼的距离,默认为NO。since 10.0.2 -@property (nonatomic, assign) BOOL showCameraDistance; - -///是否显示超速脉冲,默认为NO。特别注意:当前接口为收费接口,您如果申请试用或者正式应用都请通过工单系统提交商务合作类工单进行沟通 https://lbs.amap.com/。since 10.0.2 -@property (nonatomic, assign) BOOL showOverSpeedPulse; - -///路线上是否显示拥堵气泡,默认YES。 since 10.0.5 -@property (nonatomic, assign) BOOL showDriveCongestion; - -///路线上是否显示红绿灯倒计时,开启付费权限时默认YES。特别注意:当前接口为收费接口,您如果申请试用或者正式应用都请通过工单系统提交商务合作类工单进行沟通 https://lbs.amap.com/。since 10.0.5 -@property (nonatomic, assign) BOOL showTrafficLightView; - -/** - * @brief 设置摄像头图标 - * @param cameraImage 摄像头图标。 - */ -- (void)setCameraImage:(nullable UIImage *)cameraImage; - -/** - * @brief 设置路径起点图标 - * @param startPointImage 起点图标,设置nil为默认图标 - */ -- (void)setStartPointImage:(nullable UIImage *)startPointImage; - -/** - * @brief 设置路径途经点图标 - * @param wayPointImage 途经点图标,设置nil为默认图标 - */ -- (void)setWayPointImage:(nullable UIImage *)wayPointImage; - -/** - * @brief 设置路径终点图标 - * @param endPointImage 终点图标,设置nil为默认图标 - */ -- (void)setEndPointImage:(nullable UIImage *)endPointImage; - -/** - * @brief 设置自车图标 - * @param carImage 自车图标,设置nil为默认图标 - */ -- (void)setCarImage:(nullable UIImage *)carImage; - -/** - * @brief 设置自车罗盘图标 - * @param carCompassImage 自车罗盘图标,设置nil为默认图标 - */ -- (void)setCarCompassImage:(nullable UIImage *)carCompassImage; - -/** - * @brief 在导航地图中添加自定义标注. since 6.2.0 - * @param annotation 具体参考 AMapNaviCompositeCustomAnnotation . - */ -- (void)addCustomAnnotation:(AMapNaviCompositeCustomAnnotation *)annotation; - -/** - * @brief 移除导航地图中的自定义标注. since 6.2.0 - * @param annotation 具体参考 AMapNaviCompositeCustomAnnotation . - */ -- (void)removeCustomAnnotation:(AMapNaviCompositeCustomAnnotation *)annotation; - -/** - * @brief 在导航地图中添加自定义overlay. since 6.7.0 - * @param overlay 具体参考 官方Demo中 DriveViewWithCustomOverlayViewController . - */ -- (void)addCustomOverlay:(id _Nonnull)overlay; - -/** - * @brief 移除导航地图中的自定义overlay. since 6.7.0 - * @param overlay 具体参考 AMapNaviCompositeOverlay . - */ -- (void)removeCustomOverlay:(id _Nonnull)overlay; - -#pragma mark - UI Element Options - -///是否显示界面元素,默认YES -@property (nonatomic, assign) BOOL showUIElements; - -///是否显示路口放大图,默认YES -@property (nonatomic, assign) BOOL showCrossImage; - -///是否显示实时交通按钮,默认YES -@property (nonatomic, assign) BOOL showTrafficButton; - -///是否显示路况光柱图,默认YES -@property (nonatomic, assign) BOOL showTrafficBar; - -///是否显示全览按钮,默认YES -@property (nonatomic, assign) BOOL showBrowseRouteButton; - -///是否显示更多按钮,默认YES -@property (nonatomic, assign) BOOL showMoreButton; - -///光柱图位置。since 10.0.2 -@property (nonatomic, assign) CGRect tmcRouteFrame; - -///光柱图颜色,根据AMapNaviRouteStatus配置不同道路状态的颜色,AMapNaviRouteStatusUnknow 的可以不做配置。since 10.0.2 -@property (nonatomic, copy) NSArray *tmcRouteColor; - -#pragma mark - Other - -///目前是否为横屏状态. since 6.2.0 内部会自行监听 UIDeviceOrientationDidChange 进行横竖屏切换,无需再设置此值,但用户要自行保证 AMapNaviDriveView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight,让 AMapNaviDriveView 能够跟着父View一起变化. 可通过回调 -driveView:didChangeOrientation: 获取横竖屏切换时机 -@property (nonatomic, assign, readonly) BOOL isLandscape; - -///当显示模式为非锁车模式时,是否在7秒后自动设置为锁车模式,默认为NO. since 5.3.0 -@property (nonatomic, assign) BOOL autoSwitchShowModeToCarPositionLocked; - -/** - * @brief 在全览状态下调用此函数能够让路线显示在可视区域内(排除EdgePadding后剩余的区域),保证路线不被自定义界面元素遮挡. 比如showUIElements为NO时(自定义界面)横竖屏切换后,可以调用此函数. since 6.2.0 - */ -- (void)updateRoutePolylineInTheVisualRangeWhenTheShowModeIsOverview; - -@end - -@protocol AMapNaviDriveViewDelegate -@optional - -/** - * @brief 导航界面关闭按钮点击时的回调函数 - * @param driveView 驾车导航界面 - */ -- (void)driveViewCloseButtonClicked:(AMapNaviDriveView *)driveView; - -/** - * @brief 导航界面更多按钮点击时的回调函数 - * @param driveView 驾车导航界面 - */ -- (void)driveViewMoreButtonClicked:(AMapNaviDriveView *)driveView; - -/** - * @brief 导航界面转向指示View点击时的回调函数 - * @param driveView 驾车导航界面 - */ -- (void)driveViewTrunIndicatorViewTapped:(AMapNaviDriveView *)driveView; - -/** - * @brief 导航界面显示模式改变后的回调函数 - * @param driveView 驾车导航界面 - * @param showMode 显示模式 - */ -- (void)driveView:(AMapNaviDriveView *)driveView didChangeShowMode:(AMapNaviDriveViewShowMode)showMode; - -/** - * @brief 驾车导航界面跟随模式改变后的回调函数. since 6.2.0 - * @param driveView 驾车导航界面 - * @param trackMode 跟随模式 - */ -- (void)driveView:(AMapNaviDriveView *)driveView didChangeTrackingMode:(AMapNaviViewTrackingMode)trackMode; - -/** - * @brief 驾车导航界面跟随模式改变动画执行完成的回调函数,可在此函数中设置地图状态。注意,只有在showMode为AMapNaviDriveViewShowModeNormal时才会回调。 since 10.0.2 - * @param driveView 驾车导航界面 - */ -- (void)driveViewTrackingModeAnimationFinished:(AMapNaviDriveView *)driveView; - -/** - * @brief 驾车导航界面横竖屏切换后的回调函数. since 6.2.0 - * @param driveView 驾车导航界面 - * @param isLandscape 是否是横屏 - */ -- (void)driveView:(AMapNaviDriveView *)driveView didChangeOrientation:(BOOL)isLandscape; - -/** - * @brief 驾车导航界面白天黑夜模式切换后的回调函数. since 6.2.0 - * @param driveView 驾车导航界面 - * @param showStandardNightType 是否为黑夜模式 - */ -- (void)driveView:(AMapNaviDriveView *)driveView didChangeDayNightType:(BOOL)showStandardNightType; - -/** - * @brief 在showUIElements为NO时,驾车导航界面需要实时的取得可视区域,比如切换成全览时、横竖屏切换时、动态计算地图的缩放级别时. 注意:此回调只在showUIElements为NO时,才会调用且比较频繁,在获取EdgePadding时请勿进行大量的计算. since 6.2.0 - * @param driveView 驾车导航界面 - * @return 如(100, 50, 80, 60)表示的是:driveView.bounds 上边留出100px,左边留出50px,底部留出80px,右边留出60px后的区域为可视区域,一般EdgePadding的值由用户的界面布局决定. - */ -- (UIEdgeInsets)driveViewEdgePadding:(AMapNaviDriveView *)driveView; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviEleBikeDataRepresentable.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviEleBikeDataRepresentable.h deleted file mode 100644 index 8f062c2..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviEleBikeDataRepresentable.h +++ /dev/null @@ -1,65 +0,0 @@ -// -// AMapNaviEleBikeDataRepresentable.h -// AMapNaviKit -// -// Created by menglong on 2022/1/12. -// Copyright © 2022 Amap. All rights reserved. -// - -#import "AMapNaviCommonObj.h" - -NS_ASSUME_NONNULL_BEGIN - -@class AMapNaviInfo; -@class AMapNaviRoute; -@class AMapNaviLocation; -@class AMapNaviStatisticsInfo; -@class AMapNaviEleBikeManager; - -/** - * @brief AMapNaviEleBikeeDataRepresentable协议.实例对象可以通过实现该协议,并将其通过 AMapNaviEleBikeManager 的addDataRepresentative:方法进行注册,便可获取导航过程中的导航数据更新. - * 可以根据不同需求,选取使用特定的数据进行导航界面自定义. - * AMapNaviRideView 即通过该协议实现导航过程展示.也可以依据导航数据的更新进行其他的逻辑处理. - */ -@protocol AMapNaviEleBikeDataRepresentable - -@optional - -/** - * @brief 导航模式更新回调 - * @param eleBikeManager 电动车骑行导航管理类 - * @param naviMode 导航模式,参考 AMapNaviMode 值 - */ -- (void)rideManager:(AMapNaviEleBikeManager *)eleBikeManager updateNaviMode:(AMapNaviMode)naviMode; - -/** - * @brief 路径ID更新回调. 注意:请不要在此回调中调用 -selectNaviRouteWithRouteID: 接口,否则会出现死循环调用. - * @param eleBikeManager 电动车骑行导航管理类 - * @param naviRouteID 导航路径ID - */ -- (void)rideManager:(AMapNaviEleBikeManager *)eleBikeManager updateNaviRouteID:(NSInteger)naviRouteID; - -/** - * @brief 路径信息更新回调. 注意:请不要在此回调中调用 -selectNaviRouteWithRouteID: 接口,否则会出现死循环调用. - * @param eleBikeManager 电动车骑行导航管理类 - * @param naviRoute 路径信息,参考 AMapNaviRoute 类 - */ -- (void)rideManager:(AMapNaviEleBikeManager *)eleBikeManager updateNaviRoute:(nullable AMapNaviRoute *)naviRoute; - -/** - * @brief 导航信息更新回调 - * @param eleBikeManager 电动车骑行导航管理类 - * @param naviInfo 导航信息,参考 AMapNaviInfo 类 - */ -- (void)rideManager:(AMapNaviEleBikeManager *)eleBikeManager updateNaviInfo:(nullable AMapNaviInfo *)naviInfo; - -/** - * @brief 自车位置更新回调 - * @param eleBikeManager 电动车骑行导航管理类 - * @param naviLocation 自车位置信息,参考 AMapNaviLocation 类 - */ -- (void)rideManager:(AMapNaviEleBikeManager *)eleBikeManager updateNaviLocation:(nullable AMapNaviLocation *)naviLocation; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviEleBikeManager.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviEleBikeManager.h deleted file mode 100644 index 9ed2337..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviEleBikeManager.h +++ /dev/null @@ -1,229 +0,0 @@ -// -// AMapNaviEleBikeManager.h -// AMapNaviKit -// -// Created by yuanmenglong on 2021/3/31. -// Copyright © 2021 Amap. All rights reserved. -// - - -#import "AMapNaviTravelManager.h" -#import "AMapNaviEleBikeDataRepresentable.h" - -@protocol AMapNaviEleBikeManagerDelegate; -NS_ASSUME_NONNULL_BEGIN - -///电动车骑行导航管理类 -@interface AMapNaviEleBikeManager : AMapNaviTravelManager - -#pragma mark - Singleton - -/** - * @brief AMapNaviEleBikeManager单例. since 8.0.0 - * @return AMapNaviEleBikeManager实例 - */ -+ (instancetype)sharedInstance; - -/** - * @brief 销毁AMapNaviEleBikeManager单例. since 8.0.0 - * @return 是否销毁成功. 如果返回NO,请检查单例是否被强引用 - */ -+ (BOOL)destroyInstance; - -/** - * @brief 请使用单例替代. since 8.0.0 init已被禁止使用,请使用单例 [AMapNaviEleBikeManager sharedInstance] 替代 - */ -- (instancetype)init __attribute__((unavailable("since 8.0.0 init 已被禁止使用,请使用单例 [AMapNaviEleBikeManager sharedInstance] 替代"))); - -#pragma mark - Delegate - -///实现了 AMapNaviRideManagerDelegate 协议的类指针 -@property (nonatomic, weak) id delegate; - -#pragma mark - Data Representative - -/** - * @brief 增加用于展示导航数据的DataRepresentative.注意:该方法不会增加实例对象的引用计数(Weak Reference) - * @param aRepresentative 实现了 AMapNaviRideDataRepresentable 协议的实例 - */ -- (void)addDataRepresentative:(id)aRepresentative; - -/** - * @brief 移除用于展示导航数据的DataRepresentative - * @param aRepresentative 实现了 AMapNaviRideDataRepresentable 协议的实例 - */ -- (void)removeDataRepresentative:(id)aRepresentative; - -/** - * @brief 增加用于接收导航回调事件的Listener, 效果等同于delegate. 注意:该方法不会增加实例对象的引用计数(Weak Reference). since 9.0.1 - * @param aListener 实现了 AMapNaviRideManagerDelegate 协议的实例 - */ -- (void)addEventListener:(id)aListener; - -/** - * @brief 移除用于接收导航回调事件的Listener. since 9.0.1 - * @param aListener 实现了 AMapNaviRideManagerDelegate 协议的实例 - */ -- (void)removeEventListener:(id)aListener; - - -#pragma mark - Navi Route - -///当前导航路径的ID -@property (nonatomic, readonly) NSInteger naviRouteID; - -///当前导航路径的信息,参考 AMapNaviRoute 类. -@property (nonatomic, readonly, nullable) AMapNaviRoute *naviRoute; - -/** - * @brief 多路径规划时的所有路径信息 since 8.0.0 - * @return 返回多路径规划时的所有路径ID和路线信息 - */ -- (NSDictionary *)naviRoutes; - - -/** - * @brief 多路径规划时的所有路径ID,路径ID为 NSInteger 类型 since 8.0.0 - * @return 返回多路径规划时的所有路径ID - */ -- (NSArray *)naviRouteIDs; - -/** - * @brief 多路径规划时选择路径.注意:该方法仅限于在开始导航前使用,开始导航后该方法无效 since 8.0.0 - * @param routeID 路径ID - * @return 是否选择路径成功 - */ -- (BOOL)selectNaviRouteWithRouteID:(NSInteger)routeID; - -///卫星定位信号强度类型,参考 AMapNaviGPSSignalStrength. 注意:只有导航中获取卫星定位信号强弱的值有效 -@property (nonatomic, assign, readonly) AMapNaviGPSSignalStrength gpsSignalStrength; - -#pragma mark - Calculate Route - -// 以下算路方法需要高德坐标(GCJ02) - -/** - * @brief 不带起点的电动车骑行路径规划 - * @param endPoint 终点坐标. - * @return 规划路径所需条件和参数校验是否成功,不代表算路成功与否 - */ -- (BOOL)calculateEleBikeRouteWithEndPoint:(AMapNaviPoint *)endPoint; - -/** - * @brief 带起点的电动车骑行路径规划 - * @param startPoint 起点坐标. - * @param endPoint 终点坐标. - * @return 规划路径所需条件和参数校验是否成功,不代表算路成功与否 - */ -- (BOOL)calculateEleBikeRouteWithStartPoint:(AMapNaviPoint *)startPoint - endPoint:(AMapNaviPoint *)endPoint; - -/** - * @brief 根据高德POIInfo进行电动车骑行路径规划. since 8.0.0 - * @param startPOIInfo 起点POIInfo, 参考 AMapNaviPOIInfo. 如果以“我的位置”作为起点,请传nil. 如果startPOIInfo不为nil,那么POIID合法,优先使用ID参与算路,否则使用坐标点 - * @param endPOIInfo 终点POIInfo, 参考 AMapNaviPOIInfo. 如果POIID合法,优先使用ID参与算路,否则使用坐标点. 注意:POIID和坐标点不能同时为空 - * @param strategy 路径的计算策略,参考 AMapNaviTravelStrategy. - * @return 规划路径所需条件和参数校验是否成功,不代表算路成功与否 -*/ -- (BOOL)calculateEleBikeRouteWithStartPOIInfo:(nullable AMapNaviPOIInfo *)startPOIInfo - endPOIInfo:(nonnull AMapNaviPOIInfo *)endPOIInfo - strategy:(AMapNaviTravelStrategy)strategy; - -/** - * @brief 独立算路能力接口,可用于不干扰本次导航的单独算路场景. since 8.0.0 - * @param startPOIInfo 起点POIInfo, 参考 AMapNaviPOIInfo. 如果以“我的位置”作为起点,请传nil. 如果startPOIInfo不为nil,那么POIID合法,优先使用ID参与算路,否则使用坐标点 - * @param endPOIInfo 终点POIInfo, 参考 AMapNaviPOIInfo. 如果POIID合法,优先使用ID参与算路,否则使用坐标点. 注意:POIID和坐标点不能同时为空 - * @param strategy 路径的计算策略,参考 AMapNaviTravelStrategy. - * @param callback 算路完成的回调. 算路成功时,routeGroup 不为空;算路失败时,error 不为空,error.code参照 AMapNaviCalcRouteState. - * @return 规划路径所需条件和参数校验是否成功,不代表算路成功与否 - */ -- (BOOL)independentCalculateEleBikeRouteWithStartPOIInfo:(nullable AMapNaviPOIInfo *)startPOIInfo - endPOIInfo:(nonnull AMapNaviPOIInfo *)endPOIInfo - strategy:(AMapNaviTravelStrategy)strategy - callback:(nullable void (^)(AMapNaviRouteGroup *_Nullable routeGroup, NSError *_Nullable error))callback; - -/** - * @brief 导航过程中重新规划路径(起点为当前位置,终点位置不变) - * @return 重新规划路径所需条件和参数校验是否成功, 不代表算路成功与否,如非导航状态下调用此方法会返回NO. - */ -- (BOOL)recalculateEleBikeRoute; - -#pragma mark - Manual - -/** - * @brief 开发者请根据实际情况设置外界此时是否正在进行语音播报. since 8.0.0 - * @param playing 如果外界正在播报语音,传入YES,否则传入NO. -*/ -- (void)setTTSPlaying:(BOOL)playing; - -@end - - -#pragma mark - AMapNaviRideManagerDelegate - -@protocol AMapNaviEleBikeManagerDelegate -@optional - -/** - * @brief 发生错误时,会调用代理的此方法 - * @param eleBikeManager 电动车骑行导航管理类 - * @param error 错误信息 - */ -- (void)rideManager:(AMapNaviEleBikeManager *)eleBikeManager error:(NSError *)error; - -/** - * @brief 骑行路径规划成功后的回调函数 - * @param eleBikeManager 电动车骑行导航管理类 - */ -- (void)rideManagerOnCalculateRouteSuccess:(AMapNaviEleBikeManager *)eleBikeManager; - -/** - * @brief 骑行路径规划失败后的回调函数. 从6.1.0版本起,算路失败后导航SDK只对外通知算路失败,SDK内部不再执行停止导航的相关逻辑.因此,当算路失败后,不会收到 driveManager:updateNaviMode: 回调; AMapNaviRideManager.naviMode 不会切换到 AMapNaviModeNone 状态, 而是会保持在 AMapNaviModeGPS or AMapNaviModeEmulator 状态 - * @param eleBikeManager 电动车骑行导航管理类 - * @param error 错误信息,error.code参照AMapNaviCalcRouteState - */ -- (void)rideManager:(AMapNaviEleBikeManager *)eleBikeManager onCalculateRouteFailure:(NSError *)error; - -/** - * @brief 启动导航后回调函数 - * @param eleBikeManager 电动车骑行导航管理类 - * @param naviMode 导航类型,参考AMapNaviMode - */ -- (void)rideManager:(AMapNaviEleBikeManager *)eleBikeManager didStartNavi:(AMapNaviMode)naviMode; - -/** - * @brief 出现偏航需要重新计算路径时的回调函数.偏航后将自动重新路径规划,该方法将在自动重新路径规划前通知您进行额外的处理. - * @param eleBikeManager 电动车骑行导航管理类 - */ -- (void)rideManagerNeedRecalculateRouteForYaw:(AMapNaviEleBikeManager *)eleBikeManager; - -/** - * @brief 导航播报信息回调函数 - * @param eleBikeManager 电动车骑行导航管理类 - * @param soundString 播报文字 - * @param soundStringType 播报类型,参考 AMapNaviSoundType. 注意:since 6.0.0 AMapNaviSoundType 只返回 AMapNaviSoundTypeDefault - */ -- (void)rideManager:(AMapNaviEleBikeManager *)eleBikeManager playNaviSoundString:(NSString *)soundString soundStringType:(AMapNaviSoundType)soundStringType; - -/** - * @brief 模拟导航到达目的地停止导航后的回调函数 - * @param eleBikeManager 电动车骑行导航管理类 - */ -- (void)rideManagerDidEndEmulatorNavi:(AMapNaviEleBikeManager *)eleBikeManager; - -/** - * @brief 导航到达目的地后的回调函数 - * @param eleBikeManager 电动车骑行导航管理类 - */ -- (void)rideManagerOnArrivedDestination:(AMapNaviEleBikeManager *)eleBikeManager; - -/** - * @brief 卫星定位信号强弱回调函数. since 7.4.0 - * @param eleBikeManager 电动车骑行导航管理类 - * @param gpsSignalStrength 卫星定位信号强度类型,参考 AMapNaviGPSSignalStrength . - */ -- (void)rideManager:(AMapNaviEleBikeManager *)eleBikeManager updateGPSSignalStrength:(AMapNaviGPSSignalStrength)gpsSignalStrength; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviHUDView.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviHUDView.h deleted file mode 100644 index eeecc94..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviHUDView.h +++ /dev/null @@ -1,51 +0,0 @@ -// -// AMapNaviHUDView.h -// AMapNaviKit -// -// Created by AutoNavi on 15/12/28. -// Copyright © 2016年 Amap. All rights reserved. -// - -#import "AMapNaviCommonObj.h" -#import "AMapNaviDriveDataRepresentable.h" -#import "AMapNaviWalkDataRepresentable.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol AMapNaviHUDViewDelegate; - -///HUD导航界面.该类实现AMapNaviDriveDataRepresentable和AMapNaviWalkDataRepresentable协议,可以展示驾车HUD和步行HUD导航过程. -@interface AMapNaviHUDView : UIView - -#pragma mark - Delegate - -///实现了 AMapNaviHUDViewDelegate 协议的类指针 -@property (nonatomic, weak) id delegate; - -#pragma mark - Options - -///是否采用横屏布局,默认NO -@property (nonatomic, assign) BOOL isLandscape; - -///是否以镜像的方式显示,默认YES -@property (nonatomic, assign) BOOL isMirror; - -///是否显示剩余距离,默认YES -@property (nonatomic, assign) BOOL showRemainDistance; - -///是否显示剩余时间,默认YES -@property (nonatomic, assign) BOOL showRemainTime; - -@end - -@protocol AMapNaviHUDViewDelegate - -/** - * @brief HUD导航界面返回按钮点击时的回调函数 - * @param hudView HUD导航界面 - */ -- (void)hudViewCloseButtonClicked:(AMapNaviHUDView *)hudView; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviHeaderHandler.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviHeaderHandler.h deleted file mode 100644 index 8bbf5ad..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviHeaderHandler.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// AMapNaviHeaderHandler.h -// AMapNaviKit -// -// Created by eidan on 2018/9/21. -// Copyright © 2018年 Amap. All rights reserved. -// - -#if __has_include() -#import -#elif __has_include() -#import -#elif __has_include("MAMapKit.h") -#import "MAMapKit.h" -#endif - -#if __has_include() -#import -#elif __has_include() -#import -#elif __has_include("AMapFoundationKit.h") -#import "AMapFoundationKit.h" -#endif - - diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviInfo.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviInfo.h deleted file mode 100644 index 3fd52f2..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviInfo.h +++ /dev/null @@ -1,65 +0,0 @@ -// -// AMapNaviInfo.h -// AMapNaviKit -// -// Created by AutoNavi on 14-8-22. -// Copyright (c) 2014年 Amap. All rights reserved. -// - -#import "AMapNaviCommonObj.h" - -///导航过程中的导航信息 -@interface AMapNaviInfo : NSObject - -///导航信息更新类型 -@property (nonatomic, assign) AMapNaviMode naviMode; - -///导航段转向图标类型 -@property (nonatomic, assign) AMapNaviIconType iconType; - -///当前道路名称 -@property (nonatomic, strong) NSString *currentRoadName; - -///下条道路名称 -@property (nonatomic, strong) NSString *nextRoadName; - -///离终点剩余距离(单位:米) -@property (nonatomic, assign) NSInteger routeRemainDistance; - -///离终点预估剩余时间(单位:秒) -@property (nonatomic, assign) NSInteger routeRemainTime; - -///当前所在的segment段的index,从0开始 -@property (nonatomic, assign) NSInteger currentSegmentIndex; - -///当前路段剩余距离(单位:米) -@property (nonatomic, assign) NSInteger segmentRemainDistance; - -///当前路段预估剩余时间(单位:秒) -@property (nonatomic, assign) NSInteger segmentRemainTime; - -///当前所在的link段的index,从0开始 -@property (nonatomic, assign) NSInteger currentLinkIndex; - -///当前自车位置在当前link段所在的point的index,从0开始 since 6.0.0 -@property (nonatomic, assign) NSInteger currentPointIndex; - -///已经行驶的里程(单位:米). 注意:只在驾车的实时导航下才有效. since 6.0.0 -@property (nonatomic, assign) NSInteger routeDriveDistance; - -///已经行驶的用时,包括中途停车时间在内(单位:秒). 注意:只在驾车的实时导航下才有效. since 6.0.0 -@property (nonatomic, assign) NSInteger routeDriveTime; - -///没有避开的设施、禁行标志等信息, 如限高. 注意:只针对驾车. since 6.0.0 -@property (nonatomic, strong) AMapNaviNotAvoidFacilityAndForbiddenInfo *notAvoidInfo; - -///当前路径剩余的红绿灯数量. 注意:只针对驾车. since 6.3.0 -@property (nonatomic, assign) NSInteger routeRemainTrafficLightCount; - -///当前自车位置到各途经点的信息. 注意:只针对驾车. since 6.7.0 -@property (nonatomic, strong) NSArray *toWayPointInfos; - -///当前自车所在的高速或城市快速路的出口路牌信息. 注意:只针对驾车. since 6.8.0 -@property (nonatomic, strong) AMapNaviExitBoardInfo *exitBoardInfo; - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviKit.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviKit.h deleted file mode 100644 index cabb62e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviKit.h +++ /dev/null @@ -1,58 +0,0 @@ -// -// AMapNaviKit.h -// AMapNaviKit -// -// Created by AutoNavi on 14-7-4. -// Copyright (c) 2014年 Amap. All rights reserved. -// - -#import -#import - -#import -#import -#import -#import - -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import - -#if __has_include() -#import -#endif - -#if __has_include() -#import -#endif - -#if __has_include() -#import -#endif - -#if __has_include() -#import -#endif - -#if __has_include() -#import -#endif - -#if __has_include() -#import -#endif - -#if __has_include() -#import -#endif - -#if __has_include() -#import -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviLocation.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviLocation.h deleted file mode 100644 index d585992..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviLocation.h +++ /dev/null @@ -1,47 +0,0 @@ -// -// AMapNaviLocation.h -// AMapNaviKit -// -// Created by eidan on 2018/1/18. -// Copyright © 2018年 Amap. All rights reserved. -// - -#import "AMapNaviCommonObj.h" - -///当前的自车位置 -@interface AMapNaviLocation : NSObject - -///经纬度 -@property (nonatomic, strong) AMapNaviPoint *coordinate; - -///精确度 -@property (nonatomic, assign) double accuracy; - -///高度 -@property (nonatomic, assign) double altitude; - -///方向 -@property (nonatomic, assign) double heading; - -///速度(km/h) -@property (nonatomic, assign) NSInteger speed; - -///时间戳 -@property (nonatomic, strong) NSDate *timestamp; - -///是否匹配在道路上 -@property (nonatomic, assign) BOOL isMatchNaviPath; - -///当前所在的segment段的index,从0开始 since 6.7.0 -@property (nonatomic, assign) int currentSegmentIndex; - -///当前所在的link段的index,从0开始 since 6.7.0 -@property (nonatomic, assign) int currentLinkIndex; - -///当前自车位置在当前link段所在的point的index,从0开始 since 6.7.0 -@property (nonatomic, assign) int currentPointIndex; - -///当前定位点是否为参与导航的网络点. 注意:只针对驾车. since 6.8.0 -@property (nonatomic, assign) BOOL isNetworkNavi; - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviManagerConfig.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviManagerConfig.h deleted file mode 100644 index b789581..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviManagerConfig.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// AMapNaviManagerConfig.h -// AMapNaviManagerConfig -// -// Created by yuanmenglong on 2021/8/25. -// Copyright © 2021 Amap. All rights reserved. -// - -#import -#import -#import "AMapNaviCommonObj.h" -NS_ASSUME_NONNULL_BEGIN - -@interface AMapNaviManagerConfig : NSObject -/** - * @brief AMapNaviManagerConfig单例. since 8.0.1 - * @return AMapNaviManagerConfig实例 - */ -+ (instancetype)sharedConfig; - -#pragma mark - Privacy 隐私合规 -/** - * @brief 更新App是否显示隐私弹窗的状态,隐私弹窗是否包含高德SDK隐私协议内容的状态,注意:必须在导航任何一个manager实例化之前调用. since 8.1.0 - * @param showStatus 隐私弹窗状态 - * @param containStatus 包含高德SDK隐私协议状态 - */ -- (void)updatePrivacyShow:(AMapPrivacyShowStatus)showStatus privacyInfo:(AMapPrivacyInfoStatus)containStatus; - -/** - * @brief 更新用户授权高德SDK隐私协议状态,注意:必须在导航任何一个manager实例化之前调用. since 8.1.0 - * @param agreeStatus 用户授权高德SDK隐私协议状态 - */ -- (void)updatePrivacyAgree:(AMapPrivacyAgreeStatus)agreeStatus; - -@end - -#pragma mark - Private - -@interface AMapNaviManagerConfig (Private) - -/** - * @brief 设置途径点私有实例接口,外部禁止调用. since 7.9.0 - */ -- (void)setViaPointEtaDisplayEnable:(BOOL )isEnable; -@end - - -NS_ASSUME_NONNULL_END diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviOpenNetwrokProxyManager.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviOpenNetwrokProxyManager.h deleted file mode 100644 index 6bbfdba..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviOpenNetwrokProxyManager.h +++ /dev/null @@ -1,57 +0,0 @@ -// -// AMapNaviOpenNetwrokProxyManager.h -// AMapNaviKit -// -// Created by chenyu on 2023/8/7. -// Copyright © 2023 Amap. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol AMapNaviOpenNetwrokProxyDelegate; - -@interface AMapNaviOpenNetwrokProxyManager : NSObject - -/** - * @brief AMapNaviOpenNetwrokProxyManager 单例. since 10.0.1 - * @return AMapNaviOpenNetwrokProxyManager 实例 - */ -+ (AMapNaviOpenNetwrokProxyManager *)sharedInstance; - -#pragma mark - delegate -///实现了 AMapNaviOpenNetwrokProxyDelegate 协议的类指针 -@property (nonatomic, weak) id delegate; - -@end - - -#pragma mark - AMapNaviOpenNetwrokProxy -@protocol AMapNaviOpenNetwrokProxyDelegate - -@optional - -/** - * @brief 通过path获取代理host,开发者需要保证host的合法性。since 10.0.1 - * @param path 网络请求的path - */ -- (NSString *)getHostByPath:(NSString *)path; - -/** - * @brief 开发者请根据实际情况返回对应的请求path是否需要携带参数,参数和数据放在URL中,需要注意携带的数据不易过多,且需要对key、value进行encode。since 10.0.1 - * @param path 网络请求的path - * @return 根据path返回需要携带的数据,没有需要携带的数据可返回nil,也可不实现。 - */ -- (NSDictionary *)getExtRequestParamByPath:(NSString *)path; - -/** - * @brief 通过path获取代理host。since 10.0.1 - * @param path 网络请求的path - * @param repsoneStr 服务返回的数据 - */ -- (void)onResponseExtParam:(NSString *)path repsoneStr:(NSString *)repsoneStr; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviRideDataRepresentable.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviRideDataRepresentable.h deleted file mode 100644 index d4f584c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviRideDataRepresentable.h +++ /dev/null @@ -1,65 +0,0 @@ -// -// AMapNaviRideDataRepresentable.h -// AMapNaviKit -// -// Created by liubo on 9/19/16. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "AMapNaviCommonObj.h" - -NS_ASSUME_NONNULL_BEGIN - -@class AMapNaviInfo; -@class AMapNaviRoute; -@class AMapNaviLocation; -@class AMapNaviStatisticsInfo; -@class AMapNaviRideManager; - -/** - * @brief AMapNaviRideDataRepresentable协议.实例对象可以通过实现该协议,并将其通过 AMapNaviRideManager 的addDataRepresentative:方法进行注册,便可获取导航过程中的导航数据更新. - * 可以根据不同需求,选取使用特定的数据进行导航界面自定义. - * AMapNaviRideView 即通过该协议实现导航过程展示.也可以依据导航数据的更新进行其他的逻辑处理. - */ -@protocol AMapNaviRideDataRepresentable - -@optional - -/** - * @brief 导航模式更新回调 - * @param rideManager 骑行导航管理类 - * @param naviMode 导航模式,参考 AMapNaviMode 值 - */ -- (void)rideManager:(AMapNaviRideManager *)rideManager updateNaviMode:(AMapNaviMode)naviMode; - -/** - * @brief 路径ID更新回调. 注意:请不要在此回调中调用 -selectNaviRouteWithRouteID: 接口,否则会出现死循环调用. - * @param rideManager 骑行导航管理类 - * @param naviRouteID 导航路径ID - */ -- (void)rideManager:(AMapNaviRideManager *)rideManager updateNaviRouteID:(NSInteger)naviRouteID; - -/** - * @brief 路径信息更新回调. 注意:请不要在此回调中调用 -selectNaviRouteWithRouteID: 接口,否则会出现死循环调用. - * @param rideManager 骑行导航管理类 - * @param naviRoute 路径信息,参考 AMapNaviRoute 类 - */ -- (void)rideManager:(AMapNaviRideManager *)rideManager updateNaviRoute:(nullable AMapNaviRoute *)naviRoute; - -/** - * @brief 导航信息更新回调 - * @param rideManager 骑行导航管理类 - * @param naviInfo 导航信息,参考 AMapNaviInfo 类 - */ -- (void)rideManager:(AMapNaviRideManager *)rideManager updateNaviInfo:(nullable AMapNaviInfo *)naviInfo; - -/** - * @brief 自车位置更新回调 - * @param rideManager 骑行导航管理类 - * @param naviLocation 自车位置信息,参考 AMapNaviLocation 类 - */ -- (void)rideManager:(AMapNaviRideManager *)rideManager updateNaviLocation:(nullable AMapNaviLocation *)naviLocation; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviRideManager.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviRideManager.h deleted file mode 100644 index 49b321d..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviRideManager.h +++ /dev/null @@ -1,283 +0,0 @@ -// -// AMapNaviRideManager.h -// AMapNaviKit -// -// Created by liubo on 9/19/16. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "AMapNaviTravelManager.h" -#import "AMapNaviRideDataRepresentable.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol AMapNaviRideManagerDelegate; - -#pragma mark - AMapNaviRideManager - -///骑行导航管理类 -@interface AMapNaviRideManager : AMapNaviTravelManager - -#pragma mark - Singleton - -/** - * @brief AMapNaviRideManager单例. since 7.4.0 - * @return AMapNaviRideManager实例 - */ -+ (AMapNaviRideManager *)sharedInstance; - -/** - * @brief 销毁AMapNaviRideManager单例. since 7.4.0 - * @return 是否销毁成功. 如果返回NO,请检查单例是否被强引用 - */ -+ (BOOL)destroyInstance; - -/** - * @brief 请使用单例替代. since 7.4.0 init已被禁止使用,请使用单例 [AMapNaviRideManager sharedInstance] 替代 - */ -- (instancetype)init __attribute__((unavailable("since 7.4.0 init 已被禁止使用,请使用单例 [AMapNaviRideManager sharedInstance] 替代"))); - -#pragma mark - Delegate - -///实现了 AMapNaviRideManagerDelegate 协议的类指针 -@property (nonatomic, weak) id delegate; - -#pragma mark - Event Listener - -/** - * @brief 增加用于接收导航回调事件的Listener, 效果等同于delegate. 注意:该方法不会增加实例对象的引用计数(Weak Reference). since 8.0.1 - * @param aListener 实现了 AMapNaviRideManagerDelegate 协议的实例 - */ -- (void)addEventListener:(id)aListener; - -/** - * @brief 移除用于接收导航回调事件的Listener. since 8.0.1 - * @param aListener 实现了 AMapNaviRideManagerDelegate 协议的实例 - */ -- (void)removeEventListener:(id)aListener; - -#pragma mark - Data Representative - -/** - * @brief 增加用于展示导航数据的DataRepresentative.注意:该方法不会增加实例对象的引用计数(Weak Reference) - * @param aRepresentative 实现了 AMapNaviRideDataRepresentable 协议的实例 - */ -- (void)addDataRepresentative:(id)aRepresentative; - -/** - * @brief 移除用于展示导航数据的DataRepresentative - * @param aRepresentative 实现了 AMapNaviRideDataRepresentable 协议的实例 - */ -- (void)removeDataRepresentative:(id)aRepresentative; - -#pragma mark - Navi Route - -///当前导航路径的ID -@property (nonatomic, readonly) NSInteger naviRouteID; - -///当前导航路径的信息,参考 AMapNaviRoute 类. -@property (nonatomic, readonly, nullable) AMapNaviRoute *naviRoute; - -/** - * @brief 多路径规划时的所有路径信息 since 7.5.0 - * @return 返回多路径规划时的所有路径ID和路线信息 - */ -- (NSDictionary *)naviRoutes; - - -/** - * @brief 多路径规划时的所有路径ID,路径ID为 NSInteger 类型 since 7.5.0 - * @return 返回多路径规划时的所有路径ID - */ -- (NSArray *)naviRouteIDs; - -/** - * @brief 多路径规划时选择路径.注意:该方法仅限于在开始导航前使用,开始导航后该方法无效 since 7.5.0 - * @param routeID 路径ID - * @return 是否选择路径成功 - */ -- (BOOL)selectNaviRouteWithRouteID:(NSInteger)routeID; - -#pragma mark - Options - -///偏航时是否重新计算路径,默认YES(需要联网). -@property (nonatomic, assign) BOOL isRecalculateRouteForYaw __attribute__((deprecated("已废弃,默认进行重算,since 7.4.0"))); - -///卫星定位信号强度类型,参考 AMapNaviGPSSignalStrength since 7.8.0 只有导航中获取卫星定位信号强弱的值有效 -@property (nonatomic, assign, readonly) AMapNaviGPSSignalStrength gpsSignalStrength; - -#pragma mark - Calculate Route - -// 以下算路方法需要高德坐标(GCJ02) - -/** - * @brief 不带起点的骑行路径规划 - * @param endPoint 终点坐标. - * @return 规划路径所需条件和参数校验是否成功,不代表算路成功与否 - */ -- (BOOL)calculateRideRouteWithEndPoint:(AMapNaviPoint *)endPoint; - -/** - * @brief 带起点的骑行路径规划 - * @param startPoint 起点坐标. - * @param endPoint 终点坐标. - * @return 规划路径所需条件和参数校验是否成功,不代表算路成功与否 - */ -- (BOOL)calculateRideRouteWithStartPoint:(AMapNaviPoint *)startPoint - endPoint:(AMapNaviPoint *)endPoint; - -/** - * @brief 根据高德POIInfo进行骑行路径规划. since 7.5.0 - * @param startPOIInfo 起点POIInfo, 参考 AMapNaviPOIInfo. 如果以“我的位置”作为起点,请传nil. 如果startPOIInfo不为nil,那么POIID合法,优先使用ID参与算路,否则使用坐标点 - * @param endPOIInfo 终点POIInfo, 参考 AMapNaviPOIInfo. 如果POIID合法,优先使用ID参与算路,否则使用坐标点. 注意:POIID和坐标点不能同时为空 - * @param strategy 路径的计算策略,参考 AMapNaviTravelStrategy. - * @return 规划路径所需条件和参数校验是否成功,不代表算路成功与否 -*/ -- (BOOL)calculateRideRouteWithStartPOIInfo:(nullable AMapNaviPOIInfo *)startPOIInfo - endPOIInfo:(nonnull AMapNaviPOIInfo *)endPOIInfo - strategy:(AMapNaviTravelStrategy)strategy; - -/** - * @brief POI算路。特别注意:当前接口为收费接口,您如果申请试用或者正式应用都请通过工单系统提交商务合作类工单进行沟通 https://lbs.amap.com/。 since 9.3.5 - * @param startPOIInfo 起点POIInfo,如果以“我的位置”作为起点,请传nil。如果startPOIInfo不为nil,那么POIID合法,优先使用ID参与算路,否则使用坐标点。 - * @param endPOIInfo 终点POIInfo,如果POIID合法,优先使用ID参与算路,否则使用坐标点。注意:POIID和坐标点不能同时为空。 - * @param wayPOIInfos 途经点POIInfo,最多支持16个途经点,超过16个会取前16个。如果POIID合法,优先使用ID参与算路,否则使用坐标点。 注意:POIID和坐标点不能同时为空。 - * @param strategy 路径的计算策略。 - * @return 规划路径所需条件和参数校验是否成功,不代表算路成功与否。 -*/ -- (BOOL)calculateRideRouteWithStartPOIInfo:(nullable AMapNaviPOIInfo *)startPOIInfo - endPOIInfo:(nonnull AMapNaviPOIInfo *)endPOIInfo - wayPOIInfos:(NSArray *)wayPOIInfos - strategy:(AMapNaviTravelStrategy)strategy; -/** - * @brief 独立算路能力接口,可用于不干扰本次导航的单独算路场景. since 7.7.0 - * @param startPOIInfo 起点POIInfo, 参考 AMapNaviPOIInfo. 如果以“我的位置”作为起点,请传nil. 如果startPOIInfo不为nil,那么POIID合法,优先使用ID参与算路,否则使用坐标点 - * @param endPOIInfo 终点POIInfo, 参考 AMapNaviPOIInfo. 如果POIID合法,优先使用ID参与算路,否则使用坐标点. 注意:POIID和坐标点不能同时为空 - * @param strategy 路径的计算策略,参考 AMapNaviTravelStrategy. - * @param callback 算路完成的回调. 算路成功时,routeGroup 不为空;算路失败时,error 不为空,error.code参照 AMapNaviCalcRouteState. - * @return 规划路径所需条件和参数校验是否成功,不代表算路成功与否 - */ -- (BOOL)independentCalculateRideRouteWithStartPOIInfo:(nullable AMapNaviPOIInfo *)startPOIInfo - endPOIInfo:(nonnull AMapNaviPOIInfo *)endPOIInfo - strategy:(AMapNaviTravelStrategy)strategy - callback:(nullable void (^)(AMapNaviRouteGroup *_Nullable routeGroup, NSError *_Nullable error))callback; - -/** - * @brief 独立算路能力接口,可用于不干扰本次导航的单独算路场景。特别注意:当前接口为收费接口,您如果申请试用或者正式应用都请通过工单系统提交商务合作类工单进行沟通 https://lbs.amap.com/。since 9.3.5 - * @param startPOIInfo 起点POIInfo,如果以“我的位置”作为起点,请传nil。如果startPOIInfo不为nil,那么POIID合法,优先使用ID参与算路,否则使用坐标点。 - * @param endPOIInfo 终点POIInfo,如果POIID合法,优先使用ID参与算路,否则使用坐标点。注意:POIID和坐标点不能同时为空。 - * @param wayPOIInfos 途经点POIInfo,最多支持16个途经点,超过16个会取前16个。如果POIID合法,优先使用ID参与算路,否则使用坐标点。注意:POIID和坐标点不能同时为空。 - * @param strategy 路径的计算策略。 - * @param callback 算路完成的回调。算路成功时,routeGroup 不为空,算路失败时,error 不为空,error.code参照 AMapNaviCalcRouteState。 - * @return 规划路径所需条件和参数校验是否成功,不代表算路成功与否。 - */ -- (BOOL)independentCalculateRideRouteWithStartPOIInfo:(nullable AMapNaviPOIInfo *)startPOIInfo - endPOIInfo:(nonnull AMapNaviPOIInfo *)endPOIInfo - wayPOIInfos:(NSArray *)wayPOIInfos - strategy:(AMapNaviTravelStrategy)strategy - callback:(nullable void (^)(AMapNaviRouteGroup *_Nullable routeGroup, NSError *_Nullable error))callback; - -/** - * @brief 导航过程中重新规划路径(起点为当前位置,终点位置不变) - * @return 重新规划路径所需条件和参数校验是否成功, 不代表算路成功与否,如非导航状态下调用此方法会返回NO. - */ -- (BOOL)recalculateRideRoute; - -#pragma mark - Manual - -/** - * @brief 设置TTS语音播报每播报一个字需要的时间.根据播报一个字的时间和运行的速度,可以更改语音播报的触发时机. - * @param time 每个字的播放时间(范围:[250,500]; 单位:毫秒) - */ -- (void)setTimeForOneWord:(int)time __attribute__((deprecated("已废弃,使用 setIsPlayingTTS: 替代,since 7.4.0"))); - -/** - * @brief 开发者请根据实际情况设置外界此时是否正在进行语音播报. since 7.4.0 - * @param playing 如果外界正在播报语音,传入YES,否则传入NO. -*/ -- (void)setTTSPlaying:(BOOL)playing; - -#pragma mark - Statistics Information - -/** - * @brief 获取导航统计信息 - * @return 导航统计信息,参考 AMapNaviStatisticsInfo 类. - */ -- (nullable AMapNaviStatisticsInfo *)getNaviStatisticsInfo __attribute__((deprecated("已废弃,since 7.4.0"))); - -@end - -#pragma mark - AMapNaviRideManagerDelegate - -@protocol AMapNaviRideManagerDelegate -@optional - -/** - * @brief 发生错误时,会调用代理的此方法 - * @param rideManager 骑行导航管理类 - * @param error 错误信息 - */ -- (void)rideManager:(AMapNaviRideManager *)rideManager error:(NSError *)error; - -/** - * @brief 骑行路径规划成功后的回调函数 - * @param rideManager 骑行导航管理类 - */ -- (void)rideManagerOnCalculateRouteSuccess:(AMapNaviRideManager *)rideManager; - -/** - * @brief 骑行路径规划失败后的回调函数. 从6.1.0版本起,算路失败后导航SDK只对外通知算路失败,SDK内部不再执行停止导航的相关逻辑.因此,当算路失败后,不会收到 driveManager:updateNaviMode: 回调; AMapNaviRideManager.naviMode 不会切换到 AMapNaviModeNone 状态, 而是会保持在 AMapNaviModeGPS or AMapNaviModeEmulator 状态 - * @param rideManager 骑行导航管理类 - * @param error 错误信息,error.code参照AMapNaviCalcRouteState - */ -- (void)rideManager:(AMapNaviRideManager *)rideManager onCalculateRouteFailure:(NSError *)error; - -/** - * @brief 启动导航后回调函数 - * @param rideManager 骑行导航管理类 - * @param naviMode 导航类型,参考AMapNaviMode - */ -- (void)rideManager:(AMapNaviRideManager *)rideManager didStartNavi:(AMapNaviMode)naviMode; - -/** - * @brief 出现偏航需要重新计算路径时的回调函数.偏航后将自动重新路径规划,该方法将在自动重新路径规划前通知您进行额外的处理. - * @param rideManager 骑行导航管理类 - */ -- (void)rideManagerNeedRecalculateRouteForYaw:(AMapNaviRideManager *)rideManager; - -/** - * @brief 导航播报信息回调函数 - * @param rideManager 骑行导航管理类 - * @param soundString 播报文字 - * @param soundStringType 播报类型,参考 AMapNaviSoundType. 注意:since 6.0.0 AMapNaviSoundType 只返回 AMapNaviSoundTypeDefault - */ -- (void)rideManager:(AMapNaviRideManager *)rideManager playNaviSoundString:(NSString *)soundString soundStringType:(AMapNaviSoundType)soundStringType; - -/** - * @brief 模拟导航到达目的地停止导航后的回调函数 - * @param rideManager 骑行导航管理类 - */ -- (void)rideManagerDidEndEmulatorNavi:(AMapNaviRideManager *)rideManager; - -/** - * @brief 导航到达目的地后的回调函数 - * @param rideManager 骑行导航管理类 - */ -- (void)rideManagerOnArrivedDestination:(AMapNaviRideManager *)rideManager; - -/** - * @brief 卫星定位信号强弱回调函数. since 7.4.0 - * @param rideManager 骑行导航管理类 - * @param gpsSignalStrength 卫星定位信号强度类型,参考 AMapNaviGPSSignalStrength . - */ -- (void)rideManager:(AMapNaviRideManager *)rideManager updateGPSSignalStrength:(AMapNaviGPSSignalStrength)gpsSignalStrength; - -/** - * @brief 骑行导航到达途径点的回调函数 since 9.3.5 - * @param rideManager 骑行导航管理类 - * @param wayPointIndex 到达途径点的编号,编号从0开始,依次累加。 - */ -- (void)rideManager:(AMapNaviRideManager *)rideManager onArrivedWayPoint:(int)wayPointIndex; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviRideView.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviRideView.h deleted file mode 100644 index 488fa81..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviRideView.h +++ /dev/null @@ -1,232 +0,0 @@ -// -// AMapNaviRideView.h -// AMapNaviKit -// -// Created by AutoNavi on 9/19/16. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "AMapNaviHeaderHandler.h" -#import "AMapNaviCommonObj.h" -#import "AMapNaviRideDataRepresentable.h" -#import "AMapNaviEleBikeDataRepresentable.h" -#import "AMapNaviCompositeAnnotation.h" - -NS_ASSUME_NONNULL_BEGIN - -///骑行导航界面显示模式 -typedef NS_ENUM(NSInteger, AMapNaviRideViewShowMode) -{ - AMapNaviRideViewShowModeCarPositionLocked = 1, ///< 锁车状态 - AMapNaviRideViewShowModeOverview = 2, ///< 全览状态 - AMapNaviRideViewShowModeNormal = 3, ///< 普通状态 -}; - -@protocol AMapNaviRideViewDelegate; - -///骑行导航界面.该类实现AMapNaviRideDataRepresentable协议,可通过 AMapNaviRideManager 的addDataRepresentative:方法进行注册展示骑行导航过程. -@interface AMapNaviRideView : UIView - -#pragma mark - Delegate - -///实现了 AMapNaviRideViewDelegate 协议的类指针 -@property (nonatomic, weak) id delegate; - -#pragma mark - Options - -///目前是否为横屏状态. since 7.4.0 内部会自行监听 UIDeviceOrientationDidChange 进行横竖屏切换,无需再设置此值,但用户要自行保证 AMapNaviRideView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight,让 AMapNaviRideView 能够跟着父View一起变化. 可通过回调 -rideView:didChangeOrientation: 获取横竖屏切换时机 -@property (nonatomic, assign, readonly) BOOL isLandscape; - -///导航界面跟随模式,默认AMapNaviViewTrackingModeMapNorth -@property (nonatomic, assign) AMapNaviViewTrackingMode trackingMode; - -///导航界面显示模式,默认AMapNaviDriveViewShowModeCarPositionLocked -@property (nonatomic, assign) AMapNaviRideViewShowMode showMode; - -///是否显示界面元素,默认YES -@property (nonatomic, assign) BOOL showUIElements; - -///是否黑夜模式,默认NO. 对应的地图样式为:白天模式MAMapTypeNavi,黑夜模式MAMapTypeStandardNight. -@property (nonatomic, assign) BOOL showStandardNightType __attribute((deprecated("已废弃, 请使用 mapViewModeType 替代 since 8.0.0"))); - -///是否显示全览按钮,默认YES -@property (nonatomic, assign) BOOL showBrowseRouteButton; - -///是否显示更多按钮,默认YES -@property (nonatomic, assign) BOOL showMoreButton; - -///是否显示转向箭头,默认YES -@property (nonatomic, assign) BOOL showTurnArrow; - -///是否显示传感器方向信息,默认NO.设置为YES后,自车图标方向将显示为设备方向 -@property (nonatomic, assign) BOOL showSensorHeading; - -///导航界面日夜模式类型, 默认为 AMapNaviViewMapModeTypeDay(白天模式) since 8.0.0 -@property (nonatomic, assign) AMapNaviViewMapModeType mapViewModeType; - -#pragma mark - MapView - -///是否显示指南针,默认NO -@property (nonatomic, assign) BOOL showCompass; - -///锁车状态下地图cameraDegree, 默认30.0, 范围[0,60] -@property (nonatomic, assign) CGFloat cameraDegree; - -///当前地图是否显示比例尺,默认NO -@property (nonatomic, assign) BOOL showScale; - -///当前地图比例尺的原点位置,默认(10,10) -@property (nonatomic, assign) CGPoint scaleOrigin; - -///地图的视图锚点. (0, 0)为左上角,(1, 1)为右下角. 可通过设置此值来改变自车图标的默认显示位置. 注意:只有showUIElements为NO时,设置此值才有效 since 8.0.0 -@property (nonatomic, assign) CGPoint screenAnchor; - -///指南针原点位置. since 8.0.0 -@property (nonatomic, assign) CGPoint compassOrigin; - -///当前地图是否开启自定义样式, 默认NO. 设置为YES,将忽略showStandardNightType的设置,并将mapType切换为MAMapTypeStandard. 设置为NO,将根据showStandardNightType恢复mapType. since 5.1.0 -@property (nonatomic, assign) BOOL customMapStyleEnabled __attribute((deprecated("已废弃, 请使用 mapViewModeType 替代 since 8.0.0"))); - -/** - * @brief 自定义当前地图样式, 目前仅支持自定义标准类型. 已废弃, 请使用 setCustomMapStyleOptions: since 6.6.0 - * @param customJson 自定义的JSON格式数据. - */ -- (void)setCustomMapStyle:(NSData *)customJson __attribute((deprecated("已废弃, 请使用 setCustomMapStyleOptions: since 6.6.0"))); - -/** - * @brief 根据web导出数据设置地图样式, 目前仅支持自定义标准类型. 默认不生效,调用customMapStyleEnabled=YES使生效. since 6.2.0 - * @param data 高德web端工具导出的地图样式数据. - */ -- (void)setCustomMapStyleWithWebData:(NSData*)data __attribute((deprecated("已废弃, 请使用 setCustomMapStyleOptions: since 6.6.0"))); - -/** - * @brief 自定义地图样式设置,可以支持分级样式配置,如控制不同级别显示不同的颜色(自6.6.0开始使用新版样式,旧版样式无法在新版接口setCustomMapStyleOptions:(MAMapCustomStyleOptions *)styleOptions中使用,请到官网(lbs.amap.com)更新新版样式文件) - * @param styleOptions 自定义样式options. since 6.6.0 - */ -- (void)setCustomMapStyleOptions:(MAMapCustomStyleOptions *)styleOptions; - -#pragma mark - Polyline Texture - -///路线polyline的宽度,设置0恢复默认宽度 -@property (nonatomic, assign) CGFloat lineWidth; - -///标准路线Polyline的纹理图片,设置nil恢复默认纹理.纹理图片需满足:长宽相等,且宽度值为2的次幂 -@property (nonatomic, copy, nullable) UIImage *normalTexture; - -///走过的路线是否置灰,默认为NO. since 7.4.0 -@property (nonatomic, assign) BOOL showGreyAfterPass; - -///路线纹理部分走过后置灰的纹理图片,设置nil恢复默认纹理. 纹理图片需满足:长宽相等,且宽度值为2的次幂. since 7.4.0 -@property (nonatomic, copy, nullable) UIImage *greyTexture; - -#pragma mark - Image - -/** - * @brief 设置路径起点图标 - * @param startPointImage 起点图标,设置nil为默认图标 - */ -- (void)setStartPointImage:(nullable UIImage *)startPointImage; - -/** - * @brief 设置路径终点图标 - * @param endPointImage 终点图标,设置nil为默认图标 - */ -- (void)setEndPointImage:(nullable UIImage *)endPointImage; - -/** - * @brief 设置自车图标 - * @param carImage 自车图标,设置nil为默认图标 - */ -- (void)setCarImage:(nullable UIImage *)carImage; - -/** - * @brief 设置自车罗盘图标 - * @param carCompassImage 自车罗盘图标,设置nil为默认图标 - */ -- (void)setCarCompassImage:(nullable UIImage *)carCompassImage; - -/** - * @brief 设置路径途经点图标 since 9.3.5 - * @param wayPointImage 途经点图标,设置nil为默认图标 - */ -- (void)setWayPointImage:(nullable UIImage *)wayPointImage; -#pragma mark - Overlay -/** - * @brief 在导航地图中添加自定义overlay. since 9.7.0 - * @param overlay 具体参考 官方Demo中 DriveViewWithCustomOverlayViewController . - */ -- (void)addCustomOverlay:(id _Nonnull)overlay; - -/** - * @brief 移除导航地图中的自定义overlay. since 9.7.0 - * @param overlay 具体参考 AMapNaviCompositeOverlay . - */ -- (void)removeCustomOverlay:(id _Nonnull)overlay; -#pragma mark - Other - -/** - * @brief 在全览状态下调用此函数能够让路线显示在可视区域内(排除EdgePadding后剩余的区域),保证路线不被自定义界面元素遮挡. 比如showUIElements为NO时(自定义界面)横竖屏切换后,可以调用此函数. since 8.0.0 - */ -- (void)updateRoutePolylineInTheVisualRangeWhenTheShowModeIsOverview; - -@end - -@protocol AMapNaviRideViewDelegate -@optional - -/** - * @brief 导航界面关闭按钮点击时的回调函数 - * @param rideView 骑行导航界面 - */ -- (void)rideViewCloseButtonClicked:(AMapNaviRideView *)rideView; - -/** - * @brief 导航界面更多按钮点击时的回调函数 - * @param rideView 骑行导航界面 - */ -- (void)rideViewMoreButtonClicked:(AMapNaviRideView *)rideView; - -/** - * @brief 导航界面转向指示View点击时的回调函数 - * @param rideView 骑行导航界面 - */ -- (void)rideViewTrunIndicatorViewTapped:(AMapNaviRideView *)rideView; - -/** - * @brief 导航界面显示模式改变后的回调函数 - * @param rideView 骑行导航界面 - * @param showMode 显示模式 - */ -- (void)rideView:(AMapNaviRideView *)rideView didChangeShowMode:(AMapNaviRideViewShowMode)showMode; - -/** - * @brief 导航界面跟随模式改变后的回调函数. since 7.4.0 - * @param rideView 骑行导航界面 - * @param trackMode 跟随模式 - */ -- (void)rideView:(AMapNaviRideView *)rideView didChangeTrackingMode:(AMapNaviViewTrackingMode)trackMode; - -/** - * @brief 导航界面横竖屏切换后的回调函数. since 7.4.0 - * @param rideView 骑行导航界面 - * @param isLandscape 是否是横屏 - */ -- (void)rideView:(AMapNaviRideView *)rideView didChangeOrientation:(BOOL)isLandscape; - -/** - * @brief 导航界面白天黑夜模式切换后的回调函数. since 8.0.0 - * @param rideView 骑行导航界面 - * @param showStandardNightType 是否为黑夜模式 - */ -- (void)rideView:(AMapNaviRideView *)rideView didChangeDayNightType:(BOOL)showStandardNightType; - -/** - * @brief 在showUIElements为NO时,骑行导航界面需要实时的取得可视区域,比如切换成全览时、横竖屏切换时. 注意:此回调只在showUIElements为NO时,才会调用且比较频繁,在获取EdgePadding时请勿进行大量的计算. since 8.0.0 - * @param rideView 骑行导航界面 - * @return 如(100, 50, 80, 60)表示的是:rideView.bounds 上边留出100px,左边留出50px,底部留出80px,右边留出60px后的区域为可视区域,一般EdgePadding的值由用户的界面布局决定. - */ -- (UIEdgeInsets)rideViewEdgePadding:(AMapNaviRideView *)rideView; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviRoute.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviRoute.h deleted file mode 100644 index 0f99173..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviRoute.h +++ /dev/null @@ -1,262 +0,0 @@ -// -// AMapNaviRoute.h -// AMapNaviKit -// -// Created by AutoNavi on 14-7-11. -// Copyright (c) 2014年 Amap. All rights reserved. -// - -#import -#import "AMapNaviCommonObj.h" - -NS_ASSUME_NONNULL_BEGIN - -#pragma mark - AMapNaviRouteGuideSegment - -///路线详情的分段信息. since 7.5.0 -@interface AMapNaviRouteGuideSegment : NSObject - -///分段的转向类型 -@property (nonatomic, assign) AMapNaviIconType iconType; - -///分段的详细描述 -@property (nonatomic, strong, nullable) NSString *detailedDescription; - -///分段是否到达途径点 -@property (nonatomic, assign) BOOL isArriveWayPoint; - -@end - -#pragma mark - AMapNaviRouteGuideGroup - -///路线详情的分组信息. since 7.5.0 -@interface AMapNaviRouteGuideGroup : NSObject - -///分组的名称描述 -@property (nonatomic, strong, nullable) NSString *groupName; - -///分组的长度(单位:米) -@property (nonatomic, assign) NSInteger distance; - -///分组的转向类型和该组中分段的第一个转向类型一致 -@property (nonatomic, assign) AMapNaviIconType iconType; - -///分组的预估时间(单位:秒) -@property (nonatomic, assign) NSInteger time; - -///分组导航段路口点的坐标 -@property (nonatomic, strong) AMapNaviPoint *coordinate; - -///分组中的所有分段 -@property (nonatomic, strong) NSArray *guideSegments; - -///分组的红绿灯数量,注意:只针对驾车. -@property (nonatomic, assign) NSInteger trafficLightCount; - -@end - - -// AMapNaviLink --组成--> AMapNaviSegment --组成--> AMapNaviRoute - -#pragma mark - AMapNaviLink - -///分段的Link信息 -@interface AMapNaviLink : NSObject - -///Link的所有坐标 -@property (nonatomic, strong) NSArray *coordinates; - -///Link的长度(单位:米) -@property (nonatomic, assign) NSInteger length; - -///Link的预估时间(单位:秒) -@property (nonatomic, assign) NSInteger time; - -///Link的道路名称 -@property (nonatomic, strong, nullable) NSString *roadName; - -///Link的道路类型 -@property (nonatomic, assign) AMapNaviRoadClass roadClass; - -///Link的FormWay信息 -@property (nonatomic, assign) AMapNaviFormWay formWay; - -///Link是否有红绿灯 -@property (nonatomic, assign) BOOL isHadTrafficLights; - -///Link的路况信息. 注意:只针对驾车. since 6.3.0 -@property (nonatomic, assign) AMapNaviRouteStatus trafficStatus; - -/* - 获取带有深绿路况新的表达方式的交通状态,(获取交通状态, 当前Link无精细数据时有效) - 畅通状态: 100--200; 而不在 [110,140)深绿、 [160,190)绿内,则路况状态默认为 “畅通”(绿色) - 缓行状态: 200--300; 而不在 [210,290)内, 则路况状态默认为 “缓行”(黄色) - 拥堵状态: 300--400; 而不在 [310,340)拥堵、 [360,390)极度拥堵内,则路况状态默认为“拥堵”(红色) - 无交通流: 900--999; 路况全部为“无交通流” - 在以上区间之外的,包括0 以及所有其他无效值,均按照“未知”处理。 - 特别注意:当前接口为收费接口,您如果申请试用或者正式应用都请通过工单系统提交商务合作类工单进行沟通 https://lbs.amap.com/ since 9.6.0 - */ -@property (nonatomic, assign) NSInteger trafficFineStatus; - -///Link的类型. 注意:只针对驾车. since 6.3.0 -@property (nonatomic, assign) AMapNaviLinkType linkType; - -///Link的ownership类型. 注意:只针对驾车. since 9.6.0 -@property (nonatomic, assign) AMapNaviOwnershipType ownershipType; -@end - -#pragma mark - AMapNaviSegment - -///路径的分段信息 -@interface AMapNaviSegment : NSObject - -///分段的所有坐标 -@property (nonatomic, strong) NSArray *coordinates; - -///分段的所有Link -@property (nonatomic, strong) NSArray *links; - -///分段的长度(单位:米) -@property (nonatomic, assign) NSInteger length; - -///分段的预估时间(单位:秒) -@property (nonatomic, assign) NSInteger time; - -///分段的转向类型 -@property (nonatomic, assign) AMapNaviIconType iconType; - -///分段的收费路长度(单位:米). 注意:只针对驾车. -@property (nonatomic, assign) NSInteger chargeLength; - -///分段的收费金额. 注意:只针对驾车. -@property (nonatomic, assign) NSInteger tollCost; - -///分段的红绿灯数量 -@property (nonatomic, assign) NSInteger trafficLightCount; - -///分段是否到达途经点. 注意:只针对驾车. -@property (nonatomic, assign) BOOL isArriveWayPoint; - -@end - -#pragma mark - AMapNaviRoute - -///导航路径信息 -@interface AMapNaviRoute : NSObject - -///导航路径总长度(单位:米) -@property (nonatomic, assign) NSInteger routeLength; - -///导航路径所需的时间(单位:秒) -@property (nonatomic, assign) NSInteger routeTime; - -///导航路线最小坐标点和最大坐标点围成的矩形区域 -@property (nonatomic, strong) AMapNaviPointBounds *routeBounds; - -///导航路线的中心点,即导航路径的最小外接矩形对角线的交点 -@property (nonatomic, strong) AMapNaviPoint *routeCenterPoint; - -///导航路线的所有形状点 -@property (nonatomic, strong) NSArray *routeCoordinates; - -///路线方案的起点坐标 -@property (nonatomic, strong) AMapNaviPoint *routeStartPoint; - -///路线方案的终点坐标 -@property (nonatomic, strong) AMapNaviPoint *routeEndPoint; - -///导航路线的所有分段 -@property (nonatomic, strong) NSArray *routeSegments; - -///导航路线上分段的总数 -@property (nonatomic, assign) NSInteger routeSegmentCount; - -///导航路线上的所有电子眼. 注意:只针对驾车. -@property (nonatomic, strong, nullable) NSArray *routeCameras; - -///导航路线上红绿灯的总数 -@property (nonatomic, assign) NSInteger routeTrafficLightCount; - -///导航路线上的标签信息. 注意:只针对驾车. since 5.0.0 -@property (nonatomic, strong, nullable) NSArray *routeLabels; - -///导航路线的花费金额(单位:元). 注意:只针对驾车. -@property (nonatomic, assign) NSInteger routeTollCost; - -///路径的途经点坐标 -@property (nonatomic, strong, nullable) NSArray *wayPoints __attribute__((deprecated("该字段已废弃,使用wayPointsInfo替代,since 6.7.0"))); - -///路径的途经点所在segment段的index -@property (nonatomic, strong, nullable) NSIndexPath *wayPointsIndexes __attribute__((deprecated("该字段已废弃,使用wayPointsInfo替代,since 6.7.0"))); - -///路径的途经点在routeCoordinates上对应的index -@property (nonatomic, strong, nullable) NSArray *wayPointCoordIndexes __attribute__((deprecated("该字段已废弃,使用wayPointsInfo替代,since 6.7.0"))); - -///路径限行信息. 注意:只针对驾车. since 5.0.0 -@property (nonatomic, strong, nullable) AMapNaviRestrictionInfo *restrictionInfo; - -///路径的路况信息. 注意:只针对驾车. since 5.1.0 -@property (nonatomic, strong, nullable) NSArray *routeTrafficStatuses; - -///路径的聚合段信息. 注意:只针对驾车. since 5.1.0 -@property (nonatomic, strong, nullable) NSArray *routeGroupSegments; - -///路径经过的城市的adcode列表. 注意:只针对驾车. since 5.1.0 -@property (nonatomic, strong, nullable) NSArray *routeCityAdcodes; - -///路径的所有红绿灯坐标. 注意:只针对驾车. since 5.3.0 -@property (nonatomic, strong, nullable) NSArray *routeTrafficLights; - -///路径上的禁行标示信息. 注意:只针对驾车. since 6.0.0 -@property (nonatomic, strong, nullable) NSArray *forbiddenInfo; - -///道路设施信息. 注意:只针对驾车. since 6.0.0 -@property (nonatomic, strong, nullable) NSArray *roadFacilityInfo; - -///路径的扎点. 注意:只针对驾车. since 6.3.0 -@property (nonatomic, strong, nullable) NSArray *routeIconPoints; - -///道路交通事件信息. 注意:只针对驾车. since 6.4.0 -@property (nonatomic, strong, nullable) NSArray *trafficIncidentInfo; - -///路径的途径点相关信息, 具体参考 AMapNaviRouteWayPointInfo . 注意:只针对驾车. since 6.7.0 -@property (nonatomic, strong, nullable) NSArray *wayPointsInfo; - -///根据路况生成的纹理索引数组, 可直接用于路线多彩线 MAMultiPolyline 的创建 .注意:只针对驾车. since 6.7.0 -@property (nonatomic, strong, nullable) NSArray *drawStyleIndexes; - -///当前路线的唯一标识ID . since 6.7.0 -@property (nonatomic, assign) NSUInteger routeUID; - -///路线详情信息. since 7.5.0 -@property (nonatomic, strong) NSArray *guideGroups; - -@end - -///导航路径信息集合. since 7.7.0 -@interface AMapNaviRouteGroup : NSObject - -- (nullable instancetype)init NS_UNAVAILABLE; - -///当前默认选中导航路径的ID -@property (nonatomic, readonly) NSInteger naviRouteID; - -///当前默认导航路径的信息,参考 AMapNaviRoute 类. -@property (nonatomic, readonly, nullable) AMapNaviRoute *naviRoute; - -///多路径规划时的所有路径ID,路径ID为 NSInteger 类型. -@property (nonatomic, readonly, nullable) NSArray *naviRouteIDs; - -///多路径规划时的所有路径信息,参考 AMapNaviRoute 类. -@property (nonatomic, readonly, nullable) NSDictionary *naviRoutes; - -/** - * @brief 多路径规划时选择路径.注意:该方法仅限于在开始导航前使用,开始导航后该方法无效. - * @param routeID 路径ID - * @return 是否选择路径成功 - */ -- (BOOL)selectNaviRouteWithRouteID:(NSInteger)routeID; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviStatisticsInfo.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviStatisticsInfo.h deleted file mode 100644 index cf59569..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviStatisticsInfo.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// AMapNaviStatisticsInfo.h -// AMapNaviKit -// -// Created by AutoNavi on 15/12/28. -// Copyright © 2015年 Amap. All rights reserved. -// - -#import "AMapNaviCommonObj.h" - -///导航统计信息 -@interface AMapNaviStatisticsInfo : NSObject - -///实际的行驶用时(包括中途停车时间,单位:秒) -@property (nonatomic, assign) NSInteger actualDrivenTime; - -///实际的行驶里程(单位:米) -@property (nonatomic, assign) NSInteger actualDrivenDisance; - -///平均速度(实际的行驶里程/实际的行驶用时,单位:公里/小时) -@property (nonatomic, assign) NSInteger averageSpeed; - -///最高速度(单位:公里/小时) -@property (nonatomic, assign) NSInteger highestSpeed; - -///电子眼播报的超速次数,关闭电子眼播报(AMapNaviDriveManager.updateCameraInfo)则没有计数 -@property (nonatomic, assign) NSInteger overspeedCount; - -///偏航次数 -@property (nonatomic, assign) NSInteger rerouteCount; - -///急刹车次数 -@property (nonatomic, assign) NSInteger brakesCount; - -///等待及拥堵时间(单位:秒) -@property (nonatomic, assign) NSInteger slowTime; - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviTravelManager.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviTravelManager.h deleted file mode 100644 index 8816b1f..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviTravelManager.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// AMapNaviTravelManager.h -// AMapNaviKit -// -// Created by eidanlin on 2020/3/10. -// Copyright © 2020 Amap. All rights reserved. -// - -#import "AMapNaviBaseManager.h" - -NS_ASSUME_NONNULL_BEGIN - -///注意:该类为骑步行控制器基类,请不要直接初始化使用 -@interface AMapNaviTravelManager : AMapNaviBaseManager - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviVersion.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviVersion.h deleted file mode 100644 index 93ffb73..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviVersion.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// AMapNaviVersion.h -// AMapNaviKit -// -// Created by AutoNavi on 16/1/7. -// Copyright © 2016年 Amap. All rights reserved. -// - -#import -#import "AMapNaviHeaderHandler.h" - -#ifndef AMapNaviVersion_h -#define AMapNaviVersion_h - -#define AMapNaviVersionNumber 10000800 -#define AMapNaviFoundationVersionMinRequired 10802 -#define AMapNavi3DMapVersionMinRequired 90000 - -/// 依赖库版本检测 -#if AMapFoundationVersionNumber < AMapNaviFoundationVersionMinRequired -#error "The AMapFoundationKit version is less than minimum required, please update! Any questions please to visit http://lbs.amap.com" -#endif - -#ifdef MAMapVersionNumber -#if MAMapVersionNumber < AMapNavi3DMapVersionMinRequired -#error "The MAMapKit(3D Version) version is less than minimum required, please update! Any questions please to visit http://lbs.amap.com" -#endif -#endif - -FOUNDATION_EXTERN NSString * const AMapNaviVersion; -FOUNDATION_EXTERN NSString * const AMapNaviName; - -#endif /* AMapNaviVersion_h */ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviWalkDataRepresentable.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviWalkDataRepresentable.h deleted file mode 100644 index 2b6818b..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviWalkDataRepresentable.h +++ /dev/null @@ -1,65 +0,0 @@ -// -// AMapNaviWalkDataRepresentable.h -// AMapNaviKit -// -// Created by 刘博 on 16/1/13. -// Copyright © 2016年 Amap. All rights reserved. -// - -#import "AMapNaviCommonObj.h" - -NS_ASSUME_NONNULL_BEGIN - -@class AMapNaviInfo; -@class AMapNaviRoute; -@class AMapNaviLocation; -@class AMapNaviStatisticsInfo; -@class AMapNaviWalkManager; - -/** - * @brief AMapNaviWalkDataRepresentable协议.实例对象可以通过实现该协议,并将其通过 AMapNaviWalkManager 的addDataRepresentative:方法进行注册,便可获取导航过程中的导航数据更新. - * 可以根据不同需求,选取使用特定的数据进行导航界面自定义. - * AMapNaviWalkView 即通过该协议实现导航过程展示.也可以依据导航数据的更新进行其他的逻辑处理. - */ -@protocol AMapNaviWalkDataRepresentable - -@optional - -/** - * @brief 导航模式更新回调 - * @param walkManager 步行导航管理类 - * @param naviMode 导航模式,参考 AMapNaviMode 值 - */ -- (void)walkManager:(AMapNaviWalkManager *)walkManager updateNaviMode:(AMapNaviMode)naviMode; - -/** - * @brief 路径ID更新回调. 注意:请不要在此回调中调用 -selectNaviRouteWithRouteID: 接口,否则会出现死循环调用. - * @param walkManager 步行导航管理类 - * @param naviRouteID 导航路径ID - */ -- (void)walkManager:(AMapNaviWalkManager *)walkManager updateNaviRouteID:(NSInteger)naviRouteID; - -/** - * @brief 路径信息更新回调. 注意:请不要在此回调中调用 -selectNaviRouteWithRouteID: 接口,否则会出现死循环调用. - * @param walkManager 步行导航管理类 - * @param naviRoute 路径信息,参考 AMapNaviRoute 类 - */ -- (void)walkManager:(AMapNaviWalkManager *)walkManager updateNaviRoute:(nullable AMapNaviRoute *)naviRoute; - -/** - * @brief 导航信息更新回调 - * @param walkManager 步行导航管理类 - * @param naviInfo 导航信息,参考 AMapNaviInfo 类 - */ -- (void)walkManager:(AMapNaviWalkManager *)walkManager updateNaviInfo:(nullable AMapNaviInfo *)naviInfo; - -/** - * @brief 自车位置更新回调 - * @param walkManager 步行导航管理类 - * @param naviLocation 自车位置信息,参考 AMapNaviLocation 类 - */ -- (void)walkManager:(AMapNaviWalkManager *)walkManager updateNaviLocation:(nullable AMapNaviLocation *)naviLocation; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviWalkManager.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviWalkManager.h deleted file mode 100644 index 8a54421..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviWalkManager.h +++ /dev/null @@ -1,284 +0,0 @@ -// -// AMapNaviWalkManager.h -// AMapNaviKit -// -// Created by 刘博 on 16/1/13. -// Copyright © 2016年 Amap. All rights reserved. -// - -#import "AMapNaviTravelManager.h" -#import "AMapNaviWalkDataRepresentable.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol AMapNaviWalkManagerDelegate; - -#pragma mark - AMapNaviWalkManager - -///步行导航管理类 -@interface AMapNaviWalkManager : AMapNaviTravelManager - -#pragma mark - Singleton - -/** - * @brief AMapNaviWalkManager单例. since 7.4.0 - * @return AMapNaviWalkManager实例 - */ -+ (AMapNaviWalkManager *)sharedInstance; - -/** - * @brief 销毁AMapNaviWalkManager单例. since 7.4.0 - * @return 是否销毁成功. 如果返回NO,请检查单例是否被强引用 - */ -+ (BOOL)destroyInstance; - -/** - * @brief 请使用单例替代. since 7.4.0 init已被禁止使用,请使用单例 [AMapNaviWalkManager sharedInstance] 替代 - */ -- (instancetype)init __attribute__((unavailable("since 7.4.0 init 已被禁止使用,请使用单例 [AMapNaviWalkManager sharedInstance] 替代"))); - -#pragma mark - Delegate - -///实现了 AMapNaviWalkManagerDelegate 协议的类指针 -@property (nonatomic, weak) id delegate; - -#pragma mark - Event Listener - -/** - * @brief 增加用于接收导航回调事件的Listener, 效果等同于delegate. 注意:该方法不会增加实例对象的引用计数(Weak Reference). since 8.0.1 - * @param aListener 实现了 AMapNaviRideManagerDelegate 协议的实例 - */ -- (void)addEventListener:(id)aListener; - -/** - * @brief 移除用于接收导航回调事件的Listener. since 8.0.1 - * @param aListener 实现了 AMapNaviRideManagerDelegate 协议的实例 - */ -- (void)removeEventListener:(id)aListener; - -#pragma mark - Data Representative - -/** - * @brief 增加用于展示导航数据的DataRepresentative.注意:该方法不会增加实例对象的引用计数(Weak Reference) - * @param aRepresentative 实现了 AMapNaviWalkDataRepresentable 协议的实例 - */ -- (void)addDataRepresentative:(id)aRepresentative; - -/** - * @brief 移除用于展示导航数据的DataRepresentative - * @param aRepresentative 实现了 AMapNaviWalkDataRepresentable 协议的实例 - */ -- (void)removeDataRepresentative:(id)aRepresentative; - -#pragma mark - Navi Route - -///当前导航路径的ID -@property (nonatomic, readonly) NSInteger naviRouteID; - -///当前导航路径的信息,参考 AMapNaviRoute 类. -@property (nonatomic, readonly, nullable) AMapNaviRoute *naviRoute; - -/** - * @brief 多路径规划时的所有路径信息 since 7.5.0 - * @return 返回多路径规划时的所有路径ID和路线信息 - */ -- (NSDictionary *)naviRoutes; - - -/** - * @brief 多路径规划时的所有路径ID,路径ID为 NSInteger 类型 since 7.5.0 - * @return 返回多路径规划时的所有路径ID - */ -- (NSArray *)naviRouteIDs; - -/** - * @brief 多路径规划时选择路径.注意:该方法仅限于在开始导航前使用,开始导航后该方法无效 since 7.5.0 - * @param routeID 路径ID - * @return 是否选择路径成功 - */ -- (BOOL)selectNaviRouteWithRouteID:(NSInteger)routeID; - -#pragma mark - Options - -///偏航时是否重新计算路径,默认YES(需要联网). -@property (nonatomic, assign) BOOL isRecalculateRouteForYaw __attribute__((deprecated("已废弃,默认进行重算,since 7.4.0"))); - -///卫星定位信号强度类型,参考 AMapNaviGPSSignalStrength since 7.8.0 只有导航中获取卫星定位信号强弱的值有效 -@property (nonatomic, assign, readonly) AMapNaviGPSSignalStrength gpsSignalStrength; - -#pragma mark - Calculate Route - -// 以下算路方法需要高德坐标(GCJ02) - -/** - * @brief 不带起点的步行路径规划 - * @param endPoints 终点坐标.支持多个终点,终点列表的尾点为实时导航终点,其他坐标点为辅助信息,带有方向性,可有效避免算路到马路的另一侧. - * @return 规划路径所需条件和参数校验是否成功,不代表算路成功与否 - */ -- (BOOL)calculateWalkRouteWithEndPoints:(NSArray *)endPoints; - -/** - * @brief 带起点的步行路径规划 - * @param startPoints 起点坐标.支持多个起点,起点列表的尾点为实时导航起点,其他坐标点为辅助信息,带有方向性,可有效避免算路到马路的另一侧. - * @param endPoints 终点坐标.支持多个终点,终点列表的尾点为实时导航终点,其他坐标点为辅助信息,带有方向性,可有效避免算路到马路的另一侧. - * @return 规划路径所需条件和参数校验是否成功,不代表算路成功与否 - */ -- (BOOL)calculateWalkRouteWithStartPoints:(NSArray *)startPoints - endPoints:(NSArray *)endPoints; - -/** - * @brief 根据高德POIInfo进行步行路径规划. since 7.5.0 - * @param startPOIInfo 起点POIInfo, 参考 AMapNaviPOIInfo. 如果以“我的位置”作为起点,请传nil. 如果startPOIInfo不为nil,那么POIID合法,优先使用ID参与算路,否则使用坐标点 - * @param endPOIInfo 终点POIInfo, 参考 AMapNaviPOIInfo. 如果POIID合法,优先使用ID参与算路,否则使用坐标点. 注意:POIID和坐标点不能同时为空 - * @param strategy 路径的计算策略,参考 AMapNaviTravelStrategy. - * @return 规划路径所需条件和参数校验是否成功,不代表算路成功与否 - */ -- (BOOL)calculateWalkRouteWithStartPOIInfo:(nullable AMapNaviPOIInfo *)startPOIInfo - endPOIInfo:(nonnull AMapNaviPOIInfo *)endPOIInfo - strategy:(AMapNaviTravelStrategy)strategy; - -/** - * @brief POI算路。特别注意:当前接口为收费接口,您如果申请试用或者正式应用都请通过工单系统提交商务合作类工单进行沟通 https://lbs.amap.com/。 since 9.3.5 - * @param startPOIInfo 起点POIInfo,如果以“我的位置”作为起点,请传nil。如果startPOIInfo不为nil,那么POIID合法,优先使用ID参与算路,否则使用坐标点。 - * @param endPOIInfo 终点POIInfo,如果POIID合法,优先使用ID参与算路,否则使用坐标点。注意:POIID和坐标点不能同时为空。 - * @param wayPOIInfos 途经点POIInfo,最多支持16个途经点,超过16个会取前16个。如果POIID合法,优先使用ID参与算路,否则使用坐标点。注意:POIID和坐标点不能同时为空。 - * @param strategy 路径的计算策略。 - * @return 规划路径所需条件和参数校验是否成功,不代表算路成功与否 - */ -- (BOOL)calculateWalkRouteWithStartPOIInfo:(nullable AMapNaviPOIInfo *)startPOIInfo - endPOIInfo:(nonnull AMapNaviPOIInfo *)endPOIInfo - wayPOIInfos:(nullable NSArray *)wayPOIInfos - strategy:(AMapNaviTravelStrategy)strategy; - -/** - * @brief 独立算路能力接口,可用于不干扰本次导航的单独算路场景. since 7.8.0 - * @param startPOIInfo 起点POIInfo, 参考 AMapNaviPOIInfo. 如果以“我的位置”作为起点,请传nil. 如果startPOIInfo不为nil,那么POIID合法,优先使用ID参与算路,否则使用坐标点 - * @param endPOIInfo 终点POIInfo, 参考 AMapNaviPOIInfo. 如果POIID合法,优先使用ID参与算路,否则使用坐标点. 注意:POIID和坐标点不能同时为空 - * @param strategy 路径的计算策略,参考 AMapNaviTravelStrategy. - * @param callback 算路完成的回调. 算路成功时,routeGroup 不为空;算路失败时,error 不为空,error.code参照 AMapNaviCalcRouteState. - * @return 规划路径所需条件和参数校验是否成功,不代表算路成功与否 - */ -- (BOOL)independentCalculateWalkRouteWithStartPOIInfo:(nullable AMapNaviPOIInfo *)startPOIInfo - endPOIInfo:(nonnull AMapNaviPOIInfo *)endPOIInfo - strategy:(AMapNaviTravelStrategy)strategy - callback:(nullable void (^)(AMapNaviRouteGroup *_Nullable routeGroup, NSError *_Nullable error))callback; - -/** - * @brief 独立算路能力接口,可用于不干扰本次导航的单独算路场景。特别注意:当前接口为收费接口,您如果申请试用或者正式应用都请通过工单系统提交商务合作类工单进行沟通 https://lbs.amap.com/。 since 9.4.0 - * @param startPOIInfo 起点POIInfo,如果以“我的位置”作为起点,请传nil。如果startPOIInfo不为nil,那么POIID合法,优先使用ID参与算路,否则使用坐标点。 - * @param endPOIInfo 终点POIInfo,如果POIID合法,优先使用ID参与算路,否则使用坐标点。注意:POIID和坐标点不能同时为空。 - * @param wayPOIInfos 途经点POIInfo,最多支持16个途经点,超过16个会取前16个。如果POIID合法,优先使用ID参与算路,否则使用坐标点。注意:POIID和坐标点不能同时为空。 - * @param strategy 路径的计算策略。 - * @param callback 算路完成的回调。算路成功时,routeGroup 不为空;算路失败时,error 不为空,error.code参照 AMapNaviCalcRouteState。 - * @return 规划路径所需条件和参数校验是否成功,不代表算路成功与否。 - */ -- (BOOL)independentCalculateWalkRouteWithStartPOIInfo:(nullable AMapNaviPOIInfo *)startPOIInfo - endPOIInfo:(nonnull AMapNaviPOIInfo *)endPOIInfo - wayPOIInfos:(nullable NSArray *)wayPOIInfos - strategy:(AMapNaviTravelStrategy)strategy - callback:(nullable void (^)(AMapNaviRouteGroup *_Nullable routeGroup, NSError *_Nullable error))callback; - -/** - * @brief 导航过程中重新规划路径(起点为当前位置,终点位置不变) - * @return 重新规划路径所需条件和参数校验是否成功, 不代表算路成功与否,如非导航状态下调用此方法会返回NO. - */ -- (BOOL)recalculateWalkRoute; - -#pragma mark - Manual - -/** - * @brief 设置TTS语音播报每播报一个字需要的时间.根据播报一个字的时间和运行的速度,可以更改语音播报的触发时机. - * @param time 每个字的播放时间(范围:[250,500]; 单位:毫秒) - */ -- (void)setTimeForOneWord:(int)time __attribute__((deprecated("已废弃,使用 setIsPlayingTTS: 替代,since 7.4.0"))); - -/** - * @brief 开发者请根据实际情况设置外界此时是否正在进行语音播报. since 7.4.0 - * @param playing 如果外界正在播报语音,传入YES,否则传入NO. -*/ -- (void)setTTSPlaying:(BOOL)playing; - -#pragma mark - Statistics Information - -/** - * @brief 获取导航统计信息 - * @return 导航统计信息,参考 AMapNaviStatisticsInfo 类. - */ -- (nullable AMapNaviStatisticsInfo *)getNaviStatisticsInfo __attribute__((deprecated("已废弃,since 7.4.0"))); - -@end - -#pragma mark - AMapNaviWalkManagerDelegate - -@protocol AMapNaviWalkManagerDelegate -@optional - -/** - * @brief 发生错误时,会调用代理的此方法 - * @param walkManager 步行导航管理类 - * @param error 错误信息 - */ -- (void)walkManager:(AMapNaviWalkManager *)walkManager error:(NSError *)error; - -/** - * @brief 步行路径规划成功后的回调函数 - * @param walkManager 步行导航管理类 - */ -- (void)walkManagerOnCalculateRouteSuccess:(AMapNaviWalkManager *)walkManager; - -/** - * @brief 步行路径规划失败后的回调函数. 从6.1.0版本起,算路失败后导航SDK只对外通知算路失败,SDK内部不再执行停止导航的相关逻辑.因此,当算路失败后,不会收到 walkManager:updateNaviMode: 回调; AMapNaviWalkManager.naviMode 不会切换到 AMapNaviModeNone 状态, 而是会保持在 AMapNaviModeGPS or AMapNaviModeEmulator 状态 - * @param walkManager 步行导航管理类 - * @param error 错误信息,error.code参照AMapNaviCalcRouteState - */ -- (void)walkManager:(AMapNaviWalkManager *)walkManager onCalculateRouteFailure:(NSError *)error; - -/** - * @brief 启动导航后回调函数 - * @param walkManager 步行导航管理类 - * @param naviMode 导航类型,参考AMapNaviMode - */ -- (void)walkManager:(AMapNaviWalkManager *)walkManager didStartNavi:(AMapNaviMode)naviMode; - -/** - * @brief 出现偏航需要重新计算路径时的回调函数.偏航后将自动重新路径规划,该方法将在自动重新路径规划前通知您进行额外的处理. - * @param walkManager 步行导航管理类 - */ -- (void)walkManagerNeedRecalculateRouteForYaw:(AMapNaviWalkManager *)walkManager; - -/** - * @brief 导航播报信息回调函数 - * @param walkManager 步行导航管理类 - * @param soundString 播报文字 - * @param soundStringType 播报类型,参考AMapNaviSoundType. 注意:since 6.0.0 AMapNaviSoundType 只返回 AMapNaviSoundTypeDefault - */ -- (void)walkManager:(AMapNaviWalkManager *)walkManager playNaviSoundString:(NSString *)soundString soundStringType:(AMapNaviSoundType)soundStringType; - -/** - * @brief 模拟导航到达目的地停止导航后的回调函数 - * @param walkManager 步行导航管理类 - */ -- (void)walkManagerDidEndEmulatorNavi:(AMapNaviWalkManager *)walkManager; - -/** - * @brief 导航到达目的地后的回调函数 - * @param walkManager 步行导航管理类 - */ -- (void)walkManagerOnArrivedDestination:(AMapNaviWalkManager *)walkManager; - -/** - * @brief 卫星定位信号强弱回调函数. since 7.4.0 - * @param walkManager 步行导航管理类 - * @param gpsSignalStrength 卫星定位信号强度类型,参考 AMapNaviGPSSignalStrength . - */ -- (void)walkManager:(AMapNaviWalkManager *)walkManager updateGPSSignalStrength:(AMapNaviGPSSignalStrength)gpsSignalStrength; - -/** - * @brief 步行导航到达途径点的回调函数 since 9.3.5 - * @param walkManager 步行导航管理类 - * @param wayPointIndex wayPointIndex 到达途径点的编号,编号从0开始,依次累加。 - */ -- (void)walkManager:(AMapNaviWalkManager *)walkManager onArrivedWayPoint:(int)wayPointIndex; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviWalkView.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviWalkView.h deleted file mode 100644 index 5792381..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/AMapNaviWalkView.h +++ /dev/null @@ -1,218 +0,0 @@ -// -// AMapNaviWalkView.h -// AMapNaviKit -// -// Created by AutoNavi on 15/12/28. -// Copyright © 2016年 Amap. All rights reserved. -// - -#import "AMapNaviHeaderHandler.h" -#import "AMapNaviCommonObj.h" -#import "AMapNaviWalkDataRepresentable.h" - -NS_ASSUME_NONNULL_BEGIN - -///步行导航界面显示模式 -typedef NS_ENUM(NSInteger, AMapNaviWalkViewShowMode) -{ - AMapNaviWalkViewShowModeCarPositionLocked = 1, ///< 锁车状态 - AMapNaviWalkViewShowModeOverview = 2, ///< 全览状态 - AMapNaviWalkViewShowModeNormal = 3, ///< 普通状态 -}; - -@protocol AMapNaviWalkViewDelegate; - -///步行导航界面.该类实现 AMapNaviWalkDataRepresentable 协议,可通过 AMapNaviWalkManager 的addDataRepresentative:方法进行注册展示步行导航过程. -@interface AMapNaviWalkView : UIView - -#pragma mark - Delegate - -///实现了 AMapNaviWalkViewDelegate 协议的类指针 -@property (nonatomic, weak) id delegate; - -#pragma mark - Options - -///目前是否为横屏状态. since 7.4.0 内部会自行监听 UIDeviceOrientationDidChange 进行横竖屏切换,无需再设置此值,但用户要自行保证 AMapNaviWalkView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight,让 AMapNaviWalkView 能够跟着父View一起变化. 可通过回调 -walkView:didChangeOrientation: 获取横竖屏切换时机 -@property (nonatomic, assign, readonly) BOOL isLandscape; - -///导航界面跟随模式,默认AMapNaviViewTrackingModeMapNorth -@property (nonatomic, assign) AMapNaviViewTrackingMode trackingMode; - -///导航界面显示模式,默认AMapNaviDriveViewShowModeCarPositionLocked -@property (nonatomic, assign) AMapNaviWalkViewShowMode showMode; - -///是否显示界面元素,默认YES -@property (nonatomic, assign) BOOL showUIElements; - -///是否黑夜模式,默认NO. 对应的地图样式为:白天模式MAMapTypeNavi,黑夜模式MAMapTypeStandardNight. -@property (nonatomic, assign) BOOL showStandardNightType __attribute((deprecated("已废弃, 请使用 mapViewModeType 替代 since 8.0.0"))); - -///是否显示全览按钮,默认YES -@property (nonatomic, assign) BOOL showBrowseRouteButton; - -///是否显示更多按钮,默认YES -@property (nonatomic, assign) BOOL showMoreButton; - -///是否显示转向箭头,默认YES -@property (nonatomic, assign) BOOL showTurnArrow; - -///是否显示传感器方向信息,默认NO.设置为YES后,自车图标方向将显示为设备方向 -@property (nonatomic, assign) BOOL showSensorHeading; - -///导航界面日夜模式类型, 默认为 AMapNaviViewMapModeTypeDay(白天模式) since 8.0.0 -@property (nonatomic, assign) AMapNaviViewMapModeType mapViewModeType; - -#pragma mark - MapView - -///是否显示指南针,默认NO -@property (nonatomic, assign) BOOL showCompass; - -///锁车状态下地图cameraDegree, 默认30.0, 范围[0,60] -@property (nonatomic, assign) CGFloat cameraDegree; - -///当前地图是否显示比例尺,默认NO -@property (nonatomic, assign) BOOL showScale; - -///当前地图比例尺的原点位置,默认(10,10) -@property (nonatomic, assign) CGPoint scaleOrigin; - -///地图的视图锚点. (0, 0)为左上角,(1, 1)为右下角. 可通过设置此值来改变自车图标的默认显示位置. 注意:只有showUIElements为NO时,设置此值才有效 since 8.0.0 -@property (nonatomic, assign) CGPoint screenAnchor; - -///指南针原点位置. since 8.0.0 -@property (nonatomic, assign) CGPoint compassOrigin; - -///当前地图是否开启自定义样式, 默认NO. 设置为YES,将忽略showStandardNightType的设置,并将mapType切换为MAMapTypeStandard. 设置为NO,将根据showStandardNightType恢复mapType. since 5.1.0 -@property (nonatomic, assign) BOOL customMapStyleEnabled __attribute((deprecated("已废弃, 请使用 mapViewModeType 替代 since 8.0.0"))); - -/** - * @brief 自定义当前地图样式, 目前仅支持自定义标准类型. 已废弃, 请使用 setCustomMapStyleOptions: since 6.6.0 - * @param customJson 自定义的JSON格式数据. - */ -- (void)setCustomMapStyle:(NSData *)customJson __attribute((deprecated("已废弃, 请使用 setCustomMapStyleOptions: since 6.6.0"))); - -/** - * @brief 根据web导出数据设置地图样式, 目前仅支持自定义标准类型. 默认不生效,调用customMapStyleEnabled=YES使生效. since 6.2.0 - * @param data 高德web端工具导出的地图样式数据. - */ -- (void)setCustomMapStyleWithWebData:(NSData*)data __attribute((deprecated("已废弃, 请使用 setCustomMapStyleOptions: since 6.6.0"))); - -/** - * @brief 自定义地图样式设置,可以支持分级样式配置,如控制不同级别显示不同的颜色(自6.6.0开始使用新版样式,旧版样式无法在新版接口setCustomMapStyleOptions:(MAMapCustomStyleOptions *)styleOptions中使用,请到官网(lbs.amap.com)更新新版样式文件) - * @param styleOptions 自定义样式options. since 6.6.0 - */ -- (void)setCustomMapStyleOptions:(MAMapCustomStyleOptions *)styleOptions; - -#pragma mark - Polyline Texture - -///路线polyline的宽度,设置0恢复默认宽度 -@property (nonatomic, assign) CGFloat lineWidth; - -///标准路线Polyline的纹理图片,设置nil恢复默认纹理.纹理图片需满足:长宽相等,且宽度值为2的次幂 -@property (nonatomic, copy, nullable) UIImage *normalTexture; - -///走过的路线是否置灰,默认为NO. since 7.4.0 -@property (nonatomic, assign) BOOL showGreyAfterPass; - -///路线纹理部分走过后置灰的纹理图片,设置nil恢复默认纹理. 纹理图片需满足:长宽相等,且宽度值为2的次幂. since 7.4.0 -@property (nonatomic, copy, nullable) UIImage *greyTexture; - -#pragma mark - Other - -/** - * @brief 在全览状态下调用此函数能够让路线显示在可视区域内(排除EdgePadding后剩余的区域),保证路线不被自定义界面元素遮挡. 比如showUIElements为NO时(自定义界面)横竖屏切换后,可以调用此函数. since 8.0.0 - */ -- (void)updateRoutePolylineInTheVisualRangeWhenTheShowModeIsOverview; - -#pragma mark - Image - -/** - * @brief 设置路径起点图标 - * @param startPointImage 起点图标,设置nil为默认图标 - */ -- (void)setStartPointImage:(nullable UIImage *)startPointImage; - -/** - * @brief 设置路径终点图标 - * @param endPointImage 终点图标,设置nil为默认图标 - */ -- (void)setEndPointImage:(nullable UIImage *)endPointImage; - -/** - * @brief 设置自车图标 - * @param carImage 自车图标,设置nil为默认图标 - */ -- (void)setCarImage:(nullable UIImage *)carImage; - -/** - * @brief 设置自车罗盘图标 - * @param carCompassImage 自车罗盘图标,设置nil为默认图标 - */ -- (void)setCarCompassImage:(nullable UIImage *)carCompassImage; - -/** - * @brief 设置路径途经点图标 since 9.3.5 - * @param wayPointImage 途经点图标,设置nil为默认图标 - */ -- (void)setWayPointImage:(nullable UIImage *)wayPointImage; -@end - -@protocol AMapNaviWalkViewDelegate -@optional - -/** - * @brief 导航界面关闭按钮点击时的回调函数 - * @param walkView 步行导航界面 - */ -- (void)walkViewCloseButtonClicked:(AMapNaviWalkView *)walkView; - -/** - * @brief 导航界面更多按钮点击时的回调函数 - * @param walkView 步行导航界面 - */ -- (void)walkViewMoreButtonClicked:(AMapNaviWalkView *)walkView; - -/** - * @brief 导航界面转向指示View点击时的回调函数 - * @param walkView 步行导航界面 - */ -- (void)walkViewTrunIndicatorViewTapped:(AMapNaviWalkView *)walkView; - -/** - * @brief 导航界面显示模式改变后的回调函数 - * @param walkView 步行导航界面 - * @param showMode 显示模式 - */ -- (void)walkView:(AMapNaviWalkView *)walkView didChangeShowMode:(AMapNaviWalkViewShowMode)showMode; - -/** - * @brief 导航界面跟随模式改变后的回调函数. since 7.4.0 - * @param walkView 步行导航界面 - * @param trackMode 跟随模式 - */ -- (void)walkView:(AMapNaviWalkView *)walkView didChangeTrackingMode:(AMapNaviViewTrackingMode)trackMode; - -/** - * @brief 导航界面横竖屏切换后的回调函数. since 7.4.0 - * @param walkView 步行导航界面 - * @param isLandscape 是否是横屏 - */ -- (void)walkView:(AMapNaviWalkView *)walkView didChangeOrientation:(BOOL)isLandscape; - -/** - * @brief 导航界面白天黑夜模式切换后的回调函数. since 8.0.0 - * @param walkView 步行导航界面 - * @param showStandardNightType 是否为黑夜模式 - */ -- (void)walkView:(AMapNaviWalkView *)walkView didChangeDayNightType:(BOOL)showStandardNightType; - -/** - * @brief 在showUIElements为NO时,步行导航界面需要实时的取得可视区域,比如切换成全览时、横竖屏切换时. 注意:此回调只在showUIElements为NO时,才会调用且比较频繁,在获取EdgePadding时请勿进行大量的计算. since 8.0.0 - * @param walkView 步行导航界面 - * @return 如(100, 50, 80, 60)表示的是:walkView.bounds 上边留出100px,左边留出50px,底部留出80px,右边留出60px后的区域为可视区域,一般EdgePadding的值由用户的界面布局决定. - */ -- (UIEdgeInsets)walkViewEdgePadding:(AMapNaviWalkView *)walkView; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAAnimatedAnnotation.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAAnimatedAnnotation.h deleted file mode 100644 index 7941fbe..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAAnimatedAnnotation.h +++ /dev/null @@ -1,60 +0,0 @@ -// -// MAAnimatedAnnotation.h -// MAMapKit -// -// Created by shaobin on 16/12/8. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "MAConfig.h" -#import "MAPointAnnotation.h" -#import "MAAnnotationMoveAnimation.h" - -///支持动画效果的点标注 -@interface MAAnimatedAnnotation : MAPointAnnotation - -///移动方向. 正北为0度,顺时针方向。即正东90,正南180,正西270。since 4.5.0 -@property (nonatomic, assign) CLLocationDirection movingDirection; - -/** - @brief 添加移动动画, 第一个添加的动画以当前coordinate为起始点,沿传入的coordinates点移动,否则以上一个动画终点为起始点. since 4.5.0 - @param coordinates c数组,由调用者负责coordinates指向内存的管理 - @param count coordinates数组大小 - @param duration 动画时长,0或<0为无动画 - @param name 名字,如不指定可传nil - @param completeCallback 动画完成回调,isFinished: 动画是否执行完成 - */ -- (MAAnnotationMoveAnimation *)addMoveAnimationWithKeyCoordinates:(CLLocationCoordinate2D *)coordinates - count:(NSUInteger)count - withDuration:(CGFloat)duration - withName:(NSString *)name - completeCallback:(void(^)(BOOL isFinished))completeCallback; - -/** - @brief 添加移动动画, 第一个添加的动画以当前coordinate为起始点,沿传入的coordinates点移动,否则以上一个动画终点为起始点. since 5.4.0 - @param coordinates c数组,由调用者负责coordinates指向内存的管理 - @param count coordinates数组大小 - @param duration 动画时长,0或<0为无动画 - @param name 名字,如不指定可传nil - @param completeCallback 动画完成回调,isFinished: 动画是否执行完成 - @param stepCallback 动画每一帧回调 - */ -- (MAAnnotationMoveAnimation *)addMoveAnimationWithKeyCoordinates:(CLLocationCoordinate2D *)coordinates - count:(NSUInteger)count - withDuration:(CGFloat)duration - withName:(NSString *)name - completeCallback:(void(^)(BOOL isFinished))completeCallback - stepCallback:(void(^)(MAAnnotationMoveAnimation* currentAni))stepCallback; - -/** - * @brief 获取所有未完成的移动动画, 返回数组内为MAAnnotationMoveAnimation对象. since 4.5.0 - * @return 返回所有移动动画,数组内元素类型为 MAAnnotationMoveAnimation - */ -- (NSArray *)allMoveAnimations; - -/** - * @brief 设置需要开始动画,自定义其他类型动画时需要调用. since 6.0.0 - */ -- (void)setNeedsStart; - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAAnnotation.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAAnnotation.h deleted file mode 100644 index f6c8cd1..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAAnnotation.h +++ /dev/null @@ -1,71 +0,0 @@ -// -// MAAnnotation.h -// MAMapKit -// -// Created by yin cai on 11-12-13. -// Copyright (c) 2011年 Amap. All rights reserved. -// - -#import "MAConfig.h" -#import -#import -#import -#import "MAGeometry.h" - -///该类为标注点的protocol,提供了标注类的基本信息函数 -@protocol MAAnnotation - -///标注view中心坐标 -@property (nonatomic, readonly) CLLocationCoordinate2D coordinate; - -@optional - -///annotation标题 -@property (nonatomic, copy) NSString *title; - -///annotation副标题 -@property (nonatomic, copy) NSString *subtitle; - -/** - * @brief 设置标注的坐标,在拖拽时会被调用. - * @param newCoordinate 新的坐标值 - */ -- (void)setCoordinate:(CLLocationCoordinate2D)newCoordinate; - -///annotation海拔高度,单位米,默认0 -@property (nonatomic, assign) double altitude; -@end - -/** - * 支持动画需要实现的协议. since 4.5.0 - */ -@protocol MAAnimatableAnnotation - -@required -/** - * @brief 动画帧更新回调接口,实现者可在内部做更新处理,如更新coordinate. (since 4.5.0) - * @param timeDelta 时间步长,单位秒 - */ -- (void)step:(CGFloat)timeDelta; - -/** - * @brief 动画是否已完成. 通过此方法判断是否需要将动画annotation移出渲染执行过程。(since 4.5.0) - * @return YES动画已完成,NO没有完成 - */ -- (BOOL)isAnimationFinished; - -/** - * @brief 动画是否可以开始. 通过此方法判断是否需要将动画annotation加入渲染过程,已经start且尚未finish的动画标注才会调用step方法。(since 6.0.0) - * @return YES 可以开始,NO 尚未开始。 - */ -- (BOOL)shouldAnimationStart; - -@optional -/** - * @brief 动画更新时调用此接口,获取annotationView的旋转角度,不实现默认为0. (since 4.5.0) - * @return 当前annotation的旋转角度,正北为0度,顺时针方向。即正东90,正南180,正西270。 - */ -- (CLLocationDirection)rotateDegree; - - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAAnnotationMoveAnimation.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAAnnotationMoveAnimation.h deleted file mode 100644 index b039d7b..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAAnnotationMoveAnimation.h +++ /dev/null @@ -1,65 +0,0 @@ -// -// MAAnnotationMoveAnimation.h -// MAMapKit -// -// Created by shaobin on 16/11/21. -// Copyright © 2016 Amap. All rights reserved. -// - - -#import "MAConfig.h" -#import -#import "MAAnnotation.h" - -///annotation移动动画. since 4.5.0 -@interface MAAnnotationMoveAnimation : NSObject - -/** - * @brief 获取动画名字 - * @return 添加动画时传入的名字 - */ -- (NSString *)name; - -/** - * @brief 获取经纬度坐标点数组 - * @return 返回经纬度坐标点数组 - */ -- (CLLocationCoordinate2D *)coordinates; - -/** - * @brief 获取coordinates数组内坐标点个数 - * @return coordinates数组内坐标点个数 - */ -- (NSUInteger)count; - -/** - * @brief 获取动画时长 - * @return 动画时长 - */ -- (CGFloat)duration; - -/** - * @brief 获取动画已执行的时长 - * @return 动画已执行的时长 - */ -- (CGFloat)elapsedTime; - -/** - * @brief 取消 - */ -- (void)cancel; - -/** - * @brief 是否已取消 - * @return YES已取消,NO未取消 - */ -- (BOOL)isCancelled; - -/** - * @brief 获取当前动画已走过点的总个数 - * @return 个数 - */ -- (NSInteger)passedPointCount; - - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAAnnotationView.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAAnnotationView.h deleted file mode 100644 index 4ef3f53..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAAnnotationView.h +++ /dev/null @@ -1,106 +0,0 @@ -// -// MAAnnotationView.h -// MAMapKitDemo -// -// Created by songjian on 13-1-7. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "MAConfig.h" -#import -#import "MACustomCalloutView.h" - -///MAAnnotationView拖动状态 -typedef NS_ENUM(NSInteger, MAAnnotationViewDragState) -{ - MAAnnotationViewDragStateNone = 0, ///< 静止状态 - MAAnnotationViewDragStateStarting, ///< 开始拖动 - MAAnnotationViewDragStateDragging, ///< 拖动中 - MAAnnotationViewDragStateCanceling, ///< 取消拖动 - MAAnnotationViewDragStateEnding ///< 拖动结束 -}; - -@protocol MAAnnotation; - -///标注view -@interface MAAnnotationView : UIView - -///复用标识 -@property (nonatomic, readonly, copy) NSString *reuseIdentifier; - -///z值,大值在上,默认为0。类似CALayer的zPosition。zIndex属性只有在viewForAnnotation或者didAddAnnotationViews回调中设置有效。 -@property (nonatomic, assign) NSInteger zIndex; - -///关联的annotation -@property (nonatomic, strong) id annotation; - -///显示的image -@property (nonatomic, strong) UIImage *image; - -///image所对应的UIImageView since 5.0.0 -@property (nonatomic, strong, readonly) UIImageView *imageView; - -///自定制弹出框view, 用于替换默认弹出框. 注意:此弹出框不会触发-(void)mapView: didAnnotationViewCalloutTapped: since 5.0.0 -@property (nonatomic, strong) MACustomCalloutView *customCalloutView; - -///annotationView的中心默认位于annotation的坐标位置,可以设置centerOffset改变view的位置,正的偏移使view朝右下方移动,负的朝左上方,单位是屏幕坐标 -@property (nonatomic) CGPoint centerOffset; - -///弹出框默认位于view正中上方,可以设置calloutOffset改变view的位置,正的偏移使view朝右下方移动,负的朝左上方,单位是屏幕坐标 -@property (nonatomic) CGPoint calloutOffset; - -///默认为YES,当为NO时view忽略触摸事件 -@property (nonatomic, getter=isEnabled) BOOL enabled; - -///是否高亮 -@property (nonatomic, getter=isHighlighted) BOOL highlighted; - -///设置是否处于选中状态, 外部如果要选中请使用mapView的selectAnnotation方法 -@property (nonatomic, getter=isSelected) BOOL selected; - -///是否允许弹出callout -@property (nonatomic) BOOL canShowCallout; - -///显示在默认弹出框左侧的view -@property (nonatomic, strong) UIView *leftCalloutAccessoryView; - -///显示在默认弹出框右侧的view -@property (nonatomic, strong) UIView *rightCalloutAccessoryView; - -///是否支持拖动 -@property (nonatomic, getter=isDraggable) BOOL draggable; - -///当前view的拖动状态 -@property (nonatomic) MAAnnotationViewDragState dragState; - -///弹出默认弹出框时,是否允许地图调整到合适位置来显示弹出框,默认为YES -@property (nonatomic) BOOL canAdjustPositon; - -/** - * @brief 设置是否处于选中状态, 外部如果要选中请使用mapView的selectAnnotation方法 - * @param selected 是否选中 - * @param animated 是否使用动画效果 - */ -- (void)setSelected:(BOOL)selected animated:(BOOL)animated; - -/** - * @brief 初始化并返回一个annotation view - * @param annotation 关联的annotation对象 - * @param reuseIdentifier 如果要重用view,传入一个字符串,否则设为nil,建议重用view - * @return 初始化成功则返回annotation view,否则返回nil - */ -- (id)initWithAnnotation:(id )annotation reuseIdentifier:(NSString *)reuseIdentifier; - -/** - * @brief 当从reuse队列里取出时被调用, 子类重新必须调用super - */ -- (void)prepareForReuse; - -/** - * @brief 设置view的拖动状态 - * @param newDragState 新的拖动状态 - * @param animated 是否使用动画动画 - */ -- (void)setDragState:(MAAnnotationViewDragState)newDragState animated:(BOOL)animated; - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAArc.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAArc.h deleted file mode 100644 index cebfdea..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAArc.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// MAArc.h -// MAMapKit -// -// Created by liubo on 2018/4/10. -// Copyright © 2018年 Amap. All rights reserved. -// - -#import "MAConfig.h" -#if MA_INCLUDE_OVERLAY_ARC - -#import "MAShape.h" -#import "MAOverlay.h" - -///该类用于定义一个圆弧, 通常MAArc是MAArcRenderer的model -@interface MAArc : MAShape - -///起点经纬度坐标,无效坐标按照{0,0}处理 -@property (nonatomic, assign) CLLocationCoordinate2D startCoordinate; - -///途径点经纬度坐标,无效坐标按照{0,0}处理 -@property (nonatomic, assign) CLLocationCoordinate2D passedCoordinate; - -///终点经纬度坐标,无效坐标按照{0,0}处理 -@property (nonatomic, assign) CLLocationCoordinate2D endCoordinate; - -/** - * @brief 根据起点、途经点和终点生成圆弧 - * @param startCoordinate 起点的经纬度坐标,无效坐标按照{0,0}处理 - * @param passedCoordinate 途径点的经纬度坐标,无效坐标按照{0,0}处理 - * @param endCoordinate 终点的经纬度坐标,无效坐标按照{0,0}处理 - * @return 新生成的圆弧 - */ -+ (instancetype)arcWithStartCoordinate:(CLLocationCoordinate2D)startCoordinate - passedCoordinate:(CLLocationCoordinate2D)passedCoordinate - endCoordinate:(CLLocationCoordinate2D)endCoordinate; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAArcRenderer.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAArcRenderer.h deleted file mode 100644 index 2e10db4..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAArcRenderer.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// MAArcRenderer.h -// MAMapKit -// -// Created by liubo on 2018/4/10. -// Copyright © 2018年 Amap. All rights reserved. -// - -#import "MAConfig.h" -#if MA_INCLUDE_OVERLAY_ARC - -#import "MAArc.h" -#import "MAOverlayPathRenderer.h" - -///此类用于绘制MAArc,可以通过MAOverlayPathRenderer修改其stroke attributes -@interface MAArcRenderer : MAOverlayPathRenderer - -///关联的MAArc model -@property (nonatomic, readonly) MAArc *arc; - -/** - * @brief 根据指定的MAArc生成一个圆弧Renderer - * @param arc 指定MAArc - * @return 新生成的圆弧Renderer - */ -- (instancetype)initWithArc:(MAArc *)arc; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MABaseEngineOverlay.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MABaseEngineOverlay.h deleted file mode 100644 index 62ee772..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MABaseEngineOverlay.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// MABaseEngineOverlay.h -// MAMapKit -// -// Created by linshiqing on 2024/1/23. -// Copyright © 2024 Amap. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface MABaseEngineOverlay : NSObject -/// 移除Overlay -- (void)removeOverlay; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MABaseOverlay.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MABaseOverlay.h deleted file mode 100644 index 42dd4fc..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MABaseOverlay.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// MABaseOverlay.h -// MAMapKit -// -// Created by cuishaobin on 2020/6/17. -// Copyright © 2020 Amap. All rights reserved. -// - -#import -#import "MAOverlay.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MABaseOverlay : NSObject { - double _altitude; ///<海拔 -} - -///返回区域中心坐标 -@property (nonatomic, assign) CLLocationCoordinate2D coordinate; - -///区域外接矩形 -@property (nonatomic, assign) MAMapRect boundingMapRect; - -///海拔,单位米,默认0 -@property (nonatomic, assign) double altitude; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MACircle.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MACircle.h deleted file mode 100644 index c90c0d3..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MACircle.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// MACircle.h -// MAMapKit -// -// -// Copyright (c) 2011年 Amap. All rights reserved. - -#import "MAConfig.h" -#import "MAShape.h" -#import "MAOverlay.h" -#import "MAGeometry.h" - -///该类用于定义一个圆, 通常MACircle是MACircleView的model -@interface MACircle : MAShape - -///设置中空区域,用来创建中间带空洞的复杂图形。注意:传入的overlay只支持MAPolgon类型和MACircle类型,不支持与此circle边相交或在circle外部,不支持hollowShapes彼此间相交,和空洞顺序有关,不支持嵌套. since 5.5.0 -@property (nonatomic, strong) NSArray> *hollowShapes; - -///中心点经纬度坐标,无效坐标按照{0,0}处理 -@property (nonatomic, assign) CLLocationCoordinate2D coordinate; - -///半径,单位:米 负数按照0处理 -@property (nonatomic, assign) CLLocationDistance radius; - -/** - * @brief 根据中心点和半径生成圆 - * @param coord 中心点的经纬度坐标,无效坐标按照{0,0}处理 - * @param radius 半径,单位:米, 负数按照0处理 - * @return 新生成的圆 - */ -+ (instancetype)circleWithCenterCoordinate:(CLLocationCoordinate2D)coord - radius:(CLLocationDistance)radius; - -/** - * @brief 根据map rect生成圆 - * @param mapRect mapRect 圆的最小外界矩形 - * @return 新生成的圆 - */ -+ (instancetype)circleWithMapRect:(MAMapRect)mapRect; - -/** - * @brief 设置圆的中心点和半径. since 5.0.0 - * @param coord 中心点的经纬度坐标,无效坐标按照{0,0}处理 - * @param radius 半径,单位:米 负数按照0处理 - * @return 是否设置成功 - */ -- (BOOL)setCircleWithCenterCoordinate:(CLLocationCoordinate2D)coord radius:(CLLocationDistance)radius; - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MACircleRenderer.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MACircleRenderer.h deleted file mode 100644 index 389026e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MACircleRenderer.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// MACircleRenderer.h -// MAMapKit -// -// Created by yin cai on 11-12-30. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "MAConfig.h" -#import "MACircle.h" -#import "MAOverlayPathRenderer.h" - -///该类是MACircle的显示圆Renderer,可以通过MAOverlayPathRenderer修改其fill和stroke attributes -@interface MACircleRenderer : MAOverlayPathRenderer - -///关联的MAcirlce model -@property (nonatomic, readonly) MACircle *circle; - -/** - * @brief 根据指定圆生成对应的Renderer - * @param circle 指定的MACircle model - * @return 生成的Renderer - */ -- (instancetype)initWithCircle:(MACircle *)circle; - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAConfig.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAConfig.h deleted file mode 100644 index 98b7fd9..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAConfig.h +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @Author: hunk.lc - * @Date: 2022-08-18 11:18:32 - * @Description: - */ - -#pragma once - - -#pragma mark - iOS 平台特有的宏 - -#ifndef MA_INCLUDE_OFFLINE -#define MA_INCLUDE_OFFLINE 1 -#endif - -#ifndef MA_INCLUDE_TRACE_CORRECT -#define MA_INCLUDE_TRACE_CORRECT 1 -#endif - -#ifndef MA_INCLUDE_INDOOR -#define MA_INCLUDE_INDOOR 1 -#endif - -#ifndef MA_INCLUDE_CACHE -#define MA_INCLUDE_CACHE 1 -#endif - -#ifndef MA_INCLUDE_CUSTOM_MAP_STYLE -#define MA_INCLUDE_CUSTOM_MAP_STYLE 1 -#endif - -#ifndef MA_INCLUDE_WORLD_EN_MAP -#define MA_INCLUDE_WORLD_EN_MAP 1 -#endif - -#ifndef MA_INCLUDE_OVERLAY_TILE -#define MA_INCLUDE_OVERLAY_TILE 1 -#endif - -#ifndef MA_INCLUDE_OVERLAY_HEATMAP -#define MA_INCLUDE_OVERLAY_HEATMAP 1 -#endif - -#ifndef MA_INCLUDE_QUARDTREE -#define MA_INCLUDE_QUARDTREE 1 -#endif - -#ifndef MA_INCLUDE_OVERLAY_ARC -#define MA_INCLUDE_OVERLAY_ARC 1 -#endif - -#ifndef MA_INCLUDE_OVERLAY_CUSTOMBUILDING -#define MA_INCLUDE_OVERLAY_CUSTOMBUILDING 1 -#endif - -#ifndef MA_INCLUDE_OVERLAY_GROUND -#define MA_INCLUDE_OVERLAY_GROUND 1 -#endif - -#ifndef MA_INCLUDE_OVERLAY_GEODESIC -#define MA_INCLUDE_OVERLAY_GEODESIC 1 -#endif - -#ifndef MA_INCLUDE_OVERLAY_MAMultiPolyline -#define MA_INCLUDE_OVERLAY_MAMultiPolyline 1 -#endif - -#ifndef MA_INCLUDE_OVERLAY_MAMultiPoint -#define MA_INCLUDE_OVERLAY_MAMultiPoint 1 -#endif - -#ifndef MA_INCLUDE_OVERLAY_ParticleSystem -#define MA_INCLUDE_OVERLAY_ParticleSystem 1 -#endif - -#ifndef MA_INCLUDE_OVERSEA -#define MA_INCLUDE_OVERSEA 0 -#endif - -#ifndef MA_ENABLE_ThirdPartyLog -#define MA_ENABLE_ThirdPartyLog 0 -#endif - -//国际图 -#ifndef AMC_INCLUDE_Global -#define AMC_INCLUDE_Global 1 -#endif - -#pragma mark - iOS和android 双平台都用到的宏 - -#ifndef AMC_INCLUDE_GNaviSearch -#define AMC_INCLUDE_GNaviSearch 1 -#endif - -#ifndef AMC_INCLUDE_MAMapVectorOverlay -#define AMC_INCLUDE_MAMapVectorOverlay 1 -#endif - -//自定义楼块 -#ifndef AMC_INCLUDE_CustomBuilding -#define AMC_INCLUDE_CustomBuilding 1 -#endif - -//粒子系统 -#ifndef AMC_INCLUDE_ParticleSystem -#define AMC_INCLUDE_ParticleSystem 1 -#endif - -// 3d模型 -#ifndef MA_INCLUDE_3DModel -#define MA_INCLUDE_3DModel 1 -#endif - - -// gltf -#ifndef FEATURE_GLTF -#define FEATURE_GLTF 0 -#endif - -// mvt -#ifndef FEATURE_MVT -#define FEATURE_MVT 0 -#endif - -// 3dtiles -#ifndef FEATURE_3DTiles -#define FEATURE_3DTiles 0 -#endif - -// location -#ifndef FEATURE_LOCATION -#define FEATURE_LOCATION 1 -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MACustomBuildingOverlay.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MACustomBuildingOverlay.h deleted file mode 100644 index 3456235..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MACustomBuildingOverlay.h +++ /dev/null @@ -1,80 +0,0 @@ -// -// MACustomBuildingOverlay.h -// MAMapKit -// -// Created by liubo on 2018/5/23. -// Copyright © 2018年 Amap. All rights reserved. -// - -#import "MAConfig.h" -#if MA_INCLUDE_OVERLAY_CUSTOMBUILDING - -#import "MAShape.h" -#import "MAOverlay.h" -#import "MAMultiPoint.h" - -#pragma mark - MACustomBuildingOverlayOption - -///该类用于定义一个楼块显示选项. since 6.3.0 -@interface MACustomBuildingOverlayOption : MAMultiPoint - -///楼块的高度. 修改该属性会使option范围内的所有楼块为同一个高度. (范围 (-1 U [1, 1000]). 默认-1,显示为默认高度.) -@property (nonatomic, assign) CGFloat height; - -///楼块的高度缩放比例. 修改该属性会使option范围内的所有楼块高度放大或者缩小heightScale倍. (默认1. 如果指定了height则此值将被忽略.) -@property (nonatomic, assign) CGFloat heightScale; - -///楼块的顶面颜色. (默认[UIColor lightGrayColor], 不支持透明度) -@property (nonatomic, strong) UIColor *topColor; - -///楼块的侧面颜色. (默认[UIColor darkGrayColor], 不支持透明度) -@property (nonatomic, strong) UIColor *sideColor; - -///option选项是否可见. (默认YES) -@property (nonatomic, assign) BOOL visibile; - -/** - * @brief 根据经纬度坐标数据生成楼块显示选项option - * @param coords 经纬度坐标点数据,coords对应的内存会拷贝,调用者负责该内存的释放 - * @param count 经纬度坐标点数组个数 - * @return 新生成的楼块显示选项option - */ -+ (instancetype)optionWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSUInteger)count; - -/** - * @brief 重新设置option范围. - * @param coords 指定的经纬度坐标点数组, C数组,内部会做copy,调用者负责内存管理 - * @param count 坐标点的个数 - * @return 是否设置成功 - */ -- (BOOL)setOptionWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSUInteger)count; - -@end - - -#pragma mark - MACustomBuildingOverlay - -///该类用于定义一个自定义楼块MACustomBuildingOverlay, 通常MACustomBuildingOverlay是MACustomBuildingOverlayRenderer的model.(注意: 自定义楼块仅支持在zoomLevel>=15级时显示) since 6.3.0 -@interface MACustomBuildingOverlay : MAShape - -///默认的楼块显示option, 将显示所有的楼块. (如果不需要显示所有的楼块,可以设置defaultOption.visibile = NO) -@property (nonatomic, readonly) MACustomBuildingOverlayOption *defaultOption; - -///当前自定义的楼块显示options. (options按添加顺序, 后添加的在最上层显示) -@property (nonatomic, readonly) NSArray *customOptions; - -/** - * @brief 增加自定义楼块显示的option - * @param option 要增加的自定义楼块显示option - */ -- (void)addCustomOption:(MACustomBuildingOverlayOption *)option; - -/** - * @brief 移除自定义楼块显示的option - * @param option 要移除的自定义楼块显示option - */ -- (void)removeCustomOption:(MACustomBuildingOverlayOption *)option; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MACustomBuildingOverlayRenderer.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MACustomBuildingOverlayRenderer.h deleted file mode 100644 index 194ee1a..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MACustomBuildingOverlayRenderer.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// MACustomBuildingOverlayRenderer.h -// MAMapKit -// -// Created by liubo on 2018/5/23. -// Copyright © 2018年 Amap. All rights reserved. -// - -#import "MAConfig.h" -#if MA_INCLUDE_OVERLAY_CUSTOMBUILDING - -#import "MAOverlayRenderer.h" -#import "MACustomBuildingOverlay.h" - -///该类是MACustomBuildingOverlay的显示Renderer. since 6.3.0 -@interface MACustomBuildingOverlayRenderer : MAOverlayRenderer - -///关联的MACustomBuildingOverlay model -@property (nonatomic, readonly) MACustomBuildingOverlay *customBuildingOverlay; - -/** - * @brief 根据指定MACustomBuildingOverlay生成对应的Renderer - * @param customBuildingOverlay 指定的MACustomBuildingOverlay model - * @return 生成的Renderer - */ -- (instancetype)initWithCustomBuildingOverlay:(MACustomBuildingOverlay *)customBuildingOverlay; - -@end -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MACustomCalloutView.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MACustomCalloutView.h deleted file mode 100644 index 17ebd2a..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MACustomCalloutView.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// MACustomCalloutView.h -// MAMapKit -// -// Created by shaobin on 17/1/6. -// Copyright © 2017年 Amap. All rights reserved. -// - -#import -#import "MAConfig.h" - -///自定义annotationView的弹出框. 注意:不会触发-(void)mapView: didAnnotationViewCalloutTapped: since 5.0.0 -@interface MACustomCalloutView : UIView - -///init时传入的customView since 5.0.0 -@property (nonatomic, strong, readonly) UIView *customView; - -///用户自定义数据,内部不做处理 since 5.0.0 -@property (nonatomic, strong) id userData; - -/** - * @brief 初始化并返回一个MACustomCalloutView since 5.0.0 - * @param customView 自定义View,不能为nil - * @return 初始化成功则返回MACustomCalloutView,否则返回nil - */ -- (id)initWithCustomView:(UIView *)customView; - - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAGeodesicPolyline.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAGeodesicPolyline.h deleted file mode 100644 index 7ee07c3..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAGeodesicPolyline.h +++ /dev/null @@ -1,51 +0,0 @@ -// -// MAGeodesicPolyline.h -// MapKit_static -// -// Created by songjian on 13-10-23. -// Copyright © 2016 Amap. All rights reserved. - -#import "MAConfig.h" - -#if MA_INCLUDE_OVERLAY_GEODESIC - -#import "MAPolyline.h" - -///大地曲线 -@interface MAGeodesicPolyline : MAPolyline - -/** - * @brief 根据MAMapPoints生成大地曲线 - * @param points MAMapPoint点 - * @param count 点的个数 - * @return 生成的大地曲线 - */ -+ (instancetype)polylineWithPoints:(MAMapPoint *)points count:(NSUInteger)count; - -/** - * @brief 根据经纬度生成大地曲线 - * @param coords 经纬度 - * @param count 点的个数 - * @return 生成的大地曲线 - */ -+ (instancetype)polylineWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSUInteger)count; - -/** - * @brief 重新设置坐标点. since 5.0.0 - * @param points 指定的直角坐标点数组,C数组,内部会做copy,调用者负责内存管理。 - * @param count 坐标点的个数 - * @return 是否设置成功 - */ -- (BOOL)setPolylineWithPoints:(MAMapPoint *)points count:(NSInteger)count; - -/** - * @brief 重新设置坐标点. since 5.0.0 - * @param coords 指定的经纬度坐标点数组,C数组,内部会做copy,调用者负责内存管理 - * @param count 坐标点的个数 - * @return 是否设置成功 - */ -- (BOOL)setPolylineWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSInteger)count; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAGeometry.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAGeometry.h deleted file mode 100644 index dc9fa40..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAGeometry.h +++ /dev/null @@ -1,490 +0,0 @@ -// -// MAGeometry.h -// MAMapKit -// -// Created by AutoNavi. -// Copyright (c) 2013年 Amap. All rights reserved. -// - -#import "MAConfig.h" -#import -#import -#import - - -#ifdef __cplusplus -extern "C" { -#endif - - ///东北、西南两个点定义的四边形经纬度范围 - typedef struct MACoordinateBounds{ - CLLocationCoordinate2D northEast; ///< 东北角经纬度 - CLLocationCoordinate2D southWest; ///< 西南角经纬度 - } MACoordinateBounds; - - ///经度、纬度定义的经纬度跨度范围 - typedef struct MACoordinateSpan{ - CLLocationDegrees latitudeDelta; ///< 纬度跨度 - CLLocationDegrees longitudeDelta; ///< 经度跨度 - } MACoordinateSpan; - - ///中心点、跨度范围定义的四边形经纬度范围 - typedef struct MACoordinateRegion{ - CLLocationCoordinate2D center; ///< 中心点经纬度 - MACoordinateSpan span; ///< 跨度范围 - } MACoordinateRegion; - - ///平面投影坐标结构定义 - typedef struct MAMapPoint{ - double x; /// -#import "MAShape.h" -#import "MAOverlay.h" - -///该类用于确定覆盖在地图上的图片,及其覆盖区域, 通常MAGroundOverlay是MAGroundOverlayRenderer的model -@interface MAGroundOverlay : MAShape - -///绘制在地图上的覆盖图片 -@property (nonatomic, readonly) UIImage *icon; - -///透明度. 最终透明度 = 纹理透明度 * alpha. 有效范围为[0.f, 1.f], 默认为1.f -@property (nonatomic, assign) CGFloat alpha __attribute((deprecated("已废弃,since 7.7.0,请使用MAGroundOverlayRenderer中的alpha"))); - -///覆盖图片在地图尺寸等同于其像素的zoom值 -@property (nonatomic, readonly) CGFloat zoomLevel; - -///图片在地图中的覆盖范围 -@property (nonatomic, readonly) MACoordinateBounds bounds; - -/** - * @brief 根据bounds值和icon生成GroundOverlay - * @param bounds 图片的在地图的覆盖范围 - * @param icon 覆盖图片 - * @return 以bounds和icon 新生成GroundOverlay - */ -+ (instancetype)groundOverlayWithBounds:(MACoordinateBounds)bounds - icon:(UIImage *)icon; - -/** - * @brief 根据coordinate,icon,zoomLevel生成GroundOverlay - * @param coordinate 图片的在地图上的中心点 - * @param zoomLevel 图片在地图尺寸等同于像素的zoom值 - * @param icon 覆盖图片 - * @return 以coordinate,icon,zoomLevel 新生成GroundOverlay - */ -+ (instancetype)groundOverlayWithCoordinate:(CLLocationCoordinate2D)coordinate - zoomLevel:(CGFloat)zoomLevel - icon:(UIImage *)icon; - -/** - * @brief 更新GroundOverlay. since 5.0.0 - * @param bounds 图片的在地图的覆盖范围 - * @param icon 覆盖图片 - * @return 返回是否成功 - */ -- (BOOL)setGroundOverlayWithBounds:(MACoordinateBounds)bounds icon:(UIImage *)icon; - -/** - * @brief 更新GroundOverlay, 内部会自动计算覆盖物大小,以满足zoomLevel下显示大小为icon大小. since 5.0.0 - * @param coordinate 图片在地图上的中心点 - * @param zoomLevel 图片在地图尺寸等同于像素的zoom值 - * @param icon 覆盖图片 - * @return 返回是否成功 - */ -- (BOOL)setGroundOverlayWithCoordinate:(CLLocationCoordinate2D)coordinate - zoomLevel:(CGFloat)zoomLevel - icon:(UIImage *)icon; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAGroundOverlayRenderer.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAGroundOverlayRenderer.h deleted file mode 100644 index d47842f..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAGroundOverlayRenderer.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// MAGroundOverlayRenderer.h -// MapKit_static -// -// Created by Li Fei on 11/13/13. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "MAConfig.h" - -#if MA_INCLUDE_OVERLAY_GROUND - -#import "MAOverlayRenderer.h" -#import "MAGroundOverlay.h" - -///此类是将MAGroundOverlay中的覆盖图片显示在地图上的renderer -@interface MAGroundOverlayRenderer : MAOverlayRenderer - -///具有覆盖图片,以及图片覆盖的区域 -@property (nonatomic ,readonly) MAGroundOverlay *groundOverlay; - -/** - * @brief 根据指定的GroundOverlay生成将图片显示在地图上Renderer - * @param groundOverlay 制定了覆盖图片,以及图片的覆盖区域的groundOverlay - * @return 以GroundOverlay新生成Renderer - */ -- (instancetype)initWithGroundOverlay:(MAGroundOverlay *)groundOverlay; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAHeatMapTileOverlay.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAHeatMapTileOverlay.h deleted file mode 100644 index f420743..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAHeatMapTileOverlay.h +++ /dev/null @@ -1,69 +0,0 @@ -// -// MAHeatMapTileOverlay.h -// test2D -// -// Created by xiaoming han on 15/4/21. -// Copyright (c) 2015年 Amap. All rights reserved. -// - - - -#import "MAConfig.h" - -#if MA_INCLUDE_OVERLAY_HEATMAP - -#import "MATileOverlay.h" - -///热力图节点 -@interface MAHeatMapNode : NSObject - -///经纬度 -@property (nonatomic, assign) CLLocationCoordinate2D coordinate; - -///强度 -@property (nonatomic, assign) float intensity; - -@end - -///热力图渐变属性 -@interface MAHeatMapGradient : NSObject - -///颜色变化数组。 default [blue,green,red] -@property (nonatomic, readonly) NSArray *colors; - -///颜色变化起点,需为递增数组,区间为(0, 1)。default[@(0.2),@(0.5),@(0,9)] -@property (nonatomic, readonly) NSArray *startPoints; - -/** - * @brief 重新设置gradient的时候,需要执行 MATileOverlayRenderer 的 reloadData 方法重刷新渲染缓存。 - * @param colors 颜色 - * @param startPoints startPoints - * @return instance - */ -- (instancetype)initWithColor:(NSArray *)colors andWithStartPoints:(NSArray *)startPoints; - -@end - -///热力图tileOverlay -@interface MAHeatMapTileOverlay : MATileOverlay - -///MAHeatMapNode array -@property (nonatomic, strong) NSArray *data; - -///热力图半径,默认为12,范围:10-200 screen point -@property (nonatomic, assign) NSInteger radius; - -///透明度,默认为0.6,范围:0-1 -@property (nonatomic, assign) CGFloat opacity; - -///热力图梯度 -@property (nonatomic, strong) MAHeatMapGradient *gradient; - -///是否开启高清热力图,默认关闭 -@property (nonatomic, assign) BOOL allowRetinaAdapting; - -@end - -#endif - - diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAHeatMapVectorGridOverlay.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAHeatMapVectorGridOverlay.h deleted file mode 100644 index a36e246..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAHeatMapVectorGridOverlay.h +++ /dev/null @@ -1,67 +0,0 @@ -// -// MAHeatMapVectorGridOverlay.h -// MAMapKit -// -// Created by ldj on 2019/7/25. -// Copyright © 2019 Amap. All rights reserved. -// 热力图网格覆盖物(通过顶点直接绘制) - -#import "MAConfig.h" -#if MA_INCLUDE_OVERLAY_HEATMAP - -#import "MAShape.h" -#import "MAOverlay.h" -#import "MAHeatMapVectorOverlay.h" - -///单个点对象 -@interface MAHeatMapVectorGridNode : NSObject -///经纬度 -@property (nonatomic, assign) CLLocationCoordinate2D coordinate; -@end - -///单个网格 -@interface MAHeatMapVectorGrid : NSObject -/// 网格顶点 -@property (nonatomic, copy) NSArray *inputNodes; - -/// 网格颜色 -@property (nonatomic, strong) UIColor *color; -@end - -/// 该类用于定义热力图属性. -@interface MAHeatMapVectorGridOverlayOptions : NSObject - -/// 热力图类型 (默认为蜂窝类型MAHeatMapTypeHoneycomb) -@property (nonatomic, assign) MAHeatMapType type; - -/// option选项是否可见. (默认YES) -@property (nonatomic, assign) BOOL visible; - -/// 网格数据 -@property (nonatomic, copy) NSArray *inputGrids; - -/// 最小显示级别 default 3 -@property (nonatomic, assign) CGFloat minZoom; - -/// 最大显示级别 default 20 -@property (nonatomic, assign) CGFloat maxZoom; - -@end - -///矢量热力图,支持类型详见MAHeatMapType -@interface MAHeatMapVectorGridOverlay : MAShape - - -///热力图的配置属性 -@property (nonatomic, strong) MAHeatMapVectorGridOverlayOptions *option; - -/** - * @brief 根据配置属性option生成MAHeatMapVectorGridOverlay - * @param option 热力图配置属性option - * @return 新生成的热力图MAHeatMapVectorGridOverlay - */ -+ (instancetype)heatMapOverlayWithOption:(MAHeatMapVectorGridOverlayOptions *)option; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAHeatMapVectorGridOverlayRenderer.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAHeatMapVectorGridOverlayRenderer.h deleted file mode 100644 index 4206160..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAHeatMapVectorGridOverlayRenderer.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// MAHeatMapVectorGridOverlayRenderer.h -// MAMapKit -// -// Created by ldj on 2019/7/26. -// Copyright © 2019 Amap. All rights reserved. -// -#import "MAConfig.h" -#if MA_INCLUDE_OVERLAY_HEATMAP - -#import "MAOverlayRenderer.h" -#import "MAHeatMapVectorGridOverlay.h" - -///矢量热力图绘制类 -@interface MAHeatMapVectorGridOverlayRenderer : MAOverlayRenderer - -///关联的MAHeatMapVectorOverlay -@property (nonatomic, readonly) MAHeatMapVectorGridOverlay *heatOverlay; - -/** - * @brief 根据指定的MAHeatMapVectorOverlay生成一个Renderer - * @param heatOverlay 指定MAHeatMapVectorOverlay - * @return 新生成的MAHeatMapVectorOverlayRender - */ -- (instancetype)initWithHeatOverlay:(MAHeatMapVectorGridOverlay *)heatOverlay; -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAHeatMapVectorOverlay.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAHeatMapVectorOverlay.h deleted file mode 100644 index 936acb9..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAHeatMapVectorOverlay.h +++ /dev/null @@ -1,111 +0,0 @@ -// -// MAHeatMapVectorOverlay.h -// MAMapKit -// -// Created by ldj on 2019/7/25. -// Copyright © 2019 Amap. All rights reserved. -// - -#import "MAConfig.h" -#if MA_INCLUDE_OVERLAY_HEATMAP - -#import "MAShape.h" -#import "MAOverlay.h" - -///热力图类型 -typedef NS_ENUM(NSInteger, MAHeatMapType) -{ - MAHeatMapTypeSquare = 1, ///< 网格热力图 - MAHeatMapTypeHoneycomb = 2 ///< 蜂窝热力图 -}; - -///单个点对象 -@interface MAHeatMapVectorNode : NSObject - -///经纬度 -@property (nonatomic, assign) CLLocationCoordinate2D coordinate; - -///权重 -@property (nonatomic, assign) float weight; - -@end - -///热力图展示节点(用以描述一个蜂窝或一个网格) -@interface MAHeatMapVectorItem : NSObject - -///中心点坐标 -@property (nonatomic, readonly) MAMapPoint center; - -///当前热力值,求和后的权重 -@property (nonatomic, readonly) float intensity; - -///落在此节点区域内的所有热力点的索引数组 -@property (nonatomic, readonly) NSArray *nodeIndices; - -@end - -///该类用于定义热力图属性. -@interface MAHeatMapVectorOverlayOptions : NSObject - -///热力图类型 (默认为蜂窝类型MAHeatMapTypeHoneycomb) -@property (nonatomic, assign) MAHeatMapType type; - -///option选项是否可见. (默认YES) -@property (nonatomic, assign) BOOL visible; - -///MAHeatMapVectorNode array -@property (nonatomic, strong) NSArray *inputNodes; - -/** - @verbatim - 节点的宽 单位:米 负数按照0处理 default 2000 - —— —— —— —— - 丨 丨 丨 丨 - 丨 丨 丨 丨 - —— —— —— —— - - 每个方框的宽就是 size(六边形同理) - 两个方框之间的间隔就是 gap (六边形同理) - @endverbatim - */ -@property (nonatomic, assign) CLLocationDistance size; - -///节点之间的间隔 单位:米 负数按照0处理。注意:改变gap可能会改变热力节点的计算,内部会用size+gap来计算热力,最终用size来画方框。 -@property (nonatomic, assign) CGFloat gap; - -///颜色变化数组。 注意:colors和startPoints两数组长度必须一致且不能为0, -@property (nonatomic, strong) NSArray *colors; - -///颜色变化起点,需为递增数组,区间为[0, 1]。 注意:colors和startPoints两数组长度必须一致且不能为0。例如:startPoints @[@(0), @(0.3),@(0.7)] 表示区间 [0,0.3)使用第一个颜色,区间[0.3,0.7)使用第二个颜色,区间[0.7,1]使用第三个颜色。注意:startPoints首位需设置成0,如果首位不是0,内部也会把首位当成0来处理。 -@property (nonatomic, strong) NSArray *startPoints; - -///透明度,取值范围[0,1] ,default为1不透明 -@property (nonatomic, assign) CGFloat opacity __attribute((deprecated("已废弃,since 7.9.0,请使用MAHeatMapVectorOverlayRender中的alpha")));; - -///权重的最大值,default为0,表示不填,不填则取数组inputNodes中权重的最大值 -@property (nonatomic, assign) int maxIntensity; - -///最小显示级别 default 3 -@property (nonatomic, assign) CGFloat minZoom; - -///最大显示级别 default 20 -@property (nonatomic, assign) CGFloat maxZoom; - -@end - -///矢量热力图,支持类型详见MAHeatMapType -@interface MAHeatMapVectorOverlay : MAShape - -///热力图的配置属性 -@property (nonatomic, strong) MAHeatMapVectorOverlayOptions *option; - -/** - * @brief 根据配置属性option生成MAHeatMapVectorOverlay - * @param option 热力图配置属性option - * @return 新生成的热力图MAHeatMapVectorOverlay - */ -+ (instancetype)heatMapOverlayWithOption:(MAHeatMapVectorOverlayOptions *)option; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAHeatMapVectorOverlayRender.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAHeatMapVectorOverlayRender.h deleted file mode 100644 index 72a33f1..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAHeatMapVectorOverlayRender.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// MAHeatMapVectorOverlayRender.h -// MAMapKit -// -// Created by ldj on 2019/7/26. -// Copyright © 2019 Amap. All rights reserved. -// -#import "MAConfig.h" -#if MA_INCLUDE_OVERLAY_HEATMAP - -#import "MAOverlayRenderer.h" -#import "MAHeatMapVectorOverlay.h" - -///矢量热力图绘制类 -@interface MAHeatMapVectorOverlayRender : MAOverlayRenderer - -///关联的MAHeatMapVectorOverlay -@property (nonatomic, readonly) MAHeatMapVectorOverlay *heatOverlay; - -/** - * @brief 根据指定的MAHeatMapVectorOverlay生成一个Renderer - * @param heatOverlay 指定MAHeatMapVectorOverlay - * @return 新生成的MAHeatMapVectorOverlayRender - */ -- (instancetype)initWithHeatOverlay:(MAHeatMapVectorOverlay *)heatOverlay; - - -/** - * @brief 根据经纬度获取对应的热力节点信息MAHeatMapVectorItem - * @param coordinate 经纬度 - */ -- (MAHeatMapVectorItem *)getHeatMapItem:(CLLocationCoordinate2D )coordinate; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAIndoorInfo.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAIndoorInfo.h deleted file mode 100644 index d90f410..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAIndoorInfo.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// MAIndoorInfo.h -// MAMapKit -// -// Created by 翁乐 on 5/6/16. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "MAConfig.h" - -#if MA_INCLUDE_INDOOR - -#import - -///室内楼层信息 -@interface MAIndoorFloorInfo : NSObject -///楼层名 -@property (nonatomic, readonly) NSString *floorName; -///楼层index -@property (nonatomic, readonly) int floorIndex; -///楼层别名 -@property (nonatomic, readonly) NSString *floorNona; -///是否属于停车场 -@property (nonatomic, readonly) BOOL isPark; -@end - -///室内图信息 -@interface MAIndoorInfo : NSObject -///室内地图中文名 -@property (nonatomic, readonly) NSString *cnName; -///室内地图英文名 -@property (nonatomic, readonly) NSString *enName; -///室内地图poiID -@property (nonatomic, readonly) NSString *poiID; -///建筑类型 -@property (nonatomic, readonly) NSString *buildingType; -///当前楼层index,和floorInfo内部的index相关 -@property (nonatomic, readonly) int activeFloorIndex; -///当前激活的楼层,只和floorInfo相关,与floorInfo内部元素的index无关 -@property (nonatomic, readonly) int activeFloorInfoIndex; -///由 MAIndoorFloorInfo 组成,可直接通过 activeFloorInfoIndex 取出当前楼层 -@property (nonatomic, readonly) NSArray *floorInfo; -///楼层数量 -@property (nonatomic, readonly) int numberOfFloor; -///停车场楼层数量 -@property (nonatomic, readonly) int numberOfParkFloor; -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MALineDrawType.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MALineDrawType.h deleted file mode 100644 index f4a0ad8..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MALineDrawType.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// MALineDrawType.h -// MapKit_static -// -// Created by yi chen on 14-7-30. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "MAConfig.h" - -#ifndef MapKit_static_MALineDrawType_h -#define MapKit_static_MALineDrawType_h - -enum MALineJoinType -{ - kMALineJoinBevel, ///< 斜面连接点 - kMALineJoinMiter, ///< 斜接连接点 - kMALineJoinRound ///< 圆角连接点 -}; -typedef enum MALineJoinType MALineJoinType; - -enum MALineCapType -{ - kMALineCapButt, ///< 普通头 - kMALineCapSquare, ///< 扩展头 - kMALineCapArrow, ///< 箭头 - kMALineCapRound ///< 圆形头 -}; -typedef enum MALineCapType MALineCapType; - -///虚线类型 -enum MALineDashType -{ - kMALineDashTypeNone = 0, ///<不画虚线 - kMALineDashTypeSquare, ///<方块样式 - kMALineDashTypeDot, ///<圆点样式 -}; -typedef enum MALineDashType MALineDashType; - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMVTTileOverlay.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMVTTileOverlay.h deleted file mode 100644 index 2f4fb0f..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMVTTileOverlay.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// MAMVTTileOverlay.h -// MapKit_static -// -// Created by Li Fei on 11/22/13. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "MAConfig.h" -#if MA_INCLUDE_OVERLAY_TILE -#if FEATURE_MVT -#import "MATileOverlay.h" -#import "MABaseOverlay.h" - -@interface MAMVTTileOverlayOptions : NSObject -@property (nonatomic, copy) NSString *url; // URL -@property (nonatomic, copy) NSString *key; // key -@property (nonatomic, copy) NSString *Id; // id -@property (nonatomic, assign) BOOL visible; // 是否可见 默认YES -@end - -/// MVT瓦片数据 -@interface MAMVTTileOverlay : MATileOverlay -/// MVT配置选项 -@property (nonatomic, strong, readonly) MAMVTTileOverlayOptions *option; -+ (instancetype)mvtTileOverlayWithOption:(MAMVTTileOverlayOptions *)option; -@end -#endif -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMVTTileOverlayRenderer.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMVTTileOverlayRenderer.h deleted file mode 100644 index 159ee17..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMVTTileOverlayRenderer.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// MAMVTTileOverlayRenderer.h -// MapKit_static -// -// Created by Li Fei on 11/25/13. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "MAConfig.h" - -#if MA_INCLUDE_OVERLAY_TILE -#if FEATURE_MVT -#import "MATileOverlayRenderer.h" -#import "MAMVTTileOverlay.h" - -/// 此类是将MAMVTOverlayRenderer中的覆盖tiles显示在地图上的Renderer -@interface MAMVTTileOverlayRenderer : MATileOverlayRenderer -@end - -#endif -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMapAccessibilityIdentifier.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMapAccessibilityIdentifier.h deleted file mode 100644 index 43b5e09..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMapAccessibilityIdentifier.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// MAMapAccessibilityIdentifier.h -// MAMapKit -// -// Created by hanxiaoming on 17/1/9. -// Copyright © 2017年 Amap. All rights reserved. -// - -#ifndef MAMapAccessibilityIdentifier_h -#define MAMapAccessibilityIdentifier_h - -#define kMAAcceIdForMapView @"mamapview" -#define kMAAcceIdForRender @"marender" -#define kMAAcceIdForLogoView @"malogo" - -#define kMAAcceIdForAnnotationContainer @"maannotationcontainer" -#define kMAAcceIdForOverlayContainer @"maoverlaycontainer" -#define kMAAcceIdForAnnotationView @"maannotationview" -#define kMAAcceIdForCalloutView @"macalloutview" - -#define kMAAcceIdForUserLocationView @"mauserlocationview" - -#define kMAAcceIdForScaleView @"mascaleview" -#define kMAAcceIdForCompassView @"macompassview" -#define kMAAcceIdForIndoorView @"maindoorview" - -#endif /* MAMapAccessibilityIdentifier_h */ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMapCustomStyleOptions.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMapCustomStyleOptions.h deleted file mode 100644 index 08f45bd..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMapCustomStyleOptions.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// MAMapCustomStyleOptions.h -// MAMapKit -// -// Created by ldj on 2018/11/27. -// Copyright © 2018 Amap. All rights reserved. -// - -#import - -@interface MAMapCustomStyleOptions : NSObject - -///自定义样式二进制 -@property (nonatomic, strong) NSData *styleData; - -///海外自定义样式文件路径 -@property (nonatomic, strong) NSString *styleDataOverseaPath; - -///设置地图自定义样式对应的styleID,从官网获取 -@property (nonatomic, strong) NSString *styleId; - -///设置自定义纹理文件二进制 -@property (nonatomic, strong) NSData *styleTextureData; - -///样式额外的配置,比如路况,背景颜色等 since 6.7.0 -@property (nonatomic, strong) NSData *styleExtraData; - -@end - diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMapKit.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMapKit.h deleted file mode 100644 index 67a2846..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMapKit.h +++ /dev/null @@ -1,80 +0,0 @@ -// -// MAMapKit.h -// MAMapKit -// -// Created by 翁乐 on 12/2/15. -// Copyright © 2015 Amap. All rights reserved. -// - -#import "MAConfig.h" -#import "MAMapAccessibilityIdentifier.h" - -#import "MAMapVersion.h" -#import "MAMapView.h" -#import "MAMapStatus.h" -#import "MAGeometry.h" -#import "MAAnnotation.h" -#import "MAAnnotationView.h" -#import "MAAnnotationMoveAnimation.h" -#import "MAPointAnnotation.h" -#import "MAAnimatedAnnotation.h" -#import "MAPinAnnotationView.h" -#import "MAUserLocation.h" -#import "MAOverlay.h" -#import "MAOverlayPathRenderer.h" -#import "MAOverlayRenderer.h" -#import "MAShape.h" -#import "MACircle.h" -#import "MACircleRenderer.h" -#import "MAArc.h" -#import "MAArcRenderer.h" -#import "MAPolygon.h" -#import "MAPolygonRenderer.h" -#import "MAPolyline.h" -#import "MAPolylineRenderer.h" -#import "MAGeodesicPolyline.h" -#import "MAMultiPoint.h" -#import "MAMultiPolyline.h" -#import "MAMultiTexturePolylineRenderer.h" -#import "MAMultiColoredPolylineRenderer.h" -#import "MAGroundOverlay.h" -#import "MAGroundOverlayRenderer.h" -#import "MATileOverlay.h" -#import "MATileOverlayRenderer.h" -#import "MACustomBuildingOverlay.h" -#import "MACustomBuildingOverlayRenderer.h" -#import "MAParticleOverlayOptions.h" -#import "MAParticleOverlay.h" -#import "MAParticleOverlayRenderer.h" - -#import "MAHeatMapVectorOverlay.h" -#import "MAHeatMapVectorOverlayRender.h" - -#import "MAMultiPointOverlay.h" -#import "MAMultiPointOverlayRenderer.h" - -#import "MAHeatMapTileOverlay.h" -#import "MATouchPoi.h" -#import "MAIndoorInfo.h" -#import "MAOfflineMap.h" -#import "MAOfflineItem.h" -#import "MAOfflineCity.h" -#import "MAOfflineItemCommonCity.h" -#import "MAOfflineItemMunicipality.h" -#import "MAOfflineItemNationWide.h" -#import "MAOfflineProvince.h" -#import "MAOfflineMapViewController.h" - -#import "MAUserLocationRepresentation.h" -#import "MACustomCalloutView.h" -#import "MATraceLocation.h" -#import "MATraceManager.h" -#import "MALineDrawType.h" - -#import "MAHeatMapVectorGridOverlay.h" -#import "MAHeatMapVectorGridOverlayRenderer.h" -#import "MAMVTTileOverlay.h" -#import "MAMVTTileOverlayRenderer.h" -#import "MABaseEngineOverlay.h" -#import "MARouteOverlay.h" -#import "MARouteOverlayModel.h" diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMapStatus.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMapStatus.h deleted file mode 100644 index 6148564..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMapStatus.h +++ /dev/null @@ -1,63 +0,0 @@ -// -// MAMapStatus.h -// MapKit_static -// -// Created by yi chen on 1/27/15. -// Copyright © 2016 Amap. All rights reserved. -// - - - -#import "MAConfig.h" -#import -#import - -///地图状态对象 -@interface MAMapStatus : NSObject - -///地图的中心点,改变该值时,地图的比例尺级别不会发生变化 -@property (nonatomic) CLLocationCoordinate2D centerCoordinate; - -///缩放级别 -@property (nonatomic) CGFloat zoomLevel; - -///设置地图旋转角度(逆时针为正向), 单位度, [0,360) -@property (nonatomic) CGFloat rotationDegree; - -///设置地图相机角度(范围为[0.f, 45.f]) -@property (nonatomic) CGFloat cameraDegree; - -///地图的视图锚点。坐标系归一化,(0, 0)为MAMapView左上角,(1, 1)为右下角。默认为(0.5, 0.5),即当前地图的视图中心 -@property (nonatomic) CGPoint screenAnchor; - -/** - * @brief 根据指定参数生成对应的status - * @param coordinate 地图的中心点,改变该值时,地图的比例尺级别不会发生变化 - * @param zoomLevel 缩放级别 - * @param rotationDegree 设置地图旋转角度(逆时针为正向) - * @param cameraDegree 设置地图相机角度(范围为[0.f, 45.f]) - * @param screenAnchor 地图的视图锚点。坐标系归一化,(0, 0)为MAMapView左上角,(1, 1)为右下角。默认为(0.5, 0.5),即当前地图的视图中心 - * @return 生成的Status - */ -+ (instancetype)statusWithCenterCoordinate:(CLLocationCoordinate2D)coordinate - zoomLevel:(CGFloat)zoomLevel - rotationDegree:(CGFloat)rotationDegree - cameraDegree:(CGFloat)cameraDegree - screenAnchor:(CGPoint)screenAnchor; - -/** - * @brief 根据指定参数初始化对应的status - * @param coordinate 地图的中心点,改变该值时,地图的比例尺级别不会发生变化 - * @param zoomLevel 缩放级别 - * @param rotationDegree 设置地图旋转角度(逆时针为正向) - * @param cameraDegree 设置地图相机角度(范围为[0.f, 45.f]) - * @param screenAnchor 地图的视图锚点。坐标系归一化,(0, 0)为MAMapView左上角,(1, 1)为右下角。默认为(0.5, 0.5),即当前地图的视图中心 - * @return 生成的Status - */ -- (id)initWithCenterCoordinate:(CLLocationCoordinate2D)coordinate - zoomLevel:(CGFloat)zoomLevel - rotationDegree:(CGFloat)rotationDegree - cameraDegree:(CGFloat)cameraDegree - screenAnchor:(CGPoint)screenAnchor; - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMapVersion.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMapVersion.h deleted file mode 100644 index 6d5d87a..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMapVersion.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// MAMapVersion.h -// MAMapKit -// -// Created by yi chen on 2/24/16. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "MAConfig.h" -#import - -#ifndef MAMapVersion_h -#define MAMapVersion_h - -#define MAMapVersionNumber 10000800 -#define MAMapMinRequiredFoundationVersion 10802 - -// 依赖库版本检测 -#if AMapFoundationVersionNumber < MAMapMinRequiredFoundationVersion -#error "The AMapFoundationKit version is less than minimum required, please update! Any questions please to visit http://lbs.amap.com" -#endif - -FOUNDATION_EXTERN NSString * const MAMapKitVersion; -FOUNDATION_EXTERN NSString * const MAMapKitName; - - -#endif /* MAMapVersion_h */ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMapView.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMapView.h deleted file mode 100644 index 7e9927f..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMapView.h +++ /dev/null @@ -1,1121 +0,0 @@ -// -// MAMapView.h -// MAMapKit -// -// Created by 翁乐 on 3/17/16. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "MAConfig.h" -#import -#import -#import "MAOverlay.h" -#import "MAOverlayRenderer.h" -#import "MAAnnotationView.h" -#import "MACircle.h" -#import "MAUserLocation.h" -#import "MAMapStatus.h" -#import "MAIndoorInfo.h" -#import "MAUserLocationRepresentation.h" -#import "MAMapCustomStyleOptions.h" -#import -#import "MABaseEngineOverlay.h" -#import "MAPoiFilter.h" - -///地图类型 -typedef NS_ENUM(NSInteger, MAMapType) -{ - MAMapTypeStandard = 0, ///< 普通地图 - MAMapTypeSatellite, ///< 卫星地图 - MAMapTypeStandardNight, ///< 夜间视图 - MAMapTypeNavi, ///< 导航视图 - MAMapTypeBus, ///< 公交视图 - MAMapTypeNaviNight ///< 导航夜间视图 -}; - -///用户跟踪模式 -typedef NS_ENUM(NSInteger, MAUserTrackingMode) -{ - MAUserTrackingModeNone = 0, ///< 不追踪用户的location更新 - MAUserTrackingModeFollow = 1, ///< 追踪用户的location更新 - MAUserTrackingModeFollowWithHeading = 2 ///< 追踪用户的location与heading更新 -}; - -///交通拥堵状态 -typedef NS_ENUM(NSInteger, MATrafficStatus) -{ - MATrafficStatusSmooth = 1, ///< 1 通畅 - MATrafficStatusSlow, ///< 2 缓行 - MATrafficStatusJam, ///< 3 阻塞 - MATrafficStatusSeriousJam, ///< 4 严重阻塞 - MATrafficStatusExtremelySmooth, ///< 5 极度通畅 -}; - -///绘制overlay的层级 -typedef NS_ENUM(NSInteger, MAOverlayLevel) { - MAOverlayLevelAboveRoads = 0, ///< 在地图底图标注和兴趣点图标之下绘制overlay - MAOverlayLevelAboveLabels ///< 在地图底图标注和兴趣点图标之上绘制overlay -}; - -#pragma mark - 动画相关的key -///中心点(MAMapPoint)key, 封装成[NSValue valueWithMAMapPoint:] -extern NSString * const kMAMapLayerCenterMapPointKey; - -///缩放级别key, 范围[minZoomLevel, maxZoomLevel], 封装成NSNumber -extern NSString * const kMAMapLayerZoomLevelKey; - -///旋转角度key, 范围[0, 360), 封装成NSNumber -extern NSString * const kMAMapLayerRotationDegreeKey; - -///摄像机俯视角度, 范围[0, 45], 封装成NSNumber -extern NSString * const kMAMapLayerCameraDegreeKey; - - -@protocol MAMapViewDelegate; - -@interface MAMapView : UIView - -///标记是否开启metal,默认NO. 注意:因机型或系统限制(要求机型最低5S,系统最低iOS10),开启metal可能失败。 -@property (nonatomic, assign, class) BOOL metalEnabled; - -///是否打开地形图,默认NO. 注意:需在地图创建前设置 (since 8.2.0) -@property (nonatomic, assign, class) BOOL terrainEnabled; - -///是否有地形图授权,默认YES. 如果没有授权会回调MAMapViewDelegate的 - (void)mapView:(MAMapView *)mapView didFailLoadTerrainWithError:(NSError *)error 方法 (since 9.3.1) -@property (nonatomic, assign, readonly) BOOL terrainAuth; - -///地图view的delegate -@property (nonatomic, weak) id delegate; - -///地图类型。注意:自定义样式优先级高于mapType,如开启了自定义样式,要关闭自定义样式后mapType才生效 -@property (nonatomic) MAMapType mapType; - -///当前地图的中心点,改变该值时,地图的比例尺级别不会发生变化 -@property (nonatomic) CLLocationCoordinate2D centerCoordinate; - -///当前地图的经纬度范围,设定的该范围可能会被调整为适合地图窗口显示的范围 -@property (nonatomic) MACoordinateRegion region; - -///可见区域, 设定的该范围可能会被调整为适合地图窗口显示的范围 -@property (nonatomic) MAMapRect visibleMapRect; - -///设置可见地图区域的矩形边界,如限制地图只显示北京市范围 -@property (nonatomic, assign) MACoordinateRegion limitRegion; - -///设置可见地图区域的矩形边界,如限制地图只显示北京市范围 -@property (nonatomic, assign) MAMapRect limitMapRect; - -///缩放级别(默认3-19,有室内地图时为3-20) -@property (nonatomic) CGFloat zoomLevel; - -///最小缩放级别 -@property (nonatomic) CGFloat minZoomLevel; - -///最大缩放级别(有室内地图时最大为20,否则为19) -@property (nonatomic) CGFloat maxZoomLevel; - -///设置地图旋转角度(逆时针为正向) -@property (nonatomic) CGFloat rotationDegree; - -///设置地图相机角度(范围为[0.f, 60.f],但高于40度的角度需要在16级以上才能生效) -@property (nonatomic) CGFloat cameraDegree; - -///是否以screenAnchor点作为锚点进行缩放,默认为YES。如果为NO,则以手势中心点作为锚点 -@property (nonatomic, assign) BOOL zoomingInPivotsAroundAnchorPoint; - -///是否支持缩放, 默认YES -@property (nonatomic, getter = isZoomEnabled) BOOL zoomEnabled; - -///是否支持平移, 默认YES -@property (nonatomic, getter = isScrollEnabled) BOOL scrollEnabled; - -///是否支持旋转, 默认YES -@property (nonatomic, getter = isRotateEnabled) BOOL rotateEnabled; - -///是否支持camera旋转, 默认YES -@property (nonatomic, getter = isRotateCameraEnabled) BOOL rotateCameraEnabled; - -///是否显示楼块,默认为YES -@property (nonatomic, getter = isShowsBuildings) BOOL showsBuildings; - -///是否显示底图标注, 默认为YES -@property (nonatomic, assign, getter = isShowsLabels) BOOL showsLabels; - -///是否显示交通路况图层, 默认为NO -@property (nonatomic, getter = isShowTraffic) BOOL showTraffic; - -///设置实时交通颜色,key为 MATrafficStatus -@property (nonatomic, copy) NSDictionary *trafficStatus __attribute((deprecated("已废弃 since 7.8.0"))); - -///是否支持单击地图获取POI信息(默认为YES), 对应的回调是 -(void)mapView:(MAMapView *) didTouchPois:(NSArray *) -@property (nonatomic, assign) BOOL touchPOIEnabled; - -///是否显示指南针, 默认YES -@property (nonatomic, assign) BOOL showsCompass; - -///指南针原点位置 -@property (nonatomic, assign) CGPoint compassOrigin; - -///指南针的宽高 -@property (nonatomic, readonly) CGSize compassSize; - -///是否显示比例尺, 默认YES -@property (nonatomic, assign) BOOL showsScale; - -///比例尺原点位置 -@property (nonatomic, assign) CGPoint scaleOrigin; - -///比例尺的最大宽高 -@property (nonatomic, readonly) CGSize scaleSize; - -///logo位置, 必须在mapView.bounds之内,否则会被忽略 -@property (nonatomic, assign) CGPoint logoCenter; - -///logo的宽高 -@property (nonatomic, readonly) CGSize logoSize; - -///在当前缩放级别下, 基于地图中心点, 1 screen point 对应的距离(单位是米) -@property (nonatomic, readonly) double metersPerPointForCurrentZoom; - -///标识当前地图中心位置是否在中国范围外。此属性不是精确判断,不能用于边界区域 -@property (nonatomic, readonly) BOOL isAbroad; - -///最大帧数,有效的帧数为:60、30、20、10等能被60整除的数。默认为60 -@property (nonatomic, assign) NSUInteger maxRenderFrame; - -///是否允许降帧,默认为YES -@property (nonatomic, assign) BOOL isAllowDecreaseFrame; - -///停止/开启 OpenGLES绘制, 默认NO. 对应回调是 - (void)mapView:(MAMapView *) didChangeOpenGLESDisabled:(BOOL) -@property (nonatomic, assign) BOOL openGLESDisabled __attribute((deprecated("已废弃,since 7.9.0,请使用renderringDisabled属性"))); - -///停止/开启 地图绘制, 默认NO. -@property (nonatomic, assign) BOOL renderringDisabled; - -///地图的视图锚点。坐标系归一化,(0, 0)为MAMapView左上角,(1, 1)为右下角。默认为(0.5, 0.5),即当前地图的视图中心 (since 5.0.0) -@property (nonatomic, assign) CGPoint screenAnchor; - -///地图渲染的runloop mode,默认为NSRunLoopCommonModes。如果是和UIScrollView一起使用且不希望地图在scrollView拖动时渲染,请设置此值为NSDefaultRunLoopMode。(since 5.1.0) -@property (nonatomic, copy) NSRunLoopMode runLoopMode; - -///设置语言。中文:@0: 英文:@1. 英文使用注意事项:1、不能和自定义地图样式同时使用;2、英文状态只在MAMapTypeStandard生效 -@property (nonatomic, strong) NSNumber *mapLanguage; - -/** - * @brief 设定当前地图的经纬度范围,该范围可能会被调整为适合地图窗口显示的范围 - * @param region 要设定的经纬度范围 - * @param animated 是否动画设置 - */ -- (void)setRegion:(MACoordinateRegion)region animated:(BOOL)animated; - -/** - * @brief 根据当前地图视图frame的大小调整region范围 - * @param region 要调整的经纬度范围 - * @return 调整后的经纬度范围 - */ -- (MACoordinateRegion)regionThatFits:(MACoordinateRegion)region; - -/** - * @brief 设置可见区域 - * @param mapRect 要设定的可见区域 - * @param animated 是否动画设置 - */ -- (void)setVisibleMapRect:(MAMapRect)mapRect animated:(BOOL)animated; - -/** - * @brief 重新计算可见地图矩形区域,使之匹配mapview长宽比 - * @param mapRect 要调整的地图矩形区域 - * @return 调整后的地图矩形区域 - */ -- (MAMapRect)mapRectThatFits:(MAMapRect)mapRect; - -/** - * @brief 根据边缘插入来调整地图矩形区域,使之匹配mapview加insets后的长宽比 - * @param mapRect 要调整的地图矩形区域 - * @param insets 边缘插入 - * @return 调整后的地图矩形区域 - */ -- (MAMapRect)mapRectThatFits:(MAMapRect)mapRect edgePadding:(UIEdgeInsets)insets; - -/** - * @brief 设置可见地图矩形区域 - * @param insets 边缘插入 - * @param mapRect 要显示的地图矩形区域 - * @param animated 是否动画效果 - */ -- (void)setVisibleMapRect:(MAMapRect)mapRect edgePadding:(UIEdgeInsets)insets animated:(BOOL)animated; - -/** - * @brief 设置可见地图矩形区域 - * @param insets 边缘插入 - * @param mapRect 要显示的地图矩形区域 - * @param animated 是否动画效果 - * @param duration 动画时长,单位秒 - */ -- (void)setVisibleMapRect:(MAMapRect)mapRect edgePadding:(UIEdgeInsets)insets animated:(BOOL)animated duration:(CFTimeInterval)duration; - -/** - * @brief 设置当前地图的中心点,改变该值时,地图的比例尺级别不会发生变化 - * @param coordinate 要设置的中心点 - * @param animated 是否动画设置 - */ -- (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated; - -/** - * @brief 设置缩放级别(默认3-19,有室内地图时为3-20) - * @param zoomLevel 要设置的缩放级别 - * @param animated 是否动画设置 - */ -- (void)setZoomLevel:(CGFloat)zoomLevel animated:(BOOL)animated; - -/** - * @brief 根据指定的枢纽点来缩放地图 - * @param zoomLevel 缩放级别 - * @param pivot 枢纽点(基于地图view的坐标系) - * @param animated 是否动画 - */ -- (void)setZoomLevel:(CGFloat)zoomLevel atPivot:(CGPoint)pivot animated:(BOOL)animated; - -/** - * @brief 设置地图旋转角度(逆时针为正向) - * @param rotationDegree 旋转角度, 如当前角度是0,720表示逆时针旋转2周,-720表示正时针旋转2周 - * @param animated 动画 - * @param duration 动画时间 - */ -- (void)setRotationDegree:(CGFloat)rotationDegree animated:(BOOL)animated duration:(CFTimeInterval)duration; - -/** - * @brief 设置地图相机角度(范围为[0.f, 60.f],但高于40度的角度需要在16级以上才能生效) - * @param cameraDegree 要设置的相机角度 - * @param animated 是否动画 - * @param duration 动画时间 - */ -- (void)setCameraDegree:(CGFloat)cameraDegree animated:(BOOL)animated duration:(CFTimeInterval)duration; - -/** - * @brief 获取地图状态 - * @return 地图状态 - */ -- (MAMapStatus *)getMapStatus; - - -/** - * @brief 设置地图状态 - * @param status 要设置的地图状态 - * @param animated 是否动画 - */ -- (void)setMapStatus:(MAMapStatus *)status animated:(BOOL)animated; - -/** - * @brief 设置地图状态 - * @param status 要设置的地图状态 - * @param animated 是否动画 - * @param duration 动画时间,默认动画时间为0.35s - */ -- (void)setMapStatus:(MAMapStatus *)status - animated:(BOOL)animated - duration:(CFTimeInterval)duration; - -/** - * @brief 设置指南针的图片 - * @param image 新的指南针图片 - */ -- (void)setCompassImage:(UIImage *)image; - -/** - * @brief 在指定区域内截图(默认会包含该区域内的annotationView),注意不要在地图回调方法内直接调用 - * @param rect 指定的区域 - * @return 截图image - */ -- (UIImage *)takeSnapshotInRect:(CGRect)rect __attribute((deprecated("已废弃,请使用takeSnapshotInRect:withCompletionBlock:方法 since 6.0.0"))); - -/** - * @brief 异步在指定区域内截图(默认会包含该区域内的annotationView), 地图载入完整时回调 - * @param rect 指定的区域 - * @param block 回调block(resultImage:返回的图片,state:0载入不完整,1完整) - */ -- (void)takeSnapshotInRect:(CGRect)rect withCompletionBlock:(void (^)(UIImage *resultImage, NSInteger state))block; - -/** - * @brief 异步在指定区域内截图(默认会包含该区域内的annotationView), 地图载入完整时回调 (since 7.8.0) - * @param rect 指定的区域 - * @param timeout 超时时间 - * @param block 回调block(resultImage:返回的图片,state:0载入不完整,1完整) - */ -- (void)takeSnapshotInRect:(CGRect)rect timeoutInterval:(NSTimeInterval)timeout completionBlock:(void (^)(UIImage *resultImage, NSInteger state))block; - -/** - * @brief 在指定的缩放级别下, 基于地图中心点, 1 screen point 对应的距离(单位是米). - * @param zoomLevel 指定的缩放级别, 在[minZoomLevel, maxZoomLevel]范围内. - * @return 对应的距离(单位是米) - */ -- (double)metersPerPointForZoomLevel:(CGFloat)zoomLevel; - -/** - * @brief 将经纬度转换为指定view坐标系的坐标 - * @param coordinate 经纬度 - * @param view 指定的view - * @return 基于指定view坐标系的坐标 - */ -- (CGPoint)convertCoordinate:(CLLocationCoordinate2D)coordinate toPointToView:(UIView *)view; - -/** - * @brief 将指定view坐标系的坐标转换为经纬度 - * @param point 指定view坐标系的坐标 - * @param view 指定的view - * @return 经纬度 - */ -- (CLLocationCoordinate2D)convertPoint:(CGPoint)point toCoordinateFromView:(UIView *)view; - -/** - * @brief 将经纬度region转换为指定view坐标系的rect - * @param region 经纬度region - * @param view 指定的view - * @return 指定view坐标系的rect - */ -- (CGRect)convertRegion:(MACoordinateRegion)region toRectToView:(UIView *)view; - -/** - * @brief 将指定view坐标系的rect转换为经纬度region - * @param rect 指定view坐标系的rect - * @param view 指定的view - * @return 经纬度region - */ -- (MACoordinateRegion)convertRect:(CGRect)rect toRegionFromView:(UIView *)view; - -/** - * @brief 重新加载地图 - * - * 将离线地图解压到 Documents/3dvmap/ 目录下后,调用此函数使离线数据生效, - * 对应的回调分别是 offlineDataWillReload:(MAMapView *)mapView, offlineDataDidReload:(MAMapView *)mapView. - */ -- (void)reloadMap; - -/** - * @brief 清除所有磁盘上缓存的地图数据(不包括离线地图) - */ -- (void)clearDisk; - -/** - * @brief 重新加载内部纹理,在纹理被错误释放时可以执行此方法。(since 5.4.0) - */ -- (void)reloadInternalTexture; - -/** - * @brief 获取地图审图号。如果启用了“自定义样式”功能(customMapStyleEnabled 为 YES),则返回nil。(since 5.4.0) - * @return 地图审图号 - */ -- (NSString *)mapContentApprovalNumber; - -/** - * @brief 获取卫星图片审图号。(since 5.4.0) - * @return 卫星图片审图号 - */ -- (NSString *)satelliteImageApprovalNumber; - -/** - * @brief 获取地形图审图号。(since 8.2.0) - * @return 地形图审图号 - */ -- (NSString *)terrainApprovalNumber; - -/** - * @brief 添加CAKeyframeAnimation动画。(since 6.0.0) - * @param mapCenterAnimation 地图中心点动画 - * @param zoomAnimation 放大缩小动画 - * @param rotateAnimation 旋转动画 - * @param cameraDegreeAnimation 仰角动画 - */ -- (void)addAnimationWith:(CAKeyframeAnimation *)mapCenterAnimation - zoomAnimation:(CAKeyframeAnimation *)zoomAnimation - rotateAnimation:(CAKeyframeAnimation *)rotateAnimation - cameraDegreeAnimation:(CAKeyframeAnimation *)cameraDegreeAnimation; - -/** - * @brief 强制刷新。(since 6.0.0) - */ -- (void)forceRefresh; - -/** - * @brief 设置在建道路图层是否显示。默认NO(since 7.7.0) - * @param enabled 是否显示 - */ -- (void)setConstructingRoadEnable:(BOOL)enabled; - -#pragma mark - Privacy 隐私合规 -/** - * @brief 更新App是否显示隐私弹窗的状态,隐私弹窗是否包含高德SDK隐私协议内容的状态. 注意:必须在MAMapView实例化之前调用 since 8.1.0 - * @param showStatus 隐私弹窗状态 - * @param containStatus 包含高德SDK隐私协议状态 - */ -+ (void)updatePrivacyShow:(AMapPrivacyShowStatus)showStatus privacyInfo:(AMapPrivacyInfoStatus)containStatus; -/** -* @brief 更新用户授权高德SDK隐私协议状态. 注意:必须在MAMapView实例化之前调用 since 8.1.0 -* @param agreeStatus 用户授权高德SDK隐私协议状态 -*/ -+ (void)updatePrivacyAgree:(AMapPrivacyAgreeStatus)agreeStatus; - -@end - -@interface MAMapView (Annotation) - -///所有添加的标注, 注意从5.3.0开始返回数组内不再包含定位蓝点userLocation -@property (nonatomic, readonly) NSArray *annotations; - -///处于选中状态的标注数据数据(其count == 0 或 1) -@property (nonatomic, copy) NSArray *selectedAnnotations; - -///annotation 可见区域 -@property (nonatomic, readonly) CGRect annotationVisibleRect; - -/** - * @brief 向地图窗口添加标注,需要实现MAMapViewDelegate的-mapView:viewForAnnotation:函数来生成标注对应的View - * @param annotation 要添加的标注 - */ -- (void)addAnnotation:(id )annotation; - -/** - * @brief 向地图窗口添加一组标注,需要实现MAMapViewDelegate的-mapView:viewForAnnotation:函数来生成标注对应的View - * @param annotations 要添加的标注数组 - */ -- (void)addAnnotations:(NSArray *)annotations; - -/** - * @brief 移除标注 - * @param annotation 要移除的标注 - */ -- (void)removeAnnotation:(id )annotation; - -/** - * @brief 移除一组标注 - * @param annotations 要移除的标注数组 - */ -- (void)removeAnnotations:(NSArray *)annotations; - -/** - * @brief 获取指定投影矩形范围内的标注 - * @param mapRect 投影矩形范围 - * @return 标注集合 - */ -- (NSSet *)annotationsInMapRect:(MAMapRect)mapRect; - -/** - * @brief 根据标注数据获取标注view - * @param annotation 标注数据 - * @return 对应的标注view - */ -- (MAAnnotationView *)viewForAnnotation:(id )annotation; - -/** - * @brief 从复用内存池中获取制定复用标识的annotation view - * @param identifier 复用标识 - * @return annotation view - */ -- (MAAnnotationView *)dequeueReusableAnnotationViewWithIdentifier:(NSString *)identifier; - -/** - * @brief 选中标注数据对应的view。注意:如果annotation对应的annotationView因不在屏幕范围内而被移入复用池,为了完成选中操作,会将对应的annotationView添加到地图上,并将地图中心点移至annotation.coordinate的位置。 - * @param annotation 标注数据 - * @param animated 是否有动画效果 - */ -- (void)selectAnnotation:(id )annotation animated:(BOOL)animated; - -/** - * @brief 取消选中标注数据对应的view - * @param annotation 标注数据 - * @param animated 是否有动画效果 - */ -- (void)deselectAnnotation:(id )annotation animated:(BOOL)animated; - -/** - * @brief 设置地图使其可以显示数组中所有的annotation, 如果数组中只有一个则直接设置地图中心为annotation的位置。 - * @param annotations 需要显示的annotation - * @param animated 是否执行动画 - */ -- (void)showAnnotations:(NSArray *)annotations animated:(BOOL)animated; - -/** - * @brief 设置地图使其可以显示数组中所有的annotation, 如果数组中只有一个则直接设置地图中心为annotation的位置。 - * @param annotations 需要显示的annotation - * @param insets insets 嵌入边界 - * @param animated 是否执行动画 - */ -- (void)showAnnotations:(NSArray *)annotations edgePadding:(UIEdgeInsets)insets animated:(BOOL)animated; - -@end - - -@interface MAMapView (UserLocation) - -///是否显示用户位置 -@property (nonatomic) BOOL showsUserLocation; - -///当前的位置数据 -@property (nonatomic, readonly) MAUserLocation *userLocation; - -///是否自定义用户位置精度圈(userLocationAccuracyCircle)对应的 view, 默认为 NO.\n 如果为YES: 会调用 - (MAOverlayRenderer *)mapView (MAMapView *)mapView rendererForOverlay:(id )overlay 若返回nil, 则不加载.\n 如果为NO : 会使用默认的样式. -@property (nonatomic) BOOL customizeUserLocationAccuracyCircleRepresentation; - -///用户位置精度圈 对应的overlay -@property (nonatomic, readonly) MACircle *userLocationAccuracyCircle; - -///定位用户位置的模式, 注意:在follow模式下,设置地图中心点、设置可见区域、滑动手势、选择annotation操作会取消follow模式,并触发 - (void)mapView:(MAMapView *)mapView didChangeUserTrackingMode:(MAUserTrackingMode)mode animated:(BOOL)animated; -@property (nonatomic) MAUserTrackingMode userTrackingMode; - -///当前位置再地图中是否可见 -@property (nonatomic, readonly, getter=isUserLocationVisible) BOOL userLocationVisible; - -///设定定位的最小更新距离。默认为kCLDistanceFilterNone,会提示任何移动 -@property (nonatomic) CLLocationDistance distanceFilter; - -///设定定位精度。默认为kCLLocationAccuracyBest -@property (nonatomic) CLLocationAccuracy desiredAccuracy; - -///设定最小更新角度。默认为1度,设定为kCLHeadingFilterNone会提示任何角度改变 -@property (nonatomic) CLLocationDegrees headingFilter; - -///指定定位是否会被系统自动暂停 -@property (nonatomic) BOOL pausesLocationUpdatesAutomatically; - -///是否允许后台定位。默认为NO。只在iOS 9.0之后起作用。\n 设置为YES的时候必须保证 Background Modes 中的 Location updates处于选中状态,否则会抛出异常。\n 注意:定位必须在停止的状态下设置(showsUserLocation = NO),否则无效 -@property (nonatomic) BOOL allowsBackgroundLocationUpdates; - -/** - * @brief 设置定位用户位置的模式 - * @param mode 要设置的模式 - * @param animated 是否动画设置 - */ -- (void)setUserTrackingMode:(MAUserTrackingMode)mode animated:(BOOL)animated; - -/** - * @brief 设定UserLocationView样式。如果用户自定义了userlocation的annotationView,或者该annotationView还未添加到地图上,此方法将不起作用 - * @param representation 样式信息对象 - */ -- (void)updateUserLocationRepresentation:(MAUserLocationRepresentation *)representation; - -@end - -@interface MAMapView (Overlay) - -///所有添加的Overlay -@property (nonatomic, readonly) NSArray *overlays; - -/** - * @brief 取位于level下的overlays - * @param level 层级 - */ -- (NSArray *)overlaysInLevel:(MAOverlayLevel)level; - -/** - * @brief 向地图窗口添加Overlay。 - * 需要实现MAMapViewDelegate的-mapView:rendererForOverlay:函数来生成标注对应的Renderer。 - * 默认添加层级:MAGroundOverlay默认层级为MAOverlayLevelAboveRoads,其余overlay类型默认层级为MAOverlayLevelAboveLabels - * @param overlay 要添加的overlay - */ -- (void)addOverlay:(id )overlay; - -/** - * @brief 向地图窗口添加一组Overlay,需要实现MAMapViewDelegate的-mapView:rendererForOverlay:函数来生成标注对应的Renderer - * 默认添加层级:MAOverlayLevelAboveLabels - * @param overlays 要添加的overlay数组 - */ -- (void)addOverlays:(NSArray *)overlays; - -/** - * @brief 向地图窗口添加Overlay,需要实现MAMapViewDelegate的-mapView:rendererForOverlay:函数来生成标注对应的Renderer - * @param overlay 要添加的overlay - * @param level 添加的overlay所在层级 - */ -- (void)addOverlay:(id )overlay level:(MAOverlayLevel)level; - -/** - * @brief 向地图窗口添加一组Overlay,需要实现MAMapViewDelegate的-mapView:rendererForOverlay:函数来生成标注对应的Renderer - * @param overlays 要添加的overlay数组 - * @param level 添加的overlay所在层级 - */ -- (void)addOverlays:(NSArray *)overlays level:(MAOverlayLevel)level; - -/** - * @brief 移除Overlay - * @param overlay 要移除的overlay - */ -- (void)removeOverlay:(id )overlay; - -/** - * @brief 移除一组Overlay - * @param overlays 要移除的overlay数组 - */ -- (void)removeOverlays:(NSArray *)overlays; - -/** - * @brief 在指定层级的指定的索引处添加一个Overlay - * @param overlay 要添加的overlay - * @param index 指定的索引 - * @param level 指定的层级 - - * 注:各个层级的索引分开计数; - * 若index大于level层级的最大索引,则添加至level层级的最大索引之后。 - */ -- (void)insertOverlay:(id )overlay atIndex:(NSUInteger)index level:(MAOverlayLevel)level; - -/** - * @brief 在指定的Overlay之上插入一个overlay - * @param overlay 带添加的Overlay - * @param sibling 用于指定相对位置的Overlay - */ -- (void)insertOverlay:(id )overlay aboveOverlay:(id )sibling; - -/** - * @brief 在指定的Overlay之下插入一个overlay - * @param overlay 带添加的Overlay - * @param sibling 用于指定相对位置的Overlay - */ -- (void)insertOverlay:(id )overlay belowOverlay:(id )sibling; - -/** - * @brief 在指定的索引处添加一个Overlay - * @param overlay 要添加的overlay - * @param index 指定的索引 - */ -- (void)insertOverlay:(id )overlay atIndex:(NSUInteger)index; - -/** - * @brief 在MAOverlayLevelAboveLabels上交换指定索引处的Overlay - * @param index1 索引1 - * @param index2 索引2 - */ -- (void)exchangeOverlayAtIndex:(NSUInteger)index1 withOverlayAtIndex:(NSUInteger)index2; - -/** - * @brief 交换指定索引处的Overlay - * @param index1 索引1 - * @param index2 索引2 - * @param level 所处层级 - */ -- (void)exchangeOverlayAtIndex:(NSUInteger)index1 withOverlayAtIndex:(NSUInteger)index2 atLevel:(MAOverlayLevel)level; - -/** - * @brief 交换两个overlay - * @param overlay1 overlay1 - * @param overlay2 overlay2 - */ -- (void)exchangeOverlay:(id )overlay1 withOverlay:(id )overlay2; - -/** - * @brief 查找指定overlay对应的Renderer,如果该View尚未创建,返回nil - * @param overlay 指定的overlay - * @return 指定overlay对应的Renderer - */ -- (MAOverlayRenderer *)rendererForOverlay:(id )overlay; - -/** - * @brief 设置地图使其可以显示数组中所有的overlay, 如果数组中只有一个则直接设置地图中心为overlay的位置。 - * @param overlays 需要显示的overlays - * @param animated 是否执行动画 - */ -- (void)showOverlays:(NSArray *)overlays animated:(BOOL)animated; - -/** - * @brief 设置地图使其可以显示数组中所有的overlay, 如果数组中只有一个则直接设置地图中心为overlay的位置。 - * @param overlays 需要显示的overlays - * @param insets insets 嵌入边界 - * @param animated 是否执行动画 - */ -- (void)showOverlays:(NSArray *)overlays edgePadding:(UIEdgeInsets)insets animated:(BOOL)animated; - -/** - * @brief 获取点击选中的polylineRenderer, 注意:开启polylineRenderer的点击选中功能,需设置userInteractionEnabled=YES。since 7.1.0 - * @param tappedCoord 点击点的坐标 - * @param traverseAll 如果有polyline重合情况,是否返回多个。NO: 只返回最上面的 YES:返回所有 - * @return 返回选中的polylineRenderer数组,最上面的在第一个 - * */ -- (NSArray*)getHittedPolylinesWith:(CLLocationCoordinate2D)tappedCoord traverseAll:(BOOL)traverseAll; - -@end - -#if MA_INCLUDE_INDOOR -@interface MAMapView (Indoor) - -///是否显示室内地图, 默认NO -@property (nonatomic, getter = isShowsIndoorMap) BOOL showsIndoorMap; - -///是否显示室内地图默认控件, 默认YES -@property (nonatomic, getter = isShowsIndoorMapControl) BOOL showsIndoorMapControl; - -///默认室内地图控件的最大宽高 -@property (nonatomic, readonly) CGSize indoorMapControlSize; - -/** - * @brief 设置默认室内地图控件位置 - * @param origin 左上角点位置 - */ -- (void)setIndoorMapControlOrigin:(CGPoint)origin; - -/** - * @brief 设置当前室内地图楼层数 - * @param floorIndex 要设置的楼层数 - */ -- (void)setCurrentIndoorMapFloorIndex:(NSInteger)floorIndex; - -/** - * @brief 清空室内地图缓存 - */ -- (void)clearIndoorMapCache; - -@end -#endif - -///自定义样式 -@interface MAMapView (CustomMapStyle) - -///是否开启自定义样式, 默认NO. since 5.0.0 -@property (nonatomic, assign) BOOL customMapStyleEnabled; - -/** - * @brief 自定义地图样式设置,可以支持分级样式配置,如控制不同级别显示不同的颜色(自7.0.0开始样式有更新,旧的样式文件不能继续使用,必须到官网重新导出新样式文件。 自6.6.0开始使用新版样式,旧版样式无法在新版接口setCustomMapStyleOptions:(MAMapCustomStyleOptions *)styleOptions中使用,请到官网(lbs.amap.com)更新新版样式文件.) - * @param styleOptions 自定义样式options. since 6.6.0 - */ -- (void)setCustomMapStyleOptions:(MAMapCustomStyleOptions *)styleOptions; - -@end - -/// 建筑物操作 @since 9.6.0 -@interface MAMapView (Buildings) - -/** - * @brief 隐藏建筑物 - * @param polygon 围栏的经纬度信息 - * @param polygonSize 围栏的size(需 >= 3 否则无法构成围栏) - * @return 隐藏成功返回当前的operationId(>= 0) 失败返回-1 - */ -- (NSInteger)hideBuildingsWithPolygon:(CLLocationCoordinate2D *)polygon polygonSize:(NSUInteger)polygonSize; - -/** - * @brief 显示建筑物 - * @param operationId 操作Id(隐藏建筑物接口的返回值) - */ -- (void)showHiddenBuildingsWithOperationId:(NSInteger)operationId; -@end - -@interface MAMapView (EngineOverlay) - -/** - * @brief 向地图窗口添加Overlay。 - * @param overlay 要添加的engine overlay - */ -- (void)addEngineOverlay:(MABaseEngineOverlay *)overlay; -@end - -@interface MAMapView (PoiFilter) -/** - * @brief 添加poi避让框 - * @param poiFilter - */ -- (void)addPoiFilter:(MAPoiFilter *)poiFilter; -/** - * @brief 移除poi避让框 - * @param keyName 名称 - */ -- (void)removePoiFilter:(NSString *)keyName; -/** - * @brief 清除poi避让框 - */ -- (void)clearPoiFilter; -@end - -#pragma mark - MAMapViewDelegate -@protocol MAMapViewDelegate - -@optional - -/** - * @brief 地图区域改变过程中会调用此接口 since 4.6.0 - * @param mapView 地图View - */ -- (void)mapViewRegionChanged:(MAMapView *)mapView; - -/** - * @brief 地图区域即将改变时会调用此接口 - * @param mapView 地图View - * @param animated 是否动画 - */ -- (void)mapView:(MAMapView *)mapView regionWillChangeAnimated:(BOOL)animated; - -/** - * @brief 地图区域改变完成后会调用此接口 - * @param mapView 地图View - * @param animated 是否动画 - */ -- (void)mapView:(MAMapView *)mapView regionDidChangeAnimated:(BOOL)animated; - -/** - * @brief 地图区域即将改变时会调用此接口,如实现此接口则不会触发回掉mapView:regionWillChangeAnimated: - * @param mapView 地图View - * @param animated 是否动画 -* @param wasUserAction 标识是否是用户动作 - */ -- (void)mapView:(MAMapView *)mapView regionWillChangeAnimated:(BOOL)animated wasUserAction:(BOOL)wasUserAction; - -/** - * @brief 地图区域改变完成后会调用此接口,如实现此接口则不会触发回掉mapView:regionDidChangeAnimated: - * @param mapView 地图View - * @param animated 是否动画 - * @param wasUserAction 标识是否是用户动作 - */ -- (void)mapView:(MAMapView *)mapView regionDidChangeAnimated:(BOOL)animated wasUserAction:(BOOL)wasUserAction; - -/** - * @brief 地图将要发生移动时调用此接口 - * @param mapView 地图view - * @param wasUserAction 标识是否是用户动作 - */ -- (void)mapView:(MAMapView *)mapView mapWillMoveByUser:(BOOL)wasUserAction; - -/** - * @brief 地图移动结束后调用此接口 - * @param mapView 地图view - * @param wasUserAction 标识是否是用户动作 - */ -- (void)mapView:(MAMapView *)mapView mapDidMoveByUser:(BOOL)wasUserAction; - -/** - * @brief 地图将要发生缩放时调用此接口 - * @param mapView 地图view - * @param wasUserAction 标识是否是用户动作 - */ -- (void)mapView:(MAMapView *)mapView mapWillZoomByUser:(BOOL)wasUserAction; - -/** - * @brief 地图缩放结束后调用此接口 - * @param mapView 地图view - * @param wasUserAction 标识是否是用户动作 - */ -- (void)mapView:(MAMapView *)mapView mapDidZoomByUser:(BOOL)wasUserAction; - -/** - * @brief 地图开始加载 - * @param mapView 地图View - */ -- (void)mapViewWillStartLoadingMap:(MAMapView *)mapView; - -/** - * @brief 地图加载成功 - * @param mapView 地图View - */ -- (void)mapViewDidFinishLoadingMap:(MAMapView *)mapView; - -/** - * @brief 地图加载失败 - * @param mapView 地图View - * @param error 错误信息 - */ -- (void)mapViewDidFailLoadingMap:(MAMapView *)mapView withError:(NSError *)error; - -/** - * @brief 地形图加载失败 - * @param mapView 地图View - * @param error 错误信息 - */ -- (void)mapView:(MAMapView *)mapView didFailLoadTerrainWithError:(NSError *)error; - -/** - * @brief 根据anntation生成对应的View。 - - 注意: - 1、5.1.0后由于定位蓝点增加了平滑移动功能,如果在开启定位的情况先添加annotation,需要在此回调方法中判断annotation是否为MAUserLocation,从而返回正确的View。 - if ([annotation isKindOfClass:[MAUserLocation class]]) { - return nil; - } - - 2、请不要在此回调中对annotation进行select和deselect操作,此时annotationView还未添加到mapview。 - - * @param mapView 地图View - * @param annotation 指定的标注 - * @return 生成的标注View - */ -- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id )annotation; - -/** - * @brief 当mapView新添加annotation views时,调用此接口 - * @param mapView 地图View - * @param views 新添加的annotation views - */ -- (void)mapView:(MAMapView *)mapView didAddAnnotationViews:(NSArray *)views; - -/** - * @brief 当选中一个annotation view时,调用此接口. 注意如果已经是选中状态,再次点击不会触发此回调。取消选中需调用-(void)deselectAnnotation:animated: - * @param mapView 地图View - * @param view 选中的annotation view - */ -- (void)mapView:(MAMapView *)mapView didSelectAnnotationView:(MAAnnotationView *)view; - -/** - * @brief 当取消选中一个annotation view时,调用此接口 - * @param mapView 地图View - * @param view 取消选中的annotation view - */ -- (void)mapView:(MAMapView *)mapView didDeselectAnnotationView:(MAAnnotationView *)view; - -/** - * @brief 在地图View将要启动定位时,会调用此函数 - * @param mapView 地图View - */ -- (void)mapViewWillStartLocatingUser:(MAMapView *)mapView; - -/** - * @brief 在地图View停止定位后,会调用此函数 - * @param mapView 地图View - */ -- (void)mapViewDidStopLocatingUser:(MAMapView *)mapView; - -/** - * @brief 位置或者设备方向更新后,会调用此函数 - * @param mapView 地图View - * @param userLocation 用户定位信息(包括位置与设备方向等数据) - * @param updatingLocation 标示是否是location数据更新, YES:location数据更新 NO:heading数据更新 - */ -- (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation; - -/** - * @brief 当plist配置NSLocationAlwaysUsageDescription或者NSLocationAlwaysAndWhenInUseUsageDescription,并且[CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined,会调用代理的此方法。 - 此方法实现调用后台权限API即可( 该回调必须实现 [locationManager requestAlwaysAuthorization] ); since 6.8.0 - * @param locationManager 地图的CLLocationManager。 - */ -- (void)mapViewRequireLocationAuth:(CLLocationManager *)locationManager; - -/** - * @brief 定位失败后,会调用此函数 - * @param mapView 地图View - * @param error 错误号,参考CLError.h中定义的错误号 - */ -- (void)mapView:(MAMapView *)mapView didFailToLocateUserWithError:(NSError *)error; - -/** - * @brief 拖动annotation view时view的状态变化 - * @param mapView 地图View - * @param view annotation view - * @param newState 新状态 - * @param oldState 旧状态 - */ -- (void)mapView:(MAMapView *)mapView annotationView:(MAAnnotationView *)view didChangeDragState:(MAAnnotationViewDragState)newState - fromOldState:(MAAnnotationViewDragState)oldState; - -/** - * @brief 根据overlay生成对应的Renderer - * @param mapView 地图View - * @param overlay 指定的overlay - * @return 生成的覆盖物Renderer - */ -- (MAOverlayRenderer *)mapView:(MAMapView *)mapView rendererForOverlay:(id )overlay; - -/** - * @brief 当mapView新添加overlay renderers时,调用此接口 - * @param mapView 地图View - * @param overlayRenderers 新添加的overlay renderers - */ -- (void)mapView:(MAMapView *)mapView didAddOverlayRenderers:(NSArray *)overlayRenderers; - -/** - * @brief 标注view的accessory view(必须继承自UIControl)被点击时,触发该回调 - * @param mapView 地图View - * @param view callout所属的标注view - * @param control 对应的control - */ -- (void)mapView:(MAMapView *)mapView annotationView:(MAAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control; - -/** - * @brief 标注view的calloutview整体点击时,触发该回调。只有使用默认calloutview时才生效。 - * @param mapView 地图的view - * @param view calloutView所属的annotationView - */ -- (void)mapView:(MAMapView *)mapView didAnnotationViewCalloutTapped:(MAAnnotationView *)view; - -/** - * @brief 标注view被点击时,触发该回调。(since 5.7.0) - * @param mapView 地图的view - * @param view annotationView - */ -- (void)mapView:(MAMapView *)mapView didAnnotationViewTapped:(MAAnnotationView *)view; - -/** - * @brief 当userTrackingMode改变时,调用此接口 - * @param mapView 地图View - * @param mode 改变后的mode - * @param animated 动画 - */ -- (void)mapView:(MAMapView *)mapView didChangeUserTrackingMode:(MAUserTrackingMode)mode animated:(BOOL)animated; - -/** - * @brief 当openGLESDisabled变量改变时,调用此接口 - * @param mapView 地图View - * @param openGLESDisabled 改变后的openGLESDisabled - */ -- (void)mapView:(MAMapView *)mapView didChangeOpenGLESDisabled:(BOOL)openGLESDisabled __attribute((deprecated("已废弃,since 7.9.0"))); - -/** - * @brief 当touchPOIEnabled == YES时,单击地图使用该回调获取POI信息 - * @param mapView 地图View - * @param pois 获取到的poi数组(由MATouchPoi组成) - */ -- (void)mapView:(MAMapView *)mapView didTouchPois:(NSArray *)pois; - -/** - * @brief 单击地图回调,返回经纬度 - * @param mapView 地图View - * @param coordinate 经纬度 - */ -- (void)mapView:(MAMapView *)mapView didSingleTappedAtCoordinate:(CLLocationCoordinate2D)coordinate; - -/** - * @brief 长按地图,返回经纬度 - * @param mapView 地图View - * @param coordinate 经纬度 - */ -- (void)mapView:(MAMapView *)mapView didLongPressedAtCoordinate:(CLLocationCoordinate2D)coordinate; - -/** - * @brief 地图初始化完成(在此之后,可以进行坐标计算) - * @param mapView 地图View - */ -- (void)mapInitComplete:(MAMapView *)mapView; - -#if MA_INCLUDE_INDOOR -/** - * @brief 室内地图出现,返回室内地图信息 - * - * @param mapView 地图View - * @param indoorInfo 室内地图信息 - */ -- (void)mapView:(MAMapView *)mapView didIndoorMapShowed:(MAIndoorInfo *)indoorInfo; - -/** - * @brief 室内地图楼层发生变化,返回变化的楼层 - * - * @param mapView 地图View - * @param indoorInfo 变化的楼层 - */ -- (void)mapView:(MAMapView *)mapView didIndoorMapFloorIndexChanged:(MAIndoorInfo *)indoorInfo; - -/** - * @brief 室内地图消失后,返回室内地图信息 - * - * @param mapView 地图View - * @param indoorInfo 室内地图信息 - */ -- (void)mapView:(MAMapView *)mapView didIndoorMapHidden:(MAIndoorInfo *)indoorInfo; -#endif //end of MA_INCLUDE_INDOOR - -/** - * @brief 离线地图数据将要被加载, 调用reloadMap会触发该回调,离线数据生效前的回调. - * @param mapView 地图View - */ -- (void)offlineDataWillReload:(MAMapView *)mapView; - -/** - * @brief 离线地图数据加载完成, 调用reloadMap会触发该回调,离线数据生效后的回调. - * @param mapView 地图View - */ -- (void)offlineDataDidReload:(MAMapView *)mapView; - -@end - diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMultiColoredPolylineRenderer.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMultiColoredPolylineRenderer.h deleted file mode 100644 index f8cceba..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMultiColoredPolylineRenderer.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// MAMultiColoredPolylineRenderer.h -// MapKit_static -// -// Created by yi chen on 12/11/15. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "MAConfig.h" -#if MA_INCLUDE_OVERLAY_MAMultiPolyline - -#import "MAPolylineRenderer.h" -#import "MAMultiPolyline.h" - -///此类用于绘制 MAMultiPolyline 对应的多彩线,支持分段颜色绘制 -@interface MAMultiColoredPolylineRenderer : MAPolylineRenderer - -///关联的MAMultiPolyline model -@property (nonatomic, readonly) MAMultiPolyline *multiPolyline; - -///分段绘制的颜色,需要分段颜色绘制时,必须设置(内容必须为UIColor)。根据multiPolyline.drawStyleIndexes属性指示的索引进行渲染。 -@property (nonatomic, strong) NSArray *strokeColors; - -///颜色是否渐变, 默认为NO。如果设置为YES,则为多彩渐变线。 -@property (nonatomic, getter=isGradient) BOOL gradient; - -/** - * @brief 根据指定的MAPolyline生成一个多段线Renderer - * @param multiPolyline 指定MAMultiPolyline - * @return 新生成的多段线Renderer -*/ -- (instancetype)initWithMultiPolyline:(MAMultiPolyline *)multiPolyline; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMultiPoint.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMultiPoint.h deleted file mode 100644 index 20ab664..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMultiPoint.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// MAMultiPoint.h -// MAMapKit -// -// -// Copyright (c) 2011年 Amap. All rights reserved. -// - -#import "MAConfig.h" -#import -#import "MAShape.h" -#import "MAGeometry.h" - -///该类是个由多个点组成的虚基类, 不能直接实例化对象, 要使用其子类MAPolyline,MAPolygon来实例化 -@interface MAMultiPoint : MAShape - -///坐标点数组 -@property (nonatomic, readonly) MAMapPoint *points; - -///坐标点的个数 -@property (nonatomic, readonly) NSUInteger pointCount; - -///是否跨越180度经度线,默认NO since 6.4.0 -@property (nonatomic, assign, readonly) BOOL cross180Longitude; - -/** - * @brief 将内部的坐标点数据转化为经纬度坐标并拷贝到coords内存中 - * @param coords 调用者提供的内存空间, 该空间长度必须大于等于要拷贝的坐标点的个数(range.length) - * @param range 要拷贝的数据范围 - */ -- (void)getCoordinates:(CLLocationCoordinate2D *)coords range:(NSRange)range; - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMultiPointOverlay.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMultiPointOverlay.h deleted file mode 100644 index 8e58e0e..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMultiPointOverlay.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// MAMultiPointOverlay.h -// MAMapKit -// -// Created by hanxiaoming on 2017/4/11. -// Copyright © 2017年 Amap. All rights reserved. -// - -#import "MAConfig.h" -#if MA_INCLUDE_OVERLAY_MAMultiPoint - -#import "MAShape.h" -#import "MAOverlay.h" - -///海量点overlay单个点对象(since 5.1.0) -@interface MAMultiPointItem : NSObject - -///经纬度 -@property (nonatomic, assign) CLLocationCoordinate2D coordinate; - -///唯一标识,默认为nil。 -@property (nonatomic, copy) NSString *customID; - -///标题 -@property (nonatomic, copy) NSString *title; - -///副标题 -@property (nonatomic, copy) NSString *subtitle; - -@end - - -///海量点overlay(since 5.1.0) -@interface MAMultiPointOverlay : MAShape - -///点对象集合(注意:MAMultiPointItem属性不支持动态更新) -@property (nonatomic, readonly) NSArray *items; - -///初始化方法 -- (instancetype)initWithMultiPointItems:(NSArray *)items; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMultiPointOverlayRenderer.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMultiPointOverlayRenderer.h deleted file mode 100644 index a53a202..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMultiPointOverlayRenderer.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// MAMultiPointOverlayRenderer.h -// MAMapKit -// -// Created by hanxiaoming on 2017/4/11. -// Copyright © 2017年 Amap. All rights reserved. -// - -#import "MAConfig.h" -#if MA_INCLUDE_OVERLAY_MAMultiPoint - -#import "MAMultiPointOverlay.h" -#import "MAOverlayRenderer.h" - -@class MAMultiPointOverlayRenderer; - -///MAMultiPointOverlayRenderer代理(since 5.1.0) -@protocol MAMultiPointOverlayRendererDelegate -@optional - -/** - @brief 点击海量点图层回调 - - @param renderer 海量点图层渲染器 - @param item 被点击的单个点对象 - */ -- (void)multiPointOverlayRenderer:(MAMultiPointOverlayRenderer *)renderer didItemTapped:(MAMultiPointItem *)item; - -@end - -///海量点渲染renderer(since 5.1.0)。 注意:为了保证渲染效率,纹理不受alpha参数影响,如果需要设置透明度,请更换icon。 -@interface MAMultiPointOverlayRenderer : MAOverlayRenderer - -///MAMultiPointOverlayRendererDelegate代理对象 -@property (nonatomic, weak) id delegate; - -///标注纹理图片 -@property (nonatomic, strong) UIImage *icon; - -///纹理渲染大小,默认为icon图片大小 -@property (nonatomic, assign) CGSize pointSize; - -///经纬度对应图片中的位置,默认为(0.5,0.5),范围[0-1] 负值自动取其绝对值 左上角为 (0,0) 右下角为 (1,1) -@property (nonatomic, assign) CGPoint anchor; - -///对应的overlay -@property (nonatomic, readonly) MAMultiPointOverlay *multiPointOverlay; - -///初始化方法 -- (instancetype)initWithMultiPointOverlay:(MAMultiPointOverlay *)multiPointOverlay; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMultiPolyline.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMultiPolyline.h deleted file mode 100644 index d830f56..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMultiPolyline.h +++ /dev/null @@ -1,77 +0,0 @@ -// -// MAMultiPolyline.h -// MapKit_static -// -// Created by yi chen on 12/11/15. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "MAConfig.h" -#if MA_INCLUDE_OVERLAY_MAMultiPolyline - -#import "MAPolyline.h" - -///多彩线model类。此类用于定义一个由多个点相连的多段线,绘制时支持分段采用不同颜色(纹理)绘制,点与点之间尾部相连但第一点与最后一个点不相连, 通常MAMultiPolyline是MAMultiColoredPolylineRenderer(分段颜色绘制)或MAMultiTexturePolylineRenderer(分段纹理绘制)的model -@interface MAMultiPolyline : MAPolyline - -/** - 绘制索引数组(纹理、颜色索引数组), 成员为NSNumber, 且为非负数。 - 例子:[1,3,6] 表示 0-1使用第一种颜色\纹理,1-3使用第二种,3-6使用第三种,6-最后使用第四种。 - 在渐变模式下(MAMultiColoredPolylineRenderer.gradient = YES),0-1使用第一种颜色,3使用第二种,6-最后使用第四种,1-3,3-6使用渐变色进行填充。 - - 注意:polyline在渲染时会进行抽稀以提高渲染效率,但是如果是设置为drawIndex的点,则不会被抽稀。 - 在每一个点都是索引点的极端情况下,则抽稀过程不会生效,点数量很多时会极大的影响渲染效率。所以请尽量少的设置索引点的数量。 - */ -@property (nonatomic, strong) NSArray *drawStyleIndexes; - -/** - * @brief 多彩线,根据MAMapPoint数据生成多彩线 - * - * 分段纹理绘制:其对应的MAMultiTexturePolylineRenderer必须设置strokeTextureImages属性; 否则使用默认的灰色纹理绘制。 - * 分段颜色绘制:其对应的MAMultiColoredPolylineRenderer必须设置strokeColors属性 - * - * @param points 指定的直角坐标点数组,注意:如果有连续重复点,需要去重处理,只保留一个,否则会导致绘制有问题。 - * @param count 坐标点的个数 - * @param drawStyleIndexes 纹理索引数组(颜色索引数组) - * @return 生成的折线对象 - */ -+ (instancetype)polylineWithPoints:(MAMapPoint *)points count:(NSUInteger)count drawStyleIndexes:(NSArray *) drawStyleIndexes; - -/** - * @brief 多彩线,根据经纬度坐标数据生成多彩线 - * - * 分段纹理绘制:其对应的MAMultiTexturePolylineRenderer必须设置strokeTextureImages属性; 否则使用默认的灰色纹理绘制。 - * 分段颜色绘制:其对应的MAMultiColoredPolylineRenderer必须设置strokeColors属性。 - * - * @param coords 指定的经纬度坐标点数组,注意:如果有连续重复点,需要去重处理,只保留一个,否则会导致绘制有问题。 - * @param count 坐标点的个数 - * @param drawStyleIndexes 纹理索引数组(颜色索引数组), 成员为NSNumber, 且为非负数。 - * @return 生成的折线对象 - */ -+ (instancetype)polylineWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSUInteger)count drawStyleIndexes:(NSArray *) drawStyleIndexes; - -/** - * @brief 重新设置坐标点. since 5.0.0 - * @param points 指定的直角坐标点数组,C数组,内部会做copy,调用者负责内存管理。注意:如果有连续重复点,需要去重处理,只保留一个,否则会导致绘制有问题。 - * @param count 坐标点的个数 - * @param drawStyleIndexes 纹理索引数组(颜色索引数组), 成员为NSNumber, 且为非负数。 - * @return 是否设置成功 - */ -- (BOOL)setPolylineWithPoints:(MAMapPoint *)points - count:(NSUInteger)count - drawStyleIndexes:(NSArray *)drawStyleIndexes; - -/** - * @brief 重新设置坐标点. since 5.0.0 - * @param coords 指定的经纬度坐标点数组,C数组,内部会做copy,调用者负责内存管理。注意:如果有连续重复点,需要去重处理,只保留一个,否则会导致绘制有问题。 - * @param count 坐标点的个数 - * @param drawStyleIndexes 纹理索引数组(颜色索引数组), 成员为NSNumber, 且为非负数。 - * @return 是否设置成功 - */ -- (BOOL)setPolylineWithCoordinates:(CLLocationCoordinate2D *)coords - count:(NSUInteger)count - drawStyleIndexes:(NSArray *)drawStyleIndexes; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMultiTexturePolylineRenderer.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMultiTexturePolylineRenderer.h deleted file mode 100644 index b9cae81..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAMultiTexturePolylineRenderer.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// MAMultiTexturePolylineRenderer.h -// MapKit_static -// -// Created by yi chen on 12/11/15. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "MAConfig.h" -#if MA_INCLUDE_OVERLAY_MAMultiPolyline - -#import "MAPolylineRenderer.h" -#import "MAMultiPolyline.h" - -///此类用于绘制MAMultiPolyline对应的多彩线,支持分段纹理绘制 -@interface MAMultiTexturePolylineRenderer : MAPolylineRenderer - -///关联的MAMultiPolyline model -@property (nonatomic, readonly) MAMultiPolyline *multiPolyline; - -///分段纹理图片数组, 支持非PowerOfTwo图片 -@property (nonatomic, strong) NSArray *strokeTextureImages; - -/** - * @brief 根据指定的MAMultiPolyline生成一个多段线Renderer - * @param multiPolyline 指定MAMultiPolyline - * @return 新生成的多段线Renderer - */ -- (instancetype)initWithMultiPolyline:(MAMultiPolyline *)multiPolyline; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOfflineCity.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOfflineCity.h deleted file mode 100644 index 3b181f5..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOfflineCity.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MAOfflineCity.h -// -// Copyright (c) 2013年 Amap. All rights reserved. -// - -#import "MAConfig.h" - -#if MA_INCLUDE_OFFLINE - -#import -#import "MAOfflineItem.h" - -///离线地图,城市信息 -@interface MAOfflineCity : MAOfflineItem - -///城市编码 -@property (nonatomic, copy, readonly) NSString *cityCode; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOfflineItem.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOfflineItem.h deleted file mode 100644 index 56c0885..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOfflineItem.h +++ /dev/null @@ -1,51 +0,0 @@ -// -// MAOfflineItem.h -// MapKit_static -// -// Created by songjian on 14-4-23. -// Copyright © 2016 Amap. All rights reserved. -// - - - -#import "MAConfig.h" - -#if MA_INCLUDE_OFFLINE - -#import - -///离线地图item状态 -typedef NS_ENUM(NSInteger, MAOfflineItemStatus) -{ - MAOfflineItemStatusNone = 0, ///<不存在 - MAOfflineItemStatusCached, ///<缓存状态 - MAOfflineItemStatusInstalled, ///<已安装 - MAOfflineItemStatusExpired ///<已过期 -}; - -@interface MAOfflineItem : NSObject - -///名字 -@property (nonatomic, copy, readonly) NSString *name; - -///简拼 -@property (nonatomic, copy, readonly) NSString *jianpin; - -///拼音 -@property (nonatomic, copy, readonly) NSString *pinyin; - -///区域编码 -@property (nonatomic, copy, readonly) NSString *adcode; - -///离线数据大小 -@property (nonatomic, assign, readonly) long long size; - -///状态 -@property (nonatomic, assign, readonly) MAOfflineItemStatus itemStatus; - -///已下载大小(当itemStatus == MAOfflineItemStatusCached 时有效) -@property (nonatomic, assign, readonly) long long downloadedSize; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOfflineItemCommonCity.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOfflineItemCommonCity.h deleted file mode 100644 index fea2596..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOfflineItemCommonCity.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// MAOfflineItemCommonCity.h -// MapKit_static -// -// Created by songjian on 14-4-23. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "MAConfig.h" - -#if MA_INCLUDE_OFFLINE - -#import "MAOfflineCity.h" - -///普通城市 -@interface MAOfflineItemCommonCity : MAOfflineCity - -///所属省份 -@property (nonatomic, weak) MAOfflineItem *province; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOfflineItemMunicipality.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOfflineItemMunicipality.h deleted file mode 100644 index 37acf51..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOfflineItemMunicipality.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// MAOfflineItemMunicipality.h -// MapKit_static -// -// Created by songjian on 14-4-23. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "MAConfig.h" - -#if MA_INCLUDE_OFFLINE - -#import "MAOfflineCity.h" - -///直辖市 -@interface MAOfflineItemMunicipality : MAOfflineCity - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOfflineItemNationWide.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOfflineItemNationWide.h deleted file mode 100644 index 22dc2e3..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOfflineItemNationWide.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// MAOfflineItemNationWide.h -// MapKit_static -// -// Created by songjian on 14-4-23. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "MAConfig.h" - -#if MA_INCLUDE_OFFLINE - -#import "MAOfflineCity.h" - -///全国概要 -@interface MAOfflineItemNationWide : MAOfflineCity - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOfflineMap.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOfflineMap.h deleted file mode 100644 index 7d58699..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOfflineMap.h +++ /dev/null @@ -1,143 +0,0 @@ -// -// MAOfflineMap.h -// -// Copyright (c) 2013年 Amap. All rights reserved. -// - -#import "MAConfig.h" - -#if MA_INCLUDE_OFFLINE - -#import -#import "MAOfflineProvince.h" -#import "MAOfflineItemNationWide.h" -#import "MAOfflineItemMunicipality.h" - -///离线地图下载状态 -typedef NS_ENUM(NSInteger, MAOfflineMapDownloadStatus) -{ - MAOfflineMapDownloadStatusWaiting = 0, //!< 以插入队列,等待中 - MAOfflineMapDownloadStatusStart, //!< 开始下载 - MAOfflineMapDownloadStatusProgress, //!< 下载过程中 - MAOfflineMapDownloadStatusCompleted, //!< 下载成功 - MAOfflineMapDownloadStatusCancelled, //!< 取消 - MAOfflineMapDownloadStatusUnzip, //!< 解压缩 - MAOfflineMapDownloadStatusFinished, //!< 全部顺利完成 - MAOfflineMapDownloadStatusError //!< 发生错误 -}; - -///离线下载错误domain -extern NSString * const MAOfflineMapErrorDomain; - -///离线地图下载错误类型 -typedef NS_ENUM(NSInteger, MAOfflineMapError) -{ - MAOfflineMapErrorUnknown = -1, //!< 未知的错误 - MAOfflineMapErrorCannotWriteToTmp = -2, //!< 写入临时目录失败 - MAOfflineMapErrorCannotOpenZipFile = -3, //!< 打开归档文件失败 - MAOfflineMapErrorCannotExpand = -4 //!< 解归档文件失败 -}; - -/** - * 当downloadStatus == MAOfflineMapDownloadStatusProgress 时, info参数是个NSDictionary, - * 如下两个key用来获取已下载和总和的数据大小(单位byte), 对应的是NSNumber(long long) 类型. - * 当downloadStatus == MAOfflineMapDownloadStatusError 时, info参数是NSError - */ - -///下载过程info的key,表示已下载数据大小 -extern NSString * const MAOfflineMapDownloadReceivedSizeKey; - -///下载过程info的key,表示总的数据大小 -extern NSString * const MAOfflineMapDownloadExpectedSizeKey; - -/** - * @brief 离线地图下载过程回调block - * @param downloadItem 下载的item - * @param downloadStatus 下载状态 - * @param info 下载过程中的附加信息 - */ -typedef void(^MAOfflineMapDownloadBlock)(MAOfflineItem * downloadItem, MAOfflineMapDownloadStatus downloadStatus, id info); - -/** - * @brief 离线地图检查更新回调block - * @param hasNewestVersion 是否有新版本的布尔值 - */ -typedef void(^MAOfflineMapNewestVersionBlock)(BOOL hasNewestVersion); - -///离线地图管理类 -@interface MAOfflineMap : NSObject - -/** - * @brief 获取MAOfflineMap 单例 - * @return MAOfflineMap - */ -+ (MAOfflineMap *)sharedOfflineMap; - -///省份数组(每个元素均是MAOfflineProvince类型) -@property (nonatomic, readonly) NSArray *provinces; - -///直辖市数组(每个元素均是MAOfflineItemMunicipality类型) -@property (nonatomic, readonly) NSArray *municipalities; - -///全国概要图 -@property (nonatomic, readonly) MAOfflineItemNationWide *nationWide; - -///城市数组, 包括普通城市与直辖市 -@property (nonatomic, readonly) NSArray *cities; - -///离线数据的版本号(由年月日组成, 如@"20130715") -@property (nonatomic, readonly) NSString *version; - -/** - * @brief 初始化离线地图数据,如果第一次运行且offlinePackage.plist文件不存在,则需要首先执行此方法。否则MAOfflineMap中的省、市、版本号等数据都为空。 - * @param block 初始化完成回调 - */ -- (void)setupWithCompletionBlock:(void(^)(BOOL setupSuccess))block; - -/** - * @brief 启动下载 - * @param item 数据 - * @param shouldContinueWhenAppEntersBackground 进入后台是否允许继续下载 - * @param downloadBlock 下载过程block - */ -- (void)downloadItem:(MAOfflineItem *)item shouldContinueWhenAppEntersBackground:(BOOL)shouldContinueWhenAppEntersBackground downloadBlock:(MAOfflineMapDownloadBlock)downloadBlock; - -/** - * @brief 监测是否正在下载 - * @param item 条目 - * @return 是否在下载 - */ -- (BOOL)isDownloadingForItem:(MAOfflineItem *)item; - -/** - * @brief 暂停下载 - * @param item 条目 - * @return 是否在执行了cancel,如果该item并未在下载中,则返回NO - */ -- (BOOL)pauseItem:(MAOfflineItem *)item; - -/** - * @brief 删除item对应离线地图数据 - * @param item 条目 - */ -- (void)deleteItem:(MAOfflineItem *)item; - -/** - * @brief 取消全部下载 - */ -- (void)cancelAll; - -/** - * @brief 清除所有在磁盘上的离线地图数据, 之后调用[mapView reloadMap]会使其立即生效 - */ -- (void)clearDisk; - -/** - * @brief 监测新版本。注意:如果有新版本,会重建所有的数据,包括provinces、municipalities、nationWide、cities,外部使用应当在newestVersionBlock中更新所持有的对象。 - * @param newestVersionBlock 回调block - */ -- (void)checkNewestVersion:(MAOfflineMapNewestVersionBlock)newestVersionBlock; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOfflineMapViewController.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOfflineMapViewController.h deleted file mode 100644 index d02a951..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOfflineMapViewController.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// MAOfflineMapViewController.h -// MAMapKit -// -// Created by hanxiaoming on 2017/12/14. -// Copyright © 2017年 Amap. All rights reserved. -// - -#import "MAConfig.h" -#if MA_INCLUDE_OFFLINE - -#import -#import "MAOfflineMap.h" - -///离线地图ViewController(since 5.7.0) -@interface MAOfflineMapViewController : UIViewController - -/// MAOfflineMapViewController单例,请使用单例以保证离线地图状态正确同步。 -+ (instancetype)sharedInstance; - -///MAOfflineMap实例 -@property (nonatomic, readonly) MAOfflineMap *offlineMap; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOfflineProvince.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOfflineProvince.h deleted file mode 100644 index fe992ef..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOfflineProvince.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// MAOfflineProvince.h -// MapKit_static -// -// Created by songjian on 14-4-24. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "MAConfig.h" - -#if MA_INCLUDE_OFFLINE - -#import "MAOfflineItem.h" -#import "MAOfflineItemCommonCity.h" - -///离线地图,省地图信息 -@interface MAOfflineProvince : MAOfflineItem - -///包含的城市数组(都是MAOfflineItemCommonCity类型) -@property (nonatomic, strong, readonly) NSArray *cities; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOverlay.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOverlay.h deleted file mode 100644 index d036fb7..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOverlay.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// MAOverlay.h -// MAMapKit -// -// -// Copyright (c) 2011年 Amap. All rights reserved. -// - -#import "MAConfig.h" -#import "MAAnnotation.h" -#import "MAGeometry.h" - -///该类是地图覆盖物的基类,所有地图的覆盖物需要继承自此类 -@protocol MAOverlay -@required - -///返回区域中心坐标 -- (CLLocationCoordinate2D)coordinate; - -///区域外接矩形 -- (MAMapRect)boundingMapRect; - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOverlayPathRenderer.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOverlayPathRenderer.h deleted file mode 100644 index 9c54a2b..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOverlayPathRenderer.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// MAOverlayPathRenderer.h -// MAMapKit -// -// -// Copyright (c) 2011年 Amap. All rights reserved. -// - -#import "MAConfig.h" -#import -#import "MAOverlayRenderer.h" -#import "MAPathShowRange.h" - -///该类设置overlay绘制的属性,可以使用该类的子类MACircleRenderer, MAPolylineRenderer, MAPolygonRenderer或者继承该类 -@interface MAOverlayPathRenderer : MAOverlayRenderer - -///填充颜色,默认是kMAOverlayRendererDefaultFillColor -@property (nonatomic, retain) UIColor *fillColor; - -///笔触颜色,默认是kMAOverlayRendererDefaultStrokeColor -@property (nonatomic, retain) UIColor *strokeColor; - -///笔触宽度, 单位屏幕点坐标,默认是0 -@property (nonatomic, assign) CGFloat lineWidth; - -///LineJoin,默认是kMALineJoinBevel -@property (nonatomic, assign) MALineJoinType lineJoinType; - -///LineCap,默认是kMALineCapButt -@property (nonatomic, assign) MALineCapType lineCapType; - -///MiterLimit,默认是2.f -@property (nonatomic, assign) CGFloat miterLimit; - -///虚线类型, since 5.5.0 -@property (nonatomic, assign) MALineDashType lineDashType; - -///是否抽稀,默认为YES,since 10.0.8000 -@property (nonatomic, assign) BOOL reducePoint; -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOverlayRenderer.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOverlayRenderer.h deleted file mode 100644 index 28bad69..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAOverlayRenderer.h +++ /dev/null @@ -1,128 +0,0 @@ -// -// MAOverlayRenderer.h -// MAMapKit -// -// -// Copyright (c) 2011年 Amap. All rights reserved. -// - -#import "MAConfig.h" -#import -#import "MAOverlay.h" -#import "MALineDrawType.h" - -#define kMAOverlayRendererDefaultStrokeColor [UIColor colorWithRed:0.3 green:0.63 blue:0.89 alpha:0.8] -#define kMAOverlayRendererDefaultFillColor [UIColor colorWithRed:0.77 green:0.88 blue:0.94 alpha:0.8] - -@protocol MAOverlayRenderDelegate,MTLRenderCommandEncoder; - -///该类是地图覆盖物Renderer的基类, 提供绘制overlay的接口但并无实际的实现(render相关方法只能在重写后的glRender方法中使用) -@interface MAOverlayRenderer : NSObject { - @protected - GLuint _strokeTextureID; - CGSize _strokeTextureSize; - BOOL _needsUpdate; - BOOL _needsLoadStrokeTexture; -} - -///由地图添加时,不要手动设置。如果不是使用mapview进行添加,则需要手动设置。(since 5.1.0) -@property (nonatomic, weak) id rendererDelegate; - -///关联的overlay对象 -@property (nonatomic, readonly, retain) id overlay; - -///用于生成笔触纹理id的图片(支持非PowerOfTwo图片; 如果您需要减轻绘制产生的锯齿,您可以参考AMap.bundle中的traffic_texture_blue.png的方式,在image两边增加部分透明像素.)。(since 5.3.0) -@property (nonatomic, strong) UIImage *strokeImage; - -///笔触纹理id, 修改纹理id参考, 如果strokeImage未指定、尚未加载或加载失败返回0. 注意:仅使用gles环境 -@property (nonatomic, readonly) GLuint strokeTextureID __attribute((deprecated("已废弃,since 7.9.0"))); - -///透明度[0,1],默认为1. 使用MAOverlayRenderer类提供的渲染接口会自动应用此属性。(since 5.1.0) -@property (nonatomic, assign) CGFloat alpha; - -///overlay渲染的scale。(since 5.1.0) -@property (nonatomic, readonly) CGFloat contentScale; - -/** - * @brief 初始化并返回一个Overlay Renderer - * @param overlay 关联的overlay对象 - * @return 初始化成功则返回overlay view,否则返回nil - */ -- (instancetype)initWithOverlay:(id)overlay; - -/** - * @brief 获取当前地图view矩阵,数组长度为16,无需外界释放. 需要添加至地图后,才能获取有效矩阵数据,否则返回NULL - * @return 矩阵数组 - */ -- (float *)getViewMatrix; - -/** - * @brief 获取当前地图projection矩阵,数组长度为16,无需外界释放. 需要添加至地图后,才能获取有效矩阵数据,否则返回NULL - * @return 矩阵数组 - */ -- (float *)getProjectionMatrix; - -/** - * @brief 获取当前地图中心点偏移,用以把地图坐标转换为gl坐标。需要添加到地图获取才有效。(since 5.1.0) - * @return 偏移 - */ -- (MAMapPoint)getOffsetPoint; - -/** - * @brief 获取Metal渲染MTLRenderCommandEncoder对象。注意:打开地图MetalEnable时有效,否则为nil(since 7.9.0) - * @return 偏移 - */ -- (id)getCommandEncoder; - -/** - * @brief 获取当前地图缩放级别,需要添加到地图获取才有效。(since 5.1.0) - * @return 缩放级别 - */ -- (CGFloat)getMapZoomLevel; - -/** - * @brief 将MAMapPoint转换为opengles可以直接使用的坐标 - * @param mapPoint MAMapPoint坐标 - * @return 直接支持的坐标 - */ -- (CGPoint)glPointForMapPoint:(MAMapPoint)mapPoint; - -/** - * @brief 批量将MAMapPoint转换为opengles可以直接使用的坐标 - * @param mapPoints MAMapPoint坐标数据指针 - * @param count 个数 - * @return 直接支持的坐标数据指针(需要调用者手动释放) - */ -- (CGPoint *)glPointsForMapPoints:(MAMapPoint *)mapPoints count:(NSUInteger)count; - -/** - * @brief 将屏幕尺寸转换为OpenGLES尺寸 - * @param windowWidth 屏幕尺寸 - * @return OpenGLES尺寸 - */ -- (CGFloat)glWidthForWindowWidth:(CGFloat)windowWidth; - -/** - * @brief 绘制函数(子类需要重载来实现) - */ -- (void)glRender; - -/** - * @brief 加载纹理图片. 注意:仅使用gles环境(since 5.1.0) - * @param textureImage 纹理图片(需满足:长宽相等,且宽度值为2的次幂) - * @return openGL纹理ID, 若纹理加载失败返回0 - */ -- (GLuint)loadTexture:(UIImage *)textureImage __attribute((deprecated("已废弃,since 7.9.0"))); - -/** - @brief 删除纹理. 注意:仅使用gles环境(since 5.1.0) - @param textureId 纹理ID - */ -- (void)deleteTexture:(GLuint)textureId __attribute((deprecated("已废弃,since 7.9.0"))); - -/** - * @brief 当关联overlay对象有更新时,调用此接口刷新. since 5.0.0 - */ -- (void)setNeedsUpdate; - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAParticleOverlay.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAParticleOverlay.h deleted file mode 100644 index 48ef249..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAParticleOverlay.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// MAParticleOverlay.h -// MAMapKit -// -// Created by liubo on 2018/9/19. -// Copyright © 2018年 Amap. All rights reserved. -// - -#import "MAConfig.h" -#if MA_INCLUDE_OVERLAY_ParticleSystem - -#import "MAShape.h" -#import "MAOverlay.h" -#import "MAParticleOverlayOptions.h" - -#pragma mark - MAParticleOverlay - -///该类用于定义一个粒子MAParticleOverlay, 通常MAParticleOverlay是MAParticleOverlayRenderer的model. since 6.5.0 -@interface MAParticleOverlay : MAShape - -/** - * @brief 根据粒子覆盖物选项option生成MAParticleOverlay - * @param option 粒子覆盖物选项option - * @return 新生成的粒子覆盖物MAParticleOverlay - */ -+ (instancetype)particleOverlayWithOption:(MAParticleOverlayOptions *)option; - -///当前粒子覆盖物的option,如果需要修改option的配置,需要修改后重新调用setOverlayOption:方法。 -@property (nonatomic, strong, readonly) MAParticleOverlayOptions *overlayOption; - -/** - * @brief 更新粒子覆盖物选项option - * @param overlayOption 要更新的粒子覆盖物选项 - */ -- (void)updateOverlayOption:(MAParticleOverlayOptions *)overlayOption; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAParticleOverlayOptions.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAParticleOverlayOptions.h deleted file mode 100644 index cef8d46..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAParticleOverlayOptions.h +++ /dev/null @@ -1,297 +0,0 @@ -// -// MAParticleOverlayOptions.h -// MAMapKit -// -// Created by liubo on 2018/9/18. -// Copyright © 2018年 Amap. All rights reserved. -// - -#import "MAConfig.h" -#if MA_INCLUDE_OVERLAY_ParticleSystem - -#import "MAShape.h" -#import "MAOverlay.h" - -#pragma mark - MAParticleOverlayType - -///天气类型 -typedef NS_ENUM(NSInteger, MAParticleOverlayType) -{ - MAParticleOverlayTypeSunny = 1, ///<晴天 - MAParticleOverlayTypeRain, ///<雨天 - MAParticleOverlayTypeSnowy, ///<雪天 - MAParticleOverlayTypeHaze, ///<雾霾 -}; - -#pragma mark - MAParticleVelocityGenerate - -///粒子的速度生成类. since 6.5.0 -@protocol MAParticleVelocityGenerate -@required - -///X轴方向上的速度变化率 -- (CGFloat)getX; - -///Y轴方向上的速度变化率 -- (CGFloat)getY; - -///Z轴方向上的速度变化率 -- (CGFloat)getZ; -@end - -#pragma mark - MAParticleRandomVelocityGenerate - -///粒子的随机速度生成类. since 6.5.0 -@interface MAParticleRandomVelocityGenerate : NSObject - -/** - * @brief 根据速度范围值生成粒子的速度变化类 - * @param x1 起始的速度x值 - * @param y1 起始的速度y值 - * @param z1 起始的速度z值 - * @param x2 结束的速度x值 - * @param y2 结束的速度y值 - * @param z2 结束的速度z值 - * @return 生成粒子的颜色变化类 - */ -- (instancetype)initWithBoundaryValueX1:(float)x1 Y1:(float)y1 Z1:(float)z1 X2:(float)x2 Y2:(float)y2 Z2:(float)z2; - -@end - -#pragma mark - MAParticleColorGenerate - -///粒子的颜色生成类. since 6.5.0 -@protocol MAParticleColorGenerate -@required -///生成的颜色值,需为包含四个float值的数组。 -- (float *)getColor; -@end - -#pragma mark - MAParticleRandomColorGenerate - -///粒子的随机颜色生成类. since 6.5.0 -@interface MAParticleRandomColorGenerate : NSObject - -/** - * @brief 根据颜色范围值生成粒子的颜色变化类 - * @param r1 起始的颜色r值 - * @param g1 起始的颜色g值 - * @param b1 起始的颜色b值 - * @param a1 起始的颜色a值 - * @param r2 结束的颜色r值 - * @param g2 结束的颜色g值 - * @param b2 结束的颜色b值 - * @param a2 结束的颜色a值 - * @return 生成粒子的颜色变化类 - */ -- (instancetype)initWithBoundaryColorR1:(float)r1 G1:(float)g1 B1:(float)b1 A1:(float)a1 R2:(float)r2 G2:(float)g2 B2:(float)b2 A2:(float)a2; - -@end - -#pragma mark - MAParticleRotationGenerate - -///粒子的角度生成类. since 6.5.0 -@protocol MAParticleRotationGenerate -@required -///生成的角度值 -- (float)getRotate; -@end - -#pragma mark - MAParticleConstantRotationGenerate - -///粒子的固定角度生成类. since 6.5.0 -@interface MAParticleConstantRotationGenerate : NSObject - -/** - * @brief 根据角度生成粒子的角度变化类 - * @param rotate 固定的角度 - * @return 生成粒子的角度变化类 - */ -- (instancetype)initWithRotate:(float)rotate; - -@end - -#pragma mark - MAParticleSizeGenerate - -///粒子的大小生成类. since 6.5.0 -@protocol MAParticleSizeGenerate -@required - -///X轴上变化比例 -- (float)getSizeX:(float)timeFrame; - -///Y轴上变化比例 -- (float)getSizeY:(float)timeFrame; - -///Z轴上变化比例 -- (float)getSizeZ:(float)timeFrame; -@end - -#pragma mark - MAParticleCurveSizeGenerate - -///粒子的大小变化类. since 6.5.0 -@interface MAParticleCurveSizeGenerate : NSObject - -/** - * @brief 根据三个轴上的变化比例生成粒子的大小变化类 - * @param x X轴上变化比例 - * @param y Y轴上变化比例 - * @param z Z轴上变化比例 - * @return 生成粒子的大小变化类 - */ -- (instancetype)initWithCurveX:(float)x Y:(float)y Z:(float)z; - -@end - -#pragma mark - MAParticleEmissionModuleOC - -///粒子的发射率类,每隔多少时间发射粒子数量,越多会越密集. since 6.5.0 -@interface MAParticleEmissionModuleOC : NSObject - -/** - * @brief 根据发射数量和发射间隔生成粒子的发射率类。关系为:"发射数量为rate粒子->等待rateTime间隔->发射数量为rate粒子->等待rateTime间隔"循环 - * @param rate 发射数量(不能为0) - * @param rateTime 发射间隔 - * @return 生成粒子的发射率类 - */ -- (instancetype)initWithEmissionRate:(int)rate rateTime:(int)rateTime; - -@end - -#pragma mark - MAParticleShapeModule - -///粒子的发射区域模型协议. since 6.5.0 -@protocol MAParticleShapeModule -@required - -///新生成的发射点坐标,需为包含三个float值的数组。 -- (float *)getPoint; - -///坐标是否按比例生成 -- (BOOL)isRatioEnable; -@end - -#pragma mark - MAParticleSinglePointShapeModule - -///粒子的发射单个点区域模型. since 6.5.0 -@interface MAParticleSinglePointShapeModule : NSObject - -/** - * @brief 生成粒子的发射矩形区域模型,以比例的形式设置发射区域 - * @param x x坐标比例 - * @param y y坐标比例 - * @param z z坐标比例 - * @param isUseRatio 是否按比例 - * @return 新生成的粒子发射单个点区域模型 - */ -- (instancetype)initWithShapeX:(float)x Y:(float)y Z:(float)z useRatio:(BOOL)isUseRatio; - -@end - -#pragma mark - MAParticleRectShapeModule - -///粒子的发射矩形区域模型. since 6.5.0 -@interface MAParticleRectShapeModule : NSObject - -/** - * @brief 生成粒子的发射矩形区域模型,以比例的形式设置发射区域。 - * @param left 左边距比例 - * @param top 上边距比例 - * @param right 右边距比例 - * @param bottom 下边距比例 - * @param isUseRatio 是否按比例 - * @return 新生成的粒子发射矩形区域模型 - */ -- (instancetype)initWithLeft:(float)left top:(float)top right:(float)right bottom:(float)bottom useRatio:(BOOL)isUseRatio; - -@end - -#pragma mark - MAParticleOverLifeModuleOC - -///粒子生命周期过程中状态变化,包含速度、旋转和颜色的变化. since 6.5.0 -@interface MAParticleOverLifeModuleOC : NSObject - -/** - * @brief 设置粒子生命周期过程中速度的变化 - * @param velocity 遵循MAParticleVelocityGenerate协议的速度生成类 - */ -- (void)setVelocityOverLife:(id)velocity; - -/** - * @brief 设置粒子生命周期过程中角度的变化 - * @param rotation 遵循MAParticleRotationGenerate协议的角度生成类 - */ -- (void)setRotationOverLife:(id)rotation; - -/** - * @brief 设置粒子生命周期过程中大小的变化 - * @param size 遵循MAParticleSizeGenerate协议的大小生成类 - */ -- (void)setSizeOverLife:(id)size; - -/** - * @brief 设置粒子生命周期过程中颜色的变化 - * @param color 遵循MAParticleColorGenerate协议的颜色生成类 - */ -- (void)setColorOverLife:(id)color; - -@end - -#pragma mark - MAParticleOverlayOptions - -///该类用于定义一个粒子覆盖物显示选项. since 6.5.0 -@interface MAParticleOverlayOptions : NSObject - -///option选项是否可见. (默认YES) -@property (nonatomic, assign) BOOL visibile; - -///粒子系统存活时间. (默认5000,单位毫秒) -@property (nonatomic, assign) NSTimeInterval duration; - -///粒子系统是否循环. (默认YES) -@property (nonatomic, assign) BOOL loop; - -///粒子系统的粒子最大数量. (默认100) -@property (nonatomic, assign) NSInteger maxParticles; - -///粒子系统的粒子图标. (默认nil) -@property (nonatomic, strong) UIImage *icon; - -///每个粒子的初始大小. (默认(32.f*[[UIScreen mainScreen] nativeScale], 32.f*[[UIScreen mainScreen] nativeScale]),单位:OpenGLESPixels数量,计算方式为: OpenGLESPixels = ScreenPoint数量 * [[UIScreen mainScreen] nativeScale]) -@property (nonatomic, assign) CGSize startParticleSize; - -///每个粒子的存活时间. (默认5000,单位毫秒) -@property (nonatomic, assign) NSTimeInterval particleLifeTime; - -///每个粒子的初始颜色. (默认nil) -@property (nonatomic, strong) id particleStartColor; - -///每个粒子的初始速度. (默认nil) -@property (nonatomic, strong) id particleStartSpeed; - -///粒子的发射率,参考 MAParticleEmissionModuleOC 类. (默认nil) -@property (nonatomic, strong) MAParticleEmissionModuleOC *particleEmissionModule; - -///粒子的发射区域模型. (默认nil) -@property (nonatomic, strong) id particleShapeModule; - -///粒子生命周期过程,参考 MAParticleOverLifeModuleOC 类. (默认nil) -@property (nonatomic, strong) MAParticleOverLifeModuleOC *particleOverLifeModule; - -@end - -#pragma mark - MAParticleOverlayOptionsFactory - -///该类用于根据指定的天气类型,生成SDK内置的天气粒子覆盖物显示选项option. since 6.5.0 -@interface MAParticleOverlayOptionsFactory : NSObject - -/** - * @brief 根据指定的天气类型生成粒子覆盖物显示选项option - * @param particleType 天气类型 - * @return 新生成的粒子覆盖物显示选项option - */ -+ (NSArray *)particleOverlayOptionsWithType:(MAParticleOverlayType)particleType; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAParticleOverlayRenderer.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAParticleOverlayRenderer.h deleted file mode 100644 index 00bb366..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAParticleOverlayRenderer.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// MAParticleOverlayRenderer.h -// MAMapKit -// -// Created by liubo on 2018/9/19. -// Copyright © 2018年 Amap. All rights reserved. -// - -#import "MAConfig.h" -#if MA_INCLUDE_OVERLAY_ParticleSystem - -#import "MAOverlayRenderer.h" -#import "MAParticleOverlayOptions.h" -#import "MAParticleOverlay.h" - -///该类是MAParticleOverlay的显示Renderer. since 6.5.0 -@interface MAParticleOverlayRenderer : MAOverlayRenderer - -///关联的MAParticleOverlay model -@property (nonatomic, readonly) MAParticleOverlay *particleOverlay; - -/** - * @brief 根据指定MAParticleOverlay生成对应的Renderer - * @param particleOverlay 指定的MAParticleOverlay model - * @return 生成的Renderer - */ -- (instancetype)initWithParticleOverlay:(MAParticleOverlay *)particleOverlay; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAPathShowRange.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAPathShowRange.h deleted file mode 100644 index b824849..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAPathShowRange.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// MAPathShowRange.h -// MAMapKit -// -// Created by shaobin on 2019/12/31. -// Copyright © 2019 Amap. All rights reserved. -// - -#ifndef MAPathShowRange_h -#define MAPathShowRange_h - -struct MAPathShowRange { - float begin; ///<起点位置,整数部分表示起点索引,小数部分表示在线段上的位置 - float end; ///<终点位置,整数部分表示起点索引,小数部分表示在线段上的位置 -}; - -typedef struct MAPathShowRange MAPathShowRange; - -static inline MAPathShowRange MAPathShowRangeMake(float begin, float end) { - return (MAPathShowRange){begin, end}; -} - - -#endif /* MAPathShowRange_h */ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAPinAnnotationView.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAPinAnnotationView.h deleted file mode 100644 index e6e866c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAPinAnnotationView.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// MAPinAnnotationView.h -// MAMapKitDemo -// -// Created by songjian on 13-1-7. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "MAConfig.h" -#import "MAMapView.h" -#import "MAAnnotationView.h" - -///MAPinAnnotationColor -typedef NS_ENUM(NSInteger, MAPinAnnotationColor){ - MAPinAnnotationColorRed = 0, ///< 红色大头针 - MAPinAnnotationColorGreen, ///< 绿色大头针 - MAPinAnnotationColorPurple ///< 紫色大头针 -}; - -///提供类似大头针效果的annotation view -@interface MAPinAnnotationView : MAAnnotationView - -///大头针的颜色 -@property (nonatomic) MAPinAnnotationColor pinColor; - -///添加到地图时是否使用下落动画效果 -@property (nonatomic) BOOL animatesDrop; - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAPoiFilter.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAPoiFilter.h deleted file mode 100644 index d3a7728..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAPoiFilter.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// MAPoiFilter.h -// MAMapKit -// -// Created by linshiqing on 2024/6/18. -// Copyright © 2024 Amap. All rights reserved. -// - -#import -@class MAMapView; - -NS_ASSUME_NONNULL_BEGIN -typedef NS_OPTIONS(NSUInteger, MAPoiFilterType) { - MAPoiFilterTypePoi = 0x00000001, //!< 避让POI - MAPoiFilterTypeRoadName = 0x00000002, //!< 避让底图路名 - MAPoiFilterTypeRoadShield = 0x00000004, //!< 避让路牌 - MAPoiFilterTypeLabel3rd = 0x00000008, //!< 避让第三方label - MAPoiFilterTypeAll = 0xFFFFFFFF //!< 避让所有 -}; - -@interface MAPoiFilter : NSObject -@property (nonatomic, assign) MAPoiFilterType filterType; //!< 避让类型 -// 请将CLLocationCoordinate2D类型使用[NSValue valueWithMACoordinate:]包装下 -@property (nonatomic, copy) NSArray *position; //!< 四边形避让框坐标 -@property (nonatomic, copy) NSString *keyName; //!< 避让框名称 -+ (instancetype)poiFilter:(MAMapView *)mapView filterType:(MAPoiFilterType)filterType keyName:(NSString *)keyName center:(CLLocationCoordinate2D)center width:(CGFloat)width height:(CGFloat)height; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAPointAnnotation.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAPointAnnotation.h deleted file mode 100644 index 207b724..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAPointAnnotation.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// MAPointAnnotation.h -// MAMapKitDemo -// -// Created by songjian on 13-1-7. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "MAConfig.h" -#import "MAShape.h" -#import - -///点标注数据 -@interface MAPointAnnotation : MAShape - -///经纬度 -@property (nonatomic, assign) CLLocationCoordinate2D coordinate; - -///是否固定在屏幕一点, 注意,拖动或者手动改变经纬度,都会导致设置失效 -@property (nonatomic, assign, getter = isLockedToScreen) BOOL lockedToScreen; - -///固定屏幕点的坐标 -@property (nonatomic, assign) CGPoint lockedScreenPoint; - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAPolygon.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAPolygon.h deleted file mode 100644 index 409be60..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAPolygon.h +++ /dev/null @@ -1,51 +0,0 @@ -// -// MAPolygon.h -// MAMapKit -// -// Copyright (c) 2011年 Amap. All rights reserved. -// - -#import "MAConfig.h" -#import -#import "MAMultiPoint.h" -#import "MAOverlay.h" - -///此类用于定义一个由多个点组成的闭合多边形, 点与点之间按顺序尾部相连, 第一个点与最后一个点相连, 通常MAPolygon是MAPolygonView的model -@interface MAPolygon : MAMultiPoint - -///设置中空区域,用来创建中间带空洞的复杂图形。注意:传入的overlay只支持MAPolgon类型和MACircle类型,不支持与polygon边相交或在polygon外部,不支持hollowShapes彼此间相交,和空洞顺序有关,不支持嵌套. since 5.5.0 -@property (nonatomic, strong) NSArray> *hollowShapes; - -/** - * @brief 根据经纬度坐标数据生成闭合多边形 - * @param coords 经纬度坐标点数据,coords对应的内存会拷贝,调用者负责该内存的释放 - * @param count 经纬度坐标点数组个数 - * @return 新生成的多边形 - */ -+ (instancetype)polygonWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSUInteger)count; - -/** - * @brief 根据map point数据生成多边形 - * @param points map point数据,points对应的内存会拷贝,调用者负责该内存的释放 - * @param count 点的个数 - * @return 新生成的多边形 - */ -+ (instancetype)polygonWithPoints:(MAMapPoint *)points count:(NSUInteger)count; - -/** - * @brief 重新设置多边形顶点. since 5.0.0 - * @param points 指定的直角坐标点数组, C数组,内部会做copy,调用者负责内存管理 - * @param count 坐标点的个数 - * @return 是否设置成功 - */ -- (BOOL)setPolygonWithPoints:(MAMapPoint *)points count:(NSInteger)count; - -/** - * @brief 重新设置多边形顶点. since 5.0.0 - * @param coords 指定的经纬度坐标点数组, C数组,内部会做copy,调用者负责内存管理 - * @param count 坐标点的个数 - * @return 是否设置成功 - */ -- (BOOL)setPolygonWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSInteger)count; - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAPolygonRenderer.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAPolygonRenderer.h deleted file mode 100644 index af97f82..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAPolygonRenderer.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// MAPolygonRenderer.h -// MAMapKit -// -// -// Copyright (c) 2011年 Amap. All rights reserved. -// - -#import "MAConfig.h" -#import -#import "MAPolygon.h" -#import "MAOverlayPathRenderer.h" - -///此类用于绘制MAPolygon,可以通过MAOverlayPathRenderer修改其fill和stroke attributes -@interface MAPolygonRenderer : MAOverlayPathRenderer - -///关联的MAPolygon model -@property (nonatomic, readonly) MAPolygon *polygon; - -/** - * @brief 根据指定的多边形生成一个多边形Renderer - * @param polygon polygon 指定的多边形数据对象 - * @return 新生成的多边形Renderer - */ -- (instancetype)initWithPolygon:(MAPolygon *)polygon; - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAPolyline.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAPolyline.h deleted file mode 100644 index 6772ddf..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAPolyline.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// MAPolyline.h -// MAMapKit -// -// -// Copyright (c) 2011年 Amap. All rights reserved. -// - -#import "MAConfig.h" -#import "MAMultiPoint.h" -#import "MAOverlay.h" - -///此类用于定义一个由多个点相连的多段线,点与点之间尾部相连但第一点与最后一个点不相连, 通常MAPolyline是MAPolylineView的model -@interface MAPolyline : MAMultiPoint - -/** - * @brief 根据map point数据生成多段线 - * @param points map point数据,points对应的内存会拷贝,调用者负责该内存的释放 - * @param count map point个数 - * @return 生成的多段线 - */ -+ (instancetype)polylineWithPoints:(MAMapPoint *)points count:(NSUInteger)count; - -/** - * @brief 根据经纬度坐标数据生成多段线 - * @param coords 经纬度坐标数据,coords对应的内存会拷贝,调用者负责该内存的释放 - * @param count 经纬度坐标个数 - * @return 生成的多段线 - */ -+ (instancetype)polylineWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSUInteger)count; - -/** - * @brief 重新设置折线坐标点. since 5.0.0 - * @param points 指定的直角坐标点数组, C数组,内部会做copy,调用者负责内存管理 - * @param count 坐标点的个数 - * @return 是否设置成功 - */ -- (BOOL)setPolylineWithPoints:(MAMapPoint *)points count:(NSInteger)count; - -/** - * @brief 重新设置折线坐标点. since 5.0.0 - * @param coords 指定的经纬度坐标点数组, C数组,内部会做copy,调用者负责内存管理 - * @param count 坐标点的个数 - * @return 是否设置成功 - */ -- (BOOL)setPolylineWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSInteger)count; - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAPolylineRenderer.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAPolylineRenderer.h deleted file mode 100644 index 705db46..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAPolylineRenderer.h +++ /dev/null @@ -1,46 +0,0 @@ -// -// MAPolylineRenderer.h -// MAMapKit -// -// -// Copyright (c) 2011年 Amap. All rights reserved. -// - -#import "MAConfig.h" -#import -#import "MAPolyline.h" -#import "MAOverlayPathRenderer.h" -#import "MAPathShowRange.h" - -///此类用于绘制MAPolyline,可以通过MAOverlayPathRenderer修改其fill和stroke attributes -@interface MAPolylineRenderer : MAOverlayPathRenderer - -///关联的MAPolyline model -@property (nonatomic, readonly) MAPolyline *polyline; - -///设置是否显示3d箭头线, 默认为NO。如果设置为YES,则为3d箭头线。since 6.7.0 -@property (nonatomic, assign) BOOL is3DArrowLine; - -///设置为立体3d箭头的侧边颜色(当is3DArrowLine为YES时有效)顶部颜色使用strokeColor。since 6.7.0 -@property (nonatomic, strong) UIColor *sideColor; - -///是否开启点击选中功能,默认NO. since 7.1.0 -@property (nonatomic, assign) BOOL userInteractionEnabled; - -///用于调整点击选中热区大小,默认为0. 负值增大热区,正值减小热区. since 7.1.0 -@property (nonatomic, assign) CGFloat hitTestInset; - -///是否启用显示范围,YES启用,不启用时展示全路径 since 7.5.0 -@property (nonatomic, assign) BOOL showRangeEnabled; - -///显示范围 since 7.5.0 -@property (nonatomic, assign) MAPathShowRange showRange; - -/** - * @brief 根据指定的MAPolyline生成一个多段线Renderer - * @param polyline 指定MAPolyline - * @return 新生成的多段线Renderer - */ -- (instancetype)initWithPolyline:(MAPolyline *)polyline; - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MARouteOverlay.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MARouteOverlay.h deleted file mode 100644 index 3121455..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MARouteOverlay.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// MARouteOverlay.h -// MAMapKit -// -// Created by linshiqing on 2024/1/18. -// Copyright © 2024 Amap. All rights reserved. -// - -#import "MAConfig.h" -#if FEATURE_ROUTE_OVERLAY -#import "MABaseEngineOverlay.h" -#import "MARouteOverlayModel.h" -NS_ASSUME_NONNULL_BEGIN - - -@interface MARouteOverlay : MABaseEngineOverlay -@property (nonatomic, assign, readonly) NSUInteger mapScene; -@property (nonatomic, copy, readonly) NSArray *params; -@property (nonatomic, assign, readonly) BOOL select; -@property (nonatomic, strong, readonly) MAMapRouteOverlayData *data; -@property (nonatomic, copy, readonly) NSArray *passedColors; - -- (instancetype)initWithMapSecne:(NSUInteger)mapScene params:(NSArray *)params select:(BOOL)select data:(MAMapRouteOverlayData *)data passedColors:(NSArray *)passedColors; - -- (void)setCar2DWithIndex:(uint32_t)index position:(float)postion; - -- (void)setCar3DWithIndex:(uint32_t)index position:(float)postion; - -- (void)addRouteName; - -- (void)removeRouteName; - -- (void)setLineWidthScale:(float)scale; - -- (void)setLine2DWithLineWidth:(int32_t)lineWidth borderWidth:(int32_t)borderWidth; - - - (void)setShowArrow:(BOOL)bShow; - -- (void)setArrow3DTexture:(UIImage *)image; - -- (void)setRouteItemParam:(MARouteOverlayParam *)routeParam; - -- (void)setHighlightType:(MAMapRouteHighLightType)type; - -- (void)setHighlightParam:(MARouteOverlayHighLightParam *)highlightParam; - -- (void)setSelectStatus:(BOOL)status; - -- (void)setShowNaviRouteNameCountMap:(NSDictionary*)countMap; - -- (void)setArrowFlow:(BOOL)bFlow; -@end -NS_ASSUME_NONNULL_END -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MARouteOverlayModel.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MARouteOverlayModel.h deleted file mode 100644 index 04326a8..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MARouteOverlayModel.h +++ /dev/null @@ -1,161 +0,0 @@ -// -// MARouteOverlayModel.h -// MAMapKit -// -// Created by linshiqing on 2024/1/18. -// Copyright © 2024 Amap. All rights reserved. -// - -#import -#import -#if FEATURE_ROUTE_OVERLAY -NS_ASSUME_NONNULL_BEGIN -/** - * @brief 路线纹理枚举 - */ -typedef NS_ENUM(NSInteger, MAMapRouteTexture) { - MAMapRouteTextureNonavi = 0, //!< 非导航道路,步行代表不绘制路段 - MAMapRouteTextureNavi = 1, //!< 导航道路,骑步行代表高亮路段 - MAMapRouteTextureDefault = 2, //!< 实时交通默认状态,步行代表置灰路段 - MAMapRouteTextureOpen = 3, //!< 实时交通畅通状态 - MAMapRouteTextureAmble = 4, //!< 实时交通缓行状态 - MAMapRouteTextureJam = 5, //!< 实时交通拥堵状态 - MAMapRouteTextureCongested = 6, //!< 实时交通极其拥堵状态 - MAMapRouteTextureArrow = 7, //!< 路线上鱼骨箭头 - MAMapRouteTextureCustom1 = 8, //!< 自定义路线纹理1, 与status值对应 - MAMapRouteTextureCustom2 = 9, //!< 自定义路线纹理2, 与status值对应 - MAMapRouteTextureCustom3 = 10, //!< 自定义路线纹理3, 与status值对应 - MAMapRouteTextureCustom4 = 11, //!< 自定义路线纹理4, 与status值对应 - MAMapRouteTextureCustom5 = 12, //!< 自定义路线纹理5, 与status值对应 - MAMapRouteTextureCustom6 = 13, //!< 自定义路线纹理6, 与status值对应 - MAMapRouteTextureRapider = 16, //!< 自定义路线纹理16,极其畅通 - MAMapRouteTextureRestrain = 30, //!< 自定义路线纹理30, 导航抑制状态 - MAMapRouteTextureCustomMax = 31, //!< 自定义路线纹理最大值, 与status值对应 - MAMapRouteTextureCharge = 32, //!< 收费道路 - MAMapRouteTextureFree = 33, //!< 免费道路 - MAMapRouteTextureLimit = 34, //!< 限行道路 - MAMapRouteTextureSlower = 35, //!< 通勤场景下更拥堵道路 - MAMapRouteTextureFaster = 36, //!< 通勤场景下更畅通道路 - MAMapRouteTextureWrong = 37, //!< 报错道路 - MAMapRouteTextureFerry = 38, //!< 轮渡线 - MAMapRouteTextureNumber, //!< 纹理个数 -}; - -@interface MAPolylineCapTextureInfo : NSObject -@property (nonatomic, assign) float x1; //!< 纹理左上角X -@property (nonatomic, assign) float y1; //!< 纹理左上角Y -@property (nonatomic, assign) float x2; //!< 纹理右下角X -@property (nonatomic, assign) float y2; //!< 纹理右上角Y -@end - -@interface MAPolylineTextureInfo : MAPolylineCapTextureInfo -@property (nonatomic, assign) float textureLen; //!< 纹理长度,仅在绘制虚线线型时设置 -@end - -typedef NS_ENUM(NSInteger, MAMapRouteLineWidthType) { - MAMapRouteLineWidthTypePixel = 0, - MAMapRouteLineWidthTypeMeter = 1, -}; - -@interface MARouteOverlayParam : NSObject -@property (nonatomic, assign) BOOL lineExtract; //!< 是否抽稀 -@property (nonatomic, assign) BOOL useColor; //!< 是否使用颜色 -@property (nonatomic, assign) BOOL usePoint; //!< 是否使用Point点 -@property (nonatomic, assign) BOOL useCap; //!< 是否使用线帽 -@property (nonatomic, assign) BOOL canBeCovered; //!< 能否被覆盖 -@property (nonatomic, assign) BOOL showArrow; //!< 是否显示箭头 上层控制箭头是否显示 -@property (nonatomic, assign) BOOL needColorGradient; //!< 是否需要渐变 -@property (nonatomic, assign) BOOL clickable; //!< 是否可点击 -@property (nonatomic, assign) int32_t lineWidth; //!< 线宽 -@property (nonatomic, assign) int32_t borderLineWidth; //!< 边线宽 -@property (nonatomic, strong) UIImage *fillMarkerImage; //!< 里线纹理id -@property (nonatomic, strong) UIImage *simple3DFillMarkerImage; //!< 简易三维下里线纹理 -@property (nonatomic, strong) UIImage *borderMarkerImage; //!< 边线纹理id -@property (nonatomic, assign) uint32_t fillColor; //!< 填充颜色 -@property (nonatomic, assign) uint32_t borderColor; //!< 边颜色 -@property (nonatomic, assign) uint32_t selectFillColor; //!< 选中的填充颜色 -@property (nonatomic, assign) uint32_t unSelectFillColor; //!< 未选中的填充颜色 -@property (nonatomic, assign) uint32_t selectBorderColor; //!< 选中的边线颜色 -@property (nonatomic, assign) uint32_t unSelectBorderColor;//!< 未选中的边线颜色 -@property (nonatomic, assign) uint32_t pointDistance; //!< 两点间距离 -@property (nonatomic, assign) uint32_t priority; //!< 设置item的优先级(只有usePoint为true有效) -@property (nonatomic, assign) MAMapRouteTexture routeTexture; //!< 路线纹理枚举 具体参考MapRouteTexture -@property (nonatomic, strong) MAPolylineTextureInfo *lineTextureInfo; //!< 纹理坐标参数 -@property (nonatomic, strong) MAPolylineTextureInfo *lineSimple3DTextureInfo;//!< 简易三维下纹理坐标参数 -@property (nonatomic, strong) MAPolylineCapTextureInfo *lineCapTextureInfo; //!< 线帽纹理参数 -@property (nonatomic, assign) NSString *lineBorderQuery; //!< 边线纹理资源URL地址 -@property (nonatomic, assign) NSString *lineFillQuery; //!< 中心线纹理资源URL地址 -@property (nonatomic, assign) MAMapRouteLineWidthType lineWidthType; //!< 线宽类型 -@end - - -typedef NS_ENUM(NSInteger, MAMapRouteHighLightType) { - MAMapRouteHighLightTypeNone = 0, //!< 无高亮效果 - MAMapRouteHighLightTypeSegment //!< 有一段路高亮,其他路段非高亮显示 -}; - -@interface MARouteOverlayHighLightParam : NSObject -@property (nonatomic, assign) uint32_t fillColorHightLight; //!< 高亮路段的填充颜色 -@property (nonatomic, assign) uint32_t borderColorHightLight; //!< 高亮路段的边缘颜色 -@property (nonatomic, assign) uint32_t fillColorNormal; //!< 非高亮路段的填充颜色 -@property (nonatomic, assign) uint32_t borderColorNormal; //!< 非高亮路段的边缘颜色 -@property (nonatomic, assign) uint32_t arrowColorNormal; //!< 非高亮路段的鱼骨线颜色,高亮路段使用纹理原来的颜色 -@end - - -/** - * @brief 路线交通状态 - */ -@interface MAMapRouteOverlayTrafficState : NSObject -@property (nonatomic, assign) uint32_t state; //!< 路线状态 4B -@property (nonatomic, assign) uint32_t point2DIndex; //!< 二维起始坐标点索引 4B -@property (nonatomic, assign) uint32_t point3DIndex; //!< 三维起始坐标点索引 4B -@property (nonatomic, assign) uint32_t point3DCount; //!< 三维坐标点个数 4B -@end - -/** - * @brief 路线颜色 - */ -@interface MAMapRouteOverlayColorIndex : NSObject -@property (nonatomic, assign) uint32_t nColor; //!< 路线颜色(ARGB) -@property (nonatomic, assign) uint32_t point2DIndex; //!< 二维起始坐标点索引 (如无二维坐标) -@property (nonatomic, assign) uint32_t point3DIndex; //!< 三维起始坐标点索引 4B -@property (nonatomic, assign) uint32_t point3DCount; //!< 三维坐标点个数 4B -@end - -/** - * @brief 路线道路名称 - */ -@interface MAMapRouteOverlayRoadName : NSObject -@property (nonatomic, copy) NSString *name; //!< 道路名称字符串, UTF8编码 -@property (nonatomic, assign) uint32_t point2DIndex; //!< 道路对应的二维形点起始索引 4B -@property (nonatomic, assign) uint32_t point2DSize; //!< 道路对应的二维形点个数 4B -@property (nonatomic, assign) uint32_t point3DIndex; //!< 道路对应的三维形点起始索引 4B -@property (nonatomic, assign) uint32_t point3DSize; //!< 道路对应的三维形点个数 4B -@property (nonatomic, assign) uint32_t roadLength; //!< 道路长度 4B -@property (nonatomic, assign) uint32_t roadClass; //!< 道路等级 4B -@end - -@interface MAMapPoint2F : NSObject -@property (nonatomic, assign) CGFloat x; -@property (nonatomic, assign) CGFloat y; -@end - -@interface MAMapPoint3F : MAMapPoint2F -@property (nonatomic, assign) CGFloat z; -@end - -@interface MAMapRouteOverlayData : NSObject -@property (nonatomic, assign) uint32_t checkFlag; -@property (nonatomic, assign) uint32_t routeType; -@property (nonatomic, copy) NSArray *point2DArray; -@property (nonatomic, copy) NSArray *trafficStateArray; -@property (nonatomic, copy) NSArray *roadNameArray; -@property (nonatomic, copy) NSArray *point2DFlagArray; -@property (nonatomic, copy) NSArray *point3DArray; -@property (nonatomic, copy) NSArray *point3DFlagArray; -@property (nonatomic, copy) NSArray *colorIndexArray; -@end - -NS_ASSUME_NONNULL_END -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAShape.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAShape.h deleted file mode 100644 index 79e3ba2..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAShape.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// MAShape.h -// MAMapKit -// -// -// Copyright (c) 2011年 Amap. All rights reserved. -// - -#import "MAConfig.h" -#import -#import "MAAnnotation.h" -#import "MABaseOverlay.h" - -///该类为一个抽象类,定义了基于MAAnnotation的MAShape类的基本属性和行为,不能直接使用,必须子类化之后才能使用 -@interface MAShape : MABaseOverlay { - - NSString *_title; ///<标题 - NSString *_subtitle; ///<副标题 -} - -///标题 -@property (nonatomic, copy) NSString *title; - -///副标题 -@property (nonatomic, copy) NSString *subtitle; - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MATileOverlay.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MATileOverlay.h deleted file mode 100644 index 85a20d1..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MATileOverlay.h +++ /dev/null @@ -1,81 +0,0 @@ -// -// MATileOverlay.h -// MapKit_static -// -// Created by Li Fei on 11/22/13. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "MAConfig.h" -#if MA_INCLUDE_OVERLAY_TILE - -#import "MAOverlay.h" -#import "MABaseOverlay.h" - -///该类是覆盖在球面墨卡托投影上的图片tiles的数据源 -@interface MATileOverlay : MABaseOverlay - -///瓦片大小,默认是256x256, 最小支持64*64 -@property (nonatomic, assign) CGSize tileSize; - -///tileOverlay的可见最小Zoom值 -@property NSInteger minimumZ __attribute((deprecated("已废弃, 调用不起任何作用。since 9.6.0"))); - -///tileOverlay的可见最大Zoom值 -@property NSInteger maximumZ __attribute((deprecated("已废弃, 调用不起任何作用。since 9.6.0"))); - -///同initWithURLTemplate:中的URLTemplate -@property (readonly) NSString *URLTemplate; - -///暂未开放 -@property (nonatomic) BOOL canReplaceMapContent; - -///是否停止不在显示区域内的瓦片下载,默认NO. since 5.3.0 -@property (nonatomic, assign) BOOL disableOffScreenTileLoading; - -/** - * @brief 根据指定的URLTemplate生成tileOverlay - * @param URLTemplate URLTemplate是一个包含"{x}","{y}","{z}","{scale}"的字符串,"{x}","{y}","{z}","{scale}"会被tile path的值所替换,并生成用来加载tile图片数据的URL 。例如 http://server/path?x={x}&y={y}&z={z}&scale={scale} - * @return 以指定的URLTemplate字符串生成tileOverlay - */ -- (id)initWithURLTemplate:(NSString *)URLTemplate; - -@end - -///MATileOverlayPath -struct MATileOverlayPath{ - NSInteger x; ///< x坐标 - NSInteger y; ///< y坐标 - NSInteger z; ///< 缩放级别 - CGFloat contentScaleFactor; ///< 屏幕的scale factor - NSInteger index; ///< 对应的下载url - NSInteger requestId; ///<资源下载唯一标识,用于记录 -}; -typedef struct MATileOverlayPath MATileOverlayPath; - -///子类可覆盖CustomLoading中的方法来自定义加载MATileOverlay的行为。 -@interface MATileOverlay (CustomLoading) - -/** - * @brief 以tile path生成URL。用于加载tile,此方法默认填充URLTemplate - * @param path tile path - * @return 以tile path生成tileOverlay - */ -- (NSURL *)URLForTilePath:(MATileOverlayPath)path; - -/** - * @brief 加载被请求的tile,并以tile数据或加载tile失败error访问回调block;默认实现为首先用URLForTilePath去获取URL,然后用异步NSURLConnection加载tile - * @param path tile path - * @param result 用来传入tile数据或加载tile失败的error访问的回调block - */ -- (void)loadTileAtPath:(MATileOverlayPath)path result:(void (^)(NSData *tileData, NSError *error))result; - -/** - * @brief 取消请求瓦片,当地图显示区域发生变化时,会取消显示区域外的瓦片的下载, 当disableOffScreenTileLoading=YES时会被调用。since 5.3.0 - * @param path tile path - */ -- (void)cancelLoadOfTileAtPath:(MATileOverlayPath)path; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MATileOverlayRenderer.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MATileOverlayRenderer.h deleted file mode 100644 index 58a4f14..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MATileOverlayRenderer.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// MATileOverlayRenderer.h -// MapKit_static -// -// Created by Li Fei on 11/25/13. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "MAConfig.h" -#if MA_INCLUDE_OVERLAY_TILE - -#import "MAOverlayRenderer.h" -#import "MATileOverlay.h" - -///此类是将MAOverlayRenderer中的覆盖tiles显示在地图上的Renderer -@interface MATileOverlayRenderer : MAOverlayRenderer - -///覆盖在球面墨卡托投影上的图片tiles的数据源 -@property (nonatomic ,readonly) MATileOverlay *tileOverlay; - -/** - * @brief 根据指定的tileOverlay生成将tiles显示在地图上的Renderer - * @param tileOverlay 制定了覆盖图片 - * @return 以tileOverlay新生成Renderer - */ -- (instancetype)initWithTileOverlay:(MATileOverlay *)tileOverlay; - -/** - * @brief 清除所有tile的缓存,并刷新overlay - */ -- (void)reloadData; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MATouchPoi.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MATouchPoi.h deleted file mode 100644 index eb7186c..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MATouchPoi.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// MATouchPoi.h -// MapKit_static -// -// Created by songjian on 13-7-17. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "MAConfig.h" -#import -#import - -///MATouchPoi 定义 -@interface MATouchPoi : NSObject - -///名称 -@property (nonatomic, copy, readonly) NSString *name; - -///经纬度坐标 -@property (nonatomic, assign, readonly) CLLocationCoordinate2D coordinate; - -///poi的ID -@property (nonatomic, copy, readonly) NSString *uid; - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MATraceLocation.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MATraceLocation.h deleted file mode 100644 index 1097a8d..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MATraceLocation.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// MATraceLocation.h -// MAMapKit -// -// Created by shaobin on 16/9/1. -// Copyright © 2016年 Amap. All rights reserved. -// - - - -#import "MAConfig.h" - -#if MA_INCLUDE_TRACE_CORRECT - -#import -#import - -///返回轨迹点定义 -@interface MATracePoint : NSObject - -///纬度坐标 -@property (nonatomic, assign) CLLocationDegrees latitude; -///经度坐标 -@property (nonatomic, assign) CLLocationDegrees longitude; - -@end - -///传入轨迹点定义 -@interface MATraceLocation : NSObject - -///经纬度坐标 -@property (nonatomic, assign) CLLocationCoordinate2D loc; -///角度, 标识移动方向,单位度 -@property (nonatomic, assign) double angle; -///速度,单位km/h -@property (nonatomic, assign) double speed; -///时间,单位毫秒 -@property (nonatomic, assign) double time; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MATraceManager.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MATraceManager.h deleted file mode 100644 index c6bff4f..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MATraceManager.h +++ /dev/null @@ -1,104 +0,0 @@ -// -// MATraceManager.h -// MAMapKit -// -// Created by shaobin on 16/9/1. -// Copyright © 2016年 Amap. All rights reserved. -// - - - -#import "MAConfig.h" - -#if MA_INCLUDE_TRACE_CORRECT - -#import -#import -#import "MATraceLocation.h" - -@class MATraceManager; - -///处理中回调, index: 批次编号,0 based -typedef void(^MAProcessingCallback)(int index, NSArray *points); - -///成功回调,distance:距离,单位米 -typedef void(^MAFinishCallback)(NSArray *points, double distance); - -///失败回调 -typedef void(^MAFailedCallback)(int errorCode, NSString *errorDesc); - -///定位回调, locations: 原始定位点; tracePoints: 纠偏后的点,如果纠偏失败返回nil; distance:距离; error: 纠偏失败时的错误信息 -typedef void(^MATraceLocationCallback)(NSArray *locations, NSArray *tracePoints, double distance, NSError *error); - -/** - * @brief 轨迹定位的代理协议,since v6.2.0 -*/ -@protocol MATraceDelegate - -@required - -/** - * @brief 轨迹定位纠偏的回调方法,since v6.2.0 - * @param manager 轨迹定位管理对象 - * @param locations 已经完成纠偏的原始定位数据 - * @param tracePoints 已经完成纠偏处理后的轨迹点 - * @param distance 距离,单位米 - * @param error 如果成功的话为nil,否则为失败原因 - */ -- (void)traceManager:(MATraceManager *)manager - didTrace:(NSArray *)locations - correct:(NSArray *)tracePoints - distance:(double)distance - withError:(NSError *)error; - -@optional -/** - * @brief 当plist配置NSLocationAlwaysUsageDescription或者NSLocationAlwaysAndWhenInUseUsageDescription,并且[CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined,会调用代理的此方法。 - 此方法实现调用后台权限API即可( 该回调必须实现 [locationManager requestAlwaysAuthorization] ); since 6.8.1 - * @param locationManager 地图的CLLocationManager。 - */ -- (void)mapViewRequireLocationAuth:(CLLocationManager *)locationManager; - -@end - -///轨迹纠偏管理类 -@interface MATraceManager : NSObject - -/** - * @brief 单例方法 - */ -+ (instancetype)sharedInstance; - -/** - * @brief 获取纠偏后的经纬度点集 - * @param locations 待纠偏处理的点集, 顺序即为传入的顺序 - * @param type loctions经纬度坐标的类型, 如果已经是高德坐标系,传 -1 - * @param processingCallback 如果一次传入点过多,内部会分批处理。每处理完一批就调用此回调 - * @param finishCallback 全部处理完毕调用此回调 - * @param failedCallback 失败调用此回调 - * @return 返回一个NSOperation对象,可调用cancel取消 - */ -- (NSOperation *)queryProcessedTraceWith:(NSArray*)locations - type:(AMapCoordinateType)type - processingCallback:(MAProcessingCallback)processingCallback - finishCallback:(MAFinishCallback)finishCallback - failedCallback:(MAFailedCallback)failedCallback; - -/** - * @brief 轨迹定位的代理回调对象,配合start和stop方法使用,since v6.2.0 - */ -@property (nonatomic, weak) id delegate; - -/** - * @brief 开始轨迹定位, 内部使用系统CLLocationManager,distanceFilter,desiredAccuracy均为系统默认值,since v6.2.0 - */ -- (void)start; - -/** - * @brief 停止轨迹定位,since v6.2.0 - */ -- (void)stop; - -@end - -#endif diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAUserLocation.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAUserLocation.h deleted file mode 100644 index 42a1f05..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAUserLocation.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// MAUserLocation.h -// MAMapKit -// -// Created by yin cai on 12-1-4. -// Copyright © 2016 Amap. All rights reserved. -// - -#import "MAConfig.h" -#import -#import "MAAnimatedAnnotation.h" - -@class CLLocation; -@class CLHeading; - -///定位信息类 -@interface MAUserLocation : MAAnimatedAnnotation - -///位置更新状态,如果正在更新位置信息,则该值为YES -@property (readonly, nonatomic, getter = isUpdating) BOOL updating; - -///位置信息,如果MAMapView的showsUserLocation为NO,或者尚未定位成功,则该值为nil -@property (readonly, nonatomic, strong) CLLocation *location; - -///heading信息 -@property (readonly, nonatomic, strong) CLHeading *heading; - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAUserLocationRepresentation.h b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAUserLocationRepresentation.h deleted file mode 100644 index e9eb228..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Headers/MAUserLocationRepresentation.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// MAUserLocationRepresentation.h -// MAMapKit -// -// Created by shaobin on 16/12/27. -// Copyright © 2016年 Amap. All rights reserved. -// - -#import "MAConfig.h" -#import -#import - -#define kAccuracyCircleDefaultColor [UIColor colorWithRed:136/255.0 green:166/255.0 blue:227/255.0 alpha:.3] - -///用户位置显示样式控制 -@interface MAUserLocationRepresentation : NSObject - -///精度圈是否显示,默认YES -@property (nonatomic, assign) BOOL showsAccuracyRing; -///是否显示方向指示(MAUserTrackingModeFollowWithHeading模式开启)。默认为YES -@property (nonatomic, assign) BOOL showsHeadingIndicator; -///精度圈 填充颜色, 默认 kAccuracyCircleDefaultColor -@property (nonatomic, strong) UIColor *fillColor; -///精度圈 边线颜色, 默认 kAccuracyCircleDefaultColor -@property (nonatomic, strong) UIColor *strokeColor; -///精度圈 边线宽度,默认0 -@property (nonatomic, assign) CGFloat lineWidth; - -///定位点背景色,不设置默认白色 -@property (nonatomic, strong) UIColor *locationDotBgColor; -///定位点蓝色圆点颜色,不设置默认蓝色 -@property (nonatomic, strong) UIColor *locationDotFillColor; -///内部蓝色圆点是否使用律动效果, 默认YES -@property (nonatomic, assign) BOOL enablePulseAnnimation; -///定位图标, 与蓝色原点互斥 -@property (nonatomic, strong) UIImage* image; - -@end diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Info.plist b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Info.plist deleted file mode 100644 index e8d5183..0000000 Binary files a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Info.plist and /dev/null differ diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Modules/module.modulemap b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Modules/module.modulemap deleted file mode 100644 index 3c25784..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/Modules/module.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module AMapNaviKit { - umbrella header "AMapNaviKit.h" - export * - - module * { export * } -} diff --git a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/version.txt b/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/version.txt deleted file mode 100644 index 5bc9f26..0000000 --- a/Pods/AMapNavi-NO-IDFA/AMapNaviKit.framework/version.txt +++ /dev/null @@ -1,3 +0,0 @@ -10.0.800+3dmap.289bb2fe.1210 -10.0.800+3dcom.289bb2fe.1210 -10.0.800+navi.1641873.1210 diff --git a/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/AMapSearchKit b/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/AMapSearchKit deleted file mode 100644 index b322f67..0000000 Binary files a/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/AMapSearchKit and /dev/null differ diff --git a/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Headers/AMapCommonObj.h b/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Headers/AMapCommonObj.h deleted file mode 100644 index 9f75688..0000000 --- a/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Headers/AMapCommonObj.h +++ /dev/null @@ -1,925 +0,0 @@ -// -// AMapCommonObj.h -// AMapSearchKit -// -// Created by xiaoming han on 15/7/22. -// Copyright (c) 2015年 Amap. All rights reserved. -// - -/* 该文件定义了搜索结果的基础数据类型。*/ - -#import -#import - -#pragma mark - AMapSearchObject - -///搜索SDK基础类, 通用数据结构和response支持copy和coding(since 4.4.1)。 -@interface AMapSearchObject : NSObject - -/** - * @brief 返回格式化的描述信息。通用数据结构和response类型有效。 - */ -- (NSString *)formattedDescription; - -@end - -#pragma mark - 通用数据结构 - -///经纬度, description中格式为 <经度,纬度> -@interface AMapGeoPoint : AMapSearchObject -///纬度(垂直方向) -@property (nonatomic, assign) CGFloat latitude; -///经度(水平方向) -@property (nonatomic, assign) CGFloat longitude; - -/** - * @brief 实例化一个AMapGeoPoint对象 - * @param lat 纬度 - * @param lon 经度 - */ -+ (AMapGeoPoint *)locationWithLatitude:(CGFloat)lat longitude:(CGFloat)lon; -@end - -///多边形, 当传入两个点的时候,当做矩形处理:左下-右上两个顶点;其他情况视为多边形,几个点即为几边型。 -@interface AMapGeoPolygon : AMapSearchObject -///坐标集, AMapGeoPoint 数组 -@property (nonatomic, strong) NSArray *points; - -/** - * @brief 实例化一个多边形对象 - * @param points 坐标集, AMapGeoPoint 数组 - */ -+ (AMapGeoPolygon *)polygonWithPoints:(NSArray *)points; -@end - -@class AMapDistrict; -///城市 -@interface AMapCity : AMapSearchObject -///城市名称 -@property (nonatomic, copy) NSString *city; -///城市编码 -@property (nonatomic, copy) NSString *citycode; -///城市区域编码 -@property (nonatomic, copy) NSString *adcode; -///此区域的建议结果数目, AMapSuggestion 中使用 -@property (nonatomic, assign) NSInteger num; -///途径区域 AMapDistrict 数组,AMepStep中使用,只有name和adcode。 -@property (nonatomic, strong) NSArray *districts; -@end - -///建议信息 -@interface AMapSuggestion : AMapSearchObject -///NSString 数组 -@property (nonatomic, strong) NSArray *keywords; -///AMapCity 数组 -@property (nonatomic, strong) NSArray *cities; -@end - -#pragma mark - 输入提示 - -///输入提示 -@interface AMapTip : AMapSearchObject -///poi的id -@property (nonatomic, copy) NSString *uid; -///名称 -@property (nonatomic, copy) NSString *name; -///区域编码 -@property (nonatomic, copy) NSString *adcode; -///所属区域 -@property (nonatomic, copy) NSString *district; -///地址 -@property (nonatomic, copy) NSString *address; -///位置 -@property (nonatomic, copy) AMapGeoPoint *location; -///类型码, since 4.5.0. 对应描述可下载参考官网文档 http://a.amap.com/lbs/static/zip/AMap_API_Table.zip。 -@property (nonatomic, copy) NSString *typecode; -@end - -#pragma mark - POI - -///POI图片信息 -@interface AMapImage : AMapSearchObject -///标题 -@property (nonatomic, copy) NSString *title; -///url -@property (nonatomic, copy) NSString *url; -@end - -///POI扩展信息 -@interface AMapPOIExtension : AMapSearchObject -///评分 -@property (nonatomic, assign) CGFloat rating; -///人均消费 -@property (nonatomic, assign) CGFloat cost; -///营业时间 -@property (nonatomic, copy) NSString *openTime; -@end - -///POI室内地图信息 -@interface AMapIndoorData : AMapSearchObject -/// 是否有室内地图标志 1为有 0为没有 @since 9.4.0 -@property (nonatomic, assign) NSInteger indoorMap; -///楼层索引,一般会用数字表示,例如8。indoorMap为0时不返回 -@property (nonatomic, assign) NSInteger floor; -///所在楼层,一般会带有字母,例如F8。indoorMap为0时不返回 -@property (nonatomic, copy) NSString *floorName; -///如果当前POI为建筑物类POI,则cpid为自身POI ID;如果当前POI为商铺类POI,则cpid为其所在建筑物的POI ID。indoorMap为0时不返回 -@property (nonatomic, copy) NSString *pid; -@end - -///POI商圈信息 @since 9.4.0 -@interface AMapBusinessData : AMapSearchObject -///POI所属商圈 -@property (nonatomic, copy) NSString *businessArea; -///POI今日营业时间,如 08:30-17:30 08:30-09:00 12:00-13:30 09:00-13:00 -@property (nonatomic, copy) NSString *opentimeToday; -///POI营业时间描述,如 周一至周五:08:30-17:30(延时服务时间:08:30-09:00;12:00-13:30);周六延时服务时间:09:00-13:00(法定节假日除外) -@property (nonatomic, copy) NSString *opentimeWeek; -///POI的联系电话 -@property (nonatomic, copy) NSString *tel; -///POI特色内容,目前仅在美食POI下返回 -@property (nonatomic, copy) NSString *tag; -///POI评分,目前仅在餐饮、酒店、景点、影院类POI下返回 -@property (nonatomic, copy) NSString *rating; -///POI人均消费,目前仅在餐饮、酒店、景点、影院类POI下返回 -@property (nonatomic, copy) NSString *cost; -///停车场类型(地下、地面、路边),目前仅在停车场类POI下返回 -@property (nonatomic, copy) NSString *parkingType; -///POI的别名,无别名时不返回 -@property (nonatomic, copy) NSString *alias; -@end - -///子POI -@interface AMapSubPOI : AMapSearchObject -///POI全局唯一ID -@property (nonatomic, copy) NSString *uid; -///名称 -@property (nonatomic, copy) NSString *name; -///名称简写 -@property (nonatomic, copy) NSString *sname; -///经纬度 -@property (nonatomic, copy) AMapGeoPoint *location; -///地址 -@property (nonatomic, copy) NSString *address; -///距中心点距离 -@property (nonatomic, assign) NSInteger distance; -///子POI类型 -@property (nonatomic, copy) NSString *subtype; -///子POI分类编码 @since 9.4.0 -@property (nonatomic, copy) NSString *typeCode; -@end - -///沿途POI -@interface AMapRoutePOI : AMapSearchObject -///POI全局唯一ID -@property (nonatomic, copy) NSString *uid; -///名称 -@property (nonatomic, copy) NSString *name; -///经纬度 -@property (nonatomic, copy) AMapGeoPoint *location; -///用户起点经过途经点再到终点的距离,单位是米 -@property (nonatomic, assign) NSInteger distance; -///用户起点经过途经点再到终点的时间,单位为秒 -@property (nonatomic, assign) NSInteger duration; -@end - -///POI -@interface AMapPOI : AMapSearchObject -///POI全局唯一ID -@property (nonatomic, copy) NSString *uid; -///名称 -@property (nonatomic, copy) NSString *name; -///兴趣点类型 -@property (nonatomic, copy) NSString *type; -///类型编码 -@property (nonatomic, copy) NSString *typecode; -///经纬度 -@property (nonatomic, copy) AMapGeoPoint *location; -///地址 -@property (nonatomic, copy) NSString *address; -///电话 -@property (nonatomic, copy) NSString *tel; -///距中心点的距离,单位米。在周边搜索时有效 -@property (nonatomic, assign) NSInteger distance __attribute__((deprecated("已废弃, from 9.4.0"))); -///停车场类型,地上、地下、路边 -@property (nonatomic, copy) NSString *parkingType; -///商铺id -@property (nonatomic, copy) NSString *shopID; - -///邮编 -@property (nonatomic, copy) NSString *postcode; -///网址 -@property (nonatomic, copy) NSString *website; -///电子邮件 -@property (nonatomic, copy) NSString *email; -///省 -@property (nonatomic, copy) NSString *province; -///省编码 -@property (nonatomic, copy) NSString *pcode; -///城市名称 -@property (nonatomic, copy) NSString *city; -///城市编码 -@property (nonatomic, copy) NSString *citycode; -///区域名称 -@property (nonatomic, copy) NSString *district; -///区域编码 -@property (nonatomic, copy) NSString *adcode; -///POI对应的导航引导点坐标 @since 9.4.0 -@property (nonatomic, copy) NSString *naviPOIId; -///地理格ID -@property (nonatomic, copy) NSString *gridcode; -///入口经纬度 -@property (nonatomic, copy) AMapGeoPoint *enterLocation; -///出口经纬度 -@property (nonatomic, copy) AMapGeoPoint *exitLocation; -///方向 -@property (nonatomic, copy) NSString *direction; -///是否有室内地图 -@property (nonatomic, assign) BOOL hasIndoorMap; -///所在商圈 -@property (nonatomic, copy) NSString *businessArea; -///室内信息 -@property (nonatomic, strong) AMapIndoorData *indoorData; -///子POI列表 -@property (nonatomic, strong) NSArray *subPOIs; -///图片列表 -@property (nonatomic, strong) NSArray *images; -///所在商圈 @since 9.4.0 -@property (nonatomic, strong) AMapBusinessData *businessData; -///扩展信息只有在ID查询时有效 -@property (nonatomic, strong) AMapPOIExtension *extensionInfo; -@end - -#pragma mark - 逆地理编码 && 地理编码 - -///兴趣区域 -@interface AMapAOI : AMapSearchObject -///AOI全局唯一ID -@property (nonatomic, copy) NSString *uid; -///名称 -@property (nonatomic, copy) NSString *name; -///所在区域编码 -@property (nonatomic, copy) NSString *adcode; -///中心点经纬度 -@property (nonatomic, copy) AMapGeoPoint *location; -///面积,单位平方米 -@property (nonatomic, assign) CGFloat area; -@end - -///道路 -@interface AMapRoad : AMapSearchObject -///道路ID -@property (nonatomic, copy) NSString *uid; -///道路名称 -@property (nonatomic, copy) NSString *name; -///距离(单位:米) -@property (nonatomic, assign) NSInteger distance; -///方向 -@property (nonatomic, copy) NSString *direction; -///坐标点 -@property (nonatomic, copy) AMapGeoPoint *location; -@end - -///道路交叉口 -@interface AMapRoadInter : AMapSearchObject -///距离(单位:米) -@property (nonatomic, assign) NSInteger distance; -///方向 -@property (nonatomic, copy) NSString *direction; -///经纬度 -@property (nonatomic, copy) AMapGeoPoint *location; -///第一条道路ID -@property (nonatomic, copy) NSString *firstId; -///第一条道路名称 -@property (nonatomic, copy) NSString *firstName; -///第二条道路ID -@property (nonatomic, copy) NSString *secondId; -///第二条道路名称 -@property (nonatomic, copy) NSString *secondName; -@end - -///门牌信息 -@interface AMapStreetNumber : AMapSearchObject -///街道名称 -@property (nonatomic, copy) NSString *street; -///门牌号 -@property (nonatomic, copy) NSString *number; -///坐标点 -@property (nonatomic, copy) AMapGeoPoint *location; -///距离(单位:米) -@property (nonatomic, assign) NSInteger distance; -///方向 -@property (nonatomic, copy) NSString *direction; -@end - -///商圈 -@interface AMapBusinessArea : AMapSearchObject -///名称 -@property (nonatomic, strong) NSString *name; -///中心坐标 -@property (nonatomic, copy) AMapGeoPoint *location; -@end - -///地址组成要素 -@interface AMapAddressComponent : AMapSearchObject -///国家(since 5.7.0) -@property (nonatomic, copy) NSString *country; -///国家简码(since 7.4.0)仅海外生效 -@property (nonatomic, copy) NSString *countryCode; -///省/直辖市 -@property (nonatomic, copy) NSString *province; -///市 -@property (nonatomic, copy) NSString *city; -///城市编码 -@property (nonatomic, copy) NSString *citycode; -///区 -@property (nonatomic, copy) NSString *district; -///区域编码 -@property (nonatomic, copy) NSString *adcode; -///乡镇街道 -@property (nonatomic, copy) NSString *township; -///乡镇街道编码 -@property (nonatomic, copy) NSString *towncode; -///社区 -@property (nonatomic, copy) NSString *neighborhood; -///建筑 -@property (nonatomic, copy) NSString *building; -///门牌信息 -@property (nonatomic, strong) AMapStreetNumber *streetNumber; -///商圈列表 AMapBusinessArea 数组 -@property (nonatomic, strong) NSArray *businessAreas; -@end - -///逆地理编码 -@interface AMapReGeocode : AMapSearchObject -///格式化地址 -@property (nonatomic, copy) NSString *formattedAddress; -///地址组成要素 -@property (nonatomic, strong) AMapAddressComponent *addressComponent; - -///道路信息 AMapRoad 数组 -@property (nonatomic, strong) NSArray *roads; -///道路路口信息 AMapRoadInter 数组 -@property (nonatomic, strong) NSArray *roadinters; -///兴趣点信息 AMapPOI 数组 -@property (nonatomic, strong) NSArray *pois; -///兴趣区域信息 AMapAOI 数组 -@property (nonatomic, strong) NSArray *aois; -@end - -///地理编码 -@interface AMapGeocode : AMapSearchObject -///格式化地址 -@property (nonatomic, copy) NSString *formattedAddress; -///所在省/直辖市 -@property (nonatomic, copy) NSString *province; -///城市名 -@property (nonatomic, copy) NSString *city; -///城市编码 -@property (nonatomic, copy) NSString *citycode; -///区域名称 -@property (nonatomic, copy) NSString *district; -///区域编码 -@property (nonatomic, copy) NSString *adcode; -///乡镇街道 -@property (nonatomic, copy) NSString *township; -///社区 -@property (nonatomic, copy) NSString *neighborhood; -///楼 -@property (nonatomic, copy) NSString *building; -///坐标点 -@property (nonatomic, copy) AMapGeoPoint *location; -///匹配的等级 -@property (nonatomic, copy) NSString *level; -///国家(since 7.4.0)仅海外生效 -@property (nonatomic, copy) NSString *country; -///国家简码(since 7.4.0)仅海外生效 -@property (nonatomic, copy) NSString *postcode; -@end - -#pragma mark - 公交查询 -@class AMapBusLine; - -///公交站 -@interface AMapBusStop : AMapSearchObject -///公交站点ID -@property (nonatomic, copy) NSString *uid; -///区域编码 -@property (nonatomic, copy) NSString *adcode; -///公交站名 -@property (nonatomic, copy) NSString *name; -///城市编码 -@property (nonatomic, copy) NSString *citycode; -///经纬度坐标 -@property (nonatomic, copy) AMapGeoPoint *location; -///途径此站的公交路线 AMapBusLine 数组 -@property (nonatomic, strong) NSArray *buslines; -///查询公交线路时的第几站 -@property (nonatomic, copy) NSString *sequence; -@end - -///公交线路 -@interface AMapBusLine : AMapSearchObject -///公交线路ID -@property (nonatomic, copy) NSString *uid; -///公交类型 -@property (nonatomic, copy) NSString *type; -///公交线路名称 -@property (nonatomic, copy) NSString *name; -///坐标集合 -@property (nonatomic, copy) NSString *polyline; -///城市编码 -@property (nonatomic, copy) NSString *citycode; -///首发站 -@property (nonatomic, copy) NSString *startStop; -///终点站 -@property (nonatomic, copy) NSString *endStop; -///当查询公交站点时,返回的 AMapBusLine 中含有该字段 -@property (nonatomic, copy) AMapGeoPoint *location; - -///首班车时间 -@property (nonatomic, copy) NSString *startTime; -///末班车时间 -@property (nonatomic, copy) NSString *endTime; -///所属公交公司 -@property (nonatomic, copy) NSString *company; -///距离。在公交线路查询时,该值为此线路的全程距离,单位为千米; 在公交路径规划时,该值为乘坐此路公交车的行驶距离,单位为米 -@property (nonatomic, assign) CGFloat distance; -///起步价 -@property (nonatomic, assign) CGFloat basicPrice; -///全程票价 -@property (nonatomic, assign) CGFloat totalPrice; -///矩形区域左下、右上顶点坐标 -@property (nonatomic, copy) AMapGeoPolygon *bounds; -///本线路公交站 AMapBusStop 数组 -@property (nonatomic, strong) NSArray *busStops; - -///起程站 -@property (nonatomic, strong) AMapBusStop *departureStop; -///下车站 -@property (nonatomic, strong) AMapBusStop *arrivalStop; -///途径公交站 AMapBusStop 数组 -@property (nonatomic, strong) NSArray *viaBusStops; -///预计行驶时间(单位:秒) -@property (nonatomic, assign) NSInteger duration; -///此段途径公交站数 -@property (nonatomic, assign) NSInteger viaNum; - -@end - -#pragma mark - 行政区划 -///行政区划 -@interface AMapDistrict : AMapSearchObject -///区域编码 -@property (nonatomic, copy) NSString *adcode; -///城市编码 -@property (nonatomic, copy) NSString *citycode; -///行政区名称 -@property (nonatomic, copy) NSString *name; -///级别 -@property (nonatomic, copy) NSString *level; -///城市中心点 -@property (nonatomic, copy) AMapGeoPoint *center; -///下级行政区域数组 -@property (nonatomic, strong) NSArray *districts; -///行政区边界坐标点, NSString 数组 -@property (nonatomic, strong) NSArray *polylines; -@end - -#pragma mark - 路径规划 -///公交方案详细导航动作指令 -@interface AMapTransitNavi : AMapSearchObject -///导航主要动作指令 -@property (nonatomic, copy) NSString *action; -///导航辅助动作指令 -@property (nonatomic, copy) NSString *assistantAction; -///算路结果中存在的道路类型: -/* - *0,普通道路 1,人行横道 3,地下通道 4,过街天桥 - *5,地铁通道 6,公园 7,广场 8,扶梯 9,直梯 - *10,索道 11,空中通道 12,建筑物穿越通道 - *13,行人通道 14,游船路线 15,观光车路线 16,滑道 - *18,扩路 19,道路附属连接线 20,阶梯 21,斜坡 - *22,桥 23,隧道 30,轮渡 - */ -@property (nonatomic, copy) NSString *walkType; -@end - -///实时路况信息 -@interface AMapTMC : AMapSearchObject -///长度(单位:米) -@property (nonatomic, assign) NSInteger distance; -///路况状态描述:0 未知,1 畅通,2 缓行,3 拥堵,4 严重拥堵 -@property (nonatomic, copy) NSString *status; -///此路段坐标点串 -@property (nonatomic, copy) NSString *polyline; -@end - -///路段基本信息 -@interface AMapStep : AMapSearchObject -///行走指示 -@property (nonatomic, copy) NSString *instruction; -///方向 -@property (nonatomic, copy) NSString *orientation; -///道路名称 -@property (nonatomic, copy) NSString *road; -///此路段长度(单位:米) -@property (nonatomic, assign) NSInteger distance; -///此路段预计耗时(单位:秒) -@property (nonatomic, assign) NSInteger duration; -///此路段坐标点串 -@property (nonatomic, copy) NSString *polyline; -///导航主要动作 -@property (nonatomic, copy) NSString *action; -///导航辅助动作 -@property (nonatomic, copy) NSString *assistantAction; -///道路类型 -@property (nonatomic, assign) NSInteger walkType; -///此段收费(单位:元) -@property (nonatomic, assign) CGFloat tolls; -///收费路段长度(单位:米) -@property (nonatomic, assign) NSInteger tollDistance; -///主要收费路段 -@property (nonatomic, copy) NSString *tollRoad; -///此段交通信号灯个数 since 9.2.0 ( 只在算路2.0接口有效 ) -@property (nonatomic, assign) NSInteger totalTrafficLights; - -///途径城市 AMapCity 数组,只有驾车路径规划时有效 -@property (nonatomic, strong) NSArray *cities; -///路况信息数组,只有驾车路径规划时有效 -@property (nonatomic, strong) NSArray *tmcs; -@end - -///步行、骑行、驾车方案 -@interface AMapPath : AMapSearchObject -///起点和终点的距离 -@property (nonatomic, assign) NSInteger distance; -///预计耗时(单位:秒) -@property (nonatomic, assign) NSInteger duration; -///导航策略 -@property (nonatomic, copy) NSString *strategy; -///导航路段 AMapStep 数组 -@property (nonatomic, strong) NSArray *steps; -///此方案费用(单位:元) -@property (nonatomic, assign) CGFloat tolls; -///此方案收费路段长度(单位:米) -@property (nonatomic, assign) NSInteger tollDistance; -///此方案交通信号灯个数 -@property (nonatomic, assign) NSInteger totalTrafficLights; - -/** - 限行信息,仅在驾车和货车路径规划时有效。(since 6.0.0) - 驾车路径规划时: - 0 代表限行已规避或未限行; 1 代表限行无法规避。 - 货车路径规划时: - 0,未知(未输入完整/正确车牌号信息时候显示) - 1,已规避限行 - 2,起点限行 - 3,途径点在限行区域内(设置途径点才出现此报错) - 4,途径限行区域 - 5,终点限行 - */ -@property (nonatomic, assign) NSInteger restriction; -///规划路径完整坐标点串集合(since 7.4.0) -@property (nonatomic, copy) NSString *polyline; - -@end - -@interface AMapFutureTimeInfoElement : AMapSearchObject - -///总时长(分钟) -@property (nonatomic, assign) NSInteger duration; -///对应的路径规划方案中的路线 -@property (nonatomic, assign) NSInteger pathindex; -/** - 0:代表限行已规避或未限行,即该路线没有限行路段 - 1:代表限行无法规避,即该线路有限行路段 - */ -@property (nonatomic, assign) NSInteger restriction; -///路况信息数组,只会返回AMapTMC中的status、polyline -@property (nonatomic, strong) NSArray *tmcs; - -@end - -@interface AMapFutureTimeInfo : AMapSearchObject - -///出发时间 -@property (nonatomic, copy) NSString *startTime; -///路线列表 AMapFutureTimeInfoElement 数组 -@property (nonatomic, strong) NSArray *elements; -@end - -///步行换乘信息 -@interface AMapWalking : AMapSearchObject -///起点坐标 -@property (nonatomic, copy) AMapGeoPoint *origin; -///终点坐标 -@property (nonatomic, copy) AMapGeoPoint *destination; -///起点和终点的步行距离 -@property (nonatomic, assign) NSInteger distance; -///步行预计时间 -@property (nonatomic, assign) NSInteger duration; -///步行路段 AMapStep 数组 -@property (nonatomic, strong) NSArray *steps; -@end - -///出租车信息 -@interface AMapTaxi : AMapSearchObject -///起点坐标 -@property (nonatomic, copy) AMapGeoPoint *origin; -///终点坐标 -@property (nonatomic, copy) AMapGeoPoint *destination; -///距离,单位米 -@property (nonatomic, assign) NSInteger distance; -///耗时,单位秒 -@property (nonatomic, assign) NSInteger duration; -///起点名称 -@property (nonatomic, copy) NSString *sname; -///终点名称 -@property (nonatomic, copy) NSString *tname; -///打车预计花费金额 @singce 9.4.0 -@property (nonatomic, copy) NSString *price; -///线路点集合,通过show_fields控制返回与否 @singce 9.4.0 -@property (nonatomic, copy) NSString *polyline; -@end - -///火车站 -@interface AMapRailwayStation : AMapSearchObject -///火车站ID -@property (nonatomic, copy) NSString *uid; -///名称 -@property (nonatomic, copy) NSString *name; -///经纬度坐标 -@property (nonatomic, copy) AMapGeoPoint *location; -///区域编码 -@property (nonatomic, copy) NSString *adcode; -///发车、到站时间,途径站时则为进站时间 -@property (nonatomic, copy) NSString *time; -///途径站点的停靠时间,单位为分钟 -@property (nonatomic, assign) NSInteger wait; -///是否是始发站,为出发站时有效 -@property (nonatomic, assign) BOOL isStart; -///是否是终点站,为到达站时有效 -@property (nonatomic, assign) BOOL isEnd; -@end - -///火车仓位及价格信息 -@interface AMapRailwaySpace : AMapSearchObject -///类型,硬卧、硬座等 -@property (nonatomic, copy) NSString *code; -///票价,单位元 -@property (nonatomic, assign) CGFloat cost; -@end - -///火车信息 -@interface AMapRailway : AMapSearchObject -///火车线路ID -@property (nonatomic, copy) NSString *uid; -///名称 -@property (nonatomic, copy) NSString *name; -///车次 -@property (nonatomic, copy) NSString *trip; -///类型 -@property (nonatomic, copy) NSString *type; -///该换乘段行车总距离,单位为米 -@property (nonatomic, assign) NSInteger distance; -///该线路车段耗时,单位为秒 -@property (nonatomic, assign) NSInteger time; -///出发站 -@property (nonatomic, strong) AMapRailwayStation *departureStation; -///到达站 -@property (nonatomic, strong) AMapRailwayStation *arrivalStation; -///仓位及价格信息 -@property (nonatomic, strong) NSArray *spaces; - -///途径站点信息 -@property (nonatomic, strong) NSArray *viaStops; -///备选路线信息, 目前只有id和name -@property (nonatomic, strong) NSArray *alters; -@end - - -///公交换乘路段,如果walking和buslines同时有值,则是先walking后buslines -@interface AMapSegment : AMapSearchObject -///此路段步行导航信息 -@property (nonatomic, strong) AMapWalking *walking; -///此路段可供选择的不同公交线路 AMapBusLine 数组 -@property (nonatomic, strong) NSArray *buslines; -///出租车信息,跨城时有效 -@property (nonatomic, strong) AMapTaxi *taxi; -///火车信息,跨城时有效 -@property (nonatomic, strong) AMapRailway *railway; -///入口名称 -@property (nonatomic, copy) NSString *enterName; -///入口经纬度 -@property (nonatomic, copy) AMapGeoPoint *enterLocation; -///出口名称 -@property (nonatomic, copy) NSString *exitName; -///出口经纬度 -@property (nonatomic, copy) AMapGeoPoint *exitLocation; -@end - -///公交方案 -@interface AMapTransit : AMapSearchObject -///此公交方案价格(单位:元) -@property (nonatomic, assign) CGFloat cost; -///此换乘方案预期时间(单位:秒) -@property (nonatomic, assign) NSInteger duration; -///是否是夜班车 -@property (nonatomic, assign) BOOL nightflag; -///此方案总步行距离(单位:米) -@property (nonatomic, assign) NSInteger walkingDistance; -///换乘路段 AMapSegment 数组 -@property (nonatomic, strong) NSArray *segments; -///当前方案的总距离 -@property (nonatomic, assign) NSInteger distance; -@end - -///路径规划信息 -@interface AMapRoute : AMapSearchObject -///起点坐标 -@property (nonatomic, copy) AMapGeoPoint *origin; -///终点坐标 -@property (nonatomic, copy) AMapGeoPoint *destination; -///出租车费用(单位:元) -@property (nonatomic, assign) CGFloat taxiCost; -///步行、骑行、驾车方案列表 AMapPath 数组 -@property (nonatomic, strong) NSArray *paths; -///公交换乘方案列表 AMapTransit 数组 -@property (nonatomic, strong) NSArray *transits; -///详细导航动作指令 since 9.4.0 -@property (nonatomic, strong) AMapTransitNavi *transitNavi; -///分路段坐标点串,两点间用“,”分隔 since 9.4.0 -@property (nonatomic, copy) NSString *polyline; -@end - -///距离测量结果 -@interface AMapDistanceResult : AMapSearchObject -///起点坐标,起点坐标序列号(从1开始) -@property (nonatomic, assign) NSInteger originID; -///终点坐标,终点坐标序列号(从1开始) -@property (nonatomic, assign) NSInteger destID; -///路径距离,单位:米 -@property (nonatomic, assign) NSInteger distance; -///预计行驶时间,单位:秒 -@property (nonatomic, assign) NSInteger duration; -///错误信息,建议用此字段判断请求是否成功 -@property (nonatomic, copy) NSString *info; -///在驾车模式下有效。默认为0;1:指定地点之间没有可以行车的道路;2:起点/终点 距离所有道路均距离过远(例如在海洋/矿业);3;起点/终点不在中国境内; -@property (nonatomic, assign) NSInteger code; -@end - -#pragma mark - 天气查询 - -///实况天气,仅支持中国部分地区数据(台湾省目前没有数据)返回 -@interface AMapLocalWeatherLive : AMapSearchObject -///区域编码 -@property (nonatomic, copy) NSString *adcode; -///省份名 -@property (nonatomic, copy) NSString *province; -///城市名 -@property (nonatomic, copy) NSString *city; -///天气现象 -@property (nonatomic, copy) NSString *weather; -///实时温度 -@property (nonatomic, copy) NSString *temperature; -///风向 -@property (nonatomic, copy) NSString *windDirection; -///风力,单位:级 -@property (nonatomic, copy) NSString *windPower; -///空气湿度 -@property (nonatomic, copy) NSString *humidity; -///数据发布时间 -@property (nonatomic, copy) NSString *reportTime; -@end - -///某一天的天气预报信息 -@interface AMapLocalDayWeatherForecast : AMapSearchObject -///日期 -@property (nonatomic, copy) NSString *date; -///星期 -@property (nonatomic, copy) NSString *week; -///白天天气现象 -@property (nonatomic, copy) NSString *dayWeather; -///晚上天气现象 -@property (nonatomic, copy) NSString *nightWeather; -///白天温度 -@property (nonatomic, copy) NSString *dayTemp; -///晚上温度 -@property (nonatomic, copy) NSString *nightTemp; -///白天风向 -@property (nonatomic, copy) NSString *dayWind; -///晚上风向 -@property (nonatomic, copy) NSString *nightWind; -///白天风力 -@property (nonatomic, copy) NSString *dayPower; -///晚上风力 -@property (nonatomic, copy) NSString *nightPower; -@end - -///天气预报类,支持当前时间在内的3天的天气进行预报 -@interface AMapLocalWeatherForecast : AMapSearchObject -///区域编码 -@property (nonatomic, copy) NSString *adcode; -///省份名 -@property (nonatomic, copy) NSString *province; -///城市名 -@property (nonatomic, copy) NSString *city; -///数据发布时间 -@property (nonatomic, copy) NSString *reportTime; -///天气预报AMapLocalDayWeatherForecast数组 -@property (nonatomic, strong) NSArray *casts; -@end - -#pragma mark - 附近搜索 -///附近搜索返回的用户信息 -@interface AMapNearbyUserInfo : AMapSearchObject -///用户ID -@property (nonatomic, copy) NSString *userID; -///最后更新位置 -@property (nonatomic, copy) AMapGeoPoint *location; -///与搜索点的距离,由搜索时searchType决定 -@property (nonatomic, assign) CGFloat distance; -///最后更新的时间戳,单位秒 -@property (nonatomic, assign) NSTimeInterval updatetime; -@end - -#pragma mark - 交通态势 - -///道路路况评价 since 5.1.0 -@interface AMapTrafficEvaluation : AMapSearchObject -///综述 -@property (nonatomic, copy) NSString *evaluationDescription; -///0:未知;1:畅通;2:缓行;3:拥堵 -@property (nonatomic, assign) NSInteger status; -///畅通所占百分比 -@property (nonatomic, copy) NSString *expedite; -///缓行所占百分比 -@property (nonatomic, copy) NSString *congested; -///拥堵所占百分比 -@property (nonatomic, copy) NSString *blocked; -///未知路段所占百分比 -@property (nonatomic, copy) NSString *unknown; -@end - -///道路路况返回的道路信息 since 5.1.0 -@interface AMapTrafficRoad : AMapSearchObject -///道路名称 -@property (nonatomic, copy) NSString *name; -///0:未知;1:畅通;2:缓行;3:拥堵 -@property (nonatomic, assign) NSInteger status; -///方向描述 -@property (nonatomic, copy) NSString *direction; -///车行角度,判断道路正反向使用。 以正东方向为0度,逆时针方向为正,取值范围:[0,360] -@property (nonatomic, assign) float angle; -///速度 单位:千米/小时 -@property (nonatomic, assign) float speed; -///道路坐标集,经度和纬度使用","分隔,坐标之间使用";"分隔。例如:x1,y1;x2,y2 -@property (nonatomic, copy) NSString *polyline; -@end - -///道路路况信息 since 5.1.0 -@interface AMapTrafficInfo : AMapSearchObject -///路况综述 -@property (nonatomic, copy) NSString *statusDescription; -///路况评价 -@property (nonatomic, strong) AMapTrafficEvaluation *evaluation; -///道路信息 -@property (nonatomic, strong) NSArray* roads; - -@end - -#pragma mark - 企业地图基础数据类型 - -///POI点的图片信息 -@interface AMapCloudImage : AMapSearchObject -///图片的id标识 -@property (nonatomic, copy) NSString *uid; -///图片压缩后的url串 -@property (nonatomic, copy) NSString *preurl; -///图片原始的url -@property (nonatomic, copy) NSString *url; -@end - -///POI信息 -@interface AMapCloudPOI : AMapSearchObject -///唯一标识 -@property (nonatomic, assign) NSInteger uid; -///名称 -@property (nonatomic, copy) NSString *name; -///坐标位置 -@property (nonatomic, copy) AMapGeoPoint *location; -///地址 -@property (nonatomic, copy) NSString *address; -///用户自定义字段 -@property (nonatomic, strong) NSDictionary *customFields; -///创建时间 -@property (nonatomic, copy) NSString *createTime; -///更新时间 -@property (nonatomic, copy) NSString *updateTime; -///离当前位置的距离(只在企业地图周边搜索时有效) -@property (nonatomic, assign) NSInteger distance; -///图片信息 -@property (nonatomic, strong) NSArray *images __attribute((deprecated("已废弃 since 7.4.0"))); - -@end diff --git a/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Headers/AMapNearbySearchManager.h b/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Headers/AMapNearbySearchManager.h deleted file mode 100644 index 1d725f0..0000000 --- a/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Headers/AMapNearbySearchManager.h +++ /dev/null @@ -1,85 +0,0 @@ -// -// AMapNearbySearchManager.h -// AMapSearchKit -// -// Created by xiaoming han on 15/8/31. -// Copyright (c) 2015年 Amap. All rights reserved. -// - -#import -#import "AMapNearbyUploadInfo.h" - -@class AMapNearbySearchManager; - -///附近搜索代理 -@protocol AMapNearbySearchManagerDelegate -@optional - -/** - * @brief 开启自动上传,需实现该回调。 - */ -- (AMapNearbyUploadInfo *)nearbyInfoForUploading:(AMapNearbySearchManager *)manager; - -/** - * @brief 用户信息上传完毕回调。 - * @param error 错误,为空时表示成功。 - */ -- (void)onNearbyInfoUploadedWithError:(NSError *)error; - -/** - * @brief 用户信息清除完毕回调。 - * @param error 错误,为空时表示成功。 - */ -- (void)onUserInfoClearedWithError:(NSError *)error; - -@end - -///附近搜索管理类,同时只能有一个实例开启,否则可能会出现错误。 -@interface AMapNearbySearchManager : NSObject - -///上传最小间隔,默认15s,最小7s。自动上传的过程中设置无效。 -@property (nonatomic, assign) NSTimeInterval uploadTimeInterval; - -///代理对象。 -@property (nonatomic, weak) id delegate; - -///是否正在自动上传状态中。 -@property (nonatomic, readonly) BOOL isAutoUploading; - -/** - * @brief manager单例. - * 初始化之前请设置key,否则将无法正常使用该服务. - * @return nearbySearch实例。 - */ -+ (instancetype)sharedInstance; - -/** - * @brief 请使用单例。 - */ -- (instancetype)init __attribute__((unavailable)); - -/** - * @brief 启动自动上传。 - */ -- (void)startAutoUploadNearbyInfo; - -/** - * @brief 关闭自动上传。 - */ -- (void)stopAutoUploadNearbyInfo; - -/** - * @brief 执行单次上传,执行间隔不低于uploadTimeInterval最小值,否则执行失败。 - * @param info 需要上传的信息。 - * @return 成功执行返回YES,否则返回NO。 - */ -- (BOOL)uploadNearbyInfo:(AMapNearbyUploadInfo *)info __attribute((deprecated("已废弃 since 7.4.0,该功能不再支持"))); - -/** - * @brief 清除服务器上某一用户的信息。 - * @param userID 指定的用户ID - * @return 成功执行返回YES,否则返回NO。 - */ -- (BOOL)clearUserInfoWithID:(NSString *)userID __attribute((deprecated("已废弃 since 7.4.0,该功能不再支持"))); - -@end diff --git a/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Headers/AMapNearbyUploadInfo.h b/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Headers/AMapNearbyUploadInfo.h deleted file mode 100644 index d8d316b..0000000 --- a/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Headers/AMapNearbyUploadInfo.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// AMapNearbyUploadInfo.h -// AMapSearchKit -// -// Created by xiaoming han on 15/9/6. -// Copyright (c) 2015年 Amap. All rights reserved. -// - -#import -#import - -///上传经纬度类型 -typedef NS_ENUM(NSInteger, AMapSearchCoordinateType) -{ - AMapSearchCoordinateTypeGPS = 1, ///< 标准GPS坐标 - AMapSearchCoordinateTypeAMap = 2, ///< 高德坐标 -}; - - -///附近搜索上传信息 -@interface AMapNearbyUploadInfo : NSObject - -///用户唯一标识,不能为空,否则上传会失败. 长度不超过32字符,只能包含英文、数字、下划线、短横杠 -@property (nonatomic, copy) NSString *userID; - -///坐标类型,默认是 AMapSearchCoordinateTypeAMap -@property (nonatomic, assign) AMapSearchCoordinateType coordinateType; - -///用户位置经纬度。 -@property (nonatomic, assign) CLLocationCoordinate2D coordinate; - -@end diff --git a/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Headers/AMapSearchAPI.h b/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Headers/AMapSearchAPI.h deleted file mode 100644 index b78ea6f..0000000 --- a/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Headers/AMapSearchAPI.h +++ /dev/null @@ -1,375 +0,0 @@ -// -// AMapSearchAPI.h -// AMapSearchKit -// -// Created by xiaoming han on 15/7/22. -// Copyright (c) 2015年 Amap. All rights reserved. -// - -#import -#import "AMapSearchObj.h" -#import "AMapCommonObj.h" -#import - -@protocol AMapSearchDelegate; - -///搜索结果语言 -#define AMapSearchLanguageZhCN @"zh" ///< 中文 -#define AMapSearchLanguageEn @"en" ///< 英文 - -///搜索类 -@interface AMapSearchAPI : NSObject - -///实现了 AMapSearchDelegate 协议的类指针。 -@property (nonatomic, weak) id delegate; - -///查询超时时间,单位秒,默认为20秒。 -@property (nonatomic, assign) NSInteger timeout; - -///查询结果返回语言, 默认为中文。 -@property (nonatomic, copy) NSString *language; - -/** - * @brief AMapSearch的初始化函数。 - * 初始化之前请正确设置key,否则将无法正常使用搜索服务. - * @return AMapSearch类对象实例 - */ -- (instancetype)init; - -/** - * @brief 取消所有未回调的请求,触发错误回调。 - */ -- (void)cancelAllRequests; - -#pragma mark - Privacy 隐私合规 -/** - * @brief 更新App是否显示隐私弹窗的状态,隐私弹窗是否包含高德SDK隐私协议内容的状态. since 8.1.0 - * @param showStatus 隐私弹窗状态 - * @param containStatus 包含高德SDK隐私协议状态 - */ -+ (void)updatePrivacyShow:(AMapPrivacyShowStatus)showStatus privacyInfo:(AMapPrivacyInfoStatus)containStatus; -/** -* @brief 更新用户授权高德SDK隐私协议状态. since 8.1.0 -* @param agreeStatus 用户授权高德SDK隐私协议状态 -*/ -+ (void)updatePrivacyAgree:(AMapPrivacyAgreeStatus)agreeStatus; - - -#pragma mark - 搜索服务接口 - -/** - * @brief POI ID查询接口 - * @param request 查询选项。具体属性字段请参考 AMapPOIIDSearchRequest 类。 - */ -- (void)AMapPOIIDSearch:(AMapPOIIDSearchRequest *)request; - -/** - * @brief POI 关键字查询接口 - * @param request 查询选项。具体属性字段请参考 AMapPOIKeywordsSearchRequest 类。 - */ -- (void)AMapPOIKeywordsSearch:(AMapPOIKeywordsSearchRequest *)request; - -/** - * @brief POI 周边查询接口 - * @param request 查询选项。具体属性字段请参考 AMapPOIAroundSearchRequest 类。 - */ -- (void)AMapPOIAroundSearch:(AMapPOIAroundSearchRequest *)request; - -/** - * @brief POI 多边形查询接口 - * @param request 查询选项。具体属性字段请参考 AMapPOIPolygonSearchRequest 类。 - */ -- (void)AMapPOIPolygonSearch:(AMapPOIPolygonSearchRequest *)request; - -/** - * @brief 沿途查询接口 (v4.3.0) - * @param request 查询选项。具体属性字段请参考 AMapRoutePOISearchRequest 类。 - */ -- (void)AMapRoutePOISearch:(AMapRoutePOISearchRequest *)request; - -/** - * @brief 地址编码查询接口 - * @param request 查询选项。具体属性字段请参考 AMapGeocodeSearchRequest 类。 - */ -- (void)AMapGeocodeSearch:(AMapGeocodeSearchRequest *)request; - -/** - * @brief 逆地址编码查询接口 - * @param request 查询选项。具体属性字段请参考 AMapReGeocodeSearchRequest 类。 - */ -- (void)AMapReGoecodeSearch:(AMapReGeocodeSearchRequest *)request; - -/** - * @brief 输入提示查询接口 - * @param request 查询选项。具体属性字段请参考 AMapInputTipsSearchRequest 类。 - */ -- (void)AMapInputTipsSearch:(AMapInputTipsSearchRequest *)request; - -/** - * @brief 公交站点查询接口 - * @param request 查询选项。具体属性字段请参考 AMapBusStopSearchRequest 类。 - */ -- (void)AMapBusStopSearch:(AMapBusStopSearchRequest *)request; - -/** - * @brief 公交线路关键字查询 - * @param request 查询选项。具体属性字段请参考 AMapBusLineIDSearchRequest 类。 - */ -- (void)AMapBusLineIDSearch:(AMapBusLineIDSearchRequest *)request; - -/** - * @brief 公交线路关键字查询 - * @param request 查询选项。具体属性字段请参考 AMapBusLineNameSearchRequest 类。 - */ -- (void)AMapBusLineNameSearch:(AMapBusLineNameSearchRequest *)request; - -/** - * @brief 行政区域查询接口 - * @param request 查询选项。具体属性字段请参考 AMapDistrictSearchRequest 类。 - */ -- (void)AMapDistrictSearch:(AMapDistrictSearchRequest *)request; - -/** - * @brief 驾车路径规划V2.0查询接口 - * @param request 查询选项。具体属性字段请参考 AMapDrivingCalRouteSearchRequest 类。 - */ -- (void)AMapDrivingV2RouteSearch:(AMapDrivingCalRouteSearchRequest *)request; - -/** - * @brief 步行路径规划查询接口 - * @param request 查询选项。具体属性字段请参考 AMapWalkingRouteSearchRequest 类。 - */ -- (void)AMapWalkingRouteSearch:(AMapWalkingRouteSearchRequest *)request; - -/** - * @brief 公交路径规划查询接口 - * @param request 查询选项。具体属性字段请参考 AMapTransitRouteSearchRequest 类。 - */ -- (void)AMapTransitRouteSearch:(AMapTransitRouteSearchRequest *)request; - -/** - * @brief 骑行路径规划查询接口 (since 4.3.0) - * @param request 查询选项。具体属性字段请参考 AMapRidingRouteSearchRequest 类。 - */ -- (void)AMapRidingRouteSearch:(AMapRidingRouteSearchRequest *)request; - -/** - * @brief 货车路径规划查询接口 (since 6.1.0) - * @param request 查询选项。具体属性字段请参考 AMapTruckRouteSearchRequest 类。 - */ -- (void)AMapTruckRouteSearch:(AMapTruckRouteSearchRequest *)request; - -/** - * @brief 未来路线规划查询接口 (since 6.9.0) - * @param request 查询选项。具体属性字段请参考 AMapTruckRouteSearchRequest 类。 - */ -- (void)AMapFutureRouteSearch:(AMapFutureRouteSearchRequest *)request; - -/** - * @brief 天气查询接口 - * @param request 查询选项。具体属性字段请参考 AMapWeatherSearchRequest 类。 - */ -- (void)AMapWeatherSearch:(AMapWeatherSearchRequest *)request; - -/** - * @brief 距离查询(since 6.1.0) - * @param request 查询选项。具体属性字段请参考 AMapDistanceSearchRequest 类。 - */ -- (void)AMapDistanceSearch:(AMapDistanceSearchRequest *)request; - -- (void)AMapChargeStationSearch:(AMapChargeStationSearchRequest *)request; -#pragma mark - 附近搜索相关 - -/** - * @brief 附近搜索查询接口 - * @param request 查询选项。具体属性字段请参考 AMapNearbySearchRequest 类。 - */ -- (void)AMapNearbySearch:(AMapNearbySearchRequest *)request __attribute__((deprecated("已废弃, from 7.4.0,该功能不再支持"))); - -#pragma mark - 企业地图搜索相关 - -/** - * @brief 企业地图周边查询接口 - * @param request 查询选项。具体属性字段请参考 AMapCloudPOIAroundSearchRequest 类。 - */ -- (void)AMapCloudPOIAroundSearch:(AMapCloudPOIAroundSearchRequest *)request; - -/** - * @brief 企业地图polygon区域查询接口 - * @param request 查询选项。具体属性字段请参考 AMapCloudPOIPolygonSearchRequest 类。 - */ -- (void)AMapCloudPOIPolygonSearch:(AMapCloudPOIPolygonSearchRequest *)request; - -/** - * @brief 企业地图ID查询接口 - * @param request 查询选项。具体属性字段请参考 AMapCloudPOIIDSearchRequest 类。 - */ -- (void)AMapCloudPOIIDSearch:(AMapCloudPOIIDSearchRequest *)request; - -/** - * @brief 企业地图本地查询接口 - * @param request 查询选项。具体属性字段请参考 AMapCloudPOILocalSearchRequest 类。 - */ -- (void)AMapCloudPOILocalSearch:(AMapCloudPOILocalSearchRequest *)request; - -#pragma mark - 短串分享相关 - -/** - * @brief 位置短串分享接口 - * @param request 查询选项。具体属性字段请参考 AMapLocationShareSearchRequest 类。 - */ -- (void)AMapLocationShareSearch:(AMapLocationShareSearchRequest *)request; - -/** - * @brief 兴趣点短串分享接口 - * @param request 查询选项。具体属性字段请参考 AMapPOIShareSearchRequest 类。 - */ -- (void)AMapPOIShareSearch:(AMapPOIShareSearchRequest *)request; - -/** - * @brief 路线规划短串分享接口 - * @param request 查询选项。具体属性字段请参考 AMapRouteShareSearchRequest 类。 - */ -- (void)AMapRouteShareSearch:(AMapRouteShareSearchRequest *)request; - -/** - * @brief 导航短串分享接口 - * @param request 查询选项。具体属性字段请参考 AMapNavigationShareSearchRequest 类。 - */ -- (void)AMapNavigationShareSearch:(AMapNavigationShareSearchRequest *)request; - -@end - -#pragma mark - AMapSearchDelegate - -///AMapSearchDelegate协议, 定义了搜索结果的回调方法,发生错误时的错误回调方法。 -@protocol AMapSearchDelegate -@optional - -/** - * @brief 当请求发生错误时,会调用代理的此方法. - * @param request 发生错误的请求. - * @param error 返回的错误. - */ -- (void)AMapSearchRequest:(id)request didFailWithError:(NSError *)error; - -/** - * @brief POI查询回调函数 - * @param request 发起的请求,具体字段参考 AMapPOISearchBaseRequest 及其子类。 - * @param response 响应结果,具体字段参考 AMapPOISearchResponse 。 - */ -- (void)onPOISearchDone:(AMapPOISearchBaseRequest *)request response:(AMapPOISearchResponse *)response; - -/** - * @brief 沿途查询回调函数 (since v4.3.0) - * @param request 发起的请求,具体字段参考 AMapRoutePOISearchRequest 及其子类。 - * @param response 响应结果,具体字段参考 AMapRoutePOISearchResponse 。 - */ -- (void)onRoutePOISearchDone:(AMapRoutePOISearchRequest *)request response:(AMapRoutePOISearchResponse *)response; - -/** - * @brief 地理编码查询回调函数 - * @param request 发起的请求,具体字段参考 AMapGeocodeSearchRequest 。 - * @param response 响应结果,具体字段参考 AMapGeocodeSearchResponse 。 - */ -- (void)onGeocodeSearchDone:(AMapGeocodeSearchRequest *)request response:(AMapGeocodeSearchResponse *)response; - -/** - * @brief 逆地理编码查询回调函数 - * @param request 发起的请求,具体字段参考 AMapReGeocodeSearchRequest 。 - * @param response 响应结果,具体字段参考 AMapReGeocodeSearchResponse 。 - */ -- (void)onReGeocodeSearchDone:(AMapReGeocodeSearchRequest *)request response:(AMapReGeocodeSearchResponse *)response; - -/** - * @brief 输入提示查询回调函数 - * @param request 发起的请求,具体字段参考 AMapInputTipsSearchRequest 。 - * @param response 响应结果,具体字段参考 AMapInputTipsSearchResponse 。 - */ -- (void)onInputTipsSearchDone:(AMapInputTipsSearchRequest *)request response:(AMapInputTipsSearchResponse *)response; - -/** - * @brief 公交站查询回调函数 - * @param request 发起的请求,具体字段参考 AMapBusStopSearchRequest 。 - * @param response 响应结果,具体字段参考 AMapBusStopSearchResponse 。 - */ -- (void)onBusStopSearchDone:(AMapBusStopSearchRequest *)request response:(AMapBusStopSearchResponse *)response; - -/** - * @brief 公交线路关键字查询回调 - * @param request 发起的请求,具体字段参考 AMapBusLineSearchRequest 。 - * @param response 响应结果,具体字段参考 AMapBusLineSearchResponse 。 - */ -- (void)onBusLineSearchDone:(AMapBusLineBaseSearchRequest *)request response:(AMapBusLineSearchResponse *)response; - -/** - * @brief 行政区域查询回调函数 - * @param request 发起的请求,具体字段参考 AMapDistrictSearchRequest 。 - * @param response 响应结果,具体字段参考 AMapDistrictSearchResponse 。 - */ -- (void)onDistrictSearchDone:(AMapDistrictSearchRequest *)request response:(AMapDistrictSearchResponse *)response; - -/** - * @brief 路径规划查询回调 - * @param request 发起的请求,具体字段参考 AMapRouteSearchBaseRequest 及其子类。 - * @param response 响应结果,具体字段参考 AMapRouteSearchResponse 。 - */ -- (void)onRouteSearchDone:(AMapRouteSearchBaseRequest *)request response:(AMapRouteSearchResponse *)response; - -/** - * @brief 未来路径规划查询回调 since 6.9.0 - * @param request 发起的请求,具体字段参考 AMapRouteSearchBaseRequest 及其子类。 - * @param response 响应结果,具体字段参考 AMapRouteSearchResponse 。 - */ -- (void)onFutureRouteSearchDone:(AMapRouteSearchBaseRequest *)request response:(AMapFutureRouteSearchResponse *)response; - -/** - * @brief 距离查询回调 - * @param request 发起的请求,具体字段参考 AMapDistanceSearchRequest 及其子类。 - * @param response 响应结果,具体字段参考 AMapDistanceSearchResponse 。 - */ -- (void)onDistanceSearchDone:(AMapDistanceSearchRequest *)request response:(AMapDistanceSearchResponse *)response; - -/** - * @brief 天气查询回调 - * @param request 发起的请求,具体字段参考 AMapWeatherSearchRequest 。 - * @param response 响应结果,具体字段参考 AMapWeatherSearchResponse 。 - */ -- (void)onWeatherSearchDone:(AMapWeatherSearchRequest *)request response:(AMapWeatherSearchResponse *)response; - -#pragma mark - 附近搜索回调 - -/** - * @brief 附近搜索回调 - * @param request 发起的请求,具体字段参考 AMapNearbySearchRequest 。 - * @param response 响应结果,具体字段参考 AMapNearbySearchResponse 。 - */ -- (void)onNearbySearchDone:(AMapNearbySearchRequest *)request response:(AMapNearbySearchResponse *)response; - -#pragma mark - 企业地图搜索回调 - -/** - * @brief 企业地图查询回调函数 - * @param request 发起的请求,具体字段参考 AMapCloudSearchBaseRequest 。 - * @param response 响应结果,具体字段参考 AMapCloudPOISearchResponse 。 - */ -- (void)onCloudSearchDone:(AMapCloudSearchBaseRequest *)request response:(AMapCloudPOISearchResponse *)response; - -#pragma mark - 短串分享搜索回调 - -/** - * @brief 短串分享搜索回调 - * @param request 发起的请求 - * @param response 相应结果,具体字段参考 AMapShareSearchResponse。 - */ -- (void)onShareSearchDone:(AMapShareSearchBaseRequest *)request response:(AMapShareSearchResponse *)response; - -#pragma mark - 车机充电站搜索回调 - -/** - * @brief 车机充电站搜索回调 - * @param request 发起的请求 - * @param response 相应结果,具体字段参考 AMapShareSearchResponse。 - */ -- (void)onChargeStationSearchDone:(AMapChargeStationSearchRequest *)request response:(AMapChargeStationSearchResponse *)response; -@end diff --git a/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Headers/AMapSearchError.h b/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Headers/AMapSearchError.h deleted file mode 100644 index 2b4e758..0000000 --- a/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Headers/AMapSearchError.h +++ /dev/null @@ -1,80 +0,0 @@ -// -// AMapSearchError.h -// AMapSearchKit -// -// Created by xiaoming han on 15/7/29. -// Copyright (c) 2015年 Amap. All rights reserved. -// - -#ifndef AMapSearchKit_AMapSearchError_h -#define AMapSearchKit_AMapSearchError_h - -///AMapSearch errorDomain -extern NSString * const AMapSearchErrorDomain; - -///注意:增加errorCode时,需增加code对应详细说明信息errorInfoWithCode -///AMapSearch errorCode -typedef NS_ENUM(NSInteger, AMapSearchErrorCode) -{ - AMapSearchErrorOK = 1000,///< 没有错误 - AMapSearchErrorInvalidSignature = 1001,///< 无效签名 - AMapSearchErrorInvalidUserKey = 1002,///< key非法或过期 - AMapSearchErrorServiceNotAvailable = 1003,///< 没有权限使用相应的接口 - AMapSearchErrorDailyQueryOverLimit = 1004,///< 访问已超出日访问量 - AMapSearchErrorTooFrequently = 1005,///< 用户访问过于频繁 - AMapSearchErrorInvalidUserIP = 1006,///< 用户IP无效 - AMapSearchErrorInvalidUserDomain = 1007,///< 用户域名无效 - AMapSearchErrorInvalidUserSCode = 1008,///< 安全码验证错误,bundleID与key不对应 - AMapSearchErrorUserKeyNotMatch = 1009,///< 请求key与绑定平台不符 - AMapSearchErrorIPQueryOverLimit = 1010,///< IP请求超限 - AMapSearchErrorNotSupportHttps = 1011,///< 不支持HTTPS请求 - AMapSearchErrorInsufficientPrivileges = 1012,///< 权限不足,服务请求被拒绝 - AMapSearchErrorUserKeyRecycled = 1013,///< 开发者key被删除,无法正常使用 - - AMapSearchErrorInvalidResponse = 1100,///< 请求服务响应错误 - AMapSearchErrorInvalidEngineData = 1101,///< 引擎返回数据异常 - AMapSearchErrorConnectTimeout = 1102,///< 服务端请求链接超时 - AMapSearchErrorReturnTimeout = 1103,///< 读取服务结果超时 - AMapSearchErrorInvalidParams = 1200,///< 请求参数非法 - AMapSearchErrorMissingRequiredParams = 1201,///< 缺少必填参数 - AMapSearchErrorIllegalRequest = 1202,///< 请求协议非法 - AMapSearchErrorServiceUnknown = 1203,///< 其他服务端未知错误 - - AMapSearchErrorClientUnknown = 1800,///< 客户端未知错误,服务返回结果为空或其他错误 - AMapSearchErrorInvalidProtocol = 1801,///< 协议解析错误,通常是返回结果无法解析 - AMapSearchErrorTimeOut = 1802,///< 连接超时 - AMapSearchErrorBadURL = 1803,///< URL异常 - AMapSearchErrorCannotFindHost = 1804,///< 找不到主机 - AMapSearchErrorCannotConnectToHost = 1805,///< 服务器连接失败 - AMapSearchErrorNotConnectedToInternet = 1806,///< 连接异常,通常为没有网络的情况 - AMapSearchErrorCancelled = 1807,///< 连接取消 - - AMapSearchErrorOverPassPointCount = 1809,///< 途经点个数超限 - AMapSearchErrorOverPassAreaMaxCount = 1810,///< 避让区域个数超限 - AMapSearchErrorOverPassAreaMaxArea = 1811,///< 避让区域大小超限 - AMapSearchErrorOverPassAreaPointCount = 1812,///< 避让区域点个数超限 - AMapSearchErrorOverPassKeyWordLenth = 1813,///< 搜索关键字长度超限 - - AMapSearchErrorTableIDNotExist = 2000,///< table id 格式不正确 - AMapSearchErrorIDNotExist = 2001,///< id 不存在 - AMapSearchErrorServiceMaintenance = 2002,///< 服务器维护中 - AMapSearchErrorEngineTableIDNotExist = 2003,///< key对应的table id 不存在 - AMapSearchErrorInvalidNearbyUserID = 2100,///< 找不到对应userID的信息 - AMapSearchErrorNearbyKeyNotBind = 2101,///< key未开通“附近”功能 - - AMapSearchErrorOutOfService = 3000,///< 规划点(包括起点、终点、途经点)不在中国范围内 - AMapSearchErrorNoRoadsNearby = 3001,///< 规划点(包括起点、终点、途经点)附近搜不到道路 - AMapSearchErrorRouteFailed = 3002,///< 路线计算失败,通常是由于道路连通关系导致 - AMapSearchErrorOverDirectionRange = 3003,///< 起点终点距离过长 - - AMapSearchErrorShareLicenseExpired = 4000,///< 短串分享认证失败 - AMapSearchErrorShareFailed = 4001,///< 短串请求失败 -}; - -@interface AMapSearchError : NSObject - -///错误码所对应详细信息 -+ (NSString *)errorInfoWithCode:(AMapSearchErrorCode)errorCode; - -@end -#endif diff --git a/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Headers/AMapSearchKit.h b/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Headers/AMapSearchKit.h deleted file mode 100644 index ed46e5c..0000000 --- a/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Headers/AMapSearchKit.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// AMapSearchKit.h -// AMapSearchKit -// -// Created by xiaoming han on 15/7/22. -// Copyright (c) 2015年 Amap. All rights reserved. -// - -#import -#import -#import -#import -#import -#import - -#import diff --git a/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Headers/AMapSearchObj.h b/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Headers/AMapSearchObj.h deleted file mode 100644 index bfefe43..0000000 --- a/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Headers/AMapSearchObj.h +++ /dev/null @@ -1,817 +0,0 @@ -// -// AMapSearchObj.h -// AMapSearchKit -// -// Created by xiaoming han on 15/7/22. -// Copyright (c) 2015年 Amap. All rights reserved. -// - -/* 该文件定义了搜索请求和返回对象。*/ - -#import -#import "AMapCommonObj.h" - -///沿途搜索类型 -typedef NS_ENUM(NSInteger, AMapRoutePOISearchType) -{ - AMapRoutePOISearchTypeGasStation = 0, ///< 加油站 - AMapRoutePOISearchTypeMaintenanceStation = 1, ///< 维修站 - AMapRoutePOISearchTypeATM = 2, ///< ATM - AMapRoutePOISearchTypeToilet = 3, ///< 厕所 - AMapRoutePOISearchTypeGasAirStation = 4, ///< 加气站 - AMapRoutePOISearchTypeParkStation = 5, ///< 服务区 - AMapRoutePOISearchTypeChargingPile = 6, ///< 充电桩 - AMapRoutePOISearchTypeFood = 7, ///< 美食 - AMapRoutePOISearchTypeHotel = 8, ///< 酒店 -}; - -///天气查询类型 -typedef NS_ENUM(NSInteger, AMapWeatherType) -{ - AMapWeatherTypeLive = 1, ///< 实时 - AMapWeatherTypeForecast ///< 预报 -}; - -///企业地图搜索结果排序 -typedef NS_ENUM(NSInteger, AMapCloudSortType) -{ - AMapCloudSortTypeDESC = 0, ///< 降序 - AMapCloudSortTypeASC = 1 ///< 升序 -}; - -///附近搜索距离类型 -typedef NS_ENUM(NSInteger, AMapNearbySearchType) -{ - AMapNearbySearchTypeLiner = 0, ///< 直线距离 - AMapNearbySearchTypeDriving = 1, ///< 驾车行驶距离 -}; - -///货车类型 -typedef NS_ENUM(NSInteger, AMapTruckSizeType) -{ - AMapTruckSizeTypeMini = 1, ///< 微型车 - AMapTruckSizeTypeLight = 2, ///< 轻型车 - AMapTruckSizeTypeMedium = 3, ///< 中型车 - AMapTruckSizeTypeHeavy = 4, ///< 重型车 -}; - -///规避道路类型 -typedef NS_ENUM(NSInteger, AMapDrivingRouteExcludeType) -{ - AMapDrivingRouteExcludeTypeNone = 0, ///< 不规避 - AMapDrivingRouteExcludeTypeToll = 1, ///< 收费道路 - AMapDrivingRouteExcludeTypeMotorway = 2, ///< 高速路 - AMapDrivingRouteExcludeTypeFerry = 3, ///< 渡船 -}; - -///规避道路类型 @since 9.2.0 -typedef NS_ENUM(NSUInteger, AMapDrivingRouteShowFieldType) -{ - AMapDrivingRouteShowFieldTypeNone = 1 << 0, ///< 不返回扩展信息 - AMapDrivingRouteShowFieldTypeCost = 1 << 1, ///< 返回方案所需时间及费用成本 - AMapDrivingRouteShowFieldTypeTmcs = 1 << 2, ///< 返回分段路况详情 - AMapDrivingRouteShowFieldTypeNavi = 1 << 3, ///< 返回详细导航动作指令 - AMapDrivingRouteShowFieldTypeCities = 1 << 4, ///< 返回分段途径城市信息 - AMapDrivingRouteShowFieldTypePolyline = 1 << 5, ///< 返回分段路坐标点串,两点间用“,”分隔 - AMapDrivingRouteShowFieldTypeNewEnergy = 1 << 6,///< 返回分段路坐标点串,两点间用“,”分隔 - AMapDrivingRouteShowFieldTypeAll = ~0UL, ///< 返回所有扩展信息 -}; - -///步行路线规划返回结果控制 @since 9.4.0 -typedef NS_ENUM(NSUInteger, AMapWalkingRouteShowFieldType) -{ - AMapWalkingRouteShowFieldTypeNone = 0 << 0, ///< 不返回扩展信息 - AMapWalkingRouteShowFieldTypeCost = 1 << 0, ///< 返回方案所需时间及费用成本 - AMapWalkingRouteShowFieldTypeNavi = 1 << 1, ///< 返回详细导航动作指令 - AMapWalkingRouteShowFieldTypePolyline = 1 << 2, ///< 返回分路段坐标点串,两点间用“,”分隔 - AMapWalkingRouteShowFieldTypeAll = ~0UL, ///< 返回所有扩展信息 -}; - -///公交车路线规划返回结果控制 @since 9.4.0 -typedef NS_OPTIONS(NSUInteger, AMapTransitRouteShowFieldsType) -{ - AMapTransitRouteShowFieldsTypeNone = 1 << 0, ///< 不返回扩展信息 - AMapTransitRouteShowFieldsTypeCost = 1 << 1, ///< 返回方案所需时间及费用成本 - AMapTransitRouteShowFieldsTypeNavi = 1 << 2, ///< 返回详细导航动作指令 - AMapTransitRouteShowFieldsTypePolyline = 1 << 3, ///< 返回分路段坐标点串,两点间用“,”分隔 - AMapTransitRouteShowFieldsTypeAll = ~0UL, ///< 返回所有扩展信息 -}; - -///骑行路线规划返回结果控制 @since 9.4.0 -typedef NS_OPTIONS(NSUInteger, AMapRidingRouteShowFieldsType) -{ - AMapRidingRouteShowFieldsTypeNone = 1 << 0, ///< 不返回扩展信息 - AMapRidingRouteShowFieldsTypeCost = 1 << 1, ///< 返回方案所需时间及费用成本 - AMapRidingRouteShowFieldsTypeNavi = 1 << 2, ///< 返回详细导航动作指令 - AMapRidingRouteShowFieldsTypePolyline = 1 << 3, ///< 返回分路段坐标点串,两点间用“,”分隔 - AMapRidingRouteShowFieldsTypeAll = ~0UL, ///< 返回所有扩展信息 -}; - -/// 搜索POI返回结果控制 @since 9.4.0 -typedef NS_OPTIONS(NSUInteger, AMapPOISearchShowFieldsType) -{ - AMapPOISearchShowFieldsTypeNone = 1 << 0, ///< 不返回扩展信息 - AMapPOISearchShowFieldsTypeChildren = 1 << 1, ///< 返回子POI信息 - AMapPOISearchShowFieldsTypeBusiness = 1 << 2, ///< 返回商业信息 - AMapPOISearchShowFieldsTypeIndoor = 1 << 3, ///< 返回室内相关信息 - AMapPOISearchShowFieldsTypeNavi = 1 << 4, ///< 返回导航位置相关信息 - AMapPOISearchShowFieldsTypePhotos = 1 << 5, ///< 返回poi图片相关信息 - AMapPOISearchShowFieldsTypeAll = ~0UL, ///< 返回所有扩展信息 -}; - -///距离测量类型 @since 7.7.0 -typedef NS_ENUM(NSInteger, AMapDistanceSearchType) -{ - AMapDistanceSearchTypeStraight = 0, ///< 直线距离 - AMapDistanceSearchTypeDrive = 1, ///< 驾车导航距离 - AMapDistanceSearchTypeWalk = 3, ///< 步行导航距离 -}; - -#pragma mark - AMapPOISearchBaseRequest - -///POI搜索请求基类 -@interface AMapPOISearchBaseRequest : AMapSearchObject -///类型,多个类型用“|”分割 可选值:文本分类、分类代码 -@property (nonatomic, copy) NSString *types; -///排序规则, 0-距离排序;1-综合排序, 默认0 -@property (nonatomic, assign) NSInteger sortrule; -///每页记录数, 范围1-25, [default = 10] -@property (nonatomic, assign) NSInteger offset; -///当前页数, 范围1-100, [default = 1] -@property (nonatomic, assign) NSInteger page; -///设置需要返回的扩展信息,默认为AMapPOISearchShowFieldsTypeNone,只返回基础信息字段 -@property (nonatomic, assign) AMapPOISearchShowFieldsType showFieldsType; -@end - -///POI ID搜索请求 -@interface AMapPOIIDSearchRequest : AMapPOISearchBaseRequest -///poi唯一标识,最多可以传入10个id,多个id之间用“|”分隔。必填 -@property (nonatomic, copy) NSString *uid; -@end - -///POI关键字搜索 -@interface AMapPOIKeywordsSearchRequest : AMapPOISearchBaseRequest -///查询关键字,多个关键字用“|”分割 -@property (nonatomic, copy) NSString *keywords; -///查询城市,可选值:cityname(中文或中文全拼)、citycode、adcode.(注:台湾省的城市一律设置为【台湾】,不具体到市。) -@property (nonatomic, copy) NSString *city; -///强制城市限制功能 默认NO,例如:在上海搜索天安门,如果citylimit为true,将不返回北京的天安门相关的POI -@property (nonatomic, assign) BOOL cityLimit; -///设置后,如果sortrule==0,则返回结果会按照距离此点的远近来排序,since 5.2.1 -@property (nonatomic, strong) AMapGeoPoint *location; - -@end - -///POI周边搜索 -@interface AMapPOIAroundSearchRequest : AMapPOISearchBaseRequest -///查询关键字,多个关键字用“|”分割。可选 -@property (nonatomic, copy) NSString *keywords; -///中心点坐标 -@property (nonatomic, copy) AMapGeoPoint *location; -///查询半径,范围:0-50000,单位:米 [default = 3000] -@property (nonatomic, assign) NSInteger radius; -///查询城市,可选值:cityname(中文或中文全拼)、citycode、adcode。注:当用户指定的经纬度和city出现冲突,若范围内有用户指定city的数据,则返回相关数据,否则返回为空。(since 5.7.0) -@property (nonatomic, copy) NSString *city; -@end - -///POI多边形搜索 -@interface AMapPOIPolygonSearchRequest : AMapPOISearchBaseRequest -///查询关键字,多个关键字用“|”分割。可选 -@property (nonatomic, copy) NSString *keywords; -///多边形区域,多个坐标对集合,坐标对用"|"分割。多边形为矩形时,可传入左上右下两顶点坐标对;其他情况下首尾坐标对需相同。必填 -@property (nonatomic, copy) AMapGeoPolygon *polygon; -@end - -///POI搜索返回 -@interface AMapPOISearchResponse : AMapSearchObject -///返回的POI数目 -@property (nonatomic, assign) NSInteger count; -///关键字建议列表和城市建议列表 -@property (nonatomic, strong) AMapSuggestion *suggestion; -///POI结果,AMapPOI 数组 -@property (nonatomic, strong) NSArray *pois; -@end - -#pragma mark - AMapPOIRouteSearchRequest -///沿途搜索, 注意起点和终点不能相距太远(大概70公里),否则可能搜索结果为空 -@interface AMapRoutePOISearchRequest : AMapSearchObject -///中心点坐标 -@property (nonatomic, copy) AMapGeoPoint *origin; -///目标点坐标 -@property (nonatomic, copy) AMapGeoPoint *destination; -///搜索类型 -@property (nonatomic, assign) AMapRoutePOISearchType searchType; -///驾车导航策略,同驾车路径规划请求的策略(5 多策略除外) -@property (nonatomic, assign) NSInteger strategy; -///道路周围搜索范围,单位米,[0-500],默认250。 -@property (nonatomic, assign) NSInteger range; -///用户自己规划的路线,在origine、destination未填入时为必填.格式为:"经度,维度;经度,维度;...". 目前限制个数最多为100个点 -@property (nonatomic, strong) NSString *polylineStr; -///用户自己规划的路线,在origine、destination未填入且polylineStr未填入时为必填. 目前限制个数最多为100个点 -@property (nonatomic, strong) NSArray *polyline; - -@end - -///沿途搜索返回 -@interface AMapRoutePOISearchResponse : AMapSearchObject -///返回的POI数目 -@property (nonatomic, assign) NSInteger count; -///POI结果,AMapRoutePOI 数组 -@property (nonatomic, strong) NSArray *pois; -@end - -#pragma mark - AMapInputTipsSearchRequest - -///搜索提示请求 -@interface AMapInputTipsSearchRequest : AMapSearchObject -///查询关键字 -@property (nonatomic, copy) NSString *keywords; -///查询城市,可选值:cityname(中文或中文全拼)、citycode、adcode. -@property (nonatomic, copy) NSString *city; -///类型,多个类型用“|”分割 可选值:文本分类、分类代码 -@property (nonatomic, copy) NSString *types; -///强制城市限制功能,例如:在上海搜索天安门,如果citylimit为true,将不返回北京的天安门相关的POI -@property (nonatomic, assign) BOOL cityLimit; -///格式形如:@"116.481488,39.990464",(经度,纬度),不可以包含空格。如果设置,在此location附近优先返回搜索关键词信息, since 5.0.0 -@property (nonatomic, copy) NSString *location; -@end - -///搜索提示返回 -@interface AMapInputTipsSearchResponse : AMapSearchObject -///返回数目 -@property (nonatomic, assign) NSInteger count; -///提示列表 AMapTip 数组, AMapTip 有多种属性,可根据该对象的返回信息,配合其他搜索服务使用,完善您应用的功能。如:\n 1)uid为空,location为空,该提示语为品牌词,可根据该品牌词进行POI关键词搜索。\n 2)uid不为空,location为空,为公交线路,根据uid进行公交线路查询。\n 3)uid不为空,location也不为空,是一个真实存在的POI,可直接显示在地图上。 -@property (nonatomic, strong) NSArray *tips; -@end - -#pragma mark - AMapGeocodeSearchRequest - -///地理编码请求 -@interface AMapGeocodeSearchRequest : AMapSearchObject -///地址 -@property (nonatomic, copy) NSString *address; -///查询城市,可选值:cityname(中文或中文全拼)、citycode、adcode. -@property (nonatomic, copy) NSString *city; -///指定查询国家,支持多个国家,用“|”分隔,可选值:国家代码ISO 3166 或 global,仅海外生效(since 7.4.0) -@property (nonatomic, copy) NSString *country; -@end - -///地理编码返回 -@interface AMapGeocodeSearchResponse : AMapSearchObject -///返回数目 -@property (nonatomic, assign) NSInteger count; -///地理编码结果 AMapGeocode 数组 -@property (nonatomic, strong) NSArray *geocodes; -@end - - -#pragma mark - AMapReGeocodeSearchRequest - -///逆地理编码请求 -@interface AMapReGeocodeSearchRequest : AMapSearchObject -///是否返回扩展信息,默认NO。 -@property (nonatomic, assign) BOOL requireExtension; -///中心点坐标。 -@property (nonatomic, copy) AMapGeoPoint *location; -///查询半径,单位米,范围0~3000,默认1000。 -@property (nonatomic, assign) NSInteger radius; -///指定返回结果poi数组中的POI类型,在requireExtension=YES时生效。输入为typecode, 支持传入多个typecode, 多值时用“|”分割 -@property (nonatomic, copy) NSString *poitype; -///distance 按距离返回,score 按权重返回,仅海外生效(since 7.4.0) -@property (nonatomic, copy) NSString *mode; - -@end - -///逆地理编码返回 -@interface AMapReGeocodeSearchResponse : AMapSearchObject -///逆地理编码结果 -@property (nonatomic, strong) AMapReGeocode *regeocode; -@end - -#pragma mark - AMapBusStopSearchRequest - -///公交站点请求 -@interface AMapBusStopSearchRequest : AMapSearchObject -///查询关键字 -@property (nonatomic, copy) NSString *keywords; -///城市 可选值:cityname(中文或中文全拼)、citycode、adcode -@property (nonatomic, copy) NSString *city; -///每页记录数,默认为20,取值为:1-50 -@property (nonatomic, assign) NSInteger offset; -///当前页数,默认值为1,取值为:1-100 -@property (nonatomic, assign) NSInteger page; -@end - -///公交站点返回 -@interface AMapBusStopSearchResponse : AMapSearchObject -///公交站数目 -@property (nonatomic, assign) NSInteger count; -///关键字建议列表和城市建议列表 -@property (nonatomic, strong) AMapSuggestion *suggestion; -///公交站点数组,数组中存放AMapBusStop对象 -@property (nonatomic, strong) NSArray *busstops; -@end - -#pragma mark - AMapBusLineSearchRequest - -///公交线路查询请求基类,不可直接调用 -@interface AMapBusLineBaseSearchRequest : AMapSearchObject -///城市 可选值:cityname(中文或中文全拼)、citycode、adcode -@property (nonatomic, copy) NSString *city; -///是否返回扩展信息,默认为NO -@property (nonatomic, assign) BOOL requireExtension; -///每页记录数,默认为20,取值为1-50 -@property (nonatomic, assign) NSInteger offset; -///当前页数,默认为1,取值为1-100 -@property (nonatomic, assign) NSInteger page; -@end - -///公交站线路根据名字请求 -@interface AMapBusLineNameSearchRequest : AMapBusLineBaseSearchRequest -///查询关键字 -@property (nonatomic, copy) NSString *keywords; -@end - -///公交站线路根据ID请求 -@interface AMapBusLineIDSearchRequest : AMapBusLineBaseSearchRequest -///唯一标识 -@property (nonatomic, copy) NSString *uid; -@end - -///公交站线路返回 -@interface AMapBusLineSearchResponse : AMapSearchObject -///返回公交站数目 -@property (nonatomic, assign) NSInteger count; -///关键字建议列表和城市建议列表 -@property (nonatomic, strong) AMapSuggestion *suggestion; -///公交线路数组,数组中存放 AMapBusLine 对象 -@property (nonatomic, strong) NSArray *buslines; -@end - -#pragma mark - AMapDistrictSearchRequest -///行政区划查询请求 -@interface AMapDistrictSearchRequest : AMapSearchObject -///查询关键字,只支持单关键字搜索,全国范围 -@property (nonatomic, copy) NSString *keywords; -///是否返回边界坐标,默认NO -@property (nonatomic, assign) BOOL requireExtension; -///是否显示商圈信息,默认NO。注:已废弃,行政区划搜索无商圈信息。 -@property (nonatomic, assign) BOOL showBusinessArea __attribute__((deprecated("已废弃, from 5.3.0")));; -///每页记录数, 范围1-50, [default = 20] -@property (nonatomic, assign) NSInteger offset; -///当前页数, 范围1-100, [default = 1] -@property (nonatomic, assign) NSInteger page; -///子区域层级,默认1。规则:设置显示下级行政区级数(行政区级别包括:国家、省/直辖市、市、区/县、乡镇/街道多级数据)可选值:0、1、2、3等数字,0-不返回下级行政区;1-返回下一级行政区;2-返回下两级行政区;3-返回下三级行政区 -@property (nonatomic, assign) NSInteger subdistrict; - -@end - -///行政区划响应 -@interface AMapDistrictSearchResponse : AMapSearchObject -///返回数目 -@property (nonatomic, assign) NSInteger count; -///行政区域 AMapDistrict 数组 -@property (nonatomic, strong) NSArray *districts; -@end - -#pragma mark - AMapRouteSearchBaseRequest - -///路径规划基础类,不可直接调用 -@interface AMapRouteSearchBaseRequest : AMapSearchObject -///出发点 -@property (nonatomic, copy) AMapGeoPoint *origin; -///目的地 -@property (nonatomic, copy) AMapGeoPoint *destination; -@end - -#pragma mark - AMapDrivingCalRouteSearchRequest - -///驾车路径规划2.0 -@interface AMapDrivingCalRouteSearchRequest : AMapRouteSearchBaseRequest -/** - 驾车导航策略,默认策略为32。 - 32:默认,高德推荐,同高德地图APP默认 - 33:躲避拥堵 - 34:高速优先 - 35:不走高速 - 36:少收费 - 37:大路优先 - 38:速度最快 - 39:躲避拥堵+高速优先 - 40:躲避拥堵+不走高速 - 41:躲避拥堵+少收费 - 42:少收费+不走高速 - 43:躲避拥堵+少收费+不走高速 - 44:躲避拥堵+大路优先 - 45:躲避拥堵+速度最快 - */ -@property (nonatomic, assign) NSInteger strategy; -///途经点 AMapGeoPoint 数组,目前最多支持16个途经点 -@property (nonatomic, copy) NSArray *waypoints; -///避让区域 AMapGeoPolygon 数组,目前最多支持32个避让区域,每个区域16个点 -@property (nonatomic, copy) NSArray *avoidpolygons; -///避让道路名 -@property (nonatomic, copy) NSString *avoidroad; -///出发点 POI ID -@property (nonatomic, copy) NSString *originId; -///目的地 POI ID -@property (nonatomic, copy) NSString *destinationId; -///出发点POI类型编码,此值可以辅助更精准的起点算路,0:普通道路、1:高架上、2:高架下、3:主路、4:辅路、5:隧道、7:环岛、9:停车场内部 -@property (nonatomic, copy) NSString *origintype; -///目的地POI类型编码 -@property (nonatomic, copy) NSString *destinationtype; -///车牌信息,如京AHA322,支持6位传统车牌和7位新能源车牌,用于判断是否限行 -@property (nonatomic, copy) NSString *plate; -///使用轮渡,0使用1不使用,默认为0使用 -@property (nonatomic, assign) NSInteger ferry; -/** - 驾车路径规划车辆类型,默认策略为0。 - 0:普通汽车(默认值); - 1:纯电动车; - 2:插电混动车 - */ -@property (nonatomic, assign) NSInteger cartype; -///设置需要返回的扩展信息,默认为AMapDrivingRouteShowFieldTypeNone,只返回基础信息字段 -@property (nonatomic, assign) AMapDrivingRouteShowFieldType showFieldType; - -@end - -#pragma mark - AMapWalkingRouteSearchRequest - -///步行路径规划 -@interface AMapWalkingRouteSearchRequest : AMapRouteSearchBaseRequest -///是否提供备选步行方案([default = 0])0-只提供一条步行方案; 1-提供备选步行方案(有可能无备选方案) -@property (nonatomic, assign) NSInteger multipath __attribute__((deprecated("已废弃, from 5.0.0"))); - -///是否需要室内算路. 0 : 不需要 (默认值); 1 : 需要 -@property (nonatomic, assign) NSInteger isindoor; -///返回路线条数, 0: 默认返回一条路线方案; 1 : 多备选路线中第一条路线; 2 : 多备选路线中前两条路线; 3 : 多备选路线中三条路线 -@property (nonatomic, assign) NSInteger alternativeRoute; -///设置需要返回的扩展信息,默认为AMapPOISearchShowFieldsTypeNone,只返回基础信息字段 -@property (nonatomic, assign) AMapWalkingRouteShowFieldType showFieldsType; -@end - -#pragma mark - AMapTransitRouteSearchRequest - -///公交路径规划 -@interface AMapTransitRouteSearchRequest : AMapRouteSearchBaseRequest -///公交换乘策略([default = 0]) -/* -0:推荐模式,综合权重,同高德APP默认 -1:最经济模式,票价最低 -2:最少换乘模式,换乘次数少 -3:最少步行模式,尽可能减少步行距离 -4:最舒适模式,尽可能乘坐空调车 -5:不乘地铁模式,不乘坐地铁路线 -6:地铁图模式,起终点都是地铁站(地铁图模式下originpoi及destinationpoi为必填项) -7:地铁优先模式,步行距离不超过4KM -8:时间短模式,方案花费总时间最少 - */ -@property (nonatomic, assign) NSInteger strategy; -///起点所在城市, 必填. 仅支持citycode -@property (nonatomic, copy) NSString *city; -///目的地所在城市, 必填. 仅支持citycode,与city相同时代表同城,不同时代表跨城 -@property (nonatomic, copy) NSString *destinationCity; -///是否包含夜班车,默认为 NO -@property (nonatomic, assign) BOOL nightflag; -///起点POI ID -@property (nonatomic, copy) NSString *originPOI; -///目的地POI ID -@property (nonatomic, copy) NSString *destinationPOI; -///起点所在行政区域编码 -@property (nonatomic, copy) NSString *adcode; -///终点所在行政区域编码 -@property (nonatomic, copy) NSString *destinationAdcode; -///返回方案条数 可传入1-10的阿拉伯数字,代表返回的不同条数。默认值:5 -@property (nonatomic, assign) NSInteger alternativeRoute; -/// 是否返回所有地铁出入口,默认为NO -@property (nonatomic, assign) BOOL multiExport; -/// 最大换乘次数 0:直达 1:最多换乘1次 2:最多换乘2次 3:最多换乘3次 4:最多换乘4次。默认值:4 -@property (nonatomic, assign) NSInteger maxTrans; -///请求日期 例如:2013-10-28 -@property (nonatomic, copy) NSString *date; -///请求时间 例如:9-54 -@property (nonatomic, copy) NSString *time; -///返回结果控制 -@property (nonatomic, assign) AMapTransitRouteShowFieldsType showFieldsType; -@end - -#pragma mark - AMapRidingRouteSearchRequest - -///骑行路径规划 -@interface AMapRidingRouteSearchRequest : AMapRouteSearchBaseRequest -///返回路线条数, 0: 默认返回一条路线方案; 1 : 多备选路线中第一条路线; 2 : 多备选路线中前两条路线; 3 : 多备选路线中三条路线 -@property (nonatomic, assign) NSInteger alternativeRoute; -///返回结果控制 -@property (nonatomic, assign) AMapRidingRouteShowFieldsType showFieldsType; -@end - -///路径规划返回 -@interface AMapRouteSearchResponse : AMapSearchObject -///路径规划信息数目 -@property (nonatomic, assign) NSInteger count; -///路径规划信息 -@property (nonatomic, strong) AMapRoute *route; -@end - -///骑行路径规划返回 -@interface AMapRidingRouteSearchResponse : AMapRouteSearchResponse -@end - -#pragma mark - AMapTruckRouteSearchRequest - -///货车路径规划(since 6.1.0) -@interface AMapTruckRouteSearchRequest : AMapRouteSearchBaseRequest - -/** - 驾车导航策略,默认为策略1。 - 1,返回的结果考虑路况,尽量躲避拥堵而规划路径,与高德地图的“躲避拥堵”策略一致; - 2,返回的结果不走高速,与高德地图“不走高速”策略一致; - 3,返回的结果尽可能规划收费较低甚至免费的路径,与高德地图“避免收费”策略一致; - 4,返回的结果考虑路况,尽量躲避拥堵而规划路径,并且不走高速,与高德地图的“躲避拥堵&不走高速”策略一致; - 5,返回的结果尽量不走高速,并且尽量规划收费较低甚至免费的路径结果,与高德地图的“避免收费&不走高速”策略一致; - 6,返回路径规划结果会尽量的躲避拥堵,并且规划收费较低甚至免费的路径结果,与高德地图的“躲避拥堵&避免收费”策略一致; - 7,返回的结果尽量躲避拥堵,规划收费较低甚至免费的路径结果,并且尽量不走高速路,与高德地图的“避免拥堵&避免收费&不走高速”策略一致; - 8,返回的结果会优先选择高速路,与高德地图的“高速优先”策略一致; - 9,返回的结果会优先考虑高速路,并且会考虑路况躲避拥堵,与高德地图的“躲避拥堵&高速优先”策略一致。 - */ -@property (nonatomic, assign) NSInteger strategy; -///途经点 AMapGeoPoint 数组,最多支持16个途经点 -@property (nonatomic, copy) NSArray *waypoints; -///出发点 POI ID -@property (nonatomic, copy) NSString *originId; -///目的地 POI ID -@property (nonatomic, copy) NSString *destinationId; -///出发点POI类型编码 -@property (nonatomic, copy) NSString *origintype; -///目的地POI类型编码 -@property (nonatomic, copy) NSString *destinationtype; -///车牌省份,用汉字填入车牌省份缩写。用于判断是否限行 -@property (nonatomic, copy) NSString *plateProvince; -///车牌详情,填入除省份及标点之外的字母和数字(需大写)。用于判断是否限行。 -@property (nonatomic, copy) NSString *plateNumber; -///货车大小,默认为 轻型车(AMapTruckSizeTypeLight) -@property (nonatomic, assign) AMapTruckSizeType size; -///车辆高度,单位米,取值[0 – 25.5]米,默认 1.6 米 -@property (nonatomic, assign) CGFloat height; -///车辆宽度,单位米,取值[0 – 25.5]米,默认 2.5 米 -@property (nonatomic, assign) CGFloat width; -///车辆总重,单位吨,取值[0 – 6553.5]吨,默认 0.9 吨 -@property (nonatomic, assign) CGFloat load; -///货车核定载重,单位吨,取值[0 – 6553.5]吨,默认 10 吨 -@property (nonatomic, assign) CGFloat weight; -///车辆轴数,单位个,取值[0 –255]个,默认 2个轴 -@property (nonatomic, assign) NSInteger axis; -///是否返回扩展信息,默认为 NO (since 7.6.0) -@property (nonatomic, assign) BOOL requireExtension; -@end - -#pragma mark - AMapDistanceSearchRequest - -///距离查询请求(since 6.1.0) -@interface AMapDistanceSearchRequest : AMapSearchObject -///起点坐标数组,最多支持100个点。 -@property (nonatomic, strong) NSArray *origins; -///终点坐标 -@property (nonatomic, strong) AMapGeoPoint *destination; -///路径计算的类型,当type为导航距离时,会考虑路况,故在不同时间请求返回结果可能不同; -@property (nonatomic, assign) AMapDistanceSearchType type; -///驾车距离测量策略,参考驾车路径规划。仅当type为AMapDistanceSearchTypeDrive时有效,默认4 -@property (nonatomic, assign) NSInteger strategy; -///是否返回扩展信息,默认为 NO (since 7.6.0) -@property (nonatomic, assign) BOOL requireExtension; -@end - -///距离查询结果(since 6.1.0) -@interface AMapDistanceSearchResponse : AMapSearchObject -///距离查询结果 AMapDistanceResult 数组。 -@property (nonatomic, strong) NSArray *results; - -@end - -#pragma mark - AMapWeatherSearchRequest - -///天气查询请求 -@interface AMapWeatherSearchRequest : AMapSearchObject -///城市名称,支持cityname及adcode -@property (nonatomic, copy) NSString *city; -///气象类型,Live为实时天气,Forecast为后三天预报天气,默认为Live -@property (nonatomic, assign) AMapWeatherType type; -@end - -///天气查询返回 -@interface AMapWeatherSearchResponse : AMapSearchObject -///实时天气数据信息 AMapLocalWeatherLive 数组,仅在请求实时天气时有返回。 -@property (nonatomic, strong) NSArray *lives; -///预报天气数据信息 AMapLocalWeatherForecast 数组,仅在请求预报天气时有返回 -@property (nonatomic, strong) NSArray *forecasts; - -@end - -#pragma mark - AMapNearbySearchRequest -///附近搜索请求 -@interface AMapNearbySearchRequest : AMapSearchObject -///中心点坐标 -@property (nonatomic, copy) AMapGeoPoint *center; -///查询半径,范围:[0, 10000],单位:米 [default = 1000] -@property (nonatomic, assign) NSInteger radius; -///搜索距离类型,默认为直线距离 -@property (nonatomic, assign) AMapNearbySearchType searchType; -///检索时间范围,超过24小时的数据无法返回,范围[5, 24*60*60] 单位:秒 [default = 1800] -@property (nonatomic, assign) NSInteger timeRange; -///返回条数,范围[1, 100], 默认30 -@property (nonatomic, assign) NSInteger limit; -@end - -///附近搜索返回 -@interface AMapNearbySearchResponse : AMapSearchObject -///结果总条数 -@property (nonatomic, assign) NSInteger count; -///周边用户信息 AMapNearbyUserInfo 数组 -@property (nonatomic, strong) NSArray *infos; -@end - -#pragma mark - AMapCloudSearchBaseRequest - -///企业地图搜索请求基类 -@interface AMapCloudSearchBaseRequest : AMapSearchObject -///要查询的表格ID, 必选 -@property (nonatomic, copy) NSString *tableID; -///筛选条件数组, 可选, 说明:\n 1.支持建立索引的字段根据多个条件筛选,多个条件用双&符号连接;\n 2.判断符合支持:>= 大于等于,<= 小于等于,>大于,<小于,= 精确匹配(text索引不可用);\n 3.示例规则:key1=value1&&key2=value2&&lastloctime>=1469817532,示例:"name=王师傅|张师傅&&lastloctime>=1469817532 -@property (nonatomic, strong) NSArray *filter; -///排序字段名, 可选.\n 说明:\n 1.支持按建立了排序筛选索引的整数或小数字段进行排序:sortFields = "字段名";\n 2.系统预设的字段(忽略sortType):_distance:坐标与中心点距离升序排序,仅在周边检索时有效(若其它请求使用会异常返回);_weight:权重降序排序,当存在keywords时有效;\n; -@property (nonatomic, copy) NSString *sortFields; -///可选, 排序方式(默认升序) -@property (nonatomic, assign) AMapCloudSortType sortType; -///可选, 每页记录数(每页最大记录数100, 默认20) -@property (nonatomic, assign) NSInteger offset; -///可选, 当前页数(>=1, 默认1) -@property (nonatomic, assign) NSInteger page; -@end - -#pragma mark - AMapCloudPlaceAroundSearchRequest - -///企业地图周边搜请求 -@interface AMapCloudPOIAroundSearchRequest : AMapCloudSearchBaseRequest -///必填,中心点坐标。 -@property (nonatomic, copy) AMapGeoPoint *center; -///可选,查询半径(默认值为3000),单位:米 -@property (nonatomic, assign) NSInteger radius; -///可选,搜索关键词。\n 说明:1. 只支持建立过文本索引的字段查询/n 2.支持关键字模糊检索,即对建立【文本索引字段】对应列内容进行模糊检索;如keywords=工商银行,检索返回已建立文本索引列值中包含“工商”或者“银行”或者“工商银行”关键字的POI结果集。/n 3.支持关键字多值模糊检索;如keywords=招商银行&&华夏银行&&工商银行,检索返回已建立索引列值中包含“招商银行”或者“华夏银行”或者“工商银行”的POI结果集,不会返回检索词切分后,如仅包含“招商”或者“银行”的POI集 -@property (nonatomic, copy) NSString *keywords; -@end - -///企业地图polygon区域查询请求 -@interface AMapCloudPOIPolygonSearchRequest : AMapCloudSearchBaseRequest -///必填,多边形。 -@property (nonatomic, copy) AMapGeoPolygon *polygon; -///可选,搜索关键词。\n 说明:1. 只支持建立过文本索引的字段查询/n 2.支持关键字模糊检索,即对建立【文本索引字段】对应列内容进行模糊检索;如keywords=工商银行,检索返回已建立文本索引列值中包含“工商”或者“银行”或者“工商银行”关键字的POI结果集。/n 3.支持关键字多值模糊检索;如keywords=招商银行&&华夏银行&&工商银行,检索返回已建立索引列值中包含“招商银行”或者“华夏银行”或者“工商银行”的POI结果集,不会返回检索词切分后,如仅包含“招商”或者“银行”的POI集 -@property (nonatomic, copy) NSString *keywords; -@end - -///企业地图ID查询请求 -@interface AMapCloudPOIIDSearchRequest : AMapCloudSearchBaseRequest -///必填,POI的ID -@property (nonatomic, assign) NSInteger uid; -@end - -///企业地图本地查询请求 -@interface AMapCloudPOILocalSearchRequest : AMapCloudSearchBaseRequest -///可选,搜索关键词。\n 说明:1. 只支持建立过文本索引的字段查询/n 2.支持关键字模糊检索,即对建立【文本索引字段】对应列内容进行模糊检索;如keywords=工商银行,检索返回已建立文本索引列值中包含“工商”或者“银行”或者“工商银行”关键字的POI结果集。/n 3.支持关键字多值模糊检索;如keywords=招商银行&&华夏银行&&工商银行,检索返回已建立索引列值中包含“招商银行”或者“华夏银行”或者“工商银行”的POI结果集,不会返回检索词切分后,如仅包含“招商”或者“银行”的POI集 -@property (nonatomic, copy) NSString *keywords; -///必填,城市名称\n 说明:\n 1. 支持全国/省/市/区县行政区划范围的检索;\n 2. city = "全国",即对用户全表搜索;\n 3. 当city值设置非法或不正确时,按照 city = "全国"返回。 -@property (nonatomic, copy) NSString *city; -@end - -///企业地图搜索返回 -@interface AMapCloudPOISearchResponse : AMapSearchObject -///返回结果总数目 -@property (nonatomic, assign) NSInteger count; -///返回的结果, AMapCloudPOI 数组 -@property (nonatomic, strong) NSArray *POIs; - -@end - -#pragma mark - AMapShareSearchBaseRequest - -///短串分享搜索请求基类, 请使用具体的子类。 -@interface AMapShareSearchBaseRequest : AMapSearchObject -@end - -///位置短串分享请求 -@interface AMapLocationShareSearchRequest : AMapShareSearchBaseRequest -///必填, 位置坐标 -@property (nonatomic, copy) AMapGeoPoint *location; -///位置名称,请不要包含【,%&@#】等特殊符号 -@property (nonatomic, copy) NSString *name; -@end - -///兴趣点短串分享请求 -@interface AMapPOIShareSearchRequest : AMapShareSearchBaseRequest -///POI的ID,如果有ID则指定POI,否则按name查询。 -@property (nonatomic, copy) NSString *uid; -///坐标 -@property (nonatomic, copy) AMapGeoPoint *location; -///名称,请不要包含【,%&@#】等特殊符号。 -@property (nonatomic, copy) NSString *name; -///地址,请不要包含【,%&@#】等特殊符号。 -@property (nonatomic, copy) NSString *address; -@end - -///路径规划短串分享请求 -@interface AMapRouteShareSearchRequest : AMapShareSearchBaseRequest -///默认为0\n 驾车:0-速度最快(时间);\n 1-避免收费(不走收费路段的最快道路);\n 2-距离优先;\n 3-不走高速;\n 4-结合实时交通(躲避拥堵);\n 5-不走高速且避免收费;\n 6-不走高速且躲避拥堵;\n 7-躲避收费和拥堵;\n 8-不走高速且躲避收费和拥堵\n\n 公交:0-最快捷;\n 1-最经济;\n 2-最少换乘;\n 3-最少步行;\n 4-最舒适;\n 5-不乘地铁;\n\n 步行,无策略,均一样 -@property (nonatomic, assign) NSInteger strategy; -///Route的type,默认为0,超出范围为0.\n 0为驾车,\n 1为公交,\n 2为步行 -@property (nonatomic, assign) NSInteger type; -///起点坐标 -@property (nonatomic, copy) AMapGeoPoint *startCoordinate; -///终点坐标 -@property (nonatomic, copy) AMapGeoPoint *destinationCoordinate; -///起点名称,默认为“已选择的位置”,请不要包含【,%&@#】等特殊符号 -@property (nonatomic, copy) NSString *startName; -///终点名称,默认为“已选择的位置”,请不要包含【,%&@#】等特殊符号 -@property (nonatomic, copy) NSString *destinationName; -@end - -///导航短串分享请求 -@interface AMapNavigationShareSearchRequest : AMapShareSearchBaseRequest - -///默认为0,超出范围为0\n 驾车:0-速度最快(时间);\n 1-避免收费(不走收费路段的最快道路);\n 2-距离优先;\n 3-不走高速;\n 4-结合实时交通(躲避拥堵);\n 5-不走高速且避免收费;\n 6-不走高速且躲避拥堵;\n 7-躲避收费和拥堵;\n 8-不走高速且躲避收费和拥堵 -@property (nonatomic, assign) NSInteger strategy; -///起点坐标,若跳转到高德地图,默认更换为定位坐标 -@property (nonatomic, copy) AMapGeoPoint *startCoordinate; -///终点坐标 -@property (nonatomic, copy) AMapGeoPoint *destinationCoordinate; -@end - -///导航短串分享响应 -@interface AMapShareSearchResponse : AMapSearchObject -///转换后的短串 -@property (nonatomic, copy) NSString *shareURL; -@end - -///未来路线规划(since 6.9.0) -@interface AMapFutureRouteSearchRequest : AMapRouteSearchBaseRequest -///出发时间 单位为秒 -@property (nonatomic, copy) NSString *beginTime; -///时间间隔 单位为秒 -@property (nonatomic, assign) NSInteger interval; -///时间点个数,最多48个 -@property (nonatomic, assign) NSInteger timeCount; -/** - 未来路线规划策略,默认策略为0。 - 1,返回的结果考虑路况,尽量躲避拥堵而规划路径,与高德地图的“躲避拥堵”策略一致 - 2,返回的结果不走高速,与高德地图“不走高速”策略一致 - 3,返回的结果尽可能规划收费较低甚至免费的路径,与高德地图“避免收费”策略一致 - 4,返回的结果考虑路况,尽量躲避拥堵而规划路径,并且不走高速,与高德地图的“躲避拥堵&不走高速”策略一致 - 5,返回的结果尽量不走高速,并且尽量规划收费较低甚至免费的路径结果,与高德地图的“避免收费&不走高速”策略一致 - 6,返回路径规划结果会尽量的躲避拥堵,并且规划收费较低甚至免费的路径结果,与高德地图的“躲避拥堵&避免收费”策略一致 - 7,返回的结果尽量躲避拥堵,规划收费较低甚至免费的路径结果,并且尽量不走高速路,与高德地图的“避免拥堵&避免收费&不走高速”策略一致 - 8,返回的结果会优先选择高速路,与高德地图的“高速优先”策略一致 - 9,返回的结果会优先考虑高速路,并且会考虑路况躲避拥堵,与高德地图的“躲避拥堵&高速优先”策略一致 - 10,不考虑路况,返回速度最优、耗时最短的路线,但是此路线不一定距离最短 - 11,避让拥堵&速度优先&避免收费 - */ -@property (nonatomic, assign) NSInteger strategy; -///出发点 POI ID -@property (nonatomic, copy) NSString *originId; -///目的地 POI ID -@property (nonatomic, copy) NSString *destinationId; -///出发点POI类型编码 -@property (nonatomic, copy) NSString *origintype; -///目的地POI类型编码 -@property (nonatomic, copy) NSString *destinationtype; -///终点的父POI ID -@property (nonatomic, copy) NSString *parentId; - -/////是否返回扩展信息,默认为 NO -//@property (nonatomic, assign) BOOL requireExtension; -///车牌省份,用汉字填入车牌省份缩写。用于判断是否限行 -@property (nonatomic, copy) NSString *plateProvince; -///车牌详情,填入除省份及标点之外的字母和数字(需大写)。用于判断是否限行。 -@property (nonatomic, copy) NSString *plateNumber; -/** - 驾车路径规划车辆类型,默认策略为0。 - 0:普通汽车(默认值); - 1:纯电动车; - 2:插电混动车 - */ -@property (nonatomic, assign) NSInteger cartype; -@end - -///未来路线规划(since 6.9.0) -@interface AMapFutureRouteSearchResponse : AMapSearchObject -///路径规划方案,只会返回AMapPath中的distance、totalTrafficLights、steps -@property (nonatomic, strong) NSArray *paths; -///不同时间的规划以及信息列表 -@property (nonatomic, strong) NSArray *timeInfos; -@end - -/// 充电站搜索(since 9.7.0) -@interface AMapChargeStationSearchRequest : AMapSearchObject -@end - -/// 充电站搜索(since 9.7.0) -@interface AMapChargeStationSearchResponse : AMapSearchObject -@end diff --git a/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Headers/AMapSearchVersion.h b/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Headers/AMapSearchVersion.h deleted file mode 100644 index 4c78ae7..0000000 --- a/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Headers/AMapSearchVersion.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// AMapSearchVersion.h -// AMapSearchKit -// -// Created by xiaoming han on 15/10/27. -// Copyright © 2015年 Amap. All rights reserved. -// - -#import -#import - -#ifndef AMapSearchVersion_h -#define AMapSearchVersion_h - -#define AMapSearchVersionNumber 90702 -#define AMapSearchMinRequiredFoundationVersion 10800 - -// 依赖库版本检测 -#if AMapFoundationVersionNumber < AMapSearchMinRequiredFoundationVersion -#error "The AMapFoundationKit version is less than minimum required, please update! Any questions please to visit http://lbs.amap.com" -#endif - -FOUNDATION_EXTERN NSString * const AMapSearchVersion; -FOUNDATION_EXTERN NSString * const AMapSearchName; - -#endif /* AMapSearchVersion_h */ diff --git a/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Info.plist b/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Info.plist deleted file mode 100644 index 4bf5482..0000000 Binary files a/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Info.plist and /dev/null differ diff --git a/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Modules/module.modulemap b/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Modules/module.modulemap deleted file mode 100644 index 6917330..0000000 --- a/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/Modules/module.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module AMapSearchKit { - umbrella header "AMapSearchKit.h" - export * - - module * { export * } -} diff --git a/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/version.txt b/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/version.txt deleted file mode 100644 index 5953ad7..0000000 --- a/Pods/AMapSearch-NO-IDFA/AMapSearchKit.framework/version.txt +++ /dev/null @@ -1 +0,0 @@ -9.7.2+sea.5c0f843 diff --git a/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/AMapTrackKit b/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/AMapTrackKit deleted file mode 100644 index 6e1f457..0000000 Binary files a/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/AMapTrackKit and /dev/null differ diff --git a/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackCommonObj.h b/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackCommonObj.h deleted file mode 100644 index b57aeb5..0000000 --- a/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackCommonObj.h +++ /dev/null @@ -1,134 +0,0 @@ -// -// AMapTrackCommonObj.h -// AMapTrackKit -// -// Created by liubo on 2017/8/15. -// Copyright © 2017年 Amap. All rights reserved. -// - -#import -#import -#import "AMapTrackError.h" - -NS_ASSUME_NONNULL_BEGIN - -#pragma mark - AMapTrackObject - -///基础类, 通用数据结构和response支持copy和coding -@interface AMapTrackObject : NSObject - -/** - * @brief 返回格式化的描述信息。通用数据结构和response类型有效。 - */ -- (NSString *)formattedDescription; - -@end - -#pragma mark - AMapTrackBaseRequest - -///AMapTrackKit请求基类 -@interface AMapTrackBaseRequest : AMapTrackObject - -///请求使用的serviceID -@property (nonatomic, copy) NSString *serviceID; - -@end - -#pragma mark - AMapTrackBaseResponse - -///AMapTrackKit请求响应基类 -@interface AMapTrackBaseResponse : AMapTrackObject - -///请求返回的状态码 -@property (nonatomic, assign) AMapTrackErrorCode code; - -///请求返回的状态码描述 -@property (nonatomic, copy) NSString *info; - -///请求返回的错误细节 -@property (nonatomic, copy) NSString *detail; - -@end - -#pragma mark - AMapTrackTerminal - -///Terminal终端类 -@interface AMapTrackTerminal : AMapTrackObject - -///Terminal的ID -@property (nonatomic, copy) NSString *tid; - -///Terminal的name -@property (nonatomic, copy) NSString *name; - -///Terminal的description信息 -@property (nonatomic, copy) NSString *desc; - -///Terminal的创建时间,单位毫秒 -@property (nonatomic, assign) long long createTime; - -///Terminal的最后定位时间,单位毫秒 -@property (nonatomic, assign) long long locateTime; - -@end - -#pragma mark - AMapTrackPoint - -///Point定位点类 -@interface AMapTrackPoint : AMapTrackObject - -///Point的坐标信息 -@property (nonatomic, assign) CLLocationCoordinate2D coordinate; - -///Point的定位时间,单位毫秒 -@property (nonatomic, assign) long long locateTime; - -///Point的速度信息,单位km/h -@property (nonatomic, assign) double speed; - -///Point的航向信息 -@property (nonatomic, assign) double direction; - -///Point的高度信息 -@property (nonatomic, assign) double height; - -///Point的定位精确度 -@property (nonatomic, assign) double accuracy; - -///Point的上传时间,仅在从服务端检索返回时有效 -@property (nonatomic, assign) long long createTime; - -///通过trackManagerGetCustomDictionary回调方法设置的自定义属性 -- (NSDictionary *)customProperties; - -@end - -#pragma mark - AMapTrackBasicTrack - -///BasicTrack轨迹类 -@interface AMapTrackBasicTrack : AMapTrackObject - -///BasicTrack的ID -@property (nonatomic, copy) NSString *trackID; - -///符合要求点的个数 -@property (nonatomic, assign) NSUInteger counts; - -///BasicTrack的距离 -@property (nonatomic, assign) NSUInteger distance; - -///BasicTrack的持续时间 -@property (nonatomic, assign) long long lastingTime; - -///BasicTrack的轨迹点数组 -@property (nonatomic, strong) NSArray *points; - -///起点信息 -@property (nonatomic, strong) AMapTrackPoint *startPoint; - -///终点信息 -@property (nonatomic, strong) AMapTrackPoint *endPoint; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackError.h b/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackError.h deleted file mode 100644 index c53a641..0000000 --- a/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackError.h +++ /dev/null @@ -1,71 +0,0 @@ -// -// AMapTrackError.h -// AMapTrackKit -// -// Created by liubo on 2017/8/17. -// Copyright © 2017年 Amap. All rights reserved. -// - -#ifndef AMapTrackKit_AMapTrackError_h -#define AMapTrackKit_AMapTrackError_h - -///AMapTrack errorDomain -extern NSString * const AMapTrackErrorDomain; - -///AMapTrack errorCode -typedef NS_ENUM(NSInteger, AMapTrackErrorCode) -{ - AMapTrackErrorCodeUnknow = 100,///< 未知错误 - AMapTrackErrorCodeInvalidOption = 101,///< option包含错误参数 - AMapTrackErrorCodeServiceStarted = 102,///< service已经启动 - AMapTrackErrorCodeServiceStopped = 103,///< service已经停止 - AMapTrackErrorCodeGatherStarted = 104,///< gather已经开始 - AMapTrackErrorCodeGatherStopped = 105,///< gather已经停止 - AMapTrackErrorCodeLocationAuthFailed = 106,///< 没有定位权限 - AMapTrackErrorCodeLocateError = 107,///< 获取定位失败 - AMapTrackErrorCodeAccuracyAuthFailed = 108,///< 没有精确定位权限 - - AMapTrackErrorNoResponseData = 1800,///< 服务返回数据为空 - AMapTrackErrorInvalidProtocol = 1801,///< 协议解析错误,通常是返回结果无法解析 - AMapTrackErrorTimeOut = 1802,///< 连接超时 - AMapTrackErrorBadURL = 1803,///< URL异常 - AMapTrackErrorCannotFindHost = 1804,///< 找不到主机 - AMapTrackErrorCannotConnectToHost = 1805,///< 服务器连接失败 - AMapTrackErrorNotConnectedToInternet = 1806,///< 连接异常,通常为没有网络的情况 - AMapTrackErrorCancelled = 1807,///< 连接取消 - - AMapTrackErrorBadCustomDictionary = 2031,///< 自定义参数获取异常 - - AMapTrackErrorOK = 10000,///< 没有错误 - AMapTrackErrorInvalidUserKey = 10001,///< key非法或过期 - AMapTrackErrorServiceNotAvailable = 10002,///< 没有权限使用相应的接口 - AMapTrackErrorDailyQueryOverLimit = 10003,///< 访问已超出日访问量 - AMapTrackErrorTooFrequently = 10004,///< 用户访问过于频繁 - AMapTrackErrorInvalidUserIP = 10005,///< 用户IP无效 - AMapTrackErrorInvalidUserDomain = 10006,///< 用户域名无效 - AMapTrackErrorInvalidSignature = 10007,///< 无效签名 - AMapTrackErrorInvalidUserSCode = 10008,///< 安全码验证错误,bundleID与key不对应 - AMapTrackErrorUserKeyNotMatch = 10009,///< 请求key与绑定平台不符 - AMapTrackErrorIPQueryOverLimit = 10010,///< IP请求超限 - AMapTrackErrorNotSupportHttps = 10011,///< 不支持HTTPS请求 - AMapTrackErrorInsufficientPrivileges = 10012,///< 权限不足,服务请求被拒绝 - AMapTrackErrorUserKeyRecycled = 10013,///< 开发者key被删除,无法正常使用 - AMapTrackErrorQPSHasExceededLimit = 10014,///< QPS超出限制 - AMapTrackErrorGatewayTimeout = 10015,///< 单机QPS限流限制 - AMapTrackErrorServerIsBusy = 10016,///< 服务器负载过高 - AMapTrackErrorResourceUnavailable = 10017,///< 所请求的资源不可用 - - AMapTrackErrorInvalidParams = 20000,///< 请求参数非法 - AMapTrackErrorMissingRequiredParams = 20001,///< 缺少必填参数 - AMapTrackErrorIllegalRequest = 20002,///< 请求协议非法 - AMapTrackErrorServiceUnknown = 20003,///< 其他服务端未知错误 - AMapTrackErrorDuplicatedElement = 20009,///< 请求包含重复元素 - AMapTrackErrorElementNotExist = 20010,///< 请求的元素不存在 - AMapTrackErrorServiceNotExist = 20050,///< service不存在 - AMapTrackErrorTerminalNotExist = 20051,///< ternimal不存在 - AMapTrackErrorUploadPointPartlyError = 20100,///< 部分point上传失败 - AMapTrackErrorUploadPointError = 20101,///< 所有point上传失败 - AMapTrackErrorCountOverLimit = 20150,///< 数量超过限制 -}; - -#endif /* AMapTrackKit_AMapTrackError_h */ diff --git a/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackHistoryObj.h b/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackHistoryObj.h deleted file mode 100644 index 28b63fe..0000000 --- a/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackHistoryObj.h +++ /dev/null @@ -1,183 +0,0 @@ -// -// AMapTrackHistoryObj.h -// AMapTrackKit -// -// Created by liubo on 2017/8/29. -// Copyright © 2017年 Amap. All rights reserved. -// - -#import -#import "AMapTrackCommonObj.h" - -typedef NS_ENUM(NSUInteger, AMapTrackRecoupMode) -{ - AMapTrackRecoupModeNone = 0,///< 用直线距离进行补点计算 - AMapTrackRecoupModeDriving = 1,///< 用驾车策略进行补点计算 -}; - -#pragma mark - AMapTrackQueryLastPointRequest - -///终端位置查询 -@interface AMapTrackQueryLastPointRequest : AMapTrackBaseRequest - -///要查询的Terminal的ID -@property (nonatomic, copy) NSString *terminalID; - -///要查询的Track的ID -@property (nonatomic, copy) NSString *trackID; - -///是否进行轨迹纠偏,支持的参数如下(默认@"n"不纠偏): @"n":不纠偏; @"driving":驾车模式纠偏; -@property (nonatomic, copy) NSString *correctionMode; - -@end - -#pragma mark - AMapTrackQueryLastPointResponse - -@interface AMapTrackQueryLastPointResponse : AMapTrackBaseResponse - -///位置点 -@property (nonatomic, strong) AMapTrackPoint *lastPoint; - -@end - -#pragma mark - AMapTrackQueryTrackDistanceRequest - -///行驶距离查询 -@interface AMapTrackQueryTrackDistanceRequest : AMapTrackBaseRequest - -///要查询的Terminal的ID -@property (nonatomic, copy) NSString *terminalID; - -///要查询的Track的ID -@property (nonatomic, copy) NSString *trackID; - -///要查询的开始时间,单位毫秒 -@property (nonatomic, assign) long long startTime; - -///要查询的结束时间,单位毫秒。结束时间不能大于当前时间,且距离开始时间不能超过24小时。 -@property (nonatomic, assign) long long endTime; - -///是否进行轨迹纠偏,支持的参数如下(默认@"n"不纠偏): @"n":不纠偏; @"driving":驾车模式纠偏; -@property (nonatomic, copy) NSString *correctionMode; - -///指定轨迹和里程的补充模式,默认为 AMapTrackRecoupModeNone 用直线距离进行补点计算 -@property (nonatomic, assign) AMapTrackRecoupMode recoupMode; - -///指定触发recoupMode参数生效的点间距,单位米,默认5000,有效值范围[50, 10000] -@property (nonatomic, assign) NSUInteger recoupGap; - -@end - -#pragma mark - AMapTrackQueryTrackDistanceResponse - -///行驶距离查询返回 -@interface AMapTrackQueryTrackDistanceResponse : AMapTrackBaseResponse - -///行驶距离,单位米 -@property (nonatomic, assign) NSUInteger distance; - -@end - -#pragma mark - AMapTrackQueryTrackHistoryAndDistanceRequest - -///行驶轨迹和距离查询 -@interface AMapTrackQueryTrackHistoryAndDistanceRequest : AMapTrackBaseRequest - -///要查询的Terminal的ID -@property (nonatomic, copy) NSString *terminalID; - -///要查询的开始时间,单位毫秒 -@property (nonatomic, assign) long long startTime; - -///要查询的结束时间,单位毫秒。结束时间不能大于当前时间,且距离开始时间不能超过24小时。 -@property (nonatomic, assign) long long endTime; - -///是否进行轨迹纠偏,支持的参数如下(默认@"n"不纠偏): @"n":不纠偏; @"driving":驾车模式纠偏; -@property (nonatomic, copy) NSString *correctionMode; - -///指定轨迹和里程的补充模式,默认为 AMapTrackRecoupModeNone 用直线距离进行补点计算 -@property (nonatomic, assign) AMapTrackRecoupMode recoupMode; - -///指定触发recoupMode参数生效的点间距,单位米,默认5000,有效值范围[50, 10000] -@property (nonatomic, assign) NSUInteger recoupGap; - -///排序规则,默认0: 0表示ASC(升序); 1表示DESC(降序); -@property (nonatomic, assign) int sortType; - -///第几页数据,默认1 -@property (nonatomic, assign) NSUInteger pageIndex; - -///每页数据量,默认20,有效值范围[1, 1000) -@property (nonatomic, assign) NSUInteger pageSize; - -@end - -#pragma mark - AMapTrackQueryTrackHistoryAndDistanceResponse - -///行驶轨迹和距离查询返回 -@interface AMapTrackQueryTrackHistoryAndDistanceResponse : AMapTrackBaseResponse - -///行驶距离,单位米 -@property (nonatomic, assign) NSUInteger distance; - -///符合要求点的个数 -@property (nonatomic, assign) NSUInteger count; - -///起点信息,仅在page=1的时候显示相关信息 -@property (nonatomic, strong) AMapTrackPoint *startPoint; - -///终点信息,仅在page=1的时候显示相关信息 -@property (nonatomic, strong) AMapTrackPoint *endPoint; - -///历史轨迹数据 -@property (nonatomic, strong) NSArray *points; - -@end - -#pragma mark - AMapTrackQueryTrackInfoRequest - -@interface AMapTrackQueryTrackInfoRequest : AMapTrackBaseRequest - -///要查询的Terminal的ID -@property (nonatomic, copy) NSString *terminalID; - -///要查询的Track的ID -@property (nonatomic, copy) NSString *trackID; - -///要查询的开始时间,单位毫秒 -@property (nonatomic, assign) long long startTime; - -///要查询的结束时间,单位毫秒。结束时间不能大于当前时间,且距离开始时间不能超过24小时。 -@property (nonatomic, assign) long long endTime; - -///是否进行轨迹纠偏,默认为空@""不纠偏 -@property (nonatomic, copy) NSString *correctionMode; - -///指定轨迹和里程的补充模式,默认为 AMapTrackRecoupModeNone 用直线距离进行补点计算 -@property (nonatomic, assign) AMapTrackRecoupMode recoupMode; - -///指定触发recoupMode参数生效的点间距,单位米,默认5000,有效值范围[50, 10000] -@property (nonatomic, assign) NSUInteger recoupGap; - -///是否返回track的轨迹点信息,默认YES -@property (nonatomic, assign) BOOL containPoints; - -///第几页数据,默认1 -@property (nonatomic, assign) NSUInteger pageIndex; - -///每页数据量,默认20,有效值范围[1, 1000) -@property (nonatomic, assign) NSUInteger pageSize; - -@end - -#pragma mark - AMapTrackQueryTrackInfoResponse - -@interface AMapTrackQueryTrackInfoResponse : AMapTrackBaseResponse - -///轨迹数据 -@property (nonatomic, strong) NSArray *tracks; - -///tracks的总数量 -@property (nonatomic, assign) NSUInteger counts; - -@end diff --git a/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackKit.h b/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackKit.h deleted file mode 100644 index 5f682c8..0000000 --- a/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackKit.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// AMapTrackKit.h -// AMapTrackKit -// -// Created by liubo on 2017/8/15. -// Copyright © 2017年 Amap. All rights reserved. -// - -#import - -#import -#import -#import - -#import -#import -#import -#import diff --git a/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackManager.h b/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackManager.h deleted file mode 100644 index ecd9e6e..0000000 --- a/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackManager.h +++ /dev/null @@ -1,321 +0,0 @@ -// -// AMapTrackManager.h -// AMapTrackKit -// -// Created by liubo on 2017/8/15. -// Copyright © 2017年 Amap. All rights reserved. -// - -#import -#import -#import "AMapTrackError.h" -#import "AMapTrackManagerOptions.h" - -#import "AMapTrackCommonObj.h" -#import "AMapTrackTerminalObj.h" -#import "AMapTrackTrackObj.h" -#import "AMapTrackHistoryObj.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol AMapTrackManagerDelegate; - -#pragma mark - AMapTrackManager - -@interface AMapTrackManager : NSObject - -///初始化方法 -- (instancetype)initWithOptions:(AMapTrackManagerOptions *)options NS_DESIGNATED_INITIALIZER; - -///AMapTrackManager的delegate -@property (nonatomic, weak) id delegate; - -#pragma mark - Location - -///设定定位的活跃类型。默认为 CLActivityTypeAutomotiveNavigation 。 -@property (nonatomic, assign) CLActivityType activityType; - -///设定定位的最小更新距离。单位米,默认为 kCLDistanceFilterNone,表示只要检测到设备位置发生变化就会更新位置信息。 -@property (nonatomic, assign) CLLocationDistance distanceFilter; - -///设定期望的定位精度。单位米,默认为 kCLLocationAccuracyBest。定位服务会尽可能去获取满足desiredAccuracy的定位结果,但不保证一定会得到满足期望的结果。 -///注意:iOS14及以上版本,轨迹服务需要在精确定位权限下使用,如果该参数设置kCLLocationAccuracyReduced无效。 -@property (nonatomic, assign) CLLocationAccuracy desiredAccuracy; - -///指定定位是否会被系统自动暂停。默认为NO。 -@property (nonatomic, assign) BOOL pausesLocationUpdatesAutomatically; - -///是否允许后台定位。默认为NO。只在iOS 9.0及之后起作用。设置为YES的时候必须保证 Background Modes 中的 Location updates 处于选中状态,否则会抛出异常。由于iOS系统限制,需要在定位未开始之前或定位停止之后,修改该属性的值才会有效果。 -@property (nonatomic, assign) BOOL allowsBackgroundLocationUpdates; - -#pragma mark - Gather And Pack - -///定位信息的采集周期,单位秒,默认2s,有效值范围[1, 60]。 -@property (nonatomic, readonly) NSUInteger gatherInterval; - -///定位信息的上传周期,单位秒,默认20s,有效值范围[5, 3000]。 -@property (nonatomic, readonly) NSUInteger packInterval; - -/** - * @brief 设定定位信息的采集周期和上传周期,注意:上传周期必须为采集周期的整数倍 - * @param gatherTimeInterval 定位信息的采集周期,单位秒,有效值范围[1, 60] - * @param packTimeInterval 定位信息的上传周期,单位秒,有效值范围[5, 3000] - */ -- (void)changeGatherAndPackTimeInterval:(NSInteger)gatherTimeInterval packTimeInterval:(NSInteger)packTimeInterval; - -#pragma mark - Service And Gather - -///当前的serviceID,初始化时指定。 -@property (nonatomic, readonly) NSString *serviceID; - -///当前的terminalID,startService时指定。 -@property (nonatomic, readonly) NSString *terminalID; - -///当前的trackID。 -@property (nonatomic, copy) NSString *trackID; - -/** - * @brief 开始Service,结果会通过onStartService:回调返回 - * @param options AMapTrackManagerServiceOption类实例 - */ -- (void)startServiceWithOptions:(AMapTrackManagerServiceOption *)options; - -/** - * @brief 停止Service,结果会通过onStopService:回调返回 - */ -- (void)stopService; - -/** - * @brief 开始采集和上传,结果会通过onStartGatherAndPack:返回 - */ -- (void)startGatherAndPack; - -/** - * @brief 停止采集和上传,结果会通过onStopGatherAndPack:返回 - */ -- (void)stopGaterAndPack; - -#pragma mark - Cache Size - -/** - * @brief 设定允许的本地缓存最大值 - * @param cacheMaxSize 本地缓存最大值,单位MB,默认+∞,有效值范围[50,+∞)。 - * @return 是否设定成功 - */ -- (BOOL)setLocalCacheMaxSize:(NSInteger)cacheMaxSize; - -///本地缓存最大值 -@property (nonatomic, readonly) NSUInteger cacheMaxSize; - -#pragma mark - Network - -///网络超时时间,单位秒,默认为30。 -@property (nonatomic, assign) NSInteger timeout; - -/** - * @brief 取消所有未回调的请求,触发错误回调didFailWithError:associatedRequest:。 - */ -- (void)cancelAllRequests; - -#pragma mark - Terminal Request - -/** - * @brief 增加Terminal接口 - * @param request 查询选项。具体属性字段请参考 AMapTrackAddTerminalRequest 类。 - */ -- (void)AMapTrackAddTerminal:(AMapTrackAddTerminalRequest *)request; - -/** - * @brief 查询Terminal接口 - * @param request 查询选项。具体属性字段请参考 AMapTrackQueryTerminalRequest 类。 - */ -- (void)AMapTrackQueryTerminal:(AMapTrackQueryTerminalRequest *)request; - -#pragma mark - Track Request - -/** - * @brief 增加Track接口 - * @param request 查询选项。具体属性字段请参考 AMapTrackAddTrackRequest 类。 - */ -- (void)AMapTrackAddTrack:(AMapTrackAddTrackRequest *)request; - -/** - * @brief 删除Track接口 - * @param request 查询选项。具体属性字段请参考 AMapTrackDeleteTrackRequest 类。 - */ -- (void)AMapTrackDeleteTrack:(AMapTrackDeleteTrackRequest *)request; - -#pragma mark - Track History Request - -/** - * @brief 查询终端位置接口 - * @param request 查询选项。具体属性字段请参考 AMapTrackQueryLastPointRequest 类。 - */ -- (void)AMapTrackQueryLastPoint:(AMapTrackQueryLastPointRequest *)request; - -/** - * @brief 查询轨迹行驶距离接口 - * @param request 查询选项。具体属性字段请参考 AMapTrackQueryTrackDistanceRequest 类。 - */ -- (void)AMapTrackQueryTrackDistance:(AMapTrackQueryTrackDistanceRequest *)request; - -/** - * @brief 查询轨迹历史数据和行驶距离接口 - * @param request 查询选项。具体属性字段请参考 AMapTrackQueryTrackHistoryAndDistanceRequest 类。 - */ -- (void)AMapTrackQueryTrackHistoryAndDistance:(AMapTrackQueryTrackHistoryAndDistanceRequest *)request; - -/** - * @brief 查询轨迹历史数据 - * @param request 查询选项。具体属性字段请参考 AMapTrackQueryTrackInfoRequest 类。 - */ -- (void)AMapTrackQueryTrackInfo:(AMapTrackQueryTrackInfoRequest *)request; - -@end - -#pragma mark - AMapTrackManagerDelegate - -@protocol AMapTrackManagerDelegate - -@required - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 140000 - -/** - * @brief iOS14及以上版本使用猎鹰轨迹功能,需要在plist中配置NSLocationTemporaryUsageDescriptionDictionary字典描述,且添加自定义Key描述轨迹的使用场景,此描述会在申请临时精确定位权限的弹窗中展示。该回调触发条件:拥有定位权限,但是没有获得精确定位权限的情况下触发该回调。 - 此方法实现调用申请临时精确定位权限API即可: - * [locationManager requestTemporaryFullAccuracyAuthorizationWithPurposeKey:@"PurposeKey" completion:^(NSError *error){ - * if(completion){ - * completion(error); - * } - * }]; (必须调用,不然无法正常获取临时精确定位权限) - * @param manager 轨迹管理类。 - * @param locationManager 需要申请临时精确定位权限的locationManager。 - * @param completion 临时精确定位权限API回调结果。error: 直接返回系统error即可 - * @since 1.4.0 - */ -- (void)amapTrackManager:(AMapTrackManager *)manager doRequireTemporaryFullAccuracyAuth:(CLLocationManager*)locationManager completion:(void(^)(NSError *error))completion; - -#endif - -@optional - -/** - * @brief 当plist配置NSLocationAlwaysUsageDescription或者NSLocationAlwaysAndWhenInUseUsageDescription,并且[CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined,会调用代理的此方法。 - 此方法实现申请后台权限API即可:[locationManager requestAlwaysAuthorization](必须调用,不然无法正常获取定位权限) - * @param manager 轨迹管理类。 - * @param locationManager 需要申请后台定位权限的locationManager。 - * @since 1.4.0 - */ -- (void)amapTrackManager:(AMapTrackManager *)manager doRequireLocationAuth:(CLLocationManager*)locationManager; - - -/** - * @brief 当请求发生错误时,会调用代理的此方法。 - * @param error 返回的错误。 - * @param request 发生错误的请求。 - */ -- (void)didFailWithError:(NSError *)error associatedRequest:(id)request; - -/** - * @brief 开始Service回调 - * @param errorCode 开始Service的错误信息,参考 AMapTrackErrorCode 。 - */ -- (void)onStartService:(AMapTrackErrorCode)errorCode; - -/** - * @brief 停止Service回调 - * @param errorCode 开始Service的错误信息,参考 AMapTrackErrorCode 。 - */ -- (void)onStopService:(AMapTrackErrorCode)errorCode; - -/** - * @brief 开始采集和上传回调 - * @param errorCode 开始Service的错误信息,参考 AMapTrackErrorCode 。 - */ -- (void)onStartGatherAndPack:(AMapTrackErrorCode)errorCode; - -/** - * @brief 停止采集和上传回调,建议使用 onStopGatherAndPack:errorMessage: 替代此方法 - * @param errorCode 停止采集和上传回调的错误信息,参考 AMapTrackErrorCode 。 - */ -- (void)onStopGatherAndPack:(AMapTrackErrorCode)errorCode; - -/** - * @brief 停止采集和上传回调. since 1.1.0 - * @param errorCode 停止采集和上传回调的错误信息,参考 AMapTrackErrorCode 。 - * @param errorMessage 停止采集和上传回调的错误信息 - */ -- (void)onStopGatherAndPack:(AMapTrackErrorCode)errorCode errorMessage:(nullable NSString *)errorMessage; - -/** - * @brief 定位点的自定义字段. since 1.1.0 - * @return 自定义的字段 注:自定义字段类型需要为字符串类型,否则采集和上传失败 - */ -- (NSDictionary *)trackManagerGetCustomDictionary; - -#pragma mark - Terminal Request Done - -/** - * @brief 增加Terminal回调函数 - * @param request 发起的请求,具体字段参考 AMapTrackAddTerminalRequest 类。 - * @param response 响应结果,具体字段参考 AMapTrackAddTerminalResponse 类。 - */ -- (void)onAddTerminalDone:(AMapTrackAddTerminalRequest *)request response:(AMapTrackAddTerminalResponse *)response; - -/** - * @brief 查询Terminal回调函数 - * @param request 发起的请求,具体字段参考 AMapTrackQueryTerminalRequest 类。 - * @param response 响应结果,具体字段参考 AMapTrackQueryTerminalResponse 类。 - */ -- (void)onQueryTerminalDone:(AMapTrackQueryTerminalRequest *)request response:(AMapTrackQueryTerminalResponse *)response; - -#pragma mark - Track Request Done - -/** - * @brief 增加Track回调函数 - * @param request 发起的请求,具体字段参考 AMapTrackAddTrackRequest 类。 - * @param response 响应结果,具体字段参考 AMapTrackAddTrackResponse 类。 - */ -- (void)onAddTrackDone:(AMapTrackAddTrackRequest *)request response:(AMapTrackAddTrackResponse *)response; - -/** - * @brief 删除Track回调函数 - * @param request 发起的请求,具体字段参考 AMapTrackDeleteTrackRequest 类。 - * @param response 响应结果,具体字段参考 AMapTrackBaseResponse 类。 - */ -- (void)onDeleteTrackDone:(AMapTrackDeleteTrackRequest *)request response:(AMapTrackBaseResponse *)response; - -#pragma mark - Track History Request Done - -/** - * @brief 查询终端位置回调函数 - * @param request 发起的请求,具体字段参考 AMapTrackQueryLastPointRequest 类。 - * @param response 响应结果,具体字段参考 AMapTrackQueryLastPointResponse 类。 - */ -- (void)onQueryLastPointDone:(AMapTrackQueryLastPointRequest *)request response:(AMapTrackQueryLastPointResponse *)response; - -/** - * @brief 查询轨迹行驶距离回调函数 - * @param request 发起的请求,具体字段参考 AMapTrackQueryTrackDistanceRequest 类。 - * @param response 响应结果,具体字段参考 AMapTrackQueryTrackDistanceResponse 类。 - */ -- (void)onQueryTrackDistanceDone:(AMapTrackQueryTrackDistanceRequest *)request response:(AMapTrackQueryTrackDistanceResponse *)response; - -/** - * @brief 查询轨迹历史数据和行驶距离回调函数 - * @param request 发起的请求,具体字段参考 AMapTrackQueryTrackHistoryAndDistanceRequest 类。 - * @param response 响应结果,具体字段参考 AMapTrackQueryTrackHistoryAndDistanceResponse 类。 - */ -- (void)onQueryTrackHistoryAndDistanceDone:(AMapTrackQueryTrackHistoryAndDistanceRequest *)request response:(AMapTrackQueryTrackHistoryAndDistanceResponse *)response; - -/** - * @brief 查询轨迹历史数据回调函数 - * @param request 发起的请求,具体字段参考 AMapTrackQueryTrackInfoRequest 类。 - * @param response 响应结果,具体字段参考 AMapTrackQueryTrackInfoResponse 类。 - */ -- (void)onQueryTrackInfoDone:(AMapTrackQueryTrackInfoRequest *)request response:(AMapTrackQueryTrackInfoResponse *)response; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackManagerOptions.h b/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackManagerOptions.h deleted file mode 100644 index e863c98..0000000 --- a/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackManagerOptions.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// AMapTrackManagerOptions.h -// AMapTrackKit -// -// Created by liubo on 2017/8/17. -// Copyright © 2017年 Amap. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface AMapTrackManagerOptions : NSObject - -///指定的serviceID -@property (nonatomic, copy) NSString *serviceID; - -@end - -@interface AMapTrackManagerServiceOption : NSObject - -///指定的terminalID -@property (nonatomic, copy) NSString *terminalID; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackTerminalObj.h b/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackTerminalObj.h deleted file mode 100644 index 6b74f47..0000000 --- a/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackTerminalObj.h +++ /dev/null @@ -1,62 +0,0 @@ -// -// AMapTrackTerminalObj.h -// AMapTrackKit -// -// Created by liubo on 2017/8/17. -// Copyright © 2017年 Amap. All rights reserved. -// - -#import -#import "AMapTrackCommonObj.h" - -#pragma mark - AMapTrackAddTerminalRequest - -///增加Terminal请求 -@interface AMapTrackAddTerminalRequest : AMapTrackBaseRequest - -///增加的Terminal的name -@property (nonatomic, copy) NSString *terminalName; - -///增加的Terminal的描述信息 -@property (nonatomic, copy) NSString *terminalDesc; - -@end - -#pragma mark - AMapTrackAddTerminalResponse - -///增加Terminal请求返回 -@interface AMapTrackAddTerminalResponse : AMapTrackBaseResponse - -///增加的Terminal所属的serviceID -@property (nonatomic, copy) NSString *serviceID; - -///增加的Terminal的terminalID -@property (nonatomic, copy) NSString *terminalID; - -///增加的Terminal的name -@property (nonatomic, copy) NSString *terminalName; - -@end - -#pragma mark - AMapTrackQueryTerminalRequest - -///查询Terminal请求 -@interface AMapTrackQueryTerminalRequest : AMapTrackBaseRequest - -///要查询的Terminal的terminalID -@property (nonatomic, copy) NSString *terminalID; - -///要查询的Terminal的name,如果填写了terminalID则以terminalID为准 -@property (nonatomic, copy) NSString *terminalName; - -@end - -#pragma mark - AMapTrackQueryTerminalResponse - -///查询Terminal请求返回 -@interface AMapTrackQueryTerminalResponse : AMapTrackBaseResponse - -///查询的Terminal结果 -@property (nonatomic, strong) NSArray *terminals; - -@end diff --git a/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackTrackObj.h b/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackTrackObj.h deleted file mode 100644 index 12d6ee3..0000000 --- a/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackTrackObj.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// AMapTrackTrackObj.h -// AMapTrackKit -// -// Created by liubo on 2017/12/11. -// Copyright © 2017年 Amap. All rights reserved. -// - -#import -#import "AMapTrackCommonObj.h" - -#pragma mark - AMapTrackAddTrackRequest - -///增加Track请求 -@interface AMapTrackAddTrackRequest : AMapTrackBaseRequest - -///指定的Terminal的ID -@property (nonatomic, strong) NSString *terminalID; - -@end - -#pragma mark - AMapTrackAddTrackResponse - -///增加Track请求返回 -@interface AMapTrackAddTrackResponse : AMapTrackBaseResponse - -///新增的Track的ID -@property (nonatomic, strong) NSString *trackID; - -@end - -#pragma mark - AMapTrackDeleteTrackRequest - -///删除Track请求 -@interface AMapTrackDeleteTrackRequest : AMapTrackBaseRequest - -///指定的Terminal的ID -@property (nonatomic, strong) NSString *terminalID; - -///要删除的Track的ID -@property (nonatomic, strong) NSString *trackID; - -@end diff --git a/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackVersion.h b/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackVersion.h deleted file mode 100644 index 932ba90..0000000 --- a/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/Headers/AMapTrackVersion.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// AMapTrackVersion.h -// AMapTrackKit -// -// Created by liubo on 2017/8/15. -// Copyright © 2017年 Amap. All rights reserved. -// - -#import -#import -#import - -#ifndef AMapTrackVersion_h -#define AMapTrackVersion_h - -#define AMapTrackVersionNumber 10402 -#define AMapTrackFoundationVersionMinRequired 10605 -#define AMapTrackLocationVersionMinRequired 20607 - -// 依赖库AMapFoundationKit版本检测 -#if AMapFoundationVersionNumber < AMapTrackFoundationVersionMinRequired -#error "The AMapFoundationKit version is less than minimum required, please update! Any questions please to visit http://lbs.amap.com" -#endif - -// 依赖库AMapLocationKit版本检测 -#if AMapLocationVersionNumber < AMapTrackLocationVersionMinRequired -#error "The AMapLocationKit version is less than minimum required, please update! Any questions please to visit http://lbs.amap.com" -#endif - -FOUNDATION_EXTERN NSString * const AMapTrackVersion; -FOUNDATION_EXTERN NSString * const AMapTrackName; - -#endif /* AMapTrackVersion_h */ diff --git a/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/version.txt b/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/version.txt deleted file mode 100644 index de15695..0000000 --- a/Pods/AMapTrack-NO-IDFA/AMapTrackKit.framework/version.txt +++ /dev/null @@ -1 +0,0 @@ -1.4.2+track.d1c86e4 diff --git a/Pods/Alamofire/LICENSE b/Pods/Alamofire/LICENSE deleted file mode 100644 index cae030a..0000000 --- a/Pods/Alamofire/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2014-2022 Alamofire Software Foundation (http://alamofire.org/) - -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. diff --git a/Pods/Alamofire/README.md b/Pods/Alamofire/README.md deleted file mode 100644 index c9adb9f..0000000 --- a/Pods/Alamofire/README.md +++ /dev/null @@ -1,256 +0,0 @@ -![Alamofire: Elegant Networking in Swift](https://raw.githubusercontent.com/Alamofire/Alamofire/master/Resources/AlamofireLogo.png) - -[![Swift](https://img.shields.io/badge/Swift-5.6_5.7_5.8_5.9-orange?style=flat-square)](https://img.shields.io/badge/Swift-5.6_5.7_5.8_5.9-Orange?style=flat-square) -[![Platforms](https://img.shields.io/badge/Platforms-macOS_iOS_tvOS_watchOS_visionOS_Linux_Windows_Android-yellowgreen?style=flat-square)](https://img.shields.io/badge/Platforms-macOS_iOS_tvOS_watchOS_vision_OS_Linux_Windows_Android-Green?style=flat-square) -[![CocoaPods Compatible](https://img.shields.io/cocoapods/v/Alamofire.svg?style=flat-square)](https://img.shields.io/cocoapods/v/Alamofire.svg) -[![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat-square)](https://github.com/Carthage/Carthage) -[![Swift Package Manager](https://img.shields.io/badge/Swift_Package_Manager-compatible-orange?style=flat-square)](https://img.shields.io/badge/Swift_Package_Manager-compatible-orange?style=flat-square) -[![Swift Forums](https://img.shields.io/badge/Swift_Forums-Alamofire-orange?style=flat-square)](https://forums.swift.org/c/related-projects/alamofire/37) - -Alamofire is an HTTP networking library written in Swift. - -- [Features](#features) -- [Component Libraries](#component-libraries) -- [Requirements](#requirements) -- [Migration Guides](#migration-guides) -- [Communication](#communication) -- [Installation](#installation) -- [Contributing](#contributing) -- [Usage](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#using-alamofire) - - [**Introduction -**](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#introduction) [Making Requests](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#making-requests), [Response Handling](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#response-handling), [Response Validation](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#response-validation), [Response Caching](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#response-caching) - - **HTTP -** [HTTP Methods](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#http-methods), [Parameters and Parameter Encoder](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md##request-parameters-and-parameter-encoders), [HTTP Headers](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#http-headers), [Authentication](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#authentication) - - **Large Data -** [Downloading Data to a File](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#downloading-data-to-a-file), [Uploading Data to a Server](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#uploading-data-to-a-server) - - **Tools -** [Statistical Metrics](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#statistical-metrics), [cURL Command Output](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#curl-command-output) -- [Advanced Usage](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md) - - **URL Session -** [Session Manager](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#session), [Session Delegate](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#sessiondelegate), [Request](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#request) - - **Routing -** [Routing Requests](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#routing-requests), [Adapting and Retrying Requests](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#adapting-and-retrying-requests-with-requestinterceptor) - - **Model Objects -** [Custom Response Handlers](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#customizing-response-handlers) - - **Advanced Concurrency -** [Swift Concurrency](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#using-alamofire-with-swift-concurrency) and [Combine](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#using-alamofire-with-combine) - - **Connection -** [Security](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#security), [Network Reachability](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#network-reachability) -- [Open Radars](#open-radars) -- [FAQ](#faq) -- [Credits](#credits) -- [Donations](#donations) -- [License](#license) - -## Features - -- [x] Chainable Request / Response Methods -- [x] Swift Concurrency Support Back to iOS 13, macOS 10.15, tvOS 13, and watchOS 6. -- [x] Combine Support -- [x] URL / JSON Parameter Encoding -- [x] Upload File / Data / Stream / MultipartFormData -- [x] Download File using Request or Resume Data -- [x] Authentication with `URLCredential` -- [x] HTTP Response Validation -- [x] Upload and Download Progress Closures with Progress -- [x] cURL Command Output -- [x] Dynamically Adapt and Retry Requests -- [x] TLS Certificate and Public Key Pinning -- [x] Network Reachability -- [x] Comprehensive Unit and Integration Test Coverage -- [x] [Complete Documentation](https://alamofire.github.io/Alamofire) - -## Write Requests Fast! - -Alamofire's compact syntax and extensive feature set allow requests with powerful features like automatic retry to be written in just a few lines of code. - -```swift -// Automatic String to URL conversion, Swift concurrency support, and automatic retry. -let response = await AF.request("https://httpbin.org/get", interceptor: .retryPolicy) - // Automatic HTTP Basic Auth. - .authenticate(username: "user", password: "pass") - // Caching customization. - .cacheResponse(using: .cache) - // Redirect customization. - .redirect(using: .follow) - // Validate response code and Content-Type. - .validate() - // Produce a cURL command for the request. - .cURLDescription { description in - print(description) - } - // Automatic Decodable support with background parsing. - .serializingDecodable(DecodableType.self) - // Await the full response with metrics and a parsed body. - .response -// Detailed response description for easy debugging. -debugPrint(response) -``` - -## Component Libraries - -In order to keep Alamofire focused specifically on core networking implementations, additional component libraries have been created by the [Alamofire Software Foundation](https://github.com/Alamofire/Foundation) to bring additional functionality to the Alamofire ecosystem. - -- [AlamofireImage](https://github.com/Alamofire/AlamofireImage) - An image library including image response serializers, `UIImage` and `UIImageView` extensions, custom image filters, an auto-purging in-memory cache, and a priority-based image downloading system. -- [AlamofireNetworkActivityIndicator](https://github.com/Alamofire/AlamofireNetworkActivityIndicator) - Controls the visibility of the network activity indicator on iOS using Alamofire. It contains configurable delay timers to help mitigate flicker and can support `URLSession` instances not managed by Alamofire. - -## Requirements - -| Platform | Minimum Swift Version | Installation | Status | -| ---------------------------------------------------- | --------------------- | -------------------------------------------------------------------------------------------------------------------- | ------------------------ | -| iOS 10.0+ / macOS 10.12+ / tvOS 10.0+ / watchOS 3.0+ | 5.6 | [CocoaPods](#cocoapods), [Carthage](#carthage), [Swift Package Manager](#swift-package-manager), [Manual](#manually) | Fully Tested | -| Linux | Latest Only | [Swift Package Manager](#swift-package-manager) | Building But Unsupported | -| Windows | Latest Only | [Swift Package Manager](#swift-package-manager) | Building But Unsupported | -| Android | Latest Only | [Swift Package Manager](#swift-package-manager) | Building But Unsupported | - -#### Known Issues on Linux and Windows - -Alamofire builds on Linux, Windows, and Android but there are missing features and many issues in the underlying `swift-corelibs-foundation` that prevent full functionality and may cause crashes. These include: - -- `ServerTrustManager` and associated certificate functionality is unavailable, so there is no certificate pinning and no client certificate support. -- Various methods of HTTP authentication may crash, including HTTP Basic and HTTP Digest. Crashes may occur if responses contain server challenges. -- Cache control through `CachedResponseHandler` and associated APIs is unavailable, as the underlying delegate methods aren't called. -- `URLSessionTaskMetrics` are never gathered. - -Due to these issues, Alamofire is unsupported on Linux, Windows, and Android. Please report any crashes to the [Swift bug reporter](https://bugs.swift.org). - -## Migration Guides - -- [Alamofire 5.0 Migration Guide](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%205.0%20Migration%20Guide.md) -- [Alamofire 4.0 Migration Guide](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%204.0%20Migration%20Guide.md) -- [Alamofire 3.0 Migration Guide](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%203.0%20Migration%20Guide.md) -- [Alamofire 2.0 Migration Guide](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%202.0%20Migration%20Guide.md) - -## Communication - -- If you **need help with making network requests** using Alamofire, use [Stack Overflow](https://stackoverflow.com/questions/tagged/alamofire) and tag `alamofire`. -- If you need to **find or understand an API**, check [our documentation](http://alamofire.github.io/Alamofire/) or [Apple's documentation for `URLSession`](https://developer.apple.com/documentation/foundation/url_loading_system), on top of which Alamofire is built. -- If you need **help with an Alamofire feature**, use [our forum on swift.org](https://forums.swift.org/c/related-projects/alamofire). -- If you'd like to **discuss Alamofire best practices**, use [our forum on swift.org](https://forums.swift.org/c/related-projects/alamofire). -- If you'd like to **discuss a feature request**, use [our forum on swift.org](https://forums.swift.org/c/related-projects/alamofire). -- If you **found a bug**, open an issue here on GitHub and follow the guide. The more detail the better! - -## Installation - -### CocoaPods - -[CocoaPods](https://cocoapods.org) is a dependency manager for Cocoa projects. For usage and installation instructions, visit their website. To integrate Alamofire into your Xcode project using CocoaPods, specify it in your `Podfile`: - -```ruby -pod 'Alamofire' -``` - -### Carthage - -[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. To integrate Alamofire into your Xcode project using Carthage, specify it in your `Cartfile`: - -```ogdl -github "Alamofire/Alamofire" -``` - -### Swift Package Manager - -The [Swift Package Manager](https://swift.org/package-manager/) is a tool for automating the distribution of Swift code and is integrated into the `swift` compiler. - -Once you have your Swift package set up, adding Alamofire as a dependency is as easy as adding it to the `dependencies` value of your `Package.swift`. - -```swift -dependencies: [ - .package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.8.1")) -] -``` - -### Manually - -If you prefer not to use any of the aforementioned dependency managers, you can integrate Alamofire into your project manually. - -#### Embedded Framework - -- Open up Terminal, `cd` into your top-level project directory, and run the following command "if" your project is not initialized as a git repository: - - ```bash - $ git init - ``` - -- Add Alamofire as a git [submodule](https://git-scm.com/docs/git-submodule) by running the following command: - - ```bash - $ git submodule add https://github.com/Alamofire/Alamofire.git - ``` - -- Open the new `Alamofire` folder, and drag the `Alamofire.xcodeproj` into the Project Navigator of your application's Xcode project. - - > It should appear nested underneath your application's blue project icon. Whether it is above or below all the other Xcode groups does not matter. - -- Select the `Alamofire.xcodeproj` in the Project Navigator and verify the deployment target matches that of your application target. -- Next, select your application project in the Project Navigator (blue project icon) to navigate to the target configuration window and select the application target under the "Targets" heading in the sidebar. -- In the tab bar at the top of that window, open the "General" panel. -- Click on the `+` button under the "Embedded Binaries" section. -- You will see two different `Alamofire.xcodeproj` folders each with two different versions of the `Alamofire.framework` nested inside a `Products` folder. - - > It does not matter which `Products` folder you choose from, but it does matter whether you choose the top or bottom `Alamofire.framework`. - -- Select the top `Alamofire.framework` for iOS and the bottom one for macOS. - - > You can verify which one you selected by inspecting the build log for your project. The build target for `Alamofire` will be listed as `Alamofire iOS`, `Alamofire macOS`, `Alamofire tvOS`, or `Alamofire watchOS`. - -- And that's it! - - > The `Alamofire.framework` is automagically added as a target dependency, linked framework and embedded framework in a copy files build phase which is all you need to build on the simulator and a device. - -## Contributing - -Before contributing to Alamofire, please read the instructions detailed in our [contribution guide](https://github.com/Alamofire/Alamofire/blob/master/CONTRIBUTING.md). - -## Open Radars - -The following radars have some effect on the current implementation of Alamofire. - -- [`rdar://21349340`](http://www.openradar.me/radar?id=5517037090635776) - Compiler throwing warning due to toll-free bridging issue in the test case -- `rdar://26870455` - Background URL Session Configurations do not work in the simulator -- `rdar://26849668` - Some URLProtocol APIs do not properly handle `URLRequest` - -## Resolved Radars - -The following radars have been resolved over time after being filed against the Alamofire project. - -- [`rdar://26761490`](http://www.openradar.me/radar?id=5010235949318144) - Swift string interpolation causing memory leak with common usage. - - (Resolved): 9/1/17 in Xcode 9 beta 6. -- [`rdar://36082113`](http://openradar.appspot.com/radar?id=4942308441063424) - `URLSessionTaskMetrics` failing to link on watchOS 3.0+ - - (Resolved): Just add `CFNetwork` to your linked frameworks. -- `FB7624529` - `urlSession(_:task:didFinishCollecting:)` never called on watchOS - - (Resolved): Metrics now collected on watchOS 7+. - -## FAQ - -### What's the origin of the name Alamofire? - -Alamofire is named after the [Alamo Fire flower](https://aggie-horticulture.tamu.edu/wildseed/alamofire.html), a hybrid variant of the Bluebonnet, the official state flower of Texas. - -## Credits - -Alamofire is owned and maintained by the [Alamofire Software Foundation](http://alamofire.org). You can follow them on Twitter at [@AlamofireSF](https://twitter.com/AlamofireSF) for project updates and releases. - -### Security Disclosure - -If you believe you have identified a security vulnerability with Alamofire, you should report it as soon as possible via email to security@alamofire.org. Please do not post it to a public issue tracker. - -## Sponsorship - -The [ASF](https://github.com/Alamofire/Foundation#members) is looking to raise money to officially stay registered as a federal non-profit organization. -Registering will allow Foundation members to gain some legal protections and also allow us to put donations to use, tax-free. -Sponsoring the ASF will enable us to: - -- Pay our yearly legal fees to keep the non-profit in good status -- Pay for our mail servers to help us stay on top of all questions and security issues -- Potentially fund test servers to make it easier for us to test the edge cases -- Potentially fund developers to work on one of our projects full-time - -The community adoption of the ASF libraries has been amazing. -We are greatly humbled by your enthusiasm around the projects and want to continue to do everything we can to move the needle forward. -With your continued support, the ASF will be able to improve its reach and also provide better legal safety for the core members. -If you use any of our libraries for work, see if your employers would be interested in donating. -Any amount you can donate, whether once or monthly, to help us reach our goal would be greatly appreciated. - -[Sponsor Alamofire](https://github.com/sponsors/Alamofire) - -## Supporters - -[MacStadium](https://macstadium.com) provides Alamofire with a free, hosted Mac mini. - -![Powered by MacStadium](https://raw.githubusercontent.com/Alamofire/Alamofire/master/Resources/MacStadiumLogo.png) - -## License - -Alamofire is released under the MIT license. [See LICENSE](https://github.com/Alamofire/Alamofire/blob/master/LICENSE) for details. diff --git a/Pods/Alamofire/Source/AFError.swift b/Pods/Alamofire/Source/AFError.swift deleted file mode 100644 index 82a75b5..0000000 --- a/Pods/Alamofire/Source/AFError.swift +++ /dev/null @@ -1,874 +0,0 @@ -// -// AFError.swift -// -// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) -// -// 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(Security) -import Security -#endif - -/// `AFError` is the error type returned by Alamofire. It encompasses a few different types of errors, each with -/// their own associated reasons. -public enum AFError: Error { - /// The underlying reason the `.multipartEncodingFailed` error occurred. - public enum MultipartEncodingFailureReason { - /// The `fileURL` provided for reading an encodable body part isn't a file `URL`. - case bodyPartURLInvalid(url: URL) - /// The filename of the `fileURL` provided has either an empty `lastPathComponent` or `pathExtension. - case bodyPartFilenameInvalid(in: URL) - /// The file at the `fileURL` provided was not reachable. - case bodyPartFileNotReachable(at: URL) - /// Attempting to check the reachability of the `fileURL` provided threw an error. - case bodyPartFileNotReachableWithError(atURL: URL, error: Error) - /// The file at the `fileURL` provided is actually a directory. - case bodyPartFileIsDirectory(at: URL) - /// The size of the file at the `fileURL` provided was not returned by the system. - case bodyPartFileSizeNotAvailable(at: URL) - /// The attempt to find the size of the file at the `fileURL` provided threw an error. - case bodyPartFileSizeQueryFailedWithError(forURL: URL, error: Error) - /// An `InputStream` could not be created for the provided `fileURL`. - case bodyPartInputStreamCreationFailed(for: URL) - /// An `OutputStream` could not be created when attempting to write the encoded data to disk. - case outputStreamCreationFailed(for: URL) - /// The encoded body data could not be written to disk because a file already exists at the provided `fileURL`. - case outputStreamFileAlreadyExists(at: URL) - /// The `fileURL` provided for writing the encoded body data to disk is not a file `URL`. - case outputStreamURLInvalid(url: URL) - /// The attempt to write the encoded body data to disk failed with an underlying error. - case outputStreamWriteFailed(error: Error) - /// The attempt to read an encoded body part `InputStream` failed with underlying system error. - case inputStreamReadFailed(error: Error) - } - - /// Represents unexpected input stream length that occur when encoding the `MultipartFormData`. Instances will be - /// embedded within an `AFError.multipartEncodingFailed` `.inputStreamReadFailed` case. - public struct UnexpectedInputStreamLength: Error { - /// The expected byte count to read. - public var bytesExpected: UInt64 - /// The actual byte count read. - public var bytesRead: UInt64 - } - - /// The underlying reason the `.parameterEncodingFailed` error occurred. - public enum ParameterEncodingFailureReason { - /// The `URLRequest` did not have a `URL` to encode. - case missingURL - /// JSON serialization failed with an underlying system error during the encoding process. - case jsonEncodingFailed(error: Error) - /// Custom parameter encoding failed due to the associated `Error`. - case customEncodingFailed(error: Error) - } - - /// The underlying reason the `.parameterEncoderFailed` error occurred. - public enum ParameterEncoderFailureReason { - /// Possible missing components. - public enum RequiredComponent { - /// The `URL` was missing or unable to be extracted from the passed `URLRequest` or during encoding. - case url - /// The `HTTPMethod` could not be extracted from the passed `URLRequest`. - case httpMethod(rawValue: String) - } - - /// A `RequiredComponent` was missing during encoding. - case missingRequiredComponent(RequiredComponent) - /// The underlying encoder failed with the associated error. - case encoderFailed(error: Error) - } - - /// The underlying reason the `.responseValidationFailed` error occurred. - public enum ResponseValidationFailureReason { - /// The data file containing the server response did not exist. - case dataFileNil - /// The data file containing the server response at the associated `URL` could not be read. - case dataFileReadFailed(at: URL) - /// The response did not contain a `Content-Type` and the `acceptableContentTypes` provided did not contain a - /// wildcard type. - case missingContentType(acceptableContentTypes: [String]) - /// The response `Content-Type` did not match any type in the provided `acceptableContentTypes`. - case unacceptableContentType(acceptableContentTypes: [String], responseContentType: String) - /// The response status code was not acceptable. - case unacceptableStatusCode(code: Int) - /// Custom response validation failed due to the associated `Error`. - case customValidationFailed(error: Error) - } - - /// The underlying reason the response serialization error occurred. - public enum ResponseSerializationFailureReason { - /// The server response contained no data or the data was zero length. - case inputDataNilOrZeroLength - /// The file containing the server response did not exist. - case inputFileNil - /// The file containing the server response could not be read from the associated `URL`. - case inputFileReadFailed(at: URL) - /// String serialization failed using the provided `String.Encoding`. - case stringSerializationFailed(encoding: String.Encoding) - /// JSON serialization failed with an underlying system error. - case jsonSerializationFailed(error: Error) - /// A `DataDecoder` failed to decode the response due to the associated `Error`. - case decodingFailed(error: Error) - /// A custom response serializer failed due to the associated `Error`. - case customSerializationFailed(error: Error) - /// Generic serialization failed for an empty response that wasn't type `Empty` but instead the associated type. - case invalidEmptyResponse(type: String) - } - - #if canImport(Security) - /// Underlying reason a server trust evaluation error occurred. - public enum ServerTrustFailureReason { - /// The output of a server trust evaluation. - public struct Output { - /// The host for which the evaluation was performed. - public let host: String - /// The `SecTrust` value which was evaluated. - public let trust: SecTrust - /// The `OSStatus` of evaluation operation. - public let status: OSStatus - /// The result of the evaluation operation. - public let result: SecTrustResultType - - /// Creates an `Output` value from the provided values. - init(_ host: String, _ trust: SecTrust, _ status: OSStatus, _ result: SecTrustResultType) { - self.host = host - self.trust = trust - self.status = status - self.result = result - } - } - - /// No `ServerTrustEvaluator` was found for the associated host. - case noRequiredEvaluator(host: String) - /// No certificates were found with which to perform the trust evaluation. - case noCertificatesFound - /// No public keys were found with which to perform the trust evaluation. - case noPublicKeysFound - /// During evaluation, application of the associated `SecPolicy` failed. - case policyApplicationFailed(trust: SecTrust, policy: SecPolicy, status: OSStatus) - /// During evaluation, setting the associated anchor certificates failed. - case settingAnchorCertificatesFailed(status: OSStatus, certificates: [SecCertificate]) - /// During evaluation, creation of the revocation policy failed. - case revocationPolicyCreationFailed - /// `SecTrust` evaluation failed with the associated `Error`, if one was produced. - case trustEvaluationFailed(error: Error?) - /// Default evaluation failed with the associated `Output`. - case defaultEvaluationFailed(output: Output) - /// Host validation failed with the associated `Output`. - case hostValidationFailed(output: Output) - /// Revocation check failed with the associated `Output` and options. - case revocationCheckFailed(output: Output, options: RevocationTrustEvaluator.Options) - /// Certificate pinning failed. - case certificatePinningFailed(host: String, trust: SecTrust, pinnedCertificates: [SecCertificate], serverCertificates: [SecCertificate]) - /// Public key pinning failed. - case publicKeyPinningFailed(host: String, trust: SecTrust, pinnedKeys: [SecKey], serverKeys: [SecKey]) - /// Custom server trust evaluation failed due to the associated `Error`. - case customEvaluationFailed(error: Error) - } - #endif - - /// The underlying reason the `.urlRequestValidationFailed` - public enum URLRequestValidationFailureReason { - /// URLRequest with GET method had body data. - case bodyDataInGETRequest(Data) - } - - /// `UploadableConvertible` threw an error in `createUploadable()`. - case createUploadableFailed(error: Error) - /// `URLRequestConvertible` threw an error in `asURLRequest()`. - case createURLRequestFailed(error: Error) - /// `SessionDelegate` threw an error while attempting to move downloaded file to destination URL. - case downloadedFileMoveFailed(error: Error, source: URL, destination: URL) - /// `Request` was explicitly cancelled. - case explicitlyCancelled - /// `URLConvertible` type failed to create a valid `URL`. - case invalidURL(url: URLConvertible) - /// Multipart form encoding failed. - case multipartEncodingFailed(reason: MultipartEncodingFailureReason) - /// `ParameterEncoding` threw an error during the encoding process. - case parameterEncodingFailed(reason: ParameterEncodingFailureReason) - /// `ParameterEncoder` threw an error while running the encoder. - case parameterEncoderFailed(reason: ParameterEncoderFailureReason) - /// `RequestAdapter` threw an error during adaptation. - case requestAdaptationFailed(error: Error) - /// `RequestRetrier` threw an error during the request retry process. - case requestRetryFailed(retryError: Error, originalError: Error) - /// Response validation failed. - case responseValidationFailed(reason: ResponseValidationFailureReason) - /// Response serialization failed. - case responseSerializationFailed(reason: ResponseSerializationFailureReason) - #if canImport(Security) - /// `ServerTrustEvaluating` instance threw an error during trust evaluation. - case serverTrustEvaluationFailed(reason: ServerTrustFailureReason) - #endif - /// `Session` which issued the `Request` was deinitialized, most likely because its reference went out of scope. - case sessionDeinitialized - /// `Session` was explicitly invalidated, possibly with the `Error` produced by the underlying `URLSession`. - case sessionInvalidated(error: Error?) - /// `URLSessionTask` completed with error. - case sessionTaskFailed(error: Error) - /// `URLRequest` failed validation. - case urlRequestValidationFailed(reason: URLRequestValidationFailureReason) -} - -extension Error { - /// Returns the instance cast as an `AFError`. - public var asAFError: AFError? { - self as? AFError - } - - /// Returns the instance cast as an `AFError`. If casting fails, a `fatalError` with the specified `message` is thrown. - public func asAFError(orFailWith message: @autoclosure () -> String, file: StaticString = #file, line: UInt = #line) -> AFError { - guard let afError = self as? AFError else { - fatalError(message(), file: file, line: line) - } - return afError - } - - /// Casts the instance as `AFError` or returns `defaultAFError` - func asAFError(or defaultAFError: @autoclosure () -> AFError) -> AFError { - self as? AFError ?? defaultAFError() - } -} - -// MARK: - Error Booleans - -extension AFError { - /// Returns whether the instance is `.sessionDeinitialized`. - public var isSessionDeinitializedError: Bool { - if case .sessionDeinitialized = self { return true } - return false - } - - /// Returns whether the instance is `.sessionInvalidated`. - public var isSessionInvalidatedError: Bool { - if case .sessionInvalidated = self { return true } - return false - } - - /// Returns whether the instance is `.explicitlyCancelled`. - public var isExplicitlyCancelledError: Bool { - if case .explicitlyCancelled = self { return true } - return false - } - - /// Returns whether the instance is `.invalidURL`. - public var isInvalidURLError: Bool { - if case .invalidURL = self { return true } - return false - } - - /// Returns whether the instance is `.parameterEncodingFailed`. When `true`, the `underlyingError` property will - /// contain the associated value. - public var isParameterEncodingError: Bool { - if case .parameterEncodingFailed = self { return true } - return false - } - - /// Returns whether the instance is `.parameterEncoderFailed`. When `true`, the `underlyingError` property will - /// contain the associated value. - public var isParameterEncoderError: Bool { - if case .parameterEncoderFailed = self { return true } - return false - } - - /// Returns whether the instance is `.multipartEncodingFailed`. When `true`, the `url` and `underlyingError` - /// properties will contain the associated values. - public var isMultipartEncodingError: Bool { - if case .multipartEncodingFailed = self { return true } - return false - } - - /// Returns whether the instance is `.requestAdaptationFailed`. When `true`, the `underlyingError` property will - /// contain the associated value. - public var isRequestAdaptationError: Bool { - if case .requestAdaptationFailed = self { return true } - return false - } - - /// Returns whether the instance is `.responseValidationFailed`. When `true`, the `acceptableContentTypes`, - /// `responseContentType`, `responseCode`, and `underlyingError` properties will contain the associated values. - public var isResponseValidationError: Bool { - if case .responseValidationFailed = self { return true } - return false - } - - /// Returns whether the instance is `.responseSerializationFailed`. When `true`, the `failedStringEncoding` and - /// `underlyingError` properties will contain the associated values. - public var isResponseSerializationError: Bool { - if case .responseSerializationFailed = self { return true } - return false - } - - #if canImport(Security) - /// Returns whether the instance is `.serverTrustEvaluationFailed`. When `true`, the `underlyingError` property will - /// contain the associated value. - public var isServerTrustEvaluationError: Bool { - if case .serverTrustEvaluationFailed = self { return true } - return false - } - #endif - - /// Returns whether the instance is `requestRetryFailed`. When `true`, the `underlyingError` property will - /// contain the associated value. - public var isRequestRetryError: Bool { - if case .requestRetryFailed = self { return true } - return false - } - - /// Returns whether the instance is `createUploadableFailed`. When `true`, the `underlyingError` property will - /// contain the associated value. - public var isCreateUploadableError: Bool { - if case .createUploadableFailed = self { return true } - return false - } - - /// Returns whether the instance is `createURLRequestFailed`. When `true`, the `underlyingError` property will - /// contain the associated value. - public var isCreateURLRequestError: Bool { - if case .createURLRequestFailed = self { return true } - return false - } - - /// Returns whether the instance is `downloadedFileMoveFailed`. When `true`, the `destination` and `underlyingError` properties will - /// contain the associated values. - public var isDownloadedFileMoveError: Bool { - if case .downloadedFileMoveFailed = self { return true } - return false - } - - /// Returns whether the instance is `createURLRequestFailed`. When `true`, the `underlyingError` property will - /// contain the associated value. - public var isSessionTaskError: Bool { - if case .sessionTaskFailed = self { return true } - return false - } -} - -// MARK: - Convenience Properties - -extension AFError { - /// The `URLConvertible` associated with the error. - public var urlConvertible: URLConvertible? { - guard case let .invalidURL(url) = self else { return nil } - return url - } - - /// The `URL` associated with the error. - public var url: URL? { - guard case let .multipartEncodingFailed(reason) = self else { return nil } - return reason.url - } - - /// The underlying `Error` responsible for generating the failure associated with `.sessionInvalidated`, - /// `.parameterEncodingFailed`, `.parameterEncoderFailed`, `.multipartEncodingFailed`, `.requestAdaptationFailed`, - /// `.responseSerializationFailed`, `.requestRetryFailed` errors. - public var underlyingError: Error? { - switch self { - case let .multipartEncodingFailed(reason): - return reason.underlyingError - case let .parameterEncodingFailed(reason): - return reason.underlyingError - case let .parameterEncoderFailed(reason): - return reason.underlyingError - case let .requestAdaptationFailed(error): - return error - case let .requestRetryFailed(retryError, _): - return retryError - case let .responseValidationFailed(reason): - return reason.underlyingError - case let .responseSerializationFailed(reason): - return reason.underlyingError - #if canImport(Security) - case let .serverTrustEvaluationFailed(reason): - return reason.underlyingError - #endif - case let .sessionInvalidated(error): - return error - case let .createUploadableFailed(error): - return error - case let .createURLRequestFailed(error): - return error - case let .downloadedFileMoveFailed(error, _, _): - return error - case let .sessionTaskFailed(error): - return error - case .explicitlyCancelled, - .invalidURL, - .sessionDeinitialized, - .urlRequestValidationFailed: - return nil - } - } - - /// The acceptable `Content-Type`s of a `.responseValidationFailed` error. - public var acceptableContentTypes: [String]? { - guard case let .responseValidationFailed(reason) = self else { return nil } - return reason.acceptableContentTypes - } - - /// The response `Content-Type` of a `.responseValidationFailed` error. - public var responseContentType: String? { - guard case let .responseValidationFailed(reason) = self else { return nil } - return reason.responseContentType - } - - /// The response code of a `.responseValidationFailed` error. - public var responseCode: Int? { - guard case let .responseValidationFailed(reason) = self else { return nil } - return reason.responseCode - } - - /// The `String.Encoding` associated with a failed `.stringResponse()` call. - public var failedStringEncoding: String.Encoding? { - guard case let .responseSerializationFailed(reason) = self else { return nil } - return reason.failedStringEncoding - } - - /// The `source` URL of a `.downloadedFileMoveFailed` error. - public var sourceURL: URL? { - guard case let .downloadedFileMoveFailed(_, source, _) = self else { return nil } - return source - } - - /// The `destination` URL of a `.downloadedFileMoveFailed` error. - public var destinationURL: URL? { - guard case let .downloadedFileMoveFailed(_, _, destination) = self else { return nil } - return destination - } - - #if canImport(Security) - /// The download resume data of any underlying network error. Only produced by `DownloadRequest`s. - public var downloadResumeData: Data? { - (underlyingError as? URLError)?.userInfo[NSURLSessionDownloadTaskResumeData] as? Data - } - #endif -} - -extension AFError.ParameterEncodingFailureReason { - var underlyingError: Error? { - switch self { - case let .jsonEncodingFailed(error), - let .customEncodingFailed(error): - return error - case .missingURL: - return nil - } - } -} - -extension AFError.ParameterEncoderFailureReason { - var underlyingError: Error? { - switch self { - case let .encoderFailed(error): - return error - case .missingRequiredComponent: - return nil - } - } -} - -extension AFError.MultipartEncodingFailureReason { - var url: URL? { - switch self { - case let .bodyPartURLInvalid(url), - let .bodyPartFilenameInvalid(url), - let .bodyPartFileNotReachable(url), - let .bodyPartFileIsDirectory(url), - let .bodyPartFileSizeNotAvailable(url), - let .bodyPartInputStreamCreationFailed(url), - let .outputStreamCreationFailed(url), - let .outputStreamFileAlreadyExists(url), - let .outputStreamURLInvalid(url), - let .bodyPartFileNotReachableWithError(url, _), - let .bodyPartFileSizeQueryFailedWithError(url, _): - return url - case .outputStreamWriteFailed, - .inputStreamReadFailed: - return nil - } - } - - var underlyingError: Error? { - switch self { - case let .bodyPartFileNotReachableWithError(_, error), - let .bodyPartFileSizeQueryFailedWithError(_, error), - let .outputStreamWriteFailed(error), - let .inputStreamReadFailed(error): - return error - case .bodyPartURLInvalid, - .bodyPartFilenameInvalid, - .bodyPartFileNotReachable, - .bodyPartFileIsDirectory, - .bodyPartFileSizeNotAvailable, - .bodyPartInputStreamCreationFailed, - .outputStreamCreationFailed, - .outputStreamFileAlreadyExists, - .outputStreamURLInvalid: - return nil - } - } -} - -extension AFError.ResponseValidationFailureReason { - var acceptableContentTypes: [String]? { - switch self { - case let .missingContentType(types), - let .unacceptableContentType(types, _): - return types - case .dataFileNil, - .dataFileReadFailed, - .unacceptableStatusCode, - .customValidationFailed: - return nil - } - } - - var responseContentType: String? { - switch self { - case let .unacceptableContentType(_, responseType): - return responseType - case .dataFileNil, - .dataFileReadFailed, - .missingContentType, - .unacceptableStatusCode, - .customValidationFailed: - return nil - } - } - - var responseCode: Int? { - switch self { - case let .unacceptableStatusCode(code): - return code - case .dataFileNil, - .dataFileReadFailed, - .missingContentType, - .unacceptableContentType, - .customValidationFailed: - return nil - } - } - - var underlyingError: Error? { - switch self { - case let .customValidationFailed(error): - return error - case .dataFileNil, - .dataFileReadFailed, - .missingContentType, - .unacceptableContentType, - .unacceptableStatusCode: - return nil - } - } -} - -extension AFError.ResponseSerializationFailureReason { - var failedStringEncoding: String.Encoding? { - switch self { - case let .stringSerializationFailed(encoding): - return encoding - case .inputDataNilOrZeroLength, - .inputFileNil, - .inputFileReadFailed(_), - .jsonSerializationFailed(_), - .decodingFailed(_), - .customSerializationFailed(_), - .invalidEmptyResponse: - return nil - } - } - - var underlyingError: Error? { - switch self { - case let .jsonSerializationFailed(error), - let .decodingFailed(error), - let .customSerializationFailed(error): - return error - case .inputDataNilOrZeroLength, - .inputFileNil, - .inputFileReadFailed, - .stringSerializationFailed, - .invalidEmptyResponse: - return nil - } - } -} - -#if canImport(Security) -extension AFError.ServerTrustFailureReason { - var output: AFError.ServerTrustFailureReason.Output? { - switch self { - case let .defaultEvaluationFailed(output), - let .hostValidationFailed(output), - let .revocationCheckFailed(output, _): - return output - case .noRequiredEvaluator, - .noCertificatesFound, - .noPublicKeysFound, - .policyApplicationFailed, - .settingAnchorCertificatesFailed, - .revocationPolicyCreationFailed, - .trustEvaluationFailed, - .certificatePinningFailed, - .publicKeyPinningFailed, - .customEvaluationFailed: - return nil - } - } - - var underlyingError: Error? { - switch self { - case let .customEvaluationFailed(error): - return error - case let .trustEvaluationFailed(error): - return error - case .noRequiredEvaluator, - .noCertificatesFound, - .noPublicKeysFound, - .policyApplicationFailed, - .settingAnchorCertificatesFailed, - .revocationPolicyCreationFailed, - .defaultEvaluationFailed, - .hostValidationFailed, - .revocationCheckFailed, - .certificatePinningFailed, - .publicKeyPinningFailed: - return nil - } - } -} -#endif - -// MARK: - Error Descriptions - -extension AFError: LocalizedError { - public var errorDescription: String? { - switch self { - case .explicitlyCancelled: - return "Request explicitly cancelled." - case let .invalidURL(url): - return "URL is not valid: \(url)" - case let .parameterEncodingFailed(reason): - return reason.localizedDescription - case let .parameterEncoderFailed(reason): - return reason.localizedDescription - case let .multipartEncodingFailed(reason): - return reason.localizedDescription - case let .requestAdaptationFailed(error): - return "Request adaption failed with error: \(error.localizedDescription)" - case let .responseValidationFailed(reason): - return reason.localizedDescription - case let .responseSerializationFailed(reason): - return reason.localizedDescription - case let .requestRetryFailed(retryError, originalError): - return """ - Request retry failed with retry error: \(retryError.localizedDescription), \ - original error: \(originalError.localizedDescription) - """ - case .sessionDeinitialized: - return """ - Session was invalidated without error, so it was likely deinitialized unexpectedly. \ - Be sure to retain a reference to your Session for the duration of your requests. - """ - case let .sessionInvalidated(error): - return "Session was invalidated with error: \(error?.localizedDescription ?? "No description.")" - #if canImport(Security) - case let .serverTrustEvaluationFailed(reason): - return "Server trust evaluation failed due to reason: \(reason.localizedDescription)" - #endif - case let .urlRequestValidationFailed(reason): - return "URLRequest validation failed due to reason: \(reason.localizedDescription)" - case let .createUploadableFailed(error): - return "Uploadable creation failed with error: \(error.localizedDescription)" - case let .createURLRequestFailed(error): - return "URLRequest creation failed with error: \(error.localizedDescription)" - case let .downloadedFileMoveFailed(error, source, destination): - return "Moving downloaded file from: \(source) to: \(destination) failed with error: \(error.localizedDescription)" - case let .sessionTaskFailed(error): - return "URLSessionTask failed with error: \(error.localizedDescription)" - } - } -} - -extension AFError.ParameterEncodingFailureReason { - var localizedDescription: String { - switch self { - case .missingURL: - return "URL request to encode was missing a URL" - case let .jsonEncodingFailed(error): - return "JSON could not be encoded because of error:\n\(error.localizedDescription)" - case let .customEncodingFailed(error): - return "Custom parameter encoder failed with error: \(error.localizedDescription)" - } - } -} - -extension AFError.ParameterEncoderFailureReason { - var localizedDescription: String { - switch self { - case let .missingRequiredComponent(component): - return "Encoding failed due to a missing request component: \(component)" - case let .encoderFailed(error): - return "The underlying encoder failed with the error: \(error)" - } - } -} - -extension AFError.MultipartEncodingFailureReason { - var localizedDescription: String { - switch self { - case let .bodyPartURLInvalid(url): - return "The URL provided is not a file URL: \(url)" - case let .bodyPartFilenameInvalid(url): - return "The URL provided does not have a valid filename: \(url)" - case let .bodyPartFileNotReachable(url): - return "The URL provided is not reachable: \(url)" - case let .bodyPartFileNotReachableWithError(url, error): - return """ - The system returned an error while checking the provided URL for reachability. - URL: \(url) - Error: \(error) - """ - case let .bodyPartFileIsDirectory(url): - return "The URL provided is a directory: \(url)" - case let .bodyPartFileSizeNotAvailable(url): - return "Could not fetch the file size from the provided URL: \(url)" - case let .bodyPartFileSizeQueryFailedWithError(url, error): - return """ - The system returned an error while attempting to fetch the file size from the provided URL. - URL: \(url) - Error: \(error) - """ - case let .bodyPartInputStreamCreationFailed(url): - return "Failed to create an InputStream for the provided URL: \(url)" - case let .outputStreamCreationFailed(url): - return "Failed to create an OutputStream for URL: \(url)" - case let .outputStreamFileAlreadyExists(url): - return "A file already exists at the provided URL: \(url)" - case let .outputStreamURLInvalid(url): - return "The provided OutputStream URL is invalid: \(url)" - case let .outputStreamWriteFailed(error): - return "OutputStream write failed with error: \(error)" - case let .inputStreamReadFailed(error): - return "InputStream read failed with error: \(error)" - } - } -} - -extension AFError.ResponseSerializationFailureReason { - var localizedDescription: String { - switch self { - case .inputDataNilOrZeroLength: - return "Response could not be serialized, input data was nil or zero length." - case .inputFileNil: - return "Response could not be serialized, input file was nil." - case let .inputFileReadFailed(url): - return "Response could not be serialized, input file could not be read: \(url)." - case let .stringSerializationFailed(encoding): - return "String could not be serialized with encoding: \(encoding)." - case let .jsonSerializationFailed(error): - return "JSON could not be serialized because of error:\n\(error.localizedDescription)" - case let .invalidEmptyResponse(type): - return """ - Empty response could not be serialized to type: \(type). \ - Use Empty as the expected type for such responses. - """ - case let .decodingFailed(error): - return "Response could not be decoded because of error:\n\(error.localizedDescription)" - case let .customSerializationFailed(error): - return "Custom response serializer failed with error:\n\(error.localizedDescription)" - } - } -} - -extension AFError.ResponseValidationFailureReason { - var localizedDescription: String { - switch self { - case .dataFileNil: - return "Response could not be validated, data file was nil." - case let .dataFileReadFailed(url): - return "Response could not be validated, data file could not be read: \(url)." - case let .missingContentType(types): - return """ - Response Content-Type was missing and acceptable content types \ - (\(types.joined(separator: ","))) do not match "*/*". - """ - case let .unacceptableContentType(acceptableTypes, responseType): - return """ - Response Content-Type "\(responseType)" does not match any acceptable types: \ - \(acceptableTypes.joined(separator: ",")). - """ - case let .unacceptableStatusCode(code): - return "Response status code was unacceptable: \(code)." - case let .customValidationFailed(error): - return "Custom response validation failed with error: \(error.localizedDescription)" - } - } -} - -#if canImport(Security) -extension AFError.ServerTrustFailureReason { - var localizedDescription: String { - switch self { - case let .noRequiredEvaluator(host): - return "A ServerTrustEvaluating value is required for host \(host) but none was found." - case .noCertificatesFound: - return "No certificates were found or provided for evaluation." - case .noPublicKeysFound: - return "No public keys were found or provided for evaluation." - case .policyApplicationFailed: - return "Attempting to set a SecPolicy failed." - case .settingAnchorCertificatesFailed: - return "Attempting to set the provided certificates as anchor certificates failed." - case .revocationPolicyCreationFailed: - return "Attempting to create a revocation policy failed." - case let .trustEvaluationFailed(error): - return "SecTrust evaluation failed with error: \(error?.localizedDescription ?? "None")" - case let .defaultEvaluationFailed(output): - return "Default evaluation failed for host \(output.host)." - case let .hostValidationFailed(output): - return "Host validation failed for host \(output.host)." - case let .revocationCheckFailed(output, _): - return "Revocation check failed for host \(output.host)." - case let .certificatePinningFailed(host, _, _, _): - return "Certificate pinning failed for host \(host)." - case let .publicKeyPinningFailed(host, _, _, _): - return "Public key pinning failed for host \(host)." - case let .customEvaluationFailed(error): - return "Custom trust evaluation failed with error: \(error.localizedDescription)" - } - } -} -#endif - -extension AFError.URLRequestValidationFailureReason { - var localizedDescription: String { - switch self { - case let .bodyDataInGETRequest(data): - return """ - Invalid URLRequest: Requests with GET method cannot have body data: - \(String(decoding: data, as: UTF8.self)) - """ - } - } -} diff --git a/Pods/Alamofire/Source/Alamofire.swift b/Pods/Alamofire/Source/Alamofire.swift deleted file mode 100644 index c99fe49..0000000 --- a/Pods/Alamofire/Source/Alamofire.swift +++ /dev/null @@ -1,40 +0,0 @@ -// -// Alamofire.swift -// -// Copyright (c) 2014-2021 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 Dispatch -import Foundation -#if canImport(FoundationNetworking) -@_exported import FoundationNetworking -#endif - -// Enforce minimum Swift version for all platforms and build systems. -#if swift(<5.5) -#error("Alamofire doesn't support Swift versions below 5.5.") -#endif - -/// Reference to `Session.default` for quick bootstrapping and examples. -public let AF = Session.default - -/// Current Alamofire version. Necessary since SPM doesn't use dynamic libraries. Plus this will be more accurate. -let version = "5.8.0" diff --git a/Pods/Alamofire/Source/AlamofireExtended.swift b/Pods/Alamofire/Source/AlamofireExtended.swift deleted file mode 100644 index 280c6de..0000000 --- a/Pods/Alamofire/Source/AlamofireExtended.swift +++ /dev/null @@ -1,61 +0,0 @@ -// -// AlamofireExtended.swift -// -// Copyright (c) 2019 Alamofire Software Foundation (http://alamofire.org/) -// -// 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. -// - -/// Type that acts as a generic extension point for all `AlamofireExtended` types. -public struct AlamofireExtension { - /// Stores the type or meta-type of any extended type. - public private(set) var type: ExtendedType - - /// Create an instance from the provided value. - /// - /// - Parameter type: Instance being extended. - public init(_ type: ExtendedType) { - self.type = type - } -} - -/// Protocol describing the `af` extension points for Alamofire extended types. -public protocol AlamofireExtended { - /// Type being extended. - associatedtype ExtendedType - - /// Static Alamofire extension point. - static var af: AlamofireExtension.Type { get set } - /// Instance Alamofire extension point. - var af: AlamofireExtension { get set } -} - -extension AlamofireExtended { - /// Static Alamofire extension point. - public static var af: AlamofireExtension.Type { - get { AlamofireExtension.self } - set {} - } - - /// Instance Alamofire extension point. - public var af: AlamofireExtension { - get { AlamofireExtension(self) } - set {} - } -} diff --git a/Pods/Alamofire/Source/AuthenticationInterceptor.swift b/Pods/Alamofire/Source/AuthenticationInterceptor.swift deleted file mode 100644 index 5c88287..0000000 --- a/Pods/Alamofire/Source/AuthenticationInterceptor.swift +++ /dev/null @@ -1,402 +0,0 @@ -// -// AuthenticationInterceptor.swift -// -// Copyright (c) 2020 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -/// Types adopting the `AuthenticationCredential` protocol can be used to authenticate `URLRequest`s. -/// -/// One common example of an `AuthenticationCredential` is an OAuth2 credential containing an access token used to -/// authenticate all requests on behalf of a user. The access token generally has an expiration window of 60 minutes -/// which will then require a refresh of the credential using the refresh token to generate a new access token. -public protocol AuthenticationCredential { - /// Whether the credential requires a refresh. This property should always return `true` when the credential is - /// expired. It is also wise to consider returning `true` when the credential will expire in several seconds or - /// minutes depending on the expiration window of the credential. - /// - /// For example, if the credential is valid for 60 minutes, then it would be wise to return `true` when the - /// credential is only valid for 5 minutes or less. That ensures the credential will not expire as it is passed - /// around backend services. - var requiresRefresh: Bool { get } -} - -// MARK: - - -/// Types adopting the `Authenticator` protocol can be used to authenticate `URLRequest`s with an -/// `AuthenticationCredential` as well as refresh the `AuthenticationCredential` when required. -public protocol Authenticator: AnyObject { - /// The type of credential associated with the `Authenticator` instance. - associatedtype Credential: AuthenticationCredential - - /// Applies the `Credential` to the `URLRequest`. - /// - /// In the case of OAuth2, the access token of the `Credential` would be added to the `URLRequest` as a Bearer - /// token to the `Authorization` header. - /// - /// - Parameters: - /// - credential: The `Credential`. - /// - urlRequest: The `URLRequest`. - func apply(_ credential: Credential, to urlRequest: inout URLRequest) - - /// Refreshes the `Credential` and executes the `completion` closure with the `Result` once complete. - /// - /// Refresh can be called in one of two ways. It can be called before the `Request` is actually executed due to - /// a `requiresRefresh` returning `true` during the adapt portion of the `Request` creation process. It can also - /// be triggered by a failed `Request` where the authentication server denied access due to an expired or - /// invalidated access token. - /// - /// In the case of OAuth2, this method would use the refresh token of the `Credential` to generate a new - /// `Credential` using the authentication service. Once complete, the `completion` closure should be called with - /// the new `Credential`, or the error that occurred. - /// - /// In general, if the refresh call fails with certain status codes from the authentication server (commonly a 401), - /// the refresh token in the `Credential` can no longer be used to generate a valid `Credential`. In these cases, - /// you will need to reauthenticate the user with their username / password. - /// - /// Please note, these are just general examples of common use cases. They are not meant to solve your specific - /// authentication server challenges. Please work with your authentication server team to ensure your - /// `Authenticator` logic matches their expectations. - /// - /// - Parameters: - /// - credential: The `Credential` to refresh. - /// - session: The `Session` requiring the refresh. - /// - completion: The closure to be executed once the refresh is complete. - func refresh(_ credential: Credential, for session: Session, completion: @escaping (Result) -> Void) - - /// Determines whether the `URLRequest` failed due to an authentication error based on the `HTTPURLResponse`. - /// - /// If the authentication server **CANNOT** invalidate credentials after they are issued, then simply return `false` - /// for this method. If the authentication server **CAN** invalidate credentials due to security breaches, then you - /// will need to work with your authentication server team to understand how to identify when this occurs. - /// - /// In the case of OAuth2, where an authentication server can invalidate credentials, you will need to inspect the - /// `HTTPURLResponse` or possibly the `Error` for when this occurs. This is commonly handled by the authentication - /// server returning a 401 status code and some additional header to indicate an OAuth2 failure occurred. - /// - /// It is very important to understand how your authentication server works to be able to implement this correctly. - /// For example, if your authentication server returns a 401 when an OAuth2 error occurs, and your downstream - /// service also returns a 401 when you are not authorized to perform that operation, how do you know which layer - /// of the backend returned you a 401? You do not want to trigger a refresh unless you know your authentication - /// server is actually the layer rejecting the request. Again, work with your authentication server team to understand - /// how to identify an OAuth2 401 error vs. a downstream 401 error to avoid endless refresh loops. - /// - /// - Parameters: - /// - urlRequest: The `URLRequest`. - /// - response: The `HTTPURLResponse`. - /// - error: The `Error`. - /// - /// - Returns: `true` if the `URLRequest` failed due to an authentication error, `false` otherwise. - func didRequest(_ urlRequest: URLRequest, with response: HTTPURLResponse, failDueToAuthenticationError error: Error) -> Bool - - /// Determines whether the `URLRequest` is authenticated with the `Credential`. - /// - /// If the authentication server **CANNOT** invalidate credentials after they are issued, then simply return `true` - /// for this method. If the authentication server **CAN** invalidate credentials due to security breaches, then - /// read on. - /// - /// When an authentication server can invalidate credentials, it means that you may have a non-expired credential - /// that appears to be valid, but will be rejected by the authentication server when used. Generally when this - /// happens, a number of requests are all sent when the application is foregrounded, and all of them will be - /// rejected by the authentication server in the order they are received. The first failed request will trigger a - /// refresh internally, which will update the credential, and then retry all the queued requests with the new - /// credential. However, it is possible that some of the original requests will not return from the authentication - /// server until the refresh has completed. This is where this method comes in. - /// - /// When the authentication server rejects a credential, we need to check to make sure we haven't refreshed the - /// credential while the request was in flight. If it has already refreshed, then we don't need to trigger an - /// additional refresh. If it hasn't refreshed, then we need to refresh. - /// - /// Now that it is understood how the result of this method is used in the refresh lifecyle, let's walk through how - /// to implement it. You should return `true` in this method if the `URLRequest` is authenticated in a way that - /// matches the values in the `Credential`. In the case of OAuth2, this would mean that the Bearer token in the - /// `Authorization` header of the `URLRequest` matches the access token in the `Credential`. If it matches, then we - /// know the `Credential` was used to authenticate the `URLRequest` and should return `true`. If the Bearer token - /// did not match the access token, then you should return `false`. - /// - /// - Parameters: - /// - urlRequest: The `URLRequest`. - /// - credential: The `Credential`. - /// - /// - Returns: `true` if the `URLRequest` is authenticated with the `Credential`, `false` otherwise. - func isRequest(_ urlRequest: URLRequest, authenticatedWith credential: Credential) -> Bool -} - -// MARK: - - -/// Represents various authentication failures that occur when using the `AuthenticationInterceptor`. All errors are -/// still vended from Alamofire as `AFError` types. The `AuthenticationError` instances will be embedded within -/// `AFError` `.requestAdaptationFailed` or `.requestRetryFailed` cases. -public enum AuthenticationError: Error { - /// The credential was missing so the request could not be authenticated. - case missingCredential - /// The credential was refreshed too many times within the `RefreshWindow`. - case excessiveRefresh -} - -// MARK: - - -/// The `AuthenticationInterceptor` class manages the queuing and threading complexity of authenticating requests. -/// It relies on an `Authenticator` type to handle the actual `URLRequest` authentication and `Credential` refresh. -public class AuthenticationInterceptor: RequestInterceptor where AuthenticatorType: Authenticator { - // MARK: Typealiases - - /// Type of credential used to authenticate requests. - public typealias Credential = AuthenticatorType.Credential - - // MARK: Helper Types - - /// Type that defines a time window used to identify excessive refresh calls. When enabled, prior to executing a - /// refresh, the `AuthenticationInterceptor` compares the timestamp history of previous refresh calls against the - /// `RefreshWindow`. If more refreshes have occurred within the refresh window than allowed, the refresh is - /// cancelled and an `AuthorizationError.excessiveRefresh` error is thrown. - public struct RefreshWindow { - /// `TimeInterval` defining the duration of the time window before the current time in which the number of - /// refresh attempts is compared against `maximumAttempts`. For example, if `interval` is 30 seconds, then the - /// `RefreshWindow` represents the past 30 seconds. If more attempts occurred in the past 30 seconds than - /// `maximumAttempts`, an `.excessiveRefresh` error will be thrown. - public let interval: TimeInterval - - /// Total refresh attempts allowed within `interval` before throwing an `.excessiveRefresh` error. - public let maximumAttempts: Int - - /// Creates a `RefreshWindow` instance from the specified `interval` and `maximumAttempts`. - /// - /// - Parameters: - /// - interval: `TimeInterval` defining the duration of the time window before the current time. - /// - maximumAttempts: The maximum attempts allowed within the `TimeInterval`. - public init(interval: TimeInterval = 30.0, maximumAttempts: Int = 5) { - self.interval = interval - self.maximumAttempts = maximumAttempts - } - } - - private struct AdaptOperation { - let urlRequest: URLRequest - let session: Session - let completion: (Result) -> Void - } - - private enum AdaptResult { - case adapt(Credential) - case doNotAdapt(AuthenticationError) - case adaptDeferred - } - - private struct MutableState { - var credential: Credential? - - var isRefreshing = false - var refreshTimestamps: [TimeInterval] = [] - var refreshWindow: RefreshWindow? - - var adaptOperations: [AdaptOperation] = [] - var requestsToRetry: [(RetryResult) -> Void] = [] - } - - // MARK: Properties - - /// The `Credential` used to authenticate requests. - public var credential: Credential? { - get { mutableState.credential } - set { mutableState.credential = newValue } - } - - let authenticator: AuthenticatorType - let queue = DispatchQueue(label: "org.alamofire.authentication.inspector") - - private let mutableState: Protected - - // MARK: Initialization - - /// Creates an `AuthenticationInterceptor` instance from the specified parameters. - /// - /// A `nil` `RefreshWindow` will result in the `AuthenticationInterceptor` not checking for excessive refresh calls. - /// It is recommended to always use a `RefreshWindow` to avoid endless refresh cycles. - /// - /// - Parameters: - /// - authenticator: The `Authenticator` type. - /// - credential: The `Credential` if it exists. `nil` by default. - /// - refreshWindow: The `RefreshWindow` used to identify excessive refresh calls. `RefreshWindow()` by default. - public init(authenticator: AuthenticatorType, - credential: Credential? = nil, - refreshWindow: RefreshWindow? = RefreshWindow()) { - self.authenticator = authenticator - mutableState = Protected(MutableState(credential: credential, refreshWindow: refreshWindow)) - } - - // MARK: Adapt - - public func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { - let adaptResult: AdaptResult = mutableState.write { mutableState in - // Queue the adapt operation if a refresh is already in place. - guard !mutableState.isRefreshing else { - let operation = AdaptOperation(urlRequest: urlRequest, session: session, completion: completion) - mutableState.adaptOperations.append(operation) - return .adaptDeferred - } - - // Throw missing credential error is the credential is missing. - guard let credential = mutableState.credential else { - let error = AuthenticationError.missingCredential - return .doNotAdapt(error) - } - - // Queue the adapt operation and trigger refresh operation if credential requires refresh. - guard !credential.requiresRefresh else { - let operation = AdaptOperation(urlRequest: urlRequest, session: session, completion: completion) - mutableState.adaptOperations.append(operation) - refresh(credential, for: session, insideLock: &mutableState) - return .adaptDeferred - } - - return .adapt(credential) - } - - switch adaptResult { - case let .adapt(credential): - var authenticatedRequest = urlRequest - authenticator.apply(credential, to: &authenticatedRequest) - completion(.success(authenticatedRequest)) - - case let .doNotAdapt(adaptError): - completion(.failure(adaptError)) - - case .adaptDeferred: - // No-op: adapt operation captured during refresh. - break - } - } - - // MARK: Retry - - public func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) { - // Do not attempt retry if there was not an original request and response from the server. - guard let urlRequest = request.request, let response = request.response else { - completion(.doNotRetry) - return - } - - // Do not attempt retry unless the `Authenticator` verifies failure was due to authentication error (i.e. 401 status code). - guard authenticator.didRequest(urlRequest, with: response, failDueToAuthenticationError: error) else { - completion(.doNotRetry) - return - } - - // Do not attempt retry if there is no credential. - guard let credential = credential else { - let error = AuthenticationError.missingCredential - completion(.doNotRetryWithError(error)) - return - } - - // Retry the request if the `Authenticator` verifies it was authenticated with a previous credential. - guard authenticator.isRequest(urlRequest, authenticatedWith: credential) else { - completion(.retry) - return - } - - mutableState.write { mutableState in - mutableState.requestsToRetry.append(completion) - - guard !mutableState.isRefreshing else { return } - - refresh(credential, for: session, insideLock: &mutableState) - } - } - - // MARK: Refresh - - private func refresh(_ credential: Credential, for session: Session, insideLock mutableState: inout MutableState) { - guard !isRefreshExcessive(insideLock: &mutableState) else { - let error = AuthenticationError.excessiveRefresh - handleRefreshFailure(error, insideLock: &mutableState) - return - } - - mutableState.refreshTimestamps.append(ProcessInfo.processInfo.systemUptime) - mutableState.isRefreshing = true - - // Dispatch to queue to hop out of the lock in case authenticator.refresh is implemented synchronously. - queue.async { - self.authenticator.refresh(credential, for: session) { result in - self.mutableState.write { mutableState in - switch result { - case let .success(credential): - self.handleRefreshSuccess(credential, insideLock: &mutableState) - case let .failure(error): - self.handleRefreshFailure(error, insideLock: &mutableState) - } - } - } - } - } - - private func isRefreshExcessive(insideLock mutableState: inout MutableState) -> Bool { - guard let refreshWindow = mutableState.refreshWindow else { return false } - - let refreshWindowMin = ProcessInfo.processInfo.systemUptime - refreshWindow.interval - - let refreshAttemptsWithinWindow = mutableState.refreshTimestamps.reduce(into: 0) { attempts, refreshTimestamp in - guard refreshWindowMin <= refreshTimestamp else { return } - attempts += 1 - } - - let isRefreshExcessive = refreshAttemptsWithinWindow >= refreshWindow.maximumAttempts - - return isRefreshExcessive - } - - private func handleRefreshSuccess(_ credential: Credential, insideLock mutableState: inout MutableState) { - mutableState.credential = credential - - let adaptOperations = mutableState.adaptOperations - let requestsToRetry = mutableState.requestsToRetry - - mutableState.adaptOperations.removeAll() - mutableState.requestsToRetry.removeAll() - - mutableState.isRefreshing = false - - // Dispatch to queue to hop out of the mutable state lock - queue.async { - adaptOperations.forEach { self.adapt($0.urlRequest, for: $0.session, completion: $0.completion) } - requestsToRetry.forEach { $0(.retry) } - } - } - - private func handleRefreshFailure(_ error: Error, insideLock mutableState: inout MutableState) { - let adaptOperations = mutableState.adaptOperations - let requestsToRetry = mutableState.requestsToRetry - - mutableState.adaptOperations.removeAll() - mutableState.requestsToRetry.removeAll() - - mutableState.isRefreshing = false - - // Dispatch to queue to hop out of the mutable state lock - queue.async { - adaptOperations.forEach { $0.completion(.failure(error)) } - requestsToRetry.forEach { $0(.doNotRetryWithError(error)) } - } - } -} diff --git a/Pods/Alamofire/Source/CachedResponseHandler.swift b/Pods/Alamofire/Source/CachedResponseHandler.swift deleted file mode 100644 index 1371b6e..0000000 --- a/Pods/Alamofire/Source/CachedResponseHandler.swift +++ /dev/null @@ -1,107 +0,0 @@ -// -// CachedResponseHandler.swift -// -// Copyright (c) 2019 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -/// A type that handles whether the data task should store the HTTP response in the cache. -public protocol CachedResponseHandler { - /// Determines whether the HTTP response should be stored in the cache. - /// - /// The `completion` closure should be passed one of three possible options: - /// - /// 1. The cached response provided by the server (this is the most common use case). - /// 2. A modified version of the cached response (you may want to modify it in some way before caching). - /// 3. A `nil` value to prevent the cached response from being stored in the cache. - /// - /// - Parameters: - /// - task: The data task whose request resulted in the cached response. - /// - response: The cached response to potentially store in the cache. - /// - completion: The closure to execute containing cached response, a modified response, or `nil`. - func dataTask(_ task: URLSessionDataTask, - willCacheResponse response: CachedURLResponse, - completion: @escaping (CachedURLResponse?) -> Void) -} - -// MARK: - - -/// `ResponseCacher` is a convenience `CachedResponseHandler` making it easy to cache, not cache, or modify a cached -/// response. -public struct ResponseCacher { - /// Defines the behavior of the `ResponseCacher` type. - public enum Behavior { - /// Stores the cached response in the cache. - case cache - /// Prevents the cached response from being stored in the cache. - case doNotCache - /// Modifies the cached response before storing it in the cache. - case modify((URLSessionDataTask, CachedURLResponse) -> CachedURLResponse?) - } - - /// Returns a `ResponseCacher` with a `.cache` `Behavior`. - public static let cache = ResponseCacher(behavior: .cache) - /// Returns a `ResponseCacher` with a `.doNotCache` `Behavior`. - public static let doNotCache = ResponseCacher(behavior: .doNotCache) - - /// The `Behavior` of the `ResponseCacher`. - public let behavior: Behavior - - /// Creates a `ResponseCacher` instance from the `Behavior`. - /// - /// - Parameter behavior: The `Behavior`. - public init(behavior: Behavior) { - self.behavior = behavior - } -} - -extension ResponseCacher: CachedResponseHandler { - public func dataTask(_ task: URLSessionDataTask, - willCacheResponse response: CachedURLResponse, - completion: @escaping (CachedURLResponse?) -> Void) { - switch behavior { - case .cache: - completion(response) - case .doNotCache: - completion(nil) - case let .modify(closure): - let response = closure(task, response) - completion(response) - } - } -} - -extension CachedResponseHandler where Self == ResponseCacher { - /// Provides a `ResponseCacher` which caches the response, if allowed. Equivalent to `ResponseCacher.cache`. - public static var cache: ResponseCacher { .cache } - - /// Provides a `ResponseCacher` which does not cache the response. Equivalent to `ResponseCacher.doNotCache`. - public static var doNotCache: ResponseCacher { .doNotCache } - - /// Creates a `ResponseCacher` which modifies the proposed `CachedURLResponse` using the provided closure. - /// - /// - Parameter closure: Closure used to modify the `CachedURLResponse`. - /// - Returns: The `ResponseCacher`. - public static func modify(using closure: @escaping ((URLSessionDataTask, CachedURLResponse) -> CachedURLResponse?)) -> ResponseCacher { - ResponseCacher(behavior: .modify(closure)) - } -} diff --git a/Pods/Alamofire/Source/Combine.swift b/Pods/Alamofire/Source/Combine.swift deleted file mode 100644 index 79fce0d..0000000 --- a/Pods/Alamofire/Source/Combine.swift +++ /dev/null @@ -1,652 +0,0 @@ -// -// Combine.swift -// -// Copyright (c) 2020 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 !((os(iOS) && (arch(i386) || arch(arm))) || os(Windows) || os(Linux) || os(Android)) - -import Combine -import Dispatch -import Foundation - -// MARK: - DataRequest / UploadRequest - -/// A Combine `Publisher` that publishes the `DataResponse` of the provided `DataRequest`. -@available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) -public struct DataResponsePublisher: Publisher { - public typealias Output = DataResponse - public typealias Failure = Never - - private typealias Handler = (@escaping (_ response: DataResponse) -> Void) -> DataRequest - - private let request: DataRequest - private let responseHandler: Handler - - /// Creates an instance which will serialize responses using the provided `ResponseSerializer`. - /// - /// - Parameters: - /// - request: `DataRequest` for which to publish the response. - /// - queue: `DispatchQueue` on which the `DataResponse` value will be published. `.main` by default. - /// - serializer: `ResponseSerializer` used to produce the published `DataResponse`. - public init(_ request: DataRequest, queue: DispatchQueue, serializer: Serializer) - where Value == Serializer.SerializedObject { - self.request = request - responseHandler = { request.response(queue: queue, responseSerializer: serializer, completionHandler: $0) } - } - - /// Creates an instance which will serialize responses using the provided `DataResponseSerializerProtocol`. - /// - /// - Parameters: - /// - request: `DataRequest` for which to publish the response. - /// - queue: `DispatchQueue` on which the `DataResponse` value will be published. `.main` by default. - /// - serializer: `DataResponseSerializerProtocol` used to produce the published `DataResponse`. - public init(_ request: DataRequest, - queue: DispatchQueue, - serializer: Serializer) - where Value == Serializer.SerializedObject { - self.request = request - responseHandler = { request.response(queue: queue, responseSerializer: serializer, completionHandler: $0) } - } - - /// Publishes only the `Result` of the `DataResponse` value. - /// - /// - Returns: The `AnyPublisher` publishing the `Result` value. - public func result() -> AnyPublisher, Never> { - map(\.result).eraseToAnyPublisher() - } - - /// Publishes the `Result` of the `DataResponse` as a single `Value` or fail with the `AFError` instance. - /// - /// - Returns: The `AnyPublisher` publishing the stream. - public func value() -> AnyPublisher { - setFailureType(to: AFError.self).flatMap(\.result.publisher).eraseToAnyPublisher() - } - - public func receive(subscriber: S) where S: Subscriber, DataResponsePublisher.Failure == S.Failure, DataResponsePublisher.Output == S.Input { - subscriber.receive(subscription: Inner(request: request, - responseHandler: responseHandler, - downstream: subscriber)) - } - - private final class Inner: Subscription - where Downstream.Input == Output { - typealias Failure = Downstream.Failure - - private let downstream: Protected - private let request: DataRequest - private let responseHandler: Handler - - init(request: DataRequest, responseHandler: @escaping Handler, downstream: Downstream) { - self.request = request - self.responseHandler = responseHandler - self.downstream = Protected(downstream) - } - - func request(_ demand: Subscribers.Demand) { - assert(demand > 0) - - guard let downstream = downstream.read({ $0 }) else { return } - - self.downstream.write(nil) - responseHandler { response in - _ = downstream.receive(response) - downstream.receive(completion: .finished) - }.resume() - } - - func cancel() { - request.cancel() - downstream.write(nil) - } - } -} - -@available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) -extension DataResponsePublisher where Value == Data? { - /// Creates an instance which publishes a `DataResponse` value without serialization. - @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) - public init(_ request: DataRequest, queue: DispatchQueue) { - self.request = request - responseHandler = { request.response(queue: queue, completionHandler: $0) } - } -} - -extension DataRequest { - /// Creates a `DataResponsePublisher` for this instance using the given `ResponseSerializer` and `DispatchQueue`. - /// - /// - Parameters: - /// - serializer: `ResponseSerializer` used to serialize response `Data`. - /// - queue: `DispatchQueue` on which the `DataResponse` will be published. `.main` by default. - /// - /// - Returns: The `DataResponsePublisher`. - @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) - public func publishResponse(using serializer: Serializer, on queue: DispatchQueue = .main) -> DataResponsePublisher - where Serializer.SerializedObject == T { - DataResponsePublisher(self, queue: queue, serializer: serializer) - } - - /// Creates a `DataResponsePublisher` for this instance and uses a `DataResponseSerializer` to serialize the - /// response. - /// - /// - Parameters: - /// - queue: `DispatchQueue` on which the `DataResponse` will be published. `.main` by default. - /// - preprocessor: `DataPreprocessor` which filters the `Data` before serialization. `PassthroughPreprocessor()` - /// by default. - /// - emptyResponseCodes: `Set` of HTTP status codes for which empty responses are allowed. `[204, 205]` by - /// default. - /// - emptyRequestMethods: `Set` of `HTTPMethod`s for which empty responses are allowed, regardless of - /// status code. `[.head]` by default. - /// - Returns: The `DataResponsePublisher`. - @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) - public func publishData(queue: DispatchQueue = .main, - preprocessor: DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, - emptyResponseCodes: Set = DataResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = DataResponseSerializer.defaultEmptyRequestMethods) -> DataResponsePublisher { - publishResponse(using: DataResponseSerializer(dataPreprocessor: preprocessor, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyRequestMethods), - on: queue) - } - - /// Creates a `DataResponsePublisher` for this instance and uses a `StringResponseSerializer` to serialize the - /// response. - /// - /// - Parameters: - /// - queue: `DispatchQueue` on which the `DataResponse` will be published. `.main` by default. - /// - preprocessor: `DataPreprocessor` which filters the `Data` before serialization. `PassthroughPreprocessor()` - /// by default. - /// - encoding: `String.Encoding` to parse the response. `nil` by default, in which case the encoding - /// will be determined by the server response, falling back to the default HTTP character - /// set, `ISO-8859-1`. - /// - emptyResponseCodes: `Set` of HTTP status codes for which empty responses are allowed. `[204, 205]` by - /// default. - /// - emptyRequestMethods: `Set` of `HTTPMethod`s for which empty responses are allowed, regardless of - /// status code. `[.head]` by default. - /// - /// - Returns: The `DataResponsePublisher`. - @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) - public func publishString(queue: DispatchQueue = .main, - preprocessor: DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, - encoding: String.Encoding? = nil, - emptyResponseCodes: Set = StringResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = StringResponseSerializer.defaultEmptyRequestMethods) -> DataResponsePublisher { - publishResponse(using: StringResponseSerializer(dataPreprocessor: preprocessor, - encoding: encoding, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyRequestMethods), - on: queue) - } - - @_disfavoredOverload - @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) - @available(*, deprecated, message: "Renamed publishDecodable(type:queue:preprocessor:decoder:emptyResponseCodes:emptyRequestMethods).") - public func publishDecodable(type: T.Type = T.self, - queue: DispatchQueue = .main, - preprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, - decoder: DataDecoder = JSONDecoder(), - emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, - emptyResponseMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) -> DataResponsePublisher { - publishResponse(using: DecodableResponseSerializer(dataPreprocessor: preprocessor, - decoder: decoder, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyResponseMethods), - on: queue) - } - - /// Creates a `DataResponsePublisher` for this instance and uses a `DecodableResponseSerializer` to serialize the - /// response. - /// - /// - Parameters: - /// - type: `Decodable` type to which to decode response `Data`. Inferred from the context by - /// default. - /// - queue: `DispatchQueue` on which the `DataResponse` will be published. `.main` by default. - /// - preprocessor: `DataPreprocessor` which filters the `Data` before serialization. - /// `PassthroughPreprocessor()` by default. - /// - decoder: `DataDecoder` instance used to decode response `Data`. `JSONDecoder()` by default. - /// - emptyResponseCodes: `Set` of HTTP status codes for which empty responses are allowed. `[204, 205]` by - /// default. - /// - emptyRequestMethods: `Set` of `HTTPMethod`s for which empty responses are allowed, regardless of - /// status code. `[.head]` by default. - /// - /// - Returns: The `DataResponsePublisher`. - @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) - public func publishDecodable(type: T.Type = T.self, - queue: DispatchQueue = .main, - preprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, - decoder: DataDecoder = JSONDecoder(), - emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) -> DataResponsePublisher { - publishResponse(using: DecodableResponseSerializer(dataPreprocessor: preprocessor, - decoder: decoder, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyRequestMethods), - on: queue) - } - - /// Creates a `DataResponsePublisher` for this instance which does not serialize the response before publishing. - /// - /// - queue: `DispatchQueue` on which the `DataResponse` will be published. `.main` by default. - /// - /// - Returns: The `DataResponsePublisher`. - @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) - public func publishUnserialized(queue: DispatchQueue = .main) -> DataResponsePublisher { - DataResponsePublisher(self, queue: queue) - } -} - -// A Combine `Publisher` that publishes a sequence of `Stream` values received by the provided `DataStreamRequest`. -@available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) -public struct DataStreamPublisher: Publisher { - public typealias Output = DataStreamRequest.Stream - public typealias Failure = Never - - private typealias Handler = (@escaping DataStreamRequest.Handler) -> DataStreamRequest - - private let request: DataStreamRequest - private let streamHandler: Handler - - /// Creates an instance which will serialize responses using the provided `DataStreamSerializer`. - /// - /// - Parameters: - /// - request: `DataStreamRequest` for which to publish the response. - /// - queue: `DispatchQueue` on which the `Stream` values will be published. `.main` by - /// default. - /// - serializer: `DataStreamSerializer` used to produce the published `Stream` values. - public init(_ request: DataStreamRequest, queue: DispatchQueue, serializer: Serializer) - where Value == Serializer.SerializedObject { - self.request = request - streamHandler = { request.responseStream(using: serializer, on: queue, stream: $0) } - } - - /// Publishes only the `Result` of the `DataStreamRequest.Stream`'s `Event`s. - /// - /// - Returns: The `AnyPublisher` publishing the `Result` value. - public func result() -> AnyPublisher, Never> { - compactMap { stream in - switch stream.event { - case let .stream(result): - return result - // If the stream has completed with an error, send the error value downstream as a `.failure`. - case let .complete(completion): - return completion.error.map(Result.failure) - } - } - .eraseToAnyPublisher() - } - - /// Publishes the streamed values of the `DataStreamRequest.Stream` as a sequence of `Value` or fail with the - /// `AFError` instance. - /// - /// - Returns: The `AnyPublisher` publishing the stream. - public func value() -> AnyPublisher { - result().setFailureType(to: AFError.self).flatMap(\.publisher).eraseToAnyPublisher() - } - - public func receive(subscriber: S) where S: Subscriber, DataStreamPublisher.Failure == S.Failure, DataStreamPublisher.Output == S.Input { - subscriber.receive(subscription: Inner(request: request, - streamHandler: streamHandler, - downstream: subscriber)) - } - - private final class Inner: Subscription - where Downstream.Input == Output { - typealias Failure = Downstream.Failure - - private let downstream: Protected - private let request: DataStreamRequest - private let streamHandler: Handler - - init(request: DataStreamRequest, streamHandler: @escaping Handler, downstream: Downstream) { - self.request = request - self.streamHandler = streamHandler - self.downstream = Protected(downstream) - } - - func request(_ demand: Subscribers.Demand) { - assert(demand > 0) - - guard let downstream = downstream.read({ $0 }) else { return } - - self.downstream.write(nil) - streamHandler { stream in - _ = downstream.receive(stream) - if case .complete = stream.event { - downstream.receive(completion: .finished) - } - }.resume() - } - - func cancel() { - request.cancel() - downstream.write(nil) - } - } -} - -extension DataStreamRequest { - /// Creates a `DataStreamPublisher` for this instance using the given `DataStreamSerializer` and `DispatchQueue`. - /// - /// - Parameters: - /// - serializer: `DataStreamSerializer` used to serialize the streamed `Data`. - /// - queue: `DispatchQueue` on which the `DataRequest.Stream` values will be published. `.main` by default. - /// - Returns: The `DataStreamPublisher`. - @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) - public func publishStream(using serializer: Serializer, - on queue: DispatchQueue = .main) -> DataStreamPublisher { - DataStreamPublisher(self, queue: queue, serializer: serializer) - } - - /// Creates a `DataStreamPublisher` for this instance which uses a `PassthroughStreamSerializer` to stream `Data` - /// unserialized. - /// - /// - Parameters: - /// - queue: `DispatchQueue` on which the `DataRequest.Stream` values will be published. `.main` by default. - /// - Returns: The `DataStreamPublisher`. - @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) - public func publishData(queue: DispatchQueue = .main) -> DataStreamPublisher { - publishStream(using: PassthroughStreamSerializer(), on: queue) - } - - /// Creates a `DataStreamPublisher` for this instance which uses a `StringStreamSerializer` to serialize stream - /// `Data` values into `String` values. - /// - /// - Parameters: - /// - queue: `DispatchQueue` on which the `DataRequest.Stream` values will be published. `.main` by default. - /// - Returns: The `DataStreamPublisher`. - @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) - public func publishString(queue: DispatchQueue = .main) -> DataStreamPublisher { - publishStream(using: StringStreamSerializer(), on: queue) - } - - /// Creates a `DataStreamPublisher` for this instance which uses a `DecodableStreamSerializer` with the provided - /// parameters to serialize stream `Data` values into the provided type. - /// - /// - Parameters: - /// - type: `Decodable` type to which to decode stream `Data`. Inferred from the context by default. - /// - queue: `DispatchQueue` on which the `DataRequest.Stream` values will be published. `.main` by default. - /// - decoder: `DataDecoder` instance used to decode stream `Data`. `JSONDecoder()` by default. - /// - preprocessor: `DataPreprocessor` which filters incoming stream `Data` before serialization. - /// `PassthroughPreprocessor()` by default. - /// - Returns: The `DataStreamPublisher`. - @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) - public func publishDecodable(type: T.Type = T.self, - queue: DispatchQueue = .main, - decoder: DataDecoder = JSONDecoder(), - preprocessor: DataPreprocessor = PassthroughPreprocessor()) -> DataStreamPublisher { - publishStream(using: DecodableStreamSerializer(decoder: decoder, - dataPreprocessor: preprocessor), - on: queue) - } -} - -/// A Combine `Publisher` that publishes the `DownloadResponse` of the provided `DownloadRequest`. -@available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) -public struct DownloadResponsePublisher: Publisher { - public typealias Output = DownloadResponse - public typealias Failure = Never - - private typealias Handler = (@escaping (_ response: DownloadResponse) -> Void) -> DownloadRequest - - private let request: DownloadRequest - private let responseHandler: Handler - - /// Creates an instance which will serialize responses using the provided `ResponseSerializer`. - /// - /// - Parameters: - /// - request: `DownloadRequest` for which to publish the response. - /// - queue: `DispatchQueue` on which the `DownloadResponse` value will be published. `.main` by default. - /// - serializer: `ResponseSerializer` used to produce the published `DownloadResponse`. - public init(_ request: DownloadRequest, queue: DispatchQueue, serializer: Serializer) - where Value == Serializer.SerializedObject { - self.request = request - responseHandler = { request.response(queue: queue, responseSerializer: serializer, completionHandler: $0) } - } - - /// Creates an instance which will serialize responses using the provided `DownloadResponseSerializerProtocol` value. - /// - /// - Parameters: - /// - request: `DownloadRequest` for which to publish the response. - /// - queue: `DispatchQueue` on which the `DataResponse` value will be published. `.main` by default. - /// - serializer: `DownloadResponseSerializerProtocol` used to produce the published `DownloadResponse`. - @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) - public init(_ request: DownloadRequest, - queue: DispatchQueue, - serializer: Serializer) - where Value == Serializer.SerializedObject { - self.request = request - responseHandler = { request.response(queue: queue, responseSerializer: serializer, completionHandler: $0) } - } - - /// Publishes only the `Result` of the `DownloadResponse` value. - /// - /// - Returns: The `AnyPublisher` publishing the `Result` value. - public func result() -> AnyPublisher, Never> { - map(\.result).eraseToAnyPublisher() - } - - /// Publishes the `Result` of the `DownloadResponse` as a single `Value` or fail with the `AFError` instance. - /// - /// - Returns: The `AnyPublisher` publishing the stream. - public func value() -> AnyPublisher { - setFailureType(to: AFError.self).flatMap(\.result.publisher).eraseToAnyPublisher() - } - - public func receive(subscriber: S) where S: Subscriber, DownloadResponsePublisher.Failure == S.Failure, DownloadResponsePublisher.Output == S.Input { - subscriber.receive(subscription: Inner(request: request, - responseHandler: responseHandler, - downstream: subscriber)) - } - - private final class Inner: Subscription - where Downstream.Input == Output { - typealias Failure = Downstream.Failure - - private let downstream: Protected - private let request: DownloadRequest - private let responseHandler: Handler - - init(request: DownloadRequest, responseHandler: @escaping Handler, downstream: Downstream) { - self.request = request - self.responseHandler = responseHandler - self.downstream = Protected(downstream) - } - - func request(_ demand: Subscribers.Demand) { - assert(demand > 0) - - guard let downstream = downstream.read({ $0 }) else { return } - - self.downstream.write(nil) - responseHandler { response in - _ = downstream.receive(response) - downstream.receive(completion: .finished) - }.resume() - } - - func cancel() { - request.cancel() - downstream.write(nil) - } - } -} - -extension DownloadRequest { - /// Creates a `DownloadResponsePublisher` for this instance using the given `ResponseSerializer` and `DispatchQueue`. - /// - /// - Parameters: - /// - serializer: `ResponseSerializer` used to serialize the response `Data` from disk. - /// - queue: `DispatchQueue` on which the `DownloadResponse` will be published.`.main` by default. - /// - /// - Returns: The `DownloadResponsePublisher`. - @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) - public func publishResponse(using serializer: Serializer, on queue: DispatchQueue = .main) -> DownloadResponsePublisher - where Serializer.SerializedObject == T { - DownloadResponsePublisher(self, queue: queue, serializer: serializer) - } - - /// Creates a `DownloadResponsePublisher` for this instance using the given `DownloadResponseSerializerProtocol` and - /// `DispatchQueue`. - /// - /// - Parameters: - /// - serializer: `DownloadResponseSerializer` used to serialize the response `Data` from disk. - /// - queue: `DispatchQueue` on which the `DownloadResponse` will be published.`.main` by default. - /// - /// - Returns: The `DownloadResponsePublisher`. - @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) - public func publishResponse(using serializer: Serializer, on queue: DispatchQueue = .main) -> DownloadResponsePublisher - where Serializer.SerializedObject == T { - DownloadResponsePublisher(self, queue: queue, serializer: serializer) - } - - /// Creates a `DownloadResponsePublisher` for this instance and uses a `URLResponseSerializer` to serialize the - /// response. - /// - /// - Parameter queue: `DispatchQueue` on which the `DownloadResponse` will be published. `.main` by default. - /// - /// - Returns: The `DownloadResponsePublisher`. - @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) - public func publishURL(queue: DispatchQueue = .main) -> DownloadResponsePublisher { - publishResponse(using: URLResponseSerializer(), on: queue) - } - - /// Creates a `DownloadResponsePublisher` for this instance and uses a `DataResponseSerializer` to serialize the - /// response. - /// - /// - Parameters: - /// - queue: `DispatchQueue` on which the `DownloadResponse` will be published. `.main` by default. - /// - preprocessor: `DataPreprocessor` which filters the `Data` before serialization. `PassthroughPreprocessor()` - /// by default. - /// - emptyResponseCodes: `Set` of HTTP status codes for which empty responses are allowed. `[204, 205]` by - /// default. - /// - emptyRequestMethods: `Set` of `HTTPMethod`s for which empty responses are allowed, regardless of - /// status code. `[.head]` by default. - /// - /// - Returns: The `DownloadResponsePublisher`. - @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) - public func publishData(queue: DispatchQueue = .main, - preprocessor: DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, - emptyResponseCodes: Set = DataResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = DataResponseSerializer.defaultEmptyRequestMethods) -> DownloadResponsePublisher { - publishResponse(using: DataResponseSerializer(dataPreprocessor: preprocessor, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyRequestMethods), - on: queue) - } - - /// Creates a `DownloadResponsePublisher` for this instance and uses a `StringResponseSerializer` to serialize the - /// response. - /// - /// - Parameters: - /// - queue: `DispatchQueue` on which the `DataResponse` will be published. `.main` by default. - /// - preprocessor: `DataPreprocessor` which filters the `Data` before serialization. `PassthroughPreprocessor()` - /// by default. - /// - encoding: `String.Encoding` to parse the response. `nil` by default, in which case the encoding - /// will be determined by the server response, falling back to the default HTTP character - /// set, `ISO-8859-1`. - /// - emptyResponseCodes: `Set` of HTTP status codes for which empty responses are allowed. `[204, 205]` by - /// default. - /// - emptyRequestMethods: `Set` of `HTTPMethod`s for which empty responses are allowed, regardless of - /// status code. `[.head]` by default. - /// - /// - Returns: The `DownloadResponsePublisher`. - @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) - public func publishString(queue: DispatchQueue = .main, - preprocessor: DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, - encoding: String.Encoding? = nil, - emptyResponseCodes: Set = StringResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = StringResponseSerializer.defaultEmptyRequestMethods) -> DownloadResponsePublisher { - publishResponse(using: StringResponseSerializer(dataPreprocessor: preprocessor, - encoding: encoding, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyRequestMethods), - on: queue) - } - - @_disfavoredOverload - @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) - @available(*, deprecated, message: "Renamed publishDecodable(type:queue:preprocessor:decoder:emptyResponseCodes:emptyRequestMethods).") - public func publishDecodable(type: T.Type = T.self, - queue: DispatchQueue = .main, - preprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, - decoder: DataDecoder = JSONDecoder(), - emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, - emptyResponseMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) -> DownloadResponsePublisher { - publishResponse(using: DecodableResponseSerializer(dataPreprocessor: preprocessor, - decoder: decoder, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyResponseMethods), - on: queue) - } - - /// Creates a `DownloadResponsePublisher` for this instance and uses a `DecodableResponseSerializer` to serialize - /// the response. - /// - /// - Parameters: - /// - type: `Decodable` type to which to decode response `Data`. Inferred from the context by default. - /// - queue: `DispatchQueue` on which the `DataResponse` will be published. `.main` by default. - /// - preprocessor: `DataPreprocessor` which filters the `Data` before serialization. - /// `PassthroughPreprocessor()` by default. - /// - decoder: `DataDecoder` instance used to decode response `Data`. `JSONDecoder()` by default. - /// - emptyResponseCodes: `Set` of HTTP status codes for which empty responses are allowed. `[204, 205]` by - /// default. - /// - emptyRequestMethods: `Set` of `HTTPMethod`s for which empty responses are allowed, regardless - /// of status code. `[.head]` by default. - /// - /// - Returns: The `DownloadResponsePublisher`. - @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) - public func publishDecodable(type: T.Type = T.self, - queue: DispatchQueue = .main, - preprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, - decoder: DataDecoder = JSONDecoder(), - emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) -> DownloadResponsePublisher { - publishResponse(using: DecodableResponseSerializer(dataPreprocessor: preprocessor, - decoder: decoder, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyRequestMethods), - on: queue) - } -} - -@available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) -extension DownloadResponsePublisher where Value == URL? { - /// Creates an instance which publishes a `DownloadResponse` value without serialization. - @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) - public init(_ request: DownloadRequest, queue: DispatchQueue) { - self.request = request - responseHandler = { request.response(queue: queue, completionHandler: $0) } - } -} - -extension DownloadRequest { - /// Creates a `DownloadResponsePublisher` for this instance which does not serialize the response before publishing. - /// - /// - Parameter queue: `DispatchQueue` on which the `DownloadResponse` will be published. `.main` by default. - /// - /// - Returns: The `DownloadResponsePublisher`. - @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) - public func publishUnserialized(on queue: DispatchQueue = .main) -> DownloadResponsePublisher { - DownloadResponsePublisher(self, queue: queue) - } -} - -#endif diff --git a/Pods/Alamofire/Source/Concurrency.swift b/Pods/Alamofire/Source/Concurrency.swift deleted file mode 100644 index 21e7e1e..0000000 --- a/Pods/Alamofire/Source/Concurrency.swift +++ /dev/null @@ -1,832 +0,0 @@ -// -// Concurrency.swift -// -// Copyright (c) 2021 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 compiler(>=5.6.0) && canImport(_Concurrency) - -import Foundation - -// MARK: - Request Event Streams - -@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) -extension Request { - /// Creates a `StreamOf` for the instance's upload progress. - /// - /// - Parameter bufferingPolicy: `BufferingPolicy` that determines the stream's buffering behavior.`.unbounded` by default. - /// - /// - Returns: The `StreamOf`. - public func uploadProgress(bufferingPolicy: StreamOf.BufferingPolicy = .unbounded) -> StreamOf { - stream(bufferingPolicy: bufferingPolicy) { [unowned self] continuation in - uploadProgress(queue: underlyingQueue) { progress in - continuation.yield(progress) - } - } - } - - /// Creates a `StreamOf` for the instance's download progress. - /// - /// - Parameter bufferingPolicy: `BufferingPolicy` that determines the stream's buffering behavior.`.unbounded` by default. - /// - /// - Returns: The `StreamOf`. - public func downloadProgress(bufferingPolicy: StreamOf.BufferingPolicy = .unbounded) -> StreamOf { - stream(bufferingPolicy: bufferingPolicy) { [unowned self] continuation in - downloadProgress(queue: underlyingQueue) { progress in - continuation.yield(progress) - } - } - } - - /// Creates a `StreamOf` for the `URLRequest`s produced for the instance. - /// - /// - Parameter bufferingPolicy: `BufferingPolicy` that determines the stream's buffering behavior.`.unbounded` by default. - /// - /// - Returns: The `StreamOf`. - public func urlRequests(bufferingPolicy: StreamOf.BufferingPolicy = .unbounded) -> StreamOf { - stream(bufferingPolicy: bufferingPolicy) { [unowned self] continuation in - onURLRequestCreation(on: underlyingQueue) { request in - continuation.yield(request) - } - } - } - - /// Creates a `StreamOf` for the `URLSessionTask`s produced for the instance. - /// - /// - Parameter bufferingPolicy: `BufferingPolicy` that determines the stream's buffering behavior.`.unbounded` by default. - /// - /// - Returns: The `StreamOf`. - public func urlSessionTasks(bufferingPolicy: StreamOf.BufferingPolicy = .unbounded) -> StreamOf { - stream(bufferingPolicy: bufferingPolicy) { [unowned self] continuation in - onURLSessionTaskCreation(on: underlyingQueue) { task in - continuation.yield(task) - } - } - } - - /// Creates a `StreamOf` for the cURL descriptions produced for the instance. - /// - /// - Parameter bufferingPolicy: `BufferingPolicy` that determines the stream's buffering behavior.`.unbounded` by default. - /// - /// - Returns: The `StreamOf`. - public func cURLDescriptions(bufferingPolicy: StreamOf.BufferingPolicy = .unbounded) -> StreamOf { - stream(bufferingPolicy: bufferingPolicy) { [unowned self] continuation in - cURLDescription(on: underlyingQueue) { description in - continuation.yield(description) - } - } - } - - fileprivate func stream(of type: T.Type = T.self, - bufferingPolicy: StreamOf.BufferingPolicy = .unbounded, - yielder: @escaping (StreamOf.Continuation) -> Void) -> StreamOf { - StreamOf(bufferingPolicy: bufferingPolicy) { [unowned self] continuation in - yielder(continuation) - // Must come after serializers run in order to catch retry progress. - onFinish { - continuation.finish() - } - } - } -} - -// MARK: - DataTask - -/// Value used to `await` a `DataResponse` and associated values. -@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) -public struct DataTask { - /// `DataResponse` produced by the `DataRequest` and its response handler. - public var response: DataResponse { - get async { - if shouldAutomaticallyCancel { - return await withTaskCancellationHandler { - await task.value - } onCancel: { - cancel() - } - } else { - return await task.value - } - } - } - - /// `Result` of any response serialization performed for the `response`. - public var result: Result { - get async { await response.result } - } - - /// `Value` returned by the `response`. - public var value: Value { - get async throws { - try await result.get() - } - } - - private let request: DataRequest - private let task: Task, Never> - private let shouldAutomaticallyCancel: Bool - - fileprivate init(request: DataRequest, task: Task, Never>, shouldAutomaticallyCancel: Bool) { - self.request = request - self.task = task - self.shouldAutomaticallyCancel = shouldAutomaticallyCancel - } - - /// Cancel the underlying `DataRequest` and `Task`. - public func cancel() { - task.cancel() - } - - /// Resume the underlying `DataRequest`. - public func resume() { - request.resume() - } - - /// Suspend the underlying `DataRequest`. - public func suspend() { - request.suspend() - } -} - -@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) -extension DataRequest { - /// Creates a `StreamOf` for the instance's responses. - /// - /// - Parameter bufferingPolicy: `BufferingPolicy` that determines the stream's buffering behavior.`.unbounded` by default. - /// - /// - Returns: The `StreamOf`. - public func httpResponses(bufferingPolicy: StreamOf.BufferingPolicy = .unbounded) -> StreamOf { - stream(bufferingPolicy: bufferingPolicy) { [unowned self] continuation in - onHTTPResponse(on: underlyingQueue) { response in - continuation.yield(response) - } - } - } - - #if swift(>=5.7) - /// Sets an async closure returning a `Request.ResponseDisposition`, called whenever the `DataRequest` produces an - /// `HTTPURLResponse`. - /// - /// - Note: Most requests will only produce a single response for each outgoing attempt (initial + retries). - /// However, some types of response may trigger multiple `HTTPURLResponse`s, such as multipart streams, - /// where responses after the first will contain the part headers. - /// - /// - Parameters: - /// - handler: Async closure executed when a new `HTTPURLResponse` is received and returning a - /// `ResponseDisposition` value. This value determines whether to continue the request or cancel it as - /// if `cancel()` had been called on the instance. Note, this closure is called on an arbitrary thread, - /// so any synchronous calls in it will execute in that context. - /// - /// - Returns: The instance. - @_disfavoredOverload - @discardableResult - public func onHTTPResponse( - perform handler: @escaping @Sendable (_ response: HTTPURLResponse) async -> ResponseDisposition - ) -> Self { - onHTTPResponse(on: underlyingQueue) { response, completionHandler in - Task { - let disposition = await handler(response) - completionHandler(disposition) - } - } - - return self - } - - /// Sets an async closure called whenever the `DataRequest` produces an `HTTPURLResponse`. - /// - /// - Note: Most requests will only produce a single response for each outgoing attempt (initial + retries). - /// However, some types of response may trigger multiple `HTTPURLResponse`s, such as multipart streams, - /// where responses after the first will contain the part headers. - /// - /// - Parameters: - /// - handler: Async closure executed when a new `HTTPURLResponse` is received. Note, this closure is called on an - /// arbitrary thread, so any synchronous calls in it will execute in that context. - /// - /// - Returns: The instance. - @discardableResult - public func onHTTPResponse(perform handler: @escaping @Sendable (_ response: HTTPURLResponse) async -> Void) -> Self { - onHTTPResponse { response in - await handler(response) - return .allow - } - - return self - } - #endif - - /// Creates a `DataTask` to `await` a `Data` value. - /// - /// - Parameters: - /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the - /// enclosing async context is cancelled. Only applies to `DataTask`'s async - /// properties. `true` by default. - /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before completion. - /// - emptyResponseCodes: HTTP response codes for which empty responses are allowed. `[204, 205]` by default. - /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. - /// - /// - Returns: The `DataTask`. - public func serializingData(automaticallyCancelling shouldAutomaticallyCancel: Bool = true, - dataPreprocessor: DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, - emptyResponseCodes: Set = DataResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = DataResponseSerializer.defaultEmptyRequestMethods) -> DataTask { - serializingResponse(using: DataResponseSerializer(dataPreprocessor: dataPreprocessor, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyRequestMethods), - automaticallyCancelling: shouldAutomaticallyCancel) - } - - /// Creates a `DataTask` to `await` serialization of a `Decodable` value. - /// - /// - Parameters: - /// - type: `Decodable` type to decode from response data. - /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the - /// enclosing async context is cancelled. Only applies to `DataTask`'s async - /// properties. `true` by default. - /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before calling the serializer. - /// `PassthroughPreprocessor()` by default. - /// - decoder: `DataDecoder` to use to decode the response. `JSONDecoder()` by default. - /// - emptyResponseCodes: HTTP status codes for which empty responses are always valid. `[204, 205]` by default. - /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. - /// - /// - Returns: The `DataTask`. - public func serializingDecodable(_ type: Value.Type = Value.self, - automaticallyCancelling shouldAutomaticallyCancel: Bool = true, - dataPreprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, - decoder: DataDecoder = JSONDecoder(), - emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) -> DataTask { - serializingResponse(using: DecodableResponseSerializer(dataPreprocessor: dataPreprocessor, - decoder: decoder, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyRequestMethods), - automaticallyCancelling: shouldAutomaticallyCancel) - } - - /// Creates a `DataTask` to `await` serialization of a `String` value. - /// - /// - Parameters: - /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the - /// enclosing async context is cancelled. Only applies to `DataTask`'s async - /// properties. `true` by default. - /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before calling the serializer. - /// `PassthroughPreprocessor()` by default. - /// - encoding: `String.Encoding` to use during serialization. Defaults to `nil`, in which case - /// the encoding will be determined from the server response, falling back to the - /// default HTTP character set, `ISO-8859-1`. - /// - emptyResponseCodes: HTTP status codes for which empty responses are always valid. `[204, 205]` by default. - /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. - /// - /// - Returns: The `DataTask`. - public func serializingString(automaticallyCancelling shouldAutomaticallyCancel: Bool = true, - dataPreprocessor: DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, - encoding: String.Encoding? = nil, - emptyResponseCodes: Set = StringResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = StringResponseSerializer.defaultEmptyRequestMethods) -> DataTask { - serializingResponse(using: StringResponseSerializer(dataPreprocessor: dataPreprocessor, - encoding: encoding, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyRequestMethods), - automaticallyCancelling: shouldAutomaticallyCancel) - } - - /// Creates a `DataTask` to `await` serialization using the provided `ResponseSerializer` instance. - /// - /// - Parameters: - /// - serializer: `ResponseSerializer` responsible for serializing the request, response, and data. - /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the - /// enclosing async context is cancelled. Only applies to `DataTask`'s async - /// properties. `true` by default. - /// - /// - Returns: The `DataTask`. - public func serializingResponse(using serializer: Serializer, - automaticallyCancelling shouldAutomaticallyCancel: Bool = true) - -> DataTask { - dataTask(automaticallyCancelling: shouldAutomaticallyCancel) { [self] in - response(queue: underlyingQueue, - responseSerializer: serializer, - completionHandler: $0) - } - } - - /// Creates a `DataTask` to `await` serialization using the provided `DataResponseSerializerProtocol` instance. - /// - /// - Parameters: - /// - serializer: `DataResponseSerializerProtocol` responsible for serializing the request, - /// response, and data. - /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the - /// enclosing async context is cancelled. Only applies to `DataTask`'s async - /// properties. `true` by default. - /// - /// - Returns: The `DataTask`. - public func serializingResponse(using serializer: Serializer, - automaticallyCancelling shouldAutomaticallyCancel: Bool = true) - -> DataTask { - dataTask(automaticallyCancelling: shouldAutomaticallyCancel) { [self] in - response(queue: underlyingQueue, - responseSerializer: serializer, - completionHandler: $0) - } - } - - private func dataTask(automaticallyCancelling shouldAutomaticallyCancel: Bool, - forResponse onResponse: @escaping (@escaping (DataResponse) -> Void) -> Void) - -> DataTask { - let task = Task { - await withTaskCancellationHandler { - await withCheckedContinuation { continuation in - onResponse { - continuation.resume(returning: $0) - } - } - } onCancel: { - self.cancel() - } - } - - return DataTask(request: self, task: task, shouldAutomaticallyCancel: shouldAutomaticallyCancel) - } -} - -// MARK: - DownloadTask - -/// Value used to `await` a `DownloadResponse` and associated values. -@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) -public struct DownloadTask { - /// `DownloadResponse` produced by the `DownloadRequest` and its response handler. - public var response: DownloadResponse { - get async { - if shouldAutomaticallyCancel { - return await withTaskCancellationHandler { - await task.value - } onCancel: { - cancel() - } - } else { - return await task.value - } - } - } - - /// `Result` of any response serialization performed for the `response`. - public var result: Result { - get async { await response.result } - } - - /// `Value` returned by the `response`. - public var value: Value { - get async throws { - try await result.get() - } - } - - private let task: Task, Never> - private let request: DownloadRequest - private let shouldAutomaticallyCancel: Bool - - fileprivate init(request: DownloadRequest, task: Task, Never>, shouldAutomaticallyCancel: Bool) { - self.request = request - self.task = task - self.shouldAutomaticallyCancel = shouldAutomaticallyCancel - } - - /// Cancel the underlying `DownloadRequest` and `Task`. - public func cancel() { - task.cancel() - } - - /// Resume the underlying `DownloadRequest`. - public func resume() { - request.resume() - } - - /// Suspend the underlying `DownloadRequest`. - public func suspend() { - request.suspend() - } -} - -@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) -extension DownloadRequest { - /// Creates a `DownloadTask` to `await` a `Data` value. - /// - /// - Parameters: - /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the - /// enclosing async context is cancelled. Only applies to `DownloadTask`'s async - /// properties. `true` by default. - /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before completion. - /// - emptyResponseCodes: HTTP response codes for which empty responses are allowed. `[204, 205]` by default. - /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. - /// - /// - Returns: The `DownloadTask`. - public func serializingData(automaticallyCancelling shouldAutomaticallyCancel: Bool = true, - dataPreprocessor: DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, - emptyResponseCodes: Set = DataResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = DataResponseSerializer.defaultEmptyRequestMethods) -> DownloadTask { - serializingDownload(using: DataResponseSerializer(dataPreprocessor: dataPreprocessor, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyRequestMethods), - automaticallyCancelling: shouldAutomaticallyCancel) - } - - /// Creates a `DownloadTask` to `await` serialization of a `Decodable` value. - /// - /// - Note: This serializer reads the entire response into memory before parsing. - /// - /// - Parameters: - /// - type: `Decodable` type to decode from response data. - /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the - /// enclosing async context is cancelled. Only applies to `DownloadTask`'s async - /// properties. `true` by default. - /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before calling the serializer. - /// `PassthroughPreprocessor()` by default. - /// - decoder: `DataDecoder` to use to decode the response. `JSONDecoder()` by default. - /// - emptyResponseCodes: HTTP status codes for which empty responses are always valid. `[204, 205]` by default. - /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. - /// - /// - Returns: The `DownloadTask`. - public func serializingDecodable(_ type: Value.Type = Value.self, - automaticallyCancelling shouldAutomaticallyCancel: Bool = true, - dataPreprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, - decoder: DataDecoder = JSONDecoder(), - emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) -> DownloadTask { - serializingDownload(using: DecodableResponseSerializer(dataPreprocessor: dataPreprocessor, - decoder: decoder, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyRequestMethods), - automaticallyCancelling: shouldAutomaticallyCancel) - } - - /// Creates a `DownloadTask` to `await` serialization of the downloaded file's `URL` on disk. - /// - /// - Parameters: - /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the - /// enclosing async context is cancelled. Only applies to `DownloadTask`'s async - /// properties. `true` by default. - /// - /// - Returns: The `DownloadTask`. - public func serializingDownloadedFileURL(automaticallyCancelling shouldAutomaticallyCancel: Bool = true) -> DownloadTask { - serializingDownload(using: URLResponseSerializer(), - automaticallyCancelling: shouldAutomaticallyCancel) - } - - /// Creates a `DownloadTask` to `await` serialization of a `String` value. - /// - /// - Parameters: - /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the - /// enclosing async context is cancelled. Only applies to `DownloadTask`'s async - /// properties. `true` by default. - /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before calling the - /// serializer. `PassthroughPreprocessor()` by default. - /// - encoding: `String.Encoding` to use during serialization. Defaults to `nil`, in which case - /// the encoding will be determined from the server response, falling back to the - /// default HTTP character set, `ISO-8859-1`. - /// - emptyResponseCodes: HTTP status codes for which empty responses are always valid. `[204, 205]` by default. - /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. - /// - /// - Returns: The `DownloadTask`. - public func serializingString(automaticallyCancelling shouldAutomaticallyCancel: Bool = true, - dataPreprocessor: DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, - encoding: String.Encoding? = nil, - emptyResponseCodes: Set = StringResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = StringResponseSerializer.defaultEmptyRequestMethods) -> DownloadTask { - serializingDownload(using: StringResponseSerializer(dataPreprocessor: dataPreprocessor, - encoding: encoding, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyRequestMethods), - automaticallyCancelling: shouldAutomaticallyCancel) - } - - /// Creates a `DownloadTask` to `await` serialization using the provided `ResponseSerializer` instance. - /// - /// - Parameters: - /// - serializer: `ResponseSerializer` responsible for serializing the request, response, and data. - /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the - /// enclosing async context is cancelled. Only applies to `DownloadTask`'s async - /// properties. `true` by default. - /// - /// - Returns: The `DownloadTask`. - public func serializingDownload(using serializer: Serializer, - automaticallyCancelling shouldAutomaticallyCancel: Bool = true) - -> DownloadTask { - downloadTask(automaticallyCancelling: shouldAutomaticallyCancel) { [self] in - response(queue: underlyingQueue, - responseSerializer: serializer, - completionHandler: $0) - } - } - - /// Creates a `DownloadTask` to `await` serialization using the provided `DownloadResponseSerializerProtocol` - /// instance. - /// - /// - Parameters: - /// - serializer: `DownloadResponseSerializerProtocol` responsible for serializing the request, - /// response, and data. - /// - shouldAutomaticallyCancel: `Bool` determining whether or not the request should be cancelled when the - /// enclosing async context is cancelled. Only applies to `DownloadTask`'s async - /// properties. `true` by default. - /// - /// - Returns: The `DownloadTask`. - public func serializingDownload(using serializer: Serializer, - automaticallyCancelling shouldAutomaticallyCancel: Bool = true) - -> DownloadTask { - downloadTask(automaticallyCancelling: shouldAutomaticallyCancel) { [self] in - response(queue: underlyingQueue, - responseSerializer: serializer, - completionHandler: $0) - } - } - - private func downloadTask(automaticallyCancelling shouldAutomaticallyCancel: Bool, - forResponse onResponse: @escaping (@escaping (DownloadResponse) -> Void) -> Void) - -> DownloadTask { - let task = Task { - await withTaskCancellationHandler { - await withCheckedContinuation { continuation in - onResponse { - continuation.resume(returning: $0) - } - } - } onCancel: { - self.cancel() - } - } - - return DownloadTask(request: self, task: task, shouldAutomaticallyCancel: shouldAutomaticallyCancel) - } -} - -// MARK: - DataStreamTask - -@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) -public struct DataStreamTask { - // Type of created streams. - public typealias Stream = StreamOf> - - private let request: DataStreamRequest - - fileprivate init(request: DataStreamRequest) { - self.request = request - } - - /// Creates a `Stream` of `Data` values from the underlying `DataStreamRequest`. - /// - /// - Parameters: - /// - shouldAutomaticallyCancel: `Bool` indicating whether the underlying `DataStreamRequest` should be canceled - /// which observation of the stream stops. `true` by default. - /// - bufferingPolicy: ` BufferingPolicy` that determines the stream's buffering behavior.`.unbounded` by default. - /// - /// - Returns: The `Stream`. - public func streamingData(automaticallyCancelling shouldAutomaticallyCancel: Bool = true, bufferingPolicy: Stream.BufferingPolicy = .unbounded) -> Stream { - createStream(automaticallyCancelling: shouldAutomaticallyCancel, bufferingPolicy: bufferingPolicy) { onStream in - request.responseStream(on: .streamCompletionQueue(forRequestID: request.id), stream: onStream) - } - } - - /// Creates a `Stream` of `UTF-8` `String`s from the underlying `DataStreamRequest`. - /// - /// - Parameters: - /// - shouldAutomaticallyCancel: `Bool` indicating whether the underlying `DataStreamRequest` should be canceled - /// which observation of the stream stops. `true` by default. - /// - bufferingPolicy: ` BufferingPolicy` that determines the stream's buffering behavior.`.unbounded` by default. - /// - Returns: - public func streamingStrings(automaticallyCancelling shouldAutomaticallyCancel: Bool = true, bufferingPolicy: Stream.BufferingPolicy = .unbounded) -> Stream { - createStream(automaticallyCancelling: shouldAutomaticallyCancel, bufferingPolicy: bufferingPolicy) { onStream in - request.responseStreamString(on: .streamCompletionQueue(forRequestID: request.id), stream: onStream) - } - } - - /// Creates a `Stream` of `Decodable` values from the underlying `DataStreamRequest`. - /// - /// - Parameters: - /// - type: `Decodable` type to be serialized from stream payloads. - /// - shouldAutomaticallyCancel: `Bool` indicating whether the underlying `DataStreamRequest` should be canceled - /// which observation of the stream stops. `true` by default. - /// - bufferingPolicy: `BufferingPolicy` that determines the stream's buffering behavior.`.unbounded` by default. - /// - /// - Returns: The `Stream`. - public func streamingDecodables(_ type: T.Type = T.self, - automaticallyCancelling shouldAutomaticallyCancel: Bool = true, - bufferingPolicy: Stream.BufferingPolicy = .unbounded) - -> Stream where T: Decodable { - streamingResponses(serializedUsing: DecodableStreamSerializer(), - automaticallyCancelling: shouldAutomaticallyCancel, - bufferingPolicy: bufferingPolicy) - } - - /// Creates a `Stream` of values using the provided `DataStreamSerializer` from the underlying `DataStreamRequest`. - /// - /// - Parameters: - /// - serializer: `DataStreamSerializer` to use to serialize incoming `Data`. - /// - shouldAutomaticallyCancel: `Bool` indicating whether the underlying `DataStreamRequest` should be canceled - /// which observation of the stream stops. `true` by default. - /// - bufferingPolicy: `BufferingPolicy` that determines the stream's buffering behavior.`.unbounded` by default. - /// - /// - Returns: The `Stream`. - public func streamingResponses(serializedUsing serializer: Serializer, - automaticallyCancelling shouldAutomaticallyCancel: Bool = true, - bufferingPolicy: Stream.BufferingPolicy = .unbounded) - -> Stream { - createStream(automaticallyCancelling: shouldAutomaticallyCancel, bufferingPolicy: bufferingPolicy) { onStream in - request.responseStream(using: serializer, - on: .streamCompletionQueue(forRequestID: request.id), - stream: onStream) - } - } - - private func createStream(automaticallyCancelling shouldAutomaticallyCancel: Bool = true, - bufferingPolicy: Stream.BufferingPolicy = .unbounded, - forResponse onResponse: @escaping (@escaping (DataStreamRequest.Stream) -> Void) -> Void) - -> Stream { - StreamOf(bufferingPolicy: bufferingPolicy) { - guard shouldAutomaticallyCancel, - request.isInitialized || request.isResumed || request.isSuspended else { return } - - cancel() - } builder: { continuation in - onResponse { stream in - continuation.yield(stream) - if case .complete = stream.event { - continuation.finish() - } - } - } - } - - /// Cancel the underlying `DataStreamRequest`. - public func cancel() { - request.cancel() - } - - /// Resume the underlying `DataStreamRequest`. - public func resume() { - request.resume() - } - - /// Suspend the underlying `DataStreamRequest`. - public func suspend() { - request.suspend() - } -} - -@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) -extension DataStreamRequest { - /// Creates a `StreamOf` for the instance's responses. - /// - /// - Parameter bufferingPolicy: `BufferingPolicy` that determines the stream's buffering behavior.`.unbounded` by default. - /// - /// - Returns: The `StreamOf`. - public func httpResponses(bufferingPolicy: StreamOf.BufferingPolicy = .unbounded) -> StreamOf { - stream(bufferingPolicy: bufferingPolicy) { [unowned self] continuation in - onHTTPResponse(on: underlyingQueue) { response in - continuation.yield(response) - } - } - } - - #if swift(>=5.7) - /// Sets an async closure returning a `Request.ResponseDisposition`, called whenever the `DataStreamRequest` - /// produces an `HTTPURLResponse`. - /// - /// - Note: Most requests will only produce a single response for each outgoing attempt (initial + retries). - /// However, some types of response may trigger multiple `HTTPURLResponse`s, such as multipart streams, - /// where responses after the first will contain the part headers. - /// - /// - Parameters: - /// - handler: Async closure executed when a new `HTTPURLResponse` is received and returning a - /// `ResponseDisposition` value. This value determines whether to continue the request or cancel it as - /// if `cancel()` had been called on the instance. Note, this closure is called on an arbitrary thread, - /// so any synchronous calls in it will execute in that context. - /// - /// - Returns: The instance. - @_disfavoredOverload - @discardableResult - public func onHTTPResponse(perform handler: @escaping @Sendable (HTTPURLResponse) async -> ResponseDisposition) -> Self { - onHTTPResponse(on: underlyingQueue) { response, completionHandler in - Task { - let disposition = await handler(response) - completionHandler(disposition) - } - } - - return self - } - - /// Sets an async closure called whenever the `DataStreamRequest` produces an `HTTPURLResponse`. - /// - /// - Note: Most requests will only produce a single response for each outgoing attempt (initial + retries). - /// However, some types of response may trigger multiple `HTTPURLResponse`s, such as multipart streams, - /// where responses after the first will contain the part headers. - /// - /// - Parameters: - /// - handler: Async closure executed when a new `HTTPURLResponse` is received. Note, this closure is called on an - /// arbitrary thread, so any synchronous calls in it will execute in that context. - /// - /// - Returns: The instance. - @discardableResult - public func onHTTPResponse(perform handler: @escaping @Sendable (HTTPURLResponse) async -> Void) -> Self { - onHTTPResponse { response in - await handler(response) - return .allow - } - - return self - } - #endif - - /// Creates a `DataStreamTask` used to `await` streams of serialized values. - /// - /// - Returns: The `DataStreamTask`. - public func streamTask() -> DataStreamTask { - DataStreamTask(request: self) - } -} - -extension DispatchQueue { - fileprivate static let singleEventQueue = DispatchQueue(label: "org.alamofire.concurrencySingleEventQueue", - attributes: .concurrent) - - fileprivate static func streamCompletionQueue(forRequestID id: UUID) -> DispatchQueue { - DispatchQueue(label: "org.alamofire.concurrencyStreamCompletionQueue-\(id)", target: .singleEventQueue) - } -} - -/// An asynchronous sequence generated from an underlying `AsyncStream`. Only produced by Alamofire. -@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) -public struct StreamOf: AsyncSequence { - public typealias AsyncIterator = Iterator - public typealias BufferingPolicy = AsyncStream.Continuation.BufferingPolicy - fileprivate typealias Continuation = AsyncStream.Continuation - - private let bufferingPolicy: BufferingPolicy - private let onTermination: (() -> Void)? - private let builder: (Continuation) -> Void - - fileprivate init(bufferingPolicy: BufferingPolicy = .unbounded, - onTermination: (() -> Void)? = nil, - builder: @escaping (Continuation) -> Void) { - self.bufferingPolicy = bufferingPolicy - self.onTermination = onTermination - self.builder = builder - } - - public func makeAsyncIterator() -> Iterator { - var continuation: AsyncStream.Continuation? - let stream = AsyncStream(bufferingPolicy: bufferingPolicy) { innerContinuation in - continuation = innerContinuation - builder(innerContinuation) - } - - return Iterator(iterator: stream.makeAsyncIterator()) { - continuation?.finish() - onTermination?() - } - } - - public struct Iterator: AsyncIteratorProtocol { - private final class Token { - private let onDeinit: () -> Void - - init(onDeinit: @escaping () -> Void) { - self.onDeinit = onDeinit - } - - deinit { - onDeinit() - } - } - - private var iterator: AsyncStream.AsyncIterator - private let token: Token - - init(iterator: AsyncStream.AsyncIterator, onCancellation: @escaping () -> Void) { - self.iterator = iterator - token = Token(onDeinit: onCancellation) - } - - public mutating func next() async -> Element? { - await iterator.next() - } - } -} - -#endif diff --git a/Pods/Alamofire/Source/DispatchQueue+Alamofire.swift b/Pods/Alamofire/Source/DispatchQueue+Alamofire.swift deleted file mode 100644 index 10cd273..0000000 --- a/Pods/Alamofire/Source/DispatchQueue+Alamofire.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// DispatchQueue+Alamofire.swift -// -// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 Dispatch -import Foundation - -extension DispatchQueue { - /// Execute the provided closure after a `TimeInterval`. - /// - /// - Parameters: - /// - delay: `TimeInterval` to delay execution. - /// - closure: Closure to execute. - func after(_ delay: TimeInterval, execute closure: @escaping () -> Void) { - asyncAfter(deadline: .now() + delay, execute: closure) - } -} diff --git a/Pods/Alamofire/Source/EventMonitor.swift b/Pods/Alamofire/Source/EventMonitor.swift deleted file mode 100644 index 75b60f2..0000000 --- a/Pods/Alamofire/Source/EventMonitor.swift +++ /dev/null @@ -1,907 +0,0 @@ -// -// EventMonitor.swift -// -// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -/// Protocol outlining the lifetime events inside Alamofire. It includes both events received from the various -/// `URLSession` delegate protocols as well as various events from the lifetime of `Request` and its subclasses. -public protocol EventMonitor { - /// The `DispatchQueue` onto which Alamofire's root `CompositeEventMonitor` will dispatch events. `.main` by default. - var queue: DispatchQueue { get } - - // MARK: - URLSession Events - - // MARK: URLSessionDelegate Events - - /// Event called during `URLSessionDelegate`'s `urlSession(_:didBecomeInvalidWithError:)` method. - func urlSession(_ session: URLSession, didBecomeInvalidWithError error: Error?) - - // MARK: URLSessionTaskDelegate Events - - /// Event called during `URLSessionTaskDelegate`'s `urlSession(_:task:didReceive:completionHandler:)` method. - func urlSession(_ session: URLSession, task: URLSessionTask, didReceive challenge: URLAuthenticationChallenge) - - /// Event called during `URLSessionTaskDelegate`'s `urlSession(_:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:)` method. - func urlSession(_ session: URLSession, - task: URLSessionTask, - didSendBodyData bytesSent: Int64, - totalBytesSent: Int64, - totalBytesExpectedToSend: Int64) - - /// Event called during `URLSessionTaskDelegate`'s `urlSession(_:task:needNewBodyStream:)` method. - func urlSession(_ session: URLSession, taskNeedsNewBodyStream task: URLSessionTask) - - /// Event called during `URLSessionTaskDelegate`'s `urlSession(_:task:willPerformHTTPRedirection:newRequest:completionHandler:)` method. - func urlSession(_ session: URLSession, - task: URLSessionTask, - willPerformHTTPRedirection response: HTTPURLResponse, - newRequest request: URLRequest) - - /// Event called during `URLSessionTaskDelegate`'s `urlSession(_:task:didFinishCollecting:)` method. - func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) - - /// Event called during `URLSessionTaskDelegate`'s `urlSession(_:task:didCompleteWithError:)` method. - func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) - - /// Event called during `URLSessionTaskDelegate`'s `urlSession(_:taskIsWaitingForConnectivity:)` method. - func urlSession(_ session: URLSession, taskIsWaitingForConnectivity task: URLSessionTask) - - // MARK: URLSessionDataDelegate Events - - /// Event called during `URLSessionDataDelegate`'s `urlSession(_:dataTask:didReceive:completionHandler:)` method. - func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse) - - /// Event called during `URLSessionDataDelegate`'s `urlSession(_:dataTask:didReceive:)` method. - func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) - - /// Event called during `URLSessionDataDelegate`'s `urlSession(_:dataTask:willCacheResponse:completionHandler:)` method. - func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, willCacheResponse proposedResponse: CachedURLResponse) - - // MARK: URLSessionDownloadDelegate Events - - /// Event called during `URLSessionDownloadDelegate`'s `urlSession(_:downloadTask:didResumeAtOffset:expectedTotalBytes:)` method. - func urlSession(_ session: URLSession, - downloadTask: URLSessionDownloadTask, - didResumeAtOffset fileOffset: Int64, - expectedTotalBytes: Int64) - - /// Event called during `URLSessionDownloadDelegate`'s `urlSession(_:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:)` method. - func urlSession(_ session: URLSession, - downloadTask: URLSessionDownloadTask, - didWriteData bytesWritten: Int64, - totalBytesWritten: Int64, - totalBytesExpectedToWrite: Int64) - - /// Event called during `URLSessionDownloadDelegate`'s `urlSession(_:downloadTask:didFinishDownloadingTo:)` method. - func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) - - // MARK: - Request Events - - /// Event called when a `URLRequest` is first created for a `Request`. If a `RequestAdapter` is active, the - /// `URLRequest` will be adapted before being issued. - func request(_ request: Request, didCreateInitialURLRequest urlRequest: URLRequest) - - /// Event called when the attempt to create a `URLRequest` from a `Request`'s original `URLRequestConvertible` value fails. - func request(_ request: Request, didFailToCreateURLRequestWithError error: AFError) - - /// Event called when a `RequestAdapter` adapts the `Request`'s initial `URLRequest`. - func request(_ request: Request, didAdaptInitialRequest initialRequest: URLRequest, to adaptedRequest: URLRequest) - - /// Event called when a `RequestAdapter` fails to adapt the `Request`'s initial `URLRequest`. - func request(_ request: Request, didFailToAdaptURLRequest initialRequest: URLRequest, withError error: AFError) - - /// Event called when a final `URLRequest` is created for a `Request`. - func request(_ request: Request, didCreateURLRequest urlRequest: URLRequest) - - /// Event called when a `URLSessionTask` subclass instance is created for a `Request`. - func request(_ request: Request, didCreateTask task: URLSessionTask) - - /// Event called when a `Request` receives a `URLSessionTaskMetrics` value. - func request(_ request: Request, didGatherMetrics metrics: URLSessionTaskMetrics) - - /// Event called when a `Request` fails due to an error created by Alamofire. e.g. When certificate pinning fails. - func request(_ request: Request, didFailTask task: URLSessionTask, earlyWithError error: AFError) - - /// Event called when a `Request`'s task completes, possibly with an error. A `Request` may receive this event - /// multiple times if it is retried. - func request(_ request: Request, didCompleteTask task: URLSessionTask, with error: AFError?) - - /// Event called when a `Request` is about to be retried. - func requestIsRetrying(_ request: Request) - - /// Event called when a `Request` finishes and response serializers are being called. - func requestDidFinish(_ request: Request) - - /// Event called when a `Request` receives a `resume` call. - func requestDidResume(_ request: Request) - - /// Event called when a `Request`'s associated `URLSessionTask` is resumed. - func request(_ request: Request, didResumeTask task: URLSessionTask) - - /// Event called when a `Request` receives a `suspend` call. - func requestDidSuspend(_ request: Request) - - /// Event called when a `Request`'s associated `URLSessionTask` is suspended. - func request(_ request: Request, didSuspendTask task: URLSessionTask) - - /// Event called when a `Request` receives a `cancel` call. - func requestDidCancel(_ request: Request) - - /// Event called when a `Request`'s associated `URLSessionTask` is cancelled. - func request(_ request: Request, didCancelTask task: URLSessionTask) - - // MARK: DataRequest Events - - /// Event called when a `DataRequest` calls a `Validation`. - func request(_ request: DataRequest, - didValidateRequest urlRequest: URLRequest?, - response: HTTPURLResponse, - data: Data?, - withResult result: Request.ValidationResult) - - /// Event called when a `DataRequest` creates a `DataResponse` value without calling a `ResponseSerializer`. - func request(_ request: DataRequest, didParseResponse response: DataResponse) - - /// Event called when a `DataRequest` calls a `ResponseSerializer` and creates a generic `DataResponse`. - func request(_ request: DataRequest, didParseResponse response: DataResponse) - - // MARK: DataStreamRequest Events - - /// Event called when a `DataStreamRequest` calls a `Validation` closure. - /// - /// - Parameters: - /// - request: `DataStreamRequest` which is calling the `Validation`. - /// - urlRequest: `URLRequest` of the request being validated. - /// - response: `HTTPURLResponse` of the request being validated. - /// - result: Produced `ValidationResult`. - func request(_ request: DataStreamRequest, - didValidateRequest urlRequest: URLRequest?, - response: HTTPURLResponse, - withResult result: Request.ValidationResult) - - /// Event called when a `DataStreamSerializer` produces a value from streamed `Data`. - /// - /// - Parameters: - /// - request: `DataStreamRequest` for which the value was serialized. - /// - result: `Result` of the serialization attempt. - func request(_ request: DataStreamRequest, didParseStream result: Result) - - // MARK: UploadRequest Events - - /// Event called when an `UploadRequest` creates its `Uploadable` value, indicating the type of upload it represents. - func request(_ request: UploadRequest, didCreateUploadable uploadable: UploadRequest.Uploadable) - - /// Event called when an `UploadRequest` failed to create its `Uploadable` value due to an error. - func request(_ request: UploadRequest, didFailToCreateUploadableWithError error: AFError) - - /// Event called when an `UploadRequest` provides the `InputStream` from its `Uploadable` value. This only occurs if - /// the `InputStream` does not wrap a `Data` value or file `URL`. - func request(_ request: UploadRequest, didProvideInputStream stream: InputStream) - - // MARK: DownloadRequest Events - - /// Event called when a `DownloadRequest`'s `URLSessionDownloadTask` finishes and the temporary file has been moved. - func request(_ request: DownloadRequest, didFinishDownloadingUsing task: URLSessionTask, with result: Result) - - /// Event called when a `DownloadRequest`'s `Destination` closure is called and creates the destination URL the - /// downloaded file will be moved to. - func request(_ request: DownloadRequest, didCreateDestinationURL url: URL) - - /// Event called when a `DownloadRequest` calls a `Validation`. - func request(_ request: DownloadRequest, - didValidateRequest urlRequest: URLRequest?, - response: HTTPURLResponse, - fileURL: URL?, - withResult result: Request.ValidationResult) - - /// Event called when a `DownloadRequest` creates a `DownloadResponse` without calling a `ResponseSerializer`. - func request(_ request: DownloadRequest, didParseResponse response: DownloadResponse) - - /// Event called when a `DownloadRequest` calls a `DownloadResponseSerializer` and creates a generic `DownloadResponse` - func request(_ request: DownloadRequest, didParseResponse response: DownloadResponse) -} - -extension EventMonitor { - /// The default queue on which `CompositeEventMonitor`s will call the `EventMonitor` methods. `.main` by default. - public var queue: DispatchQueue { .main } - - // MARK: Default Implementations - - public func urlSession(_ session: URLSession, didBecomeInvalidWithError error: Error?) {} - public func urlSession(_ session: URLSession, - task: URLSessionTask, - didReceive challenge: URLAuthenticationChallenge) {} - public func urlSession(_ session: URLSession, - task: URLSessionTask, - didSendBodyData bytesSent: Int64, - totalBytesSent: Int64, - totalBytesExpectedToSend: Int64) {} - public func urlSession(_ session: URLSession, taskNeedsNewBodyStream task: URLSessionTask) {} - public func urlSession(_ session: URLSession, - task: URLSessionTask, - willPerformHTTPRedirection response: HTTPURLResponse, - newRequest request: URLRequest) {} - public func urlSession(_ session: URLSession, - task: URLSessionTask, - didFinishCollecting metrics: URLSessionTaskMetrics) {} - public func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {} - public func urlSession(_ session: URLSession, taskIsWaitingForConnectivity task: URLSessionTask) {} - public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse) {} - public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {} - public func urlSession(_ session: URLSession, - dataTask: URLSessionDataTask, - willCacheResponse proposedResponse: CachedURLResponse) {} - public func urlSession(_ session: URLSession, - downloadTask: URLSessionDownloadTask, - didResumeAtOffset fileOffset: Int64, - expectedTotalBytes: Int64) {} - public func urlSession(_ session: URLSession, - downloadTask: URLSessionDownloadTask, - didWriteData bytesWritten: Int64, - totalBytesWritten: Int64, - totalBytesExpectedToWrite: Int64) {} - public func urlSession(_ session: URLSession, - downloadTask: URLSessionDownloadTask, - didFinishDownloadingTo location: URL) {} - public func request(_ request: Request, didCreateInitialURLRequest urlRequest: URLRequest) {} - public func request(_ request: Request, didFailToCreateURLRequestWithError error: AFError) {} - public func request(_ request: Request, - didAdaptInitialRequest initialRequest: URLRequest, - to adaptedRequest: URLRequest) {} - public func request(_ request: Request, - didFailToAdaptURLRequest initialRequest: URLRequest, - withError error: AFError) {} - public func request(_ request: Request, didCreateURLRequest urlRequest: URLRequest) {} - public func request(_ request: Request, didCreateTask task: URLSessionTask) {} - public func request(_ request: Request, didGatherMetrics metrics: URLSessionTaskMetrics) {} - public func request(_ request: Request, didFailTask task: URLSessionTask, earlyWithError error: AFError) {} - public func request(_ request: Request, didCompleteTask task: URLSessionTask, with error: AFError?) {} - public func requestIsRetrying(_ request: Request) {} - public func requestDidFinish(_ request: Request) {} - public func requestDidResume(_ request: Request) {} - public func request(_ request: Request, didResumeTask task: URLSessionTask) {} - public func requestDidSuspend(_ request: Request) {} - public func request(_ request: Request, didSuspendTask task: URLSessionTask) {} - public func requestDidCancel(_ request: Request) {} - public func request(_ request: Request, didCancelTask task: URLSessionTask) {} - public func request(_ request: DataRequest, - didValidateRequest urlRequest: URLRequest?, - response: HTTPURLResponse, - data: Data?, - withResult result: Request.ValidationResult) {} - public func request(_ request: DataRequest, didParseResponse response: DataResponse) {} - public func request(_ request: DataRequest, didParseResponse response: DataResponse) {} - public func request(_ request: DataStreamRequest, - didValidateRequest urlRequest: URLRequest?, - response: HTTPURLResponse, - withResult result: Request.ValidationResult) {} - public func request(_ request: DataStreamRequest, didParseStream result: Result) {} - public func request(_ request: UploadRequest, didCreateUploadable uploadable: UploadRequest.Uploadable) {} - public func request(_ request: UploadRequest, didFailToCreateUploadableWithError error: AFError) {} - public func request(_ request: UploadRequest, didProvideInputStream stream: InputStream) {} - public func request(_ request: DownloadRequest, didFinishDownloadingUsing task: URLSessionTask, with result: Result) {} - public func request(_ request: DownloadRequest, didCreateDestinationURL url: URL) {} - public func request(_ request: DownloadRequest, - didValidateRequest urlRequest: URLRequest?, - response: HTTPURLResponse, - fileURL: URL?, - withResult result: Request.ValidationResult) {} - public func request(_ request: DownloadRequest, didParseResponse response: DownloadResponse) {} - public func request(_ request: DownloadRequest, didParseResponse response: DownloadResponse) {} -} - -/// An `EventMonitor` which can contain multiple `EventMonitor`s and calls their methods on their queues. -public final class CompositeEventMonitor: EventMonitor { - public let queue = DispatchQueue(label: "org.alamofire.compositeEventMonitor", qos: .utility) - - let monitors: [EventMonitor] - - init(monitors: [EventMonitor]) { - self.monitors = monitors - } - - func performEvent(_ event: @escaping (EventMonitor) -> Void) { - queue.async { - for monitor in self.monitors { - monitor.queue.async { event(monitor) } - } - } - } - - public func urlSession(_ session: URLSession, didBecomeInvalidWithError error: Error?) { - performEvent { $0.urlSession(session, didBecomeInvalidWithError: error) } - } - - public func urlSession(_ session: URLSession, - task: URLSessionTask, - didReceive challenge: URLAuthenticationChallenge) { - performEvent { $0.urlSession(session, task: task, didReceive: challenge) } - } - - public func urlSession(_ session: URLSession, - task: URLSessionTask, - didSendBodyData bytesSent: Int64, - totalBytesSent: Int64, - totalBytesExpectedToSend: Int64) { - performEvent { - $0.urlSession(session, - task: task, - didSendBodyData: bytesSent, - totalBytesSent: totalBytesSent, - totalBytesExpectedToSend: totalBytesExpectedToSend) - } - } - - public func urlSession(_ session: URLSession, taskNeedsNewBodyStream task: URLSessionTask) { - performEvent { - $0.urlSession(session, taskNeedsNewBodyStream: task) - } - } - - public func urlSession(_ session: URLSession, - task: URLSessionTask, - willPerformHTTPRedirection response: HTTPURLResponse, - newRequest request: URLRequest) { - performEvent { - $0.urlSession(session, - task: task, - willPerformHTTPRedirection: response, - newRequest: request) - } - } - - public func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) { - performEvent { $0.urlSession(session, task: task, didFinishCollecting: metrics) } - } - - public func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { - performEvent { $0.urlSession(session, task: task, didCompleteWithError: error) } - } - - @available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) - public func urlSession(_ session: URLSession, taskIsWaitingForConnectivity task: URLSessionTask) { - performEvent { $0.urlSession(session, taskIsWaitingForConnectivity: task) } - } - - public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse) { - performEvent { $0.urlSession(session, dataTask: dataTask, didReceive: response) } - } - - public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) { - performEvent { $0.urlSession(session, dataTask: dataTask, didReceive: data) } - } - - public func urlSession(_ session: URLSession, - dataTask: URLSessionDataTask, - willCacheResponse proposedResponse: CachedURLResponse) { - performEvent { $0.urlSession(session, dataTask: dataTask, willCacheResponse: proposedResponse) } - } - - public func urlSession(_ session: URLSession, - downloadTask: URLSessionDownloadTask, - didResumeAtOffset fileOffset: Int64, - expectedTotalBytes: Int64) { - performEvent { - $0.urlSession(session, - downloadTask: downloadTask, - didResumeAtOffset: fileOffset, - expectedTotalBytes: expectedTotalBytes) - } - } - - public func urlSession(_ session: URLSession, - downloadTask: URLSessionDownloadTask, - didWriteData bytesWritten: Int64, - totalBytesWritten: Int64, - totalBytesExpectedToWrite: Int64) { - performEvent { - $0.urlSession(session, - downloadTask: downloadTask, - didWriteData: bytesWritten, - totalBytesWritten: totalBytesWritten, - totalBytesExpectedToWrite: totalBytesExpectedToWrite) - } - } - - public func urlSession(_ session: URLSession, - downloadTask: URLSessionDownloadTask, - didFinishDownloadingTo location: URL) { - performEvent { $0.urlSession(session, downloadTask: downloadTask, didFinishDownloadingTo: location) } - } - - public func request(_ request: Request, didCreateInitialURLRequest urlRequest: URLRequest) { - performEvent { $0.request(request, didCreateInitialURLRequest: urlRequest) } - } - - public func request(_ request: Request, didFailToCreateURLRequestWithError error: AFError) { - performEvent { $0.request(request, didFailToCreateURLRequestWithError: error) } - } - - public func request(_ request: Request, didAdaptInitialRequest initialRequest: URLRequest, to adaptedRequest: URLRequest) { - performEvent { $0.request(request, didAdaptInitialRequest: initialRequest, to: adaptedRequest) } - } - - public func request(_ request: Request, didFailToAdaptURLRequest initialRequest: URLRequest, withError error: AFError) { - performEvent { $0.request(request, didFailToAdaptURLRequest: initialRequest, withError: error) } - } - - public func request(_ request: Request, didCreateURLRequest urlRequest: URLRequest) { - performEvent { $0.request(request, didCreateURLRequest: urlRequest) } - } - - public func request(_ request: Request, didCreateTask task: URLSessionTask) { - performEvent { $0.request(request, didCreateTask: task) } - } - - public func request(_ request: Request, didGatherMetrics metrics: URLSessionTaskMetrics) { - performEvent { $0.request(request, didGatherMetrics: metrics) } - } - - public func request(_ request: Request, didFailTask task: URLSessionTask, earlyWithError error: AFError) { - performEvent { $0.request(request, didFailTask: task, earlyWithError: error) } - } - - public func request(_ request: Request, didCompleteTask task: URLSessionTask, with error: AFError?) { - performEvent { $0.request(request, didCompleteTask: task, with: error) } - } - - public func requestIsRetrying(_ request: Request) { - performEvent { $0.requestIsRetrying(request) } - } - - public func requestDidFinish(_ request: Request) { - performEvent { $0.requestDidFinish(request) } - } - - public func requestDidResume(_ request: Request) { - performEvent { $0.requestDidResume(request) } - } - - public func request(_ request: Request, didResumeTask task: URLSessionTask) { - performEvent { $0.request(request, didResumeTask: task) } - } - - public func requestDidSuspend(_ request: Request) { - performEvent { $0.requestDidSuspend(request) } - } - - public func request(_ request: Request, didSuspendTask task: URLSessionTask) { - performEvent { $0.request(request, didSuspendTask: task) } - } - - public func requestDidCancel(_ request: Request) { - performEvent { $0.requestDidCancel(request) } - } - - public func request(_ request: Request, didCancelTask task: URLSessionTask) { - performEvent { $0.request(request, didCancelTask: task) } - } - - public func request(_ request: DataRequest, - didValidateRequest urlRequest: URLRequest?, - response: HTTPURLResponse, - data: Data?, - withResult result: Request.ValidationResult) { - performEvent { $0.request(request, - didValidateRequest: urlRequest, - response: response, - data: data, - withResult: result) - } - } - - public func request(_ request: DataRequest, didParseResponse response: DataResponse) { - performEvent { $0.request(request, didParseResponse: response) } - } - - public func request(_ request: DataRequest, didParseResponse response: DataResponse) { - performEvent { $0.request(request, didParseResponse: response) } - } - - public func request(_ request: DataStreamRequest, - didValidateRequest urlRequest: URLRequest?, - response: HTTPURLResponse, - withResult result: Request.ValidationResult) { - performEvent { $0.request(request, - didValidateRequest: urlRequest, - response: response, - withResult: result) - } - } - - public func request(_ request: DataStreamRequest, didParseStream result: Result) { - performEvent { $0.request(request, didParseStream: result) } - } - - public func request(_ request: UploadRequest, didCreateUploadable uploadable: UploadRequest.Uploadable) { - performEvent { $0.request(request, didCreateUploadable: uploadable) } - } - - public func request(_ request: UploadRequest, didFailToCreateUploadableWithError error: AFError) { - performEvent { $0.request(request, didFailToCreateUploadableWithError: error) } - } - - public func request(_ request: UploadRequest, didProvideInputStream stream: InputStream) { - performEvent { $0.request(request, didProvideInputStream: stream) } - } - - public func request(_ request: DownloadRequest, didFinishDownloadingUsing task: URLSessionTask, with result: Result) { - performEvent { $0.request(request, didFinishDownloadingUsing: task, with: result) } - } - - public func request(_ request: DownloadRequest, didCreateDestinationURL url: URL) { - performEvent { $0.request(request, didCreateDestinationURL: url) } - } - - public func request(_ request: DownloadRequest, - didValidateRequest urlRequest: URLRequest?, - response: HTTPURLResponse, - fileURL: URL?, - withResult result: Request.ValidationResult) { - performEvent { $0.request(request, - didValidateRequest: urlRequest, - response: response, - fileURL: fileURL, - withResult: result) } - } - - public func request(_ request: DownloadRequest, didParseResponse response: DownloadResponse) { - performEvent { $0.request(request, didParseResponse: response) } - } - - public func request(_ request: DownloadRequest, didParseResponse response: DownloadResponse) { - performEvent { $0.request(request, didParseResponse: response) } - } -} - -/// `EventMonitor` that allows optional closures to be set to receive events. -open class ClosureEventMonitor: EventMonitor { - /// Closure called on the `urlSession(_:didBecomeInvalidWithError:)` event. - open var sessionDidBecomeInvalidWithError: ((URLSession, Error?) -> Void)? - - /// Closure called on the `urlSession(_:task:didReceive:completionHandler:)`. - open var taskDidReceiveChallenge: ((URLSession, URLSessionTask, URLAuthenticationChallenge) -> Void)? - - /// Closure that receives `urlSession(_:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:)` event. - open var taskDidSendBodyData: ((URLSession, URLSessionTask, Int64, Int64, Int64) -> Void)? - - /// Closure called on the `urlSession(_:task:needNewBodyStream:)` event. - open var taskNeedNewBodyStream: ((URLSession, URLSessionTask) -> Void)? - - /// Closure called on the `urlSession(_:task:willPerformHTTPRedirection:newRequest:completionHandler:)` event. - open var taskWillPerformHTTPRedirection: ((URLSession, URLSessionTask, HTTPURLResponse, URLRequest) -> Void)? - - /// Closure called on the `urlSession(_:task:didFinishCollecting:)` event. - open var taskDidFinishCollectingMetrics: ((URLSession, URLSessionTask, URLSessionTaskMetrics) -> Void)? - - /// Closure called on the `urlSession(_:task:didCompleteWithError:)` event. - open var taskDidComplete: ((URLSession, URLSessionTask, Error?) -> Void)? - - /// Closure called on the `urlSession(_:taskIsWaitingForConnectivity:)` event. - open var taskIsWaitingForConnectivity: ((URLSession, URLSessionTask) -> Void)? - - /// Closure called on the `urlSession(_:dataTask:didReceive:completionHandler:)` event. - open var dataTaskDidReceiveResponse: ((URLSession, URLSessionDataTask, URLResponse) -> Void)? - - /// Closure that receives the `urlSession(_:dataTask:didReceive:)` event. - open var dataTaskDidReceiveData: ((URLSession, URLSessionDataTask, Data) -> Void)? - - /// Closure called on the `urlSession(_:dataTask:willCacheResponse:completionHandler:)` event. - open var dataTaskWillCacheResponse: ((URLSession, URLSessionDataTask, CachedURLResponse) -> Void)? - - /// Closure called on the `urlSession(_:downloadTask:didFinishDownloadingTo:)` event. - open var downloadTaskDidFinishDownloadingToURL: ((URLSession, URLSessionDownloadTask, URL) -> Void)? - - /// Closure called on the `urlSession(_:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:)` - /// event. - open var downloadTaskDidWriteData: ((URLSession, URLSessionDownloadTask, Int64, Int64, Int64) -> Void)? - - /// Closure called on the `urlSession(_:downloadTask:didResumeAtOffset:expectedTotalBytes:)` event. - open var downloadTaskDidResumeAtOffset: ((URLSession, URLSessionDownloadTask, Int64, Int64) -> Void)? - - // MARK: - Request Events - - /// Closure called on the `request(_:didCreateInitialURLRequest:)` event. - open var requestDidCreateInitialURLRequest: ((Request, URLRequest) -> Void)? - - /// Closure called on the `request(_:didFailToCreateURLRequestWithError:)` event. - open var requestDidFailToCreateURLRequestWithError: ((Request, AFError) -> Void)? - - /// Closure called on the `request(_:didAdaptInitialRequest:to:)` event. - open var requestDidAdaptInitialRequestToAdaptedRequest: ((Request, URLRequest, URLRequest) -> Void)? - - /// Closure called on the `request(_:didFailToAdaptURLRequest:withError:)` event. - open var requestDidFailToAdaptURLRequestWithError: ((Request, URLRequest, AFError) -> Void)? - - /// Closure called on the `request(_:didCreateURLRequest:)` event. - open var requestDidCreateURLRequest: ((Request, URLRequest) -> Void)? - - /// Closure called on the `request(_:didCreateTask:)` event. - open var requestDidCreateTask: ((Request, URLSessionTask) -> Void)? - - /// Closure called on the `request(_:didGatherMetrics:)` event. - open var requestDidGatherMetrics: ((Request, URLSessionTaskMetrics) -> Void)? - - /// Closure called on the `request(_:didFailTask:earlyWithError:)` event. - open var requestDidFailTaskEarlyWithError: ((Request, URLSessionTask, AFError) -> Void)? - - /// Closure called on the `request(_:didCompleteTask:with:)` event. - open var requestDidCompleteTaskWithError: ((Request, URLSessionTask, AFError?) -> Void)? - - /// Closure called on the `requestIsRetrying(_:)` event. - open var requestIsRetrying: ((Request) -> Void)? - - /// Closure called on the `requestDidFinish(_:)` event. - open var requestDidFinish: ((Request) -> Void)? - - /// Closure called on the `requestDidResume(_:)` event. - open var requestDidResume: ((Request) -> Void)? - - /// Closure called on the `request(_:didResumeTask:)` event. - open var requestDidResumeTask: ((Request, URLSessionTask) -> Void)? - - /// Closure called on the `requestDidSuspend(_:)` event. - open var requestDidSuspend: ((Request) -> Void)? - - /// Closure called on the `request(_:didSuspendTask:)` event. - open var requestDidSuspendTask: ((Request, URLSessionTask) -> Void)? - - /// Closure called on the `requestDidCancel(_:)` event. - open var requestDidCancel: ((Request) -> Void)? - - /// Closure called on the `request(_:didCancelTask:)` event. - open var requestDidCancelTask: ((Request, URLSessionTask) -> Void)? - - /// Closure called on the `request(_:didValidateRequest:response:data:withResult:)` event. - open var requestDidValidateRequestResponseDataWithResult: ((DataRequest, URLRequest?, HTTPURLResponse, Data?, Request.ValidationResult) -> Void)? - - /// Closure called on the `request(_:didParseResponse:)` event. - open var requestDidParseResponse: ((DataRequest, DataResponse) -> Void)? - - /// Closure called on the `request(_:didValidateRequest:response:withResult:)` event. - open var requestDidValidateRequestResponseWithResult: ((DataStreamRequest, URLRequest?, HTTPURLResponse, Request.ValidationResult) -> Void)? - - /// Closure called on the `request(_:didCreateUploadable:)` event. - open var requestDidCreateUploadable: ((UploadRequest, UploadRequest.Uploadable) -> Void)? - - /// Closure called on the `request(_:didFailToCreateUploadableWithError:)` event. - open var requestDidFailToCreateUploadableWithError: ((UploadRequest, AFError) -> Void)? - - /// Closure called on the `request(_:didProvideInputStream:)` event. - open var requestDidProvideInputStream: ((UploadRequest, InputStream) -> Void)? - - /// Closure called on the `request(_:didFinishDownloadingUsing:with:)` event. - open var requestDidFinishDownloadingUsingTaskWithResult: ((DownloadRequest, URLSessionTask, Result) -> Void)? - - /// Closure called on the `request(_:didCreateDestinationURL:)` event. - open var requestDidCreateDestinationURL: ((DownloadRequest, URL) -> Void)? - - /// Closure called on the `request(_:didValidateRequest:response:temporaryURL:destinationURL:withResult:)` event. - open var requestDidValidateRequestResponseFileURLWithResult: ((DownloadRequest, URLRequest?, HTTPURLResponse, URL?, Request.ValidationResult) -> Void)? - - /// Closure called on the `request(_:didParseResponse:)` event. - open var requestDidParseDownloadResponse: ((DownloadRequest, DownloadResponse) -> Void)? - - public let queue: DispatchQueue - - /// Creates an instance using the provided queue. - /// - /// - Parameter queue: `DispatchQueue` on which events will fired. `.main` by default. - public init(queue: DispatchQueue = .main) { - self.queue = queue - } - - open func urlSession(_ session: URLSession, didBecomeInvalidWithError error: Error?) { - sessionDidBecomeInvalidWithError?(session, error) - } - - open func urlSession(_ session: URLSession, task: URLSessionTask, didReceive challenge: URLAuthenticationChallenge) { - taskDidReceiveChallenge?(session, task, challenge) - } - - open func urlSession(_ session: URLSession, - task: URLSessionTask, - didSendBodyData bytesSent: Int64, - totalBytesSent: Int64, - totalBytesExpectedToSend: Int64) { - taskDidSendBodyData?(session, task, bytesSent, totalBytesSent, totalBytesExpectedToSend) - } - - open func urlSession(_ session: URLSession, taskNeedsNewBodyStream task: URLSessionTask) { - taskNeedNewBodyStream?(session, task) - } - - open func urlSession(_ session: URLSession, - task: URLSessionTask, - willPerformHTTPRedirection response: HTTPURLResponse, - newRequest request: URLRequest) { - taskWillPerformHTTPRedirection?(session, task, response, request) - } - - open func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) { - taskDidFinishCollectingMetrics?(session, task, metrics) - } - - open func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { - taskDidComplete?(session, task, error) - } - - @available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) - open func urlSession(_ session: URLSession, taskIsWaitingForConnectivity task: URLSessionTask) { - taskIsWaitingForConnectivity?(session, task) - } - - open func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse) { - dataTaskDidReceiveResponse?(session, dataTask, response) - } - - open func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) { - dataTaskDidReceiveData?(session, dataTask, data) - } - - open func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, willCacheResponse proposedResponse: CachedURLResponse) { - dataTaskWillCacheResponse?(session, dataTask, proposedResponse) - } - - open func urlSession(_ session: URLSession, - downloadTask: URLSessionDownloadTask, - didResumeAtOffset fileOffset: Int64, - expectedTotalBytes: Int64) { - downloadTaskDidResumeAtOffset?(session, downloadTask, fileOffset, expectedTotalBytes) - } - - open func urlSession(_ session: URLSession, - downloadTask: URLSessionDownloadTask, - didWriteData bytesWritten: Int64, - totalBytesWritten: Int64, - totalBytesExpectedToWrite: Int64) { - downloadTaskDidWriteData?(session, downloadTask, bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) - } - - open func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) { - downloadTaskDidFinishDownloadingToURL?(session, downloadTask, location) - } - - // MARK: Request Events - - open func request(_ request: Request, didCreateInitialURLRequest urlRequest: URLRequest) { - requestDidCreateInitialURLRequest?(request, urlRequest) - } - - open func request(_ request: Request, didFailToCreateURLRequestWithError error: AFError) { - requestDidFailToCreateURLRequestWithError?(request, error) - } - - open func request(_ request: Request, didAdaptInitialRequest initialRequest: URLRequest, to adaptedRequest: URLRequest) { - requestDidAdaptInitialRequestToAdaptedRequest?(request, initialRequest, adaptedRequest) - } - - open func request(_ request: Request, didFailToAdaptURLRequest initialRequest: URLRequest, withError error: AFError) { - requestDidFailToAdaptURLRequestWithError?(request, initialRequest, error) - } - - open func request(_ request: Request, didCreateURLRequest urlRequest: URLRequest) { - requestDidCreateURLRequest?(request, urlRequest) - } - - open func request(_ request: Request, didCreateTask task: URLSessionTask) { - requestDidCreateTask?(request, task) - } - - open func request(_ request: Request, didGatherMetrics metrics: URLSessionTaskMetrics) { - requestDidGatherMetrics?(request, metrics) - } - - open func request(_ request: Request, didFailTask task: URLSessionTask, earlyWithError error: AFError) { - requestDidFailTaskEarlyWithError?(request, task, error) - } - - open func request(_ request: Request, didCompleteTask task: URLSessionTask, with error: AFError?) { - requestDidCompleteTaskWithError?(request, task, error) - } - - open func requestIsRetrying(_ request: Request) { - requestIsRetrying?(request) - } - - open func requestDidFinish(_ request: Request) { - requestDidFinish?(request) - } - - open func requestDidResume(_ request: Request) { - requestDidResume?(request) - } - - public func request(_ request: Request, didResumeTask task: URLSessionTask) { - requestDidResumeTask?(request, task) - } - - open func requestDidSuspend(_ request: Request) { - requestDidSuspend?(request) - } - - public func request(_ request: Request, didSuspendTask task: URLSessionTask) { - requestDidSuspendTask?(request, task) - } - - open func requestDidCancel(_ request: Request) { - requestDidCancel?(request) - } - - public func request(_ request: Request, didCancelTask task: URLSessionTask) { - requestDidCancelTask?(request, task) - } - - open func request(_ request: DataRequest, - didValidateRequest urlRequest: URLRequest?, - response: HTTPURLResponse, - data: Data?, - withResult result: Request.ValidationResult) { - requestDidValidateRequestResponseDataWithResult?(request, urlRequest, response, data, result) - } - - open func request(_ request: DataRequest, didParseResponse response: DataResponse) { - requestDidParseResponse?(request, response) - } - - public func request(_ request: DataStreamRequest, didValidateRequest urlRequest: URLRequest?, response: HTTPURLResponse, withResult result: Request.ValidationResult) { - requestDidValidateRequestResponseWithResult?(request, urlRequest, response, result) - } - - open func request(_ request: UploadRequest, didCreateUploadable uploadable: UploadRequest.Uploadable) { - requestDidCreateUploadable?(request, uploadable) - } - - open func request(_ request: UploadRequest, didFailToCreateUploadableWithError error: AFError) { - requestDidFailToCreateUploadableWithError?(request, error) - } - - open func request(_ request: UploadRequest, didProvideInputStream stream: InputStream) { - requestDidProvideInputStream?(request, stream) - } - - open func request(_ request: DownloadRequest, didFinishDownloadingUsing task: URLSessionTask, with result: Result) { - requestDidFinishDownloadingUsingTaskWithResult?(request, task, result) - } - - open func request(_ request: DownloadRequest, didCreateDestinationURL url: URL) { - requestDidCreateDestinationURL?(request, url) - } - - open func request(_ request: DownloadRequest, - didValidateRequest urlRequest: URLRequest?, - response: HTTPURLResponse, - fileURL: URL?, - withResult result: Request.ValidationResult) { - requestDidValidateRequestResponseFileURLWithResult?(request, - urlRequest, - response, - fileURL, - result) - } - - open func request(_ request: DownloadRequest, didParseResponse response: DownloadResponse) { - requestDidParseDownloadResponse?(request, response) - } -} diff --git a/Pods/Alamofire/Source/HTTPHeaders.swift b/Pods/Alamofire/Source/HTTPHeaders.swift deleted file mode 100644 index 08d4799..0000000 --- a/Pods/Alamofire/Source/HTTPHeaders.swift +++ /dev/null @@ -1,452 +0,0 @@ -// -// HTTPHeaders.swift -// -// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -/// An order-preserving and case-insensitive representation of HTTP headers. -public struct HTTPHeaders { - private var headers: [HTTPHeader] = [] - - /// Creates an empty instance. - public init() {} - - /// Creates an instance from an array of `HTTPHeader`s. Duplicate case-insensitive names are collapsed into the last - /// name and value encountered. - public init(_ headers: [HTTPHeader]) { - headers.forEach { update($0) } - } - - /// Creates an instance from a `[String: String]`. Duplicate case-insensitive names are collapsed into the last name - /// and value encountered. - public init(_ dictionary: [String: String]) { - dictionary.forEach { update(HTTPHeader(name: $0.key, value: $0.value)) } - } - - /// Case-insensitively updates or appends an `HTTPHeader` into the instance using the provided `name` and `value`. - /// - /// - Parameters: - /// - name: The `HTTPHeader` name. - /// - value: The `HTTPHeader value. - public mutating func add(name: String, value: String) { - update(HTTPHeader(name: name, value: value)) - } - - /// Case-insensitively updates or appends the provided `HTTPHeader` into the instance. - /// - /// - Parameter header: The `HTTPHeader` to update or append. - public mutating func add(_ header: HTTPHeader) { - update(header) - } - - /// Case-insensitively updates or appends an `HTTPHeader` into the instance using the provided `name` and `value`. - /// - /// - Parameters: - /// - name: The `HTTPHeader` name. - /// - value: The `HTTPHeader value. - public mutating func update(name: String, value: String) { - update(HTTPHeader(name: name, value: value)) - } - - /// Case-insensitively updates or appends the provided `HTTPHeader` into the instance. - /// - /// - Parameter header: The `HTTPHeader` to update or append. - public mutating func update(_ header: HTTPHeader) { - guard let index = headers.index(of: header.name) else { - headers.append(header) - return - } - - headers.replaceSubrange(index...index, with: [header]) - } - - /// Case-insensitively removes an `HTTPHeader`, if it exists, from the instance. - /// - /// - Parameter name: The name of the `HTTPHeader` to remove. - public mutating func remove(name: String) { - guard let index = headers.index(of: name) else { return } - - headers.remove(at: index) - } - - /// Sort the current instance by header name, case insensitively. - public mutating func sort() { - headers.sort { $0.name.lowercased() < $1.name.lowercased() } - } - - /// Returns an instance sorted by header name. - /// - /// - Returns: A copy of the current instance sorted by name. - public func sorted() -> HTTPHeaders { - var headers = self - headers.sort() - - return headers - } - - /// Case-insensitively find a header's value by name. - /// - /// - Parameter name: The name of the header to search for, case-insensitively. - /// - /// - Returns: The value of header, if it exists. - public func value(for name: String) -> String? { - guard let index = headers.index(of: name) else { return nil } - - return headers[index].value - } - - /// Case-insensitively access the header with the given name. - /// - /// - Parameter name: The name of the header. - public subscript(_ name: String) -> String? { - get { value(for: name) } - set { - if let value = newValue { - update(name: name, value: value) - } else { - remove(name: name) - } - } - } - - /// The dictionary representation of all headers. - /// - /// This representation does not preserve the current order of the instance. - public var dictionary: [String: String] { - let namesAndValues = headers.map { ($0.name, $0.value) } - - return Dictionary(namesAndValues, uniquingKeysWith: { _, last in last }) - } -} - -extension HTTPHeaders: ExpressibleByDictionaryLiteral { - public init(dictionaryLiteral elements: (String, String)...) { - elements.forEach { update(name: $0.0, value: $0.1) } - } -} - -extension HTTPHeaders: ExpressibleByArrayLiteral { - public init(arrayLiteral elements: HTTPHeader...) { - self.init(elements) - } -} - -extension HTTPHeaders: Sequence { - public func makeIterator() -> IndexingIterator<[HTTPHeader]> { - headers.makeIterator() - } -} - -extension HTTPHeaders: Collection { - public var startIndex: Int { - headers.startIndex - } - - public var endIndex: Int { - headers.endIndex - } - - public subscript(position: Int) -> HTTPHeader { - headers[position] - } - - public func index(after i: Int) -> Int { - headers.index(after: i) - } -} - -extension HTTPHeaders: CustomStringConvertible { - public var description: String { - headers.map(\.description) - .joined(separator: "\n") - } -} - -// MARK: - HTTPHeader - -/// A representation of a single HTTP header's name / value pair. -public struct HTTPHeader: Hashable { - /// Name of the header. - public let name: String - - /// Value of the header. - public let value: String - - /// Creates an instance from the given `name` and `value`. - /// - /// - Parameters: - /// - name: The name of the header. - /// - value: The value of the header. - public init(name: String, value: String) { - self.name = name - self.value = value - } -} - -extension HTTPHeader: CustomStringConvertible { - public var description: String { - "\(name): \(value)" - } -} - -extension HTTPHeader { - /// Returns an `Accept` header. - /// - /// - Parameter value: The `Accept` value. - /// - Returns: The header. - public static func accept(_ value: String) -> HTTPHeader { - HTTPHeader(name: "Accept", value: value) - } - - /// Returns an `Accept-Charset` header. - /// - /// - Parameter value: The `Accept-Charset` value. - /// - Returns: The header. - public static func acceptCharset(_ value: String) -> HTTPHeader { - HTTPHeader(name: "Accept-Charset", value: value) - } - - /// Returns an `Accept-Language` header. - /// - /// Alamofire offers a default Accept-Language header that accumulates and encodes the system's preferred languages. - /// Use `HTTPHeader.defaultAcceptLanguage`. - /// - /// - Parameter value: The `Accept-Language` value. - /// - /// - Returns: The header. - public static func acceptLanguage(_ value: String) -> HTTPHeader { - HTTPHeader(name: "Accept-Language", value: value) - } - - /// Returns an `Accept-Encoding` header. - /// - /// Alamofire offers a default accept encoding value that provides the most common values. Use - /// `HTTPHeader.defaultAcceptEncoding`. - /// - /// - Parameter value: The `Accept-Encoding` value. - /// - /// - Returns: The header - public static func acceptEncoding(_ value: String) -> HTTPHeader { - HTTPHeader(name: "Accept-Encoding", value: value) - } - - /// Returns a `Basic` `Authorization` header using the `username` and `password` provided. - /// - /// - Parameters: - /// - username: The username of the header. - /// - password: The password of the header. - /// - /// - Returns: The header. - public static func authorization(username: String, password: String) -> HTTPHeader { - let credential = Data("\(username):\(password)".utf8).base64EncodedString() - - return authorization("Basic \(credential)") - } - - /// Returns a `Bearer` `Authorization` header using the `bearerToken` provided - /// - /// - Parameter bearerToken: The bearer token. - /// - /// - Returns: The header. - public static func authorization(bearerToken: String) -> HTTPHeader { - authorization("Bearer \(bearerToken)") - } - - /// Returns an `Authorization` header. - /// - /// Alamofire provides built-in methods to produce `Authorization` headers. For a Basic `Authorization` header use - /// `HTTPHeader.authorization(username:password:)`. For a Bearer `Authorization` header, use - /// `HTTPHeader.authorization(bearerToken:)`. - /// - /// - Parameter value: The `Authorization` value. - /// - /// - Returns: The header. - public static func authorization(_ value: String) -> HTTPHeader { - HTTPHeader(name: "Authorization", value: value) - } - - /// Returns a `Content-Disposition` header. - /// - /// - Parameter value: The `Content-Disposition` value. - /// - /// - Returns: The header. - public static func contentDisposition(_ value: String) -> HTTPHeader { - HTTPHeader(name: "Content-Disposition", value: value) - } - - /// Returns a `Content-Encoding` header. - /// - /// - Parameter value: The `Content-Encoding`. - /// - /// - Returns: The header. - public static func contentEncoding(_ value: String) -> HTTPHeader { - HTTPHeader(name: "Content-Encoding", value: value) - } - - /// Returns a `Content-Type` header. - /// - /// All Alamofire `ParameterEncoding`s and `ParameterEncoder`s set the `Content-Type` of the request, so it may not - /// be necessary to manually set this value. - /// - /// - Parameter value: The `Content-Type` value. - /// - /// - Returns: The header. - public static func contentType(_ value: String) -> HTTPHeader { - HTTPHeader(name: "Content-Type", value: value) - } - - /// Returns a `User-Agent` header. - /// - /// - Parameter value: The `User-Agent` value. - /// - /// - Returns: The header. - public static func userAgent(_ value: String) -> HTTPHeader { - HTTPHeader(name: "User-Agent", value: value) - } -} - -extension Array where Element == HTTPHeader { - /// Case-insensitively finds the index of an `HTTPHeader` with the provided name, if it exists. - func index(of name: String) -> Int? { - let lowercasedName = name.lowercased() - return firstIndex { $0.name.lowercased() == lowercasedName } - } -} - -// MARK: - Defaults - -extension HTTPHeaders { - /// The default set of `HTTPHeaders` used by Alamofire. Includes `Accept-Encoding`, `Accept-Language`, and - /// `User-Agent`. - public static let `default`: HTTPHeaders = [.defaultAcceptEncoding, - .defaultAcceptLanguage, - .defaultUserAgent] -} - -extension HTTPHeader { - /// Returns Alamofire's default `Accept-Encoding` header, appropriate for the encodings supported by particular OS - /// versions. - /// - /// See the [Accept-Encoding HTTP header documentation](https://tools.ietf.org/html/rfc7230#section-4.2.3) . - public static let defaultAcceptEncoding: HTTPHeader = { - let encodings: [String] - if #available(iOS 11.0, macOS 10.13, tvOS 11.0, watchOS 4.0, *) { - encodings = ["br", "gzip", "deflate"] - } else { - encodings = ["gzip", "deflate"] - } - - return .acceptEncoding(encodings.qualityEncoded()) - }() - - /// Returns Alamofire's default `Accept-Language` header, generated by querying `Locale` for the user's - /// `preferredLanguages`. - /// - /// See the [Accept-Language HTTP header documentation](https://tools.ietf.org/html/rfc7231#section-5.3.5). - public static let defaultAcceptLanguage: HTTPHeader = .acceptLanguage(Locale.preferredLanguages.prefix(6).qualityEncoded()) - - /// Returns Alamofire's default `User-Agent` header. - /// - /// See the [User-Agent header documentation](https://tools.ietf.org/html/rfc7231#section-5.5.3). - /// - /// Example: `iOS Example/1.0 (org.alamofire.iOS-Example; build:1; iOS 13.0.0) Alamofire/5.0.0` - public static let defaultUserAgent: HTTPHeader = { - let info = Bundle.main.infoDictionary - let executable = (info?["CFBundleExecutable"] as? String) ?? - (ProcessInfo.processInfo.arguments.first?.split(separator: "/").last.map(String.init)) ?? - "Unknown" - let bundle = info?["CFBundleIdentifier"] as? String ?? "Unknown" - let appVersion = info?["CFBundleShortVersionString"] as? String ?? "Unknown" - let appBuild = info?["CFBundleVersion"] as? String ?? "Unknown" - - let osNameVersion: String = { - let version = ProcessInfo.processInfo.operatingSystemVersion - let versionString = "\(version.majorVersion).\(version.minorVersion).\(version.patchVersion)" - let osName: String = { - #if os(iOS) - #if targetEnvironment(macCatalyst) - return "macOS(Catalyst)" - #else - return "iOS" - #endif - #elseif os(watchOS) - return "watchOS" - #elseif os(tvOS) - return "tvOS" - #elseif os(macOS) - return "macOS" - #elseif os(Linux) - return "Linux" - #elseif os(Windows) - return "Windows" - #elseif os(Android) - return "Android" - #else - return "Unknown" - #endif - }() - - return "\(osName) \(versionString)" - }() - - let alamofireVersion = "Alamofire/\(version)" - - let userAgent = "\(executable)/\(appVersion) (\(bundle); build:\(appBuild); \(osNameVersion)) \(alamofireVersion)" - - return .userAgent(userAgent) - }() -} - -extension Collection where Element == String { - func qualityEncoded() -> String { - enumerated().map { index, encoding in - let quality = 1.0 - (Double(index) * 0.1) - return "\(encoding);q=\(quality)" - }.joined(separator: ", ") - } -} - -// MARK: - System Type Extensions - -extension URLRequest { - /// Returns `allHTTPHeaderFields` as `HTTPHeaders`. - public var headers: HTTPHeaders { - get { allHTTPHeaderFields.map(HTTPHeaders.init) ?? HTTPHeaders() } - set { allHTTPHeaderFields = newValue.dictionary } - } -} - -extension HTTPURLResponse { - /// Returns `allHeaderFields` as `HTTPHeaders`. - public var headers: HTTPHeaders { - (allHeaderFields as? [String: String]).map(HTTPHeaders.init) ?? HTTPHeaders() - } -} - -extension URLSessionConfiguration { - /// Returns `httpAdditionalHeaders` as `HTTPHeaders`. - public var headers: HTTPHeaders { - get { (httpAdditionalHeaders as? [String: String]).map(HTTPHeaders.init) ?? HTTPHeaders() } - set { httpAdditionalHeaders = newValue.dictionary } - } -} diff --git a/Pods/Alamofire/Source/HTTPMethod.swift b/Pods/Alamofire/Source/HTTPMethod.swift deleted file mode 100644 index 539d214..0000000 --- a/Pods/Alamofire/Source/HTTPMethod.swift +++ /dev/null @@ -1,56 +0,0 @@ -// -// HTTPMethod.swift -// -// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) -// -// 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. -// - -/// Type representing HTTP methods. Raw `String` value is stored and compared case-sensitively, so -/// `HTTPMethod.get != HTTPMethod(rawValue: "get")`. -/// -/// See https://tools.ietf.org/html/rfc7231#section-4.3 -public struct HTTPMethod: RawRepresentable, Equatable, Hashable { - /// `CONNECT` method. - public static let connect = HTTPMethod(rawValue: "CONNECT") - /// `DELETE` method. - public static let delete = HTTPMethod(rawValue: "DELETE") - /// `GET` method. - public static let get = HTTPMethod(rawValue: "GET") - /// `HEAD` method. - public static let head = HTTPMethod(rawValue: "HEAD") - /// `OPTIONS` method. - public static let options = HTTPMethod(rawValue: "OPTIONS") - /// `PATCH` method. - public static let patch = HTTPMethod(rawValue: "PATCH") - /// `POST` method. - public static let post = HTTPMethod(rawValue: "POST") - /// `PUT` method. - public static let put = HTTPMethod(rawValue: "PUT") - /// `QUERY` method. - public static let query = HTTPMethod(rawValue: "QUERY") - /// `TRACE` method. - public static let trace = HTTPMethod(rawValue: "TRACE") - - public let rawValue: String - - public init(rawValue: String) { - self.rawValue = rawValue - } -} diff --git a/Pods/Alamofire/Source/MultipartFormData.swift b/Pods/Alamofire/Source/MultipartFormData.swift deleted file mode 100644 index 3fb6e2b..0000000 --- a/Pods/Alamofire/Source/MultipartFormData.swift +++ /dev/null @@ -1,601 +0,0 @@ -// -// MultipartFormData.swift -// -// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) -// -// 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(MobileCoreServices) -import MobileCoreServices -#elseif canImport(CoreServices) -import CoreServices -#endif - -/// Constructs `multipart/form-data` for uploads within an HTTP or HTTPS body. There are currently two ways to encode -/// multipart form data. The first way is to encode the data directly in memory. This is very efficient, but can lead -/// to memory issues if the dataset is too large. The second way is designed for larger datasets and will write all the -/// data to a single file on disk with all the proper boundary segmentation. The second approach MUST be used for -/// larger datasets such as video content, otherwise your app may run out of memory when trying to encode the dataset. -/// -/// For more information on `multipart/form-data` in general, please refer to the RFC-2388 and RFC-2045 specs as well -/// and the w3 form documentation. -/// -/// - https://www.ietf.org/rfc/rfc2388.txt -/// - https://www.ietf.org/rfc/rfc2045.txt -/// - https://www.w3.org/TR/html401/interact/forms.html#h-17.13 -open class MultipartFormData { - // MARK: - Helper Types - - enum EncodingCharacters { - static let crlf = "\r\n" - } - - enum BoundaryGenerator { - enum BoundaryType { - case initial, encapsulated, final - } - - static func randomBoundary() -> String { - let first = UInt32.random(in: UInt32.min...UInt32.max) - let second = UInt32.random(in: UInt32.min...UInt32.max) - - return String(format: "alamofire.boundary.%08x%08x", first, second) - } - - static func boundaryData(forBoundaryType boundaryType: BoundaryType, boundary: String) -> Data { - let boundaryText: String - - switch boundaryType { - case .initial: - boundaryText = "--\(boundary)\(EncodingCharacters.crlf)" - case .encapsulated: - boundaryText = "\(EncodingCharacters.crlf)--\(boundary)\(EncodingCharacters.crlf)" - case .final: - boundaryText = "\(EncodingCharacters.crlf)--\(boundary)--\(EncodingCharacters.crlf)" - } - - return Data(boundaryText.utf8) - } - } - - class BodyPart { - let headers: HTTPHeaders - let bodyStream: InputStream - let bodyContentLength: UInt64 - var hasInitialBoundary = false - var hasFinalBoundary = false - - init(headers: HTTPHeaders, bodyStream: InputStream, bodyContentLength: UInt64) { - self.headers = headers - self.bodyStream = bodyStream - self.bodyContentLength = bodyContentLength - } - } - - // MARK: - Properties - - /// Default memory threshold used when encoding `MultipartFormData`, in bytes. - public static let encodingMemoryThreshold: UInt64 = 10_000_000 - - /// The `Content-Type` header value containing the boundary used to generate the `multipart/form-data`. - open lazy var contentType: String = "multipart/form-data; boundary=\(self.boundary)" - - /// The content length of all body parts used to generate the `multipart/form-data` not including the boundaries. - public var contentLength: UInt64 { bodyParts.reduce(0) { $0 + $1.bodyContentLength } } - - /// The boundary used to separate the body parts in the encoded form data. - public let boundary: String - - let fileManager: FileManager - - private var bodyParts: [BodyPart] - private var bodyPartError: AFError? - private let streamBufferSize: Int - - // MARK: - Lifecycle - - /// Creates an instance. - /// - /// - Parameters: - /// - fileManager: `FileManager` to use for file operations, if needed. - /// - boundary: Boundary `String` used to separate body parts. - public init(fileManager: FileManager = .default, boundary: String? = nil) { - self.fileManager = fileManager - self.boundary = boundary ?? BoundaryGenerator.randomBoundary() - bodyParts = [] - - // - // The optimal read/write buffer size in bytes for input and output streams is 1024 (1KB). For more - // information, please refer to the following article: - // - https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Streams/Articles/ReadingInputStreams.html - // - streamBufferSize = 1024 - } - - // MARK: - Body Parts - - /// Creates a body part from the data and appends it to the instance. - /// - /// The body part data will be encoded using the following format: - /// - /// - `Content-Disposition: form-data; name=#{name}; filename=#{filename}` (HTTP Header) - /// - `Content-Type: #{mimeType}` (HTTP Header) - /// - Encoded file data - /// - Multipart form boundary - /// - /// - Parameters: - /// - data: `Data` to encoding into the instance. - /// - name: Name to associate with the `Data` in the `Content-Disposition` HTTP header. - /// - fileName: Filename to associate with the `Data` in the `Content-Disposition` HTTP header. - /// - mimeType: MIME type to associate with the data in the `Content-Type` HTTP header. - public func append(_ data: Data, withName name: String, fileName: String? = nil, mimeType: String? = nil) { - let headers = contentHeaders(withName: name, fileName: fileName, mimeType: mimeType) - let stream = InputStream(data: data) - let length = UInt64(data.count) - - append(stream, withLength: length, headers: headers) - } - - /// Creates a body part from the file and appends it to the instance. - /// - /// The body part data will be encoded using the following format: - /// - /// - `Content-Disposition: form-data; name=#{name}; filename=#{generated filename}` (HTTP Header) - /// - `Content-Type: #{generated mimeType}` (HTTP Header) - /// - Encoded file data - /// - Multipart form boundary - /// - /// The filename in the `Content-Disposition` HTTP header is generated from the last path component of the - /// `fileURL`. The `Content-Type` HTTP header MIME type is generated by mapping the `fileURL` extension to the - /// system associated MIME type. - /// - /// - Parameters: - /// - fileURL: `URL` of the file whose content will be encoded into the instance. - /// - name: Name to associate with the file content in the `Content-Disposition` HTTP header. - public func append(_ fileURL: URL, withName name: String) { - let fileName = fileURL.lastPathComponent - let pathExtension = fileURL.pathExtension - - if !fileName.isEmpty && !pathExtension.isEmpty { - let mime = mimeType(forPathExtension: pathExtension) - append(fileURL, withName: name, fileName: fileName, mimeType: mime) - } else { - setBodyPartError(withReason: .bodyPartFilenameInvalid(in: fileURL)) - } - } - - /// Creates a body part from the file and appends it to the instance. - /// - /// The body part data will be encoded using the following format: - /// - /// - Content-Disposition: form-data; name=#{name}; filename=#{filename} (HTTP Header) - /// - Content-Type: #{mimeType} (HTTP Header) - /// - Encoded file data - /// - Multipart form boundary - /// - /// - Parameters: - /// - fileURL: `URL` of the file whose content will be encoded into the instance. - /// - name: Name to associate with the file content in the `Content-Disposition` HTTP header. - /// - fileName: Filename to associate with the file content in the `Content-Disposition` HTTP header. - /// - mimeType: MIME type to associate with the file content in the `Content-Type` HTTP header. - public func append(_ fileURL: URL, withName name: String, fileName: String, mimeType: String) { - let headers = contentHeaders(withName: name, fileName: fileName, mimeType: mimeType) - - //============================================================ - // Check 1 - is file URL? - //============================================================ - - guard fileURL.isFileURL else { - setBodyPartError(withReason: .bodyPartURLInvalid(url: fileURL)) - return - } - - //============================================================ - // Check 2 - is file URL reachable? - //============================================================ - - #if !(os(Linux) || os(Windows) || os(Android)) - do { - let isReachable = try fileURL.checkPromisedItemIsReachable() - guard isReachable else { - setBodyPartError(withReason: .bodyPartFileNotReachable(at: fileURL)) - return - } - } catch { - setBodyPartError(withReason: .bodyPartFileNotReachableWithError(atURL: fileURL, error: error)) - return - } - #endif - - //============================================================ - // Check 3 - is file URL a directory? - //============================================================ - - var isDirectory: ObjCBool = false - let path = fileURL.path - - guard fileManager.fileExists(atPath: path, isDirectory: &isDirectory) && !isDirectory.boolValue else { - setBodyPartError(withReason: .bodyPartFileIsDirectory(at: fileURL)) - return - } - - //============================================================ - // Check 4 - can the file size be extracted? - //============================================================ - - let bodyContentLength: UInt64 - - do { - guard let fileSize = try fileManager.attributesOfItem(atPath: path)[.size] as? NSNumber else { - setBodyPartError(withReason: .bodyPartFileSizeNotAvailable(at: fileURL)) - return - } - - bodyContentLength = fileSize.uint64Value - } catch { - setBodyPartError(withReason: .bodyPartFileSizeQueryFailedWithError(forURL: fileURL, error: error)) - return - } - - //============================================================ - // Check 5 - can a stream be created from file URL? - //============================================================ - - guard let stream = InputStream(url: fileURL) else { - setBodyPartError(withReason: .bodyPartInputStreamCreationFailed(for: fileURL)) - return - } - - append(stream, withLength: bodyContentLength, headers: headers) - } - - /// Creates a body part from the stream and appends it to the instance. - /// - /// The body part data will be encoded using the following format: - /// - /// - `Content-Disposition: form-data; name=#{name}; filename=#{filename}` (HTTP Header) - /// - `Content-Type: #{mimeType}` (HTTP Header) - /// - Encoded stream data - /// - Multipart form boundary - /// - /// - Parameters: - /// - stream: `InputStream` to encode into the instance. - /// - length: Length, in bytes, of the stream. - /// - name: Name to associate with the stream content in the `Content-Disposition` HTTP header. - /// - fileName: Filename to associate with the stream content in the `Content-Disposition` HTTP header. - /// - mimeType: MIME type to associate with the stream content in the `Content-Type` HTTP header. - public func append(_ stream: InputStream, - withLength length: UInt64, - name: String, - fileName: String, - mimeType: String) { - let headers = contentHeaders(withName: name, fileName: fileName, mimeType: mimeType) - append(stream, withLength: length, headers: headers) - } - - /// Creates a body part with the stream, length, and headers and appends it to the instance. - /// - /// The body part data will be encoded using the following format: - /// - /// - HTTP headers - /// - Encoded stream data - /// - Multipart form boundary - /// - /// - Parameters: - /// - stream: `InputStream` to encode into the instance. - /// - length: Length, in bytes, of the stream. - /// - headers: `HTTPHeaders` for the body part. - public func append(_ stream: InputStream, withLength length: UInt64, headers: HTTPHeaders) { - let bodyPart = BodyPart(headers: headers, bodyStream: stream, bodyContentLength: length) - bodyParts.append(bodyPart) - } - - // MARK: - Data Encoding - - /// Encodes all appended body parts into a single `Data` value. - /// - /// - Note: This method will load all the appended body parts into memory all at the same time. This method should - /// only be used when the encoded data will have a small memory footprint. For large data cases, please use - /// the `writeEncodedData(to:))` method. - /// - /// - Returns: The encoded `Data`, if encoding is successful. - /// - Throws: An `AFError` if encoding encounters an error. - public func encode() throws -> Data { - if let bodyPartError = bodyPartError { - throw bodyPartError - } - - var encoded = Data() - - bodyParts.first?.hasInitialBoundary = true - bodyParts.last?.hasFinalBoundary = true - - for bodyPart in bodyParts { - let encodedData = try encode(bodyPart) - encoded.append(encodedData) - } - - return encoded - } - - /// Writes all appended body parts to the given file `URL`. - /// - /// This process is facilitated by reading and writing with input and output streams, respectively. Thus, - /// this approach is very memory efficient and should be used for large body part data. - /// - /// - Parameter fileURL: File `URL` to which to write the form data. - /// - Throws: An `AFError` if encoding encounters an error. - public func writeEncodedData(to fileURL: URL) throws { - if let bodyPartError = bodyPartError { - throw bodyPartError - } - - if fileManager.fileExists(atPath: fileURL.path) { - throw AFError.multipartEncodingFailed(reason: .outputStreamFileAlreadyExists(at: fileURL)) - } else if !fileURL.isFileURL { - throw AFError.multipartEncodingFailed(reason: .outputStreamURLInvalid(url: fileURL)) - } - - guard let outputStream = OutputStream(url: fileURL, append: false) else { - throw AFError.multipartEncodingFailed(reason: .outputStreamCreationFailed(for: fileURL)) - } - - outputStream.open() - defer { outputStream.close() } - - bodyParts.first?.hasInitialBoundary = true - bodyParts.last?.hasFinalBoundary = true - - for bodyPart in bodyParts { - try write(bodyPart, to: outputStream) - } - } - - // MARK: - Private - Body Part Encoding - - private func encode(_ bodyPart: BodyPart) throws -> Data { - var encoded = Data() - - let initialData = bodyPart.hasInitialBoundary ? initialBoundaryData() : encapsulatedBoundaryData() - encoded.append(initialData) - - let headerData = encodeHeaders(for: bodyPart) - encoded.append(headerData) - - let bodyStreamData = try encodeBodyStream(for: bodyPart) - encoded.append(bodyStreamData) - - if bodyPart.hasFinalBoundary { - encoded.append(finalBoundaryData()) - } - - return encoded - } - - private func encodeHeaders(for bodyPart: BodyPart) -> Data { - let headerText = bodyPart.headers.map { "\($0.name): \($0.value)\(EncodingCharacters.crlf)" } - .joined() - + EncodingCharacters.crlf - - return Data(headerText.utf8) - } - - private func encodeBodyStream(for bodyPart: BodyPart) throws -> Data { - let inputStream = bodyPart.bodyStream - inputStream.open() - defer { inputStream.close() } - - var encoded = Data() - - while inputStream.hasBytesAvailable { - var buffer = [UInt8](repeating: 0, count: streamBufferSize) - let bytesRead = inputStream.read(&buffer, maxLength: streamBufferSize) - - if let error = inputStream.streamError { - throw AFError.multipartEncodingFailed(reason: .inputStreamReadFailed(error: error)) - } - - if bytesRead > 0 { - encoded.append(buffer, count: bytesRead) - } else { - break - } - } - - guard UInt64(encoded.count) == bodyPart.bodyContentLength else { - let error = AFError.UnexpectedInputStreamLength(bytesExpected: bodyPart.bodyContentLength, - bytesRead: UInt64(encoded.count)) - throw AFError.multipartEncodingFailed(reason: .inputStreamReadFailed(error: error)) - } - - return encoded - } - - // MARK: - Private - Writing Body Part to Output Stream - - private func write(_ bodyPart: BodyPart, to outputStream: OutputStream) throws { - try writeInitialBoundaryData(for: bodyPart, to: outputStream) - try writeHeaderData(for: bodyPart, to: outputStream) - try writeBodyStream(for: bodyPart, to: outputStream) - try writeFinalBoundaryData(for: bodyPart, to: outputStream) - } - - private func writeInitialBoundaryData(for bodyPart: BodyPart, to outputStream: OutputStream) throws { - let initialData = bodyPart.hasInitialBoundary ? initialBoundaryData() : encapsulatedBoundaryData() - return try write(initialData, to: outputStream) - } - - private func writeHeaderData(for bodyPart: BodyPart, to outputStream: OutputStream) throws { - let headerData = encodeHeaders(for: bodyPart) - return try write(headerData, to: outputStream) - } - - private func writeBodyStream(for bodyPart: BodyPart, to outputStream: OutputStream) throws { - let inputStream = bodyPart.bodyStream - - inputStream.open() - defer { inputStream.close() } - - var bytesLeftToRead = bodyPart.bodyContentLength - while inputStream.hasBytesAvailable && bytesLeftToRead > 0 { - let bufferSize = min(streamBufferSize, Int(bytesLeftToRead)) - var buffer = [UInt8](repeating: 0, count: bufferSize) - let bytesRead = inputStream.read(&buffer, maxLength: bufferSize) - - if let streamError = inputStream.streamError { - throw AFError.multipartEncodingFailed(reason: .inputStreamReadFailed(error: streamError)) - } - - if bytesRead > 0 { - if buffer.count != bytesRead { - buffer = Array(buffer[0.. 0, outputStream.hasSpaceAvailable { - let bytesWritten = outputStream.write(buffer, maxLength: bytesToWrite) - - if let error = outputStream.streamError { - throw AFError.multipartEncodingFailed(reason: .outputStreamWriteFailed(error: error)) - } - - bytesToWrite -= bytesWritten - - if bytesToWrite > 0 { - buffer = Array(buffer[bytesWritten.. HTTPHeaders { - var disposition = "form-data; name=\"\(name)\"" - if let fileName = fileName { disposition += "; filename=\"\(fileName)\"" } - - var headers: HTTPHeaders = [.contentDisposition(disposition)] - if let mimeType = mimeType { headers.add(.contentType(mimeType)) } - - return headers - } - - // MARK: - Private - Boundary Encoding - - private func initialBoundaryData() -> Data { - BoundaryGenerator.boundaryData(forBoundaryType: .initial, boundary: boundary) - } - - private func encapsulatedBoundaryData() -> Data { - BoundaryGenerator.boundaryData(forBoundaryType: .encapsulated, boundary: boundary) - } - - private func finalBoundaryData() -> Data { - BoundaryGenerator.boundaryData(forBoundaryType: .final, boundary: boundary) - } - - // MARK: - Private - Errors - - private func setBodyPartError(withReason reason: AFError.MultipartEncodingFailureReason) { - guard bodyPartError == nil else { return } - bodyPartError = AFError.multipartEncodingFailed(reason: reason) - } -} - -#if canImport(UniformTypeIdentifiers) -import UniformTypeIdentifiers - -extension MultipartFormData { - // MARK: - Private - Mime Type - - private func mimeType(forPathExtension pathExtension: String) -> String { - #if swift(>=5.9) - if #available(iOS 14, macOS 11, tvOS 14, watchOS 7, visionOS 1, *) { - return UTType(filenameExtension: pathExtension)?.preferredMIMEType ?? "application/octet-stream" - } else { - if - let id = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as CFString, nil)?.takeRetainedValue(), - let contentType = UTTypeCopyPreferredTagWithClass(id, kUTTagClassMIMEType)?.takeRetainedValue() { - return contentType as String - } - - return "application/octet-stream" - } - #else - if #available(iOS 14, macOS 11, tvOS 14, watchOS 7, *) { - return UTType(filenameExtension: pathExtension)?.preferredMIMEType ?? "application/octet-stream" - } else { - if - let id = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as CFString, nil)?.takeRetainedValue(), - let contentType = UTTypeCopyPreferredTagWithClass(id, kUTTagClassMIMEType)?.takeRetainedValue() { - return contentType as String - } - - return "application/octet-stream" - } - #endif - } -} - -#else - -extension MultipartFormData { - // MARK: - Private - Mime Type - - private func mimeType(forPathExtension pathExtension: String) -> String { - #if canImport(CoreServices) || canImport(MobileCoreServices) - if - let id = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as CFString, nil)?.takeRetainedValue(), - let contentType = UTTypeCopyPreferredTagWithClass(id, kUTTagClassMIMEType)?.takeRetainedValue() { - return contentType as String - } - #endif - - return "application/octet-stream" - } -} - -#endif diff --git a/Pods/Alamofire/Source/MultipartUpload.swift b/Pods/Alamofire/Source/MultipartUpload.swift deleted file mode 100644 index ae905bd..0000000 --- a/Pods/Alamofire/Source/MultipartUpload.swift +++ /dev/null @@ -1,89 +0,0 @@ -// -// MultipartUpload.swift -// -// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -/// Internal type which encapsulates a `MultipartFormData` upload. -final class MultipartUpload { - lazy var result = Result { try build() } - - private let multipartFormData: Protected - - let encodingMemoryThreshold: UInt64 - let request: URLRequestConvertible - let fileManager: FileManager - - init(encodingMemoryThreshold: UInt64, - request: URLRequestConvertible, - multipartFormData: MultipartFormData) { - self.encodingMemoryThreshold = encodingMemoryThreshold - self.request = request - fileManager = multipartFormData.fileManager - self.multipartFormData = Protected(multipartFormData) - } - - func build() throws -> UploadRequest.Uploadable { - let uploadable: UploadRequest.Uploadable - if multipartFormData.contentLength < encodingMemoryThreshold { - let data = try multipartFormData.read { try $0.encode() } - - uploadable = .data(data) - } else { - let tempDirectoryURL = fileManager.temporaryDirectory - let directoryURL = tempDirectoryURL.appendingPathComponent("org.alamofire.manager/multipart.form.data") - let fileName = UUID().uuidString - let fileURL = directoryURL.appendingPathComponent(fileName) - - try fileManager.createDirectory(at: directoryURL, withIntermediateDirectories: true, attributes: nil) - - do { - try multipartFormData.read { try $0.writeEncodedData(to: fileURL) } - } catch { - // Cleanup after attempted write if it fails. - try? fileManager.removeItem(at: fileURL) - throw error - } - - uploadable = .file(fileURL, shouldRemove: true) - } - - return uploadable - } -} - -extension MultipartUpload: UploadConvertible { - func asURLRequest() throws -> URLRequest { - var urlRequest = try request.asURLRequest() - - multipartFormData.read { multipartFormData in - urlRequest.headers.add(.contentType(multipartFormData.contentType)) - } - - return urlRequest - } - - func createUploadable() throws -> UploadRequest.Uploadable { - try result.get() - } -} diff --git a/Pods/Alamofire/Source/NetworkReachabilityManager.swift b/Pods/Alamofire/Source/NetworkReachabilityManager.swift deleted file mode 100644 index 650fdf9..0000000 --- a/Pods/Alamofire/Source/NetworkReachabilityManager.swift +++ /dev/null @@ -1,292 +0,0 @@ -// -// NetworkReachabilityManager.swift -// -// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) -// -// 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(SystemConfiguration) - -import Foundation -import SystemConfiguration - -/// The `NetworkReachabilityManager` class listens for reachability changes of hosts and addresses for both cellular and -/// WiFi network interfaces. -/// -/// Reachability can be used to determine background information about why a network operation failed, or to retry -/// network requests when a connection is established. It should not be used to prevent a user from initiating a network -/// request, as it's possible that an initial request may be required to establish reachability. -open class NetworkReachabilityManager { - /// Defines the various states of network reachability. - public enum NetworkReachabilityStatus { - /// It is unknown whether the network is reachable. - case unknown - /// The network is not reachable. - case notReachable - /// The network is reachable on the associated `ConnectionType`. - case reachable(ConnectionType) - - init(_ flags: SCNetworkReachabilityFlags) { - guard flags.isActuallyReachable else { self = .notReachable; return } - - var networkStatus: NetworkReachabilityStatus = .reachable(.ethernetOrWiFi) - - if flags.isCellular { networkStatus = .reachable(.cellular) } - - self = networkStatus - } - - /// Defines the various connection types detected by reachability flags. - public enum ConnectionType { - /// The connection type is either over Ethernet or WiFi. - case ethernetOrWiFi - /// The connection type is a cellular connection. - case cellular - } - } - - /// A closure executed when the network reachability status changes. The closure takes a single argument: the - /// network reachability status. - public typealias Listener = (NetworkReachabilityStatus) -> Void - - /// Default `NetworkReachabilityManager` for the zero address and a `listenerQueue` of `.main`. - public static let `default` = NetworkReachabilityManager() - - // MARK: - Properties - - /// Whether the network is currently reachable. - open var isReachable: Bool { isReachableOnCellular || isReachableOnEthernetOrWiFi } - - /// Whether the network is currently reachable over the cellular interface. - /// - /// - Note: Using this property to decide whether to make a high or low bandwidth request is not recommended. - /// Instead, set the `allowsCellularAccess` on any `URLRequest`s being issued. - /// - open var isReachableOnCellular: Bool { status == .reachable(.cellular) } - - /// Whether the network is currently reachable over Ethernet or WiFi interface. - open var isReachableOnEthernetOrWiFi: Bool { status == .reachable(.ethernetOrWiFi) } - - /// `DispatchQueue` on which reachability will update. - public let reachabilityQueue = DispatchQueue(label: "org.alamofire.reachabilityQueue") - - /// Flags of the current reachability type, if any. - open var flags: SCNetworkReachabilityFlags? { - var flags = SCNetworkReachabilityFlags() - - return SCNetworkReachabilityGetFlags(reachability, &flags) ? flags : nil - } - - /// The current network reachability status. - open var status: NetworkReachabilityStatus { - flags.map(NetworkReachabilityStatus.init) ?? .unknown - } - - /// Mutable state storage. - struct MutableState { - /// A closure executed when the network reachability status changes. - var listener: Listener? - /// `DispatchQueue` on which listeners will be called. - var listenerQueue: DispatchQueue? - /// Previously calculated status. - var previousStatus: NetworkReachabilityStatus? - } - - /// `SCNetworkReachability` instance providing notifications. - private let reachability: SCNetworkReachability - - /// Protected storage for mutable state. - private let mutableState = Protected(MutableState()) - - // MARK: - Initialization - - /// Creates an instance with the specified host. - /// - /// - Note: The `host` value must *not* contain a scheme, just the hostname. - /// - /// - Parameters: - /// - host: Host used to evaluate network reachability. Must *not* include the scheme (e.g. `https`). - public convenience init?(host: String) { - guard let reachability = SCNetworkReachabilityCreateWithName(nil, host) else { return nil } - - self.init(reachability: reachability) - } - - /// Creates an instance that monitors the address 0.0.0.0. - /// - /// Reachability treats the 0.0.0.0 address as a special token that causes it to monitor the general routing - /// status of the device, both IPv4 and IPv6. - public convenience init?() { - var zero = sockaddr() - zero.sa_len = UInt8(MemoryLayout.size) - zero.sa_family = sa_family_t(AF_INET) - - guard let reachability = SCNetworkReachabilityCreateWithAddress(nil, &zero) else { return nil } - - self.init(reachability: reachability) - } - - private init(reachability: SCNetworkReachability) { - self.reachability = reachability - } - - deinit { - stopListening() - } - - // MARK: - Listening - - /// Starts listening for changes in network reachability status. - /// - /// - Note: Stops and removes any existing listener. - /// - /// - Parameters: - /// - queue: `DispatchQueue` on which to call the `listener` closure. `.main` by default. - /// - listener: `Listener` closure called when reachability changes. - /// - /// - Returns: `true` if listening was started successfully, `false` otherwise. - @discardableResult - open func startListening(onQueue queue: DispatchQueue = .main, - onUpdatePerforming listener: @escaping Listener) -> Bool { - stopListening() - - mutableState.write { state in - state.listenerQueue = queue - state.listener = listener - } - - let weakManager = WeakManager(manager: self) - - var context = SCNetworkReachabilityContext( - version: 0, - info: Unmanaged.passUnretained(weakManager).toOpaque(), - retain: { info in - let unmanaged = Unmanaged.fromOpaque(info) - _ = unmanaged.retain() - - return UnsafeRawPointer(unmanaged.toOpaque()) - }, - release: { info in - let unmanaged = Unmanaged.fromOpaque(info) - unmanaged.release() - }, - copyDescription: { info in - let unmanaged = Unmanaged.fromOpaque(info) - let weakManager = unmanaged.takeUnretainedValue() - let description = weakManager.manager?.flags?.readableDescription ?? "nil" - - return Unmanaged.passRetained(description as CFString) - } - ) - let callback: SCNetworkReachabilityCallBack = { _, flags, info in - guard let info = info else { return } - - let weakManager = Unmanaged.fromOpaque(info).takeUnretainedValue() - weakManager.manager?.notifyListener(flags) - } - - let queueAdded = SCNetworkReachabilitySetDispatchQueue(reachability, reachabilityQueue) - let callbackAdded = SCNetworkReachabilitySetCallback(reachability, callback, &context) - - // Manually call listener to give initial state, since the framework may not. - if let currentFlags = flags { - reachabilityQueue.async { - self.notifyListener(currentFlags) - } - } - - return callbackAdded && queueAdded - } - - /// Stops listening for changes in network reachability status. - open func stopListening() { - SCNetworkReachabilitySetCallback(reachability, nil, nil) - SCNetworkReachabilitySetDispatchQueue(reachability, nil) - mutableState.write { state in - state.listener = nil - state.listenerQueue = nil - state.previousStatus = nil - } - } - - // MARK: - Internal - Listener Notification - - /// Calls the `listener` closure of the `listenerQueue` if the computed status hasn't changed. - /// - /// - Note: Should only be called from the `reachabilityQueue`. - /// - /// - Parameter flags: `SCNetworkReachabilityFlags` to use to calculate the status. - func notifyListener(_ flags: SCNetworkReachabilityFlags) { - let newStatus = NetworkReachabilityStatus(flags) - - mutableState.write { state in - guard state.previousStatus != newStatus else { return } - - state.previousStatus = newStatus - - let listener = state.listener - state.listenerQueue?.async { listener?(newStatus) } - } - } - - private final class WeakManager { - weak var manager: NetworkReachabilityManager? - - init(manager: NetworkReachabilityManager?) { - self.manager = manager - } - } -} - -// MARK: - - -extension NetworkReachabilityManager.NetworkReachabilityStatus: Equatable {} - -extension SCNetworkReachabilityFlags { - var isReachable: Bool { contains(.reachable) } - var isConnectionRequired: Bool { contains(.connectionRequired) } - var canConnectAutomatically: Bool { contains(.connectionOnDemand) || contains(.connectionOnTraffic) } - var canConnectWithoutUserInteraction: Bool { canConnectAutomatically && !contains(.interventionRequired) } - var isActuallyReachable: Bool { isReachable && (!isConnectionRequired || canConnectWithoutUserInteraction) } - var isCellular: Bool { - #if os(iOS) || os(tvOS) || (swift(>=5.9) && os(visionOS)) - return contains(.isWWAN) - #else - return false - #endif - } - - /// Human readable `String` for all states, to help with debugging. - var readableDescription: String { - let W = isCellular ? "W" : "-" - let R = isReachable ? "R" : "-" - let c = isConnectionRequired ? "c" : "-" - let t = contains(.transientConnection) ? "t" : "-" - let i = contains(.interventionRequired) ? "i" : "-" - let C = contains(.connectionOnTraffic) ? "C" : "-" - let D = contains(.connectionOnDemand) ? "D" : "-" - let l = contains(.isLocalAddress) ? "l" : "-" - let d = contains(.isDirect) ? "d" : "-" - let a = contains(.connectionAutomatic) ? "a" : "-" - - return "\(W)\(R) \(c)\(t)\(i)\(C)\(D)\(l)\(d)\(a)" - } -} -#endif diff --git a/Pods/Alamofire/Source/Notifications.swift b/Pods/Alamofire/Source/Notifications.swift deleted file mode 100644 index 66434b6..0000000 --- a/Pods/Alamofire/Source/Notifications.swift +++ /dev/null @@ -1,115 +0,0 @@ -// -// Notifications.swift -// -// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -extension Request { - /// Posted when a `Request` is resumed. The `Notification` contains the resumed `Request`. - public static let didResumeNotification = Notification.Name(rawValue: "org.alamofire.notification.name.request.didResume") - /// Posted when a `Request` is suspended. The `Notification` contains the suspended `Request`. - public static let didSuspendNotification = Notification.Name(rawValue: "org.alamofire.notification.name.request.didSuspend") - /// Posted when a `Request` is cancelled. The `Notification` contains the cancelled `Request`. - public static let didCancelNotification = Notification.Name(rawValue: "org.alamofire.notification.name.request.didCancel") - /// Posted when a `Request` is finished. The `Notification` contains the completed `Request`. - public static let didFinishNotification = Notification.Name(rawValue: "org.alamofire.notification.name.request.didFinish") - - /// Posted when a `URLSessionTask` is resumed. The `Notification` contains the `Request` associated with the `URLSessionTask`. - public static let didResumeTaskNotification = Notification.Name(rawValue: "org.alamofire.notification.name.request.didResumeTask") - /// Posted when a `URLSessionTask` is suspended. The `Notification` contains the `Request` associated with the `URLSessionTask`. - public static let didSuspendTaskNotification = Notification.Name(rawValue: "org.alamofire.notification.name.request.didSuspendTask") - /// Posted when a `URLSessionTask` is cancelled. The `Notification` contains the `Request` associated with the `URLSessionTask`. - public static let didCancelTaskNotification = Notification.Name(rawValue: "org.alamofire.notification.name.request.didCancelTask") - /// Posted when a `URLSessionTask` is completed. The `Notification` contains the `Request` associated with the `URLSessionTask`. - public static let didCompleteTaskNotification = Notification.Name(rawValue: "org.alamofire.notification.name.request.didCompleteTask") -} - -// MARK: - - -extension Notification { - /// The `Request` contained by the instance's `userInfo`, `nil` otherwise. - public var request: Request? { - userInfo?[String.requestKey] as? Request - } - - /// Convenience initializer for a `Notification` containing a `Request` payload. - /// - /// - Parameters: - /// - name: The name of the notification. - /// - request: The `Request` payload. - init(name: Notification.Name, request: Request) { - self.init(name: name, object: nil, userInfo: [String.requestKey: request]) - } -} - -extension NotificationCenter { - /// Convenience function for posting notifications with `Request` payloads. - /// - /// - Parameters: - /// - name: The name of the notification. - /// - request: The `Request` payload. - func postNotification(named name: Notification.Name, with request: Request) { - let notification = Notification(name: name, request: request) - post(notification) - } -} - -extension String { - /// User info dictionary key representing the `Request` associated with the notification. - fileprivate static let requestKey = "org.alamofire.notification.key.request" -} - -/// `EventMonitor` that provides Alamofire's notifications. -public final class AlamofireNotifications: EventMonitor { - public func requestDidResume(_ request: Request) { - NotificationCenter.default.postNotification(named: Request.didResumeNotification, with: request) - } - - public func requestDidSuspend(_ request: Request) { - NotificationCenter.default.postNotification(named: Request.didSuspendNotification, with: request) - } - - public func requestDidCancel(_ request: Request) { - NotificationCenter.default.postNotification(named: Request.didCancelNotification, with: request) - } - - public func requestDidFinish(_ request: Request) { - NotificationCenter.default.postNotification(named: Request.didFinishNotification, with: request) - } - - public func request(_ request: Request, didResumeTask task: URLSessionTask) { - NotificationCenter.default.postNotification(named: Request.didResumeTaskNotification, with: request) - } - - public func request(_ request: Request, didSuspendTask task: URLSessionTask) { - NotificationCenter.default.postNotification(named: Request.didSuspendTaskNotification, with: request) - } - - public func request(_ request: Request, didCancelTask task: URLSessionTask) { - NotificationCenter.default.postNotification(named: Request.didCancelTaskNotification, with: request) - } - - public func request(_ request: Request, didCompleteTask task: URLSessionTask, with error: AFError?) { - NotificationCenter.default.postNotification(named: Request.didCompleteTaskNotification, with: request) - } -} diff --git a/Pods/Alamofire/Source/OperationQueue+Alamofire.swift b/Pods/Alamofire/Source/OperationQueue+Alamofire.swift deleted file mode 100644 index b06a0cc..0000000 --- a/Pods/Alamofire/Source/OperationQueue+Alamofire.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// OperationQueue+Alamofire.swift -// -// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -extension OperationQueue { - /// Creates an instance using the provided parameters. - /// - /// - Parameters: - /// - qualityOfService: `QualityOfService` to be applied to the queue. `.default` by default. - /// - maxConcurrentOperationCount: Maximum concurrent operations. - /// `OperationQueue.defaultMaxConcurrentOperationCount` by default. - /// - underlyingQueue: Underlying `DispatchQueue`. `nil` by default. - /// - name: Name for the queue. `nil` by default. - /// - startSuspended: Whether the queue starts suspended. `false` by default. - convenience init(qualityOfService: QualityOfService = .default, - maxConcurrentOperationCount: Int = OperationQueue.defaultMaxConcurrentOperationCount, - underlyingQueue: DispatchQueue? = nil, - name: String? = nil, - startSuspended: Bool = false) { - self.init() - self.qualityOfService = qualityOfService - self.maxConcurrentOperationCount = maxConcurrentOperationCount - self.underlyingQueue = underlyingQueue - self.name = name - isSuspended = startSuspended - } -} diff --git a/Pods/Alamofire/Source/ParameterEncoder.swift b/Pods/Alamofire/Source/ParameterEncoder.swift deleted file mode 100644 index 8916978..0000000 --- a/Pods/Alamofire/Source/ParameterEncoder.swift +++ /dev/null @@ -1,213 +0,0 @@ -// -// ParameterEncoder.swift -// -// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -/// A type that can encode any `Encodable` type into a `URLRequest`. -public protocol ParameterEncoder { - /// Encode the provided `Encodable` parameters into `request`. - /// - /// - Parameters: - /// - parameters: The `Encodable` parameter value. - /// - request: The `URLRequest` into which to encode the parameters. - /// - /// - Returns: A `URLRequest` with the result of the encoding. - /// - Throws: An `Error` when encoding fails. For Alamofire provided encoders, this will be an instance of - /// `AFError.parameterEncoderFailed` with an associated `ParameterEncoderFailureReason`. - func encode(_ parameters: Parameters?, into request: URLRequest) throws -> URLRequest -} - -/// A `ParameterEncoder` that encodes types as JSON body data. -/// -/// If no `Content-Type` header is already set on the provided `URLRequest`s, it's set to `application/json`. -open class JSONParameterEncoder: ParameterEncoder { - /// Returns an encoder with default parameters. - public static var `default`: JSONParameterEncoder { JSONParameterEncoder() } - - /// Returns an encoder with `JSONEncoder.outputFormatting` set to `.prettyPrinted`. - public static var prettyPrinted: JSONParameterEncoder { - let encoder = JSONEncoder() - encoder.outputFormatting = .prettyPrinted - - return JSONParameterEncoder(encoder: encoder) - } - - /// Returns an encoder with `JSONEncoder.outputFormatting` set to `.sortedKeys`. - @available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) - public static var sortedKeys: JSONParameterEncoder { - let encoder = JSONEncoder() - encoder.outputFormatting = .sortedKeys - - return JSONParameterEncoder(encoder: encoder) - } - - /// `JSONEncoder` used to encode parameters. - public let encoder: JSONEncoder - - /// Creates an instance with the provided `JSONEncoder`. - /// - /// - Parameter encoder: The `JSONEncoder`. `JSONEncoder()` by default. - public init(encoder: JSONEncoder = JSONEncoder()) { - self.encoder = encoder - } - - open func encode(_ parameters: Parameters?, - into request: URLRequest) throws -> URLRequest { - guard let parameters = parameters else { return request } - - var request = request - - do { - let data = try encoder.encode(parameters) - request.httpBody = data - if request.headers["Content-Type"] == nil { - request.headers.update(.contentType("application/json")) - } - } catch { - throw AFError.parameterEncodingFailed(reason: .jsonEncodingFailed(error: error)) - } - - return request - } -} - -extension ParameterEncoder where Self == JSONParameterEncoder { - /// Provides a default `JSONParameterEncoder` instance. - public static var json: JSONParameterEncoder { JSONParameterEncoder() } - - /// Creates a `JSONParameterEncoder` using the provided `JSONEncoder`. - /// - /// - Parameter encoder: `JSONEncoder` used to encode parameters. `JSONEncoder()` by default. - /// - Returns: The `JSONParameterEncoder`. - public static func json(encoder: JSONEncoder = JSONEncoder()) -> JSONParameterEncoder { - JSONParameterEncoder(encoder: encoder) - } -} - -/// A `ParameterEncoder` that encodes types as URL-encoded query strings to be set on the URL or as body data, depending -/// on the `Destination` set. -/// -/// If no `Content-Type` header is already set on the provided `URLRequest`s, it will be set to -/// `application/x-www-form-urlencoded; charset=utf-8`. -/// -/// Encoding behavior can be customized by passing an instance of `URLEncodedFormEncoder` to the initializer. -open class URLEncodedFormParameterEncoder: ParameterEncoder { - /// Defines where the URL-encoded string should be set for each `URLRequest`. - public enum Destination { - /// Applies the encoded query string to any existing query string for `.get`, `.head`, and `.delete` request. - /// Sets it to the `httpBody` for all other methods. - case methodDependent - /// Applies the encoded query string to any existing query string from the `URLRequest`. - case queryString - /// Applies the encoded query string to the `httpBody` of the `URLRequest`. - case httpBody - - /// Determines whether the URL-encoded string should be applied to the `URLRequest`'s `url`. - /// - /// - Parameter method: The `HTTPMethod`. - /// - /// - Returns: Whether the URL-encoded string should be applied to a `URL`. - func encodesParametersInURL(for method: HTTPMethod) -> Bool { - switch self { - case .methodDependent: return [.get, .head, .delete].contains(method) - case .queryString: return true - case .httpBody: return false - } - } - } - - /// Returns an encoder with default parameters. - public static var `default`: URLEncodedFormParameterEncoder { URLEncodedFormParameterEncoder() } - - /// The `URLEncodedFormEncoder` to use. - public let encoder: URLEncodedFormEncoder - - /// The `Destination` for the URL-encoded string. - public let destination: Destination - - /// Creates an instance with the provided `URLEncodedFormEncoder` instance and `Destination` value. - /// - /// - Parameters: - /// - encoder: The `URLEncodedFormEncoder`. `URLEncodedFormEncoder()` by default. - /// - destination: The `Destination`. `.methodDependent` by default. - public init(encoder: URLEncodedFormEncoder = URLEncodedFormEncoder(), destination: Destination = .methodDependent) { - self.encoder = encoder - self.destination = destination - } - - open func encode(_ parameters: Parameters?, - into request: URLRequest) throws -> URLRequest { - guard let parameters = parameters else { return request } - - var request = request - - guard let url = request.url else { - throw AFError.parameterEncoderFailed(reason: .missingRequiredComponent(.url)) - } - - guard let method = request.method else { - let rawValue = request.method?.rawValue ?? "nil" - throw AFError.parameterEncoderFailed(reason: .missingRequiredComponent(.httpMethod(rawValue: rawValue))) - } - - if destination.encodesParametersInURL(for: method), - var components = URLComponents(url: url, resolvingAgainstBaseURL: false) { - let query: String = try Result { try encoder.encode(parameters) } - .mapError { AFError.parameterEncoderFailed(reason: .encoderFailed(error: $0)) }.get() - let newQueryString = [components.percentEncodedQuery, query].compactMap { $0 }.joinedWithAmpersands() - components.percentEncodedQuery = newQueryString.isEmpty ? nil : newQueryString - - guard let newURL = components.url else { - throw AFError.parameterEncoderFailed(reason: .missingRequiredComponent(.url)) - } - - request.url = newURL - } else { - if request.headers["Content-Type"] == nil { - request.headers.update(.contentType("application/x-www-form-urlencoded; charset=utf-8")) - } - - request.httpBody = try Result { try encoder.encode(parameters) } - .mapError { AFError.parameterEncoderFailed(reason: .encoderFailed(error: $0)) }.get() - } - - return request - } -} - -extension ParameterEncoder where Self == URLEncodedFormParameterEncoder { - /// Provides a default `URLEncodedFormParameterEncoder` instance. - public static var urlEncodedForm: URLEncodedFormParameterEncoder { URLEncodedFormParameterEncoder() } - - /// Creates a `URLEncodedFormParameterEncoder` with the provided encoder and destination. - /// - /// - Parameters: - /// - encoder: `URLEncodedFormEncoder` used to encode the parameters. `URLEncodedFormEncoder()` by default. - /// - destination: `Destination` to which to encode the parameters. `.methodDependent` by default. - /// - Returns: The `URLEncodedFormParameterEncoder`. - public static func urlEncodedForm(encoder: URLEncodedFormEncoder = URLEncodedFormEncoder(), - destination: URLEncodedFormParameterEncoder.Destination = .methodDependent) -> URLEncodedFormParameterEncoder { - URLEncodedFormParameterEncoder(encoder: encoder, destination: destination) - } -} diff --git a/Pods/Alamofire/Source/ParameterEncoding.swift b/Pods/Alamofire/Source/ParameterEncoding.swift deleted file mode 100644 index ea61256..0000000 --- a/Pods/Alamofire/Source/ParameterEncoding.swift +++ /dev/null @@ -1,346 +0,0 @@ -// -// ParameterEncoding.swift -// -// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -/// A dictionary of parameters to apply to a `URLRequest`. -public typealias Parameters = [String: Any] - -/// A type used to define how a set of parameters are applied to a `URLRequest`. -public protocol ParameterEncoding { - /// Creates a `URLRequest` by encoding parameters and applying them on the passed request. - /// - /// - Parameters: - /// - urlRequest: `URLRequestConvertible` value onto which parameters will be encoded. - /// - parameters: `Parameters` to encode onto the request. - /// - /// - Returns: The encoded `URLRequest`. - /// - Throws: Any `Error` produced during parameter encoding. - func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest -} - -// MARK: - - -/// Creates a url-encoded query string to be set as or appended to any existing URL query string or set as the HTTP -/// body of the URL request. Whether the query string is set or appended to any existing URL query string or set as -/// the HTTP body depends on the destination of the encoding. -/// -/// The `Content-Type` HTTP header field of an encoded request with HTTP body is set to -/// `application/x-www-form-urlencoded; charset=utf-8`. -/// -/// There is no published specification for how to encode collection types. By default the convention of appending -/// `[]` to the key for array values (`foo[]=1&foo[]=2`), and appending the key surrounded by square brackets for -/// nested dictionary values (`foo[bar]=baz`) is used. Optionally, `ArrayEncoding` can be used to omit the -/// square brackets appended to array keys. -/// -/// `BoolEncoding` can be used to configure how boolean values are encoded. The default behavior is to encode -/// `true` as 1 and `false` as 0. -public struct URLEncoding: ParameterEncoding { - // MARK: Helper Types - - /// Defines whether the url-encoded query string is applied to the existing query string or HTTP body of the - /// resulting URL request. - public enum Destination { - /// Applies encoded query string result to existing query string for `GET`, `HEAD` and `DELETE` requests and - /// sets as the HTTP body for requests with any other HTTP method. - case methodDependent - /// Sets or appends encoded query string result to existing query string. - case queryString - /// Sets encoded query string result as the HTTP body of the URL request. - case httpBody - - func encodesParametersInURL(for method: HTTPMethod) -> Bool { - switch self { - case .methodDependent: return [.get, .head, .delete].contains(method) - case .queryString: return true - case .httpBody: return false - } - } - } - - /// Configures how `Array` parameters are encoded. - public enum ArrayEncoding { - /// An empty set of square brackets is appended to the key for every value. This is the default behavior. - case brackets - /// No brackets are appended. The key is encoded as is. - case noBrackets - /// Brackets containing the item index are appended. This matches the jQuery and Node.js behavior. - case indexInBrackets - /// Provide a custom array key encoding with the given closure. - case custom((_ key: String, _ index: Int) -> String) - - func encode(key: String, atIndex index: Int) -> String { - switch self { - case .brackets: - return "\(key)[]" - case .noBrackets: - return key - case .indexInBrackets: - return "\(key)[\(index)]" - case let .custom(encoding): - return encoding(key, index) - } - } - } - - /// Configures how `Bool` parameters are encoded. - public enum BoolEncoding { - /// Encode `true` as `1` and `false` as `0`. This is the default behavior. - case numeric - /// Encode `true` and `false` as string literals. - case literal - - func encode(value: Bool) -> String { - switch self { - case .numeric: - return value ? "1" : "0" - case .literal: - return value ? "true" : "false" - } - } - } - - // MARK: Properties - - /// Returns a default `URLEncoding` instance with a `.methodDependent` destination. - public static var `default`: URLEncoding { URLEncoding() } - - /// Returns a `URLEncoding` instance with a `.queryString` destination. - public static var queryString: URLEncoding { URLEncoding(destination: .queryString) } - - /// Returns a `URLEncoding` instance with an `.httpBody` destination. - public static var httpBody: URLEncoding { URLEncoding(destination: .httpBody) } - - /// The destination defining where the encoded query string is to be applied to the URL request. - public let destination: Destination - - /// The encoding to use for `Array` parameters. - public let arrayEncoding: ArrayEncoding - - /// The encoding to use for `Bool` parameters. - public let boolEncoding: BoolEncoding - - // MARK: Initialization - - /// Creates an instance using the specified parameters. - /// - /// - Parameters: - /// - destination: `Destination` defining where the encoded query string will be applied. `.methodDependent` by - /// default. - /// - arrayEncoding: `ArrayEncoding` to use. `.brackets` by default. - /// - boolEncoding: `BoolEncoding` to use. `.numeric` by default. - public init(destination: Destination = .methodDependent, - arrayEncoding: ArrayEncoding = .brackets, - boolEncoding: BoolEncoding = .numeric) { - self.destination = destination - self.arrayEncoding = arrayEncoding - self.boolEncoding = boolEncoding - } - - // MARK: Encoding - - public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest { - var urlRequest = try urlRequest.asURLRequest() - - guard let parameters = parameters else { return urlRequest } - - if let method = urlRequest.method, destination.encodesParametersInURL(for: method) { - guard let url = urlRequest.url else { - throw AFError.parameterEncodingFailed(reason: .missingURL) - } - - if var urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false), !parameters.isEmpty { - let percentEncodedQuery = (urlComponents.percentEncodedQuery.map { $0 + "&" } ?? "") + query(parameters) - urlComponents.percentEncodedQuery = percentEncodedQuery - urlRequest.url = urlComponents.url - } - } else { - if urlRequest.headers["Content-Type"] == nil { - urlRequest.headers.update(.contentType("application/x-www-form-urlencoded; charset=utf-8")) - } - - urlRequest.httpBody = Data(query(parameters).utf8) - } - - return urlRequest - } - - /// Creates a percent-escaped, URL encoded query string components from the given key-value pair recursively. - /// - /// - Parameters: - /// - key: Key of the query component. - /// - value: Value of the query component. - /// - /// - Returns: The percent-escaped, URL encoded query string components. - public func queryComponents(fromKey key: String, value: Any) -> [(String, String)] { - var components: [(String, String)] = [] - switch value { - case let dictionary as [String: Any]: - for (nestedKey, value) in dictionary { - components += queryComponents(fromKey: "\(key)[\(nestedKey)]", value: value) - } - case let array as [Any]: - for (index, value) in array.enumerated() { - components += queryComponents(fromKey: arrayEncoding.encode(key: key, atIndex: index), value: value) - } - case let number as NSNumber: - if number.isBool { - components.append((escape(key), escape(boolEncoding.encode(value: number.boolValue)))) - } else { - components.append((escape(key), escape("\(number)"))) - } - case let bool as Bool: - components.append((escape(key), escape(boolEncoding.encode(value: bool)))) - default: - components.append((escape(key), escape("\(value)"))) - } - return components - } - - /// Creates a percent-escaped string following RFC 3986 for a query string key or value. - /// - /// - Parameter string: `String` to be percent-escaped. - /// - /// - Returns: The percent-escaped `String`. - public func escape(_ string: String) -> String { - string.addingPercentEncoding(withAllowedCharacters: .afURLQueryAllowed) ?? string - } - - private func query(_ parameters: [String: Any]) -> String { - var components: [(String, String)] = [] - - for key in parameters.keys.sorted(by: <) { - let value = parameters[key]! - components += queryComponents(fromKey: key, value: value) - } - return components.map { "\($0)=\($1)" }.joined(separator: "&") - } -} - -// MARK: - - -/// Uses `JSONSerialization` to create a JSON representation of the parameters object, which is set as the body of the -/// request. The `Content-Type` HTTP header field of an encoded request is set to `application/json`. -public struct JSONEncoding: ParameterEncoding { - public enum Error: Swift.Error { - case invalidJSONObject - } - - // MARK: Properties - - /// Returns a `JSONEncoding` instance with default writing options. - public static var `default`: JSONEncoding { JSONEncoding() } - - /// Returns a `JSONEncoding` instance with `.prettyPrinted` writing options. - public static var prettyPrinted: JSONEncoding { JSONEncoding(options: .prettyPrinted) } - - /// The options for writing the parameters as JSON data. - public let options: JSONSerialization.WritingOptions - - // MARK: Initialization - - /// Creates an instance using the specified `WritingOptions`. - /// - /// - Parameter options: `JSONSerialization.WritingOptions` to use. - public init(options: JSONSerialization.WritingOptions = []) { - self.options = options - } - - // MARK: Encoding - - public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest { - var urlRequest = try urlRequest.asURLRequest() - - guard let parameters = parameters else { return urlRequest } - - guard JSONSerialization.isValidJSONObject(parameters) else { - throw AFError.parameterEncodingFailed(reason: .jsonEncodingFailed(error: Error.invalidJSONObject)) - } - - do { - let data = try JSONSerialization.data(withJSONObject: parameters, options: options) - - if urlRequest.headers["Content-Type"] == nil { - urlRequest.headers.update(.contentType("application/json")) - } - - urlRequest.httpBody = data - } catch { - throw AFError.parameterEncodingFailed(reason: .jsonEncodingFailed(error: error)) - } - - return urlRequest - } - - /// Encodes any JSON compatible object into a `URLRequest`. - /// - /// - Parameters: - /// - urlRequest: `URLRequestConvertible` value into which the object will be encoded. - /// - jsonObject: `Any` value (must be JSON compatible` to be encoded into the `URLRequest`. `nil` by default. - /// - /// - Returns: The encoded `URLRequest`. - /// - Throws: Any `Error` produced during encoding. - public func encode(_ urlRequest: URLRequestConvertible, withJSONObject jsonObject: Any? = nil) throws -> URLRequest { - var urlRequest = try urlRequest.asURLRequest() - - guard let jsonObject = jsonObject else { return urlRequest } - - guard JSONSerialization.isValidJSONObject(jsonObject) else { - throw AFError.parameterEncodingFailed(reason: .jsonEncodingFailed(error: Error.invalidJSONObject)) - } - - do { - let data = try JSONSerialization.data(withJSONObject: jsonObject, options: options) - - if urlRequest.headers["Content-Type"] == nil { - urlRequest.headers.update(.contentType("application/json")) - } - - urlRequest.httpBody = data - } catch { - throw AFError.parameterEncodingFailed(reason: .jsonEncodingFailed(error: error)) - } - - return urlRequest - } -} - -extension JSONEncoding.Error { - public var localizedDescription: String { - """ - Invalid JSON object provided for parameter or object encoding. \ - This is most likely due to a value which can't be represented in Objective-C. - """ - } -} - -// MARK: - - -extension NSNumber { - fileprivate var isBool: Bool { - // Use Obj-C type encoding to check whether the underlying type is a `Bool`, as it's guaranteed as part of - // swift-corelibs-foundation, per [this discussion on the Swift forums](https://forums.swift.org/t/alamofire-on-linux-possible-but-not-release-ready/34553/22). - String(cString: objCType) == "c" - } -} diff --git a/Pods/Alamofire/Source/Protected.swift b/Pods/Alamofire/Source/Protected.swift deleted file mode 100644 index 6756045..0000000 --- a/Pods/Alamofire/Source/Protected.swift +++ /dev/null @@ -1,168 +0,0 @@ -// -// Protected.swift -// -// Copyright (c) 2014-2020 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -private protocol Lock { - func lock() - func unlock() -} - -extension Lock { - /// Executes a closure returning a value while acquiring the lock. - /// - /// - Parameter closure: The closure to run. - /// - /// - Returns: The value the closure generated. - func around(_ closure: () throws -> T) rethrows -> T { - lock(); defer { unlock() } - return try closure() - } - - /// Execute a closure while acquiring the lock. - /// - /// - Parameter closure: The closure to run. - func around(_ closure: () throws -> Void) rethrows { - lock(); defer { unlock() } - try closure() - } -} - -#if canImport(Darwin) -/// An `os_unfair_lock` wrapper. -final class UnfairLock: Lock { - private let unfairLock: os_unfair_lock_t - - init() { - unfairLock = .allocate(capacity: 1) - unfairLock.initialize(to: os_unfair_lock()) - } - - deinit { - unfairLock.deinitialize(count: 1) - unfairLock.deallocate() - } - - fileprivate func lock() { - os_unfair_lock_lock(unfairLock) - } - - fileprivate func unlock() { - os_unfair_lock_unlock(unfairLock) - } -} - -#elseif canImport(Foundation) -extension NSLock: Lock {} -#else -#error("This platform needs a Lock-conforming type without Foundation.") -#endif - -/// A thread-safe wrapper around a value. -@dynamicMemberLookup -final class Protected { - #if canImport(Darwin) - private let lock = UnfairLock() - #elseif canImport(Foundation) - private let lock = NSLock() - #else - #error("This platform needs a Lock-conforming type without Foundation.") - #endif - private var value: Value - - init(_ value: Value) { - self.value = value - } - - /// Synchronously read or transform the contained value. - /// - /// - Parameter closure: The closure to execute. - /// - /// - Returns: The return value of the closure passed. - func read(_ closure: (Value) throws -> U) rethrows -> U { - try lock.around { try closure(self.value) } - } - - /// Synchronously modify the protected value. - /// - /// - Parameter closure: The closure to execute. - /// - /// - Returns: The modified value. - @discardableResult - func write(_ closure: (inout Value) throws -> U) rethrows -> U { - try lock.around { try closure(&self.value) } - } - - /// Synchronously update the protected value. - /// - /// - Parameter value: The `Value`. - func write(_ value: Value) { - write { $0 = value } - } - - subscript(dynamicMember keyPath: WritableKeyPath) -> Property { - get { lock.around { value[keyPath: keyPath] } } - set { lock.around { value[keyPath: keyPath] = newValue } } - } - - subscript(dynamicMember keyPath: KeyPath) -> Property { - lock.around { value[keyPath: keyPath] } - } -} - -extension Protected where Value == Request.MutableState { - /// Attempts to transition to the passed `State`. - /// - /// - Parameter state: The `State` to attempt transition to. - /// - /// - Returns: Whether the transition occurred. - func attemptToTransitionTo(_ state: Request.State) -> Bool { - lock.around { - guard value.state.canTransitionTo(state) else { return false } - - value.state = state - - return true - } - } - - /// Perform a closure while locked with the provided `Request.State`. - /// - /// - Parameter perform: The closure to perform while locked. - func withState(perform: (Request.State) -> Void) { - lock.around { perform(value.state) } - } -} - -extension Protected: Equatable where Value: Equatable { - static func ==(lhs: Protected, rhs: Protected) -> Bool { - lhs.read { left in rhs.read { right in left == right }} - } -} - -extension Protected: Hashable where Value: Hashable { - func hash(into hasher: inout Hasher) { - read { hasher.combine($0) } - } -} diff --git a/Pods/Alamofire/Source/RedirectHandler.swift b/Pods/Alamofire/Source/RedirectHandler.swift deleted file mode 100644 index cf88abf..0000000 --- a/Pods/Alamofire/Source/RedirectHandler.swift +++ /dev/null @@ -1,111 +0,0 @@ -// -// RedirectHandler.swift -// -// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -/// A type that handles how an HTTP redirect response from a remote server should be redirected to the new request. -public protocol RedirectHandler { - /// Determines how the HTTP redirect response should be redirected to the new request. - /// - /// The `completion` closure should be passed one of three possible options: - /// - /// 1. The new request specified by the redirect (this is the most common use case). - /// 2. A modified version of the new request (you may want to route it somewhere else). - /// 3. A `nil` value to deny the redirect request and return the body of the redirect response. - /// - /// - Parameters: - /// - task: The `URLSessionTask` whose request resulted in a redirect. - /// - request: The `URLRequest` to the new location specified by the redirect response. - /// - response: The `HTTPURLResponse` containing the server's response to the original request. - /// - completion: The closure to execute containing the new `URLRequest`, a modified `URLRequest`, or `nil`. - func task(_ task: URLSessionTask, - willBeRedirectedTo request: URLRequest, - for response: HTTPURLResponse, - completion: @escaping (URLRequest?) -> Void) -} - -// MARK: - - -/// `Redirector` is a convenience `RedirectHandler` making it easy to follow, not follow, or modify a redirect. -public struct Redirector { - /// Defines the behavior of the `Redirector` type. - public enum Behavior { - /// Follow the redirect as defined in the response. - case follow - /// Do not follow the redirect defined in the response. - case doNotFollow - /// Modify the redirect request defined in the response. - case modify((URLSessionTask, URLRequest, HTTPURLResponse) -> URLRequest?) - } - - /// Returns a `Redirector` with a `.follow` `Behavior`. - public static let follow = Redirector(behavior: .follow) - /// Returns a `Redirector` with a `.doNotFollow` `Behavior`. - public static let doNotFollow = Redirector(behavior: .doNotFollow) - - /// The `Behavior` of the `Redirector`. - public let behavior: Behavior - - /// Creates a `Redirector` instance from the `Behavior`. - /// - /// - Parameter behavior: The `Behavior`. - public init(behavior: Behavior) { - self.behavior = behavior - } -} - -// MARK: - - -extension Redirector: RedirectHandler { - public func task(_ task: URLSessionTask, - willBeRedirectedTo request: URLRequest, - for response: HTTPURLResponse, - completion: @escaping (URLRequest?) -> Void) { - switch behavior { - case .follow: - completion(request) - case .doNotFollow: - completion(nil) - case let .modify(closure): - let request = closure(task, request, response) - completion(request) - } - } -} - -extension RedirectHandler where Self == Redirector { - /// Provides a `Redirector` which follows redirects. Equivalent to `Redirector.follow`. - public static var follow: Redirector { .follow } - - /// Provides a `Redirector` which does not follow redirects. Equivalent to `Redirector.doNotFollow`. - public static var doNotFollow: Redirector { .doNotFollow } - - /// Creates a `Redirector` which modifies the redirected `URLRequest` using the provided closure. - /// - /// - Parameter closure: Closure used to modify the redirect. - /// - Returns: The `Redirector`. - public static func modify(using closure: @escaping (URLSessionTask, URLRequest, HTTPURLResponse) -> URLRequest?) -> Redirector { - Redirector(behavior: .modify(closure)) - } -} diff --git a/Pods/Alamofire/Source/Request.swift b/Pods/Alamofire/Source/Request.swift deleted file mode 100644 index 55f2a67..0000000 --- a/Pods/Alamofire/Source/Request.swift +++ /dev/null @@ -1,2066 +0,0 @@ -// -// Request.swift -// -// Copyright (c) 2014-2020 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -/// `Request` is the common superclass of all Alamofire request types and provides common state, delegate, and callback -/// handling. -public class Request { - /// State of the `Request`, with managed transitions between states set when calling `resume()`, `suspend()`, or - /// `cancel()` on the `Request`. - public enum State { - /// Initial state of the `Request`. - case initialized - /// `State` set when `resume()` is called. Any tasks created for the `Request` will have `resume()` called on - /// them in this state. - case resumed - /// `State` set when `suspend()` is called. Any tasks created for the `Request` will have `suspend()` called on - /// them in this state. - case suspended - /// `State` set when `cancel()` is called. Any tasks created for the `Request` will have `cancel()` called on - /// them. Unlike `resumed` or `suspended`, once in the `cancelled` state, the `Request` can no longer transition - /// to any other state. - case cancelled - /// `State` set when all response serialization completion closures have been cleared on the `Request` and - /// enqueued on their respective queues. - case finished - - /// Determines whether `self` can be transitioned to the provided `State`. - func canTransitionTo(_ state: State) -> Bool { - switch (self, state) { - case (.initialized, _): - return true - case (_, .initialized), (.cancelled, _), (.finished, _): - return false - case (.resumed, .cancelled), (.suspended, .cancelled), (.resumed, .suspended), (.suspended, .resumed): - return true - case (.suspended, .suspended), (.resumed, .resumed): - return false - case (_, .finished): - return true - } - } - } - - // MARK: - Initial State - - /// `UUID` providing a unique identifier for the `Request`, used in the `Hashable` and `Equatable` conformances. - public let id: UUID - /// The serial queue for all internal async actions. - public let underlyingQueue: DispatchQueue - /// The queue used for all serialization actions. By default it's a serial queue that targets `underlyingQueue`. - public let serializationQueue: DispatchQueue - /// `EventMonitor` used for event callbacks. - public let eventMonitor: EventMonitor? - /// The `Request`'s interceptor. - public let interceptor: RequestInterceptor? - /// The `Request`'s delegate. - public private(set) weak var delegate: RequestDelegate? - - // MARK: - Mutable State - - /// Type encapsulating all mutable state that may need to be accessed from anything other than the `underlyingQueue`. - struct MutableState { - /// State of the `Request`. - var state: State = .initialized - /// `ProgressHandler` and `DispatchQueue` provided for upload progress callbacks. - var uploadProgressHandler: (handler: ProgressHandler, queue: DispatchQueue)? - /// `ProgressHandler` and `DispatchQueue` provided for download progress callbacks. - var downloadProgressHandler: (handler: ProgressHandler, queue: DispatchQueue)? - /// `RedirectHandler` provided for to handle request redirection. - var redirectHandler: RedirectHandler? - /// `CachedResponseHandler` provided to handle response caching. - var cachedResponseHandler: CachedResponseHandler? - /// Queue and closure called when the `Request` is able to create a cURL description of itself. - var cURLHandler: (queue: DispatchQueue, handler: (String) -> Void)? - /// Queue and closure called when the `Request` creates a `URLRequest`. - var urlRequestHandler: (queue: DispatchQueue, handler: (URLRequest) -> Void)? - /// Queue and closure called when the `Request` creates a `URLSessionTask`. - var urlSessionTaskHandler: (queue: DispatchQueue, handler: (URLSessionTask) -> Void)? - /// Response serialization closures that handle response parsing. - var responseSerializers: [() -> Void] = [] - /// Response serialization completion closures executed once all response serializers are complete. - var responseSerializerCompletions: [() -> Void] = [] - /// Whether response serializer processing is finished. - var responseSerializerProcessingFinished = false - /// `URLCredential` used for authentication challenges. - var credential: URLCredential? - /// All `URLRequest`s created by Alamofire on behalf of the `Request`. - var requests: [URLRequest] = [] - /// All `URLSessionTask`s created by Alamofire on behalf of the `Request`. - var tasks: [URLSessionTask] = [] - /// All `URLSessionTaskMetrics` values gathered by Alamofire on behalf of the `Request`. Should correspond - /// exactly the the `tasks` created. - var metrics: [URLSessionTaskMetrics] = [] - /// Number of times any retriers provided retried the `Request`. - var retryCount = 0 - /// Final `AFError` for the `Request`, whether from various internal Alamofire calls or as a result of a `task`. - var error: AFError? - /// Whether the instance has had `finish()` called and is running the serializers. Should be replaced with a - /// representation in the state machine in the future. - var isFinishing = false - /// Actions to run when requests are finished. Use for concurrency support. - var finishHandlers: [() -> Void] = [] - } - - /// Protected `MutableState` value that provides thread-safe access to state values. - fileprivate let mutableState = Protected(MutableState()) - - /// `State` of the `Request`. - public var state: State { mutableState.state } - /// Returns whether `state` is `.initialized`. - public var isInitialized: Bool { state == .initialized } - /// Returns whether `state is `.resumed`. - public var isResumed: Bool { state == .resumed } - /// Returns whether `state` is `.suspended`. - public var isSuspended: Bool { state == .suspended } - /// Returns whether `state` is `.cancelled`. - public var isCancelled: Bool { state == .cancelled } - /// Returns whether `state` is `.finished`. - public var isFinished: Bool { state == .finished } - - // MARK: Progress - - /// Closure type executed when monitoring the upload or download progress of a request. - public typealias ProgressHandler = (Progress) -> Void - - /// `Progress` of the upload of the body of the executed `URLRequest`. Reset to `0` if the `Request` is retried. - public let uploadProgress = Progress(totalUnitCount: 0) - /// `Progress` of the download of any response data. Reset to `0` if the `Request` is retried. - public let downloadProgress = Progress(totalUnitCount: 0) - /// `ProgressHandler` called when `uploadProgress` is updated, on the provided `DispatchQueue`. - private var uploadProgressHandler: (handler: ProgressHandler, queue: DispatchQueue)? { - get { mutableState.uploadProgressHandler } - set { mutableState.uploadProgressHandler = newValue } - } - - /// `ProgressHandler` called when `downloadProgress` is updated, on the provided `DispatchQueue`. - fileprivate var downloadProgressHandler: (handler: ProgressHandler, queue: DispatchQueue)? { - get { mutableState.downloadProgressHandler } - set { mutableState.downloadProgressHandler = newValue } - } - - // MARK: Redirect Handling - - /// `RedirectHandler` set on the instance. - public private(set) var redirectHandler: RedirectHandler? { - get { mutableState.redirectHandler } - set { mutableState.redirectHandler = newValue } - } - - // MARK: Cached Response Handling - - /// `CachedResponseHandler` set on the instance. - public private(set) var cachedResponseHandler: CachedResponseHandler? { - get { mutableState.cachedResponseHandler } - set { mutableState.cachedResponseHandler = newValue } - } - - // MARK: URLCredential - - /// `URLCredential` used for authentication challenges. Created by calling one of the `authenticate` methods. - public private(set) var credential: URLCredential? { - get { mutableState.credential } - set { mutableState.credential = newValue } - } - - // MARK: Validators - - /// `Validator` callback closures that store the validation calls enqueued. - fileprivate let validators = Protected<[() -> Void]>([]) - - // MARK: URLRequests - - /// All `URLRequests` created on behalf of the `Request`, including original and adapted requests. - public var requests: [URLRequest] { mutableState.requests } - /// First `URLRequest` created on behalf of the `Request`. May not be the first one actually executed. - public var firstRequest: URLRequest? { requests.first } - /// Last `URLRequest` created on behalf of the `Request`. - public var lastRequest: URLRequest? { requests.last } - /// Current `URLRequest` created on behalf of the `Request`. - public var request: URLRequest? { lastRequest } - - /// `URLRequest`s from all of the `URLSessionTask`s executed on behalf of the `Request`. May be different from - /// `requests` due to `URLSession` manipulation. - public var performedRequests: [URLRequest] { mutableState.read { $0.tasks.compactMap(\.currentRequest) } } - - // MARK: HTTPURLResponse - - /// `HTTPURLResponse` received from the server, if any. If the `Request` was retried, this is the response of the - /// last `URLSessionTask`. - public var response: HTTPURLResponse? { lastTask?.response as? HTTPURLResponse } - - // MARK: Tasks - - /// All `URLSessionTask`s created on behalf of the `Request`. - public var tasks: [URLSessionTask] { mutableState.tasks } - /// First `URLSessionTask` created on behalf of the `Request`. - public var firstTask: URLSessionTask? { tasks.first } - /// Last `URLSessionTask` created on behalf of the `Request`. - public var lastTask: URLSessionTask? { tasks.last } - /// Current `URLSessionTask` created on behalf of the `Request`. - public var task: URLSessionTask? { lastTask } - - // MARK: Metrics - - /// All `URLSessionTaskMetrics` gathered on behalf of the `Request`. Should correspond to the `tasks` created. - public var allMetrics: [URLSessionTaskMetrics] { mutableState.metrics } - /// First `URLSessionTaskMetrics` gathered on behalf of the `Request`. - public var firstMetrics: URLSessionTaskMetrics? { allMetrics.first } - /// Last `URLSessionTaskMetrics` gathered on behalf of the `Request`. - public var lastMetrics: URLSessionTaskMetrics? { allMetrics.last } - /// Current `URLSessionTaskMetrics` gathered on behalf of the `Request`. - public var metrics: URLSessionTaskMetrics? { lastMetrics } - - // MARK: Retry Count - - /// Number of times the `Request` has been retried. - public var retryCount: Int { mutableState.retryCount } - - // MARK: Error - - /// `Error` returned from Alamofire internally, from the network request directly, or any validators executed. - public fileprivate(set) var error: AFError? { - get { mutableState.error } - set { mutableState.error = newValue } - } - - /// Default initializer for the `Request` superclass. - /// - /// - Parameters: - /// - id: `UUID` used for the `Hashable` and `Equatable` implementations. `UUID()` by default. - /// - underlyingQueue: `DispatchQueue` on which all internal `Request` work is performed. - /// - serializationQueue: `DispatchQueue` on which all serialization work is performed. By default targets - /// `underlyingQueue`, but can be passed another queue from a `Session`. - /// - eventMonitor: `EventMonitor` called for event callbacks from internal `Request` actions. - /// - interceptor: `RequestInterceptor` used throughout the request lifecycle. - /// - delegate: `RequestDelegate` that provides an interface to actions not performed by the `Request`. - init(id: UUID = UUID(), - underlyingQueue: DispatchQueue, - serializationQueue: DispatchQueue, - eventMonitor: EventMonitor?, - interceptor: RequestInterceptor?, - delegate: RequestDelegate) { - self.id = id - self.underlyingQueue = underlyingQueue - self.serializationQueue = serializationQueue - self.eventMonitor = eventMonitor - self.interceptor = interceptor - self.delegate = delegate - } - - // MARK: - Internal Event API - - // All API must be called from underlyingQueue. - - /// Called when an initial `URLRequest` has been created on behalf of the instance. If a `RequestAdapter` is active, - /// the `URLRequest` will be adapted before being issued. - /// - /// - Parameter request: The `URLRequest` created. - func didCreateInitialURLRequest(_ request: URLRequest) { - dispatchPrecondition(condition: .onQueue(underlyingQueue)) - - mutableState.write { $0.requests.append(request) } - - eventMonitor?.request(self, didCreateInitialURLRequest: request) - } - - /// Called when initial `URLRequest` creation has failed, typically through a `URLRequestConvertible`. - /// - /// - Note: Triggers retry. - /// - /// - Parameter error: `AFError` thrown from the failed creation. - func didFailToCreateURLRequest(with error: AFError) { - dispatchPrecondition(condition: .onQueue(underlyingQueue)) - - self.error = error - - eventMonitor?.request(self, didFailToCreateURLRequestWithError: error) - - callCURLHandlerIfNecessary() - - retryOrFinish(error: error) - } - - /// Called when a `RequestAdapter` has successfully adapted a `URLRequest`. - /// - /// - Parameters: - /// - initialRequest: The `URLRequest` that was adapted. - /// - adaptedRequest: The `URLRequest` returned by the `RequestAdapter`. - func didAdaptInitialRequest(_ initialRequest: URLRequest, to adaptedRequest: URLRequest) { - dispatchPrecondition(condition: .onQueue(underlyingQueue)) - - mutableState.write { $0.requests.append(adaptedRequest) } - - eventMonitor?.request(self, didAdaptInitialRequest: initialRequest, to: adaptedRequest) - } - - /// Called when a `RequestAdapter` fails to adapt a `URLRequest`. - /// - /// - Note: Triggers retry. - /// - /// - Parameters: - /// - request: The `URLRequest` the adapter was called with. - /// - error: The `AFError` returned by the `RequestAdapter`. - func didFailToAdaptURLRequest(_ request: URLRequest, withError error: AFError) { - dispatchPrecondition(condition: .onQueue(underlyingQueue)) - - self.error = error - - eventMonitor?.request(self, didFailToAdaptURLRequest: request, withError: error) - - callCURLHandlerIfNecessary() - - retryOrFinish(error: error) - } - - /// Final `URLRequest` has been created for the instance. - /// - /// - Parameter request: The `URLRequest` created. - func didCreateURLRequest(_ request: URLRequest) { - dispatchPrecondition(condition: .onQueue(underlyingQueue)) - - mutableState.read { state in - state.urlRequestHandler?.queue.async { state.urlRequestHandler?.handler(request) } - } - - eventMonitor?.request(self, didCreateURLRequest: request) - - callCURLHandlerIfNecessary() - } - - /// Asynchronously calls any stored `cURLHandler` and then removes it from `mutableState`. - private func callCURLHandlerIfNecessary() { - mutableState.write { mutableState in - guard let cURLHandler = mutableState.cURLHandler else { return } - - cURLHandler.queue.async { cURLHandler.handler(self.cURLDescription()) } - - mutableState.cURLHandler = nil - } - } - - /// Called when a `URLSessionTask` is created on behalf of the instance. - /// - /// - Parameter task: The `URLSessionTask` created. - func didCreateTask(_ task: URLSessionTask) { - dispatchPrecondition(condition: .onQueue(underlyingQueue)) - - mutableState.write { state in - state.tasks.append(task) - - guard let urlSessionTaskHandler = state.urlSessionTaskHandler else { return } - - urlSessionTaskHandler.queue.async { urlSessionTaskHandler.handler(task) } - } - - eventMonitor?.request(self, didCreateTask: task) - } - - /// Called when resumption is completed. - func didResume() { - dispatchPrecondition(condition: .onQueue(underlyingQueue)) - - eventMonitor?.requestDidResume(self) - } - - /// Called when a `URLSessionTask` is resumed on behalf of the instance. - /// - /// - Parameter task: The `URLSessionTask` resumed. - func didResumeTask(_ task: URLSessionTask) { - dispatchPrecondition(condition: .onQueue(underlyingQueue)) - - eventMonitor?.request(self, didResumeTask: task) - } - - /// Called when suspension is completed. - func didSuspend() { - dispatchPrecondition(condition: .onQueue(underlyingQueue)) - - eventMonitor?.requestDidSuspend(self) - } - - /// Called when a `URLSessionTask` is suspended on behalf of the instance. - /// - /// - Parameter task: The `URLSessionTask` suspended. - func didSuspendTask(_ task: URLSessionTask) { - dispatchPrecondition(condition: .onQueue(underlyingQueue)) - - eventMonitor?.request(self, didSuspendTask: task) - } - - /// Called when cancellation is completed, sets `error` to `AFError.explicitlyCancelled`. - func didCancel() { - dispatchPrecondition(condition: .onQueue(underlyingQueue)) - - mutableState.write { mutableState in - mutableState.error = mutableState.error ?? AFError.explicitlyCancelled - } - - eventMonitor?.requestDidCancel(self) - } - - /// Called when a `URLSessionTask` is cancelled on behalf of the instance. - /// - /// - Parameter task: The `URLSessionTask` cancelled. - func didCancelTask(_ task: URLSessionTask) { - dispatchPrecondition(condition: .onQueue(underlyingQueue)) - - eventMonitor?.request(self, didCancelTask: task) - } - - /// Called when a `URLSessionTaskMetrics` value is gathered on behalf of the instance. - /// - /// - Parameter metrics: The `URLSessionTaskMetrics` gathered. - func didGatherMetrics(_ metrics: URLSessionTaskMetrics) { - dispatchPrecondition(condition: .onQueue(underlyingQueue)) - - mutableState.write { $0.metrics.append(metrics) } - - eventMonitor?.request(self, didGatherMetrics: metrics) - } - - /// Called when a `URLSessionTask` fails before it is finished, typically during certificate pinning. - /// - /// - Parameters: - /// - task: The `URLSessionTask` which failed. - /// - error: The early failure `AFError`. - func didFailTask(_ task: URLSessionTask, earlyWithError error: AFError) { - dispatchPrecondition(condition: .onQueue(underlyingQueue)) - - self.error = error - - // Task will still complete, so didCompleteTask(_:with:) will handle retry. - eventMonitor?.request(self, didFailTask: task, earlyWithError: error) - } - - /// Called when a `URLSessionTask` completes. All tasks will eventually call this method. - /// - /// - Note: Response validation is synchronously triggered in this step. - /// - /// - Parameters: - /// - task: The `URLSessionTask` which completed. - /// - error: The `AFError` `task` may have completed with. If `error` has already been set on the instance, this - /// value is ignored. - func didCompleteTask(_ task: URLSessionTask, with error: AFError?) { - dispatchPrecondition(condition: .onQueue(underlyingQueue)) - - self.error = self.error ?? error - - let validators = validators.read { $0 } - validators.forEach { $0() } - - eventMonitor?.request(self, didCompleteTask: task, with: error) - - retryOrFinish(error: self.error) - } - - /// Called when the `RequestDelegate` is going to retry this `Request`. Calls `reset()`. - func prepareForRetry() { - dispatchPrecondition(condition: .onQueue(underlyingQueue)) - - mutableState.write { $0.retryCount += 1 } - - reset() - - eventMonitor?.requestIsRetrying(self) - } - - /// Called to determine whether retry will be triggered for the particular error, or whether the instance should - /// call `finish()`. - /// - /// - Parameter error: The possible `AFError` which may trigger retry. - func retryOrFinish(error: AFError?) { - dispatchPrecondition(condition: .onQueue(underlyingQueue)) - - guard !isCancelled, let error = error, let delegate = delegate else { finish(); return } - - delegate.retryResult(for: self, dueTo: error) { retryResult in - switch retryResult { - case .doNotRetry: - self.finish() - case let .doNotRetryWithError(retryError): - self.finish(error: retryError.asAFError(orFailWith: "Received retryError was not already AFError")) - case .retry, .retryWithDelay: - delegate.retryRequest(self, withDelay: retryResult.delay) - } - } - } - - /// Finishes this `Request` and starts the response serializers. - /// - /// - Parameter error: The possible `Error` with which the instance will finish. - func finish(error: AFError? = nil) { - dispatchPrecondition(condition: .onQueue(underlyingQueue)) - - guard !mutableState.isFinishing else { return } - - mutableState.isFinishing = true - - if let error = error { self.error = error } - - // Start response handlers - processNextResponseSerializer() - - eventMonitor?.requestDidFinish(self) - } - - /// Appends the response serialization closure to the instance. - /// - /// - Note: This method will also `resume` the instance if `delegate.startImmediately` returns `true`. - /// - /// - Parameter closure: The closure containing the response serialization call. - func appendResponseSerializer(_ closure: @escaping () -> Void) { - mutableState.write { mutableState in - mutableState.responseSerializers.append(closure) - - if mutableState.state == .finished { - mutableState.state = .resumed - } - - if mutableState.responseSerializerProcessingFinished { - underlyingQueue.async { self.processNextResponseSerializer() } - } - - if mutableState.state.canTransitionTo(.resumed) { - underlyingQueue.async { if self.delegate?.startImmediately == true { self.resume() } } - } - } - } - - /// Returns the next response serializer closure to execute if there's one left. - /// - /// - Returns: The next response serialization closure, if there is one. - func nextResponseSerializer() -> (() -> Void)? { - var responseSerializer: (() -> Void)? - - mutableState.write { mutableState in - let responseSerializerIndex = mutableState.responseSerializerCompletions.count - - if responseSerializerIndex < mutableState.responseSerializers.count { - responseSerializer = mutableState.responseSerializers[responseSerializerIndex] - } - } - - return responseSerializer - } - - /// Processes the next response serializer and calls all completions if response serialization is complete. - func processNextResponseSerializer() { - guard let responseSerializer = nextResponseSerializer() else { - // Execute all response serializer completions and clear them - var completions: [() -> Void] = [] - - mutableState.write { mutableState in - completions = mutableState.responseSerializerCompletions - - // Clear out all response serializers and response serializer completions in mutable state since the - // request is complete. It's important to do this prior to calling the completion closures in case - // the completions call back into the request triggering a re-processing of the response serializers. - // An example of how this can happen is by calling cancel inside a response completion closure. - mutableState.responseSerializers.removeAll() - mutableState.responseSerializerCompletions.removeAll() - - if mutableState.state.canTransitionTo(.finished) { - mutableState.state = .finished - } - - mutableState.responseSerializerProcessingFinished = true - mutableState.isFinishing = false - } - - completions.forEach { $0() } - - // Cleanup the request - cleanup() - - return - } - - serializationQueue.async { responseSerializer() } - } - - /// Notifies the `Request` that the response serializer is complete. - /// - /// - Parameter completion: The completion handler provided with the response serializer, called when all serializers - /// are complete. - func responseSerializerDidComplete(completion: @escaping () -> Void) { - mutableState.write { $0.responseSerializerCompletions.append(completion) } - processNextResponseSerializer() - } - - /// Resets all task and response serializer related state for retry. - func reset() { - error = nil - - uploadProgress.totalUnitCount = 0 - uploadProgress.completedUnitCount = 0 - downloadProgress.totalUnitCount = 0 - downloadProgress.completedUnitCount = 0 - - mutableState.write { state in - state.isFinishing = false - state.responseSerializerCompletions = [] - } - } - - /// Called when updating the upload progress. - /// - /// - Parameters: - /// - totalBytesSent: Total bytes sent so far. - /// - totalBytesExpectedToSend: Total bytes expected to send. - func updateUploadProgress(totalBytesSent: Int64, totalBytesExpectedToSend: Int64) { - uploadProgress.totalUnitCount = totalBytesExpectedToSend - uploadProgress.completedUnitCount = totalBytesSent - - uploadProgressHandler?.queue.async { self.uploadProgressHandler?.handler(self.uploadProgress) } - } - - /// Perform a closure on the current `state` while locked. - /// - /// - Parameter perform: The closure to perform. - func withState(perform: (State) -> Void) { - mutableState.withState(perform: perform) - } - - // MARK: Task Creation - - /// Called when creating a `URLSessionTask` for this `Request`. Subclasses must override. - /// - /// - Parameters: - /// - request: `URLRequest` to use to create the `URLSessionTask`. - /// - session: `URLSession` which creates the `URLSessionTask`. - /// - /// - Returns: The `URLSessionTask` created. - func task(for request: URLRequest, using session: URLSession) -> URLSessionTask { - fatalError("Subclasses must override.") - } - - // MARK: - Public API - - // These APIs are callable from any queue. - - // MARK: State - - /// Cancels the instance. Once cancelled, a `Request` can no longer be resumed or suspended. - /// - /// - Returns: The instance. - @discardableResult - public func cancel() -> Self { - mutableState.write { mutableState in - guard mutableState.state.canTransitionTo(.cancelled) else { return } - - mutableState.state = .cancelled - - underlyingQueue.async { self.didCancel() } - - guard let task = mutableState.tasks.last, task.state != .completed else { - underlyingQueue.async { self.finish() } - return - } - - // Resume to ensure metrics are gathered. - task.resume() - task.cancel() - underlyingQueue.async { self.didCancelTask(task) } - } - - return self - } - - /// Suspends the instance. - /// - /// - Returns: The instance. - @discardableResult - public func suspend() -> Self { - mutableState.write { mutableState in - guard mutableState.state.canTransitionTo(.suspended) else { return } - - mutableState.state = .suspended - - underlyingQueue.async { self.didSuspend() } - - guard let task = mutableState.tasks.last, task.state != .completed else { return } - - task.suspend() - underlyingQueue.async { self.didSuspendTask(task) } - } - - return self - } - - /// Resumes the instance. - /// - /// - Returns: The instance. - @discardableResult - public func resume() -> Self { - mutableState.write { mutableState in - guard mutableState.state.canTransitionTo(.resumed) else { return } - - mutableState.state = .resumed - - underlyingQueue.async { self.didResume() } - - guard let task = mutableState.tasks.last, task.state != .completed else { return } - - task.resume() - underlyingQueue.async { self.didResumeTask(task) } - } - - return self - } - - // MARK: - Closure API - - /// Associates a credential using the provided values with the instance. - /// - /// - Parameters: - /// - username: The username. - /// - password: The password. - /// - persistence: The `URLCredential.Persistence` for the created `URLCredential`. `.forSession` by default. - /// - /// - Returns: The instance. - @discardableResult - public func authenticate(username: String, password: String, persistence: URLCredential.Persistence = .forSession) -> Self { - let credential = URLCredential(user: username, password: password, persistence: persistence) - - return authenticate(with: credential) - } - - /// Associates the provided credential with the instance. - /// - /// - Parameter credential: The `URLCredential`. - /// - /// - Returns: The instance. - @discardableResult - public func authenticate(with credential: URLCredential) -> Self { - mutableState.credential = credential - - return self - } - - /// Sets a closure to be called periodically during the lifecycle of the instance as data is read from the server. - /// - /// - Note: Only the last closure provided is used. - /// - /// - Parameters: - /// - queue: The `DispatchQueue` to execute the closure on. `.main` by default. - /// - closure: The closure to be executed periodically as data is read from the server. - /// - /// - Returns: The instance. - @discardableResult - public func downloadProgress(queue: DispatchQueue = .main, closure: @escaping ProgressHandler) -> Self { - mutableState.downloadProgressHandler = (handler: closure, queue: queue) - - return self - } - - /// Sets a closure to be called periodically during the lifecycle of the instance as data is sent to the server. - /// - /// - Note: Only the last closure provided is used. - /// - /// - Parameters: - /// - queue: The `DispatchQueue` to execute the closure on. `.main` by default. - /// - closure: The closure to be executed periodically as data is sent to the server. - /// - /// - Returns: The instance. - @discardableResult - public func uploadProgress(queue: DispatchQueue = .main, closure: @escaping ProgressHandler) -> Self { - mutableState.uploadProgressHandler = (handler: closure, queue: queue) - - return self - } - - // MARK: Redirects - - /// Sets the redirect handler for the instance which will be used if a redirect response is encountered. - /// - /// - Note: Attempting to set the redirect handler more than once is a logic error and will crash. - /// - /// - Parameter handler: The `RedirectHandler`. - /// - /// - Returns: The instance. - @discardableResult - public func redirect(using handler: RedirectHandler) -> Self { - mutableState.write { mutableState in - precondition(mutableState.redirectHandler == nil, "Redirect handler has already been set.") - mutableState.redirectHandler = handler - } - - return self - } - - // MARK: Cached Responses - - /// Sets the cached response handler for the `Request` which will be used when attempting to cache a response. - /// - /// - Note: Attempting to set the cache handler more than once is a logic error and will crash. - /// - /// - Parameter handler: The `CachedResponseHandler`. - /// - /// - Returns: The instance. - @discardableResult - public func cacheResponse(using handler: CachedResponseHandler) -> Self { - mutableState.write { mutableState in - precondition(mutableState.cachedResponseHandler == nil, "Cached response handler has already been set.") - mutableState.cachedResponseHandler = handler - } - - return self - } - - // MARK: - Lifetime APIs - - /// Sets a handler to be called when the cURL description of the request is available. - /// - /// - Note: When waiting for a `Request`'s `URLRequest` to be created, only the last `handler` will be called. - /// - /// - Parameters: - /// - queue: `DispatchQueue` on which `handler` will be called. - /// - handler: Closure to be called when the cURL description is available. - /// - /// - Returns: The instance. - @discardableResult - public func cURLDescription(on queue: DispatchQueue, calling handler: @escaping (String) -> Void) -> Self { - mutableState.write { mutableState in - if mutableState.requests.last != nil { - queue.async { handler(self.cURLDescription()) } - } else { - mutableState.cURLHandler = (queue, handler) - } - } - - return self - } - - /// Sets a handler to be called when the cURL description of the request is available. - /// - /// - Note: When waiting for a `Request`'s `URLRequest` to be created, only the last `handler` will be called. - /// - /// - Parameter handler: Closure to be called when the cURL description is available. Called on the instance's - /// `underlyingQueue` by default. - /// - /// - Returns: The instance. - @discardableResult - public func cURLDescription(calling handler: @escaping (String) -> Void) -> Self { - cURLDescription(on: underlyingQueue, calling: handler) - - return self - } - - /// Sets a closure to called whenever Alamofire creates a `URLRequest` for this instance. - /// - /// - Note: This closure will be called multiple times if the instance adapts incoming `URLRequest`s or is retried. - /// - /// - Parameters: - /// - queue: `DispatchQueue` on which `handler` will be called. `.main` by default. - /// - handler: Closure to be called when a `URLRequest` is available. - /// - /// - Returns: The instance. - @discardableResult - public func onURLRequestCreation(on queue: DispatchQueue = .main, perform handler: @escaping (URLRequest) -> Void) -> Self { - mutableState.write { state in - if let request = state.requests.last { - queue.async { handler(request) } - } - - state.urlRequestHandler = (queue, handler) - } - - return self - } - - /// Sets a closure to be called whenever the instance creates a `URLSessionTask`. - /// - /// - Note: This API should only be used to provide `URLSessionTask`s to existing API, like `NSFileProvider`. It - /// **SHOULD NOT** be used to interact with tasks directly, as that may be break Alamofire features. - /// Additionally, this closure may be called multiple times if the instance is retried. - /// - /// - Parameters: - /// - queue: `DispatchQueue` on which `handler` will be called. `.main` by default. - /// - handler: Closure to be called when the `URLSessionTask` is available. - /// - /// - Returns: The instance. - @discardableResult - public func onURLSessionTaskCreation(on queue: DispatchQueue = .main, perform handler: @escaping (URLSessionTask) -> Void) -> Self { - mutableState.write { state in - if let task = state.tasks.last { - queue.async { handler(task) } - } - - state.urlSessionTaskHandler = (queue, handler) - } - - return self - } - - // MARK: Cleanup - - /// Adds a `finishHandler` closure to be called when the request completes. - /// - /// - Parameter closure: Closure to be called when the request finishes. - func onFinish(perform finishHandler: @escaping () -> Void) { - guard !isFinished else { finishHandler(); return } - - mutableState.write { state in - state.finishHandlers.append(finishHandler) - } - } - - /// Final cleanup step executed when the instance finishes response serialization. - func cleanup() { - let handlers = mutableState.finishHandlers - handlers.forEach { $0() } - mutableState.write { state in - state.finishHandlers.removeAll() - } - - delegate?.cleanup(after: self) - } -} - -extension Request { - /// Type indicating how a `DataRequest` or `DataStreamRequest` should proceed after receiving an `HTTPURLResponse`. - public enum ResponseDisposition { - /// Allow the request to continue normally. - case allow - /// Cancel the request, similar to calling `cancel()`. - case cancel - - var sessionDisposition: URLSession.ResponseDisposition { - switch self { - case .allow: return .allow - case .cancel: return .cancel - } - } - } -} - -// MARK: - Protocol Conformances - -extension Request: Equatable { - public static func ==(lhs: Request, rhs: Request) -> Bool { - lhs.id == rhs.id - } -} - -extension Request: Hashable { - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } -} - -extension Request: CustomStringConvertible { - /// A textual representation of this instance, including the `HTTPMethod` and `URL` if the `URLRequest` has been - /// created, as well as the response status code, if a response has been received. - public var description: String { - guard let request = performedRequests.last ?? lastRequest, - let url = request.url, - let method = request.httpMethod else { return "No request created yet." } - - let requestDescription = "\(method) \(url.absoluteString)" - - return response.map { "\(requestDescription) (\($0.statusCode))" } ?? requestDescription - } -} - -extension Request { - /// cURL representation of the instance. - /// - /// - Returns: The cURL equivalent of the instance. - public func cURLDescription() -> String { - guard - let request = lastRequest, - let url = request.url, - let host = url.host, - let method = request.httpMethod else { return "$ curl command could not be created" } - - var components = ["$ curl -v"] - - components.append("-X \(method)") - - if let credentialStorage = delegate?.sessionConfiguration.urlCredentialStorage { - let protectionSpace = URLProtectionSpace(host: host, - port: url.port ?? 0, - protocol: url.scheme, - realm: host, - authenticationMethod: NSURLAuthenticationMethodHTTPBasic) - - if let credentials = credentialStorage.credentials(for: protectionSpace)?.values { - for credential in credentials { - guard let user = credential.user, let password = credential.password else { continue } - components.append("-u \(user):\(password)") - } - } else { - if let credential = credential, let user = credential.user, let password = credential.password { - components.append("-u \(user):\(password)") - } - } - } - - if let configuration = delegate?.sessionConfiguration, configuration.httpShouldSetCookies { - if - let cookieStorage = configuration.httpCookieStorage, - let cookies = cookieStorage.cookies(for: url), !cookies.isEmpty { - let allCookies = cookies.map { "\($0.name)=\($0.value)" }.joined(separator: ";") - - components.append("-b \"\(allCookies)\"") - } - } - - var headers = HTTPHeaders() - - if let sessionHeaders = delegate?.sessionConfiguration.headers { - for header in sessionHeaders where header.name != "Cookie" { - headers[header.name] = header.value - } - } - - for header in request.headers where header.name != "Cookie" { - headers[header.name] = header.value - } - - for header in headers { - let escapedValue = header.value.replacingOccurrences(of: "\"", with: "\\\"") - components.append("-H \"\(header.name): \(escapedValue)\"") - } - - if let httpBodyData = request.httpBody { - let httpBody = String(decoding: httpBodyData, as: UTF8.self) - var escapedBody = httpBody.replacingOccurrences(of: "\\\"", with: "\\\\\"") - escapedBody = escapedBody.replacingOccurrences(of: "\"", with: "\\\"") - - components.append("-d \"\(escapedBody)\"") - } - - components.append("\"\(url.absoluteString)\"") - - return components.joined(separator: " \\\n\t") - } -} - -/// Protocol abstraction for `Request`'s communication back to the `SessionDelegate`. -public protocol RequestDelegate: AnyObject { - /// `URLSessionConfiguration` used to create the underlying `URLSessionTask`s. - var sessionConfiguration: URLSessionConfiguration { get } - - /// Determines whether the `Request` should automatically call `resume()` when adding the first response handler. - var startImmediately: Bool { get } - - /// Notifies the delegate the `Request` has reached a point where it needs cleanup. - /// - /// - Parameter request: The `Request` to cleanup after. - func cleanup(after request: Request) - - /// Asynchronously ask the delegate whether a `Request` will be retried. - /// - /// - Parameters: - /// - request: `Request` which failed. - /// - error: `Error` which produced the failure. - /// - completion: Closure taking the `RetryResult` for evaluation. - func retryResult(for request: Request, dueTo error: AFError, completion: @escaping (RetryResult) -> Void) - - /// Asynchronously retry the `Request`. - /// - /// - Parameters: - /// - request: `Request` which will be retried. - /// - timeDelay: `TimeInterval` after which the retry will be triggered. - func retryRequest(_ request: Request, withDelay timeDelay: TimeInterval?) -} - -// MARK: - Subclasses - -// MARK: - DataRequest - -/// `Request` subclass which handles in-memory `Data` download using `URLSessionDataTask`. -public class DataRequest: Request { - /// `URLRequestConvertible` value used to create `URLRequest`s for this instance. - public let convertible: URLRequestConvertible - /// `Data` read from the server so far. - public var data: Data? { dataMutableState.data } - - private struct DataMutableState { - var data: Data? - var httpResponseHandler: (queue: DispatchQueue, - handler: (_ response: HTTPURLResponse, - _ completionHandler: @escaping (ResponseDisposition) -> Void) -> Void)? - } - - private let dataMutableState = Protected(DataMutableState()) - - /// Creates a `DataRequest` using the provided parameters. - /// - /// - Parameters: - /// - id: `UUID` used for the `Hashable` and `Equatable` implementations. `UUID()` by default. - /// - convertible: `URLRequestConvertible` value used to create `URLRequest`s for this instance. - /// - underlyingQueue: `DispatchQueue` on which all internal `Request` work is performed. - /// - serializationQueue: `DispatchQueue` on which all serialization work is performed. By default targets - /// `underlyingQueue`, but can be passed another queue from a `Session`. - /// - eventMonitor: `EventMonitor` called for event callbacks from internal `Request` actions. - /// - interceptor: `RequestInterceptor` used throughout the request lifecycle. - /// - delegate: `RequestDelegate` that provides an interface to actions not performed by the `Request`. - init(id: UUID = UUID(), - convertible: URLRequestConvertible, - underlyingQueue: DispatchQueue, - serializationQueue: DispatchQueue, - eventMonitor: EventMonitor?, - interceptor: RequestInterceptor?, - delegate: RequestDelegate) { - self.convertible = convertible - - super.init(id: id, - underlyingQueue: underlyingQueue, - serializationQueue: serializationQueue, - eventMonitor: eventMonitor, - interceptor: interceptor, - delegate: delegate) - } - - override func reset() { - super.reset() - - dataMutableState.write { mutableState in - mutableState.data = nil - } - } - - /// Called when `Data` is received by this instance. - /// - /// - Note: Also calls `updateDownloadProgress`. - /// - /// - Parameter data: The `Data` received. - func didReceive(data: Data) { - dataMutableState.write { mutableState in - if mutableState.data == nil { - mutableState.data = data - } else { - mutableState.data?.append(data) - } - } - - updateDownloadProgress() - } - - func didReceiveResponse(_ response: HTTPURLResponse, completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) { - dataMutableState.read { dataMutableState in - guard let httpResponseHandler = dataMutableState.httpResponseHandler else { - underlyingQueue.async { completionHandler(.allow) } - return - } - - httpResponseHandler.queue.async { - httpResponseHandler.handler(response) { disposition in - if disposition == .cancel { - self.mutableState.write { mutableState in - mutableState.state = .cancelled - mutableState.error = mutableState.error ?? AFError.explicitlyCancelled - } - } - - self.underlyingQueue.async { - completionHandler(disposition.sessionDisposition) - } - } - } - } - } - - override func task(for request: URLRequest, using session: URLSession) -> URLSessionTask { - let copiedRequest = request - return session.dataTask(with: copiedRequest) - } - - /// Called to update the `downloadProgress` of the instance. - func updateDownloadProgress() { - let totalBytesReceived = Int64(data?.count ?? 0) - let totalBytesExpected = task?.response?.expectedContentLength ?? NSURLSessionTransferSizeUnknown - - downloadProgress.totalUnitCount = totalBytesExpected - downloadProgress.completedUnitCount = totalBytesReceived - - downloadProgressHandler?.queue.async { self.downloadProgressHandler?.handler(self.downloadProgress) } - } - - /// Validates the request, using the specified closure. - /// - /// - Note: If validation fails, subsequent calls to response handlers will have an associated error. - /// - /// - Parameter validation: `Validation` closure used to validate the response. - /// - /// - Returns: The instance. - @discardableResult - public func validate(_ validation: @escaping Validation) -> Self { - let validator: () -> Void = { [unowned self] in - guard error == nil, let response = response else { return } - - let result = validation(request, response, data) - - if case let .failure(error) = result { self.error = error.asAFError(or: .responseValidationFailed(reason: .customValidationFailed(error: error))) } - - eventMonitor?.request(self, - didValidateRequest: request, - response: response, - data: data, - withResult: result) - } - - validators.write { $0.append(validator) } - - return self - } - - /// Sets a closure called whenever the `DataRequest` produces an `HTTPURLResponse` and providing a completion - /// handler to return a `ResponseDisposition` value. - /// - /// - Parameters: - /// - queue: `DispatchQueue` on which the closure will be called. `.main` by default. - /// - handler: Closure called when the instance produces an `HTTPURLResponse`. The `completionHandler` provided - /// MUST be called, otherwise the request will never complete. - /// - /// - Returns: The instance. - @_disfavoredOverload - @discardableResult - public func onHTTPResponse( - on queue: DispatchQueue = .main, - perform handler: @escaping (_ response: HTTPURLResponse, - _ completionHandler: @escaping (ResponseDisposition) -> Void) -> Void - ) -> Self { - dataMutableState.write { mutableState in - mutableState.httpResponseHandler = (queue, handler) - } - - return self - } - - /// Sets a closure called whenever the `DataRequest` produces an `HTTPURLResponse`. - /// - /// - Parameters: - /// - queue: `DispatchQueue` on which the closure will be called. `.main` by default. - /// - handler: Closure called when the instance produces an `HTTPURLResponse`. - /// - /// - Returns: The instance. - @discardableResult - public func onHTTPResponse(on queue: DispatchQueue = .main, - perform handler: @escaping (HTTPURLResponse) -> Void) -> Self { - onHTTPResponse(on: queue) { response, completionHandler in - handler(response) - completionHandler(.allow) - } - - return self - } -} - -// MARK: - DataStreamRequest - -/// `Request` subclass which streams HTTP response `Data` through a `Handler` closure. -public final class DataStreamRequest: Request { - /// Closure type handling `DataStreamRequest.Stream` values. - public typealias Handler = (Stream) throws -> Void - - /// Type encapsulating an `Event` as it flows through the stream, as well as a `CancellationToken` which can be used - /// to stop the stream at any time. - public struct Stream { - /// Latest `Event` from the stream. - public let event: Event - /// Token used to cancel the stream. - public let token: CancellationToken - - /// Cancel the ongoing stream by canceling the underlying `DataStreamRequest`. - public func cancel() { - token.cancel() - } - } - - /// Type representing an event flowing through the stream. Contains either the `Result` of processing streamed - /// `Data` or the completion of the stream. - public enum Event { - /// Output produced every time the instance receives additional `Data`. The associated value contains the - /// `Result` of processing the incoming `Data`. - case stream(Result) - /// Output produced when the instance has completed, whether due to stream end, cancellation, or an error. - /// Associated `Completion` value contains the final state. - case complete(Completion) - } - - /// Value containing the state of a `DataStreamRequest` when the stream was completed. - public struct Completion { - /// Last `URLRequest` issued by the instance. - public let request: URLRequest? - /// Last `HTTPURLResponse` received by the instance. - public let response: HTTPURLResponse? - /// Last `URLSessionTaskMetrics` produced for the instance. - public let metrics: URLSessionTaskMetrics? - /// `AFError` produced for the instance, if any. - public let error: AFError? - } - - /// Type used to cancel an ongoing stream. - public struct CancellationToken { - weak var request: DataStreamRequest? - - init(_ request: DataStreamRequest) { - self.request = request - } - - /// Cancel the ongoing stream by canceling the underlying `DataStreamRequest`. - public func cancel() { - request?.cancel() - } - } - - /// `URLRequestConvertible` value used to create `URLRequest`s for this instance. - public let convertible: URLRequestConvertible - /// Whether or not the instance will be cancelled if stream parsing encounters an error. - public let automaticallyCancelOnStreamError: Bool - - /// Internal mutable state specific to this type. - struct StreamMutableState { - /// `OutputStream` bound to the `InputStream` produced by `asInputStream`, if it has been called. - var outputStream: OutputStream? - /// Stream closures called as `Data` is received. - var streams: [(_ data: Data) -> Void] = [] - /// Number of currently executing streams. Used to ensure completions are only fired after all streams are - /// enqueued. - var numberOfExecutingStreams = 0 - /// Completion calls enqueued while streams are still executing. - var enqueuedCompletionEvents: [() -> Void] = [] - /// Handler for any `HTTPURLResponse`s received. - var httpResponseHandler: (queue: DispatchQueue, - handler: (_ response: HTTPURLResponse, - _ completionHandler: @escaping (ResponseDisposition) -> Void) -> Void)? - } - - let streamMutableState = Protected(StreamMutableState()) - - /// Creates a `DataStreamRequest` using the provided parameters. - /// - /// - Parameters: - /// - id: `UUID` used for the `Hashable` and `Equatable` implementations. `UUID()` - /// by default. - /// - convertible: `URLRequestConvertible` value used to create `URLRequest`s for this - /// instance. - /// - automaticallyCancelOnStreamError: `Bool` indicating whether the instance will be cancelled when an `Error` - /// is thrown while serializing stream `Data`. - /// - underlyingQueue: `DispatchQueue` on which all internal `Request` work is performed. - /// - serializationQueue: `DispatchQueue` on which all serialization work is performed. By default - /// targets - /// `underlyingQueue`, but can be passed another queue from a `Session`. - /// - eventMonitor: `EventMonitor` called for event callbacks from internal `Request` actions. - /// - interceptor: `RequestInterceptor` used throughout the request lifecycle. - /// - delegate: `RequestDelegate` that provides an interface to actions not performed by - /// the `Request`. - init(id: UUID = UUID(), - convertible: URLRequestConvertible, - automaticallyCancelOnStreamError: Bool, - underlyingQueue: DispatchQueue, - serializationQueue: DispatchQueue, - eventMonitor: EventMonitor?, - interceptor: RequestInterceptor?, - delegate: RequestDelegate) { - self.convertible = convertible - self.automaticallyCancelOnStreamError = automaticallyCancelOnStreamError - - super.init(id: id, - underlyingQueue: underlyingQueue, - serializationQueue: serializationQueue, - eventMonitor: eventMonitor, - interceptor: interceptor, - delegate: delegate) - } - - override func task(for request: URLRequest, using session: URLSession) -> URLSessionTask { - let copiedRequest = request - return session.dataTask(with: copiedRequest) - } - - override func finish(error: AFError? = nil) { - streamMutableState.write { state in - state.outputStream?.close() - } - - super.finish(error: error) - } - - func didReceive(data: Data) { - streamMutableState.write { state in - #if !canImport(FoundationNetworking) // If we not using swift-corelibs-foundation. - if let stream = state.outputStream { - underlyingQueue.async { - var bytes = Array(data) - stream.write(&bytes, maxLength: bytes.count) - } - } - #endif - state.numberOfExecutingStreams += state.streams.count - let localState = state - underlyingQueue.async { localState.streams.forEach { $0(data) } } - } - } - - func didReceiveResponse(_ response: HTTPURLResponse, completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) { - streamMutableState.read { dataMutableState in - guard let httpResponseHandler = dataMutableState.httpResponseHandler else { - underlyingQueue.async { completionHandler(.allow) } - return - } - - httpResponseHandler.queue.async { - httpResponseHandler.handler(response) { disposition in - if disposition == .cancel { - self.mutableState.write { mutableState in - mutableState.state = .cancelled - mutableState.error = mutableState.error ?? AFError.explicitlyCancelled - } - } - - self.underlyingQueue.async { - completionHandler(disposition.sessionDisposition) - } - } - } - } - } - - /// Validates the `URLRequest` and `HTTPURLResponse` received for the instance using the provided `Validation` closure. - /// - /// - Parameter validation: `Validation` closure used to validate the request and response. - /// - /// - Returns: The `DataStreamRequest`. - @discardableResult - public func validate(_ validation: @escaping Validation) -> Self { - let validator: () -> Void = { [unowned self] in - guard error == nil, let response = response else { return } - - let result = validation(request, response) - - if case let .failure(error) = result { - self.error = error.asAFError(or: .responseValidationFailed(reason: .customValidationFailed(error: error))) - } - - eventMonitor?.request(self, - didValidateRequest: request, - response: response, - withResult: result) - } - - validators.write { $0.append(validator) } - - return self - } - - #if !canImport(FoundationNetworking) // If we not using swift-corelibs-foundation. - /// Produces an `InputStream` that receives the `Data` received by the instance. - /// - /// - Note: The `InputStream` produced by this method must have `open()` called before being able to read `Data`. - /// Additionally, this method will automatically call `resume()` on the instance, regardless of whether or - /// not the creating session has `startRequestsImmediately` set to `true`. - /// - /// - Parameter bufferSize: Size, in bytes, of the buffer between the `OutputStream` and `InputStream`. - /// - /// - Returns: The `InputStream` bound to the internal `OutboundStream`. - public func asInputStream(bufferSize: Int = 1024) -> InputStream? { - defer { resume() } - - var inputStream: InputStream? - streamMutableState.write { state in - Foundation.Stream.getBoundStreams(withBufferSize: bufferSize, - inputStream: &inputStream, - outputStream: &state.outputStream) - state.outputStream?.open() - } - - return inputStream - } - #endif - - /// Sets a closure called whenever the `DataRequest` produces an `HTTPURLResponse` and providing a completion - /// handler to return a `ResponseDisposition` value. - /// - /// - Parameters: - /// - queue: `DispatchQueue` on which the closure will be called. `.main` by default. - /// - handler: Closure called when the instance produces an `HTTPURLResponse`. The `completionHandler` provided - /// MUST be called, otherwise the request will never complete. - /// - /// - Returns: The instance. - @_disfavoredOverload - @discardableResult - public func onHTTPResponse( - on queue: DispatchQueue = .main, - perform handler: @escaping (_ response: HTTPURLResponse, - _ completionHandler: @escaping (ResponseDisposition) -> Void) -> Void - ) -> Self { - streamMutableState.write { mutableState in - mutableState.httpResponseHandler = (queue, handler) - } - - return self - } - - /// Sets a closure called whenever the `DataRequest` produces an `HTTPURLResponse`. - /// - /// - Parameters: - /// - queue: `DispatchQueue` on which the closure will be called. `.main` by default. - /// - handler: Closure called when the instance produces an `HTTPURLResponse`. - /// - /// - Returns: The instance. - @discardableResult - public func onHTTPResponse(on queue: DispatchQueue = .main, - perform handler: @escaping (HTTPURLResponse) -> Void) -> Self { - onHTTPResponse(on: queue) { response, completionHandler in - handler(response) - completionHandler(.allow) - } - - return self - } - - func capturingError(from closure: () throws -> Void) { - do { - try closure() - } catch { - self.error = error.asAFError(or: .responseSerializationFailed(reason: .customSerializationFailed(error: error))) - cancel() - } - } - - func appendStreamCompletion(on queue: DispatchQueue, - stream: @escaping Handler) { - appendResponseSerializer { - self.underlyingQueue.async { - self.responseSerializerDidComplete { - self.streamMutableState.write { state in - guard state.numberOfExecutingStreams == 0 else { - state.enqueuedCompletionEvents.append { - self.enqueueCompletion(on: queue, stream: stream) - } - - return - } - - self.enqueueCompletion(on: queue, stream: stream) - } - } - } - } - } - - func enqueueCompletion(on queue: DispatchQueue, - stream: @escaping Handler) { - queue.async { - do { - let completion = Completion(request: self.request, - response: self.response, - metrics: self.metrics, - error: self.error) - try stream(.init(event: .complete(completion), token: .init(self))) - } catch { - // Ignore error, as errors on Completion can't be handled anyway. - } - } - } -} - -extension DataStreamRequest.Stream { - /// Incoming `Result` values from `Event.stream`. - public var result: Result? { - guard case let .stream(result) = event else { return nil } - - return result - } - - /// `Success` value of the instance, if any. - public var value: Success? { - guard case let .success(value) = result else { return nil } - - return value - } - - /// `Failure` value of the instance, if any. - public var error: Failure? { - guard case let .failure(error) = result else { return nil } - - return error - } - - /// `Completion` value of the instance, if any. - public var completion: DataStreamRequest.Completion? { - guard case let .complete(completion) = event else { return nil } - - return completion - } -} - -// MARK: - DownloadRequest - -/// `Request` subclass which downloads `Data` to a file on disk using `URLSessionDownloadTask`. -public class DownloadRequest: Request { - /// A set of options to be executed prior to moving a downloaded file from the temporary `URL` to the destination - /// `URL`. - public struct Options: OptionSet { - /// Specifies that intermediate directories for the destination URL should be created. - public static let createIntermediateDirectories = Options(rawValue: 1 << 0) - /// Specifies that any previous file at the destination `URL` should be removed. - public static let removePreviousFile = Options(rawValue: 1 << 1) - - public let rawValue: Int - - public init(rawValue: Int) { - self.rawValue = rawValue - } - } - - // MARK: Destination - - /// A closure executed once a `DownloadRequest` has successfully completed in order to determine where to move the - /// temporary file written to during the download process. The closure takes two arguments: the temporary file URL - /// and the `HTTPURLResponse`, and returns two values: the file URL where the temporary file should be moved and - /// the options defining how the file should be moved. - /// - /// - Note: Downloads from a local `file://` `URL`s do not use the `Destination` closure, as those downloads do not - /// return an `HTTPURLResponse`. Instead the file is merely moved within the temporary directory. - public typealias Destination = (_ temporaryURL: URL, - _ response: HTTPURLResponse) -> (destinationURL: URL, options: Options) - - /// Creates a download file destination closure which uses the default file manager to move the temporary file to a - /// file URL in the first available directory with the specified search path directory and search path domain mask. - /// - /// - Parameters: - /// - directory: The search path directory. `.documentDirectory` by default. - /// - domain: The search path domain mask. `.userDomainMask` by default. - /// - options: `DownloadRequest.Options` used when moving the downloaded file to its destination. None by - /// default. - /// - Returns: The `Destination` closure. - public class func suggestedDownloadDestination(for directory: FileManager.SearchPathDirectory = .documentDirectory, - in domain: FileManager.SearchPathDomainMask = .userDomainMask, - options: Options = []) -> Destination { - { temporaryURL, response in - let directoryURLs = FileManager.default.urls(for: directory, in: domain) - let url = directoryURLs.first?.appendingPathComponent(response.suggestedFilename!) ?? temporaryURL - - return (url, options) - } - } - - /// Default `Destination` used by Alamofire to ensure all downloads persist. This `Destination` prepends - /// `Alamofire_` to the automatically generated download name and moves it within the temporary directory. Files - /// with this destination must be additionally moved if they should survive the system reclamation of temporary - /// space. - static let defaultDestination: Destination = { url, _ in - (defaultDestinationURL(url), []) - } - - /// Default `URL` creation closure. Creates a `URL` in the temporary directory with `Alamofire_` prepended to the - /// provided file name. - static let defaultDestinationURL: (URL) -> URL = { url in - let filename = "Alamofire_\(url.lastPathComponent)" - let destination = url.deletingLastPathComponent().appendingPathComponent(filename) - - return destination - } - - // MARK: Downloadable - - /// Type describing the source used to create the underlying `URLSessionDownloadTask`. - public enum Downloadable { - /// Download should be started from the `URLRequest` produced by the associated `URLRequestConvertible` value. - case request(URLRequestConvertible) - /// Download should be started from the associated resume `Data` value. - case resumeData(Data) - } - - // MARK: Mutable State - - /// Type containing all mutable state for `DownloadRequest` instances. - private struct DownloadRequestMutableState { - /// Possible resume `Data` produced when cancelling the instance. - var resumeData: Data? - /// `URL` to which `Data` is being downloaded. - var fileURL: URL? - } - - /// Protected mutable state specific to `DownloadRequest`. - private let mutableDownloadState = Protected(DownloadRequestMutableState()) - - /// If the download is resumable and is eventually cancelled or fails, this value may be used to resume the download - /// using the `download(resumingWith data:)` API. - /// - /// - Note: For more information about `resumeData`, see [Apple's documentation](https://developer.apple.com/documentation/foundation/urlsessiondownloadtask/1411634-cancel). - public var resumeData: Data? { - #if !canImport(FoundationNetworking) // If we not using swift-corelibs-foundation. - return mutableDownloadState.resumeData ?? error?.downloadResumeData - #else - return mutableDownloadState.resumeData - #endif - } - - /// If the download is successful, the `URL` where the file was downloaded. - public var fileURL: URL? { mutableDownloadState.fileURL } - - // MARK: Initial State - - /// `Downloadable` value used for this instance. - public let downloadable: Downloadable - /// The `Destination` to which the downloaded file is moved. - let destination: Destination - - /// Creates a `DownloadRequest` using the provided parameters. - /// - /// - Parameters: - /// - id: `UUID` used for the `Hashable` and `Equatable` implementations. `UUID()` by default. - /// - downloadable: `Downloadable` value used to create `URLSessionDownloadTasks` for the instance. - /// - underlyingQueue: `DispatchQueue` on which all internal `Request` work is performed. - /// - serializationQueue: `DispatchQueue` on which all serialization work is performed. By default targets - /// `underlyingQueue`, but can be passed another queue from a `Session`. - /// - eventMonitor: `EventMonitor` called for event callbacks from internal `Request` actions. - /// - interceptor: `RequestInterceptor` used throughout the request lifecycle. - /// - delegate: `RequestDelegate` that provides an interface to actions not performed by the `Request` - /// - destination: `Destination` closure used to move the downloaded file to its final location. - init(id: UUID = UUID(), - downloadable: Downloadable, - underlyingQueue: DispatchQueue, - serializationQueue: DispatchQueue, - eventMonitor: EventMonitor?, - interceptor: RequestInterceptor?, - delegate: RequestDelegate, - destination: @escaping Destination) { - self.downloadable = downloadable - self.destination = destination - - super.init(id: id, - underlyingQueue: underlyingQueue, - serializationQueue: serializationQueue, - eventMonitor: eventMonitor, - interceptor: interceptor, - delegate: delegate) - } - - override func reset() { - super.reset() - - mutableDownloadState.write { - $0.resumeData = nil - $0.fileURL = nil - } - } - - /// Called when a download has finished. - /// - /// - Parameters: - /// - task: `URLSessionTask` that finished the download. - /// - result: `Result` of the automatic move to `destination`. - func didFinishDownloading(using task: URLSessionTask, with result: Result) { - eventMonitor?.request(self, didFinishDownloadingUsing: task, with: result) - - switch result { - case let .success(url): mutableDownloadState.fileURL = url - case let .failure(error): self.error = error - } - } - - /// Updates the `downloadProgress` using the provided values. - /// - /// - Parameters: - /// - bytesWritten: Total bytes written so far. - /// - totalBytesExpectedToWrite: Total bytes expected to write. - func updateDownloadProgress(bytesWritten: Int64, totalBytesExpectedToWrite: Int64) { - downloadProgress.totalUnitCount = totalBytesExpectedToWrite - downloadProgress.completedUnitCount += bytesWritten - - downloadProgressHandler?.queue.async { self.downloadProgressHandler?.handler(self.downloadProgress) } - } - - override func task(for request: URLRequest, using session: URLSession) -> URLSessionTask { - session.downloadTask(with: request) - } - - /// Creates a `URLSessionTask` from the provided resume data. - /// - /// - Parameters: - /// - data: `Data` used to resume the download. - /// - session: `URLSession` used to create the `URLSessionTask`. - /// - /// - Returns: The `URLSessionTask` created. - public func task(forResumeData data: Data, using session: URLSession) -> URLSessionTask { - session.downloadTask(withResumeData: data) - } - - /// Cancels the instance. Once cancelled, a `DownloadRequest` can no longer be resumed or suspended. - /// - /// - Note: This method will NOT produce resume data. If you wish to cancel and produce resume data, use - /// `cancel(producingResumeData:)` or `cancel(byProducingResumeData:)`. - /// - /// - Returns: The instance. - @discardableResult - override public func cancel() -> Self { - cancel(producingResumeData: false) - } - - /// Cancels the instance, optionally producing resume data. Once cancelled, a `DownloadRequest` can no longer be - /// resumed or suspended. - /// - /// - Note: If `producingResumeData` is `true`, the `resumeData` property will be populated with any resume data, if - /// available. - /// - /// - Returns: The instance. - @discardableResult - public func cancel(producingResumeData shouldProduceResumeData: Bool) -> Self { - cancel(optionallyProducingResumeData: shouldProduceResumeData ? { _ in } : nil) - } - - /// Cancels the instance while producing resume data. Once cancelled, a `DownloadRequest` can no longer be resumed - /// or suspended. - /// - /// - Note: The resume data passed to the completion handler will also be available on the instance's `resumeData` - /// property. - /// - /// - Parameter completionHandler: The completion handler that is called when the download has been successfully - /// cancelled. It is not guaranteed to be called on a particular queue, so you may - /// want use an appropriate queue to perform your work. - /// - /// - Returns: The instance. - @discardableResult - public func cancel(byProducingResumeData completionHandler: @escaping (_ data: Data?) -> Void) -> Self { - cancel(optionallyProducingResumeData: completionHandler) - } - - /// Internal implementation of cancellation that optionally takes a resume data handler. If no handler is passed, - /// cancellation is performed without producing resume data. - /// - /// - Parameter completionHandler: Optional resume data handler. - /// - /// - Returns: The instance. - private func cancel(optionallyProducingResumeData completionHandler: ((_ resumeData: Data?) -> Void)?) -> Self { - mutableState.write { mutableState in - guard mutableState.state.canTransitionTo(.cancelled) else { return } - - mutableState.state = .cancelled - - underlyingQueue.async { self.didCancel() } - - guard let task = mutableState.tasks.last as? URLSessionDownloadTask, task.state != .completed else { - underlyingQueue.async { self.finish() } - return - } - - if let completionHandler = completionHandler { - // Resume to ensure metrics are gathered. - task.resume() - task.cancel { resumeData in - self.mutableDownloadState.resumeData = resumeData - self.underlyingQueue.async { self.didCancelTask(task) } - completionHandler(resumeData) - } - } else { - // Resume to ensure metrics are gathered. - task.resume() - task.cancel() - self.underlyingQueue.async { self.didCancelTask(task) } - } - } - - return self - } - - /// Validates the request, using the specified closure. - /// - /// - Note: If validation fails, subsequent calls to response handlers will have an associated error. - /// - /// - Parameter validation: `Validation` closure to validate the response. - /// - /// - Returns: The instance. - @discardableResult - public func validate(_ validation: @escaping Validation) -> Self { - let validator: () -> Void = { [unowned self] in - guard error == nil, let response = response else { return } - - let result = validation(request, response, fileURL) - - if case let .failure(error) = result { - self.error = error.asAFError(or: .responseValidationFailed(reason: .customValidationFailed(error: error))) - } - - eventMonitor?.request(self, - didValidateRequest: request, - response: response, - fileURL: fileURL, - withResult: result) - } - - validators.write { $0.append(validator) } - - return self - } -} - -// MARK: - UploadRequest - -/// `DataRequest` subclass which handles `Data` upload from memory, file, or stream using `URLSessionUploadTask`. -public class UploadRequest: DataRequest { - /// Type describing the origin of the upload, whether `Data`, file, or stream. - public enum Uploadable { - /// Upload from the provided `Data` value. - case data(Data) - /// Upload from the provided file `URL`, as well as a `Bool` determining whether the source file should be - /// automatically removed once uploaded. - case file(URL, shouldRemove: Bool) - /// Upload from the provided `InputStream`. - case stream(InputStream) - } - - // MARK: Initial State - - /// The `UploadableConvertible` value used to produce the `Uploadable` value for this instance. - public let upload: UploadableConvertible - - /// `FileManager` used to perform cleanup tasks, including the removal of multipart form encoded payloads written - /// to disk. - public let fileManager: FileManager - - // MARK: Mutable State - - /// `Uploadable` value used by the instance. - public var uploadable: Uploadable? - - /// Creates an `UploadRequest` using the provided parameters. - /// - /// - Parameters: - /// - id: `UUID` used for the `Hashable` and `Equatable` implementations. `UUID()` by default. - /// - convertible: `UploadConvertible` value used to determine the type of upload to be performed. - /// - underlyingQueue: `DispatchQueue` on which all internal `Request` work is performed. - /// - serializationQueue: `DispatchQueue` on which all serialization work is performed. By default targets - /// `underlyingQueue`, but can be passed another queue from a `Session`. - /// - eventMonitor: `EventMonitor` called for event callbacks from internal `Request` actions. - /// - interceptor: `RequestInterceptor` used throughout the request lifecycle. - /// - fileManager: `FileManager` used to perform cleanup tasks, including the removal of multipart form - /// encoded payloads written to disk. - /// - delegate: `RequestDelegate` that provides an interface to actions not performed by the `Request`. - init(id: UUID = UUID(), - convertible: UploadConvertible, - underlyingQueue: DispatchQueue, - serializationQueue: DispatchQueue, - eventMonitor: EventMonitor?, - interceptor: RequestInterceptor?, - fileManager: FileManager, - delegate: RequestDelegate) { - upload = convertible - self.fileManager = fileManager - - super.init(id: id, - convertible: convertible, - underlyingQueue: underlyingQueue, - serializationQueue: serializationQueue, - eventMonitor: eventMonitor, - interceptor: interceptor, - delegate: delegate) - } - - /// Called when the `Uploadable` value has been created from the `UploadConvertible`. - /// - /// - Parameter uploadable: The `Uploadable` that was created. - func didCreateUploadable(_ uploadable: Uploadable) { - self.uploadable = uploadable - - eventMonitor?.request(self, didCreateUploadable: uploadable) - } - - /// Called when the `Uploadable` value could not be created. - /// - /// - Parameter error: `AFError` produced by the failure. - func didFailToCreateUploadable(with error: AFError) { - self.error = error - - eventMonitor?.request(self, didFailToCreateUploadableWithError: error) - - retryOrFinish(error: error) - } - - override func task(for request: URLRequest, using session: URLSession) -> URLSessionTask { - guard let uploadable = uploadable else { - fatalError("Attempting to create a URLSessionUploadTask when Uploadable value doesn't exist.") - } - - switch uploadable { - case let .data(data): return session.uploadTask(with: request, from: data) - case let .file(url, _): return session.uploadTask(with: request, fromFile: url) - case .stream: return session.uploadTask(withStreamedRequest: request) - } - } - - override func reset() { - // Uploadable must be recreated on every retry. - uploadable = nil - - super.reset() - } - - /// Produces the `InputStream` from `uploadable`, if it can. - /// - /// - Note: Calling this method with a non-`.stream` `Uploadable` is a logic error and will crash. - /// - /// - Returns: The `InputStream`. - func inputStream() -> InputStream { - guard let uploadable = uploadable else { - fatalError("Attempting to access the input stream but the uploadable doesn't exist.") - } - - guard case let .stream(stream) = uploadable else { - fatalError("Attempted to access the stream of an UploadRequest that wasn't created with one.") - } - - eventMonitor?.request(self, didProvideInputStream: stream) - - return stream - } - - override public func cleanup() { - defer { super.cleanup() } - - guard - let uploadable = uploadable, - case let .file(url, shouldRemove) = uploadable, - shouldRemove - else { return } - - try? fileManager.removeItem(at: url) - } -} - -/// A type that can produce an `UploadRequest.Uploadable` value. -public protocol UploadableConvertible { - /// Produces an `UploadRequest.Uploadable` value from the instance. - /// - /// - Returns: The `UploadRequest.Uploadable`. - /// - Throws: Any `Error` produced during creation. - func createUploadable() throws -> UploadRequest.Uploadable -} - -extension UploadRequest.Uploadable: UploadableConvertible { - public func createUploadable() throws -> UploadRequest.Uploadable { - self - } -} - -/// A type that can be converted to an upload, whether from an `UploadRequest.Uploadable` or `URLRequestConvertible`. -public protocol UploadConvertible: UploadableConvertible & URLRequestConvertible {} diff --git a/Pods/Alamofire/Source/RequestCompression.swift b/Pods/Alamofire/Source/RequestCompression.swift deleted file mode 100644 index c543e06..0000000 --- a/Pods/Alamofire/Source/RequestCompression.swift +++ /dev/null @@ -1,153 +0,0 @@ -// -// RequestCompression.swift -// -// Copyright (c) 2023 Alamofire Software Foundation (http://alamofire.org/) -// -// 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(zlib) -import Foundation -import zlib - -/// `RequestAdapter` which compresses outgoing `URLRequest` bodies using the `deflate` `Content-Encoding` and adds the -/// appropriate header. -/// -/// - Note: Most requests to most APIs are small and so would only be slowed down by applying this adapter. Measure the -/// size of your request bodies and the performance impact of using this adapter before use. Using this adapter -/// with already compressed data, such as images, will, at best, have no effect. Additionally, body compression -/// is a synchronous operation, so measuring the performance impact may be important to determine whether you -/// want to use a dedicated `requestQueue` in your `Session` instance. Finally, not all servers support request -/// compression, so test with all of your server configurations before deploying. -@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) -public struct DeflateRequestCompressor: RequestInterceptor { - /// Type that determines the action taken when the `URLRequest` already has a `Content-Encoding` header. - public enum DuplicateHeaderBehavior { - /// Throws a `DuplicateHeaderError`. The default. - case error - /// Replaces the existing header value with `deflate`. - case replace - /// Silently skips compression when the header exists. - case skip - } - - /// `Error` produced when the outgoing `URLRequest` already has a `Content-Encoding` header, when the instance has - /// been configured to produce an error. - public struct DuplicateHeaderError: Error {} - - /// Behavior to use when the outgoing `URLRequest` already has a `Content-Encoding` header. - public let duplicateHeaderBehavior: DuplicateHeaderBehavior - /// Closure which determines whether the outgoing body data should be compressed. - public let shouldCompressBodyData: (_ bodyData: Data) -> Bool - - /// Creates an instance with the provided parameters. - /// - /// - Parameters: - /// - duplicateHeaderBehavior: `DuplicateHeaderBehavior` to use. `.error` by default. - /// - shouldCompressBodyData: Closure which determines whether the outgoing body data should be compressed. `true` by default. - public init(duplicateHeaderBehavior: DuplicateHeaderBehavior = .error, - shouldCompressBodyData: @escaping (_ bodyData: Data) -> Bool = { _ in true }) { - self.duplicateHeaderBehavior = duplicateHeaderBehavior - self.shouldCompressBodyData = shouldCompressBodyData - } - - public func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { - // No need to compress unless we have body data. No support for compressing streams. - guard let bodyData = urlRequest.httpBody else { - completion(.success(urlRequest)) - return - } - - guard shouldCompressBodyData(bodyData) else { - completion(.success(urlRequest)) - return - } - - if urlRequest.headers.value(for: "Content-Encoding") != nil { - switch duplicateHeaderBehavior { - case .error: - completion(.failure(DuplicateHeaderError())) - return - case .replace: - // Header will be replaced once the body data is compressed. - break - case .skip: - completion(.success(urlRequest)) - return - } - } - - var compressedRequest = urlRequest - - do { - compressedRequest.httpBody = try deflate(bodyData) - compressedRequest.headers.update(.contentEncoding("deflate")) - completion(.success(compressedRequest)) - } catch { - completion(.failure(error)) - } - } - - func deflate(_ data: Data) throws -> Data { - var output = Data([0x78, 0x5E]) // Header - try output.append((data as NSData).compressed(using: .zlib) as Data) - var checksum = adler32Checksum(of: data).bigEndian - output.append(Data(bytes: &checksum, count: MemoryLayout.size)) - - return output - } - - func adler32Checksum(of data: Data) -> UInt32 { - #if swift(>=5.6) - data.withUnsafeBytes { buffer in - UInt32(adler32(1, buffer.baseAddress, UInt32(buffer.count))) - } - #else - data.withUnsafeBytes { buffer in - let buffer = buffer.bindMemory(to: UInt8.self) - return UInt32(adler32(1, buffer.baseAddress, UInt32(buffer.count))) - } - #endif - } -} - -@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) -extension RequestInterceptor where Self == DeflateRequestCompressor { - /// Create a `DeflateRequestCompressor` with default `duplicateHeaderBehavior` and `shouldCompressBodyData` values. - public static var deflateCompressor: DeflateRequestCompressor { - DeflateRequestCompressor() - } - - /// Creates a `DeflateRequestCompressor` with the provided `DuplicateHeaderBehavior` and `shouldCompressBodyData` - /// closure. - /// - /// - Parameters: - /// - duplicateHeaderBehavior: `DuplicateHeaderBehavior` to use. - /// - shouldCompressBodyData: Closure which determines whether the outgoing body data should be compressed. `true` by default. - /// - /// - Returns: The `DeflateRequestCompressor`. - public static func deflateCompressor( - duplicateHeaderBehavior: DeflateRequestCompressor.DuplicateHeaderBehavior = .error, - shouldCompressBodyData: @escaping (_ bodyData: Data) -> Bool = { _ in true } - ) -> DeflateRequestCompressor { - DeflateRequestCompressor(duplicateHeaderBehavior: duplicateHeaderBehavior, - shouldCompressBodyData: shouldCompressBodyData) - } -} -#endif diff --git a/Pods/Alamofire/Source/RequestInterceptor.swift b/Pods/Alamofire/Source/RequestInterceptor.swift deleted file mode 100644 index 9acd986..0000000 --- a/Pods/Alamofire/Source/RequestInterceptor.swift +++ /dev/null @@ -1,351 +0,0 @@ -// -// RequestInterceptor.swift -// -// Copyright (c) 2019 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -/// Stores all state associated with a `URLRequest` being adapted. -public struct RequestAdapterState { - /// The `UUID` of the `Request` associated with the `URLRequest` to adapt. - public let requestID: UUID - - /// The `Session` associated with the `URLRequest` to adapt. - public let session: Session -} - -// MARK: - - -/// A type that can inspect and optionally adapt a `URLRequest` in some manner if necessary. -public protocol RequestAdapter { - /// Inspects and adapts the specified `URLRequest` in some manner and calls the completion handler with the Result. - /// - /// - Parameters: - /// - urlRequest: The `URLRequest` to adapt. - /// - session: The `Session` that will execute the `URLRequest`. - /// - completion: The completion handler that must be called when adaptation is complete. - func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) - - /// Inspects and adapts the specified `URLRequest` in some manner and calls the completion handler with the Result. - /// - /// - Parameters: - /// - urlRequest: The `URLRequest` to adapt. - /// - state: The `RequestAdapterState` associated with the `URLRequest`. - /// - completion: The completion handler that must be called when adaptation is complete. - func adapt(_ urlRequest: URLRequest, using state: RequestAdapterState, completion: @escaping (Result) -> Void) -} - -extension RequestAdapter { - public func adapt(_ urlRequest: URLRequest, using state: RequestAdapterState, completion: @escaping (Result) -> Void) { - adapt(urlRequest, for: state.session, completion: completion) - } -} - -// MARK: - - -/// Outcome of determination whether retry is necessary. -public enum RetryResult { - /// Retry should be attempted immediately. - case retry - /// Retry should be attempted after the associated `TimeInterval`. - case retryWithDelay(TimeInterval) - /// Do not retry. - case doNotRetry - /// Do not retry due to the associated `Error`. - case doNotRetryWithError(Error) -} - -extension RetryResult { - var retryRequired: Bool { - switch self { - case .retry, .retryWithDelay: return true - default: return false - } - } - - var delay: TimeInterval? { - switch self { - case let .retryWithDelay(delay): return delay - default: return nil - } - } - - var error: Error? { - guard case let .doNotRetryWithError(error) = self else { return nil } - return error - } -} - -/// A type that determines whether a request should be retried after being executed by the specified session manager -/// and encountering an error. -public protocol RequestRetrier { - /// Determines whether the `Request` should be retried by calling the `completion` closure. - /// - /// This operation is fully asynchronous. Any amount of time can be taken to determine whether the request needs - /// to be retried. The one requirement is that the completion closure is called to ensure the request is properly - /// cleaned up after. - /// - /// - Parameters: - /// - request: `Request` that failed due to the provided `Error`. - /// - session: `Session` that produced the `Request`. - /// - error: `Error` encountered while executing the `Request`. - /// - completion: Completion closure to be executed when a retry decision has been determined. - func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) -} - -// MARK: - - -/// Type that provides both `RequestAdapter` and `RequestRetrier` functionality. -public protocol RequestInterceptor: RequestAdapter, RequestRetrier {} - -extension RequestInterceptor { - public func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { - completion(.success(urlRequest)) - } - - public func retry(_ request: Request, - for session: Session, - dueTo error: Error, - completion: @escaping (RetryResult) -> Void) { - completion(.doNotRetry) - } -} - -/// `RequestAdapter` closure definition. -public typealias AdaptHandler = (URLRequest, Session, _ completion: @escaping (Result) -> Void) -> Void -/// `RequestRetrier` closure definition. -public typealias RetryHandler = (Request, Session, Error, _ completion: @escaping (RetryResult) -> Void) -> Void - -// MARK: - - -/// Closure-based `RequestAdapter`. -open class Adapter: RequestInterceptor { - private let adaptHandler: AdaptHandler - - /// Creates an instance using the provided closure. - /// - /// - Parameter adaptHandler: `AdaptHandler` closure to be executed when handling request adaptation. - public init(_ adaptHandler: @escaping AdaptHandler) { - self.adaptHandler = adaptHandler - } - - open func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { - adaptHandler(urlRequest, session, completion) - } - - open func adapt(_ urlRequest: URLRequest, using state: RequestAdapterState, completion: @escaping (Result) -> Void) { - adaptHandler(urlRequest, state.session, completion) - } -} - -extension RequestAdapter where Self == Adapter { - /// Creates an `Adapter` using the provided `AdaptHandler` closure. - /// - /// - Parameter closure: `AdaptHandler` to use to adapt the request. - /// - Returns: The `Adapter`. - public static func adapter(using closure: @escaping AdaptHandler) -> Adapter { - Adapter(closure) - } -} - -// MARK: - - -/// Closure-based `RequestRetrier`. -open class Retrier: RequestInterceptor { - private let retryHandler: RetryHandler - - /// Creates an instance using the provided closure. - /// - /// - Parameter retryHandler: `RetryHandler` closure to be executed when handling request retry. - public init(_ retryHandler: @escaping RetryHandler) { - self.retryHandler = retryHandler - } - - open func retry(_ request: Request, - for session: Session, - dueTo error: Error, - completion: @escaping (RetryResult) -> Void) { - retryHandler(request, session, error, completion) - } -} - -extension RequestRetrier where Self == Retrier { - /// Creates a `Retrier` using the provided `RetryHandler` closure. - /// - /// - Parameter closure: `RetryHandler` to use to retry the request. - /// - Returns: The `Retrier`. - public static func retrier(using closure: @escaping RetryHandler) -> Retrier { - Retrier(closure) - } -} - -// MARK: - - -/// `RequestInterceptor` which can use multiple `RequestAdapter` and `RequestRetrier` values. -open class Interceptor: RequestInterceptor { - /// All `RequestAdapter`s associated with the instance. These adapters will be run until one fails. - public let adapters: [RequestAdapter] - /// All `RequestRetrier`s associated with the instance. These retriers will be run one at a time until one triggers retry. - public let retriers: [RequestRetrier] - - /// Creates an instance from `AdaptHandler` and `RetryHandler` closures. - /// - /// - Parameters: - /// - adaptHandler: `AdaptHandler` closure to be used. - /// - retryHandler: `RetryHandler` closure to be used. - public init(adaptHandler: @escaping AdaptHandler, retryHandler: @escaping RetryHandler) { - adapters = [Adapter(adaptHandler)] - retriers = [Retrier(retryHandler)] - } - - /// Creates an instance from `RequestAdapter` and `RequestRetrier` values. - /// - /// - Parameters: - /// - adapter: `RequestAdapter` value to be used. - /// - retrier: `RequestRetrier` value to be used. - public init(adapter: RequestAdapter, retrier: RequestRetrier) { - adapters = [adapter] - retriers = [retrier] - } - - /// Creates an instance from the arrays of `RequestAdapter` and `RequestRetrier` values. - /// - /// - Parameters: - /// - adapters: `RequestAdapter` values to be used. - /// - retriers: `RequestRetrier` values to be used. - /// - interceptors: `RequestInterceptor`s to be used. - public init(adapters: [RequestAdapter] = [], retriers: [RequestRetrier] = [], interceptors: [RequestInterceptor] = []) { - self.adapters = adapters + interceptors - self.retriers = retriers + interceptors - } - - open func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { - adapt(urlRequest, for: session, using: adapters, completion: completion) - } - - private func adapt(_ urlRequest: URLRequest, - for session: Session, - using adapters: [RequestAdapter], - completion: @escaping (Result) -> Void) { - var pendingAdapters = adapters - - guard !pendingAdapters.isEmpty else { completion(.success(urlRequest)); return } - - let adapter = pendingAdapters.removeFirst() - - adapter.adapt(urlRequest, for: session) { result in - switch result { - case let .success(urlRequest): - self.adapt(urlRequest, for: session, using: pendingAdapters, completion: completion) - case .failure: - completion(result) - } - } - } - - open func adapt(_ urlRequest: URLRequest, using state: RequestAdapterState, completion: @escaping (Result) -> Void) { - adapt(urlRequest, using: state, adapters: adapters, completion: completion) - } - - private func adapt(_ urlRequest: URLRequest, - using state: RequestAdapterState, - adapters: [RequestAdapter], - completion: @escaping (Result) -> Void) { - var pendingAdapters = adapters - - guard !pendingAdapters.isEmpty else { completion(.success(urlRequest)); return } - - let adapter = pendingAdapters.removeFirst() - - adapter.adapt(urlRequest, using: state) { result in - switch result { - case let .success(urlRequest): - self.adapt(urlRequest, using: state, adapters: pendingAdapters, completion: completion) - case .failure: - completion(result) - } - } - } - - open func retry(_ request: Request, - for session: Session, - dueTo error: Error, - completion: @escaping (RetryResult) -> Void) { - retry(request, for: session, dueTo: error, using: retriers, completion: completion) - } - - private func retry(_ request: Request, - for session: Session, - dueTo error: Error, - using retriers: [RequestRetrier], - completion: @escaping (RetryResult) -> Void) { - var pendingRetriers = retriers - - guard !pendingRetriers.isEmpty else { completion(.doNotRetry); return } - - let retrier = pendingRetriers.removeFirst() - - retrier.retry(request, for: session, dueTo: error) { result in - switch result { - case .retry, .retryWithDelay, .doNotRetryWithError: - completion(result) - case .doNotRetry: - // Only continue to the next retrier if retry was not triggered and no error was encountered - self.retry(request, for: session, dueTo: error, using: pendingRetriers, completion: completion) - } - } - } -} - -extension RequestInterceptor where Self == Interceptor { - /// Creates an `Interceptor` using the provided `AdaptHandler` and `RetryHandler` closures. - /// - /// - Parameters: - /// - adapter: `AdapterHandler`to use to adapt the request. - /// - retrier: `RetryHandler` to use to retry the request. - /// - Returns: The `Interceptor`. - public static func interceptor(adapter: @escaping AdaptHandler, retrier: @escaping RetryHandler) -> Interceptor { - Interceptor(adaptHandler: adapter, retryHandler: retrier) - } - - /// Creates an `Interceptor` using the provided `RequestAdapter` and `RequestRetrier` instances. - /// - Parameters: - /// - adapter: `RequestAdapter` to use to adapt the request - /// - retrier: `RequestRetrier` to use to retry the request. - /// - Returns: The `Interceptor`. - public static func interceptor(adapter: RequestAdapter, retrier: RequestRetrier) -> Interceptor { - Interceptor(adapter: adapter, retrier: retrier) - } - - /// Creates an `Interceptor` using the provided `RequestAdapter`s, `RequestRetrier`s, and `RequestInterceptor`s. - /// - Parameters: - /// - adapters: `RequestAdapter`s to use to adapt the request. These adapters will be run until one fails. - /// - retriers: `RequestRetrier`s to use to retry the request. These retriers will be run one at a time until - /// a retry is triggered. - /// - interceptors: `RequestInterceptor`s to use to intercept the request. - /// - Returns: The `Interceptor`. - public static func interceptor(adapters: [RequestAdapter] = [], - retriers: [RequestRetrier] = [], - interceptors: [RequestInterceptor] = []) -> Interceptor { - Interceptor(adapters: adapters, retriers: retriers, interceptors: interceptors) - } -} diff --git a/Pods/Alamofire/Source/RequestTaskMap.swift b/Pods/Alamofire/Source/RequestTaskMap.swift deleted file mode 100644 index 9955875..0000000 --- a/Pods/Alamofire/Source/RequestTaskMap.swift +++ /dev/null @@ -1,149 +0,0 @@ -// -// RequestTaskMap.swift -// -// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -/// A type that maintains a two way, one to one map of `URLSessionTask`s to `Request`s. -struct RequestTaskMap { - private typealias Events = (completed: Bool, metricsGathered: Bool) - - private var tasksToRequests: [URLSessionTask: Request] - private var requestsToTasks: [Request: URLSessionTask] - private var taskEvents: [URLSessionTask: Events] - - var requests: [Request] { - Array(tasksToRequests.values) - } - - init(tasksToRequests: [URLSessionTask: Request] = [:], - requestsToTasks: [Request: URLSessionTask] = [:], - taskEvents: [URLSessionTask: (completed: Bool, metricsGathered: Bool)] = [:]) { - self.tasksToRequests = tasksToRequests - self.requestsToTasks = requestsToTasks - self.taskEvents = taskEvents - } - - subscript(_ request: Request) -> URLSessionTask? { - get { requestsToTasks[request] } - set { - guard let newValue = newValue else { - guard let task = requestsToTasks[request] else { - fatalError("RequestTaskMap consistency error: no task corresponding to request found.") - } - - requestsToTasks.removeValue(forKey: request) - tasksToRequests.removeValue(forKey: task) - taskEvents.removeValue(forKey: task) - - return - } - - requestsToTasks[request] = newValue - tasksToRequests[newValue] = request - taskEvents[newValue] = (completed: false, metricsGathered: false) - } - } - - subscript(_ task: URLSessionTask) -> Request? { - get { tasksToRequests[task] } - set { - guard let newValue = newValue else { - guard let request = tasksToRequests[task] else { - fatalError("RequestTaskMap consistency error: no request corresponding to task found.") - } - - tasksToRequests.removeValue(forKey: task) - requestsToTasks.removeValue(forKey: request) - taskEvents.removeValue(forKey: task) - - return - } - - tasksToRequests[task] = newValue - requestsToTasks[newValue] = task - taskEvents[task] = (completed: false, metricsGathered: false) - } - } - - var count: Int { - precondition(tasksToRequests.count == requestsToTasks.count, - "RequestTaskMap.count invalid, requests.count: \(tasksToRequests.count) != tasks.count: \(requestsToTasks.count)") - - return tasksToRequests.count - } - - var eventCount: Int { - precondition(taskEvents.count == count, "RequestTaskMap.eventCount invalid, count: \(count) != taskEvents.count: \(taskEvents.count)") - - return taskEvents.count - } - - var isEmpty: Bool { - precondition(tasksToRequests.isEmpty == requestsToTasks.isEmpty, - "RequestTaskMap.isEmpty invalid, requests.isEmpty: \(tasksToRequests.isEmpty) != tasks.isEmpty: \(requestsToTasks.isEmpty)") - - return tasksToRequests.isEmpty - } - - var isEventsEmpty: Bool { - precondition(taskEvents.isEmpty == isEmpty, "RequestTaskMap.isEventsEmpty invalid, isEmpty: \(isEmpty) != taskEvents.isEmpty: \(taskEvents.isEmpty)") - - return taskEvents.isEmpty - } - - mutating func disassociateIfNecessaryAfterGatheringMetricsForTask(_ task: URLSessionTask) -> Bool { - guard let events = taskEvents[task] else { - fatalError("RequestTaskMap consistency error: no events corresponding to task found.") - } - - switch (events.completed, events.metricsGathered) { - case (_, true): fatalError("RequestTaskMap consistency error: duplicate metricsGatheredForTask call.") - case (false, false): taskEvents[task] = (completed: false, metricsGathered: true); return false - case (true, false): self[task] = nil; return true - } - } - - mutating func disassociateIfNecessaryAfterCompletingTask(_ task: URLSessionTask) -> Bool { - guard let events = taskEvents[task] else { - fatalError("RequestTaskMap consistency error: no events corresponding to task found.") - } - - switch (events.completed, events.metricsGathered) { - case (true, _): fatalError("RequestTaskMap consistency error: duplicate completionReceivedForTask call.") - #if os(Linux) || os(Android) // Linux doesn't gather metrics, so unconditionally remove the reference and return true. - default: self[task] = nil; return true - #else - case (false, false): - if #available(macOS 10.12, iOS 10, watchOS 7, tvOS 10, *) { - taskEvents[task] = (completed: true, metricsGathered: false); return false - } else { - // watchOS < 7 doesn't gather metrics, so unconditionally remove the reference and return true. - self[task] = nil; return true - } - case (false, true): - self[task] = nil; return true - #endif - } - } -} diff --git a/Pods/Alamofire/Source/Response.swift b/Pods/Alamofire/Source/Response.swift deleted file mode 100644 index d9ae9d8..0000000 --- a/Pods/Alamofire/Source/Response.swift +++ /dev/null @@ -1,453 +0,0 @@ -// -// Response.swift -// -// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -/// Default type of `DataResponse` returned by Alamofire, with an `AFError` `Failure` type. -public typealias AFDataResponse = DataResponse -/// Default type of `DownloadResponse` returned by Alamofire, with an `AFError` `Failure` type. -public typealias AFDownloadResponse = DownloadResponse - -/// Type used to store all values associated with a serialized response of a `DataRequest` or `UploadRequest`. -public struct DataResponse { - /// The URL request sent to the server. - public let request: URLRequest? - - /// The server's response to the URL request. - public let response: HTTPURLResponse? - - /// The data returned by the server. - public let data: Data? - - /// The final metrics of the response. - /// - /// - Note: Due to `FB7624529`, collection of `URLSessionTaskMetrics` on watchOS is currently disabled.` - /// - public let metrics: URLSessionTaskMetrics? - - /// The time taken to serialize the response. - public let serializationDuration: TimeInterval - - /// The result of response serialization. - public let result: Result - - /// Returns the associated value of the result if it is a success, `nil` otherwise. - public var value: Success? { result.success } - - /// Returns the associated error value if the result if it is a failure, `nil` otherwise. - public var error: Failure? { result.failure } - - /// Creates a `DataResponse` instance with the specified parameters derived from the response serialization. - /// - /// - Parameters: - /// - request: The `URLRequest` sent to the server. - /// - response: The `HTTPURLResponse` from the server. - /// - data: The `Data` returned by the server. - /// - metrics: The `URLSessionTaskMetrics` of the `DataRequest` or `UploadRequest`. - /// - serializationDuration: The duration taken by serialization. - /// - result: The `Result` of response serialization. - public init(request: URLRequest?, - response: HTTPURLResponse?, - data: Data?, - metrics: URLSessionTaskMetrics?, - serializationDuration: TimeInterval, - result: Result) { - self.request = request - self.response = response - self.data = data - self.metrics = metrics - self.serializationDuration = serializationDuration - self.result = result - } -} - -// MARK: - - -extension DataResponse: CustomStringConvertible, CustomDebugStringConvertible { - /// The textual representation used when written to an output stream, which includes whether the result was a - /// success or failure. - public var description: String { - "\(result)" - } - - /// The debug textual representation used when written to an output stream, which includes (if available) a summary - /// of the `URLRequest`, the request's headers and body (if decodable as a `String` below 100KB); the - /// `HTTPURLResponse`'s status code, headers, and body; the duration of the network and serialization actions; and - /// the `Result` of serialization. - public var debugDescription: String { - guard let urlRequest = request else { return "[Request]: None\n[Result]: \(result)" } - - let requestDescription = DebugDescription.description(of: urlRequest) - - let responseDescription = response.map { response in - let responseBodyDescription = DebugDescription.description(for: data, headers: response.headers) - - return """ - \(DebugDescription.description(of: response)) - \(responseBodyDescription.indentingNewlines()) - """ - } ?? "[Response]: None" - - let networkDuration = metrics.map { "\($0.taskInterval.duration)s" } ?? "None" - - return """ - \(requestDescription) - \(responseDescription) - [Network Duration]: \(networkDuration) - [Serialization Duration]: \(serializationDuration)s - [Result]: \(result) - """ - } -} - -// MARK: - - -extension DataResponse { - /// Evaluates the specified closure when the result of this `DataResponse` is a success, passing the unwrapped - /// result value as a parameter. - /// - /// Use the `map` method with a closure that does not throw. For example: - /// - /// let possibleData: DataResponse = ... - /// let possibleInt = possibleData.map { $0.count } - /// - /// - parameter transform: A closure that takes the success value of the instance's result. - /// - /// - returns: A `DataResponse` whose result wraps the value returned by the given closure. If this instance's - /// result is a failure, returns a response wrapping the same failure. - public func map(_ transform: (Success) -> NewSuccess) -> DataResponse { - DataResponse(request: request, - response: response, - data: data, - metrics: metrics, - serializationDuration: serializationDuration, - result: result.map(transform)) - } - - /// Evaluates the given closure when the result of this `DataResponse` is a success, passing the unwrapped result - /// value as a parameter. - /// - /// Use the `tryMap` method with a closure that may throw an error. For example: - /// - /// let possibleData: DataResponse = ... - /// let possibleObject = possibleData.tryMap { - /// try JSONSerialization.jsonObject(with: $0) - /// } - /// - /// - parameter transform: A closure that takes the success value of the instance's result. - /// - /// - returns: A success or failure `DataResponse` depending on the result of the given closure. If this instance's - /// result is a failure, returns the same failure. - public func tryMap(_ transform: (Success) throws -> NewSuccess) -> DataResponse { - DataResponse(request: request, - response: response, - data: data, - metrics: metrics, - serializationDuration: serializationDuration, - result: result.tryMap(transform)) - } - - /// Evaluates the specified closure when the `DataResponse` is a failure, passing the unwrapped error as a parameter. - /// - /// Use the `mapError` function with a closure that does not throw. For example: - /// - /// let possibleData: DataResponse = ... - /// let withMyError = possibleData.mapError { MyError.error($0) } - /// - /// - Parameter transform: A closure that takes the error of the instance. - /// - /// - Returns: A `DataResponse` instance containing the result of the transform. - public func mapError(_ transform: (Failure) -> NewFailure) -> DataResponse { - DataResponse(request: request, - response: response, - data: data, - metrics: metrics, - serializationDuration: serializationDuration, - result: result.mapError(transform)) - } - - /// Evaluates the specified closure when the `DataResponse` is a failure, passing the unwrapped error as a parameter. - /// - /// Use the `tryMapError` function with a closure that may throw an error. For example: - /// - /// let possibleData: DataResponse = ... - /// let possibleObject = possibleData.tryMapError { - /// try someFailableFunction(taking: $0) - /// } - /// - /// - Parameter transform: A throwing closure that takes the error of the instance. - /// - /// - Returns: A `DataResponse` instance containing the result of the transform. - public func tryMapError(_ transform: (Failure) throws -> NewFailure) -> DataResponse { - DataResponse(request: request, - response: response, - data: data, - metrics: metrics, - serializationDuration: serializationDuration, - result: result.tryMapError(transform)) - } -} - -// MARK: - - -/// Used to store all data associated with a serialized response of a download request. -public struct DownloadResponse { - /// The URL request sent to the server. - public let request: URLRequest? - - /// The server's response to the URL request. - public let response: HTTPURLResponse? - - /// The final destination URL of the data returned from the server after it is moved. - public let fileURL: URL? - - /// The resume data generated if the request was cancelled. - public let resumeData: Data? - - /// The final metrics of the response. - /// - /// - Note: Due to `FB7624529`, collection of `URLSessionTaskMetrics` on watchOS is currently disabled.` - /// - public let metrics: URLSessionTaskMetrics? - - /// The time taken to serialize the response. - public let serializationDuration: TimeInterval - - /// The result of response serialization. - public let result: Result - - /// Returns the associated value of the result if it is a success, `nil` otherwise. - public var value: Success? { result.success } - - /// Returns the associated error value if the result if it is a failure, `nil` otherwise. - public var error: Failure? { result.failure } - - /// Creates a `DownloadResponse` instance with the specified parameters derived from response serialization. - /// - /// - Parameters: - /// - request: The `URLRequest` sent to the server. - /// - response: The `HTTPURLResponse` from the server. - /// - fileURL: The final destination URL of the data returned from the server after it is moved. - /// - resumeData: The resume `Data` generated if the request was cancelled. - /// - metrics: The `URLSessionTaskMetrics` of the `DownloadRequest`. - /// - serializationDuration: The duration taken by serialization. - /// - result: The `Result` of response serialization. - public init(request: URLRequest?, - response: HTTPURLResponse?, - fileURL: URL?, - resumeData: Data?, - metrics: URLSessionTaskMetrics?, - serializationDuration: TimeInterval, - result: Result) { - self.request = request - self.response = response - self.fileURL = fileURL - self.resumeData = resumeData - self.metrics = metrics - self.serializationDuration = serializationDuration - self.result = result - } -} - -// MARK: - - -extension DownloadResponse: CustomStringConvertible, CustomDebugStringConvertible { - /// The textual representation used when written to an output stream, which includes whether the result was a - /// success or failure. - public var description: String { - "\(result)" - } - - /// The debug textual representation used when written to an output stream, which includes the URL request, the URL - /// response, the temporary and destination URLs, the resume data, the durations of the network and serialization - /// actions, and the response serialization result. - public var debugDescription: String { - guard let urlRequest = request else { return "[Request]: None\n[Result]: \(result)" } - - let requestDescription = DebugDescription.description(of: urlRequest) - let responseDescription = response.map(DebugDescription.description(of:)) ?? "[Response]: None" - let networkDuration = metrics.map { "\($0.taskInterval.duration)s" } ?? "None" - let resumeDataDescription = resumeData.map { "\($0)" } ?? "None" - - return """ - \(requestDescription) - \(responseDescription) - [File URL]: \(fileURL?.path ?? "None") - [Resume Data]: \(resumeDataDescription) - [Network Duration]: \(networkDuration) - [Serialization Duration]: \(serializationDuration)s - [Result]: \(result) - """ - } -} - -// MARK: - - -extension DownloadResponse { - /// Evaluates the given closure when the result of this `DownloadResponse` is a success, passing the unwrapped - /// result value as a parameter. - /// - /// Use the `map` method with a closure that does not throw. For example: - /// - /// let possibleData: DownloadResponse = ... - /// let possibleInt = possibleData.map { $0.count } - /// - /// - parameter transform: A closure that takes the success value of the instance's result. - /// - /// - returns: A `DownloadResponse` whose result wraps the value returned by the given closure. If this instance's - /// result is a failure, returns a response wrapping the same failure. - public func map(_ transform: (Success) -> NewSuccess) -> DownloadResponse { - DownloadResponse(request: request, - response: response, - fileURL: fileURL, - resumeData: resumeData, - metrics: metrics, - serializationDuration: serializationDuration, - result: result.map(transform)) - } - - /// Evaluates the given closure when the result of this `DownloadResponse` is a success, passing the unwrapped - /// result value as a parameter. - /// - /// Use the `tryMap` method with a closure that may throw an error. For example: - /// - /// let possibleData: DownloadResponse = ... - /// let possibleObject = possibleData.tryMap { - /// try JSONSerialization.jsonObject(with: $0) - /// } - /// - /// - parameter transform: A closure that takes the success value of the instance's result. - /// - /// - returns: A success or failure `DownloadResponse` depending on the result of the given closure. If this - /// instance's result is a failure, returns the same failure. - public func tryMap(_ transform: (Success) throws -> NewSuccess) -> DownloadResponse { - DownloadResponse(request: request, - response: response, - fileURL: fileURL, - resumeData: resumeData, - metrics: metrics, - serializationDuration: serializationDuration, - result: result.tryMap(transform)) - } - - /// Evaluates the specified closure when the `DownloadResponse` is a failure, passing the unwrapped error as a parameter. - /// - /// Use the `mapError` function with a closure that does not throw. For example: - /// - /// let possibleData: DownloadResponse = ... - /// let withMyError = possibleData.mapError { MyError.error($0) } - /// - /// - Parameter transform: A closure that takes the error of the instance. - /// - /// - Returns: A `DownloadResponse` instance containing the result of the transform. - public func mapError(_ transform: (Failure) -> NewFailure) -> DownloadResponse { - DownloadResponse(request: request, - response: response, - fileURL: fileURL, - resumeData: resumeData, - metrics: metrics, - serializationDuration: serializationDuration, - result: result.mapError(transform)) - } - - /// Evaluates the specified closure when the `DownloadResponse` is a failure, passing the unwrapped error as a parameter. - /// - /// Use the `tryMapError` function with a closure that may throw an error. For example: - /// - /// let possibleData: DownloadResponse = ... - /// let possibleObject = possibleData.tryMapError { - /// try someFailableFunction(taking: $0) - /// } - /// - /// - Parameter transform: A throwing closure that takes the error of the instance. - /// - /// - Returns: A `DownloadResponse` instance containing the result of the transform. - public func tryMapError(_ transform: (Failure) throws -> NewFailure) -> DownloadResponse { - DownloadResponse(request: request, - response: response, - fileURL: fileURL, - resumeData: resumeData, - metrics: metrics, - serializationDuration: serializationDuration, - result: result.tryMapError(transform)) - } -} - -private enum DebugDescription { - static func description(of request: URLRequest) -> String { - let requestSummary = "\(request.httpMethod!) \(request)" - let requestHeadersDescription = DebugDescription.description(for: request.headers) - let requestBodyDescription = DebugDescription.description(for: request.httpBody, headers: request.headers) - - return """ - [Request]: \(requestSummary) - \(requestHeadersDescription.indentingNewlines()) - \(requestBodyDescription.indentingNewlines()) - """ - } - - static func description(of response: HTTPURLResponse) -> String { - """ - [Response]: - [Status Code]: \(response.statusCode) - \(DebugDescription.description(for: response.headers).indentingNewlines()) - """ - } - - static func description(for headers: HTTPHeaders) -> String { - guard !headers.isEmpty else { return "[Headers]: None" } - - let headerDescription = "\(headers.sorted())".indentingNewlines() - return """ - [Headers]: - \(headerDescription) - """ - } - - static func description(for data: Data?, - headers: HTTPHeaders, - allowingPrintableTypes printableTypes: [String] = ["json", "xml", "text"], - maximumLength: Int = 100_000) -> String { - guard let data = data, !data.isEmpty else { return "[Body]: None" } - - guard - data.count <= maximumLength, - printableTypes.compactMap({ headers["Content-Type"]?.contains($0) }).contains(true) - else { return "[Body]: \(data.count) bytes" } - - return """ - [Body]: - \(String(decoding: data, as: UTF8.self) - .trimmingCharacters(in: .whitespacesAndNewlines) - .indentingNewlines()) - """ - } -} - -extension String { - fileprivate func indentingNewlines(by spaceCount: Int = 4) -> String { - let spaces = String(repeating: " ", count: spaceCount) - return replacingOccurrences(of: "\n", with: "\n\(spaces)") - } -} diff --git a/Pods/Alamofire/Source/ResponseSerialization.swift b/Pods/Alamofire/Source/ResponseSerialization.swift deleted file mode 100644 index 2022ac0..0000000 --- a/Pods/Alamofire/Source/ResponseSerialization.swift +++ /dev/null @@ -1,1270 +0,0 @@ -// -// ResponseSerialization.swift -// -// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -// MARK: Protocols - -/// The type to which all data response serializers must conform in order to serialize a response. -public protocol DataResponseSerializerProtocol { - /// The type of serialized object to be created. - associatedtype SerializedObject - - /// Serialize the response `Data` into the provided type.. - /// - /// - Parameters: - /// - request: `URLRequest` which was used to perform the request, if any. - /// - response: `HTTPURLResponse` received from the server, if any. - /// - data: `Data` returned from the server, if any. - /// - error: `Error` produced by Alamofire or the underlying `URLSession` during the request. - /// - /// - Returns: The `SerializedObject`. - /// - Throws: Any `Error` produced during serialization. - func serialize(request: URLRequest?, response: HTTPURLResponse?, data: Data?, error: Error?) throws -> SerializedObject -} - -/// The type to which all download response serializers must conform in order to serialize a response. -public protocol DownloadResponseSerializerProtocol { - /// The type of serialized object to be created. - associatedtype SerializedObject - - /// Serialize the downloaded response `Data` from disk into the provided type.. - /// - /// - Parameters: - /// - request: `URLRequest` which was used to perform the request, if any. - /// - response: `HTTPURLResponse` received from the server, if any. - /// - fileURL: File `URL` to which the response data was downloaded. - /// - error: `Error` produced by Alamofire or the underlying `URLSession` during the request. - /// - /// - Returns: The `SerializedObject`. - /// - Throws: Any `Error` produced during serialization. - func serializeDownload(request: URLRequest?, response: HTTPURLResponse?, fileURL: URL?, error: Error?) throws -> SerializedObject -} - -/// A serializer that can handle both data and download responses. -public protocol ResponseSerializer: DataResponseSerializerProtocol & DownloadResponseSerializerProtocol { - /// `DataPreprocessor` used to prepare incoming `Data` for serialization. - var dataPreprocessor: DataPreprocessor { get } - /// `HTTPMethod`s for which empty response bodies are considered appropriate. - var emptyRequestMethods: Set { get } - /// HTTP response codes for which empty response bodies are considered appropriate. - var emptyResponseCodes: Set { get } -} - -/// Type used to preprocess `Data` before it handled by a serializer. -public protocol DataPreprocessor { - /// Process `Data` before it's handled by a serializer. - /// - Parameter data: The raw `Data` to process. - func preprocess(_ data: Data) throws -> Data -} - -/// `DataPreprocessor` that returns passed `Data` without any transform. -public struct PassthroughPreprocessor: DataPreprocessor { - public init() {} - - public func preprocess(_ data: Data) throws -> Data { data } -} - -/// `DataPreprocessor` that trims Google's typical `)]}',\n` XSSI JSON header. -public struct GoogleXSSIPreprocessor: DataPreprocessor { - public init() {} - - public func preprocess(_ data: Data) throws -> Data { - (data.prefix(6) == Data(")]}',\n".utf8)) ? data.dropFirst(6) : data - } -} - -extension DataPreprocessor where Self == PassthroughPreprocessor { - /// Provides a `PassthroughPreprocessor` instance. - public static var passthrough: PassthroughPreprocessor { PassthroughPreprocessor() } -} - -extension DataPreprocessor where Self == GoogleXSSIPreprocessor { - /// Provides a `GoogleXSSIPreprocessor` instance. - public static var googleXSSI: GoogleXSSIPreprocessor { GoogleXSSIPreprocessor() } -} - -extension ResponseSerializer { - /// Default `DataPreprocessor`. `PassthroughPreprocessor` by default. - public static var defaultDataPreprocessor: DataPreprocessor { PassthroughPreprocessor() } - /// Default `HTTPMethod`s for which empty response bodies are considered appropriate. `[.head]` by default. - public static var defaultEmptyRequestMethods: Set { [.head] } - /// HTTP response codes for which empty response bodies are considered appropriate. `[204, 205]` by default. - public static var defaultEmptyResponseCodes: Set { [204, 205] } - - public var dataPreprocessor: DataPreprocessor { Self.defaultDataPreprocessor } - public var emptyRequestMethods: Set { Self.defaultEmptyRequestMethods } - public var emptyResponseCodes: Set { Self.defaultEmptyResponseCodes } - - /// Determines whether the `request` allows empty response bodies, if `request` exists. - /// - /// - Parameter request: `URLRequest` to evaluate. - /// - /// - Returns: `Bool` representing the outcome of the evaluation, or `nil` if `request` was `nil`. - public func requestAllowsEmptyResponseData(_ request: URLRequest?) -> Bool? { - request.flatMap(\.httpMethod) - .flatMap(HTTPMethod.init) - .map { emptyRequestMethods.contains($0) } - } - - /// Determines whether the `response` allows empty response bodies, if `response` exists`. - /// - /// - Parameter response: `HTTPURLResponse` to evaluate. - /// - /// - Returns: `Bool` representing the outcome of the evaluation, or `nil` if `response` was `nil`. - public func responseAllowsEmptyResponseData(_ response: HTTPURLResponse?) -> Bool? { - response.map(\.statusCode) - .map { emptyResponseCodes.contains($0) } - } - - /// Determines whether `request` and `response` allow empty response bodies. - /// - /// - Parameters: - /// - request: `URLRequest` to evaluate. - /// - response: `HTTPURLResponse` to evaluate. - /// - /// - Returns: `true` if `request` or `response` allow empty bodies, `false` otherwise. - public func emptyResponseAllowed(forRequest request: URLRequest?, response: HTTPURLResponse?) -> Bool { - (requestAllowsEmptyResponseData(request) == true) || (responseAllowsEmptyResponseData(response) == true) - } -} - -/// By default, any serializer declared to conform to both types will get file serialization for free, as it just feeds -/// the data read from disk into the data response serializer. -extension DownloadResponseSerializerProtocol where Self: DataResponseSerializerProtocol { - public func serializeDownload(request: URLRequest?, response: HTTPURLResponse?, fileURL: URL?, error: Error?) throws -> Self.SerializedObject { - guard error == nil else { throw error! } - - guard let fileURL = fileURL else { - throw AFError.responseSerializationFailed(reason: .inputFileNil) - } - - let data: Data - do { - data = try Data(contentsOf: fileURL) - } catch { - throw AFError.responseSerializationFailed(reason: .inputFileReadFailed(at: fileURL)) - } - - do { - return try serialize(request: request, response: response, data: data, error: error) - } catch { - throw error - } - } -} - -// MARK: - Default - -extension DataRequest { - /// Adds a handler to be called once the request has finished. - /// - /// - Parameters: - /// - queue: The queue on which the completion handler is dispatched. `.main` by default. - /// - completionHandler: The code to be executed once the request has finished. - /// - /// - Returns: The request. - @discardableResult - public func response(queue: DispatchQueue = .main, completionHandler: @escaping (AFDataResponse) -> Void) -> Self { - appendResponseSerializer { - // Start work that should be on the serialization queue. - let result = AFResult(value: self.data, error: self.error) - // End work that should be on the serialization queue. - - self.underlyingQueue.async { - let response = DataResponse(request: self.request, - response: self.response, - data: self.data, - metrics: self.metrics, - serializationDuration: 0, - result: result) - - self.eventMonitor?.request(self, didParseResponse: response) - - self.responseSerializerDidComplete { queue.async { completionHandler(response) } } - } - } - - return self - } - - private func _response(queue: DispatchQueue = .main, - responseSerializer: Serializer, - completionHandler: @escaping (AFDataResponse) -> Void) - -> Self { - appendResponseSerializer { - // Start work that should be on the serialization queue. - let start = ProcessInfo.processInfo.systemUptime - let result: AFResult = Result { - try responseSerializer.serialize(request: self.request, - response: self.response, - data: self.data, - error: self.error) - }.mapError { error in - error.asAFError(or: .responseSerializationFailed(reason: .customSerializationFailed(error: error))) - } - - let end = ProcessInfo.processInfo.systemUptime - // End work that should be on the serialization queue. - - self.underlyingQueue.async { - let response = DataResponse(request: self.request, - response: self.response, - data: self.data, - metrics: self.metrics, - serializationDuration: end - start, - result: result) - - self.eventMonitor?.request(self, didParseResponse: response) - - guard !self.isCancelled, let serializerError = result.failure, let delegate = self.delegate else { - self.responseSerializerDidComplete { queue.async { completionHandler(response) } } - return - } - - delegate.retryResult(for: self, dueTo: serializerError) { retryResult in - var didComplete: (() -> Void)? - - defer { - if let didComplete = didComplete { - self.responseSerializerDidComplete { queue.async { didComplete() } } - } - } - - switch retryResult { - case .doNotRetry: - didComplete = { completionHandler(response) } - - case let .doNotRetryWithError(retryError): - let result: AFResult = .failure(retryError.asAFError(orFailWith: "Received retryError was not already AFError")) - - let response = DataResponse(request: self.request, - response: self.response, - data: self.data, - metrics: self.metrics, - serializationDuration: end - start, - result: result) - - didComplete = { completionHandler(response) } - - case .retry, .retryWithDelay: - delegate.retryRequest(self, withDelay: retryResult.delay) - } - } - } - } - - return self - } - - /// Adds a handler to be called once the request has finished. - /// - /// - Parameters: - /// - queue: The queue on which the completion handler is dispatched. `.main` by default - /// - responseSerializer: The response serializer responsible for serializing the request, response, and data. - /// - completionHandler: The code to be executed once the request has finished. - /// - /// - Returns: The request. - @discardableResult - public func response(queue: DispatchQueue = .main, - responseSerializer: Serializer, - completionHandler: @escaping (AFDataResponse) -> Void) - -> Self { - _response(queue: queue, responseSerializer: responseSerializer, completionHandler: completionHandler) - } - - /// Adds a handler to be called once the request has finished. - /// - /// - Parameters: - /// - queue: The queue on which the completion handler is dispatched. `.main` by default - /// - responseSerializer: The response serializer responsible for serializing the request, response, and data. - /// - completionHandler: The code to be executed once the request has finished. - /// - /// - Returns: The request. - @discardableResult - public func response(queue: DispatchQueue = .main, - responseSerializer: Serializer, - completionHandler: @escaping (AFDataResponse) -> Void) - -> Self { - _response(queue: queue, responseSerializer: responseSerializer, completionHandler: completionHandler) - } -} - -extension DownloadRequest { - /// Adds a handler to be called once the request has finished. - /// - /// - Parameters: - /// - queue: The queue on which the completion handler is dispatched. `.main` by default. - /// - completionHandler: The code to be executed once the request has finished. - /// - /// - Returns: The request. - @discardableResult - public func response(queue: DispatchQueue = .main, - completionHandler: @escaping (AFDownloadResponse) -> Void) - -> Self { - appendResponseSerializer { - // Start work that should be on the serialization queue. - let result = AFResult(value: self.fileURL, error: self.error) - // End work that should be on the serialization queue. - - self.underlyingQueue.async { - let response = DownloadResponse(request: self.request, - response: self.response, - fileURL: self.fileURL, - resumeData: self.resumeData, - metrics: self.metrics, - serializationDuration: 0, - result: result) - - self.eventMonitor?.request(self, didParseResponse: response) - - self.responseSerializerDidComplete { queue.async { completionHandler(response) } } - } - } - - return self - } - - private func _response(queue: DispatchQueue = .main, - responseSerializer: Serializer, - completionHandler: @escaping (AFDownloadResponse) -> Void) - -> Self { - appendResponseSerializer { - // Start work that should be on the serialization queue. - let start = ProcessInfo.processInfo.systemUptime - let result: AFResult = Result { - try responseSerializer.serializeDownload(request: self.request, - response: self.response, - fileURL: self.fileURL, - error: self.error) - }.mapError { error in - error.asAFError(or: .responseSerializationFailed(reason: .customSerializationFailed(error: error))) - } - let end = ProcessInfo.processInfo.systemUptime - // End work that should be on the serialization queue. - - self.underlyingQueue.async { - let response = DownloadResponse(request: self.request, - response: self.response, - fileURL: self.fileURL, - resumeData: self.resumeData, - metrics: self.metrics, - serializationDuration: end - start, - result: result) - - self.eventMonitor?.request(self, didParseResponse: response) - - guard let serializerError = result.failure, let delegate = self.delegate else { - self.responseSerializerDidComplete { queue.async { completionHandler(response) } } - return - } - - delegate.retryResult(for: self, dueTo: serializerError) { retryResult in - var didComplete: (() -> Void)? - - defer { - if let didComplete = didComplete { - self.responseSerializerDidComplete { queue.async { didComplete() } } - } - } - - switch retryResult { - case .doNotRetry: - didComplete = { completionHandler(response) } - - case let .doNotRetryWithError(retryError): - let result: AFResult = .failure(retryError.asAFError(orFailWith: "Received retryError was not already AFError")) - - let response = DownloadResponse(request: self.request, - response: self.response, - fileURL: self.fileURL, - resumeData: self.resumeData, - metrics: self.metrics, - serializationDuration: end - start, - result: result) - - didComplete = { completionHandler(response) } - - case .retry, .retryWithDelay: - delegate.retryRequest(self, withDelay: retryResult.delay) - } - } - } - } - - return self - } - - /// Adds a handler to be called once the request has finished. - /// - /// - Parameters: - /// - queue: The queue on which the completion handler is dispatched. `.main` by default. - /// - responseSerializer: The response serializer responsible for serializing the request, response, and data - /// contained in the destination `URL`. - /// - completionHandler: The code to be executed once the request has finished. - /// - /// - Returns: The request. - @discardableResult - public func response(queue: DispatchQueue = .main, - responseSerializer: Serializer, - completionHandler: @escaping (AFDownloadResponse) -> Void) - -> Self { - _response(queue: queue, responseSerializer: responseSerializer, completionHandler: completionHandler) - } - - /// Adds a handler to be called once the request has finished. - /// - /// - Parameters: - /// - queue: The queue on which the completion handler is dispatched. `.main` by default. - /// - responseSerializer: The response serializer responsible for serializing the request, response, and data - /// contained in the destination `URL`. - /// - completionHandler: The code to be executed once the request has finished. - /// - /// - Returns: The request. - @discardableResult - public func response(queue: DispatchQueue = .main, - responseSerializer: Serializer, - completionHandler: @escaping (AFDownloadResponse) -> Void) - -> Self { - _response(queue: queue, responseSerializer: responseSerializer, completionHandler: completionHandler) - } -} - -// MARK: - URL - -/// A `DownloadResponseSerializerProtocol` that performs only `Error` checking and ensures that a downloaded `fileURL` -/// is present. -public struct URLResponseSerializer: DownloadResponseSerializerProtocol { - /// Creates an instance. - public init() {} - - public func serializeDownload(request: URLRequest?, - response: HTTPURLResponse?, - fileURL: URL?, - error: Error?) throws -> URL { - guard error == nil else { throw error! } - - guard let url = fileURL else { - throw AFError.responseSerializationFailed(reason: .inputFileNil) - } - - return url - } -} - -extension DownloadResponseSerializerProtocol where Self == URLResponseSerializer { - /// Provides a `URLResponseSerializer` instance. - public static var url: URLResponseSerializer { URLResponseSerializer() } -} - -extension DownloadRequest { - /// Adds a handler using a `URLResponseSerializer` to be called once the request is finished. - /// - /// - Parameters: - /// - queue: The queue on which the completion handler is called. `.main` by default. - /// - completionHandler: A closure to be executed once the request has finished. - /// - /// - Returns: The request. - @discardableResult - public func responseURL(queue: DispatchQueue = .main, - completionHandler: @escaping (AFDownloadResponse) -> Void) -> Self { - response(queue: queue, responseSerializer: URLResponseSerializer(), completionHandler: completionHandler) - } -} - -// MARK: - Data - -/// A `ResponseSerializer` that performs minimal response checking and returns any response `Data` as-is. By default, a -/// request returning `nil` or no data is considered an error. However, if the request has an `HTTPMethod` or the -/// response has an HTTP status code valid for empty responses, then an empty `Data` value is returned. -public final class DataResponseSerializer: ResponseSerializer { - public let dataPreprocessor: DataPreprocessor - public let emptyResponseCodes: Set - public let emptyRequestMethods: Set - - /// Creates a `DataResponseSerializer` using the provided parameters. - /// - /// - Parameters: - /// - dataPreprocessor: `DataPreprocessor` used to prepare the received `Data` for serialization. - /// - emptyResponseCodes: The HTTP response codes for which empty responses are allowed. `[204, 205]` by default. - /// - emptyRequestMethods: The HTTP request methods for which empty responses are allowed. `[.head]` by default. - public init(dataPreprocessor: DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, - emptyResponseCodes: Set = DataResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = DataResponseSerializer.defaultEmptyRequestMethods) { - self.dataPreprocessor = dataPreprocessor - self.emptyResponseCodes = emptyResponseCodes - self.emptyRequestMethods = emptyRequestMethods - } - - public func serialize(request: URLRequest?, response: HTTPURLResponse?, data: Data?, error: Error?) throws -> Data { - guard error == nil else { throw error! } - - guard var data = data, !data.isEmpty else { - guard emptyResponseAllowed(forRequest: request, response: response) else { - throw AFError.responseSerializationFailed(reason: .inputDataNilOrZeroLength) - } - - return Data() - } - - data = try dataPreprocessor.preprocess(data) - - return data - } -} - -extension ResponseSerializer where Self == DataResponseSerializer { - /// Provides a default `DataResponseSerializer` instance. - public static var data: DataResponseSerializer { DataResponseSerializer() } - - /// Creates a `DataResponseSerializer` using the provided parameters. - /// - /// - Parameters: - /// - dataPreprocessor: `DataPreprocessor` used to prepare the received `Data` for serialization. - /// - emptyResponseCodes: The HTTP response codes for which empty responses are allowed. `[204, 205]` by default. - /// - emptyRequestMethods: The HTTP request methods for which empty responses are allowed. `[.head]` by default. - /// - /// - Returns: The `DataResponseSerializer`. - public static func data(dataPreprocessor: DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, - emptyResponseCodes: Set = DataResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = DataResponseSerializer.defaultEmptyRequestMethods) -> DataResponseSerializer { - DataResponseSerializer(dataPreprocessor: dataPreprocessor, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyRequestMethods) - } -} - -extension DataRequest { - /// Adds a handler using a `DataResponseSerializer` to be called once the request has finished. - /// - /// - Parameters: - /// - queue: The queue on which the completion handler is called. `.main` by default. - /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before calling the - /// `completionHandler`. `PassthroughPreprocessor()` by default. - /// - emptyResponseCodes: HTTP status codes for which empty responses are always valid. `[204, 205]` by default. - /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. - /// - completionHandler: A closure to be executed once the request has finished. - /// - /// - Returns: The request. - @discardableResult - public func responseData(queue: DispatchQueue = .main, - dataPreprocessor: DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, - emptyResponseCodes: Set = DataResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = DataResponseSerializer.defaultEmptyRequestMethods, - completionHandler: @escaping (AFDataResponse) -> Void) -> Self { - response(queue: queue, - responseSerializer: DataResponseSerializer(dataPreprocessor: dataPreprocessor, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyRequestMethods), - completionHandler: completionHandler) - } -} - -extension DownloadRequest { - /// Adds a handler using a `DataResponseSerializer` to be called once the request has finished. - /// - /// - Parameters: - /// - queue: The queue on which the completion handler is called. `.main` by default. - /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before calling the - /// `completionHandler`. `PassthroughPreprocessor()` by default. - /// - emptyResponseCodes: HTTP status codes for which empty responses are always valid. `[204, 205]` by default. - /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. - /// - completionHandler: A closure to be executed once the request has finished. - /// - /// - Returns: The request. - @discardableResult - public func responseData(queue: DispatchQueue = .main, - dataPreprocessor: DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, - emptyResponseCodes: Set = DataResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = DataResponseSerializer.defaultEmptyRequestMethods, - completionHandler: @escaping (AFDownloadResponse) -> Void) -> Self { - response(queue: queue, - responseSerializer: DataResponseSerializer(dataPreprocessor: dataPreprocessor, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyRequestMethods), - completionHandler: completionHandler) - } -} - -// MARK: - String - -/// A `ResponseSerializer` that decodes the response data as a `String`. By default, a request returning `nil` or no -/// data is considered an error. However, if the request has an `HTTPMethod` or the response has an HTTP status code -/// valid for empty responses, then an empty `String` is returned. -public final class StringResponseSerializer: ResponseSerializer { - public let dataPreprocessor: DataPreprocessor - /// Optional string encoding used to validate the response. - public let encoding: String.Encoding? - public let emptyResponseCodes: Set - public let emptyRequestMethods: Set - - /// Creates an instance with the provided values. - /// - /// - Parameters: - /// - dataPreprocessor: `DataPreprocessor` used to prepare the received `Data` for serialization. - /// - encoding: A string encoding. Defaults to `nil`, in which case the encoding will be determined - /// from the server response, falling back to the default HTTP character set, `ISO-8859-1`. - /// - emptyResponseCodes: The HTTP response codes for which empty responses are allowed. `[204, 205]` by default. - /// - emptyRequestMethods: The HTTP request methods for which empty responses are allowed. `[.head]` by default. - public init(dataPreprocessor: DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, - encoding: String.Encoding? = nil, - emptyResponseCodes: Set = StringResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = StringResponseSerializer.defaultEmptyRequestMethods) { - self.dataPreprocessor = dataPreprocessor - self.encoding = encoding - self.emptyResponseCodes = emptyResponseCodes - self.emptyRequestMethods = emptyRequestMethods - } - - public func serialize(request: URLRequest?, response: HTTPURLResponse?, data: Data?, error: Error?) throws -> String { - guard error == nil else { throw error! } - - guard var data = data, !data.isEmpty else { - guard emptyResponseAllowed(forRequest: request, response: response) else { - throw AFError.responseSerializationFailed(reason: .inputDataNilOrZeroLength) - } - - return "" - } - - data = try dataPreprocessor.preprocess(data) - - var convertedEncoding = encoding - - if let encodingName = response?.textEncodingName, convertedEncoding == nil { - convertedEncoding = String.Encoding(ianaCharsetName: encodingName) - } - - let actualEncoding = convertedEncoding ?? .isoLatin1 - - guard let string = String(data: data, encoding: actualEncoding) else { - throw AFError.responseSerializationFailed(reason: .stringSerializationFailed(encoding: actualEncoding)) - } - - return string - } -} - -extension ResponseSerializer where Self == StringResponseSerializer { - /// Provides a default `StringResponseSerializer` instance. - public static var string: StringResponseSerializer { StringResponseSerializer() } - - /// Creates a `StringResponseSerializer` with the provided values. - /// - /// - Parameters: - /// - dataPreprocessor: `DataPreprocessor` used to prepare the received `Data` for serialization. - /// - encoding: A string encoding. Defaults to `nil`, in which case the encoding will be determined - /// from the server response, falling back to the default HTTP character set, `ISO-8859-1`. - /// - emptyResponseCodes: The HTTP response codes for which empty responses are allowed. `[204, 205]` by default. - /// - emptyRequestMethods: The HTTP request methods for which empty responses are allowed. `[.head]` by default. - /// - /// - Returns: The `StringResponseSerializer`. - public static func string(dataPreprocessor: DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, - encoding: String.Encoding? = nil, - emptyResponseCodes: Set = StringResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = StringResponseSerializer.defaultEmptyRequestMethods) -> StringResponseSerializer { - StringResponseSerializer(dataPreprocessor: dataPreprocessor, - encoding: encoding, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyRequestMethods) - } -} - -extension DataRequest { - /// Adds a handler using a `StringResponseSerializer` to be called once the request has finished. - /// - /// - Parameters: - /// - queue: The queue on which the completion handler is dispatched. `.main` by default. - /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before calling the - /// `completionHandler`. `PassthroughPreprocessor()` by default. - /// - encoding: The string encoding. Defaults to `nil`, in which case the encoding will be determined - /// from the server response, falling back to the default HTTP character set, `ISO-8859-1`. - /// - emptyResponseCodes: HTTP status codes for which empty responses are always valid. `[204, 205]` by default. - /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. - /// - completionHandler: A closure to be executed once the request has finished. - /// - /// - Returns: The request. - @discardableResult - public func responseString(queue: DispatchQueue = .main, - dataPreprocessor: DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, - encoding: String.Encoding? = nil, - emptyResponseCodes: Set = StringResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = StringResponseSerializer.defaultEmptyRequestMethods, - completionHandler: @escaping (AFDataResponse) -> Void) -> Self { - response(queue: queue, - responseSerializer: StringResponseSerializer(dataPreprocessor: dataPreprocessor, - encoding: encoding, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyRequestMethods), - completionHandler: completionHandler) - } -} - -extension DownloadRequest { - /// Adds a handler using a `StringResponseSerializer` to be called once the request has finished. - /// - /// - Parameters: - /// - queue: The queue on which the completion handler is dispatched. `.main` by default. - /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before calling the - /// `completionHandler`. `PassthroughPreprocessor()` by default. - /// - encoding: The string encoding. Defaults to `nil`, in which case the encoding will be determined - /// from the server response, falling back to the default HTTP character set, `ISO-8859-1`. - /// - emptyResponseCodes: HTTP status codes for which empty responses are always valid. `[204, 205]` by default. - /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. - /// - completionHandler: A closure to be executed once the request has finished. - /// - /// - Returns: The request. - @discardableResult - public func responseString(queue: DispatchQueue = .main, - dataPreprocessor: DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, - encoding: String.Encoding? = nil, - emptyResponseCodes: Set = StringResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = StringResponseSerializer.defaultEmptyRequestMethods, - completionHandler: @escaping (AFDownloadResponse) -> Void) -> Self { - response(queue: queue, - responseSerializer: StringResponseSerializer(dataPreprocessor: dataPreprocessor, - encoding: encoding, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyRequestMethods), - completionHandler: completionHandler) - } -} - -// MARK: - JSON - -/// A `ResponseSerializer` that decodes the response data using `JSONSerialization`. By default, a request returning -/// `nil` or no data is considered an error. However, if the request has an `HTTPMethod` or the response has an -/// HTTP status code valid for empty responses, then an `NSNull` value is returned. -@available(*, deprecated, message: "JSONResponseSerializer deprecated and will be removed in Alamofire 6. Use DecodableResponseSerializer instead.") -public final class JSONResponseSerializer: ResponseSerializer { - public let dataPreprocessor: DataPreprocessor - public let emptyResponseCodes: Set - public let emptyRequestMethods: Set - /// `JSONSerialization.ReadingOptions` used when serializing a response. - public let options: JSONSerialization.ReadingOptions - - /// Creates an instance with the provided values. - /// - /// - Parameters: - /// - dataPreprocessor: `DataPreprocessor` used to prepare the received `Data` for serialization. - /// - emptyResponseCodes: The HTTP response codes for which empty responses are allowed. `[204, 205]` by default. - /// - emptyRequestMethods: The HTTP request methods for which empty responses are allowed. `[.head]` by default. - /// - options: The options to use. `.allowFragments` by default. - public init(dataPreprocessor: DataPreprocessor = JSONResponseSerializer.defaultDataPreprocessor, - emptyResponseCodes: Set = JSONResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = JSONResponseSerializer.defaultEmptyRequestMethods, - options: JSONSerialization.ReadingOptions = .allowFragments) { - self.dataPreprocessor = dataPreprocessor - self.emptyResponseCodes = emptyResponseCodes - self.emptyRequestMethods = emptyRequestMethods - self.options = options - } - - public func serialize(request: URLRequest?, response: HTTPURLResponse?, data: Data?, error: Error?) throws -> Any { - guard error == nil else { throw error! } - - guard var data = data, !data.isEmpty else { - guard emptyResponseAllowed(forRequest: request, response: response) else { - throw AFError.responseSerializationFailed(reason: .inputDataNilOrZeroLength) - } - - return NSNull() - } - - data = try dataPreprocessor.preprocess(data) - - do { - return try JSONSerialization.jsonObject(with: data, options: options) - } catch { - throw AFError.responseSerializationFailed(reason: .jsonSerializationFailed(error: error)) - } - } -} - -extension DataRequest { - /// Adds a handler using a `JSONResponseSerializer` to be called once the request has finished. - /// - /// - Parameters: - /// - queue: The queue on which the completion handler is dispatched. `.main` by default. - /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before calling the - /// `completionHandler`. `PassthroughPreprocessor()` by default. - /// - emptyResponseCodes: HTTP status codes for which empty responses are always valid. `[204, 205]` by default. - /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. - /// - options: `JSONSerialization.ReadingOptions` used when parsing the response. `.allowFragments` - /// by default. - /// - completionHandler: A closure to be executed once the request has finished. - /// - /// - Returns: The request. - @available(*, deprecated, message: "responseJSON deprecated and will be removed in Alamofire 6. Use responseDecodable instead.") - @discardableResult - public func responseJSON(queue: DispatchQueue = .main, - dataPreprocessor: DataPreprocessor = JSONResponseSerializer.defaultDataPreprocessor, - emptyResponseCodes: Set = JSONResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = JSONResponseSerializer.defaultEmptyRequestMethods, - options: JSONSerialization.ReadingOptions = .allowFragments, - completionHandler: @escaping (AFDataResponse) -> Void) -> Self { - response(queue: queue, - responseSerializer: JSONResponseSerializer(dataPreprocessor: dataPreprocessor, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyRequestMethods, - options: options), - completionHandler: completionHandler) - } -} - -extension DownloadRequest { - /// Adds a handler using a `JSONResponseSerializer` to be called once the request has finished. - /// - /// - Parameters: - /// - queue: The queue on which the completion handler is dispatched. `.main` by default. - /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before calling the - /// `completionHandler`. `PassthroughPreprocessor()` by default. - /// - emptyResponseCodes: HTTP status codes for which empty responses are always valid. `[204, 205]` by default. - /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. - /// - options: `JSONSerialization.ReadingOptions` used when parsing the response. `.allowFragments` - /// by default. - /// - completionHandler: A closure to be executed once the request has finished. - /// - /// - Returns: The request. - @available(*, deprecated, message: "responseJSON deprecated and will be removed in Alamofire 6. Use responseDecodable instead.") - @discardableResult - public func responseJSON(queue: DispatchQueue = .main, - dataPreprocessor: DataPreprocessor = JSONResponseSerializer.defaultDataPreprocessor, - emptyResponseCodes: Set = JSONResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = JSONResponseSerializer.defaultEmptyRequestMethods, - options: JSONSerialization.ReadingOptions = .allowFragments, - completionHandler: @escaping (AFDownloadResponse) -> Void) -> Self { - response(queue: queue, - responseSerializer: JSONResponseSerializer(dataPreprocessor: dataPreprocessor, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyRequestMethods, - options: options), - completionHandler: completionHandler) - } -} - -// MARK: - Empty - -/// Protocol representing an empty response. Use `T.emptyValue()` to get an instance. -public protocol EmptyResponse { - /// Empty value for the conforming type. - /// - /// - Returns: Value of `Self` to use for empty values. - static func emptyValue() -> Self -} - -/// Type representing an empty value. Use `Empty.value` to get the static instance. -public struct Empty: Codable { - /// Static `Empty` instance used for all `Empty` responses. - public static let value = Empty() -} - -extension Empty: EmptyResponse { - public static func emptyValue() -> Empty { - value - } -} - -// MARK: - DataDecoder Protocol - -/// Any type which can decode `Data` into a `Decodable` type. -public protocol DataDecoder { - /// Decode `Data` into the provided type. - /// - /// - Parameters: - /// - type: The `Type` to be decoded. - /// - data: The `Data` to be decoded. - /// - /// - Returns: The decoded value of type `D`. - /// - Throws: Any error that occurs during decode. - func decode(_ type: D.Type, from data: Data) throws -> D -} - -/// `JSONDecoder` automatically conforms to `DataDecoder`. -extension JSONDecoder: DataDecoder {} -/// `PropertyListDecoder` automatically conforms to `DataDecoder`. -extension PropertyListDecoder: DataDecoder {} - -// MARK: - Decodable - -/// A `ResponseSerializer` that decodes the response data as a generic value using any type that conforms to -/// `DataDecoder`. By default, this is an instance of `JSONDecoder`. Additionally, a request returning `nil` or no data -/// is considered an error. However, if the request has an `HTTPMethod` or the response has an HTTP status code valid -/// for empty responses then an empty value will be returned. If the decoded type conforms to `EmptyResponse`, the -/// type's `emptyValue()` will be returned. If the decoded type is `Empty`, the `.value` instance is returned. If the -/// decoded type *does not* conform to `EmptyResponse` and isn't `Empty`, an error will be produced. -public final class DecodableResponseSerializer: ResponseSerializer { - public let dataPreprocessor: DataPreprocessor - /// The `DataDecoder` instance used to decode responses. - public let decoder: DataDecoder - public let emptyResponseCodes: Set - public let emptyRequestMethods: Set - - /// Creates an instance using the values provided. - /// - /// - Parameters: - /// - dataPreprocessor: `DataPreprocessor` used to prepare the received `Data` for serialization. - /// - decoder: The `DataDecoder`. `JSONDecoder()` by default. - /// - emptyResponseCodes: The HTTP response codes for which empty responses are allowed. `[204, 205]` by default. - /// - emptyRequestMethods: The HTTP request methods for which empty responses are allowed. `[.head]` by default. - public init(dataPreprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, - decoder: DataDecoder = JSONDecoder(), - emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) { - self.dataPreprocessor = dataPreprocessor - self.decoder = decoder - self.emptyResponseCodes = emptyResponseCodes - self.emptyRequestMethods = emptyRequestMethods - } - - public func serialize(request: URLRequest?, response: HTTPURLResponse?, data: Data?, error: Error?) throws -> T { - guard error == nil else { throw error! } - - guard var data = data, !data.isEmpty else { - guard emptyResponseAllowed(forRequest: request, response: response) else { - throw AFError.responseSerializationFailed(reason: .inputDataNilOrZeroLength) - } - - guard let emptyResponseType = T.self as? EmptyResponse.Type, let emptyValue = emptyResponseType.emptyValue() as? T else { - throw AFError.responseSerializationFailed(reason: .invalidEmptyResponse(type: "\(T.self)")) - } - - return emptyValue - } - - data = try dataPreprocessor.preprocess(data) - - do { - return try decoder.decode(T.self, from: data) - } catch { - throw AFError.responseSerializationFailed(reason: .decodingFailed(error: error)) - } - } -} - -extension ResponseSerializer { - /// Creates a `DecodableResponseSerializer` using the values provided. - /// - /// - Parameters: - /// - type: `Decodable` type to decode from response data. - /// - dataPreprocessor: `DataPreprocessor` used to prepare the received `Data` for serialization. - /// - decoder: The `DataDecoder`. `JSONDecoder()` by default. - /// - emptyResponseCodes: The HTTP response codes for which empty responses are allowed. `[204, 205]` by default. - /// - emptyRequestMethods: The HTTP request methods for which empty responses are allowed. `[.head]` by default. - /// - /// - Returns: The `DecodableResponseSerializer`. - public static func decodable(of type: T.Type, - dataPreprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, - decoder: DataDecoder = JSONDecoder(), - emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) -> DecodableResponseSerializer where Self == DecodableResponseSerializer { - DecodableResponseSerializer(dataPreprocessor: dataPreprocessor, - decoder: decoder, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyRequestMethods) - } -} - -extension DataRequest { - /// Adds a handler using a `DecodableResponseSerializer` to be called once the request has finished. - /// - /// - Parameters: - /// - type: `Decodable` type to decode from response data. - /// - queue: The queue on which the completion handler is dispatched. `.main` by default. - /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before calling the - /// `completionHandler`. `PassthroughPreprocessor()` by default. - /// - decoder: `DataDecoder` to use to decode the response. `JSONDecoder()` by default. - /// - emptyResponseCodes: HTTP status codes for which empty responses are always valid. `[204, 205]` by default. - /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. - /// - completionHandler: A closure to be executed once the request has finished. - /// - /// - Returns: The request. - @discardableResult - public func responseDecodable(of type: T.Type = T.self, - queue: DispatchQueue = .main, - dataPreprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, - decoder: DataDecoder = JSONDecoder(), - emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods, - completionHandler: @escaping (AFDataResponse) -> Void) -> Self { - response(queue: queue, - responseSerializer: DecodableResponseSerializer(dataPreprocessor: dataPreprocessor, - decoder: decoder, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyRequestMethods), - completionHandler: completionHandler) - } -} - -extension DownloadRequest { - /// Adds a handler using a `DecodableResponseSerializer` to be called once the request has finished. - /// - /// - Parameters: - /// - type: `Decodable` type to decode from response data. - /// - queue: The queue on which the completion handler is dispatched. `.main` by default. - /// - dataPreprocessor: `DataPreprocessor` which processes the received `Data` before calling the - /// `completionHandler`. `PassthroughPreprocessor()` by default. - /// - decoder: `DataDecoder` to use to decode the response. `JSONDecoder()` by default. - /// - emptyResponseCodes: HTTP status codes for which empty responses are always valid. `[204, 205]` by default. - /// - emptyRequestMethods: `HTTPMethod`s for which empty responses are always valid. `[.head]` by default. - /// - completionHandler: A closure to be executed once the request has finished. - /// - /// - Returns: The request. - @discardableResult - public func responseDecodable(of type: T.Type = T.self, - queue: DispatchQueue = .main, - dataPreprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, - decoder: DataDecoder = JSONDecoder(), - emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, - emptyRequestMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods, - completionHandler: @escaping (AFDownloadResponse) -> Void) -> Self { - response(queue: queue, - responseSerializer: DecodableResponseSerializer(dataPreprocessor: dataPreprocessor, - decoder: decoder, - emptyResponseCodes: emptyResponseCodes, - emptyRequestMethods: emptyRequestMethods), - completionHandler: completionHandler) - } -} - -// MARK: - DataStreamRequest - -/// A type which can serialize incoming `Data`. -public protocol DataStreamSerializer { - /// Type produced from the serialized `Data`. - associatedtype SerializedObject - - /// Serializes incoming `Data` into a `SerializedObject` value. - /// - /// - Parameter data: `Data` to be serialized. - /// - /// - Throws: Any error produced during serialization. - func serialize(_ data: Data) throws -> SerializedObject -} - -/// `DataStreamSerializer` which uses the provided `DataPreprocessor` and `DataDecoder` to serialize the incoming `Data`. -public struct DecodableStreamSerializer: DataStreamSerializer { - /// `DataDecoder` used to decode incoming `Data`. - public let decoder: DataDecoder - /// `DataPreprocessor` incoming `Data` is passed through before being passed to the `DataDecoder`. - public let dataPreprocessor: DataPreprocessor - - /// Creates an instance with the provided `DataDecoder` and `DataPreprocessor`. - /// - Parameters: - /// - decoder: ` DataDecoder` used to decode incoming `Data`. `JSONDecoder()` by default. - /// - dataPreprocessor: `DataPreprocessor` used to process incoming `Data` before it's passed through the - /// `decoder`. `PassthroughPreprocessor()` by default. - public init(decoder: DataDecoder = JSONDecoder(), dataPreprocessor: DataPreprocessor = PassthroughPreprocessor()) { - self.decoder = decoder - self.dataPreprocessor = dataPreprocessor - } - - public func serialize(_ data: Data) throws -> T { - let processedData = try dataPreprocessor.preprocess(data) - do { - return try decoder.decode(T.self, from: processedData) - } catch { - throw AFError.responseSerializationFailed(reason: .decodingFailed(error: error)) - } - } -} - -/// `DataStreamSerializer` which performs no serialization on incoming `Data`. -public struct PassthroughStreamSerializer: DataStreamSerializer { - /// Creates an instance. - public init() {} - - public func serialize(_ data: Data) throws -> Data { data } -} - -/// `DataStreamSerializer` which serializes incoming stream `Data` into `UTF8`-decoded `String` values. -public struct StringStreamSerializer: DataStreamSerializer { - /// Creates an instance. - public init() {} - - public func serialize(_ data: Data) throws -> String { - String(decoding: data, as: UTF8.self) - } -} - -extension DataStreamSerializer { - /// Creates a `DecodableStreamSerializer` instance with the provided `DataDecoder` and `DataPreprocessor`. - /// - /// - Parameters: - /// - type: `Decodable` type to decode from stream data. - /// - decoder: ` DataDecoder` used to decode incoming `Data`. `JSONDecoder()` by default. - /// - dataPreprocessor: `DataPreprocessor` used to process incoming `Data` before it's passed through the - /// `decoder`. `PassthroughPreprocessor()` by default. - public static func decodable(of type: T.Type, - decoder: DataDecoder = JSONDecoder(), - dataPreprocessor: DataPreprocessor = PassthroughPreprocessor()) -> Self where Self == DecodableStreamSerializer { - DecodableStreamSerializer(decoder: decoder, dataPreprocessor: dataPreprocessor) - } -} - -extension DataStreamSerializer where Self == PassthroughStreamSerializer { - /// Provides a `PassthroughStreamSerializer` instance. - public static var passthrough: PassthroughStreamSerializer { PassthroughStreamSerializer() } -} - -extension DataStreamSerializer where Self == StringStreamSerializer { - /// Provides a `StringStreamSerializer` instance. - public static var string: StringStreamSerializer { StringStreamSerializer() } -} - -extension DataStreamRequest { - /// Adds a `StreamHandler` which performs no parsing on incoming `Data`. - /// - /// - Parameters: - /// - queue: `DispatchQueue` on which to perform `StreamHandler` closure. - /// - stream: `StreamHandler` closure called as `Data` is received. May be called multiple times. - /// - /// - Returns: The `DataStreamRequest`. - @discardableResult - public func responseStream(on queue: DispatchQueue = .main, stream: @escaping Handler) -> Self { - let parser = { [unowned self] (data: Data) in - queue.async { - self.capturingError { - try stream(.init(event: .stream(.success(data)), token: .init(self))) - } - - self.updateAndCompleteIfPossible() - } - } - - streamMutableState.write { $0.streams.append(parser) } - appendStreamCompletion(on: queue, stream: stream) - - return self - } - - /// Adds a `StreamHandler` which uses the provided `DataStreamSerializer` to process incoming `Data`. - /// - /// - Parameters: - /// - serializer: `DataStreamSerializer` used to process incoming `Data`. Its work is done on the `serializationQueue`. - /// - queue: `DispatchQueue` on which to perform `StreamHandler` closure. - /// - stream: `StreamHandler` closure called as `Data` is received. May be called multiple times. - /// - /// - Returns: The `DataStreamRequest`. - @discardableResult - public func responseStream(using serializer: Serializer, - on queue: DispatchQueue = .main, - stream: @escaping Handler) -> Self { - let parser = { [unowned self] (data: Data) in - serializationQueue.async { - // Start work on serialization queue. - let result = Result { try serializer.serialize(data) } - .mapError { $0.asAFError(or: .responseSerializationFailed(reason: .customSerializationFailed(error: $0))) } - // End work on serialization queue. - self.underlyingQueue.async { - self.eventMonitor?.request(self, didParseStream: result) - - if result.isFailure, self.automaticallyCancelOnStreamError { - self.cancel() - } - - queue.async { - self.capturingError { - try stream(.init(event: .stream(result), token: .init(self))) - } - - self.updateAndCompleteIfPossible() - } - } - } - } - - streamMutableState.write { $0.streams.append(parser) } - appendStreamCompletion(on: queue, stream: stream) - - return self - } - - /// Adds a `StreamHandler` which parses incoming `Data` as a UTF8 `String`. - /// - /// - Parameters: - /// - queue: `DispatchQueue` on which to perform `StreamHandler` closure. - /// - stream: `StreamHandler` closure called as `Data` is received. May be called multiple times. - /// - /// - Returns: The `DataStreamRequest`. - @discardableResult - public func responseStreamString(on queue: DispatchQueue = .main, - stream: @escaping Handler) -> Self { - let parser = { [unowned self] (data: Data) in - serializationQueue.async { - // Start work on serialization queue. - let string = String(decoding: data, as: UTF8.self) - // End work on serialization queue. - self.underlyingQueue.async { - self.eventMonitor?.request(self, didParseStream: .success(string)) - - queue.async { - self.capturingError { - try stream(.init(event: .stream(.success(string)), token: .init(self))) - } - - self.updateAndCompleteIfPossible() - } - } - } - } - - streamMutableState.write { $0.streams.append(parser) } - appendStreamCompletion(on: queue, stream: stream) - - return self - } - - private func updateAndCompleteIfPossible() { - streamMutableState.write { state in - state.numberOfExecutingStreams -= 1 - - guard state.numberOfExecutingStreams == 0, !state.enqueuedCompletionEvents.isEmpty else { return } - - let completionEvents = state.enqueuedCompletionEvents - self.underlyingQueue.async { completionEvents.forEach { $0() } } - state.enqueuedCompletionEvents.removeAll() - } - } - - /// Adds a `StreamHandler` which parses incoming `Data` using the provided `DataDecoder`. - /// - /// - Parameters: - /// - type: `Decodable` type to parse incoming `Data` into. - /// - queue: `DispatchQueue` on which to perform `StreamHandler` closure. - /// - decoder: `DataDecoder` used to decode the incoming `Data`. - /// - preprocessor: `DataPreprocessor` used to process the incoming `Data` before it's passed to the `decoder`. - /// - stream: `StreamHandler` closure called as `Data` is received. May be called multiple times. - /// - /// - Returns: The `DataStreamRequest`. - @discardableResult - public func responseStreamDecodable(of type: T.Type = T.self, - on queue: DispatchQueue = .main, - using decoder: DataDecoder = JSONDecoder(), - preprocessor: DataPreprocessor = PassthroughPreprocessor(), - stream: @escaping Handler) -> Self { - responseStream(using: DecodableStreamSerializer(decoder: decoder, dataPreprocessor: preprocessor), - stream: stream) - } -} diff --git a/Pods/Alamofire/Source/Result+Alamofire.swift b/Pods/Alamofire/Source/Result+Alamofire.swift deleted file mode 100644 index 39ac286..0000000 --- a/Pods/Alamofire/Source/Result+Alamofire.swift +++ /dev/null @@ -1,120 +0,0 @@ -// -// Result+Alamofire.swift -// -// Copyright (c) 2019 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -/// Default type of `Result` returned by Alamofire, with an `AFError` `Failure` type. -public typealias AFResult = Result - -// MARK: - Internal APIs - -extension Result { - /// Returns whether the instance is `.success`. - var isSuccess: Bool { - guard case .success = self else { return false } - return true - } - - /// Returns whether the instance is `.failure`. - var isFailure: Bool { - !isSuccess - } - - /// Returns the associated value if the result is a success, `nil` otherwise. - var success: Success? { - guard case let .success(value) = self else { return nil } - return value - } - - /// Returns the associated error value if the result is a failure, `nil` otherwise. - var failure: Failure? { - guard case let .failure(error) = self else { return nil } - return error - } - - /// Initializes a `Result` from value or error. Returns `.failure` if the error is non-nil, `.success` otherwise. - /// - /// - Parameters: - /// - value: A value. - /// - error: An `Error`. - init(value: Success, error: Failure?) { - if let error = error { - self = .failure(error) - } else { - self = .success(value) - } - } - - /// Evaluates the specified closure when the `Result` is a success, passing the unwrapped value as a parameter. - /// - /// Use the `tryMap` method with a closure that may throw an error. For example: - /// - /// let possibleData: Result = .success(Data(...)) - /// let possibleObject = possibleData.tryMap { - /// try JSONSerialization.jsonObject(with: $0) - /// } - /// - /// - parameter transform: A closure that takes the success value of the instance. - /// - /// - returns: A `Result` containing the result of the given closure. If this instance is a failure, returns the - /// same failure. - func tryMap(_ transform: (Success) throws -> NewSuccess) -> Result { - switch self { - case let .success(value): - do { - return try .success(transform(value)) - } catch { - return .failure(error) - } - case let .failure(error): - return .failure(error) - } - } - - /// Evaluates the specified closure when the `Result` is a failure, passing the unwrapped error as a parameter. - /// - /// Use the `tryMapError` function with a closure that may throw an error. For example: - /// - /// let possibleData: Result = .success(Data(...)) - /// let possibleObject = possibleData.tryMapError { - /// try someFailableFunction(taking: $0) - /// } - /// - /// - Parameter transform: A throwing closure that takes the error of the instance. - /// - /// - Returns: A `Result` instance containing the result of the transform. If this instance is a success, returns - /// the same success. - func tryMapError(_ transform: (Failure) throws -> NewFailure) -> Result { - switch self { - case let .failure(error): - do { - return try .failure(transform(error)) - } catch { - return .failure(error) - } - case let .success(value): - return .success(value) - } - } -} diff --git a/Pods/Alamofire/Source/RetryPolicy.swift b/Pods/Alamofire/Source/RetryPolicy.swift deleted file mode 100644 index bb52c6c..0000000 --- a/Pods/Alamofire/Source/RetryPolicy.swift +++ /dev/null @@ -1,430 +0,0 @@ -// -// RetryPolicy.swift -// -// Copyright (c) 2019-2020 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -/// A retry policy that retries requests using an exponential backoff for allowed HTTP methods and HTTP status codes -/// as well as certain types of networking errors. -open class RetryPolicy: RequestInterceptor { - /// The default retry limit for retry policies. - public static let defaultRetryLimit: UInt = 2 - - /// The default exponential backoff base for retry policies (must be a minimum of 2). - public static let defaultExponentialBackoffBase: UInt = 2 - - /// The default exponential backoff scale for retry policies. - public static let defaultExponentialBackoffScale: Double = 0.5 - - /// The default HTTP methods to retry. - /// See [RFC 2616 - Section 9.1.2](https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html) for more information. - public static let defaultRetryableHTTPMethods: Set = [.delete, // [Delete](https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.7) - not always idempotent - .get, // [GET](https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3) - generally idempotent - .head, // [HEAD](https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.4) - generally idempotent - .options, // [OPTIONS](https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.2) - inherently idempotent - .put, // [PUT](https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.6) - not always idempotent - .trace // [TRACE](https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.8) - inherently idempotent - ] - - /// The default HTTP status codes to retry. - /// See [RFC 2616 - Section 10](https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10) for more information. - public static let defaultRetryableHTTPStatusCodes: Set = [408, // [Request Timeout](https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.9) - 500, // [Internal Server Error](https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.1) - 502, // [Bad Gateway](https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.3) - 503, // [Service Unavailable](https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.4) - 504 // [Gateway Timeout](https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.5) - ] - - /// The default URL error codes to retry. - public static let defaultRetryableURLErrorCodes: Set = [ // [Security] App Transport Security disallowed a connection because there is no secure network connection. - // - [Disabled] ATS settings do not change at runtime. - // .appTransportSecurityRequiresSecureConnection, - - // [System] An app or app extension attempted to connect to a background session that is already connected to a - // process. - // - [Enabled] The other process could release the background session. - .backgroundSessionInUseByAnotherProcess, - - // [System] The shared container identifier of the URL session configuration is needed but has not been set. - // - [Disabled] Cannot change at runtime. - // .backgroundSessionRequiresSharedContainer, - - // [System] The app is suspended or exits while a background data task is processing. - // - [Enabled] App can be foregrounded or launched to recover. - .backgroundSessionWasDisconnected, - - // [Network] The URL Loading system received bad data from the server. - // - [Enabled] Server could return valid data when retrying. - .badServerResponse, - - // [Resource] A malformed URL prevented a URL request from being initiated. - // - [Disabled] URL was most likely constructed incorrectly. - // .badURL, - - // [System] A connection was attempted while a phone call is active on a network that does not support - // simultaneous phone and data communication (EDGE or GPRS). - // - [Enabled] Phone call could be ended to allow request to recover. - .callIsActive, - - // [Client] An asynchronous load has been canceled. - // - [Disabled] Request was cancelled by the client. - // .cancelled, - - // [File System] A download task couldn’t close the downloaded file on disk. - // - [Disabled] File system error is unlikely to recover with retry. - // .cannotCloseFile, - - // [Network] An attempt to connect to a host failed. - // - [Enabled] Server or DNS lookup could recover during retry. - .cannotConnectToHost, - - // [File System] A download task couldn’t create the downloaded file on disk because of an I/O failure. - // - [Disabled] File system error is unlikely to recover with retry. - // .cannotCreateFile, - - // [Data] Content data received during a connection request had an unknown content encoding. - // - [Disabled] Server is unlikely to modify the content encoding during a retry. - // .cannotDecodeContentData, - - // [Data] Content data received during a connection request could not be decoded for a known content encoding. - // - [Disabled] Server is unlikely to modify the content encoding during a retry. - // .cannotDecodeRawData, - - // [Network] The host name for a URL could not be resolved. - // - [Enabled] Server or DNS lookup could recover during retry. - .cannotFindHost, - - // [Network] A request to load an item only from the cache could not be satisfied. - // - [Enabled] Cache could be populated during a retry. - .cannotLoadFromNetwork, - - // [File System] A download task was unable to move a downloaded file on disk. - // - [Disabled] File system error is unlikely to recover with retry. - // .cannotMoveFile, - - // [File System] A download task was unable to open the downloaded file on disk. - // - [Disabled] File system error is unlikely to recover with retry. - // .cannotOpenFile, - - // [Data] A task could not parse a response. - // - [Disabled] Invalid response is unlikely to recover with retry. - // .cannotParseResponse, - - // [File System] A download task was unable to remove a downloaded file from disk. - // - [Disabled] File system error is unlikely to recover with retry. - // .cannotRemoveFile, - - // [File System] A download task was unable to write to the downloaded file on disk. - // - [Disabled] File system error is unlikely to recover with retry. - // .cannotWriteToFile, - - // [Security] A client certificate was rejected. - // - [Disabled] Client certificate is unlikely to change with retry. - // .clientCertificateRejected, - - // [Security] A client certificate was required to authenticate an SSL connection during a request. - // - [Disabled] Client certificate is unlikely to be provided with retry. - // .clientCertificateRequired, - - // [Data] The length of the resource data exceeds the maximum allowed. - // - [Disabled] Resource will likely still exceed the length maximum on retry. - // .dataLengthExceedsMaximum, - - // [System] The cellular network disallowed a connection. - // - [Enabled] WiFi connection could be established during retry. - .dataNotAllowed, - - // [Network] The host address could not be found via DNS lookup. - // - [Enabled] DNS lookup could succeed during retry. - .dnsLookupFailed, - - // [Data] A download task failed to decode an encoded file during the download. - // - [Enabled] Server could correct the decoding issue with retry. - .downloadDecodingFailedMidStream, - - // [Data] A download task failed to decode an encoded file after downloading. - // - [Enabled] Server could correct the decoding issue with retry. - .downloadDecodingFailedToComplete, - - // [File System] A file does not exist. - // - [Disabled] File system error is unlikely to recover with retry. - // .fileDoesNotExist, - - // [File System] A request for an FTP file resulted in the server responding that the file is not a plain file, - // but a directory. - // - [Disabled] FTP directory is not likely to change to a file during a retry. - // .fileIsDirectory, - - // [Network] A redirect loop has been detected or the threshold for number of allowable redirects has been - // exceeded (currently 16). - // - [Disabled] The redirect loop is unlikely to be resolved within the retry window. - // .httpTooManyRedirects, - - // [System] The attempted connection required activating a data context while roaming, but international roaming - // is disabled. - // - [Enabled] WiFi connection could be established during retry. - .internationalRoamingOff, - - // [Connectivity] A client or server connection was severed in the middle of an in-progress load. - // - [Enabled] A network connection could be established during retry. - .networkConnectionLost, - - // [File System] A resource couldn’t be read because of insufficient permissions. - // - [Disabled] Permissions are unlikely to be granted during retry. - // .noPermissionsToReadFile, - - // [Connectivity] A network resource was requested, but an internet connection has not been established and - // cannot be established automatically. - // - [Enabled] A network connection could be established during retry. - .notConnectedToInternet, - - // [Resource] A redirect was specified by way of server response code, but the server did not accompany this - // code with a redirect URL. - // - [Disabled] The redirect URL is unlikely to be supplied during a retry. - // .redirectToNonExistentLocation, - - // [Client] A body stream is needed but the client did not provide one. - // - [Disabled] The client will be unlikely to supply a body stream during retry. - // .requestBodyStreamExhausted, - - // [Resource] A requested resource couldn’t be retrieved. - // - [Disabled] The resource is unlikely to become available during the retry window. - // .resourceUnavailable, - - // [Security] An attempt to establish a secure connection failed for reasons that can’t be expressed more - // specifically. - // - [Enabled] The secure connection could be established during a retry given the lack of specificity - // provided by the error. - .secureConnectionFailed, - - // [Security] A server certificate had a date which indicates it has expired, or is not yet valid. - // - [Enabled] The server certificate could become valid within the retry window. - .serverCertificateHasBadDate, - - // [Security] A server certificate was not signed by any root server. - // - [Disabled] The server certificate is unlikely to change during the retry window. - // .serverCertificateHasUnknownRoot, - - // [Security] A server certificate is not yet valid. - // - [Enabled] The server certificate could become valid within the retry window. - .serverCertificateNotYetValid, - - // [Security] A server certificate was signed by a root server that isn’t trusted. - // - [Disabled] The server certificate is unlikely to become trusted within the retry window. - // .serverCertificateUntrusted, - - // [Network] An asynchronous operation timed out. - // - [Enabled] The request timed out for an unknown reason and should be retried. - .timedOut - - // [System] The URL Loading System encountered an error that it can’t interpret. - // - [Disabled] The error could not be interpreted and is unlikely to be recovered from during a retry. - // .unknown, - - // [Resource] A properly formed URL couldn’t be handled by the framework. - // - [Disabled] The URL is unlikely to change during a retry. - // .unsupportedURL, - - // [Client] Authentication is required to access a resource. - // - [Disabled] The user authentication is unlikely to be provided by retrying. - // .userAuthenticationRequired, - - // [Client] An asynchronous request for authentication has been canceled by the user. - // - [Disabled] The user cancelled authentication and explicitly took action to not retry. - // .userCancelledAuthentication, - - // [Resource] A server reported that a URL has a non-zero content length, but terminated the network connection - // gracefully without sending any data. - // - [Disabled] The server is unlikely to provide data during the retry window. - // .zeroByteResource, - ] - - /// The total number of times the request is allowed to be retried. - public let retryLimit: UInt - - /// The base of the exponential backoff policy (should always be greater than or equal to 2). - public let exponentialBackoffBase: UInt - - /// The scale of the exponential backoff. - public let exponentialBackoffScale: Double - - /// The HTTP methods that are allowed to be retried. - public let retryableHTTPMethods: Set - - /// The HTTP status codes that are automatically retried by the policy. - public let retryableHTTPStatusCodes: Set - - /// The URL error codes that are automatically retried by the policy. - public let retryableURLErrorCodes: Set - - /// Creates a `RetryPolicy` from the specified parameters. - /// - /// - Parameters: - /// - retryLimit: The total number of times the request is allowed to be retried. `2` by default. - /// - exponentialBackoffBase: The base of the exponential backoff policy. `2` by default. - /// - exponentialBackoffScale: The scale of the exponential backoff. `0.5` by default. - /// - retryableHTTPMethods: The HTTP methods that are allowed to be retried. - /// `RetryPolicy.defaultRetryableHTTPMethods` by default. - /// - retryableHTTPStatusCodes: The HTTP status codes that are automatically retried by the policy. - /// `RetryPolicy.defaultRetryableHTTPStatusCodes` by default. - /// - retryableURLErrorCodes: The URL error codes that are automatically retried by the policy. - /// `RetryPolicy.defaultRetryableURLErrorCodes` by default. - public init(retryLimit: UInt = RetryPolicy.defaultRetryLimit, - exponentialBackoffBase: UInt = RetryPolicy.defaultExponentialBackoffBase, - exponentialBackoffScale: Double = RetryPolicy.defaultExponentialBackoffScale, - retryableHTTPMethods: Set = RetryPolicy.defaultRetryableHTTPMethods, - retryableHTTPStatusCodes: Set = RetryPolicy.defaultRetryableHTTPStatusCodes, - retryableURLErrorCodes: Set = RetryPolicy.defaultRetryableURLErrorCodes) { - precondition(exponentialBackoffBase >= 2, "The `exponentialBackoffBase` must be a minimum of 2.") - - self.retryLimit = retryLimit - self.exponentialBackoffBase = exponentialBackoffBase - self.exponentialBackoffScale = exponentialBackoffScale - self.retryableHTTPMethods = retryableHTTPMethods - self.retryableHTTPStatusCodes = retryableHTTPStatusCodes - self.retryableURLErrorCodes = retryableURLErrorCodes - } - - open func retry(_ request: Request, - for session: Session, - dueTo error: Error, - completion: @escaping (RetryResult) -> Void) { - if request.retryCount < retryLimit, shouldRetry(request: request, dueTo: error) { - completion(.retryWithDelay(pow(Double(exponentialBackoffBase), Double(request.retryCount)) * exponentialBackoffScale)) - } else { - completion(.doNotRetry) - } - } - - /// Determines whether or not to retry the provided `Request`. - /// - /// - Parameters: - /// - request: `Request` that failed due to the provided `Error`. - /// - error: `Error` encountered while executing the `Request`. - /// - /// - Returns: `Bool` determining whether or not to retry the `Request`. - open func shouldRetry(request: Request, dueTo error: Error) -> Bool { - guard let httpMethod = request.request?.method, retryableHTTPMethods.contains(httpMethod) else { return false } - - if let statusCode = request.response?.statusCode, retryableHTTPStatusCodes.contains(statusCode) { - return true - } else { - let errorCode = (error as? URLError)?.code - let afErrorCode = (error.asAFError?.underlyingError as? URLError)?.code - - guard let code = errorCode ?? afErrorCode else { return false } - - return retryableURLErrorCodes.contains(code) - } - } -} - -extension RequestInterceptor where Self == RetryPolicy { - /// Provides a default `RetryPolicy` instance. - public static var retryPolicy: RetryPolicy { RetryPolicy() } - - /// Creates an `RetryPolicy` from the specified parameters. - /// - /// - Parameters: - /// - retryLimit: The total number of times the request is allowed to be retried. `2` by default. - /// - exponentialBackoffBase: The base of the exponential backoff policy. `2` by default. - /// - exponentialBackoffScale: The scale of the exponential backoff. `0.5` by default. - /// - retryableHTTPMethods: The HTTP methods that are allowed to be retried. - /// `RetryPolicy.defaultRetryableHTTPMethods` by default. - /// - retryableHTTPStatusCodes: The HTTP status codes that are automatically retried by the policy. - /// `RetryPolicy.defaultRetryableHTTPStatusCodes` by default. - /// - retryableURLErrorCodes: The URL error codes that are automatically retried by the policy. - /// `RetryPolicy.defaultRetryableURLErrorCodes` by default. - /// - /// - Returns: The `RetryPolicy` - public static func retryPolicy(retryLimit: UInt = RetryPolicy.defaultRetryLimit, - exponentialBackoffBase: UInt = RetryPolicy.defaultExponentialBackoffBase, - exponentialBackoffScale: Double = RetryPolicy.defaultExponentialBackoffScale, - retryableHTTPMethods: Set = RetryPolicy.defaultRetryableHTTPMethods, - retryableHTTPStatusCodes: Set = RetryPolicy.defaultRetryableHTTPStatusCodes, - retryableURLErrorCodes: Set = RetryPolicy.defaultRetryableURLErrorCodes) -> RetryPolicy { - RetryPolicy(retryLimit: retryLimit, - exponentialBackoffBase: exponentialBackoffBase, - exponentialBackoffScale: exponentialBackoffScale, - retryableHTTPMethods: retryableHTTPMethods, - retryableHTTPStatusCodes: retryableHTTPStatusCodes, - retryableURLErrorCodes: retryableURLErrorCodes) - } -} - -// MARK: - - -/// A retry policy that automatically retries idempotent requests for network connection lost errors. For more -/// information about retrying network connection lost errors, please refer to Apple's -/// [technical document](https://developer.apple.com/library/content/qa/qa1941/_index.html). -open class ConnectionLostRetryPolicy: RetryPolicy { - /// Creates a `ConnectionLostRetryPolicy` instance from the specified parameters. - /// - /// - Parameters: - /// - retryLimit: The total number of times the request is allowed to be retried. - /// `RetryPolicy.defaultRetryLimit` by default. - /// - exponentialBackoffBase: The base of the exponential backoff policy. - /// `RetryPolicy.defaultExponentialBackoffBase` by default. - /// - exponentialBackoffScale: The scale of the exponential backoff. - /// `RetryPolicy.defaultExponentialBackoffScale` by default. - /// - retryableHTTPMethods: The idempotent http methods to retry. - /// `RetryPolicy.defaultRetryableHTTPMethods` by default. - public init(retryLimit: UInt = RetryPolicy.defaultRetryLimit, - exponentialBackoffBase: UInt = RetryPolicy.defaultExponentialBackoffBase, - exponentialBackoffScale: Double = RetryPolicy.defaultExponentialBackoffScale, - retryableHTTPMethods: Set = RetryPolicy.defaultRetryableHTTPMethods) { - super.init(retryLimit: retryLimit, - exponentialBackoffBase: exponentialBackoffBase, - exponentialBackoffScale: exponentialBackoffScale, - retryableHTTPMethods: retryableHTTPMethods, - retryableHTTPStatusCodes: [], - retryableURLErrorCodes: [.networkConnectionLost]) - } -} - -extension RequestInterceptor where Self == ConnectionLostRetryPolicy { - /// Provides a default `ConnectionLostRetryPolicy` instance. - public static var connectionLostRetryPolicy: ConnectionLostRetryPolicy { ConnectionLostRetryPolicy() } - - /// Creates a `ConnectionLostRetryPolicy` instance from the specified parameters. - /// - /// - Parameters: - /// - retryLimit: The total number of times the request is allowed to be retried. - /// `RetryPolicy.defaultRetryLimit` by default. - /// - exponentialBackoffBase: The base of the exponential backoff policy. - /// `RetryPolicy.defaultExponentialBackoffBase` by default. - /// - exponentialBackoffScale: The scale of the exponential backoff. - /// `RetryPolicy.defaultExponentialBackoffScale` by default. - /// - retryableHTTPMethods: The idempotent http methods to retry. - /// - /// - Returns: The `ConnectionLostRetryPolicy`. - public static func connectionLostRetryPolicy(retryLimit: UInt = RetryPolicy.defaultRetryLimit, - exponentialBackoffBase: UInt = RetryPolicy.defaultExponentialBackoffBase, - exponentialBackoffScale: Double = RetryPolicy.defaultExponentialBackoffScale, - retryableHTTPMethods: Set = RetryPolicy.defaultRetryableHTTPMethods) -> ConnectionLostRetryPolicy { - ConnectionLostRetryPolicy(retryLimit: retryLimit, - exponentialBackoffBase: exponentialBackoffBase, - exponentialBackoffScale: exponentialBackoffScale, - retryableHTTPMethods: retryableHTTPMethods) - } -} diff --git a/Pods/Alamofire/Source/ServerTrustEvaluation.swift b/Pods/Alamofire/Source/ServerTrustEvaluation.swift deleted file mode 100644 index e490ab4..0000000 --- a/Pods/Alamofire/Source/ServerTrustEvaluation.swift +++ /dev/null @@ -1,772 +0,0 @@ -// -// ServerTrustEvaluation.swift -// -// Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -/// Responsible for managing the mapping of `ServerTrustEvaluating` values to given hosts. -open class ServerTrustManager { - /// Determines whether all hosts for this `ServerTrustManager` must be evaluated. `true` by default. - public let allHostsMustBeEvaluated: Bool - - /// The dictionary of policies mapped to a particular host. - public let evaluators: [String: ServerTrustEvaluating] - - /// Initializes the `ServerTrustManager` instance with the given evaluators. - /// - /// Since different servers and web services can have different leaf certificates, intermediate and even root - /// certificates, it is important to have the flexibility to specify evaluation policies on a per host basis. This - /// allows for scenarios such as using default evaluation for host1, certificate pinning for host2, public key - /// pinning for host3 and disabling evaluation for host4. - /// - /// - Parameters: - /// - allHostsMustBeEvaluated: The value determining whether all hosts for this instance must be evaluated. `true` - /// by default. - /// - evaluators: A dictionary of evaluators mapped to hosts. - public init(allHostsMustBeEvaluated: Bool = true, evaluators: [String: ServerTrustEvaluating]) { - self.allHostsMustBeEvaluated = allHostsMustBeEvaluated - self.evaluators = evaluators - } - - #if canImport(Security) - /// Returns the `ServerTrustEvaluating` value for the given host, if one is set. - /// - /// By default, this method will return the policy that perfectly matches the given host. Subclasses could override - /// this method and implement more complex mapping implementations such as wildcards. - /// - /// - Parameter host: The host to use when searching for a matching policy. - /// - /// - Returns: The `ServerTrustEvaluating` value for the given host if found, `nil` otherwise. - /// - Throws: `AFError.serverTrustEvaluationFailed` if `allHostsMustBeEvaluated` is `true` and no matching - /// evaluators are found. - open func serverTrustEvaluator(forHost host: String) throws -> ServerTrustEvaluating? { - guard let evaluator = evaluators[host] else { - if allHostsMustBeEvaluated { - throw AFError.serverTrustEvaluationFailed(reason: .noRequiredEvaluator(host: host)) - } - - return nil - } - - return evaluator - } - #endif -} - -/// A protocol describing the API used to evaluate server trusts. -public protocol ServerTrustEvaluating { - #if !canImport(Security) - // Implement this once other platforms have API for evaluating server trusts. - #else - /// Evaluates the given `SecTrust` value for the given `host`. - /// - /// - Parameters: - /// - trust: The `SecTrust` value to evaluate. - /// - host: The host for which to evaluate the `SecTrust` value. - /// - /// - Returns: A `Bool` indicating whether the evaluator considers the `SecTrust` value valid for `host`. - func evaluate(_ trust: SecTrust, forHost host: String) throws - #endif -} - -// MARK: - Server Trust Evaluators - -#if canImport(Security) -/// An evaluator which uses the default server trust evaluation while allowing you to control whether to validate the -/// host provided by the challenge. Applications are encouraged to always validate the host in production environments -/// to guarantee the validity of the server's certificate chain. -public final class DefaultTrustEvaluator: ServerTrustEvaluating { - private let validateHost: Bool - - /// Creates a `DefaultTrustEvaluator`. - /// - /// - Parameter validateHost: Determines whether or not the evaluator should validate the host. `true` by default. - public init(validateHost: Bool = true) { - self.validateHost = validateHost - } - - public func evaluate(_ trust: SecTrust, forHost host: String) throws { - if validateHost { - try trust.af.performValidation(forHost: host) - } - - try trust.af.performDefaultValidation(forHost: host) - } -} - -/// An evaluator which Uses the default and revoked server trust evaluations allowing you to control whether to validate -/// the host provided by the challenge as well as specify the revocation flags for testing for revoked certificates. -/// Apple platforms did not start testing for revoked certificates automatically until iOS 10.1, macOS 10.12 and tvOS -/// 10.1 which is demonstrated in our TLS tests. Applications are encouraged to always validate the host in production -/// environments to guarantee the validity of the server's certificate chain. -public final class RevocationTrustEvaluator: ServerTrustEvaluating { - /// Represents the options to be use when evaluating the status of a certificate. - /// Only Revocation Policy Constants are valid, and can be found in [Apple's documentation](https://developer.apple.com/documentation/security/certificate_key_and_trust_services/policies/1563600-revocation_policy_constants). - public struct Options: OptionSet { - /// Perform revocation checking using the CRL (Certification Revocation List) method. - public static let crl = Options(rawValue: kSecRevocationCRLMethod) - /// Consult only locally cached replies; do not use network access. - public static let networkAccessDisabled = Options(rawValue: kSecRevocationNetworkAccessDisabled) - /// Perform revocation checking using OCSP (Online Certificate Status Protocol). - public static let ocsp = Options(rawValue: kSecRevocationOCSPMethod) - /// Prefer CRL revocation checking over OCSP; by default, OCSP is preferred. - public static let preferCRL = Options(rawValue: kSecRevocationPreferCRL) - /// Require a positive response to pass the policy. If the flag is not set, revocation checking is done on a - /// "best attempt" basis, where failure to reach the server is not considered fatal. - public static let requirePositiveResponse = Options(rawValue: kSecRevocationRequirePositiveResponse) - /// Perform either OCSP or CRL checking. The checking is performed according to the method(s) specified in the - /// certificate and the value of `preferCRL`. - public static let any = Options(rawValue: kSecRevocationUseAnyAvailableMethod) - - /// The raw value of the option. - public let rawValue: CFOptionFlags - - /// Creates an `Options` value with the given `CFOptionFlags`. - /// - /// - Parameter rawValue: The `CFOptionFlags` value to initialize with. - public init(rawValue: CFOptionFlags) { - self.rawValue = rawValue - } - } - - private let performDefaultValidation: Bool - private let validateHost: Bool - private let options: Options - - /// Creates a `RevocationTrustEvaluator` using the provided parameters. - /// - /// - Note: Default and host validation will fail when using this evaluator with self-signed certificates. Use - /// `PinnedCertificatesTrustEvaluator` if you need to use self-signed certificates. - /// - /// - Parameters: - /// - performDefaultValidation: Determines whether default validation should be performed in addition to - /// evaluating the pinned certificates. `true` by default. - /// - validateHost: Determines whether or not the evaluator should validate the host, in addition to - /// performing the default evaluation, even if `performDefaultValidation` is `false`. - /// `true` by default. - /// - options: The `Options` to use to check the revocation status of the certificate. `.any` by - /// default. - public init(performDefaultValidation: Bool = true, validateHost: Bool = true, options: Options = .any) { - self.performDefaultValidation = performDefaultValidation - self.validateHost = validateHost - self.options = options - } - - public func evaluate(_ trust: SecTrust, forHost host: String) throws { - if performDefaultValidation { - try trust.af.performDefaultValidation(forHost: host) - } - - if validateHost { - try trust.af.performValidation(forHost: host) - } - - #if swift(>=5.9) - if #available(iOS 12, macOS 10.14, tvOS 12, watchOS 5, visionOS 1, *) { - try trust.af.evaluate(afterApplying: SecPolicy.af.revocation(options: options)) - } else { - try trust.af.validate(policy: SecPolicy.af.revocation(options: options)) { status, result in - AFError.serverTrustEvaluationFailed(reason: .revocationCheckFailed(output: .init(host, trust, status, result), options: options)) - } - } - #else - if #available(iOS 12, macOS 10.14, tvOS 12, watchOS 5, *) { - try trust.af.evaluate(afterApplying: SecPolicy.af.revocation(options: options)) - } else { - try trust.af.validate(policy: SecPolicy.af.revocation(options: options)) { status, result in - AFError.serverTrustEvaluationFailed(reason: .revocationCheckFailed(output: .init(host, trust, status, result), options: options)) - } - } - #endif - } -} - -extension ServerTrustEvaluating where Self == RevocationTrustEvaluator { - /// Provides a default `RevocationTrustEvaluator` instance. - public static var revocationChecking: RevocationTrustEvaluator { RevocationTrustEvaluator() } - - /// Creates a `RevocationTrustEvaluator` using the provided parameters. - /// - /// - Note: Default and host validation will fail when using this evaluator with self-signed certificates. Use - /// `PinnedCertificatesTrustEvaluator` if you need to use self-signed certificates. - /// - /// - Parameters: - /// - performDefaultValidation: Determines whether default validation should be performed in addition to - /// evaluating the pinned certificates. `true` by default. - /// - validateHost: Determines whether or not the evaluator should validate the host, in addition - /// to performing the default evaluation, even if `performDefaultValidation` is - /// `false`. `true` by default. - /// - options: The `Options` to use to check the revocation status of the certificate. `.any` - /// by default. - /// - Returns: The `RevocationTrustEvaluator`. - public static func revocationChecking(performDefaultValidation: Bool = true, - validateHost: Bool = true, - options: RevocationTrustEvaluator.Options = .any) -> RevocationTrustEvaluator { - RevocationTrustEvaluator(performDefaultValidation: performDefaultValidation, - validateHost: validateHost, - options: options) - } -} - -/// Uses the pinned certificates to validate the server trust. The server trust is considered valid if one of the pinned -/// certificates match one of the server certificates. By validating both the certificate chain and host, certificate -/// pinning provides a very secure form of server trust validation mitigating most, if not all, MITM attacks. -/// Applications are encouraged to always validate the host and require a valid certificate chain in production -/// environments. -public final class PinnedCertificatesTrustEvaluator: ServerTrustEvaluating { - private let certificates: [SecCertificate] - private let acceptSelfSignedCertificates: Bool - private let performDefaultValidation: Bool - private let validateHost: Bool - - /// Creates a `PinnedCertificatesTrustEvaluator` from the provided parameters. - /// - /// - Parameters: - /// - certificates: The certificates to use to evaluate the trust. All `cer`, `crt`, and `der` - /// certificates in `Bundle.main` by default. - /// - acceptSelfSignedCertificates: Adds the provided certificates as anchors for the trust evaluation, allowing - /// self-signed certificates to pass. `false` by default. THIS SETTING SHOULD BE - /// FALSE IN PRODUCTION! - /// - performDefaultValidation: Determines whether default validation should be performed in addition to - /// evaluating the pinned certificates. `true` by default. - /// - validateHost: Determines whether or not the evaluator should validate the host, in addition - /// to performing the default evaluation, even if `performDefaultValidation` is - /// `false`. `true` by default. - public init(certificates: [SecCertificate] = Bundle.main.af.certificates, - acceptSelfSignedCertificates: Bool = false, - performDefaultValidation: Bool = true, - validateHost: Bool = true) { - self.certificates = certificates - self.acceptSelfSignedCertificates = acceptSelfSignedCertificates - self.performDefaultValidation = performDefaultValidation - self.validateHost = validateHost - } - - public func evaluate(_ trust: SecTrust, forHost host: String) throws { - guard !certificates.isEmpty else { - throw AFError.serverTrustEvaluationFailed(reason: .noCertificatesFound) - } - - if acceptSelfSignedCertificates { - try trust.af.setAnchorCertificates(certificates) - } - - if performDefaultValidation { - try trust.af.performDefaultValidation(forHost: host) - } - - if validateHost { - try trust.af.performValidation(forHost: host) - } - - let serverCertificatesData = Set(trust.af.certificateData) - let pinnedCertificatesData = Set(certificates.af.data) - let pinnedCertificatesInServerData = !serverCertificatesData.isDisjoint(with: pinnedCertificatesData) - if !pinnedCertificatesInServerData { - throw AFError.serverTrustEvaluationFailed(reason: .certificatePinningFailed(host: host, - trust: trust, - pinnedCertificates: certificates, - serverCertificates: trust.af.certificates)) - } - } -} - -extension ServerTrustEvaluating where Self == PinnedCertificatesTrustEvaluator { - /// Provides a default `PinnedCertificatesTrustEvaluator` instance. - public static var pinnedCertificates: PinnedCertificatesTrustEvaluator { PinnedCertificatesTrustEvaluator() } - - /// Creates a `PinnedCertificatesTrustEvaluator` using the provided parameters. - /// - /// - Parameters: - /// - certificates: The certificates to use to evaluate the trust. All `cer`, `crt`, and `der` - /// certificates in `Bundle.main` by default. - /// - acceptSelfSignedCertificates: Adds the provided certificates as anchors for the trust evaluation, allowing - /// self-signed certificates to pass. `false` by default. THIS SETTING SHOULD BE - /// FALSE IN PRODUCTION! - /// - performDefaultValidation: Determines whether default validation should be performed in addition to - /// evaluating the pinned certificates. `true` by default. - /// - validateHost: Determines whether or not the evaluator should validate the host, in addition - /// to performing the default evaluation, even if `performDefaultValidation` is - /// `false`. `true` by default. - public static func pinnedCertificates(certificates: [SecCertificate] = Bundle.main.af.certificates, - acceptSelfSignedCertificates: Bool = false, - performDefaultValidation: Bool = true, - validateHost: Bool = true) -> PinnedCertificatesTrustEvaluator { - PinnedCertificatesTrustEvaluator(certificates: certificates, - acceptSelfSignedCertificates: acceptSelfSignedCertificates, - performDefaultValidation: performDefaultValidation, - validateHost: validateHost) - } -} - -/// Uses the pinned public keys to validate the server trust. The server trust is considered valid if one of the pinned -/// public keys match one of the server certificate public keys. By validating both the certificate chain and host, -/// public key pinning provides a very secure form of server trust validation mitigating most, if not all, MITM attacks. -/// Applications are encouraged to always validate the host and require a valid certificate chain in production -/// environments. -public final class PublicKeysTrustEvaluator: ServerTrustEvaluating { - private let keys: [SecKey] - private let performDefaultValidation: Bool - private let validateHost: Bool - - /// Creates a `PublicKeysTrustEvaluator` from the provided parameters. - /// - /// - Note: Default and host validation will fail when using this evaluator with self-signed certificates. Use - /// `PinnedCertificatesTrustEvaluator` if you need to use self-signed certificates. - /// - /// - Parameters: - /// - keys: The `SecKey`s to use to validate public keys. Defaults to the public keys of all - /// certificates included in the main bundle. - /// - performDefaultValidation: Determines whether default validation should be performed in addition to - /// evaluating the pinned certificates. `true` by default. - /// - validateHost: Determines whether or not the evaluator should validate the host, in addition to - /// performing the default evaluation, even if `performDefaultValidation` is `false`. - /// `true` by default. - public init(keys: [SecKey] = Bundle.main.af.publicKeys, - performDefaultValidation: Bool = true, - validateHost: Bool = true) { - self.keys = keys - self.performDefaultValidation = performDefaultValidation - self.validateHost = validateHost - } - - public func evaluate(_ trust: SecTrust, forHost host: String) throws { - guard !keys.isEmpty else { - throw AFError.serverTrustEvaluationFailed(reason: .noPublicKeysFound) - } - - if performDefaultValidation { - try trust.af.performDefaultValidation(forHost: host) - } - - if validateHost { - try trust.af.performValidation(forHost: host) - } - - let pinnedKeysInServerKeys: Bool = { - for serverPublicKey in trust.af.publicKeys { - if keys.contains(serverPublicKey) { - return true - } - } - return false - }() - - if !pinnedKeysInServerKeys { - throw AFError.serverTrustEvaluationFailed(reason: .publicKeyPinningFailed(host: host, - trust: trust, - pinnedKeys: keys, - serverKeys: trust.af.publicKeys)) - } - } -} - -extension ServerTrustEvaluating where Self == PublicKeysTrustEvaluator { - /// Provides a default `PublicKeysTrustEvaluator` instance. - public static var publicKeys: PublicKeysTrustEvaluator { PublicKeysTrustEvaluator() } - - /// Creates a `PublicKeysTrustEvaluator` from the provided parameters. - /// - /// - Note: Default and host validation will fail when using this evaluator with self-signed certificates. Use - /// `PinnedCertificatesTrustEvaluator` if you need to use self-signed certificates. - /// - /// - Parameters: - /// - keys: The `SecKey`s to use to validate public keys. Defaults to the public keys of all - /// certificates included in the main bundle. - /// - performDefaultValidation: Determines whether default validation should be performed in addition to - /// evaluating the pinned certificates. `true` by default. - /// - validateHost: Determines whether or not the evaluator should validate the host, in addition to - /// performing the default evaluation, even if `performDefaultValidation` is `false`. - /// `true` by default. - public static func publicKeys(keys: [SecKey] = Bundle.main.af.publicKeys, - performDefaultValidation: Bool = true, - validateHost: Bool = true) -> PublicKeysTrustEvaluator { - PublicKeysTrustEvaluator(keys: keys, performDefaultValidation: performDefaultValidation, validateHost: validateHost) - } -} - -/// Uses the provided evaluators to validate the server trust. The trust is only considered valid if all of the -/// evaluators consider it valid. -public final class CompositeTrustEvaluator: ServerTrustEvaluating { - private let evaluators: [ServerTrustEvaluating] - - /// Creates a `CompositeTrustEvaluator` from the provided evaluators. - /// - /// - Parameter evaluators: The `ServerTrustEvaluating` values used to evaluate the server trust. - public init(evaluators: [ServerTrustEvaluating]) { - self.evaluators = evaluators - } - - public func evaluate(_ trust: SecTrust, forHost host: String) throws { - try evaluators.evaluate(trust, forHost: host) - } -} - -extension ServerTrustEvaluating where Self == CompositeTrustEvaluator { - /// Creates a `CompositeTrustEvaluator` from the provided evaluators. - /// - /// - Parameter evaluators: The `ServerTrustEvaluating` values used to evaluate the server trust. - public static func composite(evaluators: [ServerTrustEvaluating]) -> CompositeTrustEvaluator { - CompositeTrustEvaluator(evaluators: evaluators) - } -} - -/// Disables all evaluation which in turn will always consider any server trust as valid. -/// -/// - Note: Instead of disabling server trust evaluation, it's a better idea to configure systems to properly trust test -/// certificates, as outlined in [this Apple tech note](https://developer.apple.com/library/archive/qa/qa1948/_index.html). -/// -/// **THIS EVALUATOR SHOULD NEVER BE USED IN PRODUCTION!** -@available(*, deprecated, renamed: "DisabledTrustEvaluator", message: "DisabledEvaluator has been renamed DisabledTrustEvaluator.") -public typealias DisabledEvaluator = DisabledTrustEvaluator - -/// Disables all evaluation which in turn will always consider any server trust as valid. -/// -/// -/// - Note: Instead of disabling server trust evaluation, it's a better idea to configure systems to properly trust test -/// certificates, as outlined in [this Apple tech note](https://developer.apple.com/library/archive/qa/qa1948/_index.html). -/// -/// **THIS EVALUATOR SHOULD NEVER BE USED IN PRODUCTION!** -public final class DisabledTrustEvaluator: ServerTrustEvaluating { - /// Creates an instance. - public init() {} - - public func evaluate(_ trust: SecTrust, forHost host: String) throws {} -} - -// MARK: - Extensions - -extension Array where Element == ServerTrustEvaluating { - #if os(Linux) || os(Windows) || os(Android) - // Add this same convenience method for Linux/Windows. - #else - /// Evaluates the given `SecTrust` value for the given `host`. - /// - /// - Parameters: - /// - trust: The `SecTrust` value to evaluate. - /// - host: The host for which to evaluate the `SecTrust` value. - /// - /// - Returns: Whether or not the evaluator considers the `SecTrust` value valid for `host`. - public func evaluate(_ trust: SecTrust, forHost host: String) throws { - for evaluator in self { - try evaluator.evaluate(trust, forHost: host) - } - } - #endif -} - -extension Bundle: AlamofireExtended {} -extension AlamofireExtension where ExtendedType: Bundle { - /// Returns all valid `cer`, `crt`, and `der` certificates in the bundle. - public var certificates: [SecCertificate] { - paths(forResourcesOfTypes: [".cer", ".CER", ".crt", ".CRT", ".der", ".DER"]).compactMap { path in - guard - let certificateData = try? Data(contentsOf: URL(fileURLWithPath: path)) as CFData, - let certificate = SecCertificateCreateWithData(nil, certificateData) else { return nil } - - return certificate - } - } - - /// Returns all public keys for the valid certificates in the bundle. - public var publicKeys: [SecKey] { - certificates.af.publicKeys - } - - /// Returns all pathnames for the resources identified by the provided file extensions. - /// - /// - Parameter types: The filename extensions locate. - /// - /// - Returns: All pathnames for the given filename extensions. - public func paths(forResourcesOfTypes types: [String]) -> [String] { - Array(Set(types.flatMap { type.paths(forResourcesOfType: $0, inDirectory: nil) })) - } -} - -extension SecTrust: AlamofireExtended {} -extension AlamofireExtension where ExtendedType == SecTrust { - /// Evaluates `self` after applying the `SecPolicy` value provided. - /// - /// - Parameter policy: The `SecPolicy` to apply to `self` before evaluation. - /// - /// - Throws: Any `Error` from applying the `SecPolicy` or from evaluation. - @available(iOS 12, macOS 10.14, tvOS 12, watchOS 5, *) - public func evaluate(afterApplying policy: SecPolicy) throws { - try apply(policy: policy).af.evaluate() - } - - /// Attempts to validate `self` using the `SecPolicy` provided and transforming any error produced using the closure passed. - /// - /// - Parameters: - /// - policy: The `SecPolicy` used to evaluate `self`. - /// - errorProducer: The closure used transform the failed `OSStatus` and `SecTrustResultType`. - /// - Throws: Any `Error` from applying the `policy`, or the result of `errorProducer` if validation fails. - @available(iOS, introduced: 10, deprecated: 12, renamed: "evaluate(afterApplying:)") - @available(macOS, introduced: 10.12, deprecated: 10.14, renamed: "evaluate(afterApplying:)") - @available(tvOS, introduced: 10, deprecated: 12, renamed: "evaluate(afterApplying:)") - @available(watchOS, introduced: 3, deprecated: 5, renamed: "evaluate(afterApplying:)") - public func validate(policy: SecPolicy, errorProducer: (_ status: OSStatus, _ result: SecTrustResultType) -> Error) throws { - try apply(policy: policy).af.validate(errorProducer: errorProducer) - } - - /// Applies a `SecPolicy` to `self`, throwing if it fails. - /// - /// - Parameter policy: The `SecPolicy`. - /// - /// - Returns: `self`, with the policy applied. - /// - Throws: An `AFError.serverTrustEvaluationFailed` instance with a `.policyApplicationFailed` reason. - public func apply(policy: SecPolicy) throws -> SecTrust { - let status = SecTrustSetPolicies(type, policy) - - guard status.af.isSuccess else { - throw AFError.serverTrustEvaluationFailed(reason: .policyApplicationFailed(trust: type, - policy: policy, - status: status)) - } - - return type - } - - /// Evaluate `self`, throwing an `Error` if evaluation fails. - /// - /// - Throws: `AFError.serverTrustEvaluationFailed` with reason `.trustValidationFailed` and associated error from - /// the underlying evaluation. - @available(iOS 12, macOS 10.14, tvOS 12, watchOS 5, *) - public func evaluate() throws { - var error: CFError? - let evaluationSucceeded = SecTrustEvaluateWithError(type, &error) - - if !evaluationSucceeded { - throw AFError.serverTrustEvaluationFailed(reason: .trustEvaluationFailed(error: error)) - } - } - - /// Validate `self`, passing any failure values through `errorProducer`. - /// - /// - Parameter errorProducer: The closure used to transform the failed `OSStatus` and `SecTrustResultType` into an - /// `Error`. - /// - Throws: The `Error` produced by the `errorProducer` closure. - @available(iOS, introduced: 10, deprecated: 12, renamed: "evaluate()") - @available(macOS, introduced: 10.12, deprecated: 10.14, renamed: "evaluate()") - @available(tvOS, introduced: 10, deprecated: 12, renamed: "evaluate()") - @available(watchOS, introduced: 3, deprecated: 5, renamed: "evaluate()") - public func validate(errorProducer: (_ status: OSStatus, _ result: SecTrustResultType) -> Error) throws { - var result = SecTrustResultType.invalid - let status = SecTrustEvaluate(type, &result) - - guard status.af.isSuccess && result.af.isSuccess else { - throw errorProducer(status, result) - } - } - - /// Sets a custom certificate chain on `self`, allowing full validation of a self-signed certificate and its chain. - /// - /// - Parameter certificates: The `SecCertificate`s to add to the chain. - /// - Throws: Any error produced when applying the new certificate chain. - public func setAnchorCertificates(_ certificates: [SecCertificate]) throws { - // Add additional anchor certificates. - let status = SecTrustSetAnchorCertificates(type, certificates as CFArray) - guard status.af.isSuccess else { - throw AFError.serverTrustEvaluationFailed(reason: .settingAnchorCertificatesFailed(status: status, - certificates: certificates)) - } - - // Trust only the set anchor certs. - let onlyStatus = SecTrustSetAnchorCertificatesOnly(type, true) - guard onlyStatus.af.isSuccess else { - throw AFError.serverTrustEvaluationFailed(reason: .settingAnchorCertificatesFailed(status: onlyStatus, - certificates: certificates)) - } - } - - /// The public keys contained in `self`. - public var publicKeys: [SecKey] { - certificates.af.publicKeys - } - - /// The `SecCertificate`s contained in `self`. - public var certificates: [SecCertificate] { - #if swift(>=5.9) - if #available(iOS 15, macOS 12, tvOS 15, watchOS 8, visionOS 1, *) { - return (SecTrustCopyCertificateChain(type) as? [SecCertificate]) ?? [] - } else { - return (0..=5.5.1) // Xcode 13.1 / 2021 SDKs. - if #available(iOS 15, macOS 12, tvOS 15, watchOS 8, *) { - return (SecTrustCopyCertificateChain(type) as? [SecCertificate]) ?? [] - } else { - return (0..=5.9) - if #available(iOS 12, macOS 10.14, tvOS 12, watchOS 5, visionOS 1, *) { - try evaluate(afterApplying: SecPolicy.af.default) - } else { - try validate(policy: SecPolicy.af.default) { status, result in - AFError.serverTrustEvaluationFailed(reason: .defaultEvaluationFailed(output: .init(host, type, status, result))) - } - } - #else - if #available(iOS 12, macOS 10.14, tvOS 12, watchOS 5, *) { - try evaluate(afterApplying: SecPolicy.af.default) - } else { - try validate(policy: SecPolicy.af.default) { status, result in - AFError.serverTrustEvaluationFailed(reason: .defaultEvaluationFailed(output: .init(host, type, status, result))) - } - } - #endif - } - - /// Validates `self` after applying `SecPolicy.af.hostname(host)`, which performs the default validation as well as - /// hostname validation. - /// - /// - Parameter host: The hostname to use in the validation. - /// - Throws: An `AFError.serverTrustEvaluationFailed` instance with a `.defaultEvaluationFailed` reason. - public func performValidation(forHost host: String) throws { - #if swift(>=5.9) - if #available(iOS 12, macOS 10.14, tvOS 12, watchOS 5, visionOS 1, *) { - try evaluate(afterApplying: SecPolicy.af.hostname(host)) - } else { - try validate(policy: SecPolicy.af.hostname(host)) { status, result in - AFError.serverTrustEvaluationFailed(reason: .hostValidationFailed(output: .init(host, type, status, result))) - } - } - #else - if #available(iOS 12, macOS 10.14, tvOS 12, watchOS 5, *) { - try evaluate(afterApplying: SecPolicy.af.hostname(host)) - } else { - try validate(policy: SecPolicy.af.hostname(host)) { status, result in - AFError.serverTrustEvaluationFailed(reason: .hostValidationFailed(output: .init(host, type, status, result))) - } - } - #endif - } -} - -extension SecPolicy: AlamofireExtended {} -extension AlamofireExtension where ExtendedType == SecPolicy { - /// Creates a `SecPolicy` instance which will validate server certificates but not require a host name match. - public static let `default` = SecPolicyCreateSSL(true, nil) - - /// Creates a `SecPolicy` instance which will validate server certificates and much match the provided hostname. - /// - /// - Parameter hostname: The hostname to validate against. - /// - /// - Returns: The `SecPolicy`. - public static func hostname(_ hostname: String) -> SecPolicy { - SecPolicyCreateSSL(true, hostname as CFString) - } - - /// Creates a `SecPolicy` which checks the revocation of certificates. - /// - /// - Parameter options: The `RevocationTrustEvaluator.Options` for evaluation. - /// - /// - Returns: The `SecPolicy`. - /// - Throws: An `AFError.serverTrustEvaluationFailed` error with reason `.revocationPolicyCreationFailed` - /// if the policy cannot be created. - public static func revocation(options: RevocationTrustEvaluator.Options) throws -> SecPolicy { - guard let policy = SecPolicyCreateRevocation(options.rawValue) else { - throw AFError.serverTrustEvaluationFailed(reason: .revocationPolicyCreationFailed) - } - - return policy - } -} - -extension Array: AlamofireExtended {} -extension AlamofireExtension where ExtendedType == [SecCertificate] { - /// All `Data` values for the contained `SecCertificate`s. - public var data: [Data] { - type.map { SecCertificateCopyData($0) as Data } - } - - /// All public `SecKey` values for the contained `SecCertificate`s. - public var publicKeys: [SecKey] { - type.compactMap(\.af.publicKey) - } -} - -extension SecCertificate: AlamofireExtended {} -extension AlamofireExtension where ExtendedType == SecCertificate { - /// The public key for `self`, if it can be extracted. - /// - /// - Note: On 2020 OSes and newer, only RSA and ECDSA keys are supported. - /// - public var publicKey: SecKey? { - let policy = SecPolicyCreateBasicX509() - var trust: SecTrust? - let trustCreationStatus = SecTrustCreateWithCertificates(type, policy, &trust) - - guard let createdTrust = trust, trustCreationStatus == errSecSuccess else { return nil } - - #if swift(>=5.9) - if #available(iOS 14, macOS 11, tvOS 14, watchOS 7, visionOS 1, *) { - return SecTrustCopyKey(createdTrust) - } else { - return SecTrustCopyPublicKey(createdTrust) - } - #else - if #available(iOS 14, macOS 11, tvOS 14, watchOS 7, *) { - return SecTrustCopyKey(createdTrust) - } else { - return SecTrustCopyPublicKey(createdTrust) - } - #endif - } -} - -extension OSStatus: AlamofireExtended {} -extension AlamofireExtension where ExtendedType == OSStatus { - /// Returns whether `self` is `errSecSuccess`. - public var isSuccess: Bool { type == errSecSuccess } -} - -extension SecTrustResultType: AlamofireExtended {} -extension AlamofireExtension where ExtendedType == SecTrustResultType { - /// Returns whether `self is `.unspecified` or `.proceed`. - public var isSuccess: Bool { - type == .unspecified || type == .proceed - } -} -#endif diff --git a/Pods/Alamofire/Source/Session.swift b/Pods/Alamofire/Source/Session.swift deleted file mode 100644 index 4232f85..0000000 --- a/Pods/Alamofire/Source/Session.swift +++ /dev/null @@ -1,1264 +0,0 @@ -// -// Session.swift -// -// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -/// `Session` creates and manages Alamofire's `Request` types during their lifetimes. It also provides common -/// functionality for all `Request`s, including queuing, interception, trust management, redirect handling, and response -/// cache handling. -open class Session { - /// Shared singleton instance used by all `AF.request` APIs. Cannot be modified. - public static let `default` = Session() - - /// Underlying `URLSession` used to create `URLSessionTasks` for this instance, and for which this instance's - /// `delegate` handles `URLSessionDelegate` callbacks. - /// - /// - Note: This instance should **NOT** be used to interact with the underlying `URLSessionTask`s. Doing so will - /// break internal Alamofire logic that tracks those tasks. - /// - public let session: URLSession - /// Instance's `SessionDelegate`, which handles the `URLSessionDelegate` methods and `Request` interaction. - public let delegate: SessionDelegate - /// Root `DispatchQueue` for all internal callbacks and state update. **MUST** be a serial queue. - public let rootQueue: DispatchQueue - /// Value determining whether this instance automatically calls `resume()` on all created `Request`s. - public let startRequestsImmediately: Bool - /// `DispatchQueue` on which `URLRequest`s are created asynchronously. By default this queue uses `rootQueue` as its - /// `target`, but a separate queue can be used if request creation is determined to be a bottleneck. Always profile - /// and test before introducing an additional queue. - public let requestQueue: DispatchQueue - /// `DispatchQueue` passed to all `Request`s on which they perform their response serialization. By default this - /// queue uses `rootQueue` as its `target` but a separate queue can be used if response serialization is determined - /// to be a bottleneck. Always profile and test before introducing an additional queue. - public let serializationQueue: DispatchQueue - /// `RequestInterceptor` used for all `Request` created by the instance. `RequestInterceptor`s can also be set on a - /// per-`Request` basis, in which case the `Request`'s interceptor takes precedence over this value. - public let interceptor: RequestInterceptor? - /// `ServerTrustManager` instance used to evaluate all trust challenges and provide certificate and key pinning. - public let serverTrustManager: ServerTrustManager? - /// `RedirectHandler` instance used to provide customization for request redirection. - public let redirectHandler: RedirectHandler? - /// `CachedResponseHandler` instance used to provide customization of cached response handling. - public let cachedResponseHandler: CachedResponseHandler? - /// `CompositeEventMonitor` used to compose Alamofire's `defaultEventMonitors` and any passed `EventMonitor`s. - public let eventMonitor: CompositeEventMonitor - /// `EventMonitor`s included in all instances. `[AlamofireNotifications()]` by default. - public let defaultEventMonitors: [EventMonitor] = [AlamofireNotifications()] - - /// Internal map between `Request`s and any `URLSessionTasks` that may be in flight for them. - var requestTaskMap = RequestTaskMap() - /// `Set` of currently active `Request`s. - var activeRequests: Set = [] - /// Completion events awaiting `URLSessionTaskMetrics`. - var waitingCompletions: [URLSessionTask: () -> Void] = [:] - - /// Creates a `Session` from a `URLSession` and other parameters. - /// - /// - Note: When passing a `URLSession`, you must create the `URLSession` with a specific `delegateQueue` value and - /// pass the `delegateQueue`'s `underlyingQueue` as the `rootQueue` parameter of this initializer. - /// - /// - Parameters: - /// - session: Underlying `URLSession` for this instance. - /// - delegate: `SessionDelegate` that handles `session`'s delegate callbacks as well as `Request` - /// interaction. - /// - rootQueue: Root `DispatchQueue` for all internal callbacks and state updates. **MUST** be a - /// serial queue. - /// - startRequestsImmediately: Determines whether this instance will automatically start all `Request`s. `true` - /// by default. If set to `false`, all `Request`s created must have `.resume()` called. - /// on them for them to start. - /// - requestQueue: `DispatchQueue` on which to perform `URLRequest` creation. By default this queue - /// will use the `rootQueue` as its `target`. A separate queue can be used if it's - /// determined request creation is a bottleneck, but that should only be done after - /// careful testing and profiling. `nil` by default. - /// - serializationQueue: `DispatchQueue` on which to perform all response serialization. By default this - /// queue will use the `rootQueue` as its `target`. A separate queue can be used if - /// it's determined response serialization is a bottleneck, but that should only be - /// done after careful testing and profiling. `nil` by default. - /// - interceptor: `RequestInterceptor` to be used for all `Request`s created by this instance. `nil` - /// by default. - /// - serverTrustManager: `ServerTrustManager` to be used for all trust evaluations by this instance. `nil` - /// by default. - /// - redirectHandler: `RedirectHandler` to be used by all `Request`s created by this instance. `nil` by - /// default. - /// - cachedResponseHandler: `CachedResponseHandler` to be used by all `Request`s created by this instance. - /// `nil` by default. - /// - eventMonitors: Additional `EventMonitor`s used by the instance. Alamofire always adds a - /// `AlamofireNotifications` `EventMonitor` to the array passed here. `[]` by default. - public init(session: URLSession, - delegate: SessionDelegate, - rootQueue: DispatchQueue, - startRequestsImmediately: Bool = true, - requestQueue: DispatchQueue? = nil, - serializationQueue: DispatchQueue? = nil, - interceptor: RequestInterceptor? = nil, - serverTrustManager: ServerTrustManager? = nil, - redirectHandler: RedirectHandler? = nil, - cachedResponseHandler: CachedResponseHandler? = nil, - eventMonitors: [EventMonitor] = []) { - precondition(session.configuration.identifier == nil, - "Alamofire does not support background URLSessionConfigurations.") - precondition(session.delegateQueue.underlyingQueue === rootQueue, - "Session(session:) initializer must be passed the DispatchQueue used as the delegateQueue's underlyingQueue as rootQueue.") - - self.session = session - self.delegate = delegate - self.rootQueue = rootQueue - self.startRequestsImmediately = startRequestsImmediately - self.requestQueue = requestQueue ?? DispatchQueue(label: "\(rootQueue.label).requestQueue", target: rootQueue) - self.serializationQueue = serializationQueue ?? DispatchQueue(label: "\(rootQueue.label).serializationQueue", target: rootQueue) - self.interceptor = interceptor - self.serverTrustManager = serverTrustManager - self.redirectHandler = redirectHandler - self.cachedResponseHandler = cachedResponseHandler - eventMonitor = CompositeEventMonitor(monitors: defaultEventMonitors + eventMonitors) - delegate.eventMonitor = eventMonitor - delegate.stateProvider = self - } - - /// Creates a `Session` from a `URLSessionConfiguration`. - /// - /// - Note: This initializer lets Alamofire handle the creation of the underlying `URLSession` and its - /// `delegateQueue`, and is the recommended initializer for most uses. - /// - /// - Parameters: - /// - configuration: `URLSessionConfiguration` to be used to create the underlying `URLSession`. Changes - /// to this value after being passed to this initializer will have no effect. - /// `URLSessionConfiguration.af.default` by default. - /// - delegate: `SessionDelegate` that handles `session`'s delegate callbacks as well as `Request` - /// interaction. `SessionDelegate()` by default. - /// - rootQueue: Root `DispatchQueue` for all internal callbacks and state updates. **MUST** be a - /// serial queue. `DispatchQueue(label: "org.alamofire.session.rootQueue")` by default. - /// - startRequestsImmediately: Determines whether this instance will automatically start all `Request`s. `true` - /// by default. If set to `false`, all `Request`s created must have `.resume()` called. - /// on them for them to start. - /// - requestQueue: `DispatchQueue` on which to perform `URLRequest` creation. By default this queue - /// will use the `rootQueue` as its `target`. A separate queue can be used if it's - /// determined request creation is a bottleneck, but that should only be done after - /// careful testing and profiling. `nil` by default. - /// - serializationQueue: `DispatchQueue` on which to perform all response serialization. By default this - /// queue will use the `rootQueue` as its `target`. A separate queue can be used if - /// it's determined response serialization is a bottleneck, but that should only be - /// done after careful testing and profiling. `nil` by default. - /// - interceptor: `RequestInterceptor` to be used for all `Request`s created by this instance. `nil` - /// by default. - /// - serverTrustManager: `ServerTrustManager` to be used for all trust evaluations by this instance. `nil` - /// by default. - /// - redirectHandler: `RedirectHandler` to be used by all `Request`s created by this instance. `nil` by - /// default. - /// - cachedResponseHandler: `CachedResponseHandler` to be used by all `Request`s created by this instance. - /// `nil` by default. - /// - eventMonitors: Additional `EventMonitor`s used by the instance. Alamofire always adds a - /// `AlamofireNotifications` `EventMonitor` to the array passed here. `[]` by default. - public convenience init(configuration: URLSessionConfiguration = URLSessionConfiguration.af.default, - delegate: SessionDelegate = SessionDelegate(), - rootQueue: DispatchQueue = DispatchQueue(label: "org.alamofire.session.rootQueue"), - startRequestsImmediately: Bool = true, - requestQueue: DispatchQueue? = nil, - serializationQueue: DispatchQueue? = nil, - interceptor: RequestInterceptor? = nil, - serverTrustManager: ServerTrustManager? = nil, - redirectHandler: RedirectHandler? = nil, - cachedResponseHandler: CachedResponseHandler? = nil, - eventMonitors: [EventMonitor] = []) { - precondition(configuration.identifier == nil, "Alamofire does not support background URLSessionConfigurations.") - - // Retarget the incoming rootQueue for safety, unless it's the main queue, which we know is safe. - let serialRootQueue = (rootQueue === DispatchQueue.main) ? rootQueue : DispatchQueue(label: rootQueue.label, - target: rootQueue) - let delegateQueue = OperationQueue(maxConcurrentOperationCount: 1, underlyingQueue: serialRootQueue, name: "\(serialRootQueue.label).sessionDelegate") - let session = URLSession(configuration: configuration, delegate: delegate, delegateQueue: delegateQueue) - - self.init(session: session, - delegate: delegate, - rootQueue: serialRootQueue, - startRequestsImmediately: startRequestsImmediately, - requestQueue: requestQueue, - serializationQueue: serializationQueue, - interceptor: interceptor, - serverTrustManager: serverTrustManager, - redirectHandler: redirectHandler, - cachedResponseHandler: cachedResponseHandler, - eventMonitors: eventMonitors) - } - - deinit { - finishRequestsForDeinit() - session.invalidateAndCancel() - } - - // MARK: - All Requests API - - /// Perform an action on all active `Request`s. - /// - /// - Note: The provided `action` closure is performed asynchronously, meaning that some `Request`s may complete and - /// be unavailable by time it runs. Additionally, this action is performed on the instances's `rootQueue`, - /// so care should be taken that actions are fast. Once the work on the `Request`s is complete, any - /// additional work should be performed on another queue. - /// - /// - Parameters: - /// - action: Closure to perform with all `Request`s. - public func withAllRequests(perform action: @escaping (Set) -> Void) { - rootQueue.async { - action(self.activeRequests) - } - } - - /// Cancel all active `Request`s, optionally calling a completion handler when complete. - /// - /// - Note: This is an asynchronous operation and does not block the creation of future `Request`s. Cancelled - /// `Request`s may not cancel immediately due internal work, and may not cancel at all if they are close to - /// completion when cancelled. - /// - /// - Parameters: - /// - queue: `DispatchQueue` on which the completion handler is run. `.main` by default. - /// - completion: Closure to be called when all `Request`s have been cancelled. - public func cancelAllRequests(completingOnQueue queue: DispatchQueue = .main, completion: (() -> Void)? = nil) { - withAllRequests { requests in - requests.forEach { $0.cancel() } - queue.async { - completion?() - } - } - } - - // MARK: - DataRequest - - /// Closure which provides a `URLRequest` for mutation. - public typealias RequestModifier = (inout URLRequest) throws -> Void - - struct RequestConvertible: URLRequestConvertible { - let url: URLConvertible - let method: HTTPMethod - let parameters: Parameters? - let encoding: ParameterEncoding - let headers: HTTPHeaders? - let requestModifier: RequestModifier? - - func asURLRequest() throws -> URLRequest { - var request = try URLRequest(url: url, method: method, headers: headers) - try requestModifier?(&request) - - return try encoding.encode(request, with: parameters) - } - } - - /// Creates a `DataRequest` from a `URLRequest` created using the passed components and a `RequestInterceptor`. - /// - /// - Parameters: - /// - convertible: `URLConvertible` value to be used as the `URLRequest`'s `URL`. - /// - method: `HTTPMethod` for the `URLRequest`. `.get` by default. - /// - parameters: `Parameters` (a.k.a. `[String: Any]`) value to be encoded into the `URLRequest`. `nil` by - /// default. - /// - encoding: `ParameterEncoding` to be used to encode the `parameters` value into the `URLRequest`. - /// `URLEncoding.default` by default. - /// - headers: `HTTPHeaders` value to be added to the `URLRequest`. `nil` by default. - /// - interceptor: `RequestInterceptor` value to be used by the returned `DataRequest`. `nil` by default. - /// - requestModifier: `RequestModifier` which will be applied to the `URLRequest` created from the provided - /// parameters. `nil` by default. - /// - /// - Returns: The created `DataRequest`. - open func request(_ convertible: URLConvertible, - method: HTTPMethod = .get, - parameters: Parameters? = nil, - encoding: ParameterEncoding = URLEncoding.default, - headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, - requestModifier: RequestModifier? = nil) -> DataRequest { - let convertible = RequestConvertible(url: convertible, - method: method, - parameters: parameters, - encoding: encoding, - headers: headers, - requestModifier: requestModifier) - - return request(convertible, interceptor: interceptor) - } - - struct RequestEncodableConvertible: URLRequestConvertible { - let url: URLConvertible - let method: HTTPMethod - let parameters: Parameters? - let encoder: ParameterEncoder - let headers: HTTPHeaders? - let requestModifier: RequestModifier? - - func asURLRequest() throws -> URLRequest { - var request = try URLRequest(url: url, method: method, headers: headers) - try requestModifier?(&request) - - return try parameters.map { try encoder.encode($0, into: request) } ?? request - } - } - - /// Creates a `DataRequest` from a `URLRequest` created using the passed components, `Encodable` parameters, and a - /// `RequestInterceptor`. - /// - /// - Parameters: - /// - convertible: `URLConvertible` value to be used as the `URLRequest`'s `URL`. - /// - method: `HTTPMethod` for the `URLRequest`. `.get` by default. - /// - parameters: `Encodable` value to be encoded into the `URLRequest`. `nil` by default. - /// - encoder: `ParameterEncoder` to be used to encode the `parameters` value into the `URLRequest`. - /// `URLEncodedFormParameterEncoder.default` by default. - /// - headers: `HTTPHeaders` value to be added to the `URLRequest`. `nil` by default. - /// - interceptor: `RequestInterceptor` value to be used by the returned `DataRequest`. `nil` by default. - /// - requestModifier: `RequestModifier` which will be applied to the `URLRequest` created from - /// the provided parameters. `nil` by default. - /// - /// - Returns: The created `DataRequest`. - open func request(_ convertible: URLConvertible, - method: HTTPMethod = .get, - parameters: Parameters? = nil, - encoder: ParameterEncoder = URLEncodedFormParameterEncoder.default, - headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, - requestModifier: RequestModifier? = nil) -> DataRequest { - let convertible = RequestEncodableConvertible(url: convertible, - method: method, - parameters: parameters, - encoder: encoder, - headers: headers, - requestModifier: requestModifier) - - return request(convertible, interceptor: interceptor) - } - - /// Creates a `DataRequest` from a `URLRequestConvertible` value and a `RequestInterceptor`. - /// - /// - Parameters: - /// - convertible: `URLRequestConvertible` value to be used to create the `URLRequest`. - /// - interceptor: `RequestInterceptor` value to be used by the returned `DataRequest`. `nil` by default. - /// - /// - Returns: The created `DataRequest`. - open func request(_ convertible: URLRequestConvertible, interceptor: RequestInterceptor? = nil) -> DataRequest { - let request = DataRequest(convertible: convertible, - underlyingQueue: rootQueue, - serializationQueue: serializationQueue, - eventMonitor: eventMonitor, - interceptor: interceptor, - delegate: self) - - perform(request) - - return request - } - - // MARK: - DataStreamRequest - - /// Creates a `DataStreamRequest` from the passed components, `Encodable` parameters, and `RequestInterceptor`. - /// - /// - Parameters: - /// - convertible: `URLConvertible` value to be used as the `URLRequest`'s `URL`. - /// - method: `HTTPMethod` for the `URLRequest`. `.get` by default. - /// - parameters: `Encodable` value to be encoded into the `URLRequest`. `nil` by default. - /// - encoder: `ParameterEncoder` to be used to encode the `parameters` value into the - /// `URLRequest`. - /// `URLEncodedFormParameterEncoder.default` by default. - /// - headers: `HTTPHeaders` value to be added to the `URLRequest`. `nil` by default. - /// - automaticallyCancelOnStreamError: `Bool` indicating whether the instance should be canceled when an `Error` - /// is thrown while serializing stream `Data`. `false` by default. - /// - interceptor: `RequestInterceptor` value to be used by the returned `DataRequest`. `nil` - /// by default. - /// - requestModifier: `RequestModifier` which will be applied to the `URLRequest` created from - /// the provided parameters. `nil` by default. - /// - /// - Returns: The created `DataStream` request. - open func streamRequest(_ convertible: URLConvertible, - method: HTTPMethod = .get, - parameters: Parameters? = nil, - encoder: ParameterEncoder = URLEncodedFormParameterEncoder.default, - headers: HTTPHeaders? = nil, - automaticallyCancelOnStreamError: Bool = false, - interceptor: RequestInterceptor? = nil, - requestModifier: RequestModifier? = nil) -> DataStreamRequest { - let convertible = RequestEncodableConvertible(url: convertible, - method: method, - parameters: parameters, - encoder: encoder, - headers: headers, - requestModifier: requestModifier) - - return streamRequest(convertible, - automaticallyCancelOnStreamError: automaticallyCancelOnStreamError, - interceptor: interceptor) - } - - /// Creates a `DataStreamRequest` from the passed components and `RequestInterceptor`. - /// - /// - Parameters: - /// - convertible: `URLConvertible` value to be used as the `URLRequest`'s `URL`. - /// - method: `HTTPMethod` for the `URLRequest`. `.get` by default. - /// - headers: `HTTPHeaders` value to be added to the `URLRequest`. `nil` by default. - /// - automaticallyCancelOnStreamError: `Bool` indicating whether the instance should be canceled when an `Error` - /// is thrown while serializing stream `Data`. `false` by default. - /// - interceptor: `RequestInterceptor` value to be used by the returned `DataRequest`. `nil` - /// by default. - /// - requestModifier: `RequestModifier` which will be applied to the `URLRequest` created from - /// the provided parameters. `nil` by default. - /// - /// - Returns: The created `DataStream` request. - open func streamRequest(_ convertible: URLConvertible, - method: HTTPMethod = .get, - headers: HTTPHeaders? = nil, - automaticallyCancelOnStreamError: Bool = false, - interceptor: RequestInterceptor? = nil, - requestModifier: RequestModifier? = nil) -> DataStreamRequest { - let convertible = RequestEncodableConvertible(url: convertible, - method: method, - parameters: Empty?.none, - encoder: URLEncodedFormParameterEncoder.default, - headers: headers, - requestModifier: requestModifier) - - return streamRequest(convertible, - automaticallyCancelOnStreamError: automaticallyCancelOnStreamError, - interceptor: interceptor) - } - - /// Creates a `DataStreamRequest` from the passed `URLRequestConvertible` value and `RequestInterceptor`. - /// - /// - Parameters: - /// - convertible: `URLRequestConvertible` value to be used to create the `URLRequest`. - /// - automaticallyCancelOnStreamError: `Bool` indicating whether the instance should be canceled when an `Error` - /// is thrown while serializing stream `Data`. `false` by default. - /// - interceptor: `RequestInterceptor` value to be used by the returned `DataRequest`. `nil` - /// by default. - /// - /// - Returns: The created `DataStreamRequest`. - open func streamRequest(_ convertible: URLRequestConvertible, - automaticallyCancelOnStreamError: Bool = false, - interceptor: RequestInterceptor? = nil) -> DataStreamRequest { - let request = DataStreamRequest(convertible: convertible, - automaticallyCancelOnStreamError: automaticallyCancelOnStreamError, - underlyingQueue: rootQueue, - serializationQueue: serializationQueue, - eventMonitor: eventMonitor, - interceptor: interceptor, - delegate: self) - - perform(request) - - return request - } - - // MARK: - DownloadRequest - - /// Creates a `DownloadRequest` using a `URLRequest` created using the passed components, `RequestInterceptor`, and - /// `Destination`. - /// - /// - Parameters: - /// - convertible: `URLConvertible` value to be used as the `URLRequest`'s `URL`. - /// - method: `HTTPMethod` for the `URLRequest`. `.get` by default. - /// - parameters: `Parameters` (a.k.a. `[String: Any]`) value to be encoded into the `URLRequest`. `nil` by - /// default. - /// - encoding: `ParameterEncoding` to be used to encode the `parameters` value into the `URLRequest`. - /// Defaults to `URLEncoding.default`. - /// - headers: `HTTPHeaders` value to be added to the `URLRequest`. `nil` by default. - /// - interceptor: `RequestInterceptor` value to be used by the returned `DataRequest`. `nil` by default. - /// - requestModifier: `RequestModifier` which will be applied to the `URLRequest` created from the provided - /// parameters. `nil` by default. - /// - destination: `DownloadRequest.Destination` closure used to determine how and where the downloaded file - /// should be moved. `nil` by default. - /// - /// - Returns: The created `DownloadRequest`. - open func download(_ convertible: URLConvertible, - method: HTTPMethod = .get, - parameters: Parameters? = nil, - encoding: ParameterEncoding = URLEncoding.default, - headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, - requestModifier: RequestModifier? = nil, - to destination: DownloadRequest.Destination? = nil) -> DownloadRequest { - let convertible = RequestConvertible(url: convertible, - method: method, - parameters: parameters, - encoding: encoding, - headers: headers, - requestModifier: requestModifier) - - return download(convertible, interceptor: interceptor, to: destination) - } - - /// Creates a `DownloadRequest` from a `URLRequest` created using the passed components, `Encodable` parameters, and - /// a `RequestInterceptor`. - /// - /// - Parameters: - /// - convertible: `URLConvertible` value to be used as the `URLRequest`'s `URL`. - /// - method: `HTTPMethod` for the `URLRequest`. `.get` by default. - /// - parameters: Value conforming to `Encodable` to be encoded into the `URLRequest`. `nil` by default. - /// - encoder: `ParameterEncoder` to be used to encode the `parameters` value into the `URLRequest`. - /// Defaults to `URLEncodedFormParameterEncoder.default`. - /// - headers: `HTTPHeaders` value to be added to the `URLRequest`. `nil` by default. - /// - interceptor: `RequestInterceptor` value to be used by the returned `DataRequest`. `nil` by default. - /// - requestModifier: `RequestModifier` which will be applied to the `URLRequest` created from the provided - /// parameters. `nil` by default. - /// - destination: `DownloadRequest.Destination` closure used to determine how and where the downloaded file - /// should be moved. `nil` by default. - /// - /// - Returns: The created `DownloadRequest`. - open func download(_ convertible: URLConvertible, - method: HTTPMethod = .get, - parameters: Parameters? = nil, - encoder: ParameterEncoder = URLEncodedFormParameterEncoder.default, - headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, - requestModifier: RequestModifier? = nil, - to destination: DownloadRequest.Destination? = nil) -> DownloadRequest { - let convertible = RequestEncodableConvertible(url: convertible, - method: method, - parameters: parameters, - encoder: encoder, - headers: headers, - requestModifier: requestModifier) - - return download(convertible, interceptor: interceptor, to: destination) - } - - /// Creates a `DownloadRequest` from a `URLRequestConvertible` value, a `RequestInterceptor`, and a `Destination`. - /// - /// - Parameters: - /// - convertible: `URLRequestConvertible` value to be used to create the `URLRequest`. - /// - interceptor: `RequestInterceptor` value to be used by the returned `DataRequest`. `nil` by default. - /// - destination: `DownloadRequest.Destination` closure used to determine how and where the downloaded file - /// should be moved. `nil` by default. - /// - /// - Returns: The created `DownloadRequest`. - open func download(_ convertible: URLRequestConvertible, - interceptor: RequestInterceptor? = nil, - to destination: DownloadRequest.Destination? = nil) -> DownloadRequest { - let request = DownloadRequest(downloadable: .request(convertible), - underlyingQueue: rootQueue, - serializationQueue: serializationQueue, - eventMonitor: eventMonitor, - interceptor: interceptor, - delegate: self, - destination: destination ?? DownloadRequest.defaultDestination) - - perform(request) - - return request - } - - /// Creates a `DownloadRequest` from the `resumeData` produced from a previously cancelled `DownloadRequest`, as - /// well as a `RequestInterceptor`, and a `Destination`. - /// - /// - Note: If `destination` is not specified, the download will be moved to a temporary location determined by - /// Alamofire. The file will not be deleted until the system purges the temporary files. - /// - /// - Note: On some versions of all Apple platforms (iOS 10 - 10.2, macOS 10.12 - 10.12.2, tvOS 10 - 10.1, watchOS 3 - 3.1.1), - /// `resumeData` is broken on background URL session configurations. There's an underlying bug in the `resumeData` - /// generation logic where the data is written incorrectly and will always fail to resume the download. For more - /// information about the bug and possible workarounds, please refer to the [this Stack Overflow post](http://stackoverflow.com/a/39347461/1342462). - /// - /// - Parameters: - /// - data: The resume data from a previously cancelled `DownloadRequest` or `URLSessionDownloadTask`. - /// - interceptor: `RequestInterceptor` value to be used by the returned `DataRequest`. `nil` by default. - /// - destination: `DownloadRequest.Destination` closure used to determine how and where the downloaded file - /// should be moved. `nil` by default. - /// - /// - Returns: The created `DownloadRequest`. - open func download(resumingWith data: Data, - interceptor: RequestInterceptor? = nil, - to destination: DownloadRequest.Destination? = nil) -> DownloadRequest { - let request = DownloadRequest(downloadable: .resumeData(data), - underlyingQueue: rootQueue, - serializationQueue: serializationQueue, - eventMonitor: eventMonitor, - interceptor: interceptor, - delegate: self, - destination: destination ?? DownloadRequest.defaultDestination) - - perform(request) - - return request - } - - // MARK: - UploadRequest - - struct ParameterlessRequestConvertible: URLRequestConvertible { - let url: URLConvertible - let method: HTTPMethod - let headers: HTTPHeaders? - let requestModifier: RequestModifier? - - func asURLRequest() throws -> URLRequest { - var request = try URLRequest(url: url, method: method, headers: headers) - try requestModifier?(&request) - - return request - } - } - - struct Upload: UploadConvertible { - let request: URLRequestConvertible - let uploadable: UploadableConvertible - - func createUploadable() throws -> UploadRequest.Uploadable { - try uploadable.createUploadable() - } - - func asURLRequest() throws -> URLRequest { - try request.asURLRequest() - } - } - - // MARK: Data - - /// Creates an `UploadRequest` for the given `Data`, `URLRequest` components, and `RequestInterceptor`. - /// - /// - Parameters: - /// - data: The `Data` to upload. - /// - convertible: `URLConvertible` value to be used as the `URLRequest`'s `URL`. - /// - method: `HTTPMethod` for the `URLRequest`. `.post` by default. - /// - headers: `HTTPHeaders` value to be added to the `URLRequest`. `nil` by default. - /// - interceptor: `RequestInterceptor` value to be used by the returned `DataRequest`. `nil` by default. - /// - fileManager: `FileManager` instance to be used by the returned `UploadRequest`. `.default` instance by - /// default. - /// - requestModifier: `RequestModifier` which will be applied to the `URLRequest` created from the provided - /// parameters. `nil` by default. - /// - /// - Returns: The created `UploadRequest`. - open func upload(_ data: Data, - to convertible: URLConvertible, - method: HTTPMethod = .post, - headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, - fileManager: FileManager = .default, - requestModifier: RequestModifier? = nil) -> UploadRequest { - let convertible = ParameterlessRequestConvertible(url: convertible, - method: method, - headers: headers, - requestModifier: requestModifier) - - return upload(data, with: convertible, interceptor: interceptor, fileManager: fileManager) - } - - /// Creates an `UploadRequest` for the given `Data` using the `URLRequestConvertible` value and `RequestInterceptor`. - /// - /// - Parameters: - /// - data: The `Data` to upload. - /// - convertible: `URLRequestConvertible` value to be used to create the `URLRequest`. - /// - interceptor: `RequestInterceptor` value to be used by the returned `DataRequest`. `nil` by default. - /// - fileManager: `FileManager` instance to be used by the returned `UploadRequest`. `.default` instance by - /// default. - /// - /// - Returns: The created `UploadRequest`. - open func upload(_ data: Data, - with convertible: URLRequestConvertible, - interceptor: RequestInterceptor? = nil, - fileManager: FileManager = .default) -> UploadRequest { - upload(.data(data), with: convertible, interceptor: interceptor, fileManager: fileManager) - } - - // MARK: File - - /// Creates an `UploadRequest` for the file at the given file `URL`, using a `URLRequest` from the provided - /// components and `RequestInterceptor`. - /// - /// - Parameters: - /// - fileURL: The `URL` of the file to upload. - /// - convertible: `URLConvertible` value to be used as the `URLRequest`'s `URL`. - /// - method: `HTTPMethod` for the `URLRequest`. `.post` by default. - /// - headers: `HTTPHeaders` value to be added to the `URLRequest`. `nil` by default. - /// - interceptor: `RequestInterceptor` value to be used by the returned `UploadRequest`. `nil` by default. - /// - fileManager: `FileManager` instance to be used by the returned `UploadRequest`. `.default` instance by - /// default. - /// - requestModifier: `RequestModifier` which will be applied to the `URLRequest` created from the provided - /// parameters. `nil` by default. - /// - /// - Returns: The created `UploadRequest`. - open func upload(_ fileURL: URL, - to convertible: URLConvertible, - method: HTTPMethod = .post, - headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, - fileManager: FileManager = .default, - requestModifier: RequestModifier? = nil) -> UploadRequest { - let convertible = ParameterlessRequestConvertible(url: convertible, - method: method, - headers: headers, - requestModifier: requestModifier) - - return upload(fileURL, with: convertible, interceptor: interceptor, fileManager: fileManager) - } - - /// Creates an `UploadRequest` for the file at the given file `URL` using the `URLRequestConvertible` value and - /// `RequestInterceptor`. - /// - /// - Parameters: - /// - fileURL: The `URL` of the file to upload. - /// - convertible: `URLRequestConvertible` value to be used to create the `URLRequest`. - /// - interceptor: `RequestInterceptor` value to be used by the returned `DataRequest`. `nil` by default. - /// - fileManager: `FileManager` instance to be used by the returned `UploadRequest`. `.default` instance by - /// default. - /// - /// - Returns: The created `UploadRequest`. - open func upload(_ fileURL: URL, - with convertible: URLRequestConvertible, - interceptor: RequestInterceptor? = nil, - fileManager: FileManager = .default) -> UploadRequest { - upload(.file(fileURL, shouldRemove: false), with: convertible, interceptor: interceptor, fileManager: fileManager) - } - - // MARK: InputStream - - /// Creates an `UploadRequest` from the `InputStream` provided using a `URLRequest` from the provided components and - /// `RequestInterceptor`. - /// - /// - Parameters: - /// - stream: The `InputStream` that provides the data to upload. - /// - convertible: `URLConvertible` value to be used as the `URLRequest`'s `URL`. - /// - method: `HTTPMethod` for the `URLRequest`. `.post` by default. - /// - headers: `HTTPHeaders` value to be added to the `URLRequest`. `nil` by default. - /// - interceptor: `RequestInterceptor` value to be used by the returned `DataRequest`. `nil` by default. - /// - fileManager: `FileManager` instance to be used by the returned `UploadRequest`. `.default` instance by - /// default. - /// - requestModifier: `RequestModifier` which will be applied to the `URLRequest` created from the provided - /// parameters. `nil` by default. - /// - /// - Returns: The created `UploadRequest`. - open func upload(_ stream: InputStream, - to convertible: URLConvertible, - method: HTTPMethod = .post, - headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, - fileManager: FileManager = .default, - requestModifier: RequestModifier? = nil) -> UploadRequest { - let convertible = ParameterlessRequestConvertible(url: convertible, - method: method, - headers: headers, - requestModifier: requestModifier) - - return upload(stream, with: convertible, interceptor: interceptor, fileManager: fileManager) - } - - /// Creates an `UploadRequest` from the provided `InputStream` using the `URLRequestConvertible` value and - /// `RequestInterceptor`. - /// - /// - Parameters: - /// - stream: The `InputStream` that provides the data to upload. - /// - convertible: `URLRequestConvertible` value to be used to create the `URLRequest`. - /// - interceptor: `RequestInterceptor` value to be used by the returned `DataRequest`. `nil` by default. - /// - fileManager: `FileManager` instance to be used by the returned `UploadRequest`. `.default` instance by - /// default. - /// - /// - Returns: The created `UploadRequest`. - open func upload(_ stream: InputStream, - with convertible: URLRequestConvertible, - interceptor: RequestInterceptor? = nil, - fileManager: FileManager = .default) -> UploadRequest { - upload(.stream(stream), with: convertible, interceptor: interceptor, fileManager: fileManager) - } - - // MARK: MultipartFormData - - /// Creates an `UploadRequest` for the multipart form data built using a closure and sent using the provided - /// `URLRequest` components and `RequestInterceptor`. - /// - /// It is important to understand the memory implications of uploading `MultipartFormData`. If the cumulative - /// payload is small, encoding the data in-memory and directly uploading to a server is the by far the most - /// efficient approach. However, if the payload is too large, encoding the data in-memory could cause your app to - /// be terminated. Larger payloads must first be written to disk using input and output streams to keep the memory - /// footprint low, then the data can be uploaded as a stream from the resulting file. Streaming from disk MUST be - /// used for larger payloads such as video content. - /// - /// The `encodingMemoryThreshold` parameter allows Alamofire to automatically determine whether to encode in-memory - /// or stream from disk. If the content length of the `MultipartFormData` is below the `encodingMemoryThreshold`, - /// encoding takes place in-memory. If the content length exceeds the threshold, the data is streamed to disk - /// during the encoding process. Then the result is uploaded as data or as a stream depending on which encoding - /// technique was used. - /// - /// - Parameters: - /// - multipartFormData: `MultipartFormData` building closure. - /// - url: `URLConvertible` value to be used as the `URLRequest`'s `URL`. - /// - encodingMemoryThreshold: Byte threshold used to determine whether the form data is encoded into memory or - /// onto disk before being uploaded. `MultipartFormData.encodingMemoryThreshold` by - /// default. - /// - method: `HTTPMethod` for the `URLRequest`. `.post` by default. - /// - headers: `HTTPHeaders` value to be added to the `URLRequest`. `nil` by default. - /// - interceptor: `RequestInterceptor` value to be used by the returned `DataRequest`. `nil` by default. - /// - fileManager: `FileManager` to be used if the form data exceeds the memory threshold and is - /// written to disk before being uploaded. `.default` instance by default. - /// - requestModifier: `RequestModifier` which will be applied to the `URLRequest` created from the - /// provided parameters. `nil` by default. - /// - /// - Returns: The created `UploadRequest`. - open func upload(multipartFormData: @escaping (MultipartFormData) -> Void, - to url: URLConvertible, - usingThreshold encodingMemoryThreshold: UInt64 = MultipartFormData.encodingMemoryThreshold, - method: HTTPMethod = .post, - headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, - fileManager: FileManager = .default, - requestModifier: RequestModifier? = nil) -> UploadRequest { - let convertible = ParameterlessRequestConvertible(url: url, - method: method, - headers: headers, - requestModifier: requestModifier) - - let formData = MultipartFormData(fileManager: fileManager) - multipartFormData(formData) - - return upload(multipartFormData: formData, - with: convertible, - usingThreshold: encodingMemoryThreshold, - interceptor: interceptor, - fileManager: fileManager) - } - - /// Creates an `UploadRequest` using a `MultipartFormData` building closure, the provided `URLRequestConvertible` - /// value, and a `RequestInterceptor`. - /// - /// It is important to understand the memory implications of uploading `MultipartFormData`. If the cumulative - /// payload is small, encoding the data in-memory and directly uploading to a server is the by far the most - /// efficient approach. However, if the payload is too large, encoding the data in-memory could cause your app to - /// be terminated. Larger payloads must first be written to disk using input and output streams to keep the memory - /// footprint low, then the data can be uploaded as a stream from the resulting file. Streaming from disk MUST be - /// used for larger payloads such as video content. - /// - /// The `encodingMemoryThreshold` parameter allows Alamofire to automatically determine whether to encode in-memory - /// or stream from disk. If the content length of the `MultipartFormData` is below the `encodingMemoryThreshold`, - /// encoding takes place in-memory. If the content length exceeds the threshold, the data is streamed to disk - /// during the encoding process. Then the result is uploaded as data or as a stream depending on which encoding - /// technique was used. - /// - /// - Parameters: - /// - multipartFormData: `MultipartFormData` building closure. - /// - request: `URLRequestConvertible` value to be used to create the `URLRequest`. - /// - encodingMemoryThreshold: Byte threshold used to determine whether the form data is encoded into memory or - /// onto disk before being uploaded. `MultipartFormData.encodingMemoryThreshold` by - /// default. - /// - interceptor: `RequestInterceptor` value to be used by the returned `DataRequest`. `nil` by default. - /// - fileManager: `FileManager` to be used if the form data exceeds the memory threshold and is - /// written to disk before being uploaded. `.default` instance by default. - /// - /// - Returns: The created `UploadRequest`. - open func upload(multipartFormData: @escaping (MultipartFormData) -> Void, - with request: URLRequestConvertible, - usingThreshold encodingMemoryThreshold: UInt64 = MultipartFormData.encodingMemoryThreshold, - interceptor: RequestInterceptor? = nil, - fileManager: FileManager = .default) -> UploadRequest { - let formData = MultipartFormData(fileManager: fileManager) - multipartFormData(formData) - - return upload(multipartFormData: formData, - with: request, - usingThreshold: encodingMemoryThreshold, - interceptor: interceptor, - fileManager: fileManager) - } - - /// Creates an `UploadRequest` for the prebuilt `MultipartFormData` value using the provided `URLRequest` components - /// and `RequestInterceptor`. - /// - /// It is important to understand the memory implications of uploading `MultipartFormData`. If the cumulative - /// payload is small, encoding the data in-memory and directly uploading to a server is the by far the most - /// efficient approach. However, if the payload is too large, encoding the data in-memory could cause your app to - /// be terminated. Larger payloads must first be written to disk using input and output streams to keep the memory - /// footprint low, then the data can be uploaded as a stream from the resulting file. Streaming from disk MUST be - /// used for larger payloads such as video content. - /// - /// The `encodingMemoryThreshold` parameter allows Alamofire to automatically determine whether to encode in-memory - /// or stream from disk. If the content length of the `MultipartFormData` is below the `encodingMemoryThreshold`, - /// encoding takes place in-memory. If the content length exceeds the threshold, the data is streamed to disk - /// during the encoding process. Then the result is uploaded as data or as a stream depending on which encoding - /// technique was used. - /// - /// - Parameters: - /// - multipartFormData: `MultipartFormData` instance to upload. - /// - url: `URLConvertible` value to be used as the `URLRequest`'s `URL`. - /// - encodingMemoryThreshold: Byte threshold used to determine whether the form data is encoded into memory or - /// onto disk before being uploaded. `MultipartFormData.encodingMemoryThreshold` by - /// default. - /// - method: `HTTPMethod` for the `URLRequest`. `.post` by default. - /// - headers: `HTTPHeaders` value to be added to the `URLRequest`. `nil` by default. - /// - interceptor: `RequestInterceptor` value to be used by the returned `DataRequest`. `nil` by default. - /// - fileManager: `FileManager` to be used if the form data exceeds the memory threshold and is - /// written to disk before being uploaded. `.default` instance by default. - /// - requestModifier: `RequestModifier` which will be applied to the `URLRequest` created from the - /// provided parameters. `nil` by default. - /// - /// - Returns: The created `UploadRequest`. - open func upload(multipartFormData: MultipartFormData, - to url: URLConvertible, - usingThreshold encodingMemoryThreshold: UInt64 = MultipartFormData.encodingMemoryThreshold, - method: HTTPMethod = .post, - headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, - fileManager: FileManager = .default, - requestModifier: RequestModifier? = nil) -> UploadRequest { - let convertible = ParameterlessRequestConvertible(url: url, - method: method, - headers: headers, - requestModifier: requestModifier) - - let multipartUpload = MultipartUpload(encodingMemoryThreshold: encodingMemoryThreshold, - request: convertible, - multipartFormData: multipartFormData) - - return upload(multipartUpload, interceptor: interceptor, fileManager: fileManager) - } - - /// Creates an `UploadRequest` for the prebuilt `MultipartFormData` value using the providing `URLRequestConvertible` - /// value and `RequestInterceptor`. - /// - /// It is important to understand the memory implications of uploading `MultipartFormData`. If the cumulative - /// payload is small, encoding the data in-memory and directly uploading to a server is the by far the most - /// efficient approach. However, if the payload is too large, encoding the data in-memory could cause your app to - /// be terminated. Larger payloads must first be written to disk using input and output streams to keep the memory - /// footprint low, then the data can be uploaded as a stream from the resulting file. Streaming from disk MUST be - /// used for larger payloads such as video content. - /// - /// The `encodingMemoryThreshold` parameter allows Alamofire to automatically determine whether to encode in-memory - /// or stream from disk. If the content length of the `MultipartFormData` is below the `encodingMemoryThreshold`, - /// encoding takes place in-memory. If the content length exceeds the threshold, the data is streamed to disk - /// during the encoding process. Then the result is uploaded as data or as a stream depending on which encoding - /// technique was used. - /// - /// - Parameters: - /// - multipartFormData: `MultipartFormData` instance to upload. - /// - request: `URLRequestConvertible` value to be used to create the `URLRequest`. - /// - encodingMemoryThreshold: Byte threshold used to determine whether the form data is encoded into memory or - /// onto disk before being uploaded. `MultipartFormData.encodingMemoryThreshold` by - /// default. - /// - interceptor: `RequestInterceptor` value to be used by the returned `DataRequest`. `nil` by default. - /// - fileManager: `FileManager` instance to be used by the returned `UploadRequest`. `.default` instance by - /// default. - /// - /// - Returns: The created `UploadRequest`. - open func upload(multipartFormData: MultipartFormData, - with request: URLRequestConvertible, - usingThreshold encodingMemoryThreshold: UInt64 = MultipartFormData.encodingMemoryThreshold, - interceptor: RequestInterceptor? = nil, - fileManager: FileManager = .default) -> UploadRequest { - let multipartUpload = MultipartUpload(encodingMemoryThreshold: encodingMemoryThreshold, - request: request, - multipartFormData: multipartFormData) - - return upload(multipartUpload, interceptor: interceptor, fileManager: fileManager) - } - - // MARK: - Internal API - - // MARK: Uploadable - - func upload(_ uploadable: UploadRequest.Uploadable, - with convertible: URLRequestConvertible, - interceptor: RequestInterceptor?, - fileManager: FileManager) -> UploadRequest { - let uploadable = Upload(request: convertible, uploadable: uploadable) - - return upload(uploadable, interceptor: interceptor, fileManager: fileManager) - } - - func upload(_ upload: UploadConvertible, interceptor: RequestInterceptor?, fileManager: FileManager) -> UploadRequest { - let request = UploadRequest(convertible: upload, - underlyingQueue: rootQueue, - serializationQueue: serializationQueue, - eventMonitor: eventMonitor, - interceptor: interceptor, - fileManager: fileManager, - delegate: self) - - perform(request) - - return request - } - - // MARK: Perform - - /// Starts performing the provided `Request`. - /// - /// - Parameter request: The `Request` to perform. - func perform(_ request: Request) { - rootQueue.async { - guard !request.isCancelled else { return } - - self.activeRequests.insert(request) - - self.requestQueue.async { - // Leaf types must come first, otherwise they will cast as their superclass. - switch request { - case let r as UploadRequest: self.performUploadRequest(r) // UploadRequest must come before DataRequest due to subtype relationship. - case let r as DataRequest: self.performDataRequest(r) - case let r as DownloadRequest: self.performDownloadRequest(r) - case let r as DataStreamRequest: self.performDataStreamRequest(r) - default: fatalError("Attempted to perform unsupported Request subclass: \(type(of: request))") - } - } - } - } - - func performDataRequest(_ request: DataRequest) { - dispatchPrecondition(condition: .onQueue(requestQueue)) - - performSetupOperations(for: request, convertible: request.convertible) - } - - func performDataStreamRequest(_ request: DataStreamRequest) { - dispatchPrecondition(condition: .onQueue(requestQueue)) - - performSetupOperations(for: request, convertible: request.convertible) - } - - func performUploadRequest(_ request: UploadRequest) { - dispatchPrecondition(condition: .onQueue(requestQueue)) - - performSetupOperations(for: request, convertible: request.convertible) { - do { - let uploadable = try request.upload.createUploadable() - self.rootQueue.async { request.didCreateUploadable(uploadable) } - return true - } catch { - self.rootQueue.async { request.didFailToCreateUploadable(with: error.asAFError(or: .createUploadableFailed(error: error))) } - return false - } - } - } - - func performDownloadRequest(_ request: DownloadRequest) { - dispatchPrecondition(condition: .onQueue(requestQueue)) - - switch request.downloadable { - case let .request(convertible): - performSetupOperations(for: request, convertible: convertible) - case let .resumeData(resumeData): - rootQueue.async { self.didReceiveResumeData(resumeData, for: request) } - } - } - - func performSetupOperations(for request: Request, - convertible: URLRequestConvertible, - shouldCreateTask: @escaping () -> Bool = { true }) { - dispatchPrecondition(condition: .onQueue(requestQueue)) - - let initialRequest: URLRequest - - do { - initialRequest = try convertible.asURLRequest() - try initialRequest.validate() - } catch { - rootQueue.async { request.didFailToCreateURLRequest(with: error.asAFError(or: .createURLRequestFailed(error: error))) } - return - } - - rootQueue.async { request.didCreateInitialURLRequest(initialRequest) } - - guard !request.isCancelled else { return } - - guard let adapter = adapter(for: request) else { - guard shouldCreateTask() else { return } - rootQueue.async { self.didCreateURLRequest(initialRequest, for: request) } - return - } - - let adapterState = RequestAdapterState(requestID: request.id, session: self) - - adapter.adapt(initialRequest, using: adapterState) { result in - do { - let adaptedRequest = try result.get() - try adaptedRequest.validate() - - self.rootQueue.async { request.didAdaptInitialRequest(initialRequest, to: adaptedRequest) } - - guard shouldCreateTask() else { return } - - self.rootQueue.async { self.didCreateURLRequest(adaptedRequest, for: request) } - } catch { - self.rootQueue.async { request.didFailToAdaptURLRequest(initialRequest, withError: .requestAdaptationFailed(error: error)) } - } - } - } - - // MARK: - Task Handling - - func didCreateURLRequest(_ urlRequest: URLRequest, for request: Request) { - dispatchPrecondition(condition: .onQueue(rootQueue)) - - request.didCreateURLRequest(urlRequest) - - guard !request.isCancelled else { return } - - let task = request.task(for: urlRequest, using: session) - requestTaskMap[request] = task - request.didCreateTask(task) - - updateStatesForTask(task, request: request) - } - - func didReceiveResumeData(_ data: Data, for request: DownloadRequest) { - dispatchPrecondition(condition: .onQueue(rootQueue)) - - guard !request.isCancelled else { return } - - let task = request.task(forResumeData: data, using: session) - requestTaskMap[request] = task - request.didCreateTask(task) - - updateStatesForTask(task, request: request) - } - - func updateStatesForTask(_ task: URLSessionTask, request: Request) { - dispatchPrecondition(condition: .onQueue(rootQueue)) - - request.withState { state in - switch state { - case .initialized, .finished: - // Do nothing. - break - case .resumed: - task.resume() - rootQueue.async { request.didResumeTask(task) } - case .suspended: - task.suspend() - rootQueue.async { request.didSuspendTask(task) } - case .cancelled: - // Resume to ensure metrics are gathered. - task.resume() - task.cancel() - rootQueue.async { request.didCancelTask(task) } - } - } - } - - // MARK: - Adapters and Retriers - - func adapter(for request: Request) -> RequestAdapter? { - if let requestInterceptor = request.interceptor, let sessionInterceptor = interceptor { - return Interceptor(adapters: [requestInterceptor, sessionInterceptor]) - } else { - return request.interceptor ?? interceptor - } - } - - func retrier(for request: Request) -> RequestRetrier? { - if let requestInterceptor = request.interceptor, let sessionInterceptor = interceptor { - return Interceptor(retriers: [requestInterceptor, sessionInterceptor]) - } else { - return request.interceptor ?? interceptor - } - } - - // MARK: - Invalidation - - func finishRequestsForDeinit() { - requestTaskMap.requests.forEach { request in - rootQueue.async { - request.finish(error: AFError.sessionDeinitialized) - } - } - } -} - -// MARK: - RequestDelegate - -extension Session: RequestDelegate { - public var sessionConfiguration: URLSessionConfiguration { - session.configuration - } - - public var startImmediately: Bool { startRequestsImmediately } - - public func cleanup(after request: Request) { - activeRequests.remove(request) - } - - public func retryResult(for request: Request, dueTo error: AFError, completion: @escaping (RetryResult) -> Void) { - guard let retrier = retrier(for: request) else { - rootQueue.async { completion(.doNotRetry) } - return - } - - retrier.retry(request, for: self, dueTo: error) { retryResult in - self.rootQueue.async { - guard let retryResultError = retryResult.error else { completion(retryResult); return } - - let retryError = AFError.requestRetryFailed(retryError: retryResultError, originalError: error) - completion(.doNotRetryWithError(retryError)) - } - } - } - - public func retryRequest(_ request: Request, withDelay timeDelay: TimeInterval?) { - rootQueue.async { - let retry: () -> Void = { - guard !request.isCancelled else { return } - - request.prepareForRetry() - self.perform(request) - } - - if let retryDelay = timeDelay { - self.rootQueue.after(retryDelay) { retry() } - } else { - retry() - } - } - } -} - -// MARK: - SessionStateProvider - -extension Session: SessionStateProvider { - func request(for task: URLSessionTask) -> Request? { - dispatchPrecondition(condition: .onQueue(rootQueue)) - - return requestTaskMap[task] - } - - func didGatherMetricsForTask(_ task: URLSessionTask) { - dispatchPrecondition(condition: .onQueue(rootQueue)) - - let didDisassociate = requestTaskMap.disassociateIfNecessaryAfterGatheringMetricsForTask(task) - - if didDisassociate { - waitingCompletions[task]?() - waitingCompletions[task] = nil - } - } - - func didCompleteTask(_ task: URLSessionTask, completion: @escaping () -> Void) { - dispatchPrecondition(condition: .onQueue(rootQueue)) - - let didDisassociate = requestTaskMap.disassociateIfNecessaryAfterCompletingTask(task) - - if didDisassociate { - completion() - } else { - waitingCompletions[task] = completion - } - } - - func credential(for task: URLSessionTask, in protectionSpace: URLProtectionSpace) -> URLCredential? { - dispatchPrecondition(condition: .onQueue(rootQueue)) - - return requestTaskMap[task]?.credential ?? - session.configuration.urlCredentialStorage?.defaultCredential(for: protectionSpace) - } - - func cancelRequestsForSessionInvalidation(with error: Error?) { - dispatchPrecondition(condition: .onQueue(rootQueue)) - - requestTaskMap.requests.forEach { $0.finish(error: AFError.sessionInvalidated(error: error)) } - } -} diff --git a/Pods/Alamofire/Source/SessionDelegate.swift b/Pods/Alamofire/Source/SessionDelegate.swift deleted file mode 100644 index af45b27..0000000 --- a/Pods/Alamofire/Source/SessionDelegate.swift +++ /dev/null @@ -1,355 +0,0 @@ -// -// SessionDelegate.swift -// -// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -/// Class which implements the various `URLSessionDelegate` methods to connect various Alamofire features. -open class SessionDelegate: NSObject { - private let fileManager: FileManager - - weak var stateProvider: SessionStateProvider? - var eventMonitor: EventMonitor? - - /// Creates an instance from the given `FileManager`. - /// - /// - Parameter fileManager: `FileManager` to use for underlying file management, such as moving downloaded files. - /// `.default` by default. - public init(fileManager: FileManager = .default) { - self.fileManager = fileManager - } - - /// Internal method to find and cast requests while maintaining some integrity checking. - /// - /// - Parameters: - /// - task: The `URLSessionTask` for which to find the associated `Request`. - /// - type: The `Request` subclass type to cast any `Request` associate with `task`. - func request(for task: URLSessionTask, as type: R.Type) -> R? { - guard let provider = stateProvider else { - assertionFailure("StateProvider is nil.") - return nil - } - - return provider.request(for: task) as? R - } -} - -/// Type which provides various `Session` state values. -protocol SessionStateProvider: AnyObject { - var serverTrustManager: ServerTrustManager? { get } - var redirectHandler: RedirectHandler? { get } - var cachedResponseHandler: CachedResponseHandler? { get } - - func request(for task: URLSessionTask) -> Request? - func didGatherMetricsForTask(_ task: URLSessionTask) - func didCompleteTask(_ task: URLSessionTask, completion: @escaping () -> Void) - func credential(for task: URLSessionTask, in protectionSpace: URLProtectionSpace) -> URLCredential? - func cancelRequestsForSessionInvalidation(with error: Error?) -} - -// MARK: URLSessionDelegate - -extension SessionDelegate: URLSessionDelegate { - open func urlSession(_ session: URLSession, didBecomeInvalidWithError error: Error?) { - eventMonitor?.urlSession(session, didBecomeInvalidWithError: error) - - stateProvider?.cancelRequestsForSessionInvalidation(with: error) - } -} - -// MARK: URLSessionTaskDelegate - -extension SessionDelegate: URLSessionTaskDelegate { - /// Result of a `URLAuthenticationChallenge` evaluation. - typealias ChallengeEvaluation = (disposition: URLSession.AuthChallengeDisposition, credential: URLCredential?, error: AFError?) - - open func urlSession(_ session: URLSession, - task: URLSessionTask, - didReceive challenge: URLAuthenticationChallenge, - completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { - eventMonitor?.urlSession(session, task: task, didReceive: challenge) - - let evaluation: ChallengeEvaluation - switch challenge.protectionSpace.authenticationMethod { - case NSURLAuthenticationMethodHTTPBasic, NSURLAuthenticationMethodHTTPDigest, NSURLAuthenticationMethodNTLM, - NSURLAuthenticationMethodNegotiate: - evaluation = attemptCredentialAuthentication(for: challenge, belongingTo: task) - #if canImport(Security) - case NSURLAuthenticationMethodServerTrust: - evaluation = attemptServerTrustAuthentication(with: challenge) - case NSURLAuthenticationMethodClientCertificate: - evaluation = attemptCredentialAuthentication(for: challenge, belongingTo: task) - #endif - default: - evaluation = (.performDefaultHandling, nil, nil) - } - - if let error = evaluation.error { - stateProvider?.request(for: task)?.didFailTask(task, earlyWithError: error) - } - - completionHandler(evaluation.disposition, evaluation.credential) - } - - #if canImport(Security) - /// Evaluates the server trust `URLAuthenticationChallenge` received. - /// - /// - Parameter challenge: The `URLAuthenticationChallenge`. - /// - /// - Returns: The `ChallengeEvaluation`. - func attemptServerTrustAuthentication(with challenge: URLAuthenticationChallenge) -> ChallengeEvaluation { - let host = challenge.protectionSpace.host - - guard challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust, - let trust = challenge.protectionSpace.serverTrust - else { - return (.performDefaultHandling, nil, nil) - } - - do { - guard let evaluator = try stateProvider?.serverTrustManager?.serverTrustEvaluator(forHost: host) else { - return (.performDefaultHandling, nil, nil) - } - - try evaluator.evaluate(trust, forHost: host) - - return (.useCredential, URLCredential(trust: trust), nil) - } catch { - return (.cancelAuthenticationChallenge, nil, error.asAFError(or: .serverTrustEvaluationFailed(reason: .customEvaluationFailed(error: error)))) - } - } - #endif - - /// Evaluates the credential-based authentication `URLAuthenticationChallenge` received for `task`. - /// - /// - Parameters: - /// - challenge: The `URLAuthenticationChallenge`. - /// - task: The `URLSessionTask` which received the challenge. - /// - /// - Returns: The `ChallengeEvaluation`. - func attemptCredentialAuthentication(for challenge: URLAuthenticationChallenge, - belongingTo task: URLSessionTask) -> ChallengeEvaluation { - guard challenge.previousFailureCount == 0 else { - return (.rejectProtectionSpace, nil, nil) - } - - guard let credential = stateProvider?.credential(for: task, in: challenge.protectionSpace) else { - return (.performDefaultHandling, nil, nil) - } - - return (.useCredential, credential, nil) - } - - open func urlSession(_ session: URLSession, - task: URLSessionTask, - didSendBodyData bytesSent: Int64, - totalBytesSent: Int64, - totalBytesExpectedToSend: Int64) { - eventMonitor?.urlSession(session, - task: task, - didSendBodyData: bytesSent, - totalBytesSent: totalBytesSent, - totalBytesExpectedToSend: totalBytesExpectedToSend) - - stateProvider?.request(for: task)?.updateUploadProgress(totalBytesSent: totalBytesSent, - totalBytesExpectedToSend: totalBytesExpectedToSend) - } - - open func urlSession(_ session: URLSession, - task: URLSessionTask, - needNewBodyStream completionHandler: @escaping (InputStream?) -> Void) { - eventMonitor?.urlSession(session, taskNeedsNewBodyStream: task) - - guard let request = request(for: task, as: UploadRequest.self) else { - assertionFailure("needNewBodyStream did not find UploadRequest.") - completionHandler(nil) - return - } - - completionHandler(request.inputStream()) - } - - open func urlSession(_ session: URLSession, - task: URLSessionTask, - willPerformHTTPRedirection response: HTTPURLResponse, - newRequest request: URLRequest, - completionHandler: @escaping (URLRequest?) -> Void) { - eventMonitor?.urlSession(session, task: task, willPerformHTTPRedirection: response, newRequest: request) - - if let redirectHandler = stateProvider?.request(for: task)?.redirectHandler ?? stateProvider?.redirectHandler { - redirectHandler.task(task, willBeRedirectedTo: request, for: response, completion: completionHandler) - } else { - completionHandler(request) - } - } - - open func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) { - eventMonitor?.urlSession(session, task: task, didFinishCollecting: metrics) - - stateProvider?.request(for: task)?.didGatherMetrics(metrics) - - stateProvider?.didGatherMetricsForTask(task) - } - - open func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { - eventMonitor?.urlSession(session, task: task, didCompleteWithError: error) - - let request = stateProvider?.request(for: task) - - stateProvider?.didCompleteTask(task) { - request?.didCompleteTask(task, with: error.map { $0.asAFError(or: .sessionTaskFailed(error: $0)) }) - } - } - - @available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) - open func urlSession(_ session: URLSession, taskIsWaitingForConnectivity task: URLSessionTask) { - eventMonitor?.urlSession(session, taskIsWaitingForConnectivity: task) - } -} - -// MARK: URLSessionDataDelegate - -extension SessionDelegate: URLSessionDataDelegate { - open func urlSession(_ session: URLSession, - dataTask: URLSessionDataTask, - didReceive response: URLResponse, - completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) { - eventMonitor?.urlSession(session, dataTask: dataTask, didReceive: response) - - guard let response = response as? HTTPURLResponse else { completionHandler(.allow); return } - - if let request = request(for: dataTask, as: DataRequest.self) { - request.didReceiveResponse(response, completionHandler: completionHandler) - } else if let request = request(for: dataTask, as: DataStreamRequest.self) { - request.didReceiveResponse(response, completionHandler: completionHandler) - } else { - assertionFailure("dataTask did not find DataRequest or DataStreamRequest in didReceive response") - completionHandler(.allow) - return - } - } - - open func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) { - eventMonitor?.urlSession(session, dataTask: dataTask, didReceive: data) - - if let request = request(for: dataTask, as: DataRequest.self) { - request.didReceive(data: data) - } else if let request = request(for: dataTask, as: DataStreamRequest.self) { - request.didReceive(data: data) - } else { - assertionFailure("dataTask did not find DataRequest or DataStreamRequest in didReceive data") - return - } - } - - open func urlSession(_ session: URLSession, - dataTask: URLSessionDataTask, - willCacheResponse proposedResponse: CachedURLResponse, - completionHandler: @escaping (CachedURLResponse?) -> Void) { - eventMonitor?.urlSession(session, dataTask: dataTask, willCacheResponse: proposedResponse) - - if let handler = stateProvider?.request(for: dataTask)?.cachedResponseHandler ?? stateProvider?.cachedResponseHandler { - handler.dataTask(dataTask, willCacheResponse: proposedResponse, completion: completionHandler) - } else { - completionHandler(proposedResponse) - } - } -} - -// MARK: URLSessionDownloadDelegate - -extension SessionDelegate: URLSessionDownloadDelegate { - open func urlSession(_ session: URLSession, - downloadTask: URLSessionDownloadTask, - didResumeAtOffset fileOffset: Int64, - expectedTotalBytes: Int64) { - eventMonitor?.urlSession(session, - downloadTask: downloadTask, - didResumeAtOffset: fileOffset, - expectedTotalBytes: expectedTotalBytes) - guard let downloadRequest = request(for: downloadTask, as: DownloadRequest.self) else { - assertionFailure("downloadTask did not find DownloadRequest.") - return - } - - downloadRequest.updateDownloadProgress(bytesWritten: fileOffset, - totalBytesExpectedToWrite: expectedTotalBytes) - } - - open func urlSession(_ session: URLSession, - downloadTask: URLSessionDownloadTask, - didWriteData bytesWritten: Int64, - totalBytesWritten: Int64, - totalBytesExpectedToWrite: Int64) { - eventMonitor?.urlSession(session, - downloadTask: downloadTask, - didWriteData: bytesWritten, - totalBytesWritten: totalBytesWritten, - totalBytesExpectedToWrite: totalBytesExpectedToWrite) - guard let downloadRequest = request(for: downloadTask, as: DownloadRequest.self) else { - assertionFailure("downloadTask did not find DownloadRequest.") - return - } - - downloadRequest.updateDownloadProgress(bytesWritten: bytesWritten, - totalBytesExpectedToWrite: totalBytesExpectedToWrite) - } - - open func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) { - eventMonitor?.urlSession(session, downloadTask: downloadTask, didFinishDownloadingTo: location) - - guard let request = request(for: downloadTask, as: DownloadRequest.self) else { - assertionFailure("downloadTask did not find DownloadRequest.") - return - } - - let (destination, options): (URL, DownloadRequest.Options) - if let response = request.response { - (destination, options) = request.destination(location, response) - } else { - // If there's no response this is likely a local file download, so generate the temporary URL directly. - (destination, options) = (DownloadRequest.defaultDestinationURL(location), []) - } - - eventMonitor?.request(request, didCreateDestinationURL: destination) - - do { - if options.contains(.removePreviousFile), fileManager.fileExists(atPath: destination.path) { - try fileManager.removeItem(at: destination) - } - - if options.contains(.createIntermediateDirectories) { - let directory = destination.deletingLastPathComponent() - try fileManager.createDirectory(at: directory, withIntermediateDirectories: true) - } - - try fileManager.moveItem(at: location, to: destination) - - request.didFinishDownloading(using: downloadTask, with: .success(destination)) - } catch { - request.didFinishDownloading(using: downloadTask, with: .failure(.downloadedFileMoveFailed(error: error, - source: location, - destination: destination))) - } - } -} diff --git a/Pods/Alamofire/Source/StringEncoding+Alamofire.swift b/Pods/Alamofire/Source/StringEncoding+Alamofire.swift deleted file mode 100644 index 8fa6133..0000000 --- a/Pods/Alamofire/Source/StringEncoding+Alamofire.swift +++ /dev/null @@ -1,55 +0,0 @@ -// -// StringEncoding+Alamofire.swift -// -// Copyright (c) 2020 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -extension String.Encoding { - /// Creates an encoding from the IANA charset name. - /// - /// - Notes: These mappings match those [provided by CoreFoundation](https://opensource.apple.com/source/CF/CF-476.18/CFStringUtilities.c.auto.html) - /// - /// - Parameter name: IANA charset name. - init?(ianaCharsetName name: String) { - switch name.lowercased() { - case "utf-8": - self = .utf8 - case "iso-8859-1": - self = .isoLatin1 - case "unicode-1-1", "iso-10646-ucs-2", "utf-16": - self = .utf16 - case "utf-16be": - self = .utf16BigEndian - case "utf-16le": - self = .utf16LittleEndian - case "utf-32": - self = .utf32 - case "utf-32be": - self = .utf32BigEndian - case "utf-32le": - self = .utf32LittleEndian - default: - return nil - } - } -} diff --git a/Pods/Alamofire/Source/URLConvertible+URLRequestConvertible.swift b/Pods/Alamofire/Source/URLConvertible+URLRequestConvertible.swift deleted file mode 100644 index 455c4bc..0000000 --- a/Pods/Alamofire/Source/URLConvertible+URLRequestConvertible.swift +++ /dev/null @@ -1,105 +0,0 @@ -// -// URLConvertible+URLRequestConvertible.swift -// -// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -/// Types adopting the `URLConvertible` protocol can be used to construct `URL`s, which can then be used to construct -/// `URLRequests`. -public protocol URLConvertible { - /// Returns a `URL` from the conforming instance or throws. - /// - /// - Returns: The `URL` created from the instance. - /// - Throws: Any error thrown while creating the `URL`. - func asURL() throws -> URL -} - -extension String: URLConvertible { - /// Returns a `URL` if `self` can be used to initialize a `URL` instance, otherwise throws. - /// - /// - Returns: The `URL` initialized with `self`. - /// - Throws: An `AFError.invalidURL` instance. - public func asURL() throws -> URL { - guard let url = URL(string: self) else { throw AFError.invalidURL(url: self) } - - return url - } -} - -extension URL: URLConvertible { - /// Returns `self`. - public func asURL() throws -> URL { self } -} - -extension URLComponents: URLConvertible { - /// Returns a `URL` if the `self`'s `url` is not nil, otherwise throws. - /// - /// - Returns: The `URL` from the `url` property. - /// - Throws: An `AFError.invalidURL` instance. - public func asURL() throws -> URL { - guard let url = url else { throw AFError.invalidURL(url: self) } - - return url - } -} - -// MARK: - - -/// Types adopting the `URLRequestConvertible` protocol can be used to safely construct `URLRequest`s. -public protocol URLRequestConvertible { - /// Returns a `URLRequest` or throws if an `Error` was encountered. - /// - /// - Returns: A `URLRequest`. - /// - Throws: Any error thrown while constructing the `URLRequest`. - func asURLRequest() throws -> URLRequest -} - -extension URLRequestConvertible { - /// The `URLRequest` returned by discarding any `Error` encountered. - public var urlRequest: URLRequest? { try? asURLRequest() } -} - -extension URLRequest: URLRequestConvertible { - /// Returns `self`. - public func asURLRequest() throws -> URLRequest { self } -} - -// MARK: - - -extension URLRequest { - /// Creates an instance with the specified `url`, `method`, and `headers`. - /// - /// - Parameters: - /// - url: The `URLConvertible` value. - /// - method: The `HTTPMethod`. - /// - headers: The `HTTPHeaders`, `nil` by default. - /// - Throws: Any error thrown while converting the `URLConvertible` to a `URL`. - public init(url: URLConvertible, method: HTTPMethod, headers: HTTPHeaders? = nil) throws { - let url = try url.asURL() - - self.init(url: url) - - httpMethod = method.rawValue - allHTTPHeaderFields = headers?.dictionary - } -} diff --git a/Pods/Alamofire/Source/URLEncodedFormEncoder.swift b/Pods/Alamofire/Source/URLEncodedFormEncoder.swift deleted file mode 100644 index cfbd7e4..0000000 --- a/Pods/Alamofire/Source/URLEncodedFormEncoder.swift +++ /dev/null @@ -1,1151 +0,0 @@ -// -// URLEncodedFormEncoder.swift -// -// Copyright (c) 2019 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -/// An object that encodes instances into URL-encoded query strings. -/// -/// `ArrayEncoding` can be used to configure how `Array` values are encoded. By default, the `.brackets` encoding is -/// used, encoding array values with brackets for each value. e.g `array[]=1&array[]=2`. -/// -/// `BoolEncoding` can be used to configure how `Bool` values are encoded. By default, the `.numeric` encoding is used, -/// encoding `true` as `1` and `false` as `0`. -/// -/// `DataEncoding` can be used to configure how `Data` values are encoded. By default, the `.deferredToData` encoding is -/// used, which encodes `Data` values using their default `Encodable` implementation. -/// -/// `DateEncoding` can be used to configure how `Date` values are encoded. By default, the `.deferredToDate` -/// encoding is used, which encodes `Date`s using their default `Encodable` implementation. -/// -/// `KeyEncoding` can be used to configure how keys are encoded. By default, the `.useDefaultKeys` encoding is used, -/// which encodes the keys directly from the `Encodable` implementation. -/// -/// `KeyPathEncoding` can be used to configure how paths within nested objects are encoded. By default, the `.brackets` -/// encoding is used, which encodes each sub-key in brackets. e.g. `parent[child][grandchild]=value`. -/// -/// `NilEncoding` can be used to configure how `nil` `Optional` values are encoded. By default, the `.dropKey` encoding -/// is used, which drops `nil` key / value pairs from the output entirely. -/// -/// `SpaceEncoding` can be used to configure how spaces are encoded. By default, the `.percentEscaped` encoding is used, -/// replacing spaces with `%20`. -/// -/// This type is largely based on Vapor's [`url-encoded-form`](https://github.com/vapor/url-encoded-form) project. -public final class URLEncodedFormEncoder { - /// Encoding to use for `Array` values. - public enum ArrayEncoding { - /// An empty set of square brackets ("[]") are appended to the key for every value. This is the default encoding. - case brackets - /// No brackets are appended to the key and the key is encoded as is. - case noBrackets - /// Brackets containing the item index are appended. This matches the jQuery and Node.js behavior. - case indexInBrackets - /// Provide a custom array key encoding with the given closure. - case custom((_ key: String, _ index: Int) -> String) - - /// Encodes the key according to the encoding. - /// - /// - Parameters: - /// - key: The `key` to encode. - /// - index: When this enum instance is `.indexInBrackets`, the `index` to encode. - /// - /// - Returns: The encoded key. - func encode(_ key: String, atIndex index: Int) -> String { - switch self { - case .brackets: return "\(key)[]" - case .noBrackets: return key - case .indexInBrackets: return "\(key)[\(index)]" - case let .custom(encoding): return encoding(key, index) - } - } - } - - /// Encoding to use for `Bool` values. - public enum BoolEncoding { - /// Encodes `true` as `1`, `false` as `0`. - case numeric - /// Encodes `true` as "true", `false` as "false". This is the default encoding. - case literal - - /// Encodes the given `Bool` as a `String`. - /// - /// - Parameter value: The `Bool` to encode. - /// - /// - Returns: The encoded `String`. - func encode(_ value: Bool) -> String { - switch self { - case .numeric: return value ? "1" : "0" - case .literal: return value ? "true" : "false" - } - } - } - - /// Encoding to use for `Data` values. - public enum DataEncoding { - /// Defers encoding to the `Data` type. - case deferredToData - /// Encodes `Data` as a Base64-encoded string. This is the default encoding. - case base64 - /// Encode the `Data` as a custom value encoded by the given closure. - case custom((Data) throws -> String) - - /// Encodes `Data` according to the encoding. - /// - /// - Parameter data: The `Data` to encode. - /// - /// - Returns: The encoded `String`, or `nil` if the `Data` should be encoded according to its - /// `Encodable` implementation. - func encode(_ data: Data) throws -> String? { - switch self { - case .deferredToData: return nil - case .base64: return data.base64EncodedString() - case let .custom(encoding): return try encoding(data) - } - } - } - - /// Encoding to use for `Date` values. - public enum DateEncoding { - /// ISO8601 and RFC3339 formatter. - private static let iso8601Formatter: ISO8601DateFormatter = { - let formatter = ISO8601DateFormatter() - formatter.formatOptions = .withInternetDateTime - return formatter - }() - - /// Defers encoding to the `Date` type. This is the default encoding. - case deferredToDate - /// Encodes `Date`s as seconds since midnight UTC on January 1, 1970. - case secondsSince1970 - /// Encodes `Date`s as milliseconds since midnight UTC on January 1, 1970. - case millisecondsSince1970 - /// Encodes `Date`s according to the ISO8601 and RFC3339 standards. - case iso8601 - /// Encodes `Date`s using the given `DateFormatter`. - case formatted(DateFormatter) - /// Encodes `Date`s using the given closure. - case custom((Date) throws -> String) - - /// Encodes the date according to the encoding. - /// - /// - Parameter date: The `Date` to encode. - /// - /// - Returns: The encoded `String`, or `nil` if the `Date` should be encoded according to its - /// `Encodable` implementation. - func encode(_ date: Date) throws -> String? { - switch self { - case .deferredToDate: - return nil - case .secondsSince1970: - return String(date.timeIntervalSince1970) - case .millisecondsSince1970: - return String(date.timeIntervalSince1970 * 1000.0) - case .iso8601: - return DateEncoding.iso8601Formatter.string(from: date) - case let .formatted(formatter): - return formatter.string(from: date) - case let .custom(closure): - return try closure(date) - } - } - } - - /// Encoding to use for keys. - /// - /// This type is derived from [`JSONEncoder`'s `KeyEncodingStrategy`](https://github.com/apple/swift/blob/6aa313b8dd5f05135f7f878eccc1db6f9fbe34ff/stdlib/public/Darwin/Foundation/JSONEncoder.swift#L128) - /// and [`XMLEncoder`s `KeyEncodingStrategy`](https://github.com/MaxDesiatov/XMLCoder/blob/master/Sources/XMLCoder/Encoder/XMLEncoder.swift#L102). - public enum KeyEncoding { - /// Use the keys specified by each type. This is the default encoding. - case useDefaultKeys - /// Convert from "camelCaseKeys" to "snake_case_keys" before writing a key. - /// - /// Capital characters are determined by testing membership in - /// `CharacterSet.uppercaseLetters` and `CharacterSet.lowercaseLetters` - /// (Unicode General Categories Lu and Lt). - /// The conversion to lower case uses `Locale.system`, also known as - /// the ICU "root" locale. This means the result is consistent - /// regardless of the current user's locale and language preferences. - /// - /// Converting from camel case to snake case: - /// 1. Splits words at the boundary of lower-case to upper-case - /// 2. Inserts `_` between words - /// 3. Lowercases the entire string - /// 4. Preserves starting and ending `_`. - /// - /// For example, `oneTwoThree` becomes `one_two_three`. `_oneTwoThree_` becomes `_one_two_three_`. - /// - /// - Note: Using a key encoding strategy has a nominal performance cost, as each string key has to be converted. - case convertToSnakeCase - /// Same as convertToSnakeCase, but using `-` instead of `_`. - /// For example `oneTwoThree` becomes `one-two-three`. - case convertToKebabCase - /// Capitalize the first letter only. - /// For example `oneTwoThree` becomes `OneTwoThree`. - case capitalized - /// Uppercase all letters. - /// For example `oneTwoThree` becomes `ONETWOTHREE`. - case uppercased - /// Lowercase all letters. - /// For example `oneTwoThree` becomes `onetwothree`. - case lowercased - /// A custom encoding using the provided closure. - case custom((String) -> String) - - func encode(_ key: String) -> String { - switch self { - case .useDefaultKeys: return key - case .convertToSnakeCase: return convertToSnakeCase(key) - case .convertToKebabCase: return convertToKebabCase(key) - case .capitalized: return String(key.prefix(1).uppercased() + key.dropFirst()) - case .uppercased: return key.uppercased() - case .lowercased: return key.lowercased() - case let .custom(encoding): return encoding(key) - } - } - - private func convertToSnakeCase(_ key: String) -> String { - convert(key, usingSeparator: "_") - } - - private func convertToKebabCase(_ key: String) -> String { - convert(key, usingSeparator: "-") - } - - private func convert(_ key: String, usingSeparator separator: String) -> String { - guard !key.isEmpty else { return key } - - var words: [Range] = [] - // The general idea of this algorithm is to split words on - // transition from lower to upper case, then on transition of >1 - // upper case characters to lowercase - // - // myProperty -> my_property - // myURLProperty -> my_url_property - // - // It is assumed, per Swift naming conventions, that the first character of the key is lowercase. - var wordStart = key.startIndex - var searchRange = key.index(after: wordStart)..1 capital letters. Turn those into a word, stopping at the capital before - // the lower case character. - let beforeLowerIndex = key.index(before: lowerCaseRange.lowerBound) - words.append(upperCaseRange.lowerBound.. String - - /// Creates an instance with the encoding closure called for each sub-key in a key path. - /// - /// - Parameter encoding: Closure used to perform the encoding. - public init(encoding: @escaping (_ subkey: String) -> String) { - self.encoding = encoding - } - - func encodeKeyPath(_ keyPath: String) -> String { - encoding(keyPath) - } - } - - /// Encoding to use for `nil` values. - public struct NilEncoding { - /// Encodes `nil` by dropping the entire key / value pair. - public static let dropKey = NilEncoding { nil } - /// Encodes `nil` by dropping only the value. e.g. `value1=one&nilValue=&value2=two`. - public static let dropValue = NilEncoding { "" } - /// Encodes `nil` as `null`. - public static let null = NilEncoding { "null" } - - private let encoding: () -> String? - - /// Creates an instance with the encoding closure called for `nil` values. - /// - /// - Parameter encoding: Closure used to perform the encoding. - public init(encoding: @escaping () -> String?) { - self.encoding = encoding - } - - func encodeNil() -> String? { - encoding() - } - } - - /// Encoding to use for spaces. - public enum SpaceEncoding { - /// Encodes spaces using percent escaping (`%20`). - case percentEscaped - /// Encodes spaces as `+`. - case plusReplaced - - /// Encodes the string according to the encoding. - /// - /// - Parameter string: The `String` to encode. - /// - /// - Returns: The encoded `String`. - func encode(_ string: String) -> String { - switch self { - case .percentEscaped: return string.replacingOccurrences(of: " ", with: "%20") - case .plusReplaced: return string.replacingOccurrences(of: " ", with: "+") - } - } - } - - /// `URLEncodedFormEncoder` error. - public enum Error: Swift.Error { - /// An invalid root object was created by the encoder. Only keyed values are valid. - case invalidRootObject(String) - - var localizedDescription: String { - switch self { - case let .invalidRootObject(object): - return "URLEncodedFormEncoder requires keyed root object. Received \(object) instead." - } - } - } - - /// Whether or not to sort the encoded key value pairs. - /// - /// - Note: This setting ensures a consistent ordering for all encodings of the same parameters. When set to `false`, - /// encoded `Dictionary` values may have a different encoded order each time they're encoded due to - /// ` Dictionary`'s random storage order, but `Encodable` types will maintain their encoded order. - public let alphabetizeKeyValuePairs: Bool - /// The `ArrayEncoding` to use. - public let arrayEncoding: ArrayEncoding - /// The `BoolEncoding` to use. - public let boolEncoding: BoolEncoding - /// THe `DataEncoding` to use. - public let dataEncoding: DataEncoding - /// The `DateEncoding` to use. - public let dateEncoding: DateEncoding - /// The `KeyEncoding` to use. - public let keyEncoding: KeyEncoding - /// The `KeyPathEncoding` to use. - public let keyPathEncoding: KeyPathEncoding - /// The `NilEncoding` to use. - public let nilEncoding: NilEncoding - /// The `SpaceEncoding` to use. - public let spaceEncoding: SpaceEncoding - /// The `CharacterSet` of allowed (non-escaped) characters. - public var allowedCharacters: CharacterSet - - /// Creates an instance from the supplied parameters. - /// - /// - Parameters: - /// - alphabetizeKeyValuePairs: Whether or not to sort the encoded key value pairs. `true` by default. - /// - arrayEncoding: The `ArrayEncoding` to use. `.brackets` by default. - /// - boolEncoding: The `BoolEncoding` to use. `.numeric` by default. - /// - dataEncoding: The `DataEncoding` to use. `.base64` by default. - /// - dateEncoding: The `DateEncoding` to use. `.deferredToDate` by default. - /// - keyEncoding: The `KeyEncoding` to use. `.useDefaultKeys` by default. - /// - nilEncoding: The `NilEncoding` to use. `.drop` by default. - /// - spaceEncoding: The `SpaceEncoding` to use. `.percentEscaped` by default. - /// - allowedCharacters: The `CharacterSet` of allowed (non-escaped) characters. `.afURLQueryAllowed` by - /// default. - public init(alphabetizeKeyValuePairs: Bool = true, - arrayEncoding: ArrayEncoding = .brackets, - boolEncoding: BoolEncoding = .numeric, - dataEncoding: DataEncoding = .base64, - dateEncoding: DateEncoding = .deferredToDate, - keyEncoding: KeyEncoding = .useDefaultKeys, - keyPathEncoding: KeyPathEncoding = .brackets, - nilEncoding: NilEncoding = .dropKey, - spaceEncoding: SpaceEncoding = .percentEscaped, - allowedCharacters: CharacterSet = .afURLQueryAllowed) { - self.alphabetizeKeyValuePairs = alphabetizeKeyValuePairs - self.arrayEncoding = arrayEncoding - self.boolEncoding = boolEncoding - self.dataEncoding = dataEncoding - self.dateEncoding = dateEncoding - self.keyEncoding = keyEncoding - self.keyPathEncoding = keyPathEncoding - self.nilEncoding = nilEncoding - self.spaceEncoding = spaceEncoding - self.allowedCharacters = allowedCharacters - } - - func encode(_ value: Encodable) throws -> URLEncodedFormComponent { - let context = URLEncodedFormContext(.object([])) - let encoder = _URLEncodedFormEncoder(context: context, - boolEncoding: boolEncoding, - dataEncoding: dataEncoding, - dateEncoding: dateEncoding, - nilEncoding: nilEncoding) - try value.encode(to: encoder) - - return context.component - } - - /// Encodes the `value` as a URL form encoded `String`. - /// - /// - Parameter value: The `Encodable` value.` - /// - /// - Returns: The encoded `String`. - /// - Throws: An `Error` or `EncodingError` instance if encoding fails. - public func encode(_ value: Encodable) throws -> String { - let component: URLEncodedFormComponent = try encode(value) - - guard case let .object(object) = component else { - throw Error.invalidRootObject("\(component)") - } - - let serializer = URLEncodedFormSerializer(alphabetizeKeyValuePairs: alphabetizeKeyValuePairs, - arrayEncoding: arrayEncoding, - keyEncoding: keyEncoding, - keyPathEncoding: keyPathEncoding, - spaceEncoding: spaceEncoding, - allowedCharacters: allowedCharacters) - let query = serializer.serialize(object) - - return query - } - - /// Encodes the value as `Data`. This is performed by first creating an encoded `String` and then returning the - /// `.utf8` data. - /// - /// - Parameter value: The `Encodable` value. - /// - /// - Returns: The encoded `Data`. - /// - /// - Throws: An `Error` or `EncodingError` instance if encoding fails. - public func encode(_ value: Encodable) throws -> Data { - let string: String = try encode(value) - - return Data(string.utf8) - } -} - -final class _URLEncodedFormEncoder { - var codingPath: [CodingKey] - // Returns an empty dictionary, as this encoder doesn't support userInfo. - var userInfo: [CodingUserInfoKey: Any] { [:] } - - let context: URLEncodedFormContext - - private let boolEncoding: URLEncodedFormEncoder.BoolEncoding - private let dataEncoding: URLEncodedFormEncoder.DataEncoding - private let dateEncoding: URLEncodedFormEncoder.DateEncoding - private let nilEncoding: URLEncodedFormEncoder.NilEncoding - - init(context: URLEncodedFormContext, - codingPath: [CodingKey] = [], - boolEncoding: URLEncodedFormEncoder.BoolEncoding, - dataEncoding: URLEncodedFormEncoder.DataEncoding, - dateEncoding: URLEncodedFormEncoder.DateEncoding, - nilEncoding: URLEncodedFormEncoder.NilEncoding) { - self.context = context - self.codingPath = codingPath - self.boolEncoding = boolEncoding - self.dataEncoding = dataEncoding - self.dateEncoding = dateEncoding - self.nilEncoding = nilEncoding - } -} - -extension _URLEncodedFormEncoder: Encoder { - func container(keyedBy type: Key.Type) -> KeyedEncodingContainer where Key: CodingKey { - let container = _URLEncodedFormEncoder.KeyedContainer(context: context, - codingPath: codingPath, - boolEncoding: boolEncoding, - dataEncoding: dataEncoding, - dateEncoding: dateEncoding, - nilEncoding: nilEncoding) - return KeyedEncodingContainer(container) - } - - func unkeyedContainer() -> UnkeyedEncodingContainer { - _URLEncodedFormEncoder.UnkeyedContainer(context: context, - codingPath: codingPath, - boolEncoding: boolEncoding, - dataEncoding: dataEncoding, - dateEncoding: dateEncoding, - nilEncoding: nilEncoding) - } - - func singleValueContainer() -> SingleValueEncodingContainer { - _URLEncodedFormEncoder.SingleValueContainer(context: context, - codingPath: codingPath, - boolEncoding: boolEncoding, - dataEncoding: dataEncoding, - dateEncoding: dateEncoding, - nilEncoding: nilEncoding) - } -} - -final class URLEncodedFormContext { - var component: URLEncodedFormComponent - - init(_ component: URLEncodedFormComponent) { - self.component = component - } -} - -enum URLEncodedFormComponent { - typealias Object = [(key: String, value: URLEncodedFormComponent)] - - case string(String) - case array([URLEncodedFormComponent]) - case object(Object) - - /// Converts self to an `[URLEncodedFormData]` or returns `nil` if not convertible. - var array: [URLEncodedFormComponent]? { - switch self { - case let .array(array): return array - default: return nil - } - } - - /// Converts self to an `Object` or returns `nil` if not convertible. - var object: Object? { - switch self { - case let .object(object): return object - default: return nil - } - } - - /// Sets self to the supplied value at a given path. - /// - /// data.set(to: "hello", at: ["path", "to", "value"]) - /// - /// - parameters: - /// - value: Value of `Self` to set at the supplied path. - /// - path: `CodingKey` path to update with the supplied value. - public mutating func set(to value: URLEncodedFormComponent, at path: [CodingKey]) { - set(&self, to: value, at: path) - } - - /// Recursive backing method to `set(to:at:)`. - private func set(_ context: inout URLEncodedFormComponent, to value: URLEncodedFormComponent, at path: [CodingKey]) { - guard !path.isEmpty else { - context = value - return - } - - let end = path[0] - var child: URLEncodedFormComponent - switch path.count { - case 1: - child = value - case 2...: - if let index = end.intValue { - let array = context.array ?? [] - if array.count > index { - child = array[index] - } else { - child = .array([]) - } - set(&child, to: value, at: Array(path[1...])) - } else { - child = context.object?.first { $0.key == end.stringValue }?.value ?? .object(.init()) - set(&child, to: value, at: Array(path[1...])) - } - default: fatalError("Unreachable") - } - - if let index = end.intValue { - if var array = context.array { - if array.count > index { - array[index] = child - } else { - array.append(child) - } - context = .array(array) - } else { - context = .array([child]) - } - } else { - if var object = context.object { - if let index = object.firstIndex(where: { $0.key == end.stringValue }) { - object[index] = (key: end.stringValue, value: child) - } else { - object.append((key: end.stringValue, value: child)) - } - context = .object(object) - } else { - context = .object([(key: end.stringValue, value: child)]) - } - } - } -} - -struct AnyCodingKey: CodingKey, Hashable { - let stringValue: String - let intValue: Int? - - init?(stringValue: String) { - self.stringValue = stringValue - intValue = nil - } - - init?(intValue: Int) { - stringValue = "\(intValue)" - self.intValue = intValue - } - - init(_ base: Key) where Key: CodingKey { - if let intValue = base.intValue { - self.init(intValue: intValue)! - } else { - self.init(stringValue: base.stringValue)! - } - } -} - -extension _URLEncodedFormEncoder { - final class KeyedContainer where Key: CodingKey { - var codingPath: [CodingKey] - - private let context: URLEncodedFormContext - private let boolEncoding: URLEncodedFormEncoder.BoolEncoding - private let dataEncoding: URLEncodedFormEncoder.DataEncoding - private let dateEncoding: URLEncodedFormEncoder.DateEncoding - private let nilEncoding: URLEncodedFormEncoder.NilEncoding - - init(context: URLEncodedFormContext, - codingPath: [CodingKey], - boolEncoding: URLEncodedFormEncoder.BoolEncoding, - dataEncoding: URLEncodedFormEncoder.DataEncoding, - dateEncoding: URLEncodedFormEncoder.DateEncoding, - nilEncoding: URLEncodedFormEncoder.NilEncoding) { - self.context = context - self.codingPath = codingPath - self.boolEncoding = boolEncoding - self.dataEncoding = dataEncoding - self.dateEncoding = dateEncoding - self.nilEncoding = nilEncoding - } - - private func nestedCodingPath(for key: CodingKey) -> [CodingKey] { - codingPath + [key] - } - } -} - -extension _URLEncodedFormEncoder.KeyedContainer: KeyedEncodingContainerProtocol { - func encodeNil(forKey key: Key) throws { - guard let nilValue = nilEncoding.encodeNil() else { return } - - try encode(nilValue, forKey: key) - } - - func encodeIfPresent(_ value: Bool?, forKey key: Key) throws { - try _encodeIfPresent(value, forKey: key) - } - - func encodeIfPresent(_ value: String?, forKey key: Key) throws { - try _encodeIfPresent(value, forKey: key) - } - - func encodeIfPresent(_ value: Double?, forKey key: Key) throws { - try _encodeIfPresent(value, forKey: key) - } - - func encodeIfPresent(_ value: Float?, forKey key: Key) throws { - try _encodeIfPresent(value, forKey: key) - } - - func encodeIfPresent(_ value: Int?, forKey key: Key) throws { - try _encodeIfPresent(value, forKey: key) - } - - func encodeIfPresent(_ value: Int8?, forKey key: Key) throws { - try _encodeIfPresent(value, forKey: key) - } - - func encodeIfPresent(_ value: Int16?, forKey key: Key) throws { - try _encodeIfPresent(value, forKey: key) - } - - func encodeIfPresent(_ value: Int32?, forKey key: Key) throws { - try _encodeIfPresent(value, forKey: key) - } - - func encodeIfPresent(_ value: Int64?, forKey key: Key) throws { - try _encodeIfPresent(value, forKey: key) - } - - func encodeIfPresent(_ value: UInt?, forKey key: Key) throws { - try _encodeIfPresent(value, forKey: key) - } - - func encodeIfPresent(_ value: UInt8?, forKey key: Key) throws { - try _encodeIfPresent(value, forKey: key) - } - - func encodeIfPresent(_ value: UInt16?, forKey key: Key) throws { - try _encodeIfPresent(value, forKey: key) - } - - func encodeIfPresent(_ value: UInt32?, forKey key: Key) throws { - try _encodeIfPresent(value, forKey: key) - } - - func encodeIfPresent(_ value: UInt64?, forKey key: Key) throws { - try _encodeIfPresent(value, forKey: key) - } - - func encodeIfPresent(_ value: Value?, forKey key: Key) throws where Value: Encodable { - try _encodeIfPresent(value, forKey: key) - } - - func _encodeIfPresent(_ value: Value?, forKey key: Key) throws where Value: Encodable { - if let value = value { - try encode(value, forKey: key) - } else { - try encodeNil(forKey: key) - } - } - - func encode(_ value: T, forKey key: Key) throws where T: Encodable { - var container = nestedSingleValueEncoder(for: key) - try container.encode(value) - } - - func nestedSingleValueEncoder(for key: Key) -> SingleValueEncodingContainer { - let container = _URLEncodedFormEncoder.SingleValueContainer(context: context, - codingPath: nestedCodingPath(for: key), - boolEncoding: boolEncoding, - dataEncoding: dataEncoding, - dateEncoding: dateEncoding, - nilEncoding: nilEncoding) - - return container - } - - func nestedUnkeyedContainer(forKey key: Key) -> UnkeyedEncodingContainer { - let container = _URLEncodedFormEncoder.UnkeyedContainer(context: context, - codingPath: nestedCodingPath(for: key), - boolEncoding: boolEncoding, - dataEncoding: dataEncoding, - dateEncoding: dateEncoding, - nilEncoding: nilEncoding) - - return container - } - - func nestedContainer(keyedBy keyType: NestedKey.Type, forKey key: Key) -> KeyedEncodingContainer where NestedKey: CodingKey { - let container = _URLEncodedFormEncoder.KeyedContainer(context: context, - codingPath: nestedCodingPath(for: key), - boolEncoding: boolEncoding, - dataEncoding: dataEncoding, - dateEncoding: dateEncoding, - nilEncoding: nilEncoding) - - return KeyedEncodingContainer(container) - } - - func superEncoder() -> Encoder { - _URLEncodedFormEncoder(context: context, - codingPath: codingPath, - boolEncoding: boolEncoding, - dataEncoding: dataEncoding, - dateEncoding: dateEncoding, - nilEncoding: nilEncoding) - } - - func superEncoder(forKey key: Key) -> Encoder { - _URLEncodedFormEncoder(context: context, - codingPath: nestedCodingPath(for: key), - boolEncoding: boolEncoding, - dataEncoding: dataEncoding, - dateEncoding: dateEncoding, - nilEncoding: nilEncoding) - } -} - -extension _URLEncodedFormEncoder { - final class SingleValueContainer { - var codingPath: [CodingKey] - - private var canEncodeNewValue = true - - private let context: URLEncodedFormContext - private let boolEncoding: URLEncodedFormEncoder.BoolEncoding - private let dataEncoding: URLEncodedFormEncoder.DataEncoding - private let dateEncoding: URLEncodedFormEncoder.DateEncoding - private let nilEncoding: URLEncodedFormEncoder.NilEncoding - - init(context: URLEncodedFormContext, - codingPath: [CodingKey], - boolEncoding: URLEncodedFormEncoder.BoolEncoding, - dataEncoding: URLEncodedFormEncoder.DataEncoding, - dateEncoding: URLEncodedFormEncoder.DateEncoding, - nilEncoding: URLEncodedFormEncoder.NilEncoding) { - self.context = context - self.codingPath = codingPath - self.boolEncoding = boolEncoding - self.dataEncoding = dataEncoding - self.dateEncoding = dateEncoding - self.nilEncoding = nilEncoding - } - - private func checkCanEncode(value: Any?) throws { - guard canEncodeNewValue else { - let context = EncodingError.Context(codingPath: codingPath, - debugDescription: "Attempt to encode value through single value container when previously value already encoded.") - throw EncodingError.invalidValue(value as Any, context) - } - } - } -} - -extension _URLEncodedFormEncoder.SingleValueContainer: SingleValueEncodingContainer { - func encodeNil() throws { - guard let nilValue = nilEncoding.encodeNil() else { return } - - try encode(nilValue) - } - - func encode(_ value: Bool) throws { - try encode(value, as: String(boolEncoding.encode(value))) - } - - func encode(_ value: String) throws { - try encode(value, as: value) - } - - func encode(_ value: Double) throws { - try encode(value, as: String(value)) - } - - func encode(_ value: Float) throws { - try encode(value, as: String(value)) - } - - func encode(_ value: Int) throws { - try encode(value, as: String(value)) - } - - func encode(_ value: Int8) throws { - try encode(value, as: String(value)) - } - - func encode(_ value: Int16) throws { - try encode(value, as: String(value)) - } - - func encode(_ value: Int32) throws { - try encode(value, as: String(value)) - } - - func encode(_ value: Int64) throws { - try encode(value, as: String(value)) - } - - func encode(_ value: UInt) throws { - try encode(value, as: String(value)) - } - - func encode(_ value: UInt8) throws { - try encode(value, as: String(value)) - } - - func encode(_ value: UInt16) throws { - try encode(value, as: String(value)) - } - - func encode(_ value: UInt32) throws { - try encode(value, as: String(value)) - } - - func encode(_ value: UInt64) throws { - try encode(value, as: String(value)) - } - - private func encode(_ value: T, as string: String) throws where T: Encodable { - try checkCanEncode(value: value) - defer { canEncodeNewValue = false } - - context.component.set(to: .string(string), at: codingPath) - } - - func encode(_ value: T) throws where T: Encodable { - switch value { - case let date as Date: - guard let string = try dateEncoding.encode(date) else { - try attemptToEncode(value) - return - } - - try encode(value, as: string) - case let data as Data: - guard let string = try dataEncoding.encode(data) else { - try attemptToEncode(value) - return - } - - try encode(value, as: string) - case let decimal as Decimal: - // Decimal's `Encodable` implementation returns an object, not a single value, so override it. - try encode(value, as: String(describing: decimal)) - default: - try attemptToEncode(value) - } - } - - private func attemptToEncode(_ value: T) throws where T: Encodable { - try checkCanEncode(value: value) - defer { canEncodeNewValue = false } - - let encoder = _URLEncodedFormEncoder(context: context, - codingPath: codingPath, - boolEncoding: boolEncoding, - dataEncoding: dataEncoding, - dateEncoding: dateEncoding, - nilEncoding: nilEncoding) - try value.encode(to: encoder) - } -} - -extension _URLEncodedFormEncoder { - final class UnkeyedContainer { - var codingPath: [CodingKey] - - var count = 0 - var nestedCodingPath: [CodingKey] { - codingPath + [AnyCodingKey(intValue: count)!] - } - - private let context: URLEncodedFormContext - private let boolEncoding: URLEncodedFormEncoder.BoolEncoding - private let dataEncoding: URLEncodedFormEncoder.DataEncoding - private let dateEncoding: URLEncodedFormEncoder.DateEncoding - private let nilEncoding: URLEncodedFormEncoder.NilEncoding - - init(context: URLEncodedFormContext, - codingPath: [CodingKey], - boolEncoding: URLEncodedFormEncoder.BoolEncoding, - dataEncoding: URLEncodedFormEncoder.DataEncoding, - dateEncoding: URLEncodedFormEncoder.DateEncoding, - nilEncoding: URLEncodedFormEncoder.NilEncoding) { - self.context = context - self.codingPath = codingPath - self.boolEncoding = boolEncoding - self.dataEncoding = dataEncoding - self.dateEncoding = dateEncoding - self.nilEncoding = nilEncoding - } - } -} - -extension _URLEncodedFormEncoder.UnkeyedContainer: UnkeyedEncodingContainer { - func encodeNil() throws { - guard let nilValue = nilEncoding.encodeNil() else { return } - - try encode(nilValue) - } - - func encode(_ value: T) throws where T: Encodable { - var container = nestedSingleValueContainer() - try container.encode(value) - } - - func nestedSingleValueContainer() -> SingleValueEncodingContainer { - defer { count += 1 } - - return _URLEncodedFormEncoder.SingleValueContainer(context: context, - codingPath: nestedCodingPath, - boolEncoding: boolEncoding, - dataEncoding: dataEncoding, - dateEncoding: dateEncoding, - nilEncoding: nilEncoding) - } - - func nestedContainer(keyedBy keyType: NestedKey.Type) -> KeyedEncodingContainer where NestedKey: CodingKey { - defer { count += 1 } - let container = _URLEncodedFormEncoder.KeyedContainer(context: context, - codingPath: nestedCodingPath, - boolEncoding: boolEncoding, - dataEncoding: dataEncoding, - dateEncoding: dateEncoding, - nilEncoding: nilEncoding) - - return KeyedEncodingContainer(container) - } - - func nestedUnkeyedContainer() -> UnkeyedEncodingContainer { - defer { count += 1 } - - return _URLEncodedFormEncoder.UnkeyedContainer(context: context, - codingPath: nestedCodingPath, - boolEncoding: boolEncoding, - dataEncoding: dataEncoding, - dateEncoding: dateEncoding, - nilEncoding: nilEncoding) - } - - func superEncoder() -> Encoder { - defer { count += 1 } - - return _URLEncodedFormEncoder(context: context, - codingPath: codingPath, - boolEncoding: boolEncoding, - dataEncoding: dataEncoding, - dateEncoding: dateEncoding, - nilEncoding: nilEncoding) - } -} - -final class URLEncodedFormSerializer { - private let alphabetizeKeyValuePairs: Bool - private let arrayEncoding: URLEncodedFormEncoder.ArrayEncoding - private let keyEncoding: URLEncodedFormEncoder.KeyEncoding - private let keyPathEncoding: URLEncodedFormEncoder.KeyPathEncoding - private let spaceEncoding: URLEncodedFormEncoder.SpaceEncoding - private let allowedCharacters: CharacterSet - - init(alphabetizeKeyValuePairs: Bool, - arrayEncoding: URLEncodedFormEncoder.ArrayEncoding, - keyEncoding: URLEncodedFormEncoder.KeyEncoding, - keyPathEncoding: URLEncodedFormEncoder.KeyPathEncoding, - spaceEncoding: URLEncodedFormEncoder.SpaceEncoding, - allowedCharacters: CharacterSet) { - self.alphabetizeKeyValuePairs = alphabetizeKeyValuePairs - self.arrayEncoding = arrayEncoding - self.keyEncoding = keyEncoding - self.keyPathEncoding = keyPathEncoding - self.spaceEncoding = spaceEncoding - self.allowedCharacters = allowedCharacters - } - - func serialize(_ object: URLEncodedFormComponent.Object) -> String { - var output: [String] = [] - for (key, component) in object { - let value = serialize(component, forKey: key) - output.append(value) - } - output = alphabetizeKeyValuePairs ? output.sorted() : output - - return output.joinedWithAmpersands() - } - - func serialize(_ component: URLEncodedFormComponent, forKey key: String) -> String { - switch component { - case let .string(string): return "\(escape(keyEncoding.encode(key)))=\(escape(string))" - case let .array(array): return serialize(array, forKey: key) - case let .object(object): return serialize(object, forKey: key) - } - } - - func serialize(_ object: URLEncodedFormComponent.Object, forKey key: String) -> String { - var segments: [String] = object.map { subKey, value in - let keyPath = keyPathEncoding.encodeKeyPath(subKey) - return serialize(value, forKey: key + keyPath) - } - segments = alphabetizeKeyValuePairs ? segments.sorted() : segments - - return segments.joinedWithAmpersands() - } - - func serialize(_ array: [URLEncodedFormComponent], forKey key: String) -> String { - var segments: [String] = array.enumerated().map { index, component in - let keyPath = arrayEncoding.encode(key, atIndex: index) - return serialize(component, forKey: keyPath) - } - segments = alphabetizeKeyValuePairs ? segments.sorted() : segments - - return segments.joinedWithAmpersands() - } - - func escape(_ query: String) -> String { - var allowedCharactersWithSpace = allowedCharacters - allowedCharactersWithSpace.insert(charactersIn: " ") - let escapedQuery = query.addingPercentEncoding(withAllowedCharacters: allowedCharactersWithSpace) ?? query - let spaceEncodedQuery = spaceEncoding.encode(escapedQuery) - - return spaceEncodedQuery - } -} - -extension Array where Element == String { - func joinedWithAmpersands() -> String { - joined(separator: "&") - } -} - -extension CharacterSet { - /// Creates a CharacterSet from RFC 3986 allowed characters. - /// - /// RFC 3986 states that the following characters are "reserved" characters. - /// - /// - General Delimiters: ":", "#", "[", "]", "@", "?", "/" - /// - Sub-Delimiters: "!", "$", "&", "'", "(", ")", "*", "+", ",", ";", "=" - /// - /// In RFC 3986 - Section 3.4, it states that the "?" and "/" characters should not be escaped to allow - /// query strings to include a URL. Therefore, all "reserved" characters with the exception of "?" and "/" - /// should be percent-escaped in the query string. - public static let afURLQueryAllowed: CharacterSet = { - let generalDelimitersToEncode = ":#[]@" // does not include "?" or "/" due to RFC 3986 - Section 3.4 - let subDelimitersToEncode = "!$&'()*+,;=" - let encodableDelimiters = CharacterSet(charactersIn: "\(generalDelimitersToEncode)\(subDelimitersToEncode)") - - return CharacterSet.urlQueryAllowed.subtracting(encodableDelimiters) - }() -} diff --git a/Pods/Alamofire/Source/URLRequest+Alamofire.swift b/Pods/Alamofire/Source/URLRequest+Alamofire.swift deleted file mode 100644 index ab72fb5..0000000 --- a/Pods/Alamofire/Source/URLRequest+Alamofire.swift +++ /dev/null @@ -1,39 +0,0 @@ -// -// URLRequest+Alamofire.swift -// -// Copyright (c) 2019 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -extension URLRequest { - /// Returns the `httpMethod` as Alamofire's `HTTPMethod` type. - public var method: HTTPMethod? { - get { httpMethod.map(HTTPMethod.init) } - set { httpMethod = newValue?.rawValue } - } - - public func validate() throws { - if method == .get, let bodyData = httpBody { - throw AFError.urlRequestValidationFailed(reason: .bodyDataInGETRequest(bodyData)) - } - } -} diff --git a/Pods/Alamofire/Source/URLSessionConfiguration+Alamofire.swift b/Pods/Alamofire/Source/URLSessionConfiguration+Alamofire.swift deleted file mode 100644 index 292a8fe..0000000 --- a/Pods/Alamofire/Source/URLSessionConfiguration+Alamofire.swift +++ /dev/null @@ -1,46 +0,0 @@ -// -// URLSessionConfiguration+Alamofire.swift -// -// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -extension URLSessionConfiguration: AlamofireExtended {} -extension AlamofireExtension where ExtendedType: URLSessionConfiguration { - /// Alamofire's default configuration. Same as `URLSessionConfiguration.default` but adds Alamofire default - /// `Accept-Language`, `Accept-Encoding`, and `User-Agent` headers. - public static var `default`: URLSessionConfiguration { - let configuration = URLSessionConfiguration.default - configuration.headers = .default - - return configuration - } - - /// `.ephemeral` configuration with Alamofire's default `Accept-Language`, `Accept-Encoding`, and `User-Agent` - /// headers. - public static var ephemeral: URLSessionConfiguration { - let configuration = URLSessionConfiguration.ephemeral - configuration.headers = .default - - return configuration - } -} diff --git a/Pods/Alamofire/Source/Validation.swift b/Pods/Alamofire/Source/Validation.swift deleted file mode 100644 index 2cf23fb..0000000 --- a/Pods/Alamofire/Source/Validation.swift +++ /dev/null @@ -1,302 +0,0 @@ -// -// Validation.swift -// -// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) -// -// 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 - -extension Request { - // MARK: Helper Types - - fileprivate typealias ErrorReason = AFError.ResponseValidationFailureReason - - /// Used to represent whether a validation succeeded or failed. - public typealias ValidationResult = Result - - fileprivate struct MIMEType { - let type: String - let subtype: String - - var isWildcard: Bool { type == "*" && subtype == "*" } - - init?(_ string: String) { - let components: [String] = { - let stripped = string.trimmingCharacters(in: .whitespacesAndNewlines) - let split = stripped[..<(stripped.range(of: ";")?.lowerBound ?? stripped.endIndex)] - - return split.components(separatedBy: "/") - }() - - if let type = components.first, let subtype = components.last { - self.type = type - self.subtype = subtype - } else { - return nil - } - } - - func matches(_ mime: MIMEType) -> Bool { - switch (type, subtype) { - case (mime.type, mime.subtype), (mime.type, "*"), ("*", mime.subtype), ("*", "*"): - return true - default: - return false - } - } - } - - // MARK: Properties - - fileprivate var acceptableStatusCodes: Range { 200..<300 } - - fileprivate var acceptableContentTypes: [String] { - if let accept = request?.value(forHTTPHeaderField: "Accept") { - return accept.components(separatedBy: ",") - } - - return ["*/*"] - } - - // MARK: Status Code - - fileprivate func validate(statusCode acceptableStatusCodes: S, - response: HTTPURLResponse) - -> ValidationResult - where S.Iterator.Element == Int { - if acceptableStatusCodes.contains(response.statusCode) { - return .success(()) - } else { - let reason: ErrorReason = .unacceptableStatusCode(code: response.statusCode) - return .failure(AFError.responseValidationFailed(reason: reason)) - } - } - - // MARK: Content Type - - fileprivate func validate(contentType acceptableContentTypes: S, - response: HTTPURLResponse, - data: Data?) - -> ValidationResult - where S.Iterator.Element == String { - guard let data = data, !data.isEmpty else { return .success(()) } - - return validate(contentType: acceptableContentTypes, response: response) - } - - fileprivate func validate(contentType acceptableContentTypes: S, - response: HTTPURLResponse) - -> ValidationResult - where S.Iterator.Element == String { - guard - let responseContentType = response.mimeType, - let responseMIMEType = MIMEType(responseContentType) - else { - for contentType in acceptableContentTypes { - if let mimeType = MIMEType(contentType), mimeType.isWildcard { - return .success(()) - } - } - - let error: AFError = { - let reason: ErrorReason = .missingContentType(acceptableContentTypes: acceptableContentTypes.sorted()) - return AFError.responseValidationFailed(reason: reason) - }() - - return .failure(error) - } - - for contentType in acceptableContentTypes { - if let acceptableMIMEType = MIMEType(contentType), acceptableMIMEType.matches(responseMIMEType) { - return .success(()) - } - } - - let error: AFError = { - let reason: ErrorReason = .unacceptableContentType(acceptableContentTypes: acceptableContentTypes.sorted(), - responseContentType: responseContentType) - - return AFError.responseValidationFailed(reason: reason) - }() - - return .failure(error) - } -} - -// MARK: - - -extension DataRequest { - /// A closure used to validate a request that takes a URL request, a URL response and data, and returns whether the - /// request was valid. - public typealias Validation = (URLRequest?, HTTPURLResponse, Data?) -> ValidationResult - - /// Validates that the response has a status code in the specified sequence. - /// - /// If validation fails, subsequent calls to response handlers will have an associated error. - /// - /// - Parameter acceptableStatusCodes: `Sequence` of acceptable response status codes. - /// - /// - Returns: The instance. - @discardableResult - public func validate(statusCode acceptableStatusCodes: S) -> Self where S.Iterator.Element == Int { - validate { [unowned self] _, response, _ in - self.validate(statusCode: acceptableStatusCodes, response: response) - } - } - - /// Validates that the response has a content type in the specified sequence. - /// - /// If validation fails, subsequent calls to response handlers will have an associated error. - /// - /// - parameter contentType: The acceptable content types, which may specify wildcard types and/or subtypes. - /// - /// - returns: The request. - @discardableResult - public func validate(contentType acceptableContentTypes: @escaping @autoclosure () -> S) -> Self where S.Iterator.Element == String { - validate { [unowned self] _, response, data in - self.validate(contentType: acceptableContentTypes(), response: response, data: data) - } - } - - /// Validates that the response has a status code in the default acceptable range of 200...299, and that the content - /// type matches any specified in the Accept HTTP header field. - /// - /// If validation fails, subsequent calls to response handlers will have an associated error. - /// - /// - returns: The request. - @discardableResult - public func validate() -> Self { - let contentTypes: () -> [String] = { [unowned self] in - acceptableContentTypes - } - return validate(statusCode: acceptableStatusCodes).validate(contentType: contentTypes()) - } -} - -extension DataStreamRequest { - /// A closure used to validate a request that takes a `URLRequest` and `HTTPURLResponse` and returns whether the - /// request was valid. - public typealias Validation = (_ request: URLRequest?, _ response: HTTPURLResponse) -> ValidationResult - - /// Validates that the response has a status code in the specified sequence. - /// - /// If validation fails, subsequent calls to response handlers will have an associated error. - /// - /// - Parameter acceptableStatusCodes: `Sequence` of acceptable response status codes. - /// - /// - Returns: The instance. - @discardableResult - public func validate(statusCode acceptableStatusCodes: S) -> Self where S.Iterator.Element == Int { - validate { [unowned self] _, response in - self.validate(statusCode: acceptableStatusCodes, response: response) - } - } - - /// Validates that the response has a content type in the specified sequence. - /// - /// If validation fails, subsequent calls to response handlers will have an associated error. - /// - /// - parameter contentType: The acceptable content types, which may specify wildcard types and/or subtypes. - /// - /// - returns: The request. - @discardableResult - public func validate(contentType acceptableContentTypes: @escaping @autoclosure () -> S) -> Self where S.Iterator.Element == String { - validate { [unowned self] _, response in - self.validate(contentType: acceptableContentTypes(), response: response) - } - } - - /// Validates that the response has a status code in the default acceptable range of 200...299, and that the content - /// type matches any specified in the Accept HTTP header field. - /// - /// If validation fails, subsequent calls to response handlers will have an associated error. - /// - /// - Returns: The instance. - @discardableResult - public func validate() -> Self { - let contentTypes: () -> [String] = { [unowned self] in - acceptableContentTypes - } - return validate(statusCode: acceptableStatusCodes).validate(contentType: contentTypes()) - } -} - -// MARK: - - -extension DownloadRequest { - /// A closure used to validate a request that takes a URL request, a URL response, a temporary URL and a - /// destination URL, and returns whether the request was valid. - public typealias Validation = (_ request: URLRequest?, - _ response: HTTPURLResponse, - _ fileURL: URL?) - -> ValidationResult - - /// Validates that the response has a status code in the specified sequence. - /// - /// If validation fails, subsequent calls to response handlers will have an associated error. - /// - /// - Parameter acceptableStatusCodes: `Sequence` of acceptable response status codes. - /// - /// - Returns: The instance. - @discardableResult - public func validate(statusCode acceptableStatusCodes: S) -> Self where S.Iterator.Element == Int { - validate { [unowned self] _, response, _ in - self.validate(statusCode: acceptableStatusCodes, response: response) - } - } - - /// Validates that the response has a content type in the specified sequence. - /// - /// If validation fails, subsequent calls to response handlers will have an associated error. - /// - /// - parameter contentType: The acceptable content types, which may specify wildcard types and/or subtypes. - /// - /// - returns: The request. - @discardableResult - public func validate(contentType acceptableContentTypes: @escaping @autoclosure () -> S) -> Self where S.Iterator.Element == String { - validate { [unowned self] _, response, fileURL in - guard let validFileURL = fileURL else { - return .failure(AFError.responseValidationFailed(reason: .dataFileNil)) - } - - do { - let data = try Data(contentsOf: validFileURL) - return self.validate(contentType: acceptableContentTypes(), response: response, data: data) - } catch { - return .failure(AFError.responseValidationFailed(reason: .dataFileReadFailed(at: validFileURL))) - } - } - } - - /// Validates that the response has a status code in the default acceptable range of 200...299, and that the content - /// type matches any specified in the Accept HTTP header field. - /// - /// If validation fails, subsequent calls to response handlers will have an associated error. - /// - /// - returns: The request. - @discardableResult - public func validate() -> Self { - let contentTypes = { [unowned self] in - acceptableContentTypes - } - return validate(statusCode: acceptableStatusCodes).validate(contentType: contentTypes()) - } -} diff --git a/Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressModel.h b/Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressModel.h deleted file mode 100755 index f1b9a1b..0000000 --- a/Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressModel.h +++ /dev/null @@ -1,51 +0,0 @@ -// -// BRAddressModel.h -// BRPickerViewDemo -// -// Created by renbo on 2017/8/11. -// Copyright © 2017 irenb. All rights reserved. -// -// 最新代码下载地址:https://github.com/91renb/BRPickerView - -#import - -NS_ASSUME_NONNULL_BEGIN - -/// 省 -@interface BRProvinceModel : NSObject -/** 省对应的code或id */ -@property (nullable, nonatomic, copy) NSString *code; -/** 省的名称 */ -@property (nullable, nonatomic, copy) NSString *name; -/** 省的索引 */ -@property (nonatomic, assign) NSInteger index; -/** 城市数组 */ -@property (nullable, nonatomic, copy) NSArray *citylist; - -@end - -/// 市 -@interface BRCityModel : NSObject -/** 市对应的code或id */ -@property (nullable, nonatomic, copy) NSString *code; -/** 市的名称 */ -@property (nullable, nonatomic, copy) NSString *name; -/** 市的索引 */ -@property (nonatomic, assign) NSInteger index; -/** 地区数组 */ -@property (nullable, nonatomic, copy) NSArray *arealist; - -@end - -/// 区 -@interface BRAreaModel : NSObject -/** 区对应的code或id */ -@property (nullable, nonatomic, copy) NSString *code; -/** 区的名称 */ -@property (nullable, nonatomic, copy) NSString *name; -/** 区的索引 */ -@property (nonatomic, assign) NSInteger index; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressModel.m b/Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressModel.m deleted file mode 100755 index b84bc2c..0000000 --- a/Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressModel.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// BRAddressModel.m -// BRPickerViewDemo -// -// Created by renbo on 2017/8/11. -// Copyright © 2017 irenb. All rights reserved. -// -// 最新代码下载地址:https://github.com/91renb/BRPickerView - -#import "BRAddressModel.h" - -@implementation BRProvinceModel - -@end - - -@implementation BRCityModel - -@end - - -@implementation BRAreaModel - -@end diff --git a/Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressPickerView.bundle/BRCity.json b/Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressPickerView.bundle/BRCity.json deleted file mode 100755 index d67fc79..0000000 --- a/Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressPickerView.bundle/BRCity.json +++ /dev/null @@ -1,13634 +0,0 @@ -[ - { - "code": "110000", - "name": "北京市", - "cityList": [ - { - "code": "110000", - "name": "北京市", - "areaList": [ - { - "code": "110101", - "name": "东城区" - }, - { - "code": "110102", - "name": "西城区" - }, - { - "code": "110105", - "name": "朝阳区" - }, - { - "code": "110106", - "name": "丰台区" - }, - { - "code": "110107", - "name": "石景山区" - }, - { - "code": "110108", - "name": "海淀区" - }, - { - "code": "110109", - "name": "门头沟区" - }, - { - "code": "110111", - "name": "房山区" - }, - { - "code": "110112", - "name": "通州区" - }, - { - "code": "110113", - "name": "顺义区" - }, - { - "code": "110114", - "name": "昌平区" - }, - { - "code": "110115", - "name": "大兴区" - }, - { - "code": "110116", - "name": "怀柔区" - }, - { - "code": "110117", - "name": "平谷区" - }, - { - "code": "110118", - "name": "密云区" - }, - { - "code": "110119", - "name": "延庆区" - } - ] - } - ] - }, - { - "code": "120000", - "name": "天津市", - "cityList": [ - { - "code": "120000", - "name": "天津市", - "areaList": [ - { - "code": "120101", - "name": "和平区" - }, - { - "code": "120102", - "name": "河东区" - }, - { - "code": "120103", - "name": "河西区" - }, - { - "code": "120104", - "name": "南开区" - }, - { - "code": "120105", - "name": "河北区" - }, - { - "code": "120106", - "name": "红桥区" - }, - { - "code": "120110", - "name": "东丽区" - }, - { - "code": "120111", - "name": "西青区" - }, - { - "code": "120112", - "name": "津南区" - }, - { - "code": "120113", - "name": "北辰区" - }, - { - "code": "120114", - "name": "武清区" - }, - { - "code": "120115", - "name": "宝坻区" - }, - { - "code": "120116", - "name": "滨海新区" - }, - { - "code": "120117", - "name": "宁河区" - }, - { - "code": "120118", - "name": "静海区" - }, - { - "code": "120119", - "name": "蓟州区" - } - ] - } - ] - }, - { - "code": "130000", - "name": "河北省", - "cityList": [ - { - "code": "130100", - "name": "石家庄市", - "areaList": [ - { - "code": "130102", - "name": "长安区" - }, - { - "code": "130104", - "name": "桥西区" - }, - { - "code": "130105", - "name": "新华区" - }, - { - "code": "130107", - "name": "井陉矿区" - }, - { - "code": "130108", - "name": "裕华区" - }, - { - "code": "130109", - "name": "藁城区" - }, - { - "code": "130110", - "name": "鹿泉区" - }, - { - "code": "130111", - "name": "栾城区" - }, - { - "code": "130121", - "name": "井陉县" - }, - { - "code": "130123", - "name": "正定县" - }, - { - "code": "130125", - "name": "行唐县" - }, - { - "code": "130126", - "name": "灵寿县" - }, - { - "code": "130127", - "name": "高邑县" - }, - { - "code": "130128", - "name": "深泽县" - }, - { - "code": "130129", - "name": "赞皇县" - }, - { - "code": "130130", - "name": "无极县" - }, - { - "code": "130131", - "name": "平山县" - }, - { - "code": "130132", - "name": "元氏县" - }, - { - "code": "130133", - "name": "赵县" - }, - { - "code": "130181", - "name": "辛集市" - }, - { - "code": "130183", - "name": "晋州市" - }, - { - "code": "130184", - "name": "新乐市" - } - ] - }, - { - "code": "130200", - "name": "唐山市", - "areaList": [ - { - "code": "130202", - "name": "路南区" - }, - { - "code": "130203", - "name": "路北区" - }, - { - "code": "130204", - "name": "古冶区" - }, - { - "code": "130205", - "name": "开平区" - }, - { - "code": "130207", - "name": "丰南区" - }, - { - "code": "130208", - "name": "丰润区" - }, - { - "code": "130209", - "name": "曹妃甸区" - }, - { - "code": "130224", - "name": "滦南县" - }, - { - "code": "130225", - "name": "乐亭县" - }, - { - "code": "130227", - "name": "迁西县" - }, - { - "code": "130229", - "name": "玉田县" - }, - { - "code": "130281", - "name": "遵化市" - }, - { - "code": "130283", - "name": "迁安市" - }, - { - "code": "130284", - "name": "滦州市" - } - ] - }, - { - "code": "130300", - "name": "秦皇岛市", - "areaList": [ - { - "code": "130302", - "name": "海港区" - }, - { - "code": "130303", - "name": "山海关区" - }, - { - "code": "130304", - "name": "北戴河区" - }, - { - "code": "130306", - "name": "抚宁区" - }, - { - "code": "130321", - "name": "青龙满族自治县" - }, - { - "code": "130322", - "name": "昌黎县" - }, - { - "code": "130324", - "name": "卢龙县" - } - ] - }, - { - "code": "130400", - "name": "邯郸市", - "areaList": [ - { - "code": "130402", - "name": "邯山区" - }, - { - "code": "130403", - "name": "丛台区" - }, - { - "code": "130404", - "name": "复兴区" - }, - { - "code": "130406", - "name": "峰峰矿区" - }, - { - "code": "130407", - "name": "肥乡区" - }, - { - "code": "130408", - "name": "永年区" - }, - { - "code": "130423", - "name": "临漳县" - }, - { - "code": "130424", - "name": "成安县" - }, - { - "code": "130425", - "name": "大名县" - }, - { - "code": "130426", - "name": "涉县" - }, - { - "code": "130427", - "name": "磁县" - }, - { - "code": "130430", - "name": "邱县" - }, - { - "code": "130431", - "name": "鸡泽县" - }, - { - "code": "130432", - "name": "广平县" - }, - { - "code": "130433", - "name": "馆陶县" - }, - { - "code": "130434", - "name": "魏县" - }, - { - "code": "130435", - "name": "曲周县" - }, - { - "code": "130481", - "name": "武安市" - } - ] - }, - { - "code": "130500", - "name": "邢台市", - "areaList": [ - { - "code": "130502", - "name": "桥东区" - }, - { - "code": "130503", - "name": "桥西区" - }, - { - "code": "130521", - "name": "邢台县" - }, - { - "code": "130522", - "name": "临城县" - }, - { - "code": "130523", - "name": "内丘县" - }, - { - "code": "130524", - "name": "柏乡县" - }, - { - "code": "130525", - "name": "隆尧县" - }, - { - "code": "130526", - "name": "任县" - }, - { - "code": "130527", - "name": "南和县" - }, - { - "code": "130528", - "name": "宁晋县" - }, - { - "code": "130529", - "name": "巨鹿县" - }, - { - "code": "130530", - "name": "新河县" - }, - { - "code": "130531", - "name": "广宗县" - }, - { - "code": "130532", - "name": "平乡县" - }, - { - "code": "130533", - "name": "威县" - }, - { - "code": "130534", - "name": "清河县" - }, - { - "code": "130535", - "name": "临西县" - }, - { - "code": "130581", - "name": "南宫市" - }, - { - "code": "130582", - "name": "沙河市" - } - ] - }, - { - "code": "130600", - "name": "保定市", - "areaList": [ - { - "code": "130602", - "name": "竞秀区" - }, - { - "code": "130606", - "name": "莲池区" - }, - { - "code": "130607", - "name": "满城区" - }, - { - "code": "130608", - "name": "清苑区" - }, - { - "code": "130609", - "name": "徐水区" - }, - { - "code": "130623", - "name": "涞水县" - }, - { - "code": "130624", - "name": "阜平县" - }, - { - "code": "130626", - "name": "定兴县" - }, - { - "code": "130627", - "name": "唐县" - }, - { - "code": "130628", - "name": "高阳县" - }, - { - "code": "130629", - "name": "容城县" - }, - { - "code": "130630", - "name": "涞源县" - }, - { - "code": "130631", - "name": "望都县" - }, - { - "code": "130632", - "name": "安新县" - }, - { - "code": "130633", - "name": "易县" - }, - { - "code": "130634", - "name": "曲阳县" - }, - { - "code": "130635", - "name": "蠡县" - }, - { - "code": "130636", - "name": "顺平县" - }, - { - "code": "130637", - "name": "博野县" - }, - { - "code": "130638", - "name": "雄县" - }, - { - "code": "130681", - "name": "涿州市" - }, - { - "code": "130682", - "name": "定州市" - }, - { - "code": "130683", - "name": "安国市" - }, - { - "code": "130684", - "name": "高碑店市" - } - ] - }, - { - "code": "130700", - "name": "张家口市", - "areaList": [ - { - "code": "130702", - "name": "桥东区" - }, - { - "code": "130703", - "name": "桥西区" - }, - { - "code": "130705", - "name": "宣化区" - }, - { - "code": "130706", - "name": "下花园区" - }, - { - "code": "130708", - "name": "万全区" - }, - { - "code": "130709", - "name": "崇礼区" - }, - { - "code": "130722", - "name": "张北县" - }, - { - "code": "130723", - "name": "康保县" - }, - { - "code": "130724", - "name": "沽源县" - }, - { - "code": "130725", - "name": "尚义县" - }, - { - "code": "130726", - "name": "蔚县" - }, - { - "code": "130727", - "name": "阳原县" - }, - { - "code": "130728", - "name": "怀安县" - }, - { - "code": "130730", - "name": "怀来县" - }, - { - "code": "130731", - "name": "涿鹿县" - }, - { - "code": "130732", - "name": "赤城县" - } - ] - }, - { - "code": "130800", - "name": "承德市", - "areaList": [ - { - "code": "130802", - "name": "双桥区" - }, - { - "code": "130803", - "name": "双滦区" - }, - { - "code": "130804", - "name": "鹰手营子矿区" - }, - { - "code": "130821", - "name": "承德县" - }, - { - "code": "130822", - "name": "兴隆县" - }, - { - "code": "130824", - "name": "滦平县" - }, - { - "code": "130825", - "name": "隆化县" - }, - { - "code": "130826", - "name": "丰宁满族自治县" - }, - { - "code": "130827", - "name": "宽城满族自治县" - }, - { - "code": "130828", - "name": "围场满族蒙古族自治县" - }, - { - "code": "130881", - "name": "平泉市" - } - ] - }, - { - "code": "130900", - "name": "沧州市", - "areaList": [ - { - "code": "130902", - "name": "新华区" - }, - { - "code": "130903", - "name": "运河区" - }, - { - "code": "130921", - "name": "沧县" - }, - { - "code": "130922", - "name": "青县" - }, - { - "code": "130923", - "name": "东光县" - }, - { - "code": "130924", - "name": "海兴县" - }, - { - "code": "130925", - "name": "盐山县" - }, - { - "code": "130926", - "name": "肃宁县" - }, - { - "code": "130927", - "name": "南皮县" - }, - { - "code": "130928", - "name": "吴桥县" - }, - { - "code": "130929", - "name": "献县" - }, - { - "code": "130930", - "name": "孟村回族自治县" - }, - { - "code": "130981", - "name": "泊头市" - }, - { - "code": "130982", - "name": "任丘市" - }, - { - "code": "130983", - "name": "黄骅市" - }, - { - "code": "130984", - "name": "河间市" - } - ] - }, - { - "code": "131000", - "name": "廊坊市", - "areaList": [ - { - "code": "131002", - "name": "安次区" - }, - { - "code": "131003", - "name": "广阳区" - }, - { - "code": "131022", - "name": "固安县" - }, - { - "code": "131023", - "name": "永清县" - }, - { - "code": "131024", - "name": "香河县" - }, - { - "code": "131025", - "name": "大城县" - }, - { - "code": "131026", - "name": "文安县" - }, - { - "code": "131028", - "name": "大厂回族自治县" - }, - { - "code": "131081", - "name": "霸州市" - }, - { - "code": "131082", - "name": "三河市" - } - ] - }, - { - "code": "131100", - "name": "衡水市", - "areaList": [ - { - "code": "131102", - "name": "桃城区" - }, - { - "code": "131103", - "name": "冀州区" - }, - { - "code": "131121", - "name": "枣强县" - }, - { - "code": "131122", - "name": "武邑县" - }, - { - "code": "131123", - "name": "武强县" - }, - { - "code": "131124", - "name": "饶阳县" - }, - { - "code": "131125", - "name": "安平县" - }, - { - "code": "131126", - "name": "故城县" - }, - { - "code": "131127", - "name": "景县" - }, - { - "code": "131128", - "name": "阜城县" - }, - { - "code": "131182", - "name": "深州市" - } - ] - } - ] - }, - { - "code": "140000", - "name": "山西省", - "cityList": [ - { - "code": "140100", - "name": "太原市", - "areaList": [ - { - "code": "140105", - "name": "小店区" - }, - { - "code": "140106", - "name": "迎泽区" - }, - { - "code": "140107", - "name": "杏花岭区" - }, - { - "code": "140108", - "name": "尖草坪区" - }, - { - "code": "140109", - "name": "万柏林区" - }, - { - "code": "140110", - "name": "晋源区" - }, - { - "code": "140121", - "name": "清徐县" - }, - { - "code": "140122", - "name": "阳曲县" - }, - { - "code": "140123", - "name": "娄烦县" - }, - { - "code": "140181", - "name": "古交市" - } - ] - }, - { - "code": "140200", - "name": "大同市", - "areaList": [ - { - "code": "140212", - "name": "新荣区" - }, - { - "code": "140213", - "name": "平城区" - }, - { - "code": "140214", - "name": "云冈区" - }, - { - "code": "140215", - "name": "云州区" - }, - { - "code": "140221", - "name": "阳高县" - }, - { - "code": "140222", - "name": "天镇县" - }, - { - "code": "140223", - "name": "广灵县" - }, - { - "code": "140224", - "name": "灵丘县" - }, - { - "code": "140225", - "name": "浑源县" - }, - { - "code": "140226", - "name": "左云县" - } - ] - }, - { - "code": "140300", - "name": "阳泉市", - "areaList": [ - { - "code": "140302", - "name": "城区" - }, - { - "code": "140303", - "name": "矿区" - }, - { - "code": "140311", - "name": "郊区" - }, - { - "code": "140321", - "name": "平定县" - }, - { - "code": "140322", - "name": "盂县" - } - ] - }, - { - "code": "140400", - "name": "长治市", - "areaList": [ - { - "code": "140403", - "name": "潞州区" - }, - { - "code": "140404", - "name": "上党区" - }, - { - "code": "140405", - "name": "屯留区" - }, - { - "code": "140406", - "name": "潞城区" - }, - { - "code": "140423", - "name": "襄垣县" - }, - { - "code": "140425", - "name": "平顺县" - }, - { - "code": "140426", - "name": "黎城县" - }, - { - "code": "140427", - "name": "壶关县" - }, - { - "code": "140428", - "name": "长子县" - }, - { - "code": "140429", - "name": "武乡县" - }, - { - "code": "140430", - "name": "沁县" - }, - { - "code": "140431", - "name": "沁源县" - } - ] - }, - { - "code": "140500", - "name": "晋城市", - "areaList": [ - { - "code": "140502", - "name": "城区" - }, - { - "code": "140521", - "name": "沁水县" - }, - { - "code": "140522", - "name": "阳城县" - }, - { - "code": "140524", - "name": "陵川县" - }, - { - "code": "140525", - "name": "泽州县" - }, - { - "code": "140581", - "name": "高平市" - } - ] - }, - { - "code": "140600", - "name": "朔州市", - "areaList": [ - { - "code": "140602", - "name": "朔城区" - }, - { - "code": "140603", - "name": "平鲁区" - }, - { - "code": "140621", - "name": "山阴县" - }, - { - "code": "140622", - "name": "应县" - }, - { - "code": "140623", - "name": "右玉县" - }, - { - "code": "140681", - "name": "怀仁市" - } - ] - }, - { - "code": "140700", - "name": "晋中市", - "areaList": [ - { - "code": "140702", - "name": "榆次区" - }, - { - "code": "140703", - "name": "太谷区" - }, - { - "code": "140721", - "name": "榆社县" - }, - { - "code": "140722", - "name": "左权县" - }, - { - "code": "140723", - "name": "和顺县" - }, - { - "code": "140724", - "name": "昔阳县" - }, - { - "code": "140725", - "name": "寿阳县" - }, - { - "code": "140727", - "name": "祁县" - }, - { - "code": "140728", - "name": "平遥县" - }, - { - "code": "140729", - "name": "灵石县" - }, - { - "code": "140781", - "name": "介休市" - } - ] - }, - { - "code": "140800", - "name": "运城市", - "areaList": [ - { - "code": "140802", - "name": "盐湖区" - }, - { - "code": "140821", - "name": "临猗县" - }, - { - "code": "140822", - "name": "万荣县" - }, - { - "code": "140823", - "name": "闻喜县" - }, - { - "code": "140824", - "name": "稷山县" - }, - { - "code": "140825", - "name": "新绛县" - }, - { - "code": "140826", - "name": "绛县" - }, - { - "code": "140827", - "name": "垣曲县" - }, - { - "code": "140828", - "name": "夏县" - }, - { - "code": "140829", - "name": "平陆县" - }, - { - "code": "140830", - "name": "芮城县" - }, - { - "code": "140881", - "name": "永济市" - }, - { - "code": "140882", - "name": "河津市" - } - ] - }, - { - "code": "140900", - "name": "忻州市", - "areaList": [ - { - "code": "140902", - "name": "忻府区" - }, - { - "code": "140921", - "name": "定襄县" - }, - { - "code": "140922", - "name": "五台县" - }, - { - "code": "140923", - "name": "代县" - }, - { - "code": "140924", - "name": "繁峙县" - }, - { - "code": "140925", - "name": "宁武县" - }, - { - "code": "140926", - "name": "静乐县" - }, - { - "code": "140927", - "name": "神池县" - }, - { - "code": "140928", - "name": "五寨县" - }, - { - "code": "140929", - "name": "岢岚县" - }, - { - "code": "140930", - "name": "河曲县" - }, - { - "code": "140931", - "name": "保德县" - }, - { - "code": "140932", - "name": "偏关县" - }, - { - "code": "140981", - "name": "原平市" - } - ] - }, - { - "code": "141000", - "name": "临汾市", - "areaList": [ - { - "code": "141002", - "name": "尧都区" - }, - { - "code": "141021", - "name": "曲沃县" - }, - { - "code": "141022", - "name": "翼城县" - }, - { - "code": "141023", - "name": "襄汾县" - }, - { - "code": "141024", - "name": "洪洞县" - }, - { - "code": "141025", - "name": "古县" - }, - { - "code": "141026", - "name": "安泽县" - }, - { - "code": "141027", - "name": "浮山县" - }, - { - "code": "141028", - "name": "吉县" - }, - { - "code": "141029", - "name": "乡宁县" - }, - { - "code": "141030", - "name": "大宁县" - }, - { - "code": "141031", - "name": "隰县" - }, - { - "code": "141032", - "name": "永和县" - }, - { - "code": "141033", - "name": "蒲县" - }, - { - "code": "141034", - "name": "汾西县" - }, - { - "code": "141081", - "name": "侯马市" - }, - { - "code": "141082", - "name": "霍州市" - } - ] - }, - { - "code": "141100", - "name": "吕梁市", - "areaList": [ - { - "code": "141102", - "name": "离石区" - }, - { - "code": "141121", - "name": "文水县" - }, - { - "code": "141122", - "name": "交城县" - }, - { - "code": "141123", - "name": "兴县" - }, - { - "code": "141124", - "name": "临县" - }, - { - "code": "141125", - "name": "柳林县" - }, - { - "code": "141126", - "name": "石楼县" - }, - { - "code": "141127", - "name": "岚县" - }, - { - "code": "141128", - "name": "方山县" - }, - { - "code": "141129", - "name": "中阳县" - }, - { - "code": "141130", - "name": "交口县" - }, - { - "code": "141181", - "name": "孝义市" - }, - { - "code": "141182", - "name": "汾阳市" - } - ] - } - ] - }, - { - "code": "150000", - "name": "内蒙古自治区", - "cityList": [ - { - "code": "150100", - "name": "呼和浩特市", - "areaList": [ - { - "code": "150102", - "name": "新城区" - }, - { - "code": "150103", - "name": "回民区" - }, - { - "code": "150104", - "name": "玉泉区" - }, - { - "code": "150105", - "name": "赛罕区" - }, - { - "code": "150121", - "name": "土默特左旗" - }, - { - "code": "150122", - "name": "托克托县" - }, - { - "code": "150123", - "name": "和林格尔县" - }, - { - "code": "150124", - "name": "清水河县" - }, - { - "code": "150125", - "name": "武川县" - } - ] - }, - { - "code": "150200", - "name": "包头市", - "areaList": [ - { - "code": "150202", - "name": "东河区" - }, - { - "code": "150203", - "name": "昆都仑区" - }, - { - "code": "150204", - "name": "青山区" - }, - { - "code": "150205", - "name": "石拐区" - }, - { - "code": "150206", - "name": "白云鄂博矿区" - }, - { - "code": "150207", - "name": "九原区" - }, - { - "code": "150221", - "name": "土默特右旗" - }, - { - "code": "150222", - "name": "固阳县" - }, - { - "code": "150223", - "name": "达尔罕茂明安联合旗" - } - ] - }, - { - "code": "150300", - "name": "乌海市", - "areaList": [ - { - "code": "150302", - "name": "海勃湾区" - }, - { - "code": "150303", - "name": "海南区" - }, - { - "code": "150304", - "name": "乌达区" - } - ] - }, - { - "code": "150400", - "name": "赤峰市", - "areaList": [ - { - "code": "150402", - "name": "红山区" - }, - { - "code": "150403", - "name": "元宝山区" - }, - { - "code": "150404", - "name": "松山区" - }, - { - "code": "150421", - "name": "阿鲁科尔沁旗" - }, - { - "code": "150422", - "name": "巴林左旗" - }, - { - "code": "150423", - "name": "巴林右旗" - }, - { - "code": "150424", - "name": "林西县" - }, - { - "code": "150425", - "name": "克什克腾旗" - }, - { - "code": "150426", - "name": "翁牛特旗" - }, - { - "code": "150428", - "name": "喀喇沁旗" - }, - { - "code": "150429", - "name": "宁城县" - }, - { - "code": "150430", - "name": "敖汉旗" - } - ] - }, - { - "code": "150500", - "name": "通辽市", - "areaList": [ - { - "code": "150502", - "name": "科尔沁区" - }, - { - "code": "150521", - "name": "科尔沁左翼中旗" - }, - { - "code": "150522", - "name": "科尔沁左翼后旗" - }, - { - "code": "150523", - "name": "开鲁县" - }, - { - "code": "150524", - "name": "库伦旗" - }, - { - "code": "150525", - "name": "奈曼旗" - }, - { - "code": "150526", - "name": "扎鲁特旗" - }, - { - "code": "150581", - "name": "霍林郭勒市" - } - ] - }, - { - "code": "150600", - "name": "鄂尔多斯市", - "areaList": [ - { - "code": "150602", - "name": "东胜区" - }, - { - "code": "150603", - "name": "康巴什区" - }, - { - "code": "150621", - "name": "达拉特旗" - }, - { - "code": "150622", - "name": "准格尔旗" - }, - { - "code": "150623", - "name": "鄂托克前旗" - }, - { - "code": "150624", - "name": "鄂托克旗" - }, - { - "code": "150625", - "name": "杭锦旗" - }, - { - "code": "150626", - "name": "乌审旗" - }, - { - "code": "150627", - "name": "伊金霍洛旗" - } - ] - }, - { - "code": "150700", - "name": "呼伦贝尔市", - "areaList": [ - { - "code": "150702", - "name": "海拉尔区" - }, - { - "code": "150703", - "name": "扎赉诺尔区" - }, - { - "code": "150721", - "name": "阿荣旗" - }, - { - "code": "150722", - "name": "莫力达瓦达斡尔族自治旗" - }, - { - "code": "150723", - "name": "鄂伦春自治旗" - }, - { - "code": "150724", - "name": "鄂温克族自治旗" - }, - { - "code": "150725", - "name": "陈巴尔虎旗" - }, - { - "code": "150726", - "name": "新巴尔虎左旗" - }, - { - "code": "150727", - "name": "新巴尔虎右旗" - }, - { - "code": "150781", - "name": "满洲里市" - }, - { - "code": "150782", - "name": "牙克石市" - }, - { - "code": "150783", - "name": "扎兰屯市" - }, - { - "code": "150784", - "name": "额尔古纳市" - }, - { - "code": "150785", - "name": "根河市" - } - ] - }, - { - "code": "150800", - "name": "巴彦淖尔市", - "areaList": [ - { - "code": "150802", - "name": "临河区" - }, - { - "code": "150821", - "name": "五原县" - }, - { - "code": "150822", - "name": "磴口县" - }, - { - "code": "150823", - "name": "乌拉特前旗" - }, - { - "code": "150824", - "name": "乌拉特中旗" - }, - { - "code": "150825", - "name": "乌拉特后旗" - }, - { - "code": "150826", - "name": "杭锦后旗" - } - ] - }, - { - "code": "150900", - "name": "乌兰察布市", - "areaList": [ - { - "code": "150902", - "name": "集宁区" - }, - { - "code": "150921", - "name": "卓资县" - }, - { - "code": "150922", - "name": "化德县" - }, - { - "code": "150923", - "name": "商都县" - }, - { - "code": "150924", - "name": "兴和县" - }, - { - "code": "150925", - "name": "凉城县" - }, - { - "code": "150926", - "name": "察哈尔右翼前旗" - }, - { - "code": "150927", - "name": "察哈尔右翼中旗" - }, - { - "code": "150928", - "name": "察哈尔右翼后旗" - }, - { - "code": "150929", - "name": "四子王旗" - }, - { - "code": "150981", - "name": "丰镇市" - } - ] - }, - { - "code": "152200", - "name": "兴安盟", - "areaList": [ - { - "code": "152201", - "name": "乌兰浩特市" - }, - { - "code": "152202", - "name": "阿尔山市" - }, - { - "code": "152221", - "name": "科尔沁右翼前旗" - }, - { - "code": "152222", - "name": "科尔沁右翼中旗" - }, - { - "code": "152223", - "name": "扎赉特旗" - }, - { - "code": "152224", - "name": "突泉县" - } - ] - }, - { - "code": "152500", - "name": "锡林郭勒盟", - "areaList": [ - { - "code": "152501", - "name": "二连浩特市" - }, - { - "code": "152502", - "name": "锡林浩特市" - }, - { - "code": "152522", - "name": "阿巴嘎旗" - }, - { - "code": "152523", - "name": "苏尼特左旗" - }, - { - "code": "152524", - "name": "苏尼特右旗" - }, - { - "code": "152525", - "name": "东乌珠穆沁旗" - }, - { - "code": "152526", - "name": "西乌珠穆沁旗" - }, - { - "code": "152527", - "name": "太仆寺旗" - }, - { - "code": "152528", - "name": "镶黄旗" - }, - { - "code": "152529", - "name": "正镶白旗" - }, - { - "code": "152530", - "name": "正蓝旗" - }, - { - "code": "152531", - "name": "多伦县" - } - ] - }, - { - "code": "152900", - "name": "阿拉善盟", - "areaList": [ - { - "code": "152921", - "name": "阿拉善左旗" - }, - { - "code": "152922", - "name": "阿拉善右旗" - }, - { - "code": "152923", - "name": "额济纳旗" - } - ] - } - ] - }, - { - "code": "210000", - "name": "辽宁省", - "cityList": [ - { - "code": "210100", - "name": "沈阳市", - "areaList": [ - { - "code": "210102", - "name": "和平区" - }, - { - "code": "210103", - "name": "沈河区" - }, - { - "code": "210104", - "name": "大东区" - }, - { - "code": "210105", - "name": "皇姑区" - }, - { - "code": "210106", - "name": "铁西区" - }, - { - "code": "210111", - "name": "苏家屯区" - }, - { - "code": "210112", - "name": "浑南区" - }, - { - "code": "210113", - "name": "沈北新区" - }, - { - "code": "210114", - "name": "于洪区" - }, - { - "code": "210115", - "name": "辽中区" - }, - { - "code": "210123", - "name": "康平县" - }, - { - "code": "210124", - "name": "法库县" - }, - { - "code": "210181", - "name": "新民市" - } - ] - }, - { - "code": "210200", - "name": "大连市", - "areaList": [ - { - "code": "210202", - "name": "中山区" - }, - { - "code": "210203", - "name": "西岗区" - }, - { - "code": "210204", - "name": "沙河口区" - }, - { - "code": "210211", - "name": "甘井子区" - }, - { - "code": "210212", - "name": "旅顺口区" - }, - { - "code": "210213", - "name": "金州区" - }, - { - "code": "210214", - "name": "普兰店区" - }, - { - "code": "210224", - "name": "长海县" - }, - { - "code": "210281", - "name": "瓦房店市" - }, - { - "code": "210283", - "name": "庄河市" - } - ] - }, - { - "code": "210300", - "name": "鞍山市", - "areaList": [ - { - "code": "210302", - "name": "铁东区" - }, - { - "code": "210303", - "name": "铁西区" - }, - { - "code": "210304", - "name": "立山区" - }, - { - "code": "210311", - "name": "千山区" - }, - { - "code": "210321", - "name": "台安县" - }, - { - "code": "210323", - "name": "岫岩满族自治县" - }, - { - "code": "210381", - "name": "海城市" - } - ] - }, - { - "code": "210400", - "name": "抚顺市", - "areaList": [ - { - "code": "210402", - "name": "新抚区" - }, - { - "code": "210403", - "name": "东洲区" - }, - { - "code": "210404", - "name": "望花区" - }, - { - "code": "210411", - "name": "顺城区" - }, - { - "code": "210421", - "name": "抚顺县" - }, - { - "code": "210422", - "name": "新宾满族自治县" - }, - { - "code": "210423", - "name": "清原满族自治县" - } - ] - }, - { - "code": "210500", - "name": "本溪市", - "areaList": [ - { - "code": "210502", - "name": "平山区" - }, - { - "code": "210503", - "name": "溪湖区" - }, - { - "code": "210504", - "name": "明山区" - }, - { - "code": "210505", - "name": "南芬区" - }, - { - "code": "210521", - "name": "本溪满族自治县" - }, - { - "code": "210522", - "name": "桓仁满族自治县" - } - ] - }, - { - "code": "210600", - "name": "丹东市", - "areaList": [ - { - "code": "210602", - "name": "元宝区" - }, - { - "code": "210603", - "name": "振兴区" - }, - { - "code": "210604", - "name": "振安区" - }, - { - "code": "210624", - "name": "宽甸满族自治县" - }, - { - "code": "210681", - "name": "东港市" - }, - { - "code": "210682", - "name": "凤城市" - } - ] - }, - { - "code": "210700", - "name": "锦州市", - "areaList": [ - { - "code": "210702", - "name": "古塔区" - }, - { - "code": "210703", - "name": "凌河区" - }, - { - "code": "210711", - "name": "太和区" - }, - { - "code": "210726", - "name": "黑山县" - }, - { - "code": "210727", - "name": "义县" - }, - { - "code": "210781", - "name": "凌海市" - }, - { - "code": "210782", - "name": "北镇市" - } - ] - }, - { - "code": "210800", - "name": "营口市", - "areaList": [ - { - "code": "210802", - "name": "站前区" - }, - { - "code": "210803", - "name": "西市区" - }, - { - "code": "210804", - "name": "鲅鱼圈区" - }, - { - "code": "210811", - "name": "老边区" - }, - { - "code": "210881", - "name": "盖州市" - }, - { - "code": "210882", - "name": "大石桥市" - } - ] - }, - { - "code": "210900", - "name": "阜新市", - "areaList": [ - { - "code": "210902", - "name": "海州区" - }, - { - "code": "210903", - "name": "新邱区" - }, - { - "code": "210904", - "name": "太平区" - }, - { - "code": "210905", - "name": "清河门区" - }, - { - "code": "210911", - "name": "细河区" - }, - { - "code": "210921", - "name": "阜新蒙古族自治县" - }, - { - "code": "210922", - "name": "彰武县" - } - ] - }, - { - "code": "211000", - "name": "辽阳市", - "areaList": [ - { - "code": "211002", - "name": "白塔区" - }, - { - "code": "211003", - "name": "文圣区" - }, - { - "code": "211004", - "name": "宏伟区" - }, - { - "code": "211005", - "name": "弓长岭区" - }, - { - "code": "211011", - "name": "太子河区" - }, - { - "code": "211021", - "name": "辽阳县" - }, - { - "code": "211081", - "name": "灯塔市" - } - ] - }, - { - "code": "211100", - "name": "盘锦市", - "areaList": [ - { - "code": "211102", - "name": "双台子区" - }, - { - "code": "211103", - "name": "兴隆台区" - }, - { - "code": "211104", - "name": "大洼区" - }, - { - "code": "211122", - "name": "盘山县" - } - ] - }, - { - "code": "211200", - "name": "铁岭市", - "areaList": [ - { - "code": "211202", - "name": "银州区" - }, - { - "code": "211204", - "name": "清河区" - }, - { - "code": "211221", - "name": "铁岭县" - }, - { - "code": "211223", - "name": "西丰县" - }, - { - "code": "211224", - "name": "昌图县" - }, - { - "code": "211281", - "name": "调兵山市" - }, - { - "code": "211282", - "name": "开原市" - } - ] - }, - { - "code": "211300", - "name": "朝阳市", - "areaList": [ - { - "code": "211302", - "name": "双塔区" - }, - { - "code": "211303", - "name": "龙城区" - }, - { - "code": "211321", - "name": "朝阳县" - }, - { - "code": "211322", - "name": "建平县" - }, - { - "code": "211324", - "name": "喀喇沁左翼蒙古族自治县" - }, - { - "code": "211381", - "name": "北票市" - }, - { - "code": "211382", - "name": "凌源市" - } - ] - }, - { - "code": "211400", - "name": "葫芦岛市", - "areaList": [ - { - "code": "211402", - "name": "连山区" - }, - { - "code": "211403", - "name": "龙港区" - }, - { - "code": "211404", - "name": "南票区" - }, - { - "code": "211421", - "name": "绥中县" - }, - { - "code": "211422", - "name": "建昌县" - }, - { - "code": "211481", - "name": "兴城市" - } - ] - } - ] - }, - { - "code": "220000", - "name": "吉林省", - "cityList": [ - { - "code": "220100", - "name": "长春市", - "areaList": [ - { - "code": "220102", - "name": "南关区" - }, - { - "code": "220103", - "name": "宽城区" - }, - { - "code": "220104", - "name": "朝阳区" - }, - { - "code": "220105", - "name": "二道区" - }, - { - "code": "220106", - "name": "绿园区" - }, - { - "code": "220112", - "name": "双阳区" - }, - { - "code": "220113", - "name": "九台区" - }, - { - "code": "220122", - "name": "农安县" - }, - { - "code": "220182", - "name": "榆树市" - }, - { - "code": "220183", - "name": "德惠市" - } - ] - }, - { - "code": "220200", - "name": "吉林市", - "areaList": [ - { - "code": "220202", - "name": "昌邑区" - }, - { - "code": "220203", - "name": "龙潭区" - }, - { - "code": "220204", - "name": "船营区" - }, - { - "code": "220211", - "name": "丰满区" - }, - { - "code": "220221", - "name": "永吉县" - }, - { - "code": "220281", - "name": "蛟河市" - }, - { - "code": "220282", - "name": "桦甸市" - }, - { - "code": "220283", - "name": "舒兰市" - }, - { - "code": "220284", - "name": "磐石市" - } - ] - }, - { - "code": "220300", - "name": "四平市", - "areaList": [ - { - "code": "220302", - "name": "铁西区" - }, - { - "code": "220303", - "name": "铁东区" - }, - { - "code": "220322", - "name": "梨树县" - }, - { - "code": "220323", - "name": "伊通满族自治县" - }, - { - "code": "220381", - "name": "公主岭市" - }, - { - "code": "220382", - "name": "双辽市" - } - ] - }, - { - "code": "220400", - "name": "辽源市", - "areaList": [ - { - "code": "220402", - "name": "龙山区" - }, - { - "code": "220403", - "name": "西安区" - }, - { - "code": "220421", - "name": "东丰县" - }, - { - "code": "220422", - "name": "东辽县" - } - ] - }, - { - "code": "220500", - "name": "通化市", - "areaList": [ - { - "code": "220502", - "name": "东昌区" - }, - { - "code": "220503", - "name": "二道江区" - }, - { - "code": "220521", - "name": "通化县" - }, - { - "code": "220523", - "name": "辉南县" - }, - { - "code": "220524", - "name": "柳河县" - }, - { - "code": "220581", - "name": "梅河口市" - }, - { - "code": "220582", - "name": "集安市" - } - ] - }, - { - "code": "220600", - "name": "白山市", - "areaList": [ - { - "code": "220602", - "name": "浑江区" - }, - { - "code": "220605", - "name": "江源区" - }, - { - "code": "220621", - "name": "抚松县" - }, - { - "code": "220622", - "name": "靖宇县" - }, - { - "code": "220623", - "name": "长白朝鲜族自治县" - }, - { - "code": "220681", - "name": "临江市" - } - ] - }, - { - "code": "220700", - "name": "松原市", - "areaList": [ - { - "code": "220702", - "name": "宁江区" - }, - { - "code": "220721", - "name": "前郭尔罗斯蒙古族自治县" - }, - { - "code": "220722", - "name": "长岭县" - }, - { - "code": "220723", - "name": "乾安县" - }, - { - "code": "220781", - "name": "扶余市" - } - ] - }, - { - "code": "220800", - "name": "白城市", - "areaList": [ - { - "code": "220802", - "name": "洮北区" - }, - { - "code": "220821", - "name": "镇赉县" - }, - { - "code": "220822", - "name": "通榆县" - }, - { - "code": "220881", - "name": "洮南市" - }, - { - "code": "220882", - "name": "大安市" - } - ] - }, - { - "code": "222400", - "name": "延边朝鲜族自治州", - "areaList": [ - { - "code": "222401", - "name": "延吉市" - }, - { - "code": "222402", - "name": "图们市" - }, - { - "code": "222403", - "name": "敦化市" - }, - { - "code": "222404", - "name": "珲春市" - }, - { - "code": "222405", - "name": "龙井市" - }, - { - "code": "222406", - "name": "和龙市" - }, - { - "code": "222424", - "name": "汪清县" - }, - { - "code": "222426", - "name": "安图县" - } - ] - } - ] - }, - { - "code": "230000", - "name": "黑龙江省", - "cityList": [ - { - "code": "230100", - "name": "哈尔滨市", - "areaList": [ - { - "code": "230102", - "name": "道里区" - }, - { - "code": "230103", - "name": "南岗区" - }, - { - "code": "230104", - "name": "道外区" - }, - { - "code": "230108", - "name": "平房区" - }, - { - "code": "230109", - "name": "松北区" - }, - { - "code": "230110", - "name": "香坊区" - }, - { - "code": "230111", - "name": "呼兰区" - }, - { - "code": "230112", - "name": "阿城区" - }, - { - "code": "230113", - "name": "双城区" - }, - { - "code": "230123", - "name": "依兰县" - }, - { - "code": "230124", - "name": "方正县" - }, - { - "code": "230125", - "name": "宾县" - }, - { - "code": "230126", - "name": "巴彦县" - }, - { - "code": "230127", - "name": "木兰县" - }, - { - "code": "230128", - "name": "通河县" - }, - { - "code": "230129", - "name": "延寿县" - }, - { - "code": "230183", - "name": "尚志市" - }, - { - "code": "230184", - "name": "五常市" - } - ] - }, - { - "code": "230200", - "name": "齐齐哈尔市", - "areaList": [ - { - "code": "230202", - "name": "龙沙区" - }, - { - "code": "230203", - "name": "建华区" - }, - { - "code": "230204", - "name": "铁锋区" - }, - { - "code": "230205", - "name": "昂昂溪区" - }, - { - "code": "230206", - "name": "富拉尔基区" - }, - { - "code": "230207", - "name": "碾子山区" - }, - { - "code": "230208", - "name": "梅里斯达斡尔族区" - }, - { - "code": "230221", - "name": "龙江县" - }, - { - "code": "230223", - "name": "依安县" - }, - { - "code": "230224", - "name": "泰来县" - }, - { - "code": "230225", - "name": "甘南县" - }, - { - "code": "230227", - "name": "富裕县" - }, - { - "code": "230229", - "name": "克山县" - }, - { - "code": "230230", - "name": "克东县" - }, - { - "code": "230231", - "name": "拜泉县" - }, - { - "code": "230281", - "name": "讷河市" - } - ] - }, - { - "code": "230300", - "name": "鸡西市", - "areaList": [ - { - "code": "230302", - "name": "鸡冠区" - }, - { - "code": "230303", - "name": "恒山区" - }, - { - "code": "230304", - "name": "滴道区" - }, - { - "code": "230305", - "name": "梨树区" - }, - { - "code": "230306", - "name": "城子河区" - }, - { - "code": "230307", - "name": "麻山区" - }, - { - "code": "230321", - "name": "鸡东县" - }, - { - "code": "230381", - "name": "虎林市" - }, - { - "code": "230382", - "name": "密山市" - } - ] - }, - { - "code": "230400", - "name": "鹤岗市", - "areaList": [ - { - "code": "230402", - "name": "向阳区" - }, - { - "code": "230403", - "name": "工农区" - }, - { - "code": "230404", - "name": "南山区" - }, - { - "code": "230405", - "name": "兴安区" - }, - { - "code": "230406", - "name": "东山区" - }, - { - "code": "230407", - "name": "兴山区" - }, - { - "code": "230421", - "name": "萝北县" - }, - { - "code": "230422", - "name": "绥滨县" - } - ] - }, - { - "code": "230500", - "name": "双鸭山市", - "areaList": [ - { - "code": "230502", - "name": "尖山区" - }, - { - "code": "230503", - "name": "岭东区" - }, - { - "code": "230505", - "name": "四方台区" - }, - { - "code": "230506", - "name": "宝山区" - }, - { - "code": "230521", - "name": "集贤县" - }, - { - "code": "230522", - "name": "友谊县" - }, - { - "code": "230523", - "name": "宝清县" - }, - { - "code": "230524", - "name": "饶河县" - } - ] - }, - { - "code": "230600", - "name": "大庆市", - "areaList": [ - { - "code": "230602", - "name": "萨尔图区" - }, - { - "code": "230603", - "name": "龙凤区" - }, - { - "code": "230604", - "name": "让胡路区" - }, - { - "code": "230605", - "name": "红岗区" - }, - { - "code": "230606", - "name": "大同区" - }, - { - "code": "230621", - "name": "肇州县" - }, - { - "code": "230622", - "name": "肇源县" - }, - { - "code": "230623", - "name": "林甸县" - }, - { - "code": "230624", - "name": "杜尔伯特蒙古族自治县" - } - ] - }, - { - "code": "230700", - "name": "伊春市", - "areaList": [ - { - "code": "230717", - "name": "伊美区" - }, - { - "code": "230718", - "name": "乌翠区" - }, - { - "code": "230719", - "name": "友好区" - }, - { - "code": "230722", - "name": "嘉荫县" - }, - { - "code": "230723", - "name": "汤旺县" - }, - { - "code": "230724", - "name": "丰林县" - }, - { - "code": "230725", - "name": "大箐山县" - }, - { - "code": "230726", - "name": "南岔县" - }, - { - "code": "230751", - "name": "金林区" - }, - { - "code": "230781", - "name": "铁力市" - } - ] - }, - { - "code": "230800", - "name": "佳木斯市", - "areaList": [ - { - "code": "230803", - "name": "向阳区" - }, - { - "code": "230804", - "name": "前进区" - }, - { - "code": "230805", - "name": "东风区" - }, - { - "code": "230811", - "name": "郊区" - }, - { - "code": "230822", - "name": "桦南县" - }, - { - "code": "230826", - "name": "桦川县" - }, - { - "code": "230828", - "name": "汤原县" - }, - { - "code": "230881", - "name": "同江市" - }, - { - "code": "230882", - "name": "富锦市" - }, - { - "code": "230883", - "name": "抚远市" - } - ] - }, - { - "code": "230900", - "name": "七台河市", - "areaList": [ - { - "code": "230902", - "name": "新兴区" - }, - { - "code": "230903", - "name": "桃山区" - }, - { - "code": "230904", - "name": "茄子河区" - }, - { - "code": "230921", - "name": "勃利县" - } - ] - }, - { - "code": "231000", - "name": "牡丹江市", - "areaList": [ - { - "code": "231002", - "name": "东安区" - }, - { - "code": "231003", - "name": "阳明区" - }, - { - "code": "231004", - "name": "爱民区" - }, - { - "code": "231005", - "name": "西安区" - }, - { - "code": "231025", - "name": "林口县" - }, - { - "code": "231081", - "name": "绥芬河市" - }, - { - "code": "231083", - "name": "海林市" - }, - { - "code": "231084", - "name": "宁安市" - }, - { - "code": "231085", - "name": "穆棱市" - }, - { - "code": "231086", - "name": "东宁市" - } - ] - }, - { - "code": "231100", - "name": "黑河市", - "areaList": [ - { - "code": "231102", - "name": "爱辉区" - }, - { - "code": "231123", - "name": "逊克县" - }, - { - "code": "231124", - "name": "孙吴县" - }, - { - "code": "231181", - "name": "北安市" - }, - { - "code": "231182", - "name": "五大连池市" - }, - { - "code": "231183", - "name": "嫩江市" - } - ] - }, - { - "code": "231200", - "name": "绥化市", - "areaList": [ - { - "code": "231202", - "name": "北林区" - }, - { - "code": "231221", - "name": "望奎县" - }, - { - "code": "231222", - "name": "兰西县" - }, - { - "code": "231223", - "name": "青冈县" - }, - { - "code": "231224", - "name": "庆安县" - }, - { - "code": "231225", - "name": "明水县" - }, - { - "code": "231226", - "name": "绥棱县" - }, - { - "code": "231281", - "name": "安达市" - }, - { - "code": "231282", - "name": "肇东市" - }, - { - "code": "231283", - "name": "海伦市" - } - ] - }, - { - "code": "232700", - "name": "大兴安岭地区", - "areaList": [ - { - "code": "232701", - "name": "漠河市" - }, - { - "code": "232721", - "name": "呼玛县" - }, - { - "code": "232722", - "name": "塔河县" - } - ] - } - ] - }, - { - "code": "310000", - "name": "上海市", - "cityList": [ - { - "code": "310000", - "name": "上海市", - "areaList": [ - { - "code": "310101", - "name": "黄浦区" - }, - { - "code": "310104", - "name": "徐汇区" - }, - { - "code": "310105", - "name": "长宁区" - }, - { - "code": "310106", - "name": "静安区" - }, - { - "code": "310107", - "name": "普陀区" - }, - { - "code": "310109", - "name": "虹口区" - }, - { - "code": "310110", - "name": "杨浦区" - }, - { - "code": "310112", - "name": "闵行区" - }, - { - "code": "310113", - "name": "宝山区" - }, - { - "code": "310114", - "name": "嘉定区" - }, - { - "code": "310115", - "name": "浦东新区" - }, - { - "code": "310116", - "name": "金山区" - }, - { - "code": "310117", - "name": "松江区" - }, - { - "code": "310118", - "name": "青浦区" - }, - { - "code": "310120", - "name": "奉贤区" - }, - { - "code": "310151", - "name": "崇明区" - } - ] - } - ] - }, - { - "code": "320000", - "name": "江苏省", - "cityList": [ - { - "code": "320100", - "name": "南京市", - "areaList": [ - { - "code": "320102", - "name": "玄武区" - }, - { - "code": "320104", - "name": "秦淮区" - }, - { - "code": "320105", - "name": "建邺区" - }, - { - "code": "320106", - "name": "鼓楼区" - }, - { - "code": "320111", - "name": "浦口区" - }, - { - "code": "320113", - "name": "栖霞区" - }, - { - "code": "320114", - "name": "雨花台区" - }, - { - "code": "320115", - "name": "江宁区" - }, - { - "code": "320116", - "name": "六合区" - }, - { - "code": "320117", - "name": "溧水区" - }, - { - "code": "320118", - "name": "高淳区" - } - ] - }, - { - "code": "320200", - "name": "无锡市", - "areaList": [ - { - "code": "320205", - "name": "锡山区" - }, - { - "code": "320206", - "name": "惠山区" - }, - { - "code": "320211", - "name": "滨湖区" - }, - { - "code": "320213", - "name": "梁溪区" - }, - { - "code": "320214", - "name": "新吴区" - }, - { - "code": "320281", - "name": "江阴市" - }, - { - "code": "320282", - "name": "宜兴市" - } - ] - }, - { - "code": "320300", - "name": "徐州市", - "areaList": [ - { - "code": "320302", - "name": "鼓楼区" - }, - { - "code": "320303", - "name": "云龙区" - }, - { - "code": "320305", - "name": "贾汪区" - }, - { - "code": "320311", - "name": "泉山区" - }, - { - "code": "320312", - "name": "铜山区" - }, - { - "code": "320321", - "name": "丰县" - }, - { - "code": "320322", - "name": "沛县" - }, - { - "code": "320324", - "name": "睢宁县" - }, - { - "code": "320381", - "name": "新沂市" - }, - { - "code": "320382", - "name": "邳州市" - } - ] - }, - { - "code": "320400", - "name": "常州市", - "areaList": [ - { - "code": "320402", - "name": "天宁区" - }, - { - "code": "320404", - "name": "钟楼区" - }, - { - "code": "320411", - "name": "新北区" - }, - { - "code": "320412", - "name": "武进区" - }, - { - "code": "320413", - "name": "金坛区" - }, - { - "code": "320481", - "name": "溧阳市" - } - ] - }, - { - "code": "320500", - "name": "苏州市", - "areaList": [ - { - "code": "320505", - "name": "虎丘区" - }, - { - "code": "320506", - "name": "吴中区" - }, - { - "code": "320507", - "name": "相城区" - }, - { - "code": "320508", - "name": "姑苏区" - }, - { - "code": "320509", - "name": "吴江区" - }, - { - "code": "320581", - "name": "常熟市" - }, - { - "code": "320582", - "name": "张家港市" - }, - { - "code": "320583", - "name": "昆山市" - }, - { - "code": "320585", - "name": "太仓市" - } - ] - }, - { - "code": "320600", - "name": "南通市", - "areaList": [ - { - "code": "320602", - "name": "崇川区" - }, - { - "code": "320611", - "name": "港闸区" - }, - { - "code": "320612", - "name": "通州区" - }, - { - "code": "320623", - "name": "如东县" - }, - { - "code": "320681", - "name": "启东市" - }, - { - "code": "320682", - "name": "如皋市" - }, - { - "code": "320684", - "name": "海门市" - }, - { - "code": "320685", - "name": "海安市" - } - ] - }, - { - "code": "320700", - "name": "连云港市", - "areaList": [ - { - "code": "320703", - "name": "连云区" - }, - { - "code": "320706", - "name": "海州区" - }, - { - "code": "320707", - "name": "赣榆区" - }, - { - "code": "320722", - "name": "东海县" - }, - { - "code": "320723", - "name": "灌云县" - }, - { - "code": "320724", - "name": "灌南县" - } - ] - }, - { - "code": "320800", - "name": "淮安市", - "areaList": [ - { - "code": "320803", - "name": "淮安区" - }, - { - "code": "320804", - "name": "淮阴区" - }, - { - "code": "320812", - "name": "清江浦区" - }, - { - "code": "320813", - "name": "洪泽区" - }, - { - "code": "320826", - "name": "涟水县" - }, - { - "code": "320830", - "name": "盱眙县" - }, - { - "code": "320831", - "name": "金湖县" - } - ] - }, - { - "code": "320900", - "name": "盐城市", - "areaList": [ - { - "code": "320902", - "name": "亭湖区" - }, - { - "code": "320903", - "name": "盐都区" - }, - { - "code": "320904", - "name": "大丰区" - }, - { - "code": "320921", - "name": "响水县" - }, - { - "code": "320922", - "name": "滨海县" - }, - { - "code": "320923", - "name": "阜宁县" - }, - { - "code": "320924", - "name": "射阳县" - }, - { - "code": "320925", - "name": "建湖县" - }, - { - "code": "320981", - "name": "东台市" - } - ] - }, - { - "code": "321000", - "name": "扬州市", - "areaList": [ - { - "code": "321002", - "name": "广陵区" - }, - { - "code": "321003", - "name": "邗江区" - }, - { - "code": "321012", - "name": "江都区" - }, - { - "code": "321023", - "name": "宝应县" - }, - { - "code": "321081", - "name": "仪征市" - }, - { - "code": "321084", - "name": "高邮市" - } - ] - }, - { - "code": "321100", - "name": "镇江市", - "areaList": [ - { - "code": "321102", - "name": "京口区" - }, - { - "code": "321111", - "name": "润州区" - }, - { - "code": "321112", - "name": "丹徒区" - }, - { - "code": "321181", - "name": "丹阳市" - }, - { - "code": "321182", - "name": "扬中市" - }, - { - "code": "321183", - "name": "句容市" - } - ] - }, - { - "code": "321200", - "name": "泰州市", - "areaList": [ - { - "code": "321202", - "name": "海陵区" - }, - { - "code": "321203", - "name": "高港区" - }, - { - "code": "321204", - "name": "姜堰区" - }, - { - "code": "321281", - "name": "兴化市" - }, - { - "code": "321282", - "name": "靖江市" - }, - { - "code": "321283", - "name": "泰兴市" - } - ] - }, - { - "code": "321300", - "name": "宿迁市", - "areaList": [ - { - "code": "321302", - "name": "宿城区" - }, - { - "code": "321311", - "name": "宿豫区" - }, - { - "code": "321322", - "name": "沭阳县" - }, - { - "code": "321323", - "name": "泗阳县" - }, - { - "code": "321324", - "name": "泗洪县" - } - ] - } - ] - }, - { - "code": "330000", - "name": "浙江省", - "cityList": [ - { - "code": "330100", - "name": "杭州市", - "areaList": [ - { - "code": "330102", - "name": "上城区" - }, - { - "code": "330103", - "name": "下城区" - }, - { - "code": "330104", - "name": "江干区" - }, - { - "code": "330105", - "name": "拱墅区" - }, - { - "code": "330106", - "name": "西湖区" - }, - { - "code": "330108", - "name": "滨江区" - }, - { - "code": "330109", - "name": "萧山区" - }, - { - "code": "330110", - "name": "余杭区" - }, - { - "code": "330111", - "name": "富阳区" - }, - { - "code": "330112", - "name": "临安区" - }, - { - "code": "330122", - "name": "桐庐县" - }, - { - "code": "330127", - "name": "淳安县" - }, - { - "code": "330182", - "name": "建德市" - } - ] - }, - { - "code": "330200", - "name": "宁波市", - "areaList": [ - { - "code": "330203", - "name": "海曙区" - }, - { - "code": "330205", - "name": "江北区" - }, - { - "code": "330206", - "name": "北仑区" - }, - { - "code": "330211", - "name": "镇海区" - }, - { - "code": "330212", - "name": "鄞州区" - }, - { - "code": "330213", - "name": "奉化区" - }, - { - "code": "330225", - "name": "象山县" - }, - { - "code": "330226", - "name": "宁海县" - }, - { - "code": "330281", - "name": "余姚市" - }, - { - "code": "330282", - "name": "慈溪市" - } - ] - }, - { - "code": "330300", - "name": "温州市", - "areaList": [ - { - "code": "330302", - "name": "鹿城区" - }, - { - "code": "330303", - "name": "龙湾区" - }, - { - "code": "330304", - "name": "瓯海区" - }, - { - "code": "330305", - "name": "洞头区" - }, - { - "code": "330324", - "name": "永嘉县" - }, - { - "code": "330326", - "name": "平阳县" - }, - { - "code": "330327", - "name": "苍南县" - }, - { - "code": "330328", - "name": "文成县" - }, - { - "code": "330329", - "name": "泰顺县" - }, - { - "code": "330381", - "name": "瑞安市" - }, - { - "code": "330382", - "name": "乐清市" - }, - { - "code": "330383", - "name": "龙港市" - } - ] - }, - { - "code": "330400", - "name": "嘉兴市", - "areaList": [ - { - "code": "330402", - "name": "南湖区" - }, - { - "code": "330411", - "name": "秀洲区" - }, - { - "code": "330421", - "name": "嘉善县" - }, - { - "code": "330424", - "name": "海盐县" - }, - { - "code": "330481", - "name": "海宁市" - }, - { - "code": "330482", - "name": "平湖市" - }, - { - "code": "330483", - "name": "桐乡市" - } - ] - }, - { - "code": "330500", - "name": "湖州市", - "areaList": [ - { - "code": "330502", - "name": "吴兴区" - }, - { - "code": "330503", - "name": "南浔区" - }, - { - "code": "330521", - "name": "德清县" - }, - { - "code": "330522", - "name": "长兴县" - }, - { - "code": "330523", - "name": "安吉县" - } - ] - }, - { - "code": "330600", - "name": "绍兴市", - "areaList": [ - { - "code": "330602", - "name": "越城区" - }, - { - "code": "330603", - "name": "柯桥区" - }, - { - "code": "330604", - "name": "上虞区" - }, - { - "code": "330624", - "name": "新昌县" - }, - { - "code": "330681", - "name": "诸暨市" - }, - { - "code": "330683", - "name": "嵊州市" - } - ] - }, - { - "code": "330700", - "name": "金华市", - "areaList": [ - { - "code": "330702", - "name": "婺城区" - }, - { - "code": "330703", - "name": "金东区" - }, - { - "code": "330723", - "name": "武义县" - }, - { - "code": "330726", - "name": "浦江县" - }, - { - "code": "330727", - "name": "磐安县" - }, - { - "code": "330781", - "name": "兰溪市" - }, - { - "code": "330782", - "name": "义乌市" - }, - { - "code": "330783", - "name": "东阳市" - }, - { - "code": "330784", - "name": "永康市" - } - ] - }, - { - "code": "330800", - "name": "衢州市", - "areaList": [ - { - "code": "330802", - "name": "柯城区" - }, - { - "code": "330803", - "name": "衢江区" - }, - { - "code": "330822", - "name": "常山县" - }, - { - "code": "330824", - "name": "开化县" - }, - { - "code": "330825", - "name": "龙游县" - }, - { - "code": "330881", - "name": "江山市" - } - ] - }, - { - "code": "330900", - "name": "舟山市", - "areaList": [ - { - "code": "330902", - "name": "定海区" - }, - { - "code": "330903", - "name": "普陀区" - }, - { - "code": "330921", - "name": "岱山县" - }, - { - "code": "330922", - "name": "嵊泗县" - } - ] - }, - { - "code": "331000", - "name": "台州市", - "areaList": [ - { - "code": "331002", - "name": "椒江区" - }, - { - "code": "331003", - "name": "黄岩区" - }, - { - "code": "331004", - "name": "路桥区" - }, - { - "code": "331022", - "name": "三门县" - }, - { - "code": "331023", - "name": "天台县" - }, - { - "code": "331024", - "name": "仙居县" - }, - { - "code": "331081", - "name": "温岭市" - }, - { - "code": "331082", - "name": "临海市" - }, - { - "code": "331083", - "name": "玉环市" - } - ] - }, - { - "code": "331100", - "name": "丽水市", - "areaList": [ - { - "code": "331102", - "name": "莲都区" - }, - { - "code": "331121", - "name": "青田县" - }, - { - "code": "331122", - "name": "缙云县" - }, - { - "code": "331123", - "name": "遂昌县" - }, - { - "code": "331124", - "name": "松阳县" - }, - { - "code": "331125", - "name": "云和县" - }, - { - "code": "331126", - "name": "庆元县" - }, - { - "code": "331127", - "name": "景宁畲族自治县" - }, - { - "code": "331181", - "name": "龙泉市" - } - ] - } - ] - }, - { - "code": "340000", - "name": "安徽省", - "cityList": [ - { - "code": "340100", - "name": "合肥市", - "areaList": [ - { - "code": "340102", - "name": "瑶海区" - }, - { - "code": "340103", - "name": "庐阳区" - }, - { - "code": "340104", - "name": "蜀山区" - }, - { - "code": "340111", - "name": "包河区" - }, - { - "code": "340121", - "name": "长丰县" - }, - { - "code": "340122", - "name": "肥东县" - }, - { - "code": "340123", - "name": "肥西县" - }, - { - "code": "340124", - "name": "庐江县" - }, - { - "code": "340181", - "name": "巢湖市" - } - ] - }, - { - "code": "340200", - "name": "芜湖市", - "areaList": [ - { - "code": "340202", - "name": "镜湖区" - }, - { - "code": "340203", - "name": "弋江区" - }, - { - "code": "340207", - "name": "鸠江区" - }, - { - "code": "340208", - "name": "三山区" - }, - { - "code": "340221", - "name": "芜湖县" - }, - { - "code": "340222", - "name": "繁昌县" - }, - { - "code": "340223", - "name": "南陵县" - }, - { - "code": "340281", - "name": "无为市" - } - ] - }, - { - "code": "340300", - "name": "蚌埠市", - "areaList": [ - { - "code": "340302", - "name": "龙子湖区" - }, - { - "code": "340303", - "name": "蚌山区" - }, - { - "code": "340304", - "name": "禹会区" - }, - { - "code": "340311", - "name": "淮上区" - }, - { - "code": "340321", - "name": "怀远县" - }, - { - "code": "340322", - "name": "五河县" - }, - { - "code": "340323", - "name": "固镇县" - } - ] - }, - { - "code": "340400", - "name": "淮南市", - "areaList": [ - { - "code": "340402", - "name": "大通区" - }, - { - "code": "340403", - "name": "田家庵区" - }, - { - "code": "340404", - "name": "谢家集区" - }, - { - "code": "340405", - "name": "八公山区" - }, - { - "code": "340406", - "name": "潘集区" - }, - { - "code": "340421", - "name": "凤台县" - }, - { - "code": "340422", - "name": "寿县" - } - ] - }, - { - "code": "340500", - "name": "马鞍山市", - "areaList": [ - { - "code": "340503", - "name": "花山区" - }, - { - "code": "340504", - "name": "雨山区" - }, - { - "code": "340506", - "name": "博望区" - }, - { - "code": "340521", - "name": "当涂县" - }, - { - "code": "340522", - "name": "含山县" - }, - { - "code": "340523", - "name": "和县" - } - ] - }, - { - "code": "340600", - "name": "淮北市", - "areaList": [ - { - "code": "340602", - "name": "杜集区" - }, - { - "code": "340603", - "name": "相山区" - }, - { - "code": "340604", - "name": "烈山区" - }, - { - "code": "340621", - "name": "濉溪县" - } - ] - }, - { - "code": "340700", - "name": "铜陵市", - "areaList": [ - { - "code": "340705", - "name": "铜官区" - }, - { - "code": "340706", - "name": "义安区" - }, - { - "code": "340711", - "name": "郊区" - }, - { - "code": "340722", - "name": "枞阳县" - } - ] - }, - { - "code": "340800", - "name": "安庆市", - "areaList": [ - { - "code": "340802", - "name": "迎江区" - }, - { - "code": "340803", - "name": "大观区" - }, - { - "code": "340811", - "name": "宜秀区" - }, - { - "code": "340822", - "name": "怀宁县" - }, - { - "code": "340825", - "name": "太湖县" - }, - { - "code": "340826", - "name": "宿松县" - }, - { - "code": "340827", - "name": "望江县" - }, - { - "code": "340828", - "name": "岳西县" - }, - { - "code": "340881", - "name": "桐城市" - }, - { - "code": "340882", - "name": "潜山市" - } - ] - }, - { - "code": "341000", - "name": "黄山市", - "areaList": [ - { - "code": "341002", - "name": "屯溪区" - }, - { - "code": "341003", - "name": "黄山区" - }, - { - "code": "341004", - "name": "徽州区" - }, - { - "code": "341021", - "name": "歙县" - }, - { - "code": "341022", - "name": "休宁县" - }, - { - "code": "341023", - "name": "黟县" - }, - { - "code": "341024", - "name": "祁门县" - } - ] - }, - { - "code": "341100", - "name": "滁州市", - "areaList": [ - { - "code": "341102", - "name": "琅琊区" - }, - { - "code": "341103", - "name": "南谯区" - }, - { - "code": "341122", - "name": "来安县" - }, - { - "code": "341124", - "name": "全椒县" - }, - { - "code": "341125", - "name": "定远县" - }, - { - "code": "341126", - "name": "凤阳县" - }, - { - "code": "341181", - "name": "天长市" - }, - { - "code": "341182", - "name": "明光市" - } - ] - }, - { - "code": "341200", - "name": "阜阳市", - "areaList": [ - { - "code": "341202", - "name": "颍州区" - }, - { - "code": "341203", - "name": "颍东区" - }, - { - "code": "341204", - "name": "颍泉区" - }, - { - "code": "341221", - "name": "临泉县" - }, - { - "code": "341222", - "name": "太和县" - }, - { - "code": "341225", - "name": "阜南县" - }, - { - "code": "341226", - "name": "颍上县" - }, - { - "code": "341282", - "name": "界首市" - } - ] - }, - { - "code": "341300", - "name": "宿州市", - "areaList": [ - { - "code": "341302", - "name": "埇桥区" - }, - { - "code": "341321", - "name": "砀山县" - }, - { - "code": "341322", - "name": "萧县" - }, - { - "code": "341323", - "name": "灵璧县" - }, - { - "code": "341324", - "name": "泗县" - } - ] - }, - { - "code": "341500", - "name": "六安市", - "areaList": [ - { - "code": "341502", - "name": "金安区" - }, - { - "code": "341503", - "name": "裕安区" - }, - { - "code": "341504", - "name": "叶集区" - }, - { - "code": "341522", - "name": "霍邱县" - }, - { - "code": "341523", - "name": "舒城县" - }, - { - "code": "341524", - "name": "金寨县" - }, - { - "code": "341525", - "name": "霍山县" - } - ] - }, - { - "code": "341600", - "name": "亳州市", - "areaList": [ - { - "code": "341602", - "name": "谯城区" - }, - { - "code": "341621", - "name": "涡阳县" - }, - { - "code": "341622", - "name": "蒙城县" - }, - { - "code": "341623", - "name": "利辛县" - } - ] - }, - { - "code": "341700", - "name": "池州市", - "areaList": [ - { - "code": "341702", - "name": "贵池区" - }, - { - "code": "341721", - "name": "东至县" - }, - { - "code": "341722", - "name": "石台县" - }, - { - "code": "341723", - "name": "青阳县" - } - ] - }, - { - "code": "341800", - "name": "宣城市", - "areaList": [ - { - "code": "341802", - "name": "宣州区" - }, - { - "code": "341821", - "name": "郎溪县" - }, - { - "code": "341823", - "name": "泾县" - }, - { - "code": "341824", - "name": "绩溪县" - }, - { - "code": "341825", - "name": "旌德县" - }, - { - "code": "341881", - "name": "宁国市" - }, - { - "code": "341882", - "name": "广德市" - } - ] - } - ] - }, - { - "code": "350000", - "name": "福建省", - "cityList": [ - { - "code": "350100", - "name": "福州市", - "areaList": [ - { - "code": "350102", - "name": "鼓楼区" - }, - { - "code": "350103", - "name": "台江区" - }, - { - "code": "350104", - "name": "仓山区" - }, - { - "code": "350105", - "name": "马尾区" - }, - { - "code": "350111", - "name": "晋安区" - }, - { - "code": "350112", - "name": "长乐区" - }, - { - "code": "350121", - "name": "闽侯县" - }, - { - "code": "350122", - "name": "连江县" - }, - { - "code": "350123", - "name": "罗源县" - }, - { - "code": "350124", - "name": "闽清县" - }, - { - "code": "350125", - "name": "永泰县" - }, - { - "code": "350128", - "name": "平潭县" - }, - { - "code": "350181", - "name": "福清市" - } - ] - }, - { - "code": "350200", - "name": "厦门市", - "areaList": [ - { - "code": "350203", - "name": "思明区" - }, - { - "code": "350205", - "name": "海沧区" - }, - { - "code": "350206", - "name": "湖里区" - }, - { - "code": "350211", - "name": "集美区" - }, - { - "code": "350212", - "name": "同安区" - }, - { - "code": "350213", - "name": "翔安区" - } - ] - }, - { - "code": "350300", - "name": "莆田市", - "areaList": [ - { - "code": "350302", - "name": "城厢区" - }, - { - "code": "350303", - "name": "涵江区" - }, - { - "code": "350304", - "name": "荔城区" - }, - { - "code": "350305", - "name": "秀屿区" - }, - { - "code": "350322", - "name": "仙游县" - } - ] - }, - { - "code": "350400", - "name": "三明市", - "areaList": [ - { - "code": "350402", - "name": "梅列区" - }, - { - "code": "350403", - "name": "三元区" - }, - { - "code": "350421", - "name": "明溪县" - }, - { - "code": "350423", - "name": "清流县" - }, - { - "code": "350424", - "name": "宁化县" - }, - { - "code": "350425", - "name": "大田县" - }, - { - "code": "350426", - "name": "尤溪县" - }, - { - "code": "350427", - "name": "沙县" - }, - { - "code": "350428", - "name": "将乐县" - }, - { - "code": "350429", - "name": "泰宁县" - }, - { - "code": "350430", - "name": "建宁县" - }, - { - "code": "350481", - "name": "永安市" - } - ] - }, - { - "code": "350500", - "name": "泉州市", - "areaList": [ - { - "code": "350502", - "name": "鲤城区" - }, - { - "code": "350503", - "name": "丰泽区" - }, - { - "code": "350504", - "name": "洛江区" - }, - { - "code": "350505", - "name": "泉港区" - }, - { - "code": "350521", - "name": "惠安县" - }, - { - "code": "350524", - "name": "安溪县" - }, - { - "code": "350525", - "name": "永春县" - }, - { - "code": "350526", - "name": "德化县" - }, - { - "code": "350527", - "name": "金门县" - }, - { - "code": "350581", - "name": "石狮市" - }, - { - "code": "350582", - "name": "晋江市" - }, - { - "code": "350583", - "name": "南安市" - } - ] - }, - { - "code": "350600", - "name": "漳州市", - "areaList": [ - { - "code": "350602", - "name": "芗城区" - }, - { - "code": "350603", - "name": "龙文区" - }, - { - "code": "350622", - "name": "云霄县" - }, - { - "code": "350623", - "name": "漳浦县" - }, - { - "code": "350624", - "name": "诏安县" - }, - { - "code": "350625", - "name": "长泰县" - }, - { - "code": "350626", - "name": "东山县" - }, - { - "code": "350627", - "name": "南靖县" - }, - { - "code": "350628", - "name": "平和县" - }, - { - "code": "350629", - "name": "华安县" - }, - { - "code": "350681", - "name": "龙海市" - } - ] - }, - { - "code": "350700", - "name": "南平市", - "areaList": [ - { - "code": "350702", - "name": "延平区" - }, - { - "code": "350703", - "name": "建阳区" - }, - { - "code": "350721", - "name": "顺昌县" - }, - { - "code": "350722", - "name": "浦城县" - }, - { - "code": "350723", - "name": "光泽县" - }, - { - "code": "350724", - "name": "松溪县" - }, - { - "code": "350725", - "name": "政和县" - }, - { - "code": "350781", - "name": "邵武市" - }, - { - "code": "350782", - "name": "武夷山市" - }, - { - "code": "350783", - "name": "建瓯市" - } - ] - }, - { - "code": "350800", - "name": "龙岩市", - "areaList": [ - { - "code": "350802", - "name": "新罗区" - }, - { - "code": "350803", - "name": "永定区" - }, - { - "code": "350821", - "name": "长汀县" - }, - { - "code": "350823", - "name": "上杭县" - }, - { - "code": "350824", - "name": "武平县" - }, - { - "code": "350825", - "name": "连城县" - }, - { - "code": "350881", - "name": "漳平市" - } - ] - }, - { - "code": "350900", - "name": "宁德市", - "areaList": [ - { - "code": "350902", - "name": "蕉城区" - }, - { - "code": "350921", - "name": "霞浦县" - }, - { - "code": "350922", - "name": "古田县" - }, - { - "code": "350923", - "name": "屏南县" - }, - { - "code": "350924", - "name": "寿宁县" - }, - { - "code": "350925", - "name": "周宁县" - }, - { - "code": "350926", - "name": "柘荣县" - }, - { - "code": "350981", - "name": "福安市" - }, - { - "code": "350982", - "name": "福鼎市" - } - ] - } - ] - }, - { - "code": "360000", - "name": "江西省", - "cityList": [ - { - "code": "360100", - "name": "南昌市", - "areaList": [ - { - "code": "360102", - "name": "东湖区" - }, - { - "code": "360103", - "name": "西湖区" - }, - { - "code": "360104", - "name": "青云谱区" - }, - { - "code": "360111", - "name": "青山湖区" - }, - { - "code": "360112", - "name": "新建区" - }, - { - "code": "360113", - "name": "红谷滩区" - }, - { - "code": "360121", - "name": "南昌县" - }, - { - "code": "360123", - "name": "安义县" - }, - { - "code": "360124", - "name": "进贤县" - } - ] - }, - { - "code": "360200", - "name": "景德镇市", - "areaList": [ - { - "code": "360202", - "name": "昌江区" - }, - { - "code": "360203", - "name": "珠山区" - }, - { - "code": "360222", - "name": "浮梁县" - }, - { - "code": "360281", - "name": "乐平市" - } - ] - }, - { - "code": "360300", - "name": "萍乡市", - "areaList": [ - { - "code": "360302", - "name": "安源区" - }, - { - "code": "360313", - "name": "湘东区" - }, - { - "code": "360321", - "name": "莲花县" - }, - { - "code": "360322", - "name": "上栗县" - }, - { - "code": "360323", - "name": "芦溪县" - } - ] - }, - { - "code": "360400", - "name": "九江市", - "areaList": [ - { - "code": "360402", - "name": "濂溪区" - }, - { - "code": "360403", - "name": "浔阳区" - }, - { - "code": "360404", - "name": "柴桑区" - }, - { - "code": "360423", - "name": "武宁县" - }, - { - "code": "360424", - "name": "修水县" - }, - { - "code": "360425", - "name": "永修县" - }, - { - "code": "360426", - "name": "德安县" - }, - { - "code": "360428", - "name": "都昌县" - }, - { - "code": "360429", - "name": "湖口县" - }, - { - "code": "360430", - "name": "彭泽县" - }, - { - "code": "360481", - "name": "瑞昌市" - }, - { - "code": "360482", - "name": "共青城市" - }, - { - "code": "360483", - "name": "庐山市" - } - ] - }, - { - "code": "360500", - "name": "新余市", - "areaList": [ - { - "code": "360502", - "name": "渝水区" - }, - { - "code": "360521", - "name": "分宜县" - } - ] - }, - { - "code": "360600", - "name": "鹰潭市", - "areaList": [ - { - "code": "360602", - "name": "月湖区" - }, - { - "code": "360603", - "name": "余江区" - }, - { - "code": "360681", - "name": "贵溪市" - } - ] - }, - { - "code": "360700", - "name": "赣州市", - "areaList": [ - { - "code": "360702", - "name": "章贡区" - }, - { - "code": "360703", - "name": "南康区" - }, - { - "code": "360704", - "name": "赣县区" - }, - { - "code": "360722", - "name": "信丰县" - }, - { - "code": "360723", - "name": "大余县" - }, - { - "code": "360724", - "name": "上犹县" - }, - { - "code": "360725", - "name": "崇义县" - }, - { - "code": "360726", - "name": "安远县" - }, - { - "code": "360727", - "name": "龙南县" - }, - { - "code": "360728", - "name": "定南县" - }, - { - "code": "360729", - "name": "全南县" - }, - { - "code": "360730", - "name": "宁都县" - }, - { - "code": "360731", - "name": "于都县" - }, - { - "code": "360732", - "name": "兴国县" - }, - { - "code": "360733", - "name": "会昌县" - }, - { - "code": "360734", - "name": "寻乌县" - }, - { - "code": "360735", - "name": "石城县" - }, - { - "code": "360781", - "name": "瑞金市" - } - ] - }, - { - "code": "360800", - "name": "吉安市", - "areaList": [ - { - "code": "360802", - "name": "吉州区" - }, - { - "code": "360803", - "name": "青原区" - }, - { - "code": "360821", - "name": "吉安县" - }, - { - "code": "360822", - "name": "吉水县" - }, - { - "code": "360823", - "name": "峡江县" - }, - { - "code": "360824", - "name": "新干县" - }, - { - "code": "360825", - "name": "永丰县" - }, - { - "code": "360826", - "name": "泰和县" - }, - { - "code": "360827", - "name": "遂川县" - }, - { - "code": "360828", - "name": "万安县" - }, - { - "code": "360829", - "name": "安福县" - }, - { - "code": "360830", - "name": "永新县" - }, - { - "code": "360881", - "name": "井冈山市" - } - ] - }, - { - "code": "360900", - "name": "宜春市", - "areaList": [ - { - "code": "360902", - "name": "袁州区" - }, - { - "code": "360921", - "name": "奉新县" - }, - { - "code": "360922", - "name": "万载县" - }, - { - "code": "360923", - "name": "上高县" - }, - { - "code": "360924", - "name": "宜丰县" - }, - { - "code": "360925", - "name": "靖安县" - }, - { - "code": "360926", - "name": "铜鼓县" - }, - { - "code": "360981", - "name": "丰城市" - }, - { - "code": "360982", - "name": "樟树市" - }, - { - "code": "360983", - "name": "高安市" - } - ] - }, - { - "code": "361000", - "name": "抚州市", - "areaList": [ - { - "code": "361002", - "name": "临川区" - }, - { - "code": "361003", - "name": "东乡区" - }, - { - "code": "361021", - "name": "南城县" - }, - { - "code": "361022", - "name": "黎川县" - }, - { - "code": "361023", - "name": "南丰县" - }, - { - "code": "361024", - "name": "崇仁县" - }, - { - "code": "361025", - "name": "乐安县" - }, - { - "code": "361026", - "name": "宜黄县" - }, - { - "code": "361027", - "name": "金溪县" - }, - { - "code": "361028", - "name": "资溪县" - }, - { - "code": "361030", - "name": "广昌县" - } - ] - }, - { - "code": "361100", - "name": "上饶市", - "areaList": [ - { - "code": "361102", - "name": "信州区" - }, - { - "code": "361103", - "name": "广丰区" - }, - { - "code": "361104", - "name": "广信区" - }, - { - "code": "361123", - "name": "玉山县" - }, - { - "code": "361124", - "name": "铅山县" - }, - { - "code": "361125", - "name": "横峰县" - }, - { - "code": "361126", - "name": "弋阳县" - }, - { - "code": "361127", - "name": "余干县" - }, - { - "code": "361128", - "name": "鄱阳县" - }, - { - "code": "361129", - "name": "万年县" - }, - { - "code": "361130", - "name": "婺源县" - }, - { - "code": "361181", - "name": "德兴市" - } - ] - } - ] - }, - { - "code": "370000", - "name": "山东省", - "cityList": [ - { - "code": "370100", - "name": "济南市", - "areaList": [ - { - "code": "370102", - "name": "历下区" - }, - { - "code": "370103", - "name": "市中区" - }, - { - "code": "370104", - "name": "槐荫区" - }, - { - "code": "370105", - "name": "天桥区" - }, - { - "code": "370112", - "name": "历城区" - }, - { - "code": "370113", - "name": "长清区" - }, - { - "code": "370114", - "name": "章丘区" - }, - { - "code": "370115", - "name": "济阳区" - }, - { - "code": "370116", - "name": "莱芜区" - }, - { - "code": "370117", - "name": "钢城区" - }, - { - "code": "370124", - "name": "平阴县" - }, - { - "code": "370126", - "name": "商河县" - } - ] - }, - { - "code": "370200", - "name": "青岛市", - "areaList": [ - { - "code": "370202", - "name": "市南区" - }, - { - "code": "370203", - "name": "市北区" - }, - { - "code": "370211", - "name": "黄岛区" - }, - { - "code": "370212", - "name": "崂山区" - }, - { - "code": "370213", - "name": "李沧区" - }, - { - "code": "370214", - "name": "城阳区" - }, - { - "code": "370215", - "name": "即墨区" - }, - { - "code": "370281", - "name": "胶州市" - }, - { - "code": "370283", - "name": "平度市" - }, - { - "code": "370285", - "name": "莱西市" - } - ] - }, - { - "code": "370300", - "name": "淄博市", - "areaList": [ - { - "code": "370302", - "name": "淄川区" - }, - { - "code": "370303", - "name": "张店区" - }, - { - "code": "370304", - "name": "博山区" - }, - { - "code": "370305", - "name": "临淄区" - }, - { - "code": "370306", - "name": "周村区" - }, - { - "code": "370321", - "name": "桓台县" - }, - { - "code": "370322", - "name": "高青县" - }, - { - "code": "370323", - "name": "沂源县" - } - ] - }, - { - "code": "370400", - "name": "枣庄市", - "areaList": [ - { - "code": "370402", - "name": "市中区" - }, - { - "code": "370403", - "name": "薛城区" - }, - { - "code": "370404", - "name": "峄城区" - }, - { - "code": "370405", - "name": "台儿庄区" - }, - { - "code": "370406", - "name": "山亭区" - }, - { - "code": "370481", - "name": "滕州市" - } - ] - }, - { - "code": "370500", - "name": "东营市", - "areaList": [ - { - "code": "370502", - "name": "东营区" - }, - { - "code": "370503", - "name": "河口区" - }, - { - "code": "370505", - "name": "垦利区" - }, - { - "code": "370522", - "name": "利津县" - }, - { - "code": "370523", - "name": "广饶县" - } - ] - }, - { - "code": "370600", - "name": "烟台市", - "areaList": [ - { - "code": "370602", - "name": "芝罘区" - }, - { - "code": "370611", - "name": "福山区" - }, - { - "code": "370612", - "name": "牟平区" - }, - { - "code": "370613", - "name": "莱山区" - }, - { - "code": "370634", - "name": "长岛县" - }, - { - "code": "370681", - "name": "龙口市" - }, - { - "code": "370682", - "name": "莱阳市" - }, - { - "code": "370683", - "name": "莱州市" - }, - { - "code": "370684", - "name": "蓬莱市" - }, - { - "code": "370685", - "name": "招远市" - }, - { - "code": "370686", - "name": "栖霞市" - }, - { - "code": "370687", - "name": "海阳市" - } - ] - }, - { - "code": "370700", - "name": "潍坊市", - "areaList": [ - { - "code": "370702", - "name": "潍城区" - }, - { - "code": "370703", - "name": "寒亭区" - }, - { - "code": "370704", - "name": "坊子区" - }, - { - "code": "370705", - "name": "奎文区" - }, - { - "code": "370724", - "name": "临朐县" - }, - { - "code": "370725", - "name": "昌乐县" - }, - { - "code": "370781", - "name": "青州市" - }, - { - "code": "370782", - "name": "诸城市" - }, - { - "code": "370783", - "name": "寿光市" - }, - { - "code": "370784", - "name": "安丘市" - }, - { - "code": "370785", - "name": "高密市" - }, - { - "code": "370786", - "name": "昌邑市" - } - ] - }, - { - "code": "370800", - "name": "济宁市", - "areaList": [ - { - "code": "370811", - "name": "任城区" - }, - { - "code": "370812", - "name": "兖州区" - }, - { - "code": "370826", - "name": "微山县" - }, - { - "code": "370827", - "name": "鱼台县" - }, - { - "code": "370828", - "name": "金乡县" - }, - { - "code": "370829", - "name": "嘉祥县" - }, - { - "code": "370830", - "name": "汶上县" - }, - { - "code": "370831", - "name": "泗水县" - }, - { - "code": "370832", - "name": "梁山县" - }, - { - "code": "370881", - "name": "曲阜市" - }, - { - "code": "370883", - "name": "邹城市" - } - ] - }, - { - "code": "370900", - "name": "泰安市", - "areaList": [ - { - "code": "370902", - "name": "泰山区" - }, - { - "code": "370911", - "name": "岱岳区" - }, - { - "code": "370921", - "name": "宁阳县" - }, - { - "code": "370923", - "name": "东平县" - }, - { - "code": "370982", - "name": "新泰市" - }, - { - "code": "370983", - "name": "肥城市" - } - ] - }, - { - "code": "371000", - "name": "威海市", - "areaList": [ - { - "code": "371002", - "name": "环翠区" - }, - { - "code": "371003", - "name": "文登区" - }, - { - "code": "371082", - "name": "荣成市" - }, - { - "code": "371083", - "name": "乳山市" - } - ] - }, - { - "code": "371100", - "name": "日照市", - "areaList": [ - { - "code": "371102", - "name": "东港区" - }, - { - "code": "371103", - "name": "岚山区" - }, - { - "code": "371121", - "name": "五莲县" - }, - { - "code": "371122", - "name": "莒县" - } - ] - }, - { - "code": "371300", - "name": "临沂市", - "areaList": [ - { - "code": "371302", - "name": "兰山区" - }, - { - "code": "371311", - "name": "罗庄区" - }, - { - "code": "371312", - "name": "河东区" - }, - { - "code": "371321", - "name": "沂南县" - }, - { - "code": "371322", - "name": "郯城县" - }, - { - "code": "371323", - "name": "沂水县" - }, - { - "code": "371324", - "name": "兰陵县" - }, - { - "code": "371325", - "name": "费县" - }, - { - "code": "371326", - "name": "平邑县" - }, - { - "code": "371327", - "name": "莒南县" - }, - { - "code": "371328", - "name": "蒙阴县" - }, - { - "code": "371329", - "name": "临沭县" - } - ] - }, - { - "code": "371400", - "name": "德州市", - "areaList": [ - { - "code": "371402", - "name": "德城区" - }, - { - "code": "371403", - "name": "陵城区" - }, - { - "code": "371422", - "name": "宁津县" - }, - { - "code": "371423", - "name": "庆云县" - }, - { - "code": "371424", - "name": "临邑县" - }, - { - "code": "371425", - "name": "齐河县" - }, - { - "code": "371426", - "name": "平原县" - }, - { - "code": "371427", - "name": "夏津县" - }, - { - "code": "371428", - "name": "武城县" - }, - { - "code": "371481", - "name": "乐陵市" - }, - { - "code": "371482", - "name": "禹城市" - } - ] - }, - { - "code": "371500", - "name": "聊城市", - "areaList": [ - { - "code": "371502", - "name": "东昌府区" - }, - { - "code": "371503", - "name": "茌平区" - }, - { - "code": "371521", - "name": "阳谷县" - }, - { - "code": "371522", - "name": "莘县" - }, - { - "code": "371524", - "name": "东阿县" - }, - { - "code": "371525", - "name": "冠县" - }, - { - "code": "371526", - "name": "高唐县" - }, - { - "code": "371581", - "name": "临清市" - } - ] - }, - { - "code": "371600", - "name": "滨州市", - "areaList": [ - { - "code": "371602", - "name": "滨城区" - }, - { - "code": "371603", - "name": "沾化区" - }, - { - "code": "371621", - "name": "惠民县" - }, - { - "code": "371622", - "name": "阳信县" - }, - { - "code": "371623", - "name": "无棣县" - }, - { - "code": "371625", - "name": "博兴县" - }, - { - "code": "371681", - "name": "邹平市" - } - ] - }, - { - "code": "371700", - "name": "菏泽市", - "areaList": [ - { - "code": "371702", - "name": "牡丹区" - }, - { - "code": "371703", - "name": "定陶区" - }, - { - "code": "371721", - "name": "曹县" - }, - { - "code": "371722", - "name": "单县" - }, - { - "code": "371723", - "name": "成武县" - }, - { - "code": "371724", - "name": "巨野县" - }, - { - "code": "371725", - "name": "郓城县" - }, - { - "code": "371726", - "name": "鄄城县" - }, - { - "code": "371728", - "name": "东明县" - } - ] - } - ] - }, - { - "code": "410000", - "name": "河南省", - "cityList": [ - { - "code": "410100", - "name": "郑州市", - "areaList": [ - { - "code": "410102", - "name": "中原区" - }, - { - "code": "410103", - "name": "二七区" - }, - { - "code": "410104", - "name": "管城回族区" - }, - { - "code": "410105", - "name": "金水区" - }, - { - "code": "410106", - "name": "上街区" - }, - { - "code": "410108", - "name": "惠济区" - }, - { - "code": "410122", - "name": "中牟县" - }, - { - "code": "410181", - "name": "巩义市" - }, - { - "code": "410182", - "name": "荥阳市" - }, - { - "code": "410183", - "name": "新密市" - }, - { - "code": "410184", - "name": "新郑市" - }, - { - "code": "410185", - "name": "登封市" - } - ] - }, - { - "code": "410200", - "name": "开封市", - "areaList": [ - { - "code": "410202", - "name": "龙亭区" - }, - { - "code": "410203", - "name": "顺河回族区" - }, - { - "code": "410204", - "name": "鼓楼区" - }, - { - "code": "410205", - "name": "禹王台区" - }, - { - "code": "410212", - "name": "祥符区" - }, - { - "code": "410221", - "name": "杞县" - }, - { - "code": "410222", - "name": "通许县" - }, - { - "code": "410223", - "name": "尉氏县" - }, - { - "code": "410225", - "name": "兰考县" - } - ] - }, - { - "code": "410300", - "name": "洛阳市", - "areaList": [ - { - "code": "410302", - "name": "老城区" - }, - { - "code": "410303", - "name": "西工区" - }, - { - "code": "410304", - "name": "瀍河回族区" - }, - { - "code": "410305", - "name": "涧西区" - }, - { - "code": "410306", - "name": "吉利区" - }, - { - "code": "410311", - "name": "洛龙区" - }, - { - "code": "410322", - "name": "孟津县" - }, - { - "code": "410323", - "name": "新安县" - }, - { - "code": "410324", - "name": "栾川县" - }, - { - "code": "410325", - "name": "嵩县" - }, - { - "code": "410326", - "name": "汝阳县" - }, - { - "code": "410327", - "name": "宜阳县" - }, - { - "code": "410328", - "name": "洛宁县" - }, - { - "code": "410329", - "name": "伊川县" - }, - { - "code": "410381", - "name": "偃师市" - } - ] - }, - { - "code": "410400", - "name": "平顶山市", - "areaList": [ - { - "code": "410402", - "name": "新华区" - }, - { - "code": "410403", - "name": "卫东区" - }, - { - "code": "410404", - "name": "石龙区" - }, - { - "code": "410411", - "name": "湛河区" - }, - { - "code": "410421", - "name": "宝丰县" - }, - { - "code": "410422", - "name": "叶县" - }, - { - "code": "410423", - "name": "鲁山县" - }, - { - "code": "410425", - "name": "郏县" - }, - { - "code": "410481", - "name": "舞钢市" - }, - { - "code": "410482", - "name": "汝州市" - } - ] - }, - { - "code": "410500", - "name": "安阳市", - "areaList": [ - { - "code": "410502", - "name": "文峰区" - }, - { - "code": "410503", - "name": "北关区" - }, - { - "code": "410505", - "name": "殷都区" - }, - { - "code": "410506", - "name": "龙安区" - }, - { - "code": "410522", - "name": "安阳县" - }, - { - "code": "410523", - "name": "汤阴县" - }, - { - "code": "410526", - "name": "滑县" - }, - { - "code": "410527", - "name": "内黄县" - }, - { - "code": "410581", - "name": "林州市" - } - ] - }, - { - "code": "410600", - "name": "鹤壁市", - "areaList": [ - { - "code": "410602", - "name": "鹤山区" - }, - { - "code": "410603", - "name": "山城区" - }, - { - "code": "410611", - "name": "淇滨区" - }, - { - "code": "410621", - "name": "浚县" - }, - { - "code": "410622", - "name": "淇县" - } - ] - }, - { - "code": "410700", - "name": "新乡市", - "areaList": [ - { - "code": "410702", - "name": "红旗区" - }, - { - "code": "410703", - "name": "卫滨区" - }, - { - "code": "410704", - "name": "凤泉区" - }, - { - "code": "410711", - "name": "牧野区" - }, - { - "code": "410721", - "name": "新乡县" - }, - { - "code": "410724", - "name": "获嘉县" - }, - { - "code": "410725", - "name": "原阳县" - }, - { - "code": "410726", - "name": "延津县" - }, - { - "code": "410727", - "name": "封丘县" - }, - { - "code": "410781", - "name": "卫辉市" - }, - { - "code": "410782", - "name": "辉县市" - }, - { - "code": "410783", - "name": "长垣市" - } - ] - }, - { - "code": "410800", - "name": "焦作市", - "areaList": [ - { - "code": "410802", - "name": "解放区" - }, - { - "code": "410803", - "name": "中站区" - }, - { - "code": "410804", - "name": "马村区" - }, - { - "code": "410811", - "name": "山阳区" - }, - { - "code": "410821", - "name": "修武县" - }, - { - "code": "410822", - "name": "博爱县" - }, - { - "code": "410823", - "name": "武陟县" - }, - { - "code": "410825", - "name": "温县" - }, - { - "code": "410882", - "name": "沁阳市" - }, - { - "code": "410883", - "name": "孟州市" - } - ] - }, - { - "code": "410900", - "name": "濮阳市", - "areaList": [ - { - "code": "410902", - "name": "华龙区" - }, - { - "code": "410922", - "name": "清丰县" - }, - { - "code": "410923", - "name": "南乐县" - }, - { - "code": "410926", - "name": "范县" - }, - { - "code": "410927", - "name": "台前县" - }, - { - "code": "410928", - "name": "濮阳县" - } - ] - }, - { - "code": "411000", - "name": "许昌市", - "areaList": [ - { - "code": "411002", - "name": "魏都区" - }, - { - "code": "411003", - "name": "建安区" - }, - { - "code": "411024", - "name": "鄢陵县" - }, - { - "code": "411025", - "name": "襄城县" - }, - { - "code": "411081", - "name": "禹州市" - }, - { - "code": "411082", - "name": "长葛市" - } - ] - }, - { - "code": "411100", - "name": "漯河市", - "areaList": [ - { - "code": "411102", - "name": "源汇区" - }, - { - "code": "411103", - "name": "郾城区" - }, - { - "code": "411104", - "name": "召陵区" - }, - { - "code": "411121", - "name": "舞阳县" - }, - { - "code": "411122", - "name": "临颍县" - } - ] - }, - { - "code": "411200", - "name": "三门峡市", - "areaList": [ - { - "code": "411202", - "name": "湖滨区" - }, - { - "code": "411203", - "name": "陕州区" - }, - { - "code": "411221", - "name": "渑池县" - }, - { - "code": "411224", - "name": "卢氏县" - }, - { - "code": "411281", - "name": "义马市" - }, - { - "code": "411282", - "name": "灵宝市" - } - ] - }, - { - "code": "411300", - "name": "南阳市", - "areaList": [ - { - "code": "411302", - "name": "宛城区" - }, - { - "code": "411303", - "name": "卧龙区" - }, - { - "code": "411321", - "name": "南召县" - }, - { - "code": "411322", - "name": "方城县" - }, - { - "code": "411323", - "name": "西峡县" - }, - { - "code": "411324", - "name": "镇平县" - }, - { - "code": "411325", - "name": "内乡县" - }, - { - "code": "411326", - "name": "淅川县" - }, - { - "code": "411327", - "name": "社旗县" - }, - { - "code": "411328", - "name": "唐河县" - }, - { - "code": "411329", - "name": "新野县" - }, - { - "code": "411330", - "name": "桐柏县" - }, - { - "code": "411381", - "name": "邓州市" - } - ] - }, - { - "code": "411400", - "name": "商丘市", - "areaList": [ - { - "code": "411402", - "name": "梁园区" - }, - { - "code": "411403", - "name": "睢阳区" - }, - { - "code": "411421", - "name": "民权县" - }, - { - "code": "411422", - "name": "睢县" - }, - { - "code": "411423", - "name": "宁陵县" - }, - { - "code": "411424", - "name": "柘城县" - }, - { - "code": "411425", - "name": "虞城县" - }, - { - "code": "411426", - "name": "夏邑县" - }, - { - "code": "411481", - "name": "永城市" - } - ] - }, - { - "code": "411500", - "name": "信阳市", - "areaList": [ - { - "code": "411502", - "name": "浉河区" - }, - { - "code": "411503", - "name": "平桥区" - }, - { - "code": "411521", - "name": "罗山县" - }, - { - "code": "411522", - "name": "光山县" - }, - { - "code": "411523", - "name": "新县" - }, - { - "code": "411524", - "name": "商城县" - }, - { - "code": "411525", - "name": "固始县" - }, - { - "code": "411526", - "name": "潢川县" - }, - { - "code": "411527", - "name": "淮滨县" - }, - { - "code": "411528", - "name": "息县" - } - ] - }, - { - "code": "411600", - "name": "周口市", - "areaList": [ - { - "code": "411602", - "name": "川汇区" - }, - { - "code": "411603", - "name": "淮阳区" - }, - { - "code": "411621", - "name": "扶沟县" - }, - { - "code": "411622", - "name": "西华县" - }, - { - "code": "411623", - "name": "商水县" - }, - { - "code": "411624", - "name": "沈丘县" - }, - { - "code": "411625", - "name": "郸城县" - }, - { - "code": "411627", - "name": "太康县" - }, - { - "code": "411628", - "name": "鹿邑县" - }, - { - "code": "411681", - "name": "项城市" - } - ] - }, - { - "code": "411700", - "name": "驻马店市", - "areaList": [ - { - "code": "411702", - "name": "驿城区" - }, - { - "code": "411721", - "name": "西平县" - }, - { - "code": "411722", - "name": "上蔡县" - }, - { - "code": "411723", - "name": "平舆县" - }, - { - "code": "411724", - "name": "正阳县" - }, - { - "code": "411725", - "name": "确山县" - }, - { - "code": "411726", - "name": "泌阳县" - }, - { - "code": "411727", - "name": "汝南县" - }, - { - "code": "411728", - "name": "遂平县" - }, - { - "code": "411729", - "name": "新蔡县" - } - ] - }, - { - "code": "419001", - "name": "济源市", - "areaList": [] - } - ] - }, - { - "code": "420000", - "name": "湖北省", - "cityList": [ - { - "code": "420100", - "name": "武汉市", - "areaList": [ - { - "code": "420102", - "name": "江岸区" - }, - { - "code": "420103", - "name": "江汉区" - }, - { - "code": "420104", - "name": "硚口区" - }, - { - "code": "420105", - "name": "汉阳区" - }, - { - "code": "420106", - "name": "武昌区" - }, - { - "code": "420107", - "name": "青山区" - }, - { - "code": "420111", - "name": "洪山区" - }, - { - "code": "420112", - "name": "东西湖区" - }, - { - "code": "420113", - "name": "汉南区" - }, - { - "code": "420114", - "name": "蔡甸区" - }, - { - "code": "420115", - "name": "江夏区" - }, - { - "code": "420116", - "name": "黄陂区" - }, - { - "code": "420117", - "name": "新洲区" - } - ] - }, - { - "code": "420200", - "name": "黄石市", - "areaList": [ - { - "code": "420202", - "name": "黄石港区" - }, - { - "code": "420203", - "name": "西塞山区" - }, - { - "code": "420204", - "name": "下陆区" - }, - { - "code": "420205", - "name": "铁山区" - }, - { - "code": "420222", - "name": "阳新县" - }, - { - "code": "420281", - "name": "大冶市" - } - ] - }, - { - "code": "420300", - "name": "十堰市", - "areaList": [ - { - "code": "420302", - "name": "茅箭区" - }, - { - "code": "420303", - "name": "张湾区" - }, - { - "code": "420304", - "name": "郧阳区" - }, - { - "code": "420322", - "name": "郧西县" - }, - { - "code": "420323", - "name": "竹山县" - }, - { - "code": "420324", - "name": "竹溪县" - }, - { - "code": "420325", - "name": "房县" - }, - { - "code": "420381", - "name": "丹江口市" - } - ] - }, - { - "code": "420500", - "name": "宜昌市", - "areaList": [ - { - "code": "420502", - "name": "西陵区" - }, - { - "code": "420503", - "name": "伍家岗区" - }, - { - "code": "420504", - "name": "点军区" - }, - { - "code": "420505", - "name": "猇亭区" - }, - { - "code": "420506", - "name": "夷陵区" - }, - { - "code": "420525", - "name": "远安县" - }, - { - "code": "420526", - "name": "兴山县" - }, - { - "code": "420527", - "name": "秭归县" - }, - { - "code": "420528", - "name": "长阳土家族自治县" - }, - { - "code": "420529", - "name": "五峰土家族自治县" - }, - { - "code": "420581", - "name": "宜都市" - }, - { - "code": "420582", - "name": "当阳市" - }, - { - "code": "420583", - "name": "枝江市" - } - ] - }, - { - "code": "420600", - "name": "襄阳市", - "areaList": [ - { - "code": "420602", - "name": "襄城区" - }, - { - "code": "420606", - "name": "樊城区" - }, - { - "code": "420607", - "name": "襄州区" - }, - { - "code": "420624", - "name": "南漳县" - }, - { - "code": "420625", - "name": "谷城县" - }, - { - "code": "420626", - "name": "保康县" - }, - { - "code": "420682", - "name": "老河口市" - }, - { - "code": "420683", - "name": "枣阳市" - }, - { - "code": "420684", - "name": "宜城市" - } - ] - }, - { - "code": "420700", - "name": "鄂州市", - "areaList": [ - { - "code": "420702", - "name": "梁子湖区" - }, - { - "code": "420703", - "name": "华容区" - }, - { - "code": "420704", - "name": "鄂城区" - } - ] - }, - { - "code": "420800", - "name": "荆门市", - "areaList": [ - { - "code": "420802", - "name": "东宝区" - }, - { - "code": "420804", - "name": "掇刀区" - }, - { - "code": "420822", - "name": "沙洋县" - }, - { - "code": "420881", - "name": "钟祥市" - }, - { - "code": "420882", - "name": "京山市" - } - ] - }, - { - "code": "420900", - "name": "孝感市", - "areaList": [ - { - "code": "420902", - "name": "孝南区" - }, - { - "code": "420921", - "name": "孝昌县" - }, - { - "code": "420922", - "name": "大悟县" - }, - { - "code": "420923", - "name": "云梦县" - }, - { - "code": "420981", - "name": "应城市" - }, - { - "code": "420982", - "name": "安陆市" - }, - { - "code": "420984", - "name": "汉川市" - } - ] - }, - { - "code": "421000", - "name": "荆州市", - "areaList": [ - { - "code": "421002", - "name": "沙市区" - }, - { - "code": "421003", - "name": "荆州区" - }, - { - "code": "421022", - "name": "公安县" - }, - { - "code": "421023", - "name": "监利县" - }, - { - "code": "421024", - "name": "江陵县" - }, - { - "code": "421081", - "name": "石首市" - }, - { - "code": "421083", - "name": "洪湖市" - }, - { - "code": "421087", - "name": "松滋市" - } - ] - }, - { - "code": "421100", - "name": "黄冈市", - "areaList": [ - { - "code": "421102", - "name": "黄州区" - }, - { - "code": "421121", - "name": "团风县" - }, - { - "code": "421122", - "name": "红安县" - }, - { - "code": "421123", - "name": "罗田县" - }, - { - "code": "421124", - "name": "英山县" - }, - { - "code": "421125", - "name": "浠水县" - }, - { - "code": "421126", - "name": "蕲春县" - }, - { - "code": "421127", - "name": "黄梅县" - }, - { - "code": "421181", - "name": "麻城市" - }, - { - "code": "421182", - "name": "武穴市" - } - ] - }, - { - "code": "421200", - "name": "咸宁市", - "areaList": [ - { - "code": "421202", - "name": "咸安区" - }, - { - "code": "421221", - "name": "嘉鱼县" - }, - { - "code": "421222", - "name": "通城县" - }, - { - "code": "421223", - "name": "崇阳县" - }, - { - "code": "421224", - "name": "通山县" - }, - { - "code": "421281", - "name": "赤壁市" - } - ] - }, - { - "code": "421300", - "name": "随州市", - "areaList": [ - { - "code": "421303", - "name": "曾都区" - }, - { - "code": "421321", - "name": "随县" - }, - { - "code": "421381", - "name": "广水市" - } - ] - }, - { - "code": "422800", - "name": "恩施土家族苗族自治州", - "areaList": [ - { - "code": "422801", - "name": "恩施市" - }, - { - "code": "422802", - "name": "利川市" - }, - { - "code": "422822", - "name": "建始县" - }, - { - "code": "422823", - "name": "巴东县" - }, - { - "code": "422825", - "name": "宣恩县" - }, - { - "code": "422826", - "name": "咸丰县" - }, - { - "code": "422827", - "name": "来凤县" - }, - { - "code": "422828", - "name": "鹤峰县" - } - ] - }, - { - "code": "429004", - "name": "仙桃市", - "areaList": [] - }, - { - "code": "429005", - "name": "潜江市", - "areaList": [] - }, - { - "code": "429006", - "name": "天门市", - "areaList": [] - }, - { - "code": "429021", - "name": "神农架林区", - "areaList": [] - } - ] - }, - { - "code": "430000", - "name": "湖南省", - "cityList": [ - { - "code": "430100", - "name": "长沙市", - "areaList": [ - { - "code": "430102", - "name": "芙蓉区" - }, - { - "code": "430103", - "name": "天心区" - }, - { - "code": "430104", - "name": "岳麓区" - }, - { - "code": "430105", - "name": "开福区" - }, - { - "code": "430111", - "name": "雨花区" - }, - { - "code": "430112", - "name": "望城区" - }, - { - "code": "430121", - "name": "长沙县" - }, - { - "code": "430181", - "name": "浏阳市" - }, - { - "code": "430182", - "name": "宁乡市" - } - ] - }, - { - "code": "430200", - "name": "株洲市", - "areaList": [ - { - "code": "430202", - "name": "荷塘区" - }, - { - "code": "430203", - "name": "芦淞区" - }, - { - "code": "430204", - "name": "石峰区" - }, - { - "code": "430211", - "name": "天元区" - }, - { - "code": "430212", - "name": "渌口区" - }, - { - "code": "430223", - "name": "攸县" - }, - { - "code": "430224", - "name": "茶陵县" - }, - { - "code": "430225", - "name": "炎陵县" - }, - { - "code": "430281", - "name": "醴陵市" - } - ] - }, - { - "code": "430300", - "name": "湘潭市", - "areaList": [ - { - "code": "430302", - "name": "雨湖区" - }, - { - "code": "430304", - "name": "岳塘区" - }, - { - "code": "430321", - "name": "湘潭县" - }, - { - "code": "430381", - "name": "湘乡市" - }, - { - "code": "430382", - "name": "韶山市" - } - ] - }, - { - "code": "430400", - "name": "衡阳市", - "areaList": [ - { - "code": "430405", - "name": "珠晖区" - }, - { - "code": "430406", - "name": "雁峰区" - }, - { - "code": "430407", - "name": "石鼓区" - }, - { - "code": "430408", - "name": "蒸湘区" - }, - { - "code": "430412", - "name": "南岳区" - }, - { - "code": "430421", - "name": "衡阳县" - }, - { - "code": "430422", - "name": "衡南县" - }, - { - "code": "430423", - "name": "衡山县" - }, - { - "code": "430424", - "name": "衡东县" - }, - { - "code": "430426", - "name": "祁东县" - }, - { - "code": "430481", - "name": "耒阳市" - }, - { - "code": "430482", - "name": "常宁市" - } - ] - }, - { - "code": "430500", - "name": "邵阳市", - "areaList": [ - { - "code": "430502", - "name": "双清区" - }, - { - "code": "430503", - "name": "大祥区" - }, - { - "code": "430511", - "name": "北塔区" - }, - { - "code": "430522", - "name": "新邵县" - }, - { - "code": "430523", - "name": "邵阳县" - }, - { - "code": "430524", - "name": "隆回县" - }, - { - "code": "430525", - "name": "洞口县" - }, - { - "code": "430527", - "name": "绥宁县" - }, - { - "code": "430528", - "name": "新宁县" - }, - { - "code": "430529", - "name": "城步苗族自治县" - }, - { - "code": "430581", - "name": "武冈市" - }, - { - "code": "430582", - "name": "邵东市" - } - ] - }, - { - "code": "430600", - "name": "岳阳市", - "areaList": [ - { - "code": "430602", - "name": "岳阳楼区" - }, - { - "code": "430603", - "name": "云溪区" - }, - { - "code": "430611", - "name": "君山区" - }, - { - "code": "430621", - "name": "岳阳县" - }, - { - "code": "430623", - "name": "华容县" - }, - { - "code": "430624", - "name": "湘阴县" - }, - { - "code": "430626", - "name": "平江县" - }, - { - "code": "430681", - "name": "汨罗市" - }, - { - "code": "430682", - "name": "临湘市" - } - ] - }, - { - "code": "430700", - "name": "常德市", - "areaList": [ - { - "code": "430702", - "name": "武陵区" - }, - { - "code": "430703", - "name": "鼎城区" - }, - { - "code": "430721", - "name": "安乡县" - }, - { - "code": "430722", - "name": "汉寿县" - }, - { - "code": "430723", - "name": "澧县" - }, - { - "code": "430724", - "name": "临澧县" - }, - { - "code": "430725", - "name": "桃源县" - }, - { - "code": "430726", - "name": "石门县" - }, - { - "code": "430781", - "name": "津市市" - } - ] - }, - { - "code": "430800", - "name": "张家界市", - "areaList": [ - { - "code": "430802", - "name": "永定区" - }, - { - "code": "430811", - "name": "武陵源区" - }, - { - "code": "430821", - "name": "慈利县" - }, - { - "code": "430822", - "name": "桑植县" - } - ] - }, - { - "code": "430900", - "name": "益阳市", - "areaList": [ - { - "code": "430902", - "name": "资阳区" - }, - { - "code": "430903", - "name": "赫山区" - }, - { - "code": "430921", - "name": "南县" - }, - { - "code": "430922", - "name": "桃江县" - }, - { - "code": "430923", - "name": "安化县" - }, - { - "code": "430981", - "name": "沅江市" - } - ] - }, - { - "code": "431000", - "name": "郴州市", - "areaList": [ - { - "code": "431002", - "name": "北湖区" - }, - { - "code": "431003", - "name": "苏仙区" - }, - { - "code": "431021", - "name": "桂阳县" - }, - { - "code": "431022", - "name": "宜章县" - }, - { - "code": "431023", - "name": "永兴县" - }, - { - "code": "431024", - "name": "嘉禾县" - }, - { - "code": "431025", - "name": "临武县" - }, - { - "code": "431026", - "name": "汝城县" - }, - { - "code": "431027", - "name": "桂东县" - }, - { - "code": "431028", - "name": "安仁县" - }, - { - "code": "431081", - "name": "资兴市" - } - ] - }, - { - "code": "431100", - "name": "永州市", - "areaList": [ - { - "code": "431102", - "name": "零陵区" - }, - { - "code": "431103", - "name": "冷水滩区" - }, - { - "code": "431121", - "name": "祁阳县" - }, - { - "code": "431122", - "name": "东安县" - }, - { - "code": "431123", - "name": "双牌县" - }, - { - "code": "431124", - "name": "道县" - }, - { - "code": "431125", - "name": "江永县" - }, - { - "code": "431126", - "name": "宁远县" - }, - { - "code": "431127", - "name": "蓝山县" - }, - { - "code": "431128", - "name": "新田县" - }, - { - "code": "431129", - "name": "江华瑶族自治县" - } - ] - }, - { - "code": "431200", - "name": "怀化市", - "areaList": [ - { - "code": "431202", - "name": "鹤城区" - }, - { - "code": "431221", - "name": "中方县" - }, - { - "code": "431222", - "name": "沅陵县" - }, - { - "code": "431223", - "name": "辰溪县" - }, - { - "code": "431224", - "name": "溆浦县" - }, - { - "code": "431225", - "name": "会同县" - }, - { - "code": "431226", - "name": "麻阳苗族自治县" - }, - { - "code": "431227", - "name": "新晃侗族自治县" - }, - { - "code": "431228", - "name": "芷江侗族自治县" - }, - { - "code": "431229", - "name": "靖州苗族侗族自治县" - }, - { - "code": "431230", - "name": "通道侗族自治县" - }, - { - "code": "431281", - "name": "洪江市" - } - ] - }, - { - "code": "431300", - "name": "娄底市", - "areaList": [ - { - "code": "431302", - "name": "娄星区" - }, - { - "code": "431321", - "name": "双峰县" - }, - { - "code": "431322", - "name": "新化县" - }, - { - "code": "431381", - "name": "冷水江市" - }, - { - "code": "431382", - "name": "涟源市" - } - ] - }, - { - "code": "433100", - "name": "湘西土家族苗族自治州", - "areaList": [ - { - "code": "433101", - "name": "吉首市" - }, - { - "code": "433122", - "name": "泸溪县" - }, - { - "code": "433123", - "name": "凤凰县" - }, - { - "code": "433124", - "name": "花垣县" - }, - { - "code": "433125", - "name": "保靖县" - }, - { - "code": "433126", - "name": "古丈县" - }, - { - "code": "433127", - "name": "永顺县" - }, - { - "code": "433130", - "name": "龙山县" - } - ] - } - ] - }, - { - "code": "440000", - "name": "广东省", - "cityList": [ - { - "code": "440100", - "name": "广州市", - "areaList": [ - { - "code": "440103", - "name": "荔湾区" - }, - { - "code": "440104", - "name": "越秀区" - }, - { - "code": "440105", - "name": "海珠区" - }, - { - "code": "440106", - "name": "天河区" - }, - { - "code": "440111", - "name": "白云区" - }, - { - "code": "440112", - "name": "黄埔区" - }, - { - "code": "440113", - "name": "番禺区" - }, - { - "code": "440114", - "name": "花都区" - }, - { - "code": "440115", - "name": "南沙区" - }, - { - "code": "440117", - "name": "从化区" - }, - { - "code": "440118", - "name": "增城区" - } - ] - }, - { - "code": "440200", - "name": "韶关市", - "areaList": [ - { - "code": "440203", - "name": "武江区" - }, - { - "code": "440204", - "name": "浈江区" - }, - { - "code": "440205", - "name": "曲江区" - }, - { - "code": "440222", - "name": "始兴县" - }, - { - "code": "440224", - "name": "仁化县" - }, - { - "code": "440229", - "name": "翁源县" - }, - { - "code": "440232", - "name": "乳源瑶族自治县" - }, - { - "code": "440233", - "name": "新丰县" - }, - { - "code": "440281", - "name": "乐昌市" - }, - { - "code": "440282", - "name": "南雄市" - } - ] - }, - { - "code": "440300", - "name": "深圳市", - "areaList": [ - { - "code": "440303", - "name": "罗湖区" - }, - { - "code": "440304", - "name": "福田区" - }, - { - "code": "440305", - "name": "南山区" - }, - { - "code": "440306", - "name": "宝安区" - }, - { - "code": "440307", - "name": "龙岗区" - }, - { - "code": "440308", - "name": "盐田区" - }, - { - "code": "440309", - "name": "龙华区" - }, - { - "code": "440310", - "name": "坪山区" - }, - { - "code": "440311", - "name": "光明区" - } - ] - }, - { - "code": "440400", - "name": "珠海市", - "areaList": [ - { - "code": "440402", - "name": "香洲区" - }, - { - "code": "440403", - "name": "斗门区" - }, - { - "code": "440404", - "name": "金湾区" - } - ] - }, - { - "code": "440500", - "name": "汕头市", - "areaList": [ - { - "code": "440507", - "name": "龙湖区" - }, - { - "code": "440511", - "name": "金平区" - }, - { - "code": "440512", - "name": "濠江区" - }, - { - "code": "440513", - "name": "潮阳区" - }, - { - "code": "440514", - "name": "潮南区" - }, - { - "code": "440515", - "name": "澄海区" - }, - { - "code": "440523", - "name": "南澳县" - } - ] - }, - { - "code": "440600", - "name": "佛山市", - "areaList": [ - { - "code": "440604", - "name": "禅城区" - }, - { - "code": "440605", - "name": "南海区" - }, - { - "code": "440606", - "name": "顺德区" - }, - { - "code": "440607", - "name": "三水区" - }, - { - "code": "440608", - "name": "高明区" - } - ] - }, - { - "code": "440700", - "name": "江门市", - "areaList": [ - { - "code": "440703", - "name": "蓬江区" - }, - { - "code": "440704", - "name": "江海区" - }, - { - "code": "440705", - "name": "新会区" - }, - { - "code": "440781", - "name": "台山市" - }, - { - "code": "440783", - "name": "开平市" - }, - { - "code": "440784", - "name": "鹤山市" - }, - { - "code": "440785", - "name": "恩平市" - } - ] - }, - { - "code": "440800", - "name": "湛江市", - "areaList": [ - { - "code": "440802", - "name": "赤坎区" - }, - { - "code": "440803", - "name": "霞山区" - }, - { - "code": "440804", - "name": "坡头区" - }, - { - "code": "440811", - "name": "麻章区" - }, - { - "code": "440823", - "name": "遂溪县" - }, - { - "code": "440825", - "name": "徐闻县" - }, - { - "code": "440881", - "name": "廉江市" - }, - { - "code": "440882", - "name": "雷州市" - }, - { - "code": "440883", - "name": "吴川市" - } - ] - }, - { - "code": "440900", - "name": "茂名市", - "areaList": [ - { - "code": "440902", - "name": "茂南区" - }, - { - "code": "440904", - "name": "电白区" - }, - { - "code": "440981", - "name": "高州市" - }, - { - "code": "440982", - "name": "化州市" - }, - { - "code": "440983", - "name": "信宜市" - } - ] - }, - { - "code": "441200", - "name": "肇庆市", - "areaList": [ - { - "code": "441202", - "name": "端州区" - }, - { - "code": "441203", - "name": "鼎湖区" - }, - { - "code": "441204", - "name": "高要区" - }, - { - "code": "441223", - "name": "广宁县" - }, - { - "code": "441224", - "name": "怀集县" - }, - { - "code": "441225", - "name": "封开县" - }, - { - "code": "441226", - "name": "德庆县" - }, - { - "code": "441284", - "name": "四会市" - } - ] - }, - { - "code": "441300", - "name": "惠州市", - "areaList": [ - { - "code": "441302", - "name": "惠城区" - }, - { - "code": "441303", - "name": "惠阳区" - }, - { - "code": "441322", - "name": "博罗县" - }, - { - "code": "441323", - "name": "惠东县" - }, - { - "code": "441324", - "name": "龙门县" - } - ] - }, - { - "code": "441400", - "name": "梅州市", - "areaList": [ - { - "code": "441402", - "name": "梅江区" - }, - { - "code": "441403", - "name": "梅县区" - }, - { - "code": "441422", - "name": "大埔县" - }, - { - "code": "441423", - "name": "丰顺县" - }, - { - "code": "441424", - "name": "五华县" - }, - { - "code": "441426", - "name": "平远县" - }, - { - "code": "441427", - "name": "蕉岭县" - }, - { - "code": "441481", - "name": "兴宁市" - } - ] - }, - { - "code": "441500", - "name": "汕尾市", - "areaList": [ - { - "code": "441502", - "name": "城区" - }, - { - "code": "441521", - "name": "海丰县" - }, - { - "code": "441523", - "name": "陆河县" - }, - { - "code": "441581", - "name": "陆丰市" - } - ] - }, - { - "code": "441600", - "name": "河源市", - "areaList": [ - { - "code": "441602", - "name": "源城区" - }, - { - "code": "441621", - "name": "紫金县" - }, - { - "code": "441622", - "name": "龙川县" - }, - { - "code": "441623", - "name": "连平县" - }, - { - "code": "441624", - "name": "和平县" - }, - { - "code": "441625", - "name": "东源县" - } - ] - }, - { - "code": "441700", - "name": "阳江市", - "areaList": [ - { - "code": "441702", - "name": "江城区" - }, - { - "code": "441704", - "name": "阳东区" - }, - { - "code": "441721", - "name": "阳西县" - }, - { - "code": "441781", - "name": "阳春市" - } - ] - }, - { - "code": "441800", - "name": "清远市", - "areaList": [ - { - "code": "441802", - "name": "清城区" - }, - { - "code": "441803", - "name": "清新区" - }, - { - "code": "441821", - "name": "佛冈县" - }, - { - "code": "441823", - "name": "阳山县" - }, - { - "code": "441825", - "name": "连山壮族瑶族自治县" - }, - { - "code": "441826", - "name": "连南瑶族自治县" - }, - { - "code": "441881", - "name": "英德市" - }, - { - "code": "441882", - "name": "连州市" - } - ] - }, - { - "code": "441900", - "name": "东莞市", - "areaList": [] - }, - { - "code": "442000", - "name": "中山市", - "areaList": [] - }, - { - "code": "445100", - "name": "潮州市", - "areaList": [ - { - "code": "445102", - "name": "湘桥区" - }, - { - "code": "445103", - "name": "潮安区" - }, - { - "code": "445122", - "name": "饶平县" - } - ] - }, - { - "code": "445200", - "name": "揭阳市", - "areaList": [ - { - "code": "445202", - "name": "榕城区" - }, - { - "code": "445203", - "name": "揭东区" - }, - { - "code": "445222", - "name": "揭西县" - }, - { - "code": "445224", - "name": "惠来县" - }, - { - "code": "445281", - "name": "普宁市" - } - ] - }, - { - "code": "445300", - "name": "云浮市", - "areaList": [ - { - "code": "445302", - "name": "云城区" - }, - { - "code": "445303", - "name": "云安区" - }, - { - "code": "445321", - "name": "新兴县" - }, - { - "code": "445322", - "name": "郁南县" - }, - { - "code": "445381", - "name": "罗定市" - } - ] - } - ] - }, - { - "code": "450000", - "name": "广西壮族自治区", - "cityList": [ - { - "code": "450100", - "name": "南宁市", - "areaList": [ - { - "code": "450102", - "name": "兴宁区" - }, - { - "code": "450103", - "name": "青秀区" - }, - { - "code": "450105", - "name": "江南区" - }, - { - "code": "450107", - "name": "西乡塘区" - }, - { - "code": "450108", - "name": "良庆区" - }, - { - "code": "450109", - "name": "邕宁区" - }, - { - "code": "450110", - "name": "武鸣区" - }, - { - "code": "450123", - "name": "隆安县" - }, - { - "code": "450124", - "name": "马山县" - }, - { - "code": "450125", - "name": "上林县" - }, - { - "code": "450126", - "name": "宾阳县" - }, - { - "code": "450127", - "name": "横县" - } - ] - }, - { - "code": "450200", - "name": "柳州市", - "areaList": [ - { - "code": "450202", - "name": "城中区" - }, - { - "code": "450203", - "name": "鱼峰区" - }, - { - "code": "450204", - "name": "柳南区" - }, - { - "code": "450205", - "name": "柳北区" - }, - { - "code": "450206", - "name": "柳江区" - }, - { - "code": "450222", - "name": "柳城县" - }, - { - "code": "450223", - "name": "鹿寨县" - }, - { - "code": "450224", - "name": "融安县" - }, - { - "code": "450225", - "name": "融水苗族自治县" - }, - { - "code": "450226", - "name": "三江侗族自治县" - } - ] - }, - { - "code": "450300", - "name": "桂林市", - "areaList": [ - { - "code": "450302", - "name": "秀峰区" - }, - { - "code": "450303", - "name": "叠彩区" - }, - { - "code": "450304", - "name": "象山区" - }, - { - "code": "450305", - "name": "七星区" - }, - { - "code": "450311", - "name": "雁山区" - }, - { - "code": "450312", - "name": "临桂区" - }, - { - "code": "450321", - "name": "阳朔县" - }, - { - "code": "450323", - "name": "灵川县" - }, - { - "code": "450324", - "name": "全州县" - }, - { - "code": "450325", - "name": "兴安县" - }, - { - "code": "450326", - "name": "永福县" - }, - { - "code": "450327", - "name": "灌阳县" - }, - { - "code": "450328", - "name": "龙胜各族自治县" - }, - { - "code": "450329", - "name": "资源县" - }, - { - "code": "450330", - "name": "平乐县" - }, - { - "code": "450381", - "name": "荔浦市" - }, - { - "code": "450332", - "name": "恭城瑶族自治县" - } - ] - }, - { - "code": "450400", - "name": "梧州市", - "areaList": [ - { - "code": "450403", - "name": "万秀区" - }, - { - "code": "450405", - "name": "长洲区" - }, - { - "code": "450406", - "name": "龙圩区" - }, - { - "code": "450421", - "name": "苍梧县" - }, - { - "code": "450422", - "name": "藤县" - }, - { - "code": "450423", - "name": "蒙山县" - }, - { - "code": "450481", - "name": "岑溪市" - } - ] - }, - { - "code": "450500", - "name": "北海市", - "areaList": [ - { - "code": "450502", - "name": "海城区" - }, - { - "code": "450503", - "name": "银海区" - }, - { - "code": "450512", - "name": "铁山港区" - }, - { - "code": "450521", - "name": "合浦县" - } - ] - }, - { - "code": "450600", - "name": "防城港市", - "areaList": [ - { - "code": "450602", - "name": "港口区" - }, - { - "code": "450603", - "name": "防城区" - }, - { - "code": "450621", - "name": "上思县" - }, - { - "code": "450681", - "name": "东兴市" - } - ] - }, - { - "code": "450700", - "name": "钦州市", - "areaList": [ - { - "code": "450702", - "name": "钦南区" - }, - { - "code": "450703", - "name": "钦北区" - }, - { - "code": "450721", - "name": "灵山县" - }, - { - "code": "450722", - "name": "浦北县" - } - ] - }, - { - "code": "450800", - "name": "贵港市", - "areaList": [ - { - "code": "450802", - "name": "港北区" - }, - { - "code": "450803", - "name": "港南区" - }, - { - "code": "450804", - "name": "覃塘区" - }, - { - "code": "450821", - "name": "平南县" - }, - { - "code": "450881", - "name": "桂平市" - } - ] - }, - { - "code": "450900", - "name": "玉林市", - "areaList": [ - { - "code": "450902", - "name": "玉州区" - }, - { - "code": "450903", - "name": "福绵区" - }, - { - "code": "450921", - "name": "容县" - }, - { - "code": "450922", - "name": "陆川县" - }, - { - "code": "450923", - "name": "博白县" - }, - { - "code": "450924", - "name": "兴业县" - }, - { - "code": "450981", - "name": "北流市" - } - ] - }, - { - "code": "451000", - "name": "百色市", - "areaList": [ - { - "code": "451002", - "name": "右江区" - }, - { - "code": "451003", - "name": "田阳区" - }, - { - "code": "451022", - "name": "田东县" - }, - { - "code": "451024", - "name": "德保县" - }, - { - "code": "451026", - "name": "那坡县" - }, - { - "code": "451027", - "name": "凌云县" - }, - { - "code": "451028", - "name": "乐业县" - }, - { - "code": "451029", - "name": "田林县" - }, - { - "code": "451030", - "name": "西林县" - }, - { - "code": "451031", - "name": "隆林各族自治县" - }, - { - "code": "451081", - "name": "靖西市" - }, - { - "code": "451082", - "name": "平果市" - } - ] - }, - { - "code": "451100", - "name": "贺州市", - "areaList": [ - { - "code": "451102", - "name": "八步区" - }, - { - "code": "451103", - "name": "平桂区" - }, - { - "code": "451121", - "name": "昭平县" - }, - { - "code": "451122", - "name": "钟山县" - }, - { - "code": "451123", - "name": "富川瑶族自治县" - } - ] - }, - { - "code": "451200", - "name": "河池市", - "areaList": [ - { - "code": "451202", - "name": "金城江区" - }, - { - "code": "451203", - "name": "宜州区" - }, - { - "code": "451221", - "name": "南丹县" - }, - { - "code": "451222", - "name": "天峨县" - }, - { - "code": "451223", - "name": "凤山县" - }, - { - "code": "451224", - "name": "东兰县" - }, - { - "code": "451225", - "name": "罗城仫佬族自治县" - }, - { - "code": "451226", - "name": "环江毛南族自治县" - }, - { - "code": "451227", - "name": "巴马瑶族自治县" - }, - { - "code": "451228", - "name": "都安瑶族自治县" - }, - { - "code": "451229", - "name": "大化瑶族自治县" - } - ] - }, - { - "code": "451300", - "name": "来宾市", - "areaList": [ - { - "code": "451302", - "name": "兴宾区" - }, - { - "code": "451321", - "name": "忻城县" - }, - { - "code": "451322", - "name": "象州县" - }, - { - "code": "451323", - "name": "武宣县" - }, - { - "code": "451324", - "name": "金秀瑶族自治县" - }, - { - "code": "451381", - "name": "合山市" - } - ] - }, - { - "code": "451400", - "name": "崇左市", - "areaList": [ - { - "code": "451402", - "name": "江州区" - }, - { - "code": "451421", - "name": "扶绥县" - }, - { - "code": "451422", - "name": "宁明县" - }, - { - "code": "451423", - "name": "龙州县" - }, - { - "code": "451424", - "name": "大新县" - }, - { - "code": "451425", - "name": "天等县" - }, - { - "code": "451481", - "name": "凭祥市" - } - ] - } - ] - }, - { - "code": "460000", - "name": "海南省", - "cityList": [ - { - "code": "460100", - "name": "海口市", - "areaList": [ - { - "code": "460105", - "name": "秀英区" - }, - { - "code": "460106", - "name": "龙华区" - }, - { - "code": "460107", - "name": "琼山区" - }, - { - "code": "460108", - "name": "美兰区" - } - ] - }, - { - "code": "460200", - "name": "三亚市", - "areaList": [ - { - "code": "460202", - "name": "海棠区" - }, - { - "code": "460203", - "name": "吉阳区" - }, - { - "code": "460204", - "name": "天涯区" - }, - { - "code": "460205", - "name": "崖州区" - } - ] - }, - { - "code": "460300", - "name": "三沙市", - "areaList": [] - }, - { - "code": "460400", - "name": "儋州市", - "areaList": [] - }, - { - "code": "469001", - "name": "五指山市", - "areaList": [] - }, - { - "code": "469002", - "name": "琼海市", - "areaList": [] - }, - { - "code": "469005", - "name": "文昌市", - "areaList": [] - }, - { - "code": "469006", - "name": "万宁市", - "areaList": [] - }, - { - "code": "469007", - "name": "东方市", - "areaList": [] - }, - { - "code": "469021", - "name": "定安县", - "areaList": [] - }, - { - "code": "469022", - "name": "屯昌县", - "areaList": [] - }, - { - "code": "469023", - "name": "澄迈县", - "areaList": [] - }, - { - "code": "469024", - "name": "临高县", - "areaList": [] - }, - { - "code": "469025", - "name": "白沙黎族自治县", - "areaList": [] - }, - { - "code": "469026", - "name": "昌江黎族自治县", - "areaList": [] - }, - { - "code": "469027", - "name": "乐东黎族自治县", - "areaList": [] - }, - { - "code": "469028", - "name": "陵水黎族自治县", - "areaList": [] - }, - { - "code": "469029", - "name": "保亭黎族苗族自治县", - "areaList": [] - }, - { - "code": "469030", - "name": "琼中黎族苗族自治县", - "areaList": [] - } - ] - }, - { - "code": "500000", - "name": "重庆市", - "cityList": [ - { - "code": "500000", - "name": "重庆市", - "areaList": [ - { - "code": "500101", - "name": "万州区" - }, - { - "code": "500102", - "name": "涪陵区" - }, - { - "code": "500103", - "name": "渝中区" - }, - { - "code": "500104", - "name": "大渡口区" - }, - { - "code": "500105", - "name": "江北区" - }, - { - "code": "500106", - "name": "沙坪坝区" - }, - { - "code": "500107", - "name": "九龙坡区" - }, - { - "code": "500108", - "name": "南岸区" - }, - { - "code": "500109", - "name": "北碚区" - }, - { - "code": "500110", - "name": "綦江区" - }, - { - "code": "500111", - "name": "大足区" - }, - { - "code": "500112", - "name": "渝北区" - }, - { - "code": "500113", - "name": "巴南区" - }, - { - "code": "500114", - "name": "黔江区" - }, - { - "code": "500115", - "name": "长寿区" - }, - { - "code": "500116", - "name": "江津区" - }, - { - "code": "500117", - "name": "合川区" - }, - { - "code": "500118", - "name": "永川区" - }, - { - "code": "500119", - "name": "南川区" - }, - { - "code": "500120", - "name": "璧山区" - }, - { - "code": "500151", - "name": "铜梁区" - }, - { - "code": "500152", - "name": "潼南区" - }, - { - "code": "500153", - "name": "荣昌区" - }, - { - "code": "500154", - "name": "开州区" - }, - { - "code": "500155", - "name": "梁平区" - }, - { - "code": "500156", - "name": "武隆区" - }, - { - "code": "500229", - "name": "城口县" - }, - { - "code": "500230", - "name": "丰都县" - }, - { - "code": "500231", - "name": "垫江县" - }, - { - "code": "500233", - "name": "忠县" - }, - { - "code": "500235", - "name": "云阳县" - }, - { - "code": "500236", - "name": "奉节县" - }, - { - "code": "500237", - "name": "巫山县" - }, - { - "code": "500238", - "name": "巫溪县" - }, - { - "code": "500240", - "name": "石柱土家族自治县" - }, - { - "code": "500241", - "name": "秀山土家族苗族自治县" - }, - { - "code": "500242", - "name": "酉阳土家族苗族自治县" - }, - { - "code": "500243", - "name": "彭水苗族土家族自治县" - } - ] - } - ] - }, - { - "code": "510000", - "name": "四川省", - "cityList": [ - { - "code": "510100", - "name": "成都市", - "areaList": [ - { - "code": "510104", - "name": "锦江区" - }, - { - "code": "510105", - "name": "青羊区" - }, - { - "code": "510106", - "name": "金牛区" - }, - { - "code": "510107", - "name": "武侯区" - }, - { - "code": "510108", - "name": "成华区" - }, - { - "code": "510112", - "name": "龙泉驿区" - }, - { - "code": "510113", - "name": "青白江区" - }, - { - "code": "510114", - "name": "新都区" - }, - { - "code": "510115", - "name": "温江区" - }, - { - "code": "510116", - "name": "双流区" - }, - { - "code": "510117", - "name": "郫都区" - }, - { - "code": "510121", - "name": "金堂县" - }, - { - "code": "510129", - "name": "大邑县" - }, - { - "code": "510131", - "name": "蒲江县" - }, - { - "code": "510132", - "name": "新津县" - }, - { - "code": "510181", - "name": "都江堰市" - }, - { - "code": "510182", - "name": "彭州市" - }, - { - "code": "510183", - "name": "邛崃市" - }, - { - "code": "510184", - "name": "崇州市" - }, - { - "code": "510185", - "name": "简阳市" - } - ] - }, - { - "code": "510300", - "name": "自贡市", - "areaList": [ - { - "code": "510302", - "name": "自流井区" - }, - { - "code": "510303", - "name": "贡井区" - }, - { - "code": "510304", - "name": "大安区" - }, - { - "code": "510311", - "name": "沿滩区" - }, - { - "code": "510321", - "name": "荣县" - }, - { - "code": "510322", - "name": "富顺县" - } - ] - }, - { - "code": "510400", - "name": "攀枝花市", - "areaList": [ - { - "code": "510402", - "name": "东区" - }, - { - "code": "510403", - "name": "西区" - }, - { - "code": "510411", - "name": "仁和区" - }, - { - "code": "510421", - "name": "米易县" - }, - { - "code": "510422", - "name": "盐边县" - } - ] - }, - { - "code": "510500", - "name": "泸州市", - "areaList": [ - { - "code": "510502", - "name": "江阳区" - }, - { - "code": "510503", - "name": "纳溪区" - }, - { - "code": "510504", - "name": "龙马潭区" - }, - { - "code": "510521", - "name": "泸县" - }, - { - "code": "510522", - "name": "合江县" - }, - { - "code": "510524", - "name": "叙永县" - }, - { - "code": "510525", - "name": "古蔺县" - } - ] - }, - { - "code": "510600", - "name": "德阳市", - "areaList": [ - { - "code": "510603", - "name": "旌阳区" - }, - { - "code": "510604", - "name": "罗江区" - }, - { - "code": "510623", - "name": "中江县" - }, - { - "code": "510681", - "name": "广汉市" - }, - { - "code": "510682", - "name": "什邡市" - }, - { - "code": "510683", - "name": "绵竹市" - } - ] - }, - { - "code": "510700", - "name": "绵阳市", - "areaList": [ - { - "code": "510703", - "name": "涪城区" - }, - { - "code": "510704", - "name": "游仙区" - }, - { - "code": "510705", - "name": "安州区" - }, - { - "code": "510722", - "name": "三台县" - }, - { - "code": "510723", - "name": "盐亭县" - }, - { - "code": "510725", - "name": "梓潼县" - }, - { - "code": "510726", - "name": "北川羌族自治县" - }, - { - "code": "510727", - "name": "平武县" - }, - { - "code": "510781", - "name": "江油市" - } - ] - }, - { - "code": "510800", - "name": "广元市", - "areaList": [ - { - "code": "510802", - "name": "利州区" - }, - { - "code": "510811", - "name": "昭化区" - }, - { - "code": "510812", - "name": "朝天区" - }, - { - "code": "510821", - "name": "旺苍县" - }, - { - "code": "510822", - "name": "青川县" - }, - { - "code": "510823", - "name": "剑阁县" - }, - { - "code": "510824", - "name": "苍溪县" - } - ] - }, - { - "code": "510900", - "name": "遂宁市", - "areaList": [ - { - "code": "510903", - "name": "船山区" - }, - { - "code": "510904", - "name": "安居区" - }, - { - "code": "510921", - "name": "蓬溪县" - }, - { - "code": "510923", - "name": "大英县" - }, - { - "code": "510981", - "name": "射洪市" - } - ] - }, - { - "code": "511000", - "name": "内江市", - "areaList": [ - { - "code": "511002", - "name": "市中区" - }, - { - "code": "511011", - "name": "东兴区" - }, - { - "code": "511024", - "name": "威远县" - }, - { - "code": "511025", - "name": "资中县" - }, - { - "code": "511083", - "name": "隆昌市" - } - ] - }, - { - "code": "511100", - "name": "乐山市", - "areaList": [ - { - "code": "511102", - "name": "市中区" - }, - { - "code": "511111", - "name": "沙湾区" - }, - { - "code": "511112", - "name": "五通桥区" - }, - { - "code": "511113", - "name": "金口河区" - }, - { - "code": "511123", - "name": "犍为县" - }, - { - "code": "511124", - "name": "井研县" - }, - { - "code": "511126", - "name": "夹江县" - }, - { - "code": "511129", - "name": "沐川县" - }, - { - "code": "511132", - "name": "峨边彝族自治县" - }, - { - "code": "511133", - "name": "马边彝族自治县" - }, - { - "code": "511181", - "name": "峨眉山市" - } - ] - }, - { - "code": "511300", - "name": "南充市", - "areaList": [ - { - "code": "511302", - "name": "顺庆区" - }, - { - "code": "511303", - "name": "高坪区" - }, - { - "code": "511304", - "name": "嘉陵区" - }, - { - "code": "511321", - "name": "南部县" - }, - { - "code": "511322", - "name": "营山县" - }, - { - "code": "511323", - "name": "蓬安县" - }, - { - "code": "511324", - "name": "仪陇县" - }, - { - "code": "511325", - "name": "西充县" - }, - { - "code": "511381", - "name": "阆中市" - } - ] - }, - { - "code": "511400", - "name": "眉山市", - "areaList": [ - { - "code": "511402", - "name": "东坡区" - }, - { - "code": "511403", - "name": "彭山区" - }, - { - "code": "511421", - "name": "仁寿县" - }, - { - "code": "511423", - "name": "洪雅县" - }, - { - "code": "511424", - "name": "丹棱县" - }, - { - "code": "511425", - "name": "青神县" - } - ] - }, - { - "code": "511500", - "name": "宜宾市", - "areaList": [ - { - "code": "511502", - "name": "翠屏区" - }, - { - "code": "511503", - "name": "南溪区" - }, - { - "code": "511504", - "name": "叙州区" - }, - { - "code": "511523", - "name": "江安县" - }, - { - "code": "511524", - "name": "长宁县" - }, - { - "code": "511525", - "name": "高县" - }, - { - "code": "511526", - "name": "珙县" - }, - { - "code": "511527", - "name": "筠连县" - }, - { - "code": "511528", - "name": "兴文县" - }, - { - "code": "511529", - "name": "屏山县" - } - ] - }, - { - "code": "511600", - "name": "广安市", - "areaList": [ - { - "code": "511602", - "name": "广安区" - }, - { - "code": "511603", - "name": "前锋区" - }, - { - "code": "511621", - "name": "岳池县" - }, - { - "code": "511622", - "name": "武胜县" - }, - { - "code": "511623", - "name": "邻水县" - }, - { - "code": "511681", - "name": "华蓥市" - } - ] - }, - { - "code": "511700", - "name": "达州市", - "areaList": [ - { - "code": "511702", - "name": "通川区" - }, - { - "code": "511703", - "name": "达川区" - }, - { - "code": "511722", - "name": "宣汉县" - }, - { - "code": "511723", - "name": "开江县" - }, - { - "code": "511724", - "name": "大竹县" - }, - { - "code": "511725", - "name": "渠县" - }, - { - "code": "511781", - "name": "万源市" - } - ] - }, - { - "code": "511800", - "name": "雅安市", - "areaList": [ - { - "code": "511802", - "name": "雨城区" - }, - { - "code": "511803", - "name": "名山区" - }, - { - "code": "511822", - "name": "荥经县" - }, - { - "code": "511823", - "name": "汉源县" - }, - { - "code": "511824", - "name": "石棉县" - }, - { - "code": "511825", - "name": "天全县" - }, - { - "code": "511826", - "name": "芦山县" - }, - { - "code": "511827", - "name": "宝兴县" - } - ] - }, - { - "code": "511900", - "name": "巴中市", - "areaList": [ - { - "code": "511902", - "name": "巴州区" - }, - { - "code": "511903", - "name": "恩阳区" - }, - { - "code": "511921", - "name": "通江县" - }, - { - "code": "511922", - "name": "南江县" - }, - { - "code": "511923", - "name": "平昌县" - } - ] - }, - { - "code": "512000", - "name": "资阳市", - "areaList": [ - { - "code": "512002", - "name": "雁江区" - }, - { - "code": "512021", - "name": "安岳县" - }, - { - "code": "512022", - "name": "乐至县" - } - ] - }, - { - "code": "513200", - "name": "阿坝藏族羌族自治州", - "areaList": [ - { - "code": "513201", - "name": "马尔康市" - }, - { - "code": "513221", - "name": "汶川县" - }, - { - "code": "513222", - "name": "理县" - }, - { - "code": "513223", - "name": "茂县" - }, - { - "code": "513224", - "name": "松潘县" - }, - { - "code": "513225", - "name": "九寨沟县" - }, - { - "code": "513226", - "name": "金川县" - }, - { - "code": "513227", - "name": "小金县" - }, - { - "code": "513228", - "name": "黑水县" - }, - { - "code": "513230", - "name": "壤塘县" - }, - { - "code": "513231", - "name": "阿坝县" - }, - { - "code": "513232", - "name": "若尔盖县" - }, - { - "code": "513233", - "name": "红原县" - } - ] - }, - { - "code": "513300", - "name": "甘孜藏族自治州", - "areaList": [ - { - "code": "513301", - "name": "康定市" - }, - { - "code": "513322", - "name": "泸定县" - }, - { - "code": "513323", - "name": "丹巴县" - }, - { - "code": "513324", - "name": "九龙县" - }, - { - "code": "513325", - "name": "雅江县" - }, - { - "code": "513326", - "name": "道孚县" - }, - { - "code": "513327", - "name": "炉霍县" - }, - { - "code": "513328", - "name": "甘孜县" - }, - { - "code": "513329", - "name": "新龙县" - }, - { - "code": "513330", - "name": "德格县" - }, - { - "code": "513331", - "name": "白玉县" - }, - { - "code": "513332", - "name": "石渠县" - }, - { - "code": "513333", - "name": "色达县" - }, - { - "code": "513334", - "name": "理塘县" - }, - { - "code": "513335", - "name": "巴塘县" - }, - { - "code": "513336", - "name": "乡城县" - }, - { - "code": "513337", - "name": "稻城县" - }, - { - "code": "513338", - "name": "得荣县" - } - ] - }, - { - "code": "513400", - "name": "凉山彝族自治州", - "areaList": [ - { - "code": "513401", - "name": "西昌市" - }, - { - "code": "513422", - "name": "木里藏族自治县" - }, - { - "code": "513423", - "name": "盐源县" - }, - { - "code": "513424", - "name": "德昌县" - }, - { - "code": "513425", - "name": "会理县" - }, - { - "code": "513426", - "name": "会东县" - }, - { - "code": "513427", - "name": "宁南县" - }, - { - "code": "513428", - "name": "普格县" - }, - { - "code": "513429", - "name": "布拖县" - }, - { - "code": "513430", - "name": "金阳县" - }, - { - "code": "513431", - "name": "昭觉县" - }, - { - "code": "513432", - "name": "喜德县" - }, - { - "code": "513433", - "name": "冕宁县" - }, - { - "code": "513434", - "name": "越西县" - }, - { - "code": "513435", - "name": "甘洛县" - }, - { - "code": "513436", - "name": "美姑县" - }, - { - "code": "513437", - "name": "雷波县" - } - ] - } - ] - }, - { - "code": "520000", - "name": "贵州省", - "cityList": [ - { - "code": "520100", - "name": "贵阳市", - "areaList": [ - { - "code": "520102", - "name": "南明区" - }, - { - "code": "520103", - "name": "云岩区" - }, - { - "code": "520111", - "name": "花溪区" - }, - { - "code": "520112", - "name": "乌当区" - }, - { - "code": "520113", - "name": "白云区" - }, - { - "code": "520115", - "name": "观山湖区" - }, - { - "code": "520121", - "name": "开阳县" - }, - { - "code": "520122", - "name": "息烽县" - }, - { - "code": "520123", - "name": "修文县" - }, - { - "code": "520181", - "name": "清镇市" - } - ] - }, - { - "code": "520200", - "name": "六盘水市", - "areaList": [ - { - "code": "520201", - "name": "钟山区" - }, - { - "code": "520203", - "name": "六枝特区" - }, - { - "code": "520221", - "name": "水城县" - }, - { - "code": "520281", - "name": "盘州市" - } - ] - }, - { - "code": "520300", - "name": "遵义市", - "areaList": [ - { - "code": "520302", - "name": "红花岗区" - }, - { - "code": "520303", - "name": "汇川区" - }, - { - "code": "520304", - "name": "播州区" - }, - { - "code": "520322", - "name": "桐梓县" - }, - { - "code": "520323", - "name": "绥阳县" - }, - { - "code": "520324", - "name": "正安县" - }, - { - "code": "520325", - "name": "道真仡佬族苗族自治县" - }, - { - "code": "520326", - "name": "务川仡佬族苗族自治县" - }, - { - "code": "520327", - "name": "凤冈县" - }, - { - "code": "520328", - "name": "湄潭县" - }, - { - "code": "520329", - "name": "余庆县" - }, - { - "code": "520330", - "name": "习水县" - }, - { - "code": "520381", - "name": "赤水市" - }, - { - "code": "520382", - "name": "仁怀市" - } - ] - }, - { - "code": "520400", - "name": "安顺市", - "areaList": [ - { - "code": "520402", - "name": "西秀区" - }, - { - "code": "520403", - "name": "平坝区" - }, - { - "code": "520422", - "name": "普定县" - }, - { - "code": "520423", - "name": "镇宁布依族苗族自治县" - }, - { - "code": "520424", - "name": "关岭布依族苗族自治县" - }, - { - "code": "520425", - "name": "紫云苗族布依族自治县" - } - ] - }, - { - "code": "520500", - "name": "毕节市", - "areaList": [ - { - "code": "520502", - "name": "七星关区" - }, - { - "code": "520521", - "name": "大方县" - }, - { - "code": "520522", - "name": "黔西县" - }, - { - "code": "520523", - "name": "金沙县" - }, - { - "code": "520524", - "name": "织金县" - }, - { - "code": "520525", - "name": "纳雍县" - }, - { - "code": "520526", - "name": "威宁彝族回族苗族自治县" - }, - { - "code": "520527", - "name": "赫章县" - } - ] - }, - { - "code": "520600", - "name": "铜仁市", - "areaList": [ - { - "code": "520602", - "name": "碧江区" - }, - { - "code": "520603", - "name": "万山区" - }, - { - "code": "520621", - "name": "江口县" - }, - { - "code": "520622", - "name": "玉屏侗族自治县" - }, - { - "code": "520623", - "name": "石阡县" - }, - { - "code": "520624", - "name": "思南县" - }, - { - "code": "520625", - "name": "印江土家族苗族自治县" - }, - { - "code": "520626", - "name": "德江县" - }, - { - "code": "520627", - "name": "沿河土家族自治县" - }, - { - "code": "520628", - "name": "松桃苗族自治县" - } - ] - }, - { - "code": "522300", - "name": "黔西南布依族苗族自治州", - "areaList": [ - { - "code": "522301", - "name": "兴义市" - }, - { - "code": "522302", - "name": "兴仁市" - }, - { - "code": "522323", - "name": "普安县" - }, - { - "code": "522324", - "name": "晴隆县" - }, - { - "code": "522325", - "name": "贞丰县" - }, - { - "code": "522326", - "name": "望谟县" - }, - { - "code": "522327", - "name": "册亨县" - }, - { - "code": "522328", - "name": "安龙县" - } - ] - }, - { - "code": "522600", - "name": "黔东南苗族侗族自治州", - "areaList": [ - { - "code": "522601", - "name": "凯里市" - }, - { - "code": "522622", - "name": "黄平县" - }, - { - "code": "522623", - "name": "施秉县" - }, - { - "code": "522624", - "name": "三穗县" - }, - { - "code": "522625", - "name": "镇远县" - }, - { - "code": "522626", - "name": "岑巩县" - }, - { - "code": "522627", - "name": "天柱县" - }, - { - "code": "522628", - "name": "锦屏县" - }, - { - "code": "522629", - "name": "剑河县" - }, - { - "code": "522630", - "name": "台江县" - }, - { - "code": "522631", - "name": "黎平县" - }, - { - "code": "522632", - "name": "榕江县" - }, - { - "code": "522633", - "name": "从江县" - }, - { - "code": "522634", - "name": "雷山县" - }, - { - "code": "522635", - "name": "麻江县" - }, - { - "code": "522636", - "name": "丹寨县" - } - ] - }, - { - "code": "522700", - "name": "黔南布依族苗族自治州", - "areaList": [ - { - "code": "522701", - "name": "都匀市" - }, - { - "code": "522702", - "name": "福泉市" - }, - { - "code": "522722", - "name": "荔波县" - }, - { - "code": "522723", - "name": "贵定县" - }, - { - "code": "522725", - "name": "瓮安县" - }, - { - "code": "522726", - "name": "独山县" - }, - { - "code": "522727", - "name": "平塘县" - }, - { - "code": "522728", - "name": "罗甸县" - }, - { - "code": "522729", - "name": "长顺县" - }, - { - "code": "522730", - "name": "龙里县" - }, - { - "code": "522731", - "name": "惠水县" - }, - { - "code": "522732", - "name": "三都水族自治县" - } - ] - } - ] - }, - { - "code": "530000", - "name": "云南省", - "cityList": [ - { - "code": "530100", - "name": "昆明市", - "areaList": [ - { - "code": "530102", - "name": "五华区" - }, - { - "code": "530103", - "name": "盘龙区" - }, - { - "code": "530111", - "name": "官渡区" - }, - { - "code": "530112", - "name": "西山区" - }, - { - "code": "530113", - "name": "东川区" - }, - { - "code": "530114", - "name": "呈贡区" - }, - { - "code": "530115", - "name": "晋宁区" - }, - { - "code": "530124", - "name": "富民县" - }, - { - "code": "530125", - "name": "宜良县" - }, - { - "code": "530126", - "name": "石林彝族自治县" - }, - { - "code": "530127", - "name": "嵩明县" - }, - { - "code": "530128", - "name": "禄劝彝族苗族自治县" - }, - { - "code": "530129", - "name": "寻甸回族彝族自治县" - }, - { - "code": "530181", - "name": "安宁市" - } - ] - }, - { - "code": "530300", - "name": "曲靖市", - "areaList": [ - { - "code": "530302", - "name": "麒麟区" - }, - { - "code": "530303", - "name": "沾益区" - }, - { - "code": "530304", - "name": "马龙区" - }, - { - "code": "530322", - "name": "陆良县" - }, - { - "code": "530323", - "name": "师宗县" - }, - { - "code": "530324", - "name": "罗平县" - }, - { - "code": "530325", - "name": "富源县" - }, - { - "code": "530326", - "name": "会泽县" - }, - { - "code": "530381", - "name": "宣威市" - } - ] - }, - { - "code": "530400", - "name": "玉溪市", - "areaList": [ - { - "code": "530402", - "name": "红塔区" - }, - { - "code": "530403", - "name": "江川区" - }, - { - "code": "530423", - "name": "通海县" - }, - { - "code": "530424", - "name": "华宁县" - }, - { - "code": "530425", - "name": "易门县" - }, - { - "code": "530426", - "name": "峨山彝族自治县" - }, - { - "code": "530427", - "name": "新平彝族傣族自治县" - }, - { - "code": "530428", - "name": "元江哈尼族彝族傣族自治县" - }, - { - "code": "530481", - "name": "澄江市" - } - ] - }, - { - "code": "530500", - "name": "保山市", - "areaList": [ - { - "code": "530502", - "name": "隆阳区" - }, - { - "code": "530521", - "name": "施甸县" - }, - { - "code": "530523", - "name": "龙陵县" - }, - { - "code": "530524", - "name": "昌宁县" - }, - { - "code": "530581", - "name": "腾冲市" - } - ] - }, - { - "code": "530600", - "name": "昭通市", - "areaList": [ - { - "code": "530602", - "name": "昭阳区" - }, - { - "code": "530621", - "name": "鲁甸县" - }, - { - "code": "530622", - "name": "巧家县" - }, - { - "code": "530623", - "name": "盐津县" - }, - { - "code": "530624", - "name": "大关县" - }, - { - "code": "530625", - "name": "永善县" - }, - { - "code": "530626", - "name": "绥江县" - }, - { - "code": "530627", - "name": "镇雄县" - }, - { - "code": "530628", - "name": "彝良县" - }, - { - "code": "530629", - "name": "威信县" - }, - { - "code": "530681", - "name": "水富市" - } - ] - }, - { - "code": "530700", - "name": "丽江市", - "areaList": [ - { - "code": "530702", - "name": "古城区" - }, - { - "code": "530721", - "name": "玉龙纳西族自治县" - }, - { - "code": "530722", - "name": "永胜县" - }, - { - "code": "530723", - "name": "华坪县" - }, - { - "code": "530724", - "name": "宁蒗彝族自治县" - } - ] - }, - { - "code": "530800", - "name": "普洱市", - "areaList": [ - { - "code": "530802", - "name": "思茅区" - }, - { - "code": "530821", - "name": "宁洱哈尼族彝族自治县" - }, - { - "code": "530822", - "name": "墨江哈尼族自治县" - }, - { - "code": "530823", - "name": "景东彝族自治县" - }, - { - "code": "530824", - "name": "景谷傣族彝族自治县" - }, - { - "code": "530825", - "name": "镇沅彝族哈尼族拉祜族自治县" - }, - { - "code": "530826", - "name": "江城哈尼族彝族自治县" - }, - { - "code": "530827", - "name": "孟连傣族拉祜族佤族自治县" - }, - { - "code": "530828", - "name": "澜沧拉祜族自治县" - }, - { - "code": "530829", - "name": "西盟佤族自治县" - } - ] - }, - { - "code": "530900", - "name": "临沧市", - "areaList": [ - { - "code": "530902", - "name": "临翔区" - }, - { - "code": "530921", - "name": "凤庆县" - }, - { - "code": "530922", - "name": "云县" - }, - { - "code": "530923", - "name": "永德县" - }, - { - "code": "530924", - "name": "镇康县" - }, - { - "code": "530925", - "name": "双江拉祜族佤族布朗族傣族自治县" - }, - { - "code": "530926", - "name": "耿马傣族佤族自治县" - }, - { - "code": "530927", - "name": "沧源佤族自治县" - } - ] - }, - { - "code": "532300", - "name": "楚雄彝族自治州", - "areaList": [ - { - "code": "532301", - "name": "楚雄市" - }, - { - "code": "532322", - "name": "双柏县" - }, - { - "code": "532323", - "name": "牟定县" - }, - { - "code": "532324", - "name": "南华县" - }, - { - "code": "532325", - "name": "姚安县" - }, - { - "code": "532326", - "name": "大姚县" - }, - { - "code": "532327", - "name": "永仁县" - }, - { - "code": "532328", - "name": "元谋县" - }, - { - "code": "532329", - "name": "武定县" - }, - { - "code": "532331", - "name": "禄丰县" - } - ] - }, - { - "code": "532500", - "name": "红河哈尼族彝族自治州", - "areaList": [ - { - "code": "532501", - "name": "个旧市" - }, - { - "code": "532502", - "name": "开远市" - }, - { - "code": "532503", - "name": "蒙自市" - }, - { - "code": "532504", - "name": "弥勒市" - }, - { - "code": "532523", - "name": "屏边苗族自治县" - }, - { - "code": "532524", - "name": "建水县" - }, - { - "code": "532525", - "name": "石屏县" - }, - { - "code": "532527", - "name": "泸西县" - }, - { - "code": "532528", - "name": "元阳县" - }, - { - "code": "532529", - "name": "红河县" - }, - { - "code": "532530", - "name": "金平苗族瑶族傣族自治县" - }, - { - "code": "532531", - "name": "绿春县" - }, - { - "code": "532532", - "name": "河口瑶族自治县" - } - ] - }, - { - "code": "532600", - "name": "文山壮族苗族自治州", - "areaList": [ - { - "code": "532601", - "name": "文山市" - }, - { - "code": "532622", - "name": "砚山县" - }, - { - "code": "532623", - "name": "西畴县" - }, - { - "code": "532624", - "name": "麻栗坡县" - }, - { - "code": "532625", - "name": "马关县" - }, - { - "code": "532626", - "name": "丘北县" - }, - { - "code": "532627", - "name": "广南县" - }, - { - "code": "532628", - "name": "富宁县" - } - ] - }, - { - "code": "532800", - "name": "西双版纳傣族自治州", - "areaList": [ - { - "code": "532801", - "name": "景洪市" - }, - { - "code": "532822", - "name": "勐海县" - }, - { - "code": "532823", - "name": "勐腊县" - } - ] - }, - { - "code": "532900", - "name": "大理白族自治州", - "areaList": [ - { - "code": "532901", - "name": "大理市" - }, - { - "code": "532922", - "name": "漾濞彝族自治县" - }, - { - "code": "532923", - "name": "祥云县" - }, - { - "code": "532924", - "name": "宾川县" - }, - { - "code": "532925", - "name": "弥渡县" - }, - { - "code": "532926", - "name": "南涧彝族自治县" - }, - { - "code": "532927", - "name": "巍山彝族回族自治县" - }, - { - "code": "532928", - "name": "永平县" - }, - { - "code": "532929", - "name": "云龙县" - }, - { - "code": "532930", - "name": "洱源县" - }, - { - "code": "532931", - "name": "剑川县" - }, - { - "code": "532932", - "name": "鹤庆县" - } - ] - }, - { - "code": "533100", - "name": "德宏傣族景颇族自治州", - "areaList": [ - { - "code": "533102", - "name": "瑞丽市" - }, - { - "code": "533103", - "name": "芒市" - }, - { - "code": "533122", - "name": "梁河县" - }, - { - "code": "533123", - "name": "盈江县" - }, - { - "code": "533124", - "name": "陇川县" - } - ] - }, - { - "code": "533300", - "name": "怒江傈僳族自治州", - "areaList": [ - { - "code": "533301", - "name": "泸水市" - }, - { - "code": "533323", - "name": "福贡县" - }, - { - "code": "533324", - "name": "贡山独龙族怒族自治县" - }, - { - "code": "533325", - "name": "兰坪白族普米族自治县" - } - ] - }, - { - "code": "533400", - "name": "迪庆藏族自治州", - "areaList": [ - { - "code": "533401", - "name": "香格里拉市" - }, - { - "code": "533422", - "name": "德钦县" - }, - { - "code": "533423", - "name": "维西傈僳族自治县" - } - ] - } - ] - }, - { - "code": "540000", - "name": "西藏自治区", - "cityList": [ - { - "code": "540100", - "name": "拉萨市", - "areaList": [ - { - "code": "540102", - "name": "城关区" - }, - { - "code": "540103", - "name": "堆龙德庆区" - }, - { - "code": "540104", - "name": "达孜区" - }, - { - "code": "540121", - "name": "林周县" - }, - { - "code": "540122", - "name": "当雄县" - }, - { - "code": "540123", - "name": "尼木县" - }, - { - "code": "540124", - "name": "曲水县" - }, - { - "code": "540127", - "name": "墨竹工卡县" - } - ] - }, - { - "code": "540200", - "name": "日喀则市", - "areaList": [ - { - "code": "540202", - "name": "桑珠孜区" - }, - { - "code": "540221", - "name": "南木林县" - }, - { - "code": "540222", - "name": "江孜县" - }, - { - "code": "540223", - "name": "定日县" - }, - { - "code": "540224", - "name": "萨迦县" - }, - { - "code": "540225", - "name": "拉孜县" - }, - { - "code": "540226", - "name": "昂仁县" - }, - { - "code": "540227", - "name": "谢通门县" - }, - { - "code": "540228", - "name": "白朗县" - }, - { - "code": "540229", - "name": "仁布县" - }, - { - "code": "540230", - "name": "康马县" - }, - { - "code": "540231", - "name": "定结县" - }, - { - "code": "540232", - "name": "仲巴县" - }, - { - "code": "540233", - "name": "亚东县" - }, - { - "code": "540234", - "name": "吉隆县" - }, - { - "code": "540235", - "name": "聂拉木县" - }, - { - "code": "540236", - "name": "萨嘎县" - }, - { - "code": "540237", - "name": "岗巴县" - } - ] - }, - { - "code": "540300", - "name": "昌都市", - "areaList": [ - { - "code": "540302", - "name": "卡若区" - }, - { - "code": "540321", - "name": "江达县" - }, - { - "code": "540322", - "name": "贡觉县" - }, - { - "code": "540323", - "name": "类乌齐县" - }, - { - "code": "540324", - "name": "丁青县" - }, - { - "code": "540325", - "name": "察雅县" - }, - { - "code": "540326", - "name": "八宿县" - }, - { - "code": "540327", - "name": "左贡县" - }, - { - "code": "540328", - "name": "芒康县" - }, - { - "code": "540329", - "name": "洛隆县" - }, - { - "code": "540330", - "name": "边坝县" - } - ] - }, - { - "code": "540400", - "name": "林芝市", - "areaList": [ - { - "code": "540402", - "name": "巴宜区" - }, - { - "code": "540421", - "name": "工布江达县" - }, - { - "code": "540422", - "name": "米林县" - }, - { - "code": "540423", - "name": "墨脱县" - }, - { - "code": "540424", - "name": "波密县" - }, - { - "code": "540425", - "name": "察隅县" - }, - { - "code": "540426", - "name": "朗县" - } - ] - }, - { - "code": "540500", - "name": "山南市", - "areaList": [ - { - "code": "540502", - "name": "乃东区" - }, - { - "code": "540521", - "name": "扎囊县" - }, - { - "code": "540522", - "name": "贡嘎县" - }, - { - "code": "540523", - "name": "桑日县" - }, - { - "code": "540524", - "name": "琼结县" - }, - { - "code": "540525", - "name": "曲松县" - }, - { - "code": "540526", - "name": "措美县" - }, - { - "code": "540527", - "name": "洛扎县" - }, - { - "code": "540528", - "name": "加查县" - }, - { - "code": "540529", - "name": "隆子县" - }, - { - "code": "540530", - "name": "错那县" - }, - { - "code": "540531", - "name": "浪卡子县" - } - ] - }, - { - "code": "540600", - "name": "那曲市", - "areaList": [ - { - "code": "540602", - "name": "色尼区" - }, - { - "code": "540621", - "name": "嘉黎县" - }, - { - "code": "540622", - "name": "比如县" - }, - { - "code": "540623", - "name": "聂荣县" - }, - { - "code": "540624", - "name": "安多县" - }, - { - "code": "540625", - "name": "申扎县" - }, - { - "code": "540626", - "name": "索县" - }, - { - "code": "540627", - "name": "班戈县" - }, - { - "code": "540628", - "name": "巴青县" - }, - { - "code": "540629", - "name": "尼玛县" - }, - { - "code": "540630", - "name": "双湖县" - } - ] - }, - { - "code": "542500", - "name": "阿里地区", - "areaList": [ - { - "code": "542521", - "name": "普兰县" - }, - { - "code": "542522", - "name": "札达县" - }, - { - "code": "542523", - "name": "噶尔县" - }, - { - "code": "542524", - "name": "日土县" - }, - { - "code": "542525", - "name": "革吉县" - }, - { - "code": "542526", - "name": "改则县" - }, - { - "code": "542527", - "name": "措勤县" - } - ] - } - ] - }, - { - "code": "610000", - "name": "陕西省", - "cityList": [ - { - "code": "610100", - "name": "西安市", - "areaList": [ - { - "code": "610102", - "name": "新城区" - }, - { - "code": "610103", - "name": "碑林区" - }, - { - "code": "610104", - "name": "莲湖区" - }, - { - "code": "610111", - "name": "灞桥区" - }, - { - "code": "610112", - "name": "未央区" - }, - { - "code": "610113", - "name": "雁塔区" - }, - { - "code": "610114", - "name": "阎良区" - }, - { - "code": "610115", - "name": "临潼区" - }, - { - "code": "610116", - "name": "长安区" - }, - { - "code": "610117", - "name": "高陵区" - }, - { - "code": "610118", - "name": "鄠邑区" - }, - { - "code": "610122", - "name": "蓝田县" - }, - { - "code": "610124", - "name": "周至县" - } - ] - }, - { - "code": "610200", - "name": "铜川市", - "areaList": [ - { - "code": "610202", - "name": "王益区" - }, - { - "code": "610203", - "name": "印台区" - }, - { - "code": "610204", - "name": "耀州区" - }, - { - "code": "610222", - "name": "宜君县" - } - ] - }, - { - "code": "610300", - "name": "宝鸡市", - "areaList": [ - { - "code": "610302", - "name": "渭滨区" - }, - { - "code": "610303", - "name": "金台区" - }, - { - "code": "610304", - "name": "陈仓区" - }, - { - "code": "610322", - "name": "凤翔县" - }, - { - "code": "610323", - "name": "岐山县" - }, - { - "code": "610324", - "name": "扶风县" - }, - { - "code": "610326", - "name": "眉县" - }, - { - "code": "610327", - "name": "陇县" - }, - { - "code": "610328", - "name": "千阳县" - }, - { - "code": "610329", - "name": "麟游县" - }, - { - "code": "610330", - "name": "凤县" - }, - { - "code": "610331", - "name": "太白县" - } - ] - }, - { - "code": "610400", - "name": "咸阳市", - "areaList": [ - { - "code": "610402", - "name": "秦都区" - }, - { - "code": "610403", - "name": "杨陵区" - }, - { - "code": "610404", - "name": "渭城区" - }, - { - "code": "610422", - "name": "三原县" - }, - { - "code": "610423", - "name": "泾阳县" - }, - { - "code": "610424", - "name": "乾县" - }, - { - "code": "610425", - "name": "礼泉县" - }, - { - "code": "610426", - "name": "永寿县" - }, - { - "code": "610428", - "name": "长武县" - }, - { - "code": "610429", - "name": "旬邑县" - }, - { - "code": "610430", - "name": "淳化县" - }, - { - "code": "610431", - "name": "武功县" - }, - { - "code": "610481", - "name": "兴平市" - }, - { - "code": "610482", - "name": "彬州市" - } - ] - }, - { - "code": "610500", - "name": "渭南市", - "areaList": [ - { - "code": "610502", - "name": "临渭区" - }, - { - "code": "610503", - "name": "华州区" - }, - { - "code": "610522", - "name": "潼关县" - }, - { - "code": "610523", - "name": "大荔县" - }, - { - "code": "610524", - "name": "合阳县" - }, - { - "code": "610525", - "name": "澄城县" - }, - { - "code": "610526", - "name": "蒲城县" - }, - { - "code": "610527", - "name": "白水县" - }, - { - "code": "610528", - "name": "富平县" - }, - { - "code": "610581", - "name": "韩城市" - }, - { - "code": "610582", - "name": "华阴市" - } - ] - }, - { - "code": "610600", - "name": "延安市", - "areaList": [ - { - "code": "610602", - "name": "宝塔区" - }, - { - "code": "610603", - "name": "安塞区" - }, - { - "code": "610621", - "name": "延长县" - }, - { - "code": "610622", - "name": "延川县" - }, - { - "code": "610625", - "name": "志丹县" - }, - { - "code": "610626", - "name": "吴起县" - }, - { - "code": "610627", - "name": "甘泉县" - }, - { - "code": "610628", - "name": "富县" - }, - { - "code": "610629", - "name": "洛川县" - }, - { - "code": "610630", - "name": "宜川县" - }, - { - "code": "610631", - "name": "黄龙县" - }, - { - "code": "610632", - "name": "黄陵县" - }, - { - "code": "610681", - "name": "子长市" - } - ] - }, - { - "code": "610700", - "name": "汉中市", - "areaList": [ - { - "code": "610702", - "name": "汉台区" - }, - { - "code": "610703", - "name": "南郑区" - }, - { - "code": "610722", - "name": "城固县" - }, - { - "code": "610723", - "name": "洋县" - }, - { - "code": "610724", - "name": "西乡县" - }, - { - "code": "610725", - "name": "勉县" - }, - { - "code": "610726", - "name": "宁强县" - }, - { - "code": "610727", - "name": "略阳县" - }, - { - "code": "610728", - "name": "镇巴县" - }, - { - "code": "610729", - "name": "留坝县" - }, - { - "code": "610730", - "name": "佛坪县" - } - ] - }, - { - "code": "610800", - "name": "榆林市", - "areaList": [ - { - "code": "610802", - "name": "榆阳区" - }, - { - "code": "610803", - "name": "横山区" - }, - { - "code": "610822", - "name": "府谷县" - }, - { - "code": "610824", - "name": "靖边县" - }, - { - "code": "610825", - "name": "定边县" - }, - { - "code": "610826", - "name": "绥德县" - }, - { - "code": "610827", - "name": "米脂县" - }, - { - "code": "610828", - "name": "佳县" - }, - { - "code": "610829", - "name": "吴堡县" - }, - { - "code": "610830", - "name": "清涧县" - }, - { - "code": "610831", - "name": "子洲县" - }, - { - "code": "610881", - "name": "神木市" - } - ] - }, - { - "code": "610900", - "name": "安康市", - "areaList": [ - { - "code": "610902", - "name": "汉滨区" - }, - { - "code": "610921", - "name": "汉阴县" - }, - { - "code": "610922", - "name": "石泉县" - }, - { - "code": "610923", - "name": "宁陕县" - }, - { - "code": "610924", - "name": "紫阳县" - }, - { - "code": "610925", - "name": "岚皋县" - }, - { - "code": "610926", - "name": "平利县" - }, - { - "code": "610927", - "name": "镇坪县" - }, - { - "code": "610928", - "name": "旬阳县" - }, - { - "code": "610929", - "name": "白河县" - } - ] - }, - { - "code": "611000", - "name": "商洛市", - "areaList": [ - { - "code": "611002", - "name": "商州区" - }, - { - "code": "611021", - "name": "洛南县" - }, - { - "code": "611022", - "name": "丹凤县" - }, - { - "code": "611023", - "name": "商南县" - }, - { - "code": "611024", - "name": "山阳县" - }, - { - "code": "611025", - "name": "镇安县" - }, - { - "code": "611026", - "name": "柞水县" - } - ] - } - ] - }, - { - "code": "620000", - "name": "甘肃省", - "cityList": [ - { - "code": "620100", - "name": "兰州市", - "areaList": [ - { - "code": "620102", - "name": "城关区" - }, - { - "code": "620103", - "name": "七里河区" - }, - { - "code": "620104", - "name": "西固区" - }, - { - "code": "620105", - "name": "安宁区" - }, - { - "code": "620111", - "name": "红古区" - }, - { - "code": "620121", - "name": "永登县" - }, - { - "code": "620122", - "name": "皋兰县" - }, - { - "code": "620123", - "name": "榆中县" - } - ] - }, - { - "code": "620200", - "name": "嘉峪关市", - "areaList": [] - }, - { - "code": "620300", - "name": "金昌市", - "areaList": [ - { - "code": "620302", - "name": "金川区" - }, - { - "code": "620321", - "name": "永昌县" - } - ] - }, - { - "code": "620400", - "name": "白银市", - "areaList": [ - { - "code": "620402", - "name": "白银区" - }, - { - "code": "620403", - "name": "平川区" - }, - { - "code": "620421", - "name": "靖远县" - }, - { - "code": "620422", - "name": "会宁县" - }, - { - "code": "620423", - "name": "景泰县" - } - ] - }, - { - "code": "620500", - "name": "天水市", - "areaList": [ - { - "code": "620502", - "name": "秦州区" - }, - { - "code": "620503", - "name": "麦积区" - }, - { - "code": "620521", - "name": "清水县" - }, - { - "code": "620522", - "name": "秦安县" - }, - { - "code": "620523", - "name": "甘谷县" - }, - { - "code": "620524", - "name": "武山县" - }, - { - "code": "620525", - "name": "张家川回族自治县" - } - ] - }, - { - "code": "620600", - "name": "武威市", - "areaList": [ - { - "code": "620602", - "name": "凉州区" - }, - { - "code": "620621", - "name": "民勤县" - }, - { - "code": "620622", - "name": "古浪县" - }, - { - "code": "620623", - "name": "天祝藏族自治县" - } - ] - }, - { - "code": "620700", - "name": "张掖市", - "areaList": [ - { - "code": "620702", - "name": "甘州区" - }, - { - "code": "620721", - "name": "肃南裕固族自治县" - }, - { - "code": "620722", - "name": "民乐县" - }, - { - "code": "620723", - "name": "临泽县" - }, - { - "code": "620724", - "name": "高台县" - }, - { - "code": "620725", - "name": "山丹县" - } - ] - }, - { - "code": "620800", - "name": "平凉市", - "areaList": [ - { - "code": "620802", - "name": "崆峒区" - }, - { - "code": "620821", - "name": "泾川县" - }, - { - "code": "620822", - "name": "灵台县" - }, - { - "code": "620823", - "name": "崇信县" - }, - { - "code": "620825", - "name": "庄浪县" - }, - { - "code": "620826", - "name": "静宁县" - }, - { - "code": "620881", - "name": "华亭市" - } - ] - }, - { - "code": "620900", - "name": "酒泉市", - "areaList": [ - { - "code": "620902", - "name": "肃州区" - }, - { - "code": "620921", - "name": "金塔县" - }, - { - "code": "620922", - "name": "瓜州县" - }, - { - "code": "620923", - "name": "肃北蒙古族自治县" - }, - { - "code": "620924", - "name": "阿克塞哈萨克族自治县" - }, - { - "code": "620981", - "name": "玉门市" - }, - { - "code": "620982", - "name": "敦煌市" - } - ] - }, - { - "code": "621000", - "name": "庆阳市", - "areaList": [ - { - "code": "621002", - "name": "西峰区" - }, - { - "code": "621021", - "name": "庆城县" - }, - { - "code": "621022", - "name": "环县" - }, - { - "code": "621023", - "name": "华池县" - }, - { - "code": "621024", - "name": "合水县" - }, - { - "code": "621025", - "name": "正宁县" - }, - { - "code": "621026", - "name": "宁县" - }, - { - "code": "621027", - "name": "镇原县" - } - ] - }, - { - "code": "621100", - "name": "定西市", - "areaList": [ - { - "code": "621102", - "name": "安定区" - }, - { - "code": "621121", - "name": "通渭县" - }, - { - "code": "621122", - "name": "陇西县" - }, - { - "code": "621123", - "name": "渭源县" - }, - { - "code": "621124", - "name": "临洮县" - }, - { - "code": "621125", - "name": "漳县" - }, - { - "code": "621126", - "name": "岷县" - } - ] - }, - { - "code": "621200", - "name": "陇南市", - "areaList": [ - { - "code": "621202", - "name": "武都区" - }, - { - "code": "621221", - "name": "成县" - }, - { - "code": "621222", - "name": "文县" - }, - { - "code": "621223", - "name": "宕昌县" - }, - { - "code": "621224", - "name": "康县" - }, - { - "code": "621225", - "name": "西和县" - }, - { - "code": "621226", - "name": "礼县" - }, - { - "code": "621227", - "name": "徽县" - }, - { - "code": "621228", - "name": "两当县" - } - ] - }, - { - "code": "622900", - "name": "临夏回族自治州", - "areaList": [ - { - "code": "622901", - "name": "临夏市" - }, - { - "code": "622921", - "name": "临夏县" - }, - { - "code": "622922", - "name": "康乐县" - }, - { - "code": "622923", - "name": "永靖县" - }, - { - "code": "622924", - "name": "广河县" - }, - { - "code": "622925", - "name": "和政县" - }, - { - "code": "622926", - "name": "东乡族自治县" - }, - { - "code": "622927", - "name": "积石山保安族东乡族撒拉族自治县" - } - ] - }, - { - "code": "623000", - "name": "甘南藏族自治州", - "areaList": [ - { - "code": "623001", - "name": "合作市" - }, - { - "code": "623021", - "name": "临潭县" - }, - { - "code": "623022", - "name": "卓尼县" - }, - { - "code": "623023", - "name": "舟曲县" - }, - { - "code": "623024", - "name": "迭部县" - }, - { - "code": "623025", - "name": "玛曲县" - }, - { - "code": "623026", - "name": "碌曲县" - }, - { - "code": "623027", - "name": "夏河县" - } - ] - } - ] - }, - { - "code": "630000", - "name": "青海省", - "cityList": [ - { - "code": "630100", - "name": "西宁市", - "areaList": [ - { - "code": "630102", - "name": "城东区" - }, - { - "code": "630103", - "name": "城中区" - }, - { - "code": "630104", - "name": "城西区" - }, - { - "code": "630105", - "name": "城北区" - }, - { - "code": "630106", - "name": "湟中区" - }, - { - "code": "630121", - "name": "大通回族土族自治县" - }, - { - "code": "630123", - "name": "湟源县" - } - ] - }, - { - "code": "630200", - "name": "海东市", - "areaList": [ - { - "code": "630202", - "name": "乐都区" - }, - { - "code": "630203", - "name": "平安区" - }, - { - "code": "630222", - "name": "民和回族土族自治县" - }, - { - "code": "630223", - "name": "互助土族自治县" - }, - { - "code": "630224", - "name": "化隆回族自治县" - }, - { - "code": "630225", - "name": "循化撒拉族自治县" - } - ] - }, - { - "code": "632200", - "name": "海北藏族自治州", - "areaList": [ - { - "code": "632221", - "name": "门源回族自治县" - }, - { - "code": "632222", - "name": "祁连县" - }, - { - "code": "632223", - "name": "海晏县" - }, - { - "code": "632224", - "name": "刚察县" - } - ] - }, - { - "code": "632300", - "name": "黄南藏族自治州", - "areaList": [ - { - "code": "632321", - "name": "同仁县" - }, - { - "code": "632322", - "name": "尖扎县" - }, - { - "code": "632323", - "name": "泽库县" - }, - { - "code": "632324", - "name": "河南蒙古族自治县" - } - ] - }, - { - "code": "632500", - "name": "海南藏族自治州", - "areaList": [ - { - "code": "632521", - "name": "共和县" - }, - { - "code": "632522", - "name": "同德县" - }, - { - "code": "632523", - "name": "贵德县" - }, - { - "code": "632524", - "name": "兴海县" - }, - { - "code": "632525", - "name": "贵南县" - } - ] - }, - { - "code": "632600", - "name": "果洛藏族自治州", - "areaList": [ - { - "code": "632621", - "name": "玛沁县" - }, - { - "code": "632622", - "name": "班玛县" - }, - { - "code": "632623", - "name": "甘德县" - }, - { - "code": "632624", - "name": "达日县" - }, - { - "code": "632625", - "name": "久治县" - }, - { - "code": "632626", - "name": "玛多县" - } - ] - }, - { - "code": "632700", - "name": "玉树藏族自治州", - "areaList": [ - { - "code": "632701", - "name": "玉树市" - }, - { - "code": "632722", - "name": "杂多县" - }, - { - "code": "632723", - "name": "称多县" - }, - { - "code": "632724", - "name": "治多县" - }, - { - "code": "632725", - "name": "囊谦县" - }, - { - "code": "632726", - "name": "曲麻莱县" - } - ] - }, - { - "code": "632800", - "name": "海西蒙古族藏族自治州", - "areaList": [ - { - "code": "632801", - "name": "格尔木市" - }, - { - "code": "632802", - "name": "德令哈市" - }, - { - "code": "632803", - "name": "茫崖市" - }, - { - "code": "632821", - "name": "乌兰县" - }, - { - "code": "632822", - "name": "都兰县" - }, - { - "code": "632823", - "name": "天峻县" - } - ] - } - ] - }, - { - "code": "640000", - "name": "宁夏回族自治区", - "cityList": [ - { - "code": "640100", - "name": "银川市", - "areaList": [ - { - "code": "640104", - "name": "兴庆区" - }, - { - "code": "640105", - "name": "西夏区" - }, - { - "code": "640106", - "name": "金凤区" - }, - { - "code": "640121", - "name": "永宁县" - }, - { - "code": "640122", - "name": "贺兰县" - }, - { - "code": "640181", - "name": "灵武市" - } - ] - }, - { - "code": "640200", - "name": "石嘴山市", - "areaList": [ - { - "code": "640202", - "name": "大武口区" - }, - { - "code": "640205", - "name": "惠农区" - }, - { - "code": "640221", - "name": "平罗县" - } - ] - }, - { - "code": "640300", - "name": "吴忠市", - "areaList": [ - { - "code": "640302", - "name": "利通区" - }, - { - "code": "640303", - "name": "红寺堡区" - }, - { - "code": "640323", - "name": "盐池县" - }, - { - "code": "640324", - "name": "同心县" - }, - { - "code": "640381", - "name": "青铜峡市" - } - ] - }, - { - "code": "640400", - "name": "固原市", - "areaList": [ - { - "code": "640402", - "name": "原州区" - }, - { - "code": "640422", - "name": "西吉县" - }, - { - "code": "640423", - "name": "隆德县" - }, - { - "code": "640424", - "name": "泾源县" - }, - { - "code": "640425", - "name": "彭阳县" - } - ] - }, - { - "code": "640500", - "name": "中卫市", - "areaList": [ - { - "code": "640502", - "name": "沙坡头区" - }, - { - "code": "640521", - "name": "中宁县" - }, - { - "code": "640522", - "name": "海原县" - } - ] - } - ] - }, - { - "code": "650000", - "name": "新疆维吾尔自治区", - "cityList": [ - { - "code": "650100", - "name": "乌鲁木齐市", - "areaList": [ - { - "code": "650102", - "name": "天山区" - }, - { - "code": "650103", - "name": "沙依巴克区" - }, - { - "code": "650104", - "name": "新市区" - }, - { - "code": "650105", - "name": "水磨沟区" - }, - { - "code": "650106", - "name": "头屯河区" - }, - { - "code": "650107", - "name": "达坂城区" - }, - { - "code": "650109", - "name": "米东区" - }, - { - "code": "650121", - "name": "乌鲁木齐县" - } - ] - }, - { - "code": "650200", - "name": "克拉玛依市", - "areaList": [ - { - "code": "650202", - "name": "独山子区" - }, - { - "code": "650203", - "name": "克拉玛依区" - }, - { - "code": "650204", - "name": "白碱滩区" - }, - { - "code": "650205", - "name": "乌尔禾区" - } - ] - }, - { - "code": "650400", - "name": "吐鲁番市", - "areaList": [ - { - "code": "650402", - "name": "高昌区" - }, - { - "code": "650421", - "name": "鄯善县" - }, - { - "code": "650422", - "name": "托克逊县" - } - ] - }, - { - "code": "650500", - "name": "哈密市", - "areaList": [ - { - "code": "650502", - "name": "伊州区" - }, - { - "code": "650521", - "name": "巴里坤哈萨克自治县" - }, - { - "code": "650522", - "name": "伊吾县" - } - ] - }, - { - "code": "652300", - "name": "昌吉回族自治州", - "areaList": [ - { - "code": "652301", - "name": "昌吉市" - }, - { - "code": "652302", - "name": "阜康市" - }, - { - "code": "652323", - "name": "呼图壁县" - }, - { - "code": "652324", - "name": "玛纳斯县" - }, - { - "code": "652325", - "name": "奇台县" - }, - { - "code": "652327", - "name": "吉木萨尔县" - }, - { - "code": "652328", - "name": "木垒哈萨克自治县" - } - ] - }, - { - "code": "652700", - "name": "博尔塔拉蒙古自治州", - "areaList": [ - { - "code": "652701", - "name": "博乐市" - }, - { - "code": "652702", - "name": "阿拉山口市" - }, - { - "code": "652722", - "name": "精河县" - }, - { - "code": "652723", - "name": "温泉县" - } - ] - }, - { - "code": "652800", - "name": "巴音郭楞蒙古自治州", - "areaList": [ - { - "code": "652801", - "name": "库尔勒市" - }, - { - "code": "652822", - "name": "轮台县" - }, - { - "code": "652823", - "name": "尉犁县" - }, - { - "code": "652824", - "name": "若羌县" - }, - { - "code": "652825", - "name": "且末县" - }, - { - "code": "652826", - "name": "焉耆回族自治县" - }, - { - "code": "652827", - "name": "和静县" - }, - { - "code": "652828", - "name": "和硕县" - }, - { - "code": "652829", - "name": "博湖县" - } - ] - }, - { - "code": "652900", - "name": "阿克苏地区", - "areaList": [ - { - "code": "652901", - "name": "阿克苏市" - }, - { - "code": "652902", - "name": "库车市" - }, - { - "code": "652922", - "name": "温宿县" - }, - { - "code": "652924", - "name": "沙雅县" - }, - { - "code": "652925", - "name": "新和县" - }, - { - "code": "652926", - "name": "拜城县" - }, - { - "code": "652927", - "name": "乌什县" - }, - { - "code": "652928", - "name": "阿瓦提县" - }, - { - "code": "652929", - "name": "柯坪县" - } - ] - }, - { - "code": "653000", - "name": "克孜勒苏柯尔克孜自治州", - "areaList": [ - { - "code": "653001", - "name": "阿图什市" - }, - { - "code": "653022", - "name": "阿克陶县" - }, - { - "code": "653023", - "name": "阿合奇县" - }, - { - "code": "653024", - "name": "乌恰县" - } - ] - }, - { - "code": "653100", - "name": "喀什地区", - "areaList": [ - { - "code": "653101", - "name": "喀什市" - }, - { - "code": "653121", - "name": "疏附县" - }, - { - "code": "653122", - "name": "疏勒县" - }, - { - "code": "653123", - "name": "英吉沙县" - }, - { - "code": "653124", - "name": "泽普县" - }, - { - "code": "653125", - "name": "莎车县" - }, - { - "code": "653126", - "name": "叶城县" - }, - { - "code": "653127", - "name": "麦盖提县" - }, - { - "code": "653128", - "name": "岳普湖县" - }, - { - "code": "653129", - "name": "伽师县" - }, - { - "code": "653130", - "name": "巴楚县" - }, - { - "code": "653131", - "name": "塔什库尔干塔吉克自治县" - } - ] - }, - { - "code": "653200", - "name": "和田地区", - "areaList": [ - { - "code": "653201", - "name": "和田市" - }, - { - "code": "653221", - "name": "和田县" - }, - { - "code": "653222", - "name": "墨玉县" - }, - { - "code": "653223", - "name": "皮山县" - }, - { - "code": "653224", - "name": "洛浦县" - }, - { - "code": "653225", - "name": "策勒县" - }, - { - "code": "653226", - "name": "于田县" - }, - { - "code": "653227", - "name": "民丰县" - } - ] - }, - { - "code": "654000", - "name": "伊犁哈萨克自治州", - "areaList": [ - { - "code": "654002", - "name": "伊宁市" - }, - { - "code": "654003", - "name": "奎屯市" - }, - { - "code": "654004", - "name": "霍尔果斯市" - }, - { - "code": "654021", - "name": "伊宁县" - }, - { - "code": "654022", - "name": "察布查尔锡伯自治县" - }, - { - "code": "654023", - "name": "霍城县" - }, - { - "code": "654024", - "name": "巩留县" - }, - { - "code": "654025", - "name": "新源县" - }, - { - "code": "654026", - "name": "昭苏县" - }, - { - "code": "654027", - "name": "特克斯县" - }, - { - "code": "654028", - "name": "尼勒克县" - } - ] - }, - { - "code": "654200", - "name": "塔城地区", - "areaList": [ - { - "code": "654201", - "name": "塔城市" - }, - { - "code": "654202", - "name": "乌苏市" - }, - { - "code": "654221", - "name": "额敏县" - }, - { - "code": "654223", - "name": "沙湾县" - }, - { - "code": "654224", - "name": "托里县" - }, - { - "code": "654225", - "name": "裕民县" - }, - { - "code": "654226", - "name": "和布克赛尔蒙古自治县" - } - ] - }, - { - "code": "654300", - "name": "阿勒泰地区", - "areaList": [ - { - "code": "654301", - "name": "阿勒泰市" - }, - { - "code": "654321", - "name": "布尔津县" - }, - { - "code": "654322", - "name": "富蕴县" - }, - { - "code": "654323", - "name": "福海县" - }, - { - "code": "654324", - "name": "哈巴河县" - }, - { - "code": "654325", - "name": "青河县" - }, - { - "code": "654326", - "name": "吉木乃县" - } - ] - }, - { - "code": "659001", - "name": "石河子市", - "areaList": [] - }, - { - "code": "659002", - "name": "阿拉尔市", - "areaList": [] - }, - { - "code": "659003", - "name": "图木舒克市", - "areaList": [] - }, - { - "code": "659004", - "name": "五家渠市", - "areaList": [] - }, - { - "code": "659005", - "name": "北屯市", - "areaList": [] - }, - { - "code": "659006", - "name": "铁门关市", - "areaList": [] - }, - { - "code": "659007", - "name": "双河市", - "areaList": [] - }, - { - "code": "659008", - "name": "可克达拉市", - "areaList": [] - }, - { - "code": "659009", - "name": "昆玉市", - "areaList": [] - }, - { - "code": "659010", - "name": "胡杨河市", - "areaList": [] - } - ] - }, - { - "code": "710000", - "name": "台湾省", - "cityList": [] - }, - { - "code": "810000", - "name": "香港特别行政区", - "cityList": [] - }, - { - "code": "820000", - "name": "澳门特别行政区", - "cityList": [] - } -] diff --git a/Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressPickerView.h b/Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressPickerView.h deleted file mode 100755 index aab271b..0000000 --- a/Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressPickerView.h +++ /dev/null @@ -1,127 +0,0 @@ -// -// BRAddressPickerView.h -// BRPickerViewDemo -// -// Created by renbo on 2017/8/11. -// Copyright © 2017 irenb. All rights reserved. -// -// 最新代码下载地址:https://github.com/91renb/BRPickerView - -#import "BRBaseView.h" -#import "BRAddressModel.h" - -NS_ASSUME_NONNULL_BEGIN - -/// 地址选择器类型 -typedef NS_ENUM(NSInteger, BRAddressPickerMode) { - /** 显示【省市区】(默认) */ - BRAddressPickerModeArea, - /** 显示【省市】 */ - BRAddressPickerModeCity, - /** 显示【省】 */ - BRAddressPickerModeProvince -}; - -typedef void(^BRAddressResultBlock)(BRProvinceModel * _Nullable province, BRCityModel * _Nullable city, BRAreaModel * _Nullable area); - -@interface BRAddressPickerView : BRBaseView - -/** - ////////////////////////////////////////////////////////////////////////// - /// - /// 【用法一】 - /// 特点:灵活,扩展性强(推荐使用!) - /// - ////////////////////////////////////////////////////////////////////////*/ - -/** 地址选择器显示类型 */ -@property (nonatomic, assign) BRAddressPickerMode pickerMode; - -/** 默认选中的位置(1.传索引数组,如:@[@10, @0, @4]) */ -@property (nullable, nonatomic, copy) NSArray *selectIndexs; -/** 默认选中的位置(2.传值数组,如:@[@"浙江省", @"杭州市", @"西湖区"]) */ -@property (nullable, nonatomic, copy) NSArray *selectValues; - -/** 选择结果的回调 */ -@property (nullable, nonatomic, copy) BRAddressResultBlock resultBlock; - -/** 滚动选择时触发的回调 */ -@property (nullable, nonatomic, copy) BRAddressResultBlock changeBlock; - -/** - * 地区数据源(不传或为nil,默认就获取本地 BRCity.json 文件的数据) - * 1.可以传 JSON数组,要注意 层级结构 和 key 要与 BRCity.json 保持一致 - * 2.可以传 模型数组(NSArray * 类型),自己解析数据源 只需要注意层级结构就行 - */ -@property (nullable, nonatomic, copy) NSArray *dataSourceArr; - -/// 初始化地址选择器 -/// @param pickerMode 地址选择器显示类型 -- (instancetype)initWithPickerMode:(BRAddressPickerMode)pickerMode; - -/// 弹出选择器视图 -- (void)show; - -/// 关闭选择器视图 -- (void)dismiss; - - - - -//================================================= 华丽的分割线 ================================================= - - - - -/** - ////////////////////////////////////////////////////////////////////////// - /// - /// 【用法二】:快捷使用,直接选择下面其中的一个方法进行使用 - /// 特点:快捷,方便 - /// - ////////////////////////////////////////////////////////////////////////*/ - -/** - * 1.显示地址选择器 - * - * @param selectIndexs 默认选中的值(传索引数组,如:@[@10, @0, @4]) - * @param resultBlock 选择后的回调 - * - */ -+ (void)showAddressPickerWithSelectIndexs:(nullable NSArray *)selectIndexs - resultBlock:(nullable BRAddressResultBlock)resultBlock; - -/** - * 2.显示地址选择器 - * - * @param mode 地址选择器显示类型 - * @param selectIndexs 默认选中的值(传索引数组,如:@[@10, @0, @4]) - * @param isAutoSelect 是否自动选择,即滚动选择器后就执行结果回调,默认为 NO - * @param resultBlock 选择后的回调 - * - */ -+ (void)showAddressPickerWithMode:(BRAddressPickerMode)mode - selectIndexs:(nullable NSArray *)selectIndexs - isAutoSelect:(BOOL)isAutoSelect - resultBlock:(nullable BRAddressResultBlock)resultBlock; - -/** - * 3.显示地址选择器 - * - * @param mode 地址选择器显示类型 - * @param dataSource 地区数据源 - * @param selectIndexs 默认选中的值(传索引数组,如:@[@10, @0, @4]) - * @param isAutoSelect 是否自动选择,即滚动选择器后就执行结果回调,默认为 NO - * @param resultBlock 选择后的回调 - * - */ -+ (void)showAddressPickerWithMode:(BRAddressPickerMode)mode - dataSource:(nullable NSArray *)dataSource - selectIndexs:(nullable NSArray *)selectIndexs - isAutoSelect:(BOOL)isAutoSelect - resultBlock:(nullable BRAddressResultBlock)resultBlock; - - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressPickerView.m b/Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressPickerView.m deleted file mode 100755 index 2934ecc..0000000 --- a/Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressPickerView.m +++ /dev/null @@ -1,558 +0,0 @@ -// -// BRAddressPickerView.m -// BRPickerViewDemo -// -// Created by renbo on 2017/8/11. -// Copyright © 2017 irenb. All rights reserved. -// -// 最新代码下载地址:https://github.com/91renb/BRPickerView - -#import "BRAddressPickerView.h" -#import "NSBundle+BRPickerView.h" - -@interface BRAddressPickerView () -// 地址选择器 -@property (nonatomic, strong) UIPickerView *pickerView; -// 省模型数组 -@property(nonatomic, copy) NSArray *provinceModelArr; -// 市模型数组 -@property(nonatomic, copy) NSArray *cityModelArr; -// 区模型数组 -@property(nonatomic, copy) NSArray *areaModelArr; -// 选中的省 -@property(nonatomic, strong) BRProvinceModel *selectProvinceModel; -// 选中的市 -@property(nonatomic, strong) BRCityModel *selectCityModel; -// 选中的区 -@property(nonatomic, strong) BRAreaModel *selectAreaModel; -// 记录省选中的位置 -@property(nonatomic, assign) NSInteger provinceIndex; -// 记录市选中的位置 -@property(nonatomic, assign) NSInteger cityIndex; -// 记录区选中的位置 -@property(nonatomic, assign) NSInteger areaIndex; - -@property (nonatomic, copy) NSArray * mSelectValues; - -@end - -@implementation BRAddressPickerView - -#pragma mark - 1.显示地址选择器 -+ (void)showAddressPickerWithSelectIndexs:(NSArray *)selectIndexs - resultBlock:(BRAddressResultBlock)resultBlock { - [self showAddressPickerWithMode:BRAddressPickerModeArea dataSource:nil selectIndexs:selectIndexs isAutoSelect:NO resultBlock:resultBlock]; -} - -#pragma mark - 2.显示地址选择器 -+ (void)showAddressPickerWithMode:(BRAddressPickerMode)mode - selectIndexs:(NSArray *)selectIndexs - isAutoSelect:(BOOL)isAutoSelect - resultBlock:(BRAddressResultBlock)resultBlock { - [self showAddressPickerWithMode:mode dataSource:nil selectIndexs:selectIndexs isAutoSelect:isAutoSelect resultBlock:resultBlock]; -} - - -#pragma mark - 3.显示地址选择器 -+ (void)showAddressPickerWithMode:(BRAddressPickerMode)mode - dataSource:(NSArray *)dataSource - selectIndexs:(NSArray *)selectIndexs - isAutoSelect:(BOOL)isAutoSelect - resultBlock:(BRAddressResultBlock)resultBlock { - // 创建地址选择器 - BRAddressPickerView *addressPickerView = [[BRAddressPickerView alloc] initWithPickerMode:mode]; - addressPickerView.dataSourceArr = dataSource; - addressPickerView.selectIndexs = selectIndexs; - addressPickerView.isAutoSelect = isAutoSelect; - addressPickerView.resultBlock = resultBlock; - // 显示 - [addressPickerView show]; -} - -#pragma mark - 初始化地址选择器 -- (instancetype)initWithPickerMode:(BRAddressPickerMode)pickerMode { - if (self = [super init]) { - self.pickerMode = pickerMode; - } - return self; -} - -#pragma mark - 处理选择器数据 -- (void)handlerPickerData { - if (self.dataSourceArr && self.dataSourceArr.count > 0) { - id item = [self.dataSourceArr firstObject]; - // 如果传的值是解析好的模型数组 - if ([item isKindOfClass:[BRProvinceModel class]]) { - self.provinceModelArr = self.dataSourceArr; - } else { - self.provinceModelArr = [self getProvinceModelArr:self.dataSourceArr]; - } - } else { - // 如果外部没有传入地区数据源,就使用本地的数据源 - NSArray *dataSource = [self br_addressJsonArray]; - - if (!dataSource || dataSource.count == 0) { - return; - } - self.dataSourceArr = dataSource; - self.provinceModelArr = [self getProvinceModelArr:self.dataSourceArr]; - } - - // 设置默认值 - [self handlerDefaultSelectValue]; -} - -#pragma mark - 获取城市JSON数据 -- (NSArray *)br_addressJsonArray { - static NSArray *cityArray = nil; - if (!cityArray) { - // 获取 BRAddressPickerView.bundle - NSBundle *containnerBundle = [NSBundle bundleForClass:[BRAddressPickerView class]]; - NSString *bundlePath = [containnerBundle pathForResource:@"BRAddressPickerView" ofType:@"bundle"]; - NSBundle *addressPickerBundle = [NSBundle bundleWithPath:bundlePath]; - - // 获取bundle中的JSON文件 - NSString *filePath = [addressPickerBundle pathForResource:@"BRCity" ofType:@"json"]; - NSData *data = [NSData dataWithContentsOfFile:filePath]; - cityArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]; - } - return cityArray; -} - -#pragma mark - 获取模型数组 -- (NSArray *)getProvinceModelArr:(NSArray *)dataSourceArr { - NSMutableArray *tempArr1 = [NSMutableArray array]; - for (NSDictionary *proviceDic in dataSourceArr) { - BRProvinceModel *proviceModel = [[BRProvinceModel alloc]init]; - proviceModel.code = [proviceDic objectForKey:@"code"]; - proviceModel.name = [proviceDic objectForKey:@"name"]; - proviceModel.index = [dataSourceArr indexOfObject:proviceDic]; - NSArray *cityList = [proviceDic.allKeys containsObject:@"cityList"] ? [proviceDic objectForKey:@"cityList"] : [proviceDic objectForKey:@"citylist"]; - NSMutableArray *tempArr2 = [NSMutableArray array]; - for (NSDictionary *cityDic in cityList) { - BRCityModel *cityModel = [[BRCityModel alloc]init]; - cityModel.code = [cityDic objectForKey:@"code"]; - cityModel.name = [cityDic objectForKey:@"name"]; - cityModel.index = [cityList indexOfObject:cityDic]; - NSArray *areaList = [cityDic.allKeys containsObject:@"areaList"] ? [cityDic objectForKey:@"areaList"] : [cityDic objectForKey:@"arealist"]; - NSMutableArray *tempArr3 = [NSMutableArray array]; - for (NSDictionary *areaDic in areaList) { - BRAreaModel *areaModel = [[BRAreaModel alloc]init]; - areaModel.code = [areaDic objectForKey:@"code"]; - areaModel.name = [areaDic objectForKey:@"name"]; - areaModel.index = [areaList indexOfObject:areaDic]; - [tempArr3 addObject:areaModel]; - } - cityModel.arealist = [tempArr3 copy]; - [tempArr2 addObject:cityModel]; - } - proviceModel.citylist = [tempArr2 copy]; - [tempArr1 addObject:proviceModel]; - } - return [tempArr1 copy]; -} - -#pragma mark - 设置默认选择的值 -- (void)handlerDefaultSelectValue { - __block NSString *selectProvinceName = nil; - __block NSString *selectCityName = nil; - __block NSString *selectAreaName = nil; - - if (self.mSelectValues.count > 0) { - selectProvinceName = self.mSelectValues.count > 0 ? self.mSelectValues[0] : nil; - selectCityName = self.mSelectValues.count > 1 ? self.mSelectValues[1] : nil; - selectAreaName = self.mSelectValues.count > 2 ? self.mSelectValues[2] : nil; - } - - __weak typeof(self) weakSelf = self; - - if (self.pickerMode == BRAddressPickerModeProvince || self.pickerMode == BRAddressPickerModeCity || self.pickerMode == BRAddressPickerModeArea) { - if (self.selectIndexs.count > 0) { - NSInteger provinceIndex = [self.selectIndexs[0] integerValue]; - self.provinceIndex = (provinceIndex > 0 && provinceIndex < self.provinceModelArr.count) ? provinceIndex : 0; - self.selectProvinceModel = self.provinceModelArr.count > self.provinceIndex ? self.provinceModelArr[self.provinceIndex] : nil; - } else { - self.provinceIndex = 0; - self.selectProvinceModel = self.provinceModelArr.count > 0 ? self.provinceModelArr[0] : nil; - [self.provinceModelArr enumerateObjectsUsingBlock:^(BRProvinceModel * _Nonnull model, NSUInteger idx, BOOL * _Nonnull stop) { - if (selectProvinceName && [model.name isEqualToString:selectProvinceName]) { - weakSelf.provinceIndex = idx; - weakSelf.selectProvinceModel = model; - *stop = YES; - } - }]; - } - } - - if (self.pickerMode == BRAddressPickerModeCity || self.pickerMode == BRAddressPickerModeArea) { - self.cityModelArr = [self getCityModelArray:self.provinceIndex]; - if (self.selectIndexs.count > 0) { - NSInteger cityIndex = self.selectIndexs.count > 1 ? [self.selectIndexs[1] integerValue] : 0; - self.cityIndex = (cityIndex > 0 && cityIndex < self.cityModelArr.count) ? cityIndex : 0; - self.selectCityModel = self.cityModelArr.count > self.cityIndex ? self.cityModelArr[self.cityIndex] : nil; - } else { - self.cityIndex = 0; - self.selectCityModel = self.cityModelArr.count > 0 ? self.cityModelArr[0] : nil; - [self.cityModelArr enumerateObjectsUsingBlock:^(BRCityModel * _Nonnull model, NSUInteger idx, BOOL * _Nonnull stop) { - if (selectCityName && [model.name isEqualToString:selectCityName]) { - weakSelf.cityIndex = idx; - weakSelf.selectCityModel = model; - *stop = YES; - } - }]; - } - } - - if (self.pickerMode == BRAddressPickerModeArea) { - self.areaModelArr = [self getAreaModelArray:self.provinceIndex cityIndex:self.cityIndex]; - if (self.selectIndexs.count > 0) { - NSInteger areaIndex = self.selectIndexs.count > 2 ? [self.selectIndexs[2] integerValue] : 0; - self.areaIndex = (areaIndex > 0 && areaIndex < self.areaModelArr.count) ? areaIndex : 0; - self.selectAreaModel = self.areaModelArr.count > self.areaIndex ? self.areaModelArr[self.areaIndex] : nil; - } else { - self.areaIndex = 0; - self.selectAreaModel = self.areaModelArr.count > 0 ? self.areaModelArr[0] : nil; - [self.areaModelArr enumerateObjectsUsingBlock:^(BRAreaModel * _Nonnull model, NSUInteger idx, BOOL * _Nonnull stop) { - if (selectAreaName && [model.name isEqualToString:selectAreaName]) { - weakSelf.areaIndex = idx; - weakSelf.selectAreaModel = model; - *stop = YES; - } - }]; - } - } -} - -// 根据 省索引 获取 城市模型数组 -- (NSArray *)getCityModelArray:(NSInteger)provinceIndex { - BRProvinceModel *provinceModel = self.provinceModelArr[provinceIndex]; - // 返回城市模型数组 - return provinceModel.citylist; -} - -// 根据 省索引和城市索引 获取 区域模型数组 -- (NSArray *)getAreaModelArray:(NSInteger)provinceIndex cityIndex:(NSInteger)cityIndex { - BRProvinceModel *provinceModel = self.provinceModelArr[provinceIndex]; - if (provinceModel.citylist && provinceModel.citylist.count > 0) { - BRCityModel *cityModel = provinceModel.citylist[cityIndex]; - // 返回地区模型数组 - return cityModel.arealist; - } else { - return nil; - } -} - -#pragma mark - 地址选择器 -- (UIPickerView *)pickerView { - if (!_pickerView) { - CGFloat pickerHeaderViewHeight = self.pickerHeaderView ? self.pickerHeaderView.bounds.size.height : 0; - _pickerView = [[UIPickerView alloc]initWithFrame:CGRectMake(0, self.pickerStyle.titleBarHeight + pickerHeaderViewHeight, self.keyView.bounds.size.width, self.pickerStyle.pickerHeight)]; - _pickerView.backgroundColor = self.pickerStyle.pickerColor; - _pickerView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth; - _pickerView.dataSource = self; - _pickerView.delegate = self; - } - return _pickerView; -} - -#pragma mark - UIPickerViewDataSource -// 1.设置 pickerView 的列数 -- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { - switch (self.pickerMode) { - case BRAddressPickerModeProvince: - return 1; - break; - case BRAddressPickerModeCity: - return 2; - break; - case BRAddressPickerModeArea: - return 3; - break; - - default: - break; - } -} - -// 2.设置 pickerView 每列的行数 -- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { - if (component == 0) { - // 返回省个数 - return self.provinceModelArr.count; - } - if (component == 1) { - // 返回市个数 - return self.cityModelArr.count; - } - if (component == 2) { - // 返回区个数 - return self.areaModelArr.count; - } - return 0; -} - -#pragma mark - UIPickerViewDelegate -// 3.设置 pickerView 的显示内容 -- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(nullable UIView *)view { - // 1.自定义 row 的内容视图 - UILabel *label = (UILabel *)view; - if (!label) { - label = [[UILabel alloc]init]; - label.backgroundColor = [UIColor clearColor]; - label.textAlignment = NSTextAlignmentCenter; - label.font = self.pickerStyle.pickerTextFont; - label.textColor = self.pickerStyle.pickerTextColor; - // 字体自适应属性 - label.adjustsFontSizeToFitWidth = YES; - // 自适应最小字体缩放比例 - label.minimumScaleFactor = 0.5f; - } - if (component == 0) { - BRProvinceModel *model = self.provinceModelArr[row]; - label.text = model.name; - } else if (component == 1) { - BRCityModel *model = self.cityModelArr[row]; - label.text = model.name; - } else if (component == 2) { - BRAreaModel *model = self.areaModelArr[row]; - label.text = model.name; - } - - // 2.设置选择器中间选中行的样式 - [self.pickerStyle setupPickerSelectRowStyle:pickerView titleForRow:row forComponent:component]; - - return label; -} - -// 4.滚动 pickerView 执行的回调方法 -- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { - if (component == 0) { // 选择省 - // 保存选择的省份的索引 - self.provinceIndex = row; - switch (self.pickerMode) { - case BRAddressPickerModeProvince: - { - self.selectProvinceModel = self.provinceModelArr.count > self.provinceIndex ? self.provinceModelArr[self.provinceIndex] : nil; - self.selectCityModel = nil; - self.selectAreaModel = nil; - } - break; - case BRAddressPickerModeCity: - { - self.cityModelArr = [self getCityModelArray:self.provinceIndex]; - [self.pickerView reloadComponent:1]; - [self.pickerView selectRow:0 inComponent:1 animated:YES]; - self.selectProvinceModel = self.provinceModelArr.count > self.provinceIndex ? self.provinceModelArr[self.provinceIndex] : nil; - self.selectCityModel = self.cityModelArr.count > 0 ? self.cityModelArr[0] : nil; - self.selectAreaModel = nil; - } - break; - case BRAddressPickerModeArea: - { - self.cityModelArr = [self getCityModelArray:self.provinceIndex]; - self.areaModelArr = [self getAreaModelArray:self.provinceIndex cityIndex:0]; - [self.pickerView reloadComponent:1]; - [self.pickerView selectRow:0 inComponent:1 animated:YES]; - [self.pickerView reloadComponent:2]; - [self.pickerView selectRow:0 inComponent:2 animated:YES]; - self.selectProvinceModel = self.provinceModelArr.count > self.provinceIndex ? self.provinceModelArr[self.provinceIndex] : nil; - self.selectCityModel = self.cityModelArr.count > 0 ? self.cityModelArr[0] : nil; - self.selectAreaModel = self.areaModelArr.count > 0 ? self.areaModelArr[0] : nil; - } - break; - default: - break; - } - } - if (component == 1) { // 选择市 - // 保存选择的城市的索引 - self.cityIndex = row; - switch (self.pickerMode) { - case BRAddressPickerModeCity: - { - self.selectCityModel = self.cityModelArr.count > self.cityIndex ? self.cityModelArr[self.cityIndex] : nil; - self.selectAreaModel = nil; - } - break; - case BRAddressPickerModeArea: - { - self.areaModelArr = [self getAreaModelArray:self.provinceIndex cityIndex:self.cityIndex]; - [self.pickerView reloadComponent:2]; - [self.pickerView selectRow:0 inComponent:2 animated:YES]; - self.selectCityModel = self.cityModelArr.count > self.cityIndex ? self.cityModelArr[self.cityIndex] : nil; - self.selectAreaModel = self.areaModelArr.count > 0 ? self.areaModelArr[0] : nil; - } - break; - default: - break; - } - } - if (component == 2) { // 选择区 - // 保存选择的地区的索引 - self.areaIndex = row; - if (self.pickerMode == BRAddressPickerModeArea) { - self.selectAreaModel = self.areaModelArr.count > self.areaIndex ? self.areaModelArr[self.areaIndex] : nil; - } - } - - // 滚动选择时执行 changeBlock - if (self.changeBlock) { - self.changeBlock(self.selectProvinceModel, self.selectCityModel, self.selectAreaModel); - } - - // 设置自动选择时,滚动选择时就执行 resultBlock - if (self.isAutoSelect) { - if (self.resultBlock) { - self.resultBlock(self.selectProvinceModel, self.selectCityModel, self.selectAreaModel); - } - } -} - -// 设置行高 -- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component { - return self.pickerStyle.rowHeight; -} - -#pragma mark - 重写父类方法 -- (void)reloadData { - // 1.处理数据源 - [self handlerPickerData]; - // 2.刷新选择器 - [self.pickerView reloadAllComponents]; - // 3.滚动到选择的地区 - if (self.pickerMode == BRAddressPickerModeProvince) { - [self.pickerView selectRow:self.provinceIndex inComponent:0 animated:YES]; - } else if (self.pickerMode == BRAddressPickerModeCity) { - [self.pickerView selectRow:self.provinceIndex inComponent:0 animated:YES]; - [self.pickerView selectRow:self.cityIndex inComponent:1 animated:YES]; - } else if (self.pickerMode == BRAddressPickerModeArea) { - [self.pickerView selectRow:self.provinceIndex inComponent:0 animated:YES]; - [self.pickerView selectRow:self.cityIndex inComponent:1 animated:YES]; - [self.pickerView selectRow:self.areaIndex inComponent:2 animated:YES]; - } -} - -- (void)addPickerToView:(UIView *)view { - // 1.添加地址选择器 - if (view) { - // 立即刷新容器视图 view 的布局(防止 view 使用自动布局时,选择器视图无法正常显示) - [view setNeedsLayout]; - [view layoutIfNeeded]; - - self.frame = view.bounds; - CGFloat pickerHeaderViewHeight = self.pickerHeaderView ? self.pickerHeaderView.bounds.size.height : 0; - CGFloat pickerFooterViewHeight = self.pickerFooterView ? self.pickerFooterView.bounds.size.height : 0; - self.pickerView.frame = CGRectMake(0, pickerHeaderViewHeight, view.bounds.size.width, view.bounds.size.height - pickerHeaderViewHeight - pickerFooterViewHeight); - [self addSubview:self.pickerView]; - } else { - [self.alertView addSubview:self.pickerView]; - } - - // ③添加中间选择行的两条分割线 - if (self.pickerStyle.clearPickerNewStyle) { - [self.pickerStyle addSeparatorLineView:self.pickerView]; - } - - // 2.绑定数据 - [self reloadData]; - - __weak typeof(self) weakSelf = self; - self.doneBlock = ^{ - // 点击确定按钮后,执行block回调 - if (weakSelf.resultBlock) { - weakSelf.resultBlock(weakSelf.selectProvinceModel, weakSelf.selectCityModel, weakSelf.selectAreaModel); - } - }; - - [super addPickerToView:view]; -} - -#pragma mark - 重写父类方法 -- (void)addSubViewToPicker:(UIView *)customView { - [self.pickerView addSubview:customView]; -} - -#pragma mark - 弹出选择器视图 -- (void)show { - [self addPickerToView:nil]; -} - -#pragma mark - 关闭选择器视图 -- (void)dismiss { - [self removePickerFromView:nil]; -} - -#pragma mark - setter方法 -- (void)setSelectValues:(NSArray *)selectValues { - self.mSelectValues = selectValues; -} - -#pragma mark - getter方法 -- (NSArray *)provinceModelArr { - if (!_provinceModelArr) { - _provinceModelArr = [NSArray array]; - } - return _provinceModelArr; -} - -- (NSArray *)cityModelArr { - if (!_cityModelArr) { - _cityModelArr = [NSArray array]; - } - return _cityModelArr; -} - -- (NSArray *)areaModelArr { - if (!_areaModelArr) { - _areaModelArr = [NSArray array]; - } - return _areaModelArr; -} - -- (BRProvinceModel *)selectProvinceModel { - if (!_selectProvinceModel) { - _selectProvinceModel = [[BRProvinceModel alloc]init]; - } - return _selectProvinceModel; -} - -- (BRCityModel *)selectCityModel { - if (!_selectCityModel) { - _selectCityModel = [[BRCityModel alloc]init]; - _selectCityModel.code = @""; - _selectCityModel.name = @""; - } - return _selectCityModel; -} - -- (BRAreaModel *)selectAreaModel { - if (!_selectAreaModel) { - _selectAreaModel = [[BRAreaModel alloc]init]; - _selectAreaModel.code = @""; - _selectAreaModel.name = @""; - } - return _selectAreaModel; -} - -- (NSArray *)dataSourceArr { - if (!_dataSourceArr) { - _dataSourceArr = [NSArray array]; - } - return _dataSourceArr; -} - -- (NSArray *)mSelectValues { - if (!_mSelectValues) { - _mSelectValues = [NSArray array]; - } - return _mSelectValues; -} - -- (NSArray *)selectIndexs { - if (!_selectIndexs) { - _selectIndexs = [NSArray array]; - } - return _selectIndexs; -} - -@end diff --git a/Pods/BRPickerView/BRPickerView/BRPickerView.h b/Pods/BRPickerView/BRPickerView/BRPickerView.h deleted file mode 100755 index 118f605..0000000 --- a/Pods/BRPickerView/BRPickerView/BRPickerView.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// BRPickerView.h -// BRPickerViewDemo -// -// Created by renbo on 2017/8/11. -// Copyright © 2017 irenb. All rights reserved. -// -// 最新代码下载地址:https://github.com/91renb/BRPickerView - -#ifndef BRPickerView_h -#define BRPickerView_h - -#import "BRDatePickerView.h" -#import "BRAddressPickerView.h" -#import "BRStringPickerView.h" - -#endif /* BRPickerView_h */ diff --git a/Pods/BRPickerView/BRPickerView/Base/BRBaseView.h b/Pods/BRPickerView/BRPickerView/Base/BRBaseView.h deleted file mode 100644 index 6c47162..0000000 --- a/Pods/BRPickerView/BRPickerView/Base/BRBaseView.h +++ /dev/null @@ -1,76 +0,0 @@ -// -// BaseView.h -// BRPickerViewDemo -// -// Created by renbo on 2017/8/11. -// Copyright © 2017 irenb. All rights reserved. -// -// 最新代码下载地址:https://github.com/91renb/BRPickerView - -#import -#import "BRPickerStyle.h" - -NS_ASSUME_NONNULL_BEGIN - -typedef void(^BRCancelBlock)(void); -typedef void(^BRDoneClickBlock)(void); - -@interface BRBaseView : UIView - -/** 选择器标题 */ -@property (nullable, nonatomic, copy) NSString *title; - -/** 是否自动选择,即滚动选择器后就执行结果回调,默认为 NO */ -@property (nonatomic, assign) BOOL isAutoSelect; - -/** 自定义UI样式(不传或为nil时,是默认样式) */ -@property (nullable, nonatomic, strong) BRPickerStyle *pickerStyle; - -/** 取消选择的回调 */ -@property (nullable, nonatomic, copy) BRCancelBlock cancelBlock; - -/** accessory view for above picker view. default is nil */ -@property (nullable, nonatomic, strong) UIView *pickerHeaderView; - -/** accessory view below picker view. default is nil */ -@property (nullable, nonatomic, strong) UIView *pickerFooterView; - -/// 确定按钮点击事件的回调 -/// 应用场景:如果是自定义确定按钮,需要在该按钮点击事件方法里,执行一下 doneBlock 回调。目的是触发组件内部执行 resultBlock 回调,回调选择的值 -@property (nullable, nonatomic, copy) BRDoneClickBlock doneBlock; - -/** 弹框视图(使用场景:可以在 alertView 上添加选择器的自定义背景视图) */ -@property (nullable, nonatomic, strong) UIView *alertView; - -/** 组件的父视图:可以传 自己获取的 keyWindow,或页面的 view */ -@property (nullable, nonatomic, strong) UIView *keyView; - - -/// 刷新选择器数据 -/// 应用场景:动态更新数据源、动态更新选择的值、选择器类型切换等 -- (void)reloadData; - -/// 扩展一:添加选择器到指定容器视图上 -/// 应用场景:可将中间的滚轮选择器 pickerView 视图(不包含蒙层及标题栏)添加到任何自定义视图上(会自动填满容器视图),也方便自定义更多的弹框样式 -/// 补充说明:如果是自定义确定按钮,需要回调默认选择的值:只需在自定义确定按钮的点击事件方法里执行一下 doneBlock 回调(目的是去触发组件内部执行 resultBlock 回调,进而回调默认选择的值) -/// @param view 容器视图 -- (void)addPickerToView:(nullable UIView *)view NS_REQUIRES_SUPER; - -/// 从指定容器视图上移除选择器 -/// @param view 容器视图 -- (void)removePickerFromView:(nullable UIView *)view; - -/// 扩展二:添加自定义视图到选择器(pickerView)上 -/// 应用场景:可以添加一些固定的标题、单位等到选择器中间 -/// @param customView 自定义视图 -- (void)addSubViewToPicker:(UIView *)customView; - -/// 扩展三:添加自定义视图到标题栏(titleBarView)上 -/// 应用场景:可以添加一些子控件到标题栏 -/// @param customView 自定义视图 -- (void)addSubViewToTitleBar:(UIView *)customView; - - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/BRPickerView/BRPickerView/Base/BRBaseView.m b/Pods/BRPickerView/BRPickerView/Base/BRBaseView.m deleted file mode 100644 index 2852c5f..0000000 --- a/Pods/BRPickerView/BRPickerView/Base/BRBaseView.m +++ /dev/null @@ -1,386 +0,0 @@ -// -// BaseView.m -// BRPickerViewDemo -// -// Created by renbo on 2017/8/11. -// Copyright © 2017 irenb. All rights reserved. -// -// 最新代码下载地址:https://github.com/91renb/BRPickerView - -#import "BRBaseView.h" - -@interface BRBaseView () -// 蒙层视图 -@property (nonatomic, strong) UIView *maskView; -// 标题栏背景视图 -@property (nonatomic, strong) UIView *titleBarView; -// 左边取消按钮 -@property (nonatomic, strong) UIButton *cancelBtn; -// 右边确定按钮 -@property (nonatomic, strong) UIButton *doneBtn; -// 中间标题 -@property (nonatomic, strong) UILabel *titleLabel; - -// 取消按钮离屏幕边缘的距离 -@property (nonatomic, assign) CGFloat cancelBtnMargin; -// 确定按钮离屏幕边缘的距离 -@property (nonatomic, assign) CGFloat doneBtnMargin; - -@end - -@implementation BRBaseView - -- (void)initUI { - self.frame = self.keyView.bounds; - // 设置子视图的宽度随着父视图变化 - self.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - - if (!self.pickerStyle.hiddenMaskView) { - [self addSubview:self.maskView]; - } - - [self addSubview:self.alertView]; - - // 是否隐藏标题栏 - if (!self.pickerStyle.hiddenTitleBarView) { - [self.alertView addSubview:self.titleBarView]; - [self.alertView sendSubviewToBack:self.titleBarView]; - - if (!self.pickerStyle.hiddenTitleLabel) { - [self.titleBarView addSubview:self.titleLabel]; - } - if (!self.pickerStyle.hiddenCancelBtn) { - [self.titleBarView addSubview:self.cancelBtn]; - // 获取边距 - if (self.pickerStyle.cancelBtnFrame.origin.x < self.bounds.size.width / 2) { - self.cancelBtnMargin = self.pickerStyle.cancelBtnFrame.origin.x; - } else { - self.cancelBtnMargin = self.bounds.size.width - self.pickerStyle.cancelBtnFrame.origin.x - self.pickerStyle.cancelBtnFrame.size.width; - } - } - if (!self.pickerStyle.hiddenDoneBtn) { - [self.titleBarView addSubview:self.doneBtn]; - // 获取边距 - if (self.pickerStyle.doneBtnFrame.origin.x < self.bounds.size.width / 2) { - self.doneBtnMargin = self.pickerStyle.doneBtnFrame.origin.x; - } else { - self.doneBtnMargin = self.bounds.size.width - self.pickerStyle.doneBtnFrame.origin.x - self.pickerStyle.doneBtnFrame.size.width; - } - } - } -} - -#pragma mark - 适配横屏安全区域,更新子视图布局 -- (void)layoutSubviews { - [super layoutSubviews]; - if (_cancelBtn || _doneBtn) { - if (@available(iOS 11.0, *)) { - UIEdgeInsets safeInsets = self.safeAreaInsets; - if (_cancelBtn) { - CGRect cancelBtnFrame = self.pickerStyle.cancelBtnFrame; - if (cancelBtnFrame.origin.x < MIN(self.bounds.size.width / 2, self.bounds.size.height / 2)) { - cancelBtnFrame.origin.x += safeInsets.left; - } else { - cancelBtnFrame.origin.x = self.bounds.size.width - cancelBtnFrame.size.width - safeInsets.right - self.cancelBtnMargin; - } - self.cancelBtn.frame = cancelBtnFrame; - } - if (_doneBtn) { - CGRect doneBtnFrame = self.pickerStyle.doneBtnFrame; - if (doneBtnFrame.origin.x < MIN(self.bounds.size.width / 2, self.bounds.size.height / 2)) { - doneBtnFrame.origin.x += safeInsets.left; - } else { - doneBtnFrame.origin.x = self.bounds.size.width - doneBtnFrame.size.width - safeInsets.right - self.doneBtnMargin; - } - self.doneBtn.frame = doneBtnFrame; - } - } - } - - if (_alertView && self.pickerStyle.topCornerRadius > 0) { - // 设置顶部圆角 - [BRPickerStyle br_setView:_alertView roundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight withRadius:self.pickerStyle.topCornerRadius]; - } -} - -#pragma mark - 蒙层视图 -- (UIView *)maskView { - if (!_maskView) { - _maskView = [[UIView alloc]initWithFrame:self.keyView.bounds]; - _maskView.backgroundColor = self.pickerStyle.maskColor; - // 设置子视图的大小随着父视图变化 - _maskView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - _maskView.userInteractionEnabled = YES; - UITapGestureRecognizer *myTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(didTapMaskView:)]; - [_maskView addGestureRecognizer:myTap]; - } - return _maskView; -} - -#pragma mark - 弹框视图 -- (UIView *)alertView { - if (!_alertView) { - CGFloat accessoryViewHeight = 0; - if (self.pickerHeaderView) { - accessoryViewHeight += self.pickerHeaderView.bounds.size.height; - } - if (self.pickerFooterView) { - accessoryViewHeight += self.pickerFooterView.bounds.size.height; - } - CGFloat height = self.pickerStyle.titleBarHeight + self.pickerStyle.pickerHeight + self.pickerStyle.paddingBottom + accessoryViewHeight; - _alertView = [[UIView alloc]initWithFrame:CGRectMake(0, self.keyView.bounds.size.height - height, self.keyView.bounds.size.width, height)]; - _alertView.backgroundColor = self.pickerStyle.alertViewColor ? self.pickerStyle.alertViewColor : self.pickerStyle.pickerColor; - if (!self.pickerStyle.topCornerRadius && !self.pickerStyle.hiddenShadowLine) { - // 设置弹框视图顶部边框线 - UIView *shadowLineView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, _alertView.frame.size.width, self.pickerStyle.shadowLineHeight)]; - shadowLineView.backgroundColor = self.pickerStyle.shadowLineColor; - shadowLineView.autoresizingMask = UIViewAutoresizingFlexibleWidth; - [_alertView addSubview:shadowLineView]; - } - _alertView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth; - } - return _alertView; -} - -#pragma mark - 标题栏视图 -- (UIView *)titleBarView { - if (!_titleBarView) { - _titleBarView =[[UIView alloc]initWithFrame:CGRectMake(0, 0, self.keyView.bounds.size.width, self.pickerStyle.titleBarHeight)]; - _titleBarView.backgroundColor = self.pickerStyle.titleBarColor; - _titleBarView.autoresizingMask = UIViewAutoresizingFlexibleWidth; - if (!self.pickerStyle.hiddenTitleLine) { - // 设置标题栏底部分割线 - UIView *titleLineView = [[UIView alloc]initWithFrame:CGRectMake(0, _titleBarView.frame.size.height - 0.5f, _titleBarView.frame.size.width, 0.5f)]; - titleLineView.backgroundColor = self.pickerStyle.titleLineColor; - titleLineView.autoresizingMask = UIViewAutoresizingFlexibleWidth; - [_titleBarView addSubview:titleLineView]; - } - } - return _titleBarView; -} - -#pragma mark - 取消按钮 -- (UIButton *)cancelBtn { - if (!_cancelBtn) { - _cancelBtn = [UIButton buttonWithType:UIButtonTypeCustom]; - _cancelBtn.frame = self.pickerStyle.cancelBtnFrame; - _cancelBtn.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin; - _cancelBtn.backgroundColor = self.pickerStyle.cancelColor;; - _cancelBtn.titleLabel.font = self.pickerStyle.cancelTextFont; - [_cancelBtn setTitleColor:self.pickerStyle.cancelTextColor forState:UIControlStateNormal]; - if (self.pickerStyle.cancelBtnImage) { - [_cancelBtn setImage:self.pickerStyle.cancelBtnImage forState:UIControlStateNormal]; - } - if (self.pickerStyle.cancelBtnTitle) { - [_cancelBtn setTitle:self.pickerStyle.cancelBtnTitle forState:UIControlStateNormal]; - } - [_cancelBtn addTarget:self action:@selector(clickCancelBtn) forControlEvents:UIControlEventTouchUpInside]; - // 设置按钮圆角或边框 - if (self.pickerStyle.cancelBorderStyle == BRBorderStyleSolid) { - _cancelBtn.layer.cornerRadius = self.pickerStyle.cancelCornerRadius > 0 ? self.pickerStyle.cancelCornerRadius : 6.0f; - _cancelBtn.layer.borderColor = self.pickerStyle.cancelTextColor.CGColor; - _cancelBtn.layer.borderWidth = self.pickerStyle.cancelBorderWidth > 0 ? self.pickerStyle.cancelBorderWidth : 1.0f; - _cancelBtn.layer.masksToBounds = YES; - } else if (self.pickerStyle.cancelBorderStyle == BRBorderStyleFill) { - _cancelBtn.layer.cornerRadius = self.pickerStyle.cancelCornerRadius > 0 ? self.pickerStyle.cancelCornerRadius : 6.0f; - _cancelBtn.layer.masksToBounds = YES; - } - } - return _cancelBtn; -} - -#pragma mark - 确定按钮 -- (UIButton *)doneBtn { - if (!_doneBtn) { - _doneBtn = [UIButton buttonWithType:UIButtonTypeCustom]; - _doneBtn.frame = self.pickerStyle.doneBtnFrame; - _doneBtn.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin; - _doneBtn.backgroundColor = self.pickerStyle.doneColor; - if (self.pickerStyle.doneBtnImage) { - [_doneBtn setImage:self.pickerStyle.doneBtnImage forState:UIControlStateNormal]; - } - if (self.pickerStyle.doneBtnTitle) { - _doneBtn.titleLabel.font = self.pickerStyle.doneTextFont; - [_doneBtn setTitleColor:self.pickerStyle.doneTextColor forState:UIControlStateNormal]; - [_doneBtn setTitle:self.pickerStyle.doneBtnTitle forState:UIControlStateNormal]; - } - [_doneBtn addTarget:self action:@selector(clickDoneBtn) forControlEvents:UIControlEventTouchUpInside]; - // 设置按钮圆角或边框 - if (self.pickerStyle.doneBorderStyle == BRBorderStyleSolid) { - _doneBtn.layer.cornerRadius = self.pickerStyle.doneCornerRadius > 0 ? self.pickerStyle.doneCornerRadius : 6.0f; - _doneBtn.layer.borderColor = self.pickerStyle.doneTextColor.CGColor; - _doneBtn.layer.borderWidth = self.pickerStyle.doneBorderWidth > 0 ? self.pickerStyle.doneBorderWidth : 1.0f; - _doneBtn.layer.masksToBounds = YES; - } else if (self.pickerStyle.doneBorderStyle == BRBorderStyleFill) { - _doneBtn.layer.cornerRadius = self.pickerStyle.doneCornerRadius > 0 ? self.pickerStyle.doneCornerRadius : 6.0f; - _doneBtn.layer.masksToBounds = YES; - } - } - return _doneBtn; -} - -#pragma mark - 中间标题label -- (UILabel *)titleLabel { - if (!_titleLabel) { - _titleLabel = [[UILabel alloc]initWithFrame:self.pickerStyle.titleLabelFrame]; - _titleLabel.backgroundColor = self.pickerStyle.titleLabelColor; - _titleLabel.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin; - _titleLabel.textAlignment = NSTextAlignmentCenter; - _titleLabel.font = self.pickerStyle.titleTextFont; - _titleLabel.textColor = self.pickerStyle.titleTextColor; - _titleLabel.text = self.title; - } - return _titleLabel; -} - -#pragma mark - 点击蒙层视图事件 -- (void)didTapMaskView:(UITapGestureRecognizer *)sender { - [self removePickerFromView:nil]; - if (self.cancelBlock) { - self.cancelBlock(); - } -} - -#pragma mark - 取消按钮的点击事件 -- (void)clickCancelBtn { - [self removePickerFromView:nil]; - if (self.cancelBlock) { - self.cancelBlock(); - } -} - -#pragma mark - 确定按钮的点击事件 -- (void)clickDoneBtn { - [self removePickerFromView:nil]; - if (self.doneBlock) { - self.doneBlock(); - } -} - -#pragma mark - 添加视图方法 -- (void)addPickerToView:(UIView *)view { - if (view) { - self.frame = view.bounds; - self.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - - CGFloat accessoryViewHeight = 0; - if (self.pickerHeaderView) { - CGRect rect = self.pickerHeaderView.frame; - self.pickerHeaderView.frame = CGRectMake(0, 0, view.bounds.size.width, rect.size.height); - self.pickerHeaderView.autoresizingMask = UIViewAutoresizingFlexibleWidth; - [self addSubview:self.pickerHeaderView]; - - accessoryViewHeight += self.pickerHeaderView.bounds.size.height; - } - if (self.pickerFooterView) { - CGRect rect = self.pickerFooterView.frame; - self.pickerFooterView.frame = CGRectMake(0, view.bounds.size.height - rect.size.height, view.bounds.size.width, rect.size.height); - self.pickerFooterView.autoresizingMask = UIViewAutoresizingFlexibleWidth; - [self addSubview:self.pickerFooterView]; - - accessoryViewHeight += self.pickerFooterView.bounds.size.height; - } - - [view addSubview:self]; - } else { - [self initUI]; - - if (self.pickerHeaderView) { - CGRect rect = self.pickerHeaderView.frame; - CGFloat titleBarHeight = self.pickerStyle.hiddenTitleBarView ? 0 : self.pickerStyle.titleBarHeight; - self.pickerHeaderView.frame = CGRectMake(0, titleBarHeight, self.alertView.bounds.size.width, rect.size.height); - self.pickerHeaderView.autoresizingMask = UIViewAutoresizingFlexibleWidth; - [self.alertView addSubview:self.pickerHeaderView]; - } - if (self.pickerFooterView) { - CGRect rect = self.pickerFooterView.frame; - self.pickerFooterView.frame = CGRectMake(0, self.alertView.bounds.size.height - self.pickerStyle.paddingBottom - rect.size.height, self.alertView.bounds.size.width, rect.size.height); - self.pickerFooterView.autoresizingMask = UIViewAutoresizingFlexibleWidth; - [self.alertView addSubview:self.pickerFooterView]; - } - - [self.keyView addSubview:self]; - // 动画前初始位置 - CGRect rect = self.alertView.frame; - rect.origin.y = self.bounds.size.height; - self.alertView.frame = rect; - // 弹出动画 - if (!self.pickerStyle.hiddenMaskView) { - self.maskView.alpha = 0; - } - [UIView animateWithDuration:0.3f animations:^{ - if (!self.pickerStyle.hiddenMaskView) { - self.maskView.alpha = 1; - } - CGFloat alertViewHeight = self.alertView.bounds.size.height; - CGRect rect = self.alertView.frame; - rect.origin.y -= alertViewHeight; - self.alertView.frame = rect; - }]; - } -} - -#pragma mark - 移除视图方法 -- (void)removePickerFromView:(UIView *)view { - if (view) { - [self removeFromSuperview]; - } else { - // 关闭动画 - [UIView animateWithDuration:0.2f animations:^{ - CGFloat alertViewHeight = self.alertView.bounds.size.height; - CGRect rect = self.alertView.frame; - rect.origin.y += alertViewHeight; - self.alertView.frame = rect; - if (!self.pickerStyle.hiddenMaskView) { - self.maskView.alpha = 0; - } - } completion:^(BOOL finished) { - [self removeFromSuperview]; - }]; - } -} - -#pragma mark - 刷新选择器数据 -- (void)reloadData { - -} - -#pragma mark - 添加自定义视图到选择器(picker)上 -- (void)addSubViewToPicker:(UIView *)customView { - -} - -#pragma mark - 添加自定义视图到标题栏(titleBar)上 -- (void)addSubViewToTitleBar:(UIView *)customView { - if (!self.pickerStyle.hiddenTitleBarView) { - [self.titleBarView addSubview:customView]; - } -} - -- (BRPickerStyle *)pickerStyle { - if (!_pickerStyle) { - _pickerStyle = [[BRPickerStyle alloc]init]; - } - return _pickerStyle; -} - -- (UIView *)keyView { - if (!_keyView) { - _keyView = BRGetKeyWindow(); - } - return _keyView; -} - -#pragma mark - setter 方法(支持动态设置标题) -- (void)setTitle:(NSString *)title { - _title = title; - if (_titleLabel) { - _titleLabel.text = title; - } -} - -- (void)dealloc { - NSLog(@"%@ dealloc", NSStringFromClass([self class])); -} - -@end diff --git a/Pods/BRPickerView/BRPickerView/Base/BRPickerStyle.h b/Pods/BRPickerView/BRPickerView/Base/BRPickerStyle.h deleted file mode 100644 index c57bb3d..0000000 --- a/Pods/BRPickerView/BRPickerView/Base/BRPickerStyle.h +++ /dev/null @@ -1,251 +0,0 @@ -// -// BRPickerStyle.h -// BRPickerViewDemo -// -// Created by renbo on 2019/10/2. -// Copyright © 2019 irenb. All rights reserved. -// -// 最新代码下载地址:https://github.com/91renb/BRPickerView - -#import -#import -#import "BRPickerViewMacro.h" - -NS_ASSUME_NONNULL_BEGIN - -// 边框样式(左边取消按钮/右边确定按钮) -typedef NS_ENUM(NSInteger, BRBorderStyle) { - /** 无边框(默认) */ - BRBorderStyleNone = 0, - /** 有圆角和边框 */ - BRBorderStyleSolid, - /** 仅有圆角 */ - BRBorderStyleFill -}; - -@interface BRPickerStyle : NSObject - - -/////////////////////////////// 蒙层视图(maskView)/////////////////////////////// - -/** 设置背景颜色 */ -@property (nullable, nonatomic, strong) UIColor *maskColor; - -/** 隐藏 maskView,默认为 NO */ -@property (nonatomic, assign) BOOL hiddenMaskView; - - -////////////////////////////// 弹框视图(alertView)/////////////////////////////// - -/** 设置 alertView 弹框视图的背景颜色 */ -@property (nullable, nonatomic, strong) UIColor *alertViewColor; - -/** 设置 alertView 弹框视图左上和右上的圆角半径 */ -@property (nonatomic, assign) NSInteger topCornerRadius; - -/** 设置 alertView 弹框视图顶部边框线颜色 */ -@property (nullable, nonatomic, strong) UIColor *shadowLineColor; - -/** 设置 alertView 弹框视图顶部边框线高度 */ -@property (nonatomic, assign) CGFloat shadowLineHeight; - -/** 隐藏 alertView 弹框视图顶部边框线,默认为 NO */ -@property (nonatomic, assign) BOOL hiddenShadowLine; - -/** 设置 alertView 弹框视图底部内边距,默认为安全区域底部距屏幕底部的高度 */ -@property (nonatomic, assign) CGFloat paddingBottom; - - -//////////////////////////// 标题栏视图(titleBarView) //////////////////////////// - -/** 设置 titleBarView 标题栏的背景颜色 */ -@property (nullable, nonatomic, strong) UIColor *titleBarColor; - -/** 设置 titleBarView 标题栏的高度 */ -@property (nonatomic, assign) CGFloat titleBarHeight; - -/** 设置 titleBarView 标题栏底部分割线颜色 */ -@property (nullable, nonatomic, strong) UIColor *titleLineColor; - -/** 隐藏 titleBarView 标题栏底部分割线,默认为 NO */ -@property (nonatomic, assign) BOOL hiddenTitleLine; - -/** 隐藏 titleBarView,默认为 NO */ -@property (nonatomic, assign) BOOL hiddenTitleBarView; - - -////////////////////////// 标题栏中间label(titleLabel)/////////////////////////// - -/** 设置 titleLabel 的背景颜色 */ -@property (nullable, nonatomic, strong) UIColor *titleLabelColor; - -/** 设置 titleLabel 文本颜色 */ -@property (nullable, nonatomic, strong) UIColor *titleTextColor; - -/** 设置 titleLabel 字体大小 */ -@property (nullable, nonatomic, strong) UIFont *titleTextFont; - -/** 设置 titleLabel 的 frame */ -@property (nonatomic, assign) CGRect titleLabelFrame; - -/** 隐藏 titleLabel,默认为 NO */ -@property (nonatomic, assign) BOOL hiddenTitleLabel; - - -/////////////////////////////// 取消按钮(cancelBtn)////////////////////////////// - -/** 设置 cancelBtn 的背景颜色 */ -@property (nullable, nonatomic, strong) UIColor *cancelColor; - -/** 设置 cancelBtn 标题的颜色 */ -@property (nullable, nonatomic, strong) UIColor *cancelTextColor; - -/** 设置 cancelBtn 标题的字体 */ -@property (nullable, nonatomic, strong) UIFont *cancelTextFont; - -/** 设置 cancelBtn 的 frame */ -@property (nonatomic, assign) CGRect cancelBtnFrame; - -/** 设置 cancelBtn 的边框样式 */ -@property (nonatomic, assign) BRBorderStyle cancelBorderStyle; - -/** 设置 cancelBtn 的圆角大小 */ -@property (nonatomic, assign) CGFloat cancelCornerRadius; - -/** 设置 cancelBtn 的边框宽度 */ -@property (nonatomic, assign) CGFloat cancelBorderWidth; - -/** 设置 cancelBtn 的 image */ -@property (nullable, nonatomic, strong) UIImage *cancelBtnImage; - -/** 设置 cancelBtn 的 title */ -@property (nullable, nonatomic, copy) NSString *cancelBtnTitle; - -/** 隐藏 cancelBtn,默认为 NO */ -@property (nonatomic, assign) BOOL hiddenCancelBtn; - - -/////////////////////////////// 确定按钮(doneBtn)//////////////////////////////// - -/** 设置 doneBtn 的背景颜色 */ -@property (nullable, nonatomic, strong) UIColor *doneColor; - -/** 设置 doneBtn 标题的颜色 */ -@property (nullable, nonatomic, strong) UIColor *doneTextColor; - -/** 设置 doneBtn 标题的字体 */ -@property (nullable, nonatomic, strong) UIFont *doneTextFont; - -/** 设置 doneBtn 的 frame */ -@property (nonatomic, assign) CGRect doneBtnFrame; - -/** 设置 doneBtn 的边框样式 */ -@property (nonatomic, assign) BRBorderStyle doneBorderStyle; - -/** 设置 doneBtn 的圆角大小 */ -@property (nonatomic, assign) CGFloat doneCornerRadius; - -/** 设置 doneBtn 的边框宽度 */ -@property (nonatomic, assign) CGFloat doneBorderWidth; - -/** 设置 doneBtn 的 image */ -@property (nullable, nonatomic, strong) UIImage *doneBtnImage; - -/** 设置 doneBtn 的 title */ -@property (nullable, nonatomic, copy) NSString *doneBtnTitle; - -/** 隐藏 doneBtn,默认为 NO */ -@property (nonatomic, assign) BOOL hiddenDoneBtn; - - -/////////////////////////////// 选择器(pickerView)/////////////////////////////// - -/** 设置 picker 的背景颜色 */ -@property (nullable, nonatomic, strong) UIColor *pickerColor; - -/** 设置 picker 中间两条分割线的背景颜色。暂不支持日期选择器前4种类型 */ -@property (nullable, nonatomic, strong) UIColor *separatorColor; - -/** 设置 picker 中间两条分割线的高度。暂不支持日期选择器前4种类型 */ -@property (nonatomic, assign) CGFloat separatorHeight; - -/** 设置 picker 文本的颜色。暂不支持日期选择器前4种类型 */ -@property (nullable, nonatomic, strong) UIColor *pickerTextColor; - -/** 设置 picker 文本的字体。暂不支持日期选择器前4种类型 */ -@property (nullable, nonatomic, strong) UIFont *pickerTextFont; - -/** 设置 picker 中间选中行的背景颜色。暂不支持日期选择器前4种类型 */ -@property (nullable, nonatomic, strong) UIColor *selectRowColor; - -/** 设置 picker 中间选中行文本的颜色。暂不支持日期选择器前4种类型 */ -@property (nullable, nonatomic, strong) UIColor *selectRowTextColor; - -/** 设置 picker 中间选中行文本的字体。暂不支持日期选择器前4种类型 */ -@property (nullable, nonatomic, strong) UIFont *selectRowTextFont; - -/** 设置 picker 的高度,系统默认高度为 216 */ -@property (nonatomic, assign) CGFloat pickerHeight; - -/** 设置 picker 的行高。暂不支持日期选择器前4种类型 */ -@property (nonatomic, assign) CGFloat rowHeight; - -/** - * 清除iOS14之后选择器默认自带的新样式。暂不支持日期选择器前4种类型 - * 主要是:①隐藏中间选择行的背景样式,②清除默认的内边距,③新增中间选择行的两条分割线;与iOS14之前的样式保持一致),默认为 YES - */ -@property (nonatomic, assign) BOOL clearPickerNewStyle; - - -/** - * 设置语言(不设置或为nil时,将随系统的语言自动改变) - * language: zh-Hans(简体中文)、zh-Hant(繁体中文)、en(英语 ) - */ -@property(nullable, nonatomic, copy) NSString *language; - - -/////// 日期选择器单位样式(showUnitType == BRShowUnitTypeOnlyCenter 时生效。暂不支持日期选择器前4种类型 )/////// - -/** 设置日期选择器单位文本的颜色 */ -@property (nullable, nonatomic, strong) UIColor *dateUnitTextColor; - -/** 设置日期选择器单位文本的字体 */ -@property (nullable, nonatomic, strong) UIFont *dateUnitTextFont; - -/** 设置日期选择器单位 label 的水平方向偏移量 */ -@property (nonatomic, assign) CGFloat dateUnitOffsetX; - -/** 设置日期选择器单位 label 的竖直方向偏移量 */ -@property (nonatomic, assign) CGFloat dateUnitOffsetY; - - -//////////////////////////////// 常用的几种模板样式 //////////////////////////////// - -/// 弹框模板样式1 - 取消/确定按钮圆角样式 -/// @param themeColor 主题颜色 -+ (instancetype)pickerStyleWithThemeColor:(nullable UIColor *)themeColor; - -/// 弹框模板样式2 - 顶部圆角样式 + 完成按钮 -/// @param doneTextColor 完成按钮标题的颜色 -+ (instancetype)pickerStyleWithDoneTextColor:(nullable UIColor *)doneTextColor; - -/// 弹框模板样式3 - 顶部圆角样式 + 图标按钮 -/// @param doneBtnImage 完成按钮的 image -+ (instancetype)pickerStyleWithDoneBtnImage:(nullable UIImage *)doneBtnImage; - - -//////////////////////////////// 以下是组件内部使用的几个封装方法 //////////////////////////////// - -/** 设置选择器中间选中行的样式 */ -- (void)setupPickerSelectRowStyle:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component; - -/** 添加选择器中间行上下两条分割线(iOS14之后系统默认去掉,需要手动添加)*/ -- (void)addSeparatorLineView:(UIView *)pickerView; - -/** 设置 view 的部分圆角 */ -// corners(枚举类型,可组合使用):UIRectCornerTopLeft | UIRectCornerTopRight | UIRectCornerBottomLeft | UIRectCornerBottomRight | UIRectCornerAllCorners -+ (void)br_setView:(UIView *)view roundingCorners:(UIRectCorner)corners withRadius:(CGFloat)radius; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/BRPickerView/BRPickerView/Base/BRPickerStyle.m b/Pods/BRPickerView/BRPickerView/Base/BRPickerStyle.m deleted file mode 100644 index fa8600c..0000000 --- a/Pods/BRPickerView/BRPickerView/Base/BRPickerStyle.m +++ /dev/null @@ -1,494 +0,0 @@ -// -// BRPickerStyle.m -// BRPickerViewDemo -// -// Created by renbo on 2019/10/2. -// Copyright © 2019 irenb. All dones reserved. -// -// 最新代码下载地址:https://github.com/91renb/BRPickerView - -#import "BRPickerStyle.h" -#import "NSBundle+BRPickerView.h" - -// 标题颜色 -#define kBRDefaultTextColor BR_RGB_HEX(0x333333, 1.0f) - -@implementation BRPickerStyle - -- (instancetype)init { - if (self = [super init]) { - self.clearPickerNewStyle = YES; - } - return self; -} - -/// 设置默认样式 - -- (UIColor *)maskColor { - if (!_maskColor) { - _maskColor = [self br_colorWithLightColor:BR_RGB_HEX(0x000000, 0.3f) darkColor:BR_RGB_HEX(0x666666, 0.3f)]; - } - return _maskColor; -} - -- (UIColor *)shadowLineColor { - if (!_shadowLineColor) { - if (@available(iOS 13.0, *)) { - // 边框线颜色,有透明度 - _shadowLineColor = [UIColor separatorColor]; - } else { - _shadowLineColor = BR_RGB_HEX(0xc6c6c8, 1.0f); - } - } - return _shadowLineColor; -} - -- (CGFloat)shadowLineHeight { - if (_shadowLineHeight <= 0 || _shadowLineHeight > 5.0f) { - _shadowLineHeight = 0.5f; - } - return _shadowLineHeight; -} - -- (CGFloat)paddingBottom { - if (_paddingBottom <= 0) { - _paddingBottom = BR_BOTTOM_MARGIN; - } - return _paddingBottom; -} - -- (UIColor *)titleBarColor { - if (!_titleBarColor) { - if (@available(iOS 13.0, *)) { - // #ffffff(正常)、#1c1c1e(深色) - _titleBarColor = [UIColor secondarySystemGroupedBackgroundColor]; - } else { - _titleBarColor = [UIColor whiteColor]; - } - } - return _titleBarColor; -} - -- (CGFloat)titleBarHeight { - if (!self.hiddenTitleBarView) { - if (_titleBarHeight < 44.0f && (!self.hiddenCancelBtn || !self.hiddenDoneBtn || !self.hiddenTitleLabel)) { - _titleBarHeight = 44.0f; - } - } else { - _titleBarHeight = 0; - } - return _titleBarHeight; -} - -- (UIColor *)titleLineColor { - if (!_titleLineColor) { - _titleLineColor = [self br_colorWithLightColor:BR_RGB_HEX(0xededee, 1.0f) darkColor:BR_RGB_HEX(0x18181c, 1.0f)]; - } - return _titleLineColor; -} - -- (UIColor *)cancelColor { - if (!_cancelColor) { - _cancelColor = [UIColor clearColor]; - } - return _cancelColor; -} - -- (UIColor *)cancelTextColor { - if (!_cancelTextColor) { - if (@available(iOS 13.0, *)) { - _cancelTextColor = [UIColor labelColor]; - } else { - _cancelTextColor = kBRDefaultTextColor; - } - } - return _cancelTextColor; -} - -- (UIFont *)cancelTextFont { - if (!_cancelTextFont) { - _cancelTextFont = [UIFont systemFontOfSize:16.0f]; - } - return _cancelTextFont; -} - -- (NSString *)cancelBtnTitle { - if (!_cancelBtnTitle && !_cancelBtnImage) { - _cancelBtnTitle = [NSBundle br_localizedStringForKey:@"取消" language:self.language]; - } - return _cancelBtnTitle; -} - -- (CGRect)cancelBtnFrame { - if (CGRectEqualToRect(_cancelBtnFrame, CGRectZero) || _cancelBtnFrame.size.height == 0) { - _cancelBtnFrame = CGRectMake(5, 8, 60, 28); - } - return _cancelBtnFrame; -} - -- (UIColor *)titleLabelColor { - if (!_titleLabelColor) { - _titleLabelColor = [UIColor clearColor]; - } - return _titleLabelColor; -} - -- (UIColor *)titleTextColor { - if (!_titleTextColor) { - if (@available(iOS 13.0, *)) { - _titleTextColor = [UIColor secondaryLabelColor]; - } else { - _titleTextColor = BR_RGB_HEX(0x999999, 1.0f); - } - } - return _titleTextColor; -} - -- (UIFont *)titleTextFont { - if (!_titleTextFont) { - _titleTextFont = [UIFont systemFontOfSize:15.0f]; - } - return _titleTextFont; -} - -- (CGRect)titleLabelFrame { - if (CGRectEqualToRect(_titleLabelFrame, CGRectZero) || _titleLabelFrame.size.height == 0) { - _titleLabelFrame = CGRectMake(5 + 60 + 2, 0, BRGetKeyWindow().bounds.size.width - 2 * (5 + 60 + 2), 44); - } - return _titleLabelFrame; -} - -- (UIColor *)doneColor { - if (!_doneColor) { - _doneColor = [UIColor clearColor]; - } - return _doneColor; -} - -- (UIColor *)doneTextColor { - if (!_doneTextColor) { - if (@available(iOS 13.0, *)) { - _doneTextColor = [UIColor labelColor]; - } else { - _doneTextColor = kBRDefaultTextColor; - } - } - return _doneTextColor; -} - -- (UIFont *)doneTextFont { - if (!_doneTextFont) { - _doneTextFont = [UIFont systemFontOfSize:16.0f]; - } - return _doneTextFont; -} - -- (NSString *)doneBtnTitle { - if (!_doneBtnTitle && !_doneBtnImage) { - _doneBtnTitle = [NSBundle br_localizedStringForKey:@"确定" language:self.language]; - } - return _doneBtnTitle; -} - -- (CGRect)doneBtnFrame { - if (CGRectEqualToRect(_doneBtnFrame, CGRectZero) || _doneBtnFrame.size.height == 0) { - _doneBtnFrame = CGRectMake(BRGetKeyWindow().bounds.size.width - 60 - 5, 8, 60, 28); - } - return _doneBtnFrame; -} - -- (UIColor *)pickerColor { - if (!_pickerColor) { - if (@available(iOS 13.0, *)) { - // #ffffff(正常)、#1c1c1e(深色) - _pickerColor = [UIColor secondarySystemGroupedBackgroundColor]; - } else { - _pickerColor = [UIColor whiteColor]; - } - } - return _pickerColor; -} - -- (UIColor *)separatorColor { - if (!_separatorColor) { - if (@available(iOS 13.0, *)) { - // 分割线颜色,无透明度 - _separatorColor = [UIColor opaqueSeparatorColor]; - } else { - _separatorColor = BR_RGB_HEX(0xc6c6c8, 1.0f); - } - } - return _separatorColor; -} - -- (UIColor *)pickerTextColor { - if (!_pickerTextColor) { - if (@available(iOS 13.0, *)) { - _pickerTextColor = [UIColor labelColor]; - } else { - _pickerTextColor = kBRDefaultTextColor; - } - } - return _pickerTextColor; -} - -- (UIFont *)pickerTextFont { - if (!_pickerTextFont) { - _pickerTextFont = [UIFont systemFontOfSize:18.0f]; - } - return _pickerTextFont; -} - -- (CGFloat)pickerHeight { - if (_pickerHeight < 40) { - _pickerHeight = 216.0f; - } - return _pickerHeight; -} - -- (CGFloat)rowHeight { - if (_rowHeight < 20) { - _rowHeight = 35.0f; - } - return _rowHeight; -} - -- (NSString *)language { - if (!_language) { - // 跟随系统的首选语言自动改变 - // zh-Hans-CN(简体中文)、zh-Hant-CN(繁体中文)、en-CN(美式英语)、en-GB(英式英语) - // 其中`CN`是iOS9以后新增的地区代码,如:CN 代表中国,US 代表美国 - _language = [NSLocale preferredLanguages].firstObject; - } - return _language; -} - -- (UIColor *)dateUnitTextColor { - if (!_dateUnitTextColor) { - if (@available(iOS 13.0, *)) { - _dateUnitTextColor = [UIColor labelColor]; - } else { - _dateUnitTextColor = kBRDefaultTextColor; - } - } - return _dateUnitTextColor; -} - -- (UIFont *)dateUnitTextFont { - if (!_dateUnitTextFont) { - _dateUnitTextFont = [UIFont systemFontOfSize:18.0f]; - } - return _dateUnitTextFont; -} - -#pragma mark - 创建自定义动态颜色(适配深色模式) -- (UIColor *)br_colorWithLightColor:(UIColor *)lightColor darkColor:(UIColor *)darkColor { - if (@available(iOS 13.0, *)) { - UIColor *dyColor = [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull traitCollection) { - if ([traitCollection userInterfaceStyle] == UIUserInterfaceStyleLight) { - return lightColor; - } else { - return darkColor; - } - }]; - return dyColor; - } else { - return lightColor; - } -} - -#pragma mark - 弹框模板样式1 - 取消/确定按钮圆角样式 -+ (instancetype)pickerStyleWithThemeColor:(UIColor *)themeColor { - BRPickerStyle *customStyle = [[self alloc]init]; - if (themeColor) { - customStyle.cancelTextColor = themeColor; - customStyle.cancelBorderStyle = BRBorderStyleSolid; - customStyle.doneColor = themeColor; - customStyle.doneTextColor = [UIColor whiteColor]; - customStyle.doneBorderStyle = BRBorderStyleFill; - } - return customStyle; -} - -#pragma mark - 弹框模板样式2 - 顶部圆角样式 + 完成按钮 -+ (instancetype)pickerStyleWithDoneTextColor:(UIColor *)doneTextColor { - BRPickerStyle *customStyle = [[self alloc]init]; - if (doneTextColor) { - customStyle.topCornerRadius = 16.0f; - customStyle.hiddenCancelBtn = YES; - customStyle.hiddenTitleLine = YES; - customStyle.titleLabelFrame = CGRectMake(20, 4, 100, 40); - customStyle.doneTextColor = doneTextColor; - customStyle.doneTextFont = [UIFont boldSystemFontOfSize:18.0f]; - customStyle.doneBtnFrame = CGRectMake(BRGetKeyWindow().bounds.size.width - 60, 4, 60, 40); - customStyle.doneBtnTitle = [NSBundle br_localizedStringForKey:@"完成" language:customStyle.language]; - customStyle.selectRowTextColor = doneTextColor; - customStyle.selectRowTextFont = [UIFont boldSystemFontOfSize:20.0f]; - } - return customStyle; -} - -#pragma mark - 弹框模板样式3 - 顶部圆角样式 + 图标按钮 -+ (instancetype)pickerStyleWithDoneBtnImage:(UIImage *)doneBtnImage { - BRPickerStyle *customStyle = [[self alloc]init]; - if (doneBtnImage) { - customStyle.topCornerRadius = 16.0f; - customStyle.hiddenTitleLine = YES; - customStyle.hiddenCancelBtn = YES; - customStyle.titleLabelFrame = CGRectMake(20, 4, 100, 40); - customStyle.doneBtnImage = doneBtnImage; - customStyle.doneBtnFrame = CGRectMake(BRGetKeyWindow().bounds.size.width - 44, 4, 40, 40); - } - return customStyle; -} - - -#pragma mark - 设置选择器中间选中行的样式 -- (void)setupPickerSelectRowStyle:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { - // 1.设置分割线的颜色 - NSString *systemVersion = [UIDevice currentDevice].systemVersion; - if (systemVersion.doubleValue < 14.0) { - for (UIView *subView in pickerView.subviews) { - if (subView && [subView isKindOfClass:[UIView class]] && subView.frame.size.height <= 1) { - subView.backgroundColor = self.separatorColor; - // 设置分割线高度 - if (self.separatorHeight > 0) { - CGRect rect = subView.frame; - rect.size.height = self.separatorHeight; - subView.frame = rect; - } - } - } - } - - // 2.设置选择器中间选中行的背景颜色 - UIView *contentView = nil; - NSArray *subviews = pickerView.subviews; - if (subviews.count > 0) { - id firstView = subviews.firstObject; - if (firstView && [firstView isKindOfClass:[UIView class]]) { - contentView = (UIView *)firstView; - } - } - if (self.selectRowColor) { - UIView *columnView = nil; - if (contentView) { - id obj = [contentView valueForKey:@"subviewCache"]; - if (obj && [obj isKindOfClass:[NSArray class]]) { - NSArray *columnViews = (NSArray *)obj; - if (columnViews.count > 0) { - id columnObj = columnViews.firstObject; - if (columnObj && [columnObj isKindOfClass:[UIView class]]) { - columnView = (UIView *)columnObj; - } - } - } - } - if (columnView) { - id obj = [columnView valueForKey:@"middleContainerView"]; - if (obj && [obj isKindOfClass:[UIView class]]) { - UIView *selectRowView = (UIView *)obj; - // 中间选中行的背景颜色 - selectRowView.backgroundColor = self.selectRowColor; - } - } - } - - if (contentView && self.clearPickerNewStyle) { - if (systemVersion.doubleValue >= 14.0) { - // ①隐藏中间选择行的背景样式 - id lastView = subviews.lastObject; - if (lastView && [lastView isKindOfClass:[UIView class]]) { - UIView *rectBgView = (UIView *)lastView; - rectBgView.hidden = YES; - } - - // ②清除iOS14上选择器默认的内边距 - if (systemVersion.doubleValue < 15.0f) { - [self setPickerAllSubViewsStyle:contentView]; - } - } - } - - // 3.设置选择器中间选中行的字体颜色/字体大小 - if (self.selectRowTextColor || self.selectRowTextFont) { - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - // 当前选中的 label - UILabel *selectLabel = (UILabel *)[pickerView viewForRow:row forComponent:component]; - if (selectLabel) { - if (self.selectRowTextColor) { - selectLabel.textColor = self.selectRowTextColor; - } - if (self.selectRowTextFont) { - selectLabel.font = self.selectRowTextFont; - } - } - }); - } -} - -// 遍历子视图,重新设置 frame(清空在 iOS14 上 UIPickerView 出现的内边距) -- (void)setPickerAllSubViewsStyle:(UIView *)view { - NSArray *subViews = view.subviews; - if (subViews.count == 0 || [view isKindOfClass:[UILabel class]]) return; - for (UIView *subView in subViews) { - NSString *className = NSStringFromClass([subView class]); - if ([className isEqualToString:@"UIPickerColumnView"]) { - CGRect rect = subView.frame; - rect.origin.x = 0; - rect.size.width = view.bounds.size.width; - subView.frame = rect; - } - NSString *superClassName = NSStringFromClass([view class]); - if ([superClassName isEqualToString:@"UIPickerColumnView"]) { - CGRect rect = subView.frame; - rect.size.width = view.bounds.size.width; - subView.frame = rect; - } - if ([subView isKindOfClass:[UILabel class]]) { - CGRect rect = subView.frame; - rect.origin.x = 10; - subView.frame = rect; - } - - [self setPickerAllSubViewsStyle:subView]; - } -} - -#pragma mark - 添加选择器中间行上下两条分割线(iOS14之后系统默认去掉,需要手动添加) -- (void)addSeparatorLineView:(UIView *)pickerView { - if ([UIDevice currentDevice].systemVersion.doubleValue >= 14.0) { - UIView *topLineView = [[UIView alloc]initWithFrame:CGRectMake(0, pickerView.bounds.size.height / 2 - self.rowHeight / 2, pickerView.bounds.size.width, 0.5f)]; - topLineView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth; - topLineView.backgroundColor = self.separatorColor; - // 设置分割线高度 - if (self.separatorHeight > 0) { - CGRect topRect = topLineView.frame; - topRect.size.height = self.separatorHeight; - topLineView.frame = topRect; - } - [pickerView addSubview:topLineView]; - - UIView *bottomLineView = [[UIView alloc]initWithFrame:CGRectMake(0, pickerView.bounds.size.height / 2 + self.rowHeight / 2, pickerView.bounds.size.width, 0.5f)]; - bottomLineView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth; - bottomLineView.backgroundColor = self.separatorColor; - // 设置分割线高度 - if (self.separatorHeight > 0) { - CGRect bottomRect = bottomLineView.frame; - bottomRect.size.height = self.separatorHeight; - bottomLineView.frame = bottomRect; - } - [pickerView addSubview:bottomLineView]; - } -} - -#pragma mark - 设置 view 的部分圆角 -// corners(枚举类型,可组合使用):UIRectCornerTopLeft | UIRectCornerTopRight | UIRectCornerBottomLeft | UIRectCornerBottomRight | UIRectCornerAllCorners -+ (void)br_setView:(UIView *)view roundingCorners:(UIRectCorner)corners withRadius:(CGFloat)radius { - UIBezierPath *rounded = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:corners cornerRadii:CGSizeMake(radius, radius)]; - CAShapeLayer *shape = [[CAShapeLayer alloc]init]; - [shape setPath:rounded.CGPath]; - view.layer.mask = shape; -} - -@end diff --git a/Pods/BRPickerView/BRPickerView/Base/BRPickerView.bundle/en.lproj/Localizable.strings b/Pods/BRPickerView/BRPickerView/Base/BRPickerView.bundle/en.lproj/Localizable.strings deleted file mode 100644 index 3431215..0000000 --- a/Pods/BRPickerView/BRPickerView/Base/BRPickerView.bundle/en.lproj/Localizable.strings +++ /dev/null @@ -1,32 +0,0 @@ -/* - Localizable.strings - BRPickerViewDemo - - Created by renbo on 2019/10/30. - Copyright © 2019 irenb. All rights reserved. -*/ - -"确定" = "OK"; -"取消" = "Cancel"; -"完成" = "Done"; - -"年" = " "; -"月" = " "; -"日" = " "; -"时" = " "; -"分" = " "; -"秒" = " "; - -"上午" = "AM"; -"下午" = "PM"; - -"至今" = " Now"; -"今天" = " Today"; - -"周一" = " Mon"; -"周二" = " Tue"; -"周三" = " Wed"; -"周四" = " Thu"; -"周五" = " Fri"; -"周六" = " Sat"; -"周日" = " Sun"; diff --git a/Pods/BRPickerView/BRPickerView/Base/BRPickerView.bundle/zh-Hans.lproj/Localizable.strings b/Pods/BRPickerView/BRPickerView/Base/BRPickerView.bundle/zh-Hans.lproj/Localizable.strings deleted file mode 100644 index da8d73d..0000000 --- a/Pods/BRPickerView/BRPickerView/Base/BRPickerView.bundle/zh-Hans.lproj/Localizable.strings +++ /dev/null @@ -1,32 +0,0 @@ -/* - Localizable.strings - BRPickerViewDemo - - Created by renbo on 2019/10/30. - Copyright © 2019 irenb. All rights reserved. -*/ - -"确定" = "确定"; -"取消" = "取消"; -"完成" = "完成"; - -"年" = "年"; -"月" = "月"; -"日" = "日"; -"时" = "时"; -"分" = "分"; -"秒" = "秒"; - -"上午" = "上午"; -"下午" = "下午"; - -"至今" = "至今"; -"今天" = "今天"; - -"周一" = "周一"; -"周二" = "周二"; -"周三" = "周三"; -"周四" = "周四"; -"周五" = "周五"; -"周六" = "周六"; -"周日" = "周日"; diff --git a/Pods/BRPickerView/BRPickerView/Base/BRPickerView.bundle/zh-Hant.lproj/Localizable.strings b/Pods/BRPickerView/BRPickerView/Base/BRPickerView.bundle/zh-Hant.lproj/Localizable.strings deleted file mode 100644 index 8a4a1a2..0000000 --- a/Pods/BRPickerView/BRPickerView/Base/BRPickerView.bundle/zh-Hant.lproj/Localizable.strings +++ /dev/null @@ -1,32 +0,0 @@ -/* - Localizable.strings - BRPickerViewDemo - - Created by renbo on 2019/10/30. - Copyright © 2019 irenb. All rights reserved. -*/ - -"确定" = "確定"; -"取消" = "取消"; -"完成" = "完成"; - -"年" = "年"; -"月" = "月"; -"日" = "日"; -"时" = "時"; -"分" = "分"; -"秒" = "秒"; - -"上午" = "上午"; -"下午" = "下午"; - -"至今" = "至今"; -"今天" = "今天"; - -"周一" = "周壹"; -"周二" = "周二"; -"周三" = "周三"; -"周四" = "周四"; -"周五" = "周五"; -"周六" = "周六"; -"周日" = "周日"; diff --git a/Pods/BRPickerView/BRPickerView/Base/BRPickerViewMacro.h b/Pods/BRPickerView/BRPickerView/Base/BRPickerViewMacro.h deleted file mode 100644 index 717480e..0000000 --- a/Pods/BRPickerView/BRPickerView/Base/BRPickerViewMacro.h +++ /dev/null @@ -1,87 +0,0 @@ -// -// BRPickerViewMacro.h -// BRPickerViewDemo -// -// Created by renbo on 2018/4/23. -// Copyright © 2018 irenb. All rights reserved. -// -// 最新代码下载地址:https://github.com/91renb/BRPickerView - -#ifndef BRPickerViewMacro_h -#define BRPickerViewMacro_h - -#import - -// 屏幕安全区域下边距 -#define BR_BOTTOM_MARGIN \ -({CGFloat safeBottomHeight = 0;\ -if (@available(iOS 11.0, *)) {\ -safeBottomHeight = BRGetKeyWindow().safeAreaInsets.bottom;\ -}\ -(safeBottomHeight);}) - - -// 静态库中编写 Category 时的便利宏,用于解决 Category 方法从静态库中加载需要特别设置的问题 -#ifndef BRSYNTH_DUMMY_CLASS - -#define BRSYNTH_DUMMY_CLASS(_name_) \ -@interface BRSYNTH_DUMMY_CLASS_ ## _name_ : NSObject @end \ -@implementation BRSYNTH_DUMMY_CLASS_ ## _name_ @end - -#endif - - -// 打印错误日志 -#ifdef DEBUG - #define BRErrorLog(...) NSLog(@"reason: %@", [NSString stringWithFormat:__VA_ARGS__]) -#else - #define BRErrorLog(...) -#endif - - -/** RGB颜色(16进制) */ -static inline UIColor *BR_RGB_HEX(uint32_t rgbValue, CGFloat alpha) { - return [UIColor colorWithRed:((CGFloat)((rgbValue & 0xFF0000) >> 16)) / 255.0 - green:((CGFloat)((rgbValue & 0xFF00) >> 8)) / 255.0 - blue:((CGFloat)(rgbValue & 0xFF)) / 255.0 - alpha:(alpha)]; -} - - -/** 获取 keyWindow */ -static inline UIWindow *BRGetKeyWindow(void) { - UIWindow *keyWindow = nil; -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 // 编译时检查SDK版本(兼容不同版本的Xcode,防止编译报错) - if (@available(iOS 13.0, *)) { // 运行时检查系统版本(兼容不同版本的系统,防止运行报错) - NSSet *connectedScenes = [UIApplication sharedApplication].connectedScenes; - for (UIScene *scene in connectedScenes) { - if (scene.activationState == UISceneActivationStateForegroundActive && [scene isKindOfClass:[UIWindowScene class]]) { - UIWindowScene *windowScene = (UIWindowScene *)scene; - for (UIWindow *window in windowScene.windows) { - if (window.isKeyWindow) { - keyWindow = window; - break; - } - } - } - } - } -#endif - - if (!keyWindow) { - keyWindow = [UIApplication sharedApplication].windows.firstObject; - if (!keyWindow.isKeyWindow) { -#if __IPHONE_OS_VERSION_MIN_REQUIRED < 130000 - UIWindow *window = [UIApplication sharedApplication].keyWindow; - if (CGRectEqualToRect(window.bounds, UIScreen.mainScreen.bounds)) { - keyWindow = window; - } -#endif - } - } - - return keyWindow; -} - - -#endif /* BRPickerViewMacro_h */ diff --git a/Pods/BRPickerView/BRPickerView/Base/NSBundle+BRPickerView.h b/Pods/BRPickerView/BRPickerView/Base/NSBundle+BRPickerView.h deleted file mode 100644 index a0b7d5f..0000000 --- a/Pods/BRPickerView/BRPickerView/Base/NSBundle+BRPickerView.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// NSBundle+BRPickerView.h -// BRPickerViewDemo -// -// Created by renbo on 2019/10/30. -// Copyright © 2019 irenb. All rights reserved. -// -// 最新代码下载地址:https://github.com/91renb/BRPickerView - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface NSBundle (BRPickerView) - -/// 获取 BRPickerView.bundle -+ (instancetype)br_pickerBundle; - -/// 获取国际化后的文本 -/// @param key 代表 Localizable.strings 文件中 key-value 中的 key。 -/// @param language 设置语言(可为空,为nil时将随系统的语言自动改变) -+ (NSString *)br_localizedStringForKey:(NSString *)key language:(NSString *)language; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/BRPickerView/BRPickerView/Base/NSBundle+BRPickerView.m b/Pods/BRPickerView/BRPickerView/Base/NSBundle+BRPickerView.m deleted file mode 100644 index 898f05e..0000000 --- a/Pods/BRPickerView/BRPickerView/Base/NSBundle+BRPickerView.m +++ /dev/null @@ -1,68 +0,0 @@ -// -// NSBundle+BRPickerView.m -// BRPickerViewDemo -// -// Created by renbo on 2019/10/30. -// Copyright © 2019 irenb. All rights reserved. -// -// 最新代码下载地址:https://github.com/91renb/BRPickerView - -#import "NSBundle+BRPickerView.h" -#import "BRBaseView.h" - -BRSYNTH_DUMMY_CLASS(NSBundle_BRPickerView) - -@implementation NSBundle (BRPickerView) - -#pragma mark - 获取 BRPickerView.bundle -+ (instancetype)br_pickerBundle { - static NSBundle *pickerBundle = nil; - if (!pickerBundle) { - /* - 先拿到最外面的 bundle。 - 对 framework 链接方式来说就是 framework 的 bundle 根目录, - 对静态库链接方式来说就是 target client 的 main bundle, - 然后再去找下面名为 BRPickerView 的 bundle 对象。 - */ - NSBundle *bundle = [NSBundle bundleForClass:[BRBaseView class]]; - NSURL *url = [bundle URLForResource:@"BRPickerView" withExtension:@"bundle"]; - pickerBundle = [NSBundle bundleWithURL:url]; - } - return pickerBundle; -} - -#pragma mark - 获取国际化后的文本 -+ (NSString *)br_localizedStringForKey:(NSString *)key language:(NSString *)language { - return [self br_localizedStringForKey:key value:nil language:language]; -} - -+ (NSString *)br_localizedStringForKey:(NSString *)key value:(NSString *)value language:(NSString *)language { - static NSBundle *bundle = nil; - if (!bundle) { - // 如果没有手动设置语言,将随系统的语言自动改变 - if (!language) { - // 系统首选语言 - language = [NSLocale preferredLanguages].firstObject; - } - - if ([language hasPrefix:@"en"]) { - language = @"en"; - } else if ([language hasPrefix:@"zh"]) { - if ([language rangeOfString:@"Hans"].location != NSNotFound) { - language = @"zh-Hans"; // 简体中文 - } else { // zh-Hant、zh-HK、zh-TW - language = @"zh-Hant"; // 繁體中文 - } - } else { - language = @"en"; - } - - // 从 BRPickerView.bundle 中查找资源 - bundle = [NSBundle bundleWithPath:[[self br_pickerBundle] pathForResource:language ofType:@"lproj"]]; - } - value = [bundle localizedStringForKey:key value:value table:nil]; - - return [[NSBundle mainBundle] localizedStringForKey:key value:value table:nil]; -} - -@end diff --git a/Pods/BRPickerView/BRPickerView/DatePickerView/BRDatePickerView+BR.h b/Pods/BRPickerView/BRPickerView/DatePickerView/BRDatePickerView+BR.h deleted file mode 100644 index e0474ec..0000000 --- a/Pods/BRPickerView/BRPickerView/DatePickerView/BRDatePickerView+BR.h +++ /dev/null @@ -1,94 +0,0 @@ -// -// BRDatePickerView+BR.h -// BRPickerViewDemo -// -// Created by renbo on 2020/6/16. -// Copyright © 2020 irenb. All rights reserved. -// -// 最新代码下载地址:https://github.com/91renb/BRPickerView - -#import "BRDatePickerView.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface BRDatePickerView (BR) - -/** 最小日期 */ -- (NSDate *)handlerMinDate:(nullable NSDate *)minDate; - -/** 最大日期 */ -- (NSDate *)handlerMaxDate:(nullable NSDate *)maxDate; - -/** 默认选中的日期 */ -- (NSDate *)handlerSelectDate:(nullable NSDate *)selectDate dateFormat:(NSString *)dateFormat; - -/** NSDate 转 NSString */ -- (NSString *)br_stringFromDate:(NSDate *)date dateFormat:(NSString *)dateFormat; - -/** NSString 转 NSDate */ -- (NSDate *)br_dateFromString:(NSString *)dateString dateFormat:(NSString *)dateFormat; - -/** 比较两个日期大小(可以指定比较级数,即按指定格式进行比较) */ -- (NSComparisonResult)br_compareDate:(NSDate *)date targetDate:(NSDate *)targetDate dateFormat:(NSString *)dateFormat; - -/** 获取 yearArr 数组 */ -- (NSArray *)getYearArr; - -/** 获取 monthArr 数组 */ -- (NSArray *)getMonthArr:(NSInteger)year; - -/** 获取 dayArr 数组 */ -- (NSArray *)getDayArr:(NSInteger)year month:(NSInteger)month; - -/** 获取 hourArr 数组 */ -- (NSArray *)getHourArr:(NSInteger)year month:(NSInteger)month day:(NSInteger)day; - -/** 获取 minuteArr 数组 */ -- (NSArray *)getMinuteArr:(NSInteger)year month:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour; - -/** 获取 secondArr 数组 */ -- (NSArray *)getSecondArr:(NSInteger)year month:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour minute:(NSInteger)minute; - -/** 添加 pickerView */ -- (void)setupPickerView:(UIView *)pickerView toView:(UIView *)view; - -/** 设置日期单位 */ -- (NSArray *)setupPickerUnitLabel:(UIPickerView *)pickerView unitArr:(NSArray *)unitArr; - -- (NSString *)getYearNumber:(NSInteger)year; - -- (NSString *)getMDHMSNumber:(NSInteger)number; - -- (NSString *)getYearText:(NSArray *)yearArr row:(NSInteger)row; - -- (NSString *)getMonthText:(NSArray *)monthArr row:(NSInteger)row; - -- (NSString *)getDayText:(NSArray *)dayArr row:(NSInteger)row mSelectDate:(NSDate *)mSelectDate; - -- (NSString *)getHourText:(NSArray *)hourArr row:(NSInteger)row; - -- (NSString *)getMinuteText:(NSArray *)minuteArr row:(NSInteger)row; - -- (NSString *)getSecondText:(NSArray *)secondArr row:(NSInteger)row; - -- (NSString *)getAMText; - -- (NSString *)getPMText; - -- (NSString *)getYearUnit; - -- (NSString *)getMonthUnit; - -- (NSString *)getDayUnit; - -- (NSString *)getHourUnit; - -- (NSString *)getMinuteUnit; - -- (NSString *)getSecondUnit; - -- (NSInteger)getIndexWithArray:(NSArray *)array object:(NSString *)obj; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/BRPickerView/BRPickerView/DatePickerView/BRDatePickerView+BR.m b/Pods/BRPickerView/BRPickerView/DatePickerView/BRDatePickerView+BR.m deleted file mode 100644 index 89fe83e..0000000 --- a/Pods/BRPickerView/BRPickerView/DatePickerView/BRDatePickerView+BR.m +++ /dev/null @@ -1,642 +0,0 @@ -// -// BRDatePickerView+BR.m -// BRPickerViewDemo -// -// Created by renbo on 2020/6/16. -// Copyright © 2020 irenb. All rights reserved. -// -// 最新代码下载地址:https://github.com/91renb/BRPickerView - -#import "BRDatePickerView+BR.h" -#import "NSBundle+BRPickerView.h" - -BRSYNTH_DUMMY_CLASS(BRDatePickerView_BR) - -////////////////////////////////////////// -/// 本分类主要是给 BRDatePickerView 文件瘦身 -////////////////////////////////////////// - -@implementation BRDatePickerView (BR) - -#pragma mark - 最小日期 -- (NSDate *)handlerMinDate:(NSDate *)minDate { - if (!minDate) { - if (self.pickerMode == BRDatePickerModeMDHM) { - minDate = [NSDate br_setMonth:1 day:1 hour:0 minute:0]; - } else if (self.pickerMode == BRDatePickerModeMD) { - minDate = [NSDate br_setMonth:1 day:1]; - } else if (self.pickerMode == BRDatePickerModeTime || self.pickerMode == BRDatePickerModeCountDownTimer || self.pickerMode == BRDatePickerModeHM) { - minDate = [NSDate br_setHour:0 minute:0]; - } else if (self.pickerMode == BRDatePickerModeHMS) { - minDate = [NSDate br_setHour:0 minute:0 second:0]; - } else if (self.pickerMode == BRDatePickerModeMS) { - minDate = [NSDate br_setMinute:0 second:0]; - } else { - minDate = [NSDate distantPast]; // 遥远的过去的一个时间点 - } - } - return minDate; -} - -#pragma mark - 最大日期 -- (NSDate *)handlerMaxDate:(NSDate *)maxDate { - if (!maxDate) { - if (self.pickerMode == BRDatePickerModeMDHM) { - maxDate = [NSDate br_setMonth:12 day:31 hour:23 minute:59]; - } else if (self.pickerMode == BRDatePickerModeMD) { - maxDate = [NSDate br_setMonth:12 day:31]; - } else if (self.pickerMode == BRDatePickerModeTime || self.pickerMode == BRDatePickerModeCountDownTimer || self.pickerMode == BRDatePickerModeHM) { - maxDate = [NSDate br_setHour:23 minute:59]; - } else if (self.pickerMode == BRDatePickerModeHMS) { - maxDate = [NSDate br_setHour:23 minute:59 second:59]; - } else if (self.pickerMode == BRDatePickerModeMS) { - maxDate = [NSDate br_setMinute:59 second:59]; - } else { - maxDate = [NSDate distantFuture]; // 遥远的未来的一个时间点 - } - } - return maxDate; -} - -#pragma mark - 默认选中的日期 -- (NSDate *)handlerSelectDate:(NSDate *)selectDate dateFormat:(NSString *)dateFormat { - // selectDate 优先级高于 selectValue(推荐使用 selectDate 设置默认选中的日期) - if (!selectDate) { - if (self.selectValue && self.selectValue.length > 0) { - if (self.pickerMode == BRDatePickerModeYMDH && self.isShowAMAndPM) { - NSString *firstString = [[self.selectValue componentsSeparatedByString:@" "] firstObject]; - NSString *lastString = [[self.selectValue componentsSeparatedByString:@" "] lastObject]; - if ([lastString isEqualToString:[self getAMText]]) { - self.selectValue = [NSString stringWithFormat:@"%@ 00", firstString]; - } - if ([lastString isEqualToString:[self getPMText]]) { - self.selectValue = [NSString stringWithFormat:@"%@ 12", firstString]; - } - } - - NSDate *date = nil; - if ([self.selectValue isEqualToString:self.lastRowContent]) { - date = self.addToNow ? [NSDate date] : nil; - } else if ([self.selectValue isEqualToString:self.firstRowContent]) { - date = nil; - } else { - date = [self br_dateFromString:self.selectValue dateFormat:dateFormat]; - if (!date) { - BRErrorLog(@"参数异常!字符串 selectValue 的正确格式是:%@", dateFormat); - NSAssert(date, @"参数异常!请检查字符串 selectValue 的格式"); - date = [NSDate date]; // 默认值参数格式错误时,重置/忽略默认值,防止在 Release 环境下崩溃! - } - if (self.pickerMode == BRDatePickerModeMDHM) { - selectDate = [NSDate br_setMonth:date.br_month day:date.br_day hour:date.br_hour minute:date.br_minute]; - } else if (self.pickerMode == BRDatePickerModeMD) { - selectDate = [NSDate br_setMonth:date.br_month day:date.br_day]; - } else if (self.pickerMode == BRDatePickerModeTime || self.pickerMode == BRDatePickerModeCountDownTimer || self.pickerMode == BRDatePickerModeHM) { - selectDate = [NSDate br_setHour:date.br_hour minute:date.br_minute]; - } else if (self.pickerMode == BRDatePickerModeHMS) { - selectDate = [NSDate br_setHour:date.br_hour minute:date.br_minute second:date.br_second]; - } else if (self.pickerMode == BRDatePickerModeMS) { - selectDate = [NSDate br_setMinute:date.br_minute second:date.br_second]; - } else { - selectDate = date; - } - } - } else { - // 不设置默认日期 - if (self.pickerMode == BRDatePickerModeTime || - self.pickerMode == BRDatePickerModeCountDownTimer || - self.pickerMode == BRDatePickerModeHM || - self.pickerMode == BRDatePickerModeHMS || - self.pickerMode == BRDatePickerModeMS) { - // 默认选中最小日期 - selectDate = self.minDate; - } else { - if (self.minuteInterval > 1 || self.secondInterval > 1) { - NSDate *date = [NSDate date]; - NSInteger minute = self.minDate.br_minute % self.minuteInterval == 0 ? self.minDate.br_minute : 0; - NSInteger second = self.minDate.br_second % self.secondInterval == 0 ? self.minDate.br_second : 0; - selectDate = [NSDate br_setYear:date.br_year month:date.br_month day:date.br_day hour:date.br_hour minute:minute second:second]; - } else { - // 默认选中今天的日期 - selectDate = [NSDate date]; - } - } - } - } - - // 判断日期是否超过边界限制 - BOOL selectLessThanMin = [self br_compareDate:selectDate targetDate:self.minDate dateFormat:dateFormat] == NSOrderedAscending; - BOOL selectMoreThanMax = [self br_compareDate:selectDate targetDate:self.maxDate dateFormat:dateFormat] == NSOrderedDescending; - if (selectLessThanMin) { - BRErrorLog(@"默认选择的日期不能小于最小日期!"); - selectDate = self.minDate; - } - if (selectMoreThanMax) { - BRErrorLog(@"默认选择的日期不能大于最大日期!"); - selectDate = self.maxDate; - } - - return selectDate; -} - -#pragma mark - NSDate 转 NSString -- (NSString *)br_stringFromDate:(NSDate *)date dateFormat:(NSString *)dateFormat { - return [NSDate br_stringFromDate:date dateFormat:dateFormat timeZone:self.timeZone language:self.pickerStyle.language]; -} - -#pragma mark - NSString 转 NSDate -- (NSDate *)br_dateFromString:(NSString *)dateString dateFormat:(NSString *)dateFormat { - return [NSDate br_dateFromString:dateString dateFormat:dateFormat timeZone:self.timeZone language:self.pickerStyle.language]; -} - -#pragma mark - 比较两个日期大小(可以指定比较级数,即按指定格式进行比较) -- (NSComparisonResult)br_compareDate:(NSDate *)date targetDate:(NSDate *)targetDate dateFormat:(NSString *)dateFormat { - NSString *dateString1 = [self br_stringFromDate:date dateFormat:dateFormat]; - NSString *dateString2 = [self br_stringFromDate:targetDate dateFormat:dateFormat]; - NSDate *date1 = [self br_dateFromString:dateString1 dateFormat:dateFormat]; - NSDate *date2 = [self br_dateFromString:dateString2 dateFormat:dateFormat]; - if ([date1 compare:date2] == NSOrderedDescending) { - return 1; // 大于 - } else if ([date1 compare:date2] == NSOrderedAscending) { - return -1; // 小于 - } else { - return 0; // 等于 - } -} - -#pragma mark - 获取 yearArr 数组 -- (NSArray *)getYearArr { - NSMutableArray *tempArr = [[NSMutableArray alloc]init]; - for (NSInteger i = self.minDate.br_year; i <= self.maxDate.br_year; i++) { - [tempArr addObject:[self getYearNumber:i]]; - } - if (self.isDescending) { - NSArray *reversedArr = [[tempArr reverseObjectEnumerator] allObjects]; - tempArr = [reversedArr mutableCopy]; - } - // 判断是否需要添加【自定义字符串】 - if (self.lastRowContent || self.firstRowContent) { - switch (self.pickerMode) { - case BRDatePickerModeYMDHMS: - case BRDatePickerModeYMDHM: - case BRDatePickerModeYMDH: - case BRDatePickerModeYMD: - case BRDatePickerModeYM: - case BRDatePickerModeY: - { - if (self.lastRowContent) { - [tempArr addObject:self.lastRowContent]; - } - if (self.firstRowContent) { - [tempArr insertObject:self.firstRowContent atIndex:0]; - } - } - break; - - default: - break; - } - } - - return [tempArr copy]; -} - -#pragma mark - 获取 monthArr 数组 -- (NSArray *)getMonthArr:(NSInteger)year { - NSInteger startMonth = 1; - NSInteger endMonth = 12; - if (year == self.minDate.br_year) { - startMonth = self.minDate.br_month; - } - if (year == self.maxDate.br_year) { - endMonth = self.maxDate.br_month; - } - NSMutableArray *tempArr = [[NSMutableArray alloc]init]; - for (NSInteger i = startMonth; i <= endMonth; i++) { - [tempArr addObject:[self getMDHMSNumber:i]]; - } - if (self.isDescending) { - NSArray *reversedArr = [[tempArr reverseObjectEnumerator] allObjects]; - tempArr = [reversedArr mutableCopy]; - } - // 判断是否需要添加【自定义字符串】 - if (self.lastRowContent || self.firstRowContent) { - switch (self.pickerMode) { - case BRDatePickerModeMDHM: - case BRDatePickerModeMD: - { - if (self.lastRowContent) { - [tempArr addObject:self.lastRowContent]; - } - if (self.firstRowContent) { - [tempArr insertObject:self.firstRowContent atIndex:0]; - } - } - break; - - default: - break; - } - } - - return [tempArr copy]; -} - -#pragma mark - 获取 dayArr 数组 -- (NSArray *)getDayArr:(NSInteger)year month:(NSInteger)month { - NSInteger startDay = 1; - NSInteger endDay = [NSDate br_getDaysInYear:year month:month]; - if (year == self.minDate.br_year && month == self.minDate.br_month) { - startDay = self.minDate.br_day; - } - if (year == self.maxDate.br_year && month == self.maxDate.br_month) { - endDay = self.maxDate.br_day; - } - NSMutableArray *tempArr = [[NSMutableArray alloc]init]; - for (NSInteger i = startDay; i <= endDay; i++) { - [tempArr addObject:[self getMDHMSNumber:i]]; - } - if (self.isDescending) { - return [[tempArr reverseObjectEnumerator] allObjects]; - } - - return [tempArr copy]; -} - -#pragma mark - 获取 hourArr 数组 -- (NSArray *)getHourArr:(NSInteger)year month:(NSInteger)month day:(NSInteger)day { - if (self.pickerMode == BRDatePickerModeYMDH && self.isShowAMAndPM) { - return @[[self getAMText], [self getPMText]]; - } - - NSInteger startHour = 0; - NSInteger endHour = 23; - if (year == self.minDate.br_year && month == self.minDate.br_month && day == self.minDate.br_day) { - startHour = self.minDate.br_hour; - } - if (year == self.maxDate.br_year && month == self.maxDate.br_month && day == self.maxDate.br_day) { - endHour = self.maxDate.br_hour; - } - NSMutableArray *tempArr = [[NSMutableArray alloc]init]; - for (NSInteger i = startHour; i <= endHour; i++) { - [tempArr addObject:[self getMDHMSNumber:i]]; - } - if (self.isDescending) { - NSArray *reversedArr = [[tempArr reverseObjectEnumerator] allObjects]; - tempArr = [reversedArr mutableCopy]; - } - // 判断是否需要添加【自定义字符串】 - if (self.lastRowContent || self.firstRowContent) { - switch (self.pickerMode) { - case BRDatePickerModeHMS: - case BRDatePickerModeHM: - { - if (self.lastRowContent) { - [tempArr addObject:self.lastRowContent]; - } - if (self.firstRowContent) { - [tempArr insertObject:self.firstRowContent atIndex:0]; - } - } - break; - - default: - break; - } - } - - return [tempArr copy]; -} - -#pragma mark - 获取 minuteArr 数组 -- (NSArray *)getMinuteArr:(NSInteger)year month:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour { - NSInteger startMinute = 0; - NSInteger endMinute = 59; - if (year == self.minDate.br_year && month == self.minDate.br_month && day == self.minDate.br_day && hour == self.minDate.br_hour) { - startMinute = self.minDate.br_minute; - } - if (year == self.maxDate.br_year && month == self.maxDate.br_month && day == self.maxDate.br_day && hour == self.maxDate.br_hour) { - endMinute = self.maxDate.br_minute; - } - NSMutableArray *tempArr = [[NSMutableArray alloc]init]; - for (NSInteger i = startMinute; i <= endMinute; i += self.minuteInterval) { - [tempArr addObject:[self getMDHMSNumber:i]]; - } - if (self.isDescending) { - NSArray *reversedArr = [[tempArr reverseObjectEnumerator] allObjects]; - tempArr = [reversedArr mutableCopy]; - } - // 判断是否需要添加【自定义字符串】 - if (self.lastRowContent || self.firstRowContent) { - switch (self.pickerMode) { - case BRDatePickerModeMS: - { - if (self.lastRowContent) { - [tempArr addObject:self.lastRowContent]; - } - if (self.firstRowContent) { - [tempArr insertObject:self.firstRowContent atIndex:0]; - } - } - break; - - default: - break; - } - } - - return [tempArr copy]; -} - -#pragma mark - 获取 secondArr 数组 -- (NSArray *)getSecondArr:(NSInteger)year month:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour minute:(NSInteger)minute { - NSInteger startSecond = 0; - NSInteger endSecond = 59; - if (year == self.minDate.br_year && month == self.minDate.br_month && day == self.minDate.br_day && hour == self.minDate.br_hour && minute == self.minDate.br_minute) { - startSecond = self.minDate.br_second; - } - if (year == self.maxDate.br_year && month == self.maxDate.br_month && day == self.maxDate.br_day && hour == self.maxDate.br_hour && minute == self.maxDate.br_minute) { - endSecond = self.maxDate.br_second; - } - NSMutableArray *tempArr = [[NSMutableArray alloc]init]; - for (NSInteger i = startSecond; i <= endSecond; i += self.secondInterval) { - [tempArr addObject:[self getMDHMSNumber:i]]; - } - if (self.isDescending) { - return [[tempArr reverseObjectEnumerator] allObjects]; - } - - return [tempArr copy]; -} - -#pragma mark - 添加 pickerView -- (void)setupPickerView:(UIView *)pickerView toView:(UIView *)view { - if (view) { - // 立即刷新容器视图 view 的布局(防止 view 使用自动布局时,选择器视图无法正常显示) - [view setNeedsLayout]; - [view layoutIfNeeded]; - - self.frame = view.bounds; - CGFloat pickerHeaderViewHeight = self.pickerHeaderView ? self.pickerHeaderView.bounds.size.height : 0; - CGFloat pickerFooterViewHeight = self.pickerFooterView ? self.pickerFooterView.bounds.size.height : 0; - pickerView.frame = CGRectMake(0, pickerHeaderViewHeight, view.bounds.size.width, view.bounds.size.height - pickerHeaderViewHeight - pickerFooterViewHeight); - [self addSubview:pickerView]; - } else { - [self.alertView addSubview:pickerView]; - } -} - -#pragma mark - 获取日期单位 -- (NSArray *)setupPickerUnitLabel:(UIPickerView *)pickerView unitArr:(NSArray *)unitArr { - NSMutableArray *tempArr = [[NSMutableArray alloc]init]; - for (NSInteger i = 0; i < pickerView.numberOfComponents; i++) { - // label宽度 - CGFloat labelWidth = pickerView.bounds.size.width / pickerView.numberOfComponents; - // 根据占位文本长度去计算宽度 - NSString *tempText = @"00"; - if (i == 0) { - switch (self.pickerMode) { - case BRDatePickerModeYMDHMS: - case BRDatePickerModeYMDHM: - case BRDatePickerModeYMDH: - case BRDatePickerModeYMD: - case BRDatePickerModeYM: - case BRDatePickerModeY: - { - tempText = @"0123"; - } - break; - - default: - break; - } - } - // 文本宽度 - CGFloat labelTextWidth = [tempText boundingRectWithSize:CGSizeMake(MAXFLOAT, self.pickerStyle.rowHeight) - options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading - attributes:@{NSFontAttributeName: self.pickerStyle.pickerTextFont} - context:nil].size.width; - // 单位label - UILabel *unitLabel = [[UILabel alloc]init]; - unitLabel.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin; - unitLabel.backgroundColor = [UIColor clearColor]; - if (self.pickerMode != BRDatePickerModeYMDHMS) { - unitLabel.textAlignment = NSTextAlignmentCenter; - } - unitLabel.font = self.pickerStyle.dateUnitTextFont; - unitLabel.textColor = self.pickerStyle.dateUnitTextColor; - // 字体自适应属性 - unitLabel.adjustsFontSizeToFitWidth = YES; - // 自适应最小字体缩放比例 - unitLabel.minimumScaleFactor = 0.5f; - unitLabel.text = (unitArr.count > 0 && i < unitArr.count) ? unitArr[i] : nil; - - CGFloat originX = i * labelWidth + labelWidth / 2.0 + labelTextWidth / 2.0 + self.pickerStyle.dateUnitOffsetX; - CGFloat originY = (pickerView.frame.size.height - self.pickerStyle.rowHeight) / 2 + self.pickerStyle.dateUnitOffsetY; - unitLabel.frame = CGRectMake(originX, originY, MAX(self.pickerStyle.rowHeight, labelTextWidth), self.pickerStyle.rowHeight); - - [tempArr addObject:unitLabel]; - - [pickerView addSubview:unitLabel]; - } - - return [tempArr copy]; -} - -- (NSString *)getYearNumber:(NSInteger)year { - NSString *yearString = [NSString stringWithFormat:@"%@", @(year)]; - if (self.isNumberFullName) { - yearString = [NSString stringWithFormat:@"%04d", [yearString intValue]]; - } - return yearString; -} - -- (NSString *)getMDHMSNumber:(NSInteger)number { - NSString *string = [NSString stringWithFormat:@"%@", @(number)]; - if (self.isNumberFullName) { - string = [NSString stringWithFormat:@"%02d", [string intValue]]; - } - return string; -} - -- (NSString *)getYearText:(NSArray *)yearArr row:(NSInteger)row { - NSInteger index = 0; - if (row >= 0) { - index = MIN(row, yearArr.count - 1); - } - NSString *yearString = [yearArr objectAtIndex:index]; - if ((self.lastRowContent && [yearString isEqualToString:self.lastRowContent]) || (self.firstRowContent && [yearString isEqualToString:self.firstRowContent])) { - return yearString; - } - NSString *yearUnit = self.showUnitType == BRShowUnitTypeAll ? [self getYearUnit] : @""; - return [NSString stringWithFormat:@"%@%@", yearString, yearUnit]; -} - -- (NSString *)getMonthText:(NSArray *)monthArr row:(NSInteger)row { - NSInteger index = 0; - if (row >= 0) { - index = MIN(row, monthArr.count - 1); - } - NSString *monthString = [monthArr objectAtIndex:index]; - // 首行/末行是自定义字符串,直接返回 - if ((self.firstRowContent && [monthString isEqualToString:self.firstRowContent]) || (self.lastRowContent && [monthString isEqualToString:self.lastRowContent])) { - return monthString; - } - - // 自定义月份数据源 - if (self.monthNames && self.monthNames.count > 0) { - NSInteger index = [monthString integerValue] - 1; - monthString = (index >= 0 && index < self.monthNames.count) ? self.monthNames[index] : @""; - } else { - if (![self.pickerStyle.language hasPrefix:@"zh"] && (self.pickerMode == BRDatePickerModeYMD || self.pickerMode == BRDatePickerModeYM)) { - // 非中文环境:月份使用系统的月份名称 - NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; - dateFormatter.locale = [[NSLocale alloc]initWithLocaleIdentifier:self.pickerStyle.language]; - // monthSymbols: @[@"January", @"February", @"March", @"April", @"May", @"June", @"July", @"August", @"September", @"October", @"November", @"December"]; - // shortMonthSymbols: @[@"Jan", @"Feb", @"Mar", @"Apr", @"May", @"Jun", @"Jul", @"Aug", @"Sep", @"Oct", @"Nov", @"Dec"]; - NSArray *monthNames = self.isShortMonthName ? dateFormatter.shortMonthSymbols : dateFormatter.monthSymbols; - NSInteger index = [monthString integerValue] - 1; - monthString = (index >= 0 && index < monthNames.count) ? monthNames[index] : @""; - } else { - // 中文环境:月份显示数字 - NSString *monthUnit = self.showUnitType == BRShowUnitTypeAll ? [self getMonthUnit] : @""; - monthString = [NSString stringWithFormat:@"%@%@", monthString, monthUnit]; - } - } - - return monthString; -} - -- (NSString *)getDayText:(NSArray *)dayArr row:(NSInteger)row mSelectDate:(NSDate *)mSelectDate { - NSInteger index = 0; - if (row >= 0) { - index = MIN(row, dayArr.count - 1); - } - NSString *dayString = [dayArr objectAtIndex:index]; - if (self.isShowToday && mSelectDate.br_year == [NSDate date].br_year && mSelectDate.br_month == [NSDate date].br_month && [dayString integerValue] == [NSDate date].br_day) { - return [NSBundle br_localizedStringForKey:@"今天" language:self.pickerStyle.language]; - } - NSString *dayUnit = self.showUnitType == BRShowUnitTypeAll ? [self getDayUnit] : @""; - dayString = [NSString stringWithFormat:@"%@%@", dayString, dayUnit]; - if (self.isShowWeek) { - NSDate *date = [NSDate br_setYear:mSelectDate.br_year month:mSelectDate.br_month day:[dayString integerValue]]; - NSString *weekdayString = [NSBundle br_localizedStringForKey:[date br_weekdayString] language:self.pickerStyle.language]; - dayString = [NSString stringWithFormat:@"%@%@", dayString, weekdayString]; - } - return dayString; -} - -- (NSString *)getHourText:(NSArray *)hourArr row:(NSInteger)row { - NSInteger index = 0; - if (row >= 0) { - index = MIN(row, hourArr.count - 1); - } - NSString *hourString = [hourArr objectAtIndex:index]; - if ((self.lastRowContent && [hourString isEqualToString:self.lastRowContent]) || (self.firstRowContent && [hourString isEqualToString:self.firstRowContent])) { - return hourString; - } - NSString *hourUnit = self.showUnitType == BRShowUnitTypeAll ? [self getHourUnit] : @""; - return [NSString stringWithFormat:@"%@%@", hourString, hourUnit]; -} - -- (NSString *)getMinuteText:(NSArray *)minuteArr row:(NSInteger)row { - NSInteger index = 0; - if (row >= 0) { - index = MIN(row, minuteArr.count - 1); - } - NSString *minuteString = [minuteArr objectAtIndex:index]; - NSString *minuteUnit = self.showUnitType == BRShowUnitTypeAll ? [self getMinuteUnit] : @""; - return [NSString stringWithFormat:@"%@%@", minuteString, minuteUnit]; -} - -- (NSString *)getSecondText:(NSArray *)secondArr row:(NSInteger)row { - NSInteger index = 0; - if (row >= 0) { - index = MIN(row, secondArr.count - 1); - } - NSString *secondString = [secondArr objectAtIndex:index]; - NSString *secondUnit = self.showUnitType == BRShowUnitTypeAll ? [self getSecondUnit] : @""; - return [NSString stringWithFormat:@"%@%@", secondString, secondUnit]; -} - -- (NSString *)getAMText { - return [NSBundle br_localizedStringForKey:@"上午" language:self.pickerStyle.language]; -} - -- (NSString *)getPMText { - return [NSBundle br_localizedStringForKey:@"下午" language:self.pickerStyle.language]; -} - -- (NSString *)getYearUnit { - if (self.customUnit) { - return self.customUnit[@"year"] ? : @""; - } - if (![self.pickerStyle.language hasPrefix:@"zh"]) { - return @""; - } - return [NSBundle br_localizedStringForKey:@"年" language:self.pickerStyle.language]; -} - -- (NSString *)getMonthUnit { - if (self.customUnit) { - return self.customUnit[@"month"] ? : @""; - } - if (![self.pickerStyle.language hasPrefix:@"zh"]) { - return @""; - } - return [NSBundle br_localizedStringForKey:@"月" language:self.pickerStyle.language]; -} - -- (NSString *)getDayUnit { - if (self.customUnit) { - return self.customUnit[@"day"] ? : @""; - } - if (![self.pickerStyle.language hasPrefix:@"zh"]) { - return @""; - } - return [NSBundle br_localizedStringForKey:@"日" language:self.pickerStyle.language]; -} - -- (NSString *)getHourUnit { - if (self.pickerMode == BRDatePickerModeYMDH && self.isShowAMAndPM) { - return @""; - } - if (self.customUnit) { - return self.customUnit[@"hour"] ? : @""; - } - if (![self.pickerStyle.language hasPrefix:@"zh"]) { - return @""; - } - return [NSBundle br_localizedStringForKey:@"时" language:self.pickerStyle.language]; -} - -- (NSString *)getMinuteUnit { - if (self.customUnit) { - return self.customUnit[@"minute"] ? : @""; - } - if (![self.pickerStyle.language hasPrefix:@"zh"]) { - return @""; - } - return [NSBundle br_localizedStringForKey:@"分" language:self.pickerStyle.language]; -} - -- (NSString *)getSecondUnit { - if (self.customUnit) { - return self.customUnit[@"second"] ? : @""; - } - if (![self.pickerStyle.language hasPrefix:@"zh"]) { - return @""; - } - return [NSBundle br_localizedStringForKey:@"秒" language:self.pickerStyle.language]; -} - -- (NSInteger)getIndexWithArray:(NSArray *)array object:(NSString *)obj { - if (!array || array.count == 0 || !obj) { - return 0; - } - if ([array containsObject:obj]) { - return [array indexOfObject:obj]; - } - return 0; -} - -@end diff --git a/Pods/BRPickerView/BRPickerView/DatePickerView/BRDatePickerView.h b/Pods/BRPickerView/BRPickerView/DatePickerView/BRDatePickerView.h deleted file mode 100755 index f20cf91..0000000 --- a/Pods/BRPickerView/BRPickerView/DatePickerView/BRDatePickerView.h +++ /dev/null @@ -1,240 +0,0 @@ -// -// BRDatePickerView.h -// BRPickerViewDemo -// -// Created by renbo on 2017/8/11. -// Copyright © 2017 irenb. All rights reserved. -// -// 最新代码下载地址:https://github.com/91renb/BRPickerView - -#import "BRBaseView.h" -#import "NSDate+BRPickerView.h" - -NS_ASSUME_NONNULL_BEGIN - -/// 日期选择器格式 -typedef NS_ENUM(NSInteger, BRDatePickerMode) { - // ----- 以下4种是系统样式(兼容国际化日期格式) ----- - /** 【yyyy-MM-dd】UIDatePickerModeDate(美式日期:MM-dd-yyyy;英式日期:dd-MM-yyyy)*/ - BRDatePickerModeDate, - /** 【yyyy-MM-dd HH:mm】 UIDatePickerModeDateAndTime */ - BRDatePickerModeDateAndTime, - /** 【HH:mm】UIDatePickerModeTime */ - BRDatePickerModeTime, - /** 【HH:mm】UIDatePickerModeCountDownTimer */ - BRDatePickerModeCountDownTimer, - - // ----- 以下11种是自定义样式 ----- - /** 【yyyy-MM-dd HH:mm:ss】年月日时分秒 */ - BRDatePickerModeYMDHMS, - /** 【yyyy-MM-dd HH:mm】年月日时分 */ - BRDatePickerModeYMDHM, - /** 【yyyy-MM-dd HH】年月日时 */ - BRDatePickerModeYMDH, - /** 【MM-dd HH:mm】月日时分 */ - BRDatePickerModeMDHM, - /** 【yyyy-MM-dd】年月日(兼容国际化日期:dd-MM-yyyy)*/ - BRDatePickerModeYMD, - /** 【yyyy-MM】年月(兼容国际化日期:MM-yyyy)*/ - BRDatePickerModeYM, - /** 【yyyy】年 */ - BRDatePickerModeY, - /** 【MM-dd】月日 */ - BRDatePickerModeMD, - /** 【HH:mm:ss】时分秒 */ - BRDatePickerModeHMS, - /** 【HH:mm】时分 */ - BRDatePickerModeHM, - /** 【mm:ss】分秒 */ - BRDatePickerModeMS -}; - -/// 日期单位显示的位置 -typedef NS_ENUM(NSInteger, BRShowUnitType) { - /** 日期单位显示全部行(默认)*/ - BRShowUnitTypeAll, - /** 日期单位仅显示中间行 */ - BRShowUnitTypeOnlyCenter, - /** 日期单位不显示(隐藏日期单位)*/ - BRShowUnitTypeNone -}; - -typedef void (^BRDateResultBlock)(NSDate * _Nullable selectDate, NSString * _Nullable selectValue); - -@interface BRDatePickerView : BRBaseView - -/** - ////////////////////////////////////////////////////////////////////////// - /// - /// 【用法一】 - /// 特点:灵活,扩展性强(推荐使用!) - /// - ////////////////////////////////////////////////////////////////////////*/ - -/** 日期选择器显示类型 */ -@property (nonatomic, assign) BRDatePickerMode pickerMode; - -/** 设置选中的日期(推荐使用 selectDate) */ -@property (nullable, nonatomic, strong) NSDate *selectDate; -@property (nullable, nonatomic, copy) NSString *selectValue; - -/** 最小日期(可使用 NSDate+BRPickerView 分类中对应的方法进行创建)*/ -@property (nullable, nonatomic, strong) NSDate *minDate; -/** 最大日期(可使用 NSDate+BRPickerView 分类中对应的方法进行创建)*/ -@property (nullable, nonatomic, strong) NSDate *maxDate; - -/** 选择结果的回调 */ -@property (nullable, nonatomic, copy) BRDateResultBlock resultBlock; - -/** 滚动选择时触发的回调 */ -@property (nullable, nonatomic, copy) BRDateResultBlock changeBlock; - -/** 日期单位显示类型 */ -@property (nonatomic, assign) BRShowUnitType showUnitType; - -/** 是否显示【星期】,默认为 NO */ -@property (nonatomic, assign, getter=isShowWeek) BOOL showWeek; - -/** 是否显示【今天】,默认为 NO */ -@property (nonatomic, assign, getter=isShowToday) BOOL showToday; - -/** 是否添加【至今】,默认为 NO */ -@property (nonatomic, assign, getter=isAddToNow) BOOL addToNow; - -/** 首行添加【自定义字符串】,配合 selectValue 可设置默认选中 */ -@property (nullable, nonatomic, copy) NSString *firstRowContent; - -/** 末行添加【自定义字符串】,配合 selectValue 可设置默认选中 */ -@property (nullable, nonatomic, copy) NSString *lastRowContent; - -/** 最后一行,添加【自定义字符串】 */ -@property (nullable, nonatomic, copy) NSString *addCustomString DEPRECATED_MSG_ATTRIBUTE("Use 'lastRowContent' instead"); - -/** 滚轮上日期数据排序是否降序,默认为 NO(升序)*/ -@property (nonatomic, assign, getter=isDescending) BOOL descending; - -/** 选择器上数字是否带有前导零,默认为 NO(如:无前导零:2020-1-1;有前导零:2020-01-01)*/ -@property (nonatomic, assign, getter=isNumberFullName) BOOL numberFullName; - -/** 设置分的时间间隔,默认为1(范围:1 ~ 30)*/ -@property (nonatomic, assign) NSInteger minuteInterval; - -/** 设置秒的时间间隔,默认为1(范围:1 ~ 30)*/ -@property (nonatomic, assign) NSInteger secondInterval; - -/** 设置倒计时的时长,默认为0(范围:0 ~ 24*60*60-1,单位为秒) for `BRDatePickerModeCountDownTimer`, ignored otherwise. */ -@property (nonatomic, assign) NSTimeInterval countDownDuration; - -/** - * 自定义月份数据源 - * 如:@[@"1月", @"2月",..., @"12月"]、 @[@"一月", @"二月",..., @"十二月"]、 @[@"Jan", @"Feb",..., @"Dec"] 等 - */ -@property (nonatomic, copy) NSArray *monthNames; - -/** - * 设置国际化日期(非中文环境下)月份是否显示简称,默认为 NO。for `BRDatePickerModeYMD` and `BRDatePickerModeYM`, ignored otherwise. - * 如:January 的简称为:Jan - */ -@property (nonatomic, assign, getter=isShortMonthName) BOOL shortMonthName; - -/** - * 自定义日期单位 - * 字典格式:@{@"year": @"年", @"month": @"月", @"day": @"日", @"hour": @"时", @"minute": @"分", @"second": @"秒"} - */ -@property (nonatomic, copy) NSDictionary *customUnit; - -/** 显示上午和下午,默认为 NO. for `BRDatePickerModeYMDH`, ignored otherwise. */ -@property (nonatomic, assign, getter=isShowAMAndPM) BOOL showAMAndPM; - -/** 设置时区,默认为当前时区 */ -@property (nullable, nonatomic, copy) NSTimeZone *timeZone; - -/** default is [NSCalendar currentCalendar]. setting nil returns to default. for `UIDatePicker` */ -@property (nonatomic, copy) NSCalendar *calendar; - -/** 指定不允许选择的日期 */ -@property (nullable, nonatomic, copy) NSArray *nonSelectableDates; - -/** 不允许选择日期的回调 */ -@property (nullable, nonatomic, copy) BRDateResultBlock nonSelectableBlock; - -/// 初始化日期选择器 -/// @param pickerMode 日期选择器显示类型 -- (instancetype)initWithPickerMode:(BRDatePickerMode)pickerMode; - -/// 弹出选择器视图 -- (void)show; - -/// 关闭选择器视图 -- (void)dismiss; - - - - -//================================================= 华丽的分割线 ================================================= - - - - -/** - ////////////////////////////////////////////////////////////////////////// - /// - /// 【用法二】:快捷使用,直接选择下面其中的一个方法进行使用 - /// 特点:快捷,方便 - /// - ////////////////////////////////////////////////////////////////////////*/ - -/** - * 1.显示日期选择器 - * - * @param mode 日期显示类型 - * @param title 选择器标题 - * @param selectValue 默认选中的日期(默认选中当前日期) - * @param resultBlock 选择结果的回调 - * - */ -+ (void)showDatePickerWithMode:(BRDatePickerMode)mode - title:(nullable NSString *)title - selectValue:(nullable NSString *)selectValue - resultBlock:(nullable BRDateResultBlock)resultBlock; - -/** - * 2.显示日期选择器 - * - * @param mode 日期显示类型 - * @param title 选择器标题 - * @param selectValue 默认选中的日期(默认选中当前日期) - * @param isAutoSelect 是否自动选择,即滚动选择器后就执行结果回调,默认为 NO - * @param resultBlock 选择结果的回调 - * - */ -+ (void)showDatePickerWithMode:(BRDatePickerMode)mode - title:(nullable NSString *)title - selectValue:(nullable NSString *)selectValue - isAutoSelect:(BOOL)isAutoSelect - resultBlock:(nullable BRDateResultBlock)resultBlock; - -/** - * 3.显示日期选择器 - * - * @param mode 日期显示类型 - * @param title 选择器标题 - * @param selectValue 默认选中的日期(默认选中当前日期) - * @param minDate 最小日期(可使用 NSDate+BRPickerView 分类中对应的方法进行创建) - * @param maxDate 最大日期(可使用 NSDate+BRPickerView 分类中对应的方法进行创建) - * @param isAutoSelect 是否自动选择,即滚动选择器后就执行结果回调,默认为 NO - * @param resultBlock 选择结果的回调 - * - */ -+ (void)showDatePickerWithMode:(BRDatePickerMode)mode - title:(nullable NSString *)title - selectValue:(nullable NSString *)selectValue - minDate:(nullable NSDate *)minDate - maxDate:(nullable NSDate *)maxDate - isAutoSelect:(BOOL)isAutoSelect - resultBlock:(nullable BRDateResultBlock)resultBlock; - - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/BRPickerView/BRPickerView/DatePickerView/BRDatePickerView.m b/Pods/BRPickerView/BRPickerView/DatePickerView/BRDatePickerView.m deleted file mode 100755 index 34c561b..0000000 --- a/Pods/BRPickerView/BRPickerView/DatePickerView/BRDatePickerView.m +++ /dev/null @@ -1,1561 +0,0 @@ -// -// BRDatePickerView.m -// BRPickerViewDemo -// -// Created by renbo on 2017/8/11. -// Copyright © 2017 irenb. All rights reserved. -// -// 最新代码下载地址:https://github.com/91renb/BRPickerView - -#import "BRDatePickerView.h" -#import "NSBundle+BRPickerView.h" -#import "BRDatePickerView+BR.h" - -/// 日期选择器的类型 -typedef NS_ENUM(NSInteger, BRDatePickerStyle) { - BRDatePickerStyleSystem, // 系统样式:使用 UIDatePicker - BRDatePickerStyleCustom // 自定义样式:使用 UIPickerView -}; - -@interface BRDatePickerView () -{ - UIDatePickerMode _datePickerMode; - UIView *_containerView; - BOOL _isAdjustSelectRow; // 设置minDate时,调整日期联动的选择(解决日期选择器联动不正确的问题) -} -/** 日期选择器1 */ -@property (nonatomic, strong) UIDatePicker *datePicker; -/** 日期选择器2 */ -@property (nonatomic, strong) UIPickerView *pickerView; - -/// 日期存储数组 -@property(nonatomic, copy) NSArray *yearArr; -@property(nonatomic, copy) NSArray *monthArr; -@property(nonatomic, copy) NSArray *dayArr; -@property(nonatomic, copy) NSArray *hourArr; -@property(nonatomic, copy) NSArray *minuteArr; -@property(nonatomic, copy) NSArray *secondArr; - -/// 记录 年、月、日、时、分、秒 当前选择的位置 -@property(nonatomic, assign) NSInteger yearIndex; -@property(nonatomic, assign) NSInteger monthIndex; -@property(nonatomic, assign) NSInteger dayIndex; -@property(nonatomic, assign) NSInteger hourIndex; -@property(nonatomic, assign) NSInteger minuteIndex; -@property(nonatomic, assign) NSInteger secondIndex; - -// 记录选择的值 -@property (nonatomic, strong) NSDate *mSelectDate; -@property (nonatomic, copy) NSString *mSelectValue; - -/** 日期选择器的类型 */ -@property (nonatomic, assign) BRDatePickerStyle style; -/** 日期的格式 */ -@property (nonatomic, copy) NSString *dateFormatter; -/** 单位数组 */ -@property (nonatomic, copy) NSArray *unitArr; -/** 单位label数组 */ -@property (nonatomic, copy) NSArray *unitLabelArr; - -@end - -@implementation BRDatePickerView - -#pragma mark - 1.显示日期选择器 -+ (void)showDatePickerWithMode:(BRDatePickerMode)mode - title:(NSString *)title - selectValue:(NSString *)selectValue - resultBlock:(BRDateResultBlock)resultBlock { - [self showDatePickerWithMode:mode title:title selectValue:selectValue minDate:nil maxDate:nil isAutoSelect:NO resultBlock:resultBlock]; -} - -#pragma mark - 2.显示日期选择器 -+ (void)showDatePickerWithMode:(BRDatePickerMode)mode - title:(NSString *)title - selectValue:(NSString *)selectValue - isAutoSelect:(BOOL)isAutoSelect - resultBlock:(BRDateResultBlock)resultBlock { - [self showDatePickerWithMode:mode title:title selectValue:selectValue minDate:nil maxDate:nil isAutoSelect:isAutoSelect resultBlock:resultBlock]; -} - -#pragma mark - 3.显示日期选择器 -+ (void)showDatePickerWithMode:(BRDatePickerMode)mode - title:(NSString *)title - selectValue:(NSString *)selectValue - minDate:(NSDate *)minDate - maxDate:(NSDate *)maxDate - isAutoSelect:(BOOL)isAutoSelect - resultBlock:(BRDateResultBlock)resultBlock { - // 创建日期选择器 - BRDatePickerView *datePickerView = [[BRDatePickerView alloc]init]; - datePickerView.pickerMode = mode; - datePickerView.title = title; - datePickerView.selectValue = selectValue; - datePickerView.minDate = minDate; - datePickerView.maxDate = maxDate; - datePickerView.isAutoSelect = isAutoSelect; - datePickerView.resultBlock = resultBlock; - // 显示 - [datePickerView show]; -} - -#pragma mark - 初始化日期选择器 -- (instancetype)initWithPickerMode:(BRDatePickerMode)pickerMode { - if (self = [super init]) { - self.pickerMode = pickerMode; - } - return self; -} - -#pragma mark - 处理选择器数据 -- (void)handlerPickerData { - // 1.最小日期限制 - self.minDate = [self handlerMinDate:self.minDate]; - // 2.最大日期限制 - self.maxDate = [self handlerMaxDate:self.maxDate]; - - BOOL minMoreThanMax = [self br_compareDate:self.minDate targetDate:self.maxDate dateFormat:self.dateFormatter] == NSOrderedDescending; - NSAssert(!minMoreThanMax, @"最小日期不能大于最大日期!"); - if (minMoreThanMax) { - // 如果最小日期大于了最大日期,就忽略两个值 - self.minDate = [NSDate distantPast]; // 0000-12-30 00:00:00 +0000 - self.maxDate = [NSDate distantFuture]; // 4001-01-01 00:00:00 +0000 - } - - // 3.默认选中的日期 - self.mSelectDate = [self handlerSelectDate:self.selectDate dateFormat:self.dateFormatter]; - - // 4.设置选择器日期数据 - if (self.style == BRDatePickerStyleCustom) { - [self setupDateArray]; - } - - if (self.selectValue && ([self.selectValue isEqualToString:self.lastRowContent] || [self.selectValue isEqualToString:self.firstRowContent])) { - self.mSelectDate = self.addToNow ? [NSDate date] : nil; - } else { - if (self.pickerMode == BRDatePickerModeYMDH && self.isShowAMAndPM) { - self.hourIndex = (self.mSelectDate.br_hour < 12 ? 0 : 1); - self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d-%02d %@", (int)self.mSelectDate.br_year, (int)self.mSelectDate.br_month, (int)self.mSelectDate.br_day, [self getHourString]]; - } else { - self.mSelectValue = [self br_stringFromDate:self.mSelectDate dateFormat:self.dateFormatter]; - } - } -} - -#pragma mark - 设置默认日期数据源 -- (void)setupDateArray { - if (self.selectValue && ([self.selectValue isEqualToString:self.lastRowContent] || [self.selectValue isEqualToString:self.firstRowContent])) { - switch (self.pickerMode) { - case BRDatePickerModeYMDHMS: - case BRDatePickerModeYMDHM: - case BRDatePickerModeYMDH: - case BRDatePickerModeYMD: - case BRDatePickerModeYM: - case BRDatePickerModeY: - { - self.yearArr = [self getYearArr]; - self.monthArr = nil; - self.dayArr = nil; - self.hourArr = nil; - self.minuteArr = nil; - self.secondArr = nil; - } - break; - case BRDatePickerModeMDHM: - case BRDatePickerModeMD: - { - self.yearArr = [self getYearArr]; - self.monthArr = [self getMonthArr:self.mSelectDate.br_year]; - self.dayArr = nil; - self.hourArr = nil; - self.minuteArr = nil; - self.secondArr = nil; - } - break; - case BRDatePickerModeHMS: - case BRDatePickerModeHM: - { - self.yearArr = [self getYearArr]; - self.monthArr = [self getMonthArr:self.mSelectDate.br_year]; - self.dayArr = [self getDayArr:self.mSelectDate.br_year month:self.mSelectDate.br_month]; - self.hourArr = [self getHourArr:self.mSelectDate.br_year month:self.mSelectDate.br_month day:self.mSelectDate.br_day]; - self.minuteArr = nil; - self.secondArr = nil; - } - break; - case BRDatePickerModeMS: - { - self.yearArr = [self getYearArr]; - self.monthArr = [self getMonthArr:self.mSelectDate.br_year]; - self.dayArr = [self getDayArr:self.mSelectDate.br_year month:self.mSelectDate.br_month]; - self.hourArr = [self getHourArr:self.mSelectDate.br_year month:self.mSelectDate.br_month day:self.mSelectDate.br_day]; - self.minuteArr = [self getMinuteArr:self.mSelectDate.br_year month:self.mSelectDate.br_month day:self.mSelectDate.br_day hour:self.mSelectDate.br_hour]; - self.secondArr = nil; - } - break; - - default: - break; - } - } else { - self.yearArr = [self getYearArr]; - self.monthArr = [self getMonthArr:self.mSelectDate.br_year]; - self.dayArr = [self getDayArr:self.mSelectDate.br_year month:self.mSelectDate.br_month]; - self.hourArr = [self getHourArr:self.mSelectDate.br_year month:self.mSelectDate.br_month day:self.mSelectDate.br_day]; - self.minuteArr = [self getMinuteArr:self.mSelectDate.br_year month:self.mSelectDate.br_month day:self.mSelectDate.br_day hour:self.mSelectDate.br_hour]; - self.secondArr = [self getSecondArr:self.mSelectDate.br_year month:self.mSelectDate.br_month day:self.mSelectDate.br_day hour:self.mSelectDate.br_hour minute:self.mSelectDate.br_minute]; - } -} - -- (void)setupDateFormatter:(BRDatePickerMode)mode { - switch (mode) { - case BRDatePickerModeDate: - { - self.dateFormatter = @"yyyy-MM-dd"; - self.style = BRDatePickerStyleSystem; - _datePickerMode = UIDatePickerModeDate; - } - break; - case BRDatePickerModeDateAndTime: - { - self.dateFormatter = @"yyyy-MM-dd HH:mm"; - self.style = BRDatePickerStyleSystem; - _datePickerMode = UIDatePickerModeDateAndTime; - } - break; - case BRDatePickerModeTime: - { - self.dateFormatter = @"HH:mm"; - self.style = BRDatePickerStyleSystem; - _datePickerMode = UIDatePickerModeTime; - } - break; - case BRDatePickerModeCountDownTimer: - { - self.dateFormatter = @"HH:mm"; - self.style = BRDatePickerStyleSystem; - _datePickerMode = UIDatePickerModeCountDownTimer; - } - break; - - case BRDatePickerModeYMDHMS: - { - self.dateFormatter = @"yyyy-MM-dd HH:mm:ss"; - self.style = BRDatePickerStyleCustom; - self.unitArr = @[[self getYearUnit], [self getMonthUnit], [self getDayUnit], [self getHourUnit], [self getMinuteUnit], [self getSecondUnit]]; - } - break; - case BRDatePickerModeYMDHM: - { - self.dateFormatter = @"yyyy-MM-dd HH:mm"; - self.style = BRDatePickerStyleCustom; - self.unitArr = @[[self getYearUnit], [self getMonthUnit], [self getDayUnit], [self getHourUnit], [self getMinuteUnit]]; - } - break; - case BRDatePickerModeYMDH: - { - self.dateFormatter = @"yyyy-MM-dd HH"; - self.style = BRDatePickerStyleCustom; - self.unitArr = @[[self getYearUnit], [self getMonthUnit], [self getDayUnit], self.pickerMode == BRDatePickerModeYMDH && self.isShowAMAndPM ? @"" : [self getHourUnit]]; - } - break; - case BRDatePickerModeMDHM: - { - self.dateFormatter = @"MM-dd HH:mm"; - self.style = BRDatePickerStyleCustom; - self.unitArr = @[[self getMonthUnit], [self getDayUnit], [self getHourUnit], [self getMinuteUnit]]; - } - break; - case BRDatePickerModeYMD: - { - self.dateFormatter = @"yyyy-MM-dd"; - self.style = BRDatePickerStyleCustom; - self.unitArr = @[[self getYearUnit], [self getMonthUnit], [self getDayUnit]]; - } - break; - case BRDatePickerModeYM: - { - self.dateFormatter = @"yyyy-MM"; - self.style = BRDatePickerStyleCustom; - self.unitArr = @[[self getYearUnit], [self getMonthUnit]]; - } - break; - case BRDatePickerModeY: - { - self.dateFormatter = @"yyyy"; - self.style = BRDatePickerStyleCustom; - self.unitArr = @[[self getYearUnit]]; - } - break; - case BRDatePickerModeMD: - { - self.dateFormatter = @"MM-dd"; - self.style = BRDatePickerStyleCustom; - self.unitArr = @[[self getMonthUnit], [self getDayUnit]]; - } - break; - case BRDatePickerModeHMS: - { - self.dateFormatter = @"HH:mm:ss"; - self.style = BRDatePickerStyleCustom; - self.unitArr = @[[self getHourUnit], [self getMinuteUnit], [self getSecondUnit]]; - } - break; - case BRDatePickerModeHM: - { - self.dateFormatter = @"HH:mm"; - self.style = BRDatePickerStyleCustom; - self.unitArr = @[[self getHourUnit], [self getMinuteUnit]]; - } - break; - case BRDatePickerModeMS: - { - self.dateFormatter = @"mm:ss"; - self.style = BRDatePickerStyleCustom; - self.unitArr = @[[self getMinuteUnit], [self getSecondUnit]]; - } - break; - - default: - break; - } -} - -#pragma mark - 更新日期数据源数组 -- (void)reloadDateArrayWithUpdateMonth:(BOOL)updateMonth updateDay:(BOOL)updateDay updateHour:(BOOL)updateHour updateMinute:(BOOL)updateMinute updateSecond:(BOOL)updateSecond { - _isAdjustSelectRow = NO; - // 1.更新 monthArr - if (self.yearArr.count == 0) { - return; - } - NSString *yearString = [self getYearString]; - if ((self.lastRowContent && [yearString isEqualToString:self.lastRowContent]) || (self.firstRowContent && [yearString isEqualToString:self.firstRowContent])) { - self.monthArr = nil; - self.dayArr = nil; - self.hourArr = nil; - self.minuteArr = nil; - self.secondArr = nil; - - return; - } - if (updateMonth) { - NSString *lastSelectMonth = [self getMDHMSNumber:self.mSelectDate.br_month]; - self.monthArr = [self getMonthArr:[yearString integerValue]]; - if (self.mSelectDate) { - if ([self.monthArr containsObject:lastSelectMonth]) { - NSInteger monthIndex = [self.monthArr indexOfObject:lastSelectMonth]; - if (monthIndex != self.monthIndex) { - _isAdjustSelectRow = YES; - self.monthIndex = monthIndex; - } - } else { - _isAdjustSelectRow = YES; - self.monthIndex = ([lastSelectMonth intValue] < [self.monthArr.firstObject intValue]) ? 0 : (self.monthArr.count - 1); - } - } - } - - // 2.更新 dayArr - if (self.monthArr.count == 0) { - return; - } - NSString *monthString = [self getMonthString]; - if ((self.lastRowContent && [monthString isEqualToString:self.lastRowContent]) || (self.firstRowContent && [monthString isEqualToString:self.firstRowContent])) { - self.dayArr = nil; - self.hourArr = nil; - self.minuteArr = nil; - self.secondArr = nil; - - return; - } - if (updateDay) { - NSString *lastSelectDay = [self getMDHMSNumber:self.mSelectDate.br_day]; - self.dayArr = [self getDayArr:[yearString integerValue] month:[monthString integerValue]]; - if (self.mSelectDate) { - if ([self.dayArr containsObject:lastSelectDay]) { - NSInteger dayIndex = [self.dayArr indexOfObject:lastSelectDay]; - if (dayIndex != self.dayIndex) { - _isAdjustSelectRow = YES; - self.dayIndex = dayIndex; - } - } else { - _isAdjustSelectRow = YES; - self.dayIndex = ([lastSelectDay intValue] < [self.dayArr.firstObject intValue]) ? 0 : (self.dayArr.count - 1); - } - } - } - - // 3.更新 hourArr - if (self.dayArr.count == 0) { - return; - } - NSInteger day = [[self getDayString] integerValue]; - if (updateHour) { - NSString *lastSelectHour = [self getMDHMSNumber:self.mSelectDate.br_hour]; - self.hourArr = [self getHourArr:[yearString integerValue] month:[monthString integerValue] day:day]; - if (self.mSelectDate) { - if ([self.hourArr containsObject:lastSelectHour]) { - NSInteger hourIndex = [self.hourArr indexOfObject:lastSelectHour]; - if (hourIndex != self.hourIndex) { - _isAdjustSelectRow = YES; - self.hourIndex = hourIndex; - } - } else { - _isAdjustSelectRow = YES; - self.hourIndex = ([lastSelectHour intValue] < [self.hourArr.firstObject intValue]) ? 0 : (self.hourArr.count - 1); - } - } - } - - // 4.更新 minuteArr - if (self.hourArr.count == 0) { - return; - } - NSString *hourString = [self getHourString]; - if ((self.lastRowContent && [hourString isEqualToString:self.lastRowContent]) || (self.firstRowContent && [hourString isEqualToString:self.firstRowContent])) { - self.minuteArr = nil; - self.secondArr = nil; - - return; - } - if (updateMinute) { - NSString *lastSelectMinute = [self getMDHMSNumber:self.mSelectDate.br_minute]; - self.minuteArr = [self getMinuteArr:[yearString integerValue] month:[monthString integerValue] day:day hour:[hourString integerValue]]; - if (self.mSelectDate) { - if ([self.minuteArr containsObject:lastSelectMinute]) { - NSInteger minuteIndex = [self.minuteArr indexOfObject:lastSelectMinute]; - if (minuteIndex != self.minuteIndex) { - _isAdjustSelectRow = YES; - self.minuteIndex = minuteIndex; - } - } else { - _isAdjustSelectRow = YES; - self.minuteIndex = ([lastSelectMinute intValue] < [self.minuteArr.firstObject intValue]) ? 0 : (self.minuteArr.count - 1); - } - } - } - - // 5.更新 secondArr - if (self.minuteArr.count == 0) { - return; - } - NSString *minuteString = [self getMinuteString]; - if ((self.lastRowContent && [minuteString isEqualToString:self.lastRowContent]) || (self.firstRowContent && [minuteString isEqualToString:self.firstRowContent])) { - self.secondArr = nil; - return; - } - if (updateSecond) { - NSString *lastSelectSecond = [self getMDHMSNumber:self.mSelectDate.br_second]; - self.secondArr = [self getSecondArr:[yearString integerValue] month:[monthString integerValue] day:day hour:[hourString integerValue] minute:[minuteString integerValue]]; - if (self.mSelectDate) { - if ([self.secondArr containsObject:lastSelectSecond]) { - NSInteger secondIndex = [self.secondArr indexOfObject:lastSelectSecond]; - if (secondIndex != self.secondIndex) { - _isAdjustSelectRow = YES; - self.secondIndex = secondIndex; - } - } else { - _isAdjustSelectRow = YES; - self.secondIndex = ([lastSelectSecond intValue] < [self.secondArr.firstObject intValue]) ? 0 : (self.secondArr.count - 1); - } - } - } -} - -#pragma mark - 滚动到指定日期的位置(更新选择的索引) -- (void)scrollToSelectDate:(NSDate *)selectDate animated:(BOOL)animated { - self.yearIndex = [self getIndexWithArray:self.yearArr object:[self getYearNumber:selectDate.br_year]]; - self.monthIndex = [self getIndexWithArray:self.monthArr object:[self getMDHMSNumber:selectDate.br_month]]; - self.dayIndex = [self getIndexWithArray:self.dayArr object:[self getMDHMSNumber:selectDate.br_day]]; - if (self.pickerMode == BRDatePickerModeYMDH && self.isShowAMAndPM) { - self.hourIndex = selectDate.br_hour < 12 ? 0 : 1; - } else { - self.hourIndex = [self getIndexWithArray:self.hourArr object:[self getMDHMSNumber:selectDate.br_hour]]; - } - self.minuteIndex = [self getIndexWithArray:self.minuteArr object:[self getMDHMSNumber:selectDate.br_minute]]; - self.secondIndex = [self getIndexWithArray:self.secondArr object:[self getMDHMSNumber:selectDate.br_second]]; - - NSArray *indexArr = nil; - if (self.pickerMode == BRDatePickerModeYMDHMS) { - indexArr = @[@(self.yearIndex), @(self.monthIndex), @(self.dayIndex), @(self.hourIndex), @(self.minuteIndex), @(self.secondIndex)]; - } else if (self.pickerMode == BRDatePickerModeYMDHM) { - indexArr = @[@(self.yearIndex), @(self.monthIndex), @(self.dayIndex), @(self.hourIndex), @(self.minuteIndex)]; - } else if (self.pickerMode == BRDatePickerModeYMDH) { - indexArr = @[@(self.yearIndex), @(self.monthIndex), @(self.dayIndex), @(self.hourIndex)]; - } else if (self.pickerMode == BRDatePickerModeMDHM) { - indexArr = @[@(self.monthIndex), @(self.dayIndex), @(self.hourIndex), @(self.minuteIndex)]; - } else if (self.pickerMode == BRDatePickerModeYMD) { - if ([self.pickerStyle.language hasPrefix:@"zh"]) { - indexArr = @[@(self.yearIndex), @(self.monthIndex), @(self.dayIndex)]; - } else { - indexArr = @[@(self.dayIndex), @(self.monthIndex), @(self.yearIndex)]; - } - } else if (self.pickerMode == BRDatePickerModeYM) { - if ([self.pickerStyle.language hasPrefix:@"zh"]) { - indexArr = @[@(self.yearIndex), @(self.monthIndex)]; - } else { - indexArr = @[@(self.monthIndex), @(self.yearIndex)]; - } - } else if (self.pickerMode == BRDatePickerModeY) { - indexArr = @[@(self.yearIndex)]; - } else if (self.pickerMode == BRDatePickerModeMD) { - indexArr = @[@(self.monthIndex), @(self.dayIndex)]; - } else if (self.pickerMode == BRDatePickerModeHMS) { - indexArr = @[@(self.hourIndex), @(self.minuteIndex), @(self.secondIndex)]; - } else if (self.pickerMode == BRDatePickerModeHM) { - indexArr = @[@(self.hourIndex), @(self.minuteIndex)]; - } else if (self.pickerMode == BRDatePickerModeMS) { - indexArr = @[@(self.minuteIndex), @(self.secondIndex)]; - } - if (!indexArr) return; - for (NSInteger i = 0; i < indexArr.count; i++) { - [self.pickerView selectRow:[indexArr[i] integerValue] inComponent:i animated:animated]; - } -} - -#pragma mark - 滚动到【自定义字符串】的位置 -- (void)scrollToCustomString:(BOOL)animated { - switch (self.pickerMode) { - case BRDatePickerModeYMDHMS: - case BRDatePickerModeYMDHM: - case BRDatePickerModeYMDH: - case BRDatePickerModeYMD: - case BRDatePickerModeYM: - case BRDatePickerModeY: - { - NSInteger yearIndex = ([self.selectValue isEqualToString:self.lastRowContent] && self.yearArr.count > 0) ? self.yearArr.count - 1 : 0; - NSInteger component = 0; - if (self.pickerMode == BRDatePickerModeYMD && ![self.pickerStyle.language hasPrefix:@"zh"]) { - component = 2; - } else if (self.pickerMode == BRDatePickerModeYM && ![self.pickerStyle.language hasPrefix:@"zh"]) { - component = 1; - } - [self.pickerView selectRow:yearIndex inComponent:component animated:animated]; - } - break; - case BRDatePickerModeMDHM: - case BRDatePickerModeMD: - { - NSInteger monthIndex = ([self.selectValue isEqualToString:self.lastRowContent] && self.monthArr.count > 0) ? self.monthArr.count - 1 : 0; - [self.pickerView selectRow:monthIndex inComponent:0 animated:animated]; - } - break; - case BRDatePickerModeHMS: - case BRDatePickerModeHM: - { - NSInteger hourIndex = ([self.selectValue isEqualToString:self.lastRowContent] && self.hourArr.count > 0) ? self.hourArr.count - 1 : 0; - [self.pickerView selectRow:hourIndex inComponent:0 animated:animated]; - } - break; - case BRDatePickerModeMS: - { - NSInteger minuteIndex = ([self.selectValue isEqualToString:self.lastRowContent] && self.minuteArr.count > 0) ? self.minuteArr.count - 1 : 0; - [self.pickerView selectRow:minuteIndex inComponent:0 animated:animated]; - } - break; - - default: - break; - } -} - -#pragma mark - 日期选择器1 -- (UIDatePicker *)datePicker { - if (!_datePicker) { - CGFloat pickerHeaderViewHeight = self.pickerHeaderView ? self.pickerHeaderView.bounds.size.height : 0; - _datePicker = [[UIDatePicker alloc]initWithFrame:CGRectMake(0, self.pickerStyle.titleBarHeight + pickerHeaderViewHeight, self.keyView.bounds.size.width, self.pickerStyle.pickerHeight)]; - _datePicker.backgroundColor = self.pickerStyle.pickerColor; - _datePicker.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth; - // 滚动改变值的响应事件 - [_datePicker addTarget:self action:@selector(didSelectValueChanged:) forControlEvents:UIControlEventValueChanged]; - } - return _datePicker; -} - -#pragma mark - 日期选择器2 -- (UIPickerView *)pickerView { - if (!_pickerView) { - CGFloat pickerHeaderViewHeight = self.pickerHeaderView ? self.pickerHeaderView.bounds.size.height : 0; - _pickerView = [[UIPickerView alloc]initWithFrame:CGRectMake(0, self.pickerStyle.titleBarHeight + pickerHeaderViewHeight, self.keyView.bounds.size.width, self.pickerStyle.pickerHeight)]; - _pickerView.backgroundColor = self.pickerStyle.pickerColor; - _pickerView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth; - _pickerView.dataSource = self; - _pickerView.delegate = self; - } - return _pickerView; -} - -#pragma mark - UIPickerViewDataSource -// 1.设置 pickerView 的列数 -- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { - if (self.pickerMode == BRDatePickerModeYMDHMS) { - return 6; - } else if (self.pickerMode == BRDatePickerModeYMDHM) { - return 5; - } else if (self.pickerMode == BRDatePickerModeYMDH) { - return 4; - } else if (self.pickerMode == BRDatePickerModeMDHM) { - return 4; - } else if (self.pickerMode == BRDatePickerModeYMD) { - return 3; - } else if (self.pickerMode == BRDatePickerModeYM) { - return 2; - } else if (self.pickerMode == BRDatePickerModeY) { - return 1; - } else if (self.pickerMode == BRDatePickerModeMD) { - return 2; - } else if (self.pickerMode == BRDatePickerModeHMS) { - return 3; - } else if (self.pickerMode == BRDatePickerModeHM) { - return 2; - } else if (self.pickerMode == BRDatePickerModeMS) { - return 2; - } - return 0; -} - -// 2.设置 pickerView 每列的行数 -- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { - NSArray *rowsArr = [NSArray array]; - if (self.pickerMode == BRDatePickerModeYMDHMS) { - rowsArr = @[@(self.yearArr.count), @(self.monthArr.count), @(self.dayArr.count), @(self.hourArr.count), @(self.minuteArr.count), @(self.secondArr.count)]; - } else if (self.pickerMode == BRDatePickerModeYMDHM) { - rowsArr = @[@(self.yearArr.count), @(self.monthArr.count), @(self.dayArr.count), @(self.hourArr.count), @(self.minuteArr.count)]; - } else if (self.pickerMode == BRDatePickerModeYMDH) { - rowsArr = @[@(self.yearArr.count), @(self.monthArr.count), @(self.dayArr.count), @(self.hourArr.count)]; - } else if (self.pickerMode == BRDatePickerModeMDHM) { - rowsArr = @[@(self.monthArr.count), @(self.dayArr.count), @(self.hourArr.count), @(self.minuteArr.count)]; - } else if (self.pickerMode == BRDatePickerModeYMD) { - if ([self.pickerStyle.language hasPrefix:@"zh"]) { - rowsArr = @[@(self.yearArr.count), @(self.monthArr.count), @(self.dayArr.count)]; - } else { - rowsArr = @[@(self.dayArr.count), @(self.monthArr.count), @(self.yearArr.count)]; - } - } else if (self.pickerMode == BRDatePickerModeYM) { - if ([self.pickerStyle.language hasPrefix:@"zh"]) { - rowsArr = @[@(self.yearArr.count), @(self.monthArr.count)]; - } else { - rowsArr = @[@(self.monthArr.count), @(self.yearArr.count)]; - } - } else if (self.pickerMode == BRDatePickerModeY) { - rowsArr = @[@(self.yearArr.count)]; - } else if (self.pickerMode == BRDatePickerModeMD) { - rowsArr = @[@(self.monthArr.count), @(self.dayArr.count)]; - } else if (self.pickerMode == BRDatePickerModeHMS) { - rowsArr = @[@(self.hourArr.count), @(self.minuteArr.count), @(self.secondArr.count)]; - } else if (self.pickerMode == BRDatePickerModeHM) { - rowsArr = @[@(self.hourArr.count), @(self.minuteArr.count)]; - } else if (self.pickerMode == BRDatePickerModeMS) { - rowsArr = @[@(self.minuteArr.count), @(self.secondArr.count)]; - } - if (component >= 0 && component < rowsArr.count) { - return [rowsArr[component] integerValue]; - } - return 0; -} - -#pragma mark - UIPickerViewDelegate -// 3. 设置 pickerView 的显示内容 -- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(nullable UIView *)view { - // 1.自定义 row 的内容视图 - UILabel *label = (UILabel *)view; - if (!label) { - label = [[UILabel alloc]init]; - label.backgroundColor = [UIColor clearColor]; - label.textAlignment = NSTextAlignmentCenter; - label.font = self.pickerStyle.pickerTextFont; - label.textColor = self.pickerStyle.pickerTextColor; - // 字体自适应属性 - label.adjustsFontSizeToFitWidth = YES; - // 自适应最小字体缩放比例 - label.minimumScaleFactor = 0.5f; - } - label.text = [self pickerView:pickerView titleForRow:row forComponent:component]; - - // 2.设置选择器中间选中行的样式 - [self.pickerStyle setupPickerSelectRowStyle:pickerView titleForRow:row forComponent:component]; - - return label; -} - -- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { - NSString *titleString = @""; - if (self.pickerMode == BRDatePickerModeYMDHMS) { - if (component == 0) { - titleString = [self getYearText:self.yearArr row:row]; - } else if (component == 1) { - titleString = [self getMonthText:self.monthArr row:row]; - } else if (component == 2) { - titleString = [self getDayText:self.dayArr row:row mSelectDate:self.mSelectDate]; - } else if (component == 3) { - titleString = [self getHourText:self.hourArr row:row]; - } else if (component == 4) { - titleString = [self getMinuteText:self.minuteArr row:row]; - } else if (component == 5) { - titleString = [self getSecondText:self.secondArr row:row]; - } - } else if (self.pickerMode == BRDatePickerModeYMDHM) { - if (component == 0) { - titleString = [self getYearText:self.yearArr row:row]; - } else if (component == 1) { - titleString = [self getMonthText:self.monthArr row:row]; - } else if (component == 2) { - titleString = [self getDayText:self.dayArr row:row mSelectDate:self.mSelectDate]; - } else if (component == 3) { - titleString = [self getHourText:self.hourArr row:row]; - } else if (component == 4) { - titleString = [self getMinuteText:self.minuteArr row:row]; - } - } else if (self.pickerMode == BRDatePickerModeYMDH) { - if (component == 0) { - titleString = [self getYearText:self.yearArr row:row];; - } else if (component == 1) { - titleString = [self getMonthText:self.monthArr row:row]; - } else if (component == 2) { - titleString = [self getDayText:self.dayArr row:row mSelectDate:self.mSelectDate]; - } else if (component == 3) { - titleString = [self getHourText:self.hourArr row:row]; - } - } else if (self.pickerMode == BRDatePickerModeMDHM) { - if (component == 0) { - titleString = [self getMonthText:self.monthArr row:row]; - } else if (component == 1) { - titleString = [self getDayText:self.dayArr row:row mSelectDate:self.mSelectDate]; - } else if (component == 2) { - titleString = [self getHourText:self.hourArr row:row]; - } else if (component == 3) { - titleString = [self getMinuteText:self.minuteArr row:row]; - } - } else if (self.pickerMode == BRDatePickerModeYMD) { - if (component == 0) { - titleString = [self.pickerStyle.language hasPrefix:@"zh"] ? [self getYearText:self.yearArr row:row] : [self getDayText:self.dayArr row:row mSelectDate:self.mSelectDate]; - } else if (component == 1) { - titleString = [self getMonthText:self.monthArr row:row]; - } else if (component == 2) { - titleString = [self.pickerStyle.language hasPrefix:@"zh"] ? [self getDayText:self.dayArr row:row mSelectDate:self.mSelectDate] : [self getYearText:self.yearArr row:row]; - } - } else if (self.pickerMode == BRDatePickerModeYM) { - if (component == 0) { - titleString = [self.pickerStyle.language hasPrefix:@"zh"] ? [self getYearText:self.yearArr row:row] : [self getMonthText:self.monthArr row:row]; - } else if (component == 1) { - titleString = [self.pickerStyle.language hasPrefix:@"zh"] ? [self getMonthText:self.monthArr row:row] : [self getYearText:self.yearArr row:row]; - } - } else if (self.pickerMode == BRDatePickerModeY) { - if (component == 0) { - titleString = [self getYearText:self.yearArr row:row]; - } - } else if (self.pickerMode == BRDatePickerModeMD) { - if (component == 0) { - titleString = [self getMonthText:self.monthArr row:row]; - } else if (component == 1) { - titleString = [self getDayText:self.dayArr row:row mSelectDate:self.mSelectDate]; - } - } else if (self.pickerMode == BRDatePickerModeHMS) { - if (component == 0) { - titleString = [self getHourText:self.hourArr row:row]; - } else if (component == 1) { - titleString = [self getMinuteText:self.minuteArr row:row]; - } else if (component == 2) { - titleString = [self getSecondText:self.secondArr row:row]; - } - } else if (self.pickerMode == BRDatePickerModeHM) { - if (component == 0) { - titleString = [self getHourText:self.hourArr row:row]; - } else if (component == 1) { - titleString = [self getMinuteText:self.minuteArr row:row]; - } - } else if (self.pickerMode == BRDatePickerModeMS) { - if (component == 0) { - titleString = [self getMinuteText:self.minuteArr row:row]; - } else if (component == 1) { - titleString = [self getSecondText:self.secondArr row:row]; - } - } - - return titleString; -} - -// 4.滚动 pickerView 执行的回调方法 -- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { - NSString *lastSelectValue = self.mSelectValue; - NSDate *lastSelectDate = self.mSelectDate; - if (self.pickerMode == BRDatePickerModeYMDHMS) { - if (component == 0) { - self.yearIndex = row; - [self reloadDateArrayWithUpdateMonth:YES updateDay:YES updateHour:YES updateMinute:YES updateSecond:YES]; - [self.pickerView reloadComponent:1]; - [self.pickerView reloadComponent:2]; - [self.pickerView reloadComponent:3]; - [self.pickerView reloadComponent:4]; - [self.pickerView reloadComponent:5]; - } else if (component == 1) { - self.monthIndex = row; - [self reloadDateArrayWithUpdateMonth:NO updateDay:YES updateHour:YES updateMinute:YES updateSecond:YES]; - [self.pickerView reloadComponent:2]; - [self.pickerView reloadComponent:3]; - [self.pickerView reloadComponent:4]; - [self.pickerView reloadComponent:5]; - } else if (component == 2) { - self.dayIndex = row; - [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:YES updateMinute:YES updateSecond:YES]; - [self.pickerView reloadComponent:3]; - [self.pickerView reloadComponent:4]; - [self.pickerView reloadComponent:5]; - } else if (component == 3) { - self.hourIndex = row; - [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:YES updateSecond:YES]; - [self.pickerView reloadComponent:4]; - [self.pickerView reloadComponent:5]; - } else if (component == 4) { - self.minuteIndex = row; - [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:NO updateSecond:YES]; - [self.pickerView reloadComponent:5]; - } else if (component == 5) { - self.secondIndex = row; - } - - NSString *yearString = [self getYearString]; - if (![yearString isEqualToString:self.lastRowContent] && ![yearString isEqualToString:self.firstRowContent]) { - if (self.yearArr.count * self.monthArr.count * self.dayArr.count * self.hourArr.count * self.minuteArr.count * self.secondArr.count == 0) return; - int year = [[self getYearString] intValue]; - int month = [[self getMonthString] intValue]; - int day = [[self getDayString] intValue]; - int hour = [[self getHourString] intValue]; - int minute = [[self getMinuteString] intValue]; - int second = [[self getSecondString] intValue]; - self.mSelectDate = [NSDate br_setYear:year month:month day:day hour:hour minute:minute second:second]; - self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second]; - } else { - self.mSelectDate = self.addToNow ? [NSDate date] : nil; - if ([yearString isEqualToString:self.lastRowContent]) { - self.mSelectValue = self.lastRowContent; - } else if ([yearString isEqualToString:self.firstRowContent]) { - self.mSelectValue = self.firstRowContent; - } - } - - } else if (self.pickerMode == BRDatePickerModeYMDHM) { - if (component == 0) { - self.yearIndex = row; - [self reloadDateArrayWithUpdateMonth:YES updateDay:YES updateHour:YES updateMinute:YES updateSecond:NO]; - [self.pickerView reloadComponent:1]; - [self.pickerView reloadComponent:2]; - [self.pickerView reloadComponent:3]; - [self.pickerView reloadComponent:4]; - } else if (component == 1) { - self.monthIndex = row; - [self reloadDateArrayWithUpdateMonth:NO updateDay:YES updateHour:YES updateMinute:YES updateSecond:NO]; - [self.pickerView reloadComponent:2]; - [self.pickerView reloadComponent:3]; - [self.pickerView reloadComponent:4]; - } else if (component == 2) { - self.dayIndex = row; - [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:YES updateMinute:YES updateSecond:NO]; - [self.pickerView reloadComponent:3]; - [self.pickerView reloadComponent:4]; - } else if (component == 3) { - self.hourIndex = row; - [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:YES updateSecond:NO]; - [self.pickerView reloadComponent:4]; - } else if (component == 4) { - self.minuteIndex = row; - } - - NSString *yearString = [self getYearString]; - if (![yearString isEqualToString:self.lastRowContent] && ![yearString isEqualToString:self.firstRowContent]) { - if (self.yearArr.count * self.monthArr.count * self.dayArr.count * self.hourArr.count * self.minuteArr.count == 0) return; - int year = [[self getYearString] intValue]; - int month = [[self getMonthString] intValue]; - int day = [[self getDayString] intValue]; - int hour = [[self getHourString] intValue]; - int minute = [[self getMinuteString] intValue]; - self.mSelectDate = [NSDate br_setYear:year month:month day:day hour:hour minute:minute]; - self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d-%02d %02d:%02d", year, month, day, hour, minute]; - } else { - self.mSelectDate = self.addToNow ? [NSDate date] : nil; - if ([yearString isEqualToString:self.lastRowContent]) { - self.mSelectValue = self.lastRowContent; - } else if ([yearString isEqualToString:self.firstRowContent]) { - self.mSelectValue = self.firstRowContent; - } - } - - } else if (self.pickerMode == BRDatePickerModeYMDH) { - if (component == 0) { - self.yearIndex = row; - [self reloadDateArrayWithUpdateMonth:YES updateDay:YES updateHour:YES updateMinute:NO updateSecond:NO]; - [self.pickerView reloadComponent:1]; - [self.pickerView reloadComponent:2]; - [self.pickerView reloadComponent:3]; - } else if (component == 1) { - self.monthIndex = row; - [self reloadDateArrayWithUpdateMonth:NO updateDay:YES updateHour:YES updateMinute:NO updateSecond:NO]; - [self.pickerView reloadComponent:2]; - [self.pickerView reloadComponent:3]; - } else if (component == 2) { - self.dayIndex = row; - [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:YES updateMinute:NO updateSecond:NO]; - [self.pickerView reloadComponent:3]; - } else if (component == 3) { - self.hourIndex = row; - } - - NSString *yearString = [self getYearString]; - if (![yearString isEqualToString:self.lastRowContent] && ![yearString isEqualToString:self.firstRowContent]) { - if (self.yearArr.count * self.monthArr.count * self.dayArr.count * self.hourArr.count == 0) return; - int year = [[self getYearString] intValue]; - int month = [[self getMonthString] intValue]; - int day = [[self getDayString] intValue]; - int hour = 0; - if (self.pickerMode == BRDatePickerModeYMDH && self.isShowAMAndPM) { - hour = (self.hourIndex == 0 ? 0 : 12); - self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d-%02d %@", year, month, day, [self getHourString]]; - } else { - hour = [[self getHourString] intValue]; - self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d-%02d %02d", year, month, day, hour]; - } - self.mSelectDate = [NSDate br_setYear:year month:month day:day hour:hour]; - } else { - self.mSelectDate = self.addToNow ? [NSDate date] : nil; - if ([yearString isEqualToString:self.lastRowContent]) { - self.mSelectValue = self.lastRowContent; - } else if ([yearString isEqualToString:self.firstRowContent]) { - self.mSelectValue = self.firstRowContent; - } - } - - } else if (self.pickerMode == BRDatePickerModeMDHM) { - if (component == 0) { - self.monthIndex = row; - [self reloadDateArrayWithUpdateMonth:NO updateDay:YES updateHour:YES updateMinute:YES updateSecond:NO]; - [self.pickerView reloadComponent:1]; - [self.pickerView reloadComponent:2]; - [self.pickerView reloadComponent:3]; - } else if (component == 1) { - self.dayIndex = row; - [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:YES updateMinute:YES updateSecond:NO]; - [self.pickerView reloadComponent:2]; - [self.pickerView reloadComponent:3]; - } else if (component == 2) { - self.hourIndex = row; - [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:YES updateSecond:NO]; - [self.pickerView reloadComponent:3]; - } else if (component == 3) { - self.minuteIndex = row; - } - - NSString *monthString = [self getMonthString]; - if (![monthString isEqualToString:self.lastRowContent] && ![monthString isEqualToString:self.firstRowContent]) { - if (self.yearArr.count * self.monthArr.count * self.dayArr.count * self.hourArr.count * self.minuteArr.count == 0) return; - int year = [[self getYearString] intValue]; - int month = [[self getMonthString] intValue]; - int day = [[self getDayString] intValue]; - int hour = [[self getHourString] intValue]; - int minute = [[self getMinuteString] intValue]; - self.mSelectDate = [NSDate br_setYear:year month:month day:day hour:hour minute:minute]; - self.mSelectValue = [NSString stringWithFormat:@"%02d-%02d %02d:%02d", month, day, hour, minute]; - } else { - self.mSelectDate = self.addToNow ? [NSDate date] : nil; - if ([monthString isEqualToString:self.lastRowContent]) { - self.mSelectValue = self.lastRowContent; - } else if ([monthString isEqualToString:self.firstRowContent]) { - self.mSelectValue = self.firstRowContent; - } - } - - } else if (self.pickerMode == BRDatePickerModeYMD) { - if (component == 0) { - if ([self.pickerStyle.language hasPrefix:@"zh"]) { - self.yearIndex = row; - [self reloadDateArrayWithUpdateMonth:YES updateDay:YES updateHour:NO updateMinute:NO updateSecond:NO]; - [self.pickerView reloadComponent:1]; - [self.pickerView reloadComponent:2]; - } else { - self.dayIndex = row; - } - } else if (component == 1) { - self.monthIndex = row; - [self reloadDateArrayWithUpdateMonth:NO updateDay:YES updateHour:NO updateMinute:NO updateSecond:NO]; - if ([self.pickerStyle.language hasPrefix:@"zh"]) { - [self.pickerView reloadComponent:2]; - } else { - [self.pickerView reloadComponent:0]; - } - } else if (component == 2) { - if ([self.pickerStyle.language hasPrefix:@"zh"]) { - self.dayIndex = row; - } else { - self.yearIndex = row; - [self reloadDateArrayWithUpdateMonth:YES updateDay:YES updateHour:NO updateMinute:NO updateSecond:NO]; - [self.pickerView reloadComponent:0]; - [self.pickerView reloadComponent:1]; - } - } - - NSString *yearString = [self getYearString]; - if (![yearString isEqualToString:self.lastRowContent] && ![yearString isEqualToString:self.firstRowContent]) { - if (self.yearArr.count * self.monthArr.count * self.dayArr.count == 0) return; - int year = [[self getYearString] intValue]; - int month = [[self getMonthString] intValue]; - int day = [[self getDayString] intValue]; - self.mSelectDate = [NSDate br_setYear:year month:month day:day]; - self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d-%02d", year, month, day]; - } else { - self.mSelectDate = self.addToNow ? [NSDate date] : nil; - if ([yearString isEqualToString:self.lastRowContent]) { - self.mSelectValue = self.lastRowContent; - } else if ([yearString isEqualToString:self.firstRowContent]) { - self.mSelectValue = self.firstRowContent; - } - } - - } else if (self.pickerMode == BRDatePickerModeYM) { - if (component == 0) { - if ([self.pickerStyle.language hasPrefix:@"zh"]) { - self.yearIndex = row; - [self reloadDateArrayWithUpdateMonth:YES updateDay:NO updateHour:NO updateMinute:NO updateSecond:NO]; - [self.pickerView reloadComponent:1]; - } else { - self.monthIndex = row; - } - } else if (component == 1) { - if ([self.pickerStyle.language hasPrefix:@"zh"]) { - self.monthIndex = row; - } else { - self.yearIndex = row; - [self reloadDateArrayWithUpdateMonth:YES updateDay:NO updateHour:NO updateMinute:NO updateSecond:NO]; - [self.pickerView reloadComponent:0]; - } - } - - NSString *yearString = [self getYearString]; - if (![yearString isEqualToString:self.lastRowContent] && ![yearString isEqualToString:self.firstRowContent]) { - if (self.yearArr.count * self.monthArr.count == 0) return; - int year = [[self getYearString] intValue]; - int month = [[self getMonthString] intValue]; - self.mSelectDate = [NSDate br_setYear:year month:month]; - self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d", year, month]; - } else { - self.mSelectDate = self.addToNow ? [NSDate date] : nil; - if ([yearString isEqualToString:self.lastRowContent]) { - self.mSelectValue = self.lastRowContent; - } else if ([yearString isEqualToString:self.firstRowContent]) { - self.mSelectValue = self.firstRowContent; - } - } - } else if (self.pickerMode == BRDatePickerModeY) { - if (component == 0) { - self.yearIndex = row; - } - - NSString *yearString = [self getYearString]; - if (![yearString isEqualToString:self.lastRowContent] && ![yearString isEqualToString:self.firstRowContent]) { - if (self.yearArr.count == 0) return; - int year = [[self getYearString] intValue]; - self.mSelectDate = [NSDate br_setYear:year]; - self.mSelectValue = [NSString stringWithFormat:@"%04d", year]; - } else { - self.mSelectDate = self.addToNow ? [NSDate date] : nil; - if ([yearString isEqualToString:self.lastRowContent]) { - self.mSelectValue = self.lastRowContent; - } else if ([yearString isEqualToString:self.firstRowContent]) { - self.mSelectValue = self.firstRowContent; - } - } - - } else if (self.pickerMode == BRDatePickerModeMD) { - if (component == 0) { - self.monthIndex = row; - [self reloadDateArrayWithUpdateMonth:NO updateDay:YES updateHour:NO updateMinute:NO updateSecond:NO]; - [self.pickerView reloadComponent:1]; - } else if (component == 1) { - self.dayIndex = row; - } - - NSString *monthString = [self getMonthString]; - if (![monthString isEqualToString:self.lastRowContent] && ![monthString isEqualToString:self.firstRowContent]) { - if (self.yearArr.count * self.monthArr.count * self.dayArr.count == 0) return; - int year = [[self getYearString] intValue]; - int month = [[self getMonthString] intValue]; - int day = [[self getDayString] intValue]; - self.mSelectDate = [NSDate br_setYear:year month:month day:day]; - self.mSelectValue = [NSString stringWithFormat:@"%02d-%02d", month, day]; - } else { - self.mSelectDate = self.addToNow ? [NSDate date] : nil; - if ([monthString isEqualToString:self.lastRowContent]) { - self.mSelectValue = self.lastRowContent; - } else if ([monthString isEqualToString:self.firstRowContent]) { - self.mSelectValue = self.firstRowContent; - } - } - - } else if (self.pickerMode == BRDatePickerModeHMS) { - if (component == 0) { - self.hourIndex = row; - [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:YES updateSecond:YES]; - [self.pickerView reloadComponent:1]; - [self.pickerView reloadComponent:2]; - } else if (component == 1) { - self.minuteIndex = row; - [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:NO updateSecond:YES]; - [self.pickerView reloadComponent:2]; - } else if (component == 2) { - self.secondIndex = row; - } - - NSString *hourString = [self getHourString]; - if (![hourString isEqualToString:self.lastRowContent] && ![hourString isEqualToString:self.firstRowContent]) { - if (self.hourArr.count * self.minuteArr.count * self.secondArr.count == 0) return; - int hour = [[self getHourString] intValue]; - int minute = [[self getMinuteString] intValue]; - int second = [[self getSecondString] intValue]; - self.mSelectDate = [NSDate br_setHour:hour minute:minute second:second]; - self.mSelectValue = [NSString stringWithFormat:@"%02d:%02d:%02d", hour, minute, second]; - } else { - self.mSelectDate = self.addToNow ? [NSDate date] : nil; - if ([hourString isEqualToString:self.lastRowContent]) { - self.mSelectValue = self.lastRowContent; - } else if ([hourString isEqualToString:self.firstRowContent]) { - self.mSelectValue = self.firstRowContent; - } - } - - } else if (self.pickerMode == BRDatePickerModeHM) { - if (component == 0) { - self.hourIndex = row; - [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:YES updateSecond:NO]; - [self.pickerView reloadComponent:1]; - } else if (component == 1) { - self.minuteIndex = row; - } - - NSString *hourString = [self getHourString]; - if (![hourString isEqualToString:self.lastRowContent] && ![hourString isEqualToString:self.firstRowContent]) { - if (self.hourArr.count * self.minuteArr.count == 0) return; - int hour = [[self getHourString] intValue]; - int minute = [[self getMinuteString] intValue]; - self.mSelectDate = [NSDate br_setHour:hour minute:minute]; - self.mSelectValue = [NSString stringWithFormat:@"%02d:%02d", hour, minute]; - } else { - self.mSelectDate = self.addToNow ? [NSDate date] : nil; - if ([hourString isEqualToString:self.lastRowContent]) { - self.mSelectValue = self.lastRowContent; - } else if ([hourString isEqualToString:self.firstRowContent]) { - self.mSelectValue = self.firstRowContent; - } - } - } else if (self.pickerMode == BRDatePickerModeMS) { - if (component == 0) { - self.minuteIndex = row; - [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:NO updateSecond:YES]; - [self.pickerView reloadComponent:1]; - } else if (component == 1) { - self.secondIndex = row; - } - - NSString *minuteString = [self getMinuteString]; - if (![minuteString isEqualToString:self.lastRowContent] && ![minuteString isEqualToString:self.firstRowContent]) { - if (self.minuteArr.count * self.secondArr.count == 0) return; - int minute = [[self getMinuteString] intValue]; - int second = [[self getSecondString] intValue]; - self.mSelectDate = [NSDate br_setMinute:minute second:second]; - self.mSelectValue = [NSString stringWithFormat:@"%02d:%02d", minute, second]; - } else { - self.mSelectDate = self.addToNow ? [NSDate date] : nil; - if ([minuteString isEqualToString:self.lastRowContent]) { - self.mSelectValue = self.lastRowContent; - } else if ([minuteString isEqualToString:self.firstRowContent]) { - self.mSelectValue = self.firstRowContent; - } - } - } - - // 纠正选择日期(解决:由【自定义字符串】滚动到 其它日期时,或设置 minDate,日期联动不正确问题) - BOOL isLastRowContent = [lastSelectValue isEqualToString:self.lastRowContent] && ![self.mSelectValue isEqualToString:self.lastRowContent] && ![self.mSelectValue isEqualToString:self.firstRowContent]; - BOOL isFirstRowContent = [lastSelectValue isEqualToString:self.firstRowContent] && ![self.mSelectValue isEqualToString:self.lastRowContent] && ![self.mSelectValue isEqualToString:self.firstRowContent]; - if (isLastRowContent || isFirstRowContent || _isAdjustSelectRow) { - [self scrollToSelectDate:self.mSelectDate animated:NO]; - } - - // 禁止选择日期:回滚到上次选择的日期 - if (self.nonSelectableDates && self.nonSelectableDates.count > 0 && ![self.mSelectValue isEqualToString:self.lastRowContent] && ![self.mSelectValue isEqualToString:self.firstRowContent]) { - for (NSDate *date in self.nonSelectableDates) { - if ([self br_compareDate:date targetDate:self.mSelectDate dateFormat:self.dateFormatter] == NSOrderedSame) { - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - // 如果当前的日期不可选择,就回滚到上次选择的日期 - [self scrollToSelectDate:lastSelectDate animated:YES]; - }); - // 不可选择日期的回调 - if (self.nonSelectableBlock) { - self.nonSelectableBlock(self.mSelectDate, self.mSelectValue); - } - self.mSelectDate = lastSelectDate; - self.mSelectValue = lastSelectValue; - break; - } - } - } - - // 滚动选择时执行 changeBlock 回调 - if (self.changeBlock) { - self.changeBlock(self.mSelectDate, self.mSelectValue); - } - - // 设置自动选择时,滚动选择时就执行 resultBlock - if (self.isAutoSelect) { - // 滚动完成后,执行block回调 - if (self.resultBlock) { - self.resultBlock(self.mSelectDate, self.mSelectValue); - } - } -} - -// 设置行高 -- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component { - return self.pickerStyle.rowHeight; -} - -#pragma mark - 日期选择器1 滚动后的响应事件 -- (void)didSelectValueChanged:(UIDatePicker *)sender { - // 读取日期:datePicker.date - self.mSelectDate = sender.date; - - if (_datePickerMode != UIDatePickerModeCountDownTimer) { - BOOL selectLessThanMin = [self br_compareDate:self.mSelectDate targetDate:self.minDate dateFormat:self.dateFormatter] == NSOrderedAscending; - BOOL selectMoreThanMax = [self br_compareDate:self.mSelectDate targetDate:self.maxDate dateFormat:self.dateFormatter] == NSOrderedDescending; - if (selectLessThanMin) { - self.mSelectDate = self.minDate; - } - if (selectMoreThanMax) { - self.mSelectDate = self.maxDate; - } - } - - [self.datePicker setDate:self.mSelectDate animated:YES]; - - self.mSelectValue = [self br_stringFromDate:self.mSelectDate dateFormat:self.dateFormatter]; - - // 滚动选择时执行 changeBlock 回调 - if (self.changeBlock) { - self.changeBlock(self.mSelectDate, self.mSelectValue); - } - - // 设置自动选择时,滚动选择时就执行 resultBlock - if (self.isAutoSelect) { - // 滚动完成后,执行block回调 - if (self.resultBlock) { - self.resultBlock(self.mSelectDate, self.mSelectValue); - } - } -} - -#pragma mark - 重写父类方法 -- (void)reloadData { - // 1.处理数据源 - [self handlerPickerData]; - if (self.style == BRDatePickerStyleSystem) { - // 2.刷新选择器(重新设置相关值) - self.datePicker.datePickerMode = _datePickerMode; -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130400 // 编译时检查SDK版本,iOS SDK 13.4 以后版本的处理 - if (@available(iOS 13.4, *)) { - // 适配 iOS14 以后 UIDatePicker 的显示样式 - self.datePicker.preferredDatePickerStyle = UIDatePickerStyleWheels; - // 设置 datePicker 的 frame(在iOS14里,UIDatePicker 的 frame 赋值必须放在 datePickerMode 赋值之后, 否则 frame 不会生效) - CGFloat pickerHeaderViewHeight = self.pickerHeaderView ? self.pickerHeaderView.bounds.size.height : 0; - self.datePicker.frame = CGRectMake(0, self.pickerStyle.titleBarHeight + pickerHeaderViewHeight, self.keyView.bounds.size.width, self.pickerStyle.pickerHeight); - } else -#endif - { - // Fallback on earlier versions - } - - // 设置该 UIDatePicker 的国际化 Locale - self.datePicker.locale = [[NSLocale alloc]initWithLocaleIdentifier:self.pickerStyle.language]; - if (self.timeZone) { - self.datePicker.timeZone = self.timeZone; - } - - self.datePicker.calendar = self.calendar; - // 设置农历日期 - //self.datePicker.calendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSCalendarIdentifierChinese]; - - if (self.minDate) { - self.datePicker.minimumDate = self.minDate; - } - if (self.maxDate) { - self.datePicker.maximumDate = self.maxDate; - } - if (_datePickerMode == UIDatePickerModeCountDownTimer && self.countDownDuration > 0) { - self.datePicker.countDownDuration = self.countDownDuration; - } - if (self.minuteInterval > 1) { - self.datePicker.minuteInterval = self.minuteInterval; - } - - // 3.滚动到选择的日期 - [self.datePicker setDate:self.mSelectDate animated:NO]; - } else if (self.style == BRDatePickerStyleCustom) { - // 2.刷新选择器 - [self.pickerView reloadAllComponents]; - // 3.滚动到选择的日期 - if (self.selectValue && ([self.selectValue isEqualToString:self.lastRowContent] || [self.selectValue isEqualToString:self.firstRowContent])) { - [self scrollToCustomString:NO]; - } else { - [self scrollToSelectDate:self.mSelectDate animated:NO]; - } - } -} - -- (void)addPickerToView:(UIView *)view { - _containerView = view; - [self setupDateFormatter:self.pickerMode]; - // 1.添加日期选择器 - if (self.style == BRDatePickerStyleSystem) { - [self setupPickerView:self.datePicker toView:view]; - } else if (self.style == BRDatePickerStyleCustom) { - [self setupPickerView:self.pickerView toView:view]; - if (self.showUnitType == BRShowUnitTypeOnlyCenter) { - // 添加日期单位到选择器 - [self addUnitLabel]; - } - } - - // ③添加中间选择行的两条分割线 - if (self.pickerStyle.clearPickerNewStyle) { - [self.pickerStyle addSeparatorLineView:self.pickerView]; - } - - // 2.绑定数据 - [self reloadData]; - - __weak typeof(self) weakSelf = self; - self.doneBlock = ^{ - // 点击确定按钮后,执行block回调 - if (weakSelf.resultBlock) { - weakSelf.resultBlock(weakSelf.mSelectDate, weakSelf.mSelectValue); - } - }; - - [super addPickerToView:view]; -} - -#pragma mark - 添加日期单位到选择器 -- (void)addUnitLabel { - if (self.unitLabelArr.count > 0) { - for (UILabel *unitLabel in self.unitLabelArr) { - [unitLabel removeFromSuperview]; - } - self.unitLabelArr = nil; - } - self.unitLabelArr = [self setupPickerUnitLabel:self.pickerView unitArr:self.unitArr]; -} - -#pragma mark - 重写父类方法 -- (void)addSubViewToPicker:(UIView *)customView { - if (self.style == BRDatePickerStyleSystem) { - [self.datePicker addSubview:customView]; - } else if (self.style == BRDatePickerStyleCustom) { - [self.pickerView addSubview:customView]; - } -} - -#pragma mark - 弹出选择器视图 -- (void)show { - [self addPickerToView:nil]; -} - -#pragma mark - 关闭选择器视图 -- (void)dismiss { - [self removePickerFromView:nil]; -} - -#pragma mark - setter 方法 -- (void)setPickerMode:(BRDatePickerMode)pickerMode { - _pickerMode = pickerMode; - // 非空,表示二次设置 - if (_datePicker || _pickerView) { - BRDatePickerStyle lastStyle = self.style; - [self setupDateFormatter:pickerMode]; - // 系统样式 切换到 自定义样式 - if (lastStyle == BRDatePickerStyleSystem && self.style == BRDatePickerStyleCustom) { - [self.datePicker removeFromSuperview]; - [self setupPickerView:self.pickerView toView:_containerView]; - } - // 自定义样式 切换到 系统样式 - if (lastStyle == BRDatePickerStyleCustom && self.style == BRDatePickerStyleSystem) { - [self.pickerView removeFromSuperview]; - [self setupPickerView:self.datePicker toView:_containerView]; - } - // 刷新选择器数据 - [self reloadData]; - if (self.style == BRDatePickerStyleCustom && self.showUnitType == BRShowUnitTypeOnlyCenter) { - // 添加日期单位到选择器 - [self addUnitLabel]; - } - } -} - -- (void)setAddToNow:(BOOL)addToNow { - _addToNow = addToNow; - if (addToNow) { - _maxDate = [NSDate date]; - _lastRowContent = [NSBundle br_localizedStringForKey:@"至今" language:self.pickerStyle.language]; - } -} - -- (void)setLastRowContent:(NSString *)lastRowContent { - if (!_addToNow) { - _lastRowContent = lastRowContent; - } -} - -// 支持动态设置选择的值 -- (void)setSelectDate:(NSDate *)selectDate { - _selectDate = selectDate; - _mSelectDate = selectDate; - if (_datePicker || _pickerView) { - // 刷新选择器数据 - [self reloadData]; - } -} - -- (void)setSelectValue:(NSString *)selectValue { - _selectValue = selectValue; - _mSelectValue = selectValue; - if (_datePicker || _pickerView) { - // 刷新选择器数据 - [self reloadData]; - } -} - -- (void)setAddCustomString:(NSString *)addCustomString { - self.lastRowContent = addCustomString; -} - -#pragma mark - getter 方法 -- (NSArray *)yearArr { - if (!_yearArr) { - _yearArr = [NSArray array]; - } - return _yearArr; -} - -- (NSArray *)monthArr { - if (!_monthArr) { - _monthArr = [NSArray array]; - } - return _monthArr; -} - -- (NSArray *)dayArr { - if (!_dayArr) { - _dayArr = [NSArray array]; - } - return _dayArr; -} - -- (NSArray *)hourArr { - if (!_hourArr) { - _hourArr = [NSArray array]; - } - return _hourArr; -} - -- (NSArray *)minuteArr { - if (!_minuteArr) { - _minuteArr = [NSArray array]; - } - return _minuteArr; -} - -- (NSArray *)secondArr { - if (!_secondArr) { - _secondArr = [NSArray array]; - } - return _secondArr; -} - -- (NSInteger)minuteInterval { - if (_minuteInterval < 1 || _minuteInterval > 30) { - _minuteInterval = 1; - } - return _minuteInterval; -} - -- (NSInteger)secondInterval { - if (_secondInterval < 1 || _secondInterval > 30) { - _secondInterval = 1; - } - return _secondInterval; -} - -- (NSArray *)unitArr { - if (!_unitArr) { - _unitArr = [NSArray array]; - } - return _unitArr; -} - -- (NSArray *)unitLabelArr { - if (!_unitLabelArr) { - _unitLabelArr = [NSArray array]; - } - return _unitLabelArr; -} - -- (NSArray *)monthNames { - if (!_monthNames) { - _monthNames = [NSArray array]; - } - return _monthNames; -} - -- (NSString *)getYearString { - NSInteger index = 0; - if (self.yearIndex >= 0 && self.yearIndex < self.yearArr.count) { - index = self.yearIndex; - } - return [self.yearArr objectAtIndex:index]; -} - -- (NSString *)getMonthString { - NSInteger index = 0; - if (self.monthIndex >= 0 && self.monthIndex < self.monthArr.count) { - index = self.monthIndex; - } - return [self.monthArr objectAtIndex:index]; -} - -- (NSString *)getDayString { - NSInteger index = 0; - if (self.dayIndex >= 0 && self.dayIndex < self.dayArr.count) { - index = self.dayIndex; - } - return [self.dayArr objectAtIndex:index]; -} - -- (NSString *)getHourString { - NSInteger index = 0; - if (self.hourIndex >= 0 && self.hourIndex < self.hourArr.count) { - index = self.hourIndex; - } - return [self.hourArr objectAtIndex:index]; -} - -- (NSString *)getMinuteString { - NSInteger index = 0; - if (self.minuteIndex >= 0 && self.minuteIndex < self.minuteArr.count) { - index = self.minuteIndex; - } - return [self.minuteArr objectAtIndex:index]; -} - -- (NSString *)getSecondString { - NSInteger index = 0; - if (self.secondIndex >= 0 && self.secondIndex < self.secondArr.count) { - index = self.secondIndex; - } - return [self.secondArr objectAtIndex:index]; -} - -@end diff --git a/Pods/BRPickerView/BRPickerView/DatePickerView/NSDate+BRPickerView.h b/Pods/BRPickerView/BRPickerView/DatePickerView/NSDate+BRPickerView.h deleted file mode 100644 index 81f9332..0000000 --- a/Pods/BRPickerView/BRPickerView/DatePickerView/NSDate+BRPickerView.h +++ /dev/null @@ -1,103 +0,0 @@ -// -// NSDate+BRPickerView.h -// BRPickerViewDemo -// -// Created by renbo on 2018/3/15. -// Copyright © 2018 irenb. All rights reserved. -// -// 最新代码下载地址:https://github.com/91renb/BRPickerView - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface NSDate (BRPickerView) -/// 获取指定date的详细信息 -@property (readonly) NSInteger br_year; // 年 -@property (readonly) NSInteger br_month; // 月 -@property (readonly) NSInteger br_day; // 日 -@property (readonly) NSInteger br_hour; // 时 -@property (readonly) NSInteger br_minute; // 分 -@property (readonly) NSInteger br_second; // 秒 -@property (readonly) NSInteger br_weekday; // 星期 - -/** 获取中文星期字符串 */ -@property (nullable, nonatomic, readonly, copy) NSString *br_weekdayString; - -/** 获取日历单例对象 */ -+ (NSCalendar *)br_calendar; - - -/// ---------------- 创建 date ---------------- -/** 通过 NSDateComponents对象 来创建 NSDate对象(可以设置时区) */ -+ (nullable NSDate *)br_setDateFromComponents:(NSDateComponents *)components timeZone:(NSTimeZone *)timeZone; - -/** yyyy */ -+ (nullable NSDate *)br_setYear:(NSInteger)year; - -/** yyyy-MM */ -+ (nullable NSDate *)br_setYear:(NSInteger)year month:(NSInteger)month; - -/** yyyy-MM-dd */ -+ (nullable NSDate *)br_setYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day; - -/** yyyy-MM-dd HH */ -+ (nullable NSDate *)br_setYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour; - -/** yyyy-MM-dd HH:mm */ -+ (nullable NSDate *)br_setYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour minute:(NSInteger)minute; - -/** yyyy-MM-dd HH:mm:ss */ -+ (nullable NSDate *)br_setYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour minute:(NSInteger)minute second:(NSInteger)second; - -/** MM-dd HH:mm */ -+ (nullable NSDate *)br_setMonth:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour minute:(NSInteger)minute; - -/** MM-dd */ -+ (nullable NSDate *)br_setMonth:(NSInteger)month day:(NSInteger)day; - -/** HH:mm:ss */ -+ (nullable NSDate *)br_setHour:(NSInteger)hour minute:(NSInteger)minute second:(NSInteger)second; - -/** HH:mm */ -+ (nullable NSDate *)br_setHour:(NSInteger)hour minute:(NSInteger)minute; - -/** mm:ss */ -+ (nullable NSDate *)br_setMinute:(NSInteger)minute second:(NSInteger)second; - - -/** 获取某个月的天数(通过年月求每月天数)*/ -+ (NSUInteger)br_getDaysInYear:(NSInteger)year month:(NSInteger)month; - -/** 获取 日期加上/减去某天数后的新日期 */ -- (nullable NSDate *)br_getNewDateToDays:(NSTimeInterval)days; - - -/** NSDate 转 NSString */ -+ (nullable NSString *)br_stringFromDate:(NSDate *)date dateFormat:(NSString *)dateFormat; -/** NSDate 转 NSString */ -+ (nullable NSString *)br_stringFromDate:(NSDate *)date - dateFormat:(NSString *)dateFormat - timeZone:(nullable NSTimeZone *)timeZone - language:(nullable NSString *)language; - - -/** NSString 转 NSDate */ -+ (nullable NSDate *)br_dateFromString:(NSString *)dateString dateFormat:(NSString *)dateFormat; -/** NSString 转 NSDate */ -+ (nullable NSDate *)br_dateFromString:(NSString *)dateString - dateFormat:(NSString *)dateFormat - timeZone:(nullable NSTimeZone *)timeZone - language:(nullable NSString *)language; - - -/** NSDate 转 NSString(已弃用) */ -+ (nullable NSString *)br_getDateString:(NSDate *)date format:(NSString *)format DEPRECATED_MSG_ATTRIBUTE("Use 'br_stringFromDate:dateFormat:' instead"); - -/** NSString 转 NSDate(已弃用) */ -+ (nullable NSDate *)br_getDate:(NSString *)dateString format:(NSString *)format DEPRECATED_MSG_ATTRIBUTE("Use 'br_dateFromString:dateFormat:' instead"); - - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/BRPickerView/BRPickerView/DatePickerView/NSDate+BRPickerView.m b/Pods/BRPickerView/BRPickerView/DatePickerView/NSDate+BRPickerView.m deleted file mode 100644 index a366d24..0000000 --- a/Pods/BRPickerView/BRPickerView/DatePickerView/NSDate+BRPickerView.m +++ /dev/null @@ -1,321 +0,0 @@ -// -// NSDate+BRPickerView.m -// BRPickerViewDemo -// -// Created by renbo on 2018/3/15. -// Copyright © 2018 irenb. All rights reserved. -// -// 最新代码下载地址:https://github.com/91renb/BRPickerView - -#import "NSDate+BRPickerView.h" -#import "BRPickerViewMacro.h" - -BRSYNTH_DUMMY_CLASS(NSDate_BRPickerView) - -static const NSCalendarUnit unitFlags = (NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekOfMonth | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond | NSCalendarUnitWeekday | NSCalendarUnitWeekdayOrdinal); - -@implementation NSDate (BRPickerView) - -#pragma mark - 获取日历单例对象 -+ (NSCalendar *)br_calendar { - static NSCalendar *sharedCalendar = nil; - if (!sharedCalendar) { - // 创建日历对象,指定日历的算法(公历/阳历) - sharedCalendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; - // NSCalendar 设置时区 - //sharedCalendar.timeZone = [NSTimeZone timeZoneWithName:@"America/Chicago"]; - } - return sharedCalendar; -} - -#pragma mark - NSDate 转 NSDateComponents -+ (NSDateComponents *)br_componentsFromDate:(NSDate *)date { - // 通过日历类 NSCalendar 进行转换 - NSCalendar *calendar = [self br_calendar]; - // NSDateComponents 可以获得日期的详细信息,即日期的组成 - return [calendar components:unitFlags fromDate:date]; -} - -#pragma mark - NSDateComponents 转 NSDate -+ (NSDate *)br_dateFromComponents:(NSDateComponents *)components { - // 通过日历类 NSCalendar 进行转换 - NSCalendar *calendar = [self br_calendar]; - return [calendar dateFromComponents:components]; -} - -#pragma mark - 获取指定日期的年份 -- (NSInteger)br_year { - return [NSDate br_componentsFromDate:self].year; -} - -#pragma mark - 获取指定日期的月份 -- (NSInteger)br_month { - return [NSDate br_componentsFromDate:self].month; -} - -#pragma mark - 获取指定日期的天 -- (NSInteger)br_day { - return [NSDate br_componentsFromDate:self].day; -} - -#pragma mark - 获取指定日期的小时 -- (NSInteger)br_hour { - return [NSDate br_componentsFromDate:self].hour; -} - -#pragma mark - 获取指定日期的分钟 -- (NSInteger)br_minute { - return [NSDate br_componentsFromDate:self].minute; -} - -#pragma mark - 获取指定日期的秒 -- (NSInteger)br_second { - return [NSDate br_componentsFromDate:self].second; -} - -#pragma mark - 获取指定日期的星期 -- (NSInteger)br_weekday { - return [NSDate br_componentsFromDate:self].weekday; -} - -#pragma mark - 获取指定日期的星期 -- (NSString *)br_weekdayString { - switch (self.br_weekday - 1) { - case 0: - { - return @"周日"; - } - break; - case 1: - { - return @"周一"; - } - break; - case 2: - { - return @"周二"; - } - break; - case 3: - { - return @"周三"; - } - break; - case 4: - { - return @"周四"; - } - break; - case 5: - { - return @"周五"; - } - break; - case 6: - { - return @"周六"; - } - break; - - default: - break; - } - - return @""; -} - -/// ---------------- 创建 date ---------------- -#pragma mark - 通过 NSDateComponents对象 来创建 NSDate对象(可以设置时区) -+ (nullable NSDate *)br_setDateFromComponents:(NSDateComponents *)components timeZone:(NSTimeZone *)timeZone { - // 创建日历对象,指定日历的算法(公历/阳历) - NSCalendar *calendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; - if (timeZone) { - // NSCalendar 设置时区 - calendar.timeZone = timeZone; - } - return [calendar dateFromComponents:components]; -} - -#pragma mark - 创建date(通过 NSCalendar 类来创建日期) -+ (NSDate *)br_setYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour minute:(NSInteger)minute second:(NSInteger)second { - NSDateComponents *components = [self br_componentsFromDate:[NSDate date]]; - if (year > 0) { - // 初始化日期组件 - components = [[NSDateComponents alloc]init]; - components.year = year; - } - if (month > 0) { - components.month = month; - } - if (day > 0) { - components.day = day; - } - if (hour >= 0) { - components.hour = hour; - } - if (minute >= 0) { - components.minute = minute; - } - if (second >= 0) { - components.second = second; - } - - return [self br_dateFromComponents:components]; -} - -+ (NSDate *)br_setYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour minute:(NSInteger)minute { - return [self br_setYear:year month:month day:day hour:hour minute:minute second:0]; -} - -+ (NSDate *)br_setYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour { - return [self br_setYear:year month:month day:day hour:hour minute:0 second:0]; -} - -+ (NSDate *)br_setYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day { - return [self br_setYear:year month:month day:day hour:0 minute:0 second:0]; -} - -+ (NSDate *)br_setYear:(NSInteger)year month:(NSInteger)month { - return [self br_setYear:year month:month day:0 hour:0 minute:0 second:0]; -} - -+ (NSDate *)br_setYear:(NSInteger)year { - return [self br_setYear:year month:0 day:0 hour:0 minute:0 second:0]; -} - -+ (NSDate *)br_setMonth:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour minute:(NSInteger)minute { - return [self br_setYear:0 month:month day:day hour:hour minute:minute second:0]; -} - -+ (NSDate *)br_setMonth:(NSInteger)month day:(NSInteger)day { - return [self br_setYear:0 month:month day:day hour:0 minute:0 second:0]; -} - -+ (NSDate *)br_setHour:(NSInteger)hour minute:(NSInteger)minute second:(NSInteger)second { - return [self br_setYear:0 month:0 day:0 hour:hour minute:minute second:second]; -} - -+ (NSDate *)br_setHour:(NSInteger)hour minute:(NSInteger)minute { - return [self br_setYear:0 month:0 day:0 hour:hour minute:minute second:0]; -} - -+ (NSDate *)br_setMinute:(NSInteger)minute second:(NSInteger)second { - return [self br_setYear:0 month:0 day:0 hour:0 minute:minute second:second]; -} - -#pragma mark - 获取某个月的天数(通过年月求每月天数) -+ (NSUInteger)br_getDaysInYear:(NSInteger)year month:(NSInteger)month { - BOOL isLeapYear = year % 4 == 0 ? (year % 100 == 0 ? (year % 400 == 0 ? YES : NO) : YES) : NO; - switch (month) { - case 1: - case 3: - case 5: - case 7: - case 8: - case 10: - case 12: - { - return 31; - } - case 4: - case 6: - case 9: - case 11: - { - return 30; - } - case 2: - { - if (isLeapYear) { - return 29; - } else { - return 28; - } - } - default: - break; - } - - return 0; -} - -#pragma mark - 获取 日期加上/减去某天数后的新日期 -- (NSDate *)br_getNewDateToDays:(NSTimeInterval)days { - // days 为正数时,表示几天之后的日期;负数表示几天之前的日期 - return [self dateByAddingTimeInterval:60 * 60 * 24 * days]; -} - -#pragma mark - NSDate 转 NSString -+ (NSString *)br_stringFromDate:(NSDate *)date dateFormat:(NSString *)dateFormat { - return [self br_stringFromDate:date dateFormat:dateFormat timeZone:nil language:nil]; -} -#pragma mark - NSDate 转 NSString -+ (NSString *)br_stringFromDate:(NSDate *)date - dateFormat:(NSString *)dateFormat - timeZone:(NSTimeZone *)timeZone - language:(NSString *)language { - NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; - // 设置日期格式 - dateFormatter.dateFormat = dateFormat; - // NSDateFormatter 设置时区 ,不设置默认为系统时区 - if (timeZone) { - dateFormatter.timeZone = timeZone; - } - if (!language) { - language = [NSLocale preferredLanguages].firstObject; - } - dateFormatter.locale = [[NSLocale alloc]initWithLocaleIdentifier:language]; - NSString *dateString = [dateFormatter stringFromDate:date]; - - return dateString; -} - -#pragma mark - NSString 转 NSDate -+ (NSDate *)br_dateFromString:(NSString *)dateString dateFormat:(NSString *)dateFormat { - return [self br_dateFromString:dateString dateFormat:dateFormat timeZone:nil language:nil]; -} -#pragma mark - NSString 转 NSDate -+ (NSDate *)br_dateFromString:(NSString *)dateString - dateFormat:(NSString *)dateFormat - timeZone:(NSTimeZone *)timeZone - language:(NSString *)language { - NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; - // 设置日期格式 - dateFormatter.dateFormat = dateFormat; - // 设置时区 - if (!timeZone) { - timeZone = [self currentTimeZone]; - } - if (!language) { - language = [NSLocale preferredLanguages].firstObject; - } - dateFormatter.timeZone = timeZone; - dateFormatter.locale = [[NSLocale alloc]initWithLocaleIdentifier:language]; - // 如果当前时间不存在,就获取距离最近的整点时间 - dateFormatter.lenient = YES; - - return [dateFormatter dateFromString:dateString]; -} - -#pragma mark - 获取当前时区(不使用夏时制) -+ (NSTimeZone *)currentTimeZone { - // 当前时区 - NSTimeZone *localTimeZone = [NSTimeZone localTimeZone]; - // 当前时区相对于GMT(零时区)的偏移秒数 - NSInteger interval = [localTimeZone secondsFromGMTForDate:[NSDate date]]; - // 当前时区(不使用夏时制):由偏移量获得对应的NSTimeZone对象 - // 注意:一些夏令时时间 NSString 转 NSDate 时,默认会导致 NSDateFormatter 格式化失败,返回 null - return [NSTimeZone timeZoneForSecondsFromGMT:interval]; -} - -#pragma mark - NSDate 转 NSString(已弃用) -+ (NSString *)br_getDateString:(NSDate *)date format:(NSString *)format { - return [self br_stringFromDate:date dateFormat:format]; -} - -#pragma mark - NSString 转 NSDate(已弃用) -+ (NSDate *)br_getDate:(NSString *)dateString format:(NSString *)format { - return [self br_dateFromString:dateString dateFormat:format]; -} - -@end diff --git a/Pods/BRPickerView/BRPickerView/StringPickerView/BRResultModel.h b/Pods/BRPickerView/BRPickerView/StringPickerView/BRResultModel.h deleted file mode 100644 index ee098ea..0000000 --- a/Pods/BRPickerView/BRPickerView/StringPickerView/BRResultModel.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// BRResultModel.h -// BRPickerViewDemo -// -// Created by renbo on 2019/10/2. -// Copyright © 2019 irenb. All rights reserved. -// -// 最新代码下载地址:https://github.com/91renb/BRPickerView - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface BRResultModel : NSObject - -/** 索引 */ -@property (nonatomic, assign) NSInteger index; -/** key */ -@property (nullable, nonatomic, copy) NSString *key; -/** value */ -@property (nullable, nonatomic, copy) NSString *value; - -/** 父级key(提示:联动时第一级数据,parentKey设置为:@"-1") */ -@property (nullable, nonatomic, copy) NSString *parentKey; -/** 父级value */ -@property (nullable, nonatomic, copy) NSString *parentValue; - -/// 其它扩展字段 -@property (nullable, nonatomic, copy) NSString *remark; -@property (nullable, nonatomic, strong) id extras; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/BRPickerView/BRPickerView/StringPickerView/BRResultModel.m b/Pods/BRPickerView/BRPickerView/StringPickerView/BRResultModel.m deleted file mode 100644 index 6a34748..0000000 --- a/Pods/BRPickerView/BRPickerView/StringPickerView/BRResultModel.m +++ /dev/null @@ -1,41 +0,0 @@ -// -// BRResultModel.m -// BRPickerViewDemo -// -// Created by renbo on 2019/10/2. -// Copyright © 2019 irenb. All rights reserved. -// -// 最新代码下载地址:https://github.com/91renb/BRPickerView - -#import "BRResultModel.h" - -@implementation BRResultModel - -/// 判断两个对象是否相等 -/// @param object 目标对象 -- (BOOL)isEqual:(id)object { - // 1.对象的地址相同 - if (self == object) { - return YES; - } - - if (![object isKindOfClass:[BRResultModel class]]) { - return NO; - } - - BRResultModel *model = (BRResultModel *)object; - if (!model) { - return NO; - } - // 2.对象的类型相同,且对象的各个属性相等 - BOOL isSameKey = (!self.key && !model.key) || [self.key isEqualToString:model.key]; - BOOL isSameValue = (!self.value && !model.value) || [self.value isEqualToString:model.value]; - - return isSameKey && isSameValue; -} - -- (NSUInteger)hash { - return [self.key hash] ^ [self.value hash]; -} - -@end diff --git a/Pods/BRPickerView/BRPickerView/StringPickerView/BRStringPickerView.h b/Pods/BRPickerView/BRPickerView/StringPickerView/BRStringPickerView.h deleted file mode 100755 index 7dd5e0f..0000000 --- a/Pods/BRPickerView/BRPickerView/StringPickerView/BRStringPickerView.h +++ /dev/null @@ -1,191 +0,0 @@ -// -// BRStringPickerView.h -// BRPickerViewDemo -// -// Created by renbo on 2017/8/11. -// Copyright © 2017 irenb. All rights reserved. -// -// 最新代码下载地址:https://github.com/91renb/BRPickerView - -#import "BRBaseView.h" -#import "BRResultModel.h" - -NS_ASSUME_NONNULL_BEGIN - -/// 字符串选择器类型 -typedef NS_ENUM(NSInteger, BRStringPickerMode) { - /** 单列选择器 */ - BRStringPickerComponentSingle, - /** 多列选择器 */ - BRStringPickerComponentMulti, - /** 多级联动选择器 */ - BRStringPickerComponentLinkage -}; - -typedef void(^BRStringResultModelBlock)(BRResultModel * _Nullable resultModel); - -typedef void(^BRStringResultModelArrayBlock)(NSArray * _Nullable resultModelArr); - -@interface BRStringPickerView : BRBaseView - -/** - ////////////////////////////////////////////////////////////////////////// - /// - /// 【用法一】 - /// 特点:灵活,扩展性强(推荐使用!) - /// - ////////////////////////////////////////////////////////////////////////*/ - -/** 字符串选择器显示类型 */ -@property (nonatomic, assign) BRStringPickerMode pickerMode; - -/** - * 1.设置数据源 - * 单列:@[@"男", @"女", @"其他"],或直接传一维模型数组(NSArray *) - * 多列:@[@[@"语文", @"数学", @"英语"], @[@"优秀", @"良好"]],或直接传多维模型数组 - * 联动:直接传一维模型数组(NSArray *),要注意数据源联动格式,可参考Demo - */ -@property (nullable, nonatomic, copy) NSArray *dataSourceArr; -/** - * 2.设置数据源 - * 直接传plist文件名:NSString类型(如:@"test.plist"),要带后缀名 - * 场景:可以将数据源数据(数组类型)放到plist文件中,直接传plist文件名更加简单 - */ -@property (nullable, nonatomic, copy) NSString *plistName; - -/** - * 设置默认选中的位置【单列】 - * 推荐使用 selectIndex,更加严谨,可以避免使用 selectValue 时,有名称相同的情况 - */ -@property (nonatomic, assign) NSInteger selectIndex; -@property (nullable, nonatomic, copy) NSString *selectValue; - -/** - * 设置默认选中的位置【多列】 - * 推荐使用 selectIndexs,更加严谨,可以避免使用 selectValues 时,有名称相同的情况 - */ -@property (nullable, nonatomic, copy) NSArray *selectIndexs; -@property (nullable, nonatomic, copy) NSArray *selectValues; - -/** 选择结果的回调【单列】 */ -@property (nullable, nonatomic, copy) BRStringResultModelBlock resultModelBlock; -/** 选择结果的回调【多列】 */ -@property (nullable, nonatomic, copy) BRStringResultModelArrayBlock resultModelArrayBlock; - -/** 滚动选择时触发的回调【单列】 */ -@property (nullable, nonatomic, copy) BRStringResultModelBlock changeModelBlock; -/** 滚动选择时触发的回调【多列】 */ -@property (nullable, nonatomic, copy) BRStringResultModelArrayBlock changeModelArrayBlock; - -/** - * 最大层级数(列数) for `BRStringPickerComponentLinkage`, ignored otherwise. - * 使用场景:默认可选,当数据源中有 key 等于 parentKey 情况时,必须要设置 - */ -@property (nonatomic, assign) NSInteger numberOfComponents; - -/// 初始化字符串选择器 -/// @param pickerMode 字符串选择器显示类型 -- (instancetype)initWithPickerMode:(BRStringPickerMode)pickerMode; - -/// 弹出选择器视图 -- (void)show; - -/// 关闭选择器视图 -- (void)dismiss; - - - - -//================================================= 华丽的分割线 ================================================= - - - - -/** - ////////////////////////////////////////////////////////////////////////// - /// - /// 【用法二】:快捷使用,直接选择下面其中的一个方法进行使用 - /// 特点:快捷,方便 - /// - ////////////////////////////////////////////////////////////////////////*/ - -/** - * 1.显示【单列】选择器 - * - * @param title 选择器标题 - * @param dataSourceArr 数据源,格式:@[@"男", @"女", @"其他"],或直接传一维模型数组(NSArray *) - * @param selectIndex 默认选中的位置 - * @param resultBlock 选择后的回调 - * - */ -+ (void)showPickerWithTitle:(nullable NSString *)title - dataSourceArr:(nullable NSArray *)dataSourceArr - selectIndex:(NSInteger)selectIndex - resultBlock:(nullable BRStringResultModelBlock)resultBlock; - -/** - * 2.显示【单列】选择器 - * - * @param title 选择器标题 - * @param dataSourceArr 数据源(如:@[@"男", @"女", @"其他"],或直接传模型数组) - * @param selectIndex 默认选中的位置 - * @param isAutoSelect 是否自动选择,即滚动选择器后就执行结果回调,默认为 NO - * @param resultBlock 选择后的回调 - * - */ -+ (void)showPickerWithTitle:(nullable NSString *)title - dataSourceArr:(nullable NSArray *)dataSourceArr - selectIndex:(NSInteger)selectIndex - isAutoSelect:(BOOL)isAutoSelect - resultBlock:(nullable BRStringResultModelBlock)resultBlock; - -/** - * 3.显示【多列】选择器 - * - * @param title 选择器标题 - * @param dataSourceArr 数据源,格式:@[@[@"语文", @"数学", @"英语"], @[@"优秀", @"良好"]],或直接传多维模型数组 - * @param selectIndexs 默认选中的位置(传索引数组,如:@[@2, @1]) - * @param resultBlock 选择后的回调 - * - */ -+ (void)showMultiPickerWithTitle:(nullable NSString *)title - dataSourceArr:(nullable NSArray *)dataSourceArr - selectIndexs:(nullable NSArray *)selectIndexs - resultBlock:(nullable BRStringResultModelArrayBlock)resultBlock; - -/** - * 4.显示【多列】选择器 - * - * @param title 选择器标题 - * @param dataSourceArr 数据源,格式:@[@[@"语文", @"数学", @"英语"], @[@"优秀", @"良好"]],或直接传多维模型数组 - * @param selectIndexs 默认选中的位置(传索引数组,如:@[@2, @1]) - * @param isAutoSelect 是否自动选择,即滚动选择器后就执行结果回调,默认为 NO - * @param resultBlock 选择后的回调 - * - */ -+ (void)showMultiPickerWithTitle:(nullable NSString *)title - dataSourceArr:(nullable NSArray *)dataSourceArr - selectIndexs:(nullable NSArray *)selectIndexs - isAutoSelect:(BOOL)isAutoSelect - resultBlock:(nullable BRStringResultModelArrayBlock)resultBlock; - -/** - * 5.显示【联动】选择器 - * - * @param title 选择器标题 - * @param dataSourceArr 数据源,格式:直接传一维模型数组(NSArray *) - * @param selectIndexs 默认选中的位置(传索引数组,如:@[@2, @1]) - * @param isAutoSelect 是否自动选择,即滚动选择器后就执行结果回调,默认为 NO - * @param resultBlock 选择后的回调 - * - */ -+ (void)showLinkagePickerWithTitle:(nullable NSString *)title - dataSourceArr:(nullable NSArray *)dataSourceArr - selectIndexs:(nullable NSArray *)selectIndexs - isAutoSelect:(BOOL)isAutoSelect - resultBlock:(nullable BRStringResultModelArrayBlock)resultBlock; - - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/BRPickerView/BRPickerView/StringPickerView/BRStringPickerView.m b/Pods/BRPickerView/BRPickerView/StringPickerView/BRStringPickerView.m deleted file mode 100755 index b2f6058..0000000 --- a/Pods/BRPickerView/BRPickerView/StringPickerView/BRStringPickerView.m +++ /dev/null @@ -1,567 +0,0 @@ -// -// BRStringPickerView.m -// BRPickerViewDemo -// -// Created by renbo on 2017/8/11. -// Copyright © 2017 irenb. All rights reserved. -// -// 最新代码下载地址:https://github.com/91renb/BRPickerView - -#import "BRStringPickerView.h" - -@interface BRStringPickerView () -{ - BOOL _dataSourceException; // 数据源格式是否有误 -} -/** 选择器 */ -@property (nonatomic, strong) UIPickerView *pickerView; -/** 单列选择的值 */ -@property (nonatomic, copy) NSString *mSelectValue; -/** 多列选择的值 */ -@property (nonatomic, copy) NSArray * mSelectValues; - -/** 数据源 */ -@property (nullable, nonatomic, copy) NSArray *mDataSourceArr; - -@end - -@implementation BRStringPickerView - -#pragma mark - 1.显示【单列】选择器 -+ (void)showPickerWithTitle:(NSString *)title - dataSourceArr:(NSArray *)dataSourceArr - selectIndex:(NSInteger)selectIndex - resultBlock:(BRStringResultModelBlock)resultBlock { - [self showPickerWithTitle:title dataSourceArr:dataSourceArr selectIndex:selectIndex isAutoSelect:NO resultBlock:resultBlock]; -} - -#pragma mark - 2.显示【单列】选择器 -+ (void)showPickerWithTitle:(NSString *)title - dataSourceArr:(NSArray *)dataSourceArr - selectIndex:(NSInteger)selectIndex - isAutoSelect:(BOOL)isAutoSelect - resultBlock:(BRStringResultModelBlock)resultBlock { - // 创建选择器 - BRStringPickerView *strPickerView = [[BRStringPickerView alloc]init]; - strPickerView.pickerMode = BRStringPickerComponentSingle; - strPickerView.title = title; - strPickerView.dataSourceArr = dataSourceArr; - strPickerView.selectIndex = selectIndex; - strPickerView.isAutoSelect = isAutoSelect; - strPickerView.resultModelBlock = resultBlock; - - // 显示 - [strPickerView show]; -} - -#pragma mark - 3.显示【多列】选择器 -+ (void)showMultiPickerWithTitle:(NSString *)title - dataSourceArr:(NSArray *)dataSourceArr - selectIndexs:(NSArray *)selectIndexs - resultBlock:(BRStringResultModelArrayBlock)resultBlock { - [self showMultiPickerWithTitle:title dataSourceArr:dataSourceArr selectIndexs:selectIndexs isAutoSelect:NO resultBlock:resultBlock]; -} - -#pragma mark - 4.显示【多列】选择器 -+ (void)showMultiPickerWithTitle:(NSString *)title - dataSourceArr:(NSArray *)dataSourceArr - selectIndexs:(NSArray *)selectIndexs - isAutoSelect:(BOOL)isAutoSelect - resultBlock:(BRStringResultModelArrayBlock)resultBlock { - // 创建选择器 - BRStringPickerView *strPickerView = [[BRStringPickerView alloc]init]; - strPickerView.pickerMode = BRStringPickerComponentMulti; - strPickerView.title = title; - strPickerView.dataSourceArr = dataSourceArr; - strPickerView.selectIndexs = selectIndexs; - strPickerView.isAutoSelect = isAutoSelect; - strPickerView.resultModelArrayBlock = resultBlock; - - // 显示 - [strPickerView show]; -} - -#pragma mark - 5.显示【联动】选择器 -+ (void)showLinkagePickerWithTitle:(nullable NSString *)title - dataSourceArr:(nullable NSArray *)dataSourceArr - selectIndexs:(nullable NSArray *)selectIndexs - isAutoSelect:(BOOL)isAutoSelect - resultBlock:(nullable BRStringResultModelArrayBlock)resultBlock { - // 创建选择器 - BRStringPickerView *strPickerView = [[BRStringPickerView alloc]init]; - strPickerView.pickerMode = BRStringPickerComponentLinkage; - strPickerView.title = title; - strPickerView.dataSourceArr = dataSourceArr; - strPickerView.selectIndexs = selectIndexs; - strPickerView.isAutoSelect = isAutoSelect; - strPickerView.resultModelArrayBlock = resultBlock; - - // 显示 - [strPickerView show]; -} - -#pragma mark - 初始化自定义选择器 -- (instancetype)initWithPickerMode:(BRStringPickerMode)pickerMode { - if (self = [super init]) { - self.pickerMode = pickerMode; - } - return self; -} - -#pragma mark - 处理选择器数据 -- (void)handlerPickerData { - if (self.dataSourceArr.count == 0) { - _dataSourceException = YES; - } - id item = [self.dataSourceArr firstObject]; - if (self.pickerMode == BRStringPickerComponentSingle) { - _dataSourceException = [item isKindOfClass:[NSArray class]]; - } else if (self.pickerMode == BRStringPickerComponentMulti) { - _dataSourceException = [item isKindOfClass:[NSString class]]; - } else if (self.pickerMode == BRStringPickerComponentLinkage) { - _dataSourceException = ![item isKindOfClass:[BRResultModel class]]; - } - if (_dataSourceException) { - NSAssert(!_dataSourceException, @"数据源异常!请检查选择器数据源的格式"); - return; - } - - // 处理选择器当前选择的值 - if (self.pickerMode == BRStringPickerComponentSingle) { - self.mDataSourceArr = self.dataSourceArr; - NSInteger selectIndex = 0; - if (self.selectIndex > 0 && self.selectIndex < self.mDataSourceArr.count) { - selectIndex = self.selectIndex; - } else { - if (self.mSelectValue) { - id item = [self.mDataSourceArr firstObject]; - if ([item isKindOfClass:[BRResultModel class]]) { - for (NSInteger i = 0; i < self.mDataSourceArr.count; i++) { - BRResultModel *model = self.mDataSourceArr[i]; - if ([model.value isEqualToString:self.mSelectValue]) { - selectIndex = i; - break; - } - } - } else { - if ([self.mDataSourceArr containsObject:self.mSelectValue]) { - selectIndex = [self.mDataSourceArr indexOfObject:self.mSelectValue]; - } - } - } - } - self.selectIndex = selectIndex; - - } else if (self.pickerMode == BRStringPickerComponentMulti) { - self.mDataSourceArr = self.dataSourceArr; - NSMutableArray *selectIndexs = [[NSMutableArray alloc]init]; - for (NSInteger i = 0; i < self.mDataSourceArr.count; i++) { - NSArray *itemArr = self.mDataSourceArr[i]; - NSInteger row = 0; - if (self.selectIndexs.count > 0) { - if (i < self.selectIndexs.count) { - NSInteger index = [self.selectIndexs[i] integerValue]; - row = ((index > 0 && index < itemArr.count) ? index : 0); - } - } else { - if (self.mSelectValues.count > 0 && i < self.mSelectValues.count) { - NSString *value = self.mSelectValues[i]; - id item = [itemArr firstObject]; - if ([item isKindOfClass:[BRResultModel class]]) { - for (NSInteger j = 0; j < itemArr.count; j++) { - BRResultModel *model = itemArr[j]; - if ([model.value isEqualToString:value]) { - row = j; - break; - } - } - } else { - if ([itemArr containsObject:value]) { - row = [itemArr indexOfObject:value]; - } - } - } - } - [selectIndexs addObject:@(row)]; - } - self.selectIndexs = [selectIndexs copy]; - - } else if (self.pickerMode == BRStringPickerComponentLinkage) { - - NSMutableArray *selectIndexs = [[NSMutableArray alloc]init]; - NSMutableArray *mDataSourceArr = [[NSMutableArray alloc]init]; - - BRResultModel *selectModel = nil; - BOOL hasNext = YES; - NSInteger i = 0; - - NSMutableArray *dataArr = [self.dataSourceArr mutableCopy]; - - do { - NSArray *nextArr = [self getNextDataArr:dataArr selectModel:selectModel]; - // 设置 numberOfComponents,防止 key 等于 parentKey 时进入死循环 - if (nextArr.count == 0 || i > self.numberOfComponents - 1) { - hasNext = NO; - break; - } - - NSInteger selectIndex = 0; - if (self.selectIndexs.count > i && [self.selectIndexs[i] integerValue] < nextArr.count) { - selectIndex = [self.selectIndexs[i] integerValue]; - } - selectModel = nextArr[selectIndex]; - - [selectIndexs addObject:@(selectIndex)]; - [mDataSourceArr addObject:nextArr]; - - i++; - - } while (hasNext); - - self.selectIndexs = [selectIndexs copy]; - self.mDataSourceArr = [mDataSourceArr copy]; - } -} - -- (NSArray *)getNextDataArr:(NSArray *)dataArr selectModel:(BRResultModel *)selectModel { - NSMutableArray *tempArr = [[NSMutableArray alloc]init]; - // parentKey = @"-1",表示是第一列数据 - NSString *key = selectModel ? selectModel.key : @"-1"; - for (BRResultModel *model in dataArr) { - if ([model.parentKey isEqualToString:key]) { - [tempArr addObject:model]; - } - } - return [tempArr copy]; -} - -#pragma mark - 选择器 -- (UIPickerView *)pickerView { - if (!_pickerView) { - CGFloat pickerHeaderViewHeight = self.pickerHeaderView ? self.pickerHeaderView.bounds.size.height : 0; - _pickerView = [[UIPickerView alloc]initWithFrame:CGRectMake(0, self.pickerStyle.titleBarHeight + pickerHeaderViewHeight, self.keyView.bounds.size.width, self.pickerStyle.pickerHeight)]; - _pickerView.backgroundColor = self.pickerStyle.pickerColor; - _pickerView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth; - _pickerView.dataSource = self; - _pickerView.delegate = self; - } - return _pickerView; -} - -#pragma mark - UIPickerViewDataSource -// 1.设置 pickerView 的列数 -- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { - switch (self.pickerMode) { - case BRStringPickerComponentSingle: - return 1; - break; - case BRStringPickerComponentMulti: - case BRStringPickerComponentLinkage: - return self.mDataSourceArr.count; - break; - - default: - break; - } -} - -// 2.设置 pickerView 每列的行数 -- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { - switch (self.pickerMode) { - case BRStringPickerComponentSingle: - return self.mDataSourceArr.count; - break; - case BRStringPickerComponentMulti: - case BRStringPickerComponentLinkage: - { - NSArray *itemArr = self.mDataSourceArr[component]; - return itemArr.count; - } - break; - - default: - break; - } -} - -#pragma mark - UIPickerViewDelegate -// 3.设置 pickerView 的显示内容 -- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(nullable UIView *)view { - // 1.自定义 row 的内容视图 - UILabel *label = (UILabel *)view; - if (!label) { - label = [[UILabel alloc]init]; - label.backgroundColor = [UIColor clearColor]; - label.textAlignment = NSTextAlignmentCenter; - label.font = self.pickerStyle.pickerTextFont; - label.textColor = self.pickerStyle.pickerTextColor; - // 字体自适应属性 - label.adjustsFontSizeToFitWidth = YES; - // 自适应最小字体缩放比例 - label.minimumScaleFactor = 0.5f; - } - if (self.pickerMode == BRStringPickerComponentSingle) { - id item = self.mDataSourceArr[row]; - if ([item isKindOfClass:[BRResultModel class]]) { - BRResultModel *model = (BRResultModel *)item; - label.text = model.value; - } else { - label.text = item; - } - } else if (self.pickerMode == BRStringPickerComponentMulti || self.pickerMode == BRStringPickerComponentLinkage) { - NSArray *itemArr = self.mDataSourceArr[component]; - id item = [itemArr objectAtIndex:row]; - if ([item isKindOfClass:[BRResultModel class]]) { - BRResultModel *model = (BRResultModel *)item; - label.text = model.value; - } else { - label.text = item; - } - } - - // 2.设置选择器中间选中行的样式 - [self.pickerStyle setupPickerSelectRowStyle:pickerView titleForRow:row forComponent:component]; - - return label; -} - -// 4.滚动 pickerView 执行的回调方法 -- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { - switch (self.pickerMode) { - case BRStringPickerComponentSingle: - { - self.selectIndex = row; - - // 滚动选择时执行 changeModelBlock - if (self.changeModelBlock) { - self.changeModelBlock([self getResultModel]); - } - - // 设置自动选择时,滚动选择时就执行 resultModelBlock - if (self.isAutoSelect) { - if (self.resultModelBlock) { - self.resultModelBlock([self getResultModel]); - } - } - } - break; - case BRStringPickerComponentMulti: - { - if (component < self.selectIndexs.count) { - NSMutableArray *mutableArr = [self.selectIndexs mutableCopy]; - [mutableArr replaceObjectAtIndex:component withObject:@(row)]; - self.selectIndexs = [mutableArr copy]; - } - - // 滚动选择时执行 changeModelArrayBlock - if (self.changeModelArrayBlock) { - self.changeModelArrayBlock([self getResultModelArr]); - } - - // 设置自动选择时,滚动选择时就执行 resultModelArrayBlock - if (self.isAutoSelect) { - if (self.resultModelArrayBlock) { - self.resultModelArrayBlock([self getResultModelArr]); - } - } - } - break; - case BRStringPickerComponentLinkage: - { - if (component < self.selectIndexs.count) { - NSMutableArray *selectIndexs = [[NSMutableArray alloc]init]; - for (NSInteger i = 0; i < self.selectIndexs.count; i++) { - if (i < component) { - [selectIndexs addObject:self.selectIndexs[i]]; - } else if (i == component) { - [selectIndexs addObject:@(row)]; - } else { - [selectIndexs addObject:@(0)]; - } - } - self.selectIndexs = [selectIndexs copy]; - } - - // 刷新选择器数据 - [self reloadData]; - - // 滚动选择时执行 changeModelArrayBlock - if (self.changeModelArrayBlock) { - self.changeModelArrayBlock([self getResultModelArr]); - } - - // 设置自动选择时,滚动选择时就执行 resultModelArrayBlock - if (self.isAutoSelect) { - if (self.resultModelArrayBlock) { - self.resultModelArrayBlock([self getResultModelArr]); - } - } - } - break; - - default: - break; - } -} - -#pragma mark - 获取【单列】选择器选择的值 -- (BRResultModel *)getResultModel { - id item = self.selectIndex < self.mDataSourceArr.count ? self.mDataSourceArr[self.selectIndex] : nil; - if ([item isKindOfClass:[BRResultModel class]]) { - BRResultModel *model = (BRResultModel *)item; - model.index = self.selectIndex; - return model; - } else { - BRResultModel *model = [[BRResultModel alloc]init]; - model.index = self.selectIndex; - model.value = item; - return model; - } -} - -#pragma mark - 获取【多列】选择器选择的值 -- (NSArray *)getResultModelArr { - NSMutableArray *resultModelArr = [[NSMutableArray alloc]init]; - for (NSInteger i = 0; i < self.mDataSourceArr.count; i++) { - NSInteger index = [self.selectIndexs[i] integerValue]; - NSArray *dataArr = self.mDataSourceArr[i]; - - id item = index < dataArr.count ? dataArr[index] : nil; - if ([item isKindOfClass:[BRResultModel class]]) { - BRResultModel *model = (BRResultModel *)item; - model.index = index; - [resultModelArr addObject:model]; - } else { - BRResultModel *model = [[BRResultModel alloc]init]; - model.index = index; - model.value = item; - [resultModelArr addObject:model]; - } - } - return [resultModelArr copy]; -} - -// 设置行高 -- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component { - return self.pickerStyle.rowHeight; -} - -#pragma mark - 重写父类方法 -- (void)reloadData { - // 1.处理数据源 - [self handlerPickerData]; - // 2.刷新选择器 - [self.pickerView reloadAllComponents]; - // 3.滚动到选择的值 - if (self.pickerMode == BRStringPickerComponentSingle) { - [self.pickerView selectRow:self.selectIndex inComponent:0 animated:NO]; - } else if (self.pickerMode == BRStringPickerComponentMulti || self.pickerMode == BRStringPickerComponentLinkage) { - for (NSInteger i = 0; i < self.selectIndexs.count; i++) { - NSNumber *index = [self.selectIndexs objectAtIndex:i]; - [self.pickerView selectRow:[index integerValue] inComponent:i animated:NO]; - } - } -} - -- (void)addPickerToView:(UIView *)view { - // 1.添加选择器 - if (view) { - // 立即刷新容器视图 view 的布局(防止 view 使用自动布局时,选择器视图无法正常显示) - [view setNeedsLayout]; - [view layoutIfNeeded]; - - self.frame = view.bounds; - CGFloat pickerHeaderViewHeight = self.pickerHeaderView ? self.pickerHeaderView.bounds.size.height : 0; - CGFloat pickerFooterViewHeight = self.pickerFooterView ? self.pickerFooterView.bounds.size.height : 0; - self.pickerView.frame = CGRectMake(0, pickerHeaderViewHeight, view.bounds.size.width, view.bounds.size.height - pickerHeaderViewHeight - pickerFooterViewHeight); - [self addSubview:self.pickerView]; - } else { - [self.alertView addSubview:self.pickerView]; - } - - // ③添加中间选择行的两条分割线 - if (self.pickerStyle.clearPickerNewStyle) { - [self.pickerStyle addSeparatorLineView:self.pickerView]; - } - - // 2.绑定数据 - [self reloadData]; - - __weak typeof(self) weakSelf = self; - self.doneBlock = ^{ - // 点击确定按钮后,执行block回调 - if (weakSelf.pickerMode == BRStringPickerComponentSingle) { - if (weakSelf.resultModelBlock) { - weakSelf.resultModelBlock([weakSelf getResultModel]); - } - } else if (weakSelf.pickerMode == BRStringPickerComponentMulti || weakSelf.pickerMode == BRStringPickerComponentLinkage) { - if (weakSelf.resultModelArrayBlock) { - weakSelf.resultModelArrayBlock([weakSelf getResultModelArr]); - } - } - }; - - [super addPickerToView:view]; -} - -#pragma mark - 重写父类方法 -- (void)addSubViewToPicker:(UIView *)customView { - [self.pickerView addSubview:customView]; -} - -#pragma mark - 弹出选择器视图 -- (void)show { - [self addPickerToView:nil]; -} - -#pragma mark - 关闭选择器视图 -- (void)dismiss { - [self removePickerFromView:nil]; -} - -#pragma mark - setter 方法 -- (void)setPlistName:(NSString *)plistName { - NSString *path = [[NSBundle mainBundle] pathForResource:plistName ofType:nil]; - if (path && path.length > 0) { - self.dataSourceArr = [[NSArray alloc] initWithContentsOfFile:path]; - } -} - -- (void)setSelectValue:(NSString *)selectValue { - self.mSelectValue = selectValue; -} - -- (void)setSelectValues:(NSArray *)selectValues { - self.mSelectValues = selectValues; -} - -#pragma mark - getter 方法 -- (NSArray *)mDataSourceArr { - if (!_mDataSourceArr) { - _mDataSourceArr = [NSArray array]; - } - return _mDataSourceArr; -} - -- (NSArray *)selectIndexs { - if (!_selectIndexs) { - _selectIndexs = [NSArray array]; - } - return _selectIndexs; -} - -- (NSArray *)mSelectValues { - if (!_mSelectValues) { - _mSelectValues = [NSArray array]; - } - return _mSelectValues; -} - -- (NSInteger)numberOfComponents { - if (_numberOfComponents <= 0) { - _numberOfComponents = 3; - } - return _numberOfComponents; -} - -@end diff --git a/Pods/BRPickerView/LICENSE b/Pods/BRPickerView/LICENSE deleted file mode 100755 index a5af88d..0000000 --- a/Pods/BRPickerView/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2019 91renb - -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. diff --git a/Pods/BRPickerView/README.md b/Pods/BRPickerView/README.md deleted file mode 100755 index cf75fd9..0000000 --- a/Pods/BRPickerView/README.md +++ /dev/null @@ -1,523 +0,0 @@ -# BRPickerView - -BRPickerView 封装的是iOS中常用的选择器组件,主要包括:日期选择器(支持年月日、年月等15种日期样式选择,支持设置星期、至今等)、地址选择器(支持省市区、省市、省三种地区选择)、自定义字符串选择器(支持单列、多列、二级联动、三级联动选择)。支持自定义主题样式,适配深色模式,支持将选择器组件添加到指定容器视图。 - -【说明】 - -- 当前最新版本为: `2.8.0` 。 -- 如果不能找到最新版本,请先执行一下 `pod repo update` 更新本地仓库,待更新完成后;再执行 `pod search BRPickerView` 进行搜索,就会看到最新版本。 - -# 效果演示 - -查看并运行 `BRPickerViewDemo.xcodeproj` - -| ![效果图1](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/a.gif?raw=true) | ![效果图2](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/b.gif?raw=true) | -| :----------------------------------------------------------: | :----------------------------------------------------------: | -| 框架Demo运行效果图1 | 框架Demo运行效果图2 | - -# 安装 - -#### 1. CocoaPods - -1. 在 Podfile 中添加 `pod 'BRPickerView'`。 - -2. 执行 `pod install` 或 `pod update` 。 - -3. 导入头文件 ` #import `。 - - -#### 2. 手动导入 - -1. 将与 `README.md` 同级目录下的 `BRPickerView` 文件夹拽入项目中 - -2. 导入头文件 ` #import "BRPickerView.h"`。 - - -# 系统要求 - -- iOS 8.0+ -- ARC - -# 使用 - -#### 1. 时间选择器:`BRDatePickerView` - -​ 查看 BRDatePickerView.h 头文件,里面提供了两种使用方式,参见源码。 - -```objective-c -/// 日期选择器格式 -typedef NS_ENUM(NSInteger, BRDatePickerMode) { - // ----- 以下4种是系统样式(兼容国际化日期格式) ----- - /** 【yyyy-MM-dd】UIDatePickerModeDate(美式日期:MM-dd-yyyy;英式日期:dd-MM-yyyy)*/ - BRDatePickerModeDate, - /** 【yyyy-MM-dd HH:mm】 UIDatePickerModeDateAndTime */ - BRDatePickerModeDateAndTime, - /** 【HH:mm】UIDatePickerModeTime */ - BRDatePickerModeTime, - /** 【HH:mm】UIDatePickerModeCountDownTimer */ - BRDatePickerModeCountDownTimer, - - // ----- 以下11种是自定义样式 ----- - /** 【yyyy-MM-dd HH:mm:ss】年月日时分秒 */ - BRDatePickerModeYMDHMS, - /** 【yyyy-MM-dd HH:mm】年月日时分 */ - BRDatePickerModeYMDHM, - /** 【yyyy-MM-dd HH】年月日时 */ - BRDatePickerModeYMDH, - /** 【MM-dd HH:mm】月日时分 */ - BRDatePickerModeMDHM, - /** 【yyyy-MM-dd】年月日(兼容国际化日期:dd-MM-yyyy)*/ - BRDatePickerModeYMD, - /** 【yyyy-MM】年月(兼容国际化日期:MM-yyyy)*/ - BRDatePickerModeYM, - /** 【yyyy】年 */ - BRDatePickerModeY, - /** 【MM-dd】月日 */ - BRDatePickerModeMD, - /** 【HH:mm:ss】时分秒 */ - BRDatePickerModeHMS, - /** 【HH:mm】时分 */ - BRDatePickerModeHM, - /** 【mm:ss】分秒 */ - BRDatePickerModeMS -}; -``` - -- 使用示例(参考Demo): - -```objective-c -// 1.创建日期选择器 -BRDatePickerView *datePickerView = [[BRDatePickerView alloc]init]; -// 2.设置属性 -datePickerView.pickerMode = BRDatePickerModeYMD; -datePickerView.title = @"选择年月日"; -// datePickerView.selectValue = @"2019-10-30"; -datePickerView.selectDate = [NSDate br_setYear:2019 month:10 day:30]; -datePickerView.minDate = [NSDate br_setYear:1949 month:3 day:12]; -datePickerView.maxDate = [NSDate date]; -datePickerView.isAutoSelect = YES; -datePickerView.resultBlock = ^(NSDate *selectDate, NSString *selectValue) { - NSLog(@"选择的值:%@", selectValue); -}; -// 设置自定义样式 -BRPickerStyle *customStyle = [[BRPickerStyle alloc]init]; -customStyle.pickerColor = BR_RGB_HEX(0xd9dbdf, 1.0f); -customStyle.pickerTextColor = [UIColor redColor]; -customStyle.separatorColor = [UIColor redColor]; -datePickerView.pickerStyle = customStyle; - -// 3.显示 -[datePickerView show]; -``` - -**时间选择器显示类型的效果图(默认样式):** - -- 以下4种样式是使用 UIDatePicker 类 进行封装的,支持循环滚动 - -| ![样式1:BRDatePickerModeTime](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/date_type1.png?raw=true) | ![样式2:BRDatePickerModeDate](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/date_type2.png?raw=true) | -| :----------------------------------------------------------: | :----------------------------------------------------------: | -| 样式1:BRDatePickerModeDate | 样式2:BRDatePickerModeDateAndTime | -| | | -| ![样式3:BRDatePickerModeDateAndTime](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/date_type3.png?raw=true) | ![样式4:BRDatePickerModeCountDownTimer](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/date_type4.png?raw=true) | -| 样式3:BRDatePickerModeTime | 样式4:BRDatePickerModeCountDownTimer | - -- 以下11种样式是使用 UIPickerView 类进行封装的。 - -| ![样式5:BRDatePickerModeYMDHMS](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/date_type5.png?raw=true) | ![样式6:BRDatePickerModeYMDHM](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/date_type6.png?raw=true) | -| :----------------------------------------------------------: | :----------------------------------------------------------: | -| 样式5:BRDatePickerModeYMDHMS | 样式6:BRDatePickerModeYMDHM | -| | | -| ![样式7:BRDatePickerModeYMDH](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/date_type7.png?raw=true) | ![样式8:BRDatePickerModeMDHM](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/date_type8.png?raw=true) | -| 样式7:BRDatePickerModeYMDH | 样式8:BRDatePickerModeMDHM | -| | | -| ![样式9:BRDatePickerModeYMDE](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/date_type9.png?raw=true) | ![样式10:BRDatePickerModeYMD](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/date_type10.png?raw=true) | -| 样式9:BRDatePickerModeYMD | 样式10:BRDatePickerModeYM | -| | | -| ![样式11:BRDatePickerModeYM](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/date_type11.png?raw=true) | ![样式12:BRDatePickerModeY](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/date_type12.png?raw=true) | -| 样式11:BRDatePickerModeY | 样式12:BRDatePickerModeMD | -| | | -| ![样式13:BRDatePickerModeMD](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/date_type13.png?raw=true) | ![样式14:BRDatePickerModeHMS](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/date_type14.png?raw=true) | -| 样式13:BRDatePickerModeHMS | 样式14:BRDatePickerModeHM | -| | | -| ![样式15:BRDatePickerModeHM](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/date_type15.png?raw=true) | | -| 样式15:BRDatePickerModeMS | | - -- 其它日期样式 - -| ![设置显示星期](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/date_type_week1.png?raw=true) | ![设置显示星期](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/date_type_week2.png?raw=true) | -| ------------------------------------------------------------ | ------------------------------------------------------------ | -| 设置显示星期:datePickerView.showWeek = YES; | 设置显示星期:datePickerView.showWeek = YES; | -| | | -| ![设置添加至今](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/date_type_now.png?raw=true) | ![设置显示今天](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/date_type_today.png?raw=true) | -| 设置添加至今:datePickerView.addToNow = YES; | 设置显示今天:datePickerView.showToday = YES; | -| | | -| ![日期单位单行显示样式](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/date_type_unit.png?raw=true) | ![自定义选择器选中行颜色](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/date_type_row.png?raw=true) | -| 日期单位显示样式:datePickerView.showUnitType = BRShowUnitTypeOnlyCenter; | 设置选择器中间选中行的背景颜色:selectRowColor | - -```objective-c -// 设置选择器中间选中行的样式 -BRPickerStyle *customStyle = [[BRPickerStyle alloc]init]; -customStyle.selectRowColor = [UIColor blueColor]; -customStyle.selectRowTextFont = [UIFont boldSystemFontOfSize:20.0f]; -customStyle.selectRowTextColor = [UIColor redColor]; -datePickerView.pickerStyle = customStyle; -``` - -| ![英式日期年月日](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/date_type_en1.png?raw=true) | ![英式日期年月](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/date_type_en2.png?raw=true) | -| ------------------------------------------------------------ | ------------------------------------------------------------ | -| 样式:BRDatePickerModeYMD (默认非中文环境显示英式日期) | 样式:BRDatePickerModeYM (默认非中文环境显示英式日期) | - -- 几种常见的弹框样式模板 - -| ![模板样式1](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/template_style1.png?raw=true) | ![模板样式2](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/template_style2.png?raw=true) | -| ------------------------------------------------------------ | ------------------------------------------------------------ | -| 弹框样式模板1:datePickerView.pickerStyle = [BRPickerStyle pickerStyleWithThemeColor:[UIColor blueColor]]; | 弹框样式模板2:datePickerView.pickerStyle = [BRPickerStyle pickerStyleWithDoneTextColor:[UIColor blueColor]]; | -| | | -| ![模板样式3](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/template_style3.png?raw=true) | ![添加选择器的头视图](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/date_type_top.png?raw=true) | -| 弹框样式模板3:datePickerView.pickerStyle = [BRPickerStyle pickerStyleWithDoneBtnImage:[UIImage imageNamed:@"icon_close"]]; | 添加选择器的头视图:pickerHeaderView | - -```objective-c -// 添加选择器头视图(pickerHeaderView) -UIView *headerView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 36)]; -headerView.backgroundColor = [[UIColor grayColor] colorWithAlphaComponent:0.1f]; -NSArray *unitArr = @[@"年", @"月", @"日"]; -for (NSInteger i = 0; i < unitArr.count; i++) { - CGFloat width = SCREEN_WIDTH / unitArr.count; - CGFloat orginX = i * (SCREEN_WIDTH / unitArr.count); - UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(orginX, 0, width, 36)]; - label.backgroundColor = [UIColor clearColor]; - label.textAlignment = NSTextAlignmentCenter; - label.font = [UIFont systemFontOfSize:16.0f]; - label.textColor = [UIColor darkGrayColor]; - label.text = unitArr[i]; - [headerView addSubview:label]; -} -datePickerView.pickerHeaderView = headerView; -``` - -#### 2. 地址选择器:`BRAddressPickerView` - -​ 查看 BRAddressPickerView.h 头文件,里面提供了两种使用方式,参见源码。 - -- 使用示例(参考Demo): - -```objective-c -/// 地址选择器 -BRAddressPickerView *addressPickerView = [[BRAddressPickerView alloc]init]; -addressPickerView.pickerMode = BRAddressPickerModeArea; -addressPickerView.title = @"请选择地区"; -//addressPickerView.selectValues = @[@"浙江省", @"杭州市", @"西湖区"]; -addressPickerView.selectIndexs = @[@10, @0, @4]; -addressPickerView.isAutoSelect = YES; -addressPickerView.resultBlock = ^(BRProvinceModel *province, BRCityModel *city, BRAreaModel *area) { - NSLog(@"选择的值:%@", [NSString stringWithFormat:@"%@ %@ %@", province.name, city.name, area.name]); -}; - -[addressPickerView show]; -``` - -- 地址选择器的3种显示类型(showType 的3个枚举值): - -| ![省份](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/BRAddressPickerModeProvince.png?raw=true) | ![城市](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/BRAddressPickerModeCity.png?raw=true) | -| :----------------------------------------------------------: | :----------------------------------------------------------: | -| 样式1:BRAddressPickerModeProvince | 样式2:BRAddressPickerModeCity | -| | | -| ![地区](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/BRAddressPickerModeArea.png?raw=true) | | -| 样式3:BRAddressPickerModeArea | | - -#### 3. 自定义字符串选择器:`BRStringPickerView` - -​ 查看 BRStringPickerView.h 头文件,里面提供了两种使用方式,参见源码。 - -- 使用示例(参考Demo): - -```objective-c -/// 1.单列字符串选择器(传字符串数组) -BRStringPickerView *stringPickerView = [[BRStringPickerView alloc]init]; -stringPickerView.pickerMode = BRStringPickerComponentSingle; -stringPickerView.title = @"学历"; -stringPickerView.dataSourceArr = @[@"大专以下", @"大专", @"本科", @"硕士", @"博士", @"博士后"]; -stringPickerView.selectIndex = 2; -stringPickerView.resultModelBlock = ^(BRResultModel *resultModel) { - NSLog(@"选择的值:%@", resultModel.value); -}; - -[stringPickerView show]; - - -/// 2.单列字符串选择器(可以传模型数组) -NSArray *infoArr = @[@{@"key": @"1001", @"value": @"无融资", @"remark": @""}, - @{@"key": @"2001", @"value": @"天使轮", @"remark": @""}, - @{@"key": @"3001", @"value": @"A轮", @"remark": @""}, - @{@"key": @"4001", @"value": @"B轮", @"remark": @""}, - @{@"key": @"5001", @"value": @"C轮以后", @"remark": @""}, - @{@"key": @"6001", @"value": @"已上市", @"remark": @""}]; -NSMutableArray *modelArr = [[NSMutableArray alloc]init]; -for (NSDictionary *dic in infoArr) { - BRResultModel *model = [[BRResultModel alloc]init]; - model.key = dic[@"key"]; - model.value = dic[@"value"]; - model.remark = dic[@"remark"]; - [modelArr addObject:model]; -} -BRStringPickerView *stringPickerView = [[BRStringPickerView alloc]init]; -stringPickerView.pickerMode = BRStringPickerComponentSingle; -stringPickerView.title = @"融资情况"; -stringPickerView.dataSourceArr = [modelArr copy]; -stringPickerView.selectIndex = 2; -stringPickerView.resultModelBlock = ^(BRResultModel *resultModel) { - NSLog(@"选择的索引:%@", @(resultModel.index)); - NSLog(@"选择的值:%@", resultModel.value); -}; - -[stringPickerView show]; - - -/// 3.多列字符串选择器 -BRStringPickerView *stringPickerView = [[BRStringPickerView alloc]init]; -stringPickerView.pickerMode = BRStringPickerComponentMulti; -stringPickerView.title = @"自定义多列字符串"; -stringPickerView.dataSourceArr = @[@[@"语文", @"数学", @"英语", @"物理", @"化学", @"生物"], @[@"优秀", @"良好", @"及格", @"不及格"]]; -stringPickerView.selectIndexs = @[@2, @1]; -stringPickerView.resultModelArrayBlock = ^(NSArray *resultModelArr) { - NSLog(@"选择的值:%@", [NSString stringWithFormat:@"%@,%@", resultModelArr[0].value, resultModelArr[1].value]); -}; - -// 设置选择器中间选中行的样式 -BRPickerStyle *customStyle = [[BRPickerStyle alloc]init]; -customStyle.selectRowTextFont = [UIFont boldSystemFontOfSize:20.0f]; -customStyle.selectRowTextColor = [UIColor blueColor]; -stringPickerView.pickerStyle = customStyle; - -[stringPickerView show]; -``` - -- 字符串选择器效果图: - -| ![自定义单列字符串](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/string_single.png?raw=true) | ![融资情况](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/string_rongzi.png?raw=true) | -| :----------------------------------------------------------: | :----------------------------------------------------------: | -| 单列字符串选择器 | 单列字符串选择器 | -| | | -| ![多列字符串选择器](https://github.com/91renb/BRPickerView/blob/master/BRPickerViewDemo/images/string_more.png?raw=true) | | -| 多列字符串选择器 | | - -# 更新记录 - -#### 2022-07-08(V2.8.0) - -- 优化代码。 - -#### 2022-06-16(V2.7.8) - -- 优化代码。 - -#### 2022-03-30(V2.7.7) - -- 优化代码。 - -#### 2021-10-09(V2.7.6) - -- 适配iOS15 - -#### 2021-05-28(V2.7.5) - -- 日期选择器新增属性:`monthNames` 和 `customUnit` - -- 解决已知问题:[#232](https://github.com/91renb/BRPickerView/issues/232) 、[#231](https://github.com/91renb/BRPickerView/issues/231) 、[#230](https://github.com/91renb/BRPickerView/issues/230) 、[#227](https://github.com/91renb/BRPickerView/issues/227) 、[#225](https://github.com/91renb/BRPickerView/issues/225) 、[#219](https://github.com/91renb/BRPickerView/issues/219) 、[#206](https://github.com/91renb/BRPickerView/issues/206) - -#### 2020-09-25(V2.7.3) - -- 适配选择器iOS14的样式:[#189](https://github.com/91renb/BRPickerView/issues/189) 、[#191](https://github.com/91renb/BRPickerView/issues/191) - -#### 2020-09-23(V2.7.2) - -- 日期选择器新增添加自定义字符串属性:`firstRowContent` 和 `lastRowContent` -- 解决日期选择器设置最小日期时,存在的联动不正确的问题:[#184](https://github.com/91renb/BRPickerView/issues/184) - -#### 2020-08-28(V2.7.0) - -- 日期选择器添加 `nonSelectableDates` 属性:[#178](https://github.com/91renb/BRPickerView/issues/178) -- 优化选中行文本显示:[#177](https://github.com/91renb/BRPickerView/issues/177) - -#### 2020-08-16(V2.6.8) - -- 优化代码,适配 iPad 分屏显示 -- 新增 `keyView` 属性(即组件的父视图:可以将组件添加到 自己获取的 keyWindow 上,或页面的 view 上) - -#### 2020-08-09(V2.6.7) - -- 适配 iOS14 - -#### 2020-08-06(V2.6.6) - -- 修复 [#163](https://github.com/91renb/BRPickerView/issues/163) 和 [#170](https://github.com/91renb/BRPickerView/issues/170) - -#### 2020-07-18(V2.6.5) - -- 字符串选择器新增支持多级联动选择 - -#### 2020-06-24(V2.6.3) - -- 日期选择器新增属性:`timeZone` 和 `addCustomString` - -#### 2020-05-12(V2.6.2) - -- 实现 [#145](#145) 和 [#146](#146) 需求 - -#### 2020-04-30(V2.6.0) - -- 新增样式属性:`selectRowTextColor` 和 `selectRowTextFont` -- 日期选择器新增数字显示属性:`numberFullName` -- 优化代码,添加 `BRDatePickerModeYMD` 支持国际化英式日期 - -- 修复 [#143](#143) - -#### 2020-04-27(V2.5.8) - -- 修复 [#138](https://github.com/91renb/BRPickerView/issues/138) 和 [#142](https://github.com/91renb/BRPickerView/issues/142) -- 日期选择器新增 `descending` 属性,支持降序的时间列表 -- 更新地址选择器地区数据源 - -#### 2020-03-31(V2.5.7) - -- 优化代码,解决已知问题 - -#### 2020-02-26(V2.5.6) - -- 优化代码,兼容部分国际化日期样式 - -#### 2020-02-24(V2.5.5) - -- 添加设置选择器选中行背景颜色的功能,新增属性 `selectRowColor` - -#### 2020-01-31(V2.5.3) - -- 新增属性:`pickerHeaderView`、`pickerFooterView` -- 新增刷新选择器数据方法:`reloadData` - -#### 2020-01-05(V2.5.1) - -- 优化代码,添加 `BRDatePickerModeYM` 支持国际化英式日期 - -#### 2020-01-02(V2.5.0) - -- 日期选择器新增属性:`showUnitType`(日期单位显示样式)、`minuteInterval`、`secondInterval` -- 封装了常用的几种模板样式,使用更加简单便捷 -- 框架内默认适配深色模式显示 - -#### 2019-12-26(V2.4.6) - -- 添加支持动态更新属性 `title` 、 `selectDate`、`pickerMode` 的值 -- 日期选择器添加 `showWeek` 属性,及新增 `BRDatePickerModeMS` 日期类型 -- 优化选择器【用法二】的使用,新增选择器滚动选择时回调的属性 - -#### 2019-11-28(V2.4.5) - -- 日期选择器新增选择 ”至今“ 和 显示 ”今天“ 的功能,见以下两个属性: - - `showToday` :控制是否显示 “今天” ,默认为 NO - - `addToNow`:控制是否添加选择 “至今”,默认为 NO - -#### 2019-11-26(V2.4.3) - -- 日期选择器新增以下三种选择类型: - - `BRDatePickerModeYMDHMS`(年月日时分秒)、`BRDatePickerModeYMDE`(年月日星期)、`BRDatePickerModeHMS`(时分秒) - -- 更新地址选择器地区数据源 - -#### 2019-11-07(V2.4.2) - -- 日期选择器添加:BRDatePickerModeYMDH(yyyy-MM-dd HH)类型 -- 地址选择器添加:selectIndexs 属性,可根据索引去设置默认选择 -- 适配横屏及刘海屏安全区域显示效果 - -#### 2019-11-04(V2.4.0) - -- 优化选择器子目录管理,方便轻量级、模块化集成 - - `pod 'BRPickerView'` // 集成全部的功能 - - `pod 'BRPickerView/DatePickerView'` // 仅集成日期选择器的功能 - - `pod 'BRPickerView/AddressPickerView'` // 仅集成地址选择器的功能 - - `pod 'BRPickerView/StringPickerView'` // 仅集成字符串选择器的功能 - -#### 2019-11-01(V2.3.8) - -- 优化代码,添加更多的自定义样式属性 - -#### 2019-10-30(V2.3.6) - -- 优化代码,添加国际化支持 - -#### 2019-10-26(V2.3.5) - -- 添加传统的创建对象设置属性的使用方式 -- 开放设置选择器颜色及样式,适配深色模式 -- 更新省市区数据源,数据与政府官网最新公布的一致(参见:[行政区划代码](http://www.mca.gov.cn/article/sj/xzqh/2019/)) -- 支持将选择器添加到指定容器视图上(见BaseView.h文件,扩展一方法) -- 支持将子视图添加到选择器上(见BaseView.h文件,扩展二方法) -- 优化代码,配置Pod库的层级目录 - -#### 2018-04-27(V2.2.1): - -- 修复bug,适配iPad和横屏显示。 -- 优化代码,提高框架适应性,降低内存消耗。 - -#### 2018-04-03(V2.2.0) - -- 时间选择器新添加了7种显示类型(BRDatePickerMode),可根据自己项目的需求选择性使用。 -- 适配横屏,及 iPhoneX 底部安全区域。 -- 修改了最小时间和最大时间的参数名称(以前版本是传 NSString 类型, 现在传 NSDate 类型) -- 修复比较时间大小时出现的bug。 - -#### 2018-03-19(V2.1.3) - -- 修改地址选择器确认选择后的回调参数。 -- 现修改如下:可通过省市区的模型获取省市区的 name(名称)、code(id)、index(索引)`resultBlock:^(BRProvinceModel *province, BRCityModel *city, BRAreaModel *area) {}` -- 去掉第三方依赖库 `MJExtension` ,修改为手动解析地址数据源。 - -#### 2018-03-11(V2.1.2) - -- 重命名了Github用户名,更新项目相关的路径。(提示:pod之前的版本不受影响) - -#### 2018-02-28(V2.1.1) - -- 修复某些情况下无法用bundle加载本地数据源(BRCity.plist)bug。 - -#### 2018-01-26(V2.1.0) - -- 给地址选择器添加了一个方法(见方法4),提供数据源参数,支持外部传入地区数据源。 -- 提示:要注意数据源格式,参考 BRCity.json。可以把 BRCity.json 文件的内容放到后台去维护,通过后台接口获取地区数据源(即 BRCity.json 文件的内容)。 - -#### 2018-01-25(V2.0.0) - -- 更新了地址数据源(BRCity.plist),地区信息是2018年最新最全的,与微信的地区信息完全一致。 -- 支持自定义默认选择地址(格式:@[@"浙江省", @"杭州市", @"西湖区"]),支持下次点击进入地址选择器时,默认地址为上次选择的结果。 -- 修改了日期选择器、地址选择器、字符串选择器的接口方法(删除了之前的方法2)。 -- 添加了地址选择器显示类型,支持3种显示:只显示省份、显示省份和城市、显示省市区。 - -#### 2018-01-05(V1.3.0) - -- 添加取消选择的回调方法(点击背景或取消按钮会执行 `cancelBlock` ) -- 合并了字符串选择器 数组数据源和plist数据源对应的方法,`dataSource` 参数支持两种类型: - -#### 2018-01-02(V1.2.0) - -- 添加支持自定义主题颜色的方法。 - -#### 2017-11-26(V1.1.0) - -- 更换第三方依赖库。 -- 用MJExtension 替换了 原来的YYModel,以前没有注意导入YYModel,同时又导入YYKit会导致重复导入而冲突(另外使用YYModel时,手动导入和pod导入 其中的头文件和方法名也不一样,所以很容易出错)。 - -#### 2017-11-16(V1.0.0) - -- 初始版本! - -# 许可证 - -BRPickerView 使用 MIT 许可证,详情见 LICENSE 文件。 \ No newline at end of file diff --git a/Pods/Bugly/Bugly.framework/Bugly b/Pods/Bugly/Bugly.framework/Bugly deleted file mode 100644 index c7365c2..0000000 Binary files a/Pods/Bugly/Bugly.framework/Bugly and /dev/null differ diff --git a/Pods/Bugly/Bugly.framework/Headers/Bugly.h b/Pods/Bugly/Bugly.framework/Headers/Bugly.h deleted file mode 100644 index 6f5c8f9..0000000 --- a/Pods/Bugly/Bugly.framework/Headers/Bugly.h +++ /dev/null @@ -1,163 +0,0 @@ -// -// Bugly.h -// -// Version: 2.5(93) -// -// Copyright (c) 2017年 Tencent. All rights reserved. -// - -#import - -#import "BuglyConfig.h" -#import "BuglyLog.h" - -BLY_START_NONNULL - -@interface Bugly : NSObject - -/** - * 初始化Bugly,使用默认BuglyConfigs - * - * @param appId 注册Bugly分配的应用唯一标识 - */ -+ (void)startWithAppId:(NSString * BLY_NULLABLE)appId; - -/** - * 使用指定配置初始化Bugly - * - * @param appId 注册Bugly分配的应用唯一标识 - * @param config 传入配置的 BuglyConfig - */ -+ (void)startWithAppId:(NSString * BLY_NULLABLE)appId - config:(BuglyConfig * BLY_NULLABLE)config; - -/** - * 使用指定配置初始化Bugly - * - * @param appId 注册Bugly分配的应用唯一标识 - * @param development 是否开发设备 - * @param config 传入配置的 BuglyConfig - */ -+ (void)startWithAppId:(NSString * BLY_NULLABLE)appId - developmentDevice:(BOOL)development - config:(BuglyConfig * BLY_NULLABLE)config; - -/** - * 设置用户标识 - * - * @param userId 用户标识 - */ -+ (void)setUserIdentifier:(NSString *)userId; - -/** - * 更新版本信息 - * - * @param version 应用版本信息 - */ -+ (void)updateAppVersion:(NSString *)version; - -/** - * 设置关键数据,随崩溃信息上报 - * - * @param value KEY - * @param key VALUE - */ -+ (void)setUserValue:(NSString *)value - forKey:(NSString *)key; - -/** - * 获取USER ID - * - * @return USER ID - */ -+ (NSString *)buglyUserIdentifier; - -/** - * 获取关键数据 - * - * @return 关键数据 - */ -+ (NSDictionary * BLY_NULLABLE)allUserValues; - -/** - * 设置标签 - * - * @param tag 标签ID,可在网站生成 - */ -+ (void)setTag:(NSUInteger)tag; - -/** - * 获取当前设置标签 - * - * @return 当前标签ID - */ -+ (NSUInteger)currentTag; - -/** - * 获取设备ID - * - * @return 设备ID - */ -+ (NSString *)buglyDeviceId; - -/** - * 上报自定义Objective-C异常 - * - * @param exception 异常信息 - */ -+ (void)reportException:(NSException *)exception; - -/** - * 上报错误 - * - * @param error 错误信息 - */ -+ (void)reportError:(NSError *)error; - -/** - * @brief 上报自定义错误 - * - * @param category 类型(Cocoa=3,CSharp=4,JS=5,Lua=6) - * @param aName 名称 - * @param aReason 错误原因 - * @param aStackArray 堆栈 - * @param info 附加数据 - * @param terminate 上报后是否退出应用进程 - */ -+ (void)reportExceptionWithCategory:(NSUInteger)category - name:(NSString *)aName - reason:(NSString *)aReason - callStack:(NSArray *)aStackArray - extraInfo:(NSDictionary *)info - terminateApp:(BOOL)terminate; - -/** - * SDK 版本信息 - * - * @return SDK版本号 - */ -+ (NSString *)sdkVersion; - -/** - * APP 版本信息 - * - * @return SDK版本号 - */ -+ (NSString *)appVersion; - -/** - * App 是否发生了连续闪退 - * 如果 启动SDK 且 5秒内 闪退,且次数达到 3次 则判定为连续闪退 - * - * @return 是否连续闪退 - */ -+ (BOOL)isAppCrashedOnStartUpExceedTheLimit; - -/** - * 关闭bugly监控 - */ -+ (void)closeCrashReport; - -BLY_END_NONNULL - -@end diff --git a/Pods/Bugly/Bugly.framework/Headers/BuglyConfig.h b/Pods/Bugly/Bugly.framework/Headers/BuglyConfig.h deleted file mode 100644 index 16e253b..0000000 --- a/Pods/Bugly/Bugly.framework/Headers/BuglyConfig.h +++ /dev/null @@ -1,149 +0,0 @@ -// -// BuglyConfig.h -// Bugly -// -// Copyright (c) 2016年 Tencent. All rights reserved. -// - -#pragma once - -#define BLY_UNAVAILABLE(x) __attribute__((unavailable(x))) - -#if __has_feature(nullability) -#define BLY_NONNULL __nonnull -#define BLY_NULLABLE __nullable -#define BLY_START_NONNULL _Pragma("clang assume_nonnull begin") -#define BLY_END_NONNULL _Pragma("clang assume_nonnull end") -#else -#define BLY_NONNULL -#define BLY_NULLABLE -#define BLY_START_NONNULL -#define BLY_END_NONNULL -#endif - -#import - -#import "BuglyLog.h" - -BLY_START_NONNULL - -@protocol BuglyDelegate - -@optional -/** - * 发生异常时回调 - * - * @param exception 异常信息 - * - * @return 返回需上报记录,随异常上报一起上报 - */ -- (NSString * BLY_NULLABLE)attachmentForException:(NSException * BLY_NULLABLE)exception; - -/** - * 发生sigkill时回调 - * - * @param exception 异常信息 - * - * @return 返回需上报记录,随sigkill异常上报一起上报,返回值由app开发者决定 - */ -- (NSString * BLY_NULLABLE)attachmentForSigkill; - -/** - * 策略激活时回调 - * - * @param tacticInfo - * - * @return app是否弹框展示 - */ -- (BOOL) h5AlertForTactic:(NSDictionary *)tacticInfo; - -@end - -@interface BuglyConfig : NSObject - -/** - * SDK Debug信息开关, 默认关闭 - */ -@property (nonatomic, assign) BOOL debugMode; - -/** - * 设置自定义渠道标识 - */ -@property (nonatomic, copy) NSString *channel; - -/** - * 设置自定义版本号 - */ -@property (nonatomic, copy) NSString *version; - -/** - * 设置自定义设备唯一标识 - */ -@property (nonatomic, copy) NSString *deviceIdentifier; - -/** - * 卡顿监控开关,默认关闭 - */ -@property (nonatomic) BOOL blockMonitorEnable; - -/** - * 卡顿监控判断间隔,单位为秒 - */ -@property (nonatomic) NSTimeInterval blockMonitorTimeout; - -/** - * 设置 App Groups Id (如有使用 Bugly iOS Extension SDK,请设置该值) - */ -@property (nonatomic, copy) NSString *applicationGroupIdentifier; - -/** - * 进程内还原开关,默认开启 - */ -@property (nonatomic) BOOL symbolicateInProcessEnable; - -/** - * 非正常退出事件记录开关,默认关闭 - */ -@property (nonatomic) BOOL unexpectedTerminatingDetectionEnable; - -/** - * 页面信息记录开关,默认开启 - */ -@property (nonatomic) BOOL viewControllerTrackingEnable; - -/** - * Bugly Delegate - */ -@property (nonatomic, assign) id delegate; - -/** - * 控制自定义日志上报,默认值为BuglyLogLevelSilent,即关闭日志记录功能。 - * 如果设置为BuglyLogLevelWarn,则在崩溃时会上报Warn、Error接口打印的日志 - */ -@property (nonatomic, assign) BuglyLogLevel reportLogLevel; - -/** - * 崩溃数据过滤器,如果崩溃堆栈的模块名包含过滤器中设置的关键字,则崩溃数据不会进行上报 - * 例如,过滤崩溃堆栈中包含搜狗输入法的数据,可以添加过滤器关键字SogouInputIPhone.dylib等 - */ -@property (nonatomic, copy) NSArray *excludeModuleFilter; - -/** - * 控制台日志上报开关,默认开启 - */ -@property (nonatomic, assign) BOOL consolelogEnable; - -/** - * 崩溃退出超时,如果监听到崩溃后,App一直没有退出,则到达超时时间后会自动abort进程退出 - * 默认值 5s, 单位 秒 - * 当赋值为0时,则不会自动abort进程退出 - */ -@property (nonatomic, assign) NSUInteger crashAbortTimeout; - -/** - * 设置自定义联网、crash上报域名 - */ -@property (nonatomic, copy) NSString *crashServerUrl; - -@end -BLY_END_NONNULL diff --git a/Pods/Bugly/Bugly.framework/Headers/BuglyLog.h b/Pods/Bugly/Bugly.framework/Headers/BuglyLog.h deleted file mode 100644 index 2768e14..0000000 --- a/Pods/Bugly/Bugly.framework/Headers/BuglyLog.h +++ /dev/null @@ -1,78 +0,0 @@ -// -// BuglyLog.h -// Bugly -// -// Copyright (c) 2017年 Tencent. All rights reserved. -// - -#import - -// Log level for Bugly Log -typedef NS_ENUM(NSUInteger, BuglyLogLevel) { - BuglyLogLevelSilent = 0, - BuglyLogLevelError = 1, - BuglyLogLevelWarn = 2, - BuglyLogLevelInfo = 3, - BuglyLogLevelDebug = 4, - BuglyLogLevelVerbose = 5, -}; -#pragma mark - - -OBJC_EXTERN void BLYLog(BuglyLogLevel level, NSString *format, ...) NS_FORMAT_FUNCTION(2, 3); - -OBJC_EXTERN void BLYLogv(BuglyLogLevel level, NSString *format, va_list args) NS_FORMAT_FUNCTION(2, 0); - -#pragma mark - -#define BUGLY_LOG_MACRO(_level, fmt, ...) [BuglyLog level:_level tag:nil log:fmt, ##__VA_ARGS__] - -#define BLYLogError(fmt, ...) BUGLY_LOG_MACRO(BuglyLogLevelError, fmt, ##__VA_ARGS__) -#define BLYLogWarn(fmt, ...) BUGLY_LOG_MACRO(BuglyLogLevelWarn, fmt, ##__VA_ARGS__) -#define BLYLogInfo(fmt, ...) BUGLY_LOG_MACRO(BuglyLogLevelInfo, fmt, ##__VA_ARGS__) -#define BLYLogDebug(fmt, ...) BUGLY_LOG_MACRO(BuglyLogLevelDebug, fmt, ##__VA_ARGS__) -#define BLYLogVerbose(fmt, ...) BUGLY_LOG_MACRO(BuglyLogLevelVerbose, fmt, ##__VA_ARGS__) - -#pragma mark - Interface -@interface BuglyLog : NSObject - -/** - * @brief 初始化日志模块 - * - * @param level 设置默认日志级别,默认BLYLogLevelSilent - * - * @param printConsole 是否打印到控制台,默认NO - */ -+ (void)initLogger:(BuglyLogLevel) level consolePrint:(BOOL)printConsole; - -/** - * @brief 打印BLYLogLevelInfo日志 - * - * @param format 日志内容 总日志大小限制为:字符串长度30k,条数200 - */ -+ (void)log:(NSString *)format, ... NS_FORMAT_FUNCTION(1, 2); - -/** - * @brief 打印日志 - * - * @param level 日志级别 - * @param message 日志内容 总日志大小限制为:字符串长度30k,条数200 - */ -+ (void)level:(BuglyLogLevel) level logs:(NSString *)message; - -/** - * @brief 打印日志 - * - * @param level 日志级别 - * @param format 日志内容 总日志大小限制为:字符串长度30k,条数200 - */ -+ (void)level:(BuglyLogLevel) level log:(NSString *)format, ... NS_FORMAT_FUNCTION(2, 3); - -/** - * @brief 打印日志 - * - * @param level 日志级别 - * @param tag 日志模块分类 - * @param format 日志内容 总日志大小限制为:字符串长度30k,条数200 - */ -+ (void)level:(BuglyLogLevel) level tag:(NSString *) tag log:(NSString *)format, ... NS_FORMAT_FUNCTION(3, 4); - -@end diff --git a/Pods/Bugly/Bugly.framework/Modules/module.modulemap b/Pods/Bugly/Bugly.framework/Modules/module.modulemap deleted file mode 100644 index c536705..0000000 --- a/Pods/Bugly/Bugly.framework/Modules/module.modulemap +++ /dev/null @@ -1,12 +0,0 @@ -framework module Bugly { - umbrella header "Bugly.h" - - export * - module * { export * } - - link framework "Foundation" - link framework "Security" - link framework "SystemConfiguration" - link "c++" - link "z" -} diff --git a/Pods/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private/Classes/DDAudioService.swift b/Pods/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private/Classes/DDAudioService.swift deleted file mode 100644 index 14f2672..0000000 --- a/Pods/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private/Classes/DDAudioService.swift +++ /dev/null @@ -1,236 +0,0 @@ -// -// SystemSoundPlayer.swift -// DDAudioPlayerKit_Private -// -// Created by 中道 on 2023/8/31. -// - -import Foundation -import AVFoundation -//import DDLogKit_Private - -public let DDAS = DDAudioService.default - -open class DDAudioService { - public static let `default` = DDAudioService() - private var items : [DDAudioServiceItem] = [] - - public func playSoundWithVibrate(audioUrl:URL,name:String,numberOfLoops:Int = 1,timeInterval:TimeInterval = 0,eachLoopCompletionBlock: (() -> Void)? = nil,endCompletionBlock: (() -> Void)? = nil) { - let item = DDAudioServiceItem(name: name) - items.append(item) - item.playSoundWithVibrate(audioUrl: audioUrl,numberOfLoops: numberOfLoops,timeInterval: timeInterval,eachLoopCompletionBlock: eachLoopCompletionBlock,endCompletionBlock: endCompletionBlock) - } - - public func playSound(audioUrl:URL,name:String,numberOfLoops:Int = 1,timeInterval:TimeInterval = 0,eachLoopCompletionBlock: (() -> Void)? = nil,endCompletionBlock: (() -> Void)? = nil) { - let item = DDAudioServiceItem(name: name) - items.append(item) - item.playSound(audioUrl: audioUrl,numberOfLoops: numberOfLoops,timeInterval: timeInterval,eachLoopCompletionBlock: eachLoopCompletionBlock,endCompletionBlock: endCompletionBlock) - } - - public func playVibrate(name:String,numberOfLoops:Int = 1,timeInterval:TimeInterval = 0,eachLoopCompletionBlock: (() -> Void)? = nil,endCompletionBlock: (() -> Void)? = nil) { - let item = DDAudioServiceItem(name: name) - items.append(item) - item.playVibrate(numberOfLoops: numberOfLoops,timeInterval: timeInterval,eachLoopCompletionBlock: eachLoopCompletionBlock,endCompletionBlock: endCompletionBlock) - } - - public func stopSoundWithVibrate(name:String) { - if items.contains(where: { item in - item.name == name - }) == true { - if let index = items.firstIndex(where: { item in - item.name == name - }) { - let item = items[index] - item.stopSoundWithVibrate {[weak self] in - self?.items.remove(at: index) - } - } - } - } - - public func stopSound(name:String) { - if items.contains(where: { item in - item.name == name - }) == true { - if let index = items.firstIndex(where: { item in - item.name == name - }) { - let item = items[index] - item.stopSound {[weak self] in - self?.items.remove(at: index) - } - } - } - } - - public func stopVibrate(name:String) { - if items.contains(where: { item in - item.name == name - }) == true { - if let index = items.firstIndex(where: { item in - item.name == name - }) { - let item = items[index] - item.stopVibrate {[weak self] in - self?.items.remove(at: index) - } - } - } - } -} - -open class DDAudioServiceItem { - fileprivate var name : String - private var audioSoundID : SystemSoundID = 0 - private var vibrateSoundID : SystemSoundID = 0 - private var endSound : Bool = false - private var endVibrate : Bool = false - private var stopSoundCompletionHander : (() -> Void)? - private var stopVibrateCompletionHander : (() -> Void)? - - init(name:String) { - self.name = name - } - - public func playSoundWithVibrate(audioUrl:URL,numberOfLoops:Int = 1,timeInterval:TimeInterval = 0, eachLoopCompletionBlock: (() -> Void)? = nil,endCompletionBlock: (() -> Void)? = nil) { - playVibrate(numberOfLoops: -1) - playSound(audioUrl: audioUrl,numberOfLoops: numberOfLoops,timeInterval: timeInterval,eachLoopCompletionBlock: eachLoopCompletionBlock) {[weak self] in - self?.stopVibrate { - if endCompletionBlock != nil { - endCompletionBlock!() - } - } - } - } - - public func stopSoundWithVibrate(completionHander:@escaping (() -> Void)) { - stopSound {[weak self] in - self?.stopVibrate { - completionHander() - } - } - } - - public func playSound(audioUrl:URL,numberOfLoops:Int = 1,timeInterval:TimeInterval = 0,eachLoopCompletionBlock: (() -> Void)? = nil,endCompletionBlock: (() -> Void)? = nil) { - - var audioSoundID:SystemSoundID = 0 - AudioServicesCreateSystemSoundID(audioUrl as CFURL, &audioSoundID) - self.audioSoundID = audioSoundID - DispatchQueue.global().async {[weak self] in - self?.playSound(audioSoundID: audioSoundID,leftNumberOfLoops: numberOfLoops,timeInterval: timeInterval,eachLoopCompletionBlock: eachLoopCompletionBlock,endCompletionBlock: endCompletionBlock) - } - } - - private func playSound(audioSoundID:SystemSoundID,leftNumberOfLoops:Int,timeInterval:TimeInterval,eachLoopCompletionBlock: (() -> Void)?, endCompletionBlock: (() -> Void)?) { - var changeLeftNumberOfLoops = leftNumberOfLoops - AudioServicesPlaySystemSoundWithCompletion(audioSoundID) {[weak self] in - // 每次loop后回调 - if eachLoopCompletionBlock != nil { - eachLoopCompletionBlock!() - } - - // 当前的剩余为0就结束 - changeLeftNumberOfLoops-=1 - if changeLeftNumberOfLoops == 0 || self?.endSound == true { - // 结束播放 - AudioServicesDisposeSystemSoundID(audioSoundID) -// DDLog(message: "name = \(self?.name ?? "")的sound播放结束") - - // 清除数据 - self?.audioSoundID = 0 - self?.endSound = false - - // stop后回调 - if self?.stopSoundCompletionHander != nil { - self?.stopSoundCompletionHander!() - }else if endCompletionBlock != nil { - // play所有loops后回调 - endCompletionBlock!() - } - }else{ - DispatchQueue.global().asyncAfter(deadline: .now() + timeInterval, execute: { - self?.playSound(audioSoundID: audioSoundID, leftNumberOfLoops: changeLeftNumberOfLoops,timeInterval: timeInterval,eachLoopCompletionBlock: eachLoopCompletionBlock,endCompletionBlock: endCompletionBlock) - }) - } - } - } - - public func stopSound(completionHandler:@escaping (() -> Void)) { - stopSoundCompletionHander = completionHandler - - // 先尝试关闭 - let status = AudioServicesDisposeSystemSoundID(audioSoundID) -// DDLog(message: "sound dispose status = \(status)") - if status != 0 { - // 假如没有关闭成功的话会来到结束 - endSound = true - }else { - audioSoundID = 0 -// DDLog(message: "name = \(name)的sound播放结束") - completionHandler() - } - } - - - public func playVibrate(numberOfLoops:Int = 1,timeInterval:TimeInterval = 0,eachLoopCompletionBlock: (() -> Void)? = nil,endCompletionBlock: (() -> Void)? = nil) { - self.endVibrate = false - - var vibrateSoundID : SystemSoundID = 0 - vibrateSoundID = kSystemSoundID_Vibrate - self.vibrateSoundID = vibrateSoundID - DispatchQueue.global().async {[weak self] in - self?.playVibrate(vibrateSoundID: vibrateSoundID, leftNumberOfLoops: numberOfLoops,timeInterval: timeInterval,eachLoopCompletionBlock: eachLoopCompletionBlock,endCompletionBlock: endCompletionBlock) - } - } - - private func playVibrate(vibrateSoundID:SystemSoundID,leftNumberOfLoops:Int,timeInterval:TimeInterval = 0,eachLoopCompletionBlock: (() -> Void)?, endCompletionBlock: (() -> Void)?) { - var changeLeftNumberOfLoops = leftNumberOfLoops - AudioServicesPlayAlertSoundWithCompletion(vibrateSoundID) {[weak self] in - // 每次loop后回调 - if eachLoopCompletionBlock != nil { - eachLoopCompletionBlock!() - } - - // 当前的剩余为0就结束 - changeLeftNumberOfLoops-=1 - if changeLeftNumberOfLoops == 0 || self?.endVibrate == true { - // 结束 - AudioServicesDisposeSystemSoundID(vibrateSoundID) -// DDLog(message: "name = \(self?.name ?? "")的vibrate播放结束") - - // 清除数据 - self?.vibrateSoundID = 0 - self?.endVibrate = false - - // stop后的回调 - if self?.stopVibrateCompletionHander != nil { - self?.stopVibrateCompletionHander!() - }else if endCompletionBlock != nil { - // play完所有loops后回调 - endCompletionBlock!() - } - }else{ - DispatchQueue.global().asyncAfter(deadline: .now() + timeInterval, execute: { - self?.playVibrate(vibrateSoundID: vibrateSoundID, leftNumberOfLoops: changeLeftNumberOfLoops,timeInterval: timeInterval,eachLoopCompletionBlock: eachLoopCompletionBlock,endCompletionBlock: endCompletionBlock) - }) - } - } - } - - public func stopVibrate(completionHandler:@escaping (() -> Void)) { - stopVibrateCompletionHander = completionHandler - - // 先尝试关闭 - let status = AudioServicesDisposeSystemSoundID(vibrateSoundID) -// DDLog(message: "vibrate dispose status = \(status)") - if status != 0 { - // 假如没有关闭成功的话会来到结束 - endVibrate = true - }else{ - vibrateSoundID = 0 -// DDLog(message: "name = \(name)的vibrate播放结束") - completionHandler() - } - } - -} diff --git a/Pods/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private/Classes/DDSpeechSynthesizer.swift b/Pods/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private/Classes/DDSpeechSynthesizer.swift deleted file mode 100644 index f6428d4..0000000 --- a/Pods/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private/Classes/DDSpeechSynthesizer.swift +++ /dev/null @@ -1,129 +0,0 @@ -// -// DDSpeechSynthesizer.swift -// DDAudioPlayerKit_Private -// -// Created by 中道 on 2023/9/5. -// - -import Foundation -import AVFoundation - -public let DDSS = DDSpeechSynthesizer.default - -open class DDSpeechSynthesizer { - public static let `default` = DDSpeechSynthesizer() - private var items : [DDSpeechSynthesizerItem] = [] - - public func play(text:String,name:String,numberOfLoops:Int = 1,timeInterval:TimeInterval = 0,eachLoopCompletionBlock: (() -> Void)? = nil, endCompletionBlock: (() -> Void)? = nil) { - let item = DDSpeechSynthesizerItem(name: name) - items.append(item) - item.play(text: text,numberOfLoops:numberOfLoops,timeInterval:timeInterval,eachLoopCompletionBlock:eachLoopCompletionBlock,endCompletionBlock:endCompletionBlock) - } - - public func stop(name:String) { - if items.contains(where: { item in - item.name == name - }) == true { - if let index = items.firstIndex(where: { item in - item.name == name - }) { - let item = items[index] - item.stop() - items.remove(at: index) - } - } - } -} - -class DDSpeechSynthesizerItem: NSObject, AVSpeechSynthesizerDelegate { - private var synthesizer : AVSpeechSynthesizer? - private var utterance : AVSpeechUtterance? - public var name : String - private var numberOfLoops : Int = 0 - private var timeInterval : TimeInterval = 0 - private var eachLoopCompletionBlock : (() -> Void)? - private var endCompletionBlock : (() -> Void)? - - init(name:String) { - self.name = name - } - - func play(text:String,numberOfLoops:Int,timeInterval:TimeInterval,eachLoopCompletionBlock: (() -> Void)?, endCompletionBlock: (() -> Void)?) { - self.numberOfLoops = numberOfLoops - self.timeInterval = timeInterval - self.eachLoopCompletionBlock = eachLoopCompletionBlock - self.endCompletionBlock = endCompletionBlock - - var broadcast = text - - for index in 0.. - -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. diff --git a/Pods/DDAudioPlayerKit_Private/README.md b/Pods/DDAudioPlayerKit_Private/README.md deleted file mode 100644 index 472a083..0000000 --- a/Pods/DDAudioPlayerKit_Private/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# DDAudioPlayerKit_Private - -[![CI Status](https://img.shields.io/travis/DDIsFriend/DDAudioPlayerKit_Private.svg?style=flat)](https://travis-ci.org/DDIsFriend/DDAudioPlayerKit_Private) -[![Version](https://img.shields.io/cocoapods/v/DDAudioPlayerKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDAudioPlayerKit_Private) -[![License](https://img.shields.io/cocoapods/l/DDAudioPlayerKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDAudioPlayerKit_Private) -[![Platform](https://img.shields.io/cocoapods/p/DDAudioPlayerKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDAudioPlayerKit_Private) - -## Example - -To run the example project, clone the repo, and run `pod install` from the Example directory first. - -## Requirements - -## Installation - -DDAudioPlayerKit_Private is available through [CocoaPods](https://cocoapods.org). To install -it, simply add the following line to your Podfile: - -```ruby -pod 'DDAudioPlayerKit_Private' -``` - -## Author - -DDIsFriend, DDIsFriend@163.com - -## License - -DDAudioPlayerKit_Private is available under the MIT license. See the LICENSE file for more info. diff --git a/Pods/DDAutoUIKit_Private/DDAutoUIKit_Private/Classes/AutoUI.swift b/Pods/DDAutoUIKit_Private/DDAutoUIKit_Private/Classes/AutoUI.swift deleted file mode 100644 index eb1bd70..0000000 --- a/Pods/DDAutoUIKit_Private/DDAutoUIKit_Private/Classes/AutoUI.swift +++ /dev/null @@ -1,22 +0,0 @@ -import UIKit - -@inlinable public func auto(_ pt:CGFloat) -> CGFloat { - let scale = AutoUI.default.scale - return pt * scale -} - -open class AutoUI { - public static let `default` = AutoUI() - - public var scale : CGFloat = 1 - - public func getScale(size:CGFloat) -> CGFloat { - scale = UIScreen.main.bounds.size.width / size - return scale - } - - @inlinable public func auto(_ pt:CGFloat) -> CGFloat { - let scale = AutoUI.default.scale - return pt * scale - } -} diff --git a/Pods/DDAutoUIKit_Private/LICENSE b/Pods/DDAutoUIKit_Private/LICENSE deleted file mode 100644 index b75c465..0000000 --- a/Pods/DDAutoUIKit_Private/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2023 DDIsFriend - -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. diff --git a/Pods/DDAutoUIKit_Private/README.md b/Pods/DDAutoUIKit_Private/README.md deleted file mode 100644 index a3307b1..0000000 --- a/Pods/DDAutoUIKit_Private/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# DDAutoUIKit_Private - -[![CI Status](https://img.shields.io/travis/DDIsFriend/DDAutoUIKit_Private.svg?style=flat)](https://travis-ci.org/DDIsFriend/DDAutoUIKit_Private) -[![Version](https://img.shields.io/cocoapods/v/DDAutoUIKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDAutoUIKit_Private) -[![License](https://img.shields.io/cocoapods/l/DDAutoUIKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDAutoUIKit_Private) -[![Platform](https://img.shields.io/cocoapods/p/DDAutoUIKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDAutoUIKit_Private) - -## Example - -To run the example project, clone the repo, and run `pod install` from the Example directory first. - -## Requirements - -## Installation - -DDAutoUIKit_Private is available through [CocoaPods](https://cocoapods.org). To install -it, simply add the following line to your Podfile: - -```ruby -pod 'DDAutoUIKit_Private' -``` - -## Author - -DDIsFriend, DDIsFriend@163.com - -## License - -DDAutoUIKit_Private is available under the MIT license. See the LICENSE file for more info. diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Assets/DDBaseViewController.xcassets/custom.chevron.backward.imageset/Contents.json b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Assets/DDBaseViewController.xcassets/custom.chevron.backward.imageset/Contents.json deleted file mode 100644 index 37f7d55..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Assets/DDBaseViewController.xcassets/custom.chevron.backward.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "custom.chevron.backward@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "custom.chevron.backward@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Assets/DDBaseViewController.xcassets/custom.chevron.backward.imageset/custom.chevron.backward@2x.png b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Assets/DDBaseViewController.xcassets/custom.chevron.backward.imageset/custom.chevron.backward@2x.png deleted file mode 100644 index 78ac95a..0000000 Binary files a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Assets/DDBaseViewController.xcassets/custom.chevron.backward.imageset/custom.chevron.backward@2x.png and /dev/null differ diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Assets/DDBaseViewController.xcassets/custom.chevron.backward.imageset/custom.chevron.backward@3x.png b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Assets/DDBaseViewController.xcassets/custom.chevron.backward.imageset/custom.chevron.backward@3x.png deleted file mode 100644 index 8991c56..0000000 Binary files a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Assets/DDBaseViewController.xcassets/custom.chevron.backward.imageset/custom.chevron.backward@3x.png and /dev/null differ diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Assets/DDBaseViewController.xcassets/navigation_back_arrow.imageset/Contents.json b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Assets/DDBaseViewController.xcassets/navigation_back_arrow.imageset/Contents.json deleted file mode 100644 index cf3df55..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Assets/DDBaseViewController.xcassets/navigation_back_arrow.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "navigation_back_arrow.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "navigation_back_arrow@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "navigation_back_arrow@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Assets/DDBaseViewController.xcassets/navigation_back_arrow.imageset/navigation_back_arrow.png b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Assets/DDBaseViewController.xcassets/navigation_back_arrow.imageset/navigation_back_arrow.png deleted file mode 100644 index 2189dc5..0000000 Binary files a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Assets/DDBaseViewController.xcassets/navigation_back_arrow.imageset/navigation_back_arrow.png and /dev/null differ diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Assets/DDBaseViewController.xcassets/navigation_back_arrow.imageset/navigation_back_arrow@2x.png b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Assets/DDBaseViewController.xcassets/navigation_back_arrow.imageset/navigation_back_arrow@2x.png deleted file mode 100644 index a9dec7c..0000000 Binary files a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Assets/DDBaseViewController.xcassets/navigation_back_arrow.imageset/navigation_back_arrow@2x.png and /dev/null differ diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Assets/DDBaseViewController.xcassets/navigation_back_arrow.imageset/navigation_back_arrow@3x.png b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Assets/DDBaseViewController.xcassets/navigation_back_arrow.imageset/navigation_back_arrow@3x.png deleted file mode 100644 index 99a0a60..0000000 Binary files a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Assets/DDBaseViewController.xcassets/navigation_back_arrow.imageset/navigation_back_arrow@3x.png and /dev/null differ diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseAnimation/DDTransitionAnimation/DDViewControllerAnimatedTransition.h b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseAnimation/DDTransitionAnimation/DDViewControllerAnimatedTransition.h deleted file mode 100644 index 6edddc6..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseAnimation/DDTransitionAnimation/DDViewControllerAnimatedTransition.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// DDViewControllerAnimatedTransition.h -// DDAnimationsKit_Private -// Created by DDIsFriend on 2022/9/20. - -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(NSUInteger, DDViewControllerAnimatedTransitionType) { - DDViewControllerAnimatedTransitionNone = 0, - DDViewControllerAnimatedTransitionPush, - DDViewControllerAnimatedTransitionPop -}; - -@interface DDViewControllerAnimatedTransition : NSObject -@property(nonatomic,assign)DDViewControllerAnimatedTransitionType animatedTransitionType; - -- (instancetype)initWithTransitionType:(DDViewControllerAnimatedTransitionType)animatedTransitionType; -@end - - -@interface UIViewController (Transition) -/** - * This property is to save the state of the navigation bar during the transition animation. - */ -@property (nonatomic, strong, nullable)UIView *dd_transitionNavigationBarSnapshot;// save snapshot when push transition. -/** - * This property is to save the state of the tabBar during the transition animation. - */ -@property (nonatomic, strong, nullable)UIView *dd_transitionTabBarSnapshot;// save snapshot when push transition. -@end - -NS_ASSUME_NONNULL_END - diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseAnimation/DDTransitionAnimation/DDViewControllerAnimatedTransition.m b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseAnimation/DDTransitionAnimation/DDViewControllerAnimatedTransition.m deleted file mode 100644 index 586835b..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseAnimation/DDTransitionAnimation/DDViewControllerAnimatedTransition.m +++ /dev/null @@ -1,219 +0,0 @@ -// -// DDViewControllerAnimatedTransition.m -// DDAnimationsKit_Private -// Created by DDIsFriend on 2022/9/20. - -#import "DDViewControllerAnimatedTransition.h" -#import - -#define VIEWCONTROLLER_ANIMATEDTRANSITION_DURATION 0.25 - -@implementation DDViewControllerAnimatedTransition - -- (instancetype)initWithTransitionType:(DDViewControllerAnimatedTransitionType)animatedTransitionType{ - self = [super init]; - if (self) { - self.animatedTransitionType = animatedTransitionType; - } - return self; -} - -- (NSTimeInterval)transitionDuration:(id)transitionContext{ - return VIEWCONTROLLER_ANIMATEDTRANSITION_DURATION; -} - -- (void)animateTransition:(id)transitionContext{ - - switch (self.animatedTransitionType) { - case DDViewControllerAnimatedTransitionPush: - [self pushAnimation:transitionContext]; - break; - - case DDViewControllerAnimatedTransitionPop: - [self popAnimation:transitionContext]; - break; - - default: - break; - } -} - --(void)pushAnimation:(id)transitionContext{ - - UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; - UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; - UIView *container = [transitionContext containerView]; - - CGRect fromVCRect = [transitionContext initialFrameForViewController:fromVC]; - fromVCRect.origin.x = 0; - fromVCRect.origin.y = 0; - fromVCRect.size = container.frame.size; - fromVC.view.frame = fromVCRect; - - CGRect fromVCToRect = fromVC.view.frame; - fromVCToRect.origin.x = container.frame.size.width * 1 * (-0.5); - - CGRect toVCRect = [transitionContext initialFrameForViewController:fromVC]; - toVCRect.origin.x = container.frame.size.width; - toVCRect.origin.y = 0; - toVCRect.size = container.frame.size; - toVC.view.frame = toVCRect; - - CGRect toVCToRect = toVC.view.frame; - toVCToRect.origin.x = 0; - - UIBezierPath *path = [UIBezierPath bezierPathWithRect:toVC.view.bounds]; - path.lineWidth = 3; - toVC.view.layer.shadowPath = path.CGPath; - toVC.view.layer.shadowColor = UIColor.darkGrayColor.CGColor; - toVC.view.layer.shadowOpacity = 3; - - UIView *navigationBarSnapshot = [fromVC.navigationController.view resizableSnapshotViewFromRect:CGRectMake(0, 0, container.frame.size.width, CGRectGetMaxY(fromVC.navigationController.navigationBar.frame)) afterScreenUpdates:NO withCapInsets:UIEdgeInsetsZero]; - fromVC.dd_transitionNavigationBarSnapshot = navigationBarSnapshot; - [fromVC.view addSubview:navigationBarSnapshot]; - - if (([fromVC.navigationController.parentViewController isKindOfClass:[UITabBarController class]] == YES) && (fromVC.navigationController.viewControllers.count == 2)) { - UITabBarController *tabBarController = (UITabBarController *)fromVC.navigationController.parentViewController; - UIView *tabBarSnapshot = [tabBarController.tabBar resizableSnapshotViewFromRect:CGRectMake(0, 0, container.frame.size.width, CGRectGetMaxY(tabBarController.tabBar.frame) - CGRectGetMinY(tabBarController.tabBar.frame)) afterScreenUpdates:NO withCapInsets:UIEdgeInsetsZero]; - fromVC.dd_transitionTabBarSnapshot = tabBarSnapshot; - tabBarSnapshot.frame = CGRectMake(0, CGRectGetMaxY(fromVC.view.frame) - tabBarSnapshot.bounds.size.height, tabBarSnapshot.bounds.size.width, tabBarSnapshot.bounds.size.height); - [fromVC.view addSubview:tabBarSnapshot]; - } - - if (fromVC.dd_transitionTabBarSnapshot != nil) { - fromVC.tabBarController.tabBar.hidden = YES; - } - - [fromVC.navigationController.view insertSubview:fromVC.view atIndex:0]; - [fromVC.navigationController.view insertSubview:toVC.view aboveSubview:fromVC.view]; - - [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{ - fromVC.view.frame = fromVCToRect; - toVC.view.frame = toVCToRect; - - } completion:^(BOOL finished) { - - if (![transitionContext transitionWasCancelled]){ - [fromVC.dd_transitionNavigationBarSnapshot removeFromSuperview]; - [fromVC.dd_transitionTabBarSnapshot removeFromSuperview]; - [fromVC.view removeFromSuperview]; - [toVC.view removeFromSuperview]; - [container addSubview:toVC.view]; - }else{ - [fromVC.dd_transitionNavigationBarSnapshot removeFromSuperview]; - fromVC.dd_transitionNavigationBarSnapshot = nil; - if (fromVC.dd_transitionTabBarSnapshot != nil) { - [fromVC.dd_transitionTabBarSnapshot removeFromSuperview]; - fromVC.dd_transitionTabBarSnapshot = nil; - } - [fromVC.view removeFromSuperview]; - [toVC.view removeFromSuperview]; - [container addSubview:fromVC.view]; - } - - [transitionContext completeTransition:![transitionContext transitionWasCancelled]]; - }]; - -} - --(void)popAnimation:(id)transitionContext{ - - UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; - UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; - UIView *container = [transitionContext containerView]; - - CGRect fromVCRect = [transitionContext initialFrameForViewController:fromVC]; - fromVCRect.origin.x = 0; - fromVCRect.origin.y = 0; - fromVCRect.size = container.frame.size; - fromVC.view.frame = fromVCRect; - - CGRect fromVCToRect = fromVC.view.frame; - fromVCToRect.origin.x = container.frame.size.width; - - CGRect toVCRect = [transitionContext initialFrameForViewController:fromVC]; - toVCRect.origin.x = container.frame.size.width * 1 * (-0.5); - toVCRect.origin.y = 0; - toVCRect.size = container.frame.size; - toVC.view.frame = toVCRect; - - CGRect toVCToRect = toVC.view.frame; - toVCToRect.origin.x = 0; - - UIBezierPath *path = [UIBezierPath bezierPathWithRect:fromVC.view.bounds]; - path.lineWidth = 3; - fromVC.view.layer.shadowPath = path.CGPath; - fromVC.view.layer.shadowColor = UIColor.darkGrayColor.CGColor; - fromVC.view.layer.shadowOpacity = 3; - - UIView *navigationBarSnapshot = [fromVC.navigationController.view resizableSnapshotViewFromRect:CGRectMake(0, 0, container.frame.size.width, CGRectGetMaxY(fromVC.navigationController.navigationBar.frame)) afterScreenUpdates:NO withCapInsets:UIEdgeInsetsZero]; - fromVC.dd_transitionNavigationBarSnapshot = navigationBarSnapshot; - [fromVC.view addSubview:navigationBarSnapshot]; - [toVC.view addSubview:toVC.dd_transitionNavigationBarSnapshot]; - - if (toVC.dd_transitionTabBarSnapshot != nil) { - [toVC.view addSubview:toVC.dd_transitionTabBarSnapshot]; - toVC.tabBarController.tabBar.hidden = YES; - } - - [fromVC.navigationController.view addSubview:toVC.view]; - [fromVC.navigationController.view addSubview:fromVC.view]; - - [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{ - - fromVC.view.frame = fromVCToRect; - toVC.view.frame = toVCToRect; - - } completion:^(BOOL finished){ - - if (![transitionContext transitionWasCancelled]){ - [fromVC.dd_transitionNavigationBarSnapshot removeFromSuperview]; - fromVC.dd_transitionNavigationBarSnapshot = nil; - [fromVC.view removeFromSuperview]; - [toVC.dd_transitionNavigationBarSnapshot removeFromSuperview]; - toVC.dd_transitionNavigationBarSnapshot = nil; - if (toVC.dd_transitionTabBarSnapshot != nil) { - [toVC.dd_transitionTabBarSnapshot removeFromSuperview]; - toVC.dd_transitionTabBarSnapshot = nil; - toVC.tabBarController.tabBar.hidden = NO; - } - [toVC.view removeFromSuperview]; - [container addSubview:toVC.view]; - toVC.view.frame = container.bounds; - }else{ - [fromVC.dd_transitionNavigationBarSnapshot removeFromSuperview]; - fromVC.dd_transitionNavigationBarSnapshot = nil; - [fromVC.view removeFromSuperview]; - [toVC.view removeFromSuperview]; - [container addSubview:fromVC.view]; - fromVC.view.frame = container.bounds; - } - - [transitionContext completeTransition:![transitionContext transitionWasCancelled]]; - }]; - -} - -@end - -@implementation UIViewController (Transition) - -// MARK: -- (UIView *)dd_transitionNavigationBarSnapshot{ - return objc_getAssociatedObject(self, _cmd); -} - -- (void)setDd_transitionNavigationBarSnapshot:(UIView *)dd_transitionNavigationBarSnapshot{ - objc_setAssociatedObject(self, @selector(dd_transitionNavigationBarSnapshot), dd_transitionNavigationBarSnapshot, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -// MARK: -- (UIView *)dd_transitionTabBarSnapshot{ - return objc_getAssociatedObject(self, _cmd); -} - -- (void)setDd_transitionTabBarSnapshot:(UIView *)dd_transitionTabBarSnapshot{ - objc_setAssociatedObject(self, @selector(dd_transitionTabBarSnapshot), dd_transitionTabBarSnapshot, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -@end diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseAttributedString/DDBaseAttributedString.h b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseAttributedString/DDBaseAttributedString.h deleted file mode 100644 index 44f3607..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseAttributedString/DDBaseAttributedString.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDBaseAttributedString.h -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/22. - - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DDBaseAttributedString : NSAttributedString - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseAttributedString/DDBaseAttributedString.m b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseAttributedString/DDBaseAttributedString.m deleted file mode 100644 index cf3576f..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseAttributedString/DDBaseAttributedString.m +++ /dev/null @@ -1,11 +0,0 @@ -// -// DDBaseAttributedString.m -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/22. - - -#import "DDBaseAttributedString.h" - -@implementation DDBaseAttributedString - -@end diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseAttributedString/DDBaseMutableAttributedString.h b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseAttributedString/DDBaseMutableAttributedString.h deleted file mode 100644 index ad79d03..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseAttributedString/DDBaseMutableAttributedString.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDBaseMutableAttributedString.h -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/22. - - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DDBaseMutableAttributedString : NSMutableAttributedString - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseAttributedString/DDBaseMutableAttributedString.m b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseAttributedString/DDBaseMutableAttributedString.m deleted file mode 100644 index fa55221..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseAttributedString/DDBaseMutableAttributedString.m +++ /dev/null @@ -1,11 +0,0 @@ -// -// DDBaseMutableAttributedString.m -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/22. - - -#import "DDBaseMutableAttributedString.h" - -@implementation DDBaseMutableAttributedString - -@end diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseButton/DDBaseButton.h b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseButton/DDBaseButton.h deleted file mode 100644 index caabf22..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseButton/DDBaseButton.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDBaseButton.h -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DDBaseButton : UIButton - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseButton/DDBaseButton.m b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseButton/DDBaseButton.m deleted file mode 100644 index 313ff77..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseButton/DDBaseButton.m +++ /dev/null @@ -1,19 +0,0 @@ -// -// DDBaseButton.m -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import "DDBaseButton.h" - -@implementation DDBaseButton - -/* -// Only override drawRect: if you perform custom drawing. -// An empty implementation adversely affects performance during animation. -- (void)drawRect:(CGRect)rect { - // Drawing code -} -*/ - -@end diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseCollectionView/DDBaseCollectionView.h b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseCollectionView/DDBaseCollectionView.h deleted file mode 100644 index 41c1b81..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseCollectionView/DDBaseCollectionView.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDBaseCollectionView.h -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DDBaseCollectionView : UICollectionView - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseCollectionView/DDBaseCollectionView.m b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseCollectionView/DDBaseCollectionView.m deleted file mode 100644 index 01d2b5a..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseCollectionView/DDBaseCollectionView.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// DDBaseCollectionView.m -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import "DDBaseCollectionView.h" - -@implementation DDBaseCollectionView -- (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout{ - self = [super initWithFrame:frame collectionViewLayout:layout]; - if (self) { - - } - return self; -} - -@end diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseCollectionViewCell/DDBaseCollectionViewCell.h b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseCollectionViewCell/DDBaseCollectionViewCell.h deleted file mode 100644 index 471ae3c..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseCollectionViewCell/DDBaseCollectionViewCell.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDBaseCollectionViewCell.h -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DDBaseCollectionViewCell : UICollectionViewCell - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseCollectionViewCell/DDBaseCollectionViewCell.m b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseCollectionViewCell/DDBaseCollectionViewCell.m deleted file mode 100644 index 6c883c4..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseCollectionViewCell/DDBaseCollectionViewCell.m +++ /dev/null @@ -1,11 +0,0 @@ -// -// DDBaseCollectionViewCell.m -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import "DDBaseCollectionViewCell.h" - -@implementation DDBaseCollectionViewCell - -@end diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseImage/DDBaseImage.h b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseImage/DDBaseImage.h deleted file mode 100644 index d2b634c..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseImage/DDBaseImage.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDBaseImage.h -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/15. - - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DDBaseImage : UIImage - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseImage/DDBaseImage.m b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseImage/DDBaseImage.m deleted file mode 100644 index 1981c05..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseImage/DDBaseImage.m +++ /dev/null @@ -1,11 +0,0 @@ -// -// DDBaseImage.m -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/15. - - -#import "DDBaseImage.h" - -@implementation DDBaseImage - -@end diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseImageView/DDBaseImageView.h b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseImageView/DDBaseImageView.h deleted file mode 100644 index 451b6a4..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseImageView/DDBaseImageView.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDBaseImageView.h -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/15. - - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DDBaseImageView : UIImageView - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseImageView/DDBaseImageView.m b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseImageView/DDBaseImageView.m deleted file mode 100644 index 9545912..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseImageView/DDBaseImageView.m +++ /dev/null @@ -1,19 +0,0 @@ -// -// DDBaseImageView.m -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/15. - - -#import "DDBaseImageView.h" - -@implementation DDBaseImageView - -/* -// Only override drawRect: if you perform custom drawing. -// An empty implementation adversely affects performance during animation. -- (void)drawRect:(CGRect)rect { - // Drawing code -} -*/ - -@end diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseLabel/DDBaseLabel.h b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseLabel/DDBaseLabel.h deleted file mode 100644 index 2346746..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseLabel/DDBaseLabel.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDBaseLabel.h -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DDBaseLabel : UILabel - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseLabel/DDBaseLabel.m b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseLabel/DDBaseLabel.m deleted file mode 100644 index 5ec9012..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseLabel/DDBaseLabel.m +++ /dev/null @@ -1,19 +0,0 @@ -// -// DDBaseLabel.m -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import "DDBaseLabel.h" - -@implementation DDBaseLabel - -/* -// Only override drawRect: if you perform custom drawing. -// An empty implementation adversely affects performance during animation. -- (void)drawRect:(CGRect)rect { - // Drawing code -} -*/ - -@end diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseModel/DDBaseModel.h b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseModel/DDBaseModel.h deleted file mode 100644 index b07b134..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseModel/DDBaseModel.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// DDBaseModel.h -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DDBaseModel : NSObject - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseModel/DDBaseModel.m b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseModel/DDBaseModel.m deleted file mode 100644 index 6ca8d64..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseModel/DDBaseModel.m +++ /dev/null @@ -1,11 +0,0 @@ -// -// DDBaseModel.m -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import "DDBaseModel.h" - -@implementation DDBaseModel - -@end diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseNavigationController/DDBaseNavigationController.h b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseNavigationController/DDBaseNavigationController.h deleted file mode 100644 index 21a927f..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseNavigationController/DDBaseNavigationController.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// DDBaseNavigationController.h -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2022/9/20. - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DDBaseNavigationController : UINavigationController -- (void)screenEdgePanGestureRecognizerEnable:(BOOL)enable; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseNavigationController/DDBaseNavigationController.m b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseNavigationController/DDBaseNavigationController.m deleted file mode 100644 index a2b5e17..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseNavigationController/DDBaseNavigationController.m +++ /dev/null @@ -1,103 +0,0 @@ -// -// DDBaseNavigationController.m -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2022/9/20. - -#import "DDBaseNavigationController.h" -#import "DDNavigationControllerDelegateReceiver.h" - -@interface DDBaseNavigationController () -@property (nullable , nonatomic, strong)DDNavigationControllerDelegateReceiver *delegateReceiver; -@property (nullable , nonatomic, strong)UIScreenEdgePanGestureRecognizer *screenEdgePanGestureRecognizer; -@end - -@implementation DDBaseNavigationController - -- (void)viewDidLoad { - [super viewDidLoad]; - - [self config]; - - [self addNavigationControllerDelegateReceiver]; - - [self addScreenEdgePanGestureRecognizer]; -} - -// MARK: -- (void)config{ - self.dd_hidesBottomBarWhenPushed = YES; -} - -- (void)addNavigationControllerDelegateReceiver{ - self.delegateReceiver = [[DDNavigationControllerDelegateReceiver alloc] init]; - self.delegate = self.delegateReceiver; -} - -// MARK: -- (void)addScreenEdgePanGestureRecognizer{ - UIScreenEdgePanGestureRecognizer *interactivePopGestureRecognizer = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureRecognizerToPop:)]; - interactivePopGestureRecognizer.edges = UIRectEdgeLeft; - [self.view addGestureRecognizer:interactivePopGestureRecognizer]; - self.screenEdgePanGestureRecognizer = interactivePopGestureRecognizer; - -// self.interactivePopGestureRecognizer.delegate = self; - self.interactivePopGestureRecognizer.enabled = NO; -} - -- (void)panGestureRecognizerToPop:(UIPanGestureRecognizer *)ges{ - if (ges.state == UIGestureRecognizerStateBegan){ - if (self.viewControllers.count == 1){ - return; - } - - self.delegateReceiver.percentDrivenInteractiveTransition = [UIPercentDrivenInteractiveTransition new]; - [self popViewControllerAnimated:YES]; - } - - CGFloat progress = [ges translationInView:self.view].x / [UIScreen mainScreen].bounds.size.width; - - if (ges.state == UIGestureRecognizerStateChanged){ - [self.delegateReceiver.percentDrivenInteractiveTransition updateInteractiveTransition:progress]; - }else if (ges.state == UIGestureRecognizerStateEnded || ges.state == UIGestureRecognizerStateCancelled){ - if (progress >= 0.5){ - [self.delegateReceiver.percentDrivenInteractiveTransition finishInteractiveTransition]; - }else{ - [self.delegateReceiver.percentDrivenInteractiveTransition cancelInteractiveTransition]; - } - self.delegateReceiver.percentDrivenInteractiveTransition = nil; - }else if (ges.state == UIGestureRecognizerStateFailed){ - return; - } -} - -- (void)screenEdgePanGestureRecognizerEnable:(BOOL)enable{ - self.screenEdgePanGestureRecognizer.enabled = enable; -} - -// MARK: -//- (UIStatusBarStyle)preferredStatusBarStyle{ -// return UIStatusBarStyleDefault; -//} - -// override this method will instead - (UIStatusBarStyle)preferredStatusBarStyle. -- (UIViewController *)childViewControllerForStatusBarStyle{ - return self.topViewController; -} - -- (UIViewController *)childViewControllerForStatusBarHidden{ - return self.topViewController; -} - -// MARK: -- (BOOL)shouldAutorotate{ - return self.topViewController.shouldAutorotate; -} - -- (UIInterfaceOrientationMask)supportedInterfaceOrientations{ - return self.topViewController.supportedInterfaceOrientations; -} - -- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{ - return self.topViewController.preferredInterfaceOrientationForPresentation; -} -@end diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseNavigationController/DDNavigationControllerDelegateReceiver.h b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseNavigationController/DDNavigationControllerDelegateReceiver.h deleted file mode 100644 index 8adc62b..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseNavigationController/DDNavigationControllerDelegateReceiver.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// DDNavigationControllerDelegateReceiver.h -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2022/9/20. - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DDNavigationControllerDelegateReceiver : NSObject -@property (nonatomic, strong, nullable)UIPercentDrivenInteractiveTransition *percentDrivenInteractiveTransition; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseNavigationController/DDNavigationControllerDelegateReceiver.m b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseNavigationController/DDNavigationControllerDelegateReceiver.m deleted file mode 100644 index 695bcfd..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseNavigationController/DDNavigationControllerDelegateReceiver.m +++ /dev/null @@ -1,32 +0,0 @@ -// -// UINavigationControllerDelegateReceiver.m -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2022/9/20. - -#import "DDNavigationControllerDelegateReceiver.h" -#import - -@implementation DDNavigationControllerDelegateReceiver -// MARK: -- (nullable id )navigationController:(UINavigationController *)navigationController - interactionControllerForAnimationController:(id ) animationController{ - return self.percentDrivenInteractiveTransition; -} - -- (nullable id )navigationController:(UINavigationController *)navigationController - animationControllerForOperation:(UINavigationControllerOperation)operation - fromViewController:(UIViewController *)fromVC - toViewController:(UIViewController *)toVC { - - if (operation == UINavigationControllerOperationNone) { - return [[DDViewControllerAnimatedTransition alloc] initWithTransitionType:DDViewControllerAnimatedTransitionNone]; - } - - if (operation == UINavigationControllerOperationPush){ - return [[DDViewControllerAnimatedTransition alloc] initWithTransitionType:DDViewControllerAnimatedTransitionPush]; - } - - return [[DDViewControllerAnimatedTransition alloc] initWithTransitionType:DDViewControllerAnimatedTransitionPop]; -} - -@end diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseScrollView/DDBaseScrollView.h b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseScrollView/DDBaseScrollView.h deleted file mode 100644 index 0cf0013..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseScrollView/DDBaseScrollView.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDBaseScrollView.h -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/26. - - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DDBaseScrollView : UIScrollView - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseScrollView/DDBaseScrollView.m b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseScrollView/DDBaseScrollView.m deleted file mode 100644 index 5094866..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseScrollView/DDBaseScrollView.m +++ /dev/null @@ -1,19 +0,0 @@ -// -// DDBaseScrollView.m -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/26. - - -#import "DDBaseScrollView.h" - -@implementation DDBaseScrollView - -/* -// Only override drawRect: if you perform custom drawing. -// An empty implementation adversely affects performance during animation. -- (void)drawRect:(CGRect)rect { - // Drawing code -} -*/ - -@end diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseSwitch/DDBaseSwitch.h b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseSwitch/DDBaseSwitch.h deleted file mode 100644 index f1ac532..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseSwitch/DDBaseSwitch.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// DDBaseSwitch.h -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/8/31. - - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DDBaseSwitch : UISwitch - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseSwitch/DDBaseSwitch.m b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseSwitch/DDBaseSwitch.m deleted file mode 100644 index 15c330a..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseSwitch/DDBaseSwitch.m +++ /dev/null @@ -1,19 +0,0 @@ -// -// DDBaseSwitch.m -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/8/31. - - -#import "DDBaseSwitch.h" - -@implementation DDBaseSwitch - -/* -// Only override drawRect: if you perform custom drawing. -// An empty implementation adversely affects performance during animation. -- (void)drawRect:(CGRect)rect { - // Drawing code -} -*/ - -@end diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTabBarController/DDBaseTabBarController.h b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTabBarController/DDBaseTabBarController.h deleted file mode 100644 index 1b216c5..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTabBarController/DDBaseTabBarController.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// DDBaseTabBarController.h -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2022/11/7. - - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DDBaseTabBarController : UITabBarController - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTabBarController/DDBaseTabBarController.m b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTabBarController/DDBaseTabBarController.m deleted file mode 100644 index 269167c..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTabBarController/DDBaseTabBarController.m +++ /dev/null @@ -1,45 +0,0 @@ -// -// DDBaseTabBarController.m -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2022/11/7. - - -#import "DDBaseTabBarController.h" - -@interface DDBaseTabBarController () - -@end - -@implementation DDBaseTabBarController - -- (void)viewDidLoad { - [super viewDidLoad]; - // Do any additional setup after loading the view. -} - -// MARK: -//- (UIStatusBarStyle)preferredStatusBarStyle{ -// return UIStatusBarStyleDefault; -//} -// override this method will instead - (UIStatusBarStyle)preferredStatusBarStyle. -- (UIViewController *)childViewControllerForStatusBarStyle{ - return self.selectedViewController; -} - -- (UIViewController *)childViewControllerForStatusBarHidden{ - return self.selectedViewController; -} - -// MARK: -- (BOOL)shouldAutorotate{ - return self.selectedViewController.shouldAutorotate; -} - -- (UIInterfaceOrientationMask)supportedInterfaceOrientations{ - return self.selectedViewController.supportedInterfaceOrientations; -} - -- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{ - return self.selectedViewController.preferredInterfaceOrientationForPresentation; -} -@end diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTableView/DDBaseTableView.h b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTableView/DDBaseTableView.h deleted file mode 100644 index 2baaa23..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTableView/DDBaseTableView.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDBaseTableView.h -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DDBaseTableView : UITableView - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTableView/DDBaseTableView.m b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTableView/DDBaseTableView.m deleted file mode 100644 index 07cba90..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTableView/DDBaseTableView.m +++ /dev/null @@ -1,19 +0,0 @@ -// -// DDBaseTableView.m -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import "DDBaseTableView.h" - -@implementation DDBaseTableView - -- (instancetype)initWithFrame:(CGRect)frame{ - self = [super initWithFrame:frame]; - if (self) { - - } - return self; -} - -@end diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTableViewCell/DDBaseTableViewCell.h b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTableViewCell/DDBaseTableViewCell.h deleted file mode 100644 index 53befdb..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTableViewCell/DDBaseTableViewCell.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDBaseTableViewCell.h -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DDBaseTableViewCell : UITableViewCell - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTableViewCell/DDBaseTableViewCell.m b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTableViewCell/DDBaseTableViewCell.m deleted file mode 100644 index b509d75..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTableViewCell/DDBaseTableViewCell.m +++ /dev/null @@ -1,31 +0,0 @@ -// -// DDBaseTableViewCell.m -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import "DDBaseTableViewCell.h" - -@implementation DDBaseTableViewCell - -- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - - } - return self; -} - - -- (void)awakeFromNib { - [super awakeFromNib]; - // Initialization code -} - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated { - [super setSelected:selected animated:animated]; - - // Configure the view for the selected state -} - -@end diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTextField/DDBaseTextField.h b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTextField/DDBaseTextField.h deleted file mode 100644 index 3e63e3d..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTextField/DDBaseTextField.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDBaseTextField.h -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/21. - - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DDBaseTextField : UITextField -@property (nonatomic, assign)NSInteger textLimitCount; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTextField/DDBaseTextField.m b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTextField/DDBaseTextField.m deleted file mode 100644 index 555b4b1..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTextField/DDBaseTextField.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// DDBaseTextField.m -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/21. - - -#import "DDBaseTextField.h" - -@implementation DDBaseTextField - -- (instancetype)initWithFrame:(CGRect)frame{ - self = [super initWithFrame:frame]; - if (self) { - self.textLimitCount = UINTMAX_MAX; - [self addTarget:self action:@selector(limitTextCount:) forControlEvents:UIControlEventEditingChanged]; - } - return self; -} - -- (void)limitTextCount:(UITextField *)textField{ - if (textField.text.length >= self.textLimitCount) { - textField.text = [textField.text substringToIndex:self.textLimitCount]; - } -} -@end diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTextView/DDBaseTextView.h b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTextView/DDBaseTextView.h deleted file mode 100644 index f3c3f22..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTextView/DDBaseTextView.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDBaseTextView.h -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/22. - - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DDBaseTextView : UITextView - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTextView/DDBaseTextView.m b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTextView/DDBaseTextView.m deleted file mode 100644 index d10973d..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTextView/DDBaseTextView.m +++ /dev/null @@ -1,19 +0,0 @@ -// -// DDBaseTextView.m -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/22. - - -#import "DDBaseTextView.h" - -@implementation DDBaseTextView - -/* -// Only override drawRect: if you perform custom drawing. -// An empty implementation adversely affects performance during animation. -- (void)drawRect:(CGRect)rect { - // Drawing code -} -*/ - -@end diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseView/DDBaseView.h b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseView/DDBaseView.h deleted file mode 100644 index c68dc07..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseView/DDBaseView.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDBaseView.h -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DDBaseView : UIView - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseView/DDBaseView.m b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseView/DDBaseView.m deleted file mode 100644 index a11e5cd..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseView/DDBaseView.m +++ /dev/null @@ -1,19 +0,0 @@ -// -// DDBaseView.m -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import "DDBaseView.h" - -@implementation DDBaseView - -/* -// Only override drawRect: if you perform custom drawing. -// An empty implementation adversely affects performance during animation. -- (void)drawRect:(CGRect)rect { - // Drawing code -} -*/ - -@end diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseViewController/DDBaseViewController.h b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseViewController/DDBaseViewController.h deleted file mode 100644 index 4bb89c6..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseViewController/DDBaseViewController.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// DDBaseViewController.h -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2022/10/27. - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DDBaseViewController : UIViewController - -@property (nonatomic, strong, nullable) NSString *dd_navigationItemTitle; - -@property (nonatomic, strong, nullable) UIView *dd_navigationItemTitleView; - -@property (nonatomic, strong, nullable) UIBarButtonItem *dd_backBarButtonItem; //Default custom backItem, This item contains a customView consist of a button. - -- (void)defaultBackActionPopViewController; // default back action - -- (void)dd_backButtonWithImage:(nullable UIImage *)backButtonImage action:(SEL)sel; - -- (void)dd_backActionPopViewController:(BOOL)isAnimated; -- (void)dd_backActionPopToRootViewController:(BOOL)isAnimated; - -- (void)dd_setInterfaceOrientation:(UIInterfaceOrientation)orientation; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseViewController/DDBaseViewController.m b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseViewController/DDBaseViewController.m deleted file mode 100644 index 3a392ae..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseViewController/DDBaseViewController.m +++ /dev/null @@ -1,135 +0,0 @@ -// -// DDBaseViewController.m -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2022/10/27. - -#import "DDBaseViewController.h" -#import - -@interface DDBaseViewController () - -@end - -@implementation DDBaseViewController -- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - [self configNavigationBar]; - [self configView]; - } - return self; -} - -- (nullable instancetype)initWithCoder:(NSCoder *)coder{ - self = [super initWithCoder:coder]; - if (self) { - [self configNavigationBar]; - [self configView]; - } - return self; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - // Do any additional setup after loading the view. - -} - -// MARK: -- (void)configNavigationBar{ - // 隐藏默认的返回按钮 - self.navigationItem.hidesBackButton = YES; - - // navigationBar Attributes. - [self defaultNavigationBarBackgroundColor]; - [self defaultNavigationBarTitleTextAttributes]; - [self defaultNavigationBarBarButtonItemAttributes]; - [self defaultNavigationBarLeftBarButtonItems]; -} - -- (void)defaultNavigationBarBackgroundColor{ - self.dd_navigationBarBackgroundColor = UIColor.whiteColor; -} - -- (void)defaultNavigationBarTitleTextAttributes{ - self.dd_navigationBarTitleTextAttributes = @{NSForegroundColorAttributeName : UIColor.blackColor,NSFontAttributeName : [UIFont systemFontOfSize:17 weight:UIFontWeightMedium]}; -} - -- (void)defaultNavigationBarBarButtonItemAttributes{ - self.dd_navigationBarBarButtonItemAttributes = @{NSForegroundColorAttributeName : UIColor.blackColor,NSFontAttributeName : [UIFont systemFontOfSize:14 weight:UIFontWeightMedium]}; -} - -- (void)defaultNavigationBarLeftBarButtonItems{ - UIImage *backButtonImage = [UIImage dd_imageNamed:@"navigation_back_arrow" bundleName:@"DDBaseViewController" aClass:self.class]; - [self dd_backButtonWithImage:backButtonImage action:@selector(defaultBackActionPopViewController)]; -} - -- (void)defaultBackActionPopViewController{ - [self dd_backActionPopViewController:YES]; -} - -// MARK: -- (void)configView{ - self.view.backgroundColor = [UIColor whiteColor]; - self.extendedLayoutIncludesOpaqueBars = YES; -} - -// MARK: -- (void)setDd_navigationItemTitle:(NSString *)navigationItemTitle{ - _dd_navigationItemTitle = navigationItemTitle; - self.navigationItem.title = navigationItemTitle; -} - -- (void)setDd_navigationItemTitleView:(UIView *)navigationItemTitleView{ - _dd_navigationItemTitleView = navigationItemTitleView; - self.navigationItem.titleView = navigationItemTitleView; -} - -// MARK: -- (void)dd_backButtonWithImage:(nullable UIImage *)backButtonImage action:(SEL)sel{ - self.navigationItem.leftBarButtonItems = nil; - self.navigationItem.leftBarButtonItems = [self backBarButtonItem:[self barButtonItemWithImage:backButtonImage title:nil target:self action:sel] withOtherItems:nil]; -} - -- (nullable UIBarButtonItem *)barButtonItemWithImage:(nullable UIImage *)image title:(nullable NSString *)title target:(nullable id)target action:(nullable SEL)action { - - if (image != nil){ - return [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStylePlain target:target action:action]; - }else if (title != nil){ - return [[UIBarButtonItem alloc] initWithTitle:title style:UIBarButtonItemStylePlain target:target action:action]; - } - - return nil; -} - -- (nullable NSArray *)backBarButtonItem:(nonnull UIBarButtonItem *)backBarButtonItem withOtherItems:(nullable NSArray *)items{ - - _dd_backBarButtonItem = backBarButtonItem; - - UIBarButtonItem *flexibleSpaceItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; - NSArray *backItems = [[NSArray arrayWithObjects:backBarButtonItem,flexibleSpaceItem, nil] arrayByAddingObjectsFromArray:items]; - - return backItems; -} - -- (void)dd_backActionPopViewController:(BOOL)isAnimated{ - [self.navigationController popViewControllerAnimated:isAnimated]; -} - -- (void)dd_backActionPopToRootViewController:(BOOL)isAnimated{ - [self.navigationController popToRootViewControllerAnimated:isAnimated]; -} - -// MARK: -- (void)dd_setInterfaceOrientation:(UIInterfaceOrientation)orientation { - if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) { - SEL selector = NSSelectorFromString(@"setOrientation:"); - NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]]; - [invocation setSelector:selector]; - [invocation setTarget:[UIDevice currentDevice]]; - UIInterfaceOrientation val = orientation; - [invocation setArgument:&val atIndex:2]; - [invocation invoke]; - } -} -@end diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseViewModel/DDBaseViewModel.h b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseViewModel/DDBaseViewModel.h deleted file mode 100644 index 5876245..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseViewModel/DDBaseViewModel.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// DDBaseViewModel.h -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DDBaseViewModel : NSObject - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseViewModel/DDBaseViewModel.m b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseViewModel/DDBaseViewModel.m deleted file mode 100644 index b9a6e5c..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseViewModel/DDBaseViewModel.m +++ /dev/null @@ -1,11 +0,0 @@ -// -// DDBaseViewModel.m -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import "DDBaseViewModel.h" - -@implementation DDBaseViewModel - -@end diff --git a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBasicControls.h b/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBasicControls.h deleted file mode 100644 index 3620ae5..0000000 --- a/Pods/DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBasicControls.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// DDBasicControls.h -// DDBasicControlsKit_Private -// Created by DDIsFriend on 2023/2/13. - - -#ifndef DDBasicControls_h -#define DDBasicControls_h - -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import - -#endif /* DDBasicControls_h */ diff --git a/Pods/DDBasicControlsKit_Private/LICENSE b/Pods/DDBasicControlsKit_Private/LICENSE deleted file mode 100644 index 60fb0df..0000000 --- a/Pods/DDBasicControlsKit_Private/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2022 DDIsFriend - -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. diff --git a/Pods/DDBasicControlsKit_Private/README.md b/Pods/DDBasicControlsKit_Private/README.md deleted file mode 100644 index 9f85c6d..0000000 --- a/Pods/DDBasicControlsKit_Private/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# DDBasicControlsKit_Private - -[![CI Status](https://img.shields.io/travis/DDIsFriend/DDBasicControlsKit_Private.svg?style=flat)](https://travis-ci.org/DDIsFriend/DDBasicControlsKit_Private) -[![Version](https://img.shields.io/cocoapods/v/DDBasicControlsKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDBasicControlsKit_Private) -[![License](https://img.shields.io/cocoapods/l/DDBasicControlsKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDBasicControlsKit_Private) -[![Platform](https://img.shields.io/cocoapods/p/DDBasicControlsKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDBasicControlsKit_Private) - -## Example - -To run the example project, clone the repo, and run `pod install` from the Example directory first. - -## Requirements - -## Installation - -DDBasicControlsKit_Private is available through [CocoaPods](https://cocoapods.org). To install -it, simply add the following line to your Podfile: - -```ruby -pod 'DDBasicControlsKit_Private' -``` - -## Author - -DDIsFriend, DDIsFriend@163.com - -## License - -DDBasicControlsKit_Private is available under the MIT license. See the LICENSE file for more info. diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/CALayer+DDCategory/CALayer+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/CALayer+DDCategory/CALayer+DDCategory.h deleted file mode 100644 index d07521e..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/CALayer+DDCategory/CALayer+DDCategory.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// CALayer+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/7/29. - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface CALayer (DDCategory) -/** - *give the layer shadow - *@param shadowColor layer shadowColor - *@param shadowOffset layer shadowOffset - *@param shadowRadius layer shadowRadius - *@param shadowOpacity layer shadowOpacity - *@param layerBackground you must set layerBackground,otherwise shadow can not be show. - *@warning this function maybe effect fps, you should set rasterize to reduce impact. and you can set shadowPath to reduce consumption of cpu. the layerBackground must be setted. - */ -+ (CALayer *)dd_layerWithShadowColor:(CGColorRef)shadowColor shadowOffset:(CGSize)shadowOffset shadowRadius:(CGFloat)shadowRadius shadowOpacity:(CGFloat)shadowOpacity cornerRadius:(CGFloat)cornerRadius layerBackground:(nullable CGColorRef)layerBackground; -/** - *the view transfer this function must already has setted background. - */ -- (void)dd_layerWithShadowColor:(CGColorRef)shadowColor shadowOffset:(CGSize)shadowOffset shadowRadius:(CGFloat)shadowRadius shadowOpacity:(CGFloat)shadowOpacity cornerRadius:(CGFloat)cornerRadius layerBackground:(nullable CGColorRef)layerBackground; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/CALayer+DDCategory/CALayer+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/CALayer+DDCategory/CALayer+DDCategory.m deleted file mode 100644 index 6a39230..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/CALayer+DDCategory/CALayer+DDCategory.m +++ /dev/null @@ -1,41 +0,0 @@ -// -// CALayer+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/7/29. - -#import "CALayer+DDCategory.h" - -@implementation CALayer (DDCategory) -+ (CALayer *)dd_layerWithShadowColor:(CGColorRef)shadowColor shadowOffset:(CGSize)shadowOffset shadowRadius:(CGFloat)shadowRadius shadowOpacity:(CGFloat)shadowOpacity cornerRadius:(CGFloat)cornerRadius layerBackground:(nullable CGColorRef)layerBackground{ - CALayer *layer = [CALayer layer]; - - layer.shadowColor = shadowColor; - layer.shadowOffset = shadowOffset; - layer.shadowRadius = shadowRadius; - layer.shadowOpacity = shadowOpacity; - - layer.cornerRadius = cornerRadius; - - layer.backgroundColor = layerBackground; - - layer.shouldRasterize = YES; - layer.rasterizationScale = UIScreen.mainScreen.scale; - return layer; -} - -- (void)dd_layerWithShadowColor:(CGColorRef)shadowColor shadowOffset:(CGSize)shadowOffset shadowRadius:(CGFloat)shadowRadius shadowOpacity:(CGFloat)shadowOpacity cornerRadius:(CGFloat)cornerRadius layerBackground:(nullable CGColorRef)layerBackground{ - if (!self) return ; - - self.shadowColor = shadowColor; - self.shadowOffset = shadowOffset; - self.shadowRadius = shadowRadius; - self.shadowOpacity = shadowOpacity; - - self.cornerRadius = cornerRadius; - - self.backgroundColor = layerBackground; - - self.shouldRasterize = YES; - self.rasterizationScale = UIScreen.mainScreen.scale; -} -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/DDCategory.h deleted file mode 100644 index 9f453a8..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/DDCategory.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/7/29. - -#ifndef DDCategory_h -#define DDCategory_h - -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import - -#endif /* DDCategory_h */ diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSAttributedString+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSAttributedString+DDCategory.h deleted file mode 100644 index 342836b..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSAttributedString+DDCategory.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// NSAttributedString+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/7/29. - -#import - -// NSFontAttributeName 设置字体属性,默认值:字体:Helvetica(Neue) 字号:12 -// NSForegroundColorAttributeName 设置字体颜色,取值为 UIColor对象,默认值为黑色 -// NSBackgroundColorAttributeName 设置字体所在区域背景颜色,取值为 UIColor对象,默认值为nil, 透明色 -// NSLigatureAttributeName 设置连体属性,取值为NSNumber 对象(整数),0 表示没有连体字符,1 表示使用默认的连体字符 -// NSKernAttributeName 设定字符间距,取值为 NSNumber 对象(整数),正值间距加宽,负值间距变窄 -// NSStrikethroughStyleAttributeName 设置删除线,取值为 NSNumber 对象(整数) -// NSStrikethroughColorAttributeName 设置删除线颜色,取值为 UIColor 对象,默认值为黑色 -// NSUnderlineStyleAttributeName 设置下划线,取值为 NSNumber 对象(整数),枚举常量 NSUnderlineStyle中的值,与删除线类似 -// NSUnderlineColorAttributeName 设置下划线颜色,取值为 UIColor 对象,默认值为黑色 -// NSStrokeWidthAttributeName 设置笔画宽度,取值为 NSNumber 对象(整数),负值填充效果,正值中空效果 -// NSStrokeColorAttributeName 填充部分颜色,不是字体颜色,取值为 UIColor 对象 -// NSShadowAttributeName 设置阴影属性,取值为 NSShadow 对象 -// NSTextEffectAttributeName 设置文本特殊效果,取值为 NSString 对象,目前只有图版印刷效果可用: -// NSBaselineOffsetAttributeName 设置基线偏移值,取值为 NSNumber (float),正值上偏,负值下偏 -// NSObliquenessAttributeName 设置字形倾斜度,取值为 NSNumber (float),正值右倾,负值左倾 -// NSExpansionAttributeName 设置文本横向拉伸属性,取值为 NSNumber (float),正值横向拉伸文本,负值横向压缩文本 -// NSWritingDirectionAttributeName 设置文字书写方向,从左向右书写或者从右向左书写 -// NSVerticalGlyphFormAttributeName 设置文字排版方向,取值为 NSNumber 对象(整数),0 表示横排文本,1 表示竖排文本 -// NSLinkAttributeName 设置链接属性,点击后调用浏览器打开指定URL地址 -// NSAttachmentAttributeName 设置文本附件,取值为NSTextAttachment对象,常用于文字图片混排 -// NSParagraphStyleAttributeName 设置文本段落排版格式,取值为 NSParagraphStyle 对象  - -NS_ASSUME_NONNULL_BEGIN - -@interface NSAttributedString (DDCategory) -/** - @param string NSString. - @param attrs @{NSAttributedStringKey : value}. - */ -- (NSAttributedString *)dd_initWithString:(NSString *)string attributes:(nullable NSDictionary *)attrs; -/** - * return mutableAttributedString. - */ -- (NSMutableAttributedString *)dd_mutable; - -/** - *@param textAttachment textAttachment can contain image. - */ -+ (NSAttributedString *)dd_attributedStringWithAttachment:(NSTextAttachment *)textAttachment; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSAttributedString+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSAttributedString+DDCategory.m deleted file mode 100644 index 6ad3f8d..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSAttributedString+DDCategory.m +++ /dev/null @@ -1,23 +0,0 @@ -// -// NSAttributedString+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/7/29. - -#import "NSAttributedString+DDCategory.h" - -@implementation NSAttributedString (DDCategory) - -- (NSAttributedString *)dd_initWithString:(NSString *)string attributes:(nullable NSDictionary *)attrs{ - return [[NSAttributedString alloc] initWithString:string attributes:attrs]; -} - -- (NSMutableAttributedString *)dd_mutable -{ - return [[NSMutableAttributedString alloc] initWithAttributedString:self]; -} - -+ (NSAttributedString *)dd_attributedStringWithAttachment:(NSTextAttachment *)textAttachment{ - return [NSAttributedString attributedStringWithAttachment:textAttachment]; - -} -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSMutableAttributedString+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSMutableAttributedString+DDCategory.h deleted file mode 100644 index de95011..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSMutableAttributedString+DDCategory.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// NSMutableAttributedString+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/7/29. - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface NSMutableAttributedString (DDCategory) -/** - *@param string this string will be a mutableAttributedString with attrs. - *@param attrs @{NSAttributedStringKey : value}. - */ -- (NSMutableAttributedString *)dd_appendString:(NSString *)string attributes:(nullable NSDictionary *)attrs; -/** - *return a unmutableAttributedString. - */ -- (NSAttributedString *)dd_immutable; - -/** - *@param attributedString attributedString - */ -- (NSMutableAttributedString *)dd_appendAttributedString:(NSAttributedString *)attributedString; - -/** - @param pattern RegularExpressionWithPattern. - @param attrs pattern be matched will be with attrs. - */ -- (NSMutableAttributedString *)dd_matchesRegularExpressionWithPattern:(NSString *)pattern withAttributes:(nullable NSDictionary *)attrs; - -/** - @param pattern RegularExpressionWithPattern. - @param attrs the first pattern be matched will be with attrs. - */ -- (NSMutableAttributedString *)dd_firstMatchesRegularExpressionWithPattern:(NSString *)pattern withAttributes:(nullable NSDictionary *)attrs; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSMutableAttributedString+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSMutableAttributedString+DDCategory.m deleted file mode 100644 index 7ca6d41..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSMutableAttributedString+DDCategory.m +++ /dev/null @@ -1,66 +0,0 @@ -// -// NSMutableAttributedString+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/7/29. - -#import "NSMutableAttributedString+DDCategory.h" -#import "NSAttributedString+DDCategory.h" - -@implementation NSMutableAttributedString (DDCategory) - -- (NSMutableAttributedString *)dd_appendString:(NSString *)string attributes:(nullable NSDictionary *)attrs{ - // while self is not init yet, return string - if (self.length == 0) { - return [[NSMutableAttributedString alloc] initWithString:string attributes:attrs]; - } - [self appendAttributedString:[[NSMutableAttributedString alloc] dd_initWithString:string attributes:attrs]]; - return self; -} - -- (NSMutableAttributedString *)dd_appendAttributedString:(NSAttributedString *)attributedString{ - [self appendAttributedString:attributedString]; - return self; -} - -- (NSAttributedString *)dd_immutable{ - return [[NSAttributedString alloc] initWithAttributedString:self]; -} - -- (NSMutableAttributedString *)dd_matchesRegularExpressionWithPattern:(NSString *)pattern withAttributes:(NSDictionary *)attrs{ - if (attrs == nil || [attrs isEqualToDictionary:@{}]) { - return self; - } - NSError *error; - NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error]; - - __weak typeof(self) weakSelf = self; - [expression enumerateMatchesInString:self.string options:NSMatchingReportProgress range:NSMakeRange(0, self.string.length) usingBlock:^(NSTextCheckingResult * _Nullable result, NSMatchingFlags flags, BOOL * _Nonnull stop) { - __strong typeof(weakSelf) strongSelf = weakSelf; - - [attrs enumerateKeysAndObjectsUsingBlock:^(NSAttributedStringKey _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { - [strongSelf addAttribute:key value:obj range:[result range]]; - }]; - - }]; - - return self; -} - -- (NSMutableAttributedString *)dd_firstMatchesRegularExpressionWithPattern:(NSString *)pattern withAttributes:(NSDictionary *)attrs{ - if (attrs == nil || [attrs isEqualToDictionary:@{}]) { - return self; - } - NSError *error; - NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error]; - - NSRange range = [expression rangeOfFirstMatchInString:self.string options:NSMatchingReportProgress range:NSMakeRange(0, self.string.length)]; - - __weak typeof(self) weakSelf = self; - [attrs enumerateKeysAndObjectsUsingBlock:^(NSAttributedStringKey _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { - __strong typeof(weakSelf) strongSelf = weakSelf; - [strongSelf addAttribute:key value:obj range:range]; - }]; - - return self; -} -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSMutableParagraphStyle+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSMutableParagraphStyle+DDCategory.h deleted file mode 100644 index 2f7db19..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSMutableParagraphStyle+DDCategory.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// NSMutableParagraphStyle+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/7/29. - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface NSMutableParagraphStyle (DDCategory) -/** - *@param lineSpace line space - *@param paragraphSpacing paragraph spacing,the effect with '\n' - *@param alignment text alignment - *@param firstLineHeadIndent firstLineHeadIndent, the effect with '\n' - */ -+ (NSMutableParagraphStyle *)dd_initWithLineSpacing:(CGFloat)lineSpace paragraphSpacing:(CGFloat)paragraphSpacing alignment:(NSTextAlignment)alignment firstLineHeadIndent:(CGFloat)firstLineHeadIndent; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSMutableParagraphStyle+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSMutableParagraphStyle+DDCategory.m deleted file mode 100644 index 6180115..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSMutableParagraphStyle+DDCategory.m +++ /dev/null @@ -1,17 +0,0 @@ -// -// NSMutableParagraphStyle+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/7/29. - -#import "NSMutableParagraphStyle+DDCategory.h" - -@implementation NSMutableParagraphStyle (DDCategory) -+ (NSMutableParagraphStyle *)dd_initWithLineSpacing:(CGFloat)lineSpace paragraphSpacing:(CGFloat)paragraphSpacing alignment:(NSTextAlignment)alignment firstLineHeadIndent:(CGFloat)firstLineHeadIndent{ - NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init]; - paragraph.lineSpacing = lineSpace; - paragraph.paragraphSpacing = paragraphSpacing; - paragraph.alignment = alignment; - paragraph.firstLineHeadIndent = firstLineHeadIndent; - return paragraph; -} -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSBundle+DDCategory/NSBundle+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSBundle+DDCategory/NSBundle+DDCategory.h deleted file mode 100644 index a1fdd4f..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSBundle+DDCategory/NSBundle+DDCategory.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// NSBundle+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/7/29. - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface NSBundle (DDCategory) -- (nullable NSBundle *)bundleWithName:(NSString *)bundleName aClass:(Class)aClass; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSBundle+DDCategory/NSBundle+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSBundle+DDCategory/NSBundle+DDCategory.m deleted file mode 100644 index 0aac57f..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSBundle+DDCategory/NSBundle+DDCategory.m +++ /dev/null @@ -1,20 +0,0 @@ -// -// NSBundle+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/7/29. - -#import "NSBundle+DDCategory.h" - -@implementation NSBundle (DDCategory) -- (nullable NSBundle *)bundleWithName:(NSString *)bundleName aClass:(Class)aClass{ - NSString *bundlePath = [[NSBundle bundleForClass:aClass].resourcePath stringByAppendingPathComponent:bundleName]; - - NSString *bundleType = @".bundle"; - if (![bundlePath hasSuffix:bundleType]) { - bundlePath = [bundlePath stringByAppendingString:bundleType]; - } - - NSBundle *sourceBundle = [NSBundle bundleWithPath:bundlePath]; - return sourceBundle; -} -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSObject+DDCategory/NSObject+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSObject+DDCategory/NSObject+DDCategory.h deleted file mode 100644 index 3c1fbe5..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSObject+DDCategory/NSObject+DDCategory.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// NSObject+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/7/29. - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface NSObject (DDCategory) -+ (void)dd_class:(Class)class originSelector:(SEL)originSelector swizzleSelector:(SEL)swizzleSelector; - -+ (void)dd_originSelector:(SEL)originSelector swizzleSelector:(SEL)swizzleSelector; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSObject+DDCategory/NSObject+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSObject+DDCategory/NSObject+DDCategory.m deleted file mode 100644 index c4afa96..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSObject+DDCategory/NSObject+DDCategory.m +++ /dev/null @@ -1,33 +0,0 @@ -// -// NSObject+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/7/29. - -#import "NSObject+DDCategory.h" -#import - -@implementation NSObject (DDCategory) -+ (void)dd_class:(Class)class originSelector:(SEL)originSelector swizzleSelector:(SEL)swizzleSelector{ - - Method originMethod = class_getInstanceMethod(class, originSelector); - Method swizzleMethod = class_getInstanceMethod(class, swizzleSelector); - BOOL success = class_addMethod(class, originSelector, method_getImplementation(swizzleMethod), method_getTypeEncoding(swizzleMethod)); - if (success){ - class_replaceMethod(class, swizzleSelector, method_getImplementation(originMethod), method_getTypeEncoding(originMethod)); - }else{ - method_exchangeImplementations(originMethod, swizzleMethod); - } -} - -+ (void)dd_originSelector:(SEL)originSelector swizzleSelector:(SEL)swizzleSelector{ - Class class = [self class]; - Method originMethod = class_getInstanceMethod(class, originSelector); - Method swizzleMethod = class_getInstanceMethod(class, swizzleSelector); - BOOL success = class_addMethod(class, originSelector, method_getImplementation(swizzleMethod), method_getTypeEncoding(swizzleMethod)); - if (success){ - class_replaceMethod(class, swizzleSelector, method_getImplementation(originMethod), method_getTypeEncoding(originMethod)); - }else{ - method_exchangeImplementations(originMethod, swizzleMethod); - } -} -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSThread+DDCategory/NSThread+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSThread+DDCategory/NSThread+DDCategory.h deleted file mode 100644 index 7e2fde2..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSThread+DDCategory/NSThread+DDCategory.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// NSThread+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/12/28. - - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface NSThread (DDCategory) - -+ (instancetype)defaultRunThread; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSThread+DDCategory/NSThread+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSThread+DDCategory/NSThread+DDCategory.m deleted file mode 100644 index 2805add..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSThread+DDCategory/NSThread+DDCategory.m +++ /dev/null @@ -1,20 +0,0 @@ -// -// NSThread+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/12/28. - - -#import "NSThread+DDCategory.h" -#import - -@implementation NSThread (DDCategory) -+ (instancetype)defaultRunThread{ - return [[NSThread alloc] initWithBlock:^{ - NSRunLoop *currentRunLoop = [NSRunLoop currentRunLoop]; - while (!NSThread.currentThread.isCancelled) { - [currentRunLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate date]]; - } - NSAssert([NSThread currentThread].isCancelled, @"%@ 子线程即将 'exit' ",[NSThread currentThread]); - }];; -} -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSUrl+DDCategory/NSURL+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSUrl+DDCategory/NSURL+DDCategory.h deleted file mode 100644 index f5c113c..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSUrl+DDCategory/NSURL+DDCategory.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// NSURL+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/6. - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface NSURL (DDCategory) -+ (NSURL *)encodingUrlString:(NSString *)urlString withAllowedCharactersString:(nullable NSString *)allowedCharactersString; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSUrl+DDCategory/NSURL+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSUrl+DDCategory/NSURL+DDCategory.m deleted file mode 100644 index 69e0920..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSUrl+DDCategory/NSURL+DDCategory.m +++ /dev/null @@ -1,15 +0,0 @@ -// -// NSURL+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/6. - -#import "NSURL+DDCategory.h" - -@implementation NSURL (DDCategory) -+ (NSURL *)encodingUrlString:(NSString *)urlString withAllowedCharactersString:(nullable NSString *)allowedCharactersString{ - if (allowedCharactersString == nil) { - allowedCharactersString = @"\"#%<>[\\]^`{|}"; - } - return [self URLWithString:[urlString stringByAddingPercentEncodingWithAllowedCharacters:[[NSCharacterSet characterSetWithCharactersInString:allowedCharactersString] invertedSet]]]; -} -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIApplication+DDCategory/UIApplication+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIApplication+DDCategory/UIApplication+DDCategory.h deleted file mode 100644 index 31a52c6..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIApplication+DDCategory/UIApplication+DDCategory.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// UIApplication+DDCategory.h -// DDCategoryKit_Private -// -// Created by 中道 on 2023/2/6. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UIApplication (DDCategory) -@property (nonatomic, strong, readonly)UIWindow *dd_keyWindow; -@property (nonatomic, assign, readonly)CGRect dd_statusBarFrame; - -- (UIWindow *)dd_keyWindow; -- (CGRect)dd_statusBarFrame; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIApplication+DDCategory/UIApplication+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIApplication+DDCategory/UIApplication+DDCategory.m deleted file mode 100644 index 7c66d2f..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIApplication+DDCategory/UIApplication+DDCategory.m +++ /dev/null @@ -1,88 +0,0 @@ -// -// UIApplication+DDCategory.m -// DDCategoryKit_Private -// -// Created by 中道 on 2023/2/6. -// - -#import "UIApplication+DDCategory.h" - -@implementation UIApplication (DDCategory) -@dynamic dd_keyWindow; -@dynamic dd_statusBarFrame; - -- (UIWindow *)dd_keyWindow{ - - static __weak UIWindow *cachedKeyWindow = nil; - UIWindow *originalKeyWindow = nil; - - #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 - if (@available(iOS 13.0, *)) { - NSSet *connectedScenes = [UIApplication sharedApplication].connectedScenes; - for (UIScene *scene in connectedScenes) { - if (scene.activationState == UISceneActivationStateForegroundActive && [scene isKindOfClass:[UIWindowScene class]]) { - UIWindowScene *windowScene = (UIWindowScene *)scene; - for (UIWindow *window in windowScene.windows) { - if (window.isKeyWindow) { - originalKeyWindow = window; - break; - } - } - } - } - } else - #endif - { - #if __IPHONE_OS_VERSION_MIN_REQUIRED < 130000 - originalKeyWindow = [UIApplication sharedApplication].keyWindow; - #endif - } - - // app以storyboard启动的时候keyWindow未就绪 - if (originalKeyWindow == nil) { - #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 - if (@available(iOS 13.0, *)) { - NSSet *connectedScenes = [UIApplication sharedApplication].connectedScenes; - for (UIScene *scene in connectedScenes) { - if ([scene isKindOfClass:[UIWindowScene class]]) { - UIWindowScene *windowScene = (UIWindowScene *)scene; - originalKeyWindow = windowScene.windows.firstObject; - break; - } - } - } else - #endif - { - #if __IPHONE_OS_VERSION_MIN_REQUIRED < 130000 - originalKeyWindow = [UIApplication sharedApplication].windows.firstObject; - #endif - } - } - - //If original key window is not nil and the cached keywindow is also not original keywindow then changing keywindow. - if (originalKeyWindow) - { - cachedKeyWindow = originalKeyWindow; - } - - return cachedKeyWindow; -} - -- (CGRect)dd_statusBarFrame{ - CGRect statusBarFrame = CGRectZero; - - #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 - if (@available(iOS 13.0, *)) { - UIWindow *window = [self dd_keyWindow]; - statusBarFrame = window.windowScene.statusBarManager.statusBarFrame; - } else - #endif - { - #if __IPHONE_OS_VERSION_MIN_REQUIRED < 130000 - statusBarFrame = [UIApplication sharedApplication].statusBarFrame; - #endif - } - return statusBarFrame; -} - -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIBarButtonItem+DDCategory/UIBarButtonItem+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIBarButtonItem+DDCategory/UIBarButtonItem+DDCategory.h deleted file mode 100644 index 3f4ff23..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIBarButtonItem+DDCategory/UIBarButtonItem+DDCategory.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// UIBarButtonItem+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/6. - -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(NSUInteger, DDBarButtonItemPlacement) { - DDBarButtonItemPlacementLeft, - DDBarButtonItemPlacementRight, -}; - -@interface UIBarButtonItem (DDCategory) -/// @param buttons 按钮数组 -/// @param itemPadding 两个按钮间的间距 -/// @param placement barButtonItems在导航栏的位置 -+ (NSArray *)dd_barButtonItemsWithButtons:(NSArray *)buttons itemPadding:(CGFloat)itemPadding placement:(DDBarButtonItemPlacement)placement; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIBarButtonItem+DDCategory/UIBarButtonItem+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIBarButtonItem+DDCategory/UIBarButtonItem+DDCategory.m deleted file mode 100644 index f111d6d..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIBarButtonItem+DDCategory/UIBarButtonItem+DDCategory.m +++ /dev/null @@ -1,49 +0,0 @@ -// -// UIBarButtonItem+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/6. - -#import "UIBarButtonItem+DDCategory.h" - -@implementation UIBarButtonItem (DDCategory) -+ (NSArray *)dd_barButtonItemsWithButtons:(NSArray *)buttons itemPadding:(CGFloat)itemPadding placement:(DDBarButtonItemPlacement)placement{ - UIView *backgroundView = [UIView new]; - - // offset为backgroundView整体向右的偏移量 - __block CGFloat offset = 0; - __block CGFloat backgroundViewWidth = 0.0; - __block CGFloat buttonInBackgroundViewX = 0.0; - __block CGFloat maxHeight = 0.0; - - [buttons enumerateObjectsUsingBlock:^(UIButton * _Nonnull btn, NSUInteger idx, BOOL * _Nonnull stop) { - if (CGRectEqualToRect(btn.frame, CGRectZero)) { - [btn sizeToFit]; - } - CGFloat btnWidth = btn.frame.size.width; - CGFloat btnHeight = btn.frame.size.height; - - btn.frame = CGRectMake(buttonInBackgroundViewX, 0, btnWidth, btnHeight); - if (placement == DDBarButtonItemPlacementLeft) { - btn.contentEdgeInsets = UIEdgeInsetsMake(0, -offset, 0, 0); - }else if (placement == DDBarButtonItemPlacementRight){ - btn.contentEdgeInsets = UIEdgeInsetsMake(0, 0, 0, -offset); - } - [backgroundView addSubview:btn]; - - // 两个按钮在barButtonItem上是有间隙的 - backgroundViewWidth = btnWidth + backgroundViewWidth + (idx != (buttons.count - 1) ? itemPadding : 0); - buttonInBackgroundViewX = buttonInBackgroundViewX + btnWidth + offset + (idx != (buttons.count - 1) ? itemPadding : 0); - if (btn.frame.size.height > maxHeight) { - maxHeight = btn.frame.size.height; - } - }]; - backgroundView.frame = CGRectMake(0, 0, backgroundViewWidth, maxHeight); - - // 这个space会将整体的rightBarButtonItem向右偏移一段距离,大概是7,8个pt - UIBarButtonItem *spaceItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; - UIBarButtonItem *customItem = [[UIBarButtonItem alloc] initWithCustomView:backgroundView]; - - return @[spaceItem,customItem]; -} - -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIButton+DDCategory/UIButton+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIButton+DDCategory/UIButton+DDCategory.h deleted file mode 100644 index e539474..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIButton+DDCategory/UIButton+DDCategory.h +++ /dev/null @@ -1,97 +0,0 @@ -// -// UIButton+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/7/29. - -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(NSUInteger, DDCustomButtonState) { - DDCustomButtonStateNormal, - DDCustomButtonStateSelected, - DDCustomButtonStateHighlight, -}; - -typedef NS_ENUM(NSInteger, DDCustomButtonStyle) { - /** - * image is left of the button,title is right, image and title is whole center. - */ - ImageLeftPaddingTitleRightWithWholeCenter = 0, - /** - * image is right of the button, title is left , image and title is whole center. - */ - ImageRightPaddingTitleLeftWithWholeCenter, - /** - * image is top of the button,title is bottom, image and title is whole center. - */ - ImageTopPaddingTitleBottomWithWholeCenter, - /** - *image is bottom of the button,title is top, image and title is whole center. - */ - ImageBottomPaddingTitleTopWithWholeCenter, -}; - -@interface UIButton (DDCategory) -/** - * return a instance of custom button - */ -+ (instancetype)dd_initCustomButton; - -- (instancetype)dd_addTarget:(nullable id)target action:(nonnull SEL)action forControlEvents:(UIControlEvents)controlEvents; - -@end - -typedef NSString * DDCustomButtonAttributedStringKey NS_TYPED_EXTENSIBLE_ENUM; - -FOUNDATION_EXPORT const DDCustomButtonAttributedStringKey DDCustomButtonAttributedStringState; -FOUNDATION_EXPORT const DDCustomButtonAttributedStringKey DDCustomButtonAttributedStringAttributedText; -FOUNDATION_EXPORT const DDCustomButtonAttributedStringKey DDCustomButtonAttributedStringImage; - -@interface UIButton (AttributedString) -+ (instancetype)dd_initWithAttributedTitles:(NSArray *> *)attributedTitles; - -+ (instancetype)dd_initWithImages:(nullable NSArray *> *)images; - -+ (instancetype)dd_initWithBackgroundColor:(UIColor *)backgroundColor; -/** - * return a instance of custom button - * @param attributedTitles button attributedTitle example: @[@{DDCustomButtonAttributedStringStateName : @(DDCustomButtonStateNormal.rawValue),DDCustomButtonAttributedStringTextName : attributedString}] - * @param images button images - * @param backgroundColor button backgroundColor - */ -+ (instancetype)dd_initWithAttributedTitles:(nullable NSArray *> *)attributedTitles images:(nullable NSArray *> *)images backgroundColor:(nullable UIColor *)backgroundColor; - -/** - * return a instance of custom button - * @param buttonType button type - * @param attributedTitles button attributedTitle example: @[@{DDCustomButtonAttributedStringStateName : @(DDCustomButtonStateNormal.rawValue),DDCustomButtonAttributedStringTextName : attributedString}] - * @param images button images - * @param backgroundColor button backgroundColor - */ -+ (instancetype)dd_initWithType:(UIButtonType)buttonType attributedTitles:(nullable NSArray *> *)attributedTitles images:(nullable NSArray *> *)images backgroundColor:(nullable UIColor *)backgroundColor; - -/** - * return a instance of custom button - * @param attributedTitles button attributedTitle example: @[@{DDCustomButtonAttributedStringStateName : @(DDCustomButtonStateNormal.rawValue),DDCustomButtonAttributedStringTextName : attributedString}] - * @param images button images - * @param backgroundColor button backgroundColor - */ -- (instancetype)dd_setAttributedTitles:(nullable NSArray *> *)attributedTitles images:(nullable NSArray *> *)images backgroundColor:(nullable UIColor *)backgroundColor; - -- (instancetype)dd_setAttributedTitles:(nullable NSArray *> *)attributedTitles; -- (instancetype)dd_setImages:(nullable NSArray *> *)images; -- (instancetype)dd_setBackgroundColor:(nullable UIColor *)backgroundColor; - -@end - -@interface UIButton (Placement) -/** - * layout image and title position. - * @param style ButtonImageTitleStyle - * @param padding image and title padding - * @warning use this function after button already has frame, image and title is not nil,such as user use masonry to constraint button, you should transfer layoutIfNeeded before to sure button has already bounds, example:sizeToFit(). - */ -- (instancetype)dd_customizeWithStyle:(DDCustomButtonStyle)style padding:(CGFloat)padding; -@end -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIButton+DDCategory/UIButton+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIButton+DDCategory/UIButton+DDCategory.m deleted file mode 100644 index d3e4277..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIButton+DDCategory/UIButton+DDCategory.m +++ /dev/null @@ -1,412 +0,0 @@ -// -// UIButton+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/7/29. - -#import "UIButton+DDCategory.h" -#import - -DDCustomButtonAttributedStringKey const DDCustomButtonAttributedStringState = @"DDCustomButtonAttributedStringStateName"; -DDCustomButtonAttributedStringKey const DDCustomButtonAttributedStringAttributedText = @"DDCustomButtonAttributedStringTextName"; -DDCustomButtonAttributedStringKey const DDCustomButtonAttributedStringImage = @"DDCustomButtonAttributedStringImage"; - -@implementation UIButton (DDCategory) -+ (void)load{ - - static dispatch_once_t onceToken; - __weak typeof(self) weakSelf = self; - dispatch_once(&onceToken, ^{ - __strong typeof(weakSelf) strongSelf = weakSelf; - - [strongSelf dd_originSelector:@selector(pointInside:withEvent:) swizzleSelector:@selector(dd_pointInside:withEvent:)]; - [strongSelf dd_originSelector:@selector(layoutSubviews) swizzleSelector:@selector(dd_layoutSubviews)]; - - }); - -} -+ (instancetype)dd_initCustomButton{ - return [UIButton buttonWithType:UIButtonTypeCustom]; -} - -- (instancetype)dd_addTarget:(nullable id)target action:(nonnull SEL)action forControlEvents:(UIControlEvents)controlEvents { - [self addTarget:target action:action forControlEvents:controlEvents]; - return self; -} - -- (void)dd_layoutSubviews{ - [self dd_layoutSubviews]; - -} - -/** - * if another button is added to the view beside the button added before, it is too close less the widthDelta, the valid touch area is belong to the button added later. - */ -- (BOOL)dd_pointInside:(CGPoint)point withEvent:(UIEvent*)event -{ -// if (UIEdgeInsetsEqualToEdgeInsets(self.hitTestEdgeInsets, UIEdgeInsetsZero)) { -// return [self dd_pointInside:point withEvent:event]; -// } - - CGRect bounds = self.bounds; - - CGFloat widthDelta = MAX(44.0 - bounds.size.width, 0); - - CGFloat heightDelta = MAX(44.0 - bounds.size.height, 0); - - bounds = CGRectInset(bounds, -0.5 * widthDelta, -0.5 * heightDelta); - - return CGRectContainsPoint(bounds, point); -} -@end - -@implementation UIButton (AttributedString) - -+ (instancetype)dd_initWithAttributedTitles:(NSArray *> *)attributedTitles -{ - return [self dd_initWithAttributedTitles:attributedTitles images:nil backgroundColor:nil]; -} - -+ (instancetype)dd_initWithImages:(nullable NSArray *> *)images -{ - return [self dd_initWithAttributedTitles:nil images:images backgroundColor:nil]; -} - -+ (instancetype)dd_initWithBackgroundColor:(UIColor *)backgroundColor{ - return [self dd_initWithAttributedTitles:nil images:nil backgroundColor:backgroundColor]; -} - -+ (instancetype)dd_initWithAttributedTitles:(nullable NSArray *> *)attributedTitles images:(nullable NSArray *> *)images backgroundColor:(nullable UIColor *)backgroundColor { - return [UIButton dd_initWithType:UIButtonTypeCustom attributedTitles:attributedTitles images:images backgroundColor:backgroundColor]; -} - -+ (instancetype)dd_initWithType:(UIButtonType)buttonType attributedTitles:(nullable NSArray *> *)attributedTitles images:(nullable NSArray *> *)images backgroundColor:(nullable UIColor *)backgroundColor { - return [[UIButton buttonWithType:buttonType] dd_setAttributedTitles:attributedTitles images:images backgroundColor:backgroundColor]; -} - -- (instancetype)dd_setAttributedTitles:(nullable NSArray *> *)attributedTitles images:(nullable NSArray *> *)images backgroundColor:(nullable UIColor *)backgroundColor { -// if (@available(iOS 15.0, *)) { -// UIButtonConfiguration *configuration = self.configuration; -// if (configuration == nil){ -// configuration = [UIButtonConfiguration plainButtonConfiguration]; -// self.configuration = configuration; -// } -// -// configuration.baseBackgroundColor = backgroundColor; -// self.configuration = configuration; -// self.backgroundColor = backgroundColor; -// -// __weak typeof(self) weakSelf = self; -// self.configurationUpdateHandler = ^(UIButton *button){ -// __strong typeof(weakSelf) strongSelf = weakSelf; -// -// NSAttributedString *textAttributes = nil; -// UIImage *image = nil; -// for (NSDictionary *dict in attributedTitles) { -// if ([dict[DDCustomButtonAttributedStringState] isEqualToNumber:@(DDCustomButtonStateNormal)]) { -// textAttributes = dict[DDCustomButtonAttributedStringAttributedText]; -// }else if ([dict[DDCustomButtonAttributedStringState] isEqualToNumber:@(DDCustomButtonStateSelected)]){ -// textAttributes = dict[DDCustomButtonAttributedStringAttributedText]; -// }else if ([dict[DDCustomButtonAttributedStringState] isEqualToNumber:@(DDCustomButtonStateHighlight)]){ -// textAttributes = dict[DDCustomButtonAttributedStringAttributedText]; -// } -// } -// -// for (NSDictionary *dict in images){ -// if ([dict[DDCustomButtonAttributedStringState] isEqualToNumber:@(DDCustomButtonStateNormal)]) { -// if(![dict[DDCustomButtonAttributedStringImage] isKindOfClass:[NSNull class]]){ -// image = dict[DDCustomButtonAttributedStringImage]; -// } -// }else if ([dict[DDCustomButtonAttributedStringState] isEqualToNumber:@(DDCustomButtonStateSelected)]){ -// if(![dict[DDCustomButtonAttributedStringImage] isKindOfClass:[NSNull class]]){ -// image = dict[DDCustomButtonAttributedStringImage]; -// } -// }else if ([dict[DDCustomButtonAttributedStringState] isEqualToNumber:@(DDCustomButtonStateHighlight)]){ -// if(![dict[DDCustomButtonAttributedStringImage] isKindOfClass:[NSNull class]]){ -// image = dict[DDCustomButtonAttributedStringImage]; -// } -// } -// } -// -// configuration.attributedTitle = textAttributes; -// configuration.image = image; -// strongSelf.configuration = configuration; -// }; -// -// }else{ -// self.adjustsImageWhenHighlighted = false; -// [self setBackgroundColor:backgroundColor]; -// for (NSDictionary *dict in attributedTitles) { -// if ([dict[DDCustomButtonAttributedStringState] isEqualToNumber:@(DDCustomButtonStateNormal)]) { -// [self setAttributedTitle:dict[DDCustomButtonAttributedStringAttributedText] forState:UIControlStateNormal]; -// }else if ([dict[DDCustomButtonAttributedStringState] isEqualToNumber:@(DDCustomButtonStateSelected)]){ -// [self setAttributedTitle:dict[DDCustomButtonAttributedStringAttributedText] forState:UIControlStateSelected]; -// }else if ([dict[DDCustomButtonAttributedStringState] isEqualToNumber:@(DDCustomButtonStateHighlight)]){ -// [self setAttributedTitle:dict[DDCustomButtonAttributedStringAttributedText] forState:UIControlStateHighlighted]; -// } -// -// } -// for (NSDictionary *dict in images){ -// if ([dict[DDCustomButtonAttributedStringState] isEqualToNumber:@(DDCustomButtonStateNormal)]) { -// if(![dict[DDCustomButtonAttributedStringImage] isKindOfClass:[NSNull class]]){ -// [self setImage:dict[DDCustomButtonAttributedStringImage] forState:UIControlStateNormal]; -// } -// }else if ([dict[DDCustomButtonAttributedStringState] isEqualToNumber:@(DDCustomButtonStateSelected)]){ -// if(![dict[DDCustomButtonAttributedStringImage] isKindOfClass:[NSNull class]]){ -// [self setImage:dict[DDCustomButtonAttributedStringImage] forState:UIControlStateSelected]; -// } -// }else if ([dict[DDCustomButtonAttributedStringState] isEqualToNumber:@(DDCustomButtonStateHighlight)]){ -// if(![dict[DDCustomButtonAttributedStringImage] isKindOfClass:[NSNull class]]){ -// [self setImage:dict[DDCustomButtonAttributedStringImage] forState:UIControlStateHighlighted]; -// } -// } -// } -// } - return [[[self dd_setAttributedTitles:attributedTitles] dd_setImages:images] dd_setBackgroundColor:backgroundColor]; -} - -- (instancetype)dd_setAttributedTitles:(nullable NSArray *> *)attributedTitles{ -// if (@available(iOS 15.0, *)) { -// UIButtonConfiguration *configuration = self.configuration; -// if (configuration == nil){ -// configuration = [UIButtonConfiguration plainButtonConfiguration]; -// self.configuration = configuration; -// } -// -// __weak typeof(self) weakSelf = self; -// self.configurationUpdateHandler = ^(UIButton *button){ -// __strong typeof(weakSelf) strongSelf = weakSelf; -// -// NSAttributedString *textAttributes = nil; -// for (NSDictionary *dict in attributedTitles) { -// if ([dict[DDCustomButtonAttributedStringState] isEqualToNumber:@(DDCustomButtonStateNormal)]) { -// textAttributes = dict[DDCustomButtonAttributedStringAttributedText]; -// }else if ([dict[DDCustomButtonAttributedStringState] isEqualToNumber:@(DDCustomButtonStateSelected)]){ -// textAttributes = dict[DDCustomButtonAttributedStringAttributedText]; -// }else if ([dict[DDCustomButtonAttributedStringState] isEqualToNumber:@(DDCustomButtonStateHighlight)]){ -// textAttributes = dict[DDCustomButtonAttributedStringAttributedText]; -// } -// } -// configuration.attributedTitle = textAttributes; -// strongSelf.configuration = configuration; -// }; -// -// }else{ - self.adjustsImageWhenHighlighted = false; - - for (NSDictionary *dict in attributedTitles) { - if ([dict[DDCustomButtonAttributedStringState] isEqualToNumber:@(DDCustomButtonStateNormal)]) { - [self setAttributedTitle:dict[DDCustomButtonAttributedStringAttributedText] forState:UIControlStateNormal]; - }else if ([dict[DDCustomButtonAttributedStringState] isEqualToNumber:@(DDCustomButtonStateSelected)]){ - [self setAttributedTitle:dict[DDCustomButtonAttributedStringAttributedText] forState:UIControlStateSelected]; - }else if ([dict[DDCustomButtonAttributedStringState] isEqualToNumber:@(DDCustomButtonStateHighlight)]){ - [self setAttributedTitle:dict[DDCustomButtonAttributedStringAttributedText] forState:UIControlStateHighlighted]; - } - - } -// } - return self; -} - -- (instancetype)dd_setImages:(nullable NSArray *> *)images{ -// if (@available(iOS 15.0, *)) { -// UIButtonConfiguration *configuration = self.configuration; -// if (configuration == nil){ -// configuration = [UIButtonConfiguration plainButtonConfiguration]; -// self.configuration = configuration; -// } -// -// __weak typeof(self) weakSelf = self; -// self.configurationUpdateHandler = ^(UIButton *button){ -// __strong typeof(weakSelf) strongSelf = weakSelf; -// -// UIImage *image = nil; -// for (NSDictionary *dict in images){ -// if ([dict[DDCustomButtonAttributedStringState] isEqualToNumber:@(DDCustomButtonStateNormal)]) { -// if(![dict[DDCustomButtonAttributedStringImage] isKindOfClass:[NSNull class]]){ -// image = dict[DDCustomButtonAttributedStringImage]; -// } -// }else if ([dict[DDCustomButtonAttributedStringState] isEqualToNumber:@(DDCustomButtonStateSelected)]){ -// if(![dict[DDCustomButtonAttributedStringImage] isKindOfClass:[NSNull class]]){ -// image = dict[DDCustomButtonAttributedStringImage]; -// } -// }else if ([dict[DDCustomButtonAttributedStringState] isEqualToNumber:@(DDCustomButtonStateHighlight)]){ -// if(![dict[DDCustomButtonAttributedStringImage] isKindOfClass:[NSNull class]]){ -// image = dict[DDCustomButtonAttributedStringImage]; -// } -// } -// } -// configuration.image = image; -// strongSelf.configuration = configuration; -// }; -// -// }else{ - self.adjustsImageWhenHighlighted = false; - - for (NSDictionary *dict in images){ - if ([dict[DDCustomButtonAttributedStringState] isEqualToNumber:@(DDCustomButtonStateNormal)]) { - if(![dict[DDCustomButtonAttributedStringImage] isKindOfClass:[NSNull class]]){ - [self setImage:dict[DDCustomButtonAttributedStringImage] forState:UIControlStateNormal]; - } - }else if ([dict[DDCustomButtonAttributedStringState] isEqualToNumber:@(DDCustomButtonStateSelected)]){ - if(![dict[DDCustomButtonAttributedStringImage] isKindOfClass:[NSNull class]]){ - [self setImage:dict[DDCustomButtonAttributedStringImage] forState:UIControlStateSelected]; - } - }else if ([dict[DDCustomButtonAttributedStringState] isEqualToNumber:@(DDCustomButtonStateHighlight)]){ - if(![dict[DDCustomButtonAttributedStringImage] isKindOfClass:[NSNull class]]){ - [self setImage:dict[DDCustomButtonAttributedStringImage] forState:UIControlStateHighlighted]; - } - } - } -// } - return self; -} - -- (instancetype)dd_setBackgroundColor:(nullable UIColor *)backgroundColor{ -// if (@available(iOS 15.0, *)) { -// UIButtonConfiguration *configuration = self.configuration; -// if (configuration == nil){ -// configuration = [UIButtonConfiguration plainButtonConfiguration]; -// self.configuration = configuration; -// } -// configuration.baseBackgroundColor = backgroundColor; -// self.configuration = configuration; -// self.backgroundColor = backgroundColor; -// -// }else{ - self.adjustsImageWhenHighlighted = false; - [self setBackgroundColor:backgroundColor]; -// } - return self; -} - -@end - -@implementation UIButton (Placement) -- (instancetype)dd_customizeWithStyle:(DDCustomButtonStyle)style padding:(CGFloat)padding -{ - if (self.imageView.image == nil || self.titleLabel.text == nil) return self; - -// if (@available(iOS 15.0,*)) { -// switch (style) { -// case ImageRightPaddingTitleLeftWithWholeCenter: -// { -// UIButtonConfiguration *configuration = self.configuration; -// configuration.imagePlacement = NSDirectionalRectEdgeTrailing; -// configuration.imagePadding = padding; -// self.configuration = configuration; -// break; -// } -// case ImageTopPaddingTitleBottomWithWholeCenter: -// { -// UIButtonConfiguration *configuration = self.configuration; -// if (configuration == nil) { -// configuration = [UIButtonConfiguration plainButtonConfiguration]; -// self.configuration = configuration; -// } -// configuration.imagePlacement = NSDirectionalRectEdgeTop; -// configuration.imagePadding = padding; -// self.configuration = configuration; -// break; -// } -// case ImageBottomPaddingTitleTopWithWholeCenter: -// { -// UIButtonConfiguration *configuration = self.configuration; -// configuration.imagePlacement = NSDirectionalRectEdgeBottom; -// configuration.imagePadding = padding; -// self.configuration = configuration; -// break; -// } -// case ImageLeftPaddingTitleRightWithWholeCenter: -// { -// UIButtonConfiguration *configuration = self.configuration; -// configuration.imagePlacement = NSDirectionalRectEdgeLeading; -// configuration.imagePadding = padding; -// self.configuration = configuration; -// break; -// } -// default: -// break; -// } -// }else{ - // 这是最初的size - CGSize imageSizeOrigin = [self.imageView sizeThatFits:CGSizeZero]; - CGSize titleSizeOrigin = [self.titleLabel sizeThatFits:CGSizeZero]; - CGSize fitSizeOrigin = [self sizeThatFits:CGSizeZero]; - - // 这是向上取整后的size - CGSize imageSize = CGSizeMake(ceilf(imageSizeOrigin.width), ceilf(imageSizeOrigin.height)); - CGSize titleSize = CGSizeMake(ceilf(titleSizeOrigin.width), ceilf(titleSizeOrigin.height)); - CGSize fitSize = CGSizeMake(ceilf(fitSizeOrigin.width), ceilf(fitSizeOrigin.height)); - - // 最后的frame - CGFloat finalFitWidth = 0.0; - - switch (style) { - case ImageLeftPaddingTitleRightWithWholeCenter: - { - finalFitWidth = fitSize.width + padding; - - self.titleEdgeInsets = UIEdgeInsetsMake(0, - padding/2, - 0, - -padding/2); - - self.imageEdgeInsets = UIEdgeInsetsMake(0, - -padding/2, - 0, - padding/2); - } - break; - case ImageRightPaddingTitleLeftWithWholeCenter: - { - finalFitWidth = fitSize.width + padding; - - self.titleEdgeInsets = UIEdgeInsetsMake(0, - -(imageSize.width + padding/2), - 0, - (imageSize.width + padding/2)); - - self.imageEdgeInsets = UIEdgeInsetsMake(0, - (titleSize.width + padding/2), - 0, - -(titleSize.width + padding/2)); - } - break; - case ImageTopPaddingTitleBottomWithWholeCenter: - { - finalFitWidth = imageSize.width > titleSize.width ? imageSize.width : titleSize.width; - // 这里的减掉 (selfSize.width - finalWidth) 是为了去掉边缘的margin,达到正好margin都是0的效果 - self.titleEdgeInsets = UIEdgeInsetsMake(titleSize.height/2.0+padding/2.0+(imageSize.height-titleSize.height)/2.0, - (titleSize.width + imageSize.width)/2.0 - (titleSize.width/2.0 + imageSize.width) - (fitSize.width - finalFitWidth), - -(titleSize.height/2.0+padding/2.0+(imageSize.height-titleSize.height)/2.0), - (titleSize.width/2.0 + imageSize.width) - (titleSize.width + imageSize.width)/2.0 - (fitSize.width - finalFitWidth) ); - - self.imageEdgeInsets = UIEdgeInsetsMake(-(imageSize.height/2.0+padding/2.0-(imageSize.height-titleSize.height)/2.0), - (imageSize.width + titleSize.width)/2.0 - imageSize.width/2.0 - (titleSize.height/2.0 + padding) - (fitSize.width - finalFitWidth), - imageSize.height/2.0+padding/2.0-(imageSize.height-titleSize.height)/2.0, - imageSize.width/2.0 - (imageSize.width + titleSize.width)/2.0 - (titleSize.height/2.0 + padding) - (fitSize.width - finalFitWidth)); - } - break; - case ImageBottomPaddingTitleTopWithWholeCenter: - { - finalFitWidth = imageSize.width > titleSize.width ? imageSize.width : titleSize.width; - // 这里的减掉 (selfSize.width - finalWidth) 是为了去掉边缘的margin,达到正好margin都是0的效果 - self.titleEdgeInsets = UIEdgeInsetsMake(-(titleSize.height/2.0 + padding/2.0), - (imageSize.width + titleSize.width)/2.0 - (titleSize.width/2.0 + imageSize.width) - (fitSize.width - finalFitWidth), - (titleSize.height/2.0 + padding/2.0), - (titleSize.width/2.0 + imageSize.width) - (imageSize.width + titleSize.width)/2.0 - (fitSize.width - finalFitWidth)); - - self.imageEdgeInsets = UIEdgeInsetsMake((imageSize.height/2.0 - padding/2.0), - (imageSize.width + titleSize.width)/2.0 - imageSize.width/2.0 - (fitSize.width - finalFitWidth), - -(imageSize.height/2.0 - padding/2.0), - imageSize.width/2.0 - (imageSize.width + titleSize.width)/2.0 - (fitSize.width - finalFitWidth)); - } - break; - default: - break; - } -// } - - return self; -} -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UICollectionView+DDCategory/UICollectionView+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UICollectionView+DDCategory/UICollectionView+DDCategory.h deleted file mode 100644 index 17a2d8a..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UICollectionView+DDCategory/UICollectionView+DDCategory.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// UICollectionView+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UICollectionView (DDCategory) - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UICollectionView+DDCategory/UICollectionView+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UICollectionView+DDCategory/UICollectionView+DDCategory.m deleted file mode 100644 index dde445a..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UICollectionView+DDCategory/UICollectionView+DDCategory.m +++ /dev/null @@ -1,11 +0,0 @@ -// -// UICollectionView+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import "UICollectionView+DDCategory.h" - -@implementation UICollectionView (DDCategory) - -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UICollectionViewCell+DDCategory/UICollectionViewCell+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UICollectionViewCell+DDCategory/UICollectionViewCell+DDCategory.h deleted file mode 100644 index 2703f60..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UICollectionViewCell+DDCategory/UICollectionViewCell+DDCategory.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// UICollectionViewCell+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UICollectionViewCell (DDCategory) - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UICollectionViewCell+DDCategory/UICollectionViewCell+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UICollectionViewCell+DDCategory/UICollectionViewCell+DDCategory.m deleted file mode 100644 index f85e39c..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UICollectionViewCell+DDCategory/UICollectionViewCell+DDCategory.m +++ /dev/null @@ -1,11 +0,0 @@ -// -// UICollectionViewCell+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import "UICollectionViewCell+DDCategory.h" - -@implementation UICollectionViewCell (DDCategory) - -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIFont+DDCategory/UIFont+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIFont+DDCategory/UIFont+DDCategory.h deleted file mode 100644 index 0f5724b..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIFont+DDCategory/UIFont+DDCategory.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// UIFont+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/6. - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UIFont (DDCategory) - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIFont+DDCategory/UIFont+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIFont+DDCategory/UIFont+DDCategory.m deleted file mode 100644 index 0ec39c1..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIFont+DDCategory/UIFont+DDCategory.m +++ /dev/null @@ -1,10 +0,0 @@ -// -// UIFont+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/6. - -#import "UIFont+DDCategory.h" - -@implementation UIFont (DDCategory) - -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIImage+DDCategory/UIImage+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIImage+DDCategory/UIImage+DDCategory.h deleted file mode 100644 index 5d490a8..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIImage+DDCategory/UIImage+DDCategory.h +++ /dev/null @@ -1,91 +0,0 @@ -// -// UIImage+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/7/29. - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef NSString *DDWaterMarkInfoName NS_TYPED_EXTENSIBLE_ENUM; -typedef NSString *DDWaterMarkLayoutName NS_TYPED_EXTENSIBLE_ENUM; - -FOUNDATION_EXPORT DDWaterMarkInfoName const DDWaterMarkInfoText; -FOUNDATION_EXPORT DDWaterMarkInfoName const DDWaterMarkInfoAttributes; - -FOUNDATION_EXPORT DDWaterMarkInfoName const DDWaterMarkLayoutTop; -FOUNDATION_EXPORT DDWaterMarkInfoName const DDWaterMarkLayoutLeft; -FOUNDATION_EXPORT DDWaterMarkInfoName const DDWaterMarkLayoutBottom; -FOUNDATION_EXPORT DDWaterMarkInfoName const DDWaterMarkLayoutRight; - -@interface UIImage (DDCategory) -/** - * return a thumbnailImage that cutted from the remote video. - */ -+ (UIImage *)dd_thumbnailImageForVideo:(NSURL *)videoURL; - -+ (void)dd_thumbnailImageForVideo:(NSURL *)videoURL completionHandler:(void (^)(UIImage * _Nullable image, CMTime actualTime, NSError * _Nullable error))handler; - -/// @brief return a compressed image -/// @param maxLength bytes = 1024 * (kb) -- (UIImage *)dd_compressWithQulitySize:(NSInteger)maxLength; - -- (NSData *)dd_compressedToDataWithQulitySize:(NSInteger)maxLength; - -/// @brief return a marked image -/// @param infoArr this array contain a list of dictionary,the dictionary is consists of DDWaterMarkInfoName -- (UIImage *)dd_addWaterMarkWithInfoArray:(NSArray *> *)infoArr; -@end - -@interface UIImage (LoadWithTrait) -/// @briefthis function will return different image as the system interface mode changes. -/// @param lightImage return this image when appearance(UIUserInterfaceStyle) or system interface is Light. -/// @param darkImage return this image when appearance(UIUserInterfaceStyle) or system interface is Dark. -/// @warning Note the 'Appearance' property in info.plist. -+ (nullable UIImage *)dd_imageWithUserInerfaceStyleLightImage:(UIImage *)lightImage darkImage:(UIImage *)darkImage API_AVAILABLE(tvos(10.0)) API_AVAILABLE(ios(12.0)) API_UNAVAILABLE(watchos); -@end - -@interface UIImage (LoadWithBundle) -/// @brief convenient function based on 'dd_imageNamed:(nonnull NSString *)name bundlePath:(nonnull NSString *)bundlePath'. -/// -/// @param name resource name like this 'fileName/imageName'. -/// @param bundleName the name of the bundle where the resource located. -/// @param aClass The purpose of specifying the current type is to get the bundle location of the current library, it's related to the method '[NSBundle bundleForClass:aClass].resourcePath'. -+ (nullable UIImage *)dd_imageNamed:(nonnull NSString *)name bundleName:(nonnull NSString *)bundleName aClass:(nonnull Class)aClass; - -/// @brief convenient function based on 'dd_imageForResource:(nullable NSString *)resource ofType:(nullable NSString *)type bundlePath:(nonnull NSString *)bundlePath'. -/// -/// @param resource resource name like this 'fileName/imageName'. -/// @param type resource type. -/// @param bundleName the name of the bundle where the resource located. -/// @param aClass The purpose of specifying the current type is to get the bundle location of the current library, it's related to the method '[NSBundle bundleForClass:aClass].resourcePath'. -+ (nullable UIImage *)dd_imageForResource:(nullable NSString *)resource ofType:(nullable NSString *)type bundleName:(nonnull NSString *)bundleName aClass:(nonnull Class)aClass; - -/// @brief return a image from a bundle. -/// @param name the image name. -/// @param bundlePath the bundle path like this 'Frameworks/DDCategoryKit_Private.framework/resources.bundle'. -/// @warning where the bundle is is important. -+ (nullable UIImage *)dd_imageNamed:(nonnull NSString *)name bundlePath:(nonnull NSString *)bundlePath; - -/// @brief return a image from a bundle. -/// @param resource the format of resource is like this 'fileName/imageName'. -/// @param type image type. -/// @param bundlePath the bundle path like this 'Frameworks/DDCategoryKit_Private.framework/resources.bundle'. -+ (nullable UIImage *)dd_imageForResource:(nullable NSString *)resource ofType:(nullable NSString *)type bundlePath:(nonnull NSString *)bundlePath; - -+ (nullable NSData *)dd_imageGifNamed:(nonnull NSString *)name bundleName:(nonnull NSString *)bundleName aClass:(nonnull Class)aClass; - -+ (nullable NSData *)dd_imageForGifResource:(nullable NSString *)resource ofType:(nullable NSString *)type bundleName:(nonnull NSString *)bundleName aClass:(nonnull Class)aClass; - -/// @brief return QRCode. -+ (instancetype)dd_generateQrcodeImageWithStr:(NSString *)QcodeStr size:(float)size; - -@end - -@interface UIImage (NullSafe) -- (instancetype)dd_nullSafe; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIImage+DDCategory/UIImage+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIImage+DDCategory/UIImage+DDCategory.m deleted file mode 100644 index 940c346..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIImage+DDCategory/UIImage+DDCategory.m +++ /dev/null @@ -1,367 +0,0 @@ -// -// UIImage+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/7/29. - -#import "UIImage+DDCategory.h" -#import -#import -#import - -DDWaterMarkInfoName const DDWaterMarkInfoText = @"DDWaterMarkInfoText"; -DDWaterMarkInfoName const DDWaterMarkInfoAttributes = @"DDWaterMarkInfoAttributes"; - -DDWaterMarkInfoName const DDWaterMarkLayoutTop = @"DDWaterMarkInfoTop"; -DDWaterMarkInfoName const DDWaterMarkLayoutLeft = @"DDWaterMarkLayoutLeft"; -DDWaterMarkInfoName const DDWaterMarkLayoutBottom = @"DDWaterMarkLayoutBottom"; -DDWaterMarkInfoName const DDWaterMarkLayoutRight = @"DDWaterMarkLayoutRight"; - -@implementation UIImage (DDCategory) -+ (UIImage *)dd_thumbnailImageForVideo:(NSURL *)videoURL{ - AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil]; - if (asset.duration.value == 0) { - return nil; - } - - AVAssetImageGenerator *assetImageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; - assetImageGenerator.appliesPreferredTrackTransform = YES; - assetImageGenerator.requestedTimeToleranceAfter = kCMTimeZero; - assetImageGenerator.requestedTimeToleranceBefore = kCMTimeZero; - - CGImageRef thumbnailImageRef = NULL; - NSError *thumbnailImageGenerationError = nil; - thumbnailImageRef = [assetImageGenerator copyCGImageAtTime:CMTimeMake(0, 600) actualTime:NULL error:&thumbnailImageGenerationError]; - - UIImage *thumbnailImage = thumbnailImageRef ? [[UIImage alloc] initWithCGImage:thumbnailImageRef] : nil; - - return thumbnailImage; - } - -+ (void)dd_thumbnailImageForVideo:(NSURL *)videoURL completionHandler:(void (^)(UIImage * _Nullable image, CMTime actualTime, NSError * _Nullable error))handler { - AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil]; - if (asset.duration.value == 0) { - return; - } - - AVAssetImageGenerator *assetImageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; - assetImageGenerator.appliesPreferredTrackTransform = YES; - assetImageGenerator.requestedTimeToleranceAfter = kCMTimeZero; - assetImageGenerator.requestedTimeToleranceBefore = kCMTimeZero; - - [assetImageGenerator generateCGImagesAsynchronouslyForTimes:@[[NSValue valueWithCMTime:CMTimeMake(0, 600)]] completionHandler:^(CMTime requestedTime, CGImageRef _Nullable image, CMTime actualTime, AVAssetImageGeneratorResult result, NSError * _Nullable error) { - UIImage *thumbnailImage = image ? [[UIImage alloc] initWithCGImage:image] : nil; - - if (handler != nil) { - handler(thumbnailImage,actualTime,error); - } - }]; -} - -- (UIImage *)dd_compressWithQulitySize:(NSInteger)maxLength { - // Compress by quality - CGFloat compression = 1; - NSData *data = UIImageJPEGRepresentation(self, compression); - if (data.length < maxLength) return self; - - CGFloat max = 1; - CGFloat min = 0; - for (int i = 0; i < 6; ++i) { - compression = (max + min) / 2; - data = UIImageJPEGRepresentation(self, compression); - if (data.length < maxLength * 0.9) { - min = compression; - } else if (data.length > maxLength) { - max = compression; - } else { - break; - } - } - UIImage *resultImage = [UIImage imageWithData:data]; - - if (data.length < maxLength) return resultImage; - - // Compress by size - NSUInteger lastDataLength = 0; - while (data.length > maxLength && data.length != lastDataLength) { - lastDataLength = data.length; - CGFloat ratio = (CGFloat)maxLength / data.length; - CGSize size = CGSizeMake((NSUInteger)(resultImage.size.width * sqrtf(ratio)), - (NSUInteger)(resultImage.size.height * sqrtf(ratio))); // Use NSUInteger to prevent white blank - UIGraphicsBeginImageContext(size); - [resultImage drawInRect:CGRectMake(0, 0, size.width, size.height)]; - resultImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - data = UIImageJPEGRepresentation(resultImage, compression); - } - - return resultImage; -} - -- (NSData *)dd_compressedToDataWithQulitySize:(NSInteger)maxLength { - // Compress by quality - CGFloat compression = 1; - NSData *data = UIImageJPEGRepresentation(self, compression); - if (data.length < maxLength) return data; - - CGFloat max = 1; - CGFloat min = 0; - for (int i = 0; i < 6; ++i) { - compression = (max + min) / 2; - data = UIImageJPEGRepresentation(self, compression); - if (data.length < maxLength * 0.9) { - min = compression; - } else if (data.length > maxLength) { - max = compression; - } else { - break; - } - } - UIImage *resultImage = [UIImage imageWithData:data]; - - if (data.length < maxLength) return data; - - // Compress by size - NSUInteger lastDataLength = 0; - while (data.length > maxLength && data.length != lastDataLength) { - lastDataLength = data.length; - CGFloat ratio = (CGFloat)maxLength / data.length; - CGSize size = CGSizeMake((NSUInteger)(resultImage.size.width * sqrtf(ratio)), - (NSUInteger)(resultImage.size.height * sqrtf(ratio))); // Use NSUInteger to prevent white blank - UIGraphicsBeginImageContext(size); - [resultImage drawInRect:CGRectMake(0, 0, size.width, size.height)]; - resultImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - data = UIImageJPEGRepresentation(resultImage, compression); - } - - return data; -} - -- (UIImage *)dd_addWaterMarkWithInfoArray:(NSArray *> *)infoArr{ - UIGraphicsBeginImageContextWithOptions(self.size, NO, [UIScreen mainScreen].scale); - [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height)]; - [infoArr enumerateObjectsUsingBlock:^(NSDictionary * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - - NSString *text = obj[DDWaterMarkInfoText]; - NSNumber *_Nullable top = obj[DDWaterMarkLayoutTop]; - NSNumber *_Nullable left = obj[DDWaterMarkLayoutLeft]; - NSNumber *_Nullable bottom = obj[DDWaterMarkLayoutBottom]; - NSNumber *_Nullable right = obj[DDWaterMarkLayoutRight]; - NSDictionary *attrs = obj[DDWaterMarkInfoAttributes]; - - CGFloat textMaxWidth = self.size.width; - CGFloat textMaxHeight = self.size.height; - - if (left != nil && right != nil) { - textMaxWidth = self.size.width - left.floatValue - right.floatValue; - }else if (left != nil && right == nil){ - textMaxWidth = self.size.width - left.floatValue; - }else if (left == nil && right != nil){ - textMaxWidth = self.size.width - right.floatValue; - }else{ - // default - } - if (top != nil && bottom != nil) { - textMaxHeight = self.size.height - top.floatValue - bottom.floatValue; - }else if (top != nil && bottom == nil){ - textMaxHeight = self.size.height - top.floatValue; - }else if (top == nil && bottom != nil){ - textMaxHeight = self.size.height - bottom.floatValue; - }else{ - // default - } - - CGFloat width = [text boundingRectWithSize:CGSizeMake(textMaxWidth, textMaxHeight) options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs context:nil].size.width; - CGFloat height = [text boundingRectWithSize:CGSizeMake(textMaxWidth, textMaxHeight) options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs context:nil].size.height; - - CGFloat textX = 0.0; - CGFloat textY = 0.0; - - if (left == nil && right != nil){ - textX = self.size.width - right.floatValue - width; - }else{ - textX = left.floatValue; - } - - if (top == nil && bottom != nil) { - textY = self.size.height - bottom.floatValue - height; - }else{ - textY = top.floatValue; - } - - [text drawInRect:CGRectMake(textX, textY, width, height) withAttributes:attrs]; - }]; - UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return newImage; -} -@end - -@implementation UIImage (LoadWithTrait) -+ (nullable UIImage *)dd_imageWithUserInerfaceStyleLightImage:(UIImage *)lightImage darkImage:(UIImage *)darkImage{ - UIImageAsset *imageAsset = [UIImageAsset new]; - if (@available(iOS 12.0, *)) { - [imageAsset registerImage:lightImage withTraitCollection:[UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleLight]]; - [imageAsset registerImage:darkImage withTraitCollection:[UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleDark]]; - // No mater what user interface style filled here,it will return the user interface style of the current system. - return [imageAsset imageWithTraitCollection:[UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleLight]]; - } - if (lightImage != nil) return lightImage; - if (darkImage != nil) return darkImage; - return nil; -} -@end - -@implementation UIImage (LoadWithBundle) -+ (nullable UIImage *)dd_imageNamed:(nonnull NSString *)name bundleName:(nonnull NSString *)bundleName aClass:(nonnull Class)aClass{ - NSString *bundlePath = [[NSBundle bundleForClass:aClass].resourcePath stringByAppendingPathComponent:bundleName]; - - UIImage *image = [UIImage dd_imageNamed:name bundlePath:bundlePath]; - - return image; -} - -+ (nullable UIImage *)dd_imageForResource:(nullable NSString *)resource ofType:(nullable NSString *)type bundleName:(nonnull NSString *)bundleName aClass:(nonnull Class)aClass{ - NSString *bundlePath = [[NSBundle bundleForClass:aClass].resourcePath stringByAppendingPathComponent:bundleName]; - - UIImage *image = [UIImage dd_imageForResource:resource ofType:type bundlePath:bundlePath]; - - return image; -} - -+ (nullable UIImage *)dd_imageNamed:(nonnull NSString *)name bundlePath:(nonnull NSString *)bundlePath{ - NSString *bundleType = @".bundle"; - if (![bundlePath hasSuffix:bundleType]) { - bundlePath = [bundlePath stringByAppendingString:bundleType]; - } - - NSBundle *sourceBundle = [NSBundle bundleWithPath:bundlePath]; - if (sourceBundle == nil) { - return nil; - } - - UIImage *image = [UIImage imageNamed:name inBundle:sourceBundle compatibleWithTraitCollection:nil]; - return image; -} - -+ (nullable UIImage *)dd_imageForResource:(nullable NSString *)resource ofType:(nullable NSString *)type bundlePath:(nonnull NSString *)bundlePath{ - NSString *bundleType = @".bundle"; - if (![bundlePath hasSuffix:bundleType]) { - bundlePath = [bundlePath stringByAppendingString:bundleType]; - } - - NSBundle *sourceBundle = [NSBundle bundleWithPath:bundlePath]; - if (sourceBundle == nil) { - return nil; - } - - NSString *imagePath = [sourceBundle pathForResource:resource ofType:type]; - UIImage *image = [UIImage imageWithContentsOfFile:imagePath]; - - return image; -} - -+ (nullable NSData *)dd_imageGifNamed:(nonnull NSString *)name bundleName:(nonnull NSString *)bundleName aClass:(nonnull Class)aClass{ - NSString *bundlePath = [[NSBundle bundleForClass:aClass].resourcePath stringByAppendingPathComponent:bundleName]; - - NSData *imageData = [UIImage dd_imageGifNamed:name bundlePath:bundlePath]; - - return imageData; -} - -+ (nullable NSData *)dd_imageForGifResource:(nullable NSString *)resource ofType:(nullable NSString *)type bundleName:(nonnull NSString *)bundleName aClass:(nonnull Class)aClass{ - NSString *bundlePath = [[NSBundle bundleForClass:aClass].resourcePath stringByAppendingPathComponent:bundleName]; - - NSData *imageData = [UIImage dd_imageForGifResource:resource ofType:type bundlePath:bundlePath]; - - return imageData; -} - -+ (nullable NSData *)dd_imageGifNamed:(nonnull NSString *)name bundlePath:(nonnull NSString *)bundlePath{ - NSString *bundleType = @".bundle"; - if (![bundlePath hasSuffix:bundleType]) { - bundlePath = [bundlePath stringByAppendingString:bundleType]; - } - - NSBundle *sourceBundle = [NSBundle bundleWithPath:bundlePath]; - if (sourceBundle == nil) { - return nil; - } - NSString *extension = @".gif"; - if (![name hasSuffix:extension]) { - name = [name stringByAppendingString:extension]; - } - NSURL *url = [sourceBundle URLForResource:name withExtension:nil]; - if (url == nil) { - return nil; - } - NSData *imageData = [NSData dataWithContentsOfURL:url]; - return imageData; -} - -+ (nullable NSData *)dd_imageForGifResource:(nullable NSString *)resource ofType:(nullable NSString *)type bundlePath:(nonnull NSString *)bundlePath{ - NSString *bundleType = @".bundle"; - if (![bundlePath hasSuffix:bundleType]) { - bundlePath = [bundlePath stringByAppendingString:bundleType]; - } - - NSBundle *sourceBundle = [NSBundle bundleWithPath:bundlePath]; - if (sourceBundle == nil) { - return nil; - } - - NSURL *url = [sourceBundle URLForResource:resource withExtension:@".gif"]; - NSData *imageData = [NSData dataWithContentsOfURL:url]; - - return imageData; -} - -+ (instancetype)dd_generateQrcodeImageWithStr:(NSString *)QcodeStr size:(float)size { - //属于coreImage,可以查看一下相关文档,有很多效果 - CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; - // 滤镜恢复默认设置 - [filter setDefaults]; - //给滤镜添加数据 - NSData *data = [QcodeStr dataUsingEncoding:NSUTF8StringEncoding]; - [filter setValue:data forKeyPath:@"inputMessage"]; - //返回二维码图片 - return [self createHDUIImageFormCIImage:[filter outputImage] withSize:size]; -} - -//生成高清图片 -+ (UIImage *)createHDUIImageFormCIImage:(CIImage *)image withSize:(CGFloat)size { - CGRect extent = CGRectIntegral(image.extent); - CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent)); - - // 1.创建bitmap; - size_t width = CGRectGetWidth(extent) * scale; - size_t height = CGRectGetHeight(extent) * scale; - - CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray(); - CGContextRef bitmapRef = - CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone); - CIContext *context = [CIContext contextWithOptions:nil]; - CGImageRef bitmapImage = [context createCGImage:image fromRect:extent]; - CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone); - CGContextScaleCTM(bitmapRef, scale, scale); - CGContextDrawImage(bitmapRef, extent, bitmapImage); - - // 2.保存bitmap到图片 - CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef); - CGColorSpaceRelease(cs); - CGContextRelease(bitmapRef); - CGImageRelease(bitmapImage); - UIImage *newImage = [UIImage imageWithCGImage:scaledImage]; - CGImageRelease(scaledImage); - return newImage; -} - -@end - -@implementation UIImage (NullSafe) - -- (instancetype)dd_nullSafe{ - return (self == nil) ? [[UIImage alloc] init] : self; -} - -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIImageView+DDCategory/UIImageView+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIImageView+DDCategory/UIImageView+DDCategory.h deleted file mode 100644 index ab69f14..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIImageView+DDCategory/UIImageView+DDCategory.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// UIImageView+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/15. - - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UIImageView (DDCategory) - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIImageView+DDCategory/UIImageView+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIImageView+DDCategory/UIImageView+DDCategory.m deleted file mode 100644 index 75f068d..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIImageView+DDCategory/UIImageView+DDCategory.m +++ /dev/null @@ -1,11 +0,0 @@ -// -// UIImageView+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/15. - - -#import "UIImageView+DDCategory.h" - -@implementation UIImageView (DDCategory) - -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UILabel+DDCategory/UILabel+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UILabel+DDCategory/UILabel+DDCategory.h deleted file mode 100644 index 68ee2c6..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UILabel+DDCategory/UILabel+DDCategory.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// UILabel+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/7/29. - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UILabel (DDCategory) -/** - *@param text content string - *@param font text font - *@param textColor text color - */ -+ (instancetype)dd_initWithText:(NSString *)text font:(UIFont *)font textColor:(UIColor *)textColor; - - -/// return a instance of label -/// @param text content string -/// @param font text font -/// @param textColor text color -/// @param backgroundColor backgroundColor of label -+ (instancetype)dd_initWithText:(NSString *)text font:(UIFont *)font textColor:(UIColor *)textColor backgroundColor:(UIColor *)backgroundColor; - -/** - *@param attributedText attributed string - */ -+ (instancetype)dd_initWithAttributedText:(NSAttributedString *)attributedText; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UILabel+DDCategory/UILabel+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UILabel+DDCategory/UILabel+DDCategory.m deleted file mode 100644 index cb220cf..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UILabel+DDCategory/UILabel+DDCategory.m +++ /dev/null @@ -1,31 +0,0 @@ -// -// UILabel+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/7/29. - -#import "UILabel+DDCategory.h" - -@implementation UILabel (DDCategory) -+ (instancetype)dd_initWithText:(NSString *)text font:(UIFont *)font textColor:(UIColor *)textColor{ - UILabel *label = [[UILabel alloc] init]; - label.text = text; - label.font = font; - label.textColor = textColor; - return label; -} - -+ (instancetype)dd_initWithText:(NSString *)text font:(UIFont *)font textColor:(UIColor *)textColor backgroundColor:(UIColor *)backgroundColor{ - UILabel *label = [[UILabel alloc] init]; - label.text = text; - label.font = font; - label.textColor = textColor; - label.backgroundColor = backgroundColor; - return label; -} - -+ (instancetype)dd_initWithAttributedText:(NSAttributedString *)attributedText{ - UILabel *label = [[UILabel alloc] init]; - label.attributedText = attributedText; - return label; -} -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UINavigationBar+DDCategory/UINavigationBar+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UINavigationBar+DDCategory/UINavigationBar+DDCategory.h deleted file mode 100644 index 7464f0d..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UINavigationBar+DDCategory/UINavigationBar+DDCategory.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// UINavigationBar+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/11/2. - - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UINavigationBar (DDCategory) - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UINavigationBar+DDCategory/UINavigationBar+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UINavigationBar+DDCategory/UINavigationBar+DDCategory.m deleted file mode 100644 index e9d9f49..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UINavigationBar+DDCategory/UINavigationBar+DDCategory.m +++ /dev/null @@ -1,113 +0,0 @@ -// -// UINavigationBar+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/11/2. - - -#import "UINavigationBar+DDCategory.h" -#import -#import -#import - -@implementation UINavigationBar (DDCategory) - -+ (void)load{ - - static dispatch_once_t onceToken; - - __weak typeof(self) weakSelf = self; - dispatch_once(&onceToken, ^{ - __strong typeof(weakSelf) strongSelf = weakSelf; - - [strongSelf dd_originSelector:@selector(setBarTintColor:) swizzleSelector:@selector(dd_setBarTintColor:)]; - [strongSelf dd_originSelector:@selector(setBackgroundImage:forBarMetrics:) swizzleSelector:@selector(dd_setBackgroundImage:forBarMetrics:)]; - [strongSelf dd_originSelector:@selector(setTitleTextAttributes:) swizzleSelector:@selector(dd_setTitleTextAttributes:)]; - if (@available(iOS 13.0, *)){ - [strongSelf dd_originSelector:@selector(setStandardAppearance:) swizzleSelector:@selector(dd_setStandardAppearance:)]; - [strongSelf dd_originSelector:@selector(setCompactAppearance:) swizzleSelector:@selector(dd_setCompactAppearance:)]; - [strongSelf dd_originSelector:@selector(setScrollEdgeAppearance:) swizzleSelector:@selector(dd_setScrollEdgeAppearance:)]; - if (@available(iOS 15.0, *)){ - [strongSelf dd_originSelector:@selector(setCompactScrollEdgeAppearance:) swizzleSelector:@selector(dd_setCompactScrollEdgeAppearance:)]; - } - } - - }); - -} -// MARK: -- (void)dd_setBarTintColor:(nullable UIColor *)barTintColor{ - - [self dd_saveBarBackgroundColor:barTintColor]; - - [self dd_setBarTintColor:barTintColor]; -} - -- (void)dd_setBackgroundImage:(nullable UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics{ - - [self dd_saveBarBackgroundImage:backgroundImage]; - - [self dd_setBackgroundImage:backgroundImage forBarMetrics:barMetrics]; -} - -- (void)dd_setTitleTextAttributes:(NSDictionary *)titleTextAttributes{ - - [self dd_saveBarTitleTextAttributes:titleTextAttributes]; - - [self dd_setTitleTextAttributes:titleTextAttributes]; -} - -- (void)dd_setStandardAppearance:(UINavigationBarAppearance *)standardAppearance UI_APPEARANCE_SELECTOR API_AVAILABLE(ios(13.0), tvos(13.0)){ - [self dd_saveBarBackgroundImageOrColorWithAppearance:standardAppearance]; - - [self dd_setStandardAppearance:standardAppearance]; -} - -- (void)dd_setCompactAppearance:(UINavigationBarAppearance *)compactAppearance UI_APPEARANCE_SELECTOR API_AVAILABLE(ios(13.0)){ - [self dd_saveBarBackgroundImageOrColorWithAppearance:compactAppearance]; - - [self dd_setCompactAppearance:compactAppearance]; -} - -- (void)dd_setScrollEdgeAppearance:(UINavigationBarAppearance *)scrollEdgeAppearance UI_APPEARANCE_SELECTOR API_AVAILABLE(ios(13.0)){ - [self dd_saveBarBackgroundImageOrColorWithAppearance:scrollEdgeAppearance]; - - [self dd_setScrollEdgeAppearance:scrollEdgeAppearance]; -} - -- (void)dd_setCompactScrollEdgeAppearance:(UINavigationBarAppearance *)compactScrollEdgeAppearance UI_APPEARANCE_SELECTOR API_AVAILABLE(ios(15.0)){ - [self dd_saveBarBackgroundImageOrColorWithAppearance:compactScrollEdgeAppearance]; - - [self dd_setCompactScrollEdgeAppearance:compactScrollEdgeAppearance]; -} - -- (void)dd_saveBarBackgroundImageOrColorWithAppearance:(UINavigationBarAppearance *)navigationBarAppearance API_AVAILABLE(ios(13.0)) { - - [self dd_saveBarBackgroundImage:navigationBarAppearance.backgroundImage color:navigationBarAppearance.backgroundColor]; -} - -- (void)dd_saveBarBackgroundImage:(nullable UIImage *)dd_barBackgroundImage color:(nullable UIColor *)dd_barBackgroundColor{ - [self dd_saveBarBackgroundImage:dd_barBackgroundImage]; - [self dd_saveBarBackgroundColor:dd_barBackgroundColor]; -} - -- (void)dd_saveBarBackgroundColor:(nullable UIColor *)dd_barBackgroundColor{ - - UINavigationController *navigationController = (UINavigationController *)self.delegate; - UIViewController *viewController = [navigationController.viewControllers lastObject]; - [viewController dd_saveNavigationBarBackgroundColor:dd_barBackgroundColor]; -} - -- (void)dd_saveBarBackgroundImage:(nullable UIImage *)dd_barBackgroundImage{ - - UINavigationController *navigationController = (UINavigationController *)self.delegate; - UIViewController *viewController = [navigationController.viewControllers lastObject]; - [viewController dd_saveNavigationBarBackgroundImage:dd_barBackgroundImage]; -} - -- (void)dd_saveBarTitleTextAttributes:(NSDictionary *)dd_titleTextAttributes{ - UINavigationController *navigationController = (UINavigationController *)self.delegate; - UIViewController *viewController = [navigationController.viewControllers lastObject]; - [viewController dd_saveNavigationBarTitleTextAttributes:dd_titleTextAttributes]; -} - -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UINavigationController+DDCategory/UINavigationController+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UINavigationController+DDCategory/UINavigationController+DDCategory.h deleted file mode 100644 index 04e7589..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UINavigationController+DDCategory/UINavigationController+DDCategory.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// UINavigationController+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/9/22. - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UINavigationController (DDCategory) -@property (nonatomic,assign)CGFloat dd_navigationBarHeight; - -- (CGFloat)dd_navigationBarHeight; - -/// 是否需要在push时去掉tabBar -@property (nonatomic, assign) BOOL dd_hidesBottomBarWhenPushed; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UINavigationController+DDCategory/UINavigationController+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UINavigationController+DDCategory/UINavigationController+DDCategory.m deleted file mode 100644 index 08fc579..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UINavigationController+DDCategory/UINavigationController+DDCategory.m +++ /dev/null @@ -1,94 +0,0 @@ -// -// UINavigationController+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/9/22. - -#import "UINavigationController+DDCategory.h" -#import -#import - -@interface UINavigationController () - -@end - -@implementation UINavigationController (DDCategory) -@dynamic dd_navigationBarHeight; - -+ (void)load{ - - static dispatch_once_t onceToken; - __weak typeof(self) weakSelf = self; - dispatch_once(&onceToken, ^{ - __strong typeof(weakSelf) strongSelf = weakSelf; - - [strongSelf dd_originSelector:@selector(viewDidLoad) swizzleSelector:@selector(dd_navViewDidLoad)]; - [strongSelf dd_originSelector:@selector(viewWillAppear:) swizzleSelector:@selector(dd_navViewWillAppear:)]; - [strongSelf dd_originSelector:@selector(viewDidAppear:) swizzleSelector:@selector(dd_navViewDidAppear:)]; - [strongSelf dd_originSelector:@selector(pushViewController:animated:) swizzleSelector:@selector(dd_pushViewController:animated:)]; - [strongSelf dd_originSelector:@selector(popToRootViewControllerAnimated:) swizzleSelector:@selector(dd_popToRootViewControllerAnimated:)]; - [strongSelf dd_originSelector:@selector(popViewControllerAnimated:) swizzleSelector:@selector(dd_popViewControllerAnimated:)]; - }); - -} - -- (void)dd_navViewDidLoad{ - [self dd_navViewDidLoad]; -} - -- (void)dd_navViewWillAppear:(BOOL)animated{ - [self dd_navViewWillAppear:animated]; -} - -- (void)dd_navViewDidAppear:(BOOL)animated{ - [self dd_navViewDidAppear:animated]; -} - -// MARK: -- (void)dd_pushViewController:(UIViewController *)viewController animated:(BOOL)animated{ - [self dd_endEditingAtController:self.topViewController]; - if (self.dd_hidesBottomBarWhenPushed == YES) { - [self dd_hidesBottomBarWhenPushedAtChildController:viewController]; - } - [self dd_pushViewController:viewController animated:animated]; -} - -// MARK: -- (nullable NSArray<__kindof UIViewController *> *)dd_popToRootViewControllerAnimated:(BOOL)animated{ - NSArray *vcs = [self dd_popToRootViewControllerAnimated:animated]; - [self dd_endEditingAtController:(UIViewController *)(vcs.lastObject)]; - return vcs; -} - -- (UIViewController *)dd_popViewControllerAnimated:(BOOL)animated{ - UIViewController *vc = [self dd_popViewControllerAnimated:animated]; - [self dd_endEditingAtController:vc]; - return vc; -} - -// MARK: -- (CGFloat)dd_navigationBarHeight{ - return (self.navigationBar.frame.size.height + (self.navigationItem.prompt != nil ? 34 : 0) + (self.navigationBar.prefersLargeTitles == YES ? 34 : 0)); -} - -- (BOOL)dd_hidesBottomBarWhenPushed{ - return [objc_getAssociatedObject(self, _cmd) boolValue]; -} - -- (void)setDd_hidesBottomBarWhenPushed:(BOOL)dd_hidesBottomBarWhenPushed{ - objc_setAssociatedObject(self, @selector(dd_hidesBottomBarWhenPushed), @(dd_hidesBottomBarWhenPushed), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -// MARK: -/// push控制器时,需要将当前view的键盘去掉 -- (void)dd_endEditingAtController:(UIViewController *)controller{ - [controller.view endEditing:YES]; -} - -/// push控制器时,需要将子控制器的tabbar去掉 -- (void)dd_hidesBottomBarWhenPushedAtChildController:(UIViewController *)viewController{ - if (self.viewControllers.count >= 1){ - viewController.hidesBottomBarWhenPushed = YES; - } -} - -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UINavigationItem+DDCategory/UINavigationItem+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UINavigationItem+DDCategory/UINavigationItem+DDCategory.h deleted file mode 100644 index 5f0112e..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UINavigationItem+DDCategory/UINavigationItem+DDCategory.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// UINavigationItem+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/11/10. - - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UINavigationItem (DDCategory) - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UINavigationItem+DDCategory/UINavigationItem+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UINavigationItem+DDCategory/UINavigationItem+DDCategory.m deleted file mode 100644 index 07f0b9f..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UINavigationItem+DDCategory/UINavigationItem+DDCategory.m +++ /dev/null @@ -1,70 +0,0 @@ -// -// UINavigationItem+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/11/10. - - -#import "UINavigationItem+DDCategory.h" -#import -#import -#import - -@implementation UINavigationItem (DDCategory) -+ (void)load{ - __weak typeof(self) weakSelf = self; - static dispatch_once_t token; - dispatch_once(&token, ^{ - __strong typeof(weakSelf) strongSelf = weakSelf; - - [strongSelf dd_originSelector:@selector(setLeftBarButtonItem:) swizzleSelector:@selector(dd_setLeftBarButtonItem:)]; - [strongSelf dd_originSelector:@selector(setLeftBarButtonItems:) swizzleSelector:@selector(dd_setLeftBarButtonItems:)]; - [strongSelf dd_originSelector:@selector(setLeftBarButtonItem:animated:) swizzleSelector:@selector(dd_setLeftBarButtonItem:animated:)]; - [strongSelf dd_originSelector:@selector(setLeftBarButtonItems:animated:) swizzleSelector:@selector(dd_setLeftBarButtonItems:animated:)]; - [strongSelf dd_originSelector:@selector(setRightBarButtonItem:) swizzleSelector:@selector(dd_setRightBarButtonItem:)]; - [strongSelf dd_originSelector:@selector(setRightBarButtonItems:) swizzleSelector:@selector(dd_setRightBarButtonItems:)]; - [strongSelf dd_originSelector:@selector(setRightBarButtonItem:animated:) swizzleSelector:@selector(dd_setRightBarButtonItem:animated:)]; - [strongSelf dd_originSelector:@selector(setRightBarButtonItems:animated:) swizzleSelector:@selector(dd_setRightBarButtonItems:animated:)]; - }); -} - -- (void)dd_setLeftBarButtonItem:(UIBarButtonItem *)leftBarButtonItem{ - - [self dd_setLeftBarButtonItem:leftBarButtonItem]; -} - -- (void)dd_setLeftBarButtonItems:(NSArray *)leftBarButtonItems{ - - [self dd_setLeftBarButtonItems:leftBarButtonItems]; -} - -- (void)dd_setLeftBarButtonItem:(UIBarButtonItem *)item animated:(BOOL)animated{ - - [self dd_setLeftBarButtonItem:item animated:animated]; -} - -- (void)dd_setLeftBarButtonItems:(NSArray *)items animated:(BOOL)animated{ - - [self dd_setLeftBarButtonItems:items animated:animated]; -} - -- (void)dd_setRightBarButtonItem:(UIBarButtonItem *)rightBarButtonItem{ - - [self dd_setRightBarButtonItem:rightBarButtonItem]; -} - -- (void)dd_setRightBarButtonItems:(NSArray *)rightBarButtonItems{ - - [self dd_setRightBarButtonItems:rightBarButtonItems]; -} - -- (void)dd_setRightBarButtonItem:(UIBarButtonItem *)item animated:(BOOL)animated{ - - [self dd_setRightBarButtonItem:item animated:animated]; -} - -- (void)dd_setRightBarButtonItems:(NSArray *)items animated:(BOOL)animated{ - - [self dd_setRightBarButtonItems:items animated:animated]; -} - -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIScreen+DDCategory/UIScreen+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIScreen+DDCategory/UIScreen+DDCategory.h deleted file mode 100644 index ed9a7fa..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIScreen+DDCategory/UIScreen+DDCategory.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// UIScreen+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/6. - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UIScreen (DDCategory) -@property (nonatomic, assign)CGFloat dd_screenWidth; - -@property (nonatomic, assign)CGFloat dd_screenHeight; - -- (CGFloat)dd_screenWidth; - -- (CGFloat)dd_screenHeight; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIScreen+DDCategory/UIScreen+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIScreen+DDCategory/UIScreen+DDCategory.m deleted file mode 100644 index 655ab25..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIScreen+DDCategory/UIScreen+DDCategory.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// UIScreen+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/6. -#import "UIScreen+DDCategory.h" - -@implementation UIScreen (DDCategory) -@dynamic dd_screenWidth; -@dynamic dd_screenHeight; - -- (CGFloat)dd_screenWidth { - return self.bounds.size.width; -} - -- (CGFloat)dd_screenHeight { - return self.bounds.size.height; -} -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIScrollView+DDCategory/UIScrollView+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIScrollView+DDCategory/UIScrollView+DDCategory.h deleted file mode 100644 index f1473cf..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIScrollView+DDCategory/UIScrollView+DDCategory.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// UIScrollView+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/26. - - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UIScrollView (DDCategory) - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIScrollView+DDCategory/UIScrollView+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIScrollView+DDCategory/UIScrollView+DDCategory.m deleted file mode 100644 index e2399fc..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIScrollView+DDCategory/UIScrollView+DDCategory.m +++ /dev/null @@ -1,11 +0,0 @@ -// -// UIScrollView+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/26. - - -#import "UIScrollView+DDCategory.h" - -@implementation UIScrollView (DDCategory) - -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UISwitch+DDCategory/UISwitch+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UISwitch+DDCategory/UISwitch+DDCategory.h deleted file mode 100644 index 325cf50..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UISwitch+DDCategory/UISwitch+DDCategory.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// UISwitch+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/8/30. - - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UISwitch (DDCategory) - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UISwitch+DDCategory/UISwitch+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UISwitch+DDCategory/UISwitch+DDCategory.m deleted file mode 100644 index 68ffa5a..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UISwitch+DDCategory/UISwitch+DDCategory.m +++ /dev/null @@ -1,11 +0,0 @@ -// -// UISwitch+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/8/30. - - -#import "UISwitch+DDCategory.h" - -@implementation UISwitch (DDCategory) - -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITabBarController+DDCategory/UITabBarController+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITabBarController+DDCategory/UITabBarController+DDCategory.h deleted file mode 100644 index 144dfb6..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITabBarController+DDCategory/UITabBarController+DDCategory.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// UITabBarController+DDCategory.h -// DDCategoryKit_Private -// -// Created by 中道 on 2023/7/7. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UITabBarController (DDCategory) -@property (nonatomic, assign) CGFloat dd_tabBarHeight; - -- (CGFloat)dd_tabBarHeight; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITabBarController+DDCategory/UITabBarController+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITabBarController+DDCategory/UITabBarController+DDCategory.m deleted file mode 100644 index 451039b..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITabBarController+DDCategory/UITabBarController+DDCategory.m +++ /dev/null @@ -1,17 +0,0 @@ -// -// UITabBarController+DDCategory.m -// DDCategoryKit_Private -// -// Created by 中道 on 2023/7/7. -// - -#import "UITabBarController+DDCategory.h" - -@implementation UITabBarController (DDCategory) -@dynamic dd_tabBarHeight; - -- (CGFloat)dd_tabBarHeight { - return 49; -} - -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITableView+DDCategory/UITableView+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITableView+DDCategory/UITableView+DDCategory.h deleted file mode 100644 index f4e1fe1..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITableView+DDCategory/UITableView+DDCategory.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// UITableView+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UITableView (DDCategory) -+ (instancetype)dd_initWithDelegate:(nullable id)delegate style:(UITableViewStyle)style; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITableView+DDCategory/UITableView+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITableView+DDCategory/UITableView+DDCategory.m deleted file mode 100644 index c3527ac..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITableView+DDCategory/UITableView+DDCategory.m +++ /dev/null @@ -1,16 +0,0 @@ -// -// UITableView+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import "UITableView+DDCategory.h" - -@implementation UITableView (DDCategory) -+ (instancetype)dd_initWithDelegate:(nullable id)delegate style:(UITableViewStyle)style { - UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectZero style:style]; - tableView.delegate = delegate; - tableView.dataSource = delegate; - return tableView; -} -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITableViewCell+DDCategory/UITableViewCell+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITableViewCell+DDCategory/UITableViewCell+DDCategory.h deleted file mode 100644 index c3d4cbd..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITableViewCell+DDCategory/UITableViewCell+DDCategory.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// UITableViewCell+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UITableViewCell (DDCategory) - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITableViewCell+DDCategory/UITableViewCell+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITableViewCell+DDCategory/UITableViewCell+DDCategory.m deleted file mode 100644 index bfde73e..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITableViewCell+DDCategory/UITableViewCell+DDCategory.m +++ /dev/null @@ -1,11 +0,0 @@ -// -// UITableViewCell+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/10. - - -#import "UITableViewCell+DDCategory.h" - -@implementation UITableViewCell (DDCategory) - -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITextField+DDCategory/UITextField+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITextField+DDCategory/UITextField+DDCategory.h deleted file mode 100644 index d637b43..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITextField+DDCategory/UITextField+DDCategory.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// UITextField+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/21. - - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UITextField (DDCategory) - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITextField+DDCategory/UITextField+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITextField+DDCategory/UITextField+DDCategory.m deleted file mode 100644 index 8a9ba9d..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITextField+DDCategory/UITextField+DDCategory.m +++ /dev/null @@ -1,11 +0,0 @@ -// -// UITextField+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/21. - - -#import "UITextField+DDCategory.h" - -@implementation UITextField (DDCategory) - -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITextView+DDCategory/UITextView+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITextView+DDCategory/UITextView+DDCategory.h deleted file mode 100644 index 4df4f70..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITextView+DDCategory/UITextView+DDCategory.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// UITextView+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/22. - - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UITextView (DDCategory) - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITextView+DDCategory/UITextView+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITextView+DDCategory/UITextView+DDCategory.m deleted file mode 100644 index 831bd6a..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITextView+DDCategory/UITextView+DDCategory.m +++ /dev/null @@ -1,11 +0,0 @@ -// -// UITextView+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/22. - - -#import "UITextView+DDCategory.h" - -@implementation UITextView (DDCategory) - -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIView+DDCategory/UIView+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIView+DDCategory/UIView+DDCategory.h deleted file mode 100644 index 643a4bc..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIView+DDCategory/UIView+DDCategory.h +++ /dev/null @@ -1,46 +0,0 @@ -// -// UIView+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/7/29. - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UIView (DDCategory) - -@property (nonatomic, assign)CGFloat width;// view's width of size. -@property (nonatomic, assign)CGFloat height;// view's height of size. -@property (nonatomic, assign)CGFloat x;// view's x of origin. -@property (nonatomic, assign)CGFloat y;// view's y of origin. - -@end - -@interface UIView (Layer) -/** - * give the view shadow - *@param shadowColor layer shadowColor - *@param shadowOffset layer shadowOffset - *@param shadowRadius layer shadowRadius - *@param shadowOpacity layer shadowOpacity - *@param viewBackgroundColor you must set viewBackgroundColor,otherwise shadow can not be show. - *@param cornerRadius this property maybe cooperate with maskToBounds, such as imageView, you can not set maskToBounds to yes when you set shadow, they are mutually exclusive. - *@warning this function maybe effect fps, you should set rasterize to reduce impact. and you can set shadowPath to reduce consumption of cpu. the viewBackgroundColor must be setted. - */ - -+ (UIView *)dd_layerWithShadowColor:(CGColorRef)shadowColor shadowOffset:(CGSize)shadowOffset shadowRadius:(CGFloat)shadowRadius shadowOpacity:(CGFloat)shadowOpacity cornerRadius:(CGFloat)cornerRadius viewBackgroundColor:(nullable UIColor *)viewBackgroundColor; -/** - *the view transfer this function must already has setted background. - */ -- (void)dd_layerWithShadowColor:(CGColorRef)shadowColor shadowOffset:(CGSize)shadowOffset shadowRadius:(CGFloat)shadowRadius shadowOpacity:(CGFloat)shadowOpacity cornerRadius:(CGFloat)cornerRadius viewBackgroundColor:(nullable UIColor *)viewBackgroundColor; -@end - -@interface UIView (Controller) -/// 当前view所在的控制器 -@property (nonatomic, strong, readonly,nullable)UIViewController *dd_currentViewController; - -/// 获取某个view所在的控制器 -+ (nullable UIViewController *)dd_viewControllerOfView:(nonnull UIView *)view; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIView+DDCategory/UIView+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIView+DDCategory/UIView+DDCategory.m deleted file mode 100644 index 4ac62fb..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIView+DDCategory/UIView+DDCategory.m +++ /dev/null @@ -1,104 +0,0 @@ -// -// UIView+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/7/29. - -#import "UIView+DDCategory.h" -@implementation UIView (DDCategory) -- (CGFloat)width{ - return self.frame.size.width; -} - -- (CGFloat)height{ - return self.frame.size.height; -} - -- (CGFloat)x{ - return self.frame.origin.x; -} - -- (CGFloat)y{ - return self.frame.origin.y; -} - -- (void)setWidth:(CGFloat)width{ - CGRect frame = self.frame; - frame.size.width = width; - self.frame = frame; -} - -- (void)setHeight:(CGFloat)height{ - CGRect frame = self.frame; - frame.size.height = height; - self.frame = frame; -} - -- (void)setX:(CGFloat)x{ - CGRect frame = self.frame; - frame.origin.x = x; - self.frame = frame; -} - -- (void)setY:(CGFloat)y{ - CGRect frame = self.frame; - frame.origin.y = y; - self.frame = frame; -} - - -@end - -@implementation UIView (Layer) -+ (UIView *)dd_layerWithShadowColor:(CGColorRef)shadowColor shadowOffset:(CGSize)shadowOffset shadowRadius:(CGFloat)shadowRadius shadowOpacity:(CGFloat)shadowOpacity cornerRadius:(CGFloat)cornerRadius viewBackgroundColor:(nullable UIColor *)viewBackgroundColor{ - UIView *view = [UIView new]; - - view.layer.shadowColor = shadowColor; - view.layer.shadowOffset = shadowOffset; - view.layer.shadowRadius = shadowRadius; - view.layer.shadowOpacity = shadowOpacity; - - view.layer.cornerRadius = cornerRadius; - - view.backgroundColor = viewBackgroundColor; - - view.layer.shouldRasterize = YES; - view.layer.rasterizationScale = UIScreen.mainScreen.scale; - return view; -} - -- (void)dd_layerWithShadowColor:(CGColorRef)shadowColor shadowOffset:(CGSize)shadowOffset shadowRadius:(CGFloat)shadowRadius shadowOpacity:(CGFloat)shadowOpacity cornerRadius:(CGFloat)cornerRadius viewBackgroundColor:(nullable UIColor *)viewBackgroundColor{ - if (!self) return ; - - self.layer.shadowColor = shadowColor; - self.layer.shadowOffset = shadowOffset; - self.layer.shadowRadius = shadowRadius; - self.layer.shadowOpacity = shadowOpacity; - - self.layer.cornerRadius = cornerRadius; - - self.backgroundColor = viewBackgroundColor; - - self.layer.shouldRasterize = YES; - self.layer.rasterizationScale = UIScreen.mainScreen.scale; -} -@end - -@implementation UIView (Controller) - -- (nullable UIViewController *)dd_currentViewController { - return [UIView dd_viewControllerOfView:self]; -} - -+ (nullable UIViewController *)dd_viewControllerOfView:(nonnull UIView *)view { - // 遍历响应者链。返回第一个找到视图控制器 - UIResponder *responder = view; - while ((responder = [responder nextResponder])){ - if ([responder isKindOfClass: [UIViewController class]]){ - return (UIViewController *)responder; - } - } - // 如果没有找到则返回nil - return nil; -} - -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIViewController+DDCategory/UIViewController+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIViewController+DDCategory/UIViewController+DDCategory.h deleted file mode 100644 index 9e9197d..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIViewController+DDCategory/UIViewController+DDCategory.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// UIViewController+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/9/23. - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UIViewController (DDCategory) -/** - * It is recommended to set the background color or image of the navigation bar by these properties.These properties will be set automatically between the end of viewController's viewdidload and the begin of viewController's viewwillappear. - */ -@property (nonatomic, strong, nullable)UIColor *dd_navigationBarBackgroundColor;// navigationBar's backgroundColor. -@property (nonatomic, strong, nullable)UIImage *dd_navigationBarBackgroundImage;// navigationBar's backgroundImage. -@property (nonatomic, strong, nullable)UIColor *dd_navigationBarShadowColor API_AVAILABLE(ios(13.0), tvos(13.0));// navigationBar's shadowColor. -@property (nonatomic, strong, nullable)UIImage *dd_navigationBarShadowImage;// navigationBar's shadowImage. -@property (nonatomic, strong, nullable)NSDictionary *dd_navigationBarTitleTextAttributes;// navigationBar's title attributes. -@property (nonatomic, strong, nullable) NSDictionary *dd_navigationBarBarButtonItemAttributes;// navigationBar's left or right barButtonItem's attributes,this property should be invoked after barButtonItem has be set. - -- (void)dd_saveNavigationBarBackgroundColor:(nullable UIColor *)dd_navigationBarBackgroundColor; -- (void)dd_saveNavigationBarBackgroundImage:(nullable UIImage *)dd_navigationBarBackgroundImage; -- (void)dd_saveNavigationBarShadowColor:(nullable UIColor *)dd_navigationBarShadowColor API_AVAILABLE(ios(13.0), tvos(13.0)); -- (void)dd_saveNavigationBarShadowImage:(nullable UIImage *)dd_navigationBarShadowImage; -- (void)dd_saveNavigationBarTitleTextAttributes:(NSDictionary *)dd_navigationBarTitleTextAttributes; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIViewController+DDCategory/UIViewController+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIViewController+DDCategory/UIViewController+DDCategory.m deleted file mode 100644 index bb34212..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIViewController+DDCategory/UIViewController+DDCategory.m +++ /dev/null @@ -1,252 +0,0 @@ -// -// UIViewController+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2022/9/23. - -#import "UIViewController+DDCategory.h" -#import -#import - -@interface UIViewController () - -@end - -@implementation UIViewController (DDCategory) - -+ (void)load{ - static dispatch_once_t onceToken; - __weak typeof(self) weakSelf = self; - dispatch_once(&onceToken, ^{ - __strong typeof(weakSelf) strongSelf = weakSelf; - - [strongSelf dd_originSelector:@selector(viewDidLoad) swizzleSelector:@selector(dd_viewDidLoad)]; - [strongSelf dd_originSelector:@selector(viewWillAppear:) swizzleSelector:@selector(dd_viewWillAppear:)]; - [strongSelf dd_originSelector:@selector(viewDidAppear:) swizzleSelector:@selector(dd_viewDidAppear:)]; - [strongSelf dd_originSelector:@selector(viewWillDisappear:) swizzleSelector:@selector(dd_viewWillDisappear:)]; - [strongSelf dd_originSelector:@selector(viewDidDisappear:) swizzleSelector:@selector(dd_viewDidDisappear:)]; - }); -} - -- (void)dd_viewDidLoad{ - [self dd_viewDidLoad]; -} - -- (void)dd_viewWillAppear:(BOOL)animated{ - // When the interface is displayed, the color or image of the navigationBar at the current controller needs to be updated. - UIImage *navigationBarBackgroundImage; - UIColor *navigationBarBackgroundColor; - UIImage *navigationBarShadowImage; - UIColor *navigationBarShadowColor; - NSDictionary *navigationBarTitleTextAttributes; - - if (@available(iOS 13.0, *)){ - navigationBarBackgroundImage = self.navigationController.navigationBar.standardAppearance.backgroundImage; - navigationBarBackgroundColor = self.navigationController.navigationBar.standardAppearance.backgroundColor; - navigationBarShadowImage = self.navigationController.navigationBar.standardAppearance.shadowImage; - navigationBarShadowColor = self.navigationController.navigationBar.standardAppearance.shadowColor; - navigationBarTitleTextAttributes = self.navigationController.navigationBar.standardAppearance.titleTextAttributes; - }else{ - navigationBarBackgroundImage = [self.navigationController.navigationBar backgroundImageForBarMetrics:UIBarMetricsDefault]; - navigationBarBackgroundColor = self.navigationController.navigationBar.barTintColor; - navigationBarShadowImage = self.navigationController.navigationBar.shadowImage; - navigationBarTitleTextAttributes = self.navigationController.navigationBar.titleTextAttributes; - } - - if (@available(iOS 13.0, *)) { - if (!(self.dd_navigationBarBackgroundImage == navigationBarBackgroundImage && CGColorEqualToColor(self.dd_navigationBarBackgroundColor.CGColor, navigationBarBackgroundColor.CGColor) && self.dd_navigationBarShadowImage == navigationBarShadowImage && self.dd_navigationBarShadowColor == navigationBarShadowColor && self.dd_navigationBarTitleTextAttributes == navigationBarTitleTextAttributes)){ - [self dd_changeNavigationBarbackgroundImage:self.dd_navigationBarBackgroundImage color:self.dd_navigationBarBackgroundColor shadowImage:self.dd_navigationBarShadowImage color:self.dd_navigationBarShadowColor titleTextAttributes:self.dd_navigationBarTitleTextAttributes]; - } - }else{ - if (!(self.dd_navigationBarBackgroundImage == navigationBarBackgroundImage && CGColorEqualToColor(self.dd_navigationBarBackgroundColor.CGColor, navigationBarBackgroundColor.CGColor) && self.dd_navigationBarShadowImage == navigationBarShadowImage && self.dd_navigationBarTitleTextAttributes == navigationBarTitleTextAttributes)){ - [self dd_changeNavigationBarbackgroundImage:self.dd_navigationBarBackgroundImage color:self.dd_navigationBarBackgroundColor shadowImage:self.dd_navigationBarShadowImage color:nil titleTextAttributes:self.dd_navigationBarTitleTextAttributes]; - } - } - - - [self dd_changeNavigationBarBarButtonItemAttributes:self.dd_navigationBarBarButtonItemAttributes]; - - [self dd_viewWillAppear:animated]; -} - -- (void)dd_viewDidAppear:(BOOL)animated{ - [self dd_viewDidAppear:animated]; - -} - -- (void)dd_viewWillDisappear:(BOOL)animated{ - [self dd_viewWillDisappear:animated]; - -} - -- (void)dd_viewDidDisappear:(BOOL)animated{ - - [self dd_viewDidDisappear:animated]; - -} - -// MARK: -- (nullable UIColor *)dd_navigationBarBackgroundColor{ - return objc_getAssociatedObject(self, _cmd); -} - -- (nullable UIImage *)dd_navigationBarBackgroundImage{ - return objc_getAssociatedObject(self, _cmd); -} - -- (nullable UIColor *)dd_navigationBarShadowColor{ - return objc_getAssociatedObject(self, _cmd); -} - -- (nullable UIImage *)dd_navigationBarShadowImage{ - return objc_getAssociatedObject(self, _cmd); -} - -- (nullable NSDictionary *)dd_navigationBarTitleTextAttributes{ - return objc_getAssociatedObject(self, _cmd); -} - -- (nullable NSDictionary *)dd_navigationBarBarButtonItemAttributes{ - return objc_getAssociatedObject(self, _cmd); -} - -- (void)setDd_navigationBarBackgroundImage:(nullable UIImage *)dd_navigationBarBackgroundImage{ - - [self dd_saveNavigationBarBackgroundImage:dd_navigationBarBackgroundImage]; - - if (@available(iOS 13.0, *)) { - [self dd_changeNavigationBarbackgroundImage:dd_navigationBarBackgroundImage color:self.dd_navigationBarBackgroundColor shadowImage:self.dd_navigationBarShadowImage color:self.dd_navigationBarShadowColor titleTextAttributes:self.dd_navigationBarTitleTextAttributes]; - } else { - // Fallback on earlier versions - [self dd_changeNavigationBarbackgroundImage:dd_navigationBarBackgroundImage color:self.dd_navigationBarBackgroundColor shadowImage:self.dd_navigationBarShadowImage color:nil titleTextAttributes:self.dd_navigationBarTitleTextAttributes]; - } -} - -- (void)setDd_navigationBarBackgroundColor:(nullable UIColor *)dd_navigationBarBackgroundColor{ - - [self dd_saveNavigationBarBackgroundColor:dd_navigationBarBackgroundColor]; - - if (@available(iOS 13.0, *)) { - [self dd_changeNavigationBarbackgroundImage:self.dd_navigationBarBackgroundImage color:dd_navigationBarBackgroundColor shadowImage:self.dd_navigationBarShadowImage color:self.dd_navigationBarShadowColor titleTextAttributes:self.dd_navigationBarTitleTextAttributes]; - } else { - // Fallback on earlier versions - [self dd_changeNavigationBarbackgroundImage:self.dd_navigationBarBackgroundImage color:dd_navigationBarBackgroundColor shadowImage:self.dd_navigationBarShadowImage color:nil titleTextAttributes:self.dd_navigationBarTitleTextAttributes]; - } -} - -- (void)setDd_navigationBarShadowColor:(nullable UIColor *)dd_navigationBarShadowColor{ - [self dd_saveNavigationBarShadowColor:dd_navigationBarShadowColor]; - - [self dd_changeNavigationBarbackgroundImage:self.dd_navigationBarBackgroundImage color:self.dd_navigationBarBackgroundColor shadowImage:self.dd_navigationBarShadowImage color:dd_navigationBarShadowColor titleTextAttributes:self.dd_navigationBarTitleTextAttributes]; -} - -- (void)setDd_navigationBarShadowImage:(nullable UIImage *)dd_navigationBarShadowImage{ - [self dd_saveNavigationBarShadowImage:dd_navigationBarShadowImage]; - - if (@available(iOS 13.0, *)) { - [self dd_changeNavigationBarbackgroundImage:self.dd_navigationBarBackgroundImage color:self.dd_navigationBarBackgroundColor shadowImage:dd_navigationBarShadowImage color:self.dd_navigationBarShadowColor titleTextAttributes:self.dd_navigationBarTitleTextAttributes]; - } else { - // Fallback on earlier versions - [self dd_changeNavigationBarbackgroundImage:self.dd_navigationBarBackgroundImage color:self.dd_navigationBarBackgroundColor shadowImage:dd_navigationBarShadowImage color:nil titleTextAttributes:self.dd_navigationBarTitleTextAttributes]; - } -} - -- (void)setDd_navigationBarTitleTextAttributes:(nullable NSDictionary *)dd_navigationBarTitleTextAttributes{ - [self dd_saveNavigationBarTitleTextAttributes:dd_navigationBarTitleTextAttributes]; - - if (@available(iOS 13.0, *)) { - [self dd_changeNavigationBarbackgroundImage:self.dd_navigationBarBackgroundImage color:self.dd_navigationBarBackgroundColor shadowImage:self.dd_navigationBarShadowImage color:self.dd_navigationBarShadowColor titleTextAttributes:dd_navigationBarTitleTextAttributes]; - } else { - // Fallback on earlier versions - [self dd_changeNavigationBarbackgroundImage:self.dd_navigationBarBackgroundImage color:self.dd_navigationBarBackgroundColor shadowImage:self.dd_navigationBarShadowImage color:nil titleTextAttributes:dd_navigationBarTitleTextAttributes]; - } -} - -- (void)setDd_navigationBarBarButtonItemAttributes:(nullable NSDictionary *)dd_navigationBarBarButtonItemAttributes{ - [self dd_saveNavigationBarBarButtonItemAttributes:dd_navigationBarBarButtonItemAttributes]; - - [self dd_changeNavigationBarBarButtonItemAttributes:dd_navigationBarBarButtonItemAttributes]; -} - -- (void)dd_saveNavigationBarBackgroundImage:(nullable UIImage *)dd_navigationBarBackgroundImage{ - objc_setAssociatedObject(self, @selector(dd_navigationBarBackgroundImage), dd_navigationBarBackgroundImage, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)dd_saveNavigationBarBackgroundColor:(nullable UIColor *)dd_navigationBarBackgroundColor{ - objc_setAssociatedObject(self, @selector(dd_navigationBarBackgroundColor), dd_navigationBarBackgroundColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)dd_saveNavigationBarShadowColor:(nullable UIColor *)dd_navigationBarShadowColor { - objc_setAssociatedObject(self, @selector(dd_navigationBarShadowColor), dd_navigationBarShadowColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)dd_saveNavigationBarShadowImage:(nullable UIImage *)dd_navigationBarShadowImage { - objc_setAssociatedObject(self, @selector(dd_navigationBarShadowImage), dd_navigationBarShadowImage, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)dd_saveNavigationBarTitleTextAttributes:(NSDictionary *)dd_navigationBarTitleTextAttributes{ - objc_setAssociatedObject(self, @selector(dd_navigationBarTitleTextAttributes), dd_navigationBarTitleTextAttributes, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)dd_saveNavigationBarBarButtonItemAttributes:(NSDictionary *)dd_navigationBarBarButtonItemAttributes{ - objc_setAssociatedObject(self, @selector(dd_navigationBarBarButtonItemAttributes), dd_navigationBarBarButtonItemAttributes, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)dd_changeNavigationBarbackgroundImage:(nullable UIImage *)dd_navigationBarBackgroundImage color:(nullable UIColor *)dd_navigationBarBackgroundColor shadowImage:(nullable UIImage *)dd_navigationBarShadowImage color:(nullable UIColor *)dd_navigationBarShadowColor titleTextAttributes:(NSDictionary *)dd_navigationBarTitleTextAttributes{ - if (@available(iOS 13.0,*)){ - UINavigationBarAppearance *navigationBarAppearance = [[UINavigationBarAppearance alloc] init]; - [navigationBarAppearance configureWithTransparentBackground]; - - navigationBarAppearance.backgroundImage = dd_navigationBarBackgroundImage; - navigationBarAppearance.backgroundColor = dd_navigationBarBackgroundColor; - navigationBarAppearance.shadowImage = dd_navigationBarShadowImage; - navigationBarAppearance.shadowColor = dd_navigationBarShadowColor; - navigationBarAppearance.titleTextAttributes = dd_navigationBarTitleTextAttributes; - self.navigationController.navigationBar.standardAppearance = navigationBarAppearance; - self.navigationController.navigationBar.compactAppearance = navigationBarAppearance; - self.navigationController.navigationBar.scrollEdgeAppearance = navigationBarAppearance; - if (@available(iOS 15.0, *)){ - self.navigationController.navigationBar.compactScrollEdgeAppearance = navigationBarAppearance; - } - - }else{ - - self.navigationController.navigationBar.barTintColor = dd_navigationBarBackgroundColor; - - [self.navigationController.navigationBar setBackgroundImage:dd_navigationBarBackgroundImage forBarMetrics:UIBarMetricsDefault]; - [self.navigationController.navigationBar setBackgroundImage:dd_navigationBarBackgroundImage forBarMetrics:UIBarMetricsCompact]; - [self.navigationController.navigationBar setBackgroundImage:dd_navigationBarBackgroundImage forBarMetrics:UIBarMetricsDefaultPrompt]; - [self.navigationController.navigationBar setBackgroundImage:dd_navigationBarBackgroundImage forBarMetrics:UIBarMetricsCompactPrompt]; - - [self.navigationController.navigationBar setShadowImage:dd_navigationBarShadowImage]; - - self.navigationController.navigationBar.titleTextAttributes = dd_navigationBarTitleTextAttributes; - - } -} - -- (void)dd_changeNavigationBarBarButtonItemAttributes:(NSDictionary *)dd_navigationBarBarButtonItemAttributes{ - - if (self.navigationItem.leftBarButtonItems.count > 0){ - for (int i = 0; i < self.navigationItem.leftBarButtonItems.count; i++) { - UIBarButtonItem *barButtonItem = self.navigationItem.leftBarButtonItems[i]; - [barButtonItem setTitleTextAttributes:dd_navigationBarBarButtonItemAttributes forState:UIControlStateNormal]; - [barButtonItem setTitleTextAttributes:dd_navigationBarBarButtonItemAttributes forState:UIControlStateHighlighted]; - } - } - - if (self.navigationItem.rightBarButtonItems.count > 0){ - for (int i = 0; i < self.navigationItem.rightBarButtonItems.count; i++) { - UIBarButtonItem *barButtonItem = self.navigationItem.rightBarButtonItems[i]; - [barButtonItem setTitleTextAttributes:dd_navigationBarBarButtonItemAttributes forState:UIControlStateNormal]; - [barButtonItem setTitleTextAttributes:dd_navigationBarBarButtonItemAttributes forState:UIControlStateHighlighted]; - } - } - // update system backBarButtonItem's color, but this item's font we didn't modify it,usually we will replace this item by our custom items,so the problem of font is unimportant. - UIColor *tintColor = [dd_navigationBarBarButtonItemAttributes objectForKey:NSForegroundColorAttributeName]; - if (tintColor != nil && tintColor != self.navigationController.navigationBar.tintColor) { - self.navigationController.navigationBar.tintColor = dd_navigationBarBarButtonItemAttributes[NSForegroundColorAttributeName]; - // self.navigationController.navigationBar.backItem's title font didn't modified. - } - -} -@end diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIWindow+DDCategory/UIWindow+DDCategory.h b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIWindow+DDCategory/UIWindow+DDCategory.h deleted file mode 100644 index 54a898b..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIWindow+DDCategory/UIWindow+DDCategory.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// UIWindow+DDCategory.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/6. - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UIWindow (DDCategory) -@property (nonatomic, assign)CGFloat dd_safeAreaTop; -@property (nonatomic, assign)CGFloat dd_safeAreaBottom; -@property (nonatomic, assign)CGFloat dd_safeAreaLeft; -@property (nonatomic, assign)CGFloat dd_safeAreaRight; - -- (CGFloat)dd_safeAreaTop; -- (CGFloat)dd_safeAreaBottom; -- (CGFloat)dd_safeAreaLeft; -- (CGFloat)dd_safeAreaRight; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIWindow+DDCategory/UIWindow+DDCategory.m b/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIWindow+DDCategory/UIWindow+DDCategory.m deleted file mode 100644 index 0e320a2..0000000 --- a/Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIWindow+DDCategory/UIWindow+DDCategory.m +++ /dev/null @@ -1,45 +0,0 @@ -// -// UIWindow+DDCategory.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/6. - -#import "UIWindow+DDCategory.h" - -@implementation UIWindow (DDCategory) -@dynamic dd_safeAreaTop; -@dynamic dd_safeAreaBottom; -@dynamic dd_safeAreaLeft; -@dynamic dd_safeAreaRight; - -- (CGFloat)dd_safeAreaTop { - if (@available(iOS 11.0, *)) { - return self.safeAreaInsets.top; - } else { - return 0.0; - } -} - -- (CGFloat)dd_safeAreaBottom { - if (@available(iOS 11.0, *)) { - return self.safeAreaInsets.bottom; - } else { - return 0.0; - } -} - -- (CGFloat)dd_safeAreaLeft { - if (@available(iOS 11.0, *)) { - return self.safeAreaInsets.left; - } else { - return 0.0; - } -} - -- (CGFloat)dd_safeAreaRight { - if (@available(iOS 11.0, *)) { - return self.safeAreaInsets.right; - } else { - return 0.0; - } -} -@end diff --git a/Pods/DDCategoryKit_Private/LICENSE b/Pods/DDCategoryKit_Private/LICENSE deleted file mode 100644 index 60fb0df..0000000 --- a/Pods/DDCategoryKit_Private/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2022 DDIsFriend - -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. diff --git a/Pods/DDCategoryKit_Private/README.md b/Pods/DDCategoryKit_Private/README.md deleted file mode 100644 index e3d189b..0000000 --- a/Pods/DDCategoryKit_Private/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# DDCategoryKit_Private - -[![CI Status](https://img.shields.io/travis/DDIsFriend/DDCategoryKit_Private.svg?style=flat)](https://travis-ci.org/DDIsFriend/DDCategoryKit_Private) -[![Version](https://img.shields.io/cocoapods/v/DDCategoryKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDCategoryKit_Private) -[![License](https://img.shields.io/cocoapods/l/DDCategoryKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDCategoryKit_Private) -[![Platform](https://img.shields.io/cocoapods/p/DDCategoryKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDCategoryKit_Private) - -## Example - -To run the example project, clone the repo, and run `pod install` from the Example directory first. - -## Requirements - -## Installation - -DDCategoryKit_Private is available through [CocoaPods](https://cocoapods.org). To install -it, simply add the following line to your Podfile: - -```ruby -pod 'DDCategoryKit_Private' -``` - -## Author - -DDIsFriend, DDIsFriend@163.com - -## License - -DDCategoryKit_Private is available under the MIT license. See the LICENSE file for more info. diff --git a/Pods/DDColorKit_Private/DDColorKit_Private/Classes/ColorUtil.swift b/Pods/DDColorKit_Private/DDColorKit_Private/Classes/ColorUtil.swift deleted file mode 100644 index 6712eb1..0000000 --- a/Pods/DDColorKit_Private/DDColorKit_Private/Classes/ColorUtil.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// ColorUtility.swift -// HichefuOfDriverUtility -// -// Created by 中道 on 2023/2/14. -// - -import Foundation - -extension UIColor { - - @inlinable static public func black(alpha _alpha:CGFloat) -> UIColor { - return UIColor(hex: "000000").alpha(_alpha) - } - @inlinable static public func white(alpha _alpha:CGFloat) -> UIColor { - return UIColor(hex: "FFFFFF").alpha(_alpha) - } - @inlinable static public func buttonColor() -> UIColor { - return UIColor(hex: "2C395F").alpha(0xFF) - } - @inlinable static public func hex(_ string:String) -> UIColor { - return UIColor(hex: string) - } -} diff --git a/Pods/DDColorKit_Private/DDColorKit_Private/Classes/UIColor+Hue.swift b/Pods/DDColorKit_Private/DDColorKit_Private/Classes/UIColor+Hue.swift deleted file mode 100644 index c3b608d..0000000 --- a/Pods/DDColorKit_Private/DDColorKit_Private/Classes/UIColor+Hue.swift +++ /dev/null @@ -1,249 +0,0 @@ -#if canImport(UIKit) -import UIKit - -// MARK: - Color Builders - -public extension UIColor { - /// Constructing color from hex string - /// - /// - Parameter hex: A hex string, can either contain # or not - convenience init(hex string: String) { - var hex = string.hasPrefix("#") - ? String(string.dropFirst()) - : string - guard hex.count == 3 || hex.count == 6 - else { - self.init(white: 1.0, alpha: 0.0) - return - } - if hex.count == 3 { - for (index, char) in hex.enumerated() { - hex.insert(char, at: hex.index(hex.startIndex, offsetBy: index * 2)) - } - } - - guard let intCode = Int(hex, radix: 16) else { - self.init(white: 1.0, alpha: 0.0) - return - } - - self.init( - red: CGFloat((intCode >> 16) & 0xFF) / 255.0, - green: CGFloat((intCode >> 8) & 0xFF) / 255.0, - blue: CGFloat((intCode) & 0xFF) / 255.0, alpha: 1.0) - } - - /// Adjust color based on saturation - /// - /// - Parameter minSaturation: The minimun saturation value - /// - Returns: The adjusted color - func color(minSaturation: CGFloat) -> UIColor { - var (hue, saturation, brightness, alpha): (CGFloat, CGFloat, CGFloat, CGFloat) = (0.0, 0.0, 0.0, 0.0) - getHue(&hue, saturation: &saturation, brightness: &brightness, alpha: &alpha) - - return saturation < minSaturation - ? UIColor(hue: hue, saturation: minSaturation, brightness: brightness, alpha: alpha) - : self - } - - /// Convenient method to change alpha value - /// - /// - Parameter value: The alpha value - /// - Returns: The alpha adjusted color - func alpha(_ value: CGFloat) -> UIColor { - return withAlphaComponent(value) - } -} - -// MARK: - Helpers - -public extension UIColor { - - func hex(hashPrefix: Bool = true) -> String { - var (r, g, b, a): (CGFloat, CGFloat, CGFloat, CGFloat) = (0.0, 0.0, 0.0, 0.0) - getRed(&r, green: &g, blue: &b, alpha: &a) - - let prefix = hashPrefix ? "#" : "" - - return String(format: "\(prefix)%02X%02X%02X", Int(r * 255), Int(g * 255), Int(b * 255)) - } - - internal func rgbComponents() -> [CGFloat] { - var (r, g, b, a): (CGFloat, CGFloat, CGFloat, CGFloat) = (0.0, 0.0, 0.0, 0.0) - getRed(&r, green: &g, blue: &b, alpha: &a) - - return [r, g, b] - } - - var isDark: Bool { - let RGB = rgbComponents() - return (0.2126 * RGB[0] + 0.7152 * RGB[1] + 0.0722 * RGB[2]) < 0.5 - } - - var isBlackOrWhite: Bool { - let RGB = rgbComponents() - return (RGB[0] > 0.91 && RGB[1] > 0.91 && RGB[2] > 0.91) || (RGB[0] < 0.09 && RGB[1] < 0.09 && RGB[2] < 0.09) - } - - var isBlack: Bool { - let RGB = rgbComponents() - return (RGB[0] < 0.09 && RGB[1] < 0.09 && RGB[2] < 0.09) - } - - var isWhite: Bool { - let RGB = rgbComponents() - return (RGB[0] > 0.91 && RGB[1] > 0.91 && RGB[2] > 0.91) - } - - func isDistinct(from color: UIColor) -> Bool { - let bg = rgbComponents() - let fg = color.rgbComponents() - let threshold: CGFloat = 0.25 - var result = false - - if abs(bg[0] - fg[0]) > threshold || abs(bg[1] - fg[1]) > threshold || abs(bg[2] - fg[2]) > threshold { - if abs(bg[0] - bg[1]) < 0.03 && abs(bg[0] - bg[2]) < 0.03 { - if abs(fg[0] - fg[1]) < 0.03 && abs(fg[0] - fg[2]) < 0.03 { - result = false - } - } - result = true - } - - return result - } - - func isContrasting(with color: UIColor) -> Bool { - let bg = rgbComponents() - let fg = color.rgbComponents() - - let bgLum = 0.2126 * bg[0] + 0.7152 * bg[1] + 0.0722 * bg[2] - let fgLum = 0.2126 * fg[0] + 0.7152 * fg[1] + 0.0722 * fg[2] - let contrast = bgLum > fgLum - ? (bgLum + 0.05) / (fgLum + 0.05) - : (fgLum + 0.05) / (bgLum + 0.05) - - return 1.6 < contrast - } - -} - -// MARK: - Gradient - -public extension Array where Element : UIColor { - - func gradient(_ transform: ((_ gradient: inout CAGradientLayer) -> CAGradientLayer)? = nil) -> CAGradientLayer { - var gradient = CAGradientLayer() - gradient.colors = self.map { $0.cgColor } - - if let transform = transform { - gradient = transform(&gradient) - } - - return gradient - } -} - -// MARK: - Components - -public extension UIColor { - - var redComponent: CGFloat { - var red: CGFloat = 0 - getRed(&red, green: nil , blue: nil, alpha: nil) - return red - } - - var greenComponent: CGFloat { - var green: CGFloat = 0 - getRed(nil, green: &green , blue: nil, alpha: nil) - return green - } - - var blueComponent: CGFloat { - var blue: CGFloat = 0 - getRed(nil, green: nil , blue: &blue, alpha: nil) - return blue - } - - var alphaComponent: CGFloat { - var alpha: CGFloat = 0 - getRed(nil, green: nil , blue: nil, alpha: &alpha) - return alpha - } - - var hueComponent: CGFloat { - var hue: CGFloat = 0 - getHue(&hue, saturation: nil, brightness: nil, alpha: nil) - return hue - } - - var saturationComponent: CGFloat { - var saturation: CGFloat = 0 - getHue(nil, saturation: &saturation, brightness: nil, alpha: nil) - return saturation - } - - var brightnessComponent: CGFloat { - var brightness: CGFloat = 0 - getHue(nil, saturation: nil, brightness: &brightness, alpha: nil) - return brightness - } -} - - -// MARK: - Blending - -public extension UIColor { - - /**adds hue, saturation, and brightness to the HSB components of this color (self)*/ - func add(hue: CGFloat, saturation: CGFloat, brightness: CGFloat, alpha: CGFloat) -> UIColor { - var (oldHue, oldSat, oldBright, oldAlpha) : (CGFloat, CGFloat, CGFloat, CGFloat) = (0,0,0,0) - getHue(&oldHue, saturation: &oldSat, brightness: &oldBright, alpha: &oldAlpha) - - // make sure new values doesn't overflow - var newHue = oldHue + hue - while newHue < 0.0 { newHue += 1.0 } - while newHue > 1.0 { newHue -= 1.0 } - - let newBright: CGFloat = max(min(oldBright + brightness, 1.0), 0) - let newSat: CGFloat = max(min(oldSat + saturation, 1.0), 0) - let newAlpha: CGFloat = max(min(oldAlpha + alpha, 1.0), 0) - - return UIColor(hue: newHue, saturation: newSat, brightness: newBright, alpha: newAlpha) - } - - /**adds red, green, and blue to the RGB components of this color (self)*/ - func add(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) -> UIColor { - var (oldRed, oldGreen, oldBlue, oldAlpha) : (CGFloat, CGFloat, CGFloat, CGFloat) = (0,0,0,0) - getRed(&oldRed, green: &oldGreen, blue: &oldBlue, alpha: &oldAlpha) - // make sure new values doesn't overflow - let newRed: CGFloat = max(min(oldRed + red, 1.0), 0) - let newGreen: CGFloat = max(min(oldGreen + green, 1.0), 0) - let newBlue: CGFloat = max(min(oldBlue + blue, 1.0), 0) - let newAlpha: CGFloat = max(min(oldAlpha + alpha, 1.0), 0) - return UIColor(red: newRed, green: newGreen, blue: newBlue, alpha: newAlpha) - } - - func add(hsb color: UIColor) -> UIColor { - var (h,s,b,a) : (CGFloat, CGFloat, CGFloat, CGFloat) = (0,0,0,0) - color.getHue(&h, saturation: &s, brightness: &b, alpha: &a) - return self.add(hue: h, saturation: s, brightness: b, alpha: 0) - } - - func add(rgb color: UIColor) -> UIColor { - return self.add(red: color.redComponent, green: color.greenComponent, blue: color.blueComponent, alpha: 0) - } - - func add(hsba color: UIColor) -> UIColor { - var (h,s,b,a) : (CGFloat, CGFloat, CGFloat, CGFloat) = (0,0,0,0) - color.getHue(&h, saturation: &s, brightness: &b, alpha: &a) - return self.add(hue: h, saturation: s, brightness: b, alpha: a) - } - - /**adds the rgb components of two colors*/ - func add(rgba color: UIColor) -> UIColor { - return self.add(red: color.redComponent, green: color.greenComponent, blue: color.blueComponent, alpha: color.alphaComponent) - } -} -#endif diff --git a/Pods/DDColorKit_Private/LICENSE b/Pods/DDColorKit_Private/LICENSE deleted file mode 100644 index b75c465..0000000 --- a/Pods/DDColorKit_Private/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2023 DDIsFriend - -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. diff --git a/Pods/DDColorKit_Private/README.md b/Pods/DDColorKit_Private/README.md deleted file mode 100644 index 389d201..0000000 --- a/Pods/DDColorKit_Private/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# DDColorKit_Private - -[![CI Status](https://img.shields.io/travis/DDIsFriend/DDColorKit_Private.svg?style=flat)](https://travis-ci.org/DDIsFriend/DDColorKit_Private) -[![Version](https://img.shields.io/cocoapods/v/DDColorKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDColorKit_Private) -[![License](https://img.shields.io/cocoapods/l/DDColorKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDColorKit_Private) -[![Platform](https://img.shields.io/cocoapods/p/DDColorKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDColorKit_Private) - -## Example - -To run the example project, clone the repo, and run `pod install` from the Example directory first. - -## Requirements - -## Installation - -DDColorKit_Private is available through [CocoaPods](https://cocoapods.org). To install -it, simply add the following line to your Podfile: - -```ruby -pod 'DDColorKit_Private' -``` - -## Author - -DDIsFriend, DDIsFriend@163.com - -## License - -DDColorKit_Private is available under the MIT license. See the LICENSE file for more info. diff --git a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDAttributedString/DDAttributedString.swift b/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDAttributedString/DDAttributedString.swift deleted file mode 100644 index 79e0ef4..0000000 --- a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDAttributedString/DDAttributedString.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDAttributedString.swift -// HichefuOfDriverCustomizeControls -// -// Created by 中道 on 2023/2/22. -// - -import Foundation -import DDBasicControlsKit_Private.DDBaseAttributedString - -open class DDAttributedString: DDBaseAttributedString { - -} diff --git a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDAttributedString/DDMutableAttributedString.swift b/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDAttributedString/DDMutableAttributedString.swift deleted file mode 100644 index cede09e..0000000 --- a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDAttributedString/DDMutableAttributedString.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDMutableAttributedString.swift -// HichefuOfDriverCustomizeControls -// -// Created by 中道 on 2023/2/22. -// - -import Foundation -import DDBasicControlsKit_Private.DDBaseMutableAttributedString - -open class DDMutableAttributedString: DDBaseMutableAttributedString { - -} diff --git a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDButton/DDButton.swift b/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDButton/DDButton.swift deleted file mode 100644 index 0830b11..0000000 --- a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDButton/DDButton.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDButton.swift -// HichefuOfDriverCustomizeControls -// -// Created by 中道 on 2023/2/13. -// - -import Foundation -import DDBasicControlsKit_Private.DDBaseButton - -open class DDButton: DDBaseButton { - -} diff --git a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDCollectionView/DDCollectionView.swift b/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDCollectionView/DDCollectionView.swift deleted file mode 100644 index 0dc6845..0000000 --- a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDCollectionView/DDCollectionView.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDCollectionView.swift -// OrderScheduling -// -// Created by 中道 on 2023/8/8. -// - -import Foundation -import DDBasicControlsKit_Private.DDBaseCollectionView - -open class DDCollectionView : DDBaseCollectionView { - -} diff --git a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDCollectionViewCell/DDCollectionViewCell.swift b/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDCollectionViewCell/DDCollectionViewCell.swift deleted file mode 100644 index 069d382..0000000 --- a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDCollectionViewCell/DDCollectionViewCell.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDCollectionViewCell.swift -// OrderScheduling -// -// Created by 中道 on 2023/8/8. -// - -import Foundation -import DDBasicControlsKit_Private.DDBaseCollectionViewCell - -open class DDCollectionViewCell : DDBaseCollectionViewCell { - -} diff --git a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDImage/DDImage.swift b/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDImage/DDImage.swift deleted file mode 100644 index d46be73..0000000 --- a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDImage/DDImage.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDImage.swift -// HichefuOfDriverCustomizeControls -// -// Created by 中道 on 2023/2/15. -// - -import Foundation -import DDBasicControlsKit_Private.DDBaseImage - -open class DDImage: DDBaseImage { - -} diff --git a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDImageView/DDImageView.swift b/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDImageView/DDImageView.swift deleted file mode 100644 index 2e03f0d..0000000 --- a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDImageView/DDImageView.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDImageView.swift -// HichefuOfDriverCustomizeControls -// -// Created by 中道 on 2023/2/15. -// - -import Foundation -import DDBasicControlsKit_Private.DDBaseImageView - -open class DDImageView: DDBaseImageView { - -} diff --git a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDLabel/DDLabel.swift b/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDLabel/DDLabel.swift deleted file mode 100644 index 1ca4f57..0000000 --- a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDLabel/DDLabel.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDLabel.swift -// HichefuOfDriverCustomizeControls -// -// Created by 中道 on 2023/2/13. -// - -import Foundation -import DDBasicControlsKit_Private.DDBaseLabel - -open class DDLabel: DDBaseLabel { - -} diff --git a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDNavigationController/DDNavigationController.swift b/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDNavigationController/DDNavigationController.swift deleted file mode 100644 index 0e12389..0000000 --- a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDNavigationController/DDNavigationController.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDNavigationController.swift -// HichefuOfDriverCustomizeControls -// -// Created by 中道 on 2023/2/21. -// - -import Foundation -import DDBasicControlsKit_Private - -open class DDNavigationController: DDBaseNavigationController { - -} diff --git a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDScrollView/DDScrollView.swift b/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDScrollView/DDScrollView.swift deleted file mode 100644 index 14798b2..0000000 --- a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDScrollView/DDScrollView.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDScrollView.swift -// HichefuOfDriverCustomizeControls -// -// Created by 中道 on 2023/2/26. -// - -import Foundation -import DDBasicControlsKit_Private.DDBaseScrollView - -open class DDScrollView: DDBaseScrollView { - -} diff --git a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDSwitch/DDSwitch.swift b/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDSwitch/DDSwitch.swift deleted file mode 100644 index e4e86f7..0000000 --- a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDSwitch/DDSwitch.swift +++ /dev/null @@ -1,14 +0,0 @@ -// -// DDSwitch.swift -// DDControlsKit_Private -// -// Created by 中道 on 2023/8/31. -// - -import Foundation -import DDBasicControlsKit_Private.DDBaseSwitch -import DDCategoryKit_Private.UISwitch_DDCategory - -open class DDSwitch : DDBaseSwitch { - -} diff --git a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDTableView/DDTableView.swift b/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDTableView/DDTableView.swift deleted file mode 100644 index 3c82b6f..0000000 --- a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDTableView/DDTableView.swift +++ /dev/null @@ -1,19 +0,0 @@ -// -// File.swift -// HichefuOfDriverHome -// -// Created by 中道 on 2023/2/10. -// - -import Foundation -import DDBasicControlsKit_Private.DDBaseTableView - -open class DDTableView: DDBaseTableView { - public override init(frame: CGRect, style: UITableView.Style) { - super.init(frame: frame, style: style) - } - - required public init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } -} diff --git a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDTableViewCell/DDTableViewCell.swift b/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDTableViewCell/DDTableViewCell.swift deleted file mode 100644 index f6aa5d9..0000000 --- a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDTableViewCell/DDTableViewCell.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// DDTableViewCell.swift -// HichefuOfDriverHome -// -// Created by 中道 on 2023/2/15. -// - -import Foundation -import DDBasicControlsKit_Private.DDBaseTableViewCell - -open class DDTableViewCell : DDBaseTableViewCell { - public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { - super.init(style: style, reuseIdentifier: reuseIdentifier) - - } - - required public init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - -} diff --git a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDTextField/DDTextField.swift b/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDTextField/DDTextField.swift deleted file mode 100644 index 3ad61e7..0000000 --- a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDTextField/DDTextField.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDTextFieldView.swift -// HichefuOfDriverCustomizeControls -// -// Created by 中道 on 2023/2/21. -// - -import Foundation -import DDBasicControlsKit_Private.DDBaseTextField - -open class DDTextField : DDBaseTextField { - -} diff --git a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDTextView/DDTextView.swift b/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDTextView/DDTextView.swift deleted file mode 100644 index 80bfe69..0000000 --- a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDTextView/DDTextView.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// DDTextView.swift -// HichefuOfDriverCustomizeControls -// -// Created by 中道 on 2023/2/22. -// - -import Foundation -import DDBasicControlsKit_Private.DDBaseTextView - -open class DDTextView: DDBaseTextView { - -} diff --git a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDView/DDView.swift b/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDView/DDView.swift deleted file mode 100644 index 821a1a7..0000000 --- a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDView/DDView.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// DDView.swift -// HichefuOfDriverCustomizeControls -// -// Created by 中道 on 2023/2/15. -// - -import Foundation -import DDBasicControlsKit_Private.DDBaseView - -open class DDView: DDBaseView { - - public override init(frame: CGRect) { - super.init(frame: frame) - - } - - required public init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - -} diff --git a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDViewController/DDViewController.swift b/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDViewController/DDViewController.swift deleted file mode 100644 index 4db92f3..0000000 --- a/Pods/DDControlsKit_Private/DDControlsKit_Private/Classes/DDViewController/DDViewController.swift +++ /dev/null @@ -1,44 +0,0 @@ -// -// DDViewController.swift -// HichefuOfDriverCustomizeControls -// -// Created by 中道 on 2023/2/13. -// - -import Foundation -import DDBasicControlsKit_Private.DDBaseViewController -import DDCategoryKit_Private - -open class DDViewController: DDBaseViewController { - - public override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { - super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) - - } - - public required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - open override func viewDidLoad() { - super.viewDidLoad() - } - - open override var preferredStatusBarStyle: UIStatusBarStyle{ - get{ - return .lightContent - } - } - - open override var shouldAutorotate: Bool { - return false - } - - open override var supportedInterfaceOrientations: UIInterfaceOrientationMask{ - return .portrait - } - - open override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation{ - return .portrait - } -} diff --git a/Pods/DDControlsKit_Private/LICENSE b/Pods/DDControlsKit_Private/LICENSE deleted file mode 100644 index b75c465..0000000 --- a/Pods/DDControlsKit_Private/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2023 DDIsFriend - -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. diff --git a/Pods/DDControlsKit_Private/README.md b/Pods/DDControlsKit_Private/README.md deleted file mode 100644 index ead597e..0000000 --- a/Pods/DDControlsKit_Private/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# DDControlsKit_Private - -[![CI Status](https://img.shields.io/travis/DDIsFriend/DDControlsKit_Private.svg?style=flat)](https://travis-ci.org/DDIsFriend/DDControlsKit_Private) -[![Version](https://img.shields.io/cocoapods/v/DDControlsKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDControlsKit_Private) -[![License](https://img.shields.io/cocoapods/l/DDControlsKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDControlsKit_Private) -[![Platform](https://img.shields.io/cocoapods/p/DDControlsKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDControlsKit_Private) - -## Example - -To run the example project, clone the repo, and run `pod install` from the Example directory first. - -## Requirements - -## Installation - -DDControlsKit_Private is available through [CocoaPods](https://cocoapods.org). To install -it, simply add the following line to your Podfile: - -```ruby -pod 'DDControlsKit_Private' -``` - -## Author - -DDIsFriend, DDIsFriend@163.com - -## License - -DDControlsKit_Private is available under the MIT license. See the LICENSE file for more info. diff --git a/Pods/DDDateKit_Private/DDDateKit_Private/Classes/DDDate.swift b/Pods/DDDateKit_Private/DDDateKit_Private/Classes/DDDate.swift deleted file mode 100644 index a658a3b..0000000 --- a/Pods/DDDateKit_Private/DDDateKit_Private/Classes/DDDate.swift +++ /dev/null @@ -1,213 +0,0 @@ -// -// DDDate.swift -// DDDateKit_Private -// Created by DDIsFriend on 2023/9/8. - - -import Foundation - -public let DDDATE = DDDate.default - -public enum DateFormatEnum : String { - case yyyyMMddHHmmssDefault = "yyyy-MM-dd HH:mm:ss" - case yyyyMMddDefault = "yyyy-MM-dd" - case HHmmssDefault = "HH:mm:ss" -} - -open class DDDate { - public static let `default` = DDDate() - // 设置一个全局使用的 - public var globalLocale : String = "zh_CN" - public var globalTimeZoneIdentifier : String = "UTC+8" - - func getLocale(locale:String?) -> String { - var _locale = globalLocale - if let locale { - _locale = locale - } - return _locale - } - - func getTimeZoneIdentifier(timeZoneIdentifier:String?) -> String { - var _timeZoneIdentifier = globalTimeZoneIdentifier - if let timeZoneIdentifier { - _timeZoneIdentifier = timeZoneIdentifier - } - return _timeZoneIdentifier - } - - func getDateFormatter(format:String,locale:String? = nil,timeZoneIdentifier:String? = nil) -> DateFormatter { - let dateFormatter = DateFormatter() - dateFormatter.dateFormat = format - dateFormatter.calendar = Calendar(identifier: .gregorian) - dateFormatter.locale = Locale(identifier: getLocale(locale: locale)) - dateFormatter.timeZone = TimeZone.init(identifier: getTimeZoneIdentifier(timeZoneIdentifier: timeZoneIdentifier)) - return dateFormatter - } -} - -extension Date { - - /// 返回一个毫秒的时间戳 - /// - Returns: 时间戳 - public func dd_timeintervalSssSince1970() -> TimeInterval { - let timeInterval = timeIntervalSince1970 - return timeInterval * 1000 - } - - /// 将日期转成字符串 - /// - Parameters: - /// - format: 指定字符串格式 - /// - locale: 本地化 - /// - timeZoneIdentifier: 时区 - /// - Returns: 时间的字符串格式 - public func dd_toString(format:DateFormatEnum,locale:String? = nil,timeZoneIdentifier:String? = nil) -> String { - return DDDATE.getDateFormatter(format: format.rawValue,locale: locale,timeZoneIdentifier: timeZoneIdentifier).string(from: self) - } - - /// 判断date是不是昨天 - /// - Returns: 是不是 - public func isYesterday() -> Bool { - return Calendar.current.isDateInYesterday(self) - } - - /// 判断date是不是今天 - /// - Returns: 是不是 - public func isToday() -> Bool { - return Calendar.current.isDateInToday(self) - } - - /// 判断date是不是明天 - /// - Returns: 是不是 - public func isTomorrow() -> Bool { - return Calendar.current.isDateInTomorrow(self) - } - - /// 指定一种固定模式,例如消息通知里时间的刚刚,今天,昨天以及指定日期模式 - /// - Returns: 返回字符串格式, - public func dd_pushNotificationDateFormatString() -> String { - let currentDate = Date() - let duration = currentDate.timeIntervalSince1970 - timeIntervalSince1970 - if duration < 0 { - return "时间穿越了" - } - - if isToday() == true { - let min = Int(floor(duration / 60)) - let hour = Int(floor(duration / 3600)) - - if duration < 60 { - return "刚刚" - } - - // 当小时存在且是今天 - if hour > 0 { - return "\(hour)小时前" - } - // 来到这里说明小时不存在 - if min > 0 { - return "\(min)分钟前" - } - - return "今天\(dd_toString(format: .HHmmssDefault))" - } - - if isYesterday() == true { - return "昨天\(dd_toString(format: .HHmmssDefault))" - } - - return dd_toString(format: .yyyyMMddHHmmssDefault) - } -} - -extension String { - /// 当前时间的字符串和另一个字符串时间进行大小的比较 - /// - Parameters: - /// - dateString: 比较的时间 - /// - format: 比较时间的格式,时间比较需保持格式一致 - /// - Returns: 大于返回true - public func dd_compare(dateString:String,format:DateFormatEnum) -> ComparisonResult? { - let date = dd_toDate(format: format) - let compareDate = dateString.dd_toDate(format: format) - guard date != nil,compareDate != nil else { - return nil - } - return date!.compare(compareDate!) - } - - /// 将日期的字符串转成date - /// - Parameters: - /// - format: 当前字符串日期的格式 - /// - locale: 本地化区域 - /// - timeZoneIdentifier: 时区 - /// - Returns: date - public func dd_toDate(format:DateFormatEnum,locale:String? = nil,timeZoneIdentifier:String? = nil) -> Date? { - return DDDATE.getDateFormatter(format: format.rawValue,locale: locale,timeZoneIdentifier: timeZoneIdentifier).date(from: self) - } - - - /// 将字符串转换成时间戳秒 - /// - Parameter format: 字符串时间格式 - /// - Returns: 时间戳 - public func dd_timeIntervalSince1970(format:DateFormatEnum) -> TimeInterval? { - let date = dd_toDate(format: format) - guard date != nil else { - return nil - } - return date!.timeIntervalSince1970 - } - - /// 将字符串转换成时间戳毫秒 - /// - Parameter format: 字符串时间格式 - /// - Returns: 时间戳 - public func dd_timeIntervalSssSince1970(format:DateFormatEnum) -> TimeInterval? { - let timeInterval = dd_timeIntervalSince1970(format: format) - guard timeInterval != nil else { - return nil - } - return timeInterval! * 1000 - } - - - /// 当前时间是不是昨天 - /// - Parameter format: 时间格式 - /// - Returns: 是不是 - public func isYesterday(format:DateFormatEnum) -> Bool { - let date = dd_toDate(format: format) - guard date != nil else { - return false - } - return date!.isYesterday() - } - - /// 当前时间是不是今天 - /// - Parameter format: 时间格式 - /// - Returns: 是不是 - public func isToday(format:DateFormatEnum) -> Bool { - let date = dd_toDate(format: format) - guard date != nil else { - return false - } - return date!.isToday() - } - - /// 当前时间是不是明天 - /// - Parameter format: 时间格式 - /// - Returns: 是不是 - public func isTomorrow(format:DateFormatEnum) -> Bool { - let date = dd_toDate(format: format) - guard date != nil else { - return false - } - return date!.isTomorrow() - } - - /// 指定一种固定模式,例如消息通知里时间的刚刚,今天,昨天以及指定日期模式 - /// - Parameters: - /// - format: 当前字符串时间的格式 - /// - Returns: 字符串 - public func dd_pushNotificationDateFormatString(format:DateFormatEnum) -> String? { - let date = dd_toDate(format: format) - return date?.dd_pushNotificationDateFormatString() - } -} diff --git a/Pods/DDDateKit_Private/LICENSE b/Pods/DDDateKit_Private/LICENSE deleted file mode 100644 index b75c465..0000000 --- a/Pods/DDDateKit_Private/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2023 DDIsFriend - -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. diff --git a/Pods/DDDateKit_Private/README.md b/Pods/DDDateKit_Private/README.md deleted file mode 100644 index 2890884..0000000 --- a/Pods/DDDateKit_Private/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# DDDateKit_Private - -[![CI Status](https://img.shields.io/travis/DDIsFriend/DDDateKit_Private.svg?style=flat)](https://travis-ci.org/DDIsFriend/DDDateKit_Private) -[![Version](https://img.shields.io/cocoapods/v/DDDateKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDDateKit_Private) -[![License](https://img.shields.io/cocoapods/l/DDDateKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDDateKit_Private) -[![Platform](https://img.shields.io/cocoapods/p/DDDateKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDDateKit_Private) - -## Example - -To run the example project, clone the repo, and run `pod install` from the Example directory first. - -## Requirements - -## Installation - -DDDateKit_Private is available through [CocoaPods](https://cocoapods.org). To install -it, simply add the following line to your Podfile: - -```ruby -pod 'DDDateKit_Private' -``` - -## Author - -DDIsFriend, DDIsFriend@163.com - -## License - -DDDateKit_Private is available under the MIT license. See the LICENSE file for more info. diff --git a/Pods/DDFontKit_Private/DDFontKit_Private/Classes/FontUtil.swift b/Pods/DDFontKit_Private/DDFontKit_Private/Classes/FontUtil.swift deleted file mode 100644 index 8b7189e..0000000 --- a/Pods/DDFontKit_Private/DDFontKit_Private/Classes/FontUtil.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// FontUtility.swift -// HichefuOfDriverUtility -// -// Created by 中道 on 2023/2/14. -// - -import Foundation - -extension UIFont { - @inlinable static public func regularFont(_ size:CGFloat) -> UIFont { - return UIFont.systemFont(ofSize: size, weight: .regular) - } - @inlinable static public func mediumFont(_ size:CGFloat) -> UIFont { - return UIFont.systemFont(ofSize: size, weight: .medium) - } - @inlinable static public func semiboldFont(_ size:CGFloat) -> UIFont { - return UIFont.systemFont(ofSize: size, weight: .semibold) - } -} diff --git a/Pods/DDFontKit_Private/LICENSE b/Pods/DDFontKit_Private/LICENSE deleted file mode 100644 index b75c465..0000000 --- a/Pods/DDFontKit_Private/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2023 DDIsFriend - -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. diff --git a/Pods/DDFontKit_Private/README.md b/Pods/DDFontKit_Private/README.md deleted file mode 100644 index 96991ef..0000000 --- a/Pods/DDFontKit_Private/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# DDFontKit_Private - -[![CI Status](https://img.shields.io/travis/DDIsFriend/DDFontKit_Private.svg?style=flat)](https://travis-ci.org/DDIsFriend/DDFontKit_Private) -[![Version](https://img.shields.io/cocoapods/v/DDFontKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDFontKit_Private) -[![License](https://img.shields.io/cocoapods/l/DDFontKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDFontKit_Private) -[![Platform](https://img.shields.io/cocoapods/p/DDFontKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDFontKit_Private) - -## Example - -To run the example project, clone the repo, and run `pod install` from the Example directory first. - -## Requirements - -## Installation - -DDFontKit_Private is available through [CocoaPods](https://cocoapods.org). To install -it, simply add the following line to your Podfile: - -```ruby -pod 'DDFontKit_Private' -``` - -## Author - -DDIsFriend, DDIsFriend@163.com - -## License - -DDFontKit_Private is available under the MIT license. See the LICENSE file for more info. diff --git a/Pods/DDLogKit_Private/DDLogKit_Private/Classes/OCLog/DDOCLog.h b/Pods/DDLogKit_Private/DDLogKit_Private/Classes/OCLog/DDOCLog.h deleted file mode 100644 index 5c16bf7..0000000 --- a/Pods/DDLogKit_Private/DDLogKit_Private/Classes/OCLog/DDOCLog.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDOCLog.h -// DDLogKit_Private -// Created by DDIsFriend on 2023/2/7. - - -#ifndef DDOCLog_h -#define DDOCLog_h - -#ifdef __OBJC__ - #ifndef DDLog - #define DDLog(format, ...) NSLog((@"[函数名:%s]\n[内容:" format @"]"),__FUNCTION__, ##__VA_ARGS__); - #endif -#endif - -#endif /* DDOCLog_h */ diff --git a/Pods/DDLogKit_Private/DDLogKit_Private/Classes/SwiftLog/DDSwiftLog.swift b/Pods/DDLogKit_Private/DDLogKit_Private/Classes/SwiftLog/DDSwiftLog.swift deleted file mode 100644 index bc5fe7c..0000000 --- a/Pods/DDLogKit_Private/DDLogKit_Private/Classes/SwiftLog/DDSwiftLog.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// DDSwiftLog.swift -// DDLogKit_Private -// Created by DDIsFriend on 2023/2/7. - - -import Foundation - -public func DDLog(message:N,fileName:String = #file,methodName:String = #function,lineNumber:Int = #line){ -#if DEBUG -// print("\(fileName as NSString)\n方法:\(methodName)\n行号:\(lineNumber)\n打印信息\(message)") - print("[函数名:\(fileName as NSString) - \(methodName)]\n[内容:\(message)]") -// NSLog("[函数名:\(fileName as NSString) - \(methodName)]\n[内容:\(message)]") -#endif -} - diff --git a/Pods/DDLogKit_Private/LICENSE b/Pods/DDLogKit_Private/LICENSE deleted file mode 100644 index b75c465..0000000 --- a/Pods/DDLogKit_Private/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2023 DDIsFriend - -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. diff --git a/Pods/DDLogKit_Private/README.md b/Pods/DDLogKit_Private/README.md deleted file mode 100644 index a818b4d..0000000 --- a/Pods/DDLogKit_Private/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# DDLogKit_Private - -[![CI Status](https://img.shields.io/travis/DDIsFriend/DDLogKit_Private.svg?style=flat)](https://travis-ci.org/DDIsFriend/DDLogKit_Private) -[![Version](https://img.shields.io/cocoapods/v/DDLogKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDLogKit_Private) -[![License](https://img.shields.io/cocoapods/l/DDLogKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDLogKit_Private) -[![Platform](https://img.shields.io/cocoapods/p/DDLogKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDLogKit_Private) - -## Example - -To run the example project, clone the repo, and run `pod install` from the Example directory first. - -## Requirements - -## Installation - -DDLogKit_Private is available through [CocoaPods](https://cocoapods.org). To install -it, simply add the following line to your Podfile: - -```ruby -pod 'DDLogKit_Private' -``` - -## Author - -DDIsFriend, DDIsFriend@163.com - -## License - -DDLogKit_Private is available under the MIT license. See the LICENSE file for more info. diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Assets/car_xingshi.png b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Assets/car_xingshi.png deleted file mode 100644 index fb577d7..0000000 Binary files a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Assets/car_xingshi.png and /dev/null differ diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Assets/car_xingshi@2x.png b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Assets/car_xingshi@2x.png deleted file mode 100644 index e869011..0000000 Binary files a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Assets/car_xingshi@2x.png and /dev/null differ diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Assets/car_xingshi@3x.png b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Assets/car_xingshi@3x.png deleted file mode 100644 index 2827aef..0000000 Binary files a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Assets/car_xingshi@3x.png and /dev/null differ diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMALocation/DDMALocationManager.h b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMALocation/DDMALocationManager.h deleted file mode 100644 index d6c0dbc..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMALocation/DDMALocationManager.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// DDMALocationManager.h -// DDMAMapKit_Private -// Created by DDIsFriend on 2023/2/24. - - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol DDMALocationManagerDelegate - -@optional -- (void)ddMALocationManager:(AMapLocationManager *)manager doRequireLocationAuth:(CLLocationManager*)locationManager; - -- (void)ddMALocationManager:(AMapLocationManager *)manager locationManager:(CLLocationManager *_Nullable)locationManager didChangeAuthorization:(CLAuthorizationStatus)authorizationStatus accuracyAuthorization:(CLAccuracyAuthorization)accuracyAuthorization; - -- (void)ddMALocationManager:(AMapLocationManager *)manager didFailWithError:(NSError *)error; - -- (void)ddMALocationManager:(AMapLocationManager *)manager didUpdateHeading:(CLHeading *)heading; - -- (void)ddMALocationManager:(AMapLocationManager *)manager didUpdateLocation:(CLLocation *)location reGeocode:(AMapLocationReGeocode *)reGeocode; - -@end - -@interface DDMALocationManager : NSObject -// 请在使用该类前先设置appkey -+ (void)startWithAppKey:(nullable NSString *)appKey; - -// 在创建该类实例前调用 -+ (void)agreePrivacy; - -@property (nonatomic, strong)AMapLocationManager *maLocationManager; - -@property (nonatomic, weak)id delegate; - -@property (nonatomic, assign)BOOL forceFullAccuracy; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMALocation/DDMALocationManager.m b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMALocation/DDMALocationManager.m deleted file mode 100644 index 3d5582f..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMALocation/DDMALocationManager.m +++ /dev/null @@ -1,135 +0,0 @@ -// -// DDMALocationManager.m -// DDMAMapKit_Private -// Created by DDIsFriend on 2023/2/24. - - -#import "DDMALocationManager.h" -//#import - -@interface DDMALocationManager () - -@end - -@implementation DDMALocationManager -// MARK: -+ (void)startWithAppKey:(nullable NSString *)appKey{ - [[AMapServices sharedServices] setEnableHTTPS:YES]; - [AMapServices sharedServices].apiKey = appKey; -} - -+ (void)agreePrivacy{ - [AMapLocationManager updatePrivacyShow:AMapPrivacyShowStatusDidShow privacyInfo:AMapPrivacyInfoStatusDidContain]; - [AMapLocationManager updatePrivacyAgree:AMapPrivacyAgreeStatusDidAgree]; -} - -- (AMapLocationManager *)maLocationManager{ - if (_maLocationManager == nil) { - _maLocationManager = [AMapLocationManager new]; - _maLocationManager.delegate = self; - } - return _maLocationManager; -} - -// MARK: -- (void)amapLocationManager:(AMapLocationManager *)manager doRequireLocationAuth:(CLLocationManager*)locationManager{ - if ([self.delegate respondsToSelector:@selector(ddMALocationManager:doRequireLocationAuth:)]) { - [self.delegate ddMALocationManager:manager doRequireLocationAuth:locationManager]; - }else{ - [locationManager requestWhenInUseAuthorization]; - } -} - -- (void)amapLocationManager:(AMapLocationManager *)manager doRequireTemporaryFullAccuracyAuth:(CLLocationManager *)locationManager completion:(void (^)(NSError *))completion API_AVAILABLE(ios(14.0)){ - if (locationManager.accuracyAuthorization == CLAccuracyAuthorizationReducedAccuracy) { - /// Every time you open the app and detect that the positioning accuracy is reduce, you need to apply for a temporary full accuracy. - [self ddMALocationManager:locationManager requestTemporaryFullAccuracyAuthorizationWithCompletion:^(NSError * _Nullable error) { - - }]; - } -} - -- (void)amapLocationManager:(AMapLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status API_DEPRECATED("",ios(11.0 , 13.0)){ - [self ddMACombineManager:manager locationManager:nil didChangeAuthorization:[CLLocationManager authorizationStatus] accuracyAuthorization:CLAccuracyAuthorizationFullAccuracy]; -} - -- (void)amapLocationManager:(AMapLocationManager *)manager locationManagerDidChangeAuthorization:(CLLocationManager*)locationManager API_AVAILABLE(ios(14.0)){ - CLAccuracyAuthorization accuracyAuthorization = CLAccuracyAuthorizationFullAccuracy; - if (locationManager.accuracyAuthorization == CLAccuracyAuthorizationFullAccuracy) { - accuracyAuthorization = CLAccuracyAuthorizationFullAccuracy; - }else if (locationManager.accuracyAuthorization == CLAccuracyAuthorizationReducedAccuracy){ - accuracyAuthorization = CLAccuracyAuthorizationReducedAccuracy; - /// When opening the app authorization location for the first time, a temporary promt is also required. - [self ddMALocationManager:locationManager requestTemporaryFullAccuracyAuthorizationWithCompletion:^(NSError * _Nullable error) { - - }]; - } - [self ddMACombineManager:manager locationManager:locationManager didChangeAuthorization:[locationManager authorizationStatus] accuracyAuthorization:accuracyAuthorization]; -} - -- (void)ddMALocationManager:(CLLocationManager *_Nullable)locationManager requestTemporaryFullAccuracyAuthorizationWithCompletion:(void(^)(NSError *_Nullable error))completion API_AVAILABLE(ios(14.0)) { - /// This is async. - [locationManager requestTemporaryFullAccuracyAuthorizationWithPurposeKey:@"FORCE_FULL_ACCURACY" completion:^(NSError * _Nullable error) { - // 授权定位下才能请求单次定位,不然会有性能问题 - BOOL canBeLocated = (locationManager.authorizationStatus == kCLAuthorizationStatusAuthorizedAlways || locationManager.authorizationStatus == kCLAuthorizationStatusAuthorizedWhenInUse); - - if (canBeLocated && locationManager.accuracyAuthorization == CLAccuracyAuthorizationReducedAccuracy && self.forceFullAccuracy) { - [self ddMALocationManager:locationManager requestTemporaryFullAccuracyAuthorizationWithCompletion:nil]; - } - }]; -} - -- (void)ddMACombineManager:(AMapLocationManager *)manager locationManager:(CLLocationManager *_Nullable)locationManager didChangeAuthorization:(CLAuthorizationStatus)authorizationStatus accuracyAuthorization:(CLAccuracyAuthorization)accuracyAuthorization{ - switch (authorizationStatus) { - case kCLAuthorizationStatusNotDetermined: -// DDLog("当前定位权限 - kCLAuthorizationStatusNotDetermined"); - break; - case kCLAuthorizationStatusDenied: -// DDLog("当前定位权限 - kCLAuthorizationStatusDenied"); - break; - case kCLAuthorizationStatusRestricted: -// DDLog("当前定位权限 - kCLAuthorizationStatusRestricted"); - break; - case kCLAuthorizationStatusAuthorizedAlways: -// DDLog("当前定位权限 - kCLAuthorizationStatusAuthorizedAlways"); - break; - case kCLAuthorizationStatusAuthorizedWhenInUse: -// DDLog("当前定位权限 - kCLAuthorizationStatusAuthorizedWhenInUse"); - break; - default: - break; - } - switch (accuracyAuthorization) { - case CLAccuracyAuthorizationFullAccuracy: -// DDLog("当前精度 - CLAccuracyAuthorizationFullAccuracy"); - break; - case CLAccuracyAuthorizationReducedAccuracy: -// DDLog("当前精度 - CLAccuracyAuthorizationReducedAccuracy"); - break; - default: - break; - } - - if ([self.delegate respondsToSelector:@selector(ddMALocationManager:locationManager:didChangeAuthorization:accuracyAuthorization:)]){ - [self.delegate ddMALocationManager:manager locationManager:locationManager didChangeAuthorization:authorizationStatus accuracyAuthorization:accuracyAuthorization]; - } -} - -- (void)amapLocationManager:(AMapLocationManager *)manager didUpdateLocation:(CLLocation *)location reGeocode:(AMapLocationReGeocode *)reGeocode{ - if ([self.delegate respondsToSelector:@selector(ddMALocationManager:didUpdateLocation:reGeocode:)]) { - [self.delegate ddMALocationManager:manager didUpdateLocation:location reGeocode:reGeocode]; - } -} - -- (void)amapLocationManager:(AMapLocationManager *)manager didFailWithError:(NSError *)error{ - if ([self.delegate respondsToSelector:@selector(ddMALocationManager:didFailWithError:)]) { - [self.delegate ddMALocationManager:manager didFailWithError:error]; - } -} - -- (void)amapLocationManager:(AMapLocationManager *)manager didUpdateHeading:(CLHeading *)heading{ - if ([self.delegate respondsToSelector:@selector(ddMALocationManager:didUpdateHeading:)]) { - [self.delegate ddMALocationManager:manager didUpdateHeading:heading]; - } -} -@end diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Annotation/DriveRouteCustomAnnotation.h b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Annotation/DriveRouteCustomAnnotation.h deleted file mode 100644 index 7b55ed4..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Annotation/DriveRouteCustomAnnotation.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// DriveRouteCustomAnnotation.h -// DDMAMapKit_Private -// Created by DDIsFriend on 2023/2/3. - - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DriveRouteCustomAnnotation : MAPointAnnotation -@property (nonatomic, copy)NSAttributedString *customAttributedText; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Annotation/DriveRouteCustomAnnotation.m b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Annotation/DriveRouteCustomAnnotation.m deleted file mode 100644 index f08e8b1..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Annotation/DriveRouteCustomAnnotation.m +++ /dev/null @@ -1,11 +0,0 @@ -// -// DriveRouteCustomAnnotation.m -// DDMAMapKit_Private -// Created by DDIsFriend on 2023/2/3. - - -#import "DriveRouteCustomAnnotation.h" - -@implementation DriveRouteCustomAnnotation - -@end diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Annotation/MAPointAnnotation+DDCategory.h b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Annotation/MAPointAnnotation+DDCategory.h deleted file mode 100644 index a1b55b4..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Annotation/MAPointAnnotation+DDCategory.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// MAPointAnnotation+DDCategory.h -// DDMAMapKit_Private -// Created by DDIsFriend on 2023/1/31. - - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface MAPointAnnotation (DDCategory) -// 自定义图片 -@property (nonatomic, strong, nullable)UIImage *dd_image; - -// 自定义气泡的view -@property (nonatomic, strong, nullable)UIView *customCalloutView; - -// 类型字符 -@property (nonatomic, strong)Class annotationClass; - -// tag -@property (nonatomic, assign)long tag; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Annotation/MAPointAnnotation+DDCategory.m b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Annotation/MAPointAnnotation+DDCategory.m deleted file mode 100644 index f073061..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Annotation/MAPointAnnotation+DDCategory.m +++ /dev/null @@ -1,42 +0,0 @@ -// -// MAPointAnnotation+DDCategory.m -// DDMAMapKit_Private -// Created by DDIsFriend on 2023/1/31. - - -#import "MAPointAnnotation+DDCategory.h" -#import - -@implementation MAPointAnnotation (DDCategory) -- (void)setDd_image:(UIImage *)dd_image{ - objc_setAssociatedObject(self, @selector(dd_image), dd_image, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (nullable UIImage *)dd_image{ - return objc_getAssociatedObject(self, _cmd); -} - -- (void)setCustomCalloutView:(UIView *)customCalloutView{ - objc_setAssociatedObject(self, @selector(customCalloutView), customCalloutView, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (nullable UIView *)customCalloutView{ - return objc_getAssociatedObject(self, _cmd); -} - -- (void)setAnnotationClass:(Class)annotationClass{ - objc_setAssociatedObject(self, @selector(annotationClass), annotationClass, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (Class)annotationClass{ - return objc_getAssociatedObject(self, _cmd); -} - -- (void)setTag:(int)tag{ - objc_setAssociatedObject(self, @selector(tag), @(tag), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (int)tag{ - return [objc_getAssociatedObject(self, _cmd) intValue]; -} -@end diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/AnnotationView/DriveRouteCustomAnnotationView.h b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/AnnotationView/DriveRouteCustomAnnotationView.h deleted file mode 100644 index 644c0c7..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/AnnotationView/DriveRouteCustomAnnotationView.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// DriveRouteCustomAnnotationView.h -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/3. - - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DriveRouteCustomAnnotationView : MAAnnotationView -@property (nonatomic, strong)UILabel *customTextLabel; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/AnnotationView/DriveRouteCustomAnnotationView.m b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/AnnotationView/DriveRouteCustomAnnotationView.m deleted file mode 100644 index 80c87f7..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/AnnotationView/DriveRouteCustomAnnotationView.m +++ /dev/null @@ -1,37 +0,0 @@ -// -// DriveRouteCustomAnnotationView.m -// DDCategoryKit_Private -// Created by DDIsFriend on 2023/2/3. - - -#import "DriveRouteCustomAnnotationView.h" - -@interface DriveRouteCustomAnnotationView () - -@end - -@implementation DriveRouteCustomAnnotationView - -- (id)initWithAnnotation:(id )annotation reuseIdentifier:(NSString *)reuseIdentifier{ - self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier]; - if (self) { - [self addSubview:self.customTextLabel]; - - self.customTextLabel.translatesAutoresizingMaskIntoConstraints = NO; - [NSLayoutConstraint activateConstraints:@[ - [self.customTextLabel.heightAnchor constraintEqualToConstant:30], - [self.customTextLabel.bottomAnchor constraintEqualToAnchor:self.topAnchor constant:0], - [self.customTextLabel.centerXAnchor constraintEqualToAnchor:self.centerXAnchor], - ]]; - } - return self; -} - -// MARK: -- (UILabel *)customTextLabel{ - if (_customTextLabel == nil) { - _customTextLabel = [[UILabel alloc] init]; - } - return _customTextLabel; -} -@end diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/MapView/DDMAMapView.h b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/MapView/DDMAMapView.h deleted file mode 100644 index b3bbafb..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/MapView/DDMAMapView.h +++ /dev/null @@ -1,168 +0,0 @@ -// -// DDMAMapView.h -// DDMAMapKit_Private -// Created by DDIsFriend on 2023/1/30. - - -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol DDMAMapViewDelegate; -@class DDAnnotationView; -@class DDAnnotation; - -@interface DDMAMapView : UIView -@property (nonatomic, strong, nonnull)MAMapView *maMapView UI_APPEARANCE_SELECTOR; - -@property (nonatomic, weak)id delegate; - -// 请在使用该类前先设置appkey -+ (void)startWithAppKey:(nullable NSString *)appKey; - -// 在创建该类实例前调用 -+ (void)agreePrivacy; - -- (MAOverlayRenderer *)dd_rendererForOverlay:(id )overlay; -@end - -@interface DDMAMapView (Location) - -/// @brief 用户当前位置的属性 -@property (nonatomic, readonly)MAUserLocation *maUserLocation; - -/// @brief 调用此方法来自定义当前位置小蓝点 -- (void)updateLocationViewWithParam:(MAUserLocationRepresentation *)representation; - -@end - -@interface DDMAMapView (Trace) - -@property (nonatomic, strong)MATraceReplayOverlay *traceReplayOverlay; - -@property (nonatomic, strong)MATraceReplayOverlayRenderer *traceReplayOverlayRenderer; - -@end - -@protocol DDMAMapViewDelegate - -@optional - -/** - * @brief 地图开始加载 - * @param mapView 地图View - */ -- (void)dd_mapViewWillStartLoadingMap:(MAMapView *)mapView; - -/** - * @brief 地图加载成功 - * @param mapView 地图View - */ -- (void)dd_mapViewDidFinishLoadingMap:(MAMapView *)mapView; - -/** - * @brief 地图加载失败 - * @param mapView 地图View - * @param error 错误信息 - */ -- (void)dd_mapViewDidFailLoadingMap:(MAMapView *)mapView withError:(NSError *)error; - -/** - * @brief 地形图加载失败 - * @param mapView 地图View - * @param error 错误信息 - */ -- (void)dd_mapView:(MAMapView *)mapView didFailLoadTerrainWithError:(NSError *)error; - -/** - * @brief 地图将要发生缩放时调用此接口 - * @param mapView 地图view - * @param wasUserAction 标识是否是用户动作 - */ -- (void)dd_mapView:(MAMapView *)mapView mapWillZoomByUser:(BOOL)wasUserAction; - -/** - * @brief 地图缩放结束后调用此接口 - * @param mapView 地图view - * @param wasUserAction 标识是否是用户动作 - */ -- (void)dd_mapView:(MAMapView *)mapView mapDidZoomByUser:(BOOL)wasUserAction; - -/** - * @brief 在地图View将要启动定位时,会调用此函数 - * @param mapView 地图View - */ -- (void)dd_mapViewWillStartLocatingUser:(MAMapView *)mapView; - -/** - * @brief 在地图View停止定位后,会调用此函数 - * @param mapView 地图View - */ -- (void)dd_mapViewDidStopLocatingUser:(MAMapView *)mapView; - -/** - * @brief 位置或者设备方向更新后,会调用此函数 - * @param mapView 地图View - * @param userLocation 用户定位信息(包括位置与设备方向等数据) - * @param updatingLocation 标示是否是location数据更新, YES:location数据更新 NO:heading数据更新 - */ -- (void)dd_mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation; - -/** - * @brief 当plist配置NSLocationAlwaysUsageDescription或者NSLocationAlwaysAndWhenInUseUsageDescription,并且[CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined,会调用代理的此方法。 - 此方法实现调用后台权限API即可( 该回调必须实现 [locationManager requestAlwaysAuthorization] ); since 6.8.0 - * @param locationManager 地图的CLLocationManager。 - */ -- (void)dd_mapViewRequireLocationAuth:(CLLocationManager *)locationManager; - -/** - * @brief 定位失败后,会调用此函数 - * @param mapView 地图View - * @param error 错误号,参考CLError.h中定义的错误号 - */ -- (void)dd_mapView:(MAMapView *)mapView didFailToLocateUserWithError:(NSError *)error; - -/** - * @brief 根据anntation生成对应的View。 - - 注意: - 1、5.1.0后由于定位蓝点增加了平滑移动功能,如果在开启定位的情况先添加annotation,需要在此回调方法中判断annotation是否为MAUserLocation,从而返回正确的View。 - if ([annotation isKindOfClass:[MAUserLocation class]]) { - return nil; - } - - 2、请不要在此回调中对annotation进行select和deselect操作,此时annotationView还未添加到mapview。 - - * @param mapView 地图View - * @param annotation 指定的标注 - * @return 生成的标注View - */ -- (MAAnnotationView *)dd_mapView:(MAMapView *)mapView viewForAnnotation:(id )annotation; - -/** - * @brief 根据overlay生成对应的Renderer - * @param mapView 地图View - * @param overlay 指定的overlay - * @return 生成的覆盖物Renderer - */ -- (MAOverlayRenderer *)dd_mapView:(MAMapView *)mapView rendererForOverlay:(id )overlay; - -/** - * @brief 标注view被点击时,触发该回调。(since 5.7.0) - * @param mapView 地图的view - * @param view annotationView - */ -- (void)dd_mapView:(MAMapView *)mapView didAnnotationViewTapped:(MAAnnotationView *)view; - -/** - * @brief 当mapView新添加overlay renderers时,调用此接口 - * @param mapView 地图View - * @param overlayRenderers 新添加的overlay renderers - */ -- (void)dd_mapView:(MAMapView *)mapView didAddOverlayRenderers:(NSArray *)overlayRenderers; - -@end -NS_ASSUME_NONNULL_END diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/MapView/DDMAMapView.m b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/MapView/DDMAMapView.m deleted file mode 100644 index 71ae95d..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/MapView/DDMAMapView.m +++ /dev/null @@ -1,256 +0,0 @@ -// -// DDMAMapView.m -// DDMAMapKit_Private -// Created by DDIsFriend on 2023/1/30. - - -#import "DDMAMapView.h" -#import -#import -#import -#import -#import - -@interface DDMAMapView () - -@end - -@implementation DDMAMapView -// MARK: -+ (void)startWithAppKey:(nullable NSString *)appKey{ - [[AMapServices sharedServices] setEnableHTTPS:YES]; - [AMapServices sharedServices].apiKey = appKey; -} - -+ (void)agreePrivacy{ - [MAMapView updatePrivacyShow:AMapPrivacyShowStatusDidShow privacyInfo:AMapPrivacyInfoStatusDidContain]; - [MAMapView updatePrivacyAgree:AMapPrivacyAgreeStatusDidAgree]; -} - -// MARK: -- (instancetype)initWithFrame:(CGRect)frame{ - self = [super initWithFrame:frame]; - if (!self) return nil; - - [self configMapView]; - - return self; -} - -- (void)configMapView{ -// MAMapView.metalEnabled = YES; - self.maMapView = [[MAMapView alloc] init]; - self.maMapView.delegate = self; - [self addSubview:self.maMapView]; - - self.maMapView.translatesAutoresizingMaskIntoConstraints = NO; - [NSLayoutConstraint activateConstraints:@[ - [self.maMapView.leftAnchor constraintEqualToAnchor:self.leftAnchor], - [self.maMapView.topAnchor constraintEqualToAnchor:self.topAnchor], - [self.maMapView.rightAnchor constraintEqualToAnchor:self.rightAnchor], - [self.maMapView.bottomAnchor constraintEqualToAnchor:self.bottomAnchor], - ]]; - - self.maMapView.showsIndoorMap = NO; - self.maMapView.zoomLevel = 16; - self.maMapView.mapType = MAMapTypeStandard; - - self.maMapView.showsCompass = NO; - self.maMapView.showsScale = NO; -} - -- (MAOverlayRenderer *)dd_rendererForOverlay:(id )overlay{ - return [self.maMapView rendererForOverlay:overlay]; -} - -// MARK: -- (void)mapViewWillStartLoadingMap:(MAMapView *)mapView{ - if ([self.delegate respondsToSelector:@selector(dd_mapViewWillStartLoadingMap:)]) { - [self.delegate dd_mapViewWillStartLoadingMap:mapView]; - } -} - -- (void)mapViewDidFinishLoadingMap:(MAMapView *)mapView{ - if ([self.delegate respondsToSelector:@selector(dd_mapViewDidFinishLoadingMap:)]) { - [self.delegate dd_mapViewDidFinishLoadingMap:mapView]; - } -} - -- (void)mapViewDidFailLoadingMap:(MAMapView *)mapView withError:(NSError *)error{ - if ([self.delegate respondsToSelector:@selector(dd_mapViewDidFailLoadingMap:withError:)]) { - [self.delegate dd_mapViewDidFailLoadingMap:mapView withError:error]; - } -} - -- (void)mapView:(MAMapView *)mapView didFailLoadTerrainWithError:(NSError *)error{ - if ([self.delegate respondsToSelector:@selector(dd_mapView:didFailLoadTerrainWithError:)]) { - [self.delegate dd_mapView:mapView didFailLoadTerrainWithError:error]; - } -} - -- (void)mapView:(MAMapView *)mapView mapWillZoomByUser:(BOOL)wasUserAction { - if ([self.delegate respondsToSelector:@selector(dd_mapView:mapWillZoomByUser:)]) { - [self.delegate dd_mapView:mapView mapWillZoomByUser:wasUserAction]; - } -} - -- (void)mapView:(MAMapView *)mapView mapDidZoomByUser:(BOOL)wasUserAction { - if ([self.delegate respondsToSelector:@selector(dd_mapView:mapDidZoomByUser:)]) { - [self.delegate dd_mapView:mapView mapDidZoomByUser:wasUserAction]; - } -} - -// MARK: -- (void)mapViewWillStartLocatingUser:(MAMapView *)mapView{ - if ([self.delegate respondsToSelector:@selector(dd_mapViewWillStartLocatingUser:)]) { - [self.delegate dd_mapViewWillStartLocatingUser:mapView]; - } -} - -- (void)mapViewDidStopLocatingUser:(MAMapView *)mapView{ - if ([self.delegate respondsToSelector:@selector(dd_mapViewDidStopLocatingUser:)]) { - [self.delegate dd_mapViewDidStopLocatingUser:mapView]; - } -} - -- (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation{ - if ([self.delegate respondsToSelector:@selector(dd_mapView:didUpdateUserLocation:updatingLocation:)]) { - [self.delegate dd_mapView:mapView didUpdateUserLocation:userLocation updatingLocation:updatingLocation]; - } -} - -- (void)mapViewRequireLocationAuth:(CLLocationManager *)locationManager { - if ([self.delegate respondsToSelector:@selector(dd_mapViewRequireLocationAuth:)]) { - [self.delegate dd_mapViewRequireLocationAuth:locationManager]; - } -} - -- (void)mapView:(MAMapView *)mapView didFailToLocateUserWithError:(NSError *)error{ - if ([self.delegate respondsToSelector:@selector(dd_mapView:didFailToLocateUserWithError:)]) { - [self.delegate dd_mapView:mapView didFailToLocateUserWithError:error]; - } -} - -- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id )annotation{ - if ([self.delegate respondsToSelector:@selector(dd_mapView:viewForAnnotation:)]) { - return [self.delegate dd_mapView:mapView viewForAnnotation:annotation]; - } - - if ([annotation isMemberOfClass:[MAPointAnnotation class]]){ - MAPointAnnotation *pointAnnotation = (MAPointAnnotation *)annotation; - static NSString *pointReuseIndentifier = @"pointReuseIndentifier"; - MAAnnotationView *annotationView = (MAAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:pointReuseIndentifier]; - if (annotationView == nil) - { - annotationView = [[MAAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:pointReuseIndentifier]; - } - annotationView.annotation = pointAnnotation; - annotationView.image = pointAnnotation.dd_image; - if (pointAnnotation.customCalloutView != nil) { - annotationView.customCalloutView = [[MACustomCalloutView alloc] initWithCustomView:pointAnnotation.customCalloutView]; - annotationView.canShowCallout = YES; - annotationView.selected = YES; - } - return annotationView; - } - - if ([annotation isMemberOfClass:[MAAnimatedAnnotation class]]) { - MAAnimatedAnnotation *animatedAnnotation = (MAAnimatedAnnotation *)annotation; - static NSString *pointReuseIndentifier = @"AnimatedAnnotationPointReuseIndentifier"; - MAAnnotationView *annotationView = (MAAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:pointReuseIndentifier]; - if (annotationView == nil) - { - annotationView = [[MAAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:pointReuseIndentifier]; - } - annotationView.annotation = animatedAnnotation; - annotationView.image = animatedAnnotation.dd_image; - return annotationView; - } - - if ([annotation isMemberOfClass:[DriveRouteCustomAnnotation class]]){ - DriveRouteCustomAnnotation *pointAnnotation = (DriveRouteCustomAnnotation *)annotation; - static NSString *pointReuseIndentifier = @"DriveRouteCustomAnnotationPointReuseIndentifier"; - DriveRouteCustomAnnotationView *annotationView = (DriveRouteCustomAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:pointReuseIndentifier]; - if (annotationView == nil) - { - annotationView = [[DriveRouteCustomAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:pointReuseIndentifier]; - } - annotationView.annotation = pointAnnotation; - annotationView.image = pointAnnotation.dd_image; - annotationView.customTextLabel.attributedText = pointAnnotation.customAttributedText; - return annotationView; - } - - return nil; -} - -- (MAOverlayRenderer *)mapView:(MAMapView *)mapView rendererForOverlay:(id )overlay{ - if ([self.delegate respondsToSelector:@selector(dd_mapView:rendererForOverlay:)]) { - return [self.delegate dd_mapView:mapView rendererForOverlay:overlay]; - } - - if ([overlay isMemberOfClass:[MAPolyline class]]){ - MAPolyline *polyline = (MAPolyline *)overlay; - MAPolylineRenderer *polylineRenderer = [[MAPolylineRenderer alloc] initWithPolyline:polyline]; - polylineRenderer.lineWidth = polyline.dd_lineWidth; - polylineRenderer.strokeColor = polyline.dd_strokeColor; - polylineRenderer.lineJoinType = polyline.dd_lineJoinType; - polylineRenderer.lineCapType = polyline.dd_lineCapType; - return polylineRenderer; - } - - if ([overlay isMemberOfClass:[MATraceReplayOverlay class]]) { - MATraceReplayOverlay *traceReplayOverlay = (MATraceReplayOverlay *)overlay; - MATraceReplayOverlayRenderer *traceReplayOverlayRenderer = [[MATraceReplayOverlayRenderer alloc] initWithOverlay:traceReplayOverlay]; - traceReplayOverlayRenderer.lineWidth = traceReplayOverlay.dd_lineWidth; - traceReplayOverlayRenderer.strokeColors = traceReplayOverlay.dd_strokeColors; - traceReplayOverlayRenderer.lineJoinType = traceReplayOverlay.dd_lineJoinType; - traceReplayOverlayRenderer.lineCapType = traceReplayOverlay.dd_lineCapType; - self.traceReplayOverlay = traceReplayOverlay; - self.traceReplayOverlayRenderer = traceReplayOverlayRenderer; - return traceReplayOverlayRenderer; - } - - return nil; -} - -- (void)mapView:(MAMapView *)mapView didAnnotationViewTapped:(MAAnnotationView *)view{ - if ([self.delegate respondsToSelector:@selector(dd_mapView:didAnnotationViewTapped:)]) { - [self.delegate dd_mapView:mapView didAnnotationViewTapped:view]; - } -} - -- (void)mapView:(MAMapView *)mapView didAddOverlayRenderers:(NSArray *)overlayRenderers{ - if ([self.delegate respondsToSelector:@selector(dd_mapView:didAddOverlayRenderers:)]) { - [self.delegate dd_mapView:mapView didAddOverlayRenderers:overlayRenderers]; - } -} -@end - -@implementation DDMAMapView (Location) -- (MAUserLocation *)maUserLocation{ - return self.maMapView.userLocation; -} - -- (void)updateLocationViewWithParam:(MAUserLocationRepresentation *)representation{ - [self.maMapView updateUserLocationRepresentation:representation]; -} -@end - -@implementation DDMAMapView (Trace) -- (void)setTraceReplayOverlay:(MATraceReplayOverlay *)traceReplayOverlay{ - objc_setAssociatedObject(self, @selector(traceReplayOverlay), traceReplayOverlay, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (MATraceReplayOverlay *)traceReplayOverlay{ - return objc_getAssociatedObject(self, _cmd); -} - -- (void)setTraceReplayOverlayRenderer:(MATraceReplayOverlayRenderer *)traceReplayOverlayRenderer{ - objc_setAssociatedObject(self, @selector(traceReplayOverlayRenderer), traceReplayOverlayRenderer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (MATraceReplayOverlayRenderer *)traceReplayOverlayRenderer{ - return objc_getAssociatedObject(self, _cmd); -} -@end diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Overlay/MABaseOverlay+DDCategory.h b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Overlay/MABaseOverlay+DDCategory.h deleted file mode 100644 index fedf56a..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Overlay/MABaseOverlay+DDCategory.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// MABaseOverlay+DDCategory.h -// DDMAMapKit_Private -// Created by DDIsFriend on 2023/2/1. - - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface MABaseOverlay (DDCategory) -@property (nonatomic, assign)CGFloat dd_lineWidth; - -@property (nonatomic, strong)UIColor *dd_strokeColor; - -@property (nonatomic, strong)NSArray *dd_strokeColors; - -@property (nonatomic, assign)MALineJoinType dd_lineJoinType; - -@property (nonatomic, assign)MALineCapType dd_lineCapType; - -@property (nonatomic, assign)int tag; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Overlay/MABaseOverlay+DDCategory.m b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Overlay/MABaseOverlay+DDCategory.m deleted file mode 100644 index c1c178a..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Overlay/MABaseOverlay+DDCategory.m +++ /dev/null @@ -1,58 +0,0 @@ -// -// MABaseOverlay+DDCategory.m -// DDMAMapKit_Private -// Created by DDIsFriend on 2023/2/1. - - -#import "MABaseOverlay+DDCategory.h" -#import - -@implementation MABaseOverlay (DDCategory) -- (void)setDd_lineWidth:(CGFloat)dd_lineWidth{ - objc_setAssociatedObject(self, @selector(dd_lineWidth), @(dd_lineWidth), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (CGFloat)dd_lineWidth{ - return [objc_getAssociatedObject(self, _cmd) floatValue]; -} - -- (void)setDd_strokeColor:(UIColor *)dd_strokeColor{ - objc_setAssociatedObject(self, @selector(dd_strokeColor), dd_strokeColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (UIColor *)dd_strokeColor{ - return objc_getAssociatedObject(self, _cmd); -} - -- (void)setDd_strokeColors:(NSArray *)dd_strokeColors{ - objc_setAssociatedObject(self, @selector(dd_strokeColors), dd_strokeColors, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (NSArray *)dd_strokeColors{ - return objc_getAssociatedObject(self, _cmd); -} - -- (void)setDd_lineJoinType:(MALineJoinType)dd_lineJoinType{ - objc_setAssociatedObject(self, @selector(dd_lineJoinType), @(dd_lineJoinType), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (MALineJoinType)dd_lineJoinType{ - return (MALineJoinType)[objc_getAssociatedObject(self, _cmd) intValue]; -} - -- (void)setDd_lineCapType:(MALineCapType)dd_lineCapType{ - objc_setAssociatedObject(self, @selector(dd_lineCapType), @(dd_lineCapType), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (MALineCapType)dd_lineCapType{ - return (MALineCapType)[objc_getAssociatedObject(self, _cmd) intValue]; -} - -- (void)setTag:(int)tag{ - objc_setAssociatedObject(self, @selector(tag), @(tag), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (int)tag{ - return [objc_getAssociatedObject(self, _cmd) intValue]; -} -@end diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlay+Addition.h b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlay+Addition.h deleted file mode 100644 index b625e1d..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlay+Addition.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// MATraceReplayOverlay+Addition.h -// MAMapKit -// -// Created by shaobin on 2017/4/20. -// Copyright © 2017年 Amap. All rights reserved. -// - -#import "MATraceReplayOverlay.h" - -@interface MATraceReplayOverlay (Addition) - -/** - * @brief 每次帧绘制时调用 - * @param timeDelta 时间 - * @param zoomLevel 地图zoom - */ -- (void)drawStepWithTime:(NSTimeInterval)timeDelta zoomLevel:(CGFloat)zoomLevel; - -/** - * @brief 获取内部mutlipolyine - */ -- (MAMultiPolyline *)getMultiPolyline; - -/** - * @brief 获取内部patchLine - */ -- (MAPolyline *)getPatchPolyline; - -@end diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlay.h b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlay.h deleted file mode 100644 index b5e2a23..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlay.h +++ /dev/null @@ -1,98 +0,0 @@ -// -// MATraceReplayOverlay.h -// MAMapKit -// -// Created by shaobin on 2017/4/20. -// Copyright © 2017年 Amap. All rights reserved. -// - -#import -#import -#import - -///轨迹回放overlay(since 5.1.0) -@interface MATraceReplayOverlay : MABaseOverlay - -///是否启动点抽稀,默认YES -@property (nonatomic, assign) BOOL enablePointsReduce; - -///小汽车移动速度,默认80 km/h, 单位米每秒 -@property (nonatomic, assign) CGFloat speed; - -///是否自动调整车头方向,默认NO -@property (nonatomic, assign) BOOL enableAutoCarDirection; - -///是否暂停, 初始为YES -@property (nonatomic, assign) BOOL isPaused; - -///各个点权重设置,取值1-5,5最大。权重为5则不对此点做抽稀。格式为:{weight:indices} -@property (nonatomic, strong) NSDictionary *pointsWeight; - -///当前在手动拖动进度条 -@property (nonatomic, assign) BOOL isManualSlider; - -/// 当前轨迹绘制进程 -@property (nonatomic, copy) void(^renderProgressHandler)(CGFloat progress); - -/** - * @brief 指定车辆当前位置 - */ -- (void)specifyVehicleLocation:(CGFloat)value; - -/** - * @brief 重置为初始状态 - */ -- (void)reset; - -/** - * @brief 根据map point设置轨迹点 - * @param points map point数据,points对应的内存会拷贝,调用者负责该内存的释放 - * @param count map point个数 - * @return 返回是否成功 - */ -- (BOOL)setWithPoints:(MAMapPoint *)points count:(NSInteger)count; - -/** - * @brief 根据经纬度坐标设置轨迹点 - * @param coords 经纬度坐标数据,coords对应的内存会拷贝,调用者负责该内存的释放 - * @param count 经纬度坐标个数 - * @return 返回是否成功 - */ -- (BOOL)setWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSInteger)count; - -/** - * @brief 获取所有的点数 - */ -- (NSInteger)getOrigPointCount; - -/** - * @brief 获取当前car所在位置点索引 - */ -- (NSInteger)getOrigPointIndexOfCar; - -/** - * @brief 获取抽稀后当前car所在位置点索引 - */ -- (NSInteger)getReducedPointIndexOfCar; - -/** - * @brief 获取行进方向,in radian - */ -- (CGFloat)getRunningDirection; - -/** - * @brief 获取索引index对应的mapPoint - */ -- (MAMapPoint)getMapPointOfIndex:(NSInteger)origIndex; - -/** - * @brief 获取小车位置 - */ -- (MAMapPoint)getCarPosition; - -/** - * @brief 预处理,加快后面的操作流畅度. 调用前不要把overlay加到mapview,在callback中再把overlay加到mapview - */ -- (void)prepareAsync:(void(^)())callback; - -@end diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlay.m b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlay.m deleted file mode 100644 index 3522f11..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlay.m +++ /dev/null @@ -1,535 +0,0 @@ -// -// MATraceReplayOverlay.m -// MAMapKit -// -// Created by shaobin on 2017/4/20. -// Copyright © 2017年 Amap. All rights reserved. -// - -#import "MATraceReplayOverlay.h" -#import "MATraceReplayOverlay+Addition.h" - -struct MATraceReplayPoint{ - double x; ///x = curP2->x; - curP1->y = curP2->y; - curP1->weight = 1; - curP1->flag = 1; - - curP1++; - curP2++; - } - - for(int i = 0; i < count - 1; ++i) { - MAMapPoint p1 = MAMapPointMake(_origMapPoints[i].x, _origMapPoints[i].y); - MAMapPoint p2 = MAMapPointMake(_origMapPoints[i+1].x, _origMapPoints[i+1].y); - _origMapPoints[i].distance = MAMetersBetweenMapPoints(p1, p2); - } - - if(oldPoints != NULL) { - free(oldPoints); - } - - [_reducedPointsCache removeAllObjects]; - - _needRecalculateMapPoints = YES; - [self recalculateMapPoints]; - - return YES; -} - -- (BOOL)setWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSInteger)count { - if(coords == NULL || count <= 0) { - if (_origMapPoints != NULL) { - free(_origMapPoints), _origMapPoints = NULL; - } - _origPointCount = 0; - - [_reducedPointsCache removeAllObjects]; - - _needRecalculateMapPoints = YES; - [self recalculateMapPoints]; - - return YES; - } - - MATraceReplayPoint *oldPoints = _origMapPoints; - _origMapPoints = (MATraceReplayPoint*)calloc(count, sizeof(MATraceReplayPoint)); - if(_origMapPoints == NULL) { - _origMapPoints = oldPoints; - return NO; - } - - _origPointCount = count; - MATraceReplayPoint *curP1 = _origMapPoints; - for(int i = 0; i < count; ++i) { - MAMapPoint p = MAMapPointForCoordinate(coords[i]); - curP1->x = p.x; - curP1->y = p.y; - curP1->weight = 1; - curP1->flag = 1; - - curP1++; - } - - for(int i = 0; i < count - 1; ++i) { - MAMapPoint p1 = MAMapPointMake(_origMapPoints[i].x, _origMapPoints[i].y); - MAMapPoint p2 = MAMapPointMake(_origMapPoints[i+1].x, _origMapPoints[i+1].y); - _origMapPoints[i].distance = MAMetersBetweenMapPoints(p1, p2); - } - - if(oldPoints != NULL) { - free(oldPoints); - } - - [_reducedPointsCache removeAllObjects]; - - _needRecalculateMapPoints = YES; - [self recalculateMapPoints]; - - return YES; -} - -- (void)setPointsWeight:(NSDictionary *)pointsWeight { - _pointsWeight = pointsWeight; - for(NSNumber *key in [pointsWeight allKeys]) { - int weight = key.intValue; - if(weight > 5 || weight < 1) { - continue; - } - - NSArray *indices = [pointsWeight objectForKey:key]; - for(NSNumber *index in indices) { - int i = index.intValue; - if(i < _origPointCount) { - _origMapPoints[i].weight = weight; - } - } - } - - [_reducedPointsCache removeAllObjects]; - - _needRecalculateMapPoints = YES; - [self recalculateMapPoints]; -} - -- (NSInteger)getOrigPointCount { - return _origPointCount; -} - -- (NSInteger)getOrigPointIndexOfCar { - return _carIndexInOrigArray; -} - -- (NSInteger)getReducedPointIndexOfCar { - if(!_enablePointsReduce) { - return [self getOrigPointIndexOfCar]; - } - - return _reducedPointIndexOfCar; -} - -- (CGFloat)getRunningDirection { - return _runningDirection; -} - -- (MAMapPoint)getMapPointOfIndex:(NSInteger)origIndex { - if(origIndex >= _origPointCount) { - return MAMapPointMake(0, 0); - } - return MAMapPointMake(_origMapPoints[origIndex].x, _origMapPoints[origIndex].y); -} - -- (MAMapPoint)getCarPosition { - return _carMapPoint; -} - -#pragma mark - overlay -- (MAMapRect)boundingMapRect { - if(_needRecalculateMapPoints) { - return MAMapRectWorld; - } - return _multiPolyline.boundingMapRect; -} - -- (CLLocationCoordinate2D)coordinate { - MAMapRect boundimgMapRect = [self boundingMapRect]; - return MACoordinateForMapPoint(MAMapPointMake(MAMapRectGetMidX(boundimgMapRect), MAMapRectGetMidY(boundimgMapRect))); -} - -#pragma mark - addition -- (MAMultiPolyline *)getMultiPolyline { - return _multiPolyline; -} - -- (MAPolyline *)getPatchPolyline { - return _patchLine; -} - -- (void)drawStepWithTime:(NSTimeInterval)timeDelta zoomLevel:(CGFloat)zoomLevel { - [self setZoomLevel:zoomLevel]; - - BOOL hasRecalculated = [self recalculateMapPoints]; - //计算小车位置索引 - if(!_isPaused || !_readyForDrawing || hasRecalculated) { - if(_isPaused) { - timeDelta = 0; - } - - //计算最后一个flag=1的点的索引 - NSInteger theLastIndex = _origPointCount - 1; - while(theLastIndex > 0 && _origMapPoints[theLastIndex].flag != 1) { - theLastIndex--; - } - - NSInteger curIndex = _carIndexInOrigArray; - if(curIndex >= (_origPointCount - 1)) { - _carMapPoint = MAMapPointMake(_origMapPoints[theLastIndex].x, _origMapPoints[theLastIndex].y); - [_patchLine setPolylineWithPoints:NULL count:0]; - _multiPolyline.drawStyleIndexes = @[@(_multiPolyline.pointCount - 1)]; - - _runningDirection = MAGetDirectionFromPoints(_multiPolyline.points[_multiPolyline.pointCount - 2], _multiPolyline.points[_multiPolyline.pointCount - 1]) * M_PI / 180; - self.isPaused = YES; - return; - } - - double deltaDistance = _speed * timeDelta; - _accumulatedDistance += deltaDistance; - while(curIndex < _origPointCount) { - double distance = _origMapPoints[curIndex].distance; - if(_accumulatedDistance > distance) { - curIndex++; - _accumulatedDistance -= distance; - - } else { - break; - } - } - - _carIndexInOrigArray = curIndex; - if(curIndex >= (_origPointCount - 1)) { - _carMapPoint = MAMapPointMake(_origMapPoints[theLastIndex].x, _origMapPoints[theLastIndex].y); - [_patchLine setPolylineWithPoints:NULL count:0]; - _multiPolyline.drawStyleIndexes = @[@(_multiPolyline.pointCount - 1)]; - - _runningDirection = MAGetDirectionFromPoints(_multiPolyline.points[_multiPolyline.pointCount - 2], _multiPolyline.points[_multiPolyline.pointCount - 1]) * M_PI / 180; - self.isPaused = YES; - return; - } - - //计算当前小车所在polyline的子线段的端点索引 - NSInteger prevIndex = curIndex; - NSInteger nextIndex = curIndex + 1; - while(prevIndex > 0 && _origMapPoints[prevIndex].flag != 1) { - prevIndex--; - } - while(nextIndex <= theLastIndex && _origMapPoints[nextIndex].flag != 1) { - nextIndex++; - } - - //计算小车位置 - double passedDistance = 0; - for(NSInteger i = prevIndex; i < curIndex; ++i) { - passedDistance += _origMapPoints[i].distance; - } - double totalDistance = passedDistance; - for(NSInteger i = curIndex; i < nextIndex; ++i) { - totalDistance += _origMapPoints[i].distance; - } - float ratio = (passedDistance + _accumulatedDistance) / totalDistance; - - MAMapPoint p1 = MAMapPointMake(_origMapPoints[prevIndex].x, _origMapPoints[prevIndex].y); - MAMapPoint p2 = MAMapPointMake(_origMapPoints[nextIndex].x, _origMapPoints[nextIndex].y); - _carMapPoint.x = p1.x + ratio * (p2.x - p1.x); - _carMapPoint.y = p1.y + ratio * (p2.y - p1.y); - - //计算小车方向 - _runningDirection = MAGetDirectionFromPoints(MAMapPointMake(p1.x, p1.y), MAMapPointMake(p2.x, p2.y)) * M_PI / 180; - - //更新小车在polyline里的索引 - NSInteger ret = 0; - for(int i = 0; i < prevIndex; ++i) { - if(_origMapPoints[i].flag == 1) { - ret++; - } - } - _reducedPointIndexOfCar = ret; - -// //更新polyline的drawIndex -// if(_carIndexInOrigArray == 0) { -// _multiPolyline.drawStyleIndexes = nil; -// //更新patchline -// [_patchLine setPolylineWithPoints:NULL count:0]; -// } else { - _multiPolyline.drawStyleIndexes = @[@(_reducedPointIndexOfCar + 1)]; - - //更新patchline - _patchLinePoints[0] = _carMapPoint; - _patchLinePoints[1] = p2; - [_patchLine setPolylineWithPoints:_patchLinePoints count:2]; -// } - } - - if(!_readyForDrawing) { - _readyForDrawing = YES; - } -} - -#pragma mark - private -- (void)setZoomLevel:(CGFloat)zoomLevel { - int prevZoomLevel = floor(_zoomLevel); - int currentoomLevel = floor(zoomLevel); - if(prevZoomLevel != currentoomLevel) { - _needRecalculateMapPoints = YES; - } - - _zoomLevel = zoomLevel; -} - -- (void)reducer_RDP:(MATraceReplayPoint *)inPoints - fromIndex:(NSInteger)fromIndex - toIndex:(NSInteger)toIndex - threshHold:(float)threshHold { - NSInteger count = toIndex - fromIndex + 1; - if(count <= 2) { - for(NSInteger i = 0; i < count; ++i) { - inPoints[i].flag = 1; - } - return; - } - - double max = 0; - NSInteger index = 0; - MAMapPoint firstPoint = MAMapPointMake(inPoints[fromIndex].x, inPoints[fromIndex].y); - MAMapPoint lastPoint = MAMapPointMake(inPoints[toIndex].x, inPoints[toIndex].y); - for(NSInteger i = fromIndex; i <= toIndex; ++i) { - MAMapPoint curP = MAMapPointMake(inPoints[i].x, inPoints[i].y); - double d = MAGetDistanceFromPointToLine(curP, firstPoint, lastPoint); - if(d > max) { - index = i; - max = d; - } - } - - if(max < threshHold) { - inPoints[fromIndex].flag = 1; - inPoints[toIndex].flag = 1; - } else { - [self reducer_RDP:inPoints fromIndex:fromIndex toIndex:index threshHold:threshHold]; - [self reducer_RDP:inPoints fromIndex:index toIndex:toIndex threshHold:threshHold]; - } -} - -- (BOOL)recalculateMapPoints { - if(!_needRecalculateMapPoints) { - return NO; - } - - ///重新做抽稀 - if(_enablePointsReduce) { - int zoomLevel = floor(_zoomLevel); - NSNumber *key = @(zoomLevel); - NSArray *indexArray = [_reducedPointsCache objectForKey:key]; - - for(NSInteger i = 0; i < _origPointCount; ++i) { - _origMapPoints[i].flag = 0; - } - - if(!indexArray) { - CGFloat metersPerPixel = exp2(19 - zoomLevel); - metersPerPixel = fmax(1, metersPerPixel); - [self reducer_RDP:_origMapPoints fromIndex:0 toIndex:_origPointCount - 1 threshHold:metersPerPixel]; - - NSMutableArray *tempArr = [NSMutableArray array]; - for(NSInteger i = 0; i < _origPointCount; ++i) { - if(_origMapPoints[i].flag == 1 || _origMapPoints[i].weight == 5) { - [tempArr addObject:@(i)]; - } - } - - indexArray = tempArr; - - [_reducedPointsCache setObject:indexArray forKey:key]; - } - - if (indexArray.count > 0) { - for(NSNumber *indexObj in indexArray) { - int index = indexObj.intValue; - _origMapPoints[index].flag = 1; - } - - NSInteger count = indexArray.count; - MAMapPoint *p = (MAMapPoint *)malloc(sizeof(MAMapPoint) * count); - if(p) { - for(int i = 0; i < count; ++i) { - NSNumber *indexObj = [indexArray objectAtIndex:i]; - int index = indexObj.intValue; - p[i].x = _origMapPoints[index].x; - p[i].y = _origMapPoints[index].y; - } - [_multiPolyline setPolylineWithPoints:p count:count drawStyleIndexes:nil]; - - free(p); - } - } - - } else { - MAMapPoint *p = (MAMapPoint *)malloc(sizeof(MAMapPoint) * _origPointCount); - if(p) { - for(int i = 0; i < _origPointCount; ++i) { - p[i].x = _origMapPoints[i].x; - p[i].y = _origMapPoints[i].y; - } - [_multiPolyline setPolylineWithPoints:p count:_origPointCount drawStyleIndexes:nil]; - - free(p); - } - } - - _needRecalculateMapPoints = NO; - return YES; -} - -- (void)prepareAsync:(void(^)())callback { - if([NSThread isMainThread]) { - __weak typeof(self) weakSelf = self; - dispatch_async(dispatch_get_global_queue(0, 0), ^{ - [weakSelf prepareAsync:callback]; - }); - } else { - for(NSInteger i = 0; i < _origPointCount; ++i) { - _origMapPoints[i].flag = 0; - } - - for(int zoomLevel = 3; zoomLevel <= 20; ++zoomLevel) { - CGFloat metersPerPixel = exp2(19 - zoomLevel); - metersPerPixel = fmax(1, metersPerPixel); - [self reducer_RDP:_origMapPoints fromIndex:0 toIndex:_origPointCount - 1 threshHold:metersPerPixel]; - - NSMutableArray *tempArr = [NSMutableArray array]; - for(NSInteger i = 0; i < _origPointCount; ++i) { - if(_origMapPoints[i].flag == 1 || _origMapPoints[i].weight == 5) { - [tempArr addObject:@(i)]; - } - } - - [_reducedPointsCache setObject:tempArr forKey:@(zoomLevel)]; - } - - dispatch_async(dispatch_get_main_queue(), ^{ - if(callback) { - callback(); - } - }); - } -} -@end diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlayRender.h b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlayRender.h deleted file mode 100644 index 2513c3b..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlayRender.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MATraceReplayOverlayRender.h -// MAMapKit -// -// Created by shaobin on 2017/4/20. -// Copyright © 2017年 Amap. All rights reserved. -// -#import -#import - -///轨迹回放overlay渲染器(since 5.1.0) -@interface MATraceReplayOverlayRenderer : MAOverlayPathRenderer - -///轨迹回放图标,会沿轨迹平滑移动 -@property (nonatomic, strong) UIImage *carImage; - -///分段绘制的颜色,需要分段颜色绘制时,数组大小必须是2,第一个颜色是走过轨迹的颜色,第二个颜色是未走过的 -@property (nonatomic, strong) NSArray *strokeColors; - -- (void)reset; - -@end diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlayRender.m b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlayRender.m deleted file mode 100644 index 19d3d43..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlayRender.m +++ /dev/null @@ -1,343 +0,0 @@ -// -// MATraceReplayOverlayRender.m -// MAMapKit -// -// Created by shaobin on 2017/4/20. -// Copyright © 2017年 Amap. All rights reserved. -// - -#import "MATraceReplayOverlayRender.h" -#import "MATraceReplayOverlay.h" -#import "MATraceReplayOverlay+Addition.h" -#import -#import - -typedef struct _MADrawPoint { - float x; - float y; -} MADrawPoint; - -@interface MATraceReplayOverlayRenderer () { - MAMultiColoredPolylineRenderer *_proxyRender; - NSTimeInterval _prevTime; - - MAPolylineRenderer *_patchLineRender; - - CGPoint _imageMapPoints[4]; - GLuint _textureName; - GLuint _programe; - GLuint _uniform_viewMatrix_location; - GLuint _uniform_projMatrix_location; - GLuint _attribute_position_location; - GLuint _attribute_texCoord_location; -} - -@end - -@implementation MATraceReplayOverlayRenderer - -- (id)initWithOverlay:(id)overlay { - if(![overlay isKindOfClass:[MATraceReplayOverlay class]]) { - return nil; - } - - self = [super initWithOverlay:overlay]; - if(self) { - MATraceReplayOverlay *traceOverlay = (MATraceReplayOverlay*)overlay; - _proxyRender = [[MAMultiColoredPolylineRenderer alloc] initWithMultiPolyline:[traceOverlay getMultiPolyline]]; - _proxyRender.gradient = NO; - _proxyRender.strokeColors = @[[UIColor grayColor], [UIColor greenColor]]; - _proxyRender.strokeColor = _proxyRender.strokeColors.lastObject; - - _patchLineRender = [[MAPolylineRenderer alloc] initWithPolyline:[traceOverlay getPatchPolyline]]; - _patchLineRender.strokeColor = _proxyRender.strokeColors.lastObject; - - NSString *bundlePath = [[NSBundle bundleForClass:[self class]].resourcePath stringByAppendingPathComponent:@"DDMAMapKit_Private"]; - NSString *bundleType = @".bundle"; - if (![bundlePath hasSuffix:bundleType]) { - bundlePath = [bundlePath stringByAppendingString:bundleType]; - } - NSBundle *sourceBundle = [NSBundle bundleWithPath:bundlePath]; - if (sourceBundle == nil) { - return nil; - } - UIImage *image = [UIImage imageNamed:@"car_xingshi" inBundle:sourceBundle compatibleWithTraitCollection:nil]; - _carImage = image; - } - - return self; -} - -- (void)dealloc -{ - if(_textureName) { - glDeleteTextures(1, &_textureName); - _textureName = 0; - } -} - -- (void)glRender -{ - MATraceReplayOverlay *traceOverlay = (MATraceReplayOverlay*)self.overlay; - - CGFloat zoomLevel = [self getMapZoomLevel]; - if(_prevTime == 0) { - _prevTime = CFAbsoluteTimeGetCurrent(); - [traceOverlay drawStepWithTime:0 zoomLevel:zoomLevel]; - } else { - NSTimeInterval curTime = CFAbsoluteTimeGetCurrent(); - [traceOverlay drawStepWithTime:curTime - _prevTime zoomLevel:zoomLevel]; - _prevTime = curTime; - } - - if (!traceOverlay.isManualSlider) { - if (traceOverlay.renderProgressHandler) { - traceOverlay.renderProgressHandler((CGFloat)[traceOverlay getOrigPointIndexOfCar] / [traceOverlay getOrigPointCount]); - } - } - - if(self.carImage && [traceOverlay getMultiPolyline].pointCount > 0) { - [_proxyRender glRender]; - [_patchLineRender glRender]; - - [self renderCarImage]; - } else { - [_proxyRender glRender]; - } -} - -- (void)setRendererDelegate:(id)rendererDelegate { - [super setRendererDelegate:rendererDelegate]; - _proxyRender.rendererDelegate = rendererDelegate; - _patchLineRender.rendererDelegate = rendererDelegate; -} - -- (void)setLineWidth:(CGFloat)lineWidth { - [super setLineWidth:lineWidth]; - _proxyRender.lineWidth = lineWidth; - _patchLineRender.lineWidth = lineWidth; -} - -- (void)setStrokeColors:(NSArray *)strokeColors { - if(strokeColors.count != 2) { - return; - } - _proxyRender.strokeColors = strokeColors; - - if(strokeColors.count > 0) { - _proxyRender.strokeColor = strokeColors.lastObject; - _patchLineRender.strokeColor = strokeColors.lastObject; - } -} - -- (NSArray *)strokeColors { - return _proxyRender.strokeColors; -} - -- (void)setStrokeColor:(UIColor *)strokeColor { - [super setStrokeColor:strokeColor]; - [_proxyRender setStrokeColor:strokeColor]; - [_patchLineRender setStrokeColor:strokeColor]; -} - -- (UIColor *)strokeColor { - return _proxyRender.strokeColor; -} - -- (void)reset { - _prevTime = 0; - [self setNeedsUpdate]; -} - -- (void)renderCarImage { - if(_textureName == 0) { - NSError *error = nil; - GLKTextureInfo *texInfo = [GLKTextureLoader textureWithCGImage:self.carImage.CGImage options:nil error:&error]; - _textureName = texInfo.name; - } - - if(_programe == 0) { - _programe = [self loadGLESPrograme]; - } - - if(_textureName == 0 || _programe == 0) { - return; - } - - MATraceReplayOverlay *traceOverlay = (MATraceReplayOverlay*)self.overlay; - MAMapPoint carPoint = [traceOverlay getCarPosition]; - CLLocationDirection rotate = [traceOverlay getRunningDirection]; - - double zoomLevel = [self getMapZoomLevel]; - double zoomScale = pow(2, zoomLevel); - - CGSize imageSize = self.carImage.size; - - double halfWidth = imageSize.width * (1 << 20) / zoomScale/2; - double halfHeight = imageSize.height * (1 << 20) / zoomScale/2; - - _imageMapPoints[0].x = -halfWidth; - _imageMapPoints[0].y = halfHeight; - _imageMapPoints[1].x = halfWidth; - _imageMapPoints[1].y = halfHeight; - _imageMapPoints[2].x = halfWidth; - _imageMapPoints[2].y = -halfHeight; - _imageMapPoints[3].x = -halfWidth; - _imageMapPoints[3].y = -halfHeight; - - - MADrawPoint points[4] = { 0 }; - for(int i = 0; i < 4; ++i) { - CGPoint tempPoint = _imageMapPoints[i]; - if(traceOverlay.enableAutoCarDirection) { - tempPoint = CGPointApplyAffineTransform(_imageMapPoints[i], CGAffineTransformMakeRotation(rotate)); - } - - tempPoint.x += carPoint.x; - tempPoint.y += carPoint.y; - CGPoint p = [self glPointForMapPoint:MAMapPointMake(tempPoint.x, tempPoint.y)]; - points[i].x = p.x; - points[i].y = p.y; - } - - float *viewMatrix = [self getViewMatrix]; - float *projectionMatrix = [self getProjectionMatrix]; - - glEnable(GL_BLEND); - glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);//纹理和顶点皆已做过预乘alpha值处理 - - - glUseProgram(_programe); - glBindTexture(GL_TEXTURE_2D, _textureName); - - //glUseProgram(shaderToUse.programName); - glEnableVertexAttribArray(_attribute_position_location); - glEnableVertexAttribArray(_attribute_texCoord_location); - - glUniformMatrix4fv(_uniform_viewMatrix_location, 1, false, viewMatrix); - glUniformMatrix4fv(_uniform_projMatrix_location, 1, false, projectionMatrix); - - MADrawPoint textureCoords[4] = { - 0.0, 1.0, - 1.0, 1.0, - 1.0, 0.0, - 0.0, 0.0 - }; - glVertexAttribPointer(_attribute_position_location, 2, GL_FLOAT, false, sizeof(MADrawPoint), &(points[0])); - glVertexAttribPointer(_attribute_texCoord_location, 2, GL_FLOAT, false, sizeof(MADrawPoint), &(textureCoords[0])); - glDrawArrays(GL_TRIANGLE_FAN, 0, 4); - - glDisableVertexAttribArray(_attribute_position_location); - glDisableVertexAttribArray(_attribute_texCoord_location); - - glDisable(GL_BLEND); - glDepthMask(GL_TRUE); - glUseProgram(0); -} - -- (GLuint)loadGLESPrograme { - NSString *vertexShaderSrc = @"precision highp float;\n\ - attribute vec2 attrVertex;\n\ - attribute vec2 attrTextureCoord;\n\ - uniform mat4 inViewMatrix;\n\ - uniform mat4 inProjMatrix;\n\ - varying vec2 textureCoord;\n\ - void main(){\n\ - gl_Position = inProjMatrix * inViewMatrix * (vec4(attrVertex, 1.0, 1.0));\n\ - textureCoord = attrTextureCoord;\n\ - }"; - - NSString *fragShaderSrc = @"precision highp float;\n\ - varying vec2 textureCoord;\n\ - uniform sampler2D inTextureUnit;\n\ - void main(){\n\ - gl_FragColor = texture2D(inTextureUnit, textureCoord);\n\ - }"; - - GLuint prgName = 0; - prgName = glCreateProgram(); - - if(prgName <= 0) { - return 0; - } - - GLint logLength = 0, status = 0; - ////////////////////////////////////// - // Specify and compile VertexShader // - ////////////////////////////////////// - const GLchar* vertexShaderSrcStr = (const GLchar*)[vertexShaderSrc UTF8String]; - - GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER); - glShaderSource(vertexShader, 1, (const GLchar **)&(vertexShaderSrcStr), NULL); - glCompileShader(vertexShader); - glGetShaderiv(vertexShader, GL_INFO_LOG_LENGTH, &logLength); - - if (logLength > 0) { - GLchar *log = (GLchar*) malloc(logLength); - glGetShaderInfoLog(vertexShader, logLength, &logLength, log); - NSLog(@"Vtx Shader compile log:%s\n", log); - free(log); - } - - glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &status); - if (status == 0) { - NSLog(@"Failed to compile vtx shader:\n%s\n", vertexShaderSrcStr); - return 0; - } - - glAttachShader(prgName, vertexShader); - glDeleteShader(vertexShader); - - - ///////////////////////////////////////// - // Specify and compile Fragment Shader // - ///////////////////////////////////////// - const GLchar* fragmentShaderSrcStr = (const GLchar*)[fragShaderSrc UTF8String]; - - GLuint fragShader = glCreateShader(GL_FRAGMENT_SHADER); - glShaderSource(fragShader, 1, (const GLchar **)&(fragmentShaderSrcStr), NULL); - glCompileShader(fragShader); - glGetShaderiv(fragShader, GL_INFO_LOG_LENGTH, &logLength); - if (logLength > 0) { - GLchar *log = (GLchar*)malloc(logLength); - glGetShaderInfoLog(fragShader, logLength, &logLength, log); - NSLog(@"Frag Shader compile log:\n%s\n", log); - free(log); - } - - glGetShaderiv(fragShader, GL_COMPILE_STATUS, &status); - if (status == 0) { - NSLog(@"Failed to compile frag shader:\n%s\n", fragmentShaderSrcStr); - return 0; - } - - glAttachShader(prgName, fragShader); - glDeleteShader(fragShader); - - ////////////////////// - // Link the program // - ////////////////////// - glLinkProgram(prgName); - glGetProgramiv(prgName, GL_INFO_LOG_LENGTH, &logLength); - if (logLength > 0) { - GLchar *log = (GLchar*)malloc(logLength); - glGetProgramInfoLog(prgName, logLength, &logLength, log); - NSLog(@"Program link log:\n%s\n", log); - free(log); - } - - glGetProgramiv(prgName, GL_LINK_STATUS, &status); - if (status == 0) { - NSLog(@"Failed to link program"); - return 0; - } - - _uniform_viewMatrix_location = glGetUniformLocation(prgName, "inViewMatrix"); - _uniform_projMatrix_location = glGetUniformLocation(prgName, "inProjMatrix"); - - _attribute_position_location = glGetAttribLocation(prgName, "attrVertex"); - _attribute_texCoord_location = glGetAttribLocation(prgName, "attrTextureCoord"); - - return prgName; -} -@end diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMANaviManager/DDMANaviManager.h b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMANaviManager/DDMANaviManager.h deleted file mode 100644 index 6a704bd..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMANaviManager/DDMANaviManager.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// DDMANaviManager.h -// DDMAMapKit_Private -// Created by DDIsFriend on 2023/3/16. - - -#import -#import - -NS_ASSUME_NONNULL_BEGIN -struct CLLocationCoordinate2D; - -@protocol DDAMapNaviCompositeManagerDelegate - -@optional -- (void)dd_compositeManager:(AMapNaviCompositeManager *_Nonnull)compositeManager didStartNavi:(AMapNaviMode)naviMode; -- (void)dd_compositeManager:(AMapNaviCompositeManager *_Nonnull)compositeManager onDriveStrategyChanged:(AMapNaviDrivingStrategy)driveStrategy; -- (void)dd_compositeManagerOnCalculateRouteSuccess:(AMapNaviCompositeManager *_Nonnull)compositeManager; -@end - -@interface DDMANaviManager : NSObject -+ (instancetype)shareManager; -+ (instancetype)new NS_UNAVAILABLE; -- (instancetype)init NS_UNAVAILABLE; - -// 请在使用该类前先设置appkey -+ (void)startWithAppKey:(nullable NSString *)appKey; - -// 在创建该类实例前调用 -+ (void)agreePrivacy; - -@property (nonatomic, weak)id delegate; - -- (void)presentRoutePlanViewControllerFromCoordinate:(CLLocationCoordinate2D)fromCoordinate fromName:(nullable NSString *)fromName fromPOIId:(nullable NSString *)fromPOIId toCoordinate:(CLLocationCoordinate2D)toCoordinate toName:(nullable NSString *)toName toPOIId:(nullable NSString *)toPOIId startNaviDirectly:(BOOL)isDirectly; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMANaviManager/DDMANaviManager.m b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMANaviManager/DDMANaviManager.m deleted file mode 100644 index 66c6dc3..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMANaviManager/DDMANaviManager.m +++ /dev/null @@ -1,102 +0,0 @@ -// -// DDMANaviManager.m -// DDMAMapKit_Private -// Created by DDIsFriend on 2023/3/16. - - -#import "DDMANaviManager.h" -#import -@interface DDMANaviManager () -@property (nonatomic, strong)AMapNaviCompositeManager *compositeManager; -@end - -@implementation DDMANaviManager -// MARK: -+ (void)startWithAppKey:(nullable NSString *)appKey{ - [[AMapServices sharedServices] setEnableHTTPS:YES]; - [AMapServices sharedServices].apiKey = appKey; -} - -+ (void)agreePrivacy{ - [MAMapView updatePrivacyShow:AMapPrivacyShowStatusDidShow privacyInfo:AMapPrivacyInfoStatusDidContain]; - [MAMapView updatePrivacyAgree:AMapPrivacyAgreeStatusDidAgree]; -} - -+ (instancetype)shareManager{ - static DDMANaviManager *_Nullable _manager = nil; - static dispatch_once_t token; - dispatch_once(&token, ^{ - _manager = [[self alloc] initWithSuper]; - }); - return _manager; -} - -- (instancetype)initWithSuper{ - self = [super init]; - if (self == nil) return nil; - - return self; -} - -- (instancetype)init{ - @throw [[NSException alloc] initWithName:NSGenericException reason:@"'init' is unavailable,please use 'shareManager' instead." userInfo:nil]; -} - -// MARK: - -- (AMapNaviCompositeManager *)compositeManager{ - if (!_compositeManager) { - _compositeManager = [[AMapNaviCompositeManager alloc] init]; - _compositeManager.delegate = self; - } - return _compositeManager; -} - -- (void)presentRoutePlanViewControllerFromCoordinate:(CLLocationCoordinate2D)fromCoordinate fromName:(nullable NSString *)fromName fromPOIId:(nullable NSString *)fromPOIId toCoordinate:(CLLocationCoordinate2D)toCoordinate toName:(nullable NSString *)toName toPOIId:(nullable NSString *)toPOIId startNaviDirectly:(BOOL)isDirectly { - //导航组件配置类 since 5.2.0 - AMapNaviCompositeUserConfig *config = [[AMapNaviCompositeUserConfig alloc] init]; - - [config setStartNaviDirectly:isDirectly]; - - [config setShowBackupRoute: NO]; - - //传入起点,并且带高德POIId - [config setRoutePlanPOIType:AMapNaviRoutePlanPOITypeStart location:[AMapNaviPoint locationWithLatitude:fromCoordinate.latitude longitude:fromCoordinate.longitude] name:fromName POIId:fromPOIId]; - //传入终点,并且带高德POIId - [config setRoutePlanPOIType:AMapNaviRoutePlanPOITypeEnd location:[AMapNaviPoint locationWithLatitude:toCoordinate.latitude longitude:toCoordinate.longitude] name:toName POIId:toPOIId]; - - //启动 - __weak typeof(self) weakSelf = self; - dispatch_async(dispatch_get_main_queue(), ^{ - __strong typeof(weakSelf) strongSelf = weakSelf; - [strongSelf.compositeManager presentRoutePlanViewControllerWithOptions:config]; - }); -} - -// MARK: -- (void)compositeManager:(AMapNaviCompositeManager *)compositeManager didArrivedDestination:(AMapNaviMode)naviMode { - __weak typeof(self) weakSelf = self; - dispatch_async(dispatch_get_main_queue(), ^{ - __strong typeof(weakSelf) strongSelf = weakSelf; - [strongSelf.compositeManager dismissWithAnimated:YES]; - }); -} - -- (void)compositeManager:(AMapNaviCompositeManager *_Nonnull)compositeManager didStartNavi:(AMapNaviMode)naviMode { - if ([self.delegate respondsToSelector:@selector(dd_compositeManager:didStartNavi:)]) { - [self.delegate dd_compositeManager:compositeManager didStartNavi:naviMode]; - } -} - -- (void)compositeManager:(AMapNaviCompositeManager *_Nonnull)compositeManager onDriveStrategyChanged:(AMapNaviDrivingStrategy)driveStrategy { - if ([self.delegate respondsToSelector:@selector(dd_compositeManager:onDriveStrategyChanged:)]) { - [self.delegate dd_compositeManager:compositeManager onDriveStrategyChanged:driveStrategy]; - } -} - -- (void)compositeManagerOnCalculateRouteSuccess:(AMapNaviCompositeManager *_Nonnull)compositeManager { - if ([self.delegate respondsToSelector:@selector(dd_compositeManagerOnCalculateRouteSuccess:)]) { - [self.delegate dd_compositeManagerOnCalculateRouteSuccess:compositeManager]; - } -} -@end diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMASearch/DDMASearch.h b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMASearch/DDMASearch.h deleted file mode 100644 index be33212..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMASearch/DDMASearch.h +++ /dev/null @@ -1,63 +0,0 @@ -// -// DDMASearch.h -// DDMAMapKit_Private -// Created by DDIsFriend on 2023/1/30. - - -#import -#import - -NS_ASSUME_NONNULL_BEGIN -typedef NS_ENUM(NSUInteger, MASearchType) { - kMASearchNone = 1 << 0, - kMASearchPOIKeywords = 1 << 1, - kMASearchPOIAround = 1 << 2, - kMASearchInputTips = 1 << 3, - kMASearchGeocode = 1 << 4, - kMASearchReGeocode = 1 << 5, - kMASearchDrivingCalRoute = 1 << 6, - kMASearchRidingRoute = 1 << 7, -}; -@class AMapSearchObject; - -@interface DDMASearch : NSObject -// 申请高德appKey,先设置appKey才能使用search功能 -+ (void)startWithAppKey:(nullable NSString *)appKey; - -// 创建该类实例前先同意 -+ (void)agreePrivacy; - -@property (nonatomic, strong)AMapSearchObject *searchOption; - -@property (nonatomic, copy)void(^onRequestFailed)(id request,NSError *error); - -@property (nonatomic, copy)void(^onResponseDone)(id request,id response); - -- (void)refresh; - -- (void)loadMore; -@end - -typedef NS_ENUM(NSUInteger, MADriveSearchType) { - kMADriveSearchPolyline, - kMADriveSearchCost -}; -@interface DDMASearch (Route) -typedef NSDictionary *DDMACoordinate NS_TYPED_EXTENSIBLE_ENUM; -typedef NSString *DDMACoordinateKey NS_TYPED_EXTENSIBLE_ENUM; - -FOUNDATION_EXTERN DDMACoordinateKey const DDMACoords;// DDMACoordinate[DDMACoords] get coords -FOUNDATION_EXTERN DDMACoordinateKey const DDMACoordsCount; // DDMACoordinate[DDMACoordsCount] get count -FOUNDATION_EXTERN DDMACoordinateKey const DDMALocations;// DDMACoordinate[DDMACoords] get coords - -// 返回驾驶的route -+ (AMapSearchObject *)drivingCalRouteSearchRequestWithOrigin:(CLLocationCoordinate2D)origin destination:(CLLocationCoordinate2D)destination strategy:(NSInteger)strategy type:(MADriveSearchType)type; - -// 返回骑行的route -+ (AMapSearchObject *)ridingRouteSearchRequestWithOrigin:(CLLocationCoordinate2D)origin destination:(CLLocationCoordinate2D)destination; - -// 返回一个包含DDMACoordinate的数组,DDMACoordinate里有coordinates数据和count,利用DDMACoordinateKey去取 -+ (NSArray *)coordsArrayWithRouteSearchResponse:(AMapRouteSearchResponse *)routeSearchResponse; -+ (NSMutableArray *> *)locationsArrayWithRouteSearchResponse:(AMapRouteSearchResponse *)routeSearchResponse; -@end -NS_ASSUME_NONNULL_END diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMASearch/DDMASearch.m b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMASearch/DDMASearch.m deleted file mode 100644 index 3b4f58a..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMASearch/DDMASearch.m +++ /dev/null @@ -1,270 +0,0 @@ -// -// DDMASearch.m -// DDMAMapKit_Private -// Created by DDIsFriend on 2023/1/30. - - -#import "DDMASearch.h" -#import -#import - -@interface DDMASearch () -@property (nonatomic, strong)AMapSearchAPI *search; - -@property (nonatomic, assign)MASearchType searchType; - -@end - -@implementation DDMASearch -static NSString *const requestKey = @"request"; -static NSString *const responseKey = @"response"; -static NSString *const errorKey = @"error"; - -// MARK: -+ (void)startWithAppKey:(nullable NSString *)appKey{ - [[AMapServices sharedServices] setEnableHTTPS:YES]; - [AMapServices sharedServices].apiKey = appKey; -} - -+ (void)agreePrivacy{ - [AMapSearchAPI updatePrivacyShow:AMapPrivacyShowStatusDidShow privacyInfo:AMapPrivacyInfoStatusDidContain]; - [AMapSearchAPI updatePrivacyAgree:AMapPrivacyAgreeStatusDidAgree]; -} - -// MARK: -- (instancetype)init{ - self = [super init]; - if (self == nil) return nil; - - return self; -} - -// MARK: -- (void)setSearchOption:(AMapSearchObject *)searchOption{ - _searchOption = searchOption; - MASearchType currentSearchType = kMASearchNone; - if ([searchOption isMemberOfClass:[AMapPOIKeywordsSearchRequest class]]) { - currentSearchType = kMASearchPOIKeywords; - }else if ([searchOption isMemberOfClass:[AMapPOIAroundSearchRequest class]]){ - currentSearchType = kMASearchPOIAround; - }else if ([searchOption isMemberOfClass:[AMapInputTipsSearchRequest class]]){ - currentSearchType = kMASearchInputTips; - }else if ([searchOption isMemberOfClass:[AMapGeocodeSearchRequest class]]){ - currentSearchType = kMASearchGeocode; - }else if ([searchOption isMemberOfClass:[AMapReGeocodeSearchRequest class]]){ - currentSearchType = kMASearchReGeocode; - }else if ([searchOption isMemberOfClass:[AMapDrivingCalRouteSearchRequest class]]){ - currentSearchType = kMASearchDrivingCalRoute; - }else if ([searchOption isMemberOfClass:[AMapRidingRouteSearchRequest class]]){ - currentSearchType = kMASearchRidingRoute; - } - - self.searchType = currentSearchType; -} - -- (void)refresh{ - if (self.searchOption == nil) { - return; - } -// [self performSelector:@selector(refreshInSearchThread:) onThread:self.searchThread withObject:self.searchOption waitUntilDone:NO]; - [self refreshInSearchThread:self.searchOption]; -} - -- (void)refreshInSearchThread:(AMapSearchObject *)searchOption{ -// bool isUnlock = os_unfair_lock_trylock(&_requestLock); -// if (!isUnlock) return; - - if (self.searchType & kMASearchPOIKeywords) { - AMapPOIKeywordsSearchRequest *POIKeywordsSearchRequest = (AMapPOIKeywordsSearchRequest *)self.searchOption; - POIKeywordsSearchRequest.page = 1; - [self.search AMapPOIKeywordsSearch:POIKeywordsSearchRequest]; - }else if (self.searchType & kMASearchPOIAround){ - AMapPOIAroundSearchRequest *POIAroundSearchRequest = (AMapPOIAroundSearchRequest *)self.searchOption; - POIAroundSearchRequest.page = 1; - [self.search AMapPOIAroundSearch:POIAroundSearchRequest]; - }else if (self.searchType & kMASearchInputTips){ - [self.search AMapInputTipsSearch:(AMapInputTipsSearchRequest *)self.searchOption]; - }else if (self.searchType & kMASearchGeocode){ - [self.search AMapGeocodeSearch:(AMapGeocodeSearchRequest *)self.searchOption]; - }else if (self.searchType & kMASearchReGeocode){ - [self.search AMapReGoecodeSearch:(AMapReGeocodeSearchRequest *)self.searchOption]; - }else if (self.searchType & kMASearchDrivingCalRoute){ - [self.search AMapDrivingV2RouteSearch:(AMapDrivingCalRouteSearchRequest *)self.searchOption]; - }else if (self.searchType & kMASearchRidingRoute){ - [self.search AMapRidingRouteSearch:(AMapRidingRouteSearchRequest *)self.searchOption]; - } -} - -- (void)loadMore{ - if (self.searchOption == nil) { - return; - } -// [self performSelector:@selector(loadMoreInSearchThread:) onThread:self.searchThread withObject:self.searchOption waitUntilDone:NO]; - [self loadMoreInSearchThread:self.searchOption]; -} - -- (void)loadMoreInSearchThread:(AMapSearchObject *)searchOption{ -// bool isUnlock = os_unfair_lock_trylock(&_requestLock); -// if (!isUnlock) return; - - if (self.searchType & kMASearchPOIKeywords) { - AMapPOIKeywordsSearchRequest *POIKeywordsSearchRequest = (AMapPOIKeywordsSearchRequest *)self.searchOption; - POIKeywordsSearchRequest.page++; - [self.search AMapPOIKeywordsSearch:POIKeywordsSearchRequest]; - }else if (self.searchType & kMASearchPOIAround){ - AMapPOIAroundSearchRequest *POIAroundSearchRequest = (AMapPOIAroundSearchRequest *)self.searchOption; - POIAroundSearchRequest.page++; - [self.search AMapPOIAroundSearch:POIAroundSearchRequest]; - }else{ - return; - } -} - -- (void)onRequestFailedInSearchThread:(NSDictionary *)dict{ - if (self.onRequestFailed) { - self.onRequestFailed(dict[requestKey], dict[errorKey]); - } -// os_unfair_lock_unlock(&_requestLock); -} - -- (void)onResponseInSearchThread:(NSDictionary *)dict{ - if (self.onResponseDone) { - self.onResponseDone(dict[requestKey], dict[responseKey]); - } -// os_unfair_lock_unlock(&_requestLock); -} - -// MARK: -- (void)AMapSearchRequest:(id)request didFailWithError:(NSError *)error{ - NSMutableDictionary *dict = [NSMutableDictionary dictionary]; - dict[requestKey] = request; - dict[errorKey] = error; - -// [self performSelector:@selector(onRequestFailedInSearchThread:) onThread:self.searchThread withObject:dict waitUntilDone:NO]; - [self onRequestFailedInSearchThread:dict]; -} - -- (void)onPOISearchDone:(AMapPOISearchBaseRequest *)request response:(AMapPOISearchResponse *)response{ - NSMutableDictionary *dict = [NSMutableDictionary dictionary]; - dict[requestKey] = request; - dict[responseKey] = response; - -// [self performSelector:@selector(onResponseInSearchThread:) onThread:self.searchThread withObject:dict waitUntilDone:NO]; - [self onResponseInSearchThread:dict]; -} - -- (void)onGeocodeSearchDone:(AMapGeocodeSearchRequest *)request response:(AMapGeocodeSearchResponse *)response{ - NSMutableDictionary *dict = [NSMutableDictionary dictionary]; - dict[requestKey] = request; - dict[responseKey] = response; - -// [self performSelector:@selector(onResponseInSearchThread:) onThread:self.searchThread withObject:dict waitUntilDone:NO]; - [self onResponseInSearchThread:dict]; -} - -- (void)onReGeocodeSearchDone:(AMapReGeocodeSearchRequest *)request response:(AMapReGeocodeSearchResponse *)response{ - NSMutableDictionary *dict = [NSMutableDictionary dictionary]; - dict[requestKey] = request; - dict[responseKey] = response; - -// [self performSelector:@selector(onResponseInSearchThread:) onThread:self.searchThread withObject:dict waitUntilDone:NO]; - [self onResponseInSearchThread:dict]; -} - -- (void)onInputTipsSearchDone:(AMapInputTipsSearchRequest *)request response:(AMapInputTipsSearchResponse *)response{ - NSMutableDictionary *dict = [NSMutableDictionary dictionary]; - dict[requestKey] = request; - dict[responseKey] = response; - -// [self performSelector:@selector(onResponseInSearchThread:) onThread:self.searchThread withObject:dict waitUntilDone:NO]; - [self onResponseInSearchThread:dict]; -} - -- (void)onRouteSearchDone:(AMapRouteSearchBaseRequest *)request response:(AMapRouteSearchResponse *)response{ - NSMutableDictionary *dict = [NSMutableDictionary dictionary]; - dict[requestKey] = request; - dict[responseKey] = response; - -// [self performSelector:@selector(onResponseInSearchThread:) onThread:self.searchThread withObject:dict waitUntilDone:NO]; - [self onResponseInSearchThread:dict]; -} - -// MARK: -- (AMapSearchAPI *)search{ - if (_search == nil) { - _search = [[AMapSearchAPI alloc] init]; - _search.delegate = self; - } - return _search; -} -@end - -@implementation DDMASearch (Route) - -DDMACoordinateKey const DDMACoords = @"coords"; -DDMACoordinateKey const DDMACoordsCount = @"coordsCount"; -DDMACoordinateKey const DDMALocations = @"locations"; - -+ (AMapSearchObject *)drivingCalRouteSearchRequestWithOrigin:(CLLocationCoordinate2D)origin destination:(CLLocationCoordinate2D)destination strategy:(NSInteger)strategy type:(MADriveSearchType)type { - AMapDrivingCalRouteSearchRequest *request = [[AMapDrivingCalRouteSearchRequest alloc] init]; - if (type == kMADriveSearchPolyline) { - request.showFieldType = AMapDrivingRouteShowFieldTypePolyline; - }else if (type == kMADriveSearchCost){ - request.showFieldType = AMapDrivingRouteShowFieldTypeCost; - } - request.strategy = strategy; - request.origin = [AMapGeoPoint locationWithLatitude:origin.latitude - longitude:origin.longitude]; - request.destination = [AMapGeoPoint locationWithLatitude:destination.latitude - longitude:destination.longitude]; - return request; -} - -+ (AMapSearchObject *)ridingRouteSearchRequestWithOrigin:(CLLocationCoordinate2D)origin destination:(CLLocationCoordinate2D)destination{ - AMapRidingRouteSearchRequest *request = [[AMapRidingRouteSearchRequest alloc] init]; - request.showFieldsType = AMapRidingRouteShowFieldsTypeAll; - request.origin = [AMapGeoPoint locationWithLatitude:origin.latitude - longitude:origin.longitude]; - request.destination = [AMapGeoPoint locationWithLatitude:destination.latitude - longitude:destination.longitude]; - return request; -} - -+ (NSMutableArray *)coordsArrayWithRouteSearchResponse:(AMapRouteSearchResponse *)routeSearchResponse{ - NSMutableArray *coordinateArr = [NSMutableArray array]; - [routeSearchResponse.route.paths enumerateObjectsUsingBlock:^(AMapPath * _Nonnull aMapPath, NSUInteger idx, BOOL * _Nonnull stop) { - NSMutableArray *coorArray = [NSMutableArray array]; - [aMapPath.steps enumerateObjectsUsingBlock:^(AMapStep * _Nonnull step, NSUInteger idx, BOOL * _Nonnull stop) { - [coorArray addObjectsFromArray:[step.polyline componentsSeparatedByString:@";"]]; - }]; - CLLocationCoordinate2D *coords = new CLLocationCoordinate2D[coorArray.count]; - [coorArray enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - NSArray *coordinate = [obj componentsSeparatedByString:@","]; - coords[idx].latitude = [coordinate.lastObject floatValue]; - coords[idx].longitude = [coordinate.firstObject floatValue]; - }]; - NSMutableDictionary *dict = [NSMutableDictionary dictionary]; - dict[DDMACoordsCount] = @(coorArray.count); - dict[DDMACoords] = [NSValue valueWithPointer:coords]; - [coordinateArr addObject:dict]; - }]; - return coordinateArr; -} - -+ (NSMutableArray *> *)locationsArrayWithRouteSearchResponse:(AMapRouteSearchResponse *)routeSearchResponse{ - NSMutableArray *> *coordinateArr = [NSMutableArray array]; - [routeSearchResponse.route.paths enumerateObjectsUsingBlock:^(AMapPath * _Nonnull aMapPath, NSUInteger idx, BOOL * _Nonnull stop) { - NSMutableArray *coorArray = [NSMutableArray array]; - [aMapPath.steps enumerateObjectsUsingBlock:^(AMapStep * _Nonnull step, NSUInteger idx, BOOL * _Nonnull stop) { - [coorArray addObjectsFromArray:[step.polyline componentsSeparatedByString:@";"]]; - }]; - NSMutableArray *locations = [NSMutableArray array]; - [coorArray enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - NSArray *coordinate = [obj componentsSeparatedByString:@","]; - [locations addObject:[[CLLocation alloc] initWithLatitude:[coordinate.lastObject floatValue] longitude:[coordinate.firstObject floatValue]]]; - }]; - [coordinateArr addObject:locations]; - }]; - return coordinateArr; -} -@end diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMATrackManager/DDMATrackManager.h b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMATrackManager/DDMATrackManager.h deleted file mode 100644 index a6e8a7a..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMATrackManager/DDMATrackManager.h +++ /dev/null @@ -1,95 +0,0 @@ -// -// DDMATrackManager.h -// DDMAMapKit_Private -// Created by DDIsFriend on 2023/3/5. - - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DDMATrackManager : NSObject -+ (instancetype)shareManager; -+ (instancetype)new NS_UNAVAILABLE; -- (instancetype)init NS_UNAVAILABLE; - -+ (void)startWithAppKey:(nullable NSString *)appKey; - -@property (nonatomic, copy)NSString *serviceID; // 初始化猎鹰服务前必须设置服务id -@property (nonatomic, copy)NSString *fullAccuracyPurpose; // 初始化猎鹰服务前必须设置 -@property (nonatomic, copy)NSString *terminalID; // 启动服务前必须设置设备id -@property (nonatomic, copy)NSString *terminalName; // 这应该是一个唯一的名字,利用它来获取terminalID -@property (nonatomic, copy,nullable)NSString *trackID; // 当轨迹id存在时,上报服务回保存在trackID中,否则将以散点形式上报 -@property (nonatomic, assign)BOOL isServing; // 是否已开启服务 -@property (nonatomic, assign)BOOL isGathering; // 是否已开启采集 - -// 初始化猎鹰服务 -- (void)initTraceService; - -/** - * @brief 设定定位信息的采集周期和上传周期,注意:上传周期必须为采集周期的整数倍 - * @param gatherTimeInterval 定位信息的采集周期,单位秒,有效值范围[1, 60] - * @param packTimeInterval 定位信息的上传周期,单位秒,有效值范围[5, 3000] - */ -- (void)changeGatherAndPackTimeInterval:(NSInteger)gatherTimeInterval packTimeInterval:(NSInteger)packTimeInterval; - -/** - * @brief 设定允许的本地缓存最大值 - * @param cacheMaxSize 本地缓存最大值,单位MB,默认+∞,有效值范围[50,+∞)。 - * @return 是否设定成功 - */ -- (BOOL)setLocalCacheMaxSize:(NSInteger)cacheMaxSize; - -//查询终端是否存在 -/// @warning 开始上报前先创建terminal,可以拿到terminalID -- (void)queryTerminal:(NSString *)terminalName; - -// 创建轨迹 -/// @warning 开始上报到指定轨迹前先创建track,可以拿到trackID -- (void)addTrackID; - -/// 启动猎鹰服务,不建议直接开启服务,应该使'- (void)queryTerminal:(NSString *)terminalName'方法来开启服务 -/// @warning serviceID,terminalID必不可少,而trackID是指定轨迹时才需要 -- (void)startService; - -// 关闭猎鹰服务 -- (void)stopService; - -// 开启采集服务 -- (void)startGatherAndPack; - -// 关闭采集服务 -- (void)stopGatherAndPack; - -// 创建轨迹成功的回调 -@property (nonatomic, copy,nullable)void(^addTrackOnDone)(AMapTrackAddTrackRequest *request,AMapTrackAddTrackResponse *response); - -// 开始服务的回调 -@property (nonatomic, copy,nullable)void(^startServiceOnDone)(AMapTrackErrorCode error); -// 关闭服务的回调 -@property (nonatomic, copy,nullable)void(^stopServiceOnDone)(AMapTrackErrorCode error); - -// 开始采集的回调 -@property (nonatomic, copy,nullable)void(^startGatherAndPackOnDone)(AMapTrackErrorCode error); -// 关闭采集的回调 -@property (nonatomic, copy,nullable)void(^stopGatherAndPackOnDone)(AMapTrackErrorCode error); - -// query失败回调 -@property (nonatomic, copy,nullable)void(^queryFailWithErrorOnDone)(NSError *error,id request); - -// 查询设备位置,queryLastPointOnDone回调 -- (void)queryLastPointWith:(nullable NSString *)trackID; -@property (nonatomic, copy,nullable)void(^queryLastPointOnDone)(AMapTrackQueryLastPointRequest *request,AMapTrackQueryLastPointResponse *response); - -// 查询设备一段时间内的行驶里程,queryTrackDistanceOnDone回调 -- (void)queryTrackDistanceWith:(long long)startTime endTime:(long long)endTime trackID:(nullable NSString *)trackID; -@property (nonatomic, copy,nullable)void(^queryTrackDistanceOnDone)(AMapTrackQueryTrackDistanceRequest *request,AMapTrackQueryTrackDistanceResponse *response); - -// 查询轨迹的历史轨迹点 -- (void)queryTrackInfoWithTrackID:(NSString *)trackID startTime:(long long)startTime endTime:(long long)endTime pageIndex:(NSInteger)index; -@property (nonatomic, copy, nullable)void(^queryTrackInfoOnDone)(AMapTrackQueryTrackInfoRequest *request,AMapTrackQueryTrackInfoResponse *response); -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMATrackManager/DDMATrackManager.m b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMATrackManager/DDMATrackManager.m deleted file mode 100644 index a3221f2..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMATrackManager/DDMATrackManager.m +++ /dev/null @@ -1,340 +0,0 @@ -// -// DDMATrackManager.m -// DDMAMapKit_Private -// Created by DDIsFriend on 2023/3/5. - - -#import "DDMATrackManager.h" -//#import - -@interface DDMATrackManager () -@property (nonatomic, strong)AMapTrackManager *trackManager; - -@end - -@implementation DDMATrackManager -// MARK: -+ (void)startWithAppKey:(nullable NSString *)appKey{ - [[AMapServices sharedServices] setEnableHTTPS:YES]; - [AMapServices sharedServices].apiKey = appKey; -} - -+ (instancetype)shareManager{ - static DDMATrackManager *_Nullable _manager = nil; - static dispatch_once_t token; - dispatch_once(&token, ^{ - _manager = [[self alloc] initWithSuper]; - }); - return _manager; -} - -- (instancetype)initWithSuper{ - self = [super init]; - if (self == nil) return nil; - - return self; -} - -- (instancetype)init{ - @throw [[NSException alloc] initWithName:NSGenericException reason:@"'init' is unavailable,please use 'shareManager' instead." userInfo:nil]; -} - -// MARK: -- (void)initTraceService{ - NSAssert(self.serviceID != nil, @"猎鹰serviceID = nil"); - NSAssert(self.fullAccuracyPurpose != nil, @"请设置fullAccuracyPurpose的值"); - if (self.serviceID == nil) { - return; - } - if (self.fullAccuracyPurpose == nil) { - return; - } - - AMapTrackManagerOptions *option = [[AMapTrackManagerOptions alloc] init]; - option.serviceID = self.serviceID; //Service ID 需要根据需要进行修改 - - //初始化AMapTrackManager - self.trackManager = [[AMapTrackManager alloc] initWithOptions:option]; - self.trackManager.delegate = self; - [self.trackManager setPausesLocationUpdatesAutomatically:NO]; -} - -//查询终端是否存在 -- (void)queryTerminal:(NSString *)terminalName{ - AMapTrackQueryTerminalRequest *request = [[AMapTrackQueryTerminalRequest alloc] init]; - request.serviceID = self.serviceID; - request.terminalName = terminalName; - [self.trackManager AMapTrackQueryTerminal:request]; -} - -//查询终端结果 -- (void)onQueryTerminalDone:(AMapTrackQueryTerminalRequest *)request response:(AMapTrackQueryTerminalResponse *)response -{ - //查询成功 - if ([[response terminals] count] > 0) { - //查询到结果,使用 Terminal ID - NSString *terminalID = [[[response terminals] firstObject] tid]; - -// DDLog(@"--------------------------------LBS查询终端成功,terminalID = %@--------------------------------\n--------------------------------准备启动服务--------------------------------",terminalID); - - //启动上报服务(service id),参考下一步 - self.terminalID = terminalID; - [self startService]; - } - else { -// DDLog(@"--------------------------------LBS查询终端为空--------------------------------\n--------------------------------准备创建终端--------------------------------"); - //查询结果为空,创建新的terminal - [self addTerminal:request.terminalName]; - } -} - -// 创建终端 -- (void)addTerminal:(NSString *)terminalName{ - AMapTrackAddTerminalRequest *addRequest = [[AMapTrackAddTerminalRequest alloc] init]; - addRequest.serviceID = self.trackManager.serviceID; - addRequest.terminalName = terminalName; - [self.trackManager AMapTrackAddTerminal:addRequest]; -} - -//创建终端结果 -- (void)onAddTerminalDone:(AMapTrackAddTerminalRequest *)request response:(AMapTrackAddTerminalResponse *)response { -// DDLog(@"--------------------------------LBS创建终端成功--------------------------------\n--------------------------------准备开启服务--------------------------------"); - //创建terminal成功 - NSString *terminalID = [response terminalID]; - - //启动上报服务(service id),参考下一步 - self.terminalID = terminalID; - [self startService]; -} - -//错误回调 -- (void)didFailWithError:(NSError *)error associatedRequest:(id)request { - if ([request isKindOfClass:[AMapTrackQueryTerminalRequest class]]) { - //查询参数错误 -// DDLog(@"--------------------------------LBS查询终端失败--------------------------------"); - } - - if ([request isKindOfClass:[AMapTrackAddTerminalRequest class]]) { - //创建terminal失败 -// DDLog(@"--------------------------------LBS创建终端失败--------------------------------"); - } - - if ([request isKindOfClass:[AMapTrackAddTrackRequest class]]) { - //创建轨迹失败 -// DDLog(@"--------------------------------LBS创建轨迹失败--------------------------------"); - } - - if ([request isKindOfClass:[AMapTrackQueryLastPointRequest class]]) { - //查询失败 -// DDLog(@"--------------------------------LBS查询最后位置失败--------------------------------"); - } - - if ([request isKindOfClass:[AMapTrackQueryTrackDistanceRequest class]]) { - //查询失败 -// DDLog(@"--------------------------------LBS查询距离失败--------------------------------"); - } - - if ([request isKindOfClass:[AMapTrackQueryTrackInfoRequest class]]) { - //查询轨迹点数据失败 -// DDLog(@"--------------------------------LBS查询历史轨迹点位数据失败--------------------------------"); - } - - if (self.queryFailWithErrorOnDone) { - self.queryFailWithErrorOnDone(error, request); - } -} - -//创建轨迹 -- (void)addTrackID{ - AMapTrackAddTrackRequest *request = [[AMapTrackAddTrackRequest alloc] init]; - request.serviceID = self.trackManager.serviceID; - request.terminalID = self.trackManager.terminalID; - [self.trackManager AMapTrackAddTrack:request]; -} - -- (void)onAddTrackDone:(AMapTrackAddTrackRequest *)request response:(AMapTrackAddTrackResponse *)response -{ - //创建轨迹成功,开始采集 - self.trackID = response.trackID; - -// DDLog(@"---------------------------------创建轨迹成功----------------------------------") - - if (self.addTrackOnDone != nil) { - self.addTrackOnDone(request, response); - } -} - -- (void)startService{ - if (self.isServing == false) { - // 当开启服务时,设置允许后台定位 - [self.trackManager setAllowsBackgroundLocationUpdates:YES]; - AMapTrackManagerServiceOption *serviceOption = [[AMapTrackManagerServiceOption alloc] init]; - serviceOption.terminalID = self.terminalID;//Terminal ID 需要根据需要进行修改 - [self.trackManager startServiceWithOptions:serviceOption]; - } -} - -- (void)stopService{ - if (self.isServing == true) { - [self.trackManager stopService]; - } -} - -- (void)startGatherAndPack{ - if (self.trackID != nil) { - self.trackManager.trackID = self.trackID; -// NSLog(@"轨迹id---------------%@",self.trackID); -// DDLog(@"---------------------------------设置轨迹成功----------------------------------") - } - [self.trackManager startGatherAndPack]; -} - -- (void)stopGatherAndPack{ - [self.trackManager stopGaterAndPack]; -} - -//service 开启结果回调 -- (void)onStartService:(AMapTrackErrorCode)errorCode { - if (errorCode == AMapTrackErrorOK) { -// DDLog("--------------------------------开启猎鹰服务成功--------------------------------\n--------------------------------准备采集--------------------------------"); - // 已开启服务成功 - self.isServing = YES; - - } else { - //开始服务失败 -// DDLog("--------------------------------开启猎鹰服务失败--%ld",errorCode); - } - if (self.startServiceOnDone) { - self.startServiceOnDone(errorCode); - } -} - -// 关闭猎鹰服务 -- (void)onStopService:(AMapTrackErrorCode)errorCode { - if (errorCode == AMapTrackErrorOK) { - //关闭猎鹰服务成功 - self.isServing = false; - -// DDLog(@"--------------------------------关闭猎鹰服务成功--------------------------------"); - } else { - //关闭猎鹰服务失败 -// DDLog(@"--------------------------------关闭猎鹰服务失败--------------------------------"); - } - - if (self.stopServiceOnDone) { - self.stopServiceOnDone(errorCode); - } -} - -//gather 开启结果回调 -- (void)onStartGatherAndPack:(AMapTrackErrorCode)errorCode { - if (errorCode == AMapTrackErrorOK) { - //开始采集成功 - self.isGathering = YES; -// DDLog(@"--------------------------------开始猎鹰采集成功--------------------------------"); - } else { - //开始采集失败 -// DDLog(@"--------------------------------开始猎鹰采集失败--------------------------------"); - } - - if (self.startGatherAndPackOnDone) { - self.startGatherAndPackOnDone(errorCode); - } -} - -// 关闭采集 -- (void)onStopGatherAndPack:(AMapTrackErrorCode)errorCode { - if (errorCode == AMapTrackErrorOK) { - //关闭采集成功 - self.isGathering = NO; -// DDLog(@"--------------------------------关闭猎鹰采集成功--------------------------------"); - } else { - //关闭采集失败 -// DDLog(@"--------------------------------关闭猎鹰采集失败--------------------------------"); - } - - if (self.stopGatherAndPackOnDone) { - self.stopGatherAndPackOnDone(errorCode); - } -} - -// 查询最后的位置 -- (void)queryLastPointWith:(nullable NSString *)trackID{ - AMapTrackQueryLastPointRequest *request = [[AMapTrackQueryLastPointRequest alloc] init]; - request.serviceID = self.trackManager.serviceID; - request.terminalID = self.trackManager.terminalID; - if (trackID != nil) { - request.trackID = trackID; - } - [self.trackManager AMapTrackQueryLastPoint:request]; -} - -// 查询最后的位置结果 -- (void)onQueryLastPointDone:(AMapTrackQueryLastPointRequest *)request response:(AMapTrackQueryLastPointResponse *)response -{ - if (self.queryLastPointOnDone != nil) { - self.queryLastPointOnDone(request,response); - } -} - -- (void)queryTrackDistanceWith:(long long)startTime endTime:(long long)endTime trackID:(nullable NSString *)trackID{ - AMapTrackQueryTrackDistanceRequest *request = [[AMapTrackQueryTrackDistanceRequest alloc] init]; - request.serviceID = self.trackManager.serviceID; - request.terminalID = self.trackManager.terminalID; - request.startTime = startTime; - request.endTime = endTime; - request.correctionMode = @"driving"; - if (trackID != nil) { - request.trackID = self.trackManager.trackID; - } -// DDLog(@"--------------------------------当前猎鹰查询distance:\n起始时间:%lld\n结束时间:%lld--------------------------------",startTime,endTime); - [self.trackManager AMapTrackQueryTrackDistance:request]; -} - -- (void)onQueryTrackDistanceDone:(AMapTrackQueryTrackDistanceRequest *)request response:(AMapTrackQueryTrackDistanceResponse *)response -{ - //查询成功 -// DDLog(@"--------------------------------onQueryTrackDistanceDone%@--------------------------------", response.formattedDescription); - if (self.queryTrackDistanceOnDone != nil) { -// DDLog(@"--------------------------------当前猎鹰查询distance:%lu--------------------------------",(unsigned long)response.distance); - self.queryTrackDistanceOnDone(request, response); - } -} - -- (void)queryTrackInfoWithTrackID:(NSString *)trackID startTime:(long long)startTime endTime:(long long)endTime pageIndex:(NSInteger)index { - AMapTrackQueryTrackInfoRequest *request = [[AMapTrackQueryTrackInfoRequest alloc] init]; - request.serviceID = self.trackManager.serviceID; - request.terminalID = self.terminalID; - request.startTime = startTime; - request.endTime = endTime; - request.trackID = trackID; - request.recoupMode = AMapTrackRecoupModeDriving; - request.recoupGap = 10000; - request.pageSize = 999; - request.pageIndex = index; - [self.trackManager AMapTrackQueryTrackInfo:request]; -} - -- (void)onQueryTrackInfoDone:(AMapTrackQueryTrackInfoRequest *)request response:(AMapTrackQueryTrackInfoResponse *)response { - if (self.queryTrackInfoOnDone != nil) { - self.queryTrackInfoOnDone(request, response); - } -} - -- (void)changeGatherAndPackTimeInterval:(NSInteger)gatherTimeInterval packTimeInterval:(NSInteger)packTimeInterval{ - [self.trackManager changeGatherAndPackTimeInterval:gatherTimeInterval packTimeInterval:packTimeInterval]; -} - -- (BOOL)setLocalCacheMaxSize:(NSInteger)cacheMaxSize{ - return [self.trackManager setLocalCacheMaxSize:50]; -} - -// 获取精准定位 -- (void)amapTrackManager:(nonnull AMapTrackManager *)manager doRequireTemporaryFullAccuracyAuth:(nonnull CLLocationManager *)locationManager completion:(nonnull void (^)(NSError * _Nonnull))completion API_AVAILABLE(ios(14.0)){ - [locationManager requestTemporaryFullAccuracyAuthorizationWithPurposeKey:self.fullAccuracyPurpose completion:^(NSError *error){ - if(completion){ - completion(error); - } - }]; -} -@end diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAUtil/DDMAGeometry.h b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAUtil/DDMAGeometry.h deleted file mode 100644 index 726f7d7..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAUtil/DDMAGeometry.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// DDMAGeometry.h -// DDMAMapKit_Private -// Created by DDIsFriend on 2023/2/2. - - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DDMAGeometry : NSObject -// 获取一个合适的地图展示范围 -+ (MAMapRect)getVisibleMapRectWithCoordinates:(CLLocationCoordinate2D *_Nullable)coords coordinateCount:(NSUInteger)coordinateCount; - -// 获取一个合适的地图展示范围 -+ (MAMapRect)getVisibleMapRectWithMapPoints:(MAMapPoint *_Nullable)mapPoints mapPointCount:(NSUInteger)mapPointCount; - -// 获取一个合适的地图展示范围 -+ (MAMapRect)getVisibleMapRectWithCLLocations:(NSArray *_Nullable)locations; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAUtil/DDMAGeometry.m b/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAUtil/DDMAGeometry.m deleted file mode 100644 index ad269d5..0000000 --- a/Pods/DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAUtil/DDMAGeometry.m +++ /dev/null @@ -1,87 +0,0 @@ -// -// DDMAGeometry.m -// DDMAMapKit_Private -// Created by DDIsFriend on 2023/2/2. - - -#import "DDMAGeometry.h" -//#import -//#import -//#import - -@implementation DDMAGeometry -+ (MAMapRect)getVisibleMapRectWithCoordinates:(CLLocationCoordinate2D *_Nullable)coords coordinateCount:(NSUInteger)coordinateCount{ - if (coords == NULL) return MAMapRectMake(0,0,0,0); - - MAMapPoint *mapPoints = new MAMapPoint[coordinateCount]; - - for (NSUInteger i = 0; i < coordinateCount; i++) { - mapPoints[i] = MAMapPointForCoordinate(coords[i]); - } - - if (coordinateCount < 2) return MAMapRectMake(mapPoints[0].x,mapPoints[0].y,0,0); - - return [self getVisibleMapRectWithMapPoints:mapPoints mapPointCount:coordinateCount]; -} - -+ (MAMapRect)getVisibleMapRectWithMapPoints:(MAMapPoint *_Nullable)mapPoints mapPointCount:(NSUInteger)mapPointCount{ - if (mapPoints == NULL) return MAMapRectMake(0,0,0,0); - if (mapPointCount < 2) return MAMapRectMake(mapPoints[0].x,mapPoints[0].y,0,0); - - double xMin = 0.0; - double yMin = 0.0; - double xMax = 0.0; - double yMax = 0.0; - - MAMapPoint mapPoint = mapPoints[0]; - xMin = mapPoint.x; - yMin = mapPoint.y; - xMax = mapPoint.x; - yMax = mapPoint.y; - - for (NSUInteger i = 1; i < mapPointCount; i++) { - MAMapPoint point = mapPoints[i]; - if (xMin > point.x) { - xMin = point.x; - } - if (yMin > point.y) { - yMin = point.y; - } - if (xMax < point.x) { - xMax = point.x; - } - if (yMax < point.y) { - yMax = point.y; - } - } - return MAMapRectMake(xMin, yMin, xMax - xMin, yMax - yMin); -} - -+ (MAMapRect)getVisibleMapRectWithCLLocations:(NSArray *_Nullable)locations{ - if (locations == nil) return MAMapRectMake(0,0,0,0); - if (locations.count == 0) return MAMapRectMake(0,0,0,0); - CLLocationCoordinate2D *coords = new CLLocationCoordinate2D[locations.count]; - [locations enumerateObjectsUsingBlock:^(CLLocation * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - coords[idx].latitude = obj.coordinate.latitude; - coords[idx].longitude = obj.coordinate.longitude; - }]; - return [self getVisibleMapRectWithCoordinates:coords coordinateCount:locations.count]; -} - -//+ (MAPolyline *)getPolylineWithRouteSearchResponse:(AMapRouteSearchResponse *)routeSearchResponse{ -// NSArray *array = [DDMASearch coordsArrayWithRouteSearchResponse:routeSearchResponse]; -// [array enumerateObjectsUsingBlock:^(DDMACoordinate _Nonnull coordinate, NSUInteger idx, BOOL * _Nonnull stop) { -// if (idx == 0) { -// CLLocationCoordinate2D *coords = (CLLocationCoordinate2D *)[(NSValue *)coordinate[DDMACoords] pointerValue]; -// NSUInteger count = [coordinate[DDMACoordsCount] integerValue]; -// MAPolyline *polyline = [MAPolyline polylineWithCoordinates:coords count:count]; -// -// dispatch_async(dispatch_get_main_queue(), ^{ -// [mapView.maMapView setVisibleMapRect:[DDMAGeometry getVisibleMapRectWithCoordinates:coords coordinateCount:count] edgePadding:UIEdgeInsetsMake(50, 30, 50, 30) animated:YES]; -// }); -// -// } -// -// }]; -//} -@end diff --git a/Pods/DDMAMapKit_Private/LICENSE b/Pods/DDMAMapKit_Private/LICENSE deleted file mode 100644 index b75c465..0000000 --- a/Pods/DDMAMapKit_Private/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2023 DDIsFriend - -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. diff --git a/Pods/DDMAMapKit_Private/README.md b/Pods/DDMAMapKit_Private/README.md deleted file mode 100644 index 4a66635..0000000 --- a/Pods/DDMAMapKit_Private/README.md +++ /dev/null @@ -1,56 +0,0 @@ -# DDMAMapKit_Private - -[![CI Status](https://img.shields.io/travis/DDIsFriend/DDMAMapKit_Private.svg?style=flat)](https://travis-ci.org/DDIsFriend/DDMAMapKit_Private) -[![Version](https://img.shields.io/cocoapods/v/DDMAMapKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDMAMapKit_Private) -[![License](https://img.shields.io/cocoapods/l/DDMAMapKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDMAMapKit_Private) -[![Platform](https://img.shields.io/cocoapods/p/DDMAMapKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDMAMapKit_Private) - -## Example - -To run the example project, clone the repo, and run `pod install` from the Example directory first. - -## Requirements - -### Info.plist -```Objective-C - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - - NSLocationAlwaysAndWhenInUseUsageDescription - 获取你的位置 - NSLocationAlwaysUsageDescription - 获取你的位置 - NSLocationTemporaryUsageDescriptionDictionary - - FORCE_FULL_ACCURACY - 当前功能必须要获取您的精准定位才能提供服务 - - NSLocationWhenInUseUsageDescription - 获取你的位置 - UIBackgroundModes - - location - remote-notification - -``` - -### 其余的见Demo和高德的api - -## Installation - -DDMAMapKit_Private is available through [CocoaPods](https://cocoapods.org). To install -it, simply add the following line to your Podfile: - -```ruby -pod 'DDMAMapKit_Private' -``` - -## Author - -DDIsFriend, DDIsFriend@163.com - -## License - -DDMAMapKit_Private is available under the MIT license. See the LICENSE file for more info. diff --git a/Pods/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private/Classes/DDAF.swift b/Pods/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private/Classes/DDAF.swift deleted file mode 100644 index ba0c1f9..0000000 --- a/Pods/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private/Classes/DDAF.swift +++ /dev/null @@ -1,102 +0,0 @@ -// -// DDAF.swift -// DDNetworkingOfAlamofireKit_Private -// -// Created by 中道 on 2023/8/2. -// - -import Foundation -import Alamofire -import RxSwift -import DDLogKit_Private - -public let DDAF = DDAlamofire.default - -extension DDAlamofire { - public struct DDParameters : Encodable { - public init() {} - } - - public enum DDError : Error { - case allError - } - - // MARK: example - public func get(urlString:String,parameters:P? = DDParameters(),encoding:ParameterEncoder = URLEncodedFormParameterEncoder.default,headers:HTTPHeaders? = nil,responseType:T.Type = T.self,completionHandler: (((SingleEvent) -> Void,AFDataResponse) -> Void)? = nil) -> Single { - return Single.create {[weak self] single in - self?.request(urlString: urlString, method: .get,parameters: parameters,encoding: encoding,headers: headers,responseType: responseType,completionHandler: {[weak self] response in - self?.logInfo(parameters: parameters, response: response) - if let completionHandler { - completionHandler(single,response) - }else{ - single(.success(response.value)) - } - }) - return Disposables.create() - } - } - - public func post(urlString:String,parameters:P? = DDParameters(),encoding:ParameterEncoder = URLEncodedFormParameterEncoder.default,headers:HTTPHeaders? = nil,responseType:T.Type = T.self,completionHandler: (((SingleEvent) -> Void,AFDataResponse) -> Void)? = nil) -> Single { - return Single.create {[weak self] single in - self?.request(urlString: urlString, method: .post,parameters: parameters,encoding: encoding,headers: headers,responseType: responseType,completionHandler: {[weak self] response in - self?.logInfo(parameters: parameters, response: response) - if let completionHandler { - completionHandler(single,response) - }else{ - single(.success(response.value)) - } - }) - return Disposables.create() - } - } - - public func get(urlString:String,parameters:[String:Any]? = nil,encoding:ParameterEncoding = URLEncoding.default,headers:HTTPHeaders? = nil,responseType:T.Type = T.self,completionHandler: (((SingleEvent) -> Void,AFDataResponse) -> Void)? = nil) -> Single { - return Single.create {[weak self] single in - self?.request(urlString: urlString, method: .get,parameters: parameters,encoding: encoding,headers: headers,responseType: responseType,completionHandler: {[weak self] response in - self?.logInfo(parameters: parameters, response: response) - if let completionHandler { - completionHandler(single,response) - }else{ - single(.success(response.value)) - } - }) - return Disposables.create() - } - } - - public func post(urlString:String,parameters:[String:Any]? = nil,encoding:ParameterEncoding = URLEncoding.default,headers:HTTPHeaders? = nil,responseType:T.Type = T.self,completionHandler: (((SingleEvent) -> Void,AFDataResponse) -> Void)? = nil) -> Single { - return Single.create {[weak self] single in - self?.request(urlString: urlString, method: .post,parameters: parameters,encoding: encoding,headers: headers,responseType: responseType,completionHandler: {[weak self] response in - self?.logInfo(parameters: parameters, response: response) - if let completionHandler { - completionHandler(single,response) - }else{ - single(.success(response.value)) - } - }) - return Disposables.create() - } - } - - public func upload(urlString:String,headers:HTTPHeaders? = nil,responseType:T.Type = T.self,multipartFormData: @escaping (MultipartFormData) -> Void,uploadProgress: @escaping (Progress) -> Void,completionHandler: (((SingleEvent) -> Void,AFDataResponse) -> Void)? = nil) -> Single { - return Single.create {[weak self] single in - self?.upload(urlString: urlString,method: .post,headers: headers,responseType: responseType,multipartFormData: multipartFormData,uploadProgress: uploadProgress,completionHandler: { response in - self?.logInfo(parameters: nil, response: response) - if let completionHandler { - completionHandler(single,response) - }else{ - single(.success(response.value)) - } - }) - return Disposables.create() - } - } - - private func logInfo(parameters:P?,response:AFDataResponse) { - DDLog(message: (parameters.debugDescription+"\n"+response.debugDescription)) - } - private func logInfo(parameters:[String:Any]?,response:AFDataResponse) { - DDLog(message: (parameters.debugDescription+"\n"+response.debugDescription)) - } -} - diff --git a/Pods/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private/Classes/DDAlamofire.swift b/Pods/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private/Classes/DDAlamofire.swift deleted file mode 100644 index 8b77e8e..0000000 --- a/Pods/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private/Classes/DDAlamofire.swift +++ /dev/null @@ -1,97 +0,0 @@ -// -// DDAlamofire.swift -// DDNetworkingOfAlamofireKit_Private -// -// Created by 中道 on 2023/7/24. -// - -import Foundation -import Alamofire - -public protocol DDAlamofireDelegate : AnyObject { - func errorCodeHandler(response:AFDataResponse) -> AFDataResponse - func networkErrorHandler(response:AFDataResponse) -> AFDataResponse - func completionHandler(response:AFDataResponse) -> AFDataResponse -} -public extension DDAlamofireDelegate { - func errorCodeHandler(response:AFDataResponse) -> AFDataResponse { return response } - func networkErrorHandler(response:AFDataResponse) -> AFDataResponse { return response } - func completionHandler(response:AFDataResponse) -> AFDataResponse { return response } -} - -open class DDAlamofire : NSObject { - - // MARK: instance - public static let `default` = DDAlamofire() - public var delegate : DDAlamofireDelegate? - - // MARK: configuration - public func request(urlString:String,method:HTTPMethod,parameters:P? = nil,encoding:ParameterEncoder = URLEncodedFormParameterEncoder.default,headers:HTTPHeaders? = nil,responseType:T.Type = T.self,completionHandler: @escaping ((AFDataResponse) -> Void)) { - let _ = AF.request(urlString: urlString, method: method, parameters: parameters, encoding: encoding, headers: headers, requestModifier: {$0.timeoutInterval = 15}, responseType: responseType) {[weak self] response in - if let response = self?.dealWithResponse(response: response) { - completionHandler(response) - } - } - } - - public func request(urlString:String,method:HTTPMethod,parameters:[String:Any]? = nil,encoding:ParameterEncoding = URLEncoding.default,headers:HTTPHeaders? = nil,responseType:T.Type = T.self,completionHandler: @escaping ((AFDataResponse) -> Void)) { - let _ = AF.request(urlString: urlString, method: method, parameters: parameters, encoding: encoding, headers: headers, requestModifier: {$0.timeoutInterval = 15}, responseType: responseType) {[weak self] response in - if let response = self?.dealWithResponse(response: response) { - completionHandler(response) - } - } - } - - public func upload(urlString:String,method:HTTPMethod,headers:HTTPHeaders? = nil,responseType:T.Type = T.self,multipartFormData: @escaping (MultipartFormData) -> Void,uploadProgress: @escaping (Progress) -> Void,completionHandler: @escaping ((AFDataResponse) -> Void)) { - let _ = AF.upload(multipartFormData: { muiltipart in - multipartFormData(muiltipart) - }, urlString: urlString,method: method,headers: headers,requestModifier: {$0.timeoutInterval = 15},uploadProgress: { progress in - uploadProgress(progress) - },responseType: responseType) {[weak self] response in - if let response = self?.dealWithResponse(response: response) { - completionHandler(response) - } - } - } - - private func dealWithResponse(response:AFDataResponse) -> AFDataResponse { - var returnResponse : AFDataResponse - - if let delegate { - if response.response?.statusCode == nil { - returnResponse = delegate.networkErrorHandler(response: response) - }else if response.response?.statusCode != 200 { - returnResponse = delegate.errorCodeHandler(response: response) - }else{ - returnResponse = delegate.completionHandler(response: response) - } - }else{ - returnResponse = response - } - - return returnResponse - } -} - -// MARK: AF Extension -extension Session { - // 参数遵循Encodable - public func request(urlString:String,method:HTTPMethod,parameters:P? = nil,encoding:ParameterEncoder = URLEncodedFormParameterEncoder.default,headers:HTTPHeaders? = nil,interceptor:RequestInterceptor? = nil,requestModifier:Session.RequestModifier? = nil,responseType:T.Type = T.self,completionHandler: @escaping ((AFDataResponse) -> Void)) -> DataRequest { - return request(urlString,method: method,parameters: parameters,encoder: encoding,headers: headers,interceptor: interceptor,requestModifier: requestModifier).responseDecodable(of:responseType,queue: .global()) { response in - completionHandler(response) - } - } - // 参数为字典 - public func request(urlString:String,method:HTTPMethod,parameters:Parameters? = nil,encoding:ParameterEncoding = URLEncoding.default,headers:HTTPHeaders? = nil,interceptor:RequestInterceptor? = nil,requestModifier:Session.RequestModifier? = nil,responseType:T.Type = T.self,completionHandler: @escaping ((AFDataResponse) -> Void)) -> DataRequest { - return request(urlString,method: method,parameters: parameters,encoding: encoding,headers:headers,interceptor:interceptor,requestModifier:requestModifier).responseDecodable(of: responseType,queue: .global()) { response in - completionHandler(response) - } - - } - - public func upload(multipartFormData:@escaping (MultipartFormData) -> Void,urlString:String,usingThreshold encodingMemoryThreshold: UInt64 = MultipartFormData.encodingMemoryThreshold,method: HTTPMethod = .post,headers: HTTPHeaders? = nil,interceptor: RequestInterceptor? = nil,fileManager: FileManager = .default,requestModifier: RequestModifier? = nil,uploadProgress: @escaping (Progress) -> Void,responseType:T.Type = T.self,completionHandler: @escaping ((AFDataResponse) -> Void)) -> DataRequest { - return upload(multipartFormData: multipartFormData, to: urlString,usingThreshold: encodingMemoryThreshold,method: method,headers: headers,interceptor: interceptor,fileManager: fileManager,requestModifier: requestModifier).uploadProgress(queue: .global(),closure: uploadProgress).responseDecodable(of: responseType,queue: .global()) { response in - completionHandler(response) - } - } -} diff --git a/Pods/DDNetworkingOfAlamofireKit_Private/LICENSE b/Pods/DDNetworkingOfAlamofireKit_Private/LICENSE deleted file mode 100644 index b75c465..0000000 --- a/Pods/DDNetworkingOfAlamofireKit_Private/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2023 DDIsFriend - -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. diff --git a/Pods/DDNetworkingOfAlamofireKit_Private/README.md b/Pods/DDNetworkingOfAlamofireKit_Private/README.md deleted file mode 100644 index 834583b..0000000 --- a/Pods/DDNetworkingOfAlamofireKit_Private/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# DDNetworkingOfAlamofireKit_Private - -[![CI Status](https://img.shields.io/travis/DDIsFriend/DDNetworkingOfAlamofireKit_Private.svg?style=flat)](https://travis-ci.org/DDIsFriend/DDNetworkingOfAlamofireKit_Private) -[![Version](https://img.shields.io/cocoapods/v/DDNetworkingOfAlamofireKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDNetworkingOfAlamofireKit_Private) -[![License](https://img.shields.io/cocoapods/l/DDNetworkingOfAlamofireKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDNetworkingOfAlamofireKit_Private) -[![Platform](https://img.shields.io/cocoapods/p/DDNetworkingOfAlamofireKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDNetworkingOfAlamofireKit_Private) - -## Example - -To run the example project, clone the repo, and run `pod install` from the Example directory first. - -## Requirements - -## Installation - -DDNetworkingOfAlamofireKit_Private is available through [CocoaPods](https://cocoapods.org). To install -it, simply add the following line to your Podfile: - -```ruby -pod 'DDNetworkingOfAlamofireKit_Private' -``` - -## Author - -DDIsFriend, DDIsFriend@163.com - -## License - -DDNetworkingOfAlamofireKit_Private is available under the MIT license. See the LICENSE file for more info. diff --git a/Pods/DDPersistenceKit_Private/DDPersistenceKit_Private/Classes/DDKeychain.swift b/Pods/DDPersistenceKit_Private/DDPersistenceKit_Private/Classes/DDKeychain.swift deleted file mode 100644 index 10c2835..0000000 --- a/Pods/DDPersistenceKit_Private/DDPersistenceKit_Private/Classes/DDKeychain.swift +++ /dev/null @@ -1,77 +0,0 @@ -// -// DDKeychain.swift -// DDPersistenceKit_Private -// Created by DDIsFriend on 2023/9/21. -// - -import Foundation -import Security - -public let DDKC = DDKeychain.default -open class DDKeychain : NSObject { - public static let `default` = DDKeychain() - - public struct Credentials { - var itemKey : String - var itemValue : String? - public init(itemKey: String, itemValue: String? = nil) { - self.itemKey = itemKey - self.itemValue = itemValue - } - } - - public enum KeychainError : Int { - case success = 0 - case failure = 1 - } - - public func addItem(credentials:Credentials) -> KeychainError { - let itemKey = credentials.itemKey - guard let itemValue = credentials.itemValue else { - return .failure - } - let itemValueData = itemValue.data(using: .utf8)! - let query : [String : Any] = [kSecValueData as String:itemValueData,kSecAttrAccount as String:itemKey,kSecClass as String:kSecClassGenericPassword] - let status = SecItemAdd(query as CFDictionary, nil) - if status == 0 { - return .success - } - return .failure - } - - public func queryItem(credentials:Credentials) -> Data? { - let itemKey = credentials.itemKey - let query : [String : Any] = [kSecReturnData as String:true,kSecAttrAccount as String:itemKey,kSecClass as String:kSecClassGenericPassword] - - var itemValueData : CFTypeRef? - let status = SecItemCopyMatching(query as CFDictionary, &itemValueData) - if status == 0 { - return itemValueData as? Data - } - return nil - } - - public func updateItem(credentials:Credentials) -> KeychainError { - let query : [String : Any] = [kSecAttrAccount as String: credentials.itemKey,kSecClass as String:kSecClassGenericPassword] - guard let itemValue = credentials.itemValue else { - return .failure - } - let itemValueData = itemValue.data(using: .utf8)! - let attributes : [String : Any] = [kSecValueData as String:itemValueData] - - let status = SecItemUpdate(query as CFDictionary, attributes as CFDictionary) - if status == 0 { - return .success - } - return .failure - } - - public func deleteItem(credentials:Credentials) -> KeychainError { - let query : [String : Any] = [kSecClass as String:kSecClassGenericPassword,kSecAttrAccount as String:credentials.itemKey] - let status = SecItemDelete(query as CFDictionary) - if status == 0 { - return .success - } - return .failure - } -} diff --git a/Pods/DDPersistenceKit_Private/LICENSE b/Pods/DDPersistenceKit_Private/LICENSE deleted file mode 100644 index b75c465..0000000 --- a/Pods/DDPersistenceKit_Private/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2023 DDIsFriend - -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. diff --git a/Pods/DDPersistenceKit_Private/README.md b/Pods/DDPersistenceKit_Private/README.md deleted file mode 100644 index 4d653d9..0000000 --- a/Pods/DDPersistenceKit_Private/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# DDPersistenceKit_Private - -[![CI Status](https://img.shields.io/travis/DDIsFriend/DDPersistenceKit_Private.svg?style=flat)](https://travis-ci.org/DDIsFriend/DDPersistenceKit_Private) -[![Version](https://img.shields.io/cocoapods/v/DDPersistenceKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDPersistenceKit_Private) -[![License](https://img.shields.io/cocoapods/l/DDPersistenceKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDPersistenceKit_Private) -[![Platform](https://img.shields.io/cocoapods/p/DDPersistenceKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDPersistenceKit_Private) - -## Example - -To run the example project, clone the repo, and run `pod install` from the Example directory first. - -## Requirements - -## Installation - -DDPersistenceKit_Private is available through [CocoaPods](https://cocoapods.org). To install -it, simply add the following line to your Podfile: - -```ruby -pod 'DDPersistenceKit_Private' -``` - -## Author - -DDIsFriend, DDIsFriend@163.com - -## License - -DDPersistenceKit_Private is available under the MIT license. See the LICENSE file for more info. diff --git a/Pods/DDProgressHUDKit_Private/DDProgressHUDKit_Private/Classes/DDProgressHUD.swift b/Pods/DDProgressHUDKit_Private/DDProgressHUDKit_Private/Classes/DDProgressHUD.swift deleted file mode 100644 index 07d17a5..0000000 --- a/Pods/DDProgressHUDKit_Private/DDProgressHUDKit_Private/Classes/DDProgressHUD.swift +++ /dev/null @@ -1,56 +0,0 @@ -// -// DDProgressHUD.swift -// DDProgressHUDKit_Private -// -// Created by 中道 on 2023/8/7. -// - -import Foundation -//import DDCategoryKit_Private -//import YYImage -//import SnapKit - -extension UIView { - public func dd_showHUD() { - let viewHud = MBProgressHUD.forView(self) - - if viewHud == nil { - let hud = MBProgressHUD.showAdded(to: self, animated: true) - hud.bezelView.color = UIColor.white - hud.bezelView.style = .solidColor - hud.contentColor = UIColor.black - hud.show(animated: true) - } - -// if viewHud == nil { -// let hud = MBProgressHUD.showAdded(to: self, animated: true) -// hud.mode = MBProgressHUDMode.customView -// hud.customView = HudCustomView.init() -// hud.minSize = CGSize(width: 60, height: 60) -// hud.show(animated: true) -// } - } - - public func dd_hideHUD() { - let hud = MBProgressHUD.forView(self) - hud?.hide(animated: true) - } -} - -//class HudCustomView : UIView { -// override init(frame: CGRect) { -// super.init(frame: frame) -// let data = UIImage.dd_imageGifNamed("networking_loading", bundleName: "ProgressHud", aClass: HudCustomView.self) -// let animatedImageView = YYAnimatedImageView.init(image: YYImage.init(data: data ?? Data.init(),scale: 1)) -// addSubview(animatedImageView) -// animatedImageView.snp.makeConstraints { make in -// make.width.height.equalTo(60) -// make.center.equalToSuperview() -// } -// } -// -// required init?(coder: NSCoder) { -// fatalError("init(coder:) has not been implemented") -// } -// -//} diff --git a/Pods/DDProgressHUDKit_Private/DDProgressHUDKit_Private/Classes/MBProgressHUD.h b/Pods/DDProgressHUDKit_Private/DDProgressHUDKit_Private/Classes/MBProgressHUD.h deleted file mode 100644 index 38b5004..0000000 --- a/Pods/DDProgressHUDKit_Private/DDProgressHUDKit_Private/Classes/MBProgressHUD.h +++ /dev/null @@ -1,411 +0,0 @@ -// -// MBProgressHUD.h -// Version 1.2.0 -// Created by Matej Bukovinski on 2.4.09. -// - -// This code is distributed under the terms and conditions of the MIT license. - -// Copyright © 2009-2016 Matej Bukovinski -// -// 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 -#import -#import - -@class MBBackgroundView; -@protocol MBProgressHUDDelegate; - - -extern CGFloat const MBProgressMaxOffset; - -typedef NS_ENUM(NSInteger, MBProgressHUDMode) { - /// UIActivityIndicatorView. - MBProgressHUDModeIndeterminate, - /// A round, pie-chart like, progress view. - MBProgressHUDModeDeterminate, - /// Horizontal progress bar. - MBProgressHUDModeDeterminateHorizontalBar, - /// Ring-shaped progress view. - MBProgressHUDModeAnnularDeterminate, - /// Shows a custom view. - MBProgressHUDModeCustomView, - /// Shows only labels. - MBProgressHUDModeText -}; - -typedef NS_ENUM(NSInteger, MBProgressHUDAnimation) { - /// Opacity animation - MBProgressHUDAnimationFade, - /// Opacity + scale animation (zoom in when appearing zoom out when disappearing) - MBProgressHUDAnimationZoom, - /// Opacity + scale animation (zoom out style) - MBProgressHUDAnimationZoomOut, - /// Opacity + scale animation (zoom in style) - MBProgressHUDAnimationZoomIn -}; - -typedef NS_ENUM(NSInteger, MBProgressHUDBackgroundStyle) { - /// Solid color background - MBProgressHUDBackgroundStyleSolidColor, - /// UIVisualEffectView or UIToolbar.layer background view - MBProgressHUDBackgroundStyleBlur -}; - -typedef void (^MBProgressHUDCompletionBlock)(void); - - -NS_ASSUME_NONNULL_BEGIN - - -/** - * Displays a simple HUD window containing a progress indicator and two optional labels for short messages. - * - * This is a simple drop-in class for displaying a progress HUD view similar to Apple's private UIProgressHUD class. - * The MBProgressHUD window spans over the entire space given to it by the initWithFrame: constructor and catches all - * user input on this region, thereby preventing the user operations on components below the view. - * - * @note To still allow touches to pass through the HUD, you can set hud.userInteractionEnabled = NO. - * @attention MBProgressHUD is a UI class and should therefore only be accessed on the main thread. - */ -@interface MBProgressHUD : UIView - -/** - * Creates a new HUD, adds it to provided view and shows it. The counterpart to this method is hideHUDForView:animated:. - * - * @note This method sets removeFromSuperViewOnHide. The HUD will automatically be removed from the view hierarchy when hidden. - * - * @param view The view that the HUD will be added to - * @param animated If set to YES the HUD will appear using the current animationType. If set to NO the HUD will not use - * animations while appearing. - * @return A reference to the created HUD. - * - * @see hideHUDForView:animated: - * @see animationType - */ -+ (instancetype)showHUDAddedTo:(UIView *)view animated:(BOOL)animated; - -/// @name Showing and hiding - -/** - * Finds the top-most HUD subview that hasn't finished and hides it. The counterpart to this method is showHUDAddedTo:animated:. - * - * @note This method sets removeFromSuperViewOnHide. The HUD will automatically be removed from the view hierarchy when hidden. - * - * @param view The view that is going to be searched for a HUD subview. - * @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use - * animations while disappearing. - * @return YES if a HUD was found and removed, NO otherwise. - * - * @see showHUDAddedTo:animated: - * @see animationType - */ -+ (BOOL)hideHUDForView:(UIView *)view animated:(BOOL)animated; - -/** - * Finds the top-most HUD subview that hasn't finished and returns it. - * - * @param view The view that is going to be searched. - * @return A reference to the last HUD subview discovered. - */ -+ (nullable MBProgressHUD *)HUDForView:(UIView *)view NS_SWIFT_NAME(forView(_:)); - -/** - * A convenience constructor that initializes the HUD with the view's bounds. Calls the designated constructor with - * view.bounds as the parameter. - * - * @param view The view instance that will provide the bounds for the HUD. Should be the same instance as - * the HUD's superview (i.e., the view that the HUD will be added to). - */ -- (instancetype)initWithView:(UIView *)view; - -/** - * Displays the HUD. - * - * @note You need to make sure that the main thread completes its run loop soon after this method call so that - * the user interface can be updated. Call this method when your task is already set up to be executed in a new thread - * (e.g., when using something like NSOperation or making an asynchronous call like NSURLRequest). - * - * @param animated If set to YES the HUD will appear using the current animationType. If set to NO the HUD will not use - * animations while appearing. - * - * @see animationType - */ -- (void)showAnimated:(BOOL)animated; - -/** - * Hides the HUD. This still calls the hudWasHidden: delegate. This is the counterpart of the show: method. Use it to - * hide the HUD when your task completes. - * - * @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use - * animations while disappearing. - * - * @see animationType - */ -- (void)hideAnimated:(BOOL)animated; - -/** - * Hides the HUD after a delay. This still calls the hudWasHidden: delegate. This is the counterpart of the show: method. Use it to - * hide the HUD when your task completes. - * - * @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use - * animations while disappearing. - * @param delay Delay in seconds until the HUD is hidden. - * - * @see animationType - */ -- (void)hideAnimated:(BOOL)animated afterDelay:(NSTimeInterval)delay; - -/** - * The HUD delegate object. Receives HUD state notifications. - */ -@property (weak, nonatomic) id delegate; - -/** - * Called after the HUD is hidden. - */ -@property (copy, nullable) MBProgressHUDCompletionBlock completionBlock; - -/** - * Grace period is the time (in seconds) that the invoked method may be run without - * showing the HUD. If the task finishes before the grace time runs out, the HUD will - * not be shown at all. - * This may be used to prevent HUD display for very short tasks. - * Defaults to 0 (no grace time). - * @note The graceTime needs to be set before the hud is shown. You thus can't use `showHUDAddedTo:animated:`, - * but instead need to alloc / init the HUD, configure the grace time and than show it manually. - */ -@property (assign, nonatomic) NSTimeInterval graceTime; - -/** - * The minimum time (in seconds) that the HUD is shown. - * This avoids the problem of the HUD being shown and than instantly hidden. - * Defaults to 0 (no minimum show time). - */ -@property (assign, nonatomic) NSTimeInterval minShowTime; - -/** - * Removes the HUD from its parent view when hidden. - * Defaults to NO. - */ -@property (assign, nonatomic) BOOL removeFromSuperViewOnHide; - -/// @name Appearance - -/** - * MBProgressHUD operation mode. The default is MBProgressHUDModeIndeterminate. - */ -@property (assign, nonatomic) MBProgressHUDMode mode; - -/** - * A color that gets forwarded to all labels and supported indicators. Also sets the tintColor - * for custom views on iOS 7+. Set to nil to manage color individually. - * Defaults to semi-translucent black on iOS 7 and later and white on earlier iOS versions. - */ -@property (strong, nonatomic, nullable) UIColor *contentColor UI_APPEARANCE_SELECTOR; - -/** - * The animation type that should be used when the HUD is shown and hidden. - */ -@property (assign, nonatomic) MBProgressHUDAnimation animationType UI_APPEARANCE_SELECTOR; - -/** - * The bezel offset relative to the center of the view. You can use MBProgressMaxOffset - * and -MBProgressMaxOffset to move the HUD all the way to the screen edge in each direction. - * E.g., CGPointMake(0.f, MBProgressMaxOffset) would position the HUD centered on the bottom edge. - */ -@property (assign, nonatomic) CGPoint offset UI_APPEARANCE_SELECTOR; - -/** - * The amount of space between the HUD edge and the HUD elements (labels, indicators or custom views). - * This also represents the minimum bezel distance to the edge of the HUD view. - * Defaults to 20.f - */ -@property (assign, nonatomic) CGFloat margin UI_APPEARANCE_SELECTOR; - -/** - * The minimum size of the HUD bezel. Defaults to CGSizeZero (no minimum size). - */ -@property (assign, nonatomic) CGSize minSize UI_APPEARANCE_SELECTOR; - -/** - * Force the HUD dimensions to be equal if possible. - */ -@property (assign, nonatomic, getter = isSquare) BOOL square UI_APPEARANCE_SELECTOR; - -/** - * When enabled, the bezel center gets slightly affected by the device accelerometer data. - * Defaults to NO. - * - * @note This can cause main thread checker assertions on certain devices. https://github.com/jdg/MBProgressHUD/issues/552 - */ -@property (assign, nonatomic, getter=areDefaultMotionEffectsEnabled) BOOL defaultMotionEffectsEnabled UI_APPEARANCE_SELECTOR; - -/// @name Progress - -/** - * The progress of the progress indicator, from 0.0 to 1.0. Defaults to 0.0. - */ -@property (assign, nonatomic) float progress; - -/// @name ProgressObject - -/** - * The NSProgress object feeding the progress information to the progress indicator. - */ -@property (strong, nonatomic, nullable) NSProgress *progressObject; - -/// @name Views - -/** - * The view containing the labels and indicator (or customView). - */ -@property (strong, nonatomic, readonly) MBBackgroundView *bezelView; - -/** - * View covering the entire HUD area, placed behind bezelView. - */ -@property (strong, nonatomic, readonly) MBBackgroundView *backgroundView; - -/** - * The UIView (e.g., a UIImageView) to be shown when the HUD is in MBProgressHUDModeCustomView. - * The view should implement intrinsicContentSize for proper sizing. For best results use approximately 37 by 37 pixels. - */ -@property (strong, nonatomic, nullable) UIView *customView; - -/** - * A label that holds an optional short message to be displayed below the activity indicator. The HUD is automatically resized to fit - * the entire text. - */ -@property (strong, nonatomic, readonly) UILabel *label; - -/** - * A label that holds an optional details message displayed below the labelText message. The details text can span multiple lines. - */ -@property (strong, nonatomic, readonly) UILabel *detailsLabel; - -/** - * A button that is placed below the labels. Visible only if a target / action is added and a title is assigned.. - */ -@property (strong, nonatomic, readonly) UIButton *button; - -@end - - -@protocol MBProgressHUDDelegate - -@optional - -/** - * Called after the HUD was fully hidden from the screen. - */ -- (void)hudWasHidden:(MBProgressHUD *)hud; - -@end - - -/** - * A progress view for showing definite progress by filling up a circle (pie chart). - */ -@interface MBRoundProgressView : UIView - -/** - * Progress (0.0 to 1.0) - */ -@property (nonatomic, assign) float progress; - -/** - * Indicator progress color. - * Defaults to white [UIColor whiteColor]. - */ -@property (nonatomic, strong) UIColor *progressTintColor; - -/** - * Indicator background (non-progress) color. - * Only applicable on iOS versions older than iOS 7. - * Defaults to translucent white (alpha 0.1). - */ -@property (nonatomic, strong) UIColor *backgroundTintColor; - -/* - * Display mode - NO = round or YES = annular. Defaults to round. - */ -@property (nonatomic, assign, getter = isAnnular) BOOL annular; - -@end - - -/** - * A flat bar progress view. - */ -@interface MBBarProgressView : UIView - -/** - * Progress (0.0 to 1.0) - */ -@property (nonatomic, assign) float progress; - -/** - * Bar border line color. - * Defaults to white [UIColor whiteColor]. - */ -@property (nonatomic, strong) UIColor *lineColor; - -/** - * Bar background color. - * Defaults to clear [UIColor clearColor]; - */ -@property (nonatomic, strong) UIColor *progressRemainingColor; - -/** - * Bar progress color. - * Defaults to white [UIColor whiteColor]. - */ -@property (nonatomic, strong) UIColor *progressColor; - -@end - - -@interface MBBackgroundView : UIView - -/** - * The background style. - * Defaults to MBProgressHUDBackgroundStyleBlur. - */ -@property (nonatomic) MBProgressHUDBackgroundStyle style; - -/** - * The blur effect style, when using MBProgressHUDBackgroundStyleBlur. - * Defaults to UIBlurEffectStyleLight. - */ -@property (nonatomic) UIBlurEffectStyle blurEffectStyle; - -/** - * The background color or the blur tint color. - * - * Defaults to nil on iOS 13 and later and - * `[UIColor colorWithWhite:0.8f alpha:0.6f]` - * on older systems. - */ -@property (nonatomic, strong, nullable) UIColor *color; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDProgressHUDKit_Private/DDProgressHUDKit_Private/Classes/MBProgressHUD.m b/Pods/DDProgressHUDKit_Private/DDProgressHUDKit_Private/Classes/MBProgressHUD.m deleted file mode 100644 index a2829a3..0000000 --- a/Pods/DDProgressHUDKit_Private/DDProgressHUDKit_Private/Classes/MBProgressHUD.m +++ /dev/null @@ -1,1194 +0,0 @@ -// -// MBProgressHUD.m -// Version 1.2.0 -// Created by Matej Bukovinski on 2.4.09. -// - -#import "MBProgressHUD.h" -#import - -#define MBMainThreadAssert() NSAssert([NSThread isMainThread], @"MBProgressHUD needs to be accessed on the main thread."); - -CGFloat const MBProgressMaxOffset = 1000000.f; - -static const CGFloat MBDefaultPadding = 4.f; -static const CGFloat MBDefaultLabelFontSize = 16.f; -static const CGFloat MBDefaultDetailsLabelFontSize = 12.f; - - -@interface MBProgressHUD () - -@property (nonatomic, assign) BOOL useAnimation; -@property (nonatomic, assign, getter=hasFinished) BOOL finished; -@property (nonatomic, strong) UIView *indicator; -@property (nonatomic, strong) NSDate *showStarted; -@property (nonatomic, strong) NSArray *paddingConstraints; -@property (nonatomic, strong) NSArray *bezelConstraints; -@property (nonatomic, strong) UIView *topSpacer; -@property (nonatomic, strong) UIView *bottomSpacer; -@property (nonatomic, strong) UIMotionEffectGroup *bezelMotionEffects; -@property (nonatomic, weak) NSTimer *graceTimer; -@property (nonatomic, weak) NSTimer *minShowTimer; -@property (nonatomic, weak) NSTimer *hideDelayTimer; -@property (nonatomic, weak) CADisplayLink *progressObjectDisplayLink; - -@end - - -@interface MBProgressHUDRoundedButton : UIButton -@end - - -@implementation MBProgressHUD - -#pragma mark - Class methods - -+ (instancetype)showHUDAddedTo:(UIView *)view animated:(BOOL)animated { - MBProgressHUD *hud = [[self alloc] initWithView:view]; - hud.removeFromSuperViewOnHide = YES; - [view addSubview:hud]; - [hud showAnimated:animated]; - return hud; -} - -+ (BOOL)hideHUDForView:(UIView *)view animated:(BOOL)animated { - MBProgressHUD *hud = [self HUDForView:view]; - if (hud != nil) { - hud.removeFromSuperViewOnHide = YES; - [hud hideAnimated:animated]; - return YES; - } - return NO; -} - -+ (MBProgressHUD *)HUDForView:(UIView *)view { - NSEnumerator *subviewsEnum = [view.subviews reverseObjectEnumerator]; - for (UIView *subview in subviewsEnum) { - if ([subview isKindOfClass:self]) { - MBProgressHUD *hud = (MBProgressHUD *)subview; - if (hud.hasFinished == NO) { - return hud; - } - } - } - return nil; -} - -#pragma mark - Lifecycle - -- (void)commonInit { - // Set default values for properties - _animationType = MBProgressHUDAnimationFade; - _mode = MBProgressHUDModeIndeterminate; - _margin = 20.0f; - _defaultMotionEffectsEnabled = NO; - - if (@available(iOS 13.0, tvOS 13, *)) { - _contentColor = [[UIColor labelColor] colorWithAlphaComponent:0.7f]; - } else { - _contentColor = [UIColor colorWithWhite:0.f alpha:0.7f]; - } - - // Transparent background - self.opaque = NO; - self.backgroundColor = [UIColor clearColor]; - // Make it invisible for now - self.alpha = 0.0f; - self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - self.layer.allowsGroupOpacity = NO; - - [self setupViews]; - [self updateIndicators]; - [self registerForNotifications]; -} - -- (instancetype)initWithFrame:(CGRect)frame { - if ((self = [super initWithFrame:frame])) { - [self commonInit]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - if ((self = [super initWithCoder:aDecoder])) { - [self commonInit]; - } - return self; -} - -- (id)initWithView:(UIView *)view { - NSAssert(view, @"View must not be nil."); - return [self initWithFrame:view.bounds]; -} - -- (void)dealloc { - [self unregisterFromNotifications]; -} - -#pragma mark - Show & hide - -- (void)showAnimated:(BOOL)animated { - MBMainThreadAssert(); - [self.minShowTimer invalidate]; - self.useAnimation = animated; - self.finished = NO; - // If the grace time is set, postpone the HUD display - if (self.graceTime > 0.0) { - NSTimer *timer = [NSTimer timerWithTimeInterval:self.graceTime target:self selector:@selector(handleGraceTimer:) userInfo:nil repeats:NO]; - [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; - self.graceTimer = timer; - } - // ... otherwise show the HUD immediately - else { - [self showUsingAnimation:self.useAnimation]; - } -} - -- (void)hideAnimated:(BOOL)animated { - MBMainThreadAssert(); - [self.graceTimer invalidate]; - self.useAnimation = animated; - self.finished = YES; - // If the minShow time is set, calculate how long the HUD was shown, - // and postpone the hiding operation if necessary - if (self.minShowTime > 0.0 && self.showStarted) { - NSTimeInterval interv = [[NSDate date] timeIntervalSinceDate:self.showStarted]; - if (interv < self.minShowTime) { - NSTimer *timer = [NSTimer timerWithTimeInterval:(self.minShowTime - interv) target:self selector:@selector(handleMinShowTimer:) userInfo:nil repeats:NO]; - [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; - self.minShowTimer = timer; - return; - } - } - // ... otherwise hide the HUD immediately - [self hideUsingAnimation:self.useAnimation]; -} - -- (void)hideAnimated:(BOOL)animated afterDelay:(NSTimeInterval)delay { - // Cancel any scheduled hideAnimated:afterDelay: calls - [self.hideDelayTimer invalidate]; - - NSTimer *timer = [NSTimer timerWithTimeInterval:delay target:self selector:@selector(handleHideTimer:) userInfo:@(animated) repeats:NO]; - [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; - self.hideDelayTimer = timer; -} - -#pragma mark - Timer callbacks - -- (void)handleGraceTimer:(NSTimer *)theTimer { - // Show the HUD only if the task is still running - if (!self.hasFinished) { - [self showUsingAnimation:self.useAnimation]; - } -} - -- (void)handleMinShowTimer:(NSTimer *)theTimer { - [self hideUsingAnimation:self.useAnimation]; -} - -- (void)handleHideTimer:(NSTimer *)timer { - [self hideAnimated:[timer.userInfo boolValue]]; -} - -#pragma mark - View Hierrarchy - -- (void)didMoveToSuperview { - [self updateForCurrentOrientationAnimated:NO]; -} - -#pragma mark - Internal show & hide operations - -- (void)showUsingAnimation:(BOOL)animated { - // Cancel any previous animations - [self.bezelView.layer removeAllAnimations]; - [self.backgroundView.layer removeAllAnimations]; - - // Cancel any scheduled hideAnimated:afterDelay: calls - [self.hideDelayTimer invalidate]; - - self.showStarted = [NSDate date]; - self.alpha = 1.f; - - // Needed in case we hide and re-show with the same NSProgress object attached. - [self setNSProgressDisplayLinkEnabled:YES]; - - // Set up motion effects only at this point to avoid needlessly - // creating the effect if it was disabled after initialization. - [self updateBezelMotionEffects]; - - if (animated) { - [self animateIn:YES withType:self.animationType completion:NULL]; - } else { - self.bezelView.alpha = 1.f; - self.backgroundView.alpha = 1.f; - } -} - -- (void)hideUsingAnimation:(BOOL)animated { - // Cancel any scheduled hideAnimated:afterDelay: calls. - // This needs to happen here instead of in done, - // to avoid races if another hideAnimated:afterDelay: - // call comes in while the HUD is animating out. - [self.hideDelayTimer invalidate]; - - if (animated && self.showStarted) { - self.showStarted = nil; - [self animateIn:NO withType:self.animationType completion:^(BOOL finished) { - [self done]; - }]; - } else { - self.showStarted = nil; - self.bezelView.alpha = 0.f; - self.backgroundView.alpha = 1.f; - [self done]; - } -} - -- (void)animateIn:(BOOL)animatingIn withType:(MBProgressHUDAnimation)type completion:(void(^)(BOOL finished))completion { - // Automatically determine the correct zoom animation type - if (type == MBProgressHUDAnimationZoom) { - type = animatingIn ? MBProgressHUDAnimationZoomIn : MBProgressHUDAnimationZoomOut; - } - - CGAffineTransform small = CGAffineTransformMakeScale(0.5f, 0.5f); - CGAffineTransform large = CGAffineTransformMakeScale(1.5f, 1.5f); - - // Set starting state - UIView *bezelView = self.bezelView; - if (animatingIn && bezelView.alpha == 0.f && type == MBProgressHUDAnimationZoomIn) { - bezelView.transform = small; - } else if (animatingIn && bezelView.alpha == 0.f && type == MBProgressHUDAnimationZoomOut) { - bezelView.transform = large; - } - - // Perform animations - dispatch_block_t animations = ^{ - if (animatingIn) { - bezelView.transform = CGAffineTransformIdentity; - } else if (!animatingIn && type == MBProgressHUDAnimationZoomIn) { - bezelView.transform = large; - } else if (!animatingIn && type == MBProgressHUDAnimationZoomOut) { - bezelView.transform = small; - } - CGFloat alpha = animatingIn ? 1.f : 0.f; - bezelView.alpha = alpha; - self.backgroundView.alpha = alpha; - }; - [UIView animateWithDuration:0.3 delay:0. usingSpringWithDamping:1.f initialSpringVelocity:0.f options:UIViewAnimationOptionBeginFromCurrentState animations:animations completion:completion]; -} - -- (void)done { - [self setNSProgressDisplayLinkEnabled:NO]; - - if (self.hasFinished) { - self.alpha = 0.0f; - if (self.removeFromSuperViewOnHide) { - [self removeFromSuperview]; - } - } - MBProgressHUDCompletionBlock completionBlock = self.completionBlock; - if (completionBlock) { - completionBlock(); - } - id delegate = self.delegate; - if ([delegate respondsToSelector:@selector(hudWasHidden:)]) { - [delegate performSelector:@selector(hudWasHidden:) withObject:self]; - } -} - -#pragma mark - UI - -- (void)setupViews { - UIColor *defaultColor = self.contentColor; - - MBBackgroundView *backgroundView = [[MBBackgroundView alloc] initWithFrame:self.bounds]; - backgroundView.style = MBProgressHUDBackgroundStyleSolidColor; - backgroundView.backgroundColor = [UIColor clearColor]; - backgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - backgroundView.alpha = 0.f; - [self addSubview:backgroundView]; - _backgroundView = backgroundView; - - MBBackgroundView *bezelView = [MBBackgroundView new]; - bezelView.translatesAutoresizingMaskIntoConstraints = NO; - bezelView.layer.cornerRadius = 5.f; - bezelView.alpha = 0.f; - [self addSubview:bezelView]; - _bezelView = bezelView; - - UILabel *label = [UILabel new]; - label.adjustsFontSizeToFitWidth = NO; - label.textAlignment = NSTextAlignmentCenter; - label.textColor = defaultColor; - label.font = [UIFont boldSystemFontOfSize:MBDefaultLabelFontSize]; - label.opaque = NO; - label.backgroundColor = [UIColor clearColor]; - _label = label; - - UILabel *detailsLabel = [UILabel new]; - detailsLabel.adjustsFontSizeToFitWidth = NO; - detailsLabel.textAlignment = NSTextAlignmentCenter; - detailsLabel.textColor = defaultColor; - detailsLabel.numberOfLines = 0; - detailsLabel.font = [UIFont boldSystemFontOfSize:MBDefaultDetailsLabelFontSize]; - detailsLabel.opaque = NO; - detailsLabel.backgroundColor = [UIColor clearColor]; - _detailsLabel = detailsLabel; - - UIButton *button = [MBProgressHUDRoundedButton buttonWithType:UIButtonTypeCustom]; - button.titleLabel.textAlignment = NSTextAlignmentCenter; - button.titleLabel.font = [UIFont boldSystemFontOfSize:MBDefaultDetailsLabelFontSize]; - [button setTitleColor:defaultColor forState:UIControlStateNormal]; - _button = button; - - for (UIView *view in @[label, detailsLabel, button]) { - view.translatesAutoresizingMaskIntoConstraints = NO; - [view setContentCompressionResistancePriority:998.f forAxis:UILayoutConstraintAxisHorizontal]; - [view setContentCompressionResistancePriority:998.f forAxis:UILayoutConstraintAxisVertical]; - [bezelView addSubview:view]; - } - - UIView *topSpacer = [UIView new]; - topSpacer.translatesAutoresizingMaskIntoConstraints = NO; - topSpacer.hidden = YES; - [bezelView addSubview:topSpacer]; - _topSpacer = topSpacer; - - UIView *bottomSpacer = [UIView new]; - bottomSpacer.translatesAutoresizingMaskIntoConstraints = NO; - bottomSpacer.hidden = YES; - [bezelView addSubview:bottomSpacer]; - _bottomSpacer = bottomSpacer; -} - -- (void)updateIndicators { - UIView *indicator = self.indicator; - BOOL isActivityIndicator = [indicator isKindOfClass:[UIActivityIndicatorView class]]; - BOOL isRoundIndicator = [indicator isKindOfClass:[MBRoundProgressView class]]; - - MBProgressHUDMode mode = self.mode; - if (mode == MBProgressHUDModeIndeterminate) { - if (!isActivityIndicator) { - // Update to indeterminate indicator - UIActivityIndicatorView *activityIndicator; - [indicator removeFromSuperview]; -#if !TARGET_OS_MACCATALYST - if (@available(iOS 13.0, tvOS 13.0, *)) { -#endif - activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleLarge]; - activityIndicator.color = [UIColor whiteColor]; -#if !TARGET_OS_MACCATALYST - } else { - activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; - } -#endif - [activityIndicator startAnimating]; - indicator = activityIndicator; - [self.bezelView addSubview:indicator]; - } - } - else if (mode == MBProgressHUDModeDeterminateHorizontalBar) { - // Update to bar determinate indicator - [indicator removeFromSuperview]; - indicator = [[MBBarProgressView alloc] init]; - [self.bezelView addSubview:indicator]; - } - else if (mode == MBProgressHUDModeDeterminate || mode == MBProgressHUDModeAnnularDeterminate) { - if (!isRoundIndicator) { - // Update to determinante indicator - [indicator removeFromSuperview]; - indicator = [[MBRoundProgressView alloc] init]; - [self.bezelView addSubview:indicator]; - } - if (mode == MBProgressHUDModeAnnularDeterminate) { - [(MBRoundProgressView *)indicator setAnnular:YES]; - } - } - else if (mode == MBProgressHUDModeCustomView && self.customView != indicator) { - // Update custom view indicator - [indicator removeFromSuperview]; - indicator = self.customView; - [self.bezelView addSubview:indicator]; - } - else if (mode == MBProgressHUDModeText) { - [indicator removeFromSuperview]; - indicator = nil; - } - indicator.translatesAutoresizingMaskIntoConstraints = NO; - self.indicator = indicator; - - if ([indicator respondsToSelector:@selector(setProgress:)]) { - [(id)indicator setValue:@(self.progress) forKey:@"progress"]; - } - - [indicator setContentCompressionResistancePriority:998.f forAxis:UILayoutConstraintAxisHorizontal]; - [indicator setContentCompressionResistancePriority:998.f forAxis:UILayoutConstraintAxisVertical]; - - [self updateViewsForColor:self.contentColor]; - [self setNeedsUpdateConstraints]; -} - -- (void)updateViewsForColor:(UIColor *)color { - if (!color) return; - - self.label.textColor = color; - self.detailsLabel.textColor = color; - [self.button setTitleColor:color forState:UIControlStateNormal]; - - // UIAppearance settings are prioritized. If they are preset the set color is ignored. - - UIView *indicator = self.indicator; - if ([indicator isKindOfClass:[UIActivityIndicatorView class]]) { - UIActivityIndicatorView *appearance = nil; -#if __IPHONE_OS_VERSION_MIN_REQUIRED < 90000 - appearance = [UIActivityIndicatorView appearanceWhenContainedIn:[MBProgressHUD class], nil]; -#else - // For iOS 9+ - appearance = [UIActivityIndicatorView appearanceWhenContainedInInstancesOfClasses:@[[MBProgressHUD class]]]; -#endif - - if (appearance.color == nil) { - ((UIActivityIndicatorView *)indicator).color = color; - } - } else if ([indicator isKindOfClass:[MBRoundProgressView class]]) { - MBRoundProgressView *appearance = nil; -#if __IPHONE_OS_VERSION_MIN_REQUIRED < 90000 - appearance = [MBRoundProgressView appearanceWhenContainedIn:[MBProgressHUD class], nil]; -#else - appearance = [MBRoundProgressView appearanceWhenContainedInInstancesOfClasses:@[[MBProgressHUD class]]]; -#endif - if (appearance.progressTintColor == nil) { - ((MBRoundProgressView *)indicator).progressTintColor = color; - } - if (appearance.backgroundTintColor == nil) { - ((MBRoundProgressView *)indicator).backgroundTintColor = [color colorWithAlphaComponent:0.1]; - } - } else if ([indicator isKindOfClass:[MBBarProgressView class]]) { - MBBarProgressView *appearance = nil; -#if __IPHONE_OS_VERSION_MIN_REQUIRED < 90000 - appearance = [MBBarProgressView appearanceWhenContainedIn:[MBProgressHUD class], nil]; -#else - appearance = [MBBarProgressView appearanceWhenContainedInInstancesOfClasses:@[[MBProgressHUD class]]]; -#endif - if (appearance.progressColor == nil) { - ((MBBarProgressView *)indicator).progressColor = color; - } - if (appearance.lineColor == nil) { - ((MBBarProgressView *)indicator).lineColor = color; - } - } else { - [indicator setTintColor:color]; - } -} - -- (void)updateBezelMotionEffects { - MBBackgroundView *bezelView = self.bezelView; - UIMotionEffectGroup *bezelMotionEffects = self.bezelMotionEffects; - - if (self.defaultMotionEffectsEnabled && !bezelMotionEffects) { - CGFloat effectOffset = 10.f; - UIInterpolatingMotionEffect *effectX = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x" type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis]; - effectX.maximumRelativeValue = @(effectOffset); - effectX.minimumRelativeValue = @(-effectOffset); - - UIInterpolatingMotionEffect *effectY = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.y" type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis]; - effectY.maximumRelativeValue = @(effectOffset); - effectY.minimumRelativeValue = @(-effectOffset); - - UIMotionEffectGroup *group = [[UIMotionEffectGroup alloc] init]; - group.motionEffects = @[effectX, effectY]; - - self.bezelMotionEffects = group; - [bezelView addMotionEffect:group]; - } else if (bezelMotionEffects) { - self.bezelMotionEffects = nil; - [bezelView removeMotionEffect:bezelMotionEffects]; - } -} - -#pragma mark - Layout - -- (void)updateConstraints { - UIView *bezel = self.bezelView; - UIView *topSpacer = self.topSpacer; - UIView *bottomSpacer = self.bottomSpacer; - CGFloat margin = self.margin; - NSMutableArray *bezelConstraints = [NSMutableArray array]; - NSDictionary *metrics = @{@"margin": @(margin)}; - - NSMutableArray *subviews = [NSMutableArray arrayWithObjects:self.topSpacer, self.label, self.detailsLabel, self.button, self.bottomSpacer, nil]; - if (self.indicator) [subviews insertObject:self.indicator atIndex:1]; - - // Remove existing constraints - [self removeConstraints:self.constraints]; - [topSpacer removeConstraints:topSpacer.constraints]; - [bottomSpacer removeConstraints:bottomSpacer.constraints]; - if (self.bezelConstraints) { - [bezel removeConstraints:self.bezelConstraints]; - self.bezelConstraints = nil; - } - - // Center bezel in container (self), applying the offset if set - CGPoint offset = self.offset; - NSMutableArray *centeringConstraints = [NSMutableArray array]; - [centeringConstraints addObject:[NSLayoutConstraint constraintWithItem:bezel attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterX multiplier:1.f constant:offset.x]]; - [centeringConstraints addObject:[NSLayoutConstraint constraintWithItem:bezel attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterY multiplier:1.f constant:offset.y]]; - [self applyPriority:998.f toConstraints:centeringConstraints]; - [self addConstraints:centeringConstraints]; - - // Ensure minimum side margin is kept - NSMutableArray *sideConstraints = [NSMutableArray array]; - [sideConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(>=margin)-[bezel]-(>=margin)-|" options:0 metrics:metrics views:NSDictionaryOfVariableBindings(bezel)]]; - [sideConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(>=margin)-[bezel]-(>=margin)-|" options:0 metrics:metrics views:NSDictionaryOfVariableBindings(bezel)]]; - [self applyPriority:999.f toConstraints:sideConstraints]; - [self addConstraints:sideConstraints]; - - // Minimum bezel size, if set - CGSize minimumSize = self.minSize; - if (!CGSizeEqualToSize(minimumSize, CGSizeZero)) { - NSMutableArray *minSizeConstraints = [NSMutableArray array]; - [minSizeConstraints addObject:[NSLayoutConstraint constraintWithItem:bezel attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.f constant:minimumSize.width]]; - [minSizeConstraints addObject:[NSLayoutConstraint constraintWithItem:bezel attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.f constant:minimumSize.height]]; - [self applyPriority:997.f toConstraints:minSizeConstraints]; - [bezelConstraints addObjectsFromArray:minSizeConstraints]; - } - - // Square aspect ratio, if set - if (self.square) { - NSLayoutConstraint *square = [NSLayoutConstraint constraintWithItem:bezel attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:bezel attribute:NSLayoutAttributeWidth multiplier:1.f constant:0]; - square.priority = 997.f; - [bezelConstraints addObject:square]; - } - - // Top and bottom spacing - [topSpacer addConstraint:[NSLayoutConstraint constraintWithItem:topSpacer attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.f constant:margin]]; - [bottomSpacer addConstraint:[NSLayoutConstraint constraintWithItem:bottomSpacer attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.f constant:margin]]; - // Top and bottom spaces should be equal - [bezelConstraints addObject:[NSLayoutConstraint constraintWithItem:topSpacer attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:bottomSpacer attribute:NSLayoutAttributeHeight multiplier:1.f constant:0.f]]; - - // Layout subviews in bezel - NSMutableArray *paddingConstraints = [NSMutableArray new]; - [subviews enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL *stop) { - // Center in bezel - [bezelConstraints addObject:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:bezel attribute:NSLayoutAttributeCenterX multiplier:1.f constant:0.f]]; - // Ensure the minimum edge margin is kept - [bezelConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(>=margin)-[view]-(>=margin)-|" options:0 metrics:metrics views:NSDictionaryOfVariableBindings(view)]]; - // Element spacing - if (idx == 0) { - // First, ensure spacing to bezel edge - [bezelConstraints addObject:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:bezel attribute:NSLayoutAttributeTop multiplier:1.f constant:0.f]]; - } else if (idx == subviews.count - 1) { - // Last, ensure spacing to bezel edge - [bezelConstraints addObject:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:bezel attribute:NSLayoutAttributeBottom multiplier:1.f constant:0.f]]; - } - if (idx > 0) { - // Has previous - NSLayoutConstraint *padding = [NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:subviews[idx - 1] attribute:NSLayoutAttributeBottom multiplier:1.f constant:0.f]; - [bezelConstraints addObject:padding]; - [paddingConstraints addObject:padding]; - } - }]; - - [bezel addConstraints:bezelConstraints]; - self.bezelConstraints = bezelConstraints; - - self.paddingConstraints = [paddingConstraints copy]; - [self updatePaddingConstraints]; - - [super updateConstraints]; -} - -- (void)layoutSubviews { - // There is no need to update constraints if they are going to - // be recreated in [super layoutSubviews] due to needsUpdateConstraints being set. - // This also avoids an issue on iOS 8, where updatePaddingConstraints - // would trigger a zombie object access. - if (!self.needsUpdateConstraints) { - [self updatePaddingConstraints]; - } - [super layoutSubviews]; -} - -- (void)updatePaddingConstraints { - // Set padding dynamically, depending on whether the view is visible or not - __block BOOL hasVisibleAncestors = NO; - [self.paddingConstraints enumerateObjectsUsingBlock:^(NSLayoutConstraint *padding, NSUInteger idx, BOOL *stop) { - UIView *firstView = (UIView *)padding.firstItem; - UIView *secondView = (UIView *)padding.secondItem; - BOOL firstVisible = !firstView.hidden && !CGSizeEqualToSize(firstView.intrinsicContentSize, CGSizeZero); - BOOL secondVisible = !secondView.hidden && !CGSizeEqualToSize(secondView.intrinsicContentSize, CGSizeZero); - // Set if both views are visible or if there's a visible view on top that doesn't have padding - // added relative to the current view yet - padding.constant = (firstVisible && (secondVisible || hasVisibleAncestors)) ? MBDefaultPadding : 0.f; - hasVisibleAncestors |= secondVisible; - }]; -} - -- (void)applyPriority:(UILayoutPriority)priority toConstraints:(NSArray *)constraints { - for (NSLayoutConstraint *constraint in constraints) { - constraint.priority = priority; - } -} - -#pragma mark - Properties - -- (void)setMode:(MBProgressHUDMode)mode { - if (mode != _mode) { - _mode = mode; - [self updateIndicators]; - } -} - -- (void)setCustomView:(UIView *)customView { - if (customView != _customView) { - _customView = customView; - if (self.mode == MBProgressHUDModeCustomView) { - [self updateIndicators]; - } - } -} - -- (void)setOffset:(CGPoint)offset { - if (!CGPointEqualToPoint(offset, _offset)) { - _offset = offset; - [self setNeedsUpdateConstraints]; - } -} - -- (void)setMargin:(CGFloat)margin { - if (margin != _margin) { - _margin = margin; - [self setNeedsUpdateConstraints]; - } -} - -- (void)setMinSize:(CGSize)minSize { - if (!CGSizeEqualToSize(minSize, _minSize)) { - _minSize = minSize; - [self setNeedsUpdateConstraints]; - } -} - -- (void)setSquare:(BOOL)square { - if (square != _square) { - _square = square; - [self setNeedsUpdateConstraints]; - } -} - -- (void)setProgressObjectDisplayLink:(CADisplayLink *)progressObjectDisplayLink { - if (progressObjectDisplayLink != _progressObjectDisplayLink) { - [_progressObjectDisplayLink invalidate]; - - _progressObjectDisplayLink = progressObjectDisplayLink; - - [_progressObjectDisplayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; - } -} - -- (void)setProgressObject:(NSProgress *)progressObject { - if (progressObject != _progressObject) { - _progressObject = progressObject; - [self setNSProgressDisplayLinkEnabled:YES]; - } -} - -- (void)setProgress:(float)progress { - if (progress != _progress) { - _progress = progress; - UIView *indicator = self.indicator; - if ([indicator respondsToSelector:@selector(setProgress:)]) { - [(id)indicator setValue:@(self.progress) forKey:@"progress"]; - } - } -} - -- (void)setContentColor:(UIColor *)contentColor { - if (contentColor != _contentColor && ![contentColor isEqual:_contentColor]) { - _contentColor = contentColor; - [self updateViewsForColor:contentColor]; - } -} - -- (void)setDefaultMotionEffectsEnabled:(BOOL)defaultMotionEffectsEnabled { - if (defaultMotionEffectsEnabled != _defaultMotionEffectsEnabled) { - _defaultMotionEffectsEnabled = defaultMotionEffectsEnabled; - [self updateBezelMotionEffects]; - } -} - -#pragma mark - NSProgress - -- (void)setNSProgressDisplayLinkEnabled:(BOOL)enabled { - // We're using CADisplayLink, because NSProgress can change very quickly and observing it may starve the main thread, - // so we're refreshing the progress only every frame draw - if (enabled && self.progressObject) { - // Only create if not already active. - if (!self.progressObjectDisplayLink) { - self.progressObjectDisplayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateProgressFromProgressObject)]; - } - } else { - self.progressObjectDisplayLink = nil; - } -} - -- (void)updateProgressFromProgressObject { - self.progress = self.progressObject.fractionCompleted; -} - -#pragma mark - Notifications - -- (void)registerForNotifications { -#if !TARGET_OS_TV && !TARGET_OS_MACCATALYST - NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; - - [nc addObserver:self selector:@selector(statusBarOrientationDidChange:) - name:UIApplicationDidChangeStatusBarOrientationNotification object:nil]; -#endif -} - -- (void)unregisterFromNotifications { -#if !TARGET_OS_TV && !TARGET_OS_MACCATALYST - NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; - [nc removeObserver:self name:UIApplicationDidChangeStatusBarOrientationNotification object:nil]; -#endif -} - -#if !TARGET_OS_TV && !TARGET_OS_MACCATALYST -- (void)statusBarOrientationDidChange:(NSNotification *)notification { - UIView *superview = self.superview; - if (!superview) { - return; - } else { - [self updateForCurrentOrientationAnimated:YES]; - } -} -#endif - -- (void)updateForCurrentOrientationAnimated:(BOOL)animated { - // Stay in sync with the superview in any case - if (self.superview) { - self.frame = self.superview.bounds; - } - - // Not needed on iOS 8+, compile out when the deployment target allows, - // to avoid sharedApplication problems on extension targets -#if __IPHONE_OS_VERSION_MIN_REQUIRED < 80000 - // Only needed pre iOS 8 when added to a window - BOOL iOS8OrLater = kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_8_0; - if (iOS8OrLater || ![self.superview isKindOfClass:[UIWindow class]]) return; - - // Make extension friendly. Will not get called on extensions (iOS 8+) due to the above check. - // This just ensures we don't get a warning about extension-unsafe API. - Class UIApplicationClass = NSClassFromString(@"UIApplication"); - if (!UIApplicationClass || ![UIApplicationClass respondsToSelector:@selector(sharedApplication)]) return; - - UIApplication *application = [UIApplication performSelector:@selector(sharedApplication)]; - UIInterfaceOrientation orientation = application.statusBarOrientation; - CGFloat radians = 0; - - if (UIInterfaceOrientationIsLandscape(orientation)) { - radians = orientation == UIInterfaceOrientationLandscapeLeft ? -(CGFloat)M_PI_2 : (CGFloat)M_PI_2; - // Window coordinates differ! - self.bounds = CGRectMake(0, 0, self.bounds.size.height, self.bounds.size.width); - } else { - radians = orientation == UIInterfaceOrientationPortraitUpsideDown ? (CGFloat)M_PI : 0.f; - } - - if (animated) { - [UIView animateWithDuration:0.3 animations:^{ - self.transform = CGAffineTransformMakeRotation(radians); - }]; - } else { - self.transform = CGAffineTransformMakeRotation(radians); - } -#endif -} - -@end - - -@implementation MBRoundProgressView - -#pragma mark - Lifecycle - -- (id)init { - return [self initWithFrame:CGRectMake(0.f, 0.f, 37.f, 37.f)]; -} - -- (id)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - self.backgroundColor = [UIColor clearColor]; - self.opaque = NO; - _progress = 0.f; - _annular = NO; - _progressTintColor = [[UIColor alloc] initWithWhite:1.f alpha:1.f]; - _backgroundTintColor = [[UIColor alloc] initWithWhite:1.f alpha:.1f]; - } - return self; -} - -#pragma mark - Layout - -- (CGSize)intrinsicContentSize { - return CGSizeMake(37.f, 37.f); -} - -#pragma mark - Properties - -- (void)setProgress:(float)progress { - if (progress != _progress) { - _progress = progress; - [self setNeedsDisplay]; - } -} - -- (void)setProgressTintColor:(UIColor *)progressTintColor { - NSAssert(progressTintColor, @"The color should not be nil."); - if (progressTintColor != _progressTintColor && ![progressTintColor isEqual:_progressTintColor]) { - _progressTintColor = progressTintColor; - [self setNeedsDisplay]; - } -} - -- (void)setBackgroundTintColor:(UIColor *)backgroundTintColor { - NSAssert(backgroundTintColor, @"The color should not be nil."); - if (backgroundTintColor != _backgroundTintColor && ![backgroundTintColor isEqual:_backgroundTintColor]) { - _backgroundTintColor = backgroundTintColor; - [self setNeedsDisplay]; - } -} - -#pragma mark - Drawing - -- (void)drawRect:(CGRect)rect { - CGContextRef context = UIGraphicsGetCurrentContext(); - - if (_annular) { - // Draw background - CGFloat lineWidth = 2.f; - UIBezierPath *processBackgroundPath = [UIBezierPath bezierPath]; - processBackgroundPath.lineWidth = lineWidth; - processBackgroundPath.lineCapStyle = kCGLineCapButt; - CGPoint center = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds)); - CGFloat radius = (self.bounds.size.width - lineWidth)/2; - CGFloat startAngle = - ((float)M_PI / 2); // 90 degrees - CGFloat endAngle = (2 * (float)M_PI) + startAngle; - [processBackgroundPath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES]; - [_backgroundTintColor set]; - [processBackgroundPath stroke]; - // Draw progress - UIBezierPath *processPath = [UIBezierPath bezierPath]; - processPath.lineCapStyle = kCGLineCapSquare; - processPath.lineWidth = lineWidth; - endAngle = (self.progress * 2 * (float)M_PI) + startAngle; - [processPath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES]; - [_progressTintColor set]; - [processPath stroke]; - } else { - // Draw background - CGFloat lineWidth = 2.f; - CGRect allRect = self.bounds; - CGRect circleRect = CGRectInset(allRect, lineWidth/2.f, lineWidth/2.f); - CGPoint center = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds)); - [_progressTintColor setStroke]; - [_backgroundTintColor setFill]; - CGContextSetLineWidth(context, lineWidth); - CGContextStrokeEllipseInRect(context, circleRect); - // 90 degrees - CGFloat startAngle = - ((float)M_PI / 2.f); - // Draw progress - UIBezierPath *processPath = [UIBezierPath bezierPath]; - processPath.lineCapStyle = kCGLineCapButt; - processPath.lineWidth = lineWidth * 2.f; - CGFloat radius = (CGRectGetWidth(self.bounds) / 2.f) - (processPath.lineWidth / 2.f); - CGFloat endAngle = (self.progress * 2.f * (float)M_PI) + startAngle; - [processPath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES]; - // Ensure that we don't get color overlapping when _progressTintColor alpha < 1.f. - CGContextSetBlendMode(context, kCGBlendModeCopy); - [_progressTintColor set]; - [processPath stroke]; - } -} - -@end - - -@implementation MBBarProgressView - -#pragma mark - Lifecycle - -- (id)init { - return [self initWithFrame:CGRectMake(.0f, .0f, 120.0f, 20.0f)]; -} - -- (id)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - _progress = 0.f; - _lineColor = [UIColor whiteColor]; - _progressColor = [UIColor whiteColor]; - _progressRemainingColor = [UIColor clearColor]; - self.backgroundColor = [UIColor clearColor]; - self.opaque = NO; - } - return self; -} - -#pragma mark - Layout - -- (CGSize)intrinsicContentSize { - return CGSizeMake(120.f, 10.f); -} - -#pragma mark - Properties - -- (void)setProgress:(float)progress { - if (progress != _progress) { - _progress = progress; - [self setNeedsDisplay]; - } -} - -- (void)setProgressColor:(UIColor *)progressColor { - NSAssert(progressColor, @"The color should not be nil."); - if (progressColor != _progressColor && ![progressColor isEqual:_progressColor]) { - _progressColor = progressColor; - [self setNeedsDisplay]; - } -} - -- (void)setProgressRemainingColor:(UIColor *)progressRemainingColor { - NSAssert(progressRemainingColor, @"The color should not be nil."); - if (progressRemainingColor != _progressRemainingColor && ![progressRemainingColor isEqual:_progressRemainingColor]) { - _progressRemainingColor = progressRemainingColor; - [self setNeedsDisplay]; - } -} - -#pragma mark - Drawing - -- (void)drawRect:(CGRect)rect { - CGContextRef context = UIGraphicsGetCurrentContext(); - - CGContextSetLineWidth(context, 2); - CGContextSetStrokeColorWithColor(context,[_lineColor CGColor]); - CGContextSetFillColorWithColor(context, [_progressRemainingColor CGColor]); - - // Draw background and Border - CGFloat radius = (rect.size.height / 2) - 2; - CGContextMoveToPoint(context, 2, rect.size.height/2); - CGContextAddArcToPoint(context, 2, 2, radius + 2, 2, radius); - CGContextAddArcToPoint(context, rect.size.width - 2, 2, rect.size.width - 2, rect.size.height / 2, radius); - CGContextAddArcToPoint(context, rect.size.width - 2, rect.size.height - 2, rect.size.width - radius - 2, rect.size.height - 2, radius); - CGContextAddArcToPoint(context, 2, rect.size.height - 2, 2, rect.size.height/2, radius); - CGContextDrawPath(context, kCGPathFillStroke); - - CGContextSetFillColorWithColor(context, [_progressColor CGColor]); - radius = radius - 2; - CGFloat amount = self.progress * rect.size.width; - - // Progress in the middle area - if (amount >= radius + 4 && amount <= (rect.size.width - radius - 4)) { - CGContextMoveToPoint(context, 4, rect.size.height/2); - CGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius); - CGContextAddLineToPoint(context, amount, 4); - CGContextAddLineToPoint(context, amount, radius + 4); - - CGContextMoveToPoint(context, 4, rect.size.height/2); - CGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius); - CGContextAddLineToPoint(context, amount, rect.size.height - 4); - CGContextAddLineToPoint(context, amount, radius + 4); - - CGContextFillPath(context); - } - - // Progress in the right arc - else if (amount > radius + 4) { - CGFloat x = amount - (rect.size.width - radius - 4); - - CGContextMoveToPoint(context, 4, rect.size.height/2); - CGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius); - CGContextAddLineToPoint(context, rect.size.width - radius - 4, 4); - CGFloat angle = -acos(x/radius); - if (isnan(angle)) angle = 0; - CGContextAddArc(context, rect.size.width - radius - 4, rect.size.height/2, radius, M_PI, angle, 0); - CGContextAddLineToPoint(context, amount, rect.size.height/2); - - CGContextMoveToPoint(context, 4, rect.size.height/2); - CGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius); - CGContextAddLineToPoint(context, rect.size.width - radius - 4, rect.size.height - 4); - angle = acos(x/radius); - if (isnan(angle)) angle = 0; - CGContextAddArc(context, rect.size.width - radius - 4, rect.size.height/2, radius, -M_PI, angle, 1); - CGContextAddLineToPoint(context, amount, rect.size.height/2); - - CGContextFillPath(context); - } - - // Progress is in the left arc - else if (amount < radius + 4 && amount > 0) { - CGContextMoveToPoint(context, 4, rect.size.height/2); - CGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius); - CGContextAddLineToPoint(context, radius + 4, rect.size.height/2); - - CGContextMoveToPoint(context, 4, rect.size.height/2); - CGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius); - CGContextAddLineToPoint(context, radius + 4, rect.size.height/2); - - CGContextFillPath(context); - } -} - -@end - - -@interface MBBackgroundView () - -@property UIVisualEffectView *effectView; - -@end - - -@implementation MBBackgroundView - -#pragma mark - Lifecycle - -- (instancetype)initWithFrame:(CGRect)frame { - if ((self = [super initWithFrame:frame])) { - _style = MBProgressHUDBackgroundStyleBlur; - if (@available(iOS 13.0, *)) { - #if TARGET_OS_TV - _blurEffectStyle = UIBlurEffectStyleRegular; - #else - _blurEffectStyle = UIBlurEffectStyleSystemThickMaterial; - #endif - // Leaving the color unassigned yields best results. - } else { - _blurEffectStyle = UIBlurEffectStyleLight; - _color = [UIColor colorWithWhite:0.8f alpha:0.6f]; - } - - self.clipsToBounds = YES; - - [self updateForBackgroundStyle]; - } - return self; -} - -#pragma mark - Layout - -- (CGSize)intrinsicContentSize { - // Smallest size possible. Content pushes against this. - return CGSizeZero; -} - -#pragma mark - Appearance - -- (void)setStyle:(MBProgressHUDBackgroundStyle)style { - if (_style != style) { - _style = style; - [self updateForBackgroundStyle]; - } -} - -- (void)setColor:(UIColor *)color { - NSAssert(color, @"The color should not be nil."); - if (color != _color && ![color isEqual:_color]) { - _color = color; - [self updateViewsForColor:color]; - } -} - -- (void)setBlurEffectStyle:(UIBlurEffectStyle)blurEffectStyle { - if (_blurEffectStyle == blurEffectStyle) { - return; - } - - _blurEffectStyle = blurEffectStyle; - - [self updateForBackgroundStyle]; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -#pragma mark - Views - -- (void)updateForBackgroundStyle { - [self.effectView removeFromSuperview]; - self.effectView = nil; - - MBProgressHUDBackgroundStyle style = self.style; - if (style == MBProgressHUDBackgroundStyleBlur) { - UIBlurEffect *effect = [UIBlurEffect effectWithStyle:self.blurEffectStyle]; - UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:effect]; - [self insertSubview:effectView atIndex:0]; - effectView.frame = self.bounds; - effectView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - self.backgroundColor = self.color; - self.layer.allowsGroupOpacity = NO; - self.effectView = effectView; - } else { - self.backgroundColor = self.color; - } -} - -- (void)updateViewsForColor:(UIColor *)color { - if (self.style == MBProgressHUDBackgroundStyleBlur) { - self.backgroundColor = self.color; - } else { - self.backgroundColor = self.color; - } -} - -@end - - -@implementation MBProgressHUDRoundedButton - -#pragma mark - Lifecycle - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - CALayer *layer = self.layer; - layer.borderWidth = 1.f; - } - return self; -} - -#pragma mark - Layout - -- (void)layoutSubviews { - [super layoutSubviews]; - // Fully rounded corners - CGFloat height = CGRectGetHeight(self.bounds); - self.layer.cornerRadius = ceil(height / 2.f); -} - -- (CGSize)intrinsicContentSize { - // Only show if we have associated control events and a title - if ((self.allControlEvents == 0) || ([self titleForState:UIControlStateNormal].length == 0)) - return CGSizeZero; - CGSize size = [super intrinsicContentSize]; - // Add some side padding - size.width += 20.f; - return size; -} - -#pragma mark - Color - -- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state { - [super setTitleColor:color forState:state]; - // Update related colors - [self setHighlighted:self.highlighted]; - self.layer.borderColor = color.CGColor; -} - -- (void)setHighlighted:(BOOL)highlighted { - [super setHighlighted:highlighted]; - UIColor *baseColor = [self titleColorForState:UIControlStateSelected]; - self.backgroundColor = highlighted ? [baseColor colorWithAlphaComponent:0.1f] : [UIColor clearColor]; -} - -@end diff --git a/Pods/DDProgressHUDKit_Private/LICENSE b/Pods/DDProgressHUDKit_Private/LICENSE deleted file mode 100644 index b75c465..0000000 --- a/Pods/DDProgressHUDKit_Private/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2023 DDIsFriend - -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. diff --git a/Pods/DDProgressHUDKit_Private/README.md b/Pods/DDProgressHUDKit_Private/README.md deleted file mode 100644 index 4c82b3b..0000000 --- a/Pods/DDProgressHUDKit_Private/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# DDProgressHUDKit_Private - -[![CI Status](https://img.shields.io/travis/DDIsFriend/DDProgressHUDKit_Private.svg?style=flat)](https://travis-ci.org/DDIsFriend/DDProgressHUDKit_Private) -[![Version](https://img.shields.io/cocoapods/v/DDProgressHUDKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDProgressHUDKit_Private) -[![License](https://img.shields.io/cocoapods/l/DDProgressHUDKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDProgressHUDKit_Private) -[![Platform](https://img.shields.io/cocoapods/p/DDProgressHUDKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDProgressHUDKit_Private) - -## Example - -To run the example project, clone the repo, and run `pod install` from the Example directory first. - -## Requirements - -## Installation - -DDProgressHUDKit_Private is available through [CocoaPods](https://cocoapods.org). To install -it, simply add the following line to your Podfile: - -```ruby -pod 'DDProgressHUDKit_Private' -``` - -## Author - -DDIsFriend, DDIsFriend@163.com - -## License - -DDProgressHUDKit_Private is available under the MIT license. See the LICENSE file for more info. diff --git a/Pods/DDToastKit_Private/DDToastKit_Private/Classes/SwiftToast.swift b/Pods/DDToastKit_Private/DDToastKit_Private/Classes/SwiftToast.swift deleted file mode 100644 index 0e0dda0..0000000 --- a/Pods/DDToastKit_Private/DDToastKit_Private/Classes/SwiftToast.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// SwiftToast.swift -// DDToastKit_Private -// -// Created by 中道 on 2023/8/3. -// - -import Foundation - -extension UIView { - public func dd_makeToast(_ message:String?,duration:TimeInterval = 2.0,position:ToastPosition = .center,completion:((Bool) -> Void)? = nil) { - makeToast(message,duration:duration,position:position,completion: completion) - } - - public func dd_makeToastActivity() { - makeToastActivity(.center) - } - - public func dd_hideToastActivity() { - hideToastActivity() - } -} diff --git a/Pods/DDToastKit_Private/DDToastKit_Private/Classes/Toast.swift b/Pods/DDToastKit_Private/DDToastKit_Private/Classes/Toast.swift deleted file mode 100644 index 49e64a8..0000000 --- a/Pods/DDToastKit_Private/DDToastKit_Private/Classes/Toast.swift +++ /dev/null @@ -1,782 +0,0 @@ -// -// Toast.swift -// Toast-Swift -// -// Copyright (c) 2015-2019 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 = "com.toast-swift.timer" - static var duration = "com.toast-swift.duration" - static var point = "com.toast-swift.point" - static var completion = "com.toast-swift.completion" - static var activeToasts = "com.toast-swift.activeToasts" - static var activityView = "com.toast-swift.activityView" - static var queue = "com.toast-swift.queue" - } - - /** - 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: - 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) - - UIView.animate(withDuration: ToastManager.shared.style.fadeDuration, delay: 0.0, options: [.curveEaseOut, .allowUserInteraction], animations: { - toast.alpha = 1.0 - }) { _ in - let timer = Timer(timeInterval: duration, target: self, selector: #selector(UIView.toastTimerDidFinish(_:)), userInfo: toast, repeats: false) - RunLoop.main.add(timer, forMode: .common) - objc_setAssociatedObject(toast, &ToastKeys.timer, timer, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - 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 = UIColor.black.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 wrapperHeight = max((messageRect.origin.y + messageRect.size.height + 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 - } - } - -} diff --git a/Pods/DDToastKit_Private/LICENSE b/Pods/DDToastKit_Private/LICENSE deleted file mode 100644 index b75c465..0000000 --- a/Pods/DDToastKit_Private/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2023 DDIsFriend - -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. diff --git a/Pods/DDToastKit_Private/README.md b/Pods/DDToastKit_Private/README.md deleted file mode 100644 index 1afd614..0000000 --- a/Pods/DDToastKit_Private/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# DDToastKit_Private - -[![CI Status](https://img.shields.io/travis/DDIsFriend/DDToastKit_Private.svg?style=flat)](https://travis-ci.org/DDIsFriend/DDToastKit_Private) -[![Version](https://img.shields.io/cocoapods/v/DDToastKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDToastKit_Private) -[![License](https://img.shields.io/cocoapods/l/DDToastKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDToastKit_Private) -[![Platform](https://img.shields.io/cocoapods/p/DDToastKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDToastKit_Private) - -## Example - -To run the example project, clone the repo, and run `pod install` from the Example directory first. - -## Requirements - -## Installation - -DDToastKit_Private is available through [CocoaPods](https://cocoapods.org). To install -it, simply add the following line to your Podfile: - -```ruby -pod 'DDToastKit_Private' -``` - -## Author - -DDIsFriend, DDIsFriend@163.com - -## License - -DDToastKit_Private is available under the MIT license. See the LICENSE file for more info. diff --git a/Pods/DDUIGestureRecognizer/DDUIGestureRecognizer/Classes/DDUIPanGestureRecognizer/DDUIPanGestureRecognizer.swift b/Pods/DDUIGestureRecognizer/DDUIGestureRecognizer/Classes/DDUIPanGestureRecognizer/DDUIPanGestureRecognizer.swift deleted file mode 100644 index 4b19dcb..0000000 --- a/Pods/DDUIGestureRecognizer/DDUIGestureRecognizer/Classes/DDUIPanGestureRecognizer/DDUIPanGestureRecognizer.swift +++ /dev/null @@ -1,184 +0,0 @@ -// -// DDUIPanGestureRecognizer.swift -// DDUIGestureRecognizer -// Created by DDIsFriend on 2023/12/19. - - -import Foundation - -open class DDUIPanGestureRecognizer : UIPanGestureRecognizer { - public enum PanGestureFromType { - case bottom,top - } - - public enum ExpandLevel { - case min,`default`,max - } - - public struct PanGesValue { - /// 从什么位置弹出 - public var from : PanGestureFromType = .bottom - /// 最小显示的高度 - public var minDisplayHeight : CGFloat = 0 - /// 默认弹出的高度 - public var defaultDisplayHeight : CGFloat = 0 - /// 最大显示的高度 - public var maxDisplayHeight : CGFloat = 0 - /// 标记当前需要完全展开时的拖动比例(0,1] - public var dragScale : CGFloat = 0.5 - /// 标记当前是否是展开的状态 - public var expandLevel : ExpandLevel = .min - - internal var translationY : CGFloat = 0 - internal var currentY : CGFloat = 0 - } - - public var panGesValue = PanGesValue.init() - - public var expandLevelChangedHandler : ((_ oldExpandLevel: ExpandLevel, _ newExpandLevel: ExpandLevel) -> Void)? - - /// 会执行默认方法 - /// - Parameter target: target - public init() { - super.init(target: nil, action: nil) - self.addTarget(self, action: #selector(panGesAction(ges: ))) - } - - /// 需要自己添加target和action - public override init(target: Any?, action: Selector?) { - super.init(target: target, action: action) - } - - @objc fileprivate func panGesAction(ges: DDUIPanGestureRecognizer) { - baseAction(duration: 0.1) { viewFrame, minY, defaultY, maxY, currentY in - switch ges.state { - case .began: - currentY = viewFrame.origin.y - break - case .changed: - /// 拖动时的移动距离是当前changed与上一次changed的差值,即deltaY - let translationPoint = ges.translation(in: ges.view) - let deltaY = translationPoint.y - ges.panGesValue.translationY - ges.panGesValue.translationY = translationPoint.y - - currentY = (viewFrame.origin.y) + deltaY - break - case .ended: - /// 当currentY在maxY和defaultY之间时的临界值 - let criticalYBetweenOfMaxYAndDefaultY = maxY - (maxY - defaultY) * ges.panGesValue.dragScale - if ges.panGesValue.currentY <= maxY && ges.panGesValue.currentY > criticalYBetweenOfMaxYAndDefaultY { - currentY = maxY - }else if ges.panGesValue.currentY > defaultY && ges.panGesValue.currentY <= criticalYBetweenOfMaxYAndDefaultY { - currentY = defaultY - } - - /// 当currentY在minY和defaultY之间时 - let criticalYBetweenOfMinYAndDefaultY = defaultY - (defaultY - minY) * ges.panGesValue.dragScale - if ges.panGesValue.currentY <= defaultY && ges.panGesValue.currentY > criticalYBetweenOfMinYAndDefaultY { - currentY = defaultY - }else if ges.panGesValue.currentY > minY && ges.panGesValue.currentY <= criticalYBetweenOfMinYAndDefaultY { - currentY = minY - } - - ges.panGesValue.translationY = 0 - break - default: - currentY = viewFrame.origin.y - break - } - } - } - - func baseAction(duration: TimeInterval,baseActionHandler: (_ viewFrame: CGRect, _ minY: CGFloat, _ defaultY: CGFloat, _ maxY: CGFloat,_ currentY: inout CGFloat) -> Void) { - guard let superView = view?.superview else { - assert(false,"父类都没有,拖什么拖") - return - } - - let superViewFrame = superView.frame - let viewFrame = view?.frame ?? .zero - let superViewH = superViewFrame.size.height - let viewH = viewFrame.size.height - - switch panGesValue.from { - case .bottom: - /// 拖动的view的最小y值,这个值和view的高度有关,view的最大y值要和它的superView的最大y值相等,所以minY可能等于deltaH - var minY = superViewH - panGesValue.maxDisplayHeight - let deltaH = superViewH - viewH - if deltaH > minY { - minY = deltaH - } - - /// 拖动的view的最大y值 - var maxY = superViewH - panGesValue.minDisplayHeight - if deltaH > maxY { - maxY = deltaH - } - - /// 默认弹出的y值 - var defaultY = superViewH - panGesValue.defaultDisplayHeight - if deltaH > defaultY { - defaultY = deltaH - } - - var currentY : CGFloat = 0.0 - - /// 计算值 - baseActionHandler(viewFrame,minY,defaultY,maxY,¤tY) - - /// 当到达最小y值时返回 - if currentY < minY { - return - } - - /// 当到达最大y值时返回 - if currentY > maxY { - return - } - - /// 记录当前的currentY - panGesValue.currentY = currentY - - /// 上一次expandLevel - let oldExpandLevel = panGesValue.expandLevel - - /// 记录当前的expandLevel - if panGesValue.currentY == minY { - panGesValue.expandLevel = .max - }else if panGesValue.currentY == maxY { - panGesValue.expandLevel = .min - }else if panGesValue.currentY == defaultY { - panGesValue.expandLevel = .default - } - - /// 新的expandLevel - let newExpandLevel = panGesValue.expandLevel - - /// expandLevel改变时回调 - if oldExpandLevel != newExpandLevel { - if let expandLevelChangedHandler = expandLevelChangedHandler { - expandLevelChangedHandler(oldExpandLevel,newExpandLevel) - } - } - - UIView.animate(withDuration: duration, animations: {[weak self] in - self?.view?.frame = CGRectMake(viewFrame.origin.x, currentY, viewFrame.size.width, viewFrame.size.height) - }) - break - default: - break - } - } - - public func expand(_ expand: ExpandLevel) { - baseAction(duration: 0.25) { viewFrame, minY, defaultY, maxY, currentY in - if expand == .max { - currentY = minY - }else if expand == .min { - currentY = maxY - }else if expand == .default { - currentY = defaultY - } - } - } -} diff --git a/Pods/DDUIGestureRecognizer/LICENSE b/Pods/DDUIGestureRecognizer/LICENSE deleted file mode 100644 index b75c465..0000000 --- a/Pods/DDUIGestureRecognizer/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2023 DDIsFriend - -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. diff --git a/Pods/DDUIGestureRecognizer/README.md b/Pods/DDUIGestureRecognizer/README.md deleted file mode 100644 index 090026d..0000000 --- a/Pods/DDUIGestureRecognizer/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# DDUIGestureRecognizer - -[![CI Status](https://img.shields.io/travis/DDIsFriend/DDUIGestureRecognizer.svg?style=flat)](https://travis-ci.org/DDIsFriend/DDUIGestureRecognizer) -[![Version](https://img.shields.io/cocoapods/v/DDUIGestureRecognizer.svg?style=flat)](https://cocoapods.org/pods/DDUIGestureRecognizer) -[![License](https://img.shields.io/cocoapods/l/DDUIGestureRecognizer.svg?style=flat)](https://cocoapods.org/pods/DDUIGestureRecognizer) -[![Platform](https://img.shields.io/cocoapods/p/DDUIGestureRecognizer.svg?style=flat)](https://cocoapods.org/pods/DDUIGestureRecognizer) - -## Example - -To run the example project, clone the repo, and run `pod install` from the Example directory first. - -## Requirements - -## Installation - -DDUIGestureRecognizer is available through [CocoaPods](https://cocoapods.org). To install -it, simply add the following line to your Podfile: - -```ruby -pod 'DDUIGestureRecognizer' -``` - -## Author - -DDIsFriend, DDIsFriend@163.com - -## License - -DDUIGestureRecognizer is available under the MIT license. See the LICENSE file for more info. diff --git a/Pods/DDUIKit/DDUIKit/Classes/UIApplication/UIApplication.swift b/Pods/DDUIKit/DDUIKit/Classes/UIApplication/UIApplication.swift deleted file mode 100644 index 7fe02ed..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UIApplication/UIApplication.swift +++ /dev/null @@ -1,30 +0,0 @@ -// -// UIApplication.swift -// Pods-DDUIKit_Example -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -extension UIApplication { - public enum UrlTypeEnum : String { - case phone = "tel:" - case mail = "mailto:" - case sms = "sms:" - case map = "http://maps.apple.com/?" - } - - public func dd_openUrl(type:UrlTypeEnum,appending:String,completionHandler:((Bool) -> Void)? = nil) { - var urlString = type.rawValue - urlString = urlString.appending(appending) - if let url = URL(string: urlString),UIApplication.shared.canOpenURL(url) == true { - UIApplication.shared.open(url,completionHandler: completionHandler) - } - } - - public func dd_openSetting(completionHandler:((Bool) -> Void)? = nil) { - if let url = URL(string: UIApplicationOpenSettingsURLString),UIApplication.shared.canOpenURL(url) == true { - UIApplication.shared.open(url,completionHandler: completionHandler) - } - } -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UIButton/DDUIButton.swift b/Pods/DDUIKit/DDUIKit/Classes/UIButton/DDUIButton.swift deleted file mode 100644 index 06e9234..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UIButton/DDUIButton.swift +++ /dev/null @@ -1,11 +0,0 @@ -// -// DDUIButton.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -open class DDUIButton : UIButton { - -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UIButton/UIButton.swift b/Pods/DDUIKit/DDUIKit/Classes/UIButton/UIButton.swift deleted file mode 100644 index 055f4b8..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UIButton/UIButton.swift +++ /dev/null @@ -1,248 +0,0 @@ -// -// UIButton.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -// MARK: 关联的对象 -public extension UIButton { - internal struct DDButtonAssociatedKey { - static var adjustsImageWhenHighlighted = true - static var adjustsImageWhenDisabled = true - static var contentEdgeInsets = UIEdgeInsets.zero - static var imagePadding = 0.0 - static var imagePlacement : DDImagePosition = .left - } -} - -// MARK: MethodSwizzling -public extension UIButton { - - static func dd_methodSwizzlingUIButton() { - dd_methodSwizzling(targetClass: UIButton.self, originalSelector: #selector(UIButton.init(frame:)), swizzledSelector: #selector(UIButton.dd_init(frame:))) - dd_methodSwizzling(targetClass: UIButton.self, originalSelector: #selector(UIButton.setTitleColor(_:for:)), swizzledSelector: #selector(UIButton.dd_setTitleColor(_:for:))) - dd_methodSwizzling(targetClass: UIButton.self, originalSelector: #selector(UIButton.point(inside:with:)), swizzledSelector: #selector(UIButton.dd_point(inside:with:))) - } - - @objc func dd_init(frame: CGRect) { - dd_init(frame: frame) - - /// 去掉图片的高亮 - dd_adjustsImageWhenHighlighted = true - - if #available(iOS 15.0, *) { - /// 创建一个configuration,背景色为clear - configuration = UIButton.Configuration.plain() - configuration?.background = UIBackgroundConfiguration.clear() - configuration?.background.backgroundColor = .clear - - /// automaticallyUpdatesConfiguration = true时,按钮state改变时会自动更新configuration,automaticallyUpdatesConfiguration = false时,configurationUpdateHandler里需要将updated(for:)后的configuration赋值给button才能更新状态. - /// automaticallyUpdatesConfiguration = false时,需要重新实现configurationUpdateHandler方法 - configurationUpdateHandler = {[weak self] button in - var oldC = button.configuration - - if let imagePadding = self?.dd_imagePadding { - oldC?.imagePadding = imagePadding - } - - if let imagePosition = self?.dd_imagePlacement { - var position : NSDirectionalRectEdge = .leading - switch imagePosition { - case .left: - position = .leading - case .bottom: - position = .bottom - case .right: - position = .trailing - case .top: - position = .top - } - oldC?.imagePlacement = position - } - - if let dd_contentEdgeInsets = self?.dd_contentEdgeInsets { - oldC?.contentInsets = NSDirectionalEdgeInsets(top: dd_contentEdgeInsets.top, leading: dd_contentEdgeInsets.left, bottom: dd_contentEdgeInsets.bottom, trailing: dd_contentEdgeInsets.right) - } - - switch button.state { - case .normal: - break - case .selected: - break - case .highlighted: - /// 取消高亮 - if self?.dd_adjustsImageWhenHighlighted == true { - let image = oldC?.image - let newImage = image?.withRenderingMode(.alwaysTemplate) - oldC?.image = newImage - oldC?.imageColorTransformer = UIConfigurationColorTransformer({ color in - return UIColor.init(white: 0, alpha: 0.8) - }) - } - break - case .disabled: - if self?.dd_adjustsImageWhenDisabled == true { - let image = oldC?.image - let newImage = image?.withRenderingMode(.alwaysTemplate) - oldC?.image = newImage - oldC?.imageColorTransformer = UIConfigurationColorTransformer({ color in - return UIColor.init(white: 0.5, alpha: 0.5) - }) - } - break - case .focused: - break - case .application: - break - case .reserved: - break - default: - break - } - button.configuration = oldC - } - } - } - - @objc func dd_setTitleColor(_ color: UIColor?, for state: UIControl.State) { - dd_setTitleColor(color, for: state) - - if state == .normal { - setTitleColor(color, for: .highlighted) - setTitleColor(color, for: .selected) - setTitleColor(color, for: .disabled) - } - } -} - -// MARK: 按钮的图片状态 -public extension UIButton { - var dd_adjustsImageWhenHighlighted : Bool { - get { - return (objc_getAssociatedObject(self, &DDButtonAssociatedKey.adjustsImageWhenHighlighted) as? Bool) ?? DDButtonAssociatedKey.adjustsImageWhenHighlighted - } - - set { - if #available(iOS 15.0, *) { - objc_setAssociatedObject(self, &DDButtonAssociatedKey.adjustsImageWhenHighlighted, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - }else{ - objc_setAssociatedObject(self, &DDButtonAssociatedKey.adjustsImageWhenHighlighted, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - adjustsImageWhenHighlighted = newValue - } - } - } - - var dd_adjustsImageWhenDisabled : Bool { - get { - return (objc_getAssociatedObject(self, &DDButtonAssociatedKey.adjustsImageWhenDisabled) as? Bool) ?? DDButtonAssociatedKey.adjustsImageWhenDisabled - } - - set { - if #available(iOS 15.0, *) { - objc_setAssociatedObject(self, &DDButtonAssociatedKey.adjustsImageWhenDisabled, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - }else{ - objc_setAssociatedObject(self, &DDButtonAssociatedKey.adjustsImageWhenDisabled, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - adjustsImageWhenDisabled = newValue - } - } - } -} - -// MARK: 按钮的图片和文字的位置 -public extension UIButton { - enum DDImagePosition : Int { - case top = 0 - case left - case bottom - case right - } - - var dd_contentEdgeInsets : UIEdgeInsets { - get { - return (objc_getAssociatedObject(self, &DDButtonAssociatedKey.contentEdgeInsets) as? UIEdgeInsets) ?? DDButtonAssociatedKey.contentEdgeInsets - } - set { - if #available(iOS 15.0, *) { - objc_setAssociatedObject(self, &DDButtonAssociatedKey.contentEdgeInsets, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - }else{ - objc_setAssociatedObject(self, &DDButtonAssociatedKey.contentEdgeInsets, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - contentEdgeInsets = newValue - } - } - } - - @available(iOS 15.0, *) - internal var dd_imagePadding : CGFloat { - get { - return (objc_getAssociatedObject(self, &DDButtonAssociatedKey.imagePadding) as? CGFloat) ?? DDButtonAssociatedKey.imagePadding - } - - set { - objc_setAssociatedObject(self, &DDButtonAssociatedKey.imagePadding, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - setNeedsUpdateConfiguration() - } - } - - @available(iOS 15.0, *) - internal var dd_imagePlacement : DDImagePosition { - get { - return (objc_getAssociatedObject(self, &DDButtonAssociatedKey.imagePlacement) as? DDImagePosition) ?? DDButtonAssociatedKey.imagePlacement - } - - set { - objc_setAssociatedObject(self, &DDButtonAssociatedKey.imagePlacement, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - setNeedsUpdateConfiguration() - } - } - - func dd_imagePosition(position:DDImagePosition,spaceWithText space:CGFloat) { - if #available(iOS 15.0, *) { - dd_imagePlacement = position - dd_imagePadding = space - }else{ - let imageWith : CGFloat = imageView?.intrinsicContentSize.width ?? 0.0 - let imageHeight : CGFloat = imageView?.intrinsicContentSize.height ?? 0.0 - - let labelWidth : CGFloat = titleLabel?.intrinsicContentSize.width ?? 0.0 - let labelHeight : CGFloat = titleLabel?.intrinsicContentSize.height ?? 0.0 - - var imageEdgeInsets : UIEdgeInsets = .zero - var labelEdgeInsets : UIEdgeInsets = .zero - - switch position { - case .top: - imageEdgeInsets = UIEdgeInsets.init(top: -labelHeight - space/2.0, left: 0, bottom: 0, right: -labelWidth) - labelEdgeInsets = UIEdgeInsets.init(top:0, left: -imageWith, bottom: -imageHeight-space/2.0, right: 0) - break; - case .left: - imageEdgeInsets = UIEdgeInsets.init(top:0, left:-space/2.0, bottom: 0, right:space/2.0) - labelEdgeInsets = UIEdgeInsets.init(top:0, left:space/2.0, bottom: 0, right: -space/2.0) - break; - case .bottom: - imageEdgeInsets = UIEdgeInsets.init(top:0, left:0, bottom: -labelHeight-space/2.0, right: -labelWidth) - labelEdgeInsets = UIEdgeInsets.init(top:-imageHeight-space/2.0, left:-imageWith, bottom: 0, right: 0) - break; - case .right: - imageEdgeInsets = UIEdgeInsets.init(top:0, left:labelWidth+space/2.0, bottom: 0, right: -labelWidth-space/2.0) - labelEdgeInsets = UIEdgeInsets.init(top:0, left:-imageWith-space/2.0, bottom: 0, right:imageWith+space/2.0) - break; - } - - self.titleEdgeInsets = labelEdgeInsets - self.imageEdgeInsets = imageEdgeInsets - } - } -} - -// MARK: 扩大按钮的点击范围 -public extension UIButton { - @objc func dd_point(inside point: CGPoint, with event: UIEvent?) -> Bool { - var bounds = self.bounds - let widthDelta = max(44.0 - bounds.size.width, 0) - let heightDelta = max(44.0 - bounds.size.height, 0) - bounds = CGRectInset(bounds, -0.5 * widthDelta, -0.5 * heightDelta) - return CGRectContainsPoint(bounds, point) - } -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UICollectionView/DDUICollectionView.swift b/Pods/DDUIKit/DDUIKit/Classes/UICollectionView/DDUICollectionView.swift deleted file mode 100644 index 1ffc7d5..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UICollectionView/DDUICollectionView.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// DDUICollectionView.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -open class DDUICollectionView : UICollectionView { - public override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) { - super.init(frame: frame, collectionViewLayout: layout) - contentInsetAdjustmentBehavior = .never - } - - public required init?(coder: NSCoder) { - super.init(coder: coder) - } -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UICollectionView/UICollectionView.swift b/Pods/DDUIKit/DDUIKit/Classes/UICollectionView/UICollectionView.swift deleted file mode 100644 index 0224b34..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UICollectionView/UICollectionView.swift +++ /dev/null @@ -1,7 +0,0 @@ -// -// UICollectionView.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit diff --git a/Pods/DDUIKit/DDUIKit/Classes/UICollectionViewCell/DDUICollectionViewCell.swift b/Pods/DDUIKit/DDUIKit/Classes/UICollectionViewCell/DDUICollectionViewCell.swift deleted file mode 100644 index 84a5f24..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UICollectionViewCell/DDUICollectionViewCell.swift +++ /dev/null @@ -1,11 +0,0 @@ -// -// DDUICollectionViewCell.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -open class DDUICollectionViewCell : UICollectionViewCell { - -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UICollectionViewCell/UICollectionViewCell.swift b/Pods/DDUIKit/DDUIKit/Classes/UICollectionViewCell/UICollectionViewCell.swift deleted file mode 100644 index 8409701..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UICollectionViewCell/UICollectionViewCell.swift +++ /dev/null @@ -1,7 +0,0 @@ -// -// UICollectionViewCell.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit diff --git a/Pods/DDUIKit/DDUIKit/Classes/UIColor/UIColor.swift b/Pods/DDUIKit/DDUIKit/Classes/UIColor/UIColor.swift deleted file mode 100644 index 92d568f..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UIColor/UIColor.swift +++ /dev/null @@ -1,59 +0,0 @@ -// -// UIColor.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -extension UIColor { - - /// 添加一个颜色值 - /// - Parameter string: 颜色值 - /// - Returns: 颜色 - public class func dd_hex(_ string: String) -> UIColor { - return UIColor(hex: string) - } - - /// 添加一个可以根据手机白天和黑色模式切换的颜色 - /// - Parameters: - /// - lightColorString: 白天模式的颜色值 - /// - darkColorString: 黑夜模式的颜色值 - /// - Returns: 颜色 - public class func dd_hex(light lightColorString: String, dark darkColorString: String? = nil) -> UIColor { - return UIColor.init { traintCollection in - if traintCollection.userInterfaceStyle == .dark { - return dd_hex(darkColorString ?? lightColorString) - } - return dd_hex(lightColorString) - } - } - - /// Constructing color from hex string - /// - /// - Parameter hex: A hex string, can either contain # or not - public convenience init(hex string: String) { - var hex = string.hasPrefix("#") - ? String(string.dropFirst()) - : string - guard hex.count == 3 || hex.count == 6 - else { - self.init(white: 1.0, alpha: 0.0) - return - } - if hex.count == 3 { - for (index, char) in hex.enumerated() { - hex.insert(char, at: hex.index(hex.startIndex, offsetBy: index * 2)) - } - } - - guard let intCode = Int(hex, radix: 16) else { - self.init(white: 1.0, alpha: 0.0) - return - } - - self.init( - red: CGFloat((intCode >> 16) & 0xFF) / 255.0, - green: CGFloat((intCode >> 8) & 0xFF) / 255.0, - blue: CGFloat((intCode) & 0xFF) / 255.0, alpha: 1.0)} -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UIFont/UIFont.swift b/Pods/DDUIKit/DDUIKit/Classes/UIFont/UIFont.swift deleted file mode 100644 index 71d654a..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UIFont/UIFont.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// UIFont.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -extension UIFont { - - public class func dd_systemFont(ofSize fontSize: CGFloat, weight: UIFont.Weight = .regular) -> UIFont { - return UIFont.systemFont(ofSize: fontSize, weight: weight) - } - - /// 返回一个可以跟随手机字体大小变化的字体 - /// - Parameters: - /// - style: 字体类型 - /// - traitCollection: 手机状态 - /// - Returns: 字体 - public class func dd_preferredFont(forTextStyle style: UIFont.TextStyle,compatibleWith traitCollection: UITraitCollection? = nil) -> UIFont { - return UIFont.preferredFont(forTextStyle: style,compatibleWith: traitCollection) - } -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UIGestureRecognizer/DDUIGestureRecognizer.swift b/Pods/DDUIKit/DDUIKit/Classes/UIGestureRecognizer/DDUIGestureRecognizer.swift deleted file mode 100644 index 7a9017d..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UIGestureRecognizer/DDUIGestureRecognizer.swift +++ /dev/null @@ -1,7 +0,0 @@ -// -// DDUIGestureRecognizer.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit diff --git a/Pods/DDUIKit/DDUIKit/Classes/UIGestureRecognizer/DDUIPanGestureRecognizer.swift b/Pods/DDUIKit/DDUIKit/Classes/UIGestureRecognizer/DDUIPanGestureRecognizer.swift deleted file mode 100644 index 0a185c2..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UIGestureRecognizer/DDUIPanGestureRecognizer.swift +++ /dev/null @@ -1,184 +0,0 @@ -// -// DDUIPanGestureRecognizer.swift -// DDUIGestureRecognizer -// Created by DDIsFriend on 2023/12/19. - - -import UIKit - -open class DDUIPanGestureRecognizer : UIPanGestureRecognizer { - public enum PanGestureFromType { - case bottom,top - } - - public enum ExpandLevel { - case min,`default`,max - } - - public struct PanGesValue { - /// 从什么位置弹出 - public var from : PanGestureFromType = .bottom - /// 最小显示的高度 - public var minDisplayHeight : CGFloat = 0 - /// 默认弹出的高度 - public var defaultDisplayHeight : CGFloat = 0 - /// 最大显示的高度 - public var maxDisplayHeight : CGFloat = 0 - /// 标记当前需要完全展开时的拖动比例(0,1] - public var dragScale : CGFloat = 0.5 - /// 标记当前是否是展开的状态 - public var expandLevel : ExpandLevel = .min - - internal var translationY : CGFloat = 0 - internal var currentY : CGFloat = 0 - } - - public var panGesValue = PanGesValue.init() - - public var expandLevelChangedHandler : ((_ oldExpandLevel: ExpandLevel, _ newExpandLevel: ExpandLevel) -> Void)? - - /// 会执行默认方法 - /// - Parameter target: target - public init() { - super.init(target: nil, action: nil) - self.addTarget(self, action: #selector(panGesAction(ges: ))) - } - - /// 需要自己添加target和action - public override init(target: Any?, action: Selector?) { - super.init(target: target, action: action) - } - - @objc fileprivate func panGesAction(ges: DDUIPanGestureRecognizer) { - baseAction(duration: 0.1) { viewFrame, minY, defaultY, maxY, currentY in - switch ges.state { - case .began: - currentY = viewFrame.origin.y - break - case .changed: - /// 拖动时的移动距离是当前changed与上一次changed的差值,即deltaY - let translationPoint = ges.translation(in: ges.view) - let deltaY = translationPoint.y - ges.panGesValue.translationY - ges.panGesValue.translationY = translationPoint.y - - currentY = (viewFrame.origin.y) + deltaY - break - case .ended: - /// 当currentY在maxY和defaultY之间时的临界值 - let criticalYBetweenOfMaxYAndDefaultY = maxY - (maxY - defaultY) * ges.panGesValue.dragScale - if ges.panGesValue.currentY <= maxY && ges.panGesValue.currentY > criticalYBetweenOfMaxYAndDefaultY { - currentY = maxY - }else if ges.panGesValue.currentY > defaultY && ges.panGesValue.currentY <= criticalYBetweenOfMaxYAndDefaultY { - currentY = defaultY - } - - /// 当currentY在minY和defaultY之间时 - let criticalYBetweenOfMinYAndDefaultY = defaultY - (defaultY - minY) * ges.panGesValue.dragScale - if ges.panGesValue.currentY <= defaultY && ges.panGesValue.currentY > criticalYBetweenOfMinYAndDefaultY { - currentY = defaultY - }else if ges.panGesValue.currentY > minY && ges.panGesValue.currentY <= criticalYBetweenOfMinYAndDefaultY { - currentY = minY - } - - ges.panGesValue.translationY = 0 - break - default: - currentY = viewFrame.origin.y - break - } - } - } - - func baseAction(duration: TimeInterval,baseActionHandler: (_ viewFrame: CGRect, _ minY: CGFloat, _ defaultY: CGFloat, _ maxY: CGFloat,_ currentY: inout CGFloat) -> Void) { - guard let superView = view?.superview else { - assert(false,"父类都没有,拖什么拖") - return - } - - let superViewFrame = superView.frame - let viewFrame = view?.frame ?? .zero - let superViewH = superViewFrame.size.height - let viewH = viewFrame.size.height - - switch panGesValue.from { - case .bottom: - /// 拖动的view的最小y值,这个值和view的高度有关,view的最大y值要和它的superView的最大y值相等,所以minY可能等于deltaH - var minY = superViewH - panGesValue.maxDisplayHeight - let deltaH = superViewH - viewH - if deltaH > minY { - minY = deltaH - } - - /// 拖动的view的最大y值 - var maxY = superViewH - panGesValue.minDisplayHeight - if deltaH > maxY { - maxY = deltaH - } - - /// 默认弹出的y值 - var defaultY = superViewH - panGesValue.defaultDisplayHeight - if deltaH > defaultY { - defaultY = deltaH - } - - var currentY : CGFloat = 0.0 - - /// 计算值 - baseActionHandler(viewFrame,minY,defaultY,maxY,¤tY) - - /// 当到达最小y值时返回 - if currentY < minY { - return - } - - /// 当到达最大y值时返回 - if currentY > maxY { - return - } - - /// 记录当前的currentY - panGesValue.currentY = currentY - - /// 上一次expandLevel - let oldExpandLevel = panGesValue.expandLevel - - /// 记录当前的expandLevel - if panGesValue.currentY == minY { - panGesValue.expandLevel = .max - }else if panGesValue.currentY == maxY { - panGesValue.expandLevel = .min - }else if panGesValue.currentY == defaultY { - panGesValue.expandLevel = .default - } - - /// 新的expandLevel - let newExpandLevel = panGesValue.expandLevel - - /// expandLevel改变时回调 - if oldExpandLevel != newExpandLevel { - if let expandLevelChangedHandler = expandLevelChangedHandler { - expandLevelChangedHandler(oldExpandLevel,newExpandLevel) - } - } - - UIView.animate(withDuration: duration, animations: {[weak self] in - self?.view?.frame = CGRectMake(viewFrame.origin.x, currentY, viewFrame.size.width, viewFrame.size.height) - }) - break - default: - break - } - } - - public func expand(_ expand: ExpandLevel) { - baseAction(duration: 0.25) { viewFrame, minY, defaultY, maxY, currentY in - if expand == .max { - currentY = minY - }else if expand == .min { - currentY = maxY - }else if expand == .default { - currentY = defaultY - } - } - } -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UIGestureRecognizer/UIGestureRecognizer.swift b/Pods/DDUIKit/DDUIKit/Classes/UIGestureRecognizer/UIGestureRecognizer.swift deleted file mode 100644 index fdb4bc6..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UIGestureRecognizer/UIGestureRecognizer.swift +++ /dev/null @@ -1,11 +0,0 @@ -// -// UIGestureRecognizer.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -open class DDUIGestureRecognizer : UITapGestureRecognizer { - -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UIImage/DDUIImage.swift b/Pods/DDUIKit/DDUIKit/Classes/UIImage/DDUIImage.swift deleted file mode 100644 index fb42c8e..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UIImage/DDUIImage.swift +++ /dev/null @@ -1,11 +0,0 @@ -// -// DDUIImage.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -open class DDUIImage : UIImage { - -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UIImage/UIImage.swift b/Pods/DDUIKit/DDUIKit/Classes/UIImage/UIImage.swift deleted file mode 100644 index 064191c..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UIImage/UIImage.swift +++ /dev/null @@ -1,193 +0,0 @@ -// -// UIImage.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -// MARK: Compress -public extension UIImage { - - /// 图片压缩方法 - /// - Parameter bytes: 要压缩成的大小 - /// - Returns: 图片的data - /// - warning: 图片的压缩不是无止尽的,一定是有一个极限,当到达极限时可能会一直循环下去,所以请注意. - func dd_compress(bytes: Int) -> Data? { - let maxBytes = bytes - var compressionQuality : CGFloat = 1.0 - guard var data = UIImageJPEGRepresentation(self, compressionQuality) else { - return nil - } - - if data.count < maxBytes { - return data - } - - var max : CGFloat = 1.0 - var min : CGFloat = 0.0 - for _ in 0..<6 { - compressionQuality = (max + min) / 2 - guard let compressData = UIImageJPEGRepresentation(self, compressionQuality) else { - return nil - } - - data = compressData - - if CGFloat(data.count) < CGFloat(maxBytes) * 0.9 { - min = compressionQuality - }else if data.count > maxBytes { - max = compressionQuality - } else { - break - } - } - - if data.count < maxBytes { - return data - } - - var dataCount : Int = 0 - /// 至多循环100次 - var loopCount = 0 - while data.count > maxBytes && data.count != dataCount && loopCount < 100 { - loopCount+=1 - - dataCount = data.count - let ratio : Float = Float(maxBytes) / Float(dataCount) - let size : CGSize = CGSizeMake(self.size.width * CGFloat(sqrtf(ratio)), self.size.height * CGFloat(sqrtf(ratio))) - UIGraphicsBeginImageContext(size) - self.draw(in: CGRectMake(0, 0, size.width, size.height)) - let resultImage : UIImage? = UIGraphicsGetImageFromCurrentImageContext() - UIGraphicsEndImageContext() - if let resultImage,let resultData = UIImageJPEGRepresentation(resultImage, compressionQuality) { - data = resultData - }else { - return nil - } - } - return data - } -} - -// MARK: WaterMark -public extension UIImage { - - /// 图片水印方法 - /// - Parameters: - /// - attributedString: 富文本 - /// - rect: 富文本的rect - /// - Returns: 生成失败的话会返回原图 - /// - Warning: 先通过boundingRect计算富文本的尺寸,然后再计算富文本在图片中的位置 - func dd_addWaterMarkWith(attributedString: NSAttributedString, rect: CGRect) -> UIImage { - UIGraphicsBeginImageContextWithOptions(size, true, scale) - draw(in: CGRect(origin: CGPoint(x: 0, y: 0), size: size)) - attributedString.draw(in: rect) - let resultImage = UIGraphicsGetImageFromCurrentImageContext() - UIGraphicsEndImageContext() - return resultImage ?? self - } -} - -// MARK: LoadImageWithTrait -public extension UIImage { - @available(iOS 12.0, *) - static func dd_imageWithUserInerfaceStyle(lightImage: UIImage?, darkImage: UIImage?) -> UIImage? { - let imageAsset = UIImageAsset() - if let lightImage { - imageAsset.register(lightImage, with: UITraitCollection(userInterfaceStyle: .light)) - } - if let darkImage { - imageAsset.register(darkImage, with: UITraitCollection(userInterfaceStyle: .dark)) - } - return imageAsset.image(with: UITraitCollection(userInterfaceStyle: .unspecified)) - } -} - - -// MARK: LoadImageWithImageBundle -public extension UIImage { - - /// 加载图片,此方法加载的图片在应用生命周期内无法销毁 - /// - Parameters: - /// - named: 图片名称 - /// - aClass: 调用此方法的类 - /// - bundleName: 与调用类所关联的bundle名称 - convenience init?(named: String, bundleName: String?, aClass: AnyClass) { - var bundlePath = Bundle.main.bundlePath - if let bundleName { - bundlePath = Bundle(for: aClass.self).bundlePath.appending("/\(bundleName).bundle") - } - let bundle = Bundle.init(path: bundlePath) - if #available(iOS 12.0, *) { - self.init(named: named, in: bundle, compatibleWith: UITraitCollection(userInterfaceStyle: .unspecified)) - }else{ - self.init(named: named, in: bundle, compatibleWith: nil) - } - } - - /// pathForResource加载图片的方法,此方法加载的图片可以在内存中被销毁 - /// - Parameters: - /// - forResource: 资源名称 - /// - ofType: 类型 - /// - aClass: 调用此方法的类 - /// - bundleName: 与调用类所关联的bundle名称 - /// - Warning: 此方法加载图片无法适配userInterfaceStyle - convenience init?(forResource: String, ofType: String? = nil, bundleName: String?, aClass: AnyClass) { - var bundlePath = Bundle.main.bundlePath - if let bundleName { - bundlePath = Bundle(for: aClass.self).bundlePath.appending("/\(bundleName).bundle") - } - let bundle = Bundle.init(path: bundlePath) - - /// 如果是gif图的话 - let gif = "gif" - - if forResource.hasSuffix(".\(gif)") == true || ofType == gif { - var url : URL? - if forResource.hasSuffix(".\(gif)") == true { - url = bundle?.url(forResource: forResource, withExtension: nil) - }else if ofType == gif { - url = bundle?.url(forResource: forResource, withExtension: ".\(gif)") - } - if let url, let data = try? Data(contentsOf: url) { - self.init(data: data) - }else{ - self.init(named: "") - } - }else if let path = bundle?.path(forResource: forResource, ofType: ofType) { - self.init(contentsOfFile: path) - }else{ - self.init(named: "") - } - } -} - -// MARK: QRCode -public extension UIImage { - static func dd_generatorQRCode(content: String, size: CGFloat) -> UIImage? { - let filter = CIFilter(name: "CIQRCodeGenerator") - filter?.setDefaults() - filter?.setValue(content.data(using: .utf8), forKey: "inputMessage") - return dd_generatorHDUIImageFromCGImage(filter?.outputImage ?? CIImage(), size: size) - } - - private static func dd_generatorHDUIImageFromCGImage(_ ciImage: CIImage, size: CGFloat) -> UIImage? { - let extent = ciImage.extent.integral - let scale = min(size / extent.width, size / extent.height) - - let width: size_t = size_t(extent.width * scale) - let height: size_t = size_t(extent.height * scale) - let cs: CGColorSpace = CGColorSpaceCreateDeviceGray() - let bitmap: CGContext = CGContext(data: nil, width: width, height: height, bitsPerComponent: 8, bytesPerRow: 0, space: cs, bitmapInfo: 1)! - - let context = CIContext.init() - let bitmapImage = context.createCGImage(ciImage, from: extent) - bitmap.interpolationQuality = .none - bitmap.scaleBy(x: scale, y: scale) - bitmap.draw(bitmapImage!, in: extent) - - let scaledImage = bitmap.makeImage() - return UIImage.init(cgImage: scaledImage!) - } -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UIImageView/DDUIImageView.swift b/Pods/DDUIKit/DDUIKit/Classes/UIImageView/DDUIImageView.swift deleted file mode 100644 index 6261db0..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UIImageView/DDUIImageView.swift +++ /dev/null @@ -1,11 +0,0 @@ -// -// DDUIImageView.swift -// DDUIKit -// Created by ddisfriend on 2024/4/19. - - -import UIKit - -open class DDUIImageView : UIImageView { - -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UIImageView/UIImageView.swift b/Pods/DDUIKit/DDUIKit/Classes/UIImageView/UIImageView.swift deleted file mode 100644 index 070ef01..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UIImageView/UIImageView.swift +++ /dev/null @@ -1,11 +0,0 @@ -// -// UIImageView.swift -// DDUIKit -// Created by ddisfriend on 2024/4/19. - - -import UIKit - -extension UIImageView { - -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UILabel/DDUILabel.swift b/Pods/DDUIKit/DDUIKit/Classes/UILabel/DDUILabel.swift deleted file mode 100644 index f5684b1..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UILabel/DDUILabel.swift +++ /dev/null @@ -1,11 +0,0 @@ -// -// DDUILabel.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -open class DDUILabel : UILabel { - -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UILabel/UILabel.swift b/Pods/DDUIKit/DDUIKit/Classes/UILabel/UILabel.swift deleted file mode 100644 index 34707e9..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UILabel/UILabel.swift +++ /dev/null @@ -1,11 +0,0 @@ -// -// UILabel.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -extension UILabel { - -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UINavigationBar/DDUINavigationBar.swift b/Pods/DDUIKit/DDUIKit/Classes/UINavigationBar/DDUINavigationBar.swift deleted file mode 100644 index 5bc3672..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UINavigationBar/DDUINavigationBar.swift +++ /dev/null @@ -1,7 +0,0 @@ -// -// DDUINavigationBar.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit diff --git a/Pods/DDUIKit/DDUIKit/Classes/UINavigationBar/UINavigationBar.swift b/Pods/DDUIKit/DDUIKit/Classes/UINavigationBar/UINavigationBar.swift deleted file mode 100644 index 7601a61..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UINavigationBar/UINavigationBar.swift +++ /dev/null @@ -1,152 +0,0 @@ -// -// UINavigationBar.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -public extension UINavigationBar { - static func dd_methodSwizzlingUINavigationBar() { - dd_methodSwizzling(targetClass: self, originalSelector: #selector(setter: UINavigationBar.barTintColor), swizzledSelector: #selector(self.dd_setBarTintColor(navigationBarBackgroundColor:))) - dd_methodSwizzling(targetClass: self, originalSelector: #selector(UINavigationBar.setBackgroundImage(_:for:barMetrics:)), swizzledSelector: #selector(self.dd_setBackgroundImage(_:for:barMetrics:))) - dd_methodSwizzling(targetClass: self, originalSelector: #selector(UINavigationBar.setBackgroundImage(_:for:)), swizzledSelector: #selector(self.dd_setBackgroundImage(_:for:))) - dd_methodSwizzling(targetClass: self, originalSelector: #selector(setter: UINavigationBar.shadowImage), swizzledSelector: #selector(self.dd_setShadowImage(shadowImage:))) - dd_methodSwizzling(targetClass: self, originalSelector: #selector(setter: UINavigationBar.titleTextAttributes), swizzledSelector: #selector(self.dd_setTitleTextAttributes(navigationBarTitleTextAttributes:))) - dd_methodSwizzling(targetClass: self, originalSelector: #selector(setter: UINavigationBar.backIndicatorImage), swizzledSelector: #selector(self.dd_setBackIndicatorImage(backIndicatorImage:))) - dd_methodSwizzling(targetClass: self, originalSelector: #selector(setter: UINavigationBar.backIndicatorTransitionMaskImage), swizzledSelector: #selector(self.dd_setBackIndicatorTransitionMaskImage(backIndicatorTransitionMaskImage:))) - if #available(iOS 13.0, *) { - dd_methodSwizzling(targetClass: self, originalSelector: #selector(setter: UINavigationBar.standardAppearance), swizzledSelector: #selector(self.dd_setStandardAppearance(standardAppearance:))) - } else { - // Fallback on earlier versions - } - } - - @objc - func dd_setBarTintColor(navigationBarBackgroundColor: UIColor?) { - dd_saveBarBackgroundColor(navigationBarBackgroundColor:navigationBarBackgroundColor) - dd_setBarTintColor(navigationBarBackgroundColor:navigationBarBackgroundColor) - } - - @objc - func dd_setBackgroundImage(_ backgroundImage: UIImage?, for barPosition: UIBarPosition, barMetrics: UIBarMetrics) { - dd_saveBarBackgroundImage(navigationBarBackgroundImage: backgroundImage) - dd_setBackgroundImage(backgroundImage, for: barPosition, barMetrics: barMetrics) - } - - @objc - func dd_setBackgroundImage(_ backgroundImage: UIImage?, for barMetrics: UIBarMetrics) { - dd_saveBarBackgroundImage(navigationBarBackgroundImage: backgroundImage) - dd_setBackgroundImage(backgroundImage, for: barMetrics) - } - - @objc - func dd_setTitleTextAttributes(navigationBarTitleTextAttributes: Dictionary) { - dd_saveBarTitleTextAttributes(navigationBarTitleTextAttributes: navigationBarTitleTextAttributes) - dd_setTitleTextAttributes(navigationBarTitleTextAttributes: navigationBarTitleTextAttributes) - } - - @objc - func dd_setShadowImage(shadowImage: UIImage?) { - dd_saveShadowImage(shadowImage: shadowImage) - dd_setShadowImage(shadowImage: shadowImage) - } - - @objc - func dd_setBackIndicatorImage(backIndicatorImage: UIImage?) { - dd_saveBackIndicatorImage(backIndicatorImage: backIndicatorImage) - dd_setBackIndicatorImage(backIndicatorImage: backIndicatorImage) - } - - @objc - func dd_setBackIndicatorTransitionMaskImage(backIndicatorTransitionMaskImage: UIImage?) { - dd_saveBackIndicatorTransitionMaskImage(backIndicatorTransitionMaskImage: backIndicatorTransitionMaskImage) - dd_setBackIndicatorTransitionMaskImage(backIndicatorTransitionMaskImage: backIndicatorTransitionMaskImage) - } - - @available(iOS 13.0, *) - @objc - func dd_setStandardAppearance(standardAppearance: UINavigationBarAppearance) { - dd_saveBarBackgroundColor(navigationBarBackgroundColor: standardAppearance.backgroundColor) - dd_saveBarBackgroundImage(navigationBarBackgroundImage: standardAppearance.backgroundImage) - dd_setStandardAppearance(standardAppearance: standardAppearance) - } - - @available(iOS 13.0, *) - @objc - func dd_setCompactAppearance(compactAppearance: UINavigationBarAppearance) { - dd_saveBarBackgroundColor(navigationBarBackgroundColor: compactAppearance.backgroundColor) - dd_saveBarBackgroundImage(navigationBarBackgroundImage: compactAppearance.backgroundImage) - dd_setCompactAppearance(compactAppearance: compactAppearance) - } - - @available(iOS 13.0, *) - @objc - func dd_setScrollEdgeAppearance(scrollEdgeAppearance: UINavigationBarAppearance) { - dd_saveBarBackgroundColor(navigationBarBackgroundColor: scrollEdgeAppearance.backgroundColor) - dd_saveBarBackgroundImage(navigationBarBackgroundImage: scrollEdgeAppearance.backgroundImage) - dd_setScrollEdgeAppearance(scrollEdgeAppearance: scrollEdgeAppearance) - } - - @available(iOS 15.0, *) - @objc - func dd_setCompactScrollEdgeAppearance(compactScrollEdgeAppearance: UINavigationBarAppearance) { - dd_saveBarBackgroundColor(navigationBarBackgroundColor: compactScrollEdgeAppearance.backgroundColor) - dd_saveBarBackgroundImage(navigationBarBackgroundImage: compactScrollEdgeAppearance.backgroundImage) - dd_setCompactScrollEdgeAppearance(compactScrollEdgeAppearance: compactScrollEdgeAppearance) - } - - func dd_saveBarBackgroundColor(navigationBarBackgroundColor: UIColor?) { - guard let navigationController = delegate as? UINavigationController, let viewController = navigationController.topViewController else { - return - } - if viewController.responds(to: #selector(UIViewController.dd_setAssociatedNavigationBarBackgroundColor(navigationBarBackgroundColor:))) == true { - viewController.dd_setAssociatedNavigationBarBackgroundColor(navigationBarBackgroundColor: navigationBarBackgroundColor) - } - } - - func dd_saveBarBackgroundImage(navigationBarBackgroundImage: UIImage?) { - guard let navigationController = delegate as? UINavigationController, let viewController = navigationController.topViewController else { - return - } - if viewController.responds(to: #selector(UIViewController.dd_setAssociatedNavigationBarBackgroundImage(navigationBarBackgroundImage:))) == true { - viewController.dd_setAssociatedNavigationBarBackgroundImage(navigationBarBackgroundImage:navigationBarBackgroundImage) - } - } - - func dd_saveBarTitleTextAttributes(navigationBarTitleTextAttributes: Dictionary) { - guard let navigationController = delegate as? UINavigationController, let viewController = navigationController.topViewController else { - return - } - if viewController.responds(to: #selector(UIViewController.dd_setAssociatedNavigationBarTitleTextAttributes(navigationBarTitleTextAttributes:))) { - viewController.dd_setAssociatedNavigationBarTitleTextAttributes(navigationBarTitleTextAttributes: navigationBarTitleTextAttributes) - } - } - - func dd_saveShadowImage(shadowImage: UIImage?) { - guard let navigationController = delegate as? UINavigationController, let viewController = navigationController.topViewController else { - return - } - if viewController.responds(to: #selector(UIViewController.dd_setAssociatedNavigationBarShadowImage(navigationBarShadowImage:))) == true { - viewController.dd_setAssociatedNavigationBarShadowImage(navigationBarShadowImage: shadowImage) - } - } - - func dd_saveBackIndicatorImage(backIndicatorImage: UIImage?) { - guard let navigationController = delegate as? UINavigationController, let viewController = navigationController.topViewController else { - return - } - if viewController.responds(to: #selector(UIViewController.dd_setAssociatedBackIndicatorImage(backIndicatorImage:))) == true { - viewController.dd_setAssociatedBackIndicatorImage(backIndicatorImage: backIndicatorImage) - } - } - - func dd_saveBackIndicatorTransitionMaskImage(backIndicatorTransitionMaskImage: UIImage?) { - guard let navigationController = delegate as? UINavigationController, let viewController = navigationController.topViewController else { - return - } - if viewController.responds(to: #selector(UIViewController.dd_setAssociatedBackIndicatorImageTransitionMaskImage(backIndicatorTransitionMaskImage:))) == true { - viewController.dd_setAssociatedBackIndicatorImageTransitionMaskImage(backIndicatorTransitionMaskImage: backIndicatorTransitionMaskImage) - } - } -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UINavigationController/DDUINavigationController.swift b/Pods/DDUIKit/DDUIKit/Classes/UINavigationController/DDUINavigationController.swift deleted file mode 100644 index 1d25cee..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UINavigationController/DDUINavigationController.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// DDUINavigationController.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -open class DDUINavigationController : UINavigationController { - open override func viewDidLoad() { - super.viewDidLoad() - dd_addScreenEdgePanGestureRecognizer() - } - - // MARK: UIStatusBarStyle - open override var childViewControllerForStatusBarStyle: UIViewController? { - return topViewController - } - - open override var childViewControllerForStatusBarHidden: UIViewController? { - return topViewController - } - - - // MARK: Orientations - open override var shouldAutorotate: Bool { - return topViewController?.shouldAutorotate ?? false - } - - open override var supportedInterfaceOrientations: UIInterfaceOrientationMask { - return topViewController?.supportedInterfaceOrientations ?? .portrait - } - - open override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation { - return topViewController?.preferredInterfaceOrientationForPresentation ?? .portrait - } -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UINavigationController/UINavigationController.swift b/Pods/DDUIKit/DDUIKit/Classes/UINavigationController/UINavigationController.swift deleted file mode 100644 index b00490a..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UINavigationController/UINavigationController.swift +++ /dev/null @@ -1,151 +0,0 @@ -// -// UINavigationController.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -// MARK: MethodSwizzling -public extension UINavigationController { - static func dd_methodSwizzlingUINavigationController() { - dd_methodSwizzling(targetClass: self, originalSelector: #selector(UINavigationController.pushViewController(_:animated:)), swizzledSelector: #selector(self.dd_pushViewController(_:animated:))) - dd_methodSwizzling(targetClass: self, originalSelector: #selector(UINavigationController.popViewController(animated:)), swizzledSelector: #selector(self.dd_popViewController(animated:))) - dd_methodSwizzling(targetClass: self, originalSelector: #selector(UINavigationController.popToRootViewController(animated:)), swizzledSelector: #selector(self.dd_popToRootViewController(animated:))) - } - - @objc func dd_pushViewController(_ controller: UIViewController, animated: Bool) { - view.endEditing(true) - dd_endEditingAtController(topViewController) - if dd_hidesBottomBarWhenPushed == true { - dd_hidesBottomBarWhenPushedAtChildController(controller) - } - dd_pushViewController(controller, animated: animated) - } - - @objc func dd_popViewController(animated: Bool) -> UIViewController? { - view.endEditing(true) - let vc = dd_popViewController(animated: animated) - dd_endEditingAtController(vc) - return vc - } - - @objc func dd_popToRootViewController(animated: Bool) -> [UIViewController]? { - view.endEditing(true) - let vcs = dd_popToRootViewController(animated: animated) - dd_endEditingAtController(vcs?.last) - return vcs - } -} - -//MARK: AssociatedKey -extension UINavigationController { - struct DDUINavigationControllerKey { - static var hidesBottomBarWhenPushed : UInt8 = 1 << 0 - static var screenEdgePanGestureRecognizer : UInt8 = 1 << 1 - static var percentDrivenInteractiveTransition : UInt8 = 1 << 2 - } -} - -// MARK: Push optimise -public extension UINavigationController { - var dd_hidesBottomBarWhenPushed : Bool { - get { - return (objc_getAssociatedObject(self, &DDUINavigationControllerKey.hidesBottomBarWhenPushed) as? Bool) ?? false - } - set { - objc_setAssociatedObject(self, &DDUINavigationControllerKey.hidesBottomBarWhenPushed, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - /// push控制器时,需要将当前view的键盘去掉 - func dd_endEditingAtController(_ controller: UIViewController?) { - controller?.view.endEditing(true) - } - - /// push控制器时,需要将子控制器的tabbar去掉 - func dd_hidesBottomBarWhenPushedAtChildController(_ controller: UIViewController?) { - if viewControllers.count > 1 { - controller?.hidesBottomBarWhenPushed = true - } - } -} - -// MARK: ScreenEdgePanGestureRecognizer -extension UINavigationController { - public var dd_screenEdgePanGestureRecognizer : UIScreenEdgePanGestureRecognizer? { - get { - objc_getAssociatedObject(self, &DDUINavigationControllerKey.screenEdgePanGestureRecognizer) as? UIScreenEdgePanGestureRecognizer - } - set { - objc_setAssociatedObject(self, &DDUINavigationControllerKey.screenEdgePanGestureRecognizer, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - public var dd_percentDrivenInteractiveTransition : UIPercentDrivenInteractiveTransition? { - get { - objc_getAssociatedObject(self, &DDUINavigationControllerKey.percentDrivenInteractiveTransition) as? UIPercentDrivenInteractiveTransition - } - set { - objc_setAssociatedObject(self, &DDUINavigationControllerKey.percentDrivenInteractiveTransition, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - public func dd_addScreenEdgePanGestureRecognizer() { - dd_screenEdgePanGestureRecognizer = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(dd_panGestureRecognizerToPop)) - dd_screenEdgePanGestureRecognizer?.edges = .left - guard let dd_screenEdgePanGestureRecognizer else { - return - } - view.addGestureRecognizer(dd_screenEdgePanGestureRecognizer) - - delegate = self - interactivePopGestureRecognizer?.isEnabled = false - } - - @objc public func dd_panGestureRecognizerToPop(ges:UIPanGestureRecognizer) { - if ges.state == .began { - if viewControllers.count == 1 { - return - } - - dd_percentDrivenInteractiveTransition = UIPercentDrivenInteractiveTransition() - popViewController(animated: true) - } - - let progress : CGFloat = ges.translation(in: view).x / view.frame.size.width - - if ges.state == .changed { - dd_percentDrivenInteractiveTransition?.update(progress) - }else if ges.state == .ended || ges.state == .cancelled { - if progress >= 0.5 { - dd_percentDrivenInteractiveTransition?.finish() - }else{ - dd_percentDrivenInteractiveTransition?.cancel() - } - dd_percentDrivenInteractiveTransition = nil - }else if ges.state == .failed { - return - } - } - - public func dd_screenEdgePanGestureRecognizerEnable(_ isEnable: Bool) { - dd_screenEdgePanGestureRecognizer?.isEnabled = isEnable - } -} - -extension UINavigationController : UINavigationControllerDelegate{ - public func navigationController(_ navigationController: UINavigationController, interactionControllerFor animationController: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? { - return dd_percentDrivenInteractiveTransition - } - - public func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationControllerOperation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? { - if operation == .push { - return DDFullScreenTransition.init(transitionType: .push) - } - if operation == .pop { - return DDFullScreenTransition.init(transitionType: .pop) - } - return DDFullScreenTransition.init(transitionType: .none) - } -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UIResponder/UIResponder.swift b/Pods/DDUIKit/DDUIKit/Classes/UIResponder/UIResponder.swift deleted file mode 100644 index 8a9ef0a..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UIResponder/UIResponder.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// UIResponder.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -extension UIResponder { - class func dd_methodSwizzling(targetClass: AnyClass,originalSelector: Selector, swizzledSelector: Selector) { - let originalMethod = class_getInstanceMethod(targetClass, originalSelector) - let swizzledMethod = class_getInstanceMethod(targetClass, swizzledSelector) - - if let originalMethod, let swizzledMethod { - let result = class_addMethod(targetClass, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod)) - if result == true { - class_replaceMethod(targetClass, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod)) - }else{ - method_exchangeImplementations(originalMethod, swizzledMethod) - } - } - } -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UIScrollView/DDUIScrollView.swift b/Pods/DDUIKit/DDUIKit/Classes/UIScrollView/DDUIScrollView.swift deleted file mode 100644 index 82dd7d9..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UIScrollView/DDUIScrollView.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// DDUIScrollView.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -open class DDUIScrollView : UIScrollView { - public override init(frame: CGRect) { - super.init(frame: frame) - contentInsetAdjustmentBehavior = .never - } - - public required init?(coder: NSCoder) { - super.init(coder: coder) - } -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UIScrollView/UIScrollView.swift b/Pods/DDUIKit/DDUIKit/Classes/UIScrollView/UIScrollView.swift deleted file mode 100644 index 8261c59..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UIScrollView/UIScrollView.swift +++ /dev/null @@ -1,7 +0,0 @@ -// -// UIScrollView.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit diff --git a/Pods/DDUIKit/DDUIKit/Classes/UISwitch/DDUISwitch.swift b/Pods/DDUIKit/DDUIKit/Classes/UISwitch/DDUISwitch.swift deleted file mode 100644 index c7b29e9..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UISwitch/DDUISwitch.swift +++ /dev/null @@ -1,11 +0,0 @@ -// -// DDUISwitch.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -open class DDUISwitch : UISwitch { - -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UISwitch/UISwitch.swift b/Pods/DDUIKit/DDUIKit/Classes/UISwitch/UISwitch.swift deleted file mode 100644 index fafad3f..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UISwitch/UISwitch.swift +++ /dev/null @@ -1,7 +0,0 @@ -// -// UISwitch.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit diff --git a/Pods/DDUIKit/DDUIKit/Classes/UITableBarController/DDUITabBarController.swift b/Pods/DDUIKit/DDUIKit/Classes/UITableBarController/DDUITabBarController.swift deleted file mode 100644 index db4da78..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UITableBarController/DDUITabBarController.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// DDUITabBarController.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -open class DDUITabBarController : UITabBarController { - open override func viewDidLoad() { - super.viewDidLoad() - } - - // MARK: UIStatusBarStyle - open override var childViewControllerForStatusBarStyle: UIViewController? { - return selectedViewController - } - - open override var childViewControllerForStatusBarHidden: UIViewController? { - return selectedViewController - } - - // MARK: Orientations - open override var shouldAutorotate: Bool { - return selectedViewController?.shouldAutorotate ?? false - } - - open override var supportedInterfaceOrientations: UIInterfaceOrientationMask { - return selectedViewController?.supportedInterfaceOrientations ?? .portrait - } - - open override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation { - return selectedViewController?.preferredInterfaceOrientationForPresentation ?? .portrait - } -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UITableBarController/UITabBarController.swift b/Pods/DDUIKit/DDUIKit/Classes/UITableBarController/UITabBarController.swift deleted file mode 100644 index fef387e..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UITableBarController/UITabBarController.swift +++ /dev/null @@ -1,7 +0,0 @@ -// -// UITabBarController.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit diff --git a/Pods/DDUIKit/DDUIKit/Classes/UITableView/DDUITableView.swift b/Pods/DDUIKit/DDUIKit/Classes/UITableView/DDUITableView.swift deleted file mode 100644 index 5a81956..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UITableView/DDUITableView.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// DDUITableView.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -open class DDUITableView : UITableView { - - public override init(frame: CGRect, style: UITableViewStyle) { - super.init(frame: frame, style: style) - contentInsetAdjustmentBehavior = .never - separatorStyle = .none - - if #available(iOS 15.0, *) { - sectionHeaderTopPadding = 0 - } - } - - public required init?(coder: NSCoder) { - super.init(coder: coder) - } -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UITableView/UITableView.swift b/Pods/DDUIKit/DDUIKit/Classes/UITableView/UITableView.swift deleted file mode 100644 index 45bb59a..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UITableView/UITableView.swift +++ /dev/null @@ -1,7 +0,0 @@ -// -// UITableView.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit diff --git a/Pods/DDUIKit/DDUIKit/Classes/UITableViewCell/DDUITableViewCell.swift b/Pods/DDUIKit/DDUIKit/Classes/UITableViewCell/DDUITableViewCell.swift deleted file mode 100644 index 1f801f7..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UITableViewCell/DDUITableViewCell.swift +++ /dev/null @@ -1,11 +0,0 @@ -// -// DDUITableViewCell.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -open class DDUITableViewCell : UITableViewCell { - -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UITableViewCell/UITableViewCell.swift b/Pods/DDUIKit/DDUIKit/Classes/UITableViewCell/UITableViewCell.swift deleted file mode 100644 index 4273e74..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UITableViewCell/UITableViewCell.swift +++ /dev/null @@ -1,7 +0,0 @@ -// -// UITableViewCell.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit diff --git a/Pods/DDUIKit/DDUIKit/Classes/UITextField/DDUITextField.swift b/Pods/DDUIKit/DDUIKit/Classes/UITextField/DDUITextField.swift deleted file mode 100644 index c68f8d7..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UITextField/DDUITextField.swift +++ /dev/null @@ -1,11 +0,0 @@ -// -// DDUITextField.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -open class DDUITextField : UITextField { - -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UITextField/UITextField.swift b/Pods/DDUIKit/DDUIKit/Classes/UITextField/UITextField.swift deleted file mode 100644 index 2cb0e5a..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UITextField/UITextField.swift +++ /dev/null @@ -1,5 +0,0 @@ -// -// UITextField.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - diff --git a/Pods/DDUIKit/DDUIKit/Classes/UITextView/DDUITextView.swift b/Pods/DDUIKit/DDUIKit/Classes/UITextView/DDUITextView.swift deleted file mode 100644 index 57d5042..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UITextView/DDUITextView.swift +++ /dev/null @@ -1,11 +0,0 @@ -// -// DDUITextView.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -open class DDUITextView : UITextView { - -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UITextView/UITextView.swift b/Pods/DDUIKit/DDUIKit/Classes/UITextView/UITextView.swift deleted file mode 100644 index 6f68109..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UITextView/UITextView.swift +++ /dev/null @@ -1,5 +0,0 @@ -// -// UITextView.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - diff --git a/Pods/DDUIKit/DDUIKit/Classes/UIView/DDUIView.swift b/Pods/DDUIKit/DDUIKit/Classes/UIView/DDUIView.swift deleted file mode 100644 index d8b34ee..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UIView/DDUIView.swift +++ /dev/null @@ -1,11 +0,0 @@ -// -// DDUIView.swift -// DDUIKit -// Created by ddisfriend on 2024/4/19. - - -import UIKit - -open class DDUIView : UIView { - -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UIView/UIView.swift b/Pods/DDUIKit/DDUIKit/Classes/UIView/UIView.swift deleted file mode 100644 index d4a5917..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UIView/UIView.swift +++ /dev/null @@ -1,101 +0,0 @@ -// -// UIView.swift -// DDUIKit -// Created by ddisfriend on 2024/4/19. - - -import UIKit - -extension UIView { - fileprivate struct DDUIViewAssociatedKey { - static var x : UInt8 = 1 << 0 - static var y : UInt8 = 1 << 1 - static var width : UInt8 = 1 << 2 - static var height : UInt8 = 1 << 3 - } - - public var dd_x : CGFloat { - get { - (objc_getAssociatedObject(self, &DDUIViewAssociatedKey.x) as? CGFloat) ?? 0.0 - } - - set { - objc_setAssociatedObject(self, &DDUIViewAssociatedKey.x, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - public var dd_y : CGFloat { - get { - (objc_getAssociatedObject(self, &DDUIViewAssociatedKey.y) as? CGFloat) ?? 0.0 - } - - set { - objc_setAssociatedObject(self, &DDUIViewAssociatedKey.y, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - public var dd_width : CGFloat { - get { - (objc_getAssociatedObject(self, &DDUIViewAssociatedKey.width) as? CGFloat) ?? 0.0 - } - - set { - objc_setAssociatedObject(self, &DDUIViewAssociatedKey.width, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - public var dd_height : CGFloat { - get { - (objc_getAssociatedObject(self, &DDUIViewAssociatedKey.height) as? CGFloat) ?? 0.0 - } - - set { - objc_setAssociatedObject(self, &DDUIViewAssociatedKey.height, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } -} - -extension UIView { - /// 当前view所属的控制器 - public var dd_currentViewController : UIViewController? { - return UIView.dd_viewControllerOfView(view: self) - } - - /// 返回view - public class func dd_viewControllerOfView(view: UIView) -> UIViewController? { - let responder = view as UIResponder - while let nextResponder = responder.next { - if nextResponder.isKind(of: UIViewController.self) == true { - return nextResponder as? UIViewController - } - } - return nil - } -} - -/// 给view添加tap -extension UIView { - internal struct DDUITapGestureRecognizerAssociatedObject { - static var tapActionHandler : UInt8 = 1 << 0 - } - - internal var tapActionHandler : () -> Void { - get { - return (objc_getAssociatedObject(self, &DDUITapGestureRecognizerAssociatedObject.tapActionHandler) as? () -> Void) ?? {} - } - set { - objc_setAssociatedObject(self, &DDUITapGestureRecognizerAssociatedObject.tapActionHandler, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - public func dd_addTapGesture(actionHandler: @escaping () -> Void) { - tapActionHandler = actionHandler - let tapGes = UITapGestureRecognizer.init(target: self, action: #selector(tapAction)) - addGestureRecognizer(tapGes) - } - - @objc private func tapAction() { - tapActionHandler() - } -} - diff --git a/Pods/DDUIKit/DDUIKit/Classes/UIViewController/DDUIViewController.swift b/Pods/DDUIKit/DDUIKit/Classes/UIViewController/DDUIViewController.swift deleted file mode 100644 index d093604..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UIViewController/DDUIViewController.swift +++ /dev/null @@ -1,51 +0,0 @@ -// -// DDUIViewController.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -open class DDUIViewController : UIViewController { - /// 默认返回上一页,可以自定义 - public lazy var backButtonHandler : (() -> Void) = {[weak self] in - self?.navigationController?.popViewController(animated: true) - } - - open override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - addBackButton() - } - - /// navigationController在viewDidLoad及之前都还未被赋值,在viewWillAppear开始才有值 - open func addBackButton(handler: (() -> Void)? = nil) { - if let handler { - backButtonHandler = handler - } - /// 第一个页面不需要返回按钮 - if navigationController?.viewControllers.count == nil || navigationController?.viewControllers.count == 1 { - }else{ - /// 这里自定义按钮后,导航栏的interactivePopGestureRecognizer就会失效 - navigationItem.leftBarButtonItem = UIBarButtonItem(image: UIImage(systemName: "chevron.backward")?.withRenderingMode(.alwaysOriginal).withTintColor(UIColor.init(dynamicProvider: { traintCollection in - return traintCollection.userInterfaceStyle == .light ? .black : .white - })), style: .plain, target: self, action: #selector(self.backButtonDefaultAction)) - } - } - - @objc private func backButtonDefaultAction() { - backButtonHandler() - } - - // MARK: Orientations - open override var shouldAutorotate: Bool { - return false - } - - open override var supportedInterfaceOrientations: UIInterfaceOrientationMask { - return .portrait - } - - open override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation { - return .portrait - } -} diff --git a/Pods/DDUIKit/DDUIKit/Classes/UIViewController/UIViewController.swift b/Pods/DDUIKit/DDUIKit/Classes/UIViewController/UIViewController.swift deleted file mode 100644 index 7421452..0000000 --- a/Pods/DDUIKit/DDUIKit/Classes/UIViewController/UIViewController.swift +++ /dev/null @@ -1,289 +0,0 @@ -// -// UIViewController.swift -// DDUIKit -// Created by ddisfriend on 2024/4/18. - - -import UIKit - -extension UIViewController { - fileprivate struct DDUIViewControllerKey { - static var navigationBarBackgroundColor : UInt8 = 1 << 0 - static var navigationBarBackgroundImage : UInt8 = 1 << 1 - static var navigationBarShadowColor : UInt8 = 1 << 2 - static var navigationBarShadowImage : UInt8 = 1 << 3 - static var navigationBarTitleTextAttributes : UInt8 = 1 << 4 - static var navigationBarBarButtonItemAttributes : UInt8 = 1 << 5 - static var backIndicatorImage : UInt8 = 1 << 6 - static var backIndicatorTransitionMaskImage : UInt8 = 1 << 7 - static var backButtonTitle : UInt8 = 1 << 8 - } -} - -// MARK: MethodSwizzling -public extension UIViewController { - static func dd_methodSwizzlingUIViewController() { - dd_methodSwizzling(targetClass: self, originalSelector: #selector(UIViewController.loadView), swizzledSelector: #selector(self.dd_loadView)) - dd_methodSwizzling(targetClass: self, originalSelector: #selector(UIViewController.viewDidLoad), swizzledSelector: #selector(self.dd_viewDidLoad)) - dd_methodSwizzling(targetClass: self, originalSelector: #selector(UIViewController.viewWillAppear(_:)), swizzledSelector: #selector(self.dd_viewWillAppear(animated:))) - dd_methodSwizzling(targetClass: self, originalSelector: #selector(UIViewController.viewDidAppear(_:)), swizzledSelector: #selector(self.dd_viewDidAppear(animated:))) - dd_methodSwizzling(targetClass: self, originalSelector: #selector(UIViewController.viewWillDisappear(_:)), swizzledSelector: #selector(self.dd_viewWillDisappear(animated:))) - dd_methodSwizzling(targetClass: self, originalSelector: #selector(UIViewController.viewDidDisappear(_:)), swizzledSelector: #selector(self.dd_viewDidDisappear(animated:))) - dd_methodSwizzling(targetClass: self, originalSelector: #selector(UIViewController.viewWillLayoutSubviews), swizzledSelector: #selector(self.dd_viewWillLayoutSubviews)) - dd_methodSwizzling(targetClass: self, originalSelector: #selector(UIViewController.viewSafeAreaInsetsDidChange), swizzledSelector: #selector(self.dd_viewSafeAreaInsetsDidChange)) - dd_methodSwizzling(targetClass: self, originalSelector: #selector(UIViewController.viewDidLayoutSubviews), swizzledSelector: #selector(self.dd_viewDidLayoutSubviews)) - } - - @objc func dd_loadView() { - dd_loadView() - } - - @objc func dd_viewDidLoad() { - dd_viewDidLoad() - } - - @objc func dd_viewWillAppear(animated: Bool) { - // When the interface is displayed, the color or image of the navigationBar at the current controller needs to be updated. - dd_alterNavigationAttributes() - - dd_alter(navigationBarBarButtonItemAttributes: dd_navigationBarBarButtonItemAttributes ?? [:]) - - dd_viewWillAppear(animated: animated) - } - - @objc func dd_viewDidAppear(animated: Bool) { - dd_viewDidAppear(animated: animated) - } - - @objc func dd_viewWillDisappear(animated: Bool) { - dd_viewWillDisappear(animated: animated) - } - - @objc func dd_viewDidDisappear(animated: Bool) { - dd_viewDidDisappear(animated: animated) - } - - @objc func dd_viewWillLayoutSubviews() { - dd_viewWillLayoutSubviews() - } - - @objc func dd_viewSafeAreaInsetsDidChange() { - dd_viewSafeAreaInsetsDidChange() - } - - @objc func dd_viewDidLayoutSubviews() { - dd_viewDidLayoutSubviews() - } -} - -public extension UIViewController { - var dd_navigationBarBackgroundColor : UIColor? { - get { - return objc_getAssociatedObject(self, &DDUIViewControllerKey.navigationBarBackgroundColor) as? UIColor - } - set { - dd_setAssociatedNavigationBarBackgroundColor(navigationBarBackgroundColor: newValue) - dd_alterNavigationAttributes() - } - } - - var dd_navigationBarBackgroundImage : UIImage? { - get { - return objc_getAssociatedObject(self, &DDUIViewControllerKey.navigationBarBackgroundImage) as? UIImage - } - set { - dd_setAssociatedNavigationBarBackgroundImage(navigationBarBackgroundImage: newValue) - dd_alterNavigationAttributes() - } - } - - var dd_navigationBarShadowColor : UIColor? { - get { - return objc_getAssociatedObject(self, &DDUIViewControllerKey.navigationBarShadowColor) as? UIColor - } - set { - if #available(iOS 13.0, *) { - dd_setAssociatedNavigationBarShadowColor(navigationBarShadowColor: newValue) - } - dd_alterNavigationAttributes() - } - } - - var dd_navigationBarShadowImage : UIImage? { - get { - return objc_getAssociatedObject(self, &DDUIViewControllerKey.navigationBarShadowImage) as? UIImage - } - set { - dd_setAssociatedNavigationBarShadowImage(navigationBarShadowImage: newValue) - dd_alterNavigationAttributes() - } - } - - var dd_navigationBarTitleTextAttributes : Dictionary { - get { - return (objc_getAssociatedObject(self, &DDUIViewControllerKey.navigationBarTitleTextAttributes) as? Dictionary) ?? [:] - } - set { - dd_setAssociatedNavigationBarTitleTextAttributes(navigationBarTitleTextAttributes: newValue) - dd_alterNavigationAttributes() - } - } - - var dd_navigationBarBarButtonItemAttributes : Dictionary? { - get { - return objc_getAssociatedObject(self, &DDUIViewControllerKey.navigationBarBarButtonItemAttributes) as? Dictionary - } - set { - dd_setAssociatedNavigationBarBarButtonItemAttributes(navigationBarBarButtonItemAttributes: newValue) - dd_alterNavigationAttributes() - } - } - - var dd_backIndicatorImage : UIImage? { - get { - return objc_getAssociatedObject(self, &DDUIViewControllerKey.backIndicatorImage) as? UIImage - } - set { - dd_setAssociatedBackIndicatorImage(backIndicatorImage: newValue) - dd_alterNavigationAttributes() - } - } - - var dd_backIndicatorTransitionMaskImage : UIImage? { - get { - return objc_getAssociatedObject(self, &DDUIViewControllerKey.backIndicatorTransitionMaskImage) as? UIImage - } - set { - dd_setAssociatedBackIndicatorImageTransitionMaskImage(backIndicatorTransitionMaskImage: newValue) - dd_alterNavigationAttributes() - } - } - - var dd_backButtonTitle : String? { - get { - return objc_getAssociatedObject(self, &DDUIViewControllerKey.backButtonTitle) as? String - } - set { - dd_setAssociatedBackButtonTitle(backButtonTitle: newValue) - navigationItem.backButtonTitle = newValue - } - } - - /// 将保存属性和赋值分开的原因是navigationBar的调用,这里@objc的原因是直接修改navigationBar属性需要调用 - @objc - func dd_setAssociatedNavigationBarBackgroundColor(navigationBarBackgroundColor: UIColor?) { - objc_setAssociatedObject(self, &DDUIViewControllerKey.navigationBarBackgroundColor, navigationBarBackgroundColor, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - - @objc - func dd_setAssociatedNavigationBarBackgroundImage(navigationBarBackgroundImage: UIImage?) { - objc_setAssociatedObject(self, &DDUIViewControllerKey.navigationBarBackgroundImage, navigationBarBackgroundImage, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - - func dd_setAssociatedNavigationBarShadowColor(navigationBarShadowColor: UIColor?) { - objc_setAssociatedObject(self, &DDUIViewControllerKey.navigationBarShadowColor, navigationBarShadowColor, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - - @objc - func dd_setAssociatedNavigationBarShadowImage(navigationBarShadowImage: UIImage?) { - objc_setAssociatedObject(self, &DDUIViewControllerKey.navigationBarShadowImage, navigationBarShadowImage, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - - @objc - func dd_setAssociatedNavigationBarTitleTextAttributes(navigationBarTitleTextAttributes: Dictionary?) { - objc_setAssociatedObject(self, &DDUIViewControllerKey.navigationBarTitleTextAttributes, navigationBarTitleTextAttributes, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - - func dd_setAssociatedNavigationBarBarButtonItemAttributes(navigationBarBarButtonItemAttributes: Dictionary?) { - objc_setAssociatedObject(self, &DDUIViewControllerKey.navigationBarBarButtonItemAttributes, navigationBarBarButtonItemAttributes, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - - @objc - func dd_setAssociatedBackIndicatorImage(backIndicatorImage: UIImage?) { - objc_setAssociatedObject(self, &DDUIViewControllerKey.backIndicatorImage, backIndicatorImage, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - - @objc - func dd_setAssociatedBackIndicatorImageTransitionMaskImage(backIndicatorTransitionMaskImage: UIImage?) { - objc_setAssociatedObject(self, &DDUIViewControllerKey.backIndicatorTransitionMaskImage, backIndicatorTransitionMaskImage, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - - func dd_setAssociatedBackButtonTitle(backButtonTitle: String?) { - objc_setAssociatedObject(self, &DDUIViewControllerKey.backButtonTitle, backButtonTitle, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - - func dd_alterNavigationAttributes() { - if #available(iOS 13.0, *) { - dd_alter(navigationBarBackgroundImage: dd_navigationBarBackgroundImage, navigationBarBackgroundColor: dd_navigationBarBackgroundColor, navigationBarShadowImage: dd_navigationBarShadowImage, navigationBarShadowColor: dd_navigationBarShadowColor, navigationBarTitleTextAttributes: dd_navigationBarTitleTextAttributes, backIndicatorImage: dd_backIndicatorImage, backIndicatorTransitionMaskImage: dd_backIndicatorTransitionMaskImage) - }else{ - dd_alter(navigationBarBackgroundImage: dd_navigationBarBackgroundImage, navigationBarBackgroundColor: dd_navigationBarBackgroundColor, navigationBarShadowImage: dd_navigationBarShadowImage, navigationBarShadowColor: nil, navigationBarTitleTextAttributes: dd_navigationBarTitleTextAttributes, backIndicatorImage: dd_backIndicatorImage, backIndicatorTransitionMaskImage: dd_backIndicatorTransitionMaskImage) - } - } - - func dd_alter(navigationBarBackgroundImage: UIImage?, navigationBarBackgroundColor: UIColor?, navigationBarShadowImage: UIImage?, navigationBarShadowColor: UIColor?, navigationBarTitleTextAttributes: Dictionary, backIndicatorImage: UIImage?, backIndicatorTransitionMaskImage: UIImage?) { - if #available(iOS 13.0, *) { - let navigationBarAppearance = UINavigationBarAppearance() - navigationBarAppearance.configureWithTransparentBackground() - navigationBarAppearance.backgroundImage = navigationBarBackgroundImage - navigationBarAppearance.backgroundColor = navigationBarBackgroundColor - navigationBarAppearance.shadowImage = navigationBarShadowImage - navigationBarAppearance.shadowColor = navigationBarShadowColor - navigationBarAppearance.titleTextAttributes = navigationBarTitleTextAttributes - navigationBarAppearance.setBackIndicatorImage(backIndicatorImage, transitionMaskImage: backIndicatorTransitionMaskImage) - navigationController?.navigationBar.standardAppearance = navigationBarAppearance - navigationController?.navigationBar.compactAppearance = navigationBarAppearance - navigationController?.navigationBar.scrollEdgeAppearance = navigationBarAppearance - if #available(iOS 15.0, *) { - navigationController?.navigationBar.compactScrollEdgeAppearance = navigationBarAppearance - } - }else{ - navigationController?.navigationBar.barTintColor = navigationBarBackgroundColor - navigationController?.navigationBar.setBackgroundImage(navigationBarBackgroundImage, for: .default) - navigationController?.navigationBar.setBackgroundImage(navigationBarBackgroundImage, for: .compact) - navigationController?.navigationBar.setBackgroundImage(navigationBarBackgroundImage, for: .defaultPrompt) - navigationController?.navigationBar.setBackgroundImage(navigationBarBackgroundImage, for: .compactPrompt) - navigationController?.navigationBar.shadowImage = navigationBarShadowImage - navigationController?.navigationBar.titleTextAttributes = navigationBarTitleTextAttributes - navigationController?.navigationBar.backIndicatorImage = backIndicatorImage - navigationController?.navigationBar.backIndicatorTransitionMaskImage = backIndicatorTransitionMaskImage - } - } - - func dd_alter(navigationBarBarButtonItemAttributes: Dictionary) { - if let leftBarButtonItemsCount = navigationItem.leftBarButtonItems?.count, leftBarButtonItemsCount > 0 { - for i in 0.. 0 { - for i in 0.. TimeInterval { - return 0.25 - } - - public func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { - switch transitionType { - case .none: - - break - case .push: - pushAnimation(using: transitionContext) - break - case .pop: - popAnimation(using: transitionContext) - break - } - } - - func pushAnimation(using transitionContext: UIViewControllerContextTransitioning) { - let fromVc = transitionContext.viewController(forKey: .from) - let toVc = transitionContext.viewController(forKey: .to) - let container = transitionContext.containerView - guard let fromVc, let toVc else { - transitionContext.completeTransition(!transitionContext.transitionWasCancelled) - return - } - - var fromVcRect = transitionContext.initialFrame(for: fromVc) - fromVcRect.origin.x = 0 - fromVcRect.origin.y = 0 - fromVcRect.size = container.frame.size - fromVc.view.frame = fromVcRect - - var fromVcToRect = fromVc.view.frame - fromVcToRect.origin.x = container.frame.size.width * 1 * (-0.5) - - var toVcRect = transitionContext.initialFrame(for: fromVc) - toVcRect.origin.x = container.frame.size.width - toVcRect.origin.y = 0 - toVcRect.size = container.frame.size - toVc.view.frame = toVcRect - - var toVcToRect = toVc.view.frame - toVcToRect.origin.x = 0 - - let path = UIBezierPath(rect: toVc.view.bounds) - path.lineWidth = 3 - toVc.view.layer.shadowPath = path.cgPath - toVc.view.layer.shadowColor = UIColor.darkGray.cgColor - toVc.view.layer.shadowOpacity = 3 - - if let navigationBarSnapshot = fromVc.navigationController?.view.resizableSnapshotView(from: CGRectMake(0, 0, container.frame.size.width, CGRectGetMaxY(fromVc.navigationController?.navigationBar.frame ?? .zero)), afterScreenUpdates: false, withCapInsets: .zero) { - fromVc.dd_transitionNavigationBarSnapshot = navigationBarSnapshot - fromVc.view.addSubview(navigationBarSnapshot) - } - - if fromVc.navigationController?.parent?.isKind(of: UITabBarController.self) == true && fromVc.navigationController?.viewControllers.count == 2 { - let tabBarController = fromVc.navigationController?.parent as? UITabBarController - if let tabBarSnapshot = tabBarController?.tabBar.resizableSnapshotView(from: CGRectMake(0, 0, container.frame.size.width, CGRectGetMaxY(tabBarController?.tabBar.frame ?? .zero) - CGRectGetMinY(tabBarController?.tabBar.frame ?? .zero)), afterScreenUpdates: false, withCapInsets: .zero) { - fromVc.dd_transitionTabBarSnapshot = tabBarSnapshot - tabBarSnapshot.frame = CGRectMake(0, CGRectGetMaxY(fromVc.view.frame) - tabBarSnapshot.bounds.size.height, tabBarSnapshot.bounds.size.width, tabBarSnapshot.bounds.size.height) - fromVc.view.addSubview(tabBarSnapshot) - } - } - - if fromVc.dd_transitionTabBarSnapshot != nil { - fromVc.tabBarController?.tabBar.isHidden = true - } - - fromVc.navigationController?.view.insertSubview(fromVc.view, at: 0) - fromVc.navigationController?.view.insertSubview(toVc.view, aboveSubview: fromVc.view) - - UIView.animate(withDuration: transitionDuration(using: transitionContext)) { - fromVc.view.frame = fromVcToRect - toVc.view.frame = toVcToRect - } completion: { finished in - if !transitionContext.transitionWasCancelled { - fromVc.dd_transitionNavigationBarSnapshot?.removeFromSuperview() - fromVc.dd_transitionTabBarSnapshot?.removeFromSuperview() - fromVc.view.removeFromSuperview() - toVc.view.removeFromSuperview() - container.addSubview(toVc.view) - }else{ - fromVc.dd_transitionNavigationBarSnapshot?.removeFromSuperview() - fromVc.dd_transitionNavigationBarSnapshot = nil - if fromVc.dd_transitionTabBarSnapshot != nil { - fromVc.dd_transitionTabBarSnapshot?.removeFromSuperview() - fromVc.dd_transitionTabBarSnapshot = nil - } - fromVc.view.removeFromSuperview() - toVc.view.removeFromSuperview() - container.addSubview(fromVc.view) - } - transitionContext.completeTransition(!transitionContext.transitionWasCancelled) - } - - } - - func popAnimation(using transitionContext: UIViewControllerContextTransitioning) { - let fromVc = transitionContext.viewController(forKey: .from) - let toVc = transitionContext.viewController(forKey: .to) - let container = transitionContext.containerView - guard let fromVc, let toVc else { - transitionContext.completeTransition(!transitionContext.transitionWasCancelled) - return - } - - var fromVcRect = transitionContext.initialFrame(for: fromVc) - fromVcRect.origin.x = 0 - fromVcRect.origin.y = 0 - fromVcRect.size = container.frame.size - fromVc.view.frame = fromVcRect - - var fromVcToRect = fromVc.view.frame - fromVcToRect.origin.x = container.frame.size.width - - var toVcRect = transitionContext.initialFrame(for: fromVc) - toVcRect.origin.x = container.frame.size.width * 1 * (-0.5) - toVcRect.origin.y = 0 - toVcRect.size = container.frame.size - toVc.view.frame = toVcRect - - var toVcToRect = toVc.view.frame - toVcToRect.origin.x = 0 - - let path = UIBezierPath(rect: toVc.view.bounds) - path.lineWidth = 3 - toVc.view.layer.shadowPath = path.cgPath - toVc.view.layer.shadowColor = UIColor.darkGray.cgColor - toVc.view.layer.shadowOpacity = 3 - - if let navigationBarSnapshot = fromVc.navigationController?.view.resizableSnapshotView(from: CGRectMake(0, 0, container.frame.size.width, CGRectGetMaxY(fromVc.navigationController?.navigationBar.frame ?? .zero)), afterScreenUpdates: false, withCapInsets: .zero) { - fromVc.dd_transitionNavigationBarSnapshot = navigationBarSnapshot - fromVc.view.addSubview(navigationBarSnapshot) - } - - if let transitionNavigationBarSnapshot = toVc.dd_transitionNavigationBarSnapshot { - toVc.view.addSubview(transitionNavigationBarSnapshot) - } - - if let transitionTabBarSnapshot = toVc.dd_transitionTabBarSnapshot { - toVc.view.addSubview(transitionTabBarSnapshot) - toVc.tabBarController?.tabBar.isHidden = true - } - - fromVc.navigationController?.view.addSubview(toVc.view) - fromVc.navigationController?.view.addSubview(fromVc.view) - - UIView.animate(withDuration: transitionDuration(using: transitionContext)) { - fromVc.view.frame = fromVcToRect - toVc.view.frame = toVcToRect - } completion: { finished in - if !transitionContext.transitionWasCancelled { - fromVc.dd_transitionNavigationBarSnapshot?.removeFromSuperview() - fromVc.dd_transitionNavigationBarSnapshot = nil - fromVc.view.removeFromSuperview() - toVc.dd_transitionNavigationBarSnapshot?.removeFromSuperview() - toVc.dd_transitionNavigationBarSnapshot = nil - if toVc.dd_transitionTabBarSnapshot != nil { - toVc.dd_transitionTabBarSnapshot?.removeFromSuperview() - toVc.dd_transitionTabBarSnapshot = nil - toVc.tabBarController?.tabBar.isHidden = false - } - toVc.view.removeFromSuperview() - container.addSubview(toVc.view) - toVc.view.frame = container.bounds - }else{ - fromVc.dd_transitionNavigationBarSnapshot?.removeFromSuperview() - fromVc.dd_transitionNavigationBarSnapshot = nil - fromVc.view.removeFromSuperview() - toVc.view.removeFromSuperview() - container.addSubview(fromVc.view) - fromVc.view.frame = container.bounds - } - transitionContext.completeTransition(!transitionContext.transitionWasCancelled) - } - } -} - -fileprivate extension UIViewController { - struct DDUIViewControllerKey { - static var transitionNavigationBarSnapshot : UInt8 = 1 << 0 - static var transitionTabBarSnapshot : UInt8 = 1 << 1 - } - - var dd_transitionNavigationBarSnapshot: UIView? { - get { - return objc_getAssociatedObject(self, &DDUIViewControllerKey.transitionNavigationBarSnapshot) as? UIView - } - set { - objc_setAssociatedObject(self, &DDUIViewControllerKey.transitionNavigationBarSnapshot, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - var dd_transitionTabBarSnapshot : UIView? { - get { - return objc_getAssociatedObject(self, &DDUIViewControllerKey.transitionTabBarSnapshot) as? UIView - } - set { - objc_setAssociatedObject(self, &DDUIViewControllerKey.transitionTabBarSnapshot, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } -} diff --git a/Pods/DDUIKit/LICENSE b/Pods/DDUIKit/LICENSE deleted file mode 100644 index 76799c7..0000000 --- a/Pods/DDUIKit/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2024 ddisfriend - -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. diff --git a/Pods/DDUIKit/README.md b/Pods/DDUIKit/README.md deleted file mode 100644 index e177916..0000000 --- a/Pods/DDUIKit/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# DDUIKit - -[![CI Status](https://img.shields.io/travis/ddisfriend/DDUIKit.svg?style=flat)](https://travis-ci.org/ddisfriend/DDUIKit) -[![Version](https://img.shields.io/cocoapods/v/DDUIKit.svg?style=flat)](https://cocoapods.org/pods/DDUIKit) -[![License](https://img.shields.io/cocoapods/l/DDUIKit.svg?style=flat)](https://cocoapods.org/pods/DDUIKit) -[![Platform](https://img.shields.io/cocoapods/p/DDUIKit.svg?style=flat)](https://cocoapods.org/pods/DDUIKit) - -## Example - -To run the example project, clone the repo, and run `pod install` from the Example directory first. - -## Requirements - -## Installation - -DDUIKit is available through [CocoaPods](https://cocoapods.org). To install -it, simply add the following line to your Podfile: - -```ruby -pod 'DDUIKit' -``` - -## Author - -ddisfriend, chemailaddress2@gmail.com - -## License - -DDUIKit is available under the MIT license. See the LICENSE file for more info. diff --git a/Pods/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private/Classes/ApplicationInfo/ApplicationInfo.swift b/Pods/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private/Classes/ApplicationInfo/ApplicationInfo.swift deleted file mode 100644 index 23a8e8f..0000000 --- a/Pods/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private/Classes/ApplicationInfo/ApplicationInfo.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// ApplicationInfo.swift -// DDSystemToolKit_Private -// Created by DDIsFriend on 2023/9/12. -// -import Foundation - -public let APPINFO = ApplicationInfo.default -open class ApplicationInfo { - public static let `default` = ApplicationInfo() - - public func bundleVersionShort() -> String { - if let info = Bundle.main.infoDictionary,let version = info["CFBundleShortVersionString"] as? String { - return version - } - return "未知" - } - - public func bundleVersion() -> String { - if let info = Bundle.main.infoDictionary,let version = info["CFBundleVersion"] as? String { - return version - } - return "未知" - } -} diff --git a/Pods/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private/Classes/DeviceInfo/DeviceInfo.swift b/Pods/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private/Classes/DeviceInfo/DeviceInfo.swift deleted file mode 100644 index f4ea993..0000000 --- a/Pods/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private/Classes/DeviceInfo/DeviceInfo.swift +++ /dev/null @@ -1,59 +0,0 @@ -// -// DeviceInfo.swift -// DDSystemToolKit_Private -// Created by DDIsFriend on 2023/9/12. -// - -import Foundation - -public let DEVICEINFO = DeviceInfo.default -open class DeviceInfo { - public static let `default` = DeviceInfo() - - public func deviceModel() -> String { - var systemInfo = utsname() - uname(&systemInfo) - - let versionCode: String = String(validatingUTF8: NSString(bytes: &systemInfo.machine, length: Int(_SYS_NAMELEN), encoding: String.Encoding.ascii.rawValue)!.utf8String!)! - - switch versionCode { - /*** iPhone ***/ - case "iPhone5,1", "iPhone5,2": return "iPhone5" - case "iPhone5,3", "iPhone5,4": return "iPhone5C" - case "iPhone6,1", "iPhone6,2": return "iPhone5S" - case "iPhone7,2": return "iPhone6" - case "iPhone7,1": return "iPhone6Plus" - case "iPhone8,1": return "iPhone6S" - case "iPhone8,2": return "iPhone6SPlus" - case "iPhone8,3", "iPhone8,4": return "iPhoneSE" - case "iPhone9,1", "iPhone9,3": return "iPhone7" - case "iPhone9,2", "iPhone9,4": return "iPhone7Plus" - case "iPhone10,1", "iPhone10,4": return "iPhone8" - case "iPhone10,2", "iPhone10,5": return "iPhone8Plus" - case "iPhone10,3", "iPhone10,6": return "iPhoneX" - case "iPhone11,2": return "iPhoneXS" - case "iPhone11,4", "iPhone11,6": return "iPhoneXS_Max" - case "iPhone11,8": return "iPhoneXR" - case "iPhone12,1": return "iPhone11" - case "iPhone12,3": return "iPhone11Pro" - case "iPhone12,5": return "iPhone11Pro_Max" - case "iPhone12,8": return "iPhoneSE2" - case "iPhone13,1": return "iPhone12Mini" - case "iPhone13,2": return "iPhone12" - case "iPhone13,3": return "iPhone12Pro" - case "iPhone13,4": return "iPhone12Pro_Max" - case "iPhone14,4": return "iPhone13Mini" - case "iPhone14,5": return "iPhone13" - case "iPhone14,2": return "iPhone13Pro" - case "iPhone14,3": return "iPhone13Pro_Max" - case "iPhone14,7": return "iPhone14" - case "iPhone14,8": return "iPhone14Plus" - case "iPhone15,2": return "iPhone14Pro" - case "iPhone15,3": return "iPhone14Pro_Max" - default: - break - } - return "未知" - } -} - diff --git a/Pods/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private/Classes/FileManager/DDFileManager.swift b/Pods/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private/Classes/FileManager/DDFileManager.swift deleted file mode 100644 index 0c12dcc..0000000 --- a/Pods/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private/Classes/FileManager/DDFileManager.swift +++ /dev/null @@ -1,62 +0,0 @@ -// -// DDFileManager.swift -// DDUtilsSwiftKit_Private -// Created by DDIsFriend on 2023/10/10. - - -import Foundation - -public let DDFM = DDFileManager.default - -open class DDFileManager { - public static let `default` = DDFileManager() - - public func calculateFile(filePath:String) -> Float { - /// 取出文件夹下所有文件数组 - let fileArr = FileManager.default.subpaths(atPath: filePath) - - var size: Float = 0 - - for file in fileArr! - { - /// 把文件名拼接到路径中 - let path = filePath.appending("/\(file)") - - /// 取出文件属性 - let floder = try! FileManager.default.attributesOfItem(atPath: path) - /// 用元组取出文件大小属性 - for (key, value) in floder - { - /// 累加文件大小 - if key == FileAttributeKey.size - { - size += (value as AnyObject).floatValue - } - } - } - - return size / 1024 / 1024 - } - - public func clearFile(filePath:String) { - // 取出文件夹下所有文件数组 - let fileArr = FileManager.default.subpaths(atPath: filePath) - - // 遍历删除 - for file in fileArr! - { - let path = filePath.appending("/\(file)") - if FileManager.default.fileExists(atPath: path) - { - do - { - try FileManager.default.removeItem(atPath: path) - } - catch - { - - } - } - } - } -} diff --git a/Pods/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private/Classes/UrlLinks/UrlLinks.swift b/Pods/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private/Classes/UrlLinks/UrlLinks.swift deleted file mode 100644 index 7fbcdc1..0000000 --- a/Pods/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private/Classes/UrlLinks/UrlLinks.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// UrlSetting.swift -// DDSystemToolKit_Private -// Created by DDIsFriend on 2023/9/12. - -import Foundation - -public let URLLINKS = UrlLinks.default -open class UrlLinks { - public static let `default` = UrlLinks() - - public enum UrlTypeEnum : String { - case phone = "tel:" - case mail = "mailto:" - case sms = "sms:" - case map = "http://maps.apple.com/?" - } - - public func openUrl(type:UrlTypeEnum,appending:String) { - var urlString = type.rawValue - urlString = urlString.appending(appending) - if let url = URL(string: urlString),UIApplication.shared.canOpenURL(url) == true { - UIApplication.shared.open(url) - } - } - - public func openSetting() { - if let url = URL(string: UIApplicationOpenSettingsURLString),UIApplication.shared.canOpenURL(url) == true { - UIApplication.shared.open(url) - } - } -} diff --git a/Pods/DDUtilsSwiftKit_Private/LICENSE b/Pods/DDUtilsSwiftKit_Private/LICENSE deleted file mode 100644 index b75c465..0000000 --- a/Pods/DDUtilsSwiftKit_Private/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2023 DDIsFriend - -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. diff --git a/Pods/DDUtilsSwiftKit_Private/README.md b/Pods/DDUtilsSwiftKit_Private/README.md deleted file mode 100644 index 8db4b09..0000000 --- a/Pods/DDUtilsSwiftKit_Private/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# DDUtilsSwiftKit_Private - -[![CI Status](https://img.shields.io/travis/DDIsFriend/DDUtilsSwiftKit_Private.svg?style=flat)](https://travis-ci.org/DDIsFriend/DDUtilsSwiftKit_Private) -[![Version](https://img.shields.io/cocoapods/v/DDUtilsSwiftKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDUtilsSwiftKit_Private) -[![License](https://img.shields.io/cocoapods/l/DDUtilsSwiftKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDUtilsSwiftKit_Private) -[![Platform](https://img.shields.io/cocoapods/p/DDUtilsSwiftKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDUtilsSwiftKit_Private) - -## Example - -To run the example project, clone the repo, and run `pod install` from the Example directory first. - -## Requirements - -## Installation - -DDUtilsSwiftKit_Private is available through [CocoaPods](https://cocoapods.org). To install -it, simply add the following line to your Podfile: - -```ruby -pod 'DDUtilsSwiftKit_Private' -``` - -## Author - -DDIsFriend, DDIsFriend@163.com - -## License - -DDUtilsSwiftKit_Private is available under the MIT license. See the LICENSE file for more info. diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/DDWebImage/UIImageView+DDWebCache.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/DDWebImage/UIImageView+DDWebCache.h deleted file mode 100644 index 142298f..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/DDWebImage/UIImageView+DDWebCache.h +++ /dev/null @@ -1,160 +0,0 @@ -// -// UIImageView+DDWebCache.h -// DDWebImageKit_Private -// Created by DDIsFriend on 2022/7/29. - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UIImageView (DDWebCache) -/** - * Set the imageView `image` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - */ -- (void)dd_setImageWithURL:(nullable NSURL *)url NS_REFINED_FOR_SWIFT; - -/** - * Set the imageView `image` with an `url` and a placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @see dd_setImageWithURL:placeholderImage:options: - */ -- (void)dd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder NS_REFINED_FOR_SWIFT; - -/** - * Set the imageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - */ -- (void)dd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options NS_REFINED_FOR_SWIFT; - -/** - * Set the imageView `image` with an `url`, placeholder, custom options and context. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - */ -- (void)dd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context; - -/** - * Set the imageView `image` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)dd_setImageWithURL:(nullable NSURL *)url - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the imageView `image` with an `url`, placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)dd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - completed:(nullable SDExternalCompletionBlock)completedBlock NS_REFINED_FOR_SWIFT; - -/** - * Set the imageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)dd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the imageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param progressBlock A block called while image is downloading - * @note the progress block is executed on a background queue - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)dd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the imageView `image` with an `url`, placeholder, custom options and context. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - * @param progressBlock A block called while image is downloading - * @note the progress block is executed on a background queue - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)dd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/DDWebImage/UIImageView+DDWebCache.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/DDWebImage/UIImageView+DDWebCache.m deleted file mode 100644 index 08eed00..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/DDWebImage/UIImageView+DDWebCache.m +++ /dev/null @@ -1,47 +0,0 @@ -// -// UIImageView+DDWebCache.m -// DDWebImageKit_Private -// Created by DDIsFriend on 2022/7/29. - -#import "UIImageView+DDWebCache.h" - -@implementation UIImageView (DDWebCache) -- (void)dd_setImageWithURL:(nullable NSURL *)url{ - [self sd_setImageWithURL:url]; -} - -- (void)dd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder{ - [self sd_setImageWithURL:url placeholderImage:placeholder]; -} - -- (void)dd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options{ - [self sd_setImageWithURL:url placeholderImage:placeholder options:options]; -} - -- (void)dd_setImageWithURL:(NSURL *)url completed:(SDExternalCompletionBlock)completedBlock{ - [self sd_setImageWithURL:url completed:completedBlock]; -} - -- (void)dd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDExternalCompletionBlock)completedBlock{ - [self sd_setImageWithURL:url placeholderImage:placeholder completed:completedBlock]; -} - -- (void)dd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDExternalCompletionBlock)completedBlock{ - [self sd_setImageWithURL:url placeholderImage:placeholder options:options completed:completedBlock]; -} - -- (void)dd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options context:(SDWebImageContext *)context{ - [self sd_setImageWithURL:url placeholderImage:placeholder options:options context:context]; -} - -- (void)dd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDImageLoaderProgressBlock)progressBlock completed:(SDExternalCompletionBlock)completedBlock{ - [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:progressBlock completed:completedBlock]; -} - -- (void)dd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options context:(SDWebImageContext *)context progress:(SDImageLoaderProgressBlock)progressBlock completed:(SDExternalCompletionBlock)completedBlock{ - [self sd_setImageWithURL:url placeholderImage:placeholder options:options context:context progress:progressBlock completed:completedBlock]; -} -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/NSButton+WebCache.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/NSButton+WebCache.h deleted file mode 100644 index 5b8035b..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/NSButton+WebCache.h +++ /dev/null @@ -1,340 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" - -#if SD_MAC - -#import "SDWebImageManager.h" - -/** - * Integrates SDWebImage async downloading and caching of remote images with NSButton. - */ -@interface NSButton (WebCache) - -#pragma mark - Image - -/** - * Get the current image URL. - */ -@property (nonatomic, strong, readonly, nullable) NSURL *sd_currentImageURL; - -/** - * Set the button `image` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url NS_REFINED_FOR_SWIFT; - -/** - * Set the button `image` with an `url` and a placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @see sd_setImageWithURL:placeholderImage:options: - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder NS_REFINED_FOR_SWIFT; - -/** - * Set the button `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options NS_REFINED_FOR_SWIFT; - -/** - * Set the button `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context; - -/** - * Set the button `image` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the button `image` with an `url`, placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - completed:(nullable SDExternalCompletionBlock)completedBlock NS_REFINED_FOR_SWIFT; - -/** - * Set the button `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the button `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param progressBlock A block called while image is downloading - * @note the progress block is executed on a background queue - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the button `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - * @param progressBlock A block called while image is downloading - * @note the progress block is executed on a background queue - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock; - -#pragma mark - Alternate Image - -/** - * Get the current alternateImage URL. - */ -@property (nonatomic, strong, readonly, nullable) NSURL *sd_currentAlternateImageURL; - -/** - * Set the button `alternateImage` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the alternateImage. - */ -- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url NS_REFINED_FOR_SWIFT; - -/** - * Set the button `alternateImage` with an `url` and a placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the alternateImage. - * @param placeholder The alternateImage to be set initially, until the alternateImage request finishes. - * @see sd_setAlternateImageWithURL:placeholderImage:options: - */ -- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder NS_REFINED_FOR_SWIFT; - -/** - * Set the button `alternateImage` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the alternateImage. - * @param placeholder The alternateImage to be set initially, until the alternateImage request finishes. - * @param options The options to use when downloading the alternateImage. @see SDWebImageOptions for the possible values. - */ -- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options NS_REFINED_FOR_SWIFT; - -/** - * Set the button `alternateImage` with an `url`, placeholder, custom options and context. - * - * The download is asynchronous and cached. - * - * @param url The url for the alternateImage. - * @param placeholder The alternateImage to be set initially, until the alternateImage request finishes. - * @param options The options to use when downloading the alternateImage. @see SDWebImageOptions for the possible values. - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - */ -- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context; - -/** - * Set the button `alternateImage` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the alternateImage. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the alternateImage parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the alternateImage was retrieved from the local cache or from the network. - * The fourth parameter is the original alternateImage url. - */ -- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the button `alternateImage` with an `url`, placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the alternateImage. - * @param placeholder The alternateImage to be set initially, until the alternateImage request finishes. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the alternateImage parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the alternateImage was retrieved from the local cache or from the network. - * The fourth parameter is the original alternateImage url. - */ -- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - completed:(nullable SDExternalCompletionBlock)completedBlock NS_REFINED_FOR_SWIFT; - -/** - * Set the button `alternateImage` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the alternateImage. - * @param placeholder The alternateImage to be set initially, until the alternateImage request finishes. - * @param options The options to use when downloading the alternateImage. @see SDWebImageOptions for the possible values. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the alternateImage parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the alternateImage was retrieved from the local cache or from the network. - * The fourth parameter is the original alternateImage url. - */ -- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the button `alternateImage` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the alternateImage. - * @param placeholder The alternateImage to be set initially, until the alternateImage request finishes. - * @param options The options to use when downloading the alternateImage. @see SDWebImageOptions for the possible values. - * @param progressBlock A block called while alternateImage is downloading - * @note the progress block is executed on a background queue - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the alternateImage parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the alternateImage was retrieved from the local cache or from the network. - * The fourth parameter is the original alternateImage url. - */ -- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the button `alternateImage` with an `url`, placeholder, custom options and context. - * - * The download is asynchronous and cached. - * - * @param url The url for the alternateImage. - * @param placeholder The alternateImage to be set initially, until the alternateImage request finishes. - * @param options The options to use when downloading the alternateImage. @see SDWebImageOptions for the possible values. - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - * @param progressBlock A block called while alternateImage is downloading - * @note the progress block is executed on a background queue - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the alternateImage parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the alternateImage was retrieved from the local cache or from the network. - * The fourth parameter is the original alternateImage url. - */ -- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock; - -#pragma mark - Cancel - -/** - * Cancel the current image download - */ -- (void)sd_cancelCurrentImageLoad; - -/** - * Cancel the current alternateImage download - */ -- (void)sd_cancelCurrentAlternateImageLoad; - -@end - -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/NSButton+WebCache.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/NSButton+WebCache.m deleted file mode 100644 index 0c083e5..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/NSButton+WebCache.m +++ /dev/null @@ -1,172 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "NSButton+WebCache.h" - -#if SD_MAC - -#import "objc/runtime.h" -#import "UIView+WebCacheOperation.h" -#import "UIView+WebCache.h" -#import "SDInternalMacros.h" - -static NSString * const SDAlternateImageOperationKey = @"NSButtonAlternateImageOperation"; - -@implementation NSButton (WebCache) - -#pragma mark - Image - -- (void)sd_setImageWithURL:(nullable NSURL *)url { - [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:nil]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder { - [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:nil]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options context:(nullable SDWebImageContext *)context { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options context:context progress:nil completed:nil]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options context:nil progress:progressBlock completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock { - self.sd_currentImageURL = url; - [self sd_internalSetImageWithURL:url - placeholderImage:placeholder - options:options - context:context - setImageBlock:nil - progress:progressBlock - completed:^(NSImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType, imageURL); - } - }]; -} - -#pragma mark - Alternate Image - -- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url { - [self sd_setAlternateImageWithURL:url placeholderImage:nil options:0 progress:nil completed:nil]; -} - -- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder { - [self sd_setAlternateImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:nil]; -} - -- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options { - [self sd_setAlternateImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil]; -} - -- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options context:(nullable SDWebImageContext *)context { - [self sd_setAlternateImageWithURL:url placeholderImage:placeholder options:options context:context progress:nil completed:nil]; -} - -- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setAlternateImageWithURL:url placeholderImage:nil options:0 progress:nil completed:completedBlock]; -} - -- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setAlternateImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:completedBlock]; -} - -- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setAlternateImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:completedBlock]; -} - -- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setAlternateImageWithURL:url placeholderImage:placeholder options:options context:nil progress:progressBlock completed:completedBlock]; -} - -- (void)sd_setAlternateImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock { - self.sd_currentAlternateImageURL = url; - - SDWebImageMutableContext *mutableContext; - if (context) { - mutableContext = [context mutableCopy]; - } else { - mutableContext = [NSMutableDictionary dictionary]; - } - mutableContext[SDWebImageContextSetImageOperationKey] = SDAlternateImageOperationKey; - @weakify(self); - [self sd_internalSetImageWithURL:url - placeholderImage:placeholder - options:options - context:mutableContext - setImageBlock:^(NSImage * _Nullable image, NSData * _Nullable imageData, SDImageCacheType cacheType, NSURL * _Nullable imageURL) { - @strongify(self); - self.alternateImage = image; - } - progress:progressBlock - completed:^(NSImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType, imageURL); - } - }]; -} - -#pragma mark - Cancel - -- (void)sd_cancelCurrentImageLoad { - [self sd_cancelImageLoadOperationWithKey:NSStringFromClass([self class])]; -} - -- (void)sd_cancelCurrentAlternateImageLoad { - [self sd_cancelImageLoadOperationWithKey:SDAlternateImageOperationKey]; -} - -#pragma mark - Private - -- (NSURL *)sd_currentImageURL { - return objc_getAssociatedObject(self, @selector(sd_currentImageURL)); -} - -- (void)setSd_currentImageURL:(NSURL *)sd_currentImageURL { - objc_setAssociatedObject(self, @selector(sd_currentImageURL), sd_currentImageURL, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (NSURL *)sd_currentAlternateImageURL { - return objc_getAssociatedObject(self, @selector(sd_currentAlternateImageURL)); -} - -- (void)setSd_currentAlternateImageURL:(NSURL *)sd_currentAlternateImageURL { - objc_setAssociatedObject(self, @selector(sd_currentAlternateImageURL), sd_currentAlternateImageURL, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -@end - -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/NSData+ImageContentType.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/NSData+ImageContentType.h deleted file mode 100644 index fb5ba60..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/NSData+ImageContentType.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * (c) Fabrice Aneche - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageCompat.h" - -/** - You can use switch case like normal enum. It's also recommended to add a default case. You should not assume anything about the raw value. - For custom coder plugin, it can also extern the enum for supported format. See `SDImageCoder` for more detailed information. - */ -typedef NSInteger SDImageFormat NS_TYPED_EXTENSIBLE_ENUM; -static const SDImageFormat SDImageFormatUndefined = -1; -static const SDImageFormat SDImageFormatJPEG = 0; -static const SDImageFormat SDImageFormatPNG = 1; -static const SDImageFormat SDImageFormatGIF = 2; -static const SDImageFormat SDImageFormatTIFF = 3; -static const SDImageFormat SDImageFormatWebP = 4; -static const SDImageFormat SDImageFormatHEIC = 5; -static const SDImageFormat SDImageFormatHEIF = 6; -static const SDImageFormat SDImageFormatPDF = 7; -static const SDImageFormat SDImageFormatSVG = 8; - -/** - NSData category about the image content type and UTI. - */ -@interface NSData (ImageContentType) - -/** - * Return image format - * - * @param data the input image data - * - * @return the image format as `SDImageFormat` (enum) - */ -+ (SDImageFormat)sd_imageFormatForImageData:(nullable NSData *)data; - -/** - * Convert SDImageFormat to UTType - * - * @param format Format as SDImageFormat - * @return The UTType as CFStringRef - * @note For unknown format, `kSDUTTypeImage` abstract type will return - */ -+ (nonnull CFStringRef)sd_UTTypeFromImageFormat:(SDImageFormat)format CF_RETURNS_NOT_RETAINED NS_SWIFT_NAME(sd_UTType(from:)); - -/** - * Convert UTType to SDImageFormat - * - * @param uttype The UTType as CFStringRef - * @return The Format as SDImageFormat - * @note For unknown type, `SDImageFormatUndefined` will return - */ -+ (SDImageFormat)sd_imageFormatFromUTType:(nonnull CFStringRef)uttype; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/NSData+ImageContentType.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/NSData+ImageContentType.m deleted file mode 100644 index 070dfdf..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/NSData+ImageContentType.m +++ /dev/null @@ -1,153 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * (c) Fabrice Aneche - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "NSData+ImageContentType.h" -#if SD_MAC -#import -#else -#import -#endif -#import "SDImageIOAnimatedCoderInternal.h" - -#define kSVGTagEnd @"" - -@implementation NSData (ImageContentType) - -+ (SDImageFormat)sd_imageFormatForImageData:(nullable NSData *)data { - if (!data) { - return SDImageFormatUndefined; - } - - // File signatures table: http://www.garykessler.net/library/file_sigs.html - uint8_t c; - [data getBytes:&c length:1]; - switch (c) { - case 0xFF: - return SDImageFormatJPEG; - case 0x89: - return SDImageFormatPNG; - case 0x47: - return SDImageFormatGIF; - case 0x49: - case 0x4D: - return SDImageFormatTIFF; - case 0x52: { - if (data.length >= 12) { - //RIFF....WEBP - NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding]; - if ([testString hasPrefix:@"RIFF"] && [testString hasSuffix:@"WEBP"]) { - return SDImageFormatWebP; - } - } - break; - } - case 0x00: { - if (data.length >= 12) { - //....ftypheic ....ftypheix ....ftyphevc ....ftyphevx - NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(4, 8)] encoding:NSASCIIStringEncoding]; - if ([testString isEqualToString:@"ftypheic"] - || [testString isEqualToString:@"ftypheix"] - || [testString isEqualToString:@"ftyphevc"] - || [testString isEqualToString:@"ftyphevx"]) { - return SDImageFormatHEIC; - } - //....ftypmif1 ....ftypmsf1 - if ([testString isEqualToString:@"ftypmif1"] || [testString isEqualToString:@"ftypmsf1"]) { - return SDImageFormatHEIF; - } - } - break; - } - case 0x25: { - if (data.length >= 4) { - //%PDF - NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(1, 3)] encoding:NSASCIIStringEncoding]; - if ([testString isEqualToString:@"PDF"]) { - return SDImageFormatPDF; - } - } - } - case 0x3C: { - // Check end with SVG tag - if ([data rangeOfData:[kSVGTagEnd dataUsingEncoding:NSUTF8StringEncoding] options:NSDataSearchBackwards range: NSMakeRange(data.length - MIN(100, data.length), MIN(100, data.length))].location != NSNotFound) { - return SDImageFormatSVG; - } - } - } - return SDImageFormatUndefined; -} - -+ (nonnull CFStringRef)sd_UTTypeFromImageFormat:(SDImageFormat)format { - CFStringRef UTType; - switch (format) { - case SDImageFormatJPEG: - UTType = kSDUTTypeJPEG; - break; - case SDImageFormatPNG: - UTType = kSDUTTypePNG; - break; - case SDImageFormatGIF: - UTType = kSDUTTypeGIF; - break; - case SDImageFormatTIFF: - UTType = kSDUTTypeTIFF; - break; - case SDImageFormatWebP: - UTType = kSDUTTypeWebP; - break; - case SDImageFormatHEIC: - UTType = kSDUTTypeHEIC; - break; - case SDImageFormatHEIF: - UTType = kSDUTTypeHEIF; - break; - case SDImageFormatPDF: - UTType = kSDUTTypePDF; - break; - case SDImageFormatSVG: - UTType = kSDUTTypeSVG; - break; - default: - // default is kUTTypeImage abstract type - UTType = kSDUTTypeImage; - break; - } - return UTType; -} - -+ (SDImageFormat)sd_imageFormatFromUTType:(CFStringRef)uttype { - if (!uttype) { - return SDImageFormatUndefined; - } - SDImageFormat imageFormat; - if (CFStringCompare(uttype, kSDUTTypeJPEG, 0) == kCFCompareEqualTo) { - imageFormat = SDImageFormatJPEG; - } else if (CFStringCompare(uttype, kSDUTTypePNG, 0) == kCFCompareEqualTo) { - imageFormat = SDImageFormatPNG; - } else if (CFStringCompare(uttype, kSDUTTypeGIF, 0) == kCFCompareEqualTo) { - imageFormat = SDImageFormatGIF; - } else if (CFStringCompare(uttype, kSDUTTypeTIFF, 0) == kCFCompareEqualTo) { - imageFormat = SDImageFormatTIFF; - } else if (CFStringCompare(uttype, kSDUTTypeWebP, 0) == kCFCompareEqualTo) { - imageFormat = SDImageFormatWebP; - } else if (CFStringCompare(uttype, kSDUTTypeHEIC, 0) == kCFCompareEqualTo) { - imageFormat = SDImageFormatHEIC; - } else if (CFStringCompare(uttype, kSDUTTypeHEIF, 0) == kCFCompareEqualTo) { - imageFormat = SDImageFormatHEIF; - } else if (CFStringCompare(uttype, kSDUTTypePDF, 0) == kCFCompareEqualTo) { - imageFormat = SDImageFormatPDF; - } else if (CFStringCompare(uttype, kSDUTTypeSVG, 0) == kCFCompareEqualTo) { - imageFormat = SDImageFormatSVG; - } else { - imageFormat = SDImageFormatUndefined; - } - return imageFormat; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/NSImage+Compatibility.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/NSImage+Compatibility.h deleted file mode 100644 index 0a562cc..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/NSImage+Compatibility.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" - -#if SD_MAC - -/** - This category is provided to easily write cross-platform(AppKit/UIKit) code. For common usage, see `UIImage+Metadata.h`. - */ -@interface NSImage (Compatibility) - -/** -The underlying Core Graphics image object. This will actually use `CGImageForProposedRect` with the image size. - */ -@property (nonatomic, readonly, nullable) CGImageRef CGImage; -/** - The underlying Core Image data. This will actually use `bestRepresentationForRect` with the image size to find the `NSCIImageRep`. - */ -@property (nonatomic, readonly, nullable) CIImage *CIImage; -/** - The scale factor of the image. This wil actually use `bestRepresentationForRect` with image size and pixel size to calculate the scale factor. If failed, use the default value 1.0. Should be greater than or equal to 1.0. - */ -@property (nonatomic, readonly) CGFloat scale; - -// These are convenience methods to make AppKit's `NSImage` match UIKit's `UIImage` behavior. The scale factor should be greater than or equal to 1.0. - -/** - Returns an image object with the scale factor and orientation. The representation is created from the Core Graphics image object. - @note The difference between this and `initWithCGImage:size` is that `initWithCGImage:size` will actually create a `NSCGImageSnapshotRep` representation and always use `backingScaleFactor` as scale factor. So we should avoid it and use `NSBitmapImageRep` with `initWithCGImage:` instead. - @note The difference between this and UIKit's `UIImage` equivalent method is the way to process orientation. If the provided image orientation is not equal to Up orientation, this method will firstly rotate the CGImage to the correct orientation to work compatible with `NSImageView`. However, UIKit will not actually rotate CGImage and just store it as `imageOrientation` property. - - @param cgImage A Core Graphics image object - @param scale The image scale factor - @param orientation The orientation of the image data - @return The image object - */ -- (nonnull instancetype)initWithCGImage:(nonnull CGImageRef)cgImage scale:(CGFloat)scale orientation:(CGImagePropertyOrientation)orientation; - -/** - Initializes and returns an image object with the specified Core Image object. The representation is `NSCIImageRep`. - - @param ciImage A Core Image image object - @param scale The image scale factor - @param orientation The orientation of the image data - @return The image object - */ -- (nonnull instancetype)initWithCIImage:(nonnull CIImage *)ciImage scale:(CGFloat)scale orientation:(CGImagePropertyOrientation)orientation; - -/** - Returns an image object with the scale factor. The representation is created from the image data. - @note The difference between these this and `initWithData:` is that `initWithData:` will always use `backingScaleFactor` as scale factor. - - @param data The image data - @param scale The image scale factor - @return The image object - */ -- (nullable instancetype)initWithData:(nonnull NSData *)data scale:(CGFloat)scale; - -@end - -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/NSImage+Compatibility.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/NSImage+Compatibility.m deleted file mode 100644 index ce67151..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/NSImage+Compatibility.m +++ /dev/null @@ -1,120 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "NSImage+Compatibility.h" - -#if SD_MAC - -#import "SDImageCoderHelper.h" - -@implementation NSImage (Compatibility) - -- (nullable CGImageRef)CGImage { - NSRect imageRect = NSMakeRect(0, 0, self.size.width, self.size.height); - CGImageRef cgImage = [self CGImageForProposedRect:&imageRect context:nil hints:nil]; - return cgImage; -} - -- (nullable CIImage *)CIImage { - NSRect imageRect = NSMakeRect(0, 0, self.size.width, self.size.height); - NSImageRep *imageRep = [self bestRepresentationForRect:imageRect context:nil hints:nil]; - if (![imageRep isKindOfClass:NSCIImageRep.class]) { - return nil; - } - return ((NSCIImageRep *)imageRep).CIImage; -} - -- (CGFloat)scale { - CGFloat scale = 1; - NSRect imageRect = NSMakeRect(0, 0, self.size.width, self.size.height); - NSImageRep *imageRep = [self bestRepresentationForRect:imageRect context:nil hints:nil]; - CGFloat width = imageRep.size.width; - CGFloat height = imageRep.size.height; - CGFloat pixelWidth = (CGFloat)imageRep.pixelsWide; - CGFloat pixelHeight = (CGFloat)imageRep.pixelsHigh; - if (width > 0 && height > 0) { - CGFloat widthScale = pixelWidth / width; - CGFloat heightScale = pixelHeight / height; - if (widthScale == heightScale && widthScale >= 1) { - // Protect because there may be `NSImageRepMatchesDevice` (0) - scale = widthScale; - } - } - - return scale; -} - -- (instancetype)initWithCGImage:(nonnull CGImageRef)cgImage scale:(CGFloat)scale orientation:(CGImagePropertyOrientation)orientation { - NSBitmapImageRep *imageRep; - if (orientation != kCGImagePropertyOrientationUp) { - // AppKit design is different from UIKit. Where CGImage based image rep does not respect to any orientation. Only data based image rep which contains the EXIF metadata can automatically detect orientation. - // This should be nonnull, until the memory is exhausted cause `CGBitmapContextCreate` failed. - CGImageRef rotatedCGImage = [SDImageCoderHelper CGImageCreateDecoded:cgImage orientation:orientation]; - imageRep = [[NSBitmapImageRep alloc] initWithCGImage:rotatedCGImage]; - CGImageRelease(rotatedCGImage); - } else { - imageRep = [[NSBitmapImageRep alloc] initWithCGImage:cgImage]; - } - if (scale < 1) { - scale = 1; - } - CGFloat pixelWidth = imageRep.pixelsWide; - CGFloat pixelHeight = imageRep.pixelsHigh; - NSSize size = NSMakeSize(pixelWidth / scale, pixelHeight / scale); - self = [self initWithSize:size]; - if (self) { - imageRep.size = size; - [self addRepresentation:imageRep]; - } - return self; -} - -- (instancetype)initWithCIImage:(nonnull CIImage *)ciImage scale:(CGFloat)scale orientation:(CGImagePropertyOrientation)orientation { - NSCIImageRep *imageRep; - if (orientation != kCGImagePropertyOrientationUp) { - CIImage *rotatedCIImage = [ciImage imageByApplyingOrientation:orientation]; - imageRep = [[NSCIImageRep alloc] initWithCIImage:rotatedCIImage]; - } else { - imageRep = [[NSCIImageRep alloc] initWithCIImage:ciImage]; - } - if (scale < 1) { - scale = 1; - } - CGFloat pixelWidth = imageRep.pixelsWide; - CGFloat pixelHeight = imageRep.pixelsHigh; - NSSize size = NSMakeSize(pixelWidth / scale, pixelHeight / scale); - self = [self initWithSize:size]; - if (self) { - imageRep.size = size; - [self addRepresentation:imageRep]; - } - return self; -} - -- (instancetype)initWithData:(nonnull NSData *)data scale:(CGFloat)scale { - NSBitmapImageRep *imageRep = [[NSBitmapImageRep alloc] initWithData:data]; - if (!imageRep) { - return nil; - } - if (scale < 1) { - scale = 1; - } - CGFloat pixelWidth = imageRep.pixelsWide; - CGFloat pixelHeight = imageRep.pixelsHigh; - NSSize size = NSMakeSize(pixelWidth / scale, pixelHeight / scale); - self = [self initWithSize:size]; - if (self) { - imageRep.size = size; - [self addRepresentation:imageRep]; - } - return self; -} - -@end - -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImage.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImage.h deleted file mode 100644 index 2e208cd..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImage.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" -#import "SDImageCoder.h" - - -/** - This is the protocol for SDAnimatedImage class only but not for SDAnimatedImageCoder. If you want to provide a custom animated image class with full advanced function, you can conform to this instead of the base protocol. - */ -@protocol SDAnimatedImage - -@required -/** - Initializes and returns the image object with the specified data, scale factor and possible animation decoding options. - @note We use this to create animated image instance for normal animation decoding. - - @param data The data object containing the image data. - @param scale The scale factor to assume when interpreting the image data. Applying a scale factor of 1.0 results in an image whose size matches the pixel-based dimensions of the image. Applying a different scale factor changes the size of the image as reported by the `size` property. - @param options A dictionary containing any animation decoding options. - @return An initialized object - */ -- (nullable instancetype)initWithData:(nonnull NSData *)data scale:(CGFloat)scale options:(nullable SDImageCoderOptions *)options; - -/** - Initializes the image with an animated coder. You can use the coder to decode the image frame later. - @note We use this with animated coder which conforms to `SDProgressiveImageCoder` for progressive animation decoding. - - @param animatedCoder An animated coder which conform `SDAnimatedImageCoder` protocol - @param scale The scale factor to assume when interpreting the image data. Applying a scale factor of 1.0 results in an image whose size matches the pixel-based dimensions of the image. Applying a different scale factor changes the size of the image as reported by the `size` property. - @return An initialized object - */ -- (nullable instancetype)initWithAnimatedCoder:(nonnull id)animatedCoder scale:(CGFloat)scale; - -@optional -// These methods are used for optional advanced feature, like image frame preloading. -/** - Pre-load all animated image frame into memory. Then later frame image request can directly return the frame for index without decoding. - This method may be called on background thread. - - @note If one image instance is shared by lots of imageViews, the CPU performance for large animated image will drop down because the request frame index will be random (not in order) and the decoder should take extra effort to keep it re-entrant. You can use this to reduce CPU usage if need. Attention this will consume more memory usage. - */ -- (void)preloadAllFrames; - -/** - Unload all animated image frame from memory if are already pre-loaded. Then later frame image request need decoding. You can use this to free up the memory usage if need. - */ -- (void)unloadAllFrames; - -/** - Returns a Boolean value indicating whether all animated image frames are already pre-loaded into memory. - */ -@property (nonatomic, assign, readonly, getter=isAllFramesLoaded) BOOL allFramesLoaded; - -/** - Return the animated image coder if the image is created with `initWithAnimatedCoder:scale:` method. - @note We use this with animated coder which conforms to `SDProgressiveImageCoder` for progressive animation decoding. - */ -@property (nonatomic, strong, readonly, nullable) id animatedCoder; - -@end - -/** - The image class which supports animating on `SDAnimatedImageView`. You can also use it on normal UIImageView/NSImageView. - */ -@interface SDAnimatedImage : UIImage - -// This class override these methods from UIImage(NSImage), and it supports NSSecureCoding. -// You should use these methods to create a new animated image. Use other methods just call super instead. -// Pay attention, when the animated image frame count <= 1, all the `SDAnimatedImageProvider` protocol methods will return nil or 0 value, you'd better check the frame count before usage and keep fallback. -+ (nullable instancetype)imageNamed:(nonnull NSString *)name; // Cache in memory, no Asset Catalog support -#if __has_include() -+ (nullable instancetype)imageNamed:(nonnull NSString *)name inBundle:(nullable NSBundle *)bundle compatibleWithTraitCollection:(nullable UITraitCollection *)traitCollection; // Cache in memory, no Asset Catalog support -#else -+ (nullable instancetype)imageNamed:(nonnull NSString *)name inBundle:(nullable NSBundle *)bundle; // Cache in memory, no Asset Catalog support -#endif -+ (nullable instancetype)imageWithContentsOfFile:(nonnull NSString *)path; -+ (nullable instancetype)imageWithData:(nonnull NSData *)data; -+ (nullable instancetype)imageWithData:(nonnull NSData *)data scale:(CGFloat)scale; -- (nullable instancetype)initWithContentsOfFile:(nonnull NSString *)path; -- (nullable instancetype)initWithData:(nonnull NSData *)data; -- (nullable instancetype)initWithData:(nonnull NSData *)data scale:(CGFloat)scale; - -/** - Current animated image format. - */ -@property (nonatomic, assign, readonly) SDImageFormat animatedImageFormat; - -/** - Current animated image data, you can use this to grab the compressed format data and create another animated image instance. - If this image instance is an animated image created by using animated image coder (which means using the API listed above or using `initWithAnimatedCoder:scale:`), this property is non-nil. - */ -@property (nonatomic, copy, readonly, nullable) NSData *animatedImageData; - -/** - The scale factor of the image. - - @note For UIKit, this just call super instead. - @note For AppKit, `NSImage` can contains multiple image representations with different scales. However, this class does not do that from the design. We process the scale like UIKit. This will actually be calculated from image size and pixel size. - */ -@property (nonatomic, readonly) CGFloat scale; - -// By default, animated image frames are returned by decoding just in time without keeping into memory. But you can choose to preload them into memory as well, See the description in `SDAnimatedImage` protocol. -// After preloaded, there is no huge difference on performance between this and UIImage's `animatedImageWithImages:duration:`. But UIImage's animation have some issues such like blanking and pausing during segue when using in `UIImageView`. It's recommend to use only if need. -- (void)preloadAllFrames; -- (void)unloadAllFrames; -@property (nonatomic, assign, readonly, getter=isAllFramesLoaded) BOOL allFramesLoaded; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImage.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImage.m deleted file mode 100644 index f98c492..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImage.m +++ /dev/null @@ -1,392 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDAnimatedImage.h" -#import "NSImage+Compatibility.h" -#import "SDImageCoder.h" -#import "SDImageCodersManager.h" -#import "SDImageFrame.h" -#import "UIImage+MemoryCacheCost.h" -#import "UIImage+Metadata.h" -#import "UIImage+MultiFormat.h" -#import "SDImageCoderHelper.h" -#import "SDImageAssetManager.h" -#import "objc/runtime.h" - -static CGFloat SDImageScaleFromPath(NSString *string) { - if (string.length == 0 || [string hasSuffix:@"/"]) return 1; - NSString *name = string.stringByDeletingPathExtension; - __block CGFloat scale = 1; - - NSRegularExpression *pattern = [NSRegularExpression regularExpressionWithPattern:@"@[0-9]+\\.?[0-9]*x$" options:NSRegularExpressionAnchorsMatchLines error:nil]; - [pattern enumerateMatchesInString:name options:kNilOptions range:NSMakeRange(0, name.length) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) { - scale = [string substringWithRange:NSMakeRange(result.range.location + 1, result.range.length - 2)].doubleValue; - }]; - - return scale; -} - -@interface SDAnimatedImage () - -@property (nonatomic, strong) id animatedCoder; -@property (nonatomic, assign, readwrite) SDImageFormat animatedImageFormat; -@property (atomic, copy) NSArray *loadedAnimatedImageFrames; // Mark as atomic to keep thread-safe -@property (nonatomic, assign, getter=isAllFramesLoaded) BOOL allFramesLoaded; - -@end - -@implementation SDAnimatedImage -@dynamic scale; // call super - -#pragma mark - UIImage override method -+ (instancetype)imageNamed:(NSString *)name { -#if __has_include() - return [self imageNamed:name inBundle:nil compatibleWithTraitCollection:nil]; -#else - return [self imageNamed:name inBundle:nil]; -#endif -} - -#if __has_include() -+ (instancetype)imageNamed:(NSString *)name inBundle:(NSBundle *)bundle compatibleWithTraitCollection:(UITraitCollection *)traitCollection { - if (!traitCollection) { - traitCollection = UIScreen.mainScreen.traitCollection; - } - CGFloat scale = traitCollection.displayScale; - return [self imageNamed:name inBundle:bundle scale:scale]; -} -#else -+ (instancetype)imageNamed:(NSString *)name inBundle:(NSBundle *)bundle { - return [self imageNamed:name inBundle:bundle scale:0]; -} -#endif - -// 0 scale means automatically check -+ (instancetype)imageNamed:(NSString *)name inBundle:(NSBundle *)bundle scale:(CGFloat)scale { - if (!name) { - return nil; - } - if (!bundle) { - bundle = [NSBundle mainBundle]; - } - SDImageAssetManager *assetManager = [SDImageAssetManager sharedAssetManager]; - SDAnimatedImage *image = (SDAnimatedImage *)[assetManager imageForName:name]; - if ([image isKindOfClass:[SDAnimatedImage class]]) { - return image; - } - NSString *path = [assetManager getPathForName:name bundle:bundle preferredScale:&scale]; - if (!path) { - return image; - } - NSData *data = [NSData dataWithContentsOfFile:path]; - if (!data) { - return image; - } - image = [[self alloc] initWithData:data scale:scale]; - if (image) { - [assetManager storeImage:image forName:name]; - } - - return image; -} - -+ (instancetype)imageWithContentsOfFile:(NSString *)path { - return [[self alloc] initWithContentsOfFile:path]; -} - -+ (instancetype)imageWithData:(NSData *)data { - return [[self alloc] initWithData:data]; -} - -+ (instancetype)imageWithData:(NSData *)data scale:(CGFloat)scale { - return [[self alloc] initWithData:data scale:scale]; -} - -- (instancetype)initWithContentsOfFile:(NSString *)path { - NSData *data = [NSData dataWithContentsOfFile:path]; - return [self initWithData:data scale:SDImageScaleFromPath(path)]; -} - -- (instancetype)initWithData:(NSData *)data { - return [self initWithData:data scale:1]; -} - -- (instancetype)initWithData:(NSData *)data scale:(CGFloat)scale { - return [self initWithData:data scale:scale options:nil]; -} - -- (instancetype)initWithData:(NSData *)data scale:(CGFloat)scale options:(SDImageCoderOptions *)options { - if (!data || data.length == 0) { - return nil; - } - data = [data copy]; // avoid mutable data - id animatedCoder = nil; - for (idcoder in [SDImageCodersManager sharedManager].coders.reverseObjectEnumerator) { - if ([coder conformsToProtocol:@protocol(SDAnimatedImageCoder)]) { - if ([coder canDecodeFromData:data]) { - if (!options) { - options = @{SDImageCoderDecodeScaleFactor : @(scale)}; - } - animatedCoder = [[[coder class] alloc] initWithAnimatedImageData:data options:options]; - break; - } - } - } - if (!animatedCoder) { - return nil; - } - return [self initWithAnimatedCoder:animatedCoder scale:scale]; -} - -- (instancetype)initWithAnimatedCoder:(id)animatedCoder scale:(CGFloat)scale { - if (!animatedCoder) { - return nil; - } - UIImage *image = [animatedCoder animatedImageFrameAtIndex:0]; - if (!image) { - return nil; - } -#if SD_MAC - self = [super initWithCGImage:image.CGImage scale:MAX(scale, 1) orientation:kCGImagePropertyOrientationUp]; -#else - self = [super initWithCGImage:image.CGImage scale:MAX(scale, 1) orientation:image.imageOrientation]; -#endif - if (self) { - // Only keep the animated coder if frame count > 1, save RAM usage for non-animated image format (APNG/WebP) - if (animatedCoder.animatedImageFrameCount > 1) { - _animatedCoder = animatedCoder; - } - NSData *data = [animatedCoder animatedImageData]; - SDImageFormat format = [NSData sd_imageFormatForImageData:data]; - _animatedImageFormat = format; - } - return self; -} - -#pragma mark - Preload -- (void)preloadAllFrames { - if (!_animatedCoder) { - return; - } - if (!self.isAllFramesLoaded) { - NSMutableArray *frames = [NSMutableArray arrayWithCapacity:self.animatedImageFrameCount]; - for (size_t i = 0; i < self.animatedImageFrameCount; i++) { - UIImage *image = [self animatedImageFrameAtIndex:i]; - NSTimeInterval duration = [self animatedImageDurationAtIndex:i]; - SDImageFrame *frame = [SDImageFrame frameWithImage:image duration:duration]; // through the image should be nonnull, used as nullable for `animatedImageFrameAtIndex:` - [frames addObject:frame]; - } - self.loadedAnimatedImageFrames = frames; - self.allFramesLoaded = YES; - } -} - -- (void)unloadAllFrames { - if (!_animatedCoder) { - return; - } - if (self.isAllFramesLoaded) { - self.loadedAnimatedImageFrames = nil; - self.allFramesLoaded = NO; - } -} - -#pragma mark - NSSecureCoding -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - self = [super initWithCoder:aDecoder]; - if (self) { - _animatedImageFormat = [aDecoder decodeIntegerForKey:NSStringFromSelector(@selector(animatedImageFormat))]; - NSData *animatedImageData = [aDecoder decodeObjectOfClass:[NSData class] forKey:NSStringFromSelector(@selector(animatedImageData))]; - if (!animatedImageData) { - return self; - } - CGFloat scale = self.scale; - id animatedCoder = nil; - for (idcoder in [SDImageCodersManager sharedManager].coders.reverseObjectEnumerator) { - if ([coder conformsToProtocol:@protocol(SDAnimatedImageCoder)]) { - if ([coder canDecodeFromData:animatedImageData]) { - animatedCoder = [[[coder class] alloc] initWithAnimatedImageData:animatedImageData options:@{SDImageCoderDecodeScaleFactor : @(scale)}]; - break; - } - } - } - if (!animatedCoder) { - return self; - } - if (animatedCoder.animatedImageFrameCount > 1) { - _animatedCoder = animatedCoder; - } - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - [super encodeWithCoder:aCoder]; - [aCoder encodeInteger:self.animatedImageFormat forKey:NSStringFromSelector(@selector(animatedImageFormat))]; - NSData *animatedImageData = self.animatedImageData; - if (animatedImageData) { - [aCoder encodeObject:animatedImageData forKey:NSStringFromSelector(@selector(animatedImageData))]; - } -} - -+ (BOOL)supportsSecureCoding { - return YES; -} - -#pragma mark - SDAnimatedImageProvider - -- (NSData *)animatedImageData { - return [self.animatedCoder animatedImageData]; -} - -- (NSUInteger)animatedImageLoopCount { - return [self.animatedCoder animatedImageLoopCount]; -} - -- (NSUInteger)animatedImageFrameCount { - return [self.animatedCoder animatedImageFrameCount]; -} - -- (UIImage *)animatedImageFrameAtIndex:(NSUInteger)index { - if (index >= self.animatedImageFrameCount) { - return nil; - } - if (self.isAllFramesLoaded) { - SDImageFrame *frame = [self.loadedAnimatedImageFrames objectAtIndex:index]; - return frame.image; - } - return [self.animatedCoder animatedImageFrameAtIndex:index]; -} - -- (NSTimeInterval)animatedImageDurationAtIndex:(NSUInteger)index { - if (index >= self.animatedImageFrameCount) { - return 0; - } - if (self.isAllFramesLoaded) { - SDImageFrame *frame = [self.loadedAnimatedImageFrames objectAtIndex:index]; - return frame.duration; - } - return [self.animatedCoder animatedImageDurationAtIndex:index]; -} - -@end - -@implementation SDAnimatedImage (MemoryCacheCost) - -- (NSUInteger)sd_memoryCost { - NSNumber *value = objc_getAssociatedObject(self, @selector(sd_memoryCost)); - if (value != nil) { - return value.unsignedIntegerValue; - } - - CGImageRef imageRef = self.CGImage; - if (!imageRef) { - return 0; - } - NSUInteger bytesPerFrame = CGImageGetBytesPerRow(imageRef) * CGImageGetHeight(imageRef); - NSUInteger frameCount = 1; - if (self.isAllFramesLoaded) { - frameCount = self.animatedImageFrameCount; - } - frameCount = frameCount > 0 ? frameCount : 1; - NSUInteger cost = bytesPerFrame * frameCount; - return cost; -} - -@end - -@implementation SDAnimatedImage (Metadata) - -- (BOOL)sd_isAnimated { - return YES; -} - -- (NSUInteger)sd_imageLoopCount { - return self.animatedImageLoopCount; -} - -- (void)setSd_imageLoopCount:(NSUInteger)sd_imageLoopCount { - return; -} - -- (NSUInteger)sd_imageFrameCount { - return self.animatedImageFrameCount; -} - -- (SDImageFormat)sd_imageFormat { - return self.animatedImageFormat; -} - -- (void)setSd_imageFormat:(SDImageFormat)sd_imageFormat { - return; -} - -- (BOOL)sd_isVector { - return NO; -} - -@end - -@implementation SDAnimatedImage (MultiFormat) - -+ (nullable UIImage *)sd_imageWithData:(nullable NSData *)data { - return [self sd_imageWithData:data scale:1]; -} - -+ (nullable UIImage *)sd_imageWithData:(nullable NSData *)data scale:(CGFloat)scale { - return [self sd_imageWithData:data scale:scale firstFrameOnly:NO]; -} - -+ (nullable UIImage *)sd_imageWithData:(nullable NSData *)data scale:(CGFloat)scale firstFrameOnly:(BOOL)firstFrameOnly { - if (!data) { - return nil; - } - return [[self alloc] initWithData:data scale:scale options:@{SDImageCoderDecodeFirstFrameOnly : @(firstFrameOnly)}]; -} - -- (nullable NSData *)sd_imageData { - NSData *imageData = self.animatedImageData; - if (imageData) { - return imageData; - } else { - return [self sd_imageDataAsFormat:self.animatedImageFormat]; - } -} - -- (nullable NSData *)sd_imageDataAsFormat:(SDImageFormat)imageFormat { - return [self sd_imageDataAsFormat:imageFormat compressionQuality:1]; -} - -- (nullable NSData *)sd_imageDataAsFormat:(SDImageFormat)imageFormat compressionQuality:(double)compressionQuality { - return [self sd_imageDataAsFormat:imageFormat compressionQuality:compressionQuality firstFrameOnly:NO]; -} - -- (nullable NSData *)sd_imageDataAsFormat:(SDImageFormat)imageFormat compressionQuality:(double)compressionQuality firstFrameOnly:(BOOL)firstFrameOnly { - if (firstFrameOnly) { - // First frame, use super implementation - return [super sd_imageDataAsFormat:imageFormat compressionQuality:compressionQuality firstFrameOnly:firstFrameOnly]; - } - NSUInteger frameCount = self.animatedImageFrameCount; - if (frameCount <= 1) { - // Static image, use super implementation - return [super sd_imageDataAsFormat:imageFormat compressionQuality:compressionQuality firstFrameOnly:firstFrameOnly]; - } - // Keep animated image encoding, loop each frame. - NSMutableArray *frames = [NSMutableArray arrayWithCapacity:frameCount]; - for (size_t i = 0; i < frameCount; i++) { - UIImage *image = [self animatedImageFrameAtIndex:i]; - NSTimeInterval duration = [self animatedImageDurationAtIndex:i]; - SDImageFrame *frame = [SDImageFrame frameWithImage:image duration:duration]; - [frames addObject:frame]; - } - UIImage *animatedImage = [SDImageCoderHelper animatedImageWithFrames:frames]; - NSData *imageData = [animatedImage sd_imageDataAsFormat:imageFormat compressionQuality:compressionQuality firstFrameOnly:firstFrameOnly]; - return imageData; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImagePlayer.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImagePlayer.h deleted file mode 100644 index e71e239..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImagePlayer.h +++ /dev/null @@ -1,112 +0,0 @@ -/* -* This file is part of the SDWebImage package. -* (c) Olivier Poitrey -* -* For the full copyright and license information, please view the LICENSE -* file that was distributed with this source code. -*/ - -#import -#import "SDWebImageCompat.h" -#import "SDImageCoder.h" - -typedef NS_ENUM(NSUInteger, SDAnimatedImagePlaybackMode) { - /** - * From first to last frame and stop or next loop. - */ - SDAnimatedImagePlaybackModeNormal = 0, - /** - * From last frame to first frame and stop or next loop. - */ - SDAnimatedImagePlaybackModeReverse, - /** - * From first frame to last frame and reverse again, like reciprocating. - */ - SDAnimatedImagePlaybackModeBounce, - /** - * From last frame to first frame and reverse again, like reversed reciprocating. - */ - SDAnimatedImagePlaybackModeReversedBounce, -}; - -/// A player to control the playback of animated image, which can be used to drive Animated ImageView or any rendering usage, like CALayer/WatchKit/SwiftUI rendering. -@interface SDAnimatedImagePlayer : NSObject - -/// Current playing frame image. This value is KVO Compliance. -@property (nonatomic, readonly, nullable) UIImage *currentFrame; - -/// Current frame index, zero based. This value is KVO Compliance. -@property (nonatomic, readonly) NSUInteger currentFrameIndex; - -/// Current loop count since its latest animating. This value is KVO Compliance. -@property (nonatomic, readonly) NSUInteger currentLoopCount; - -/// Total frame count for animated image rendering. Defaults is animated image's frame count. -/// @note For progressive animation, you can update this value when your provider receive more frames. -@property (nonatomic, assign) NSUInteger totalFrameCount; - -/// Total loop count for animated image rendering. Default is animated image's loop count. -@property (nonatomic, assign) NSUInteger totalLoopCount; - -/// The animation playback rate. Default is 1.0 -/// `1.0` means the normal speed. -/// `0.0` means stopping the animation. -/// `0.0-1.0` means the slow speed. -/// `> 1.0` means the fast speed. -/// `< 0.0` is not supported currently and stop animation. (may support reverse playback in the future) -@property (nonatomic, assign) double playbackRate; - -/// Asynchronous setup animation playback mode. Default mode is SDAnimatedImagePlaybackModeNormal. -@property (nonatomic, assign) SDAnimatedImagePlaybackMode playbackMode; - -/// Provide a max buffer size by bytes. This is used to adjust frame buffer count and can be useful when the decoding cost is expensive (such as Animated WebP software decoding). Default is 0. -/// `0` means automatically adjust by calculating current memory usage. -/// `1` means without any buffer cache, each of frames will be decoded and then be freed after rendering. (Lowest Memory and Highest CPU) -/// `NSUIntegerMax` means cache all the buffer. (Lowest CPU and Highest Memory) -@property (nonatomic, assign) NSUInteger maxBufferSize; - -/// You can specify a runloop mode to let it rendering. -/// Default is NSRunLoopCommonModes on multi-core device, NSDefaultRunLoopMode on single-core device -@property (nonatomic, copy, nonnull) NSRunLoopMode runLoopMode; - -/// Create a player with animated image provider. If the provider's `animatedImageFrameCount` is less than 1, returns nil. -/// The provider can be any protocol implementation, like `SDAnimatedImage`, `SDImageGIFCoder`, etc. -/// @note This provider can represent mutable content, like progressive animated loading. But you need to update the frame count by yourself -/// @param provider The animated provider -- (nullable instancetype)initWithProvider:(nonnull id)provider; - -/// Create a player with animated image provider. If the provider's `animatedImageFrameCount` is less than 1, returns nil. -/// The provider can be any protocol implementation, like `SDAnimatedImage` or `SDImageGIFCoder`, etc. -/// @note This provider can represent mutable content, like progressive animated loading. But you need to update the frame count by yourself -/// @param provider The animated provider -+ (nullable instancetype)playerWithProvider:(nonnull id)provider; - -/// The handler block when current frame and index changed. -@property (nonatomic, copy, nullable) void (^animationFrameHandler)(NSUInteger index, UIImage * _Nonnull frame); - -/// The handler block when one loop count finished. -@property (nonatomic, copy, nullable) void (^animationLoopHandler)(NSUInteger loopCount); - -/// Return the status whether animation is playing. -@property (nonatomic, readonly) BOOL isPlaying; - -/// Start the animation. Or resume the previously paused animation. -- (void)startPlaying; - -/// Pause the animation. Keep the current frame index and loop count. -- (void)pausePlaying; - -/// Stop the animation. Reset the current frame index and loop count. -- (void)stopPlaying; - -/// Seek to the desired frame index and loop count. -/// @note This can be used for advanced control like progressive loading, or skipping specify frames. -/// @param index The frame index -/// @param loopCount The loop count -- (void)seekToFrameAtIndex:(NSUInteger)index loopCount:(NSUInteger)loopCount; - -/// Clear the frame cache buffer. The frame cache buffer size can be controlled by `maxBufferSize`. -/// By default, when stop or pause the animation, the frame buffer is still kept to ready for the next restart -- (void)clearFrameBuffer; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImagePlayer.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImagePlayer.m deleted file mode 100644 index a03f78b..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImagePlayer.m +++ /dev/null @@ -1,406 +0,0 @@ -/* -* This file is part of the SDWebImage package. -* (c) Olivier Poitrey -* -* For the full copyright and license information, please view the LICENSE -* file that was distributed with this source code. -*/ - -#import "SDAnimatedImagePlayer.h" -#import "NSImage+Compatibility.h" -#import "SDDisplayLink.h" -#import "SDDeviceHelper.h" -#import "SDInternalMacros.h" - -@interface SDAnimatedImagePlayer () { - SD_LOCK_DECLARE(_lock); - NSRunLoopMode _runLoopMode; -} - -@property (nonatomic, strong, readwrite) UIImage *currentFrame; -@property (nonatomic, assign, readwrite) NSUInteger currentFrameIndex; -@property (nonatomic, assign, readwrite) NSUInteger currentLoopCount; -@property (nonatomic, strong) id animatedProvider; -@property (nonatomic, strong) NSMutableDictionary *frameBuffer; -@property (nonatomic, assign) NSTimeInterval currentTime; -@property (nonatomic, assign) BOOL bufferMiss; -@property (nonatomic, assign) BOOL needsDisplayWhenImageBecomesAvailable; -@property (nonatomic, assign) BOOL shouldReverse; -@property (nonatomic, assign) NSUInteger maxBufferCount; -@property (nonatomic, strong) NSOperationQueue *fetchQueue; -@property (nonatomic, strong) SDDisplayLink *displayLink; - -@end - -@implementation SDAnimatedImagePlayer - -- (instancetype)initWithProvider:(id)provider { - self = [super init]; - if (self) { - NSUInteger animatedImageFrameCount = provider.animatedImageFrameCount; - // Check the frame count - if (animatedImageFrameCount <= 1) { - return nil; - } - self.totalFrameCount = animatedImageFrameCount; - // Get the current frame and loop count. - self.totalLoopCount = provider.animatedImageLoopCount; - self.animatedProvider = provider; - self.playbackRate = 1.0; - SD_LOCK_INIT(_lock); -#if SD_UIKIT - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveMemoryWarning:) name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; -#endif - } - return self; -} - -+ (instancetype)playerWithProvider:(id)provider { - SDAnimatedImagePlayer *player = [[SDAnimatedImagePlayer alloc] initWithProvider:provider]; - return player; -} - -#pragma mark - Life Cycle - -- (void)dealloc { -#if SD_UIKIT - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; -#endif -} - -- (void)didReceiveMemoryWarning:(NSNotification *)notification { - [_fetchQueue cancelAllOperations]; - [_fetchQueue addOperationWithBlock:^{ - NSNumber *currentFrameIndex = @(self.currentFrameIndex); - SD_LOCK(self->_lock); - NSArray *keys = self.frameBuffer.allKeys; - // only keep the next frame for later rendering - for (NSNumber * key in keys) { - if (![key isEqualToNumber:currentFrameIndex]) { - [self.frameBuffer removeObjectForKey:key]; - } - } - SD_UNLOCK(self->_lock); - }]; -} - -#pragma mark - Private -- (NSOperationQueue *)fetchQueue { - if (!_fetchQueue) { - _fetchQueue = [[NSOperationQueue alloc] init]; - _fetchQueue.maxConcurrentOperationCount = 1; - } - return _fetchQueue; -} - -- (NSMutableDictionary *)frameBuffer { - if (!_frameBuffer) { - _frameBuffer = [NSMutableDictionary dictionary]; - } - return _frameBuffer; -} - -- (SDDisplayLink *)displayLink { - if (!_displayLink) { - _displayLink = [SDDisplayLink displayLinkWithTarget:self selector:@selector(displayDidRefresh:)]; - [_displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:self.runLoopMode]; - [_displayLink stop]; - } - return _displayLink; -} - -- (void)setRunLoopMode:(NSRunLoopMode)runLoopMode { - if ([_runLoopMode isEqual:runLoopMode]) { - return; - } - if (_displayLink) { - if (_runLoopMode) { - [_displayLink removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:_runLoopMode]; - } - if (runLoopMode.length > 0) { - [_displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:runLoopMode]; - } - } - _runLoopMode = [runLoopMode copy]; -} - -- (NSRunLoopMode)runLoopMode { - if (!_runLoopMode) { - _runLoopMode = [[self class] defaultRunLoopMode]; - } - return _runLoopMode; -} - -#pragma mark - State Control - -- (void)setupCurrentFrame { - if (self.currentFrameIndex != 0) { - return; - } - if (self.playbackMode == SDAnimatedImagePlaybackModeReverse || - self.playbackMode == SDAnimatedImagePlaybackModeReversedBounce) { - self.currentFrameIndex = self.totalFrameCount - 1; - } - - if (!self.currentFrame && [self.animatedProvider isKindOfClass:[UIImage class]]) { - UIImage *image = (UIImage *)self.animatedProvider; - // Use the poster image if available - #if SD_MAC - UIImage *posterFrame = [[NSImage alloc] initWithCGImage:image.CGImage scale:image.scale orientation:kCGImagePropertyOrientationUp]; - #else - UIImage *posterFrame = [[UIImage alloc] initWithCGImage:image.CGImage scale:image.scale orientation:image.imageOrientation]; - #endif - if (posterFrame) { - self.currentFrame = posterFrame; - SD_LOCK(self->_lock); - self.frameBuffer[@(self.currentFrameIndex)] = self.currentFrame; - SD_UNLOCK(self->_lock); - [self handleFrameChange]; - } - } - -} - -- (void)resetCurrentFrameStatus { - // These should not trigger KVO, user don't need to receive an `index == 0, image == nil` callback. - _currentFrame = nil; - _currentFrameIndex = 0; - _currentLoopCount = 0; - _currentTime = 0; - _bufferMiss = NO; - _needsDisplayWhenImageBecomesAvailable = NO; -} - -- (void)clearFrameBuffer { - SD_LOCK(_lock); - [_frameBuffer removeAllObjects]; - SD_UNLOCK(_lock); -} - -#pragma mark - Animation Control -- (void)startPlaying { - [self.displayLink start]; - // Setup frame - [self setupCurrentFrame]; - // Calculate max buffer size - [self calculateMaxBufferCount]; -} - -- (void)stopPlaying { - [_fetchQueue cancelAllOperations]; - // Using `_displayLink` here because when UIImageView dealloc, it may trigger `[self stopAnimating]`, we already release the display link in SDAnimatedImageView's dealloc method. - [_displayLink stop]; - // We need to reset the frame status, but not trigger any handle. This can ensure next time's playing status correct. - [self resetCurrentFrameStatus]; -} - -- (void)pausePlaying { - [_fetchQueue cancelAllOperations]; - [_displayLink stop]; -} - -- (BOOL)isPlaying { - return _displayLink.isRunning; -} - -- (void)seekToFrameAtIndex:(NSUInteger)index loopCount:(NSUInteger)loopCount { - if (index >= self.totalFrameCount) { - return; - } - self.currentFrameIndex = index; - self.currentLoopCount = loopCount; - self.currentFrame = [self.animatedProvider animatedImageFrameAtIndex:index]; - [self handleFrameChange]; -} - -#pragma mark - Core Render -- (void)displayDidRefresh:(SDDisplayLink *)displayLink { - // If for some reason a wild call makes it through when we shouldn't be animating, bail. - // Early return! - if (!self.isPlaying) { - return; - } - - NSUInteger totalFrameCount = self.totalFrameCount; - if (totalFrameCount <= 1) { - // Total frame count less than 1, wrong configuration and stop animating - [self stopPlaying]; - return; - } - - NSTimeInterval playbackRate = self.playbackRate; - if (playbackRate <= 0) { - // Does not support <= 0 play rate - [self stopPlaying]; - return; - } - - // Calculate refresh duration - NSTimeInterval duration = self.displayLink.duration; - - NSUInteger currentFrameIndex = self.currentFrameIndex; - NSUInteger nextFrameIndex = (currentFrameIndex + 1) % totalFrameCount; - - if (self.playbackMode == SDAnimatedImagePlaybackModeReverse) { - nextFrameIndex = currentFrameIndex == 0 ? (totalFrameCount - 1) : (currentFrameIndex - 1) % totalFrameCount; - - } else if (self.playbackMode == SDAnimatedImagePlaybackModeBounce || - self.playbackMode == SDAnimatedImagePlaybackModeReversedBounce) { - if (currentFrameIndex == 0) { - self.shouldReverse = false; - } else if (currentFrameIndex == totalFrameCount - 1) { - self.shouldReverse = true; - } - nextFrameIndex = self.shouldReverse ? (currentFrameIndex - 1) : (currentFrameIndex + 1); - nextFrameIndex %= totalFrameCount; - } - - - // Check if we need to display new frame firstly - BOOL bufferFull = NO; - if (self.needsDisplayWhenImageBecomesAvailable) { - UIImage *currentFrame; - SD_LOCK(_lock); - currentFrame = self.frameBuffer[@(currentFrameIndex)]; - SD_UNLOCK(_lock); - - // Update the current frame - if (currentFrame) { - SD_LOCK(_lock); - // Remove the frame buffer if need - if (self.frameBuffer.count > self.maxBufferCount) { - self.frameBuffer[@(currentFrameIndex)] = nil; - } - // Check whether we can stop fetch - if (self.frameBuffer.count == totalFrameCount) { - bufferFull = YES; - } - SD_UNLOCK(_lock); - - // Update the current frame immediately - self.currentFrame = currentFrame; - [self handleFrameChange]; - - self.bufferMiss = NO; - self.needsDisplayWhenImageBecomesAvailable = NO; - } - else { - self.bufferMiss = YES; - } - } - - // Check if we have the frame buffer - if (!self.bufferMiss) { - // Then check if timestamp is reached - self.currentTime += duration; - NSTimeInterval currentDuration = [self.animatedProvider animatedImageDurationAtIndex:currentFrameIndex]; - currentDuration = currentDuration / playbackRate; - if (self.currentTime < currentDuration) { - // Current frame timestamp not reached, return - return; - } - - // Otherwise, we should be ready to display next frame - self.needsDisplayWhenImageBecomesAvailable = YES; - self.currentFrameIndex = nextFrameIndex; - self.currentTime -= currentDuration; - NSTimeInterval nextDuration = [self.animatedProvider animatedImageDurationAtIndex:nextFrameIndex]; - nextDuration = nextDuration / playbackRate; - if (self.currentTime > nextDuration) { - // Do not skip frame - self.currentTime = nextDuration; - } - - // Update the loop count when last frame rendered - if (nextFrameIndex == 0) { - // Update the loop count - self.currentLoopCount++; - [self handleLoopChange]; - - // if reached the max loop count, stop animating, 0 means loop indefinitely - NSUInteger maxLoopCount = self.totalLoopCount; - if (maxLoopCount != 0 && (self.currentLoopCount >= maxLoopCount)) { - [self stopPlaying]; - return; - } - } - } - - // Since we support handler, check animating state again - if (!self.isPlaying) { - return; - } - - // Check if we should prefetch next frame or current frame - // When buffer miss, means the decode speed is slower than render speed, we fetch current miss frame - // Or, most cases, the decode speed is faster than render speed, we fetch next frame - NSUInteger fetchFrameIndex = self.bufferMiss? currentFrameIndex : nextFrameIndex; - UIImage *fetchFrame; - SD_LOCK(_lock); - fetchFrame = self.bufferMiss? nil : self.frameBuffer[@(nextFrameIndex)]; - SD_UNLOCK(_lock); - - if (!fetchFrame && !bufferFull && self.fetchQueue.operationCount == 0) { - // Prefetch next frame in background queue - id animatedProvider = self.animatedProvider; - @weakify(self); - NSOperation *operation = [NSBlockOperation blockOperationWithBlock:^{ - @strongify(self); - if (!self) { - return; - } - UIImage *frame = [animatedProvider animatedImageFrameAtIndex:fetchFrameIndex]; - - BOOL isAnimating = self.displayLink.isRunning; - if (isAnimating) { - SD_LOCK(self->_lock); - self.frameBuffer[@(fetchFrameIndex)] = frame; - SD_UNLOCK(self->_lock); - } - }]; - [self.fetchQueue addOperation:operation]; - } -} - -- (void)handleFrameChange { - if (self.animationFrameHandler) { - self.animationFrameHandler(self.currentFrameIndex, self.currentFrame); - } -} - -- (void)handleLoopChange { - if (self.animationLoopHandler) { - self.animationLoopHandler(self.currentLoopCount); - } -} - -#pragma mark - Util -- (void)calculateMaxBufferCount { - NSUInteger bytes = CGImageGetBytesPerRow(self.currentFrame.CGImage) * CGImageGetHeight(self.currentFrame.CGImage); - if (bytes == 0) bytes = 1024; - - NSUInteger max = 0; - if (self.maxBufferSize > 0) { - max = self.maxBufferSize; - } else { - // Calculate based on current memory, these factors are by experience - NSUInteger total = [SDDeviceHelper totalMemory]; - NSUInteger free = [SDDeviceHelper freeMemory]; - max = MIN(total * 0.2, free * 0.6); - } - - NSUInteger maxBufferCount = (double)max / (double)bytes; - if (!maxBufferCount) { - // At least 1 frame - maxBufferCount = 1; - } - - self.maxBufferCount = maxBufferCount; -} - -+ (NSString *)defaultRunLoopMode { - // Key off `activeProcessorCount` (as opposed to `processorCount`) since the system could shut down cores in certain situations. - return [NSProcessInfo processInfo].activeProcessorCount > 1 ? NSRunLoopCommonModes : NSDefaultRunLoopMode; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageRep.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageRep.h deleted file mode 100644 index be52f8c..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageRep.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" - -#if SD_MAC - -/** - A subclass of `NSBitmapImageRep` to fix that GIF duration issue because `NSBitmapImageRep` will reset `NSImageCurrentFrameDuration` by using `kCGImagePropertyGIFDelayTime` but not `kCGImagePropertyGIFUnclampedDelayTime`. - This also fix the GIF loop count issue, which will use the Netscape standard (See http://www6.uniovi.es/gifanim/gifabout.htm) to only place once when the `kCGImagePropertyGIFLoopCount` is nil. This is what modern browser's behavior. - Built in GIF coder use this instead of `NSBitmapImageRep` for better GIF rendering. If you do not want this, only enable `SDImageIOCoder`, which just call `NSImage` API and actually use `NSBitmapImageRep` for GIF image. - This also support APNG format using `SDImageAPNGCoder`. Which provide full alpha-channel support and the correct duration match the `kCGImagePropertyAPNGUnclampedDelayTime`. - */ -@interface SDAnimatedImageRep : NSBitmapImageRep - -@end - -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageRep.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageRep.m deleted file mode 100644 index 2ef3a88..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageRep.m +++ /dev/null @@ -1,133 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDAnimatedImageRep.h" - -#if SD_MAC - -#import "SDImageIOAnimatedCoderInternal.h" -#import "SDImageGIFCoder.h" -#import "SDImageAPNGCoder.h" -#import "SDImageHEICCoder.h" -#import "SDImageAWebPCoder.h" - -@implementation SDAnimatedImageRep { - CGImageSourceRef _imageSource; -} - -- (void)dealloc { - if (_imageSource) { - CFRelease(_imageSource); - _imageSource = NULL; - } -} - -- (instancetype)copyWithZone:(NSZone *)zone { - SDAnimatedImageRep *imageRep = [super copyWithZone:zone]; - CFRetain(imageRep->_imageSource); - return imageRep; -} - -// `NSBitmapImageRep`'s `imageRepWithData:` is not designed initializer -+ (instancetype)imageRepWithData:(NSData *)data { - SDAnimatedImageRep *imageRep = [[SDAnimatedImageRep alloc] initWithData:data]; - return imageRep; -} - -// We should override init method for `NSBitmapImageRep` to do initialize about animated image format -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunguarded-availability" -- (instancetype)initWithData:(NSData *)data { - self = [super initWithData:data]; - if (self) { - CGImageSourceRef imageSource = CGImageSourceCreateWithData((__bridge CFDataRef) data, NULL); - if (!imageSource) { - return self; - } - _imageSource = imageSource; - NSUInteger frameCount = CGImageSourceGetCount(imageSource); - if (frameCount <= 1) { - return self; - } - CFStringRef type = CGImageSourceGetType(imageSource); - if (!type) { - return self; - } - if (CFStringCompare(type, kSDUTTypeGIF, 0) == kCFCompareEqualTo) { - // GIF - // Fix the `NSBitmapImageRep` GIF loop count calculation issue - // Which will use 0 when there are no loop count information metadata in GIF data - NSUInteger loopCount = [SDImageGIFCoder imageLoopCountWithSource:imageSource]; - [self setProperty:NSImageLoopCount withValue:@(loopCount)]; - } else if (CFStringCompare(type, kSDUTTypePNG, 0) == kCFCompareEqualTo) { - // APNG - // Do initialize about frame count, current frame/duration and loop count - [self setProperty:NSImageFrameCount withValue:@(frameCount)]; - [self setProperty:NSImageCurrentFrame withValue:@(0)]; - NSUInteger loopCount = [SDImageAPNGCoder imageLoopCountWithSource:imageSource]; - [self setProperty:NSImageLoopCount withValue:@(loopCount)]; - } else if (CFStringCompare(type, kSDUTTypeHEICS, 0) == kCFCompareEqualTo) { - // HEIC - // Do initialize about frame count, current frame/duration and loop count - [self setProperty:NSImageFrameCount withValue:@(frameCount)]; - [self setProperty:NSImageCurrentFrame withValue:@(0)]; - NSUInteger loopCount = [SDImageHEICCoder imageLoopCountWithSource:imageSource]; - [self setProperty:NSImageLoopCount withValue:@(loopCount)]; - } else if (CFStringCompare(type, kSDUTTypeWebP, 0) == kCFCompareEqualTo) { - // WebP - // Do initialize about frame count, current frame/duration and loop count - [self setProperty:NSImageFrameCount withValue:@(frameCount)]; - [self setProperty:NSImageCurrentFrame withValue:@(0)]; - NSUInteger loopCount = [SDImageAWebPCoder imageLoopCountWithSource:imageSource]; - [self setProperty:NSImageLoopCount withValue:@(loopCount)]; - } - } - return self; -} - -// `NSBitmapImageRep` will use `kCGImagePropertyGIFDelayTime` whenever you call `setProperty:withValue:` with `NSImageCurrentFrame` to change the current frame. We override it and use the actual `kCGImagePropertyGIFUnclampedDelayTime` if need. -- (void)setProperty:(NSBitmapImageRepPropertyKey)property withValue:(id)value { - [super setProperty:property withValue:value]; - if ([property isEqualToString:NSImageCurrentFrame]) { - // Access the image source - CGImageSourceRef imageSource = _imageSource; - if (!imageSource) { - return; - } - // Check format type - CFStringRef type = CGImageSourceGetType(imageSource); - if (!type) { - return; - } - NSUInteger index = [value unsignedIntegerValue]; - NSTimeInterval frameDuration = 0; - if (CFStringCompare(type, kSDUTTypeGIF, 0) == kCFCompareEqualTo) { - // GIF - frameDuration = [SDImageGIFCoder frameDurationAtIndex:index source:imageSource]; - } else if (CFStringCompare(type, kSDUTTypePNG, 0) == kCFCompareEqualTo) { - // APNG - frameDuration = [SDImageAPNGCoder frameDurationAtIndex:index source:imageSource]; - } else if (CFStringCompare(type, kSDUTTypeHEICS, 0) == kCFCompareEqualTo) { - // HEIC - frameDuration = [SDImageHEICCoder frameDurationAtIndex:index source:imageSource]; - } else if (CFStringCompare(type, kSDUTTypeWebP, 0) == kCFCompareEqualTo) { - // WebP - frameDuration = [SDImageAWebPCoder frameDurationAtIndex:index source:imageSource]; - } - if (!frameDuration) { - return; - } - // Reset super frame duration with the actual frame duration - [super setProperty:NSImageCurrentFrameDuration withValue:@(frameDuration)]; - } -} -#pragma clang diagnostic pop - -@end - -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageView+WebCache.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageView+WebCache.h deleted file mode 100644 index af46476..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageView+WebCache.h +++ /dev/null @@ -1,168 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDAnimatedImageView.h" - -#if SD_UIKIT || SD_MAC - -#import "SDWebImageManager.h" - -/** - Integrates SDWebImage async downloading and caching of remote images with SDAnimatedImageView. - */ -@interface SDAnimatedImageView (WebCache) - -/** - * Set the imageView `image` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url NS_REFINED_FOR_SWIFT; - -/** - * Set the imageView `image` with an `url` and a placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @see sd_setImageWithURL:placeholderImage:options: - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder NS_REFINED_FOR_SWIFT; - -/** - * Set the imageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options NS_REFINED_FOR_SWIFT; - -/** - * Set the imageView `image` with an `url`, placeholder, custom options and context. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context; - -/** - * Set the imageView `image` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the imageView `image` with an `url`, placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - completed:(nullable SDExternalCompletionBlock)completedBlock NS_REFINED_FOR_SWIFT; - -/** - * Set the imageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the imageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param progressBlock A block called while image is downloading - * @note the progress block is executed on a background queue - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the imageView `image` with an `url`, placeholder, custom options and context. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - * @param progressBlock A block called while image is downloading - * @note the progress block is executed on a background queue - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock; - -@end - -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageView+WebCache.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageView+WebCache.m deleted file mode 100644 index beb56b2..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageView+WebCache.m +++ /dev/null @@ -1,79 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDAnimatedImageView+WebCache.h" - -#if SD_UIKIT || SD_MAC - -#import "UIView+WebCache.h" -#import "SDAnimatedImage.h" - -@implementation SDAnimatedImageView (WebCache) - -- (void)sd_setImageWithURL:(nullable NSURL *)url { - [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:nil]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder { - [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:nil]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options context:(nullable SDWebImageContext *)context { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options context:context progress:nil completed:nil]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options context:nil progress:progressBlock completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock { - Class animatedImageClass = [SDAnimatedImage class]; - SDWebImageMutableContext *mutableContext; - if (context) { - mutableContext = [context mutableCopy]; - } else { - mutableContext = [NSMutableDictionary dictionary]; - } - mutableContext[SDWebImageContextAnimatedImageClass] = animatedImageClass; - [self sd_internalSetImageWithURL:url - placeholderImage:placeholder - options:options - context:mutableContext - setImageBlock:nil - progress:progressBlock - completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType, imageURL); - } - }]; -} - -@end - -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageView.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageView.h deleted file mode 100644 index f5f541b..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageView.h +++ /dev/null @@ -1,110 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" - -#if SD_UIKIT || SD_MAC - -#import "SDAnimatedImage.h" -#import "SDAnimatedImagePlayer.h" - -/** - A drop-in replacement for UIImageView/NSImageView, you can use this for animated image rendering. - Call `setImage:` with `UIImage(NSImage)` which conforms to `SDAnimatedImage` protocol will start animated image rendering. Call with normal UIImage(NSImage) will back to normal UIImageView(NSImageView) rendering - For UIKit: use `-startAnimating`, `-stopAnimating` to control animating. `isAnimating` to check animation state. - For AppKit: use `-setAnimates:` to control animating, `animates` to check animation state. This view is layer-backed. - */ -@interface SDAnimatedImageView : UIImageView -/** - The internal animation player. - This property is only used for advanced usage, like inspecting/debugging animation status, control progressive loading, complicated animation frame index control, etc. - @warning Pay attention if you directly update the player's property like `totalFrameCount`, `totalLoopCount`, the same property on `SDAnimatedImageView` may not get synced. - */ -@property (nonatomic, strong, readonly, nullable) SDAnimatedImagePlayer *player; - -/** - Current display frame image. This value is KVO Compliance. - */ -@property (nonatomic, strong, readonly, nullable) UIImage *currentFrame; -/** - Current frame index, zero based. This value is KVO Compliance. - */ -@property (nonatomic, assign, readonly) NSUInteger currentFrameIndex; -/** - Current loop count since its latest animating. This value is KVO Compliance. - */ -@property (nonatomic, assign, readonly) NSUInteger currentLoopCount; -/** - YES to choose `animationRepeatCount` property for animation loop count. No to use animated image's `animatedImageLoopCount` instead. - Default is NO. - */ -@property (nonatomic, assign) BOOL shouldCustomLoopCount; -/** - Total loop count for animated image rendering. Default is animated image's loop count. - If you need to set custom loop count, set `shouldCustomLoopCount` to YES and change this value. - This class override UIImageView's `animationRepeatCount` property on iOS, use this property as well. - */ -@property (nonatomic, assign) NSInteger animationRepeatCount; -/** - The animation playback rate. Default is 1.0. - `1.0` means the normal speed. - `0.0` means stopping the animation. - `0.0-1.0` means the slow speed. - `> 1.0` means the fast speed. - `< 0.0` is not supported currently and stop animation. (may support reverse playback in the future) - */ -@property (nonatomic, assign) double playbackRate; - -/// Asynchronous setup animation playback mode. Default mode is SDAnimatedImagePlaybackModeNormal. -@property (nonatomic, assign) SDAnimatedImagePlaybackMode playbackMode; - -/** - Provide a max buffer size by bytes. This is used to adjust frame buffer count and can be useful when the decoding cost is expensive (such as Animated WebP software decoding). Default is 0. - `0` means automatically adjust by calculating current memory usage. - `1` means without any buffer cache, each of frames will be decoded and then be freed after rendering. (Lowest Memory and Highest CPU) - `NSUIntegerMax` means cache all the buffer. (Lowest CPU and Highest Memory) - */ -@property (nonatomic, assign) NSUInteger maxBufferSize; -/** - Whehter or not to enable incremental image load for animated image. This is for the animated image which `sd_isIncremental` is YES (See `UIImage+Metadata.h`). If enable, animated image rendering will stop at the last frame available currently, and continue when another `setImage:` trigger, where the new animated image's `animatedImageData` should be updated from the previous one. If the `sd_isIncremental` is NO. The incremental image load stop. - @note If you are confused about this description, open Chrome browser to view some large GIF images with low network speed to see the animation behavior. - @note The best practice to use incremental load is using `initWithAnimatedCoder:scale:` in `SDAnimatedImage` with animated coder which conform to `SDProgressiveImageCoder` as well. Then call incremental update and incremental decode method to produce the image. - Default is YES. Set to NO to only render the static poster for incremental animated image. - */ -@property (nonatomic, assign) BOOL shouldIncrementalLoad; - -/** - Whether or not to clear the frame buffer cache when animation stopped. See `maxBufferSize` - This is useful when you want to limit the memory usage during frequently visibility changes (such as image view inside a list view, then push and pop) - Default is NO. - */ -@property (nonatomic, assign) BOOL clearBufferWhenStopped; - -/** - Whether or not to reset the current frame index when animation stopped. - For some of use case, you may want to reset the frame index to 0 when stop, but some other want to keep the current frame index. - Default is NO. - */ -@property (nonatomic, assign) BOOL resetFrameIndexWhenStopped; - -/** - If the image which conforms to `SDAnimatedImage` protocol has more than one frame, set this value to `YES` will automatically - play/stop the animation when the view become visible/invisible. - Default is YES. - */ -@property (nonatomic, assign) BOOL autoPlayAnimatedImage; - -/** - You can specify a runloop mode to let it rendering. - Default is NSRunLoopCommonModes on multi-core device, NSDefaultRunLoopMode on single-core device - @note This is useful for some cases, for example, always specify NSDefaultRunLoopMode, if you want to pause the animation when user scroll (for Mac user, drag the mouse or touchpad) - */ -@property (nonatomic, copy, nonnull) NSRunLoopMode runLoopMode; -@end - -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageView.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageView.m deleted file mode 100644 index 53d697f..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageView.m +++ /dev/null @@ -1,536 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDAnimatedImageView.h" - -#if SD_UIKIT || SD_MAC - -#import "UIImage+Metadata.h" -#import "NSImage+Compatibility.h" -#import "SDInternalMacros.h" -#import "objc/runtime.h" - -@interface UIImageView () -@end - -@interface SDAnimatedImageView () { - BOOL _initFinished; // Extra flag to mark the `commonInit` is called - NSRunLoopMode _runLoopMode; - NSUInteger _maxBufferSize; - double _playbackRate; - SDAnimatedImagePlaybackMode _playbackMode; -} - -@property (nonatomic, strong, readwrite) SDAnimatedImagePlayer *player; -@property (nonatomic, strong, readwrite) UIImage *currentFrame; -@property (nonatomic, assign, readwrite) NSUInteger currentFrameIndex; -@property (nonatomic, assign, readwrite) NSUInteger currentLoopCount; -@property (nonatomic, assign) BOOL shouldAnimate; -@property (nonatomic, assign) BOOL isProgressive; -@property (nonatomic) CALayer *imageViewLayer; // The actual rendering layer. - -@end - -@implementation SDAnimatedImageView -#if SD_UIKIT -@dynamic animationRepeatCount; // we re-use this property from `UIImageView` super class on iOS. -#endif - -#pragma mark - Initializers - -#if SD_MAC -+ (instancetype)imageViewWithImage:(NSImage *)image -{ - NSRect frame = NSMakeRect(0, 0, image.size.width, image.size.height); - SDAnimatedImageView *imageView = [[SDAnimatedImageView alloc] initWithFrame:frame]; - [imageView setImage:image]; - return imageView; -} -#else -// -initWithImage: isn't documented as a designated initializer of UIImageView, but it actually seems to be. -// Using -initWithImage: doesn't call any of the other designated initializers. -- (instancetype)initWithImage:(UIImage *)image -{ - self = [super initWithImage:image]; - if (self) { - [self commonInit]; - } - return self; -} - -// -initWithImage:highlightedImage: also isn't documented as a designated initializer of UIImageView, but it doesn't call any other designated initializers. -- (instancetype)initWithImage:(UIImage *)image highlightedImage:(UIImage *)highlightedImage -{ - self = [super initWithImage:image highlightedImage:highlightedImage]; - if (self) { - [self commonInit]; - } - return self; -} -#endif - -- (instancetype)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) { - [self commonInit]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder -{ - self = [super initWithCoder:aDecoder]; - if (self) { - [self commonInit]; - } - return self; -} - -- (void)commonInit -{ - // Pay attention that UIKit's `initWithImage:` will trigger a `setImage:` during initialization before this `commonInit`. - // So the properties which rely on this order, should using lazy-evaluation or do extra check in `setImage:`. - self.autoPlayAnimatedImage = YES; - self.shouldCustomLoopCount = NO; - self.shouldIncrementalLoad = YES; - self.playbackRate = 1.0; -#if SD_MAC - self.wantsLayer = YES; -#endif - // Mark commonInit finished - _initFinished = YES; -} - -#pragma mark - Accessors -#pragma mark Public - -- (void)setImage:(UIImage *)image -{ - if (self.image == image) { - return; - } - - // Check Progressive rendering - [self updateIsProgressiveWithImage:image]; - - if (!self.isProgressive) { - // Stop animating - self.player = nil; - self.currentFrame = nil; - self.currentFrameIndex = 0; - self.currentLoopCount = 0; - } - - // We need call super method to keep function. This will impliedly call `setNeedsDisplay`. But we have no way to avoid this when using animated image. So we call `setNeedsDisplay` again at the end. - super.image = image; - if ([image.class conformsToProtocol:@protocol(SDAnimatedImage)]) { - if (!self.player) { - id provider; - // Check progressive loading - if (self.isProgressive) { - provider = [self progressiveAnimatedCoderForImage:image]; - } else { - provider = (id)image; - } - // Create animated player - self.player = [SDAnimatedImagePlayer playerWithProvider:provider]; - } else { - // Update Frame Count - self.player.totalFrameCount = [(id)image animatedImageFrameCount]; - } - - if (!self.player) { - // animated player nil means the image format is not supported, or frame count <= 1 - return; - } - - // Custom Loop Count - if (self.shouldCustomLoopCount) { - self.player.totalLoopCount = self.animationRepeatCount; - } - - // RunLoop Mode - self.player.runLoopMode = self.runLoopMode; - - // Max Buffer Size - self.player.maxBufferSize = self.maxBufferSize; - - // Play Rate - self.player.playbackRate = self.playbackRate; - - // Play Mode - self.player.playbackMode = self.playbackMode; - - // Setup handler - @weakify(self); - self.player.animationFrameHandler = ^(NSUInteger index, UIImage * frame) { - @strongify(self); - self.currentFrameIndex = index; - self.currentFrame = frame; - [self.imageViewLayer setNeedsDisplay]; - }; - self.player.animationLoopHandler = ^(NSUInteger loopCount) { - @strongify(self); - // Progressive image reach the current last frame index. Keep the state and pause animating. Wait for later restart - if (self.isProgressive) { - NSUInteger lastFrameIndex = self.player.totalFrameCount - 1; - [self.player seekToFrameAtIndex:lastFrameIndex loopCount:0]; - [self.player pausePlaying]; - } else { - self.currentLoopCount = loopCount; - } - }; - - // Ensure disabled highlighting; it's not supported (see `-setHighlighted:`). - super.highlighted = NO; - - [self stopAnimating]; - [self checkPlay]; - - [self.imageViewLayer setNeedsDisplay]; - } -} - -#pragma mark - Configuration - -- (void)setRunLoopMode:(NSRunLoopMode)runLoopMode -{ - _runLoopMode = [runLoopMode copy]; - self.player.runLoopMode = runLoopMode; -} - -- (NSRunLoopMode)runLoopMode -{ - if (!_runLoopMode) { - _runLoopMode = [[self class] defaultRunLoopMode]; - } - return _runLoopMode; -} - -+ (NSString *)defaultRunLoopMode { - // Key off `activeProcessorCount` (as opposed to `processorCount`) since the system could shut down cores in certain situations. - return [NSProcessInfo processInfo].activeProcessorCount > 1 ? NSRunLoopCommonModes : NSDefaultRunLoopMode; -} - -- (void)setMaxBufferSize:(NSUInteger)maxBufferSize -{ - _maxBufferSize = maxBufferSize; - self.player.maxBufferSize = maxBufferSize; -} - -- (NSUInteger)maxBufferSize { - return _maxBufferSize; // Defaults to 0 -} - -- (void)setPlaybackRate:(double)playbackRate -{ - _playbackRate = playbackRate; - self.player.playbackRate = playbackRate; -} - -- (double)playbackRate -{ - if (!_initFinished) { - return 1.0; // Defaults to 1.0 - } - return _playbackRate; -} - -- (void)setPlaybackMode:(SDAnimatedImagePlaybackMode)playbackMode { - _playbackMode = playbackMode; - self.player.playbackMode = playbackMode; -} - -- (SDAnimatedImagePlaybackMode)playbackMode { - if (!_initFinished) { - return SDAnimatedImagePlaybackModeNormal; // Default mode is normal - } - return _playbackMode; -} - - -- (BOOL)shouldIncrementalLoad -{ - if (!_initFinished) { - return YES; // Defaults to YES - } - return _initFinished; -} - -#pragma mark - UIView Method Overrides -#pragma mark Observing View-Related Changes - -#if SD_MAC -- (void)viewDidMoveToSuperview -#else -- (void)didMoveToSuperview -#endif -{ -#if SD_MAC - [super viewDidMoveToSuperview]; -#else - [super didMoveToSuperview]; -#endif - - [self checkPlay]; -} - -#if SD_MAC -- (void)viewDidMoveToWindow -#else -- (void)didMoveToWindow -#endif -{ -#if SD_MAC - [super viewDidMoveToWindow]; -#else - [super didMoveToWindow]; -#endif - - [self checkPlay]; -} - -#if SD_MAC -- (void)setAlphaValue:(CGFloat)alphaValue -#else -- (void)setAlpha:(CGFloat)alpha -#endif -{ -#if SD_MAC - [super setAlphaValue:alphaValue]; -#else - [super setAlpha:alpha]; -#endif - - [self checkPlay]; -} - -- (void)setHidden:(BOOL)hidden -{ - [super setHidden:hidden]; - - [self checkPlay]; -} - -#pragma mark - UIImageView Method Overrides -#pragma mark Image Data - -- (void)setAnimationRepeatCount:(NSInteger)animationRepeatCount -{ -#if SD_UIKIT - [super setAnimationRepeatCount:animationRepeatCount]; -#else - _animationRepeatCount = animationRepeatCount; -#endif - - if (self.shouldCustomLoopCount) { - self.player.totalLoopCount = animationRepeatCount; - } -} - -- (void)startAnimating -{ - if (self.player) { - [self updateShouldAnimate]; - if (self.shouldAnimate) { - [self.player startPlaying]; - } - } else { -#if SD_UIKIT - [super startAnimating]; -#else - [super setAnimates:YES]; -#endif - } -} - -- (void)stopAnimating -{ - if (self.player) { - if (self.resetFrameIndexWhenStopped) { - [self.player stopPlaying]; - } else { - [self.player pausePlaying]; - } - if (self.clearBufferWhenStopped) { - [self.player clearFrameBuffer]; - } - } else { -#if SD_UIKIT - [super stopAnimating]; -#else - [super setAnimates:NO]; -#endif - } -} - -#if SD_UIKIT -- (BOOL)isAnimating -{ - if (self.player) { - return self.player.isPlaying; - } else { - return [super isAnimating]; - } -} -#endif - -#if SD_MAC -- (BOOL)animates -{ - if (self.player) { - return self.player.isPlaying; - } else { - return [super animates]; - } -} - -- (void)setAnimates:(BOOL)animates -{ - if (animates) { - [self startAnimating]; - } else { - [self stopAnimating]; - } -} -#endif - -#pragma mark Highlighted Image Unsupport - -- (void)setHighlighted:(BOOL)highlighted -{ - // Highlighted image is unsupported for animated images, but implementing it breaks the image view when embedded in a UICollectionViewCell. - if (!self.player) { - [super setHighlighted:highlighted]; - } -} - - -#pragma mark - Private Methods -#pragma mark Animation - -/// Check if it should be played -- (void)checkPlay -{ - // Only handle for SDAnimatedImage, leave UIAnimatedImage or animationImages for super implementation control - if (self.player && self.autoPlayAnimatedImage) { - [self updateShouldAnimate]; - if (self.shouldAnimate) { - [self startAnimating]; - } else { - [self stopAnimating]; - } - } -} - -// Don't repeatedly check our window & superview in `-displayDidRefresh:` for performance reasons. -// Just update our cached value whenever the animated image or visibility (window, superview, hidden, alpha) is changed. -- (void)updateShouldAnimate -{ -#if SD_MAC - BOOL isVisible = self.window && self.superview && ![self isHidden] && self.alphaValue > 0.0; -#else - BOOL isVisible = self.window && self.superview && ![self isHidden] && self.alpha > 0.0; -#endif - self.shouldAnimate = self.player && isVisible; -} - -// Update progressive status only after `setImage:` call. -- (void)updateIsProgressiveWithImage:(UIImage *)image -{ - self.isProgressive = NO; - if (!self.shouldIncrementalLoad) { - // Early return - return; - } - // We must use `image.class conformsToProtocol:` instead of `image conformsToProtocol:` here - // Because UIKit on macOS, using internal hard-coded override method, which returns NO - id currentAnimatedCoder = [self progressiveAnimatedCoderForImage:image]; - if (currentAnimatedCoder) { - UIImage *previousImage = self.image; - if (!previousImage) { - // If current animated coder supports progressive, and no previous image to check, start progressive loading - self.isProgressive = YES; - } else { - id previousAnimatedCoder = [self progressiveAnimatedCoderForImage:previousImage]; - if (previousAnimatedCoder == currentAnimatedCoder) { - // If current animated coder is the same as previous, start progressive loading - self.isProgressive = YES; - } - } - } -} - -// Check if image can represent a `Progressive Animated Image` during loading -- (id)progressiveAnimatedCoderForImage:(UIImage *)image -{ - if ([image.class conformsToProtocol:@protocol(SDAnimatedImage)] && image.sd_isIncremental && [image respondsToSelector:@selector(animatedCoder)]) { - id animatedCoder = [(id)image animatedCoder]; - if ([animatedCoder conformsToProtocol:@protocol(SDProgressiveImageCoder)]) { - return (id)animatedCoder; - } - } - return nil; -} - - -#pragma mark Providing the Layer's Content -#pragma mark - CALayerDelegate - -- (void)displayLayer:(CALayer *)layer -{ - UIImage *currentFrame = self.currentFrame; - if (currentFrame) { - layer.contentsScale = currentFrame.scale; - layer.contents = (__bridge id)currentFrame.CGImage; - } else { - // If we have no animation frames, call super implementation. iOS 14+ UIImageView use this delegate method for rendering. - if ([UIImageView instancesRespondToSelector:@selector(displayLayer:)]) { - [super displayLayer:layer]; - } - } -} - -#if SD_MAC -// NSImageView use a subview. We need this subview's layer for actual rendering. -// Why using this design may because of properties like `imageAlignment` and `imageScaling`, which it's not available for UIImageView.contentMode (it's impossible to align left and keep aspect ratio at the same time) -- (NSView *)imageView { - NSImageView *imageView = objc_getAssociatedObject(self, SD_SEL_SPI(imageView)); - if (!imageView) { - // macOS 10.14 - imageView = objc_getAssociatedObject(self, SD_SEL_SPI(imageSubview)); - } - return imageView; -} - -// on macOS, it's the imageView subview's layer (we use layer-hosting view to let CALayerDelegate works) -- (CALayer *)imageViewLayer { - NSView *imageView = self.imageView; - if (!imageView) { - return nil; - } - if (!_imageViewLayer) { - _imageViewLayer = [CALayer new]; - _imageViewLayer.delegate = self; - imageView.layer = _imageViewLayer; - imageView.wantsLayer = YES; - } - return _imageViewLayer; -} -#else -// on iOS, it's the imageView itself's layer -- (CALayer *)imageViewLayer { - return self.layer; -} - -#endif - -@end - -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDDiskCache.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDDiskCache.h deleted file mode 100644 index dc5e1fa..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDDiskCache.h +++ /dev/null @@ -1,145 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" - -@class SDImageCacheConfig; -/** - A protocol to allow custom disk cache used in SDImageCache. - */ -@protocol SDDiskCache - -// All of these method are called from the same global queue to avoid blocking on main queue and thread-safe problem. But it's also recommend to ensure thread-safe yourself using lock or other ways. -@required -/** - Create a new disk cache based on the specified path. You can check `maxDiskSize` and `maxDiskAge` used for disk cache. - - @param cachePath Full path of a directory in which the cache will write data. - Once initialized you should not read and write to this directory. - @param config The cache config to be used to create the cache. - - @return A new cache object, or nil if an error occurs. - */ -- (nullable instancetype)initWithCachePath:(nonnull NSString *)cachePath config:(nonnull SDImageCacheConfig *)config; - -/** - Returns a boolean value that indicates whether a given key is in cache. - This method may blocks the calling thread until file read finished. - - @param key A string identifying the data. If nil, just return NO. - @return Whether the key is in cache. - */ -- (BOOL)containsDataForKey:(nonnull NSString *)key; - -/** - Returns the data associated with a given key. - This method may blocks the calling thread until file read finished. - - @param key A string identifying the data. If nil, just return nil. - @return The value associated with key, or nil if no value is associated with key. - */ -- (nullable NSData *)dataForKey:(nonnull NSString *)key; - -/** - Sets the value of the specified key in the cache. - This method may blocks the calling thread until file write finished. - - @param data The data to be stored in the cache. - @param key The key with which to associate the value. If nil, this method has no effect. - */ -- (void)setData:(nullable NSData *)data forKey:(nonnull NSString *)key; - -/** - Returns the extended data associated with a given key. - This method may blocks the calling thread until file read finished. - - @param key A string identifying the data. If nil, just return nil. - @return The value associated with key, or nil if no value is associated with key. - */ -- (nullable NSData *)extendedDataForKey:(nonnull NSString *)key; - -/** - Set extended data with a given key. - - @discussion You can set any extended data to exist cache key. Without override the exist disk file data. - on UNIX, the common way for this is to use the Extended file attributes (xattr) - - @param extendedData The extended data (pass nil to remove). - @param key The key with which to associate the value. If nil, this method has no effect. -*/ -- (void)setExtendedData:(nullable NSData *)extendedData forKey:(nonnull NSString *)key; - -/** - Removes the value of the specified key in the cache. - This method may blocks the calling thread until file delete finished. - - @param key The key identifying the value to be removed. If nil, this method has no effect. - */ -- (void)removeDataForKey:(nonnull NSString *)key; - -/** - Empties the cache. - This method may blocks the calling thread until file delete finished. - */ -- (void)removeAllData; - -/** - Removes the expired data from the cache. You can choose the data to remove base on `ageLimit`, `countLimit` and `sizeLimit` options. - */ -- (void)removeExpiredData; - -/** - The cache path for key - - @param key A string identifying the value - @return The cache path for key. Or nil if the key can not associate to a path - */ -- (nullable NSString *)cachePathForKey:(nonnull NSString *)key; - -/** - Returns the number of data in this cache. - This method may blocks the calling thread until file read finished. - - @return The total data count. - */ -- (NSUInteger)totalCount; - -/** - Returns the total size (in bytes) of data in this cache. - This method may blocks the calling thread until file read finished. - - @return The total data size in bytes. - */ -- (NSUInteger)totalSize; - -@end - -/** - The built-in disk cache. - */ -@interface SDDiskCache : NSObject -/** - Cache Config object - storing all kind of settings. - */ -@property (nonatomic, strong, readonly, nonnull) SDImageCacheConfig *config; - -- (nonnull instancetype)init NS_UNAVAILABLE; - -/** - Move the cache directory from old location to new location, the old location will be removed after finish. - If the old location does not exist, does nothing. - If the new location does not exist, only do a movement of directory. - If the new location does exist, will move and merge the files from old location. - If the new location does exist, but is not a directory, will remove it and do a movement of directory. - - @param srcPath old location of cache directory - @param dstPath new location of cache directory - */ -- (void)moveCacheDirectoryFromPath:(nonnull NSString *)srcPath toPath:(nonnull NSString *)dstPath; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDDiskCache.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDDiskCache.m deleted file mode 100644 index 2cdb766..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDDiskCache.m +++ /dev/null @@ -1,326 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDDiskCache.h" -#import "SDImageCacheConfig.h" -#import "SDFileAttributeHelper.h" -#import - -static NSString * const SDDiskCacheExtendedAttributeName = @"com.hackemist.SDDiskCache"; - -@interface SDDiskCache () - -@property (nonatomic, copy) NSString *diskCachePath; -@property (nonatomic, strong, nonnull) NSFileManager *fileManager; - -@end - -@implementation SDDiskCache - -- (instancetype)init { - NSAssert(NO, @"Use `initWithCachePath:` with the disk cache path"); - return nil; -} - -#pragma mark - SDcachePathForKeyDiskCache Protocol -- (instancetype)initWithCachePath:(NSString *)cachePath config:(nonnull SDImageCacheConfig *)config { - if (self = [super init]) { - _diskCachePath = cachePath; - _config = config; - [self commonInit]; - } - return self; -} - -- (void)commonInit { - if (self.config.fileManager) { - self.fileManager = self.config.fileManager; - } else { - self.fileManager = [NSFileManager new]; - } -} - -- (BOOL)containsDataForKey:(NSString *)key { - NSParameterAssert(key); - NSString *filePath = [self cachePathForKey:key]; - BOOL exists = [self.fileManager fileExistsAtPath:filePath]; - - // fallback because of https://github.com/rs/SDWebImage/pull/976 that added the extension to the disk file name - // checking the key with and without the extension - if (!exists) { - exists = [self.fileManager fileExistsAtPath:filePath.stringByDeletingPathExtension]; - } - - return exists; -} - -- (NSData *)dataForKey:(NSString *)key { - NSParameterAssert(key); - NSString *filePath = [self cachePathForKey:key]; - NSData *data = [NSData dataWithContentsOfFile:filePath options:self.config.diskCacheReadingOptions error:nil]; - if (data) { - return data; - } - - // fallback because of https://github.com/rs/SDWebImage/pull/976 that added the extension to the disk file name - // checking the key with and without the extension - data = [NSData dataWithContentsOfFile:filePath.stringByDeletingPathExtension options:self.config.diskCacheReadingOptions error:nil]; - if (data) { - return data; - } - - return nil; -} - -- (void)setData:(NSData *)data forKey:(NSString *)key { - NSParameterAssert(data); - NSParameterAssert(key); - if (![self.fileManager fileExistsAtPath:self.diskCachePath]) { - [self.fileManager createDirectoryAtPath:self.diskCachePath withIntermediateDirectories:YES attributes:nil error:NULL]; - } - - // get cache Path for image key - NSString *cachePathForKey = [self cachePathForKey:key]; - // transform to NSURL - NSURL *fileURL = [NSURL fileURLWithPath:cachePathForKey isDirectory:NO]; - - [data writeToURL:fileURL options:self.config.diskCacheWritingOptions error:nil]; - - // disable iCloud backup - if (self.config.shouldDisableiCloud) { - // ignore iCloud backup resource value error - [fileURL setResourceValue:@YES forKey:NSURLIsExcludedFromBackupKey error:nil]; - } -} - -- (NSData *)extendedDataForKey:(NSString *)key { - NSParameterAssert(key); - - // get cache Path for image key - NSString *cachePathForKey = [self cachePathForKey:key]; - - NSData *extendedData = [SDFileAttributeHelper extendedAttribute:SDDiskCacheExtendedAttributeName atPath:cachePathForKey traverseLink:NO error:nil]; - - return extendedData; -} - -- (void)setExtendedData:(NSData *)extendedData forKey:(NSString *)key { - NSParameterAssert(key); - // get cache Path for image key - NSString *cachePathForKey = [self cachePathForKey:key]; - - if (!extendedData) { - // Remove - [SDFileAttributeHelper removeExtendedAttribute:SDDiskCacheExtendedAttributeName atPath:cachePathForKey traverseLink:NO error:nil]; - } else { - // Override - [SDFileAttributeHelper setExtendedAttribute:SDDiskCacheExtendedAttributeName value:extendedData atPath:cachePathForKey traverseLink:NO overwrite:YES error:nil]; - } -} - -- (void)removeDataForKey:(NSString *)key { - NSParameterAssert(key); - NSString *filePath = [self cachePathForKey:key]; - [self.fileManager removeItemAtPath:filePath error:nil]; -} - -- (void)removeAllData { - [self.fileManager removeItemAtPath:self.diskCachePath error:nil]; - [self.fileManager createDirectoryAtPath:self.diskCachePath - withIntermediateDirectories:YES - attributes:nil - error:NULL]; -} - -- (void)removeExpiredData { - NSURL *diskCacheURL = [NSURL fileURLWithPath:self.diskCachePath isDirectory:YES]; - - // Compute content date key to be used for tests - NSURLResourceKey cacheContentDateKey = NSURLContentModificationDateKey; - switch (self.config.diskCacheExpireType) { - case SDImageCacheConfigExpireTypeAccessDate: - cacheContentDateKey = NSURLContentAccessDateKey; - break; - case SDImageCacheConfigExpireTypeModificationDate: - cacheContentDateKey = NSURLContentModificationDateKey; - break; - case SDImageCacheConfigExpireTypeCreationDate: - cacheContentDateKey = NSURLCreationDateKey; - break; - case SDImageCacheConfigExpireTypeChangeDate: - cacheContentDateKey = NSURLAttributeModificationDateKey; - break; - default: - break; - } - - NSArray *resourceKeys = @[NSURLIsDirectoryKey, cacheContentDateKey, NSURLTotalFileAllocatedSizeKey]; - - // This enumerator prefetches useful properties for our cache files. - NSDirectoryEnumerator *fileEnumerator = [self.fileManager enumeratorAtURL:diskCacheURL - includingPropertiesForKeys:resourceKeys - options:NSDirectoryEnumerationSkipsHiddenFiles - errorHandler:NULL]; - - NSDate *expirationDate = (self.config.maxDiskAge < 0) ? nil: [NSDate dateWithTimeIntervalSinceNow:-self.config.maxDiskAge]; - NSMutableDictionary *> *cacheFiles = [NSMutableDictionary dictionary]; - NSUInteger currentCacheSize = 0; - - // Enumerate all of the files in the cache directory. This loop has two purposes: - // - // 1. Removing files that are older than the expiration date. - // 2. Storing file attributes for the size-based cleanup pass. - NSMutableArray *urlsToDelete = [[NSMutableArray alloc] init]; - for (NSURL *fileURL in fileEnumerator) { - NSError *error; - NSDictionary *resourceValues = [fileURL resourceValuesForKeys:resourceKeys error:&error]; - - // Skip directories and errors. - if (error || !resourceValues || [resourceValues[NSURLIsDirectoryKey] boolValue]) { - continue; - } - - // Remove files that are older than the expiration date; - NSDate *modifiedDate = resourceValues[cacheContentDateKey]; - if (expirationDate && [[modifiedDate laterDate:expirationDate] isEqualToDate:expirationDate]) { - [urlsToDelete addObject:fileURL]; - continue; - } - - // Store a reference to this file and account for its total size. - NSNumber *totalAllocatedSize = resourceValues[NSURLTotalFileAllocatedSizeKey]; - currentCacheSize += totalAllocatedSize.unsignedIntegerValue; - cacheFiles[fileURL] = resourceValues; - } - - for (NSURL *fileURL in urlsToDelete) { - [self.fileManager removeItemAtURL:fileURL error:nil]; - } - - // If our remaining disk cache exceeds a configured maximum size, perform a second - // size-based cleanup pass. We delete the oldest files first. - NSUInteger maxDiskSize = self.config.maxDiskSize; - if (maxDiskSize > 0 && currentCacheSize > maxDiskSize) { - // Target half of our maximum cache size for this cleanup pass. - const NSUInteger desiredCacheSize = maxDiskSize / 2; - - // Sort the remaining cache files by their last modification time or last access time (oldest first). - NSArray *sortedFiles = [cacheFiles keysSortedByValueWithOptions:NSSortConcurrent - usingComparator:^NSComparisonResult(id obj1, id obj2) { - return [obj1[cacheContentDateKey] compare:obj2[cacheContentDateKey]]; - }]; - - // Delete files until we fall below our desired cache size. - for (NSURL *fileURL in sortedFiles) { - if ([self.fileManager removeItemAtURL:fileURL error:nil]) { - NSDictionary *resourceValues = cacheFiles[fileURL]; - NSNumber *totalAllocatedSize = resourceValues[NSURLTotalFileAllocatedSizeKey]; - currentCacheSize -= totalAllocatedSize.unsignedIntegerValue; - - if (currentCacheSize < desiredCacheSize) { - break; - } - } - } - } -} - -- (nullable NSString *)cachePathForKey:(NSString *)key { - NSParameterAssert(key); - return [self cachePathForKey:key inPath:self.diskCachePath]; -} - -- (NSUInteger)totalSize { - NSUInteger size = 0; - NSDirectoryEnumerator *fileEnumerator = [self.fileManager enumeratorAtPath:self.diskCachePath]; - for (NSString *fileName in fileEnumerator) { - NSString *filePath = [self.diskCachePath stringByAppendingPathComponent:fileName]; - NSDictionary *attrs = [self.fileManager attributesOfItemAtPath:filePath error:nil]; - size += [attrs fileSize]; - } - return size; -} - -- (NSUInteger)totalCount { - NSUInteger count = 0; - NSDirectoryEnumerator *fileEnumerator = [self.fileManager enumeratorAtPath:self.diskCachePath]; - count = fileEnumerator.allObjects.count; - return count; -} - -#pragma mark - Cache paths - -- (nullable NSString *)cachePathForKey:(nullable NSString *)key inPath:(nonnull NSString *)path { - NSString *filename = SDDiskCacheFileNameForKey(key); - return [path stringByAppendingPathComponent:filename]; -} - -- (void)moveCacheDirectoryFromPath:(nonnull NSString *)srcPath toPath:(nonnull NSString *)dstPath { - NSParameterAssert(srcPath); - NSParameterAssert(dstPath); - // Check if old path is equal to new path - if ([srcPath isEqualToString:dstPath]) { - return; - } - BOOL isDirectory; - // Check if old path is directory - if (![self.fileManager fileExistsAtPath:srcPath isDirectory:&isDirectory] || !isDirectory) { - return; - } - // Check if new path is directory - if (![self.fileManager fileExistsAtPath:dstPath isDirectory:&isDirectory] || !isDirectory) { - if (!isDirectory) { - // New path is not directory, remove file - [self.fileManager removeItemAtPath:dstPath error:nil]; - } - NSString *dstParentPath = [dstPath stringByDeletingLastPathComponent]; - // Creates any non-existent parent directories as part of creating the directory in path - if (![self.fileManager fileExistsAtPath:dstParentPath]) { - [self.fileManager createDirectoryAtPath:dstParentPath withIntermediateDirectories:YES attributes:nil error:NULL]; - } - // New directory does not exist, rename directory - [self.fileManager moveItemAtPath:srcPath toPath:dstPath error:nil]; - } else { - // New directory exist, merge the files - NSDirectoryEnumerator *dirEnumerator = [self.fileManager enumeratorAtPath:srcPath]; - NSString *file; - while ((file = [dirEnumerator nextObject])) { - [self.fileManager moveItemAtPath:[srcPath stringByAppendingPathComponent:file] toPath:[dstPath stringByAppendingPathComponent:file] error:nil]; - } - // Remove the old path - [self.fileManager removeItemAtPath:srcPath error:nil]; - } -} - -#pragma mark - Hash - -#define SD_MAX_FILE_EXTENSION_LENGTH (NAME_MAX - CC_MD5_DIGEST_LENGTH * 2 - 1) - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" -static inline NSString * _Nonnull SDDiskCacheFileNameForKey(NSString * _Nullable key) { - const char *str = key.UTF8String; - if (str == NULL) { - str = ""; - } - unsigned char r[CC_MD5_DIGEST_LENGTH]; - CC_MD5(str, (CC_LONG)strlen(str), r); - NSURL *keyURL = [NSURL URLWithString:key]; - NSString *ext = keyURL ? keyURL.pathExtension : key.pathExtension; - // File system has file name length limit, we need to check if ext is too long, we don't add it to the filename - if (ext.length > SD_MAX_FILE_EXTENSION_LENGTH) { - ext = nil; - } - NSString *filename = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%@", - r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10], - r[11], r[12], r[13], r[14], r[15], ext.length == 0 ? @"" : [NSString stringWithFormat:@".%@", ext]]; - return filename; -} -#pragma clang diagnostic pop - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDGraphicsImageRenderer.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDGraphicsImageRenderer.h deleted file mode 100644 index 900acd7..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDGraphicsImageRenderer.h +++ /dev/null @@ -1,73 +0,0 @@ -/* -* This file is part of the SDWebImage package. -* (c) Olivier Poitrey -* -* For the full copyright and license information, please view the LICENSE -* file that was distributed with this source code. -*/ - -#import "SDWebImageCompat.h" - -/** - These following class are provided to use `UIGraphicsImageRenderer` with polyfill, which allows write cross-platform(AppKit/UIKit) code and avoid runtime version check. - Compared to `UIGraphicsBeginImageContext`, `UIGraphicsImageRenderer` use dynamic bitmap from your draw code to generate CGContext, not always use ARGB8888, which is more performant on RAM usage. - Which means, if you draw CGImage/CIImage which contains grayscale only, the underlaying bitmap context use grayscale, it's managed by system and not a fixed type. (actually, the `kCGContextTypeAutomatic`) - For usage, See more in Apple's documentation: https://developer.apple.com/documentation/uikit/uigraphicsimagerenderer - For UIKit on iOS/tvOS 10+, these method just use the same `UIGraphicsImageRenderer` API. - For others (macOS/watchOS or iOS/tvOS 10-), these method use the `SDImageGraphics.h` to implements the same behavior (but without dynamic bitmap support) -*/ - -typedef void (^SDGraphicsImageDrawingActions)(CGContextRef _Nonnull context); -typedef NS_ENUM(NSInteger, SDGraphicsImageRendererFormatRange) { - SDGraphicsImageRendererFormatRangeUnspecified = -1, - SDGraphicsImageRendererFormatRangeAutomatic = 0, - SDGraphicsImageRendererFormatRangeExtended, - SDGraphicsImageRendererFormatRangeStandard -}; - -/// A set of drawing attributes that represent the configuration of an image renderer context. -@interface SDGraphicsImageRendererFormat : NSObject - -/// The display scale of the image renderer context. -/// The default value is equal to the scale of the main screen. -@property (nonatomic) CGFloat scale; - -/// A Boolean value indicating whether the underlying Core Graphics context has an alpha channel. -/// The default value is NO. -@property (nonatomic) BOOL opaque; - -/// Specifying whether the bitmap context should use extended color. -/// For iOS 12+, the value is from system `preferredRange` property -/// For iOS 10-11, the value is from system `prefersExtendedRange` property -/// For iOS 9-, the value is `.standard` -@property (nonatomic) SDGraphicsImageRendererFormatRange preferredRange; - -/// Init the default format. See each properties's default value. -- (nonnull instancetype)init; - -/// Returns a new format best suited for the main screen’s current configuration. -+ (nonnull instancetype)preferredFormat; - -@end - -/// A graphics renderer for creating Core Graphics-backed images. -@interface SDGraphicsImageRenderer : NSObject - -/// Creates an image renderer for drawing images of a given size. -/// @param size The size of images output from the renderer, specified in points. -/// @return An initialized image renderer. -- (nonnull instancetype)initWithSize:(CGSize)size; - -/// Creates a new image renderer with a given size and format. -/// @param size The size of images output from the renderer, specified in points. -/// @param format A SDGraphicsImageRendererFormat object that encapsulates the format used to create the renderer context. -/// @return An initialized image renderer. -- (nonnull instancetype)initWithSize:(CGSize)size format:(nonnull SDGraphicsImageRendererFormat *)format; - -/// Creates an image by following a set of drawing instructions. -/// @param actions A SDGraphicsImageDrawingActions block that, when invoked by the renderer, executes a set of drawing instructions to create the output image. -/// @note You should not retain or use the context outside the block, it's non-escaping. -/// @return A UIImage object created by the supplied drawing actions. -- (nonnull UIImage *)imageWithActions:(nonnull NS_NOESCAPE SDGraphicsImageDrawingActions)actions; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDGraphicsImageRenderer.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDGraphicsImageRenderer.m deleted file mode 100644 index aeda97b..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDGraphicsImageRenderer.m +++ /dev/null @@ -1,256 +0,0 @@ -/* -* This file is part of the SDWebImage package. -* (c) Olivier Poitrey -* -* For the full copyright and license information, please view the LICENSE -* file that was distributed with this source code. -*/ - -#import "SDGraphicsImageRenderer.h" -#import "SDImageGraphics.h" - -@interface SDGraphicsImageRendererFormat () -#if SD_UIKIT -@property (nonatomic, strong) UIGraphicsImageRendererFormat *uiformat API_AVAILABLE(ios(10.0), tvos(10.0)); -#endif -@end - -@implementation SDGraphicsImageRendererFormat -@synthesize scale = _scale; -@synthesize opaque = _opaque; -@synthesize preferredRange = _preferredRange; - -#pragma mark - Property -- (CGFloat)scale { -#if SD_UIKIT - if (@available(iOS 10.0, tvOS 10.10, *)) { - return self.uiformat.scale; - } else { - return _scale; - } -#else - return _scale; -#endif -} - -- (void)setScale:(CGFloat)scale { -#if SD_UIKIT - if (@available(iOS 10.0, tvOS 10.10, *)) { - self.uiformat.scale = scale; - } else { - _scale = scale; - } -#else - _scale = scale; -#endif -} - -- (BOOL)opaque { -#if SD_UIKIT - if (@available(iOS 10.0, tvOS 10.10, *)) { - return self.uiformat.opaque; - } else { - return _opaque; - } -#else - return _opaque; -#endif -} - -- (void)setOpaque:(BOOL)opaque { -#if SD_UIKIT - if (@available(iOS 10.0, tvOS 10.10, *)) { - self.uiformat.opaque = opaque; - } else { - _opaque = opaque; - } -#else - _opaque = opaque; -#endif -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" -- (SDGraphicsImageRendererFormatRange)preferredRange { -#if SD_UIKIT - if (@available(iOS 10.0, tvOS 10.10, *)) { - if (@available(iOS 12.0, tvOS 12.0, *)) { - return (SDGraphicsImageRendererFormatRange)self.uiformat.preferredRange; - } else { - BOOL prefersExtendedRange = self.uiformat.prefersExtendedRange; - if (prefersExtendedRange) { - return SDGraphicsImageRendererFormatRangeExtended; - } else { - return SDGraphicsImageRendererFormatRangeStandard; - } - } - } else { - return _preferredRange; - } -#else - return _preferredRange; -#endif -} - -- (void)setPreferredRange:(SDGraphicsImageRendererFormatRange)preferredRange { -#if SD_UIKIT - if (@available(iOS 10.0, tvOS 10.10, *)) { - if (@available(iOS 12.0, tvOS 12.0, *)) { - self.uiformat.preferredRange = (UIGraphicsImageRendererFormatRange)preferredRange; - } else { - switch (preferredRange) { - case SDGraphicsImageRendererFormatRangeExtended: - self.uiformat.prefersExtendedRange = YES; - break; - case SDGraphicsImageRendererFormatRangeStandard: - self.uiformat.prefersExtendedRange = NO; - default: - // Automatic means default - break; - } - } - } else { - _preferredRange = preferredRange; - } -#else - _preferredRange = preferredRange; -#endif -} -#pragma clang diagnostic pop - -- (instancetype)init { - self = [super init]; - if (self) { -#if SD_UIKIT - if (@available(iOS 10.0, tvOS 10.10, *)) { - UIGraphicsImageRendererFormat *uiformat = [[UIGraphicsImageRendererFormat alloc] init]; - self.uiformat = uiformat; - } else { -#endif -#if SD_WATCH - CGFloat screenScale = [WKInterfaceDevice currentDevice].screenScale; -#elif SD_UIKIT - CGFloat screenScale = [UIScreen mainScreen].scale; -#elif SD_MAC - NSScreen *mainScreen = nil; - if (@available(macOS 10.12, *)) { - mainScreen = [NSScreen mainScreen]; - } else { - mainScreen = [NSScreen screens].firstObject; - } - CGFloat screenScale = mainScreen.backingScaleFactor ?: 1.0f; -#endif - self.scale = screenScale; - self.opaque = NO; - self.preferredRange = SDGraphicsImageRendererFormatRangeStandard; -#if SD_UIKIT - } -#endif - } - return self; -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunguarded-availability" -- (instancetype)initForMainScreen { - self = [super init]; - if (self) { -#if SD_UIKIT - if (@available(iOS 10.0, tvOS 10.0, *)) { - UIGraphicsImageRendererFormat *uiformat; - // iOS 11.0.0 GM does have `preferredFormat`, but iOS 11 betas did not (argh!) - if ([UIGraphicsImageRenderer respondsToSelector:@selector(preferredFormat)]) { - uiformat = [UIGraphicsImageRendererFormat preferredFormat]; - } else { - uiformat = [UIGraphicsImageRendererFormat defaultFormat]; - } - self.uiformat = uiformat; - } else { -#endif -#if SD_WATCH - CGFloat screenScale = [WKInterfaceDevice currentDevice].screenScale; -#elif SD_UIKIT - CGFloat screenScale = [UIScreen mainScreen].scale; -#elif SD_MAC - NSScreen *mainScreen = nil; - if (@available(macOS 10.12, *)) { - mainScreen = [NSScreen mainScreen]; - } else { - mainScreen = [NSScreen screens].firstObject; - } - CGFloat screenScale = mainScreen.backingScaleFactor ?: 1.0f; -#endif - self.scale = screenScale; - self.opaque = NO; - self.preferredRange = SDGraphicsImageRendererFormatRangeStandard; -#if SD_UIKIT - } -#endif - } - return self; -} -#pragma clang diagnostic pop - -+ (instancetype)preferredFormat { - SDGraphicsImageRendererFormat *format = [[SDGraphicsImageRendererFormat alloc] initForMainScreen]; - return format; -} - -@end - -@interface SDGraphicsImageRenderer () -@property (nonatomic, assign) CGSize size; -@property (nonatomic, strong) SDGraphicsImageRendererFormat *format; -#if SD_UIKIT -@property (nonatomic, strong) UIGraphicsImageRenderer *uirenderer API_AVAILABLE(ios(10.0), tvos(10.0)); -#endif -@end - -@implementation SDGraphicsImageRenderer - -- (instancetype)initWithSize:(CGSize)size { - return [self initWithSize:size format:SDGraphicsImageRendererFormat.preferredFormat]; -} - -- (instancetype)initWithSize:(CGSize)size format:(SDGraphicsImageRendererFormat *)format { - NSParameterAssert(format); - self = [super init]; - if (self) { - self.size = size; - self.format = format; -#if SD_UIKIT - if (@available(iOS 10.0, tvOS 10.0, *)) { - UIGraphicsImageRendererFormat *uiformat = format.uiformat; - self.uirenderer = [[UIGraphicsImageRenderer alloc] initWithSize:size format:uiformat]; - } -#endif - } - return self; -} - -- (UIImage *)imageWithActions:(NS_NOESCAPE SDGraphicsImageDrawingActions)actions { - NSParameterAssert(actions); -#if SD_UIKIT - if (@available(iOS 10.0, tvOS 10.0, *)) { - UIGraphicsImageDrawingActions uiactions = ^(UIGraphicsImageRendererContext *rendererContext) { - if (actions) { - actions(rendererContext.CGContext); - } - }; - return [self.uirenderer imageWithActions:uiactions]; - } else { -#endif - SDGraphicsBeginImageContextWithOptions(self.size, self.format.opaque, self.format.scale); - CGContextRef context = SDGraphicsGetCurrentContext(); - if (actions) { - actions(context); - } - UIImage *image = SDGraphicsGetImageFromCurrentImageContext(); - SDGraphicsEndImageContext(); - return image; -#if SD_UIKIT - } -#endif -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageAPNGCoder.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageAPNGCoder.h deleted file mode 100644 index f73742c..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageAPNGCoder.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDImageIOAnimatedCoder.h" - -/** - Built in coder using ImageIO that supports APNG encoding/decoding - */ -@interface SDImageAPNGCoder : SDImageIOAnimatedCoder - -@property (nonatomic, class, readonly, nonnull) SDImageAPNGCoder *sharedCoder; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageAPNGCoder.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageAPNGCoder.m deleted file mode 100644 index b262bd3..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageAPNGCoder.m +++ /dev/null @@ -1,58 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDImageAPNGCoder.h" -#import "SDImageIOAnimatedCoderInternal.h" -#if SD_MAC -#import -#else -#import -#endif - -@implementation SDImageAPNGCoder - -+ (instancetype)sharedCoder { - static SDImageAPNGCoder *coder; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - coder = [[SDImageAPNGCoder alloc] init]; - }); - return coder; -} - -#pragma mark - Subclass Override - -+ (SDImageFormat)imageFormat { - return SDImageFormatPNG; -} - -+ (NSString *)imageUTType { - return (__bridge NSString *)kSDUTTypePNG; -} - -+ (NSString *)dictionaryProperty { - return (__bridge NSString *)kCGImagePropertyPNGDictionary; -} - -+ (NSString *)unclampedDelayTimeProperty { - return (__bridge NSString *)kCGImagePropertyAPNGUnclampedDelayTime; -} - -+ (NSString *)delayTimeProperty { - return (__bridge NSString *)kCGImagePropertyAPNGDelayTime; -} - -+ (NSString *)loopCountProperty { - return (__bridge NSString *)kCGImagePropertyAPNGLoopCount; -} - -+ (NSUInteger)defaultLoopCount { - return 0; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageAWebPCoder.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageAWebPCoder.h deleted file mode 100644 index 4b585a9..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageAWebPCoder.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDImageIOAnimatedCoder.h" - -/** - This coder is used for Google WebP and Animated WebP(AWebP) image format. - Image/IO provide the WebP decoding support in iOS 14/macOS 11/tvOS 14/watchOS 7+. - @note Currently Image/IO seems does not supports WebP encoding, if you need WebP encoding, use the custom codec below. - @note If you need to support lower firmware version for WebP, you can have a try at https://github.com/SDWebImage/SDWebImageWebPCoder - */ -API_AVAILABLE(ios(14.0), tvos(14.0), macos(11.0), watchos(7.0)) -@interface SDImageAWebPCoder : SDImageIOAnimatedCoder - -@property (nonatomic, class, readonly, nonnull) SDImageAWebPCoder *sharedCoder; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageAWebPCoder.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageAWebPCoder.m deleted file mode 100644 index e58bc21..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageAWebPCoder.m +++ /dev/null @@ -1,98 +0,0 @@ -/* -* This file is part of the SDWebImage package. -* (c) Olivier Poitrey -* -* For the full copyright and license information, please view the LICENSE -* file that was distributed with this source code. -*/ - -#import "SDImageAWebPCoder.h" -#import "SDImageIOAnimatedCoderInternal.h" - -// These constants are available from iOS 14+ and Xcode 12. This raw value is used for toolchain and firmware compatibility -static NSString * kSDCGImagePropertyWebPDictionary = @"{WebP}"; -static NSString * kSDCGImagePropertyWebPLoopCount = @"LoopCount"; -static NSString * kSDCGImagePropertyWebPDelayTime = @"DelayTime"; -static NSString * kSDCGImagePropertyWebPUnclampedDelayTime = @"UnclampedDelayTime"; - -@implementation SDImageAWebPCoder - -+ (void)initialize { -#if __IPHONE_14_0 || __TVOS_14_0 || __MAC_11_0 || __WATCHOS_7_0 - // Xcode 12 - if (@available(iOS 14, tvOS 14, macOS 11, watchOS 7, *)) { - // Use SDK instead of raw value - kSDCGImagePropertyWebPDictionary = (__bridge NSString *)kCGImagePropertyWebPDictionary; - kSDCGImagePropertyWebPLoopCount = (__bridge NSString *)kCGImagePropertyWebPLoopCount; - kSDCGImagePropertyWebPDelayTime = (__bridge NSString *)kCGImagePropertyWebPDelayTime; - kSDCGImagePropertyWebPUnclampedDelayTime = (__bridge NSString *)kCGImagePropertyWebPUnclampedDelayTime; - } -#endif -} - -+ (instancetype)sharedCoder { - static SDImageAWebPCoder *coder; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - coder = [[SDImageAWebPCoder alloc] init]; - }); - return coder; -} - -#pragma mark - SDImageCoder - -- (BOOL)canDecodeFromData:(nullable NSData *)data { - switch ([NSData sd_imageFormatForImageData:data]) { - case SDImageFormatWebP: - // Check WebP decoding compatibility - return [self.class canDecodeFromFormat:SDImageFormatWebP]; - default: - return NO; - } -} - -- (BOOL)canIncrementalDecodeFromData:(NSData *)data { - return [self canDecodeFromData:data]; -} - -- (BOOL)canEncodeToFormat:(SDImageFormat)format { - switch (format) { - case SDImageFormatWebP: - // Check WebP encoding compatibility - return [self.class canEncodeToFormat:SDImageFormatWebP]; - default: - return NO; - } -} - -#pragma mark - Subclass Override - -+ (SDImageFormat)imageFormat { - return SDImageFormatWebP; -} - -+ (NSString *)imageUTType { - return (__bridge NSString *)kSDUTTypeWebP; -} - -+ (NSString *)dictionaryProperty { - return kSDCGImagePropertyWebPDictionary; -} - -+ (NSString *)unclampedDelayTimeProperty { - return kSDCGImagePropertyWebPUnclampedDelayTime; -} - -+ (NSString *)delayTimeProperty { - return kSDCGImagePropertyWebPDelayTime; -} - -+ (NSString *)loopCountProperty { - return kSDCGImagePropertyWebPLoopCount; -} - -+ (NSUInteger)defaultLoopCount { - return 0; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCache.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCache.h deleted file mode 100644 index 9a75580..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCache.h +++ /dev/null @@ -1,450 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageCompat.h" -#import "SDWebImageDefine.h" -#import "SDImageCacheConfig.h" -#import "SDImageCacheDefine.h" -#import "SDMemoryCache.h" -#import "SDDiskCache.h" - -/// Image Cache Options -typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { - /** - * By default, we do not query image data when the image is already cached in memory. This mask can force to query image data at the same time. However, this query is asynchronously unless you specify `SDImageCacheQueryMemoryDataSync` - */ - SDImageCacheQueryMemoryData = 1 << 0, - /** - * By default, when you only specify `SDImageCacheQueryMemoryData`, we query the memory image data asynchronously. Combined this mask as well to query the memory image data synchronously. - */ - SDImageCacheQueryMemoryDataSync = 1 << 1, - /** - * By default, when the memory cache miss, we query the disk cache asynchronously. This mask can force to query disk cache (when memory cache miss) synchronously. - @note These 3 query options can be combined together. For the full list about these masks combination, see wiki page. - */ - SDImageCacheQueryDiskDataSync = 1 << 2, - /** - * By default, images are decoded respecting their original size. On iOS, this flag will scale down the - * images to a size compatible with the constrained memory of devices. - */ - SDImageCacheScaleDownLargeImages = 1 << 3, - /** - * By default, we will decode the image in the background during cache query and download from the network. This can help to improve performance because when rendering image on the screen, it need to be firstly decoded. But this happen on the main queue by Core Animation. - * However, this process may increase the memory usage as well. If you are experiencing a issue due to excessive memory consumption, This flag can prevent decode the image. - */ - SDImageCacheAvoidDecodeImage = 1 << 4, - /** - * By default, we decode the animated image. This flag can force decode the first frame only and produce the static image. - */ - SDImageCacheDecodeFirstFrameOnly = 1 << 5, - /** - * By default, for `SDAnimatedImage`, we decode the animated image frame during rendering to reduce memory usage. This flag actually trigger `preloadAllAnimatedImageFrames = YES` after image load from disk cache - */ - SDImageCachePreloadAllFrames = 1 << 6, - /** - * By default, when you use `SDWebImageContextAnimatedImageClass` context option (like using `SDAnimatedImageView` which designed to use `SDAnimatedImage`), we may still use `UIImage` when the memory cache hit, or image decoder is not available, to behave as a fallback solution. - * Using this option, can ensure we always produce image with your provided class. If failed, an error with code `SDWebImageErrorBadImageData` will be used. - * Note this options is not compatible with `SDImageCacheDecodeFirstFrameOnly`, which always produce a UIImage/NSImage. - */ - SDImageCacheMatchAnimatedImageClass = 1 << 7, -}; - -/** - * A token associated with each cache query. Can be used to cancel a cache query - */ -@interface SDImageCacheToken : NSObject - -/** - Cancel the current cache query. - */ -- (void)cancel; - -/** - The query's cache key. - */ -@property (nonatomic, strong, nullable, readonly) NSString *key; - -@end - -/** - * SDImageCache maintains a memory cache and a disk cache. Disk cache write operations are performed - * asynchronous so it doesn’t add unnecessary latency to the UI. - */ -@interface SDImageCache : NSObject - -#pragma mark - Properties - -/** - * Cache Config object - storing all kind of settings. - * The property is copy so change of current config will not accidentally affect other cache's config. - */ -@property (nonatomic, copy, nonnull, readonly) SDImageCacheConfig *config; - -/** - * The memory cache implementation object used for current image cache. - * By default we use `SDMemoryCache` class, you can also use this to call your own implementation class method. - * @note To customize this class, check `SDImageCacheConfig.memoryCacheClass` property. - */ -@property (nonatomic, strong, readonly, nonnull) id memoryCache; - -/** - * The disk cache implementation object used for current image cache. - * By default we use `SDMemoryCache` class, you can also use this to call your own implementation class method. - * @note To customize this class, check `SDImageCacheConfig.diskCacheClass` property. - * @warning When calling method about read/write in disk cache, be sure to either make your disk cache implementation IO-safe or using the same access queue to avoid issues. - */ -@property (nonatomic, strong, readonly, nonnull) id diskCache; - -/** - * The disk cache's root path - */ -@property (nonatomic, copy, nonnull, readonly) NSString *diskCachePath; - -/** - * The additional disk cache path to check if the query from disk cache not exist; - * The `key` param is the image cache key. The returned file path will be used to load the disk cache. If return nil, ignore it. - * Useful if you want to bundle pre-loaded images with your app - */ -@property (nonatomic, copy, nullable) SDImageCacheAdditionalCachePathBlock additionalCachePathBlock; - -#pragma mark - Singleton and initialization - -/** - * Returns global shared cache instance - */ -@property (nonatomic, class, readonly, nonnull) SDImageCache *sharedImageCache; - -/** - * Control the default disk cache directory. This will effect all the SDImageCache instance created after modification, even for shared image cache. - * This can be used to share the same disk cache with the App and App Extension (Today/Notification Widget) using `- [NSFileManager.containerURLForSecurityApplicationGroupIdentifier:]`. - * @note If you pass nil, the value will be reset to `~/Library/Caches/com.hackemist.SDImageCache`. - * @note We still preserve the `namespace` arg, which means, if you change this property into `/path/to/use`, the `SDImageCache.sharedImageCache.diskCachePath` should be `/path/to/use/default` because shared image cache use `default` as namespace. - * Defaults to nil. - */ -@property (nonatomic, class, readwrite, null_resettable) NSString *defaultDiskCacheDirectory; - -/** - * Init a new cache store with a specific namespace - * The final disk cache directory should looks like ($directory/$namespace). And the default config of shared cache, should result in (~/Library/Caches/com.hackemist.SDImageCache/default/) - * - * @param ns The namespace to use for this cache store - */ -- (nonnull instancetype)initWithNamespace:(nonnull NSString *)ns; - -/** - * Init a new cache store with a specific namespace and directory. - * The final disk cache directory should looks like ($directory/$namespace). And the default config of shared cache, should result in (~/Library/Caches/com.hackemist.SDImageCache/default/) - * - * @param ns The namespace to use for this cache store - * @param directory Directory to cache disk images in - */ -- (nonnull instancetype)initWithNamespace:(nonnull NSString *)ns - diskCacheDirectory:(nullable NSString *)directory; - -/** - * Init a new cache store with a specific namespace, directory and config. - * The final disk cache directory should looks like ($directory/$namespace). And the default config of shared cache, should result in (~/Library/Caches/com.hackemist.SDImageCache/default/) - * - * @param ns The namespace to use for this cache store - * @param directory Directory to cache disk images in - * @param config The cache config to be used to create the cache. You can provide custom memory cache or disk cache class in the cache config - */ -- (nonnull instancetype)initWithNamespace:(nonnull NSString *)ns - diskCacheDirectory:(nullable NSString *)directory - config:(nullable SDImageCacheConfig *)config NS_DESIGNATED_INITIALIZER; - -#pragma mark - Cache paths - -/** - Get the cache path for a certain key - - @param key The unique image cache key - @return The cache path. You can check `lastPathComponent` to grab the file name. - */ -- (nullable NSString *)cachePathForKey:(nullable NSString *)key; - -#pragma mark - Store Ops - -/** - * Asynchronously store an image into memory and disk cache at the given key. - * - * @param image The image to store - * @param key The unique image cache key, usually it's image absolute URL - * @param completionBlock A block executed after the operation is finished - */ -- (void)storeImage:(nullable UIImage *)image - forKey:(nullable NSString *)key - completion:(nullable SDWebImageNoParamsBlock)completionBlock; - -/** - * Asynchronously store an image into memory and disk cache at the given key. - * - * @param image The image to store - * @param key The unique image cache key, usually it's image absolute URL - * @param toDisk Store the image to disk cache if YES. If NO, the completion block is called synchronously - * @param completionBlock A block executed after the operation is finished - * @note If no image data is provided and encode to disk, we will try to detect the image format (using either `sd_imageFormat` or `SDAnimatedImage` protocol method) and animation status, to choose the best matched format, including GIF, JPEG or PNG. - */ -- (void)storeImage:(nullable UIImage *)image - forKey:(nullable NSString *)key - toDisk:(BOOL)toDisk - completion:(nullable SDWebImageNoParamsBlock)completionBlock; - -/** - * Asynchronously store an image data into disk cache at the given key. - * - * @param imageData The image data to store - * @param key The unique image cache key, usually it's image absolute URL - * @param completionBlock A block executed after the operation is finished - */ -- (void)storeImageData:(nullable NSData *)imageData - forKey:(nullable NSString *)key - completion:(nullable SDWebImageNoParamsBlock)completionBlock; - -/** - * Asynchronously store an image into memory and disk cache at the given key. - * - * @param image The image to store - * @param imageData The image data as returned by the server, this representation will be used for disk storage - * instead of converting the given image object into a storable/compressed image format in order - * to save quality and CPU - * @param key The unique image cache key, usually it's image absolute URL - * @param toDisk Store the image to disk cache if YES. If NO, the completion block is called synchronously - * @param completionBlock A block executed after the operation is finished - * @note If no image data is provided and encode to disk, we will try to detect the image format (using either `sd_imageFormat` or `SDAnimatedImage` protocol method) and animation status, to choose the best matched format, including GIF, JPEG or PNG. - */ -- (void)storeImage:(nullable UIImage *)image - imageData:(nullable NSData *)imageData - forKey:(nullable NSString *)key - toDisk:(BOOL)toDisk - completion:(nullable SDWebImageNoParamsBlock)completionBlock; - -/** - * Synchronously store an image into memory cache at the given key. - * - * @param image The image to store - * @param key The unique image cache key, usually it's image absolute URL - */ -- (void)storeImageToMemory:(nullable UIImage*)image - forKey:(nullable NSString *)key; - -/** - * Synchronously store an image data into disk cache at the given key. - * - * @param imageData The image data to store - * @param key The unique image cache key, usually it's image absolute URL - */ -- (void)storeImageDataToDisk:(nullable NSData *)imageData - forKey:(nullable NSString *)key; - - -#pragma mark - Contains and Check Ops - -/** - * Asynchronously check if image exists in disk cache already (does not load the image) - * - * @param key the key describing the url - * @param completionBlock the block to be executed when the check is done. - * @note the completion block will be always executed on the main queue - */ -- (void)diskImageExistsWithKey:(nullable NSString *)key completion:(nullable SDImageCacheCheckCompletionBlock)completionBlock; - -/** - * Synchronously check if image data exists in disk cache already (does not load the image) - * - * @param key the key describing the url - */ -- (BOOL)diskImageDataExistsWithKey:(nullable NSString *)key; - -#pragma mark - Query and Retrieve Ops - -/** - * Synchronously query the image data for the given key in disk cache. You can decode the image data to image after loaded. - * - * @param key The unique key used to store the wanted image - * @return The image data for the given key, or nil if not found. - */ -- (nullable NSData *)diskImageDataForKey:(nullable NSString *)key; - -/** - * Asynchronously query the image data for the given key in disk cache. You can decode the image data to image after loaded. - * - * @param key The unique key used to store the wanted image - * @param completionBlock the block to be executed when the query is done. - * @note the completion block will be always executed on the main queue - */ -- (void)diskImageDataQueryForKey:(nullable NSString *)key completion:(nullable SDImageCacheQueryDataCompletionBlock)completionBlock; - -/** - * Asynchronously queries the cache with operation and call the completion when done. - * - * @param key The unique key used to store the wanted image. If you want transformed or thumbnail image, calculate the key with `SDTransformedKeyForKey`, `SDThumbnailedKeyForKey`, or generate the cache key from url with `cacheKeyForURL:context:`. - * @param doneBlock The completion block. Will not get called if the operation is cancelled - * - * @return a SDImageCacheToken instance containing the cache operation, will callback immediately when cancelled - */ -- (nullable SDImageCacheToken *)queryCacheOperationForKey:(nullable NSString *)key done:(nullable SDImageCacheQueryCompletionBlock)doneBlock; - -/** - * Asynchronously queries the cache with operation and call the completion when done. - * - * @param key The unique key used to store the wanted image. If you want transformed or thumbnail image, calculate the key with `SDTransformedKeyForKey`, `SDThumbnailedKeyForKey`, or generate the cache key from url with `cacheKeyForURL:context:`. - * @param options A mask to specify options to use for this cache query - * @param doneBlock The completion block. Will not get called if the operation is cancelled - * - * @return a SDImageCacheToken instance containing the cache operation, will callback immediately when cancelled - */ -- (nullable SDImageCacheToken *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options done:(nullable SDImageCacheQueryCompletionBlock)doneBlock; - -/** - * Asynchronously queries the cache with operation and call the completion when done. - * - * @param key The unique key used to store the wanted image. If you want transformed or thumbnail image, calculate the key with `SDTransformedKeyForKey`, `SDThumbnailedKeyForKey`, or generate the cache key from url with `cacheKeyForURL:context:`. - * @param options A mask to specify options to use for this cache query - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - * @param doneBlock The completion block. Will not get called if the operation is cancelled - * - * @return a SDImageCacheToken instance containing the cache operation, will callback immediately when cancellederation, will callback immediately when cancelled - */ -- (nullable SDImageCacheToken *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context done:(nullable SDImageCacheQueryCompletionBlock)doneBlock; - -/** - * Asynchronously queries the cache with operation and call the completion when done. - * - * @param key The unique key used to store the wanted image. If you want transformed or thumbnail image, calculate the key with `SDTransformedKeyForKey`, `SDThumbnailedKeyForKey`, or generate the cache key from url with `cacheKeyForURL:context:`. - * @param options A mask to specify options to use for this cache query - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - * @param queryCacheType Specify where to query the cache from. By default we use `.all`, which means both memory cache and disk cache. You can choose to query memory only or disk only as well. Pass `.none` is invalid and callback with nil immediately. - * @param doneBlock The completion block. Will not get called if the operation is cancelled - * - * @return a SDImageCacheToken instance containing the cache operation, will callback immediately when cancelled - */ -- (nullable SDImageCacheToken *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context cacheType:(SDImageCacheType)queryCacheType done:(nullable SDImageCacheQueryCompletionBlock)doneBlock; - -/** - * Synchronously query the memory cache. - * - * @param key The unique key used to store the image - * @return The image for the given key, or nil if not found. - */ -- (nullable UIImage *)imageFromMemoryCacheForKey:(nullable NSString *)key; - -/** - * Synchronously query the disk cache. - * - * @param key The unique key used to store the image - * @return The image for the given key, or nil if not found. - */ -- (nullable UIImage *)imageFromDiskCacheForKey:(nullable NSString *)key; - -/** - * Synchronously query the disk cache. With the options and context which may effect the image generation. (Such as transformer, animated image, thumbnail, etc) - * - * @param key The unique key used to store the image - * @param options A mask to specify options to use for this cache query - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - * @return The image for the given key, or nil if not found. - */ -- (nullable UIImage *)imageFromDiskCacheForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context; - -/** - * Synchronously query the cache (memory and or disk) after checking the memory cache. - * - * @param key The unique key used to store the image - * @return The image for the given key, or nil if not found. - */ -- (nullable UIImage *)imageFromCacheForKey:(nullable NSString *)key; - -/** - * Synchronously query the cache (memory and or disk) after checking the memory cache. With the options and context which may effect the image generation. (Such as transformer, animated image, thumbnail, etc) - * - * @param key The unique key used to store the image - * @param options A mask to specify options to use for this cache query - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - * @return The image for the given key, or nil if not found. - */ -- (nullable UIImage *)imageFromCacheForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context; - -#pragma mark - Remove Ops - -/** - * Asynchronously remove the image from memory and disk cache - * - * @param key The unique image cache key - * @param completion A block that should be executed after the image has been removed (optional) - */ -- (void)removeImageForKey:(nullable NSString *)key withCompletion:(nullable SDWebImageNoParamsBlock)completion; - -/** - * Asynchronously remove the image from memory and optionally disk cache - * - * @param key The unique image cache key - * @param fromDisk Also remove cache entry from disk if YES. If NO, the completion block is called synchronously - * @param completion A block that should be executed after the image has been removed (optional) - */ -- (void)removeImageForKey:(nullable NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(nullable SDWebImageNoParamsBlock)completion; - -/** - Synchronously remove the image from memory cache. - - @param key The unique image cache key - */ -- (void)removeImageFromMemoryForKey:(nullable NSString *)key; - -/** - Synchronously remove the image from disk cache. - - @param key The unique image cache key - */ -- (void)removeImageFromDiskForKey:(nullable NSString *)key; - -#pragma mark - Cache clean Ops - -/** - * Synchronously Clear all memory cached images - */ -- (void)clearMemory; - -/** - * Asynchronously clear all disk cached images. Non-blocking method - returns immediately. - * @param completion A block that should be executed after cache expiration completes (optional) - */ -- (void)clearDiskOnCompletion:(nullable SDWebImageNoParamsBlock)completion; - -/** - * Asynchronously remove all expired cached image from disk. Non-blocking method - returns immediately. - * @param completionBlock A block that should be executed after cache expiration completes (optional) - */ -- (void)deleteOldFilesWithCompletionBlock:(nullable SDWebImageNoParamsBlock)completionBlock; - -#pragma mark - Cache Info - -/** - * Get the total bytes size of images in the disk cache - */ -- (NSUInteger)totalDiskSize; - -/** - * Get the number of images in the disk cache - */ -- (NSUInteger)totalDiskCount; - -/** - * Asynchronously calculate the disk cache's size. - */ -- (void)calculateSizeWithCompletionBlock:(nullable SDImageCacheCalculateSizeBlock)completionBlock; - -@end - -/** - * SDImageCache is the built-in image cache implementation for web image manager. It adopts `SDImageCache` protocol to provide the function for web image manager to use for image loading process. - */ -@interface SDImageCache (SDImageCache) - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCache.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCache.m deleted file mode 100644 index cce92f6..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCache.m +++ /dev/null @@ -1,1011 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDImageCache.h" -#import "NSImage+Compatibility.h" -#import "SDImageCodersManager.h" -#import "SDImageCoderHelper.h" -#import "SDAnimatedImage.h" -#import "UIImage+MemoryCacheCost.h" -#import "UIImage+Metadata.h" -#import "UIImage+ExtendedCacheData.h" - -@interface SDImageCacheToken () - -@property (nonatomic, strong, nullable, readwrite) NSString *key; -@property (nonatomic, assign, getter=isCancelled) BOOL cancelled; -@property (nonatomic, copy, nullable) SDImageCacheQueryCompletionBlock doneBlock; - -@end - -@implementation SDImageCacheToken - --(instancetype)initWithDoneBlock:(nullable SDImageCacheQueryCompletionBlock)doneBlock { - self = [super init]; - if (self) { - self.doneBlock = doneBlock; - } - return self; -} - -- (void)cancel { - @synchronized (self) { - if (self.isCancelled) { - return; - } - self.cancelled = YES; - - dispatch_main_async_safe(^{ - if (self.doneBlock) { - self.doneBlock(nil, nil, SDImageCacheTypeNone); - self.doneBlock = nil; - } - }); - } -} - -@end - -static NSString * _defaultDiskCacheDirectory; - -@interface SDImageCache () - -#pragma mark - Properties -@property (nonatomic, strong, readwrite, nonnull) id memoryCache; -@property (nonatomic, strong, readwrite, nonnull) id diskCache; -@property (nonatomic, copy, readwrite, nonnull) SDImageCacheConfig *config; -@property (nonatomic, copy, readwrite, nonnull) NSString *diskCachePath; -@property (nonatomic, strong, nullable) dispatch_queue_t ioQueue; - -@end - - -@implementation SDImageCache - -#pragma mark - Singleton, init, dealloc - -+ (nonnull instancetype)sharedImageCache { - static dispatch_once_t once; - static id instance; - dispatch_once(&once, ^{ - instance = [self new]; - }); - return instance; -} - -+ (NSString *)defaultDiskCacheDirectory { - if (!_defaultDiskCacheDirectory) { - _defaultDiskCacheDirectory = [[self userCacheDirectory] stringByAppendingPathComponent:@"com.hackemist.SDImageCache"]; - } - return _defaultDiskCacheDirectory; -} - -+ (void)setDefaultDiskCacheDirectory:(NSString *)defaultDiskCacheDirectory { - _defaultDiskCacheDirectory = [defaultDiskCacheDirectory copy]; -} - -- (instancetype)init { - return [self initWithNamespace:@"default"]; -} - -- (nonnull instancetype)initWithNamespace:(nonnull NSString *)ns { - return [self initWithNamespace:ns diskCacheDirectory:nil]; -} - -- (nonnull instancetype)initWithNamespace:(nonnull NSString *)ns - diskCacheDirectory:(nullable NSString *)directory { - return [self initWithNamespace:ns diskCacheDirectory:directory config:SDImageCacheConfig.defaultCacheConfig]; -} - -- (nonnull instancetype)initWithNamespace:(nonnull NSString *)ns - diskCacheDirectory:(nullable NSString *)directory - config:(nullable SDImageCacheConfig *)config { - if ((self = [super init])) { - NSAssert(ns, @"Cache namespace should not be nil"); - - // Create IO serial queue - _ioQueue = dispatch_queue_create("com.hackemist.SDImageCache", DISPATCH_QUEUE_SERIAL); - - if (!config) { - config = SDImageCacheConfig.defaultCacheConfig; - } - _config = [config copy]; - - // Init the memory cache - NSAssert([config.memoryCacheClass conformsToProtocol:@protocol(SDMemoryCache)], @"Custom memory cache class must conform to `SDMemoryCache` protocol"); - _memoryCache = [[config.memoryCacheClass alloc] initWithConfig:_config]; - - // Init the disk cache - if (!directory) { - // Use default disk cache directory - directory = [self.class defaultDiskCacheDirectory]; - } - _diskCachePath = [directory stringByAppendingPathComponent:ns]; - - NSAssert([config.diskCacheClass conformsToProtocol:@protocol(SDDiskCache)], @"Custom disk cache class must conform to `SDDiskCache` protocol"); - _diskCache = [[config.diskCacheClass alloc] initWithCachePath:_diskCachePath config:_config]; - - // Check and migrate disk cache directory if need - [self migrateDiskCacheDirectory]; - -#if SD_UIKIT - // Subscribe to app events - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(applicationWillTerminate:) - name:UIApplicationWillTerminateNotification - object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(applicationDidEnterBackground:) - name:UIApplicationDidEnterBackgroundNotification - object:nil]; -#endif -#if SD_MAC - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(applicationWillTerminate:) - name:NSApplicationWillTerminateNotification - object:nil]; -#endif - } - - return self; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -#pragma mark - Cache paths - -- (nullable NSString *)cachePathForKey:(nullable NSString *)key { - if (!key) { - return nil; - } - return [self.diskCache cachePathForKey:key]; -} - -+ (nullable NSString *)userCacheDirectory { - NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); - return paths.firstObject; -} - -- (void)migrateDiskCacheDirectory { - if ([self.diskCache isKindOfClass:[SDDiskCache class]]) { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - // ~/Library/Caches/com.hackemist.SDImageCache/default/ - NSString *newDefaultPath = [[[self.class userCacheDirectory] stringByAppendingPathComponent:@"com.hackemist.SDImageCache"] stringByAppendingPathComponent:@"default"]; - // ~/Library/Caches/default/com.hackemist.SDWebImageCache.default/ - NSString *oldDefaultPath = [[[self.class userCacheDirectory] stringByAppendingPathComponent:@"default"] stringByAppendingPathComponent:@"com.hackemist.SDWebImageCache.default"]; - dispatch_async(self.ioQueue, ^{ - [((SDDiskCache *)self.diskCache) moveCacheDirectoryFromPath:oldDefaultPath toPath:newDefaultPath]; - }); - }); - } -} - -#pragma mark - Store Ops - -- (void)storeImage:(nullable UIImage *)image - forKey:(nullable NSString *)key - completion:(nullable SDWebImageNoParamsBlock)completionBlock { - [self storeImage:image imageData:nil forKey:key toDisk:YES completion:completionBlock]; -} - -- (void)storeImage:(nullable UIImage *)image - forKey:(nullable NSString *)key - toDisk:(BOOL)toDisk - completion:(nullable SDWebImageNoParamsBlock)completionBlock { - [self storeImage:image imageData:nil forKey:key toDisk:toDisk completion:completionBlock]; -} - -- (void)storeImageData:(nullable NSData *)imageData - forKey:(nullable NSString *)key - completion:(nullable SDWebImageNoParamsBlock)completionBlock { - [self storeImage:nil imageData:imageData forKey:key toDisk:YES completion:completionBlock]; -} - -- (void)storeImage:(nullable UIImage *)image - imageData:(nullable NSData *)imageData - forKey:(nullable NSString *)key - toDisk:(BOOL)toDisk - completion:(nullable SDWebImageNoParamsBlock)completionBlock { - return [self storeImage:image imageData:imageData forKey:key toMemory:YES toDisk:toDisk completion:completionBlock]; -} - -- (void)storeImage:(nullable UIImage *)image - imageData:(nullable NSData *)imageData - forKey:(nullable NSString *)key - toMemory:(BOOL)toMemory - toDisk:(BOOL)toDisk - completion:(nullable SDWebImageNoParamsBlock)completionBlock { - if ((!image && !imageData) || !key) { - if (completionBlock) { - completionBlock(); - } - return; - } - // if memory cache is enabled - if (image && toMemory && self.config.shouldCacheImagesInMemory) { - NSUInteger cost = image.sd_memoryCost; - [self.memoryCache setObject:image forKey:key cost:cost]; - } - - if (!toDisk) { - if (completionBlock) { - completionBlock(); - } - return; - } - dispatch_async(self.ioQueue, ^{ - @autoreleasepool { - NSData *data = imageData; - if (!data && [image conformsToProtocol:@protocol(SDAnimatedImage)]) { - // If image is custom animated image class, prefer its original animated data - data = [((id)image) animatedImageData]; - } - if (!data && image) { - // Check image's associated image format, may return .undefined - SDImageFormat format = image.sd_imageFormat; - if (format == SDImageFormatUndefined) { - // If image is animated, use GIF (APNG may be better, but has bugs before macOS 10.14) - if (image.sd_isAnimated) { - format = SDImageFormatGIF; - } else { - // If we do not have any data to detect image format, check whether it contains alpha channel to use PNG or JPEG format - format = [SDImageCoderHelper CGImageContainsAlpha:image.CGImage] ? SDImageFormatPNG : SDImageFormatJPEG; - } - } - data = [[SDImageCodersManager sharedManager] encodedDataWithImage:image format:format options:nil]; - } - [self _storeImageDataToDisk:data forKey:key]; - [self _archivedDataWithImage:image forKey:key]; - } - - if (completionBlock) { - dispatch_async(dispatch_get_main_queue(), ^{ - completionBlock(); - }); - } - }); -} - -- (void)_archivedDataWithImage:(UIImage *)image forKey:(NSString *)key { - if (!image || !key) { - return; - } - // Check extended data - id extendedObject = image.sd_extendedObject; - if (![extendedObject conformsToProtocol:@protocol(NSCoding)]) { - return; - } - NSData *extendedData; - if (@available(iOS 11, tvOS 11, macOS 10.13, watchOS 4, *)) { - NSError *error; - extendedData = [NSKeyedArchiver archivedDataWithRootObject:extendedObject requiringSecureCoding:NO error:&error]; - if (error) { - NSLog(@"NSKeyedArchiver archive failed with error: %@", error); - } - } else { - @try { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - extendedData = [NSKeyedArchiver archivedDataWithRootObject:extendedObject]; -#pragma clang diagnostic pop - } @catch (NSException *exception) { - NSLog(@"NSKeyedArchiver archive failed with exception: %@", exception); - } - } - if (extendedData) { - [self.diskCache setExtendedData:extendedData forKey:key]; - } -} - -- (void)storeImageToMemory:(UIImage *)image forKey:(NSString *)key { - if (!image || !key) { - return; - } - NSUInteger cost = image.sd_memoryCost; - [self.memoryCache setObject:image forKey:key cost:cost]; -} - -- (void)storeImageDataToDisk:(nullable NSData *)imageData - forKey:(nullable NSString *)key { - if (!imageData || !key) { - return; - } - - dispatch_sync(self.ioQueue, ^{ - [self _storeImageDataToDisk:imageData forKey:key]; - }); -} - -// Make sure to call from io queue by caller -- (void)_storeImageDataToDisk:(nullable NSData *)imageData forKey:(nullable NSString *)key { - if (!imageData || !key) { - return; - } - - [self.diskCache setData:imageData forKey:key]; -} - -#pragma mark - Query and Retrieve Ops - -- (void)diskImageExistsWithKey:(nullable NSString *)key completion:(nullable SDImageCacheCheckCompletionBlock)completionBlock { - dispatch_async(self.ioQueue, ^{ - BOOL exists = [self _diskImageDataExistsWithKey:key]; - if (completionBlock) { - dispatch_async(dispatch_get_main_queue(), ^{ - completionBlock(exists); - }); - } - }); -} - -- (BOOL)diskImageDataExistsWithKey:(nullable NSString *)key { - if (!key) { - return NO; - } - - __block BOOL exists = NO; - dispatch_sync(self.ioQueue, ^{ - exists = [self _diskImageDataExistsWithKey:key]; - }); - - return exists; -} - -// Make sure to call from io queue by caller -- (BOOL)_diskImageDataExistsWithKey:(nullable NSString *)key { - if (!key) { - return NO; - } - - return [self.diskCache containsDataForKey:key]; -} - -- (void)diskImageDataQueryForKey:(NSString *)key completion:(SDImageCacheQueryDataCompletionBlock)completionBlock { - dispatch_async(self.ioQueue, ^{ - NSData *imageData = [self diskImageDataBySearchingAllPathsForKey:key]; - if (completionBlock) { - dispatch_async(dispatch_get_main_queue(), ^{ - completionBlock(imageData); - }); - } - }); -} - -- (nullable NSData *)diskImageDataForKey:(nullable NSString *)key { - if (!key) { - return nil; - } - __block NSData *imageData = nil; - dispatch_sync(self.ioQueue, ^{ - imageData = [self diskImageDataBySearchingAllPathsForKey:key]; - }); - - return imageData; -} - -- (nullable UIImage *)imageFromMemoryCacheForKey:(nullable NSString *)key { - return [self.memoryCache objectForKey:key]; -} - -- (nullable UIImage *)imageFromDiskCacheForKey:(nullable NSString *)key { - return [self imageFromDiskCacheForKey:key options:0 context:nil]; -} - -- (nullable UIImage *)imageFromDiskCacheForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context { - NSData *data = [self diskImageDataForKey:key]; - UIImage *diskImage = [self diskImageForKey:key data:data options:options context:context]; - - BOOL shouldCacheToMomery = YES; - if (context[SDWebImageContextStoreCacheType]) { - SDImageCacheType cacheType = [context[SDWebImageContextStoreCacheType] integerValue]; - shouldCacheToMomery = (cacheType == SDImageCacheTypeAll || cacheType == SDImageCacheTypeMemory); - } - if (context[SDWebImageContextImageThumbnailPixelSize]) { - // Query full size cache key which generate a thumbnail, should not write back to full size memory cache - shouldCacheToMomery = NO; - } - if (shouldCacheToMomery && diskImage && self.config.shouldCacheImagesInMemory) { - NSUInteger cost = diskImage.sd_memoryCost; - [self.memoryCache setObject:diskImage forKey:key cost:cost]; - } - - return diskImage; -} - -- (nullable UIImage *)imageFromCacheForKey:(nullable NSString *)key { - return [self imageFromCacheForKey:key options:0 context:nil]; -} - -- (nullable UIImage *)imageFromCacheForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context { - // First check the in-memory cache... - UIImage *image = [self imageFromMemoryCacheForKey:key]; - if (image) { - if (options & SDImageCacheDecodeFirstFrameOnly) { - // Ensure static image - Class animatedImageClass = image.class; - if (image.sd_isAnimated || ([animatedImageClass isSubclassOfClass:[UIImage class]] && [animatedImageClass conformsToProtocol:@protocol(SDAnimatedImage)])) { -#if SD_MAC - image = [[NSImage alloc] initWithCGImage:image.CGImage scale:image.scale orientation:kCGImagePropertyOrientationUp]; -#else - image = [[UIImage alloc] initWithCGImage:image.CGImage scale:image.scale orientation:image.imageOrientation]; -#endif - } - } else if (options & SDImageCacheMatchAnimatedImageClass) { - // Check image class matching - Class animatedImageClass = image.class; - Class desiredImageClass = context[SDWebImageContextAnimatedImageClass]; - if (desiredImageClass && ![animatedImageClass isSubclassOfClass:desiredImageClass]) { - image = nil; - } - } - } - - // Since we don't need to query imageData, return image if exist - if (image) { - return image; - } - - // Second check the disk cache... - image = [self imageFromDiskCacheForKey:key options:options context:context]; - return image; -} - -- (nullable NSData *)diskImageDataBySearchingAllPathsForKey:(nullable NSString *)key { - if (!key) { - return nil; - } - - NSData *data = [self.diskCache dataForKey:key]; - if (data) { - return data; - } - - // Addtional cache path for custom pre-load cache - if (self.additionalCachePathBlock) { - NSString *filePath = self.additionalCachePathBlock(key); - if (filePath) { - data = [NSData dataWithContentsOfFile:filePath options:self.config.diskCacheReadingOptions error:nil]; - } - } - - return data; -} - -- (nullable UIImage *)diskImageForKey:(nullable NSString *)key { - NSData *data = [self diskImageDataForKey:key]; - return [self diskImageForKey:key data:data]; -} - -- (nullable UIImage *)diskImageForKey:(nullable NSString *)key data:(nullable NSData *)data { - return [self diskImageForKey:key data:data options:0 context:nil]; -} - -- (nullable UIImage *)diskImageForKey:(nullable NSString *)key data:(nullable NSData *)data options:(SDImageCacheOptions)options context:(SDWebImageContext *)context { - if (!data) { - return nil; - } - UIImage *image = SDImageCacheDecodeImageData(data, key, [[self class] imageOptionsFromCacheOptions:options], context); - [self _unarchiveObjectWithImage:image forKey:key]; - return image; -} - -- (void)_unarchiveObjectWithImage:(UIImage *)image forKey:(NSString *)key { - if (!image) { - return; - } - // Check extended data - NSData *extendedData = [self.diskCache extendedDataForKey:key]; - if (!extendedData) { - return; - } - id extendedObject; - if (@available(iOS 11, tvOS 11, macOS 10.13, watchOS 4, *)) { - NSError *error; - NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingFromData:extendedData error:&error]; - unarchiver.requiresSecureCoding = NO; - extendedObject = [unarchiver decodeTopLevelObjectForKey:NSKeyedArchiveRootObjectKey error:&error]; - if (error) { - NSLog(@"NSKeyedUnarchiver unarchive failed with error: %@", error); - } - } else { - @try { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - extendedObject = [NSKeyedUnarchiver unarchiveObjectWithData:extendedData]; -#pragma clang diagnostic pop - } @catch (NSException *exception) { - NSLog(@"NSKeyedUnarchiver unarchive failed with exception: %@", exception); - } - } - image.sd_extendedObject = extendedObject; -} - -- (nullable SDImageCacheToken *)queryCacheOperationForKey:(NSString *)key done:(SDImageCacheQueryCompletionBlock)doneBlock { - return [self queryCacheOperationForKey:key options:0 done:doneBlock]; -} - -- (nullable SDImageCacheToken *)queryCacheOperationForKey:(NSString *)key options:(SDImageCacheOptions)options done:(SDImageCacheQueryCompletionBlock)doneBlock { - return [self queryCacheOperationForKey:key options:options context:nil done:doneBlock]; -} - -- (nullable SDImageCacheToken *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context done:(nullable SDImageCacheQueryCompletionBlock)doneBlock { - return [self queryCacheOperationForKey:key options:options context:context cacheType:SDImageCacheTypeAll done:doneBlock]; -} - -- (nullable SDImageCacheToken *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context cacheType:(SDImageCacheType)queryCacheType done:(nullable SDImageCacheQueryCompletionBlock)doneBlock { - if (!key) { - if (doneBlock) { - doneBlock(nil, nil, SDImageCacheTypeNone); - } - return nil; - } - // Invalid cache type - if (queryCacheType == SDImageCacheTypeNone) { - if (doneBlock) { - doneBlock(nil, nil, SDImageCacheTypeNone); - } - return nil; - } - - // First check the in-memory cache... - UIImage *image; - if (queryCacheType != SDImageCacheTypeDisk) { - image = [self imageFromMemoryCacheForKey:key]; - } - - if (image) { - if (options & SDImageCacheDecodeFirstFrameOnly) { - // Ensure static image - Class animatedImageClass = image.class; - if (image.sd_isAnimated || ([animatedImageClass isSubclassOfClass:[UIImage class]] && [animatedImageClass conformsToProtocol:@protocol(SDAnimatedImage)])) { -#if SD_MAC - image = [[NSImage alloc] initWithCGImage:image.CGImage scale:image.scale orientation:kCGImagePropertyOrientationUp]; -#else - image = [[UIImage alloc] initWithCGImage:image.CGImage scale:image.scale orientation:image.imageOrientation]; -#endif - } - } else if (options & SDImageCacheMatchAnimatedImageClass) { - // Check image class matching - Class animatedImageClass = image.class; - Class desiredImageClass = context[SDWebImageContextAnimatedImageClass]; - if (desiredImageClass && ![animatedImageClass isSubclassOfClass:desiredImageClass]) { - image = nil; - } - } - } - - BOOL shouldQueryMemoryOnly = (queryCacheType == SDImageCacheTypeMemory) || (image && !(options & SDImageCacheQueryMemoryData)); - if (shouldQueryMemoryOnly) { - if (doneBlock) { - doneBlock(image, nil, SDImageCacheTypeMemory); - } - return nil; - } - - // Second check the disk cache... - SDImageCacheToken *operation = [[SDImageCacheToken alloc] initWithDoneBlock:doneBlock]; - operation.key = key; - // Check whether we need to synchronously query disk - // 1. in-memory cache hit & memoryDataSync - // 2. in-memory cache miss & diskDataSync - BOOL shouldQueryDiskSync = ((image && options & SDImageCacheQueryMemoryDataSync) || - (!image && options & SDImageCacheQueryDiskDataSync)); - NSData* (^queryDiskDataBlock)(void) = ^NSData* { - @synchronized (operation) { - if (operation.isCancelled) { - return nil; - } - } - - return [self diskImageDataBySearchingAllPathsForKey:key]; - }; - - UIImage* (^queryDiskImageBlock)(NSData*) = ^UIImage*(NSData* diskData) { - @synchronized (operation) { - if (operation.isCancelled) { - return nil; - } - } - - UIImage *diskImage; - if (image) { - // the image is from in-memory cache, but need image data - diskImage = image; - } else if (diskData) { - BOOL shouldCacheToMomery = YES; - if (context[SDWebImageContextStoreCacheType]) { - SDImageCacheType cacheType = [context[SDWebImageContextStoreCacheType] integerValue]; - shouldCacheToMomery = (cacheType == SDImageCacheTypeAll || cacheType == SDImageCacheTypeMemory); - } - if (context[SDWebImageContextImageThumbnailPixelSize]) { - // Query full size cache key which generate a thumbnail, should not write back to full size memory cache - shouldCacheToMomery = NO; - } - // decode image data only if in-memory cache missed - diskImage = [self diskImageForKey:key data:diskData options:options context:context]; - if (shouldCacheToMomery && diskImage && self.config.shouldCacheImagesInMemory) { - NSUInteger cost = diskImage.sd_memoryCost; - [self.memoryCache setObject:diskImage forKey:key cost:cost]; - } - } - return diskImage; - }; - - // Query in ioQueue to keep IO-safe - if (shouldQueryDiskSync) { - __block NSData* diskData; - __block UIImage* diskImage; - dispatch_sync(self.ioQueue, ^{ - diskData = queryDiskDataBlock(); - diskImage = queryDiskImageBlock(diskData); - }); - if (doneBlock) { - doneBlock(diskImage, diskData, SDImageCacheTypeDisk); - } - } else { - dispatch_async(self.ioQueue, ^{ - NSData* diskData = queryDiskDataBlock(); - UIImage* diskImage = queryDiskImageBlock(diskData); - @synchronized (operation) { - if (operation.isCancelled) { - return; - } - } - if (doneBlock) { - dispatch_async(dispatch_get_main_queue(), ^{ - // Dispatch from IO queue to main queue need time, user may call cancel during the dispatch timing - // This check is here to avoid double callback (one is from `SDImageCacheToken` in sync) - @synchronized (operation) { - if (operation.isCancelled) { - return; - } - } - doneBlock(diskImage, diskData, SDImageCacheTypeDisk); - }); - } - }); - } - - return operation; -} - -#pragma mark - Remove Ops - -- (void)removeImageForKey:(nullable NSString *)key withCompletion:(nullable SDWebImageNoParamsBlock)completion { - [self removeImageForKey:key fromDisk:YES withCompletion:completion]; -} - -- (void)removeImageForKey:(nullable NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(nullable SDWebImageNoParamsBlock)completion { - [self removeImageForKey:key fromMemory:YES fromDisk:fromDisk withCompletion:completion]; -} - -- (void)removeImageForKey:(nullable NSString *)key fromMemory:(BOOL)fromMemory fromDisk:(BOOL)fromDisk withCompletion:(nullable SDWebImageNoParamsBlock)completion { - if (key == nil) { - return; - } - - if (fromMemory && self.config.shouldCacheImagesInMemory) { - [self.memoryCache removeObjectForKey:key]; - } - - if (fromDisk) { - dispatch_async(self.ioQueue, ^{ - [self.diskCache removeDataForKey:key]; - - if (completion) { - dispatch_async(dispatch_get_main_queue(), ^{ - completion(); - }); - } - }); - } else if (completion) { - completion(); - } -} - -- (void)removeImageFromMemoryForKey:(NSString *)key { - if (!key) { - return; - } - - [self.memoryCache removeObjectForKey:key]; -} - -- (void)removeImageFromDiskForKey:(NSString *)key { - if (!key) { - return; - } - dispatch_sync(self.ioQueue, ^{ - [self _removeImageFromDiskForKey:key]; - }); -} - -// Make sure to call from io queue by caller -- (void)_removeImageFromDiskForKey:(NSString *)key { - if (!key) { - return; - } - - [self.diskCache removeDataForKey:key]; -} - -#pragma mark - Cache clean Ops - -- (void)clearMemory { - [self.memoryCache removeAllObjects]; -} - -- (void)clearDiskOnCompletion:(nullable SDWebImageNoParamsBlock)completion { - dispatch_async(self.ioQueue, ^{ - [self.diskCache removeAllData]; - if (completion) { - dispatch_async(dispatch_get_main_queue(), ^{ - completion(); - }); - } - }); -} - -- (void)deleteOldFilesWithCompletionBlock:(nullable SDWebImageNoParamsBlock)completionBlock { - dispatch_async(self.ioQueue, ^{ - [self.diskCache removeExpiredData]; - if (completionBlock) { - dispatch_async(dispatch_get_main_queue(), ^{ - completionBlock(); - }); - } - }); -} - -#pragma mark - UIApplicationWillTerminateNotification - -#if SD_UIKIT || SD_MAC -- (void)applicationWillTerminate:(NSNotification *)notification { - // On iOS/macOS, the async opeartion to remove exipred data will be terminated quickly - // Try using the sync operation to ensure we reomve the exipred data - if (!self.config.shouldRemoveExpiredDataWhenTerminate) { - return; - } - dispatch_sync(self.ioQueue, ^{ - [self.diskCache removeExpiredData]; - }); -} -#endif - -#pragma mark - UIApplicationDidEnterBackgroundNotification - -#if SD_UIKIT -- (void)applicationDidEnterBackground:(NSNotification *)notification { - if (!self.config.shouldRemoveExpiredDataWhenEnterBackground) { - return; - } - Class UIApplicationClass = NSClassFromString(@"UIApplication"); - if(!UIApplicationClass || ![UIApplicationClass respondsToSelector:@selector(sharedApplication)]) { - return; - } - UIApplication *application = [UIApplication performSelector:@selector(sharedApplication)]; - __block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{ - // Clean up any unfinished task business by marking where you - // stopped or ending the task outright. - [application endBackgroundTask:bgTask]; - bgTask = UIBackgroundTaskInvalid; - }]; - - // Start the long-running task and return immediately. - [self deleteOldFilesWithCompletionBlock:^{ - [application endBackgroundTask:bgTask]; - bgTask = UIBackgroundTaskInvalid; - }]; -} -#endif - -#pragma mark - Cache Info - -- (NSUInteger)totalDiskSize { - __block NSUInteger size = 0; - dispatch_sync(self.ioQueue, ^{ - size = [self.diskCache totalSize]; - }); - return size; -} - -- (NSUInteger)totalDiskCount { - __block NSUInteger count = 0; - dispatch_sync(self.ioQueue, ^{ - count = [self.diskCache totalCount]; - }); - return count; -} - -- (void)calculateSizeWithCompletionBlock:(nullable SDImageCacheCalculateSizeBlock)completionBlock { - dispatch_async(self.ioQueue, ^{ - NSUInteger fileCount = [self.diskCache totalCount]; - NSUInteger totalSize = [self.diskCache totalSize]; - if (completionBlock) { - dispatch_async(dispatch_get_main_queue(), ^{ - completionBlock(fileCount, totalSize); - }); - } - }); -} - -#pragma mark - Helper -+ (SDWebImageOptions)imageOptionsFromCacheOptions:(SDImageCacheOptions)cacheOptions { - SDWebImageOptions options = 0; - if (cacheOptions & SDImageCacheScaleDownLargeImages) options |= SDWebImageScaleDownLargeImages; - if (cacheOptions & SDImageCacheDecodeFirstFrameOnly) options |= SDWebImageDecodeFirstFrameOnly; - if (cacheOptions & SDImageCachePreloadAllFrames) options |= SDWebImagePreloadAllFrames; - if (cacheOptions & SDImageCacheAvoidDecodeImage) options |= SDWebImageAvoidDecodeImage; - if (cacheOptions & SDImageCacheMatchAnimatedImageClass) options |= SDWebImageMatchAnimatedImageClass; - - return options; -} - -@end - -@implementation SDImageCache (SDImageCache) - -#pragma mark - SDImageCache - -- (id)queryImageForKey:(NSString *)key options:(SDWebImageOptions)options context:(nullable SDWebImageContext *)context completion:(nullable SDImageCacheQueryCompletionBlock)completionBlock { - return [self queryImageForKey:key options:options context:context cacheType:SDImageCacheTypeAll completion:completionBlock]; -} - -- (id)queryImageForKey:(NSString *)key options:(SDWebImageOptions)options context:(nullable SDWebImageContext *)context cacheType:(SDImageCacheType)cacheType completion:(nullable SDImageCacheQueryCompletionBlock)completionBlock { - SDImageCacheOptions cacheOptions = 0; - if (options & SDWebImageQueryMemoryData) cacheOptions |= SDImageCacheQueryMemoryData; - if (options & SDWebImageQueryMemoryDataSync) cacheOptions |= SDImageCacheQueryMemoryDataSync; - if (options & SDWebImageQueryDiskDataSync) cacheOptions |= SDImageCacheQueryDiskDataSync; - if (options & SDWebImageScaleDownLargeImages) cacheOptions |= SDImageCacheScaleDownLargeImages; - if (options & SDWebImageAvoidDecodeImage) cacheOptions |= SDImageCacheAvoidDecodeImage; - if (options & SDWebImageDecodeFirstFrameOnly) cacheOptions |= SDImageCacheDecodeFirstFrameOnly; - if (options & SDWebImagePreloadAllFrames) cacheOptions |= SDImageCachePreloadAllFrames; - if (options & SDWebImageMatchAnimatedImageClass) cacheOptions |= SDImageCacheMatchAnimatedImageClass; - - return [self queryCacheOperationForKey:key options:cacheOptions context:context cacheType:cacheType done:completionBlock]; -} - -- (void)storeImage:(UIImage *)image imageData:(NSData *)imageData forKey:(nullable NSString *)key cacheType:(SDImageCacheType)cacheType completion:(nullable SDWebImageNoParamsBlock)completionBlock { - switch (cacheType) { - case SDImageCacheTypeNone: { - [self storeImage:image imageData:imageData forKey:key toMemory:NO toDisk:NO completion:completionBlock]; - } - break; - case SDImageCacheTypeMemory: { - [self storeImage:image imageData:imageData forKey:key toMemory:YES toDisk:NO completion:completionBlock]; - } - break; - case SDImageCacheTypeDisk: { - [self storeImage:image imageData:imageData forKey:key toMemory:NO toDisk:YES completion:completionBlock]; - } - break; - case SDImageCacheTypeAll: { - [self storeImage:image imageData:imageData forKey:key toMemory:YES toDisk:YES completion:completionBlock]; - } - break; - default: { - if (completionBlock) { - completionBlock(); - } - } - break; - } -} - -- (void)removeImageForKey:(NSString *)key cacheType:(SDImageCacheType)cacheType completion:(nullable SDWebImageNoParamsBlock)completionBlock { - switch (cacheType) { - case SDImageCacheTypeNone: { - [self removeImageForKey:key fromMemory:NO fromDisk:NO withCompletion:completionBlock]; - } - break; - case SDImageCacheTypeMemory: { - [self removeImageForKey:key fromMemory:YES fromDisk:NO withCompletion:completionBlock]; - } - break; - case SDImageCacheTypeDisk: { - [self removeImageForKey:key fromMemory:NO fromDisk:YES withCompletion:completionBlock]; - } - break; - case SDImageCacheTypeAll: { - [self removeImageForKey:key fromMemory:YES fromDisk:YES withCompletion:completionBlock]; - } - break; - default: { - if (completionBlock) { - completionBlock(); - } - } - break; - } -} - -- (void)containsImageForKey:(NSString *)key cacheType:(SDImageCacheType)cacheType completion:(nullable SDImageCacheContainsCompletionBlock)completionBlock { - switch (cacheType) { - case SDImageCacheTypeNone: { - if (completionBlock) { - completionBlock(SDImageCacheTypeNone); - } - } - break; - case SDImageCacheTypeMemory: { - BOOL isInMemoryCache = ([self imageFromMemoryCacheForKey:key] != nil); - if (completionBlock) { - completionBlock(isInMemoryCache ? SDImageCacheTypeMemory : SDImageCacheTypeNone); - } - } - break; - case SDImageCacheTypeDisk: { - [self diskImageExistsWithKey:key completion:^(BOOL isInDiskCache) { - if (completionBlock) { - completionBlock(isInDiskCache ? SDImageCacheTypeDisk : SDImageCacheTypeNone); - } - }]; - } - break; - case SDImageCacheTypeAll: { - BOOL isInMemoryCache = ([self imageFromMemoryCacheForKey:key] != nil); - if (isInMemoryCache) { - if (completionBlock) { - completionBlock(SDImageCacheTypeMemory); - } - return; - } - [self diskImageExistsWithKey:key completion:^(BOOL isInDiskCache) { - if (completionBlock) { - completionBlock(isInDiskCache ? SDImageCacheTypeDisk : SDImageCacheTypeNone); - } - }]; - } - break; - default: - if (completionBlock) { - completionBlock(SDImageCacheTypeNone); - } - break; - } -} - -- (void)clearWithCacheType:(SDImageCacheType)cacheType completion:(SDWebImageNoParamsBlock)completionBlock { - switch (cacheType) { - case SDImageCacheTypeNone: { - if (completionBlock) { - completionBlock(); - } - } - break; - case SDImageCacheTypeMemory: { - [self clearMemory]; - if (completionBlock) { - completionBlock(); - } - } - break; - case SDImageCacheTypeDisk: { - [self clearDiskOnCompletion:completionBlock]; - } - break; - case SDImageCacheTypeAll: { - [self clearMemory]; - [self clearDiskOnCompletion:completionBlock]; - } - break; - default: { - if (completionBlock) { - completionBlock(); - } - } - break; - } -} - -@end - diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCacheConfig.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCacheConfig.h deleted file mode 100644 index 468fa09..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCacheConfig.h +++ /dev/null @@ -1,144 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageCompat.h" - -/// Image Cache Expire Type -typedef NS_ENUM(NSUInteger, SDImageCacheConfigExpireType) { - /** - * When the image cache is accessed it will update this value - */ - SDImageCacheConfigExpireTypeAccessDate, - /** - * When the image cache is created or modified it will update this value (Default) - */ - SDImageCacheConfigExpireTypeModificationDate, - /** - * When the image cache is created it will update this value - */ - SDImageCacheConfigExpireTypeCreationDate, - /** - * When the image cache is created, modified, renamed, file attribute updated (like permission, xattr) it will update this value - */ - SDImageCacheConfigExpireTypeChangeDate, -}; - -/** - The class contains all the config for image cache - @note This class conform to NSCopying, make sure to add the property in `copyWithZone:` as well. - */ -@interface SDImageCacheConfig : NSObject - -/** - Gets the default cache config used for shared instance or initialization when it does not provide any cache config. Such as `SDImageCache.sharedImageCache`. - @note You can modify the property on default cache config, which can be used for later created cache instance. The already created cache instance does not get affected. - */ -@property (nonatomic, class, readonly, nonnull) SDImageCacheConfig *defaultCacheConfig; - -/** - * Whether or not to disable iCloud backup - * Defaults to YES. - */ -@property (assign, nonatomic) BOOL shouldDisableiCloud; - -/** - * Whether or not to use memory cache - * @note When the memory cache is disabled, the weak memory cache will also be disabled. - * Defaults to YES. - */ -@property (assign, nonatomic) BOOL shouldCacheImagesInMemory; - -/* - * The option to control weak memory cache for images. When enable, `SDImageCache`'s memory cache will use a weak maptable to store the image at the same time when it stored to memory, and get removed at the same time. - * However when memory warning is triggered, since the weak maptable does not hold a strong reference to image instance, even when the memory cache itself is purged, some images which are held strongly by UIImageViews or other live instances can be recovered again, to avoid later re-query from disk cache or network. This may be helpful for the case, for example, when app enter background and memory is purged, cause cell flashing after re-enter foreground. - * When enabling this option, we will sync back the image from weak maptable to strong cache during next time top level `sd_setImage` function call. - * Defaults to NO (YES before 5.12.0 version). You can change this option dynamically. - */ -@property (assign, nonatomic) BOOL shouldUseWeakMemoryCache; - -/** - * Whether or not to remove the expired disk data when application entering the background. (Not works for macOS) - * Defaults to YES. - */ -@property (assign, nonatomic) BOOL shouldRemoveExpiredDataWhenEnterBackground; - -/** - * Whether or not to remove the expired disk data when application been terminated. This operation is processed in sync to ensure clean up. - * Defaults to YES. - */ -@property (assign, nonatomic) BOOL shouldRemoveExpiredDataWhenTerminate; - -/** - * The reading options while reading cache from disk. - * Defaults to 0. You can set this to `NSDataReadingMappedIfSafe` to improve performance. - */ -@property (assign, nonatomic) NSDataReadingOptions diskCacheReadingOptions; - -/** - * The writing options while writing cache to disk. - * Defaults to `NSDataWritingAtomic`. You can set this to `NSDataWritingWithoutOverwriting` to prevent overwriting an existing file. - */ -@property (assign, nonatomic) NSDataWritingOptions diskCacheWritingOptions; - -/** - * The maximum length of time to keep an image in the disk cache, in seconds. - * Setting this to a negative value means no expiring. - * Setting this to zero means that all cached files would be removed when do expiration check. - * Defaults to 1 week. - */ -@property (assign, nonatomic) NSTimeInterval maxDiskAge; - -/** - * The maximum size of the disk cache, in bytes. - * Defaults to 0. Which means there is no cache size limit. - */ -@property (assign, nonatomic) NSUInteger maxDiskSize; - -/** - * The maximum "total cost" of the in-memory image cache. The cost function is the bytes size held in memory. - * @note The memory cost is bytes size in memory, but not simple pixels count. For common ARGB8888 image, one pixel is 4 bytes (32 bits). - * Defaults to 0. Which means there is no memory cost limit. - */ -@property (assign, nonatomic) NSUInteger maxMemoryCost; - -/** - * The maximum number of objects in-memory image cache should hold. - * Defaults to 0. Which means there is no memory count limit. - */ -@property (assign, nonatomic) NSUInteger maxMemoryCount; - -/* - * The attribute which the clear cache will be checked against when clearing the disk cache - * Default is Modified Date - */ -@property (assign, nonatomic) SDImageCacheConfigExpireType diskCacheExpireType; - -/** - * The custom file manager for disk cache. Pass nil to let disk cache choose the proper file manager. - * Defaults to nil. - * @note This value does not support dynamic changes. Which means further modification on this value after cache initialized has no effect. - * @note Since `NSFileManager` does not support `NSCopying`. We just pass this by reference during copying. So it's not recommend to set this value on `defaultCacheConfig`. - */ -@property (strong, nonatomic, nullable) NSFileManager *fileManager; - -/** - * The custom memory cache class. Provided class instance must conform to `SDMemoryCache` protocol to allow usage. - * Defaults to built-in `SDMemoryCache` class. - * @note This value does not support dynamic changes. Which means further modification on this value after cache initialized has no effect. - */ -@property (assign, nonatomic, nonnull) Class memoryCacheClass; - -/** - * The custom disk cache class. Provided class instance must conform to `SDDiskCache` protocol to allow usage. - * Defaults to built-in `SDDiskCache` class. - * @note This value does not support dynamic changes. Which means further modification on this value after cache initialized has no effect. - */ -@property (assign ,nonatomic, nonnull) Class diskCacheClass; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCacheConfig.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCacheConfig.m deleted file mode 100644 index fc02285..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCacheConfig.m +++ /dev/null @@ -1,65 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDImageCacheConfig.h" -#import "SDMemoryCache.h" -#import "SDDiskCache.h" - -static SDImageCacheConfig *_defaultCacheConfig; -static const NSInteger kDefaultCacheMaxDiskAge = 60 * 60 * 24 * 7; // 1 week - -@implementation SDImageCacheConfig - -+ (SDImageCacheConfig *)defaultCacheConfig { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _defaultCacheConfig = [SDImageCacheConfig new]; - }); - return _defaultCacheConfig; -} - -- (instancetype)init { - if (self = [super init]) { - _shouldDisableiCloud = YES; - _shouldCacheImagesInMemory = YES; - _shouldUseWeakMemoryCache = NO; - _shouldRemoveExpiredDataWhenEnterBackground = YES; - _shouldRemoveExpiredDataWhenTerminate = YES; - _diskCacheReadingOptions = 0; - _diskCacheWritingOptions = NSDataWritingAtomic; - _maxDiskAge = kDefaultCacheMaxDiskAge; - _maxDiskSize = 0; - _diskCacheExpireType = SDImageCacheConfigExpireTypeModificationDate; - _memoryCacheClass = [SDMemoryCache class]; - _diskCacheClass = [SDDiskCache class]; - } - return self; -} - -- (id)copyWithZone:(NSZone *)zone { - SDImageCacheConfig *config = [[[self class] allocWithZone:zone] init]; - config.shouldDisableiCloud = self.shouldDisableiCloud; - config.shouldCacheImagesInMemory = self.shouldCacheImagesInMemory; - config.shouldUseWeakMemoryCache = self.shouldUseWeakMemoryCache; - config.shouldRemoveExpiredDataWhenEnterBackground = self.shouldRemoveExpiredDataWhenEnterBackground; - config.shouldRemoveExpiredDataWhenTerminate = self.shouldRemoveExpiredDataWhenTerminate; - config.diskCacheReadingOptions = self.diskCacheReadingOptions; - config.diskCacheWritingOptions = self.diskCacheWritingOptions; - config.maxDiskAge = self.maxDiskAge; - config.maxDiskSize = self.maxDiskSize; - config.maxMemoryCost = self.maxMemoryCost; - config.maxMemoryCount = self.maxMemoryCount; - config.diskCacheExpireType = self.diskCacheExpireType; - config.fileManager = self.fileManager; // NSFileManager does not conform to NSCopying, just pass the reference - config.memoryCacheClass = self.memoryCacheClass; - config.diskCacheClass = self.diskCacheClass; - - return config; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCacheDefine.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCacheDefine.h deleted file mode 100644 index 9d84046..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCacheDefine.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageCompat.h" -#import "SDWebImageOperation.h" -#import "SDWebImageDefine.h" -#import "SDImageCoder.h" - -/// Image Cache Type -typedef NS_ENUM(NSInteger, SDImageCacheType) { - /** - * For query and contains op in response, means the image isn't available in the image cache - * For op in request, this type is not available and take no effect. - */ - SDImageCacheTypeNone, - /** - * For query and contains op in response, means the image was obtained from the disk cache. - * For op in request, means process only disk cache. - */ - SDImageCacheTypeDisk, - /** - * For query and contains op in response, means the image was obtained from the memory cache. - * For op in request, means process only memory cache. - */ - SDImageCacheTypeMemory, - /** - * For query and contains op in response, this type is not available and take no effect. - * For op in request, means process both memory cache and disk cache. - */ - SDImageCacheTypeAll -}; - -typedef void(^SDImageCacheCheckCompletionBlock)(BOOL isInCache); -typedef void(^SDImageCacheQueryDataCompletionBlock)(NSData * _Nullable data); -typedef void(^SDImageCacheCalculateSizeBlock)(NSUInteger fileCount, NSUInteger totalSize); -typedef NSString * _Nullable (^SDImageCacheAdditionalCachePathBlock)(NSString * _Nonnull key); -typedef void(^SDImageCacheQueryCompletionBlock)(UIImage * _Nullable image, NSData * _Nullable data, SDImageCacheType cacheType); -typedef void(^SDImageCacheContainsCompletionBlock)(SDImageCacheType containsCacheType); - -/** - This is the built-in decoding process for image query from cache. - @note If you want to implement your custom loader with `queryImageForKey:options:context:completion:` API, but also want to keep compatible with SDWebImage's behavior, you'd better use this to produce image. - - @param imageData The image data from the cache. Should not be nil - @param cacheKey The image cache key from the input. Should not be nil - @param options The options arg from the input - @param context The context arg from the input - @return The decoded image for current image data query from cache - */ -FOUNDATION_EXPORT UIImage * _Nullable SDImageCacheDecodeImageData(NSData * _Nonnull imageData, NSString * _Nonnull cacheKey, SDWebImageOptions options, SDWebImageContext * _Nullable context); - -/// Get the decode options from the loading context options and cache key. This is the built-in translate between the web loading part to the decoding part (which does not depens on). -/// @param context The options arg from the input -/// @param options The context arg from the input -/// @param cacheKey The image cache key from the input. Should not be nil -FOUNDATION_EXPORT SDImageCoderOptions * _Nonnull SDGetDecodeOptionsFromContext(SDWebImageContext * _Nullable context, SDWebImageOptions options, NSString * _Nonnull cacheKey); - -/** - This is the image cache protocol to provide custom image cache for `SDWebImageManager`. - Though the best practice to custom image cache, is to write your own class which conform `SDMemoryCache` or `SDDiskCache` protocol for `SDImageCache` class (See more on `SDImageCacheConfig.memoryCacheClass & SDImageCacheConfig.diskCacheClass`). - However, if your own cache implementation contains more advanced feature beyond `SDImageCache` itself, you can consider to provide this instead. For example, you can even use a cache manager like `SDImageCachesManager` to register multiple caches. - */ -@protocol SDImageCache - -@required -/** - Query the cached image from image cache for given key. The operation can be used to cancel the query. - If image is cached in memory, completion is called synchronously, else asynchronously and depends on the options arg (See `SDWebImageQueryDiskSync`) - - @param key The image cache key - @param options A mask to specify options to use for this query - @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - @param completionBlock The completion block. Will not get called if the operation is cancelled - @return The operation for this query - */ -- (nullable id)queryImageForKey:(nullable NSString *)key - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - completion:(nullable SDImageCacheQueryCompletionBlock)completionBlock; - -/** - Query the cached image from image cache for given key. The operation can be used to cancel the query. - If image is cached in memory, completion is called synchronously, else asynchronously and depends on the options arg (See `SDWebImageQueryDiskSync`) - - @param key The image cache key - @param options A mask to specify options to use for this query - @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - @param cacheType Specify where to query the cache from. By default we use `.all`, which means both memory cache and disk cache. You can choose to query memory only or disk only as well. Pass `.none` is invalid and callback with nil immediately. - @param completionBlock The completion block. Will not get called if the operation is cancelled - @return The operation for this query - */ -- (nullable id)queryImageForKey:(nullable NSString *)key - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - cacheType:(SDImageCacheType)cacheType - completion:(nullable SDImageCacheQueryCompletionBlock)completionBlock; - -/** - Store the image into image cache for the given key. If cache type is memory only, completion is called synchronously, else asynchronously. - - @param image The image to store - @param imageData The image data to be used for disk storage - @param key The image cache key - @param cacheType The image store op cache type - @param completionBlock A block executed after the operation is finished - */ -- (void)storeImage:(nullable UIImage *)image - imageData:(nullable NSData *)imageData - forKey:(nullable NSString *)key - cacheType:(SDImageCacheType)cacheType - completion:(nullable SDWebImageNoParamsBlock)completionBlock; - -/** - Remove the image from image cache for the given key. If cache type is memory only, completion is called synchronously, else asynchronously. - - @param key The image cache key - @param cacheType The image remove op cache type - @param completionBlock A block executed after the operation is finished - */ -- (void)removeImageForKey:(nullable NSString *)key - cacheType:(SDImageCacheType)cacheType - completion:(nullable SDWebImageNoParamsBlock)completionBlock; - -/** - Check if image cache contains the image for the given key (does not load the image). If image is cached in memory, completion is called synchronously, else asynchronously. - - @param key The image cache key - @param cacheType The image contains op cache type - @param completionBlock A block executed after the operation is finished. - */ -- (void)containsImageForKey:(nullable NSString *)key - cacheType:(SDImageCacheType)cacheType - completion:(nullable SDImageCacheContainsCompletionBlock)completionBlock; - -/** - Clear all the cached images for image cache. If cache type is memory only, completion is called synchronously, else asynchronously. - - @param cacheType The image clear op cache type - @param completionBlock A block executed after the operation is finished - */ -- (void)clearWithCacheType:(SDImageCacheType)cacheType - completion:(nullable SDWebImageNoParamsBlock)completionBlock; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCacheDefine.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCacheDefine.m deleted file mode 100644 index 8ee8750..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCacheDefine.m +++ /dev/null @@ -1,97 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDImageCacheDefine.h" -#import "SDImageCodersManager.h" -#import "SDImageCoderHelper.h" -#import "SDAnimatedImage.h" -#import "UIImage+Metadata.h" -#import "SDInternalMacros.h" - -SDImageCoderOptions * _Nonnull SDGetDecodeOptionsFromContext(SDWebImageContext * _Nullable context, SDWebImageOptions options, NSString * _Nonnull cacheKey) { - BOOL decodeFirstFrame = SD_OPTIONS_CONTAINS(options, SDWebImageDecodeFirstFrameOnly); - NSNumber *scaleValue = context[SDWebImageContextImageScaleFactor]; - CGFloat scale = scaleValue.doubleValue >= 1 ? scaleValue.doubleValue : SDImageScaleFactorForKey(cacheKey); - NSNumber *preserveAspectRatioValue = context[SDWebImageContextImagePreserveAspectRatio]; - NSValue *thumbnailSizeValue; - BOOL shouldScaleDown = SD_OPTIONS_CONTAINS(options, SDWebImageScaleDownLargeImages); - if (shouldScaleDown) { - CGFloat thumbnailPixels = SDImageCoderHelper.defaultScaleDownLimitBytes / 4; - CGFloat dimension = ceil(sqrt(thumbnailPixels)); - thumbnailSizeValue = @(CGSizeMake(dimension, dimension)); - } - if (context[SDWebImageContextImageThumbnailPixelSize]) { - thumbnailSizeValue = context[SDWebImageContextImageThumbnailPixelSize]; - } - - SDImageCoderMutableOptions *mutableCoderOptions = [NSMutableDictionary dictionaryWithCapacity:2]; - mutableCoderOptions[SDImageCoderDecodeFirstFrameOnly] = @(decodeFirstFrame); - mutableCoderOptions[SDImageCoderDecodeScaleFactor] = @(scale); - mutableCoderOptions[SDImageCoderDecodePreserveAspectRatio] = preserveAspectRatioValue; - mutableCoderOptions[SDImageCoderDecodeThumbnailPixelSize] = thumbnailSizeValue; - mutableCoderOptions[SDImageCoderWebImageContext] = context; - SDImageCoderOptions *coderOptions = [mutableCoderOptions copy]; - - return coderOptions; -} - -UIImage * _Nullable SDImageCacheDecodeImageData(NSData * _Nonnull imageData, NSString * _Nonnull cacheKey, SDWebImageOptions options, SDWebImageContext * _Nullable context) { - NSCParameterAssert(imageData); - NSCParameterAssert(cacheKey); - UIImage *image; - SDImageCoderOptions *coderOptions = SDGetDecodeOptionsFromContext(context, options, cacheKey); - BOOL decodeFirstFrame = SD_OPTIONS_CONTAINS(options, SDWebImageDecodeFirstFrameOnly); - CGFloat scale = [coderOptions[SDImageCoderDecodeScaleFactor] doubleValue]; - - // Grab the image coder - id imageCoder; - if ([context[SDWebImageContextImageCoder] conformsToProtocol:@protocol(SDImageCoder)]) { - imageCoder = context[SDWebImageContextImageCoder]; - } else { - imageCoder = [SDImageCodersManager sharedManager]; - } - - if (!decodeFirstFrame) { - Class animatedImageClass = context[SDWebImageContextAnimatedImageClass]; - // check whether we should use `SDAnimatedImage` - if ([animatedImageClass isSubclassOfClass:[UIImage class]] && [animatedImageClass conformsToProtocol:@protocol(SDAnimatedImage)]) { - image = [[animatedImageClass alloc] initWithData:imageData scale:scale options:coderOptions]; - if (image) { - // Preload frames if supported - if (options & SDWebImagePreloadAllFrames && [image respondsToSelector:@selector(preloadAllFrames)]) { - [((id)image) preloadAllFrames]; - } - } else { - // Check image class matching - if (options & SDWebImageMatchAnimatedImageClass) { - return nil; - } - } - } - } - if (!image) { - image = [imageCoder decodedImageWithData:imageData options:coderOptions]; - } - if (image) { - BOOL shouldDecode = !SD_OPTIONS_CONTAINS(options, SDWebImageAvoidDecodeImage); - if ([image.class conformsToProtocol:@protocol(SDAnimatedImage)]) { - // `SDAnimatedImage` do not decode - shouldDecode = NO; - } else if (image.sd_isAnimated) { - // animated image do not decode - shouldDecode = NO; - } - if (shouldDecode) { - image = [SDImageCoderHelper decodedImageWithImage:image]; - } - // assign the decode options, to let manager check whether to re-decode if needed - image.sd_decodeOptions = coderOptions; - } - - return image; -} diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCachesManager.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCachesManager.h deleted file mode 100644 index ad85db8..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCachesManager.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDImageCacheDefine.h" - -/// Policy for cache operation -typedef NS_ENUM(NSUInteger, SDImageCachesManagerOperationPolicy) { - SDImageCachesManagerOperationPolicySerial, // process all caches serially (from the highest priority to the lowest priority cache by order) - SDImageCachesManagerOperationPolicyConcurrent, // process all caches concurrently - SDImageCachesManagerOperationPolicyHighestOnly, // process the highest priority cache only - SDImageCachesManagerOperationPolicyLowestOnly // process the lowest priority cache only -}; - -/** - A caches manager to manage multiple caches. - */ -@interface SDImageCachesManager : NSObject - -/** - Returns the global shared caches manager instance. By default we will set [`SDImageCache.sharedImageCache`] into the caches array. - */ -@property (nonatomic, class, readonly, nonnull) SDImageCachesManager *sharedManager; - -// These are op policy for cache manager. - -/** - Operation policy for query op. - Defaults to `Serial`, means query all caches serially (one completion called then next begin) until one cache query success (`image` != nil). - */ -@property (nonatomic, assign) SDImageCachesManagerOperationPolicy queryOperationPolicy; - -/** - Operation policy for store op. - Defaults to `HighestOnly`, means store to the highest priority cache only. - */ -@property (nonatomic, assign) SDImageCachesManagerOperationPolicy storeOperationPolicy; - -/** - Operation policy for remove op. - Defaults to `Concurrent`, means remove all caches concurrently. - */ -@property (nonatomic, assign) SDImageCachesManagerOperationPolicy removeOperationPolicy; - -/** - Operation policy for contains op. - Defaults to `Serial`, means check all caches serially (one completion called then next begin) until one cache check success (`containsCacheType` != None). - */ -@property (nonatomic, assign) SDImageCachesManagerOperationPolicy containsOperationPolicy; - -/** - Operation policy for clear op. - Defaults to `Concurrent`, means clear all caches concurrently. - */ -@property (nonatomic, assign) SDImageCachesManagerOperationPolicy clearOperationPolicy; - -/** - All caches in caches manager. The caches array is a priority queue, which means the later added cache will have the highest priority - */ -@property (nonatomic, copy, nullable) NSArray> *caches; - -/** - Add a new cache to the end of caches array. Which has the highest priority. - - @param cache cache - */ -- (void)addCache:(nonnull id)cache; - -/** - Remove a cache in the caches array. - - @param cache cache - */ -- (void)removeCache:(nonnull id)cache; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCachesManager.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCachesManager.m deleted file mode 100644 index 5b8c0c3..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCachesManager.m +++ /dev/null @@ -1,556 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDImageCachesManager.h" -#import "SDImageCachesManagerOperation.h" -#import "SDImageCache.h" -#import "SDInternalMacros.h" - -@interface SDImageCachesManager () - -@property (nonatomic, strong, nonnull) NSMutableArray> *imageCaches; - -@end - -@implementation SDImageCachesManager { - SD_LOCK_DECLARE(_cachesLock); -} - -+ (SDImageCachesManager *)sharedManager { - static dispatch_once_t onceToken; - static SDImageCachesManager *manager; - dispatch_once(&onceToken, ^{ - manager = [[SDImageCachesManager alloc] init]; - }); - return manager; -} - -- (instancetype)init { - self = [super init]; - if (self) { - self.queryOperationPolicy = SDImageCachesManagerOperationPolicySerial; - self.storeOperationPolicy = SDImageCachesManagerOperationPolicyHighestOnly; - self.removeOperationPolicy = SDImageCachesManagerOperationPolicyConcurrent; - self.containsOperationPolicy = SDImageCachesManagerOperationPolicySerial; - self.clearOperationPolicy = SDImageCachesManagerOperationPolicyConcurrent; - // initialize with default image caches - _imageCaches = [NSMutableArray arrayWithObject:[SDImageCache sharedImageCache]]; - SD_LOCK_INIT(_cachesLock); - } - return self; -} - -- (NSArray> *)caches { - SD_LOCK(_cachesLock); - NSArray> *caches = [_imageCaches copy]; - SD_UNLOCK(_cachesLock); - return caches; -} - -- (void)setCaches:(NSArray> *)caches { - SD_LOCK(_cachesLock); - [_imageCaches removeAllObjects]; - if (caches.count) { - [_imageCaches addObjectsFromArray:caches]; - } - SD_UNLOCK(_cachesLock); -} - -#pragma mark - Cache IO operations - -- (void)addCache:(id)cache { - if (![cache conformsToProtocol:@protocol(SDImageCache)]) { - return; - } - SD_LOCK(_cachesLock); - [_imageCaches addObject:cache]; - SD_UNLOCK(_cachesLock); -} - -- (void)removeCache:(id)cache { - if (![cache conformsToProtocol:@protocol(SDImageCache)]) { - return; - } - SD_LOCK(_cachesLock); - [_imageCaches removeObject:cache]; - SD_UNLOCK(_cachesLock); -} - -#pragma mark - SDImageCache - -- (id)queryImageForKey:(NSString *)key options:(SDWebImageOptions)options context:(SDWebImageContext *)context completion:(SDImageCacheQueryCompletionBlock)completionBlock { - return [self queryImageForKey:key options:options context:context cacheType:SDImageCacheTypeAll completion:completionBlock]; -} - -- (id)queryImageForKey:(NSString *)key options:(SDWebImageOptions)options context:(SDWebImageContext *)context cacheType:(SDImageCacheType)cacheType completion:(SDImageCacheQueryCompletionBlock)completionBlock { - if (!key) { - return nil; - } - NSArray> *caches = self.caches; - NSUInteger count = caches.count; - if (count == 0) { - return nil; - } else if (count == 1) { - return [caches.firstObject queryImageForKey:key options:options context:context cacheType:cacheType completion:completionBlock]; - } - switch (self.queryOperationPolicy) { - case SDImageCachesManagerOperationPolicyHighestOnly: { - id cache = caches.lastObject; - return [cache queryImageForKey:key options:options context:context cacheType:cacheType completion:completionBlock]; - } - break; - case SDImageCachesManagerOperationPolicyLowestOnly: { - id cache = caches.firstObject; - return [cache queryImageForKey:key options:options context:context cacheType:cacheType completion:completionBlock]; - } - break; - case SDImageCachesManagerOperationPolicyConcurrent: { - SDImageCachesManagerOperation *operation = [SDImageCachesManagerOperation new]; - [operation beginWithTotalCount:caches.count]; - [self concurrentQueryImageForKey:key options:options context:context cacheType:cacheType completion:completionBlock enumerator:caches.reverseObjectEnumerator operation:operation]; - return operation; - } - break; - case SDImageCachesManagerOperationPolicySerial: { - SDImageCachesManagerOperation *operation = [SDImageCachesManagerOperation new]; - [operation beginWithTotalCount:caches.count]; - [self serialQueryImageForKey:key options:options context:context cacheType:cacheType completion:completionBlock enumerator:caches.reverseObjectEnumerator operation:operation]; - return operation; - } - break; - default: - return nil; - break; - } -} - -- (void)storeImage:(UIImage *)image imageData:(NSData *)imageData forKey:(NSString *)key cacheType:(SDImageCacheType)cacheType completion:(SDWebImageNoParamsBlock)completionBlock { - if (!key) { - return; - } - NSArray> *caches = self.caches; - NSUInteger count = caches.count; - if (count == 0) { - return; - } else if (count == 1) { - [caches.firstObject storeImage:image imageData:imageData forKey:key cacheType:cacheType completion:completionBlock]; - return; - } - switch (self.storeOperationPolicy) { - case SDImageCachesManagerOperationPolicyHighestOnly: { - id cache = caches.lastObject; - [cache storeImage:image imageData:imageData forKey:key cacheType:cacheType completion:completionBlock]; - } - break; - case SDImageCachesManagerOperationPolicyLowestOnly: { - id cache = caches.firstObject; - [cache storeImage:image imageData:imageData forKey:key cacheType:cacheType completion:completionBlock]; - } - break; - case SDImageCachesManagerOperationPolicyConcurrent: { - SDImageCachesManagerOperation *operation = [SDImageCachesManagerOperation new]; - [operation beginWithTotalCount:caches.count]; - [self concurrentStoreImage:image imageData:imageData forKey:key cacheType:cacheType completion:completionBlock enumerator:caches.reverseObjectEnumerator operation:operation]; - } - break; - case SDImageCachesManagerOperationPolicySerial: { - [self serialStoreImage:image imageData:imageData forKey:key cacheType:cacheType completion:completionBlock enumerator:caches.reverseObjectEnumerator]; - } - break; - default: - break; - } -} - -- (void)removeImageForKey:(NSString *)key cacheType:(SDImageCacheType)cacheType completion:(SDWebImageNoParamsBlock)completionBlock { - if (!key) { - return; - } - NSArray> *caches = self.caches; - NSUInteger count = caches.count; - if (count == 0) { - return; - } else if (count == 1) { - [caches.firstObject removeImageForKey:key cacheType:cacheType completion:completionBlock]; - return; - } - switch (self.removeOperationPolicy) { - case SDImageCachesManagerOperationPolicyHighestOnly: { - id cache = caches.lastObject; - [cache removeImageForKey:key cacheType:cacheType completion:completionBlock]; - } - break; - case SDImageCachesManagerOperationPolicyLowestOnly: { - id cache = caches.firstObject; - [cache removeImageForKey:key cacheType:cacheType completion:completionBlock]; - } - break; - case SDImageCachesManagerOperationPolicyConcurrent: { - SDImageCachesManagerOperation *operation = [SDImageCachesManagerOperation new]; - [operation beginWithTotalCount:caches.count]; - [self concurrentRemoveImageForKey:key cacheType:cacheType completion:completionBlock enumerator:caches.reverseObjectEnumerator operation:operation]; - } - break; - case SDImageCachesManagerOperationPolicySerial: { - [self serialRemoveImageForKey:key cacheType:cacheType completion:completionBlock enumerator:caches.reverseObjectEnumerator]; - } - break; - default: - break; - } -} - -- (void)containsImageForKey:(NSString *)key cacheType:(SDImageCacheType)cacheType completion:(SDImageCacheContainsCompletionBlock)completionBlock { - if (!key) { - return; - } - NSArray> *caches = self.caches; - NSUInteger count = caches.count; - if (count == 0) { - return; - } else if (count == 1) { - [caches.firstObject containsImageForKey:key cacheType:cacheType completion:completionBlock]; - return; - } - switch (self.clearOperationPolicy) { - case SDImageCachesManagerOperationPolicyHighestOnly: { - id cache = caches.lastObject; - [cache containsImageForKey:key cacheType:cacheType completion:completionBlock]; - } - break; - case SDImageCachesManagerOperationPolicyLowestOnly: { - id cache = caches.firstObject; - [cache containsImageForKey:key cacheType:cacheType completion:completionBlock]; - } - break; - case SDImageCachesManagerOperationPolicyConcurrent: { - SDImageCachesManagerOperation *operation = [SDImageCachesManagerOperation new]; - [operation beginWithTotalCount:caches.count]; - [self concurrentContainsImageForKey:key cacheType:cacheType completion:completionBlock enumerator:caches.reverseObjectEnumerator operation:operation]; - } - break; - case SDImageCachesManagerOperationPolicySerial: { - SDImageCachesManagerOperation *operation = [SDImageCachesManagerOperation new]; - [operation beginWithTotalCount:caches.count]; - [self serialContainsImageForKey:key cacheType:cacheType completion:completionBlock enumerator:caches.reverseObjectEnumerator operation:operation]; - } - break; - default: - break; - } -} - -- (void)clearWithCacheType:(SDImageCacheType)cacheType completion:(SDWebImageNoParamsBlock)completionBlock { - NSArray> *caches = self.caches; - NSUInteger count = caches.count; - if (count == 0) { - return; - } else if (count == 1) { - [caches.firstObject clearWithCacheType:cacheType completion:completionBlock]; - return; - } - switch (self.clearOperationPolicy) { - case SDImageCachesManagerOperationPolicyHighestOnly: { - id cache = caches.lastObject; - [cache clearWithCacheType:cacheType completion:completionBlock]; - } - break; - case SDImageCachesManagerOperationPolicyLowestOnly: { - id cache = caches.firstObject; - [cache clearWithCacheType:cacheType completion:completionBlock]; - } - break; - case SDImageCachesManagerOperationPolicyConcurrent: { - SDImageCachesManagerOperation *operation = [SDImageCachesManagerOperation new]; - [operation beginWithTotalCount:caches.count]; - [self concurrentClearWithCacheType:cacheType completion:completionBlock enumerator:caches.reverseObjectEnumerator operation:operation]; - } - break; - case SDImageCachesManagerOperationPolicySerial: { - [self serialClearWithCacheType:cacheType completion:completionBlock enumerator:caches.reverseObjectEnumerator]; - } - break; - default: - break; - } -} - -#pragma mark - Concurrent Operation - -- (void)concurrentQueryImageForKey:(NSString *)key options:(SDWebImageOptions)options context:(SDWebImageContext *)context cacheType:(SDImageCacheType)queryCacheType completion:(SDImageCacheQueryCompletionBlock)completionBlock enumerator:(NSEnumerator> *)enumerator operation:(SDImageCachesManagerOperation *)operation { - NSParameterAssert(enumerator); - NSParameterAssert(operation); - for (id cache in enumerator) { - [cache queryImageForKey:key options:options context:context cacheType:queryCacheType completion:^(UIImage * _Nullable image, NSData * _Nullable data, SDImageCacheType cacheType) { - if (operation.isCancelled) { - // Cancelled - return; - } - if (operation.isFinished) { - // Finished - return; - } - [operation completeOne]; - if (image) { - // Success - [operation done]; - if (completionBlock) { - completionBlock(image, data, cacheType); - } - return; - } - if (operation.pendingCount == 0) { - // Complete - [operation done]; - if (completionBlock) { - completionBlock(nil, nil, SDImageCacheTypeNone); - } - } - }]; - } -} - -- (void)concurrentStoreImage:(UIImage *)image imageData:(NSData *)imageData forKey:(NSString *)key cacheType:(SDImageCacheType)cacheType completion:(SDWebImageNoParamsBlock)completionBlock enumerator:(NSEnumerator> *)enumerator operation:(SDImageCachesManagerOperation *)operation { - NSParameterAssert(enumerator); - NSParameterAssert(operation); - for (id cache in enumerator) { - [cache storeImage:image imageData:imageData forKey:key cacheType:cacheType completion:^{ - if (operation.isCancelled) { - // Cancelled - return; - } - if (operation.isFinished) { - // Finished - return; - } - [operation completeOne]; - if (operation.pendingCount == 0) { - // Complete - [operation done]; - if (completionBlock) { - completionBlock(); - } - } - }]; - } -} - -- (void)concurrentRemoveImageForKey:(NSString *)key cacheType:(SDImageCacheType)cacheType completion:(SDWebImageNoParamsBlock)completionBlock enumerator:(NSEnumerator> *)enumerator operation:(SDImageCachesManagerOperation *)operation { - NSParameterAssert(enumerator); - NSParameterAssert(operation); - for (id cache in enumerator) { - [cache removeImageForKey:key cacheType:cacheType completion:^{ - if (operation.isCancelled) { - // Cancelled - return; - } - if (operation.isFinished) { - // Finished - return; - } - [operation completeOne]; - if (operation.pendingCount == 0) { - // Complete - [operation done]; - if (completionBlock) { - completionBlock(); - } - } - }]; - } -} - -- (void)concurrentContainsImageForKey:(NSString *)key cacheType:(SDImageCacheType)cacheType completion:(SDImageCacheContainsCompletionBlock)completionBlock enumerator:(NSEnumerator> *)enumerator operation:(SDImageCachesManagerOperation *)operation { - NSParameterAssert(enumerator); - NSParameterAssert(operation); - for (id cache in enumerator) { - [cache containsImageForKey:key cacheType:cacheType completion:^(SDImageCacheType containsCacheType) { - if (operation.isCancelled) { - // Cancelled - return; - } - if (operation.isFinished) { - // Finished - return; - } - [operation completeOne]; - if (containsCacheType != SDImageCacheTypeNone) { - // Success - [operation done]; - if (completionBlock) { - completionBlock(containsCacheType); - } - return; - } - if (operation.pendingCount == 0) { - // Complete - [operation done]; - if (completionBlock) { - completionBlock(SDImageCacheTypeNone); - } - } - }]; - } -} - -- (void)concurrentClearWithCacheType:(SDImageCacheType)cacheType completion:(SDWebImageNoParamsBlock)completionBlock enumerator:(NSEnumerator> *)enumerator operation:(SDImageCachesManagerOperation *)operation { - NSParameterAssert(enumerator); - NSParameterAssert(operation); - for (id cache in enumerator) { - [cache clearWithCacheType:cacheType completion:^{ - if (operation.isCancelled) { - // Cancelled - return; - } - if (operation.isFinished) { - // Finished - return; - } - [operation completeOne]; - if (operation.pendingCount == 0) { - // Complete - [operation done]; - if (completionBlock) { - completionBlock(); - } - } - }]; - } -} - -#pragma mark - Serial Operation - -- (void)serialQueryImageForKey:(NSString *)key options:(SDWebImageOptions)options context:(SDWebImageContext *)context cacheType:(SDImageCacheType)queryCacheType completion:(SDImageCacheQueryCompletionBlock)completionBlock enumerator:(NSEnumerator> *)enumerator operation:(SDImageCachesManagerOperation *)operation { - NSParameterAssert(enumerator); - NSParameterAssert(operation); - id cache = enumerator.nextObject; - if (!cache) { - // Complete - [operation done]; - if (completionBlock) { - completionBlock(nil, nil, SDImageCacheTypeNone); - } - return; - } - @weakify(self); - [cache queryImageForKey:key options:options context:context cacheType:queryCacheType completion:^(UIImage * _Nullable image, NSData * _Nullable data, SDImageCacheType cacheType) { - @strongify(self); - if (operation.isCancelled) { - // Cancelled - return; - } - if (operation.isFinished) { - // Finished - return; - } - [operation completeOne]; - if (image) { - // Success - [operation done]; - if (completionBlock) { - completionBlock(image, data, cacheType); - } - return; - } - // Next - [self serialQueryImageForKey:key options:options context:context cacheType:queryCacheType completion:completionBlock enumerator:enumerator operation:operation]; - }]; -} - -- (void)serialStoreImage:(UIImage *)image imageData:(NSData *)imageData forKey:(NSString *)key cacheType:(SDImageCacheType)cacheType completion:(SDWebImageNoParamsBlock)completionBlock enumerator:(NSEnumerator> *)enumerator { - NSParameterAssert(enumerator); - id cache = enumerator.nextObject; - if (!cache) { - // Complete - if (completionBlock) { - completionBlock(); - } - return; - } - @weakify(self); - [cache storeImage:image imageData:imageData forKey:key cacheType:cacheType completion:^{ - @strongify(self); - // Next - [self serialStoreImage:image imageData:imageData forKey:key cacheType:cacheType completion:completionBlock enumerator:enumerator]; - }]; -} - -- (void)serialRemoveImageForKey:(NSString *)key cacheType:(SDImageCacheType)cacheType completion:(SDWebImageNoParamsBlock)completionBlock enumerator:(NSEnumerator> *)enumerator { - NSParameterAssert(enumerator); - id cache = enumerator.nextObject; - if (!cache) { - // Complete - if (completionBlock) { - completionBlock(); - } - return; - } - @weakify(self); - [cache removeImageForKey:key cacheType:cacheType completion:^{ - @strongify(self); - // Next - [self serialRemoveImageForKey:key cacheType:cacheType completion:completionBlock enumerator:enumerator]; - }]; -} - -- (void)serialContainsImageForKey:(NSString *)key cacheType:(SDImageCacheType)cacheType completion:(SDImageCacheContainsCompletionBlock)completionBlock enumerator:(NSEnumerator> *)enumerator operation:(SDImageCachesManagerOperation *)operation { - NSParameterAssert(enumerator); - NSParameterAssert(operation); - id cache = enumerator.nextObject; - if (!cache) { - // Complete - [operation done]; - if (completionBlock) { - completionBlock(SDImageCacheTypeNone); - } - return; - } - @weakify(self); - [cache containsImageForKey:key cacheType:cacheType completion:^(SDImageCacheType containsCacheType) { - @strongify(self); - if (operation.isCancelled) { - // Cancelled - return; - } - if (operation.isFinished) { - // Finished - return; - } - [operation completeOne]; - if (containsCacheType != SDImageCacheTypeNone) { - // Success - [operation done]; - if (completionBlock) { - completionBlock(containsCacheType); - } - return; - } - // Next - [self serialContainsImageForKey:key cacheType:cacheType completion:completionBlock enumerator:enumerator operation:operation]; - }]; -} - -- (void)serialClearWithCacheType:(SDImageCacheType)cacheType completion:(SDWebImageNoParamsBlock)completionBlock enumerator:(NSEnumerator> *)enumerator { - NSParameterAssert(enumerator); - id cache = enumerator.nextObject; - if (!cache) { - // Complete - if (completionBlock) { - completionBlock(); - } - return; - } - @weakify(self); - [cache clearWithCacheType:cacheType completion:^{ - @strongify(self); - // Next - [self serialClearWithCacheType:cacheType completion:completionBlock enumerator:enumerator]; - }]; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCoder.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCoder.h deleted file mode 100644 index 53b52e5..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCoder.h +++ /dev/null @@ -1,266 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageCompat.h" -#import "NSData+ImageContentType.h" - -typedef NSString * SDImageCoderOption NS_STRING_ENUM; -typedef NSDictionary SDImageCoderOptions; -typedef NSMutableDictionary SDImageCoderMutableOptions; - -#pragma mark - Coder Options -// These options are for image decoding -/** - A Boolean value indicating whether to decode the first frame only for animated image during decoding. (NSNumber). If not provide, decode animated image if need. - @note works for `SDImageCoder`. - */ -FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderDecodeFirstFrameOnly; - -/** - A CGFloat value which is greater than or equal to 1.0. This value specify the image scale factor for decoding. If not provide, use 1.0. (NSNumber) - @note works for `SDImageCoder`, `SDProgressiveImageCoder`, `SDAnimatedImageCoder`. - */ -FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderDecodeScaleFactor; - -/** - A Boolean value indicating whether to keep the original aspect ratio when generating thumbnail images (or bitmap images from vector format). - Defaults to YES. - @note works for `SDImageCoder`, `SDProgressiveImageCoder`, `SDAnimatedImageCoder`. - */ -FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderDecodePreserveAspectRatio; - -/** - A CGSize value indicating whether or not to generate the thumbnail images (or bitmap images from vector format). When this value is provided, the decoder will generate a thumbnail image which pixel size is smaller than or equal to (depends the `.preserveAspectRatio`) the value size. - Defaults to CGSizeZero, which means no thumbnail generation at all. - @note Supports for animated image as well. - @note When you pass `.preserveAspectRatio == NO`, the thumbnail image is stretched to match each dimension. When `.preserveAspectRatio == YES`, the thumbnail image's width is limited to pixel size's width, the thumbnail image's height is limited to pixel size's height. For common cases, you can just pass a square size to limit both. - @note works for `SDImageCoder`, `SDProgressiveImageCoder`, `SDAnimatedImageCoder`. - */ -FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderDecodeThumbnailPixelSize; - - -// These options are for image encoding -/** - A Boolean value indicating whether to encode the first frame only for animated image during encoding. (NSNumber). If not provide, encode animated image if need. - @note works for `SDImageCoder`. - */ -FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderEncodeFirstFrameOnly; -/** - A double value between 0.0-1.0 indicating the encode compression quality to produce the image data. 1.0 resulting in no compression and 0.0 resulting in the maximum compression possible. If not provide, use 1.0. (NSNumber) - @note works for `SDImageCoder` - */ -FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderEncodeCompressionQuality; - -/** - A UIColor(NSColor) value to used for non-alpha image encoding when the input image has alpha channel, the background color will be used to compose the alpha one. If not provide, use white color. - @note works for `SDImageCoder` - */ -FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderEncodeBackgroundColor; - -/** - A CGSize value indicating the max image resolution in pixels during encoding. For vector image, this also effect the output vector data information about width and height. The encoder will not generate the encoded image larger than this limit. Note it always use the aspect ratio of input image.. - Defaults to CGSizeZero, which means no max size limit at all. - @note Supports for animated image as well. - @note The output image's width is limited to pixel size's width, the output image's height is limited to pixel size's height. For common cases, you can just pass a square size to limit both. - @note works for `SDImageCoder` - */ -FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderEncodeMaxPixelSize; - -/** - A NSUInteger value specify the max output data bytes size after encoding. Some lossy format like JPEG/HEIF supports the hint for codec to automatically reduce the quality and match the file size you want. Note this option will override the `SDImageCoderEncodeCompressionQuality`, because now the quality is decided by the encoder. (NSNumber) - @note This is a hint, no guarantee for output size because of compression algorithm limit. And this options does not works for vector images. - @note works for `SDImageCoder` - */ -FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderEncodeMaxFileSize; - -/** - A Boolean value indicating the encoding format should contains a thumbnail image into the output data. Only some of image format (like JPEG/HEIF/AVIF) support this behavior. The embed thumbnail will be used during next time thumbnail decoding (provided `.thumbnailPixelSize`), which is faster than full image thumbnail decoding. (NSNumber) - Defaults to NO, which does not embed any thumbnail. - @note The thumbnail image's pixel size is not defined, the encoder can choose the proper pixel size which is suitable for encoding quality. - @note works for `SDImageCoder` - */ -FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderEncodeEmbedThumbnail; - -/** - A SDWebImageContext object which hold the original context options from top-level API. (SDWebImageContext) - This option is ignored for all built-in coders and take no effect. - But this may be useful for some custom coders, because some business logic may dependent on things other than image or image data information only. - See `SDWebImageContext` for more detailed information. - */ -FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderWebImageContext API_DEPRECATED("The coder component will be seperated from Core subspec in the future. Update your code to not rely on this context option.", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); - -#pragma mark - Coder -/** - This is the image coder protocol to provide custom image decoding/encoding. - These methods are all required to implement. - @note Pay attention that these methods are not called from main queue. - */ -@protocol SDImageCoder - -@required -#pragma mark - Decoding -/** - Returns YES if this coder can decode some data. Otherwise, the data should be passed to another coder. - - @param data The image data so we can look at it - @return YES if this coder can decode the data, NO otherwise - */ -- (BOOL)canDecodeFromData:(nullable NSData *)data; - -/** - Decode the image data to image. - @note This protocol may supports decode animated image frames. You can use `+[SDImageCoderHelper animatedImageWithFrames:]` to produce an animated image with frames. - - @param data The image data to be decoded - @param options A dictionary containing any decoding options. Pass @{SDImageCoderDecodeScaleFactor: @(1.0)} to specify scale factor for image. Pass @{SDImageCoderDecodeFirstFrameOnly: @(YES)} to decode the first frame only. - @return The decoded image from data - */ -- (nullable UIImage *)decodedImageWithData:(nullable NSData *)data - options:(nullable SDImageCoderOptions *)options; - -#pragma mark - Encoding - -/** - Returns YES if this coder can encode some image. Otherwise, it should be passed to another coder. - For custom coder which introduce new image format, you'd better define a new `SDImageFormat` using like this. If you're creating public coder plugin for new image format, also update `https://github.com/rs/SDWebImage/wiki/Coder-Plugin-List` to avoid same value been defined twice. - * @code - static const SDImageFormat SDImageFormatHEIF = 10; - * @endcode - - @param format The image format - @return YES if this coder can encode the image, NO otherwise - */ -- (BOOL)canEncodeToFormat:(SDImageFormat)format NS_SWIFT_NAME(canEncode(to:)); - -/** - Encode the image to image data. - @note This protocol may supports encode animated image frames. You can use `+[SDImageCoderHelper framesFromAnimatedImage:]` to assemble an animated image with frames. - - @param image The image to be encoded - @param format The image format to encode, you should note `SDImageFormatUndefined` format is also possible - @param options A dictionary containing any encoding options. Pass @{SDImageCoderEncodeCompressionQuality: @(1)} to specify compression quality. - @return The encoded image data - */ -- (nullable NSData *)encodedDataWithImage:(nullable UIImage *)image - format:(SDImageFormat)format - options:(nullable SDImageCoderOptions *)options; - -@end - -#pragma mark - Progressive Coder -/** - This is the image coder protocol to provide custom progressive image decoding. - These methods are all required to implement. - @note Pay attention that these methods are not called from main queue. - */ -@protocol SDProgressiveImageCoder - -@required -/** - Returns YES if this coder can incremental decode some data. Otherwise, it should be passed to another coder. - - @param data The image data so we can look at it - @return YES if this coder can decode the data, NO otherwise - */ -- (BOOL)canIncrementalDecodeFromData:(nullable NSData *)data; - -/** - Because incremental decoding need to keep the decoded context, we will alloc a new instance with the same class for each download operation to avoid conflicts - This init method should not return nil - - @param options A dictionary containing any progressive decoding options (instance-level). Pass @{SDImageCoderDecodeScaleFactor: @(1.0)} to specify scale factor for progressive animated image (each frames should use the same scale). - @return A new instance to do incremental decoding for the specify image format - */ -- (nonnull instancetype)initIncrementalWithOptions:(nullable SDImageCoderOptions *)options; - -/** - Update the incremental decoding when new image data available - - @param data The image data has been downloaded so far - @param finished Whether the download has finished - */ -- (void)updateIncrementalData:(nullable NSData *)data finished:(BOOL)finished; - -/** - Incremental decode the current image data to image. - @note Due to the performance issue for progressive decoding and the integration for image view. This method may only return the first frame image even if the image data is animated image. If you want progressive animated image decoding, conform to `SDAnimatedImageCoder` protocol as well and use `animatedImageFrameAtIndex:` instead. - - @param options A dictionary containing any progressive decoding options. Pass @{SDImageCoderDecodeScaleFactor: @(1.0)} to specify scale factor for progressive image - @return The decoded image from current data - */ -- (nullable UIImage *)incrementalDecodedImageWithOptions:(nullable SDImageCoderOptions *)options; - -@end - -#pragma mark - Animated Image Provider -/** - This is the animated image protocol to provide the basic function for animated image rendering. It's adopted by `SDAnimatedImage` and `SDAnimatedImageCoder` - */ -@protocol SDAnimatedImageProvider - -@required -/** - The original animated image data for current image. If current image is not an animated format, return nil. - We may use this method to grab back the original image data if need, such as NSCoding or compare. - - @return The animated image data - */ -@property (nonatomic, copy, readonly, nullable) NSData *animatedImageData; - -/** - Total animated frame count. - If the frame count is less than 1, then the methods below will be ignored. - - @return Total animated frame count. - */ -@property (nonatomic, assign, readonly) NSUInteger animatedImageFrameCount; -/** - Animation loop count, 0 means infinite looping. - - @return Animation loop count - */ -@property (nonatomic, assign, readonly) NSUInteger animatedImageLoopCount; -/** - Returns the frame image from a specified index. - @note The index maybe randomly if one image was set to different imageViews, keep it re-entrant. (It's not recommend to store the images into array because it's memory consuming) - - @param index Frame index (zero based). - @return Frame's image - */ -- (nullable UIImage *)animatedImageFrameAtIndex:(NSUInteger)index; -/** - Returns the frames's duration from a specified index. - @note The index maybe randomly if one image was set to different imageViews, keep it re-entrant. (It's recommend to store the durations into array because it's not memory-consuming) - - @param index Frame index (zero based). - @return Frame's duration - */ -- (NSTimeInterval)animatedImageDurationAtIndex:(NSUInteger)index; - -@end - -#pragma mark - Animated Coder -/** - This is the animated image coder protocol for custom animated image class like `SDAnimatedImage`. Through it inherit from `SDImageCoder`. We currentlly only use the method `canDecodeFromData:` to detect the proper coder for specify animated image format. - */ -@protocol SDAnimatedImageCoder - -@required -/** - Because animated image coder should keep the original data, we will alloc a new instance with the same class for the specify animated image data - The init method should return nil if it can't decode the specify animated image data to produce any frame. - After the instance created, we may call methods in `SDAnimatedImageProvider` to produce animated image frame. - - @param data The animated image data to be decode - @param options A dictionary containing any animated decoding options (instance-level). Pass @{SDImageCoderDecodeScaleFactor: @(1.0)} to specify scale factor for animated image (each frames should use the same scale). - @return A new instance to do animated decoding for specify image data - */ -- (nullable instancetype)initWithAnimatedImageData:(nullable NSData *)data options:(nullable SDImageCoderOptions *)options; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCoder.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCoder.m deleted file mode 100644 index 0fda198..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCoder.m +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDImageCoder.h" - -SDImageCoderOption const SDImageCoderDecodeFirstFrameOnly = @"decodeFirstFrameOnly"; -SDImageCoderOption const SDImageCoderDecodeScaleFactor = @"decodeScaleFactor"; -SDImageCoderOption const SDImageCoderDecodePreserveAspectRatio = @"decodePreserveAspectRatio"; -SDImageCoderOption const SDImageCoderDecodeThumbnailPixelSize = @"decodeThumbnailPixelSize"; - -SDImageCoderOption const SDImageCoderEncodeFirstFrameOnly = @"encodeFirstFrameOnly"; -SDImageCoderOption const SDImageCoderEncodeCompressionQuality = @"encodeCompressionQuality"; -SDImageCoderOption const SDImageCoderEncodeBackgroundColor = @"encodeBackgroundColor"; -SDImageCoderOption const SDImageCoderEncodeMaxPixelSize = @"encodeMaxPixelSize"; -SDImageCoderOption const SDImageCoderEncodeMaxFileSize = @"encodeMaxFileSize"; -SDImageCoderOption const SDImageCoderEncodeEmbedThumbnail = @"encodeEmbedThumbnail"; - -SDImageCoderOption const SDImageCoderWebImageContext = @"webImageContext"; diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCoderHelper.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCoderHelper.h deleted file mode 100644 index 28e1240..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCoderHelper.h +++ /dev/null @@ -1,153 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageCompat.h" -#import "SDImageFrame.h" - -typedef NS_ENUM(NSUInteger, SDImageCoderDecodeSolution) { - /// automatically choose the solution based on image format, hardware, OS version. This keep balance for compatibility and performance. Default after SDWebImage 5.13.0 - SDImageCoderDecodeSolutionAutomatic, - /// always use CoreGraphics to draw on bitmap context and trigger decode. Best compatibility. Default before SDWebImage 5.13.0 - SDImageCoderDecodeSolutionCoreGraphics, - /// available on iOS/tvOS 15+, use UIKit's new CGImageDecompressor/CMPhoto to decode. Best performance. If failed, will fallback to CoreGraphics as well - SDImageCoderDecodeSolutionUIKit -}; - -/** - Provide some common helper methods for building the image decoder/encoder. - */ -@interface SDImageCoderHelper : NSObject - -/** - Return an animated image with frames array. - For UIKit, this will apply the patch and then create animated UIImage. The patch is because that `+[UIImage animatedImageWithImages:duration:]` just use the average of duration for each image. So it will not work if different frame has different duration. Therefore we repeat the specify frame for specify times to let it work. - For AppKit, NSImage does not support animates other than GIF. This will try to encode the frames to GIF format and then create an animated NSImage for rendering. Attention the animated image may loss some detail if the input frames contain full alpha channel because GIF only supports 1 bit alpha channel. (For 1 pixel, either transparent or not) - - @param frames The frames array. If no frames or frames is empty, return nil - @return A animated image for rendering on UIImageView(UIKit) or NSImageView(AppKit) - */ -+ (UIImage * _Nullable)animatedImageWithFrames:(NSArray * _Nullable)frames; - -/** - Return frames array from an animated image. - For UIKit, this will unapply the patch for the description above and then create frames array. This will also work for normal animated UIImage. - For AppKit, NSImage does not support animates other than GIF. This will try to decode the GIF imageRep and then create frames array. - - @param animatedImage A animated image. If it's not animated, return nil - @return The frames array - */ -+ (NSArray * _Nullable)framesFromAnimatedImage:(UIImage * _Nullable)animatedImage NS_SWIFT_NAME(frames(from:)); - -/** - Return the shared device-dependent RGB color space. This follows The Get Rule. - On iOS, it's created with deviceRGB (if available, use sRGB). - On macOS, it's from the screen colorspace (if failed, use deviceRGB) - Because it's shared, you should not retain or release this object. - - @return The device-dependent RGB color space - */ -+ (CGColorSpaceRef _Nonnull)colorSpaceGetDeviceRGB CF_RETURNS_NOT_RETAINED; - -/** - Check whether CGImage contains alpha channel. - - @param cgImage The CGImage - @return Return YES if CGImage contains alpha channel, otherwise return NO - */ -+ (BOOL)CGImageContainsAlpha:(_Nonnull CGImageRef)cgImage; - -/** - Create a decoded CGImage by the provided CGImage. This follows The Create Rule and you are response to call release after usage. - It will detect whether image contains alpha channel, then create a new bitmap context with the same size of image, and draw it. This can ensure that the image do not need extra decoding after been set to the imageView. - @note This actually call `CGImageCreateDecoded:orientation:` with the Up orientation. - - @param cgImage The CGImage - @return A new created decoded image - */ -+ (CGImageRef _Nullable)CGImageCreateDecoded:(_Nonnull CGImageRef)cgImage CF_RETURNS_RETAINED; - -/** - Create a decoded CGImage by the provided CGImage and orientation. This follows The Create Rule and you are response to call release after usage. - It will detect whether image contains alpha channel, then create a new bitmap context with the same size of image, and draw it. This can ensure that the image do not need extra decoding after been set to the imageView. - - @param cgImage The CGImage - @param orientation The EXIF image orientation. - @return A new created decoded image - */ -+ (CGImageRef _Nullable)CGImageCreateDecoded:(_Nonnull CGImageRef)cgImage orientation:(CGImagePropertyOrientation)orientation CF_RETURNS_RETAINED; - -/** - Create a scaled CGImage by the provided CGImage and size. This follows The Create Rule and you are response to call release after usage. - It will detect whether the image size matching the scale size, if not, stretch the image to the target size. - @note If you need to keep aspect ratio, you can calculate the scale size by using `scaledSizeWithImageSize` first. - - @param cgImage The CGImage - @param size The scale size in pixel. - @return A new created scaled image - */ -+ (CGImageRef _Nullable)CGImageCreateScaled:(_Nonnull CGImageRef)cgImage size:(CGSize)size CF_RETURNS_RETAINED; - -/** Scale the image size based on provided scale size, whether or not to preserve aspect ratio, whether or not to scale up. - @note For example, if you implements thumnail decoding, pass `shouldScaleUp` to NO to avoid the calculated size larger than image size. - - @param imageSize The image size (in pixel or point defined by caller) - @param scaleSize The scale size (in pixel or point defined by caller) - @param preserveAspectRatio Whether or not to preserve aspect ratio - @param shouldScaleUp Whether or not to scale up (or scale down only) - */ -+ (CGSize)scaledSizeWithImageSize:(CGSize)imageSize scaleSize:(CGSize)scaleSize preserveAspectRatio:(BOOL)preserveAspectRatio shouldScaleUp:(BOOL)shouldScaleUp; - -/** - Return the decoded image by the provided image. This one unlike `CGImageCreateDecoded:`, will not decode the image which contains alpha channel or animated image - @param image The image to be decoded - @return The decoded image - */ -+ (UIImage * _Nullable)decodedImageWithImage:(UIImage * _Nullable)image; - -/** - Return the decoded and probably scaled down image by the provided image. If the image pixels bytes size large than the limit bytes, will try to scale down. Or just works as `decodedImageWithImage:`, never scale up. - @warning You should not pass too small bytes, the suggestion value should be larger than 1MB. Even we use Tile Decoding to avoid OOM, however, small bytes will consume much more CPU time because we need to iterate more times to draw each tile. - - @param image The image to be decoded and scaled down - @param bytes The limit bytes size. Provide 0 to use the build-in limit. - @return The decoded and probably scaled down image - */ -+ (UIImage * _Nullable)decodedAndScaledDownImageWithImage:(UIImage * _Nullable)image limitBytes:(NSUInteger)bytes; - -/** - Control the default force decode solution. Available solutions in `SDImageCoderDecodeSolution`. - @note Defaults to `SDImageCoderDecodeSolutionAutomatic`, which prefers to use UIKit for JPEG/HEIF, and fallback on CoreGraphics. If you want control on your hand, set the other solution. - */ -@property (class, readwrite) SDImageCoderDecodeSolution defaultDecodeSolution; - -/** - Control the default limit bytes to scale down largest images. - This value must be larger than 4 Bytes (at least 1x1 pixel). Defaults to 60MB on iOS/tvOS, 90MB on macOS, 30MB on watchOS. - */ -@property (class, readwrite) NSUInteger defaultScaleDownLimitBytes; - -#if SD_UIKIT || SD_WATCH -/** - Convert an EXIF image orientation to an iOS one. - - @param exifOrientation EXIF orientation - @return iOS orientation - */ -+ (UIImageOrientation)imageOrientationFromEXIFOrientation:(CGImagePropertyOrientation)exifOrientation NS_SWIFT_NAME(imageOrientation(from:)); - -/** - Convert an iOS orientation to an EXIF image orientation. - - @param imageOrientation iOS orientation - @return EXIF orientation - */ -+ (CGImagePropertyOrientation)exifOrientationFromImageOrientation:(UIImageOrientation)imageOrientation; -#endif - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCoderHelper.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCoderHelper.m deleted file mode 100644 index da30b65..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCoderHelper.m +++ /dev/null @@ -1,826 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDImageCoderHelper.h" -#import "SDImageFrame.h" -#import "NSImage+Compatibility.h" -#import "NSData+ImageContentType.h" -#import "SDAnimatedImageRep.h" -#import "UIImage+ForceDecode.h" -#import "SDAssociatedObject.h" -#import "UIImage+Metadata.h" -#import "SDInternalMacros.h" -#import "SDGraphicsImageRenderer.h" -#import "SDInternalMacros.h" -#import - -static inline size_t SDByteAlign(size_t size, size_t alignment) { - return ((size + (alignment - 1)) / alignment) * alignment; -} - -#if SD_UIKIT -static inline UIImage *SDImageDecodeUIKit(UIImage *image) { - // See: https://developer.apple.com/documentation/uikit/uiimage/3750834-imagebypreparingfordisplay - // Need CGImage-based - if (@available(iOS 15, tvOS 15, *)) { - UIImage *decodedImage = [image imageByPreparingForDisplay]; - if (decodedImage) { - SDImageCopyAssociatedObject(image, decodedImage); - decodedImage.sd_isDecoded = YES; - return decodedImage; - } - } - return nil; -} - -static inline UIImage *SDImageDecodeAndScaleDownUIKit(UIImage *image, CGSize destResolution) { - // See: https://developer.apple.com/documentation/uikit/uiimage/3750835-imagebypreparingthumbnailofsize - // Need CGImage-based - if (@available(iOS 15, tvOS 15, *)) { - // Calculate thumbnail point size - CGFloat scale = image.scale ?: 1; - CGSize thumbnailSize = CGSizeMake(destResolution.width / scale, destResolution.height / scale); - UIImage *decodedImage = [image imageByPreparingThumbnailOfSize:thumbnailSize]; - if (decodedImage) { - SDImageCopyAssociatedObject(image, decodedImage); - decodedImage.sd_isDecoded = YES; - return decodedImage; - } - } - return nil; -} - -static inline BOOL SDImageSupportsHardwareHEVCDecoder(void) { - static dispatch_once_t onceToken; - static BOOL supportsHardware = NO; - dispatch_once(&onceToken, ^{ - SEL DeviceInfoSelector = SD_SEL_SPI(deviceInfoForKey:); - NSString *HEVCDecoder8bitSupported = @"N8lZxRgC7lfdRS3dRLn+Ag"; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - if ([UIDevice.currentDevice respondsToSelector:DeviceInfoSelector] && [UIDevice.currentDevice performSelector:DeviceInfoSelector withObject:HEVCDecoder8bitSupported]) { - supportsHardware = YES; - } -#pragma clang diagnostic pop - }); - return supportsHardware; -} -#endif - -static SDImageCoderDecodeSolution kDefaultDecodeSolution = SDImageCoderDecodeSolutionAutomatic; - -static const size_t kBytesPerPixel = 4; -static const size_t kBitsPerComponent = 8; - -static const CGFloat kBytesPerMB = 1024.0f * 1024.0f; -/* - * Defines the maximum size in MB of the decoded image when the flag `SDWebImageScaleDownLargeImages` is set - * Suggested value for iPad1 and iPhone 3GS: 60. - * Suggested value for iPad2 and iPhone 4: 120. - * Suggested value for iPhone 3G and iPod 2 and earlier devices: 30. - */ -#if SD_MAC -static CGFloat kDestImageLimitBytes = 90.f * kBytesPerMB; -#elif SD_UIKIT -static CGFloat kDestImageLimitBytes = 60.f * kBytesPerMB; -#elif SD_WATCH -static CGFloat kDestImageLimitBytes = 30.f * kBytesPerMB; -#endif - -static const CGFloat kDestSeemOverlap = 2.0f; // the numbers of pixels to overlap the seems where tiles meet. - -@implementation SDImageCoderHelper - -+ (UIImage *)animatedImageWithFrames:(NSArray *)frames { - NSUInteger frameCount = frames.count; - if (frameCount == 0) { - return nil; - } - - UIImage *animatedImage; - -#if SD_UIKIT || SD_WATCH - NSUInteger durations[frameCount]; - for (size_t i = 0; i < frameCount; i++) { - durations[i] = frames[i].duration * 1000; - } - NSUInteger const gcd = gcdArray(frameCount, durations); - __block NSTimeInterval totalDuration = 0; - NSMutableArray *animatedImages = [NSMutableArray arrayWithCapacity:frameCount]; - [frames enumerateObjectsUsingBlock:^(SDImageFrame * _Nonnull frame, NSUInteger idx, BOOL * _Nonnull stop) { - UIImage *image = frame.image; - NSUInteger duration = frame.duration * 1000; - totalDuration += frame.duration; - NSUInteger repeatCount; - if (gcd) { - repeatCount = duration / gcd; - } else { - repeatCount = 1; - } - for (size_t i = 0; i < repeatCount; ++i) { - [animatedImages addObject:image]; - } - }]; - - animatedImage = [UIImage animatedImageWithImages:animatedImages duration:totalDuration]; - -#else - - NSMutableData *imageData = [NSMutableData data]; - CFStringRef imageUTType = [NSData sd_UTTypeFromImageFormat:SDImageFormatGIF]; - // Create an image destination. GIF does not support EXIF image orientation - CGImageDestinationRef imageDestination = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)imageData, imageUTType, frameCount, NULL); - if (!imageDestination) { - // Handle failure. - return nil; - } - - for (size_t i = 0; i < frameCount; i++) { - @autoreleasepool { - SDImageFrame *frame = frames[i]; - NSTimeInterval frameDuration = frame.duration; - CGImageRef frameImageRef = frame.image.CGImage; - NSDictionary *frameProperties = @{(__bridge NSString *)kCGImagePropertyGIFDictionary : @{(__bridge NSString *)kCGImagePropertyGIFDelayTime : @(frameDuration)}}; - CGImageDestinationAddImage(imageDestination, frameImageRef, (__bridge CFDictionaryRef)frameProperties); - } - } - // Finalize the destination. - if (CGImageDestinationFinalize(imageDestination) == NO) { - // Handle failure. - CFRelease(imageDestination); - return nil; - } - CFRelease(imageDestination); - CGFloat scale = MAX(frames.firstObject.image.scale, 1); - - SDAnimatedImageRep *imageRep = [[SDAnimatedImageRep alloc] initWithData:imageData]; - NSSize size = NSMakeSize(imageRep.pixelsWide / scale, imageRep.pixelsHigh / scale); - imageRep.size = size; - animatedImage = [[NSImage alloc] initWithSize:size]; - [animatedImage addRepresentation:imageRep]; -#endif - - return animatedImage; -} - -+ (NSArray *)framesFromAnimatedImage:(UIImage *)animatedImage { - if (!animatedImage) { - return nil; - } - - NSMutableArray *frames = [NSMutableArray array]; - NSUInteger frameCount = 0; - -#if SD_UIKIT || SD_WATCH - NSArray *animatedImages = animatedImage.images; - frameCount = animatedImages.count; - if (frameCount == 0) { - return nil; - } - - NSTimeInterval avgDuration = animatedImage.duration / frameCount; - if (avgDuration == 0) { - avgDuration = 0.1; // if it's a animated image but no duration, set it to default 100ms (this do not have that 10ms limit like GIF or WebP to allow custom coder provide the limit) - } - - __block NSUInteger repeatCount = 1; - __block UIImage *previousImage = animatedImages.firstObject; - [animatedImages enumerateObjectsUsingBlock:^(UIImage * _Nonnull image, NSUInteger idx, BOOL * _Nonnull stop) { - // ignore first - if (idx == 0) { - return; - } - if ([image isEqual:previousImage]) { - repeatCount++; - } else { - SDImageFrame *frame = [SDImageFrame frameWithImage:previousImage duration:avgDuration * repeatCount]; - [frames addObject:frame]; - repeatCount = 1; - } - previousImage = image; - }]; - // last one - SDImageFrame *frame = [SDImageFrame frameWithImage:previousImage duration:avgDuration * repeatCount]; - [frames addObject:frame]; - -#else - - NSRect imageRect = NSMakeRect(0, 0, animatedImage.size.width, animatedImage.size.height); - NSImageRep *imageRep = [animatedImage bestRepresentationForRect:imageRect context:nil hints:nil]; - NSBitmapImageRep *bitmapImageRep; - if ([imageRep isKindOfClass:[NSBitmapImageRep class]]) { - bitmapImageRep = (NSBitmapImageRep *)imageRep; - } - if (!bitmapImageRep) { - return nil; - } - frameCount = [[bitmapImageRep valueForProperty:NSImageFrameCount] unsignedIntegerValue]; - if (frameCount == 0) { - return nil; - } - CGFloat scale = animatedImage.scale; - - for (size_t i = 0; i < frameCount; i++) { - @autoreleasepool { - // NSBitmapImageRep need to manually change frame. "Good taste" API - [bitmapImageRep setProperty:NSImageCurrentFrame withValue:@(i)]; - NSTimeInterval frameDuration = [[bitmapImageRep valueForProperty:NSImageCurrentFrameDuration] doubleValue]; - NSImage *frameImage = [[NSImage alloc] initWithCGImage:bitmapImageRep.CGImage scale:scale orientation:kCGImagePropertyOrientationUp]; - SDImageFrame *frame = [SDImageFrame frameWithImage:frameImage duration:frameDuration]; - [frames addObject:frame]; - } - } -#endif - - return frames; -} - -+ (CGColorSpaceRef)colorSpaceGetDeviceRGB { - static CGColorSpaceRef colorSpace; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB); - }); - return colorSpace; -} - -+ (BOOL)CGImageContainsAlpha:(CGImageRef)cgImage { - if (!cgImage) { - return NO; - } - CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(cgImage); - BOOL hasAlpha = !(alphaInfo == kCGImageAlphaNone || - alphaInfo == kCGImageAlphaNoneSkipFirst || - alphaInfo == kCGImageAlphaNoneSkipLast); - return hasAlpha; -} - -+ (CGImageRef)CGImageCreateDecoded:(CGImageRef)cgImage { - return [self CGImageCreateDecoded:cgImage orientation:kCGImagePropertyOrientationUp]; -} - -+ (CGImageRef)CGImageCreateDecoded:(CGImageRef)cgImage orientation:(CGImagePropertyOrientation)orientation { - if (!cgImage) { - return NULL; - } - size_t width = CGImageGetWidth(cgImage); - size_t height = CGImageGetHeight(cgImage); - if (width == 0 || height == 0) return NULL; - size_t newWidth; - size_t newHeight; - switch (orientation) { - case kCGImagePropertyOrientationLeft: - case kCGImagePropertyOrientationLeftMirrored: - case kCGImagePropertyOrientationRight: - case kCGImagePropertyOrientationRightMirrored: { - // These orientation should swap width & height - newWidth = height; - newHeight = width; - } - break; - default: { - newWidth = width; - newHeight = height; - } - break; - } - - BOOL hasAlpha = [self CGImageContainsAlpha:cgImage]; - // kCGImageAlphaNone is not supported in CGBitmapContextCreate. - // Check #3330 for more detail about why this bitmap is choosen. - CGBitmapInfo bitmapInfo; - if (hasAlpha) { - // iPhone GPU prefer to use BGRA8888, see: https://forums.raywenderlich.com/t/why-mtlpixelformat-bgra8unorm/53489 - // BGRA8888 - bitmapInfo = kCGBitmapByteOrder32Host | kCGImageAlphaPremultipliedFirst; - } else { - // BGR888 previously works on iOS 8~iOS 14, however, iOS 15+ will result a black image. FB9958017 - // RGB888 - bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaNoneSkipLast; - } - CGContextRef context = CGBitmapContextCreate(NULL, newWidth, newHeight, 8, 0, [self colorSpaceGetDeviceRGB], bitmapInfo); - if (!context) { - return NULL; - } - - // Apply transform - CGAffineTransform transform = SDCGContextTransformFromOrientation(orientation, CGSizeMake(newWidth, newHeight)); - CGContextConcatCTM(context, transform); - CGContextDrawImage(context, CGRectMake(0, 0, width, height), cgImage); // The rect is bounding box of CGImage, don't swap width & height - CGImageRef newImageRef = CGBitmapContextCreateImage(context); - CGContextRelease(context); - - return newImageRef; -} - -+ (CGImageRef)CGImageCreateScaled:(CGImageRef)cgImage size:(CGSize)size { - if (!cgImage) { - return NULL; - } - size_t width = CGImageGetWidth(cgImage); - size_t height = CGImageGetHeight(cgImage); - if (width == size.width && height == size.height) { - CGImageRetain(cgImage); - return cgImage; - } - - __block vImage_Buffer input_buffer = {}, output_buffer = {}; - @onExit { - if (input_buffer.data) free(input_buffer.data); - if (output_buffer.data) free(output_buffer.data); - }; - BOOL hasAlpha = [self CGImageContainsAlpha:cgImage]; - // kCGImageAlphaNone is not supported in CGBitmapContextCreate. - // Check #3330 for more detail about why this bitmap is choosen. - CGBitmapInfo bitmapInfo; - if (hasAlpha) { - // iPhone GPU prefer to use BGRA8888, see: https://forums.raywenderlich.com/t/why-mtlpixelformat-bgra8unorm/53489 - // BGRA8888 - bitmapInfo = kCGBitmapByteOrder32Host | kCGImageAlphaPremultipliedFirst; - } else { - // BGR888 previously works on iOS 8~iOS 14, however, iOS 15+ will result a black image. FB9958017 - // RGB888 - bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaNoneSkipLast; - } - vImage_CGImageFormat format = (vImage_CGImageFormat) { - .bitsPerComponent = 8, - .bitsPerPixel = 32, - .colorSpace = NULL, - .bitmapInfo = bitmapInfo, - .version = 0, - .decode = NULL, - .renderingIntent = CGImageGetRenderingIntent(cgImage) - }; - - vImage_Error a_ret = vImageBuffer_InitWithCGImage(&input_buffer, &format, NULL, cgImage, kvImageNoFlags); - if (a_ret != kvImageNoError) return NULL; - output_buffer.width = MAX(size.width, 0); - output_buffer.height = MAX(size.height, 0); - output_buffer.rowBytes = SDByteAlign(output_buffer.width * 4, 64); - output_buffer.data = malloc(output_buffer.rowBytes * output_buffer.height); - if (!output_buffer.data) return NULL; - - vImage_Error ret = vImageScale_ARGB8888(&input_buffer, &output_buffer, NULL, kvImageHighQualityResampling); - if (ret != kvImageNoError) return NULL; - - CGImageRef outputImage = vImageCreateCGImageFromBuffer(&output_buffer, &format, NULL, NULL, kvImageNoFlags, &ret); - if (ret != kvImageNoError) { - CGImageRelease(outputImage); - return NULL; - } - - return outputImage; -} - -+ (CGSize)scaledSizeWithImageSize:(CGSize)imageSize scaleSize:(CGSize)scaleSize preserveAspectRatio:(BOOL)preserveAspectRatio shouldScaleUp:(BOOL)shouldScaleUp { - CGFloat width = imageSize.width; - CGFloat height = imageSize.height; - CGFloat resultWidth; - CGFloat resultHeight; - - if (width <= 0 || height <= 0 || scaleSize.width <= 0 || scaleSize.height <= 0) { - // Protect - resultWidth = width; - resultHeight = height; - } else { - // Scale to fit - if (preserveAspectRatio) { - CGFloat pixelRatio = width / height; - CGFloat scaleRatio = scaleSize.width / scaleSize.height; - if (pixelRatio > scaleRatio) { - resultWidth = scaleSize.width; - resultHeight = ceil(scaleSize.width / pixelRatio); - } else { - resultHeight = scaleSize.height; - resultWidth = ceil(scaleSize.height * pixelRatio); - } - } else { - // Stretch - resultWidth = scaleSize.width; - resultHeight = scaleSize.height; - } - if (!shouldScaleUp) { - // Scale down only - resultWidth = MIN(width, resultWidth); - resultHeight = MIN(height, resultHeight); - } - } - - return CGSizeMake(resultWidth, resultHeight); -} - -+ (UIImage *)decodedImageWithImage:(UIImage *)image { - if (![self shouldDecodeImage:image]) { - return image; - } - - UIImage *decodedImage; -#if SD_UIKIT - SDImageCoderDecodeSolution decodeSolution = self.defaultDecodeSolution; - if (decodeSolution == SDImageCoderDecodeSolutionAutomatic) { - // See #3365, CMPhoto iOS 15 only supports JPEG/HEIF format, or it will print an error log :( - SDImageFormat format = image.sd_imageFormat; - if ((format == SDImageFormatHEIC || format == SDImageFormatHEIF) && SDImageSupportsHardwareHEVCDecoder()) { - decodedImage = SDImageDecodeUIKit(image); - } else if (format == SDImageFormatJPEG) { - decodedImage = SDImageDecodeUIKit(image); - } - } else if (decodeSolution == SDImageCoderDecodeSolutionUIKit) { - // Arbitrarily call CMPhoto - decodedImage = SDImageDecodeUIKit(image); - } - if (decodedImage) { - return decodedImage; - } -#endif - - CGImageRef imageRef = image.CGImage; - if (!imageRef) { - return image; - } - BOOL hasAlpha = [self CGImageContainsAlpha:imageRef]; - // Prefer to use new Image Renderer to re-draw image, instead of low-level CGBitmapContext and CGContextDrawImage - // This can keep both OS compatible and don't fight with Apple's performance optimization - SDGraphicsImageRendererFormat *format = [[SDGraphicsImageRendererFormat alloc] init]; - format.opaque = !hasAlpha; - format.scale = image.scale; - CGSize imageSize = image.size; - SDGraphicsImageRenderer *renderer = [[SDGraphicsImageRenderer alloc] initWithSize:imageSize format:format]; - decodedImage = [renderer imageWithActions:^(CGContextRef _Nonnull context) { - [image drawInRect:CGRectMake(0, 0, imageSize.width, imageSize.height)]; - }]; - SDImageCopyAssociatedObject(image, decodedImage); - decodedImage.sd_isDecoded = YES; - return decodedImage; -} - -+ (UIImage *)decodedAndScaledDownImageWithImage:(UIImage *)image limitBytes:(NSUInteger)bytes { - if (![self shouldDecodeImage:image]) { - return image; - } - - CGFloat destTotalPixels; - CGFloat tileTotalPixels; - if (bytes == 0) { - bytes = [self defaultScaleDownLimitBytes]; - } - bytes = MAX(bytes, kBytesPerPixel); - destTotalPixels = bytes / kBytesPerPixel; - tileTotalPixels = destTotalPixels / 3; - - CGImageRef sourceImageRef = image.CGImage; - CGSize sourceResolution = CGSizeZero; - sourceResolution.width = CGImageGetWidth(sourceImageRef); - sourceResolution.height = CGImageGetHeight(sourceImageRef); - - if (![self shouldScaleDownImagePixelSize:sourceResolution limitBytes:bytes]) { - return [self decodedImageWithImage:image]; - } - - CGFloat sourceTotalPixels = sourceResolution.width * sourceResolution.height; - // Determine the scale ratio to apply to the input image - // that results in an output image of the defined size. - // see kDestImageSizeMB, and how it relates to destTotalPixels. - CGFloat imageScale = sqrt(destTotalPixels / sourceTotalPixels); - CGSize destResolution = CGSizeZero; - destResolution.width = MAX(1, (int)(sourceResolution.width * imageScale)); - destResolution.height = MAX(1, (int)(sourceResolution.height * imageScale)); - - UIImage *decodedImage; -#if SD_UIKIT - SDImageCoderDecodeSolution decodeSolution = self.defaultDecodeSolution; - if (decodeSolution == SDImageCoderDecodeSolutionAutomatic) { - // See #3365, CMPhoto iOS 15 only supports JPEG/HEIF format, or it will print an error log :( - SDImageFormat format = image.sd_imageFormat; - if ((format == SDImageFormatHEIC || format == SDImageFormatHEIF) && SDImageSupportsHardwareHEVCDecoder()) { - decodedImage = SDImageDecodeAndScaleDownUIKit(image, destResolution); - } else if (format == SDImageFormatJPEG) { - decodedImage = SDImageDecodeAndScaleDownUIKit(image, destResolution); - } - } else if (decodeSolution == SDImageCoderDecodeSolutionUIKit) { - // Arbitrarily call CMPhoto - decodedImage = SDImageDecodeAndScaleDownUIKit(image, destResolution); - } - if (decodedImage) { - return decodedImage; - } -#endif - - // autorelease the bitmap context and all vars to help system to free memory when there are memory warning. - // on iOS7, do not forget to call [[SDImageCache sharedImageCache] clearMemory]; - @autoreleasepool { - // device color space - CGColorSpaceRef colorspaceRef = [self colorSpaceGetDeviceRGB]; - BOOL hasAlpha = [self CGImageContainsAlpha:sourceImageRef]; - - // kCGImageAlphaNone is not supported in CGBitmapContextCreate. - // Check #3330 for more detail about why this bitmap is choosen. - CGBitmapInfo bitmapInfo; - if (hasAlpha) { - // iPhone GPU prefer to use BGRA8888, see: https://forums.raywenderlich.com/t/why-mtlpixelformat-bgra8unorm/53489 - // BGRA8888 - bitmapInfo = kCGBitmapByteOrder32Host | kCGImageAlphaPremultipliedFirst; - } else { - // BGR888 previously works on iOS 8~iOS 14, however, iOS 15+ will result a black image. FB9958017 - // RGB888 - bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaNoneSkipLast; - } - CGContextRef destContext = CGBitmapContextCreate(NULL, - destResolution.width, - destResolution.height, - kBitsPerComponent, - 0, - colorspaceRef, - bitmapInfo); - - if (destContext == NULL) { - return image; - } - CGContextSetInterpolationQuality(destContext, kCGInterpolationHigh); - - // Now define the size of the rectangle to be used for the - // incremental bits from the input image to the output image. - // we use a source tile width equal to the width of the source - // image due to the way that iOS retrieves image data from disk. - // iOS must decode an image from disk in full width 'bands', even - // if current graphics context is clipped to a subrect within that - // band. Therefore we fully utilize all of the pixel data that results - // from a decoding operation by anchoring our tile size to the full - // width of the input image. - CGRect sourceTile = CGRectZero; - sourceTile.size.width = sourceResolution.width; - // The source tile height is dynamic. Since we specified the size - // of the source tile in MB, see how many rows of pixels high it - // can be given the input image width. - sourceTile.size.height = MAX(1, (int)(tileTotalPixels / sourceTile.size.width)); - sourceTile.origin.x = 0.0f; - // The output tile is the same proportions as the input tile, but - // scaled to image scale. - CGRect destTile; - destTile.size.width = destResolution.width; - destTile.size.height = sourceTile.size.height * imageScale; - destTile.origin.x = 0.0f; - // The source seem overlap is proportionate to the destination seem overlap. - // this is the amount of pixels to overlap each tile as we assemble the output image. - float sourceSeemOverlap = (int)((kDestSeemOverlap/destResolution.height)*sourceResolution.height); - CGImageRef sourceTileImageRef; - // calculate the number of read/write operations required to assemble the - // output image. - int iterations = (int)( sourceResolution.height / sourceTile.size.height ); - // If tile height doesn't divide the image height evenly, add another iteration - // to account for the remaining pixels. - int remainder = (int)sourceResolution.height % (int)sourceTile.size.height; - if(remainder) { - iterations++; - } - // Add seem overlaps to the tiles, but save the original tile height for y coordinate calculations. - float sourceTileHeightMinusOverlap = sourceTile.size.height; - sourceTile.size.height += sourceSeemOverlap; - destTile.size.height += kDestSeemOverlap; - for( int y = 0; y < iterations; ++y ) { - @autoreleasepool { - sourceTile.origin.y = y * sourceTileHeightMinusOverlap + sourceSeemOverlap; - destTile.origin.y = destResolution.height - (( y + 1 ) * sourceTileHeightMinusOverlap * imageScale + kDestSeemOverlap); - sourceTileImageRef = CGImageCreateWithImageInRect( sourceImageRef, sourceTile ); - if( y == iterations - 1 && remainder ) { - float dify = destTile.size.height; - destTile.size.height = CGImageGetHeight( sourceTileImageRef ) * imageScale; - dify -= destTile.size.height; - destTile.origin.y = MIN(0, destTile.origin.y + dify); - } - CGContextDrawImage( destContext, destTile, sourceTileImageRef ); - CGImageRelease( sourceTileImageRef ); - } - } - - CGImageRef destImageRef = CGBitmapContextCreateImage(destContext); - CGContextRelease(destContext); - if (destImageRef == NULL) { - return image; - } -#if SD_MAC - decodedImage = [[UIImage alloc] initWithCGImage:destImageRef scale:image.scale orientation:kCGImagePropertyOrientationUp]; -#else - decodedImage = [[UIImage alloc] initWithCGImage:destImageRef scale:image.scale orientation:image.imageOrientation]; -#endif - CGImageRelease(destImageRef); - SDImageCopyAssociatedObject(image, decodedImage); - decodedImage.sd_isDecoded = YES; - return decodedImage; - } -} - -+ (SDImageCoderDecodeSolution)defaultDecodeSolution { - return kDefaultDecodeSolution; -} - -+ (void)setDefaultDecodeSolution:(SDImageCoderDecodeSolution)defaultDecodeSolution { - kDefaultDecodeSolution = defaultDecodeSolution; -} - -+ (NSUInteger)defaultScaleDownLimitBytes { - return kDestImageLimitBytes; -} - -+ (void)setDefaultScaleDownLimitBytes:(NSUInteger)defaultScaleDownLimitBytes { - if (defaultScaleDownLimitBytes < kBytesPerPixel) { - return; - } - kDestImageLimitBytes = defaultScaleDownLimitBytes; -} - -#if SD_UIKIT || SD_WATCH -// Convert an EXIF image orientation to an iOS one. -+ (UIImageOrientation)imageOrientationFromEXIFOrientation:(CGImagePropertyOrientation)exifOrientation { - UIImageOrientation imageOrientation = UIImageOrientationUp; - switch (exifOrientation) { - case kCGImagePropertyOrientationUp: - imageOrientation = UIImageOrientationUp; - break; - case kCGImagePropertyOrientationDown: - imageOrientation = UIImageOrientationDown; - break; - case kCGImagePropertyOrientationLeft: - imageOrientation = UIImageOrientationLeft; - break; - case kCGImagePropertyOrientationRight: - imageOrientation = UIImageOrientationRight; - break; - case kCGImagePropertyOrientationUpMirrored: - imageOrientation = UIImageOrientationUpMirrored; - break; - case kCGImagePropertyOrientationDownMirrored: - imageOrientation = UIImageOrientationDownMirrored; - break; - case kCGImagePropertyOrientationLeftMirrored: - imageOrientation = UIImageOrientationLeftMirrored; - break; - case kCGImagePropertyOrientationRightMirrored: - imageOrientation = UIImageOrientationRightMirrored; - break; - default: - break; - } - return imageOrientation; -} - -// Convert an iOS orientation to an EXIF image orientation. -+ (CGImagePropertyOrientation)exifOrientationFromImageOrientation:(UIImageOrientation)imageOrientation { - CGImagePropertyOrientation exifOrientation = kCGImagePropertyOrientationUp; - switch (imageOrientation) { - case UIImageOrientationUp: - exifOrientation = kCGImagePropertyOrientationUp; - break; - case UIImageOrientationDown: - exifOrientation = kCGImagePropertyOrientationDown; - break; - case UIImageOrientationLeft: - exifOrientation = kCGImagePropertyOrientationLeft; - break; - case UIImageOrientationRight: - exifOrientation = kCGImagePropertyOrientationRight; - break; - case UIImageOrientationUpMirrored: - exifOrientation = kCGImagePropertyOrientationUpMirrored; - break; - case UIImageOrientationDownMirrored: - exifOrientation = kCGImagePropertyOrientationDownMirrored; - break; - case UIImageOrientationLeftMirrored: - exifOrientation = kCGImagePropertyOrientationLeftMirrored; - break; - case UIImageOrientationRightMirrored: - exifOrientation = kCGImagePropertyOrientationRightMirrored; - break; - default: - break; - } - return exifOrientation; -} -#endif - -#pragma mark - Helper Function -+ (BOOL)shouldDecodeImage:(nullable UIImage *)image { - // Prevent "CGBitmapContextCreateImage: invalid context 0x0" error - if (image == nil) { - return NO; - } - // Avoid extra decode - if (image.sd_isDecoded) { - return NO; - } - // do not decode animated images - if (image.sd_isAnimated) { - return NO; - } - // do not decode vector images - if (image.sd_isVector) { - return NO; - } - - return YES; -} - -+ (BOOL)shouldScaleDownImagePixelSize:(CGSize)sourceResolution limitBytes:(NSUInteger)bytes { - BOOL shouldScaleDown = YES; - - CGFloat sourceTotalPixels = sourceResolution.width * sourceResolution.height; - if (sourceTotalPixels <= 0) { - return NO; - } - CGFloat destTotalPixels; - if (bytes == 0) { - bytes = [self defaultScaleDownLimitBytes]; - } - bytes = MAX(bytes, kBytesPerPixel); - destTotalPixels = bytes / kBytesPerPixel; - CGFloat imageScale = destTotalPixels / sourceTotalPixels; - if (imageScale < 1) { - shouldScaleDown = YES; - } else { - shouldScaleDown = NO; - } - - return shouldScaleDown; -} - -static inline CGAffineTransform SDCGContextTransformFromOrientation(CGImagePropertyOrientation orientation, CGSize size) { - // Inspiration from @libfeihu - // We need to calculate the proper transformation to make the image upright. - // We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored. - CGAffineTransform transform = CGAffineTransformIdentity; - - switch (orientation) { - case kCGImagePropertyOrientationDown: - case kCGImagePropertyOrientationDownMirrored: - transform = CGAffineTransformTranslate(transform, size.width, size.height); - transform = CGAffineTransformRotate(transform, M_PI); - break; - - case kCGImagePropertyOrientationLeft: - case kCGImagePropertyOrientationLeftMirrored: - transform = CGAffineTransformTranslate(transform, size.width, 0); - transform = CGAffineTransformRotate(transform, M_PI_2); - break; - - case kCGImagePropertyOrientationRight: - case kCGImagePropertyOrientationRightMirrored: - transform = CGAffineTransformTranslate(transform, 0, size.height); - transform = CGAffineTransformRotate(transform, -M_PI_2); - break; - case kCGImagePropertyOrientationUp: - case kCGImagePropertyOrientationUpMirrored: - break; - } - - switch (orientation) { - case kCGImagePropertyOrientationUpMirrored: - case kCGImagePropertyOrientationDownMirrored: - transform = CGAffineTransformTranslate(transform, size.width, 0); - transform = CGAffineTransformScale(transform, -1, 1); - break; - - case kCGImagePropertyOrientationLeftMirrored: - case kCGImagePropertyOrientationRightMirrored: - transform = CGAffineTransformTranslate(transform, size.height, 0); - transform = CGAffineTransformScale(transform, -1, 1); - break; - case kCGImagePropertyOrientationUp: - case kCGImagePropertyOrientationDown: - case kCGImagePropertyOrientationLeft: - case kCGImagePropertyOrientationRight: - break; - } - - return transform; -} - -#if SD_UIKIT || SD_WATCH -static NSUInteger gcd(NSUInteger a, NSUInteger b) { - NSUInteger c; - while (a != 0) { - c = a; - a = b % a; - b = c; - } - return b; -} - -static NSUInteger gcdArray(size_t const count, NSUInteger const * const values) { - if (count == 0) { - return 0; - } - NSUInteger result = values[0]; - for (size_t i = 1; i < count; ++i) { - result = gcd(values[i], result); - } - return result; -} -#endif - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCodersManager.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCodersManager.h deleted file mode 100644 index 14b655d..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCodersManager.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDImageCoder.h" - -/** - Global object holding the array of coders, so that we avoid passing them from object to object. - Uses a priority queue behind scenes, which means the latest added coders have the highest priority. - This is done so when encoding/decoding something, we go through the list and ask each coder if they can handle the current data. - That way, users can add their custom coders while preserving our existing prebuilt ones - - Note: the `coders` getter will return the coders in their reversed order - Example: - - by default we internally set coders = `IOCoder`, `GIFCoder`, `APNGCoder` - - calling `coders` will return `@[IOCoder, GIFCoder, APNGCoder]` - - call `[addCoder:[MyCrazyCoder new]]` - - calling `coders` now returns `@[IOCoder, GIFCoder, APNGCoder, MyCrazyCoder]` - - Coders - ------ - A coder must conform to the `SDImageCoder` protocol or even to `SDProgressiveImageCoder` if it supports progressive decoding - Conformance is important because that way, they will implement `canDecodeFromData` or `canEncodeToFormat` - Those methods are called on each coder in the array (using the priority order) until one of them returns YES. - That means that coder can decode that data / encode to that format - */ -@interface SDImageCodersManager : NSObject - -/** - Returns the global shared coders manager instance. - */ -@property (nonatomic, class, readonly, nonnull) SDImageCodersManager *sharedManager; - -/** - All coders in coders manager. The coders array is a priority queue, which means the later added coder will have the highest priority - */ -@property (nonatomic, copy, nullable) NSArray> *coders; - -/** - Add a new coder to the end of coders array. Which has the highest priority. - - @param coder coder - */ -- (void)addCoder:(nonnull id)coder; - -/** - Remove a coder in the coders array. - - @param coder coder - */ -- (void)removeCoder:(nonnull id)coder; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCodersManager.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCodersManager.m deleted file mode 100644 index 00653d1..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCodersManager.m +++ /dev/null @@ -1,130 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDImageCodersManager.h" -#import "SDImageIOCoder.h" -#import "SDImageGIFCoder.h" -#import "SDImageAPNGCoder.h" -#import "SDImageHEICCoder.h" -#import "SDInternalMacros.h" - -@interface SDImageCodersManager () - -@property (nonatomic, strong, nonnull) NSMutableArray> *imageCoders; - -@end - -@implementation SDImageCodersManager { - SD_LOCK_DECLARE(_codersLock); -} - -+ (nonnull instancetype)sharedManager { - static dispatch_once_t once; - static id instance; - dispatch_once(&once, ^{ - instance = [self new]; - }); - return instance; -} - -- (instancetype)init { - if (self = [super init]) { - // initialize with default coders - _imageCoders = [NSMutableArray arrayWithArray:@[[SDImageIOCoder sharedCoder], [SDImageGIFCoder sharedCoder], [SDImageAPNGCoder sharedCoder]]]; - SD_LOCK_INIT(_codersLock); - } - return self; -} - -- (NSArray> *)coders { - SD_LOCK(_codersLock); - NSArray> *coders = [_imageCoders copy]; - SD_UNLOCK(_codersLock); - return coders; -} - -- (void)setCoders:(NSArray> *)coders { - SD_LOCK(_codersLock); - [_imageCoders removeAllObjects]; - if (coders.count) { - [_imageCoders addObjectsFromArray:coders]; - } - SD_UNLOCK(_codersLock); -} - -#pragma mark - Coder IO operations - -- (void)addCoder:(nonnull id)coder { - if (![coder conformsToProtocol:@protocol(SDImageCoder)]) { - return; - } - SD_LOCK(_codersLock); - [_imageCoders addObject:coder]; - SD_UNLOCK(_codersLock); -} - -- (void)removeCoder:(nonnull id)coder { - if (![coder conformsToProtocol:@protocol(SDImageCoder)]) { - return; - } - SD_LOCK(_codersLock); - [_imageCoders removeObject:coder]; - SD_UNLOCK(_codersLock); -} - -#pragma mark - SDImageCoder -- (BOOL)canDecodeFromData:(NSData *)data { - NSArray> *coders = self.coders; - for (id coder in coders.reverseObjectEnumerator) { - if ([coder canDecodeFromData:data]) { - return YES; - } - } - return NO; -} - -- (BOOL)canEncodeToFormat:(SDImageFormat)format { - NSArray> *coders = self.coders; - for (id coder in coders.reverseObjectEnumerator) { - if ([coder canEncodeToFormat:format]) { - return YES; - } - } - return NO; -} - -- (UIImage *)decodedImageWithData:(NSData *)data options:(nullable SDImageCoderOptions *)options { - if (!data) { - return nil; - } - UIImage *image; - NSArray> *coders = self.coders; - for (id coder in coders.reverseObjectEnumerator) { - if ([coder canDecodeFromData:data]) { - image = [coder decodedImageWithData:data options:options]; - break; - } - } - - return image; -} - -- (NSData *)encodedDataWithImage:(UIImage *)image format:(SDImageFormat)format options:(nullable SDImageCoderOptions *)options { - if (!image) { - return nil; - } - NSArray> *coders = self.coders; - for (id coder in coders.reverseObjectEnumerator) { - if ([coder canEncodeToFormat:format]) { - return [coder encodedDataWithImage:image format:format options:options]; - } - } - return nil; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageFrame.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageFrame.h deleted file mode 100644 index a93fd9c..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageFrame.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageCompat.h" - -/** - This class is used for creating animated images via `animatedImageWithFrames` in `SDImageCoderHelper`. - @note If you need to specify animated images loop count, use `sd_imageLoopCount` property in `UIImage+Metadata.h`. - */ -@interface SDImageFrame : NSObject - -/** - The image of current frame. You should not set an animated image. - */ -@property (nonatomic, strong, readonly, nonnull) UIImage *image; -/** - The duration of current frame to be displayed. The number is seconds but not milliseconds. You should not set this to zero. - */ -@property (nonatomic, readonly, assign) NSTimeInterval duration; - -/** - Create a frame instance with specify image and duration - - @param image current frame's image - @param duration current frame's duration - @return frame instance - */ -+ (instancetype _Nonnull)frameWithImage:(UIImage * _Nonnull)image duration:(NSTimeInterval)duration; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageFrame.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageFrame.m deleted file mode 100644 index f035af5..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageFrame.m +++ /dev/null @@ -1,28 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDImageFrame.h" - -@interface SDImageFrame () - -@property (nonatomic, strong, readwrite, nonnull) UIImage *image; -@property (nonatomic, readwrite, assign) NSTimeInterval duration; - -@end - -@implementation SDImageFrame - -+ (instancetype)frameWithImage:(UIImage *)image duration:(NSTimeInterval)duration { - SDImageFrame *frame = [[SDImageFrame alloc] init]; - frame.image = image; - frame.duration = duration; - - return frame; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageGIFCoder.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageGIFCoder.h deleted file mode 100644 index 5ef67ac..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageGIFCoder.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDImageIOAnimatedCoder.h" - -/** - Built in coder using ImageIO that supports animated GIF encoding/decoding - @note `SDImageIOCoder` supports GIF but only as static (will use the 1st frame). - @note Use `SDImageGIFCoder` for fully animated GIFs. For `UIImageView`, it will produce animated `UIImage`(`NSImage` on macOS) for rendering. For `SDAnimatedImageView`, it will use `SDAnimatedImage` for rendering. - @note The recommended approach for animated GIFs is using `SDAnimatedImage` with `SDAnimatedImageView`. It's more performant than `UIImageView` for GIF displaying(especially on memory usage) - */ -@interface SDImageGIFCoder : SDImageIOAnimatedCoder - -@property (nonatomic, class, readonly, nonnull) SDImageGIFCoder *sharedCoder; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageGIFCoder.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageGIFCoder.m deleted file mode 100644 index a1838b1..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageGIFCoder.m +++ /dev/null @@ -1,58 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDImageGIFCoder.h" -#import "SDImageIOAnimatedCoderInternal.h" -#if SD_MAC -#import -#else -#import -#endif - -@implementation SDImageGIFCoder - -+ (instancetype)sharedCoder { - static SDImageGIFCoder *coder; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - coder = [[SDImageGIFCoder alloc] init]; - }); - return coder; -} - -#pragma mark - Subclass Override - -+ (SDImageFormat)imageFormat { - return SDImageFormatGIF; -} - -+ (NSString *)imageUTType { - return (__bridge NSString *)kSDUTTypeGIF; -} - -+ (NSString *)dictionaryProperty { - return (__bridge NSString *)kCGImagePropertyGIFDictionary; -} - -+ (NSString *)unclampedDelayTimeProperty { - return (__bridge NSString *)kCGImagePropertyGIFUnclampedDelayTime; -} - -+ (NSString *)delayTimeProperty { - return (__bridge NSString *)kCGImagePropertyGIFDelayTime; -} - -+ (NSString *)loopCountProperty { - return (__bridge NSString *)kCGImagePropertyGIFLoopCount; -} - -+ (NSUInteger)defaultLoopCount { - return 1; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageGraphics.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageGraphics.h deleted file mode 100644 index 131d685..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageGraphics.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" -#import - -/** - These following graphics context method are provided to easily write cross-platform(AppKit/UIKit) code. - For UIKit, these methods just call the same method in `UIGraphics.h`. See the documentation for usage. - For AppKit, these methods use `NSGraphicsContext` to create image context and match the behavior like UIKit. - @note If you don't care bitmap format (ARGB8888) and just draw image, use `SDGraphicsImageRenderer` instead. It's more performant on RAM usage.` - */ - -/// Returns the current graphics context. -FOUNDATION_EXPORT CGContextRef __nullable SDGraphicsGetCurrentContext(void) CF_RETURNS_NOT_RETAINED; -/// Creates a bitmap-based graphics context and makes it the current context. -FOUNDATION_EXPORT void SDGraphicsBeginImageContext(CGSize size); -/// Creates a bitmap-based graphics context with the specified options. -FOUNDATION_EXPORT void SDGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale); -/// Removes the current bitmap-based graphics context from the top of the stack. -FOUNDATION_EXPORT void SDGraphicsEndImageContext(void); -/// Returns an image based on the contents of the current bitmap-based graphics context. -FOUNDATION_EXPORT UIImage * __nullable SDGraphicsGetImageFromCurrentImageContext(void); diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageGraphics.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageGraphics.m deleted file mode 100644 index d1a1ca6..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageGraphics.m +++ /dev/null @@ -1,127 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDImageGraphics.h" -#import "NSImage+Compatibility.h" -#import "SDImageCoderHelper.h" -#import "objc/runtime.h" - -#if SD_MAC -static void *kNSGraphicsContextScaleFactorKey; - -static CGContextRef SDCGContextCreateBitmapContext(CGSize size, BOOL opaque, CGFloat scale) { - if (scale == 0) { - // Match `UIGraphicsBeginImageContextWithOptions`, reset to the scale factor of the device’s main screen if scale is 0. - NSScreen *mainScreen = nil; - if (@available(macOS 10.12, *)) { - mainScreen = [NSScreen mainScreen]; - } else { - mainScreen = [NSScreen screens].firstObject; - } - scale = mainScreen.backingScaleFactor ?: 1.0f; - } - size_t width = ceil(size.width * scale); - size_t height = ceil(size.height * scale); - if (width < 1 || height < 1) return NULL; - - CGColorSpaceRef space = [SDImageCoderHelper colorSpaceGetDeviceRGB]; - // kCGImageAlphaNone is not supported in CGBitmapContextCreate. - // Check #3330 for more detail about why this bitmap is choosen. - CGBitmapInfo bitmapInfo; - if (!opaque) { - // iPhone GPU prefer to use BGRA8888, see: https://forums.raywenderlich.com/t/why-mtlpixelformat-bgra8unorm/53489 - // BGRA8888 - bitmapInfo = kCGBitmapByteOrder32Host | kCGImageAlphaPremultipliedFirst; - } else { - // BGR888 previously works on iOS 8~iOS 14, however, iOS 15+ will result a black image. FB9958017 - // RGB888 - bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaNoneSkipLast; - } - CGContextRef context = CGBitmapContextCreate(NULL, width, height, 8, 0, space, bitmapInfo); - if (!context) { - return NULL; - } - CGContextScaleCTM(context, scale, scale); - - return context; -} -#endif - -CGContextRef SDGraphicsGetCurrentContext(void) { -#if SD_UIKIT || SD_WATCH - return UIGraphicsGetCurrentContext(); -#else - return NSGraphicsContext.currentContext.CGContext; -#endif -} - -void SDGraphicsBeginImageContext(CGSize size) { -#if SD_UIKIT || SD_WATCH - UIGraphicsBeginImageContext(size); -#else - SDGraphicsBeginImageContextWithOptions(size, NO, 1.0); -#endif -} - -void SDGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale) { -#if SD_UIKIT || SD_WATCH - UIGraphicsBeginImageContextWithOptions(size, opaque, scale); -#else - CGContextRef context = SDCGContextCreateBitmapContext(size, opaque, scale); - if (!context) { - return; - } - NSGraphicsContext *graphicsContext = [NSGraphicsContext graphicsContextWithCGContext:context flipped:NO]; - objc_setAssociatedObject(graphicsContext, &kNSGraphicsContextScaleFactorKey, @(scale), OBJC_ASSOCIATION_RETAIN); - CGContextRelease(context); - [NSGraphicsContext saveGraphicsState]; - NSGraphicsContext.currentContext = graphicsContext; -#endif -} - -void SDGraphicsEndImageContext(void) { -#if SD_UIKIT || SD_WATCH - UIGraphicsEndImageContext(); -#else - [NSGraphicsContext restoreGraphicsState]; -#endif -} - -UIImage * SDGraphicsGetImageFromCurrentImageContext(void) { -#if SD_UIKIT || SD_WATCH - return UIGraphicsGetImageFromCurrentImageContext(); -#else - NSGraphicsContext *context = NSGraphicsContext.currentContext; - CGContextRef contextRef = context.CGContext; - if (!contextRef) { - return nil; - } - CGImageRef imageRef = CGBitmapContextCreateImage(contextRef); - if (!imageRef) { - return nil; - } - CGFloat scale = 0; - NSNumber *scaleFactor = objc_getAssociatedObject(context, &kNSGraphicsContextScaleFactorKey); - if ([scaleFactor isKindOfClass:[NSNumber class]]) { - scale = scaleFactor.doubleValue; - } - if (!scale) { - // reset to the scale factor of the device’s main screen if scale is 0. - NSScreen *mainScreen = nil; - if (@available(macOS 10.12, *)) { - mainScreen = [NSScreen mainScreen]; - } else { - mainScreen = [NSScreen screens].firstObject; - } - scale = mainScreen.backingScaleFactor ?: 1.0f; - } - NSImage *image = [[NSImage alloc] initWithCGImage:imageRef scale:scale orientation:kCGImagePropertyOrientationUp]; - CGImageRelease(imageRef); - return image; -#endif -} diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageHEICCoder.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageHEICCoder.h deleted file mode 100644 index f7dd661..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageHEICCoder.h +++ /dev/null @@ -1,25 +0,0 @@ -/* -* This file is part of the SDWebImage package. -* (c) Olivier Poitrey -* -* For the full copyright and license information, please view the LICENSE -* file that was distributed with this source code. -*/ - -#import -#import "SDImageIOAnimatedCoder.h" - -/** - This coder is used for HEIC (HEIF with HEVC container codec) image format. - Image/IO provide the static HEIC (.heic) support in iOS 11/macOS 10.13/tvOS 11/watchOS 4+. - Image/IO provide the animated HEIC (.heics) support in iOS 13/macOS 10.15/tvOS 13/watchOS 6+. - See https://nokiatech.github.io/heif/technical.html for the standard. - @note This coder is not in the default coder list for now, since HEIC animated image is really rare, and Apple's implementation still contains performance issues. You can enable if you need this. - @note If you need to support lower firmware version for HEIF, you can have a try at https://github.com/SDWebImage/SDWebImageHEIFCoder - */ -API_AVAILABLE(ios(13.0), tvos(13.0), macos(10.15), watchos(6.0)) -@interface SDImageHEICCoder : SDImageIOAnimatedCoder - -@property (nonatomic, class, readonly, nonnull) SDImageHEICCoder *sharedCoder; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageHEICCoder.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageHEICCoder.m deleted file mode 100644 index dd83aea..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageHEICCoder.m +++ /dev/null @@ -1,101 +0,0 @@ -/* -* This file is part of the SDWebImage package. -* (c) Olivier Poitrey -* -* For the full copyright and license information, please view the LICENSE -* file that was distributed with this source code. -*/ - -#import "SDImageHEICCoder.h" -#import "SDImageIOAnimatedCoderInternal.h" - -// These constants are available from iOS 13+ and Xcode 11. This raw value is used for toolchain and firmware compatibility -static NSString * kSDCGImagePropertyHEICSDictionary = @"{HEICS}"; -static NSString * kSDCGImagePropertyHEICSLoopCount = @"LoopCount"; -static NSString * kSDCGImagePropertyHEICSDelayTime = @"DelayTime"; -static NSString * kSDCGImagePropertyHEICSUnclampedDelayTime = @"UnclampedDelayTime"; - -@implementation SDImageHEICCoder - -+ (void)initialize { - if (@available(iOS 13, tvOS 13, macOS 10.15, watchOS 6, *)) { - // Use SDK instead of raw value - kSDCGImagePropertyHEICSDictionary = (__bridge NSString *)kCGImagePropertyHEICSDictionary; - kSDCGImagePropertyHEICSLoopCount = (__bridge NSString *)kCGImagePropertyHEICSLoopCount; - kSDCGImagePropertyHEICSDelayTime = (__bridge NSString *)kCGImagePropertyHEICSDelayTime; - kSDCGImagePropertyHEICSUnclampedDelayTime = (__bridge NSString *)kCGImagePropertyHEICSUnclampedDelayTime; - } -} - -+ (instancetype)sharedCoder { - static SDImageHEICCoder *coder; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - coder = [[SDImageHEICCoder alloc] init]; - }); - return coder; -} - -#pragma mark - SDImageCoder - -- (BOOL)canDecodeFromData:(nullable NSData *)data { - switch ([NSData sd_imageFormatForImageData:data]) { - case SDImageFormatHEIC: - // Check HEIC decoding compatibility - return [self.class canDecodeFromFormat:SDImageFormatHEIC]; - case SDImageFormatHEIF: - // Check HEIF decoding compatibility - return [self.class canDecodeFromFormat:SDImageFormatHEIF]; - default: - return NO; - } -} - -- (BOOL)canIncrementalDecodeFromData:(NSData *)data { - return [self canDecodeFromData:data]; -} - -- (BOOL)canEncodeToFormat:(SDImageFormat)format { - switch (format) { - case SDImageFormatHEIC: - // Check HEIC encoding compatibility - return [self.class canEncodeToFormat:SDImageFormatHEIC]; - case SDImageFormatHEIF: - // Check HEIF encoding compatibility - return [self.class canEncodeToFormat:SDImageFormatHEIF]; - default: - return NO; - } -} - -#pragma mark - Subclass Override - -+ (SDImageFormat)imageFormat { - return SDImageFormatHEIC; -} - -+ (NSString *)imageUTType { - return (__bridge NSString *)kSDUTTypeHEIC; -} - -+ (NSString *)dictionaryProperty { - return kSDCGImagePropertyHEICSDictionary; -} - -+ (NSString *)unclampedDelayTimeProperty { - return kSDCGImagePropertyHEICSUnclampedDelayTime; -} - -+ (NSString *)delayTimeProperty { - return kSDCGImagePropertyHEICSDelayTime; -} - -+ (NSString *)loopCountProperty { - return kSDCGImagePropertyHEICSLoopCount; -} - -+ (NSUInteger)defaultLoopCount { - return 0; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageIOAnimatedCoder.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageIOAnimatedCoder.h deleted file mode 100644 index a314c57..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageIOAnimatedCoder.h +++ /dev/null @@ -1,59 +0,0 @@ -/* -* This file is part of the SDWebImage package. -* (c) Olivier Poitrey -* -* For the full copyright and license information, please view the LICENSE -* file that was distributed with this source code. -*/ - -#import -#import -#import "SDImageCoder.h" - -/** - This is the abstract class for all animated coder, which use the Image/IO API. You can not use this directly as real coders. A exception will be raised if you use this class. - All of the properties need the subclass to implement and works as expected. - For Image/IO, See Apple's documentation: https://developer.apple.com/documentation/imageio - */ -@interface SDImageIOAnimatedCoder : NSObject - -#pragma mark - Subclass Override -/** - The supported animated image format. Such as `SDImageFormatGIF`. - @note Subclass override. - */ -@property (class, readonly) SDImageFormat imageFormat; -/** - The supported image format UTI Type. Such as `kSDUTTypeGIF`. - This can be used for cases when we can not detect `SDImageFormat. Such as progressive decoding's hint format `kCGImageSourceTypeIdentifierHint`. - @note Subclass override. - */ -@property (class, readonly, nonnull) NSString *imageUTType; -/** - The image container property key used in Image/IO API. Such as `kCGImagePropertyGIFDictionary`. - @note Subclass override. - */ -@property (class, readonly, nonnull) NSString *dictionaryProperty; -/** - The image unclamped delay time property key used in Image/IO API. Such as `kCGImagePropertyGIFUnclampedDelayTime` - @note Subclass override. - */ -@property (class, readonly, nonnull) NSString *unclampedDelayTimeProperty; -/** - The image delay time property key used in Image/IO API. Such as `kCGImagePropertyGIFDelayTime`. - @note Subclass override. - */ -@property (class, readonly, nonnull) NSString *delayTimeProperty; -/** - The image loop count property key used in Image/IO API. Such as `kCGImagePropertyGIFLoopCount`. - @note Subclass override. - */ -@property (class, readonly, nonnull) NSString *loopCountProperty; -/** - The default loop count when there are no any loop count information inside image container metadata. - For example, for GIF format, the standard use 1 (play once). For APNG format, the standard use 0 (infinity loop). - @note Subclass override. - */ -@property (class, readonly) NSUInteger defaultLoopCount; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageIOAnimatedCoder.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageIOAnimatedCoder.m deleted file mode 100644 index 922d018..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageIOAnimatedCoder.m +++ /dev/null @@ -1,645 +0,0 @@ -/* -* This file is part of the SDWebImage package. -* (c) Olivier Poitrey -* -* For the full copyright and license information, please view the LICENSE -* file that was distributed with this source code. -*/ - -#import "SDImageIOAnimatedCoder.h" -#import "NSImage+Compatibility.h" -#import "UIImage+Metadata.h" -#import "NSData+ImageContentType.h" -#import "SDImageCoderHelper.h" -#import "SDAnimatedImageRep.h" -#import "UIImage+ForceDecode.h" - -// Specify DPI for vector format in CGImageSource, like PDF -static NSString * kSDCGImageSourceRasterizationDPI = @"kCGImageSourceRasterizationDPI"; -// Specify File Size for lossy format encoding, like JPEG -static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestinationRequestedFileSize"; - -@interface SDImageIOCoderFrame : NSObject - -@property (nonatomic, assign) NSUInteger index; // Frame index (zero based) -@property (nonatomic, assign) NSTimeInterval duration; // Frame duration in seconds - -@end - -@implementation SDImageIOCoderFrame -@end - -@implementation SDImageIOAnimatedCoder { - size_t _width, _height; - CGImageSourceRef _imageSource; - NSData *_imageData; - CGFloat _scale; - NSUInteger _loopCount; - NSUInteger _frameCount; - NSArray *_frames; - BOOL _finished; - BOOL _preserveAspectRatio; - CGSize _thumbnailSize; -} - -- (void)dealloc -{ - if (_imageSource) { - CFRelease(_imageSource); - _imageSource = NULL; - } -#if SD_UIKIT - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; -#endif -} - -- (void)didReceiveMemoryWarning:(NSNotification *)notification -{ - if (_imageSource) { - for (size_t i = 0; i < _frameCount; i++) { - CGImageSourceRemoveCacheAtIndex(_imageSource, i); - } - } -} - -#pragma mark - Subclass Override - -+ (SDImageFormat)imageFormat { - @throw [NSException exceptionWithName:NSInternalInconsistencyException - reason:[NSString stringWithFormat:@"For `SDImageIOAnimatedCoder` subclass, you must override %@ method", NSStringFromSelector(_cmd)] - userInfo:nil]; -} - -+ (NSString *)imageUTType { - @throw [NSException exceptionWithName:NSInternalInconsistencyException - reason:[NSString stringWithFormat:@"For `SDImageIOAnimatedCoder` subclass, you must override %@ method", NSStringFromSelector(_cmd)] - userInfo:nil]; -} - -+ (NSString *)dictionaryProperty { - @throw [NSException exceptionWithName:NSInternalInconsistencyException - reason:[NSString stringWithFormat:@"For `SDImageIOAnimatedCoder` subclass, you must override %@ method", NSStringFromSelector(_cmd)] - userInfo:nil]; -} - -+ (NSString *)unclampedDelayTimeProperty { - @throw [NSException exceptionWithName:NSInternalInconsistencyException - reason:[NSString stringWithFormat:@"For `SDImageIOAnimatedCoder` subclass, you must override %@ method", NSStringFromSelector(_cmd)] - userInfo:nil]; -} - -+ (NSString *)delayTimeProperty { - @throw [NSException exceptionWithName:NSInternalInconsistencyException - reason:[NSString stringWithFormat:@"For `SDImageIOAnimatedCoder` subclass, you must override %@ method", NSStringFromSelector(_cmd)] - userInfo:nil]; -} - -+ (NSString *)loopCountProperty { - @throw [NSException exceptionWithName:NSInternalInconsistencyException - reason:[NSString stringWithFormat:@"For `SDImageIOAnimatedCoder` subclass, you must override %@ method", NSStringFromSelector(_cmd)] - userInfo:nil]; -} - -+ (NSUInteger)defaultLoopCount { - @throw [NSException exceptionWithName:NSInternalInconsistencyException - reason:[NSString stringWithFormat:@"For `SDImageIOAnimatedCoder` subclass, you must override %@ method", NSStringFromSelector(_cmd)] - userInfo:nil]; -} - -#pragma mark - Utils - -+ (BOOL)canDecodeFromFormat:(SDImageFormat)format { - static dispatch_once_t onceToken; - static NSSet *imageUTTypeSet; - dispatch_once(&onceToken, ^{ - NSArray *imageUTTypes = (__bridge_transfer NSArray *)CGImageSourceCopyTypeIdentifiers(); - imageUTTypeSet = [NSSet setWithArray:imageUTTypes]; - }); - CFStringRef imageUTType = [NSData sd_UTTypeFromImageFormat:format]; - if ([imageUTTypeSet containsObject:(__bridge NSString *)(imageUTType)]) { - // Can decode from target format - return YES; - } - return NO; -} - -+ (BOOL)canEncodeToFormat:(SDImageFormat)format { - static dispatch_once_t onceToken; - static NSSet *imageUTTypeSet; - dispatch_once(&onceToken, ^{ - NSArray *imageUTTypes = (__bridge_transfer NSArray *)CGImageDestinationCopyTypeIdentifiers(); - imageUTTypeSet = [NSSet setWithArray:imageUTTypes]; - }); - CFStringRef imageUTType = [NSData sd_UTTypeFromImageFormat:format]; - if ([imageUTTypeSet containsObject:(__bridge NSString *)(imageUTType)]) { - // Can encode to target format - return YES; - } - return NO; -} - -+ (NSUInteger)imageLoopCountWithSource:(CGImageSourceRef)source { - NSUInteger loopCount = self.defaultLoopCount; - NSDictionary *imageProperties = (__bridge_transfer NSDictionary *)CGImageSourceCopyProperties(source, NULL); - NSDictionary *containerProperties = imageProperties[self.dictionaryProperty]; - if (containerProperties) { - NSNumber *containerLoopCount = containerProperties[self.loopCountProperty]; - if (containerLoopCount != nil) { - loopCount = containerLoopCount.unsignedIntegerValue; - } - } - return loopCount; -} - -+ (NSTimeInterval)frameDurationAtIndex:(NSUInteger)index source:(CGImageSourceRef)source { - NSDictionary *options = @{ - (__bridge NSString *)kCGImageSourceShouldCacheImmediately : @(YES), - (__bridge NSString *)kCGImageSourceShouldCache : @(YES) // Always cache to reduce CPU usage - }; - NSTimeInterval frameDuration = 0.1; - CFDictionaryRef cfFrameProperties = CGImageSourceCopyPropertiesAtIndex(source, index, (__bridge CFDictionaryRef)options); - if (!cfFrameProperties) { - return frameDuration; - } - NSDictionary *frameProperties = (__bridge NSDictionary *)cfFrameProperties; - NSDictionary *containerProperties = frameProperties[self.dictionaryProperty]; - - NSNumber *delayTimeUnclampedProp = containerProperties[self.unclampedDelayTimeProperty]; - if (delayTimeUnclampedProp != nil) { - frameDuration = [delayTimeUnclampedProp doubleValue]; - } else { - NSNumber *delayTimeProp = containerProperties[self.delayTimeProperty]; - if (delayTimeProp != nil) { - frameDuration = [delayTimeProp doubleValue]; - } - } - - // Many annoying ads specify a 0 duration to make an image flash as quickly as possible. - // We follow Firefox's behavior and use a duration of 100 ms for any frames that specify - // a duration of <= 10 ms. See and - // for more information. - - if (frameDuration < 0.011) { - frameDuration = 0.1; - } - - CFRelease(cfFrameProperties); - return frameDuration; -} - -+ (UIImage *)createFrameAtIndex:(NSUInteger)index source:(CGImageSourceRef)source scale:(CGFloat)scale preserveAspectRatio:(BOOL)preserveAspectRatio thumbnailSize:(CGSize)thumbnailSize options:(NSDictionary *)options { - // Some options need to pass to `CGImageSourceCopyPropertiesAtIndex` before `CGImageSourceCreateImageAtIndex`, or ImageIO will ignore them because they parse once :) - // Parse the image properties - NSDictionary *properties = (__bridge_transfer NSDictionary *)CGImageSourceCopyPropertiesAtIndex(source, index, (__bridge CFDictionaryRef)options); - CGFloat pixelWidth = [properties[(__bridge NSString *)kCGImagePropertyPixelWidth] doubleValue]; - CGFloat pixelHeight = [properties[(__bridge NSString *)kCGImagePropertyPixelHeight] doubleValue]; - CGImagePropertyOrientation exifOrientation = (CGImagePropertyOrientation)[properties[(__bridge NSString *)kCGImagePropertyOrientation] unsignedIntegerValue]; - if (!exifOrientation) { - exifOrientation = kCGImagePropertyOrientationUp; - } - - NSMutableDictionary *decodingOptions; - if (options) { - decodingOptions = [NSMutableDictionary dictionaryWithDictionary:options]; - } else { - decodingOptions = [NSMutableDictionary dictionary]; - } - CGImageRef imageRef; - BOOL createFullImage = thumbnailSize.width == 0 || thumbnailSize.height == 0 || pixelWidth == 0 || pixelHeight == 0 || (pixelWidth <= thumbnailSize.width && pixelHeight <= thumbnailSize.height); - if (createFullImage) { - imageRef = CGImageSourceCreateImageAtIndex(source, index, (__bridge CFDictionaryRef)[decodingOptions copy]); - } else { - decodingOptions[(__bridge NSString *)kCGImageSourceCreateThumbnailWithTransform] = @(preserveAspectRatio); - CGFloat maxPixelSize; - if (preserveAspectRatio) { - CGFloat pixelRatio = pixelWidth / pixelHeight; - CGFloat thumbnailRatio = thumbnailSize.width / thumbnailSize.height; - if (pixelRatio > thumbnailRatio) { - maxPixelSize = MAX(thumbnailSize.width, thumbnailSize.width / pixelRatio); - } else { - maxPixelSize = MAX(thumbnailSize.height, thumbnailSize.height * pixelRatio); - } - } else { - maxPixelSize = MAX(thumbnailSize.width, thumbnailSize.height); - } - decodingOptions[(__bridge NSString *)kCGImageSourceThumbnailMaxPixelSize] = @(maxPixelSize); - decodingOptions[(__bridge NSString *)kCGImageSourceCreateThumbnailFromImageAlways] = @(YES); - imageRef = CGImageSourceCreateThumbnailAtIndex(source, index, (__bridge CFDictionaryRef)[decodingOptions copy]); - } - if (!imageRef) { - return nil; - } - // Thumbnail image post-process - if (!createFullImage) { - if (preserveAspectRatio) { - // kCGImageSourceCreateThumbnailWithTransform will apply EXIF transform as well, we should not apply twice - exifOrientation = kCGImagePropertyOrientationUp; - } else { - // `CGImageSourceCreateThumbnailAtIndex` take only pixel dimension, if not `preserveAspectRatio`, we should manual scale to the target size - CGImageRef scaledImageRef = [SDImageCoderHelper CGImageCreateScaled:imageRef size:thumbnailSize]; - CGImageRelease(imageRef); - imageRef = scaledImageRef; - } - } - -#if SD_UIKIT || SD_WATCH - UIImageOrientation imageOrientation = [SDImageCoderHelper imageOrientationFromEXIFOrientation:exifOrientation]; - UIImage *image = [[UIImage alloc] initWithCGImage:imageRef scale:scale orientation:imageOrientation]; -#else - UIImage *image = [[UIImage alloc] initWithCGImage:imageRef scale:scale orientation:exifOrientation]; -#endif - CGImageRelease(imageRef); - return image; -} - -#pragma mark - Decode -- (BOOL)canDecodeFromData:(nullable NSData *)data { - return ([NSData sd_imageFormatForImageData:data] == self.class.imageFormat); -} - -- (UIImage *)decodedImageWithData:(NSData *)data options:(nullable SDImageCoderOptions *)options { - if (!data) { - return nil; - } - CGFloat scale = 1; - NSNumber *scaleFactor = options[SDImageCoderDecodeScaleFactor]; - if (scaleFactor != nil) { - scale = MAX([scaleFactor doubleValue], 1); - } - - CGSize thumbnailSize = CGSizeZero; - NSValue *thumbnailSizeValue = options[SDImageCoderDecodeThumbnailPixelSize]; - if (thumbnailSizeValue != nil) { -#if SD_MAC - thumbnailSize = thumbnailSizeValue.sizeValue; -#else - thumbnailSize = thumbnailSizeValue.CGSizeValue; -#endif - } - - BOOL preserveAspectRatio = YES; - NSNumber *preserveAspectRatioValue = options[SDImageCoderDecodePreserveAspectRatio]; - if (preserveAspectRatioValue != nil) { - preserveAspectRatio = preserveAspectRatioValue.boolValue; - } - -#if SD_MAC - // If don't use thumbnail, prefers the built-in generation of frames (GIF/APNG) - // Which decode frames in time and reduce memory usage - if (thumbnailSize.width == 0 || thumbnailSize.height == 0) { - SDAnimatedImageRep *imageRep = [[SDAnimatedImageRep alloc] initWithData:data]; - if (imageRep) { - NSSize size = NSMakeSize(imageRep.pixelsWide / scale, imageRep.pixelsHigh / scale); - imageRep.size = size; - NSImage *animatedImage = [[NSImage alloc] initWithSize:size]; - [animatedImage addRepresentation:imageRep]; - animatedImage.sd_imageFormat = self.class.imageFormat; - return animatedImage; - } - } -#endif - - CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL); - if (!source) { - return nil; - } - size_t count = CGImageSourceGetCount(source); - UIImage *animatedImage; - - BOOL decodeFirstFrame = [options[SDImageCoderDecodeFirstFrameOnly] boolValue]; - if (decodeFirstFrame || count <= 1) { - animatedImage = [self.class createFrameAtIndex:0 source:source scale:scale preserveAspectRatio:preserveAspectRatio thumbnailSize:thumbnailSize options:nil]; - } else { - NSMutableArray *frames = [NSMutableArray array]; - - for (size_t i = 0; i < count; i++) { - UIImage *image = [self.class createFrameAtIndex:i source:source scale:scale preserveAspectRatio:preserveAspectRatio thumbnailSize:thumbnailSize options:nil]; - if (!image) { - continue; - } - - NSTimeInterval duration = [self.class frameDurationAtIndex:i source:source]; - - SDImageFrame *frame = [SDImageFrame frameWithImage:image duration:duration]; - [frames addObject:frame]; - } - - NSUInteger loopCount = [self.class imageLoopCountWithSource:source]; - - animatedImage = [SDImageCoderHelper animatedImageWithFrames:frames]; - animatedImage.sd_imageLoopCount = loopCount; - } - animatedImage.sd_imageFormat = self.class.imageFormat; - CFRelease(source); - - return animatedImage; -} - -#pragma mark - Progressive Decode - -- (BOOL)canIncrementalDecodeFromData:(NSData *)data { - return ([NSData sd_imageFormatForImageData:data] == self.class.imageFormat); -} - -- (instancetype)initIncrementalWithOptions:(nullable SDImageCoderOptions *)options { - self = [super init]; - if (self) { - NSString *imageUTType = self.class.imageUTType; - _imageSource = CGImageSourceCreateIncremental((__bridge CFDictionaryRef)@{(__bridge NSString *)kCGImageSourceTypeIdentifierHint : imageUTType}); - CGFloat scale = 1; - NSNumber *scaleFactor = options[SDImageCoderDecodeScaleFactor]; - if (scaleFactor != nil) { - scale = MAX([scaleFactor doubleValue], 1); - } - _scale = scale; - CGSize thumbnailSize = CGSizeZero; - NSValue *thumbnailSizeValue = options[SDImageCoderDecodeThumbnailPixelSize]; - if (thumbnailSizeValue != nil) { - #if SD_MAC - thumbnailSize = thumbnailSizeValue.sizeValue; - #else - thumbnailSize = thumbnailSizeValue.CGSizeValue; - #endif - } - _thumbnailSize = thumbnailSize; - BOOL preserveAspectRatio = YES; - NSNumber *preserveAspectRatioValue = options[SDImageCoderDecodePreserveAspectRatio]; - if (preserveAspectRatioValue != nil) { - preserveAspectRatio = preserveAspectRatioValue.boolValue; - } - _preserveAspectRatio = preserveAspectRatio; -#if SD_UIKIT - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveMemoryWarning:) name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; -#endif - } - return self; -} - -- (void)updateIncrementalData:(NSData *)data finished:(BOOL)finished { - if (_finished) { - return; - } - _imageData = data; - _finished = finished; - - // The following code is from http://www.cocoaintheshell.com/2011/05/progressive-images-download-imageio/ - // Thanks to the author @Nyx0uf - - // Update the data source, we must pass ALL the data, not just the new bytes - CGImageSourceUpdateData(_imageSource, (__bridge CFDataRef)data, finished); - - if (_width + _height == 0) { - NSDictionary *options = @{ - (__bridge NSString *)kCGImageSourceShouldCacheImmediately : @(YES), - (__bridge NSString *)kCGImageSourceShouldCache : @(YES) // Always cache to reduce CPU usage - }; - CFDictionaryRef properties = CGImageSourceCopyPropertiesAtIndex(_imageSource, 0, (__bridge CFDictionaryRef)options); - if (properties) { - CFTypeRef val = CFDictionaryGetValue(properties, kCGImagePropertyPixelHeight); - if (val) CFNumberGetValue(val, kCFNumberLongType, &_height); - val = CFDictionaryGetValue(properties, kCGImagePropertyPixelWidth); - if (val) CFNumberGetValue(val, kCFNumberLongType, &_width); - CFRelease(properties); - } - } - - // For animated image progressive decoding because the frame count and duration may be changed. - [self scanAndCheckFramesValidWithImageSource:_imageSource]; -} - -- (UIImage *)incrementalDecodedImageWithOptions:(SDImageCoderOptions *)options { - UIImage *image; - - if (_width + _height > 0) { - // Create the image - CGFloat scale = _scale; - NSNumber *scaleFactor = options[SDImageCoderDecodeScaleFactor]; - if (scaleFactor != nil) { - scale = MAX([scaleFactor doubleValue], 1); - } - image = [self.class createFrameAtIndex:0 source:_imageSource scale:scale preserveAspectRatio:_preserveAspectRatio thumbnailSize:_thumbnailSize options:nil]; - if (image) { - image.sd_imageFormat = self.class.imageFormat; - } - } - - return image; -} - -#pragma mark - Encode -- (BOOL)canEncodeToFormat:(SDImageFormat)format { - return (format == self.class.imageFormat); -} - -- (NSData *)encodedDataWithImage:(UIImage *)image format:(SDImageFormat)format options:(nullable SDImageCoderOptions *)options { - if (!image) { - return nil; - } - CGImageRef imageRef = image.CGImage; - if (!imageRef) { - // Earily return, supports CGImage only - return nil; - } - - if (format != self.class.imageFormat) { - return nil; - } - - NSMutableData *imageData = [NSMutableData data]; - CFStringRef imageUTType = [NSData sd_UTTypeFromImageFormat:format]; - NSArray *frames = [SDImageCoderHelper framesFromAnimatedImage:image]; - - // Create an image destination. Animated Image does not support EXIF image orientation TODO - // The `CGImageDestinationCreateWithData` will log a warning when count is 0, use 1 instead. - CGImageDestinationRef imageDestination = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)imageData, imageUTType, frames.count ?: 1, NULL); - if (!imageDestination) { - // Handle failure. - return nil; - } - NSMutableDictionary *properties = [NSMutableDictionary dictionary]; - // Encoding Options - double compressionQuality = 1; - if (options[SDImageCoderEncodeCompressionQuality]) { - compressionQuality = [options[SDImageCoderEncodeCompressionQuality] doubleValue]; - } - properties[(__bridge NSString *)kCGImageDestinationLossyCompressionQuality] = @(compressionQuality); - CGColorRef backgroundColor = [options[SDImageCoderEncodeBackgroundColor] CGColor]; - if (backgroundColor) { - properties[(__bridge NSString *)kCGImageDestinationBackgroundColor] = (__bridge id)(backgroundColor); - } - CGSize maxPixelSize = CGSizeZero; - NSValue *maxPixelSizeValue = options[SDImageCoderEncodeMaxPixelSize]; - if (maxPixelSizeValue != nil) { -#if SD_MAC - maxPixelSize = maxPixelSizeValue.sizeValue; -#else - maxPixelSize = maxPixelSizeValue.CGSizeValue; -#endif - } - CGFloat pixelWidth = (CGFloat)CGImageGetWidth(imageRef); - CGFloat pixelHeight = (CGFloat)CGImageGetHeight(imageRef); - CGFloat finalPixelSize = 0; - BOOL encodeFullImage = maxPixelSize.width == 0 || maxPixelSize.height == 0 || pixelWidth == 0 || pixelHeight == 0 || (pixelWidth <= maxPixelSize.width && pixelHeight <= maxPixelSize.height); - if (!encodeFullImage) { - // Thumbnail Encoding - CGFloat pixelRatio = pixelWidth / pixelHeight; - CGFloat maxPixelSizeRatio = maxPixelSize.width / maxPixelSize.height; - if (pixelRatio > maxPixelSizeRatio) { - finalPixelSize = MAX(maxPixelSize.width, maxPixelSize.width / pixelRatio); - } else { - finalPixelSize = MAX(maxPixelSize.height, maxPixelSize.height * pixelRatio); - } - properties[(__bridge NSString *)kCGImageDestinationImageMaxPixelSize] = @(finalPixelSize); - } - NSUInteger maxFileSize = [options[SDImageCoderEncodeMaxFileSize] unsignedIntegerValue]; - if (maxFileSize > 0) { - properties[kSDCGImageDestinationRequestedFileSize] = @(maxFileSize); - // Remove the quality if we have file size limit - properties[(__bridge NSString *)kCGImageDestinationLossyCompressionQuality] = nil; - } - BOOL embedThumbnail = NO; - if (options[SDImageCoderEncodeEmbedThumbnail]) { - embedThumbnail = [options[SDImageCoderEncodeEmbedThumbnail] boolValue]; - } - properties[(__bridge NSString *)kCGImageDestinationEmbedThumbnail] = @(embedThumbnail); - - BOOL encodeFirstFrame = [options[SDImageCoderEncodeFirstFrameOnly] boolValue]; - if (encodeFirstFrame || frames.count == 0) { - // for static single images - CGImageDestinationAddImage(imageDestination, imageRef, (__bridge CFDictionaryRef)properties); - } else { - // for animated images - NSUInteger loopCount = image.sd_imageLoopCount; - NSDictionary *containerProperties = @{ - self.class.dictionaryProperty: @{self.class.loopCountProperty : @(loopCount)} - }; - // container level properties (applies for `CGImageDestinationSetProperties`, not individual frames) - CGImageDestinationSetProperties(imageDestination, (__bridge CFDictionaryRef)containerProperties); - - for (size_t i = 0; i < frames.count; i++) { - SDImageFrame *frame = frames[i]; - NSTimeInterval frameDuration = frame.duration; - CGImageRef frameImageRef = frame.image.CGImage; - properties[self.class.dictionaryProperty] = @{self.class.delayTimeProperty : @(frameDuration)}; - CGImageDestinationAddImage(imageDestination, frameImageRef, (__bridge CFDictionaryRef)properties); - } - } - // Finalize the destination. - if (CGImageDestinationFinalize(imageDestination) == NO) { - // Handle failure. - imageData = nil; - } - - CFRelease(imageDestination); - - return [imageData copy]; -} - -#pragma mark - SDAnimatedImageCoder -- (nullable instancetype)initWithAnimatedImageData:(nullable NSData *)data options:(nullable SDImageCoderOptions *)options { - if (!data) { - return nil; - } - self = [super init]; - if (self) { - CGImageSourceRef imageSource = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL); - if (!imageSource) { - return nil; - } - BOOL framesValid = [self scanAndCheckFramesValidWithImageSource:imageSource]; - if (!framesValid) { - CFRelease(imageSource); - return nil; - } - CGFloat scale = 1; - NSNumber *scaleFactor = options[SDImageCoderDecodeScaleFactor]; - if (scaleFactor != nil) { - scale = MAX([scaleFactor doubleValue], 1); - } - _scale = scale; - CGSize thumbnailSize = CGSizeZero; - NSValue *thumbnailSizeValue = options[SDImageCoderDecodeThumbnailPixelSize]; - if (thumbnailSizeValue != nil) { - #if SD_MAC - thumbnailSize = thumbnailSizeValue.sizeValue; - #else - thumbnailSize = thumbnailSizeValue.CGSizeValue; - #endif - } - _thumbnailSize = thumbnailSize; - BOOL preserveAspectRatio = YES; - NSNumber *preserveAspectRatioValue = options[SDImageCoderDecodePreserveAspectRatio]; - if (preserveAspectRatioValue != nil) { - preserveAspectRatio = preserveAspectRatioValue.boolValue; - } - _preserveAspectRatio = preserveAspectRatio; - _imageSource = imageSource; - _imageData = data; -#if SD_UIKIT - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveMemoryWarning:) name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; -#endif - } - return self; -} - -- (BOOL)scanAndCheckFramesValidWithImageSource:(CGImageSourceRef)imageSource { - if (!imageSource) { - return NO; - } - NSUInteger frameCount = CGImageSourceGetCount(imageSource); - NSUInteger loopCount = [self.class imageLoopCountWithSource:imageSource]; - NSMutableArray *frames = [NSMutableArray array]; - - for (size_t i = 0; i < frameCount; i++) { - SDImageIOCoderFrame *frame = [[SDImageIOCoderFrame alloc] init]; - frame.index = i; - frame.duration = [self.class frameDurationAtIndex:i source:imageSource]; - [frames addObject:frame]; - } - - _frameCount = frameCount; - _loopCount = loopCount; - _frames = [frames copy]; - - return YES; -} - -- (NSData *)animatedImageData { - return _imageData; -} - -- (NSUInteger)animatedImageLoopCount { - return _loopCount; -} - -- (NSUInteger)animatedImageFrameCount { - return _frameCount; -} - -- (NSTimeInterval)animatedImageDurationAtIndex:(NSUInteger)index { - if (index >= _frameCount) { - return 0; - } - return _frames[index].duration; -} - -- (UIImage *)animatedImageFrameAtIndex:(NSUInteger)index { - if (index >= _frameCount) { - return nil; - } - // Animated Image should not use the CGContext solution to force decode. Prefers to use Image/IO built in method, which is safer and memory friendly, see https://github.com/SDWebImage/SDWebImage/issues/2961 - NSDictionary *options = @{ - (__bridge NSString *)kCGImageSourceShouldCacheImmediately : @(YES), - (__bridge NSString *)kCGImageSourceShouldCache : @(YES) // Always cache to reduce CPU usage - }; - UIImage *image = [self.class createFrameAtIndex:index source:_imageSource scale:_scale preserveAspectRatio:_preserveAspectRatio thumbnailSize:_thumbnailSize options:options]; - if (!image) { - return nil; - } - image.sd_imageFormat = self.class.imageFormat; - image.sd_isDecoded = YES; - return image; -} - -@end - diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageIOCoder.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageIOCoder.h deleted file mode 100644 index 98682ed..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageIOCoder.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDImageCoder.h" - -/** - Built in coder that supports PNG, JPEG, TIFF, includes support for progressive decoding. - - GIF - Also supports static GIF (meaning will only handle the 1st frame). - For a full GIF support, we recommend `SDAnimatedImageView` to keep both CPU and memory balanced. - - HEIC - This coder also supports HEIC format because ImageIO supports it natively. But it depends on the system capabilities, so it won't work on all devices, see: https://devstreaming-cdn.apple.com/videos/wwdc/2017/511tj33587vdhds/511/511_working_with_heif_and_hevc.pdf - Decode(Software): !Simulator && (iOS 11 || tvOS 11 || macOS 10.13) - Decode(Hardware): !Simulator && ((iOS 11 && A9Chip) || (macOS 10.13 && 6thGenerationIntelCPU)) - Encode(Software): macOS 10.13 - Encode(Hardware): !Simulator && ((iOS 11 && A10FusionChip) || (macOS 10.13 && 6thGenerationIntelCPU)) - */ -@interface SDImageIOCoder : NSObject - -@property (nonatomic, class, readonly, nonnull) SDImageIOCoder *sharedCoder; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageIOCoder.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageIOCoder.m deleted file mode 100644 index 42f7084..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageIOCoder.m +++ /dev/null @@ -1,347 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDImageIOCoder.h" -#import "SDImageCoderHelper.h" -#import "NSImage+Compatibility.h" -#import -#import "UIImage+Metadata.h" -#import "SDImageIOAnimatedCoderInternal.h" - -// Specify DPI for vector format in CGImageSource, like PDF -static NSString * kSDCGImageSourceRasterizationDPI = @"kCGImageSourceRasterizationDPI"; -// Specify File Size for lossy format encoding, like JPEG -static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestinationRequestedFileSize"; - -@implementation SDImageIOCoder { - size_t _width, _height; - CGImagePropertyOrientation _orientation; - CGImageSourceRef _imageSource; - CGFloat _scale; - BOOL _finished; - BOOL _preserveAspectRatio; - CGSize _thumbnailSize; -} - -- (void)dealloc { - if (_imageSource) { - CFRelease(_imageSource); - _imageSource = NULL; - } -#if SD_UIKIT - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; -#endif -} - -- (void)didReceiveMemoryWarning:(NSNotification *)notification -{ - if (_imageSource) { - CGImageSourceRemoveCacheAtIndex(_imageSource, 0); - } -} - -+ (instancetype)sharedCoder { - static SDImageIOCoder *coder; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - coder = [[SDImageIOCoder alloc] init]; - }); - return coder; -} - -#pragma mark - Utils -+ (CGRect)boxRectFromPDFFData:(nonnull NSData *)data { - CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data); - if (!provider) { - return CGRectZero; - } - CGPDFDocumentRef document = CGPDFDocumentCreateWithProvider(provider); - CGDataProviderRelease(provider); - if (!document) { - return CGRectZero; - } - - // `CGPDFDocumentGetPage` page number is 1-indexed. - CGPDFPageRef page = CGPDFDocumentGetPage(document, 1); - if (!page) { - CGPDFDocumentRelease(document); - return CGRectZero; - } - - CGRect boxRect = CGPDFPageGetBoxRect(page, kCGPDFMediaBox); - CGPDFDocumentRelease(document); - - return boxRect; -} - -#pragma mark - Decode -- (BOOL)canDecodeFromData:(nullable NSData *)data { - return YES; -} - -- (UIImage *)decodedImageWithData:(NSData *)data options:(nullable SDImageCoderOptions *)options { - if (!data) { - return nil; - } - CGFloat scale = 1; - NSNumber *scaleFactor = options[SDImageCoderDecodeScaleFactor]; - if (scaleFactor != nil) { - scale = MAX([scaleFactor doubleValue], 1) ; - } - - CGSize thumbnailSize = CGSizeZero; - NSValue *thumbnailSizeValue = options[SDImageCoderDecodeThumbnailPixelSize]; - if (thumbnailSizeValue != nil) { -#if SD_MAC - thumbnailSize = thumbnailSizeValue.sizeValue; -#else - thumbnailSize = thumbnailSizeValue.CGSizeValue; -#endif - } - - BOOL preserveAspectRatio = YES; - NSNumber *preserveAspectRatioValue = options[SDImageCoderDecodePreserveAspectRatio]; - if (preserveAspectRatioValue != nil) { - preserveAspectRatio = preserveAspectRatioValue.boolValue; - } - - CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL); - if (!source) { - return nil; - } - - CFStringRef uttype = CGImageSourceGetType(source); - SDImageFormat imageFormat = [NSData sd_imageFormatFromUTType:uttype]; - // Check vector format - NSDictionary *decodingOptions = nil; - if (imageFormat == SDImageFormatPDF) { - // Use 72 DPI (1:1 inch to pixel) by default, matching Apple's PDFKit behavior - NSUInteger rasterizationDPI = 72; - CGFloat maxPixelSize = MAX(thumbnailSize.width, thumbnailSize.height); - if (maxPixelSize > 0) { - // Calculate DPI based on PDF box and pixel size - CGRect boxRect = [self.class boxRectFromPDFFData:data]; - CGFloat maxBoxSize = MAX(boxRect.size.width, boxRect.size.height); - if (maxBoxSize > 0) { - rasterizationDPI = rasterizationDPI * (maxPixelSize / maxBoxSize); - } - } - decodingOptions = @{ - // This option will cause ImageIO return the pixel size from `CGImageSourceCopyProperties` - // If not provided, it always return 0 size - kSDCGImageSourceRasterizationDPI : @(rasterizationDPI), - }; - // Already calculated DPI, avoid re-calculation based on thumbnail information - preserveAspectRatio = YES; - thumbnailSize = CGSizeZero; - } - - UIImage *image = [SDImageIOAnimatedCoder createFrameAtIndex:0 source:source scale:scale preserveAspectRatio:preserveAspectRatio thumbnailSize:thumbnailSize options:decodingOptions]; - CFRelease(source); - if (!image) { - return nil; - } - - image.sd_imageFormat = imageFormat; - return image; -} - -#pragma mark - Progressive Decode - -- (BOOL)canIncrementalDecodeFromData:(NSData *)data { - return [self canDecodeFromData:data]; -} - -- (instancetype)initIncrementalWithOptions:(nullable SDImageCoderOptions *)options { - self = [super init]; - if (self) { - _imageSource = CGImageSourceCreateIncremental(NULL); - CGFloat scale = 1; - NSNumber *scaleFactor = options[SDImageCoderDecodeScaleFactor]; - if (scaleFactor != nil) { - scale = MAX([scaleFactor doubleValue], 1); - } - _scale = scale; - CGSize thumbnailSize = CGSizeZero; - NSValue *thumbnailSizeValue = options[SDImageCoderDecodeThumbnailPixelSize]; - if (thumbnailSizeValue != nil) { - #if SD_MAC - thumbnailSize = thumbnailSizeValue.sizeValue; - #else - thumbnailSize = thumbnailSizeValue.CGSizeValue; - #endif - } - _thumbnailSize = thumbnailSize; - BOOL preserveAspectRatio = YES; - NSNumber *preserveAspectRatioValue = options[SDImageCoderDecodePreserveAspectRatio]; - if (preserveAspectRatioValue != nil) { - preserveAspectRatio = preserveAspectRatioValue.boolValue; - } - _preserveAspectRatio = preserveAspectRatio; -#if SD_UIKIT - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveMemoryWarning:) name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; -#endif - } - return self; -} - -- (void)updateIncrementalData:(NSData *)data finished:(BOOL)finished { - if (_finished) { - return; - } - _finished = finished; - - // The following code is from http://www.cocoaintheshell.com/2011/05/progressive-images-download-imageio/ - // Thanks to the author @Nyx0uf - - // Update the data source, we must pass ALL the data, not just the new bytes - CGImageSourceUpdateData(_imageSource, (__bridge CFDataRef)data, finished); - - if (_width + _height == 0) { - CFDictionaryRef properties = CGImageSourceCopyPropertiesAtIndex(_imageSource, 0, NULL); - if (properties) { - NSInteger orientationValue = 1; - CFTypeRef val = CFDictionaryGetValue(properties, kCGImagePropertyPixelHeight); - if (val) CFNumberGetValue(val, kCFNumberLongType, &_height); - val = CFDictionaryGetValue(properties, kCGImagePropertyPixelWidth); - if (val) CFNumberGetValue(val, kCFNumberLongType, &_width); - val = CFDictionaryGetValue(properties, kCGImagePropertyOrientation); - if (val) CFNumberGetValue(val, kCFNumberNSIntegerType, &orientationValue); - CFRelease(properties); - - // When we draw to Core Graphics, we lose orientation information, - // which means the image below born of initWithCGIImage will be - // oriented incorrectly sometimes. (Unlike the image born of initWithData - // in didCompleteWithError.) So save it here and pass it on later. - _orientation = (CGImagePropertyOrientation)orientationValue; - } - } -} - -- (UIImage *)incrementalDecodedImageWithOptions:(SDImageCoderOptions *)options { - UIImage *image; - - if (_width + _height > 0) { - // Create the image - CGFloat scale = _scale; - NSNumber *scaleFactor = options[SDImageCoderDecodeScaleFactor]; - if (scaleFactor != nil) { - scale = MAX([scaleFactor doubleValue], 1); - } - image = [SDImageIOAnimatedCoder createFrameAtIndex:0 source:_imageSource scale:scale preserveAspectRatio:_preserveAspectRatio thumbnailSize:_thumbnailSize options:nil]; - if (image) { - CFStringRef uttype = CGImageSourceGetType(_imageSource); - image.sd_imageFormat = [NSData sd_imageFormatFromUTType:uttype]; - } - } - - return image; -} - -#pragma mark - Encode -- (BOOL)canEncodeToFormat:(SDImageFormat)format { - return YES; -} - -- (NSData *)encodedDataWithImage:(UIImage *)image format:(SDImageFormat)format options:(nullable SDImageCoderOptions *)options { - if (!image) { - return nil; - } - CGImageRef imageRef = image.CGImage; - if (!imageRef) { - // Earily return, supports CGImage only - return nil; - } - - if (format == SDImageFormatUndefined) { - BOOL hasAlpha = [SDImageCoderHelper CGImageContainsAlpha:imageRef]; - if (hasAlpha) { - format = SDImageFormatPNG; - } else { - format = SDImageFormatJPEG; - } - } - - NSMutableData *imageData = [NSMutableData data]; - CFStringRef imageUTType = [NSData sd_UTTypeFromImageFormat:format]; - - // Create an image destination. - CGImageDestinationRef imageDestination = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)imageData, imageUTType, 1, NULL); - if (!imageDestination) { - // Handle failure. - return nil; - } - - NSMutableDictionary *properties = [NSMutableDictionary dictionary]; -#if SD_UIKIT || SD_WATCH - CGImagePropertyOrientation exifOrientation = [SDImageCoderHelper exifOrientationFromImageOrientation:image.imageOrientation]; -#else - CGImagePropertyOrientation exifOrientation = kCGImagePropertyOrientationUp; -#endif - properties[(__bridge NSString *)kCGImagePropertyOrientation] = @(exifOrientation); - // Encoding Options - double compressionQuality = 1; - if (options[SDImageCoderEncodeCompressionQuality]) { - compressionQuality = [options[SDImageCoderEncodeCompressionQuality] doubleValue]; - } - properties[(__bridge NSString *)kCGImageDestinationLossyCompressionQuality] = @(compressionQuality); - CGColorRef backgroundColor = [options[SDImageCoderEncodeBackgroundColor] CGColor]; - if (backgroundColor) { - properties[(__bridge NSString *)kCGImageDestinationBackgroundColor] = (__bridge id)(backgroundColor); - } - CGSize maxPixelSize = CGSizeZero; - NSValue *maxPixelSizeValue = options[SDImageCoderEncodeMaxPixelSize]; - if (maxPixelSizeValue != nil) { -#if SD_MAC - maxPixelSize = maxPixelSizeValue.sizeValue; -#else - maxPixelSize = maxPixelSizeValue.CGSizeValue; -#endif - } - CGFloat pixelWidth = (CGFloat)CGImageGetWidth(imageRef); - CGFloat pixelHeight = (CGFloat)CGImageGetHeight(imageRef); - CGFloat finalPixelSize = 0; - BOOL encodeFullImage = maxPixelSize.width == 0 || maxPixelSize.height == 0 || pixelWidth == 0 || pixelHeight == 0 || (pixelWidth <= maxPixelSize.width && pixelHeight <= maxPixelSize.height); - if (!encodeFullImage) { - // Thumbnail Encoding - CGFloat pixelRatio = pixelWidth / pixelHeight; - CGFloat maxPixelSizeRatio = maxPixelSize.width / maxPixelSize.height; - if (pixelRatio > maxPixelSizeRatio) { - finalPixelSize = MAX(maxPixelSize.width, maxPixelSize.width / pixelRatio); - } else { - finalPixelSize = MAX(maxPixelSize.height, maxPixelSize.height * pixelRatio); - } - properties[(__bridge NSString *)kCGImageDestinationImageMaxPixelSize] = @(finalPixelSize); - } - NSUInteger maxFileSize = [options[SDImageCoderEncodeMaxFileSize] unsignedIntegerValue]; - if (maxFileSize > 0) { - properties[kSDCGImageDestinationRequestedFileSize] = @(maxFileSize); - // Remove the quality if we have file size limit - properties[(__bridge NSString *)kCGImageDestinationLossyCompressionQuality] = nil; - } - BOOL embedThumbnail = NO; - if (options[SDImageCoderEncodeEmbedThumbnail]) { - embedThumbnail = [options[SDImageCoderEncodeEmbedThumbnail] boolValue]; - } - properties[(__bridge NSString *)kCGImageDestinationEmbedThumbnail] = @(embedThumbnail); - - // Add your image to the destination. - CGImageDestinationAddImage(imageDestination, imageRef, (__bridge CFDictionaryRef)properties); - - // Finalize the destination. - if (CGImageDestinationFinalize(imageDestination) == NO) { - // Handle failure. - imageData = nil; - } - - CFRelease(imageDestination); - - return [imageData copy]; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageLoader.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageLoader.h deleted file mode 100644 index addad83..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageLoader.h +++ /dev/null @@ -1,146 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" -#import "SDWebImageDefine.h" -#import "SDWebImageOperation.h" -#import "SDImageCoder.h" - -typedef void(^SDImageLoaderProgressBlock)(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL); -typedef void(^SDImageLoaderCompletedBlock)(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, BOOL finished); - -#pragma mark - Context Options - -/** - A `UIImage` instance from `SDWebImageManager` when you specify `SDWebImageRefreshCached` and image cache hit. - This can be a hint for image loader to load the image from network and refresh the image from remote location if needed. If the image from remote location does not change, you should call the completion with `SDWebImageErrorCacheNotModified` error. (UIImage) - @note If you don't implement `SDWebImageRefreshCached` support, you do not need to care about this context option. - */ -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextLoaderCachedImage; - -#pragma mark - Helper method - -/** - This is the built-in decoding process for image download from network or local file. - @note If you want to implement your custom loader with `requestImageWithURL:options:context:progress:completed:` API, but also want to keep compatible with SDWebImage's behavior, you'd better use this to produce image. - - @param imageData The image data from the network. Should not be nil - @param imageURL The image URL from the input. Should not be nil - @param options The options arg from the input - @param context The context arg from the input - @return The decoded image for current image data load from the network - */ -FOUNDATION_EXPORT UIImage * _Nullable SDImageLoaderDecodeImageData(NSData * _Nonnull imageData, NSURL * _Nonnull imageURL, SDWebImageOptions options, SDWebImageContext * _Nullable context); - -/** - This is the built-in decoding process for image progressive download from network. It's used when `SDWebImageProgressiveLoad` option is set. (It's not required when your loader does not support progressive image loading) - @note If you want to implement your custom loader with `requestImageWithURL:options:context:progress:completed:` API, but also want to keep compatible with SDWebImage's behavior, you'd better use this to produce image. - - @param imageData The image data from the network so far. Should not be nil - @param imageURL The image URL from the input. Should not be nil - @param finished Pass NO to specify the download process has not finished. Pass YES when all image data has finished. - @param operation The loader operation associated with current progressive download. Why to provide this is because progressive decoding need to store the partial decoded context for each operation to avoid conflict. You should provide the operation from `loadImageWithURL:` method return value. - @param options The options arg from the input - @param context The context arg from the input - @return The decoded progressive image for current image data load from the network - */ -FOUNDATION_EXPORT UIImage * _Nullable SDImageLoaderDecodeProgressiveImageData(NSData * _Nonnull imageData, NSURL * _Nonnull imageURL, BOOL finished, id _Nonnull operation, SDWebImageOptions options, SDWebImageContext * _Nullable context); - -/** - This function get the progressive decoder for current loading operation. If no progressive decoding is happended or decoder is not able to construct, return nil. - @return The progressive decoder associated with the loading operation. - */ -FOUNDATION_EXPORT id _Nullable SDImageLoaderGetProgressiveCoder(id _Nonnull operation); - -/** - This function set the progressive decoder for current loading operation. If no progressive decoding is happended, pass nil. - @param operation The loading operation to associate the progerssive decoder. - */ -FOUNDATION_EXPORT void SDImageLoaderSetProgressiveCoder(id _Nonnull operation, id _Nullable progressiveCoder); - -#pragma mark - SDImageLoader - -/** - This is the protocol to specify custom image load process. You can create your own class to conform this protocol and use as a image loader to load image from network or any available remote resources defined by yourself. - If you want to implement custom loader for image download from network or local file, you just need to concentrate on image data download only. After the download finish, call `SDImageLoaderDecodeImageData` or `SDImageLoaderDecodeProgressiveImageData` to use the built-in decoding process and produce image (Remember to call in the global queue). And finally callback the completion block. - If you directly get the image instance using some third-party SDKs, such as image directly from Photos framework. You can process the image data and image instance by yourself without that built-in decoding process. And finally callback the completion block. - @note It's your responsibility to load the image in the desired global queue(to avoid block main queue). We do not dispatch these method call in a global queue but just from the call queue (For `SDWebImageManager`, it typically call from the main queue). -*/ -@protocol SDImageLoader - -@required -/** - Whether current image loader supports to load the provide image URL. - This will be checked every time a new image request come for loader. If this return NO, we will mark this image load as failed. If return YES, we will start to call `requestImageWithURL:options:context:progress:completed:`. - - @param url The image URL to be loaded. - @return YES to continue download, NO to stop download. - */ -- (BOOL)canRequestImageForURL:(nullable NSURL *)url API_DEPRECATED("Use canRequestImageForURL:options:context: instead", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); - -@optional -/** - Whether current image loader supports to load the provide image URL, with associated options and context. - This will be checked every time a new image request come for loader. If this return NO, we will mark this image load as failed. If return YES, we will start to call `requestImageWithURL:options:context:progress:completed:`. - - @param url The image URL to be loaded. - @param options A mask to specify options to use for this request - @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - @return YES to continue download, NO to stop download. - */ -- (BOOL)canRequestImageForURL:(nullable NSURL *)url - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context; - -@required -/** - Load the image and image data with the given URL and return the image data. You're responsible for producing the image instance. - - @param url The URL represent the image. Note this may not be a HTTP URL - @param options A mask to specify options to use for this request - @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - @param progressBlock A block called while image is downloading - * @note the progress block is executed on a background queue - @param completedBlock A block called when operation has been completed. - @return An operation which allow the user to cancel the current request. - */ -- (nullable id)requestImageWithURL:(nullable NSURL *)url - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDImageLoaderCompletedBlock)completedBlock; - - -/** - Whether the error from image loader should be marked indeed un-recoverable or not. - If this return YES, failed URL which does not using `SDWebImageRetryFailed` will be blocked into black list. Else not. - - @param url The URL represent the image. Note this may not be a HTTP URL - @param error The URL's loading error, from previous `requestImageWithURL:options:context:progress:completed:` completedBlock's error. - @return Whether to block this url or not. Return YES to mark this URL as failed. - */ -- (BOOL)shouldBlockFailedURLWithURL:(nonnull NSURL *)url - error:(nonnull NSError *)error API_DEPRECATED("Use shouldBlockFailedURLWithURL:error:options:context: instead", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); - -@optional -/** - Whether the error from image loader should be marked indeed un-recoverable or not, with associated options and context. - If this return YES, failed URL which does not using `SDWebImageRetryFailed` will be blocked into black list. Else not. - - @param url The URL represent the image. Note this may not be a HTTP URL - @param error The URL's loading error, from previous `requestImageWithURL:options:context:progress:completed:` completedBlock's error. - @param options A mask to specify options to use for this request - @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - @return Whether to block this url or not. Return YES to mark this URL as failed. - */ -- (BOOL)shouldBlockFailedURLWithURL:(nonnull NSURL *)url - error:(nonnull NSError *)error - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageLoader.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageLoader.m deleted file mode 100644 index 77d3073..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageLoader.m +++ /dev/null @@ -1,196 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDImageLoader.h" -#import "SDWebImageCacheKeyFilter.h" -#import "SDImageCodersManager.h" -#import "SDImageCoderHelper.h" -#import "SDAnimatedImage.h" -#import "UIImage+Metadata.h" -#import "SDInternalMacros.h" -#import "SDImageCacheDefine.h" -#import "objc/runtime.h" - -SDWebImageContextOption const SDWebImageContextLoaderCachedImage = @"loaderCachedImage"; - -static void * SDImageLoaderProgressiveCoderKey = &SDImageLoaderProgressiveCoderKey; - -id SDImageLoaderGetProgressiveCoder(id operation) { - NSCParameterAssert(operation); - return objc_getAssociatedObject(operation, SDImageLoaderProgressiveCoderKey); -} - -void SDImageLoaderSetProgressiveCoder(id operation, id progressiveCoder) { - NSCParameterAssert(operation); - objc_setAssociatedObject(operation, SDImageLoaderProgressiveCoderKey, progressiveCoder, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -UIImage * _Nullable SDImageLoaderDecodeImageData(NSData * _Nonnull imageData, NSURL * _Nonnull imageURL, SDWebImageOptions options, SDWebImageContext * _Nullable context) { - NSCParameterAssert(imageData); - NSCParameterAssert(imageURL); - - UIImage *image; - id cacheKeyFilter = context[SDWebImageContextCacheKeyFilter]; - NSString *cacheKey; - if (cacheKeyFilter) { - cacheKey = [cacheKeyFilter cacheKeyForURL:imageURL]; - } else { - cacheKey = imageURL.absoluteString; - } - SDImageCoderOptions *coderOptions = SDGetDecodeOptionsFromContext(context, options, cacheKey); - BOOL decodeFirstFrame = SD_OPTIONS_CONTAINS(options, SDWebImageDecodeFirstFrameOnly); - CGFloat scale = [coderOptions[SDImageCoderDecodeScaleFactor] doubleValue]; - - // Grab the image coder - id imageCoder; - if ([context[SDWebImageContextImageCoder] conformsToProtocol:@protocol(SDImageCoder)]) { - imageCoder = context[SDWebImageContextImageCoder]; - } else { - imageCoder = [SDImageCodersManager sharedManager]; - } - - if (!decodeFirstFrame) { - // check whether we should use `SDAnimatedImage` - Class animatedImageClass = context[SDWebImageContextAnimatedImageClass]; - if ([animatedImageClass isSubclassOfClass:[UIImage class]] && [animatedImageClass conformsToProtocol:@protocol(SDAnimatedImage)]) { - image = [[animatedImageClass alloc] initWithData:imageData scale:scale options:coderOptions]; - if (image) { - // Preload frames if supported - if (options & SDWebImagePreloadAllFrames && [image respondsToSelector:@selector(preloadAllFrames)]) { - [((id)image) preloadAllFrames]; - } - } else { - // Check image class matching - if (options & SDWebImageMatchAnimatedImageClass) { - return nil; - } - } - } - } - if (!image) { - image = [imageCoder decodedImageWithData:imageData options:coderOptions]; - } - if (image) { - BOOL shouldDecode = !SD_OPTIONS_CONTAINS(options, SDWebImageAvoidDecodeImage); - if ([image.class conformsToProtocol:@protocol(SDAnimatedImage)]) { - // `SDAnimatedImage` do not decode - shouldDecode = NO; - } else if (image.sd_isAnimated) { - // animated image do not decode - shouldDecode = NO; - } - - if (shouldDecode) { - image = [SDImageCoderHelper decodedImageWithImage:image]; - } - // assign the decode options, to let manager check whether to re-decode if needed - image.sd_decodeOptions = coderOptions; - } - - return image; -} - -UIImage * _Nullable SDImageLoaderDecodeProgressiveImageData(NSData * _Nonnull imageData, NSURL * _Nonnull imageURL, BOOL finished, id _Nonnull operation, SDWebImageOptions options, SDWebImageContext * _Nullable context) { - NSCParameterAssert(imageData); - NSCParameterAssert(imageURL); - NSCParameterAssert(operation); - - UIImage *image; - id cacheKeyFilter = context[SDWebImageContextCacheKeyFilter]; - NSString *cacheKey; - if (cacheKeyFilter) { - cacheKey = [cacheKeyFilter cacheKeyForURL:imageURL]; - } else { - cacheKey = imageURL.absoluteString; - } - BOOL decodeFirstFrame = SD_OPTIONS_CONTAINS(options, SDWebImageDecodeFirstFrameOnly); - NSNumber *scaleValue = context[SDWebImageContextImageScaleFactor]; - CGFloat scale = scaleValue.doubleValue >= 1 ? scaleValue.doubleValue : SDImageScaleFactorForKey(cacheKey); - NSNumber *preserveAspectRatioValue = context[SDWebImageContextImagePreserveAspectRatio]; - NSValue *thumbnailSizeValue; - BOOL shouldScaleDown = SD_OPTIONS_CONTAINS(options, SDWebImageScaleDownLargeImages); - if (shouldScaleDown) { - CGFloat thumbnailPixels = SDImageCoderHelper.defaultScaleDownLimitBytes / 4; - CGFloat dimension = ceil(sqrt(thumbnailPixels)); - thumbnailSizeValue = @(CGSizeMake(dimension, dimension)); - } - if (context[SDWebImageContextImageThumbnailPixelSize]) { - thumbnailSizeValue = context[SDWebImageContextImageThumbnailPixelSize]; - } - - SDImageCoderMutableOptions *mutableCoderOptions = [NSMutableDictionary dictionaryWithCapacity:2]; - mutableCoderOptions[SDImageCoderDecodeFirstFrameOnly] = @(decodeFirstFrame); - mutableCoderOptions[SDImageCoderDecodeScaleFactor] = @(scale); - mutableCoderOptions[SDImageCoderDecodePreserveAspectRatio] = preserveAspectRatioValue; - mutableCoderOptions[SDImageCoderDecodeThumbnailPixelSize] = thumbnailSizeValue; - mutableCoderOptions[SDImageCoderWebImageContext] = context; - SDImageCoderOptions *coderOptions = [mutableCoderOptions copy]; - - // Grab the progressive image coder - id progressiveCoder = SDImageLoaderGetProgressiveCoder(operation); - if (!progressiveCoder) { - id imageCoder = context[SDWebImageContextImageCoder]; - // Check the progressive coder if provided - if ([imageCoder conformsToProtocol:@protocol(SDProgressiveImageCoder)]) { - progressiveCoder = [[[imageCoder class] alloc] initIncrementalWithOptions:coderOptions]; - } else { - // We need to create a new instance for progressive decoding to avoid conflicts - for (id coder in [SDImageCodersManager sharedManager].coders.reverseObjectEnumerator) { - if ([coder conformsToProtocol:@protocol(SDProgressiveImageCoder)] && - [((id)coder) canIncrementalDecodeFromData:imageData]) { - progressiveCoder = [[[coder class] alloc] initIncrementalWithOptions:coderOptions]; - break; - } - } - } - SDImageLoaderSetProgressiveCoder(operation, progressiveCoder); - } - // If we can't find any progressive coder, disable progressive download - if (!progressiveCoder) { - return nil; - } - - [progressiveCoder updateIncrementalData:imageData finished:finished]; - if (!decodeFirstFrame) { - // check whether we should use `SDAnimatedImage` - Class animatedImageClass = context[SDWebImageContextAnimatedImageClass]; - if ([animatedImageClass isSubclassOfClass:[UIImage class]] && [animatedImageClass conformsToProtocol:@protocol(SDAnimatedImage)] && [progressiveCoder conformsToProtocol:@protocol(SDAnimatedImageCoder)]) { - image = [[animatedImageClass alloc] initWithAnimatedCoder:(id)progressiveCoder scale:scale]; - if (image) { - // Progressive decoding does not preload frames - } else { - // Check image class matching - if (options & SDWebImageMatchAnimatedImageClass) { - return nil; - } - } - } - } - if (!image) { - image = [progressiveCoder incrementalDecodedImageWithOptions:coderOptions]; - } - if (image) { - BOOL shouldDecode = !SD_OPTIONS_CONTAINS(options, SDWebImageAvoidDecodeImage); - if ([image.class conformsToProtocol:@protocol(SDAnimatedImage)]) { - // `SDAnimatedImage` do not decode - shouldDecode = NO; - } else if (image.sd_isAnimated) { - // animated image do not decode - shouldDecode = NO; - } - if (shouldDecode) { - image = [SDImageCoderHelper decodedImageWithImage:image]; - } - // mark the image as progressive (completed one are not mark as progressive) - image.sd_isIncremental = !finished; - // assign the decode options, to let manager check whether to re-decode if needed - image.sd_decodeOptions = coderOptions; - } - - return image; -} diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageLoadersManager.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageLoadersManager.h deleted file mode 100644 index 9886f45..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageLoadersManager.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDImageLoader.h" - -/** - A loaders manager to manage multiple loaders - */ -@interface SDImageLoadersManager : NSObject - -/** - Returns the global shared loaders manager instance. By default we will set [`SDWebImageDownloader.sharedDownloader`] into the loaders array. - */ -@property (nonatomic, class, readonly, nonnull) SDImageLoadersManager *sharedManager; - -/** - All image loaders in manager. The loaders array is a priority queue, which means the later added loader will have the highest priority - */ -@property (nonatomic, copy, nullable) NSArray>* loaders; - -/** - Add a new image loader to the end of loaders array. Which has the highest priority. - - @param loader loader - */ -- (void)addLoader:(nonnull id)loader; - -/** - Remove an image loader in the loaders array. - - @param loader loader - */ -- (void)removeLoader:(nonnull id)loader; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageLoadersManager.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageLoadersManager.m deleted file mode 100644 index ac86c29..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageLoadersManager.m +++ /dev/null @@ -1,123 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDImageLoadersManager.h" -#import "SDWebImageDownloader.h" -#import "SDInternalMacros.h" - -@interface SDImageLoadersManager () - -@property (nonatomic, strong, nonnull) NSMutableArray> *imageLoaders; - -@end - -@implementation SDImageLoadersManager { - SD_LOCK_DECLARE(_loadersLock); -} - -+ (SDImageLoadersManager *)sharedManager { - static dispatch_once_t onceToken; - static SDImageLoadersManager *manager; - dispatch_once(&onceToken, ^{ - manager = [[SDImageLoadersManager alloc] init]; - }); - return manager; -} - -- (instancetype)init { - self = [super init]; - if (self) { - // initialize with default image loaders - _imageLoaders = [NSMutableArray arrayWithObject:[SDWebImageDownloader sharedDownloader]]; - SD_LOCK_INIT(_loadersLock); - } - return self; -} - -- (NSArray> *)loaders { - SD_LOCK(_loadersLock); - NSArray>* loaders = [_imageLoaders copy]; - SD_UNLOCK(_loadersLock); - return loaders; -} - -- (void)setLoaders:(NSArray> *)loaders { - SD_LOCK(_loadersLock); - [_imageLoaders removeAllObjects]; - if (loaders.count) { - [_imageLoaders addObjectsFromArray:loaders]; - } - SD_UNLOCK(_loadersLock); -} - -#pragma mark - Loader Property - -- (void)addLoader:(id)loader { - if (![loader conformsToProtocol:@protocol(SDImageLoader)]) { - return; - } - SD_LOCK(_loadersLock); - [_imageLoaders addObject:loader]; - SD_UNLOCK(_loadersLock); -} - -- (void)removeLoader:(id)loader { - if (![loader conformsToProtocol:@protocol(SDImageLoader)]) { - return; - } - SD_LOCK(_loadersLock); - [_imageLoaders removeObject:loader]; - SD_UNLOCK(_loadersLock); -} - -#pragma mark - SDImageLoader - -- (BOOL)canRequestImageForURL:(nullable NSURL *)url { - return [self canRequestImageForURL:url options:0 context:nil]; -} - -- (BOOL)canRequestImageForURL:(NSURL *)url options:(SDWebImageOptions)options context:(SDWebImageContext *)context { - NSArray> *loaders = self.loaders; - for (id loader in loaders.reverseObjectEnumerator) { - if ([loader respondsToSelector:@selector(canRequestImageForURL:options:context:)]) { - if ([loader canRequestImageForURL:url options:options context:context]) { - return YES; - } - } else { - if ([loader canRequestImageForURL:url]) { - return YES; - } - } - } - return NO; -} - -- (id)requestImageWithURL:(NSURL *)url options:(SDWebImageOptions)options context:(SDWebImageContext *)context progress:(SDImageLoaderProgressBlock)progressBlock completed:(SDImageLoaderCompletedBlock)completedBlock { - if (!url) { - return nil; - } - NSArray> *loaders = self.loaders; - for (id loader in loaders.reverseObjectEnumerator) { - if ([loader canRequestImageForURL:url]) { - return [loader requestImageWithURL:url options:options context:context progress:progressBlock completed:completedBlock]; - } - } - return nil; -} - -- (BOOL)shouldBlockFailedURLWithURL:(NSURL *)url error:(NSError *)error { - NSArray> *loaders = self.loaders; - for (id loader in loaders.reverseObjectEnumerator) { - if ([loader canRequestImageForURL:url]) { - return [loader shouldBlockFailedURLWithURL:url error:error]; - } - } - return NO; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageTransformer.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageTransformer.h deleted file mode 100644 index 3031bfe..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageTransformer.h +++ /dev/null @@ -1,241 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" -#import "UIImage+Transform.h" - -/** - Return the transformed cache key which applied with specify transformerKey. - - @param key The original cache key - @param transformerKey The transformer key from the transformer - @return The transformed cache key - */ -FOUNDATION_EXPORT NSString * _Nullable SDTransformedKeyForKey(NSString * _Nullable key, NSString * _Nonnull transformerKey); - -/** - Return the thumbnailed cache key which applied with specify thumbnailSize and preserveAspectRatio control. - @param key The original cache key - @param thumbnailPixelSize The thumbnail pixel size - @param preserveAspectRatio The preserve aspect ratio option - @return The thumbnailed cache key - @note If you have both transformer and thumbnail applied for image, call `SDThumbnailedKeyForKey` firstly and then with `SDTransformedKeyForKey`.` - */ -FOUNDATION_EXPORT NSString * _Nullable SDThumbnailedKeyForKey(NSString * _Nullable key, CGSize thumbnailPixelSize, BOOL preserveAspectRatio); - -/** - A transformer protocol to transform the image load from cache or from download. - You can provide transformer to cache and manager (Through the `transformer` property or context option `SDWebImageContextImageTransformer`). - - @note The transform process is called from a global queue in order to not to block the main queue. - */ -@protocol SDImageTransformer - -@required -/** - For each transformer, it must contains its cache key to used to store the image cache or query from the cache. This key will be appened after the original cache key generated by URL or from user. - - @return The cache key to appended after the original cache key. Should not be nil. - */ -@property (nonatomic, copy, readonly, nonnull) NSString *transformerKey; - -/** - Transform the image to another image. - - @param image The image to be transformed - @param key The cache key associated to the image. This arg is a hint for image source, not always useful and should be nullable. In the future we will remove this arg. - @return The transformed image, or nil if transform failed - */ -- (nullable UIImage *)transformedImageWithImage:(nonnull UIImage *)image forKey:(nonnull NSString *)key API_DEPRECATED("The key arg will be removed in the future. Update your code and don't rely on that.", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); - -@end - -#pragma mark - Pipeline - -/** - Pipeline transformer. Which you can bind multiple transformers together to let the image to be transformed one by one in order and generate the final image. - @note Because transformers are lightweight, if you want to append or arrange transformers, create another pipeline transformer instead. This class is considered as immutable. - */ -@interface SDImagePipelineTransformer : NSObject - -/** - All transformers in pipeline - */ -@property (nonatomic, copy, readonly, nonnull) NSArray> *transformers; - -- (nonnull instancetype)init NS_UNAVAILABLE; -+ (nonnull instancetype)transformerWithTransformers:(nonnull NSArray> *)transformers; - -@end - -// There are some built-in transformers based on the `UIImage+Transformer` category to provide the common image geometry, image blending and image effect process. Those transform are useful for static image only but you can create your own to support animated image as well. -// Because transformers are lightweight, these class are considered as immutable. -#pragma mark - Image Geometry - -/** - Image round corner transformer - */ -@interface SDImageRoundCornerTransformer: NSObject - -/** - The radius of each corner oval. Values larger than half the - rectangle's width or height are clamped appropriately to - half the width or height. - */ -@property (nonatomic, assign, readonly) CGFloat cornerRadius; - -/** - A bitmask value that identifies the corners that you want - rounded. You can use this parameter to round only a subset - of the corners of the rectangle. - */ -@property (nonatomic, assign, readonly) SDRectCorner corners; - -/** - The inset border line width. Values larger than half the rectangle's - width or height are clamped appropriately to half the width - or height. - */ -@property (nonatomic, assign, readonly) CGFloat borderWidth; - -/** - The border stroke color. nil means clear color. - */ -@property (nonatomic, strong, readonly, nullable) UIColor *borderColor; - -- (nonnull instancetype)init NS_UNAVAILABLE; -+ (nonnull instancetype)transformerWithRadius:(CGFloat)cornerRadius corners:(SDRectCorner)corners borderWidth:(CGFloat)borderWidth borderColor:(nullable UIColor *)borderColor; - -@end - -/** - Image resizing transformer - */ -@interface SDImageResizingTransformer : NSObject - -/** - The new size to be resized, values should be positive. - */ -@property (nonatomic, assign, readonly) CGSize size; - -/** - The scale mode for image content. - */ -@property (nonatomic, assign, readonly) SDImageScaleMode scaleMode; - -- (nonnull instancetype)init NS_UNAVAILABLE; -+ (nonnull instancetype)transformerWithSize:(CGSize)size scaleMode:(SDImageScaleMode)scaleMode; - -@end - -/** - Image cropping transformer - */ -@interface SDImageCroppingTransformer : NSObject - -/** - Image's inner rect. - */ -@property (nonatomic, assign, readonly) CGRect rect; - -- (nonnull instancetype)init NS_UNAVAILABLE; -+ (nonnull instancetype)transformerWithRect:(CGRect)rect; - -@end - -/** - Image flipping transformer - */ -@interface SDImageFlippingTransformer : NSObject - -/** - YES to flip the image horizontally. ⇋ - */ -@property (nonatomic, assign, readonly) BOOL horizontal; - -/** - YES to flip the image vertically. ⥯ - */ -@property (nonatomic, assign, readonly) BOOL vertical; - -- (nonnull instancetype)init NS_UNAVAILABLE; -+ (nonnull instancetype)transformerWithHorizontal:(BOOL)horizontal vertical:(BOOL)vertical; - -@end - -/** - Image rotation transformer - */ -@interface SDImageRotationTransformer : NSObject - -/** - Rotated radians in counterclockwise.⟲ - */ -@property (nonatomic, assign, readonly) CGFloat angle; - -/** - YES: new image's size is extend to fit all content. - NO: image's size will not change, content may be clipped. - */ -@property (nonatomic, assign, readonly) BOOL fitSize; - -- (nonnull instancetype)init NS_UNAVAILABLE; -+ (nonnull instancetype)transformerWithAngle:(CGFloat)angle fitSize:(BOOL)fitSize; - -@end - -#pragma mark - Image Blending - -/** - Image tint color transformer - */ -@interface SDImageTintTransformer : NSObject - -/** - The tint color. - */ -@property (nonatomic, strong, readonly, nonnull) UIColor *tintColor; - -- (nonnull instancetype)init NS_UNAVAILABLE; -+ (nonnull instancetype)transformerWithColor:(nonnull UIColor *)tintColor; - -@end - -#pragma mark - Image Effect - -/** - Image blur effect transformer - */ -@interface SDImageBlurTransformer : NSObject - -/** - The radius of the blur in points, 0 means no blur effect. - */ -@property (nonatomic, assign, readonly) CGFloat blurRadius; - -- (nonnull instancetype)init NS_UNAVAILABLE; -+ (nonnull instancetype)transformerWithRadius:(CGFloat)blurRadius; - -@end - -#if SD_UIKIT || SD_MAC -/** - Core Image filter transformer - */ -@interface SDImageFilterTransformer: NSObject - -/** - The CIFilter to be applied to the image. - */ -@property (nonatomic, strong, readonly, nonnull) CIFilter *filter; - -- (nonnull instancetype)init NS_UNAVAILABLE; -+ (nonnull instancetype)transformerWithFilter:(nonnull CIFilter *)filter; - -@end -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageTransformer.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageTransformer.m deleted file mode 100644 index 8e7a3e2..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageTransformer.m +++ /dev/null @@ -1,331 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDImageTransformer.h" -#import "UIColor+SDHexString.h" -#if SD_UIKIT || SD_MAC -#import -#endif - -// Separator for different transformerKey, for example, `image.png` |> flip(YES,NO) |> rotate(pi/4,YES) => 'image-SDImageFlippingTransformer(1,0)-SDImageRotationTransformer(0.78539816339,1).png' -static NSString * const SDImageTransformerKeySeparator = @"-"; - -NSString * _Nullable SDTransformedKeyForKey(NSString * _Nullable key, NSString * _Nonnull transformerKey) { - if (!key || !transformerKey) { - return nil; - } - // Find the file extension - NSURL *keyURL = [NSURL URLWithString:key]; - NSString *ext = keyURL ? keyURL.pathExtension : key.pathExtension; - if (ext.length > 0) { - // For non-file URL - if (keyURL && !keyURL.isFileURL) { - // keep anything except path (like URL query) - NSURLComponents *component = [NSURLComponents componentsWithURL:keyURL resolvingAgainstBaseURL:NO]; - component.path = [[[component.path.stringByDeletingPathExtension stringByAppendingString:SDImageTransformerKeySeparator] stringByAppendingString:transformerKey] stringByAppendingPathExtension:ext]; - return component.URL.absoluteString; - } else { - // file URL - return [[[key.stringByDeletingPathExtension stringByAppendingString:SDImageTransformerKeySeparator] stringByAppendingString:transformerKey] stringByAppendingPathExtension:ext]; - } - } else { - return [[key stringByAppendingString:SDImageTransformerKeySeparator] stringByAppendingString:transformerKey]; - } -} - -NSString * _Nullable SDThumbnailedKeyForKey(NSString * _Nullable key, CGSize thumbnailPixelSize, BOOL preserveAspectRatio) { - NSString *thumbnailKey = [NSString stringWithFormat:@"Thumbnail({%f,%f},%d)", thumbnailPixelSize.width, thumbnailPixelSize.height, preserveAspectRatio]; - return SDTransformedKeyForKey(key, thumbnailKey); -} - -@interface SDImagePipelineTransformer () - -@property (nonatomic, copy, readwrite, nonnull) NSArray> *transformers; -@property (nonatomic, copy, readwrite) NSString *transformerKey; - -@end - -@implementation SDImagePipelineTransformer - -+ (instancetype)transformerWithTransformers:(NSArray> *)transformers { - SDImagePipelineTransformer *transformer = [SDImagePipelineTransformer new]; - transformer.transformers = transformers; - transformer.transformerKey = [[self class] cacheKeyForTransformers:transformers]; - - return transformer; -} - -+ (NSString *)cacheKeyForTransformers:(NSArray> *)transformers { - if (transformers.count == 0) { - return @""; - } - NSMutableArray *cacheKeys = [NSMutableArray arrayWithCapacity:transformers.count]; - [transformers enumerateObjectsUsingBlock:^(id _Nonnull transformer, NSUInteger idx, BOOL * _Nonnull stop) { - NSString *cacheKey = transformer.transformerKey; - [cacheKeys addObject:cacheKey]; - }]; - - return [cacheKeys componentsJoinedByString:SDImageTransformerKeySeparator]; -} - -- (UIImage *)transformedImageWithImage:(UIImage *)image forKey:(NSString *)key { - if (!image) { - return nil; - } - UIImage *transformedImage = image; - for (id transformer in self.transformers) { - transformedImage = [transformer transformedImageWithImage:transformedImage forKey:key]; - } - return transformedImage; -} - -@end - -@interface SDImageRoundCornerTransformer () - -@property (nonatomic, assign) CGFloat cornerRadius; -@property (nonatomic, assign) SDRectCorner corners; -@property (nonatomic, assign) CGFloat borderWidth; -@property (nonatomic, strong, nullable) UIColor *borderColor; - -@end - -@implementation SDImageRoundCornerTransformer - -+ (instancetype)transformerWithRadius:(CGFloat)cornerRadius corners:(SDRectCorner)corners borderWidth:(CGFloat)borderWidth borderColor:(UIColor *)borderColor { - SDImageRoundCornerTransformer *transformer = [SDImageRoundCornerTransformer new]; - transformer.cornerRadius = cornerRadius; - transformer.corners = corners; - transformer.borderWidth = borderWidth; - transformer.borderColor = borderColor; - - return transformer; -} - -- (NSString *)transformerKey { - return [NSString stringWithFormat:@"SDImageRoundCornerTransformer(%f,%lu,%f,%@)", self.cornerRadius, (unsigned long)self.corners, self.borderWidth, self.borderColor.sd_hexString]; -} - -- (UIImage *)transformedImageWithImage:(UIImage *)image forKey:(NSString *)key { - if (!image) { - return nil; - } - return [image sd_roundedCornerImageWithRadius:self.cornerRadius corners:self.corners borderWidth:self.borderWidth borderColor:self.borderColor]; -} - -@end - -@interface SDImageResizingTransformer () - -@property (nonatomic, assign) CGSize size; -@property (nonatomic, assign) SDImageScaleMode scaleMode; - -@end - -@implementation SDImageResizingTransformer - -+ (instancetype)transformerWithSize:(CGSize)size scaleMode:(SDImageScaleMode)scaleMode { - SDImageResizingTransformer *transformer = [SDImageResizingTransformer new]; - transformer.size = size; - transformer.scaleMode = scaleMode; - - return transformer; -} - -- (NSString *)transformerKey { - CGSize size = self.size; - return [NSString stringWithFormat:@"SDImageResizingTransformer({%f,%f},%lu)", size.width, size.height, (unsigned long)self.scaleMode]; -} - -- (UIImage *)transformedImageWithImage:(UIImage *)image forKey:(NSString *)key { - if (!image) { - return nil; - } - return [image sd_resizedImageWithSize:self.size scaleMode:self.scaleMode]; -} - -@end - -@interface SDImageCroppingTransformer () - -@property (nonatomic, assign) CGRect rect; - -@end - -@implementation SDImageCroppingTransformer - -+ (instancetype)transformerWithRect:(CGRect)rect { - SDImageCroppingTransformer *transformer = [SDImageCroppingTransformer new]; - transformer.rect = rect; - - return transformer; -} - -- (NSString *)transformerKey { - CGRect rect = self.rect; - return [NSString stringWithFormat:@"SDImageCroppingTransformer({%f,%f,%f,%f})", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height]; -} - -- (UIImage *)transformedImageWithImage:(UIImage *)image forKey:(NSString *)key { - if (!image) { - return nil; - } - return [image sd_croppedImageWithRect:self.rect]; -} - -@end - -@interface SDImageFlippingTransformer () - -@property (nonatomic, assign) BOOL horizontal; -@property (nonatomic, assign) BOOL vertical; - -@end - -@implementation SDImageFlippingTransformer - -+ (instancetype)transformerWithHorizontal:(BOOL)horizontal vertical:(BOOL)vertical { - SDImageFlippingTransformer *transformer = [SDImageFlippingTransformer new]; - transformer.horizontal = horizontal; - transformer.vertical = vertical; - - return transformer; -} - -- (NSString *)transformerKey { - return [NSString stringWithFormat:@"SDImageFlippingTransformer(%d,%d)", self.horizontal, self.vertical]; -} - -- (UIImage *)transformedImageWithImage:(UIImage *)image forKey:(NSString *)key { - if (!image) { - return nil; - } - return [image sd_flippedImageWithHorizontal:self.horizontal vertical:self.vertical]; -} - -@end - -@interface SDImageRotationTransformer () - -@property (nonatomic, assign) CGFloat angle; -@property (nonatomic, assign) BOOL fitSize; - -@end - -@implementation SDImageRotationTransformer - -+ (instancetype)transformerWithAngle:(CGFloat)angle fitSize:(BOOL)fitSize { - SDImageRotationTransformer *transformer = [SDImageRotationTransformer new]; - transformer.angle = angle; - transformer.fitSize = fitSize; - - return transformer; -} - -- (NSString *)transformerKey { - return [NSString stringWithFormat:@"SDImageRotationTransformer(%f,%d)", self.angle, self.fitSize]; -} - -- (UIImage *)transformedImageWithImage:(UIImage *)image forKey:(NSString *)key { - if (!image) { - return nil; - } - return [image sd_rotatedImageWithAngle:self.angle fitSize:self.fitSize]; -} - -@end - -#pragma mark - Image Blending - -@interface SDImageTintTransformer () - -@property (nonatomic, strong, nonnull) UIColor *tintColor; - -@end - -@implementation SDImageTintTransformer - -+ (instancetype)transformerWithColor:(UIColor *)tintColor { - SDImageTintTransformer *transformer = [SDImageTintTransformer new]; - transformer.tintColor = tintColor; - - return transformer; -} - -- (NSString *)transformerKey { - return [NSString stringWithFormat:@"SDImageTintTransformer(%@)", self.tintColor.sd_hexString]; -} - -- (UIImage *)transformedImageWithImage:(UIImage *)image forKey:(NSString *)key { - if (!image) { - return nil; - } - return [image sd_tintedImageWithColor:self.tintColor]; -} - -@end - -#pragma mark - Image Effect - -@interface SDImageBlurTransformer () - -@property (nonatomic, assign) CGFloat blurRadius; - -@end - -@implementation SDImageBlurTransformer - -+ (instancetype)transformerWithRadius:(CGFloat)blurRadius { - SDImageBlurTransformer *transformer = [SDImageBlurTransformer new]; - transformer.blurRadius = blurRadius; - - return transformer; -} - -- (NSString *)transformerKey { - return [NSString stringWithFormat:@"SDImageBlurTransformer(%f)", self.blurRadius]; -} - -- (UIImage *)transformedImageWithImage:(UIImage *)image forKey:(NSString *)key { - if (!image) { - return nil; - } - return [image sd_blurredImageWithRadius:self.blurRadius]; -} - -@end - -#if SD_UIKIT || SD_MAC -@interface SDImageFilterTransformer () - -@property (nonatomic, strong, nonnull) CIFilter *filter; - -@end - -@implementation SDImageFilterTransformer - -+ (instancetype)transformerWithFilter:(CIFilter *)filter { - SDImageFilterTransformer *transformer = [SDImageFilterTransformer new]; - transformer.filter = filter; - - return transformer; -} - -- (NSString *)transformerKey { - return [NSString stringWithFormat:@"SDImageFilterTransformer(%@)", self.filter.name]; -} - -- (UIImage *)transformedImageWithImage:(UIImage *)image forKey:(NSString *)key { - if (!image) { - return nil; - } - return [image sd_filteredImageWithFilter:self.filter]; -} - -@end -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDMemoryCache.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDMemoryCache.h deleted file mode 100644 index 43c39e8..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDMemoryCache.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" - -@class SDImageCacheConfig; -/** - A protocol to allow custom memory cache used in SDImageCache. - */ -@protocol SDMemoryCache - -@required - -/** - Create a new memory cache instance with the specify cache config. You can check `maxMemoryCost` and `maxMemoryCount` used for memory cache. - - @param config The cache config to be used to create the cache. - @return The new memory cache instance. - */ -- (nonnull instancetype)initWithConfig:(nonnull SDImageCacheConfig *)config; - -/** - Returns the value associated with a given key. - - @param key An object identifying the value. If nil, just return nil. - @return The value associated with key, or nil if no value is associated with key. - */ -- (nullable id)objectForKey:(nonnull id)key; - -/** - Sets the value of the specified key in the cache (0 cost). - - @param object The object to be stored in the cache. If nil, it calls `removeObjectForKey:`. - @param key The key with which to associate the value. If nil, this method has no effect. - @discussion Unlike an NSMutableDictionary object, a cache does not copy the key - objects that are put into it. - */ -- (void)setObject:(nullable id)object forKey:(nonnull id)key; - -/** - Sets the value of the specified key in the cache, and associates the key-value - pair with the specified cost. - - @param object The object to store in the cache. If nil, it calls `removeObjectForKey`. - @param key The key with which to associate the value. If nil, this method has no effect. - @param cost The cost with which to associate the key-value pair. - @discussion Unlike an NSMutableDictionary object, a cache does not copy the key - objects that are put into it. - */ -- (void)setObject:(nullable id)object forKey:(nonnull id)key cost:(NSUInteger)cost; - -/** - Removes the value of the specified key in the cache. - - @param key The key identifying the value to be removed. If nil, this method has no effect. - */ -- (void)removeObjectForKey:(nonnull id)key; - -/** - Empties the cache immediately. - */ -- (void)removeAllObjects; - -@end - -/** - A memory cache which auto purge the cache on memory warning and support weak cache. - */ -@interface SDMemoryCache : NSCache - -@property (nonatomic, strong, nonnull, readonly) SDImageCacheConfig *config; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDMemoryCache.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDMemoryCache.m deleted file mode 100644 index 7bcc385..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDMemoryCache.m +++ /dev/null @@ -1,158 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDMemoryCache.h" -#import "SDImageCacheConfig.h" -#import "UIImage+MemoryCacheCost.h" -#import "SDInternalMacros.h" - -static void * SDMemoryCacheContext = &SDMemoryCacheContext; - -@interface SDMemoryCache () { -#if SD_UIKIT - SD_LOCK_DECLARE(_weakCacheLock); // a lock to keep the access to `weakCache` thread-safe -#endif -} - -@property (nonatomic, strong, nullable) SDImageCacheConfig *config; -#if SD_UIKIT -@property (nonatomic, strong, nonnull) NSMapTable *weakCache; // strong-weak cache -#endif -@end - -@implementation SDMemoryCache - -- (void)dealloc { - [_config removeObserver:self forKeyPath:NSStringFromSelector(@selector(maxMemoryCost)) context:SDMemoryCacheContext]; - [_config removeObserver:self forKeyPath:NSStringFromSelector(@selector(maxMemoryCount)) context:SDMemoryCacheContext]; -#if SD_UIKIT - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; -#endif - self.delegate = nil; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _config = [[SDImageCacheConfig alloc] init]; - [self commonInit]; - } - return self; -} - -- (instancetype)initWithConfig:(SDImageCacheConfig *)config { - self = [super init]; - if (self) { - _config = config; - [self commonInit]; - } - return self; -} - -- (void)commonInit { - SDImageCacheConfig *config = self.config; - self.totalCostLimit = config.maxMemoryCost; - self.countLimit = config.maxMemoryCount; - - [config addObserver:self forKeyPath:NSStringFromSelector(@selector(maxMemoryCost)) options:0 context:SDMemoryCacheContext]; - [config addObserver:self forKeyPath:NSStringFromSelector(@selector(maxMemoryCount)) options:0 context:SDMemoryCacheContext]; - -#if SD_UIKIT - self.weakCache = [[NSMapTable alloc] initWithKeyOptions:NSPointerFunctionsStrongMemory valueOptions:NSPointerFunctionsWeakMemory capacity:0]; - SD_LOCK_INIT(_weakCacheLock); - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(didReceiveMemoryWarning:) - name:UIApplicationDidReceiveMemoryWarningNotification - object:nil]; -#endif -} - -// Current this seems no use on macOS (macOS use virtual memory and do not clear cache when memory warning). So we only override on iOS/tvOS platform. -#if SD_UIKIT -- (void)didReceiveMemoryWarning:(NSNotification *)notification { - // Only remove cache, but keep weak cache - [super removeAllObjects]; -} - -// `setObject:forKey:` just call this with 0 cost. Override this is enough -- (void)setObject:(id)obj forKey:(id)key cost:(NSUInteger)g { - [super setObject:obj forKey:key cost:g]; - if (!self.config.shouldUseWeakMemoryCache) { - return; - } - if (key && obj) { - // Store weak cache - SD_LOCK(_weakCacheLock); - [self.weakCache setObject:obj forKey:key]; - SD_UNLOCK(_weakCacheLock); - } -} - -- (id)objectForKey:(id)key { - id obj = [super objectForKey:key]; - if (!self.config.shouldUseWeakMemoryCache) { - return obj; - } - if (key && !obj) { - // Check weak cache - SD_LOCK(_weakCacheLock); - obj = [self.weakCache objectForKey:key]; - SD_UNLOCK(_weakCacheLock); - if (obj) { - // Sync cache - NSUInteger cost = 0; - if ([obj isKindOfClass:[UIImage class]]) { - cost = [(UIImage *)obj sd_memoryCost]; - } - [super setObject:obj forKey:key cost:cost]; - } - } - return obj; -} - -- (void)removeObjectForKey:(id)key { - [super removeObjectForKey:key]; - if (!self.config.shouldUseWeakMemoryCache) { - return; - } - if (key) { - // Remove weak cache - SD_LOCK(_weakCacheLock); - [self.weakCache removeObjectForKey:key]; - SD_UNLOCK(_weakCacheLock); - } -} - -- (void)removeAllObjects { - [super removeAllObjects]; - if (!self.config.shouldUseWeakMemoryCache) { - return; - } - // Manually remove should also remove weak cache - SD_LOCK(_weakCacheLock); - [self.weakCache removeAllObjects]; - SD_UNLOCK(_weakCacheLock); -} -#endif - -#pragma mark - KVO - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { - if (context == SDMemoryCacheContext) { - if ([keyPath isEqualToString:NSStringFromSelector(@selector(maxMemoryCost))]) { - self.totalCostLimit = self.config.maxMemoryCost; - } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(maxMemoryCount))]) { - self.countLimit = self.config.maxMemoryCount; - } - } else { - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; - } -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCacheKeyFilter.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCacheKeyFilter.h deleted file mode 100644 index 4f54dd8..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCacheKeyFilter.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageCompat.h" - -typedef NSString * _Nullable(^SDWebImageCacheKeyFilterBlock)(NSURL * _Nonnull url); - -/** - This is the protocol for cache key filter. - We can use a block to specify the cache key filter. But Using protocol can make this extensible, and allow Swift user to use it easily instead of using `@convention(block)` to store a block into context options. - */ -@protocol SDWebImageCacheKeyFilter - -- (nullable NSString *)cacheKeyForURL:(nonnull NSURL *)url; - -@end - -/** - A cache key filter class with block. - */ -@interface SDWebImageCacheKeyFilter : NSObject - -- (nonnull instancetype)initWithBlock:(nonnull SDWebImageCacheKeyFilterBlock)block; -+ (nonnull instancetype)cacheKeyFilterWithBlock:(nonnull SDWebImageCacheKeyFilterBlock)block; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCacheKeyFilter.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCacheKeyFilter.m deleted file mode 100644 index b4ebb8b..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCacheKeyFilter.m +++ /dev/null @@ -1,39 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCacheKeyFilter.h" - -@interface SDWebImageCacheKeyFilter () - -@property (nonatomic, copy, nonnull) SDWebImageCacheKeyFilterBlock block; - -@end - -@implementation SDWebImageCacheKeyFilter - -- (instancetype)initWithBlock:(SDWebImageCacheKeyFilterBlock)block { - self = [super init]; - if (self) { - self.block = block; - } - return self; -} - -+ (instancetype)cacheKeyFilterWithBlock:(SDWebImageCacheKeyFilterBlock)block { - SDWebImageCacheKeyFilter *cacheKeyFilter = [[SDWebImageCacheKeyFilter alloc] initWithBlock:block]; - return cacheKeyFilter; -} - -- (NSString *)cacheKeyForURL:(NSURL *)url { - if (!self.block) { - return nil; - } - return self.block(url); -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCacheSerializer.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCacheSerializer.h deleted file mode 100644 index 3c271b1..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCacheSerializer.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageCompat.h" - -typedef NSData * _Nullable(^SDWebImageCacheSerializerBlock)(UIImage * _Nonnull image, NSData * _Nullable data, NSURL * _Nullable imageURL); - -/** - This is the protocol for cache serializer. - We can use a block to specify the cache serializer. But Using protocol can make this extensible, and allow Swift user to use it easily instead of using `@convention(block)` to store a block into context options. - */ -@protocol SDWebImageCacheSerializer - -/// Provide the image data associated to the image and store to disk cache -/// @param image The loaded image -/// @param data The original loaded image data -/// @param imageURL The image URL -- (nullable NSData *)cacheDataWithImage:(nonnull UIImage *)image originalData:(nullable NSData *)data imageURL:(nullable NSURL *)imageURL; - -@end - -/** - A cache serializer class with block. - */ -@interface SDWebImageCacheSerializer : NSObject - -- (nonnull instancetype)initWithBlock:(nonnull SDWebImageCacheSerializerBlock)block; -+ (nonnull instancetype)cacheSerializerWithBlock:(nonnull SDWebImageCacheSerializerBlock)block; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCacheSerializer.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCacheSerializer.m deleted file mode 100644 index 51528e6..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCacheSerializer.m +++ /dev/null @@ -1,39 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCacheSerializer.h" - -@interface SDWebImageCacheSerializer () - -@property (nonatomic, copy, nonnull) SDWebImageCacheSerializerBlock block; - -@end - -@implementation SDWebImageCacheSerializer - -- (instancetype)initWithBlock:(SDWebImageCacheSerializerBlock)block { - self = [super init]; - if (self) { - self.block = block; - } - return self; -} - -+ (instancetype)cacheSerializerWithBlock:(SDWebImageCacheSerializerBlock)block { - SDWebImageCacheSerializer *cacheSerializer = [[SDWebImageCacheSerializer alloc] initWithBlock:block]; - return cacheSerializer; -} - -- (NSData *)cacheDataWithImage:(UIImage *)image originalData:(NSData *)data imageURL:(nullable NSURL *)imageURL { - if (!self.block) { - return nil; - } - return self.block(image, data, imageURL); -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCompat.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCompat.h deleted file mode 100644 index f47a248..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCompat.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * (c) Jamie Pinkham - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import - -#ifdef __OBJC_GC__ - #error SDWebImage does not support Objective-C Garbage Collection -#endif - -// Seems like TARGET_OS_MAC is always defined (on all platforms). -// To determine if we are running on macOS, use TARGET_OS_OSX in Xcode 8 -#if TARGET_OS_OSX - #define SD_MAC 1 -#else - #define SD_MAC 0 -#endif - -// iOS and tvOS are very similar, UIKit exists on both platforms -// Note: watchOS also has UIKit, but it's very limited -#if TARGET_OS_IOS || TARGET_OS_TV - #define SD_UIKIT 1 -#else - #define SD_UIKIT 0 -#endif - -#if TARGET_OS_IOS - #define SD_IOS 1 -#else - #define SD_IOS 0 -#endif - -#if TARGET_OS_TV - #define SD_TV 1 -#else - #define SD_TV 0 -#endif - -#if TARGET_OS_WATCH - #define SD_WATCH 1 -#else - #define SD_WATCH 0 -#endif - - -#if SD_MAC - #import - #ifndef UIImage - #define UIImage NSImage - #endif - #ifndef UIImageView - #define UIImageView NSImageView - #endif - #ifndef UIView - #define UIView NSView - #endif - #ifndef UIColor - #define UIColor NSColor - #endif -#else - #if SD_UIKIT - #import - #endif - #if SD_WATCH - #import - #ifndef UIView - #define UIView WKInterfaceObject - #endif - #ifndef UIImageView - #define UIImageView WKInterfaceImage - #endif - #endif -#endif - -#ifndef NS_ENUM -#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type -#endif - -#ifndef NS_OPTIONS -#define NS_OPTIONS(_type, _name) enum _name : _type _name; enum _name : _type -#endif - -#ifndef dispatch_main_async_safe -#define dispatch_main_async_safe(block)\ - if (dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL) == dispatch_queue_get_label(dispatch_get_main_queue())) {\ - block();\ - } else {\ - dispatch_async(dispatch_get_main_queue(), block);\ - } -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCompat.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCompat.m deleted file mode 100644 index 1297401..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCompat.m +++ /dev/null @@ -1,17 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" - -#if !__has_feature(objc_arc) - #error SDWebImage is ARC only. Either turn on ARC for the project or use -fobjc-arc flag -#endif - -#if !OS_OBJECT_USE_OBJC - #error SDWebImage need ARC for dispatch object -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDefine.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDefine.h deleted file mode 100644 index 3fb0976..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDefine.h +++ /dev/null @@ -1,326 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" - -typedef void(^SDWebImageNoParamsBlock)(void); -typedef NSString * SDWebImageContextOption NS_EXTENSIBLE_STRING_ENUM; -typedef NSDictionary SDWebImageContext; -typedef NSMutableDictionary SDWebImageMutableContext; - -#pragma mark - Image scale - -/** - Return the image scale factor for the specify key, supports file name and url key. - This is the built-in way to check the scale factor when we have no context about it. Because scale factor is not stored in image data (It's typically from filename). - However, you can also provide custom scale factor as well, see `SDWebImageContextImageScaleFactor`. - - @param key The image cache key - @return The scale factor for image - */ -FOUNDATION_EXPORT CGFloat SDImageScaleFactorForKey(NSString * _Nullable key); - -/** - Scale the image with the scale factor for the specify key. If no need to scale, return the original image. - This works for `UIImage`(UIKit) or `NSImage`(AppKit). And this function also preserve the associated value in `UIImage+Metadata.h`. - @note This is actually a convenience function, which firstly call `SDImageScaleFactorForKey` and then call `SDScaledImageForScaleFactor`, kept for backward compatibility. - - @param key The image cache key - @param image The image - @return The scaled image - */ -FOUNDATION_EXPORT UIImage * _Nullable SDScaledImageForKey(NSString * _Nullable key, UIImage * _Nullable image); - -/** - Scale the image with the scale factor. If no need to scale, return the original image. - This works for `UIImage`(UIKit) or `NSImage`(AppKit). And this function also preserve the associated value in `UIImage+Metadata.h`. - - @param scale The image scale factor - @param image The image - @return The scaled image - */ -FOUNDATION_EXPORT UIImage * _Nullable SDScaledImageForScaleFactor(CGFloat scale, UIImage * _Nullable image); - -#pragma mark - WebCache Options - -/// WebCache options -typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { - /** - * By default, when a URL fail to be downloaded, the URL is blacklisted so the library won't keep trying. - * This flag disable this blacklisting. - */ - SDWebImageRetryFailed = 1 << 0, - - /** - * By default, image downloads are started during UI interactions, this flags disable this feature, - * leading to delayed download on UIScrollView deceleration for instance. - */ - SDWebImageLowPriority = 1 << 1, - - /** - * This flag enables progressive download, the image is displayed progressively during download as a browser would do. - * By default, the image is only displayed once completely downloaded. - */ - SDWebImageProgressiveLoad = 1 << 2, - - /** - * Even if the image is cached, respect the HTTP response cache control, and refresh the image from remote location if needed. - * The disk caching will be handled by NSURLCache instead of SDWebImage leading to slight performance degradation. - * This option helps deal with images changing behind the same request URL, e.g. Facebook graph api profile pics. - * If a cached image is refreshed, the completion block is called once with the cached image and again with the final image. - * - * Use this flag only if you can't make your URLs static with embedded cache busting parameter. - */ - SDWebImageRefreshCached = 1 << 3, - - /** - * In iOS 4+, continue the download of the image if the app goes to background. This is achieved by asking the system for - * extra time in background to let the request finish. If the background task expires the operation will be cancelled. - */ - SDWebImageContinueInBackground = 1 << 4, - - /** - * Handles cookies stored in NSHTTPCookieStore by setting - * NSMutableURLRequest.HTTPShouldHandleCookies = YES; - */ - SDWebImageHandleCookies = 1 << 5, - - /** - * Enable to allow untrusted SSL certificates. - * Useful for testing purposes. Use with caution in production. - */ - SDWebImageAllowInvalidSSLCertificates = 1 << 6, - - /** - * By default, images are loaded in the order in which they were queued. This flag moves them to - * the front of the queue. - */ - SDWebImageHighPriority = 1 << 7, - - /** - * By default, placeholder images are loaded while the image is loading. This flag will delay the loading - * of the placeholder image until after the image has finished loading. - * @note This is used to treate placeholder as an **Error Placeholder** but not **Loading Placeholder** by defaults. if the image loading is cancelled or error, the placeholder will be always set. - * @note Therefore, if you want both **Error Placeholder** and **Loading Placeholder** exist, use `SDWebImageAvoidAutoSetImage` to manually set the two placeholders and final loaded image by your hand depends on loading result. - */ - SDWebImageDelayPlaceholder = 1 << 8, - - /** - * We usually don't apply transform on animated images as most transformers could not manage animated images. - * Use this flag to transform them anyway. - */ - SDWebImageTransformAnimatedImage = 1 << 9, - - /** - * By default, image is added to the imageView after download. But in some cases, we want to - * have the hand before setting the image (apply a filter or add it with cross-fade animation for instance) - * Use this flag if you want to manually set the image in the completion when success - */ - SDWebImageAvoidAutoSetImage = 1 << 10, - - /** - * By default, images are decoded respecting their original size. - * This flag will scale down the images to a size compatible with the constrained memory of devices. - * To control the limit memory bytes, check `SDImageCoderHelper.defaultScaleDownLimitBytes` (Defaults to 60MB on iOS) - * This will actually translate to use context option `.imageThumbnailPixelSize` from v5.5.0 (Defaults to (3966, 3966) on iOS). Previously does not. - * This flags effect the progressive and animated images as well from v5.5.0. Previously does not. - * @note If you need detail controls, it's better to use context option `imageThumbnailPixelSize` and `imagePreserveAspectRatio` instead. - */ - SDWebImageScaleDownLargeImages = 1 << 11, - - /** - * By default, we do not query image data when the image is already cached in memory. This mask can force to query image data at the same time. However, this query is asynchronously unless you specify `SDWebImageQueryMemoryDataSync` - */ - SDWebImageQueryMemoryData = 1 << 12, - - /** - * By default, when you only specify `SDWebImageQueryMemoryData`, we query the memory image data asynchronously. Combined this mask as well to query the memory image data synchronously. - * @note Query data synchronously is not recommend, unless you want to ensure the image is loaded in the same runloop to avoid flashing during cell reusing. - */ - SDWebImageQueryMemoryDataSync = 1 << 13, - - /** - * By default, when the memory cache miss, we query the disk cache asynchronously. This mask can force to query disk cache (when memory cache miss) synchronously. - * @note These 3 query options can be combined together. For the full list about these masks combination, see wiki page. - * @note Query data synchronously is not recommend, unless you want to ensure the image is loaded in the same runloop to avoid flashing during cell reusing. - */ - SDWebImageQueryDiskDataSync = 1 << 14, - - /** - * By default, when the cache missed, the image is load from the loader. This flag can prevent this to load from cache only. - */ - SDWebImageFromCacheOnly = 1 << 15, - - /** - * By default, we query the cache before the image is load from the loader. This flag can prevent this to load from loader only. - */ - SDWebImageFromLoaderOnly = 1 << 16, - - /** - * By default, when you use `SDWebImageTransition` to do some view transition after the image load finished, this transition is only applied for image when the callback from manager is asynchronous (from network, or disk cache query) - * This mask can force to apply view transition for any cases, like memory cache query, or sync disk cache query. - */ - SDWebImageForceTransition = 1 << 17, - - /** - * By default, we will decode the image in the background during cache query and download from the network. This can help to improve performance because when rendering image on the screen, it need to be firstly decoded. But this happen on the main queue by Core Animation. - * However, this process may increase the memory usage as well. If you are experiencing a issue due to excessive memory consumption, This flag can prevent decode the image. - */ - SDWebImageAvoidDecodeImage = 1 << 18, - - /** - * By default, we decode the animated image. This flag can force decode the first frame only and produce the static image. - */ - SDWebImageDecodeFirstFrameOnly = 1 << 19, - - /** - * By default, for `SDAnimatedImage`, we decode the animated image frame during rendering to reduce memory usage. However, you can specify to preload all frames into memory to reduce CPU usage when the animated image is shared by lots of imageViews. - * This will actually trigger `preloadAllAnimatedImageFrames` in the background queue(Disk Cache & Download only). - */ - SDWebImagePreloadAllFrames = 1 << 20, - - /** - * By default, when you use `SDWebImageContextAnimatedImageClass` context option (like using `SDAnimatedImageView` which designed to use `SDAnimatedImage`), we may still use `UIImage` when the memory cache hit, or image decoder is not available to produce one exactlly matching your custom class as a fallback solution. - * Using this option, can ensure we always callback image with your provided class. If failed to produce one, a error with code `SDWebImageErrorBadImageData` will been used. - * Note this options is not compatible with `SDWebImageDecodeFirstFrameOnly`, which always produce a UIImage/NSImage. - */ - SDWebImageMatchAnimatedImageClass = 1 << 21, - - /** - * By default, when we load the image from network, the image will be written to the cache (memory and disk, controlled by your `storeCacheType` context option) - * This maybe an asynchronously operation and the final `SDInternalCompletionBlock` callback does not guarantee the disk cache written is finished and may cause logic error. (For example, you modify the disk data just in completion block, however, the disk cache is not ready) - * If you need to process with the disk cache in the completion block, you should use this option to ensure the disk cache already been written when callback. - * Note if you use this when using the custom cache serializer, or using the transformer, we will also wait until the output image data written is finished. - */ - SDWebImageWaitStoreCache = 1 << 22, - - /** - * We usually don't apply transform on vector images, because vector images supports dynamically changing to any size, rasterize to a fixed size will loss details. To modify vector images, you can process the vector data at runtime (such as modifying PDF tag / SVG element). - * Use this flag to transform them anyway. - */ - SDWebImageTransformVectorImage = 1 << 23 -}; - - -#pragma mark - Context Options - -/** - A String to be used as the operation key for view category to store the image load operation. This is used for view instance which supports different image loading process. If nil, will use the class name as operation key. (NSString *) - */ -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextSetImageOperationKey; - -/** - A SDWebImageManager instance to control the image download and cache process using in UIImageView+WebCache category and likes. If not provided, use the shared manager (SDWebImageManager *) - @deprecated Deprecated in the future. This context options can be replaced by other context option control like `.imageCache`, `.imageLoader`, `.imageTransformer` (See below), which already matches all the properties in SDWebImageManager. - */ -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextCustomManager API_DEPRECATED("Use individual context option like .imageCache, .imageLoader and .imageTransformer instead", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); - -/** - A id instance which conforms to `SDImageCache` protocol. It's used to override the image manager's cache during the image loading pipeline. - In other word, if you just want to specify a custom cache during image loading, you don't need to re-create a dummy SDWebImageManager instance with the cache. If not provided, use the image manager's cache (id) - */ -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageCache; - -/** - A id instance which conforms to `SDImageLoader` protocol. It's used to override the image manager's loader during the image loading pipeline. - In other word, if you just want to specify a custom loader during image loading, you don't need to re-create a dummy SDWebImageManager instance with the loader. If not provided, use the image manager's cache (id) -*/ -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageLoader; - -/** - A id instance which conforms to `SDImageCoder` protocol. It's used to override the default image coder for image decoding(including progressive) and encoding during the image loading process. - If you use this context option, we will not always use `SDImageCodersManager.shared` to loop through all registered coders and find the suitable one. Instead, we will arbitrarily use the exact provided coder without extra checking (We may not call `canDecodeFromData:`). - @note This is only useful for cases which you can ensure the loading url matches your coder, or you find it's too hard to write a common coder which can used for generic usage. This will bind the loading url with the coder logic, which is not always a good design, but possible. (id) -*/ -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageCoder; - -/** - A id instance which conforms `SDImageTransformer` protocol. It's used for image transform after the image load finished and store the transformed image to cache. If you provide one, it will ignore the `transformer` in manager and use provided one instead. If you pass NSNull, the transformer feature will be disabled. (id) - */ -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageTransformer; - -/** - A CGFloat raw value which specify the image scale factor. The number should be greater than or equal to 1.0. If not provide or the number is invalid, we will use the cache key to specify the scale factor. (NSNumber) - */ -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageScaleFactor; - -/** - A Boolean value indicating whether to keep the original aspect ratio when generating thumbnail images (or bitmap images from vector format). - Defaults to YES. (NSNumber) - */ -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImagePreserveAspectRatio; - -/** - A CGSize raw value indicating whether or not to generate the thumbnail images (or bitmap images from vector format). When this value is provided, the decoder will generate a thumbnail image which pixel size is smaller than or equal to (depends the `.imagePreserveAspectRatio`) the value size. - @note When you pass `.preserveAspectRatio == NO`, the thumbnail image is stretched to match each dimension. When `.preserveAspectRatio == YES`, the thumbnail image's width is limited to pixel size's width, the thumbnail image's height is limited to pixel size's height. For common cases, you can just pass a square size to limit both. - Defaults to CGSizeZero, which means no thumbnail generation at all. (NSValue) - */ -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageThumbnailPixelSize; - -/** - A SDImageCacheType raw value which specify the source of cache to query. Specify `SDImageCacheTypeDisk` to query from disk cache only; `SDImageCacheTypeMemory` to query from memory only. And `SDImageCacheTypeAll` to query from both memory cache and disk cache. Specify `SDImageCacheTypeNone` is invalid and totally ignore the cache query. - If not provide or the value is invalid, we will use `SDImageCacheTypeAll`. (NSNumber) - */ -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextQueryCacheType; - -/** - A SDImageCacheType raw value which specify the store cache type when the image has just been downloaded and will be stored to the cache. Specify `SDImageCacheTypeNone` to disable cache storage; `SDImageCacheTypeDisk` to store in disk cache only; `SDImageCacheTypeMemory` to store in memory only. And `SDImageCacheTypeAll` to store in both memory cache and disk cache. - If you use image transformer feature, this actually apply for the transformed image, but not the original image itself. Use `SDWebImageContextOriginalStoreCacheType` if you want to control the original image's store cache type at the same time. - If not provide or the value is invalid, we will use `SDImageCacheTypeAll`. (NSNumber) - */ -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextStoreCacheType; - -/** - The same behavior like `SDWebImageContextQueryCacheType`, but control the query cache type for the original image when you use image transformer feature. This allows the detail control of cache query for these two images. For example, if you want to query the transformed image from both memory/disk cache, query the original image from disk cache only, use `[.queryCacheType : .all, .originalQueryCacheType : .disk]` - If not provide or the value is invalid, we will use `SDImageCacheTypeDisk`, which query the original full image data from disk cache after transformed image cache miss. This is suitable for most common cases to avoid re-downloading the full data for different transform variants. (NSNumber) - @note Which means, if you set this value to not be `.none`, we will query the original image from cache, then do transform with transformer, instead of actual downloading, which can save bandwidth usage. - */ -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextOriginalQueryCacheType; - -/** - The same behavior like `SDWebImageContextStoreCacheType`, but control the store cache type for the original image when you use image transformer feature. This allows the detail control of cache storage for these two images. For example, if you want to store the transformed image into both memory/disk cache, store the original image into disk cache only, use `[.storeCacheType : .all, .originalStoreCacheType : .disk]` - If not provide or the value is invalid, we will use `SDImageCacheTypeDisk`, which store the original full image data into disk cache after storing the transformed image. This is suitable for most common cases to avoid re-downloading the full data for different transform variants. (NSNumber) - @note This only store the original image, if you want to use the original image without downloading in next query, specify `SDWebImageContextOriginalQueryCacheType` as well. - */ -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextOriginalStoreCacheType; - -/** - A id instance which conforms to `SDImageCache` protocol. It's used to control the cache for original image when using the transformer. If you provide one, the original image (full size image) will query and write from that cache instance instead, the transformed image will query and write from the default `SDWebImageContextImageCache` instead. (id) - */ -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextOriginalImageCache; - -/** - A Class object which the instance is a `UIImage/NSImage` subclass and adopt `SDAnimatedImage` protocol. We will call `initWithData:scale:options:` to create the instance (or `initWithAnimatedCoder:scale:` when using progressive download) . If the instance create failed, fallback to normal `UIImage/NSImage`. - This can be used to improve animated images rendering performance (especially memory usage on big animated images) with `SDAnimatedImageView` (Class). - */ -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextAnimatedImageClass; - -/** - A id instance to modify the image download request. It's used for downloader to modify the original request from URL and options. If you provide one, it will ignore the `requestModifier` in downloader and use provided one instead. (id) - */ -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextDownloadRequestModifier; - -/** - A id instance to modify the image download response. It's used for downloader to modify the original response from URL and options. If you provide one, it will ignore the `responseModifier` in downloader and use provided one instead. (id) - */ -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextDownloadResponseModifier; - -/** - A id instance to decrypt the image download data. This can be used for image data decryption, such as Base64 encoded image. If you provide one, it will ignore the `decryptor` in downloader and use provided one instead. (id) - */ -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextDownloadDecryptor; - -/** - A id instance to convert an URL into a cache key. It's used when manager need cache key to use image cache. If you provide one, it will ignore the `cacheKeyFilter` in manager and use provided one instead. (id) - */ -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextCacheKeyFilter; - -/** - A id instance to convert the decoded image, the source downloaded data, to the actual data. It's used for manager to store image to the disk cache. If you provide one, it will ignore the `cacheSerializer` in manager and use provided one instead. (id) - */ -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextCacheSerializer; diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDefine.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDefine.m deleted file mode 100644 index aee8ca4..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDefine.m +++ /dev/null @@ -1,146 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageDefine.h" -#import "UIImage+Metadata.h" -#import "NSImage+Compatibility.h" -#import "SDAssociatedObject.h" - -#pragma mark - Image scale - -static inline NSArray * _Nonnull SDImageScaleFactors() { - return @[@2, @3]; -} - -inline CGFloat SDImageScaleFactorForKey(NSString * _Nullable key) { - CGFloat scale = 1; - if (!key) { - return scale; - } - // Check if target OS support scale -#if SD_WATCH - if ([[WKInterfaceDevice currentDevice] respondsToSelector:@selector(screenScale)]) -#elif SD_UIKIT - if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) -#elif SD_MAC - NSScreen *mainScreen = nil; - if (@available(macOS 10.12, *)) { - mainScreen = [NSScreen mainScreen]; - } else { - mainScreen = [NSScreen screens].firstObject; - } - if ([mainScreen respondsToSelector:@selector(backingScaleFactor)]) -#endif - { - // a@2x.png -> 8 - if (key.length >= 8) { - // Fast check - BOOL isURL = [key hasPrefix:@"http://"] || [key hasPrefix:@"https://"]; - for (NSNumber *scaleFactor in SDImageScaleFactors()) { - // @2x. for file name and normal url - NSString *fileScale = [NSString stringWithFormat:@"@%@x.", scaleFactor]; - if ([key containsString:fileScale]) { - scale = scaleFactor.doubleValue; - return scale; - } - if (isURL) { - // %402x. for url encode - NSString *urlScale = [NSString stringWithFormat:@"%%40%@x.", scaleFactor]; - if ([key containsString:urlScale]) { - scale = scaleFactor.doubleValue; - return scale; - } - } - } - } - } - return scale; -} - -inline UIImage * _Nullable SDScaledImageForKey(NSString * _Nullable key, UIImage * _Nullable image) { - if (!image) { - return nil; - } - CGFloat scale = SDImageScaleFactorForKey(key); - return SDScaledImageForScaleFactor(scale, image); -} - -inline UIImage * _Nullable SDScaledImageForScaleFactor(CGFloat scale, UIImage * _Nullable image) { - if (!image) { - return nil; - } - if (scale <= 1) { - return image; - } - if (scale == image.scale) { - return image; - } - UIImage *scaledImage; - if (image.sd_isAnimated) { - UIImage *animatedImage; -#if SD_UIKIT || SD_WATCH - // `UIAnimatedImage` images share the same size and scale. - NSMutableArray *scaledImages = [NSMutableArray array]; - - for (UIImage *tempImage in image.images) { - UIImage *tempScaledImage = [[UIImage alloc] initWithCGImage:tempImage.CGImage scale:scale orientation:tempImage.imageOrientation]; - [scaledImages addObject:tempScaledImage]; - } - - animatedImage = [UIImage animatedImageWithImages:scaledImages duration:image.duration]; - animatedImage.sd_imageLoopCount = image.sd_imageLoopCount; -#else - // Animated GIF for `NSImage` need to grab `NSBitmapImageRep`; - NSRect imageRect = NSMakeRect(0, 0, image.size.width, image.size.height); - NSImageRep *imageRep = [image bestRepresentationForRect:imageRect context:nil hints:nil]; - NSBitmapImageRep *bitmapImageRep; - if ([imageRep isKindOfClass:[NSBitmapImageRep class]]) { - bitmapImageRep = (NSBitmapImageRep *)imageRep; - } - if (bitmapImageRep) { - NSSize size = NSMakeSize(image.size.width / scale, image.size.height / scale); - animatedImage = [[NSImage alloc] initWithSize:size]; - bitmapImageRep.size = size; - [animatedImage addRepresentation:bitmapImageRep]; - } -#endif - scaledImage = animatedImage; - } else { -#if SD_UIKIT || SD_WATCH - scaledImage = [[UIImage alloc] initWithCGImage:image.CGImage scale:scale orientation:image.imageOrientation]; -#else - scaledImage = [[UIImage alloc] initWithCGImage:image.CGImage scale:scale orientation:kCGImagePropertyOrientationUp]; -#endif - } - SDImageCopyAssociatedObject(image, scaledImage); - - return scaledImage; -} - -#pragma mark - Context option - -SDWebImageContextOption const SDWebImageContextSetImageOperationKey = @"setImageOperationKey"; -SDWebImageContextOption const SDWebImageContextCustomManager = @"customManager"; -SDWebImageContextOption const SDWebImageContextImageCache = @"imageCache"; -SDWebImageContextOption const SDWebImageContextImageLoader = @"imageLoader"; -SDWebImageContextOption const SDWebImageContextImageCoder = @"imageCoder"; -SDWebImageContextOption const SDWebImageContextImageTransformer = @"imageTransformer"; -SDWebImageContextOption const SDWebImageContextImageScaleFactor = @"imageScaleFactor"; -SDWebImageContextOption const SDWebImageContextImagePreserveAspectRatio = @"imagePreserveAspectRatio"; -SDWebImageContextOption const SDWebImageContextImageThumbnailPixelSize = @"imageThumbnailPixelSize"; -SDWebImageContextOption const SDWebImageContextQueryCacheType = @"queryCacheType"; -SDWebImageContextOption const SDWebImageContextStoreCacheType = @"storeCacheType"; -SDWebImageContextOption const SDWebImageContextOriginalQueryCacheType = @"originalQueryCacheType"; -SDWebImageContextOption const SDWebImageContextOriginalStoreCacheType = @"originalStoreCacheType"; -SDWebImageContextOption const SDWebImageContextOriginalImageCache = @"originalImageCache"; -SDWebImageContextOption const SDWebImageContextAnimatedImageClass = @"animatedImageClass"; -SDWebImageContextOption const SDWebImageContextDownloadRequestModifier = @"downloadRequestModifier"; -SDWebImageContextOption const SDWebImageContextDownloadResponseModifier = @"downloadResponseModifier"; -SDWebImageContextOption const SDWebImageContextDownloadDecryptor = @"downloadDecryptor"; -SDWebImageContextOption const SDWebImageContextCacheKeyFilter = @"cacheKeyFilter"; -SDWebImageContextOption const SDWebImageContextCacheSerializer = @"cacheSerializer"; diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloader.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloader.h deleted file mode 100644 index a2f50f4..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloader.h +++ /dev/null @@ -1,314 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageCompat.h" -#import "SDWebImageDefine.h" -#import "SDWebImageOperation.h" -#import "SDWebImageDownloaderConfig.h" -#import "SDWebImageDownloaderRequestModifier.h" -#import "SDWebImageDownloaderResponseModifier.h" -#import "SDWebImageDownloaderDecryptor.h" -#import "SDImageLoader.h" - -/// Downloader options -typedef NS_OPTIONS(NSUInteger, SDWebImageDownloaderOptions) { - /** - * Put the download in the low queue priority and task priority. - */ - SDWebImageDownloaderLowPriority = 1 << 0, - - /** - * This flag enables progressive download, the image is displayed progressively during download as a browser would do. - */ - SDWebImageDownloaderProgressiveLoad = 1 << 1, - - /** - * By default, request prevent the use of NSURLCache. With this flag, NSURLCache - * is used with default policies. - */ - SDWebImageDownloaderUseNSURLCache = 1 << 2, - - /** - * Call completion block with nil image/imageData if the image was read from NSURLCache - * And the error code is `SDWebImageErrorCacheNotModified` - * This flag should be combined with `SDWebImageDownloaderUseNSURLCache`. - */ - SDWebImageDownloaderIgnoreCachedResponse = 1 << 3, - - /** - * In iOS 4+, continue the download of the image if the app goes to background. This is achieved by asking the system for - * extra time in background to let the request finish. If the background task expires the operation will be cancelled. - */ - SDWebImageDownloaderContinueInBackground = 1 << 4, - - /** - * Handles cookies stored in NSHTTPCookieStore by setting - * NSMutableURLRequest.HTTPShouldHandleCookies = YES; - */ - SDWebImageDownloaderHandleCookies = 1 << 5, - - /** - * Enable to allow untrusted SSL certificates. - * Useful for testing purposes. Use with caution in production. - */ - SDWebImageDownloaderAllowInvalidSSLCertificates = 1 << 6, - - /** - * Put the download in the high queue priority and task priority. - */ - SDWebImageDownloaderHighPriority = 1 << 7, - - /** - * By default, images are decoded respecting their original size. On iOS, this flag will scale down the - * images to a size compatible with the constrained memory of devices. - * This flag take no effect if `SDWebImageDownloaderAvoidDecodeImage` is set. And it will be ignored if `SDWebImageDownloaderProgressiveLoad` is set. - */ - SDWebImageDownloaderScaleDownLargeImages = 1 << 8, - - /** - * By default, we will decode the image in the background during cache query and download from the network. This can help to improve performance because when rendering image on the screen, it need to be firstly decoded. But this happen on the main queue by Core Animation. - * However, this process may increase the memory usage as well. If you are experiencing a issue due to excessive memory consumption, This flag can prevent decode the image. - */ - SDWebImageDownloaderAvoidDecodeImage = 1 << 9, - - /** - * By default, we decode the animated image. This flag can force decode the first frame only and produce the static image. - */ - SDWebImageDownloaderDecodeFirstFrameOnly = 1 << 10, - - /** - * By default, for `SDAnimatedImage`, we decode the animated image frame during rendering to reduce memory usage. This flag actually trigger `preloadAllAnimatedImageFrames = YES` after image load from network - */ - SDWebImageDownloaderPreloadAllFrames = 1 << 11, - - /** - * By default, when you use `SDWebImageContextAnimatedImageClass` context option (like using `SDAnimatedImageView` which designed to use `SDAnimatedImage`), we may still use `UIImage` when the memory cache hit, or image decoder is not available, to behave as a fallback solution. - * Using this option, can ensure we always produce image with your provided class. If failed, a error with code `SDWebImageErrorBadImageData` will been used. - * Note this options is not compatible with `SDWebImageDownloaderDecodeFirstFrameOnly`, which always produce a UIImage/NSImage. - */ - SDWebImageDownloaderMatchAnimatedImageClass = 1 << 12, -}; - -FOUNDATION_EXPORT NSNotificationName _Nonnull const SDWebImageDownloadStartNotification; -FOUNDATION_EXPORT NSNotificationName _Nonnull const SDWebImageDownloadReceiveResponseNotification; -FOUNDATION_EXPORT NSNotificationName _Nonnull const SDWebImageDownloadStopNotification; -FOUNDATION_EXPORT NSNotificationName _Nonnull const SDWebImageDownloadFinishNotification; - -typedef SDImageLoaderProgressBlock SDWebImageDownloaderProgressBlock; -typedef SDImageLoaderCompletedBlock SDWebImageDownloaderCompletedBlock; - -/** - * A token associated with each download. Can be used to cancel a download - */ -@interface SDWebImageDownloadToken : NSObject - -/** - Cancel the current download. - */ -- (void)cancel; - -/** - The download's URL. - */ -@property (nonatomic, strong, nullable, readonly) NSURL *url; - -/** - The download's request. - */ -@property (nonatomic, strong, nullable, readonly) NSURLRequest *request; - -/** - The download's response. - */ -@property (nonatomic, strong, nullable, readonly) NSURLResponse *response; - -/** - The download's metrics. This will be nil if download operation does not support metrics. - */ -@property (nonatomic, strong, nullable, readonly) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)); - -@end - - -/** - * Asynchronous downloader dedicated and optimized for image loading. - */ -@interface SDWebImageDownloader : NSObject - -/** - * Downloader Config object - storing all kind of settings. - * Most config properties support dynamic changes during download, except something like `sessionConfiguration`, see `SDWebImageDownloaderConfig` for more detail. - */ -@property (nonatomic, copy, readonly, nonnull) SDWebImageDownloaderConfig *config; - -/** - * Set the request modifier to modify the original download request before image load. - * This request modifier method will be called for each downloading image request. Return the original request means no modification. Return nil will cancel the download request. - * Defaults to nil, means does not modify the original download request. - * @note If you want to modify single request, consider using `SDWebImageContextDownloadRequestModifier` context option. - */ -@property (nonatomic, strong, nullable) id requestModifier; - -/** - * Set the response modifier to modify the original download response during image load. - * This response modifier method will be called for each downloading image response. Return the original response means no modification. Return nil will mark current download as cancelled. - * Defaults to nil, means does not modify the original download response. - * @note If you want to modify single response, consider using `SDWebImageContextDownloadResponseModifier` context option. - */ -@property (nonatomic, strong, nullable) id responseModifier; - -/** - * Set the decryptor to decrypt the original download data before image decoding. This can be used for encrypted image data, like Base64. - * This decryptor method will be called for each downloading image data. Return the original data means no modification. Return nil will mark this download failed. - * Defaults to nil, means does not modify the original download data. - * @note When using decryptor, progressive decoding will be disabled, to avoid data corrupt issue. - * @note If you want to decrypt single download data, consider using `SDWebImageContextDownloadDecryptor` context option. - */ -@property (nonatomic, strong, nullable) id decryptor; - -/** - * The configuration in use by the internal NSURLSession. If you want to provide a custom sessionConfiguration, use `SDWebImageDownloaderConfig.sessionConfiguration` and create a new downloader instance. - @note This is immutable according to NSURLSession's documentation. Mutating this object directly has no effect. - */ -@property (nonatomic, readonly, nonnull) NSURLSessionConfiguration *sessionConfiguration; - -/** - * Gets/Sets the download queue suspension state. - */ -@property (nonatomic, assign, getter=isSuspended) BOOL suspended; - -/** - * Shows the current amount of downloads that still need to be downloaded - */ -@property (nonatomic, assign, readonly) NSUInteger currentDownloadCount; - -/** - * Returns the global shared downloader instance. Which use the `SDWebImageDownloaderConfig.defaultDownloaderConfig` config. - */ -@property (nonatomic, class, readonly, nonnull) SDWebImageDownloader *sharedDownloader; - -/** - Creates an instance of a downloader with specified downloader config. - You can specify session configuration, timeout or operation class through downloader config. - - @param config The downloader config. If you specify nil, the `defaultDownloaderConfig` will be used. - @return new instance of downloader class - */ -- (nonnull instancetype)initWithConfig:(nullable SDWebImageDownloaderConfig *)config NS_DESIGNATED_INITIALIZER; - -/** - * Set a value for a HTTP header to be appended to each download HTTP request. - * - * @param value The value for the header field. Use `nil` value to remove the header field. - * @param field The name of the header field to set. - */ -- (void)setValue:(nullable NSString *)value forHTTPHeaderField:(nullable NSString *)field; - -/** - * Returns the value of the specified HTTP header field. - * - * @return The value associated with the header field field, or `nil` if there is no corresponding header field. - */ -- (nullable NSString *)valueForHTTPHeaderField:(nullable NSString *)field; - -/** - * Creates a SDWebImageDownloader async downloader instance with a given URL - * - * The delegate will be informed when the image is finish downloaded or an error has happen. - * - * @see SDWebImageDownloaderDelegate - * - * @param url The URL to the image to download - * @param completedBlock A block called once the download is completed. - * If the download succeeded, the image parameter is set, in case of error, - * error parameter is set with the error. The last parameter is always YES - * if SDWebImageDownloaderProgressiveDownload isn't use. With the - * SDWebImageDownloaderProgressiveDownload option, this block is called - * repeatedly with the partial image object and the finished argument set to NO - * before to be called a last time with the full image and finished argument - * set to YES. In case of error, the finished argument is always YES. - * - * @return A token (SDWebImageDownloadToken) that can be used to cancel this operation - */ -- (nullable SDWebImageDownloadToken *)downloadImageWithURL:(nullable NSURL *)url - completed:(nullable SDWebImageDownloaderCompletedBlock)completedBlock; - -/** - * Creates a SDWebImageDownloader async downloader instance with a given URL - * - * The delegate will be informed when the image is finish downloaded or an error has happen. - * - * @see SDWebImageDownloaderDelegate - * - * @param url The URL to the image to download - * @param options The options to be used for this download - * @param progressBlock A block called repeatedly while the image is downloading - * @note the progress block is executed on a background queue - * @param completedBlock A block called once the download is completed. - * If the download succeeded, the image parameter is set, in case of error, - * error parameter is set with the error. The last parameter is always YES - * if SDWebImageDownloaderProgressiveLoad isn't use. With the - * SDWebImageDownloaderProgressiveLoad option, this block is called - * repeatedly with the partial image object and the finished argument set to NO - * before to be called a last time with the full image and finished argument - * set to YES. In case of error, the finished argument is always YES. - * - * @return A token (SDWebImageDownloadToken) that can be used to cancel this operation - */ -- (nullable SDWebImageDownloadToken *)downloadImageWithURL:(nullable NSURL *)url - options:(SDWebImageDownloaderOptions)options - progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock - completed:(nullable SDWebImageDownloaderCompletedBlock)completedBlock; - -/** - * Creates a SDWebImageDownloader async downloader instance with a given URL - * - * The delegate will be informed when the image is finish downloaded or an error has happen. - * - * @see SDWebImageDownloaderDelegate - * - * @param url The URL to the image to download - * @param options The options to be used for this download - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - * @param progressBlock A block called repeatedly while the image is downloading - * @note the progress block is executed on a background queue - * @param completedBlock A block called once the download is completed. - * - * @return A token (SDWebImageDownloadToken) that can be used to cancel this operation - */ -- (nullable SDWebImageDownloadToken *)downloadImageWithURL:(nullable NSURL *)url - options:(SDWebImageDownloaderOptions)options - context:(nullable SDWebImageContext *)context - progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock - completed:(nullable SDWebImageDownloaderCompletedBlock)completedBlock; - -/** - * Cancels all download operations in the queue - */ -- (void)cancelAllDownloads; - -/** - * Invalidates the managed session, optionally canceling pending operations. - * @note If you use custom downloader instead of the shared downloader, you need call this method when you do not use it to avoid memory leak - * @param cancelPendingOperations Whether or not to cancel pending operations. - * @note Calling this method on the shared downloader has no effect. - */ -- (void)invalidateSessionAndCancel:(BOOL)cancelPendingOperations; - -@end - - -/** - SDWebImageDownloader is the built-in image loader conform to `SDImageLoader`. Which provide the HTTP/HTTPS/FTP download, or local file URL using NSURLSession. - However, this downloader class itself also support customization for advanced users. You can specify `operationClass` in download config to custom download operation, See `SDWebImageDownloaderOperation`. - If you want to provide some image loader which beyond network or local file, consider to create your own custom class conform to `SDImageLoader`. - */ -@interface SDWebImageDownloader (SDImageLoader) - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloader.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloader.m deleted file mode 100644 index cd6b796..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloader.m +++ /dev/null @@ -1,637 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageDownloader.h" -#import "SDWebImageDownloaderConfig.h" -#import "SDWebImageDownloaderOperation.h" -#import "SDWebImageError.h" -#import "SDInternalMacros.h" - -NSNotificationName const SDWebImageDownloadStartNotification = @"SDWebImageDownloadStartNotification"; -NSNotificationName const SDWebImageDownloadReceiveResponseNotification = @"SDWebImageDownloadReceiveResponseNotification"; -NSNotificationName const SDWebImageDownloadStopNotification = @"SDWebImageDownloadStopNotification"; -NSNotificationName const SDWebImageDownloadFinishNotification = @"SDWebImageDownloadFinishNotification"; - -static void * SDWebImageDownloaderContext = &SDWebImageDownloaderContext; - -@interface SDWebImageDownloadToken () - -@property (nonatomic, strong, nullable, readwrite) NSURL *url; -@property (nonatomic, strong, nullable, readwrite) NSURLRequest *request; -@property (nonatomic, strong, nullable, readwrite) NSURLResponse *response; -@property (nonatomic, strong, nullable, readwrite) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)); -@property (nonatomic, weak, nullable, readwrite) id downloadOperationCancelToken; -@property (nonatomic, weak, nullable) NSOperation *downloadOperation; -@property (nonatomic, assign, getter=isCancelled) BOOL cancelled; - -- (nonnull instancetype)init NS_UNAVAILABLE; -+ (nonnull instancetype)new NS_UNAVAILABLE; -- (nonnull instancetype)initWithDownloadOperation:(nullable NSOperation *)downloadOperation; - -@end - -@interface SDWebImageDownloader () - -@property (strong, nonatomic, nonnull) NSOperationQueue *downloadQueue; -@property (strong, nonatomic, nonnull) NSMutableDictionary *> *URLOperations; -@property (strong, nonatomic, nullable) NSMutableDictionary *HTTPHeaders; - -// The session in which data tasks will run -@property (strong, nonatomic) NSURLSession *session; - -@end - -@implementation SDWebImageDownloader { - SD_LOCK_DECLARE(_HTTPHeadersLock); // A lock to keep the access to `HTTPHeaders` thread-safe - SD_LOCK_DECLARE(_operationsLock); // A lock to keep the access to `URLOperations` thread-safe -} - -+ (void)initialize { - // Bind SDNetworkActivityIndicator if available (download it here: http://github.com/rs/SDNetworkActivityIndicator ) - // To use it, just add #import "SDNetworkActivityIndicator.h" in addition to the SDWebImage import - if (NSClassFromString(@"SDNetworkActivityIndicator")) { - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - id activityIndicator = [NSClassFromString(@"SDNetworkActivityIndicator") performSelector:NSSelectorFromString(@"sharedActivityIndicator")]; -#pragma clang diagnostic pop - - // Remove observer in case it was previously added. - [[NSNotificationCenter defaultCenter] removeObserver:activityIndicator name:SDWebImageDownloadStartNotification object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:activityIndicator name:SDWebImageDownloadStopNotification object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:activityIndicator - selector:NSSelectorFromString(@"startActivity") - name:SDWebImageDownloadStartNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:activityIndicator - selector:NSSelectorFromString(@"stopActivity") - name:SDWebImageDownloadStopNotification object:nil]; - } -} - -+ (nonnull instancetype)sharedDownloader { - static dispatch_once_t once; - static id instance; - dispatch_once(&once, ^{ - instance = [self new]; - }); - return instance; -} - -- (nonnull instancetype)init { - return [self initWithConfig:SDWebImageDownloaderConfig.defaultDownloaderConfig]; -} - -- (instancetype)initWithConfig:(SDWebImageDownloaderConfig *)config { - self = [super init]; - if (self) { - if (!config) { - config = SDWebImageDownloaderConfig.defaultDownloaderConfig; - } - _config = [config copy]; - [_config addObserver:self forKeyPath:NSStringFromSelector(@selector(maxConcurrentDownloads)) options:0 context:SDWebImageDownloaderContext]; - _downloadQueue = [NSOperationQueue new]; - _downloadQueue.maxConcurrentOperationCount = _config.maxConcurrentDownloads; - _downloadQueue.name = @"com.hackemist.SDWebImageDownloader"; - _URLOperations = [NSMutableDictionary new]; - NSMutableDictionary *headerDictionary = [NSMutableDictionary dictionary]; - NSString *userAgent = nil; -#if SD_UIKIT - // User-Agent Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43 - userAgent = [NSString stringWithFormat:@"%@/%@ (%@; iOS %@; Scale/%0.2f)", [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleExecutableKey] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleIdentifierKey], [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleVersionKey], [[UIDevice currentDevice] model], [[UIDevice currentDevice] systemVersion], [[UIScreen mainScreen] scale]]; -#elif SD_WATCH - // User-Agent Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43 - userAgent = [NSString stringWithFormat:@"%@/%@ (%@; watchOS %@; Scale/%0.2f)", [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleExecutableKey] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleIdentifierKey], [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleVersionKey], [[WKInterfaceDevice currentDevice] model], [[WKInterfaceDevice currentDevice] systemVersion], [[WKInterfaceDevice currentDevice] screenScale]]; -#elif SD_MAC - userAgent = [NSString stringWithFormat:@"%@/%@ (Mac OS X %@)", [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleExecutableKey] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleIdentifierKey], [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleVersionKey], [[NSProcessInfo processInfo] operatingSystemVersionString]]; -#endif - if (userAgent) { - if (![userAgent canBeConvertedToEncoding:NSASCIIStringEncoding]) { - NSMutableString *mutableUserAgent = [userAgent mutableCopy]; - if (CFStringTransform((__bridge CFMutableStringRef)(mutableUserAgent), NULL, (__bridge CFStringRef)@"Any-Latin; Latin-ASCII; [:^ASCII:] Remove", false)) { - userAgent = mutableUserAgent; - } - } - headerDictionary[@"User-Agent"] = userAgent; - } - headerDictionary[@"Accept"] = @"image/*,*/*;q=0.8"; - _HTTPHeaders = headerDictionary; - SD_LOCK_INIT(_HTTPHeadersLock); - SD_LOCK_INIT(_operationsLock); - NSURLSessionConfiguration *sessionConfiguration = _config.sessionConfiguration; - if (!sessionConfiguration) { - sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; - } - /** - * Create the session for this task - * We send nil as delegate queue so that the session creates a serial operation queue for performing all delegate - * method calls and completion handler calls. - */ - _session = [NSURLSession sessionWithConfiguration:sessionConfiguration - delegate:self - delegateQueue:nil]; - } - return self; -} - -- (void)dealloc { - [self.downloadQueue cancelAllOperations]; - [self.config removeObserver:self forKeyPath:NSStringFromSelector(@selector(maxConcurrentDownloads)) context:SDWebImageDownloaderContext]; - - // Invalide the URLSession after all operations been cancelled - [self.session invalidateAndCancel]; - self.session = nil; -} - -- (void)invalidateSessionAndCancel:(BOOL)cancelPendingOperations { - if (self == [SDWebImageDownloader sharedDownloader]) { - return; - } - if (cancelPendingOperations) { - [self.session invalidateAndCancel]; - } else { - [self.session finishTasksAndInvalidate]; - } -} - -- (void)setValue:(nullable NSString *)value forHTTPHeaderField:(nullable NSString *)field { - if (!field) { - return; - } - SD_LOCK(_HTTPHeadersLock); - [self.HTTPHeaders setValue:value forKey:field]; - SD_UNLOCK(_HTTPHeadersLock); -} - -- (nullable NSString *)valueForHTTPHeaderField:(nullable NSString *)field { - if (!field) { - return nil; - } - SD_LOCK(_HTTPHeadersLock); - NSString *value = [self.HTTPHeaders objectForKey:field]; - SD_UNLOCK(_HTTPHeadersLock); - return value; -} - -- (nullable SDWebImageDownloadToken *)downloadImageWithURL:(NSURL *)url - completed:(SDWebImageDownloaderCompletedBlock)completedBlock { - return [self downloadImageWithURL:url options:0 progress:nil completed:completedBlock]; -} - -- (nullable SDWebImageDownloadToken *)downloadImageWithURL:(NSURL *)url - options:(SDWebImageDownloaderOptions)options - progress:(SDWebImageDownloaderProgressBlock)progressBlock - completed:(SDWebImageDownloaderCompletedBlock)completedBlock { - return [self downloadImageWithURL:url options:options context:nil progress:progressBlock completed:completedBlock]; -} - -- (nullable SDWebImageDownloadToken *)downloadImageWithURL:(nullable NSURL *)url - options:(SDWebImageDownloaderOptions)options - context:(nullable SDWebImageContext *)context - progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock - completed:(nullable SDWebImageDownloaderCompletedBlock)completedBlock { - // The URL will be used as the key to the callbacks dictionary so it cannot be nil. If it is nil immediately call the completed block with no image or data. - if (url == nil) { - if (completedBlock) { - NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorInvalidURL userInfo:@{NSLocalizedDescriptionKey : @"Image url is nil"}]; - completedBlock(nil, nil, error, YES); - } - return nil; - } - - SD_LOCK(_operationsLock); - id downloadOperationCancelToken; - NSOperation *operation = [self.URLOperations objectForKey:url]; - // There is a case that the operation may be marked as finished or cancelled, but not been removed from `self.URLOperations`. - if (!operation || operation.isFinished || operation.isCancelled) { - operation = [self createDownloaderOperationWithUrl:url options:options context:context]; - if (!operation) { - SD_UNLOCK(_operationsLock); - if (completedBlock) { - NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorInvalidDownloadOperation userInfo:@{NSLocalizedDescriptionKey : @"Downloader operation is nil"}]; - completedBlock(nil, nil, error, YES); - } - return nil; - } - @weakify(self); - operation.completionBlock = ^{ - @strongify(self); - if (!self) { - return; - } - SD_LOCK(self->_operationsLock); - [self.URLOperations removeObjectForKey:url]; - SD_UNLOCK(self->_operationsLock); - }; - self.URLOperations[url] = operation; - // Add the handlers before submitting to operation queue, avoid the race condition that operation finished before setting handlers. - downloadOperationCancelToken = [operation addHandlersForProgress:progressBlock completed:completedBlock]; - // Add operation to operation queue only after all configuration done according to Apple's doc. - // `addOperation:` does not synchronously execute the `operation.completionBlock` so this will not cause deadlock. - [self.downloadQueue addOperation:operation]; - } else { - // When we reuse the download operation to attach more callbacks, there may be thread safe issue because the getter of callbacks may in another queue (decoding queue or delegate queue) - // So we lock the operation here, and in `SDWebImageDownloaderOperation`, we use `@synchonzied (self)`, to ensure the thread safe between these two classes. - @synchronized (operation) { - downloadOperationCancelToken = [operation addHandlersForProgress:progressBlock completed:completedBlock]; - } - if (!operation.isExecuting) { - if (options & SDWebImageDownloaderHighPriority) { - operation.queuePriority = NSOperationQueuePriorityHigh; - } else if (options & SDWebImageDownloaderLowPriority) { - operation.queuePriority = NSOperationQueuePriorityLow; - } else { - operation.queuePriority = NSOperationQueuePriorityNormal; - } - } - } - SD_UNLOCK(_operationsLock); - - SDWebImageDownloadToken *token = [[SDWebImageDownloadToken alloc] initWithDownloadOperation:operation]; - token.url = url; - token.request = operation.request; - token.downloadOperationCancelToken = downloadOperationCancelToken; - - return token; -} - -- (nullable NSOperation *)createDownloaderOperationWithUrl:(nonnull NSURL *)url - options:(SDWebImageDownloaderOptions)options - context:(nullable SDWebImageContext *)context { - NSTimeInterval timeoutInterval = self.config.downloadTimeout; - if (timeoutInterval == 0.0) { - timeoutInterval = 15.0; - } - - // In order to prevent from potential duplicate caching (NSURLCache + SDImageCache) we disable the cache for image requests if told otherwise - NSURLRequestCachePolicy cachePolicy = options & SDWebImageDownloaderUseNSURLCache ? NSURLRequestUseProtocolCachePolicy : NSURLRequestReloadIgnoringLocalCacheData; - NSMutableURLRequest *mutableRequest = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:cachePolicy timeoutInterval:timeoutInterval]; - mutableRequest.HTTPShouldHandleCookies = SD_OPTIONS_CONTAINS(options, SDWebImageDownloaderHandleCookies); - mutableRequest.HTTPShouldUsePipelining = YES; - SD_LOCK(_HTTPHeadersLock); - mutableRequest.allHTTPHeaderFields = self.HTTPHeaders; - SD_UNLOCK(_HTTPHeadersLock); - - // Context Option - SDWebImageMutableContext *mutableContext; - if (context) { - mutableContext = [context mutableCopy]; - } else { - mutableContext = [NSMutableDictionary dictionary]; - } - - // Request Modifier - id requestModifier; - if ([context valueForKey:SDWebImageContextDownloadRequestModifier]) { - requestModifier = [context valueForKey:SDWebImageContextDownloadRequestModifier]; - } else { - requestModifier = self.requestModifier; - } - - NSURLRequest *request; - if (requestModifier) { - NSURLRequest *modifiedRequest = [requestModifier modifiedRequestWithRequest:[mutableRequest copy]]; - // If modified request is nil, early return - if (!modifiedRequest) { - return nil; - } else { - request = [modifiedRequest copy]; - } - } else { - request = [mutableRequest copy]; - } - // Response Modifier - id responseModifier; - if ([context valueForKey:SDWebImageContextDownloadResponseModifier]) { - responseModifier = [context valueForKey:SDWebImageContextDownloadResponseModifier]; - } else { - responseModifier = self.responseModifier; - } - if (responseModifier) { - mutableContext[SDWebImageContextDownloadResponseModifier] = responseModifier; - } - // Decryptor - id decryptor; - if ([context valueForKey:SDWebImageContextDownloadDecryptor]) { - decryptor = [context valueForKey:SDWebImageContextDownloadDecryptor]; - } else { - decryptor = self.decryptor; - } - if (decryptor) { - mutableContext[SDWebImageContextDownloadDecryptor] = decryptor; - } - - context = [mutableContext copy]; - - // Operation Class - Class operationClass = self.config.operationClass; - if (operationClass && [operationClass isSubclassOfClass:[NSOperation class]] && [operationClass conformsToProtocol:@protocol(SDWebImageDownloaderOperation)]) { - // Custom operation class - } else { - operationClass = [SDWebImageDownloaderOperation class]; - } - NSOperation *operation = [[operationClass alloc] initWithRequest:request inSession:self.session options:options context:context]; - - if ([operation respondsToSelector:@selector(setCredential:)]) { - if (self.config.urlCredential) { - operation.credential = self.config.urlCredential; - } else if (self.config.username && self.config.password) { - operation.credential = [NSURLCredential credentialWithUser:self.config.username password:self.config.password persistence:NSURLCredentialPersistenceForSession]; - } - } - - if ([operation respondsToSelector:@selector(setMinimumProgressInterval:)]) { - operation.minimumProgressInterval = MIN(MAX(self.config.minimumProgressInterval, 0), 1); - } - - if ([operation respondsToSelector:@selector(setAcceptableStatusCodes:)]) { - operation.acceptableStatusCodes = self.config.acceptableStatusCodes; - } - - if ([operation respondsToSelector:@selector(setAcceptableContentTypes:)]) { - operation.acceptableContentTypes = self.config.acceptableContentTypes; - } - - if (options & SDWebImageDownloaderHighPriority) { - operation.queuePriority = NSOperationQueuePriorityHigh; - } else if (options & SDWebImageDownloaderLowPriority) { - operation.queuePriority = NSOperationQueuePriorityLow; - } - - if (self.config.executionOrder == SDWebImageDownloaderLIFOExecutionOrder) { - // Emulate LIFO execution order by systematically, each previous adding operation can dependency the new operation - // This can gurantee the new operation to be execulated firstly, even if when some operations finished, meanwhile you appending new operations - // Just make last added operation dependents new operation can not solve this problem. See test case #test15DownloaderLIFOExecutionOrder - for (NSOperation *pendingOperation in self.downloadQueue.operations) { - [pendingOperation addDependency:operation]; - } - } - - return operation; -} - -- (void)cancelAllDownloads { - [self.downloadQueue cancelAllOperations]; -} - -#pragma mark - Properties - -- (BOOL)isSuspended { - return self.downloadQueue.isSuspended; -} - -- (void)setSuspended:(BOOL)suspended { - self.downloadQueue.suspended = suspended; -} - -- (NSUInteger)currentDownloadCount { - return self.downloadQueue.operationCount; -} - -- (NSURLSessionConfiguration *)sessionConfiguration { - return self.session.configuration; -} - -#pragma mark - KVO - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { - if (context == SDWebImageDownloaderContext) { - if ([keyPath isEqualToString:NSStringFromSelector(@selector(maxConcurrentDownloads))]) { - self.downloadQueue.maxConcurrentOperationCount = self.config.maxConcurrentDownloads; - } - } else { - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; - } -} - -#pragma mark Helper methods - -- (NSOperation *)operationWithTask:(NSURLSessionTask *)task { - NSOperation *returnOperation = nil; - for (NSOperation *operation in self.downloadQueue.operations) { - if ([operation respondsToSelector:@selector(dataTask)]) { - // So we lock the operation here, and in `SDWebImageDownloaderOperation`, we use `@synchonzied (self)`, to ensure the thread safe between these two classes. - NSURLSessionTask *operationTask; - @synchronized (operation) { - operationTask = operation.dataTask; - } - if (operationTask.taskIdentifier == task.taskIdentifier) { - returnOperation = operation; - break; - } - } - } - return returnOperation; -} - -#pragma mark NSURLSessionDataDelegate - -- (void)URLSession:(NSURLSession *)session - dataTask:(NSURLSessionDataTask *)dataTask -didReceiveResponse:(NSURLResponse *)response - completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler { - - // Identify the operation that runs this task and pass it the delegate method - NSOperation *dataOperation = [self operationWithTask:dataTask]; - if ([dataOperation respondsToSelector:@selector(URLSession:dataTask:didReceiveResponse:completionHandler:)]) { - [dataOperation URLSession:session dataTask:dataTask didReceiveResponse:response completionHandler:completionHandler]; - } else { - if (completionHandler) { - completionHandler(NSURLSessionResponseAllow); - } - } -} - -- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { - - // Identify the operation that runs this task and pass it the delegate method - NSOperation *dataOperation = [self operationWithTask:dataTask]; - if ([dataOperation respondsToSelector:@selector(URLSession:dataTask:didReceiveData:)]) { - [dataOperation URLSession:session dataTask:dataTask didReceiveData:data]; - } -} - -- (void)URLSession:(NSURLSession *)session - dataTask:(NSURLSessionDataTask *)dataTask - willCacheResponse:(NSCachedURLResponse *)proposedResponse - completionHandler:(void (^)(NSCachedURLResponse *cachedResponse))completionHandler { - - // Identify the operation that runs this task and pass it the delegate method - NSOperation *dataOperation = [self operationWithTask:dataTask]; - if ([dataOperation respondsToSelector:@selector(URLSession:dataTask:willCacheResponse:completionHandler:)]) { - [dataOperation URLSession:session dataTask:dataTask willCacheResponse:proposedResponse completionHandler:completionHandler]; - } else { - if (completionHandler) { - completionHandler(proposedResponse); - } - } -} - -#pragma mark NSURLSessionTaskDelegate - -- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { - - // Identify the operation that runs this task and pass it the delegate method - NSOperation *dataOperation = [self operationWithTask:task]; - if ([dataOperation respondsToSelector:@selector(URLSession:task:didCompleteWithError:)]) { - [dataOperation URLSession:session task:task didCompleteWithError:error]; - } -} - -- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLRequest * _Nullable))completionHandler { - - // Identify the operation that runs this task and pass it the delegate method - NSOperation *dataOperation = [self operationWithTask:task]; - if ([dataOperation respondsToSelector:@selector(URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:)]) { - [dataOperation URLSession:session task:task willPerformHTTPRedirection:response newRequest:request completionHandler:completionHandler]; - } else { - if (completionHandler) { - completionHandler(request); - } - } -} - -- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler { - - // Identify the operation that runs this task and pass it the delegate method - NSOperation *dataOperation = [self operationWithTask:task]; - if ([dataOperation respondsToSelector:@selector(URLSession:task:didReceiveChallenge:completionHandler:)]) { - [dataOperation URLSession:session task:task didReceiveChallenge:challenge completionHandler:completionHandler]; - } else { - if (completionHandler) { - completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil); - } - } -} - -- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)) { - - // Identify the operation that runs this task and pass it the delegate method - NSOperation *dataOperation = [self operationWithTask:task]; - if ([dataOperation respondsToSelector:@selector(URLSession:task:didFinishCollectingMetrics:)]) { - [dataOperation URLSession:session task:task didFinishCollectingMetrics:metrics]; - } -} - -@end - -@implementation SDWebImageDownloadToken - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self name:SDWebImageDownloadReceiveResponseNotification object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:SDWebImageDownloadStopNotification object:nil]; -} - -- (instancetype)initWithDownloadOperation:(NSOperation *)downloadOperation { - self = [super init]; - if (self) { - _downloadOperation = downloadOperation; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(downloadDidReceiveResponse:) name:SDWebImageDownloadReceiveResponseNotification object:downloadOperation]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(downloadDidStop:) name:SDWebImageDownloadStopNotification object:downloadOperation]; - } - return self; -} - -- (void)downloadDidReceiveResponse:(NSNotification *)notification { - NSOperation *downloadOperation = notification.object; - if (downloadOperation && downloadOperation == self.downloadOperation) { - self.response = downloadOperation.response; - } -} - -- (void)downloadDidStop:(NSNotification *)notification { - NSOperation *downloadOperation = notification.object; - if (downloadOperation && downloadOperation == self.downloadOperation) { - if ([downloadOperation respondsToSelector:@selector(metrics)]) { - if (@available(iOS 10.0, tvOS 10.0, macOS 10.12, watchOS 3.0, *)) { - self.metrics = downloadOperation.metrics; - } - } - } -} - -- (void)cancel { - @synchronized (self) { - if (self.isCancelled) { - return; - } - self.cancelled = YES; - [self.downloadOperation cancel:self.downloadOperationCancelToken]; - self.downloadOperationCancelToken = nil; - } -} - -@end - -@implementation SDWebImageDownloader (SDImageLoader) - -- (BOOL)canRequestImageForURL:(NSURL *)url { - return [self canRequestImageForURL:url options:0 context:nil]; -} - -- (BOOL)canRequestImageForURL:(NSURL *)url options:(SDWebImageOptions)options context:(SDWebImageContext *)context { - if (!url) { - return NO; - } - // Always pass YES to let URLSession or custom download operation to determine - return YES; -} - -- (id)requestImageWithURL:(NSURL *)url options:(SDWebImageOptions)options context:(SDWebImageContext *)context progress:(SDImageLoaderProgressBlock)progressBlock completed:(SDImageLoaderCompletedBlock)completedBlock { - UIImage *cachedImage = context[SDWebImageContextLoaderCachedImage]; - - SDWebImageDownloaderOptions downloaderOptions = 0; - if (options & SDWebImageLowPriority) downloaderOptions |= SDWebImageDownloaderLowPriority; - if (options & SDWebImageProgressiveLoad) downloaderOptions |= SDWebImageDownloaderProgressiveLoad; - if (options & SDWebImageRefreshCached) downloaderOptions |= SDWebImageDownloaderUseNSURLCache; - if (options & SDWebImageContinueInBackground) downloaderOptions |= SDWebImageDownloaderContinueInBackground; - if (options & SDWebImageHandleCookies) downloaderOptions |= SDWebImageDownloaderHandleCookies; - if (options & SDWebImageAllowInvalidSSLCertificates) downloaderOptions |= SDWebImageDownloaderAllowInvalidSSLCertificates; - if (options & SDWebImageHighPriority) downloaderOptions |= SDWebImageDownloaderHighPriority; - if (options & SDWebImageScaleDownLargeImages) downloaderOptions |= SDWebImageDownloaderScaleDownLargeImages; - if (options & SDWebImageAvoidDecodeImage) downloaderOptions |= SDWebImageDownloaderAvoidDecodeImage; - if (options & SDWebImageDecodeFirstFrameOnly) downloaderOptions |= SDWebImageDownloaderDecodeFirstFrameOnly; - if (options & SDWebImagePreloadAllFrames) downloaderOptions |= SDWebImageDownloaderPreloadAllFrames; - if (options & SDWebImageMatchAnimatedImageClass) downloaderOptions |= SDWebImageDownloaderMatchAnimatedImageClass; - - if (cachedImage && options & SDWebImageRefreshCached) { - // force progressive off if image already cached but forced refreshing - downloaderOptions &= ~SDWebImageDownloaderProgressiveLoad; - // ignore image read from NSURLCache if image if cached but force refreshing - downloaderOptions |= SDWebImageDownloaderIgnoreCachedResponse; - } - - return [self downloadImageWithURL:url options:downloaderOptions context:context progress:progressBlock completed:completedBlock]; -} - -- (BOOL)shouldBlockFailedURLWithURL:(NSURL *)url error:(NSError *)error { - return [self shouldBlockFailedURLWithURL:url error:error options:0 context:nil]; -} - -- (BOOL)shouldBlockFailedURLWithURL:(NSURL *)url error:(NSError *)error options:(SDWebImageOptions)options context:(SDWebImageContext *)context { - BOOL shouldBlockFailedURL; - // Filter the error domain and check error codes - if ([error.domain isEqualToString:SDWebImageErrorDomain]) { - shouldBlockFailedURL = ( error.code == SDWebImageErrorInvalidURL - || error.code == SDWebImageErrorBadImageData); - } else if ([error.domain isEqualToString:NSURLErrorDomain]) { - shouldBlockFailedURL = ( error.code != NSURLErrorNotConnectedToInternet - && error.code != NSURLErrorCancelled - && error.code != NSURLErrorTimedOut - && error.code != NSURLErrorInternationalRoamingOff - && error.code != NSURLErrorDataNotAllowed - && error.code != NSURLErrorCannotFindHost - && error.code != NSURLErrorCannotConnectToHost - && error.code != NSURLErrorNetworkConnectionLost); - } else { - shouldBlockFailedURL = NO; - } - return shouldBlockFailedURL; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderConfig.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderConfig.h deleted file mode 100644 index 9d5e67b..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderConfig.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageCompat.h" - -/// Operation execution order -typedef NS_ENUM(NSInteger, SDWebImageDownloaderExecutionOrder) { - /** - * Default value. All download operations will execute in queue style (first-in-first-out). - */ - SDWebImageDownloaderFIFOExecutionOrder, - - /** - * All download operations will execute in stack style (last-in-first-out). - */ - SDWebImageDownloaderLIFOExecutionOrder -}; - -/** - The class contains all the config for image downloader - @note This class conform to NSCopying, make sure to add the property in `copyWithZone:` as well. - */ -@interface SDWebImageDownloaderConfig : NSObject - -/** - Gets the default downloader config used for shared instance or initialization when it does not provide any downloader config. Such as `SDWebImageDownloader.sharedDownloader`. - @note You can modify the property on default downloader config, which can be used for later created downloader instance. The already created downloader instance does not get affected. - */ -@property (nonatomic, class, readonly, nonnull) SDWebImageDownloaderConfig *defaultDownloaderConfig; - -/** - * The maximum number of concurrent downloads. - * Defaults to 6. - */ -@property (nonatomic, assign) NSInteger maxConcurrentDownloads; - -/** - * The timeout value (in seconds) for each download operation. - * Defaults to 15.0. - */ -@property (nonatomic, assign) NSTimeInterval downloadTimeout; - -/** - * The minimum interval about progress percent during network downloading. Which means the next progress callback and current progress callback's progress percent difference should be larger or equal to this value. However, the final finish download progress callback does not get effected. - * The value should be 0.0-1.0. - * @note If you're using progressive decoding feature, this will also effect the image refresh rate. - * @note This value may enhance the performance if you don't want progress callback too frequently. - * Defaults to 0, which means each time we receive the new data from URLSession, we callback the progressBlock immediately. - */ -@property (nonatomic, assign) double minimumProgressInterval; - -/** - * The custom session configuration in use by NSURLSession. If you don't provide one, we will use `defaultSessionConfiguration` instead. - * Defatuls to nil. - * @note This property does not support dynamic changes, means it's immutable after the downloader instance initialized. - */ -@property (nonatomic, strong, nullable) NSURLSessionConfiguration *sessionConfiguration; - -/** - * Gets/Sets a subclass of `SDWebImageDownloaderOperation` as the default - * `NSOperation` to be used each time SDWebImage constructs a request - * operation to download an image. - * Defaults to nil. - * @note Passing `NSOperation` to set as default. Passing `nil` will revert to `SDWebImageDownloaderOperation`. - */ -@property (nonatomic, assign, nullable) Class operationClass; - -/** - * Changes download operations execution order. - * Defaults to `SDWebImageDownloaderFIFOExecutionOrder`. - */ -@property (nonatomic, assign) SDWebImageDownloaderExecutionOrder executionOrder; - -/** - * Set the default URL credential to be set for request operations. - * Defaults to nil. - */ -@property (nonatomic, copy, nullable) NSURLCredential *urlCredential; - -/** - * Set username using for HTTP Basic authentication. - * Defaults to nil. - */ -@property (nonatomic, copy, nullable) NSString *username; - -/** - * Set password using for HTTP Basic authentication. - * Defaults to nil. - */ -@property (nonatomic, copy, nullable) NSString *password; - -/** - * Set the acceptable HTTP Response status code. The status code which beyond the range will mark the download operation failed. - * For example, if we config [200, 400) but server response is 503, the download will fail with error code `SDWebImageErrorInvalidDownloadStatusCode`. - * Defaults to [200,400). Nil means no validation at all. - */ -@property (nonatomic, copy, nullable) NSIndexSet *acceptableStatusCodes; - -/** - * Set the acceptable HTTP Response content type. The content type beyond the set will mark the download operation failed. - * For example, if we config ["image/png"] but server response is "application/json", the download will fail with error code `SDWebImageErrorInvalidDownloadContentType`. - * Normally you don't need this for image format detection because we use image's data file signature magic bytes: https://en.wikipedia.org/wiki/List_of_file_signatures - * Defaults to nil. Nil means no validation at all. - */ -@property (nonatomic, copy, nullable) NSSet *acceptableContentTypes; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderConfig.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderConfig.m deleted file mode 100644 index 6120bd8..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderConfig.m +++ /dev/null @@ -1,52 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageDownloaderConfig.h" - -static SDWebImageDownloaderConfig * _defaultDownloaderConfig; - -@implementation SDWebImageDownloaderConfig - -+ (SDWebImageDownloaderConfig *)defaultDownloaderConfig { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _defaultDownloaderConfig = [SDWebImageDownloaderConfig new]; - }); - return _defaultDownloaderConfig; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _maxConcurrentDownloads = 6; - _downloadTimeout = 15.0; - _executionOrder = SDWebImageDownloaderFIFOExecutionOrder; - _acceptableStatusCodes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(200, 100)]; - } - return self; -} - -- (id)copyWithZone:(NSZone *)zone { - SDWebImageDownloaderConfig *config = [[[self class] allocWithZone:zone] init]; - config.maxConcurrentDownloads = self.maxConcurrentDownloads; - config.downloadTimeout = self.downloadTimeout; - config.minimumProgressInterval = self.minimumProgressInterval; - config.sessionConfiguration = [self.sessionConfiguration copyWithZone:zone]; - config.operationClass = self.operationClass; - config.executionOrder = self.executionOrder; - config.urlCredential = self.urlCredential; - config.username = self.username; - config.password = self.password; - config.acceptableStatusCodes = self.acceptableStatusCodes; - config.acceptableContentTypes = self.acceptableContentTypes; - - return config; -} - - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderDecryptor.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderDecryptor.h deleted file mode 100644 index 0923f29..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderDecryptor.h +++ /dev/null @@ -1,49 +0,0 @@ -/* -* This file is part of the SDWebImage package. -* (c) Olivier Poitrey -* -* For the full copyright and license information, please view the LICENSE -* file that was distributed with this source code. -*/ - -#import -#import "SDWebImageCompat.h" - -typedef NSData * _Nullable (^SDWebImageDownloaderDecryptorBlock)(NSData * _Nonnull data, NSURLResponse * _Nullable response); - -/** -This is the protocol for downloader decryptor. Which decrypt the original encrypted data before decoding. Note progressive decoding is not compatible for decryptor. -We can use a block to specify the downloader decryptor. But Using protocol can make this extensible, and allow Swift user to use it easily instead of using `@convention(block)` to store a block into context options. -*/ -@protocol SDWebImageDownloaderDecryptor - -/// Decrypt the original download data and return a new data. You can use this to decrypt the data using your preferred algorithm. -/// @param data The original download data -/// @param response The URL response for data. If you modify the original URL response via response modifier, the modified version will be here. This arg is nullable. -/// @note If nil is returned, the image download will be marked as failed with error `SDWebImageErrorBadImageData` -- (nullable NSData *)decryptedDataWithData:(nonnull NSData *)data response:(nullable NSURLResponse *)response; - -@end - -/** -A downloader response modifier class with block. -*/ -@interface SDWebImageDownloaderDecryptor : NSObject - -/// Create the data decryptor with block -/// @param block A block to control decrypt logic -- (nonnull instancetype)initWithBlock:(nonnull SDWebImageDownloaderDecryptorBlock)block; - -/// Create the data decryptor with block -/// @param block A block to control decrypt logic -+ (nonnull instancetype)decryptorWithBlock:(nonnull SDWebImageDownloaderDecryptorBlock)block; - -@end - -/// Convenience way to create decryptor for common data encryption. -@interface SDWebImageDownloaderDecryptor (Conveniences) - -/// Base64 Encoded image data decryptor -@property (class, readonly, nonnull) SDWebImageDownloaderDecryptor *base64Decryptor; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderDecryptor.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderDecryptor.m deleted file mode 100644 index a3b75b2..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderDecryptor.m +++ /dev/null @@ -1,55 +0,0 @@ -/* -* This file is part of the SDWebImage package. -* (c) Olivier Poitrey -* -* For the full copyright and license information, please view the LICENSE -* file that was distributed with this source code. -*/ - -#import "SDWebImageDownloaderDecryptor.h" - -@interface SDWebImageDownloaderDecryptor () - -@property (nonatomic, copy, nonnull) SDWebImageDownloaderDecryptorBlock block; - -@end - -@implementation SDWebImageDownloaderDecryptor - -- (instancetype)initWithBlock:(SDWebImageDownloaderDecryptorBlock)block { - self = [super init]; - if (self) { - self.block = block; - } - return self; -} - -+ (instancetype)decryptorWithBlock:(SDWebImageDownloaderDecryptorBlock)block { - SDWebImageDownloaderDecryptor *decryptor = [[SDWebImageDownloaderDecryptor alloc] initWithBlock:block]; - return decryptor; -} - -- (nullable NSData *)decryptedDataWithData:(nonnull NSData *)data response:(nullable NSURLResponse *)response { - if (!self.block) { - return nil; - } - return self.block(data, response); -} - -@end - -@implementation SDWebImageDownloaderDecryptor (Conveniences) - -+ (SDWebImageDownloaderDecryptor *)base64Decryptor { - static SDWebImageDownloaderDecryptor *decryptor; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - decryptor = [SDWebImageDownloaderDecryptor decryptorWithBlock:^NSData * _Nullable(NSData * _Nonnull data, NSURLResponse * _Nullable response) { - NSData *modifiedData = [[NSData alloc] initWithBase64EncodedData:data options:NSDataBase64DecodingIgnoreUnknownCharacters]; - return modifiedData; - }]; - }); - return decryptor; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderOperation.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderOperation.h deleted file mode 100644 index 1cd2a50..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderOperation.h +++ /dev/null @@ -1,172 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageDownloader.h" -#import "SDWebImageOperation.h" - -/** - Describes a downloader operation. If one wants to use a custom downloader op, it needs to inherit from `NSOperation` and conform to this protocol - For the description about these methods, see `SDWebImageDownloaderOperation` - @note If your custom operation class does not use `NSURLSession` at all, do not implement the optional methods and session delegate methods. - */ -@protocol SDWebImageDownloaderOperation -@required -- (nonnull instancetype)initWithRequest:(nullable NSURLRequest *)request - inSession:(nullable NSURLSession *)session - options:(SDWebImageDownloaderOptions)options; - -- (nonnull instancetype)initWithRequest:(nullable NSURLRequest *)request - inSession:(nullable NSURLSession *)session - options:(SDWebImageDownloaderOptions)options - context:(nullable SDWebImageContext *)context; - -- (nullable id)addHandlersForProgress:(nullable SDWebImageDownloaderProgressBlock)progressBlock - completed:(nullable SDWebImageDownloaderCompletedBlock)completedBlock; - -- (BOOL)cancel:(nullable id)token; - -@property (strong, nonatomic, readonly, nullable) NSURLRequest *request; -@property (strong, nonatomic, readonly, nullable) NSURLResponse *response; - -@optional -@property (strong, nonatomic, readonly, nullable) NSURLSessionTask *dataTask; -@property (strong, nonatomic, readonly, nullable) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)); - -// These operation-level config was inherited from downloader. See `SDWebImageDownloaderConfig` for documentation. -@property (strong, nonatomic, nullable) NSURLCredential *credential; -@property (assign, nonatomic) double minimumProgressInterval; -@property (copy, nonatomic, nullable) NSIndexSet *acceptableStatusCodes; -@property (copy, nonatomic, nullable) NSSet *acceptableContentTypes; - -@end - - -/** - The download operation class for SDWebImageDownloader. - */ -@interface SDWebImageDownloaderOperation : NSOperation - -/** - * The request used by the operation's task. - */ -@property (strong, nonatomic, readonly, nullable) NSURLRequest *request; - -/** - * The response returned by the operation's task. - */ -@property (strong, nonatomic, readonly, nullable) NSURLResponse *response; - -/** - * The operation's task - */ -@property (strong, nonatomic, readonly, nullable) NSURLSessionTask *dataTask; - -/** - * The collected metrics from `-URLSession:task:didFinishCollectingMetrics:`. - * This can be used to collect the network metrics like download duration, DNS lookup duration, SSL handshake duration, etc. See Apple's documentation: https://developer.apple.com/documentation/foundation/urlsessiontaskmetrics - */ -@property (strong, nonatomic, readonly, nullable) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)); - -/** - * The credential used for authentication challenges in `-URLSession:task:didReceiveChallenge:completionHandler:`. - * - * This will be overridden by any shared credentials that exist for the username or password of the request URL, if present. - */ -@property (strong, nonatomic, nullable) NSURLCredential *credential; - -/** - * The minimum interval about progress percent during network downloading. Which means the next progress callback and current progress callback's progress percent difference should be larger or equal to this value. However, the final finish download progress callback does not get effected. - * The value should be 0.0-1.0. - * @note If you're using progressive decoding feature, this will also effect the image refresh rate. - * @note This value may enhance the performance if you don't want progress callback too frequently. - * Defaults to 0, which means each time we receive the new data from URLSession, we callback the progressBlock immediately. - */ -@property (assign, nonatomic) double minimumProgressInterval; - -/** - * Set the acceptable HTTP Response status code. The status code which beyond the range will mark the download operation failed. - * For example, if we config [200, 400) but server response is 503, the download will fail with error code `SDWebImageErrorInvalidDownloadStatusCode`. - * Defaults to [200,400). Nil means no validation at all. - */ -@property (copy, nonatomic, nullable) NSIndexSet *acceptableStatusCodes; - -/** - * Set the acceptable HTTP Response content type. The content type beyond the set will mark the download operation failed. - * For example, if we config ["image/png"] but server response is "application/json", the download will fail with error code `SDWebImageErrorInvalidDownloadContentType`. - * Normally you don't need this for image format detection because we use image's data file signature magic bytes: https://en.wikipedia.org/wiki/List_of_file_signatures - * Defaults to nil. Nil means no validation at all. - */ -@property (copy, nonatomic, nullable) NSSet *acceptableContentTypes; - -/** - * The options for the receiver. - */ -@property (assign, nonatomic, readonly) SDWebImageDownloaderOptions options; - -/** - * The context for the receiver. - */ -@property (copy, nonatomic, readonly, nullable) SDWebImageContext *context; - -/** - * Initializes a `SDWebImageDownloaderOperation` object - * - * @see SDWebImageDownloaderOperation - * - * @param request the URL request - * @param session the URL session in which this operation will run - * @param options downloader options - * - * @return the initialized instance - */ -- (nonnull instancetype)initWithRequest:(nullable NSURLRequest *)request - inSession:(nullable NSURLSession *)session - options:(SDWebImageDownloaderOptions)options; - -/** - * Initializes a `SDWebImageDownloaderOperation` object - * - * @see SDWebImageDownloaderOperation - * - * @param request the URL request - * @param session the URL session in which this operation will run - * @param options downloader options - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - * - * @return the initialized instance - */ -- (nonnull instancetype)initWithRequest:(nullable NSURLRequest *)request - inSession:(nullable NSURLSession *)session - options:(SDWebImageDownloaderOptions)options - context:(nullable SDWebImageContext *)context NS_DESIGNATED_INITIALIZER; - -/** - * Adds handlers for progress and completion. Returns a token that can be passed to -cancel: to cancel this set of - * callbacks. - * - * @param progressBlock the block executed when a new chunk of data arrives. - * @note the progress block is executed on a background queue - * @param completedBlock the block executed when the download is done. - * @note the completed block is executed on the main queue for success. If errors are found, there is a chance the block will be executed on a background queue - * - * @return the token to use to cancel this set of handlers - */ -- (nullable id)addHandlersForProgress:(nullable SDWebImageDownloaderProgressBlock)progressBlock - completed:(nullable SDWebImageDownloaderCompletedBlock)completedBlock; - -/** - * Cancels a set of callbacks. Once all callbacks are canceled, the operation is cancelled. - * - * @param token the token representing a set of callbacks to cancel - * - * @return YES if the operation was stopped because this was the last token to be canceled. NO otherwise. - */ -- (BOOL)cancel:(nullable id)token; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderOperation.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderOperation.m deleted file mode 100644 index 6df0319..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderOperation.m +++ /dev/null @@ -1,618 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageDownloaderOperation.h" -#import "SDWebImageError.h" -#import "SDInternalMacros.h" -#import "SDWebImageDownloaderResponseModifier.h" -#import "SDWebImageDownloaderDecryptor.h" - -static NSString *const kProgressCallbackKey = @"progress"; -static NSString *const kCompletedCallbackKey = @"completed"; - -typedef NSMutableDictionary SDCallbacksDictionary; - -@interface SDWebImageDownloaderOperation () - -@property (strong, nonatomic, nonnull) NSMutableArray *callbackBlocks; - -@property (assign, nonatomic, readwrite) SDWebImageDownloaderOptions options; -@property (copy, nonatomic, readwrite, nullable) SDWebImageContext *context; - -@property (assign, nonatomic, getter = isExecuting) BOOL executing; -@property (assign, nonatomic, getter = isFinished) BOOL finished; -@property (strong, nonatomic, nullable) NSMutableData *imageData; -@property (copy, nonatomic, nullable) NSData *cachedData; // for `SDWebImageDownloaderIgnoreCachedResponse` -@property (assign, nonatomic) NSUInteger expectedSize; // may be 0 -@property (assign, nonatomic) NSUInteger receivedSize; -@property (strong, nonatomic, nullable, readwrite) NSURLResponse *response; -@property (strong, nonatomic, nullable) NSError *responseError; -@property (assign, nonatomic) double previousProgress; // previous progress percent - -@property (strong, nonatomic, nullable) id responseModifier; // modify original URLResponse -@property (strong, nonatomic, nullable) id decryptor; // decrypt image data - -// This is weak because it is injected by whoever manages this session. If this gets nil-ed out, we won't be able to run -// the task associated with this operation -@property (weak, nonatomic, nullable) NSURLSession *unownedSession; -// This is set if we're using not using an injected NSURLSession. We're responsible of invalidating this one -@property (strong, nonatomic, nullable) NSURLSession *ownedSession; - -@property (strong, nonatomic, readwrite, nullable) NSURLSessionTask *dataTask; - -@property (strong, nonatomic, readwrite, nullable) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)); - -@property (strong, nonatomic, nonnull) NSOperationQueue *coderQueue; // the serial operation queue to do image decoding -#if SD_UIKIT -@property (assign, nonatomic) UIBackgroundTaskIdentifier backgroundTaskId; -#endif - -@end - -@implementation SDWebImageDownloaderOperation - -@synthesize executing = _executing; -@synthesize finished = _finished; - -- (nonnull instancetype)init { - return [self initWithRequest:nil inSession:nil options:0]; -} - -- (instancetype)initWithRequest:(NSURLRequest *)request inSession:(NSURLSession *)session options:(SDWebImageDownloaderOptions)options { - return [self initWithRequest:request inSession:session options:options context:nil]; -} - -- (nonnull instancetype)initWithRequest:(nullable NSURLRequest *)request - inSession:(nullable NSURLSession *)session - options:(SDWebImageDownloaderOptions)options - context:(nullable SDWebImageContext *)context { - if ((self = [super init])) { - _request = [request copy]; - _options = options; - _context = [context copy]; - _callbackBlocks = [NSMutableArray new]; - _responseModifier = context[SDWebImageContextDownloadResponseModifier]; - _decryptor = context[SDWebImageContextDownloadDecryptor]; - _executing = NO; - _finished = NO; - _expectedSize = 0; - _unownedSession = session; - _coderQueue = [NSOperationQueue new]; - _coderQueue.maxConcurrentOperationCount = 1; -#if SD_UIKIT - _backgroundTaskId = UIBackgroundTaskInvalid; -#endif - } - return self; -} - -- (nullable id)addHandlersForProgress:(nullable SDWebImageDownloaderProgressBlock)progressBlock - completed:(nullable SDWebImageDownloaderCompletedBlock)completedBlock { - SDCallbacksDictionary *callbacks = [NSMutableDictionary new]; - if (progressBlock) callbacks[kProgressCallbackKey] = [progressBlock copy]; - if (completedBlock) callbacks[kCompletedCallbackKey] = [completedBlock copy]; - @synchronized (self) { - [self.callbackBlocks addObject:callbacks]; - } - return callbacks; -} - -- (nullable NSArray *)callbacksForKey:(NSString *)key { - NSMutableArray *callbacks; - @synchronized (self) { - callbacks = [[self.callbackBlocks valueForKey:key] mutableCopy]; - } - // We need to remove [NSNull null] because there might not always be a progress block for each callback - [callbacks removeObjectIdenticalTo:[NSNull null]]; - return [callbacks copy]; // strip mutability here -} - -- (BOOL)cancel:(nullable id)token { - if (!token) return NO; - - BOOL shouldCancel = NO; - @synchronized (self) { - NSMutableArray *tempCallbackBlocks = [self.callbackBlocks mutableCopy]; - [tempCallbackBlocks removeObjectIdenticalTo:token]; - if (tempCallbackBlocks.count == 0) { - shouldCancel = YES; - } - } - if (shouldCancel) { - // Cancel operation running and callback last token's completion block - [self cancel]; - } else { - // Only callback this token's completion block - @synchronized (self) { - [self.callbackBlocks removeObjectIdenticalTo:token]; - } - SDWebImageDownloaderCompletedBlock completedBlock = [token valueForKey:kCompletedCallbackKey]; - dispatch_main_async_safe(^{ - if (completedBlock) { - completedBlock(nil, nil, [NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCancelled userInfo:@{NSLocalizedDescriptionKey : @"Operation cancelled by user during sending the request"}], YES); - } - }); - } - return shouldCancel; -} - -- (void)start { - @synchronized (self) { - if (self.isCancelled) { - if (!self.isFinished) self.finished = YES; - // Operation cancelled by user before sending the request - [self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCancelled userInfo:@{NSLocalizedDescriptionKey : @"Operation cancelled by user before sending the request"}]]; - [self reset]; - return; - } - -#if SD_UIKIT - Class UIApplicationClass = NSClassFromString(@"UIApplication"); - BOOL hasApplication = UIApplicationClass && [UIApplicationClass respondsToSelector:@selector(sharedApplication)]; - if (hasApplication && [self shouldContinueWhenAppEntersBackground]) { - __weak typeof(self) wself = self; - UIApplication * app = [UIApplicationClass performSelector:@selector(sharedApplication)]; - self.backgroundTaskId = [app beginBackgroundTaskWithExpirationHandler:^{ - [wself cancel]; - }]; - } -#endif - NSURLSession *session = self.unownedSession; - if (!session) { - NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration]; - sessionConfig.timeoutIntervalForRequest = 15; - - /** - * Create the session for this task - * We send nil as delegate queue so that the session creates a serial operation queue for performing all delegate - * method calls and completion handler calls. - */ - session = [NSURLSession sessionWithConfiguration:sessionConfig - delegate:self - delegateQueue:nil]; - self.ownedSession = session; - } - - if (self.options & SDWebImageDownloaderIgnoreCachedResponse) { - // Grab the cached data for later check - NSURLCache *URLCache = session.configuration.URLCache; - if (!URLCache) { - URLCache = [NSURLCache sharedURLCache]; - } - NSCachedURLResponse *cachedResponse; - // NSURLCache's `cachedResponseForRequest:` is not thread-safe, see https://developer.apple.com/documentation/foundation/nsurlcache#2317483 - @synchronized (URLCache) { - cachedResponse = [URLCache cachedResponseForRequest:self.request]; - } - if (cachedResponse) { - self.cachedData = cachedResponse.data; - self.response = cachedResponse.response; - } - } - - if (!session.delegate) { - // Session been invalid and has no delegate at all - [self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorInvalidDownloadOperation userInfo:@{NSLocalizedDescriptionKey : @"Session delegate is nil and invalid"}]]; - [self reset]; - return; - } - - self.dataTask = [session dataTaskWithRequest:self.request]; - self.executing = YES; - } - - if (self.dataTask) { - if (self.options & SDWebImageDownloaderHighPriority) { - self.dataTask.priority = NSURLSessionTaskPriorityHigh; - self.coderQueue.qualityOfService = NSQualityOfServiceUserInteractive; - } else if (self.options & SDWebImageDownloaderLowPriority) { - self.dataTask.priority = NSURLSessionTaskPriorityLow; - self.coderQueue.qualityOfService = NSQualityOfServiceBackground; - } else { - self.dataTask.priority = NSURLSessionTaskPriorityDefault; - self.coderQueue.qualityOfService = NSQualityOfServiceDefault; - } - [self.dataTask resume]; - for (SDWebImageDownloaderProgressBlock progressBlock in [self callbacksForKey:kProgressCallbackKey]) { - progressBlock(0, NSURLResponseUnknownLength, self.request.URL); - } - __block typeof(self) strongSelf = self; - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStartNotification object:strongSelf]; - }); - } else { - if (!self.isFinished) self.finished = YES; - [self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorInvalidDownloadOperation userInfo:@{NSLocalizedDescriptionKey : @"Task can't be initialized"}]]; - [self reset]; - } -} - -- (void)cancel { - @synchronized (self) { - [self cancelInternal]; - } -} - -- (void)cancelInternal { - if (self.isFinished) return; - [super cancel]; - - __block typeof(self) strongSelf = self; - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:strongSelf]; - }); - - if (self.dataTask) { - // Cancel the URLSession, `URLSession:task:didCompleteWithError:` delegate callback will be ignored - [self.dataTask cancel]; - self.dataTask = nil; - } - - // NSOperation disallow setFinished=YES **before** operation's start method been called - // We check for the initialized status, which is isExecuting == NO && isFinished = NO - // Ony update for non-intialized status, which is !(isExecuting == NO && isFinished = NO), or if (self.isExecuting || self.isFinished) {...} - if (self.isExecuting || self.isFinished) { - if (self.isExecuting) self.executing = NO; - if (!self.isFinished) self.finished = YES; - } - - // Operation cancelled by user during sending the request - [self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCancelled userInfo:@{NSLocalizedDescriptionKey : @"Operation cancelled by user during sending the request"}]]; - - [self reset]; -} - -- (void)done { - self.finished = YES; - self.executing = NO; - [self reset]; -} - -- (void)reset { - @synchronized (self) { - [self.callbackBlocks removeAllObjects]; - self.dataTask = nil; - - if (self.ownedSession) { - [self.ownedSession invalidateAndCancel]; - self.ownedSession = nil; - } - -#if SD_UIKIT - if (self.backgroundTaskId != UIBackgroundTaskInvalid) { - // If backgroundTaskId != UIBackgroundTaskInvalid, sharedApplication is always exist - UIApplication * app = [UIApplication performSelector:@selector(sharedApplication)]; - [app endBackgroundTask:self.backgroundTaskId]; - self.backgroundTaskId = UIBackgroundTaskInvalid; - } -#endif - } -} - -- (void)setFinished:(BOOL)finished { - [self willChangeValueForKey:@"isFinished"]; - _finished = finished; - [self didChangeValueForKey:@"isFinished"]; -} - -- (void)setExecuting:(BOOL)executing { - [self willChangeValueForKey:@"isExecuting"]; - _executing = executing; - [self didChangeValueForKey:@"isExecuting"]; -} - -- (BOOL)isConcurrent { - return YES; -} - -#pragma mark NSURLSessionDataDelegate - -- (void)URLSession:(NSURLSession *)session - dataTask:(NSURLSessionDataTask *)dataTask -didReceiveResponse:(NSURLResponse *)response - completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler { - NSURLSessionResponseDisposition disposition = NSURLSessionResponseAllow; - - // Check response modifier, if return nil, will marked as cancelled. - BOOL valid = YES; - if (self.responseModifier && response) { - response = [self.responseModifier modifiedResponseWithResponse:response]; - if (!response) { - valid = NO; - self.responseError = [NSError errorWithDomain:SDWebImageErrorDomain - code:SDWebImageErrorInvalidDownloadResponse - userInfo:@{NSLocalizedDescriptionKey : @"Download marked as failed because response is nil"}]; - } - } - - NSInteger expected = (NSInteger)response.expectedContentLength; - expected = expected > 0 ? expected : 0; - self.expectedSize = expected; - self.response = response; - - // Check status code valid (defaults [200,400)) - NSInteger statusCode = [response isKindOfClass:NSHTTPURLResponse.class] ? ((NSHTTPURLResponse *)response).statusCode : 0; - BOOL statusCodeValid = YES; - if (valid && statusCode > 0 && self.acceptableStatusCodes) { - statusCodeValid = [self.acceptableStatusCodes containsIndex:statusCode]; - } - if (!statusCodeValid) { - valid = NO; - self.responseError = [NSError errorWithDomain:SDWebImageErrorDomain - code:SDWebImageErrorInvalidDownloadStatusCode - userInfo:@{NSLocalizedDescriptionKey : [NSString stringWithFormat:@"Download marked as failed because of invalid response status code %ld", (long)statusCode], - SDWebImageErrorDownloadStatusCodeKey : @(statusCode), - SDWebImageErrorDownloadResponseKey : response}]; - } - // Check content type valid (defaults nil) - NSString *contentType = [response isKindOfClass:NSHTTPURLResponse.class] ? ((NSHTTPURLResponse *)response).MIMEType : nil; - BOOL contentTypeValid = YES; - if (valid && contentType.length > 0 && self.acceptableContentTypes) { - contentTypeValid = [self.acceptableContentTypes containsObject:contentType]; - } - if (!contentTypeValid) { - valid = NO; - self.responseError = [NSError errorWithDomain:SDWebImageErrorDomain - code:SDWebImageErrorInvalidDownloadContentType - userInfo:@{NSLocalizedDescriptionKey : [NSString stringWithFormat:@"Download marked as failed because of invalid response content type %@", contentType], - SDWebImageErrorDownloadContentTypeKey : contentType, - SDWebImageErrorDownloadResponseKey : response}]; - } - //'304 Not Modified' is an exceptional one - //URLSession current behavior will return 200 status code when the server respond 304 and URLCache hit. But this is not a standard behavior and we just add a check - if (valid && statusCode == 304 && !self.cachedData) { - valid = NO; - self.responseError = [NSError errorWithDomain:SDWebImageErrorDomain - code:SDWebImageErrorCacheNotModified - userInfo:@{NSLocalizedDescriptionKey: @"Download response status code is 304 not modified and ignored", - SDWebImageErrorDownloadResponseKey : response}]; - } - - if (valid) { - for (SDWebImageDownloaderProgressBlock progressBlock in [self callbacksForKey:kProgressCallbackKey]) { - progressBlock(0, expected, self.request.URL); - } - } else { - // Status code invalid and marked as cancelled. Do not call `[self.dataTask cancel]` which may mass up URLSession life cycle - disposition = NSURLSessionResponseCancel; - } - __block typeof(self) strongSelf = self; - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadReceiveResponseNotification object:strongSelf]; - }); - - if (completionHandler) { - completionHandler(disposition); - } -} - -- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { - if (!self.imageData) { - self.imageData = [[NSMutableData alloc] initWithCapacity:self.expectedSize]; - } - [self.imageData appendData:data]; - - self.receivedSize = self.imageData.length; - if (self.expectedSize == 0) { - // Unknown expectedSize, immediately call progressBlock and return - for (SDWebImageDownloaderProgressBlock progressBlock in [self callbacksForKey:kProgressCallbackKey]) { - progressBlock(self.receivedSize, self.expectedSize, self.request.URL); - } - return; - } - - // Get the finish status - BOOL finished = (self.receivedSize >= self.expectedSize); - // Get the current progress - double currentProgress = (double)self.receivedSize / (double)self.expectedSize; - double previousProgress = self.previousProgress; - double progressInterval = currentProgress - previousProgress; - // Check if we need callback progress - if (!finished && (progressInterval < self.minimumProgressInterval)) { - return; - } - self.previousProgress = currentProgress; - - // Using data decryptor will disable the progressive decoding, since there are no support for progressive decrypt - BOOL supportProgressive = (self.options & SDWebImageDownloaderProgressiveLoad) && !self.decryptor; - // Progressive decoding Only decode partial image, full image in `URLSession:task:didCompleteWithError:` - if (supportProgressive && !finished) { - // Get the image data - NSData *imageData = self.imageData; - - // keep maximum one progressive decode process during download - if (self.coderQueue.operationCount == 0) { - // NSOperation have autoreleasepool, don't need to create extra one - @weakify(self); - [self.coderQueue addOperationWithBlock:^{ - @strongify(self); - if (!self) { - return; - } - UIImage *image = SDImageLoaderDecodeProgressiveImageData(imageData, self.request.URL, NO, self, [[self class] imageOptionsFromDownloaderOptions:self.options], self.context); - if (image) { - // We do not keep the progressive decoding image even when `finished`=YES. Because they are for view rendering but not take full function from downloader options. And some coders implementation may not keep consistent between progressive decoding and normal decoding. - - [self callCompletionBlocksWithImage:image imageData:nil error:nil finished:NO]; - } - }]; - } - } - - for (SDWebImageDownloaderProgressBlock progressBlock in [self callbacksForKey:kProgressCallbackKey]) { - progressBlock(self.receivedSize, self.expectedSize, self.request.URL); - } -} - -- (void)URLSession:(NSURLSession *)session - dataTask:(NSURLSessionDataTask *)dataTask - willCacheResponse:(NSCachedURLResponse *)proposedResponse - completionHandler:(void (^)(NSCachedURLResponse *cachedResponse))completionHandler { - - NSCachedURLResponse *cachedResponse = proposedResponse; - - if (!(self.options & SDWebImageDownloaderUseNSURLCache)) { - // Prevents caching of responses - cachedResponse = nil; - } - if (completionHandler) { - completionHandler(cachedResponse); - } -} - -#pragma mark NSURLSessionTaskDelegate - -- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { - // If we already cancel the operation or anything mark the operation finished, don't callback twice - if (self.isFinished) return; - - @synchronized(self) { - self.dataTask = nil; - __block typeof(self) strongSelf = self; - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:strongSelf]; - if (!error) { - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadFinishNotification object:strongSelf]; - } - }); - } - - // make sure to call `[self done]` to mark operation as finished - if (error) { - // custom error instead of URLSession error - if (self.responseError) { - error = self.responseError; - } - [self callCompletionBlocksWithError:error]; - [self done]; - } else { - if ([self callbacksForKey:kCompletedCallbackKey].count > 0) { - NSData *imageData = self.imageData; - self.imageData = nil; - // data decryptor - if (imageData && self.decryptor) { - imageData = [self.decryptor decryptedDataWithData:imageData response:self.response]; - } - if (imageData) { - /** if you specified to only use cached data via `SDWebImageDownloaderIgnoreCachedResponse`, - * then we should check if the cached data is equal to image data - */ - if (self.options & SDWebImageDownloaderIgnoreCachedResponse && [self.cachedData isEqualToData:imageData]) { - self.responseError = [NSError errorWithDomain:SDWebImageErrorDomain - code:SDWebImageErrorCacheNotModified - userInfo:@{NSLocalizedDescriptionKey : @"Downloaded image is not modified and ignored", - SDWebImageErrorDownloadResponseKey : self.response}]; - // call completion block with not modified error - [self callCompletionBlocksWithError:self.responseError]; - [self done]; - } else { - // decode the image in coder queue, cancel all previous decoding process - [self.coderQueue cancelAllOperations]; - @weakify(self); - [self.coderQueue addOperationWithBlock:^{ - @strongify(self); - if (!self) { - return; - } - // check if we already use progressive decoding, use that to produce faster decoding - id progressiveCoder = SDImageLoaderGetProgressiveCoder(self); - UIImage *image; - if (progressiveCoder) { - image = SDImageLoaderDecodeProgressiveImageData(imageData, self.request.URL, YES, self, [[self class] imageOptionsFromDownloaderOptions:self.options], self.context); - } else { - image = SDImageLoaderDecodeImageData(imageData, self.request.URL, [[self class] imageOptionsFromDownloaderOptions:self.options], self.context); - } - CGSize imageSize = image.size; - if (imageSize.width == 0 || imageSize.height == 0) { - NSString *description = image == nil ? @"Downloaded image decode failed" : @"Downloaded image has 0 pixels"; - [self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorBadImageData userInfo:@{NSLocalizedDescriptionKey : description}]]; - } else { - [self callCompletionBlocksWithImage:image imageData:imageData error:nil finished:YES]; - } - [self done]; - }]; - } - } else { - [self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorBadImageData userInfo:@{NSLocalizedDescriptionKey : @"Image data is nil"}]]; - [self done]; - } - } else { - [self done]; - } - } -} - -- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler { - - NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling; - __block NSURLCredential *credential = nil; - - if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { - if (!(self.options & SDWebImageDownloaderAllowInvalidSSLCertificates)) { - disposition = NSURLSessionAuthChallengePerformDefaultHandling; - } else { - credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; - disposition = NSURLSessionAuthChallengeUseCredential; - } - } else { - if (challenge.previousFailureCount == 0) { - if (self.credential) { - credential = self.credential; - disposition = NSURLSessionAuthChallengeUseCredential; - } else { - // Web Server like Nginx can set `ssl_verify_client` to optional but not always on - // We'd better use default handling here - disposition = NSURLSessionAuthChallengePerformDefaultHandling; - } - } else { - disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; - } - } - - if (completionHandler) { - completionHandler(disposition, credential); - } -} - -- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)) { - self.metrics = metrics; -} - -#pragma mark Helper methods -+ (SDWebImageOptions)imageOptionsFromDownloaderOptions:(SDWebImageDownloaderOptions)downloadOptions { - SDWebImageOptions options = 0; - if (downloadOptions & SDWebImageDownloaderScaleDownLargeImages) options |= SDWebImageScaleDownLargeImages; - if (downloadOptions & SDWebImageDownloaderDecodeFirstFrameOnly) options |= SDWebImageDecodeFirstFrameOnly; - if (downloadOptions & SDWebImageDownloaderPreloadAllFrames) options |= SDWebImagePreloadAllFrames; - if (downloadOptions & SDWebImageDownloaderAvoidDecodeImage) options |= SDWebImageAvoidDecodeImage; - if (downloadOptions & SDWebImageDownloaderMatchAnimatedImageClass) options |= SDWebImageMatchAnimatedImageClass; - - return options; -} - -- (BOOL)shouldContinueWhenAppEntersBackground { - return SD_OPTIONS_CONTAINS(self.options, SDWebImageDownloaderContinueInBackground); -} - -- (void)callCompletionBlocksWithError:(nullable NSError *)error { - [self callCompletionBlocksWithImage:nil imageData:nil error:error finished:YES]; -} - -- (void)callCompletionBlocksWithImage:(nullable UIImage *)image - imageData:(nullable NSData *)imageData - error:(nullable NSError *)error - finished:(BOOL)finished { - NSArray *completionBlocks = [self callbacksForKey:kCompletedCallbackKey]; - dispatch_main_async_safe(^{ - for (SDWebImageDownloaderCompletedBlock completedBlock in completionBlocks) { - completedBlock(image, imageData, error, finished); - } - }); -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderRequestModifier.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderRequestModifier.h deleted file mode 100644 index 42c8a40..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderRequestModifier.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageCompat.h" - -typedef NSURLRequest * _Nullable (^SDWebImageDownloaderRequestModifierBlock)(NSURLRequest * _Nonnull request); - -/** - This is the protocol for downloader request modifier. - We can use a block to specify the downloader request modifier. But Using protocol can make this extensible, and allow Swift user to use it easily instead of using `@convention(block)` to store a block into context options. - */ -@protocol SDWebImageDownloaderRequestModifier - -/// Modify the original URL request and return a new one instead. You can modify the HTTP header, cachePolicy, etc for this URL. -/// @param request The original URL request for image loading -/// @note If return nil, the URL request will be cancelled. -- (nullable NSURLRequest *)modifiedRequestWithRequest:(nonnull NSURLRequest *)request; - -@end - -/** - A downloader request modifier class with block. - */ -@interface SDWebImageDownloaderRequestModifier : NSObject - -/// Create the request modifier with block -/// @param block A block to control modifier logic -- (nonnull instancetype)initWithBlock:(nonnull SDWebImageDownloaderRequestModifierBlock)block; - -/// Create the request modifier with block -/// @param block A block to control modifier logic -+ (nonnull instancetype)requestModifierWithBlock:(nonnull SDWebImageDownloaderRequestModifierBlock)block; - -@end - -/** -A convenient request modifier to provide the HTTP request including HTTP Method, Headers and Body. -*/ -@interface SDWebImageDownloaderRequestModifier (Conveniences) - -/// Create the request modifier with HTTP Method. -/// @param method HTTP Method, nil means to GET. -/// @note This is for convenience, if you need code to control the logic, use block API instead. -- (nonnull instancetype)initWithMethod:(nullable NSString *)method; - -/// Create the request modifier with HTTP Headers. -/// @param headers HTTP Headers. Case insensitive according to HTTP/1.1(HTTP/2) standard. The headers will override the same fields from original request. -/// @note This is for convenience, if you need code to control the logic, use block API instead. -- (nonnull instancetype)initWithHeaders:(nullable NSDictionary *)headers; - -/// Create the request modifier with HTTP Body. -/// @param body HTTP Body. -/// @note This is for convenience, if you need code to control the logic, use block API instead. -- (nonnull instancetype)initWithBody:(nullable NSData *)body; - -/// Create the request modifier with HTTP Method, Headers and Body. -/// @param method HTTP Method, nil means to GET. -/// @param headers HTTP Headers. Case insensitive according to HTTP/1.1(HTTP/2) standard. The headers will override the same fields from original request. -/// @param body HTTP Body. -/// @note This is for convenience, if you need code to control the logic, use block API instead. -- (nonnull instancetype)initWithMethod:(nullable NSString *)method headers:(nullable NSDictionary *)headers body:(nullable NSData *)body; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderRequestModifier.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderRequestModifier.m deleted file mode 100644 index c12c84f..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderRequestModifier.m +++ /dev/null @@ -1,71 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageDownloaderRequestModifier.h" - -@interface SDWebImageDownloaderRequestModifier () - -@property (nonatomic, copy, nonnull) SDWebImageDownloaderRequestModifierBlock block; - -@end - -@implementation SDWebImageDownloaderRequestModifier - -- (instancetype)initWithBlock:(SDWebImageDownloaderRequestModifierBlock)block { - self = [super init]; - if (self) { - self.block = block; - } - return self; -} - -+ (instancetype)requestModifierWithBlock:(SDWebImageDownloaderRequestModifierBlock)block { - SDWebImageDownloaderRequestModifier *requestModifier = [[SDWebImageDownloaderRequestModifier alloc] initWithBlock:block]; - return requestModifier; -} - -- (NSURLRequest *)modifiedRequestWithRequest:(NSURLRequest *)request { - if (!self.block) { - return nil; - } - return self.block(request); -} - -@end - -@implementation SDWebImageDownloaderRequestModifier (Conveniences) - -- (instancetype)initWithMethod:(NSString *)method { - return [self initWithMethod:method headers:nil body:nil]; -} - -- (instancetype)initWithHeaders:(NSDictionary *)headers { - return [self initWithMethod:nil headers:headers body:nil]; -} - -- (instancetype)initWithBody:(NSData *)body { - return [self initWithMethod:nil headers:nil body:body]; -} - -- (instancetype)initWithMethod:(NSString *)method headers:(NSDictionary *)headers body:(NSData *)body { - method = method ? [method copy] : @"GET"; - headers = [headers copy]; - body = [body copy]; - return [self initWithBlock:^NSURLRequest * _Nullable(NSURLRequest * _Nonnull request) { - NSMutableURLRequest *mutableRequest = [request mutableCopy]; - mutableRequest.HTTPMethod = method; - mutableRequest.HTTPBody = body; - for (NSString *header in headers) { - NSString *value = headers[header]; - [mutableRequest setValue:value forHTTPHeaderField:header]; - } - return [mutableRequest copy]; - }]; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderResponseModifier.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderResponseModifier.h deleted file mode 100644 index 63c1456..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderResponseModifier.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageCompat.h" - -typedef NSURLResponse * _Nullable (^SDWebImageDownloaderResponseModifierBlock)(NSURLResponse * _Nonnull response); - -/** - This is the protocol for downloader response modifier. - We can use a block to specify the downloader response modifier. But Using protocol can make this extensible, and allow Swift user to use it easily instead of using `@convention(block)` to store a block into context options. - */ -@protocol SDWebImageDownloaderResponseModifier - -/// Modify the original URL response and return a new response. You can use this to check MIME-Type, mock server response, etc. -/// @param response The original URL response, note for HTTP request it's actually a `NSHTTPURLResponse` instance -/// @note If nil is returned, the image download will marked as cancelled with error `SDWebImageErrorInvalidDownloadResponse` -- (nullable NSURLResponse *)modifiedResponseWithResponse:(nonnull NSURLResponse *)response; - -@end - -/** - A downloader response modifier class with block. - */ -@interface SDWebImageDownloaderResponseModifier : NSObject - -/// Create the response modifier with block -/// @param block A block to control modifier logic -- (nonnull instancetype)initWithBlock:(nonnull SDWebImageDownloaderResponseModifierBlock)block; - -/// Create the response modifier with block -/// @param block A block to control modifier logic -+ (nonnull instancetype)responseModifierWithBlock:(nonnull SDWebImageDownloaderResponseModifierBlock)block; - -@end - -/** -A convenient response modifier to provide the HTTP response including HTTP Status Code, Version and Headers. -*/ -@interface SDWebImageDownloaderResponseModifier (Conveniences) - -/// Create the response modifier with HTTP Status code. -/// @param statusCode HTTP Status Code. -/// @note This is for convenience, if you need code to control the logic, use block API instead. -- (nonnull instancetype)initWithStatusCode:(NSInteger)statusCode; - -/// Create the response modifier with HTTP Version. Status code defaults to 200. -/// @param version HTTP Version, nil means "HTTP/1.1". -/// @note This is for convenience, if you need code to control the logic, use block API instead. -- (nonnull instancetype)initWithVersion:(nullable NSString *)version; - -/// Create the response modifier with HTTP Headers. Status code defaults to 200. -/// @param headers HTTP Headers. Case insensitive according to HTTP/1.1(HTTP/2) standard. The headers will override the same fields from original response. -/// @note This is for convenience, if you need code to control the logic, use block API instead. -- (nonnull instancetype)initWithHeaders:(nullable NSDictionary *)headers; - -/// Create the response modifier with HTTP Status Code, Version and Headers. -/// @param statusCode HTTP Status Code. -/// @param version HTTP Version, nil means "HTTP/1.1". -/// @param headers HTTP Headers. Case insensitive according to HTTP/1.1(HTTP/2) standard. The headers will override the same fields from original response. -/// @note This is for convenience, if you need code to control the logic, use block API instead. -- (nonnull instancetype)initWithStatusCode:(NSInteger)statusCode version:(nullable NSString *)version headers:(nullable NSDictionary *)headers; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderResponseModifier.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderResponseModifier.m deleted file mode 100644 index 6acf02a..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderResponseModifier.m +++ /dev/null @@ -1,73 +0,0 @@ -/* -* This file is part of the SDWebImage package. -* (c) Olivier Poitrey -* -* For the full copyright and license information, please view the LICENSE -* file that was distributed with this source code. -*/ - - -#import "SDWebImageDownloaderResponseModifier.h" - -@interface SDWebImageDownloaderResponseModifier () - -@property (nonatomic, copy, nonnull) SDWebImageDownloaderResponseModifierBlock block; - -@end - -@implementation SDWebImageDownloaderResponseModifier - -- (instancetype)initWithBlock:(SDWebImageDownloaderResponseModifierBlock)block { - self = [super init]; - if (self) { - self.block = block; - } - return self; -} - -+ (instancetype)responseModifierWithBlock:(SDWebImageDownloaderResponseModifierBlock)block { - SDWebImageDownloaderResponseModifier *responseModifier = [[SDWebImageDownloaderResponseModifier alloc] initWithBlock:block]; - return responseModifier; -} - -- (nullable NSURLResponse *)modifiedResponseWithResponse:(nonnull NSURLResponse *)response { - if (!self.block) { - return nil; - } - return self.block(response); -} - -@end - -@implementation SDWebImageDownloaderResponseModifier (Conveniences) - -- (instancetype)initWithStatusCode:(NSInteger)statusCode { - return [self initWithStatusCode:statusCode version:nil headers:nil]; -} - -- (instancetype)initWithVersion:(NSString *)version { - return [self initWithStatusCode:200 version:version headers:nil]; -} - -- (instancetype)initWithHeaders:(NSDictionary *)headers { - return [self initWithStatusCode:200 version:nil headers:headers]; -} - -- (instancetype)initWithStatusCode:(NSInteger)statusCode version:(NSString *)version headers:(NSDictionary *)headers { - version = version ? [version copy] : @"HTTP/1.1"; - headers = [headers copy]; - return [self initWithBlock:^NSURLResponse * _Nullable(NSURLResponse * _Nonnull response) { - if (![response isKindOfClass:NSHTTPURLResponse.class]) { - return response; - } - NSMutableDictionary *mutableHeaders = [((NSHTTPURLResponse *)response).allHeaderFields mutableCopy]; - for (NSString *header in headers) { - NSString *value = headers[header]; - mutableHeaders[header] = value; - } - NSHTTPURLResponse *httpResponse = [[NSHTTPURLResponse alloc] initWithURL:response.URL statusCode:statusCode HTTPVersion:version headerFields:[mutableHeaders copy]]; - return httpResponse; - }]; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageError.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageError.h deleted file mode 100644 index bb91d0b..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageError.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * (c) Jamie Pinkham - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" - -FOUNDATION_EXPORT NSErrorDomain const _Nonnull SDWebImageErrorDomain; - -/// The response instance for invalid download response (NSURLResponse *) -FOUNDATION_EXPORT NSErrorUserInfoKey const _Nonnull SDWebImageErrorDownloadResponseKey; -/// The HTTP status code for invalid download response (NSNumber *) -FOUNDATION_EXPORT NSErrorUserInfoKey const _Nonnull SDWebImageErrorDownloadStatusCodeKey; -/// The HTTP MIME content type for invalid download response (NSString *) -FOUNDATION_EXPORT NSErrorUserInfoKey const _Nonnull SDWebImageErrorDownloadContentTypeKey; - -/// SDWebImage error domain and codes -typedef NS_ERROR_ENUM(SDWebImageErrorDomain, SDWebImageError) { - SDWebImageErrorInvalidURL = 1000, // The URL is invalid, such as nil URL or corrupted URL - SDWebImageErrorBadImageData = 1001, // The image data can not be decoded to image, or the image data is empty - SDWebImageErrorCacheNotModified = 1002, // The remote location specify that the cached image is not modified, such as the HTTP response 304 code. It's useful for `SDWebImageRefreshCached` - SDWebImageErrorBlackListed = 1003, // The URL is blacklisted because of unrecoverable failure marked by downloader (such as 404), you can use `.retryFailed` option to avoid this - SDWebImageErrorInvalidDownloadOperation = 2000, // The image download operation is invalid, such as nil operation or unexpected error occur when operation initialized - SDWebImageErrorInvalidDownloadStatusCode = 2001, // The image download response a invalid status code. You can check the status code in error's userInfo under `SDWebImageErrorDownloadStatusCodeKey` - SDWebImageErrorCancelled = 2002, // The image loading operation is cancelled before finished, during either async disk cache query, or waiting before actual network request. For actual network request error, check `NSURLErrorDomain` error domain and code. - SDWebImageErrorInvalidDownloadResponse = 2003, // When using response modifier, the modified download response is nil and marked as failed. - SDWebImageErrorInvalidDownloadContentType = 2004, // The image download response a invalid content type. You can check the MIME content type in error's userInfo under `SDWebImageErrorDownloadContentTypeKey` -}; diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageError.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageError.m deleted file mode 100644 index bd0d17a..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageError.m +++ /dev/null @@ -1,16 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * (c) Jamie Pinkham - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageError.h" - -NSErrorDomain const _Nonnull SDWebImageErrorDomain = @"SDWebImageErrorDomain"; - -NSErrorUserInfoKey const _Nonnull SDWebImageErrorDownloadResponseKey = @"SDWebImageErrorDownloadResponseKey"; -NSErrorUserInfoKey const _Nonnull SDWebImageErrorDownloadStatusCodeKey = @"SDWebImageErrorDownloadStatusCodeKey"; -NSErrorUserInfoKey const _Nonnull SDWebImageErrorDownloadContentTypeKey = @"SDWebImageErrorDownloadContentTypeKey"; diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageIndicator.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageIndicator.h deleted file mode 100644 index e1165c1..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageIndicator.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" - -#if SD_UIKIT || SD_MAC - -/** - A protocol to custom the indicator during the image loading. - All of these methods are called from main queue. - */ -@protocol SDWebImageIndicator - -@required -/** - The view associate to the indicator. - - @return The indicator view - */ -@property (nonatomic, strong, readonly, nonnull) UIView *indicatorView; - -/** - Start the animating for indicator. - */ -- (void)startAnimatingIndicator; - -/** - Stop the animating for indicator. - */ -- (void)stopAnimatingIndicator; - -@optional -/** - Update the loading progress (0-1.0) for indicator. Optional - - @param progress The progress, value between 0 and 1.0 - */ -- (void)updateIndicatorProgress:(double)progress; - -@end - -#pragma mark - Activity Indicator - -/** - Activity indicator class. - for UIKit(macOS), it use a `UIActivityIndicatorView`. - for AppKit(macOS), it use a `NSProgressIndicator` with the spinning style. - */ -@interface SDWebImageActivityIndicator : NSObject - -#if SD_UIKIT -@property (nonatomic, strong, readonly, nonnull) UIActivityIndicatorView *indicatorView; -#else -@property (nonatomic, strong, readonly, nonnull) NSProgressIndicator *indicatorView; -#endif - -@end - -/** - Convenience way to use activity indicator. - */ -@interface SDWebImageActivityIndicator (Conveniences) - -/// These indicator use the fixed color without dark mode support -/// gray-style activity indicator -@property (nonatomic, class, nonnull, readonly) SDWebImageActivityIndicator *grayIndicator; -/// large gray-style activity indicator -@property (nonatomic, class, nonnull, readonly) SDWebImageActivityIndicator *grayLargeIndicator; -/// white-style activity indicator -@property (nonatomic, class, nonnull, readonly) SDWebImageActivityIndicator *whiteIndicator; -/// large white-style activity indicator -@property (nonatomic, class, nonnull, readonly) SDWebImageActivityIndicator *whiteLargeIndicator; -/// These indicator use the system style, supports dark mode if available (iOS 13+/macOS 10.14+) -/// large activity indicator -@property (nonatomic, class, nonnull, readonly) SDWebImageActivityIndicator *largeIndicator; -/// medium activity indicator -@property (nonatomic, class, nonnull, readonly) SDWebImageActivityIndicator *mediumIndicator; - -@end - -#pragma mark - Progress Indicator - -/** - Progress indicator class. - for UIKit(macOS), it use a `UIProgressView`. - for AppKit(macOS), it use a `NSProgressIndicator` with the bar style. - */ -@interface SDWebImageProgressIndicator : NSObject - -#if SD_UIKIT -@property (nonatomic, strong, readonly, nonnull) UIProgressView *indicatorView; -#else -@property (nonatomic, strong, readonly, nonnull) NSProgressIndicator *indicatorView; -#endif - -@end - -/** - Convenience way to create progress indicator. Remember to specify the indicator width or use layout constraint if need. - */ -@interface SDWebImageProgressIndicator (Conveniences) - -/// default-style progress indicator -@property (nonatomic, class, nonnull, readonly) SDWebImageProgressIndicator *defaultIndicator; -/// bar-style progress indicator -@property (nonatomic, class, nonnull, readonly) SDWebImageProgressIndicator *barIndicator API_UNAVAILABLE(macos, tvos); - -@end - -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageIndicator.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageIndicator.m deleted file mode 100644 index b45a08a..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageIndicator.m +++ /dev/null @@ -1,275 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageIndicator.h" - -#if SD_UIKIT || SD_MAC - -#if SD_MAC -#import -#import -#endif - -#pragma mark - Activity Indicator - -@interface SDWebImageActivityIndicator () - -#if SD_UIKIT -@property (nonatomic, strong, readwrite, nonnull) UIActivityIndicatorView *indicatorView; -#else -@property (nonatomic, strong, readwrite, nonnull) NSProgressIndicator *indicatorView; -#endif - -@end - -@implementation SDWebImageActivityIndicator - -- (instancetype)init { - self = [super init]; - if (self) { - [self commonInit]; - } - return self; -} - -#if SD_UIKIT -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" -- (void)commonInit { - self.indicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; - self.indicatorView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin; -} -#pragma clang diagnostic pop -#endif - -#if SD_MAC -- (void)commonInit { - self.indicatorView = [[NSProgressIndicator alloc] initWithFrame:NSZeroRect]; - self.indicatorView.style = NSProgressIndicatorStyleSpinning; - self.indicatorView.controlSize = NSControlSizeSmall; - [self.indicatorView sizeToFit]; - self.indicatorView.autoresizingMask = NSViewMaxXMargin | NSViewMinXMargin | NSViewMaxYMargin | NSViewMinYMargin; -} -#endif - -- (void)startAnimatingIndicator { -#if SD_UIKIT - [self.indicatorView startAnimating]; -#else - [self.indicatorView startAnimation:nil]; -#endif - self.indicatorView.hidden = NO; -} - -- (void)stopAnimatingIndicator { -#if SD_UIKIT - [self.indicatorView stopAnimating]; -#else - [self.indicatorView stopAnimation:nil]; -#endif - self.indicatorView.hidden = YES; -} - -@end - -@implementation SDWebImageActivityIndicator (Conveniences) - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" -+ (SDWebImageActivityIndicator *)grayIndicator { - SDWebImageActivityIndicator *indicator = [SDWebImageActivityIndicator new]; -#if SD_UIKIT -#if SD_IOS - indicator.indicatorView.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray; -#else - indicator.indicatorView.color = [UIColor colorWithWhite:0 alpha:0.45]; // Color from `UIActivityIndicatorViewStyleGray` -#endif -#else - indicator.indicatorView.appearance = [NSAppearance appearanceNamed:NSAppearanceNameAqua]; // Disable dark mode support -#endif - return indicator; -} - -+ (SDWebImageActivityIndicator *)grayLargeIndicator { - SDWebImageActivityIndicator *indicator = SDWebImageActivityIndicator.grayIndicator; -#if SD_UIKIT - UIColor *grayColor = indicator.indicatorView.color; - indicator.indicatorView.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge; - indicator.indicatorView.color = grayColor; -#else - indicator.indicatorView.appearance = [NSAppearance appearanceNamed:NSAppearanceNameAqua]; // Disable dark mode support - indicator.indicatorView.controlSize = NSControlSizeRegular; -#endif - [indicator.indicatorView sizeToFit]; - return indicator; -} - -+ (SDWebImageActivityIndicator *)whiteIndicator { - SDWebImageActivityIndicator *indicator = [SDWebImageActivityIndicator new]; -#if SD_UIKIT - indicator.indicatorView.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite; -#else - indicator.indicatorView.appearance = [NSAppearance appearanceNamed:NSAppearanceNameAqua]; // Disable dark mode support - CIFilter *lighten = [CIFilter filterWithName:@"CIColorControls"]; - [lighten setDefaults]; - [lighten setValue:@(1) forKey:kCIInputBrightnessKey]; - indicator.indicatorView.contentFilters = @[lighten]; -#endif - return indicator; -} - -+ (SDWebImageActivityIndicator *)whiteLargeIndicator { - SDWebImageActivityIndicator *indicator = SDWebImageActivityIndicator.whiteIndicator; -#if SD_UIKIT - indicator.indicatorView.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge; -#else - indicator.indicatorView.appearance = [NSAppearance appearanceNamed:NSAppearanceNameAqua]; // Disable dark mode support - indicator.indicatorView.controlSize = NSControlSizeRegular; - [indicator.indicatorView sizeToFit]; -#endif - return indicator; -} - -+ (SDWebImageActivityIndicator *)largeIndicator { - SDWebImageActivityIndicator *indicator = [SDWebImageActivityIndicator new]; -#if SD_UIKIT - if (@available(iOS 13.0, tvOS 13.0, *)) { - indicator.indicatorView.activityIndicatorViewStyle = UIActivityIndicatorViewStyleLarge; - } else { - indicator.indicatorView.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge; - } -#else - indicator.indicatorView.controlSize = NSControlSizeRegular; - [indicator.indicatorView sizeToFit]; -#endif - return indicator; -} - -+ (SDWebImageActivityIndicator *)mediumIndicator { - SDWebImageActivityIndicator *indicator = [SDWebImageActivityIndicator new]; -#if SD_UIKIT - if (@available(iOS 13.0, tvOS 13.0, *)) { - indicator.indicatorView.activityIndicatorViewStyle = UIActivityIndicatorViewStyleMedium; - } else { - indicator.indicatorView.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite; - } -#else - indicator.indicatorView.controlSize = NSControlSizeSmall; - [indicator.indicatorView sizeToFit]; -#endif - return indicator; -} -#pragma clang diagnostic pop - -@end - -#pragma mark - Progress Indicator - -@interface SDWebImageProgressIndicator () - -#if SD_UIKIT -@property (nonatomic, strong, readwrite, nonnull) UIProgressView *indicatorView; -#else -@property (nonatomic, strong, readwrite, nonnull) NSProgressIndicator *indicatorView; -#endif - -@end - -@implementation SDWebImageProgressIndicator - -- (instancetype)init { - self = [super init]; - if (self) { - [self commonInit]; - } - return self; -} - -#if SD_UIKIT -- (void)commonInit { - self.indicatorView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault]; - self.indicatorView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin; -} -#endif - -#if SD_MAC -- (void)commonInit { - self.indicatorView = [[NSProgressIndicator alloc] initWithFrame:NSMakeRect(0, 0, 160, 0)]; // Width from `UIProgressView` default width - self.indicatorView.style = NSProgressIndicatorStyleBar; - self.indicatorView.controlSize = NSControlSizeSmall; - [self.indicatorView sizeToFit]; - self.indicatorView.autoresizingMask = NSViewMaxXMargin | NSViewMinXMargin | NSViewMaxYMargin | NSViewMinYMargin; -} -#endif - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunguarded-availability" -- (void)startAnimatingIndicator { - self.indicatorView.hidden = NO; -#if SD_UIKIT - if ([self.indicatorView respondsToSelector:@selector(observedProgress)] && self.indicatorView.observedProgress) { - // Ignore NSProgress - } else { - self.indicatorView.progress = 0; - } -#else - self.indicatorView.indeterminate = YES; - self.indicatorView.doubleValue = 0; - [self.indicatorView startAnimation:nil]; -#endif -} - -- (void)stopAnimatingIndicator { - self.indicatorView.hidden = YES; -#if SD_UIKIT - if ([self.indicatorView respondsToSelector:@selector(observedProgress)] && self.indicatorView.observedProgress) { - // Ignore NSProgress - } else { - self.indicatorView.progress = 1; - } -#else - self.indicatorView.indeterminate = NO; - self.indicatorView.doubleValue = 100; - [self.indicatorView stopAnimation:nil]; -#endif -} - -- (void)updateIndicatorProgress:(double)progress { -#if SD_UIKIT - if ([self.indicatorView respondsToSelector:@selector(observedProgress)] && self.indicatorView.observedProgress) { - // Ignore NSProgress - } else { - [self.indicatorView setProgress:progress animated:YES]; - } -#else - self.indicatorView.indeterminate = progress > 0 ? NO : YES; - self.indicatorView.doubleValue = progress * 100; -#endif -} -#pragma clang diagnostic pop - -@end - -@implementation SDWebImageProgressIndicator (Conveniences) - -+ (SDWebImageProgressIndicator *)defaultIndicator { - SDWebImageProgressIndicator *indicator = [SDWebImageProgressIndicator new]; - return indicator; -} - -#if SD_IOS -+ (SDWebImageProgressIndicator *)barIndicator { - SDWebImageProgressIndicator *indicator = [SDWebImageProgressIndicator new]; - indicator.indicatorView.progressViewStyle = UIProgressViewStyleBar; - return indicator; -} -#endif - -@end - -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageManager.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageManager.h deleted file mode 100644 index ee90724..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageManager.h +++ /dev/null @@ -1,287 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" -#import "SDWebImageOperation.h" -#import "SDImageCacheDefine.h" -#import "SDImageLoader.h" -#import "SDImageTransformer.h" -#import "SDWebImageCacheKeyFilter.h" -#import "SDWebImageCacheSerializer.h" -#import "SDWebImageOptionsProcessor.h" - -typedef void(^SDExternalCompletionBlock)(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL); - -typedef void(^SDInternalCompletionBlock)(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL); - -/** - A combined operation representing the cache and loader operation. You can use it to cancel the load process. - */ -@interface SDWebImageCombinedOperation : NSObject - -/** - Cancel the current operation, including cache and loader process - */ -- (void)cancel; - -/** - The cache operation from the image cache query - */ -@property (strong, nonatomic, nullable, readonly) id cacheOperation; - -/** - The loader operation from the image loader (such as download operation) - */ -@property (strong, nonatomic, nullable, readonly) id loaderOperation; - -@end - - -@class SDWebImageManager; - -/** - The manager delegate protocol. - */ -@protocol SDWebImageManagerDelegate - -@optional - -/** - * Controls which image should be downloaded when the image is not found in the cache. - * - * @param imageManager The current `SDWebImageManager` - * @param imageURL The url of the image to be downloaded - * - * @return Return NO to prevent the downloading of the image on cache misses. If not implemented, YES is implied. - */ -- (BOOL)imageManager:(nonnull SDWebImageManager *)imageManager shouldDownloadImageForURL:(nonnull NSURL *)imageURL; - -/** - * Controls the complicated logic to mark as failed URLs when download error occur. - * If the delegate implement this method, we will not use the built-in way to mark URL as failed based on error code; - @param imageManager The current `SDWebImageManager` - @param imageURL The url of the image - @param error The download error for the url - @return Whether to block this url or not. Return YES to mark this URL as failed. - */ -- (BOOL)imageManager:(nonnull SDWebImageManager *)imageManager shouldBlockFailedURL:(nonnull NSURL *)imageURL withError:(nonnull NSError *)error; - -@end - -/** - * The SDWebImageManager is the class behind the UIImageView+WebCache category and likes. - * It ties the asynchronous downloader (SDWebImageDownloader) with the image cache store (SDImageCache). - * You can use this class directly to benefit from web image downloading with caching in another context than - * a UIView. - * - * Here is a simple example of how to use SDWebImageManager: - * - * @code - -SDWebImageManager *manager = [SDWebImageManager sharedManager]; -[manager loadImageWithURL:imageURL - options:0 - progress:nil - completed:^(UIImage *image, NSData *data, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { - if (image) { - // do something with image - } - }]; - - * @endcode - */ -@interface SDWebImageManager : NSObject - -/** - * The delegate for manager. Defaults to nil. - */ -@property (weak, nonatomic, nullable) id delegate; - -/** - * The image cache used by manager to query image cache. - */ -@property (strong, nonatomic, readonly, nonnull) id imageCache; - -/** - * The image loader used by manager to load image. - */ -@property (strong, nonatomic, readonly, nonnull) id imageLoader; - -/** - The image transformer for manager. It's used for image transform after the image load finished and store the transformed image to cache, see `SDImageTransformer`. - Defaults to nil, which means no transform is applied. - @note This will affect all the load requests for this manager if you provide. However, you can pass `SDWebImageContextImageTransformer` in context arg to explicitly use that transformer instead. - */ -@property (strong, nonatomic, nullable) id transformer; - -/** - * The cache filter is used to convert an URL into a cache key each time SDWebImageManager need cache key to use image cache. - * - * The following example sets a filter in the application delegate that will remove any query-string from the - * URL before to use it as a cache key: - * - * @code - SDWebImageManager.sharedManager.cacheKeyFilter =[SDWebImageCacheKeyFilter cacheKeyFilterWithBlock:^NSString * _Nullable(NSURL * _Nonnull url) { - url = [[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path]; - return [url absoluteString]; - }]; - * @endcode - */ -@property (nonatomic, strong, nullable) id cacheKeyFilter; - -/** - * The cache serializer is used to convert the decoded image, the source downloaded data, to the actual data used for storing to the disk cache. If you return nil, means to generate the data from the image instance, see `SDImageCache`. - * For example, if you are using WebP images and facing the slow decoding time issue when later retrieving from disk cache again. You can try to encode the decoded image to JPEG/PNG format to disk cache instead of source downloaded data. - * @note The `image` arg is nonnull, but when you also provide an image transformer and the image is transformed, the `data` arg may be nil, take attention to this case. - * @note This method is called from a global queue in order to not to block the main thread. - * @code - SDWebImageManager.sharedManager.cacheSerializer = [SDWebImageCacheSerializer cacheSerializerWithBlock:^NSData * _Nullable(UIImage * _Nonnull image, NSData * _Nullable data, NSURL * _Nullable imageURL) { - SDImageFormat format = [NSData sd_imageFormatForImageData:data]; - switch (format) { - case SDImageFormatWebP: - return image.images ? data : nil; - default: - return data; - } -}]; - * @endcode - * The default value is nil. Means we just store the source downloaded data to disk cache. - */ -@property (nonatomic, strong, nullable) id cacheSerializer; - -/** - The options processor is used, to have a global control for all the image request options and context option for current manager. - @note If you use `transformer`, `cacheKeyFilter` or `cacheSerializer` property of manager, the input context option already apply those properties before passed. This options processor is a better replacement for those property in common usage. - For example, you can control the global options, based on the URL or original context option like the below code. - - @code - SDWebImageManager.sharedManager.optionsProcessor = [SDWebImageOptionsProcessor optionsProcessorWithBlock:^SDWebImageOptionsResult * _Nullable(NSURL * _Nullable url, SDWebImageOptions options, SDWebImageContext * _Nullable context) { - // Only do animation on `SDAnimatedImageView` - if (!context[SDWebImageContextAnimatedImageClass]) { - options |= SDWebImageDecodeFirstFrameOnly; - } - // Do not force decode for png url - if ([url.lastPathComponent isEqualToString:@"png"]) { - options |= SDWebImageAvoidDecodeImage; - } - // Always use screen scale factor - SDWebImageMutableContext *mutableContext = [NSDictionary dictionaryWithDictionary:context]; - mutableContext[SDWebImageContextImageScaleFactor] = @(UIScreen.mainScreen.scale); - context = [mutableContext copy]; - - return [[SDWebImageOptionsResult alloc] initWithOptions:options context:context]; - }]; - @endcode - */ -@property (nonatomic, strong, nullable) id optionsProcessor; - -/** - * Check one or more operations running - */ -@property (nonatomic, assign, readonly, getter=isRunning) BOOL running; - -/** - The default image cache when the manager which is created with no arguments. Such as shared manager or init. - Defaults to nil. Means using `SDImageCache.sharedImageCache` - */ -@property (nonatomic, class, nullable) id defaultImageCache; - -/** - The default image loader for manager which is created with no arguments. Such as shared manager or init. - Defaults to nil. Means using `SDWebImageDownloader.sharedDownloader` - */ -@property (nonatomic, class, nullable) id defaultImageLoader; - -/** - * Returns global shared manager instance. - */ -@property (nonatomic, class, readonly, nonnull) SDWebImageManager *sharedManager; - -/** - * Allows to specify instance of cache and image loader used with image manager. - * @return new instance of `SDWebImageManager` with specified cache and loader. - */ -- (nonnull instancetype)initWithCache:(nonnull id)cache loader:(nonnull id)loader NS_DESIGNATED_INITIALIZER; - -/** - * Downloads the image at the given URL if not present in cache or return the cached version otherwise. - * - * @param url The URL to the image - * @param options A mask to specify options to use for this request - * @param progressBlock A block called while image is downloading - * @note the progress block is executed on a background queue - * @param completedBlock A block called when operation has been completed. - * - * This parameter is required. - * - * This block has no return value and takes the requested UIImage as first parameter and the NSData representation as second parameter. - * In case of error the image parameter is nil and the third parameter may contain an NSError. - * - * The forth parameter is an `SDImageCacheType` enum indicating if the image was retrieved from the local cache - * or from the memory cache or from the network. - * - * The fifth parameter is set to NO when the SDWebImageProgressiveLoad option is used and the image is - * downloading. This block is thus called repeatedly with a partial image. When image is fully downloaded, the - * block is called a last time with the full image and the last parameter set to YES. - * - * The last parameter is the original image URL - * - * @return Returns an instance of SDWebImageCombinedOperation, which you can cancel the loading process. - */ -- (nullable SDWebImageCombinedOperation *)loadImageWithURL:(nullable NSURL *)url - options:(SDWebImageOptions)options - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nonnull SDInternalCompletionBlock)completedBlock; - -/** - * Downloads the image at the given URL if not present in cache or return the cached version otherwise. - * - * @param url The URL to the image - * @param options A mask to specify options to use for this request - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - * @param progressBlock A block called while image is downloading - * @note the progress block is executed on a background queue - * @param completedBlock A block called when operation has been completed. - * - * @return Returns an instance of SDWebImageCombinedOperation, which you can cancel the loading process. - */ -- (nullable SDWebImageCombinedOperation *)loadImageWithURL:(nullable NSURL *)url - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nonnull SDInternalCompletionBlock)completedBlock; - -/** - * Cancel all current operations - */ -- (void)cancelAll; - -/** - * Remove the specify URL from failed black list. - * @param url The failed URL. - */ -- (void)removeFailedURL:(nonnull NSURL *)url; - -/** - * Remove all the URL from failed black list. - */ -- (void)removeAllFailedURLs; - -/** - * Return the cache key for a given URL, does not considerate transformer or thumbnail. - * @note This method does not have context option, only use the url and manager level cacheKeyFilter to generate the cache key. - */ -- (nullable NSString *)cacheKeyForURL:(nullable NSURL *)url; - -/** - * Return the cache key for a given URL and context option. - * @note The context option like `.thumbnailPixelSize` and `.imageTransformer` will effect the generated cache key, using this if you have those context associated. -*/ -- (nullable NSString *)cacheKeyForURL:(nullable NSURL *)url context:(nullable SDWebImageContext *)context; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageManager.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageManager.m deleted file mode 100644 index 3b29632..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageManager.m +++ /dev/null @@ -1,824 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageManager.h" -#import "SDImageCache.h" -#import "SDWebImageDownloader.h" -#import "UIImage+Metadata.h" -#import "SDAssociatedObject.h" -#import "SDWebImageError.h" -#import "SDInternalMacros.h" - -static id _defaultImageCache; -static id _defaultImageLoader; - -@interface SDWebImageCombinedOperation () - -@property (assign, nonatomic, getter = isCancelled) BOOL cancelled; -@property (strong, nonatomic, readwrite, nullable) id loaderOperation; -@property (strong, nonatomic, readwrite, nullable) id cacheOperation; -@property (weak, nonatomic, nullable) SDWebImageManager *manager; - -@end - -@interface SDWebImageManager () { - SD_LOCK_DECLARE(_failedURLsLock); // a lock to keep the access to `failedURLs` thread-safe - SD_LOCK_DECLARE(_runningOperationsLock); // a lock to keep the access to `runningOperations` thread-safe -} - -@property (strong, nonatomic, readwrite, nonnull) SDImageCache *imageCache; -@property (strong, nonatomic, readwrite, nonnull) id imageLoader; -@property (strong, nonatomic, nonnull) NSMutableSet *failedURLs; -@property (strong, nonatomic, nonnull) NSMutableSet *runningOperations; - -@end - -@implementation SDWebImageManager - -+ (id)defaultImageCache { - return _defaultImageCache; -} - -+ (void)setDefaultImageCache:(id)defaultImageCache { - if (defaultImageCache && ![defaultImageCache conformsToProtocol:@protocol(SDImageCache)]) { - return; - } - _defaultImageCache = defaultImageCache; -} - -+ (id)defaultImageLoader { - return _defaultImageLoader; -} - -+ (void)setDefaultImageLoader:(id)defaultImageLoader { - if (defaultImageLoader && ![defaultImageLoader conformsToProtocol:@protocol(SDImageLoader)]) { - return; - } - _defaultImageLoader = defaultImageLoader; -} - -+ (nonnull instancetype)sharedManager { - static dispatch_once_t once; - static id instance; - dispatch_once(&once, ^{ - instance = [self new]; - }); - return instance; -} - -- (nonnull instancetype)init { - id cache = [[self class] defaultImageCache]; - if (!cache) { - cache = [SDImageCache sharedImageCache]; - } - id loader = [[self class] defaultImageLoader]; - if (!loader) { - loader = [SDWebImageDownloader sharedDownloader]; - } - return [self initWithCache:cache loader:loader]; -} - -- (nonnull instancetype)initWithCache:(nonnull id)cache loader:(nonnull id)loader { - if ((self = [super init])) { - _imageCache = cache; - _imageLoader = loader; - _failedURLs = [NSMutableSet new]; - SD_LOCK_INIT(_failedURLsLock); - _runningOperations = [NSMutableSet new]; - SD_LOCK_INIT(_runningOperationsLock); - } - return self; -} - -- (nullable NSString *)cacheKeyForURL:(nullable NSURL *)url { - if (!url) { - return @""; - } - - NSString *key; - // Cache Key Filter - id cacheKeyFilter = self.cacheKeyFilter; - if (cacheKeyFilter) { - key = [cacheKeyFilter cacheKeyForURL:url]; - } else { - key = url.absoluteString; - } - - return key; -} - -- (nullable NSString *)originalCacheKeyForURL:(nullable NSURL *)url context:(nullable SDWebImageContext *)context { - if (!url) { - return @""; - } - - NSString *key; - // Cache Key Filter - id cacheKeyFilter = self.cacheKeyFilter; - if (context[SDWebImageContextCacheKeyFilter]) { - cacheKeyFilter = context[SDWebImageContextCacheKeyFilter]; - } - if (cacheKeyFilter) { - key = [cacheKeyFilter cacheKeyForURL:url]; - } else { - key = url.absoluteString; - } - - return key; -} - -- (nullable NSString *)cacheKeyForURL:(nullable NSURL *)url context:(nullable SDWebImageContext *)context { - if (!url) { - return @""; - } - - NSString *key; - // Cache Key Filter - id cacheKeyFilter = self.cacheKeyFilter; - if (context[SDWebImageContextCacheKeyFilter]) { - cacheKeyFilter = context[SDWebImageContextCacheKeyFilter]; - } - if (cacheKeyFilter) { - key = [cacheKeyFilter cacheKeyForURL:url]; - } else { - key = url.absoluteString; - } - - // Thumbnail Key Appending - NSValue *thumbnailSizeValue = context[SDWebImageContextImageThumbnailPixelSize]; - if (thumbnailSizeValue != nil) { - CGSize thumbnailSize = CGSizeZero; -#if SD_MAC - thumbnailSize = thumbnailSizeValue.sizeValue; -#else - thumbnailSize = thumbnailSizeValue.CGSizeValue; -#endif - BOOL preserveAspectRatio = YES; - NSNumber *preserveAspectRatioValue = context[SDWebImageContextImagePreserveAspectRatio]; - if (preserveAspectRatioValue != nil) { - preserveAspectRatio = preserveAspectRatioValue.boolValue; - } - key = SDThumbnailedKeyForKey(key, thumbnailSize, preserveAspectRatio); - } - - // Transformer Key Appending - id transformer = self.transformer; - if (context[SDWebImageContextImageTransformer]) { - transformer = context[SDWebImageContextImageTransformer]; - if (![transformer conformsToProtocol:@protocol(SDImageTransformer)]) { - transformer = nil; - } - } - if (transformer) { - key = SDTransformedKeyForKey(key, transformer.transformerKey); - } - - return key; -} - -- (SDWebImageCombinedOperation *)loadImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDImageLoaderProgressBlock)progressBlock completed:(SDInternalCompletionBlock)completedBlock { - return [self loadImageWithURL:url options:options context:nil progress:progressBlock completed:completedBlock]; -} - -- (SDWebImageCombinedOperation *)loadImageWithURL:(nullable NSURL *)url - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nonnull SDInternalCompletionBlock)completedBlock { - // Invoking this method without a completedBlock is pointless - NSAssert(completedBlock != nil, @"If you mean to prefetch the image, use -[SDWebImagePrefetcher prefetchURLs] instead"); - - // Very common mistake is to send the URL using NSString object instead of NSURL. For some strange reason, Xcode won't - // throw any warning for this type mismatch. Here we failsafe this error by allowing URLs to be passed as NSString. - if ([url isKindOfClass:NSString.class]) { - url = [NSURL URLWithString:(NSString *)url]; - } - - // Prevents app crashing on argument type error like sending NSNull instead of NSURL - if (![url isKindOfClass:NSURL.class]) { - url = nil; - } - - SDWebImageCombinedOperation *operation = [SDWebImageCombinedOperation new]; - operation.manager = self; - - BOOL isFailedUrl = NO; - if (url) { - SD_LOCK(_failedURLsLock); - isFailedUrl = [self.failedURLs containsObject:url]; - SD_UNLOCK(_failedURLsLock); - } - - if (url.absoluteString.length == 0 || (!(options & SDWebImageRetryFailed) && isFailedUrl)) { - NSString *description = isFailedUrl ? @"Image url is blacklisted" : @"Image url is nil"; - NSInteger code = isFailedUrl ? SDWebImageErrorBlackListed : SDWebImageErrorInvalidURL; - [self callCompletionBlockForOperation:operation completion:completedBlock error:[NSError errorWithDomain:SDWebImageErrorDomain code:code userInfo:@{NSLocalizedDescriptionKey : description}] url:url]; - return operation; - } - - SD_LOCK(_runningOperationsLock); - [self.runningOperations addObject:operation]; - SD_UNLOCK(_runningOperationsLock); - - // Preprocess the options and context arg to decide the final the result for manager - SDWebImageOptionsResult *result = [self processedResultForURL:url options:options context:context]; - - // Start the entry to load image from cache - [self callCacheProcessForOperation:operation url:url options:result.options context:result.context progress:progressBlock completed:completedBlock]; - - return operation; -} - -- (void)cancelAll { - SD_LOCK(_runningOperationsLock); - NSSet *copiedOperations = [self.runningOperations copy]; - SD_UNLOCK(_runningOperationsLock); - [copiedOperations makeObjectsPerformSelector:@selector(cancel)]; // This will call `safelyRemoveOperationFromRunning:` and remove from the array -} - -- (BOOL)isRunning { - BOOL isRunning = NO; - SD_LOCK(_runningOperationsLock); - isRunning = (self.runningOperations.count > 0); - SD_UNLOCK(_runningOperationsLock); - return isRunning; -} - -- (void)removeFailedURL:(NSURL *)url { - if (!url) { - return; - } - SD_LOCK(_failedURLsLock); - [self.failedURLs removeObject:url]; - SD_UNLOCK(_failedURLsLock); -} - -- (void)removeAllFailedURLs { - SD_LOCK(_failedURLsLock); - [self.failedURLs removeAllObjects]; - SD_UNLOCK(_failedURLsLock); -} - -#pragma mark - Private - -// Query normal cache process -- (void)callCacheProcessForOperation:(nonnull SDWebImageCombinedOperation *)operation - url:(nonnull NSURL *)url - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDInternalCompletionBlock)completedBlock { - // Grab the image cache to use - id imageCache; - if ([context[SDWebImageContextImageCache] conformsToProtocol:@protocol(SDImageCache)]) { - imageCache = context[SDWebImageContextImageCache]; - } else { - imageCache = self.imageCache; - } - // Get the query cache type - SDImageCacheType queryCacheType = SDImageCacheTypeAll; - if (context[SDWebImageContextQueryCacheType]) { - queryCacheType = [context[SDWebImageContextQueryCacheType] integerValue]; - } - - // Check whether we should query cache - BOOL shouldQueryCache = !SD_OPTIONS_CONTAINS(options, SDWebImageFromLoaderOnly); - if (shouldQueryCache) { - NSString *key = [self cacheKeyForURL:url context:context]; - @weakify(operation); - operation.cacheOperation = [imageCache queryImageForKey:key options:options context:context cacheType:queryCacheType completion:^(UIImage * _Nullable cachedImage, NSData * _Nullable cachedData, SDImageCacheType cacheType) { - @strongify(operation); - if (!operation || operation.isCancelled) { - // Image combined operation cancelled by user - [self callCompletionBlockForOperation:operation completion:completedBlock error:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCancelled userInfo:@{NSLocalizedDescriptionKey : @"Operation cancelled by user during querying the cache"}] url:url]; - [self safelyRemoveOperationFromRunning:operation]; - return; - } else if (!cachedImage) { - BOOL mayInOriginalCache = context[SDWebImageContextImageTransformer] || context[SDWebImageContextImageThumbnailPixelSize]; - // Have a chance to query original cache instead of downloading, then applying transform - // Thumbnail decoding is done inside SDImageCache's decoding part, which does not need post processing for transform - if (mayInOriginalCache) { - [self callOriginalCacheProcessForOperation:operation url:url options:options context:context progress:progressBlock completed:completedBlock]; - return; - } - } - - // Continue download process - [self callDownloadProcessForOperation:operation url:url options:options context:context cachedImage:cachedImage cachedData:cachedData cacheType:cacheType progress:progressBlock completed:completedBlock]; - }]; - } else { - // Continue download process - [self callDownloadProcessForOperation:operation url:url options:options context:context cachedImage:nil cachedData:nil cacheType:SDImageCacheTypeNone progress:progressBlock completed:completedBlock]; - } -} - -// Query original cache process -- (void)callOriginalCacheProcessForOperation:(nonnull SDWebImageCombinedOperation *)operation - url:(nonnull NSURL *)url - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDInternalCompletionBlock)completedBlock { - // Grab the image cache to use, choose standalone original cache firstly - id imageCache; - if ([context[SDWebImageContextOriginalImageCache] conformsToProtocol:@protocol(SDImageCache)]) { - imageCache = context[SDWebImageContextOriginalImageCache]; - } else { - // if no standalone cache available, use default cache - if ([context[SDWebImageContextImageCache] conformsToProtocol:@protocol(SDImageCache)]) { - imageCache = context[SDWebImageContextImageCache]; - } else { - imageCache = self.imageCache; - } - } - // Get the original query cache type - SDImageCacheType originalQueryCacheType = SDImageCacheTypeDisk; - if (context[SDWebImageContextOriginalQueryCacheType]) { - originalQueryCacheType = [context[SDWebImageContextOriginalQueryCacheType] integerValue]; - } - - // Check whether we should query original cache - BOOL shouldQueryOriginalCache = (originalQueryCacheType != SDImageCacheTypeNone); - if (shouldQueryOriginalCache) { - // Get original cache key generation without transformer/thumbnail - NSString *key = [self originalCacheKeyForURL:url context:context]; - @weakify(operation); - operation.cacheOperation = [imageCache queryImageForKey:key options:options context:context cacheType:originalQueryCacheType completion:^(UIImage * _Nullable cachedImage, NSData * _Nullable cachedData, SDImageCacheType cacheType) { - @strongify(operation); - if (!operation || operation.isCancelled) { - // Image combined operation cancelled by user - [self callCompletionBlockForOperation:operation completion:completedBlock error:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCancelled userInfo:@{NSLocalizedDescriptionKey : @"Operation cancelled by user during querying the cache"}] url:url]; - [self safelyRemoveOperationFromRunning:operation]; - return; - } else if (!cachedImage) { - // Original image cache miss. Continue download process - [self callDownloadProcessForOperation:operation url:url options:options context:context cachedImage:nil cachedData:nil cacheType:SDImageCacheTypeNone progress:progressBlock completed:completedBlock]; - return; - } - - // Use the store cache process instead of downloading, and ignore .refreshCached option for now - [self callStoreCacheProcessForOperation:operation url:url options:options context:context downloadedImage:cachedImage downloadedData:cachedData cacheType:cacheType finished:YES completed:completedBlock]; - - [self safelyRemoveOperationFromRunning:operation]; - }]; - } else { - // Continue download process - [self callDownloadProcessForOperation:operation url:url options:options context:context cachedImage:nil cachedData:nil cacheType:SDImageCacheTypeNone progress:progressBlock completed:completedBlock]; - } -} - -// Download process -- (void)callDownloadProcessForOperation:(nonnull SDWebImageCombinedOperation *)operation - url:(nonnull NSURL *)url - options:(SDWebImageOptions)options - context:(SDWebImageContext *)context - cachedImage:(nullable UIImage *)cachedImage - cachedData:(nullable NSData *)cachedData - cacheType:(SDImageCacheType)cacheType - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDInternalCompletionBlock)completedBlock { - // Mark the cache operation end - @synchronized (operation) { - operation.cacheOperation = nil; - } - - // Grab the image loader to use - id imageLoader; - if ([context[SDWebImageContextImageLoader] conformsToProtocol:@protocol(SDImageLoader)]) { - imageLoader = context[SDWebImageContextImageLoader]; - } else { - imageLoader = self.imageLoader; - } - - // Check whether we should download image from network - BOOL shouldDownload = !SD_OPTIONS_CONTAINS(options, SDWebImageFromCacheOnly); - shouldDownload &= (!cachedImage || options & SDWebImageRefreshCached); - shouldDownload &= (![self.delegate respondsToSelector:@selector(imageManager:shouldDownloadImageForURL:)] || [self.delegate imageManager:self shouldDownloadImageForURL:url]); - if ([imageLoader respondsToSelector:@selector(canRequestImageForURL:options:context:)]) { - shouldDownload &= [imageLoader canRequestImageForURL:url options:options context:context]; - } else { - shouldDownload &= [imageLoader canRequestImageForURL:url]; - } - if (shouldDownload) { - if (cachedImage && options & SDWebImageRefreshCached) { - // If image was found in the cache but SDWebImageRefreshCached is provided, notify about the cached image - // AND try to re-download it in order to let a chance to NSURLCache to refresh it from server. - [self callCompletionBlockForOperation:operation completion:completedBlock image:cachedImage data:cachedData error:nil cacheType:cacheType finished:YES url:url]; - // Pass the cached image to the image loader. The image loader should check whether the remote image is equal to the cached image. - SDWebImageMutableContext *mutableContext; - if (context) { - mutableContext = [context mutableCopy]; - } else { - mutableContext = [NSMutableDictionary dictionary]; - } - mutableContext[SDWebImageContextLoaderCachedImage] = cachedImage; - context = [mutableContext copy]; - } - - @weakify(operation); - operation.loaderOperation = [imageLoader requestImageWithURL:url options:options context:context progress:progressBlock completed:^(UIImage *downloadedImage, NSData *downloadedData, NSError *error, BOOL finished) { - @strongify(operation); - if (!operation || operation.isCancelled) { - // Image combined operation cancelled by user - [self callCompletionBlockForOperation:operation completion:completedBlock error:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCancelled userInfo:@{NSLocalizedDescriptionKey : @"Operation cancelled by user during sending the request"}] url:url]; - } else if (cachedImage && options & SDWebImageRefreshCached && [error.domain isEqualToString:SDWebImageErrorDomain] && error.code == SDWebImageErrorCacheNotModified) { - // Image refresh hit the NSURLCache cache, do not call the completion block - } else if ([error.domain isEqualToString:SDWebImageErrorDomain] && error.code == SDWebImageErrorCancelled) { - // Download operation cancelled by user before sending the request, don't block failed URL - [self callCompletionBlockForOperation:operation completion:completedBlock error:error url:url]; - } else if (error) { - [self callCompletionBlockForOperation:operation completion:completedBlock error:error url:url]; - BOOL shouldBlockFailedURL = [self shouldBlockFailedURLWithURL:url error:error options:options context:context]; - - if (shouldBlockFailedURL) { - SD_LOCK(self->_failedURLsLock); - [self.failedURLs addObject:url]; - SD_UNLOCK(self->_failedURLsLock); - } - } else { - if ((options & SDWebImageRetryFailed)) { - SD_LOCK(self->_failedURLsLock); - [self.failedURLs removeObject:url]; - SD_UNLOCK(self->_failedURLsLock); - } - // Continue store cache process - [self callStoreCacheProcessForOperation:operation url:url options:options context:context downloadedImage:downloadedImage downloadedData:downloadedData cacheType:SDImageCacheTypeNone finished:finished completed:completedBlock]; - } - - if (finished) { - [self safelyRemoveOperationFromRunning:operation]; - } - }]; - } else if (cachedImage) { - [self callCompletionBlockForOperation:operation completion:completedBlock image:cachedImage data:cachedData error:nil cacheType:cacheType finished:YES url:url]; - [self safelyRemoveOperationFromRunning:operation]; - } else { - // Image not in cache and download disallowed by delegate - [self callCompletionBlockForOperation:operation completion:completedBlock image:nil data:nil error:nil cacheType:SDImageCacheTypeNone finished:YES url:url]; - [self safelyRemoveOperationFromRunning:operation]; - } -} - -// Store cache process -- (void)callStoreCacheProcessForOperation:(nonnull SDWebImageCombinedOperation *)operation - url:(nonnull NSURL *)url - options:(SDWebImageOptions)options - context:(SDWebImageContext *)context - downloadedImage:(nullable UIImage *)downloadedImage - downloadedData:(nullable NSData *)downloadedData - cacheType:(SDImageCacheType)cacheType - finished:(BOOL)finished - completed:(nullable SDInternalCompletionBlock)completedBlock { - // Grab the image cache to use, choose standalone original cache firstly - id imageCache; - if ([context[SDWebImageContextOriginalImageCache] conformsToProtocol:@protocol(SDImageCache)]) { - imageCache = context[SDWebImageContextOriginalImageCache]; - } else { - // if no standalone cache available, use default cache - if ([context[SDWebImageContextImageCache] conformsToProtocol:@protocol(SDImageCache)]) { - imageCache = context[SDWebImageContextImageCache]; - } else { - imageCache = self.imageCache; - } - } - BOOL waitStoreCache = SD_OPTIONS_CONTAINS(options, SDWebImageWaitStoreCache); - // the target image store cache type - SDImageCacheType storeCacheType = SDImageCacheTypeAll; - if (context[SDWebImageContextStoreCacheType]) { - storeCacheType = [context[SDWebImageContextStoreCacheType] integerValue]; - } - // the original store image cache type - SDImageCacheType originalStoreCacheType = SDImageCacheTypeDisk; - if (context[SDWebImageContextOriginalStoreCacheType]) { - originalStoreCacheType = [context[SDWebImageContextOriginalStoreCacheType] integerValue]; - } - id transformer = context[SDWebImageContextImageTransformer]; - if (![transformer conformsToProtocol:@protocol(SDImageTransformer)]) { - transformer = nil; - } - id cacheSerializer = context[SDWebImageContextCacheSerializer]; - - // transformer check - BOOL shouldTransformImage = downloadedImage && transformer; - shouldTransformImage = shouldTransformImage && (!downloadedImage.sd_isAnimated || (options & SDWebImageTransformAnimatedImage)); - shouldTransformImage = shouldTransformImage && (!downloadedImage.sd_isVector || (options & SDWebImageTransformVectorImage)); - // thumbnail check - BOOL shouldThumbnailImage = context[SDWebImageContextImageThumbnailPixelSize] != nil || downloadedImage.sd_decodeOptions[SDImageCoderDecodeThumbnailPixelSize] != nil; - - BOOL shouldCacheOriginal = downloadedImage && finished && cacheType == SDImageCacheTypeNone; - - // if available, store original image to cache - if (shouldCacheOriginal) { - // Get original cache key generation without transformer/thumbnail - NSString *key = [self originalCacheKeyForURL:url context:context]; - // normally use the store cache type, but if target image is transformed, use original store cache type instead - SDImageCacheType targetStoreCacheType = (shouldTransformImage || shouldThumbnailImage) ? originalStoreCacheType : storeCacheType; - UIImage *fullSizeImage = downloadedImage; - if (shouldThumbnailImage) { - // Thumbnail decoding does not keep original image - // Here we only store the original data to disk for original cache key - // Store thumbnail image to memory for thumbnail cache key later in `storeTransformCacheProcess` - fullSizeImage = nil; - } - if (fullSizeImage && cacheSerializer && (targetStoreCacheType == SDImageCacheTypeDisk || targetStoreCacheType == SDImageCacheTypeAll)) { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ - @autoreleasepool { - NSData *cacheData = [cacheSerializer cacheDataWithImage:fullSizeImage originalData:downloadedData imageURL:url]; - [self storeImage:fullSizeImage imageData:cacheData forKey:key imageCache:imageCache cacheType:targetStoreCacheType waitStoreCache:waitStoreCache completion:^{ - // Continue transform process - [self callTransformProcessForOperation:operation url:url options:options context:context originalImage:downloadedImage originalData:downloadedData cacheType:cacheType finished:finished completed:completedBlock]; - }]; - } - }); - } else { - [self storeImage:fullSizeImage imageData:downloadedData forKey:key imageCache:imageCache cacheType:targetStoreCacheType waitStoreCache:waitStoreCache completion:^{ - // Continue transform process - [self callTransformProcessForOperation:operation url:url options:options context:context originalImage:downloadedImage originalData:downloadedData cacheType:cacheType finished:finished completed:completedBlock]; - }]; - } - } else { - // Continue transform process - [self callTransformProcessForOperation:operation url:url options:options context:context originalImage:downloadedImage originalData:downloadedData cacheType:cacheType finished:finished completed:completedBlock]; - } -} - -// Transform process -- (void)callTransformProcessForOperation:(nonnull SDWebImageCombinedOperation *)operation - url:(nonnull NSURL *)url - options:(SDWebImageOptions)options - context:(SDWebImageContext *)context - originalImage:(nullable UIImage *)originalImage - originalData:(nullable NSData *)originalData - cacheType:(SDImageCacheType)cacheType - finished:(BOOL)finished - completed:(nullable SDInternalCompletionBlock)completedBlock { - id transformer = context[SDWebImageContextImageTransformer]; - if (![transformer conformsToProtocol:@protocol(SDImageTransformer)]) { - transformer = nil; - } - - // transformer check - BOOL shouldTransformImage = originalImage && transformer; - shouldTransformImage = shouldTransformImage && (!originalImage.sd_isAnimated || (options & SDWebImageTransformAnimatedImage)); - shouldTransformImage = shouldTransformImage && (!originalImage.sd_isVector || (options & SDWebImageTransformVectorImage)); - - // thumbnail check - // This exist when previous thumbnail pipeline callback into next full size pipeline, because we share the same URL download but need different image - // Actually this is a hack, we attach the metadata into image object, which should design a better concept like `ImageInfo` and keep that around - // Redecode need the full size data (progressive decoding or third-party loaders may callback nil data) - BOOL shouldRedecodeFullImage = originalData && cacheType == SDImageCacheTypeNone; - if (shouldRedecodeFullImage) { - // If the retuened image decode options exist (some loaders impl does not use `SDImageLoaderDecode`) but does not match the options we provide, redecode - SDImageCoderOptions *returnedDecodeOptions = originalImage.sd_decodeOptions; - if (returnedDecodeOptions) { - SDImageCoderOptions *decodeOptions = SDGetDecodeOptionsFromContext(context, options, url.absoluteString); - shouldRedecodeFullImage = ![returnedDecodeOptions isEqualToDictionary:decodeOptions]; - } else { - shouldRedecodeFullImage = NO; - } - } - - if (shouldTransformImage) { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ - @autoreleasepool { - // transformed/thumbnailed cache key - NSString *key = [self cacheKeyForURL:url context:context]; - // Case that transformer one thumbnail, which this time need full pixel image - UIImage *fullSizeImage = originalImage; - BOOL imageWasRedecoded = NO; - if (shouldRedecodeFullImage) { - fullSizeImage = SDImageCacheDecodeImageData(originalData, key, options, context); - if (fullSizeImage) { - imageWasRedecoded = YES; - } else { - imageWasRedecoded = NO; - fullSizeImage = originalImage; // Fallback - } - } - UIImage *transformedImage = [transformer transformedImageWithImage:fullSizeImage forKey:key]; - if (transformedImage && finished) { - BOOL imageWasTransformed = ![transformedImage isEqual:fullSizeImage]; - // Continue store transform cache process - [self callStoreTransformCacheProcessForOperation:operation url:url options:options context:context image:transformedImage data:originalData cacheType:cacheType finished:finished transformed:imageWasTransformed || imageWasRedecoded completed:completedBlock]; - } else { - // Continue store transform cache process - [self callStoreTransformCacheProcessForOperation:operation url:url options:options context:context image:fullSizeImage data:originalData cacheType:cacheType finished:finished transformed:imageWasRedecoded completed:completedBlock]; - } - } - }); - } else if (shouldRedecodeFullImage) { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ - @autoreleasepool { - // Re-decode because the returned image does not match current request pipeline's context - UIImage *fullSizeImage = SDImageCacheDecodeImageData(originalData, url.absoluteString, options, context); - BOOL imageWasRedecoded = NO; - if (fullSizeImage) { - imageWasRedecoded = YES; - } else { - imageWasRedecoded = NO; - fullSizeImage = originalImage; // Fallback - } - // Continue store transform cache process - [self callStoreTransformCacheProcessForOperation:operation url:url options:options context:context image:fullSizeImage data:originalData cacheType:cacheType finished:finished transformed:imageWasRedecoded completed:completedBlock]; - } - }); - } else { - // Continue store transform cache process - [self callStoreTransformCacheProcessForOperation:operation url:url options:options context:context image:originalImage data:originalData cacheType:cacheType finished:finished transformed:NO completed:completedBlock]; - } -} - -- (void)callStoreTransformCacheProcessForOperation:(nonnull SDWebImageCombinedOperation *)operation - url:(nonnull NSURL *)url - options:(SDWebImageOptions)options - context:(SDWebImageContext *)context - image:(nullable UIImage *)image - data:(nullable NSData *)data - cacheType:(SDImageCacheType)cacheType - finished:(BOOL)finished - transformed:(BOOL)transformed - completed:(nullable SDInternalCompletionBlock)completedBlock { - // Grab the image cache to use - id imageCache; - if ([context[SDWebImageContextImageCache] conformsToProtocol:@protocol(SDImageCache)]) { - imageCache = context[SDWebImageContextImageCache]; - } else { - imageCache = self.imageCache; - } - BOOL waitStoreCache = SD_OPTIONS_CONTAINS(options, SDWebImageWaitStoreCache); - // the target image store cache type - SDImageCacheType storeCacheType = SDImageCacheTypeAll; - if (context[SDWebImageContextStoreCacheType]) { - storeCacheType = [context[SDWebImageContextStoreCacheType] integerValue]; - } - id cacheSerializer = context[SDWebImageContextCacheSerializer]; - // thumbnail check - BOOL shouldThumbnailImage = context[SDWebImageContextImageThumbnailPixelSize] != nil || image.sd_decodeOptions[SDImageCoderDecodeThumbnailPixelSize] != nil; - - // Store the transformed/thumbnail image into the cache - if (image && (transformed || shouldThumbnailImage)) { - NSData *cacheData; - // pass nil if the image was transformed/thumbnailed, so we can recalculate the data from the image - if (cacheSerializer && (storeCacheType == SDImageCacheTypeDisk || storeCacheType == SDImageCacheTypeAll)) { - cacheData = [cacheSerializer cacheDataWithImage:image originalData:nil imageURL:url]; - } else { - cacheData = nil; - } - // transformed/thumbnailed cache key - NSString *key = [self cacheKeyForURL:url context:context]; - [self storeImage:image imageData:cacheData forKey:key imageCache:imageCache cacheType:storeCacheType waitStoreCache:waitStoreCache completion:^{ - [self callCompletionBlockForOperation:operation completion:completedBlock image:image data:data error:nil cacheType:cacheType finished:finished url:url]; - }]; - } else { - [self callCompletionBlockForOperation:operation completion:completedBlock image:image data:data error:nil cacheType:cacheType finished:finished url:url]; - } -} - -#pragma mark - Helper - -- (void)safelyRemoveOperationFromRunning:(nullable SDWebImageCombinedOperation*)operation { - if (!operation) { - return; - } - SD_LOCK(_runningOperationsLock); - [self.runningOperations removeObject:operation]; - SD_UNLOCK(_runningOperationsLock); -} - -- (void)storeImage:(nullable UIImage *)image - imageData:(nullable NSData *)data - forKey:(nullable NSString *)key - imageCache:(nonnull id)imageCache - cacheType:(SDImageCacheType)cacheType - waitStoreCache:(BOOL)waitStoreCache - completion:(nullable SDWebImageNoParamsBlock)completion { - // Check whether we should wait the store cache finished. If not, callback immediately - [imageCache storeImage:image imageData:data forKey:key cacheType:cacheType completion:^{ - if (waitStoreCache) { - if (completion) { - completion(); - } - } - }]; - if (!waitStoreCache) { - if (completion) { - completion(); - } - } -} - -- (void)callCompletionBlockForOperation:(nullable SDWebImageCombinedOperation*)operation - completion:(nullable SDInternalCompletionBlock)completionBlock - error:(nullable NSError *)error - url:(nullable NSURL *)url { - [self callCompletionBlockForOperation:operation completion:completionBlock image:nil data:nil error:error cacheType:SDImageCacheTypeNone finished:YES url:url]; -} - -- (void)callCompletionBlockForOperation:(nullable SDWebImageCombinedOperation*)operation - completion:(nullable SDInternalCompletionBlock)completionBlock - image:(nullable UIImage *)image - data:(nullable NSData *)data - error:(nullable NSError *)error - cacheType:(SDImageCacheType)cacheType - finished:(BOOL)finished - url:(nullable NSURL *)url { - dispatch_main_async_safe(^{ - if (completionBlock) { - completionBlock(image, data, error, cacheType, finished, url); - } - }); -} - -- (BOOL)shouldBlockFailedURLWithURL:(nonnull NSURL *)url - error:(nonnull NSError *)error - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context { - id imageLoader; - if ([context[SDWebImageContextImageLoader] conformsToProtocol:@protocol(SDImageLoader)]) { - imageLoader = context[SDWebImageContextImageLoader]; - } else { - imageLoader = self.imageLoader; - } - // Check whether we should block failed url - BOOL shouldBlockFailedURL; - if ([self.delegate respondsToSelector:@selector(imageManager:shouldBlockFailedURL:withError:)]) { - shouldBlockFailedURL = [self.delegate imageManager:self shouldBlockFailedURL:url withError:error]; - } else { - if ([imageLoader respondsToSelector:@selector(shouldBlockFailedURLWithURL:error:options:context:)]) { - shouldBlockFailedURL = [imageLoader shouldBlockFailedURLWithURL:url error:error options:options context:context]; - } else { - shouldBlockFailedURL = [imageLoader shouldBlockFailedURLWithURL:url error:error]; - } - } - - return shouldBlockFailedURL; -} - -- (SDWebImageOptionsResult *)processedResultForURL:(NSURL *)url options:(SDWebImageOptions)options context:(SDWebImageContext *)context { - SDWebImageOptionsResult *result; - SDWebImageMutableContext *mutableContext = [SDWebImageMutableContext dictionary]; - - // Image Transformer from manager - if (!context[SDWebImageContextImageTransformer]) { - id transformer = self.transformer; - [mutableContext setValue:transformer forKey:SDWebImageContextImageTransformer]; - } - // Cache key filter from manager - if (!context[SDWebImageContextCacheKeyFilter]) { - id cacheKeyFilter = self.cacheKeyFilter; - [mutableContext setValue:cacheKeyFilter forKey:SDWebImageContextCacheKeyFilter]; - } - // Cache serializer from manager - if (!context[SDWebImageContextCacheSerializer]) { - id cacheSerializer = self.cacheSerializer; - [mutableContext setValue:cacheSerializer forKey:SDWebImageContextCacheSerializer]; - } - - if (mutableContext.count > 0) { - if (context) { - [mutableContext addEntriesFromDictionary:context]; - } - context = [mutableContext copy]; - } - - // Apply options processor - if (self.optionsProcessor) { - result = [self.optionsProcessor processedResultForURL:url options:options context:context]; - } - if (!result) { - // Use default options result - result = [[SDWebImageOptionsResult alloc] initWithOptions:options context:context]; - } - - return result; -} - -@end - - -@implementation SDWebImageCombinedOperation - -- (void)cancel { - @synchronized(self) { - if (self.isCancelled) { - return; - } - self.cancelled = YES; - if (self.cacheOperation) { - [self.cacheOperation cancel]; - self.cacheOperation = nil; - } - if (self.loaderOperation) { - [self.loaderOperation cancel]; - self.loaderOperation = nil; - } - [self.manager safelyRemoveOperationFromRunning:self]; - } -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageOperation.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageOperation.h deleted file mode 100644 index bc4224f..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageOperation.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import - -/// A protocol represents cancelable operation. -@protocol SDWebImageOperation - -/// Cancel the operation -- (void)cancel; - -@optional - -/// Whether the operation has been cancelled. -@property (nonatomic, assign, readonly, getter=isCancelled) BOOL cancelled; - -@end - -/// NSOperation conform to `SDWebImageOperation`. -@interface NSOperation (SDWebImageOperation) - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageOperation.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageOperation.m deleted file mode 100644 index 0d6e880..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageOperation.m +++ /dev/null @@ -1,14 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageOperation.h" - -/// NSOperation conform to `SDWebImageOperation`. -@implementation NSOperation (SDWebImageOperation) - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageOptionsProcessor.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageOptionsProcessor.h deleted file mode 100644 index 31ef153..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageOptionsProcessor.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageCompat.h" -#import "SDWebImageDefine.h" - -@class SDWebImageOptionsResult; - -typedef SDWebImageOptionsResult * _Nullable(^SDWebImageOptionsProcessorBlock)(NSURL * _Nullable url, SDWebImageOptions options, SDWebImageContext * _Nullable context); - -/** - The options result contains both options and context. - */ -@interface SDWebImageOptionsResult : NSObject - -/** - WebCache options. - */ -@property (nonatomic, assign, readonly) SDWebImageOptions options; - -/** - Context options. - */ -@property (nonatomic, copy, readonly, nullable) SDWebImageContext *context; - -/** - Create a new options result. - - @param options options - @param context context - @return The options result contains both options and context. - */ -- (nonnull instancetype)initWithOptions:(SDWebImageOptions)options context:(nullable SDWebImageContext *)context; - -@end - -/** - This is the protocol for options processor. - Options processor can be used, to control the final result for individual image request's `SDWebImageOptions` and `SDWebImageContext` - Implements the protocol to have a global control for each indivadual image request's option. - */ -@protocol SDWebImageOptionsProcessor - -/** - Return the processed options result for specify image URL, with its options and context - - @param url The URL to the image - @param options A mask to specify options to use for this request - @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - @return The processed result, contains both options and context - */ -- (nullable SDWebImageOptionsResult *)processedResultForURL:(nullable NSURL *)url - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context; - -@end - -/** - A options processor class with block. - */ -@interface SDWebImageOptionsProcessor : NSObject - -- (nonnull instancetype)initWithBlock:(nonnull SDWebImageOptionsProcessorBlock)block; -+ (nonnull instancetype)optionsProcessorWithBlock:(nonnull SDWebImageOptionsProcessorBlock)block; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageOptionsProcessor.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageOptionsProcessor.m deleted file mode 100644 index 8e7bc35..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageOptionsProcessor.m +++ /dev/null @@ -1,59 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageOptionsProcessor.h" - -@interface SDWebImageOptionsResult () - -@property (nonatomic, assign) SDWebImageOptions options; -@property (nonatomic, copy, nullable) SDWebImageContext *context; - -@end - -@implementation SDWebImageOptionsResult - -- (instancetype)initWithOptions:(SDWebImageOptions)options context:(SDWebImageContext *)context { - self = [super init]; - if (self) { - self.options = options; - self.context = context; - } - return self; -} - -@end - -@interface SDWebImageOptionsProcessor () - -@property (nonatomic, copy, nonnull) SDWebImageOptionsProcessorBlock block; - -@end - -@implementation SDWebImageOptionsProcessor - -- (instancetype)initWithBlock:(SDWebImageOptionsProcessorBlock)block { - self = [super init]; - if (self) { - self.block = block; - } - return self; -} - -+ (instancetype)optionsProcessorWithBlock:(SDWebImageOptionsProcessorBlock)block { - SDWebImageOptionsProcessor *optionsProcessor = [[SDWebImageOptionsProcessor alloc] initWithBlock:block]; - return optionsProcessor; -} - -- (SDWebImageOptionsResult *)processedResultForURL:(NSURL *)url options:(SDWebImageOptions)options context:(SDWebImageContext *)context { - if (!self.block) { - return nil; - } - return self.block(url, options, context); -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImagePrefetcher.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImagePrefetcher.h deleted file mode 100644 index a9b2c1f..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImagePrefetcher.h +++ /dev/null @@ -1,143 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageManager.h" - -@class SDWebImagePrefetcher; - -/** - A token represents a list of URLs, can be used to cancel the download. - */ -@interface SDWebImagePrefetchToken : NSObject - -/** - * Cancel the current prefetching. - */ -- (void)cancel; - -/** - list of URLs of current prefetching. - */ -@property (nonatomic, copy, readonly, nullable) NSArray *urls; - -@end - -/** - The prefetcher delegate protocol - */ -@protocol SDWebImagePrefetcherDelegate - -@optional - -/** - * Called when an image was prefetched. Which means it's called when one URL from any of prefetching finished. - * - * @param imagePrefetcher The current image prefetcher - * @param imageURL The image url that was prefetched - * @param finishedCount The total number of images that were prefetched (successful or not) - * @param totalCount The total number of images that were to be prefetched - */ -- (void)imagePrefetcher:(nonnull SDWebImagePrefetcher *)imagePrefetcher didPrefetchURL:(nullable NSURL *)imageURL finishedCount:(NSUInteger)finishedCount totalCount:(NSUInteger)totalCount; - -/** - * Called when all images are prefetched. Which means it's called when all URLs from all of prefetching finished. - * @param imagePrefetcher The current image prefetcher - * @param totalCount The total number of images that were prefetched (whether successful or not) - * @param skippedCount The total number of images that were skipped - */ -- (void)imagePrefetcher:(nonnull SDWebImagePrefetcher *)imagePrefetcher didFinishWithTotalCount:(NSUInteger)totalCount skippedCount:(NSUInteger)skippedCount; - -@end - -typedef void(^SDWebImagePrefetcherProgressBlock)(NSUInteger noOfFinishedUrls, NSUInteger noOfTotalUrls); -typedef void(^SDWebImagePrefetcherCompletionBlock)(NSUInteger noOfFinishedUrls, NSUInteger noOfSkippedUrls); - -/** - * Prefetch some URLs in the cache for future use. Images are downloaded in low priority. - */ -@interface SDWebImagePrefetcher : NSObject - -/** - * The web image manager used by prefetcher to prefetch images. - * @note You can specify a standalone manager and downloader with custom configuration suitable for image prefetching. Such as `currentDownloadCount` or `downloadTimeout`. - */ -@property (strong, nonatomic, readonly, nonnull) SDWebImageManager *manager; - -/** - * Maximum number of URLs to prefetch at the same time. Defaults to 3. - */ -@property (nonatomic, assign) NSUInteger maxConcurrentPrefetchCount; - -/** - * The options for prefetcher. Defaults to SDWebImageLowPriority. - */ -@property (nonatomic, assign) SDWebImageOptions options; - -/** - * The context for prefetcher. Defaults to nil. - */ -@property (nonatomic, copy, nullable) SDWebImageContext *context; - -/** - * Queue options for prefetcher when call the progressBlock, completionBlock and delegate methods. Defaults to Main Queue. - * @note The call is asynchronously to avoid blocking target queue. - * @note The delegate queue should be set before any prefetching start and may not be changed during prefetching to avoid thread-safe problem. - */ -@property (strong, nonatomic, nonnull) dispatch_queue_t delegateQueue; - -/** - * The delegate for the prefetcher. Defaults to nil. - */ -@property (weak, nonatomic, nullable) id delegate; - -/** - * Returns the global shared image prefetcher instance. It use a standalone manager which is different from shared manager. - */ -@property (nonatomic, class, readonly, nonnull) SDWebImagePrefetcher *sharedImagePrefetcher; - -/** - * Allows you to instantiate a prefetcher with any arbitrary image manager. - */ -- (nonnull instancetype)initWithImageManager:(nonnull SDWebImageManager *)manager NS_DESIGNATED_INITIALIZER; - -/** - * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching. It based on the image manager so the image may from the cache and network according to the `options` property. - * Prefetching is separate to each other, which means the progressBlock and completionBlock you provide is bind to the prefetching for the list of urls. - * Attention that call this will not cancel previous fetched urls. You should keep the token return by this to cancel or cancel all the prefetch. - * - * @param urls list of URLs to prefetch - * @return the token to cancel the current prefetching. - */ -- (nullable SDWebImagePrefetchToken *)prefetchURLs:(nullable NSArray *)urls; - -/** - * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching. It based on the image manager so the image may from the cache and network according to the `options` property. - * Prefetching is separate to each other, which means the progressBlock and completionBlock you provide is bind to the prefetching for the list of urls. - * Attention that call this will not cancel previous fetched urls. You should keep the token return by this to cancel or cancel all the prefetch. - * - * @param urls list of URLs to prefetch - * @param progressBlock block to be called when progress updates; - * first parameter is the number of completed (successful or not) requests, - * second parameter is the total number of images originally requested to be prefetched - * @param completionBlock block to be called when the current prefetching is completed - * first param is the number of completed (successful or not) requests, - * second parameter is the number of skipped requests - * @return the token to cancel the current prefetching. - */ -- (nullable SDWebImagePrefetchToken *)prefetchURLs:(nullable NSArray *)urls - progress:(nullable SDWebImagePrefetcherProgressBlock)progressBlock - completed:(nullable SDWebImagePrefetcherCompletionBlock)completionBlock; - -/** - * Remove and cancel all the prefeching for the prefetcher. - */ -- (void)cancelPrefetching; - - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImagePrefetcher.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImagePrefetcher.m deleted file mode 100644 index b6632fa..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImagePrefetcher.m +++ /dev/null @@ -1,305 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImagePrefetcher.h" -#import "SDAsyncBlockOperation.h" -#import "SDInternalMacros.h" -#import - -@interface SDWebImagePrefetchToken () { - @public - // Though current implementation, `SDWebImageManager` completion block is always on main queue. But however, there is no guarantee in docs. And we may introduce config to specify custom queue in the future. - // These value are just used as incrementing counter, keep thread-safe using memory_order_relaxed for performance. - atomic_ulong _skippedCount; - atomic_ulong _finishedCount; - atomic_flag _isAllFinished; - - unsigned long _totalCount; - - // Used to ensure NSPointerArray thread safe - SD_LOCK_DECLARE(_prefetchOperationsLock); - SD_LOCK_DECLARE(_loadOperationsLock); -} - -@property (nonatomic, copy, readwrite) NSArray *urls; -@property (nonatomic, strong) NSPointerArray *loadOperations; -@property (nonatomic, strong) NSPointerArray *prefetchOperations; -@property (nonatomic, weak) SDWebImagePrefetcher *prefetcher; -@property (nonatomic, copy, nullable) SDWebImagePrefetcherCompletionBlock completionBlock; -@property (nonatomic, copy, nullable) SDWebImagePrefetcherProgressBlock progressBlock; - -@end - -@interface SDWebImagePrefetcher () - -@property (strong, nonatomic, nonnull) SDWebImageManager *manager; -@property (strong, atomic, nonnull) NSMutableSet *runningTokens; -@property (strong, nonatomic, nonnull) NSOperationQueue *prefetchQueue; - -@end - -@implementation SDWebImagePrefetcher - -+ (nonnull instancetype)sharedImagePrefetcher { - static dispatch_once_t once; - static id instance; - dispatch_once(&once, ^{ - instance = [self new]; - }); - return instance; -} - -- (nonnull instancetype)init { - return [self initWithImageManager:[SDWebImageManager new]]; -} - -- (nonnull instancetype)initWithImageManager:(SDWebImageManager *)manager { - if ((self = [super init])) { - _manager = manager; - _runningTokens = [NSMutableSet set]; - _options = SDWebImageLowPriority; - _delegateQueue = dispatch_get_main_queue(); - _prefetchQueue = [NSOperationQueue new]; - self.maxConcurrentPrefetchCount = 3; - } - return self; -} - -- (void)setMaxConcurrentPrefetchCount:(NSUInteger)maxConcurrentPrefetchCount { - self.prefetchQueue.maxConcurrentOperationCount = maxConcurrentPrefetchCount; -} - -- (NSUInteger)maxConcurrentPrefetchCount { - return self.prefetchQueue.maxConcurrentOperationCount; -} - -#pragma mark - Prefetch -- (nullable SDWebImagePrefetchToken *)prefetchURLs:(nullable NSArray *)urls { - return [self prefetchURLs:urls progress:nil completed:nil]; -} - -- (nullable SDWebImagePrefetchToken *)prefetchURLs:(nullable NSArray *)urls - progress:(nullable SDWebImagePrefetcherProgressBlock)progressBlock - completed:(nullable SDWebImagePrefetcherCompletionBlock)completionBlock { - if (!urls || urls.count == 0) { - if (completionBlock) { - completionBlock(0, 0); - } - return nil; - } - SDWebImagePrefetchToken *token = [SDWebImagePrefetchToken new]; - token.prefetcher = self; - token.urls = urls; - token->_skippedCount = 0; - token->_finishedCount = 0; - token->_totalCount = token.urls.count; - atomic_flag_clear(&(token->_isAllFinished)); - token.loadOperations = [NSPointerArray weakObjectsPointerArray]; - token.prefetchOperations = [NSPointerArray weakObjectsPointerArray]; - token.progressBlock = progressBlock; - token.completionBlock = completionBlock; - [self addRunningToken:token]; - [self startPrefetchWithToken:token]; - - return token; -} - -- (void)startPrefetchWithToken:(SDWebImagePrefetchToken * _Nonnull)token { - for (NSURL *url in token.urls) { - @autoreleasepool { - @weakify(self); - SDAsyncBlockOperation *prefetchOperation = [SDAsyncBlockOperation blockOperationWithBlock:^(SDAsyncBlockOperation * _Nonnull asyncOperation) { - @strongify(self); - if (!self || asyncOperation.isCancelled) { - return; - } - id operation = [self.manager loadImageWithURL:url options:self.options context:self.context progress:nil completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) { - @strongify(self); - if (!self) { - return; - } - if (!finished) { - return; - } - atomic_fetch_add_explicit(&(token->_finishedCount), 1, memory_order_relaxed); - if (error) { - // Add last failed - atomic_fetch_add_explicit(&(token->_skippedCount), 1, memory_order_relaxed); - } - - // Current operation finished - [self callProgressBlockForToken:token imageURL:imageURL]; - - if (atomic_load_explicit(&(token->_finishedCount), memory_order_relaxed) == token->_totalCount) { - // All finished - if (!atomic_flag_test_and_set_explicit(&(token->_isAllFinished), memory_order_relaxed)) { - [self callCompletionBlockForToken:token]; - [self removeRunningToken:token]; - } - } - [asyncOperation complete]; - }]; - NSAssert(operation != nil, @"Operation should not be nil, [SDWebImageManager loadImageWithURL:options:context:progress:completed:] break prefetch logic"); - SD_LOCK(token->_loadOperationsLock); - [token.loadOperations addPointer:(__bridge void *)operation]; - SD_UNLOCK(token->_loadOperationsLock); - }]; - SD_LOCK(token->_prefetchOperationsLock); - [token.prefetchOperations addPointer:(__bridge void *)prefetchOperation]; - SD_UNLOCK(token->_prefetchOperationsLock); - [self.prefetchQueue addOperation:prefetchOperation]; - } - } -} - -#pragma mark - Cancel -- (void)cancelPrefetching { - @synchronized(self.runningTokens) { - NSSet *copiedTokens = [self.runningTokens copy]; - [copiedTokens makeObjectsPerformSelector:@selector(cancel)]; - [self.runningTokens removeAllObjects]; - } -} - -- (void)callProgressBlockForToken:(SDWebImagePrefetchToken *)token imageURL:(NSURL *)url { - if (!token) { - return; - } - BOOL shouldCallDelegate = [self.delegate respondsToSelector:@selector(imagePrefetcher:didPrefetchURL:finishedCount:totalCount:)]; - NSUInteger tokenFinishedCount = [self tokenFinishedCount]; - NSUInteger tokenTotalCount = [self tokenTotalCount]; - NSUInteger finishedCount = atomic_load_explicit(&(token->_finishedCount), memory_order_relaxed); - NSUInteger totalCount = token->_totalCount; - dispatch_async(self.delegateQueue, ^{ - if (shouldCallDelegate) { - [self.delegate imagePrefetcher:self didPrefetchURL:url finishedCount:tokenFinishedCount totalCount:tokenTotalCount]; - } - if (token.progressBlock) { - token.progressBlock(finishedCount, totalCount); - } - }); -} - -- (void)callCompletionBlockForToken:(SDWebImagePrefetchToken *)token { - if (!token) { - return; - } - BOOL shoulCallDelegate = [self.delegate respondsToSelector:@selector(imagePrefetcher:didFinishWithTotalCount:skippedCount:)] && ([self countOfRunningTokens] == 1); // last one - NSUInteger tokenTotalCount = [self tokenTotalCount]; - NSUInteger tokenSkippedCount = [self tokenSkippedCount]; - NSUInteger finishedCount = atomic_load_explicit(&(token->_finishedCount), memory_order_relaxed); - NSUInteger skippedCount = atomic_load_explicit(&(token->_skippedCount), memory_order_relaxed); - dispatch_async(self.delegateQueue, ^{ - if (shoulCallDelegate) { - [self.delegate imagePrefetcher:self didFinishWithTotalCount:tokenTotalCount skippedCount:tokenSkippedCount]; - } - if (token.completionBlock) { - token.completionBlock(finishedCount, skippedCount); - } - }); -} - -#pragma mark - Helper -- (NSUInteger)tokenTotalCount { - NSUInteger tokenTotalCount = 0; - @synchronized (self.runningTokens) { - for (SDWebImagePrefetchToken *token in self.runningTokens) { - tokenTotalCount += token->_totalCount; - } - } - return tokenTotalCount; -} - -- (NSUInteger)tokenSkippedCount { - NSUInteger tokenSkippedCount = 0; - @synchronized (self.runningTokens) { - for (SDWebImagePrefetchToken *token in self.runningTokens) { - tokenSkippedCount += atomic_load_explicit(&(token->_skippedCount), memory_order_relaxed); - } - } - return tokenSkippedCount; -} - -- (NSUInteger)tokenFinishedCount { - NSUInteger tokenFinishedCount = 0; - @synchronized (self.runningTokens) { - for (SDWebImagePrefetchToken *token in self.runningTokens) { - tokenFinishedCount += atomic_load_explicit(&(token->_finishedCount), memory_order_relaxed); - } - } - return tokenFinishedCount; -} - -- (void)addRunningToken:(SDWebImagePrefetchToken *)token { - if (!token) { - return; - } - @synchronized (self.runningTokens) { - [self.runningTokens addObject:token]; - } -} - -- (void)removeRunningToken:(SDWebImagePrefetchToken *)token { - if (!token) { - return; - } - @synchronized (self.runningTokens) { - [self.runningTokens removeObject:token]; - } -} - -- (NSUInteger)countOfRunningTokens { - NSUInteger count = 0; - @synchronized (self.runningTokens) { - count = self.runningTokens.count; - } - return count; -} - -@end - -@implementation SDWebImagePrefetchToken - -- (instancetype)init { - self = [super init]; - if (self) { - SD_LOCK_INIT(_prefetchOperationsLock); - SD_LOCK_INIT(_loadOperationsLock); - } - return self; -} - -- (void)cancel { - SD_LOCK(_prefetchOperationsLock); - [self.prefetchOperations compact]; - for (id operation in self.prefetchOperations) { - id strongOperation = operation; - if (strongOperation) { - [strongOperation cancel]; - } - } - self.prefetchOperations.count = 0; - SD_UNLOCK(_prefetchOperationsLock); - - SD_LOCK(_loadOperationsLock); - [self.loadOperations compact]; - for (id operation in self.loadOperations) { - id strongOperation = operation; - if (strongOperation) { - [strongOperation cancel]; - } - } - self.loadOperations.count = 0; - SD_UNLOCK(_loadOperationsLock); - - self.completionBlock = nil; - self.progressBlock = nil; - [self.prefetcher removeRunningToken:self]; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageTransition.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageTransition.h deleted file mode 100644 index 889372e..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageTransition.h +++ /dev/null @@ -1,131 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" - -#if SD_UIKIT || SD_MAC -#import "SDImageCache.h" - -#if SD_UIKIT -typedef UIViewAnimationOptions SDWebImageAnimationOptions; -#else -typedef NS_OPTIONS(NSUInteger, SDWebImageAnimationOptions) { - SDWebImageAnimationOptionAllowsImplicitAnimation = 1 << 0, // specify `allowsImplicitAnimation` for the `NSAnimationContext` - - SDWebImageAnimationOptionCurveEaseInOut = 0 << 16, // default - SDWebImageAnimationOptionCurveEaseIn = 1 << 16, - SDWebImageAnimationOptionCurveEaseOut = 2 << 16, - SDWebImageAnimationOptionCurveLinear = 3 << 16, - - SDWebImageAnimationOptionTransitionNone = 0 << 20, // default - SDWebImageAnimationOptionTransitionFlipFromLeft = 1 << 20, - SDWebImageAnimationOptionTransitionFlipFromRight = 2 << 20, - SDWebImageAnimationOptionTransitionCurlUp = 3 << 20, - SDWebImageAnimationOptionTransitionCurlDown = 4 << 20, - SDWebImageAnimationOptionTransitionCrossDissolve = 5 << 20, - SDWebImageAnimationOptionTransitionFlipFromTop = 6 << 20, - SDWebImageAnimationOptionTransitionFlipFromBottom = 7 << 20, -}; -#endif - -typedef void (^SDWebImageTransitionPreparesBlock)(__kindof UIView * _Nonnull view, UIImage * _Nullable image, NSData * _Nullable imageData, SDImageCacheType cacheType, NSURL * _Nullable imageURL); -typedef void (^SDWebImageTransitionAnimationsBlock)(__kindof UIView * _Nonnull view, UIImage * _Nullable image); -typedef void (^SDWebImageTransitionCompletionBlock)(BOOL finished); - -/** - This class is used to provide a transition animation after the view category load image finished. Use this on `sd_imageTransition` in UIView+WebCache.h - for UIKit(iOS & tvOS), we use `+[UIView transitionWithView:duration:options:animations:completion]` for transition animation. - for AppKit(macOS), we use `+[NSAnimationContext runAnimationGroup:completionHandler:]` for transition animation. You can call `+[NSAnimationContext currentContext]` to grab the context during animations block. - @note These transition are provided for basic usage. If you need complicated animation, consider to directly use Core Animation or use `SDWebImageAvoidAutoSetImage` and implement your own after image load finished. - */ -@interface SDWebImageTransition : NSObject - -/** - By default, we set the image to the view at the beginning of the animations. You can disable this and provide custom set image process - */ -@property (nonatomic, assign) BOOL avoidAutoSetImage; -/** - The duration of the transition animation, measured in seconds. Defaults to 0.5. - */ -@property (nonatomic, assign) NSTimeInterval duration; -/** - The timing function used for all animations within this transition animation (macOS). - */ -@property (nonatomic, strong, nullable) CAMediaTimingFunction *timingFunction API_UNAVAILABLE(ios, tvos, watchos) API_DEPRECATED("Use SDWebImageAnimationOptions instead, or grab NSAnimationContext.currentContext and modify the timingFunction", macos(10.10, 10.10)); -/** - A mask of options indicating how you want to perform the animations. - */ -@property (nonatomic, assign) SDWebImageAnimationOptions animationOptions; -/** - A block object to be executed before the animation sequence starts. - */ -@property (nonatomic, copy, nullable) SDWebImageTransitionPreparesBlock prepares; -/** - A block object that contains the changes you want to make to the specified view. - */ -@property (nonatomic, copy, nullable) SDWebImageTransitionAnimationsBlock animations; -/** - A block object to be executed when the animation sequence ends. - */ -@property (nonatomic, copy, nullable) SDWebImageTransitionCompletionBlock completion; - -@end - -/** - Convenience way to create transition. Remember to specify the duration if needed. - for UIKit, these transition just use the correspond `animationOptions`. By default we enable `UIViewAnimationOptionAllowUserInteraction` to allow user interaction during transition. - for AppKit, these transition use Core Animation in `animations`. So your view must be layer-backed. Set `wantsLayer = YES` before you apply it. - */ -@interface SDWebImageTransition (Conveniences) - -/// Fade-in transition. -@property (nonatomic, class, nonnull, readonly) SDWebImageTransition *fadeTransition; -/// Flip from left transition. -@property (nonatomic, class, nonnull, readonly) SDWebImageTransition *flipFromLeftTransition; -/// Flip from right transition. -@property (nonatomic, class, nonnull, readonly) SDWebImageTransition *flipFromRightTransition; -/// Flip from top transition. -@property (nonatomic, class, nonnull, readonly) SDWebImageTransition *flipFromTopTransition; -/// Flip from bottom transition. -@property (nonatomic, class, nonnull, readonly) SDWebImageTransition *flipFromBottomTransition; -/// Curl up transition. -@property (nonatomic, class, nonnull, readonly) SDWebImageTransition *curlUpTransition; -/// Curl down transition. -@property (nonatomic, class, nonnull, readonly) SDWebImageTransition *curlDownTransition; - -/// Fade-in transition with duration. -/// @param duration transition duration, use ease-in-out -+ (nonnull instancetype)fadeTransitionWithDuration:(NSTimeInterval)duration NS_SWIFT_NAME(fade(duration:)); - -/// Flip from left transition with duration. -/// @param duration transition duration, use ease-in-out -+ (nonnull instancetype)flipFromLeftTransitionWithDuration:(NSTimeInterval)duration NS_SWIFT_NAME(flipFromLeft(duration:)); - -/// Flip from right transition with duration. -/// @param duration transition duration, use ease-in-out -+ (nonnull instancetype)flipFromRightTransitionWithDuration:(NSTimeInterval)duration NS_SWIFT_NAME(flipFromRight(duration:)); - -/// Flip from top transition with duration. -/// @param duration transition duration, use ease-in-out -+ (nonnull instancetype)flipFromTopTransitionWithDuration:(NSTimeInterval)duration NS_SWIFT_NAME(flipFromTop(duration:)); - -/// Flip from bottom transition with duration. -/// @param duration transition duration, use ease-in-out -+ (nonnull instancetype)flipFromBottomTransitionWithDuration:(NSTimeInterval)duration NS_SWIFT_NAME(flipFromBottom(duration:)); - -/// Curl up transition with duration. -/// @param duration transition duration, use ease-in-out -+ (nonnull instancetype)curlUpTransitionWithDuration:(NSTimeInterval)duration NS_SWIFT_NAME(curlUp(duration:)); - -/// Curl down transition with duration. -/// @param duration transition duration, use ease-in-out -+ (nonnull instancetype)curlDownTransitionWithDuration:(NSTimeInterval)duration NS_SWIFT_NAME(curlDown(duration:)); - -@end - -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageTransition.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageTransition.m deleted file mode 100644 index 4990a73..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageTransition.m +++ /dev/null @@ -1,194 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageTransition.h" - -#if SD_UIKIT || SD_MAC - -#if SD_MAC -#import "SDWebImageTransitionInternal.h" -#import "SDInternalMacros.h" - -CAMediaTimingFunction * SDTimingFunctionFromAnimationOptions(SDWebImageAnimationOptions options) { - if (SD_OPTIONS_CONTAINS(SDWebImageAnimationOptionCurveLinear, options)) { - return [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; - } else if (SD_OPTIONS_CONTAINS(SDWebImageAnimationOptionCurveEaseIn, options)) { - return [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]; - } else if (SD_OPTIONS_CONTAINS(SDWebImageAnimationOptionCurveEaseOut, options)) { - return [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; - } else if (SD_OPTIONS_CONTAINS(SDWebImageAnimationOptionCurveEaseInOut, options)) { - return [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; - } else { - return [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]; - } -} - -CATransition * SDTransitionFromAnimationOptions(SDWebImageAnimationOptions options) { - if (SD_OPTIONS_CONTAINS(options, SDWebImageAnimationOptionTransitionCrossDissolve)) { - CATransition *trans = [CATransition animation]; - trans.type = kCATransitionFade; - return trans; - } else if (SD_OPTIONS_CONTAINS(options, SDWebImageAnimationOptionTransitionFlipFromLeft)) { - CATransition *trans = [CATransition animation]; - trans.type = kCATransitionPush; - trans.subtype = kCATransitionFromLeft; - return trans; - } else if (SD_OPTIONS_CONTAINS(options, SDWebImageAnimationOptionTransitionFlipFromRight)) { - CATransition *trans = [CATransition animation]; - trans.type = kCATransitionPush; - trans.subtype = kCATransitionFromRight; - return trans; - } else if (SD_OPTIONS_CONTAINS(options, SDWebImageAnimationOptionTransitionFlipFromTop)) { - CATransition *trans = [CATransition animation]; - trans.type = kCATransitionPush; - trans.subtype = kCATransitionFromTop; - return trans; - } else if (SD_OPTIONS_CONTAINS(options, SDWebImageAnimationOptionTransitionFlipFromBottom)) { - CATransition *trans = [CATransition animation]; - trans.type = kCATransitionPush; - trans.subtype = kCATransitionFromBottom; - return trans; - } else if (SD_OPTIONS_CONTAINS(options, SDWebImageAnimationOptionTransitionCurlUp)) { - CATransition *trans = [CATransition animation]; - trans.type = kCATransitionReveal; - trans.subtype = kCATransitionFromTop; - return trans; - } else if (SD_OPTIONS_CONTAINS(options, SDWebImageAnimationOptionTransitionCurlDown)) { - CATransition *trans = [CATransition animation]; - trans.type = kCATransitionReveal; - trans.subtype = kCATransitionFromBottom; - return trans; - } else { - return nil; - } -} -#endif - -@implementation SDWebImageTransition - -- (instancetype)init { - self = [super init]; - if (self) { - self.duration = 0.5; - } - return self; -} - -@end - -@implementation SDWebImageTransition (Conveniences) - -+ (SDWebImageTransition *)fadeTransition { - return [self fadeTransitionWithDuration:0.5]; -} - -+ (SDWebImageTransition *)fadeTransitionWithDuration:(NSTimeInterval)duration { - SDWebImageTransition *transition = [SDWebImageTransition new]; - transition.duration = duration; -#if SD_UIKIT - transition.animationOptions = UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionAllowUserInteraction; -#else - transition.animationOptions = SDWebImageAnimationOptionTransitionCrossDissolve; -#endif - return transition; -} - -+ (SDWebImageTransition *)flipFromLeftTransition { - return [self flipFromLeftTransitionWithDuration:0.5]; -} - -+ (SDWebImageTransition *)flipFromLeftTransitionWithDuration:(NSTimeInterval)duration { - SDWebImageTransition *transition = [SDWebImageTransition new]; - transition.duration = duration; -#if SD_UIKIT - transition.animationOptions = UIViewAnimationOptionTransitionFlipFromLeft | UIViewAnimationOptionAllowUserInteraction; -#else - transition.animationOptions = SDWebImageAnimationOptionTransitionFlipFromLeft; -#endif - return transition; -} - -+ (SDWebImageTransition *)flipFromRightTransition { - return [self flipFromRightTransitionWithDuration:0.5]; -} - -+ (SDWebImageTransition *)flipFromRightTransitionWithDuration:(NSTimeInterval)duration { - SDWebImageTransition *transition = [SDWebImageTransition new]; - transition.duration = duration; -#if SD_UIKIT - transition.animationOptions = UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionAllowUserInteraction; -#else - transition.animationOptions = SDWebImageAnimationOptionTransitionFlipFromRight; -#endif - return transition; -} - -+ (SDWebImageTransition *)flipFromTopTransition { - return [self flipFromTopTransitionWithDuration:0.5]; -} - -+ (SDWebImageTransition *)flipFromTopTransitionWithDuration:(NSTimeInterval)duration { - SDWebImageTransition *transition = [SDWebImageTransition new]; - transition.duration = duration; -#if SD_UIKIT - transition.animationOptions = UIViewAnimationOptionTransitionFlipFromTop | UIViewAnimationOptionAllowUserInteraction; -#else - transition.animationOptions = SDWebImageAnimationOptionTransitionFlipFromTop; -#endif - return transition; -} - -+ (SDWebImageTransition *)flipFromBottomTransition { - return [self flipFromBottomTransitionWithDuration:0.5]; -} - -+ (SDWebImageTransition *)flipFromBottomTransitionWithDuration:(NSTimeInterval)duration { - SDWebImageTransition *transition = [SDWebImageTransition new]; - transition.duration = duration; -#if SD_UIKIT - transition.animationOptions = UIViewAnimationOptionTransitionFlipFromBottom | UIViewAnimationOptionAllowUserInteraction; -#else - transition.animationOptions = SDWebImageAnimationOptionTransitionFlipFromBottom; -#endif - return transition; -} - -+ (SDWebImageTransition *)curlUpTransition { - return [self curlUpTransitionWithDuration:0.5]; -} - -+ (SDWebImageTransition *)curlUpTransitionWithDuration:(NSTimeInterval)duration { - SDWebImageTransition *transition = [SDWebImageTransition new]; - transition.duration = duration; -#if SD_UIKIT - transition.animationOptions = UIViewAnimationOptionTransitionCurlUp | UIViewAnimationOptionAllowUserInteraction; -#else - transition.animationOptions = SDWebImageAnimationOptionTransitionCurlUp; -#endif - return transition; -} - -+ (SDWebImageTransition *)curlDownTransition { - return [self curlDownTransitionWithDuration:0.5]; -} - -+ (SDWebImageTransition *)curlDownTransitionWithDuration:(NSTimeInterval)duration { - SDWebImageTransition *transition = [SDWebImageTransition new]; - transition.duration = duration; -#if SD_UIKIT - transition.animationOptions = UIViewAnimationOptionTransitionCurlDown | UIViewAnimationOptionAllowUserInteraction; -#else - transition.animationOptions = SDWebImageAnimationOptionTransitionCurlDown; -#endif - transition.duration = duration; - return transition; -} - -@end - -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIButton+WebCache.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIButton+WebCache.h deleted file mode 100644 index 89d94b4..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIButton+WebCache.h +++ /dev/null @@ -1,387 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" - -#if SD_UIKIT - -#import "SDWebImageManager.h" - -/** - * Integrates SDWebImage async downloading and caching of remote images with UIButton. - */ -@interface UIButton (WebCache) - -#pragma mark - Image - -/** - * Get the current image URL. - */ -@property (nonatomic, strong, readonly, nullable) NSURL *sd_currentImageURL; - -/** - * Get the image URL for a control state. - * - * @param state Which state you want to know the URL for. The values are described in UIControlState. - */ -- (nullable NSURL *)sd_imageURLForState:(UIControlState)state; - -/** - * Set the button `image` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - forState:(UIControlState)state NS_REFINED_FOR_SWIFT; - -/** - * Set the button `image` with an `url` and a placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @see sd_setImageWithURL:placeholderImage:options: - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - forState:(UIControlState)state - placeholderImage:(nullable UIImage *)placeholder NS_REFINED_FOR_SWIFT; - -/** - * Set the button `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - forState:(UIControlState)state - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options NS_REFINED_FOR_SWIFT; - -/** - * Set the button `image` with an `url`, placeholder, custom options and context. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - forState:(UIControlState)state - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context; - -/** - * Set the button `image` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - forState:(UIControlState)state - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the button `image` with an `url`, placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - forState:(UIControlState)state - placeholderImage:(nullable UIImage *)placeholder - completed:(nullable SDExternalCompletionBlock)completedBlock NS_REFINED_FOR_SWIFT; - -/** - * Set the button `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - forState:(UIControlState)state - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the button `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param progressBlock A block called while image is downloading - * @note the progress block is executed on a background queue - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - forState:(UIControlState)state - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the button `image` with an `url`, placeholder, custom options and context. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - * @param progressBlock A block called while image is downloading - * @note the progress block is executed on a background queue - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - forState:(UIControlState)state - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock; - -#pragma mark - Background Image - -/** - * Get the current background image URL. - */ -@property (nonatomic, strong, readonly, nullable) NSURL *sd_currentBackgroundImageURL; - -/** - * Get the background image URL for a control state. - * - * @param state Which state you want to know the URL for. The values are described in UIControlState. - */ -- (nullable NSURL *)sd_backgroundImageURLForState:(UIControlState)state; - -/** - * Set the button `backgroundImage` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - */ -- (void)sd_setBackgroundImageWithURL:(nullable NSURL *)url - forState:(UIControlState)state NS_REFINED_FOR_SWIFT; - -/** - * Set the button `backgroundImage` with an `url` and a placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @see sd_setImageWithURL:placeholderImage:options: - */ -- (void)sd_setBackgroundImageWithURL:(nullable NSURL *)url - forState:(UIControlState)state - placeholderImage:(nullable UIImage *)placeholder NS_REFINED_FOR_SWIFT; - -/** - * Set the button `backgroundImage` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - */ -- (void)sd_setBackgroundImageWithURL:(nullable NSURL *)url - forState:(UIControlState)state - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options NS_REFINED_FOR_SWIFT; - -/** - * Set the button `backgroundImage` with an `url`, placeholder, custom options and context. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - */ -- (void)sd_setBackgroundImageWithURL:(nullable NSURL *)url - forState:(UIControlState)state - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context; - -/** - * Set the button `backgroundImage` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setBackgroundImageWithURL:(nullable NSURL *)url - forState:(UIControlState)state - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the button `backgroundImage` with an `url`, placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setBackgroundImageWithURL:(nullable NSURL *)url - forState:(UIControlState)state - placeholderImage:(nullable UIImage *)placeholder - completed:(nullable SDExternalCompletionBlock)completedBlock NS_REFINED_FOR_SWIFT; - -/** - * Set the button `backgroundImage` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setBackgroundImageWithURL:(nullable NSURL *)url - forState:(UIControlState)state - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the button `backgroundImage` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param progressBlock A block called while image is downloading - * @note the progress block is executed on a background queue - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setBackgroundImageWithURL:(nullable NSURL *)url - forState:(UIControlState)state - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the button `backgroundImage` with an `url`, placeholder, custom options and context. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - * @param progressBlock A block called while image is downloading - * @note the progress block is executed on a background queue - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setBackgroundImageWithURL:(nullable NSURL *)url - forState:(UIControlState)state - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock; - -#pragma mark - Cancel - -/** - * Cancel the current image download - */ -- (void)sd_cancelImageLoadForState:(UIControlState)state; - -/** - * Cancel the current backgroundImage download - */ -- (void)sd_cancelBackgroundImageLoadForState:(UIControlState)state; - -@end - -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIButton+WebCache.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIButton+WebCache.m deleted file mode 100644 index 4ccd029..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIButton+WebCache.m +++ /dev/null @@ -1,234 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "UIButton+WebCache.h" - -#if SD_UIKIT - -#import "objc/runtime.h" -#import "UIView+WebCacheOperation.h" -#import "UIView+WebCache.h" -#import "SDInternalMacros.h" - -static char imageURLStorageKey; - -typedef NSMutableDictionary SDStateImageURLDictionary; - -static inline NSString * imageURLKeyForState(UIControlState state) { - return [NSString stringWithFormat:@"image_%lu", (unsigned long)state]; -} - -static inline NSString * backgroundImageURLKeyForState(UIControlState state) { - return [NSString stringWithFormat:@"backgroundImage_%lu", (unsigned long)state]; -} - -static inline NSString * imageOperationKeyForState(UIControlState state) { - return [NSString stringWithFormat:@"UIButtonImageOperation%lu", (unsigned long)state]; -} - -static inline NSString * backgroundImageOperationKeyForState(UIControlState state) { - return [NSString stringWithFormat:@"UIButtonBackgroundImageOperation%lu", (unsigned long)state]; -} - -@implementation UIButton (WebCache) - -#pragma mark - Image - -- (nullable NSURL *)sd_currentImageURL { - NSURL *url = self.sd_imageURLStorage[imageURLKeyForState(self.state)]; - - if (!url) { - url = self.sd_imageURLStorage[imageURLKeyForState(UIControlStateNormal)]; - } - - return url; -} - -- (nullable NSURL *)sd_imageURLForState:(UIControlState)state { - return self.sd_imageURLStorage[imageURLKeyForState(state)]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url forState:(UIControlState)state { - [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url forState:(UIControlState)state placeholderImage:(nullable UIImage *)placeholder { - [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url forState:(UIControlState)state placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options { - [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:options progress:nil completed:nil]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url forState:(UIControlState)state placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options context:(nullable SDWebImageContext *)context { - [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:options context:context progress:nil completed:nil]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url forState:(UIControlState)state completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url forState:(UIControlState)state placeholderImage:(nullable UIImage *)placeholder completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url forState:(UIControlState)state placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:options progress:nil completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url forState:(UIControlState)state placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:options context:nil progress:progressBlock completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url - forState:(UIControlState)state - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock { - if (!url) { - [self.sd_imageURLStorage removeObjectForKey:imageURLKeyForState(state)]; - } else { - self.sd_imageURLStorage[imageURLKeyForState(state)] = url; - } - - SDWebImageMutableContext *mutableContext; - if (context) { - mutableContext = [context mutableCopy]; - } else { - mutableContext = [NSMutableDictionary dictionary]; - } - mutableContext[SDWebImageContextSetImageOperationKey] = imageOperationKeyForState(state); - @weakify(self); - [self sd_internalSetImageWithURL:url - placeholderImage:placeholder - options:options - context:mutableContext - setImageBlock:^(UIImage * _Nullable image, NSData * _Nullable imageData, SDImageCacheType cacheType, NSURL * _Nullable imageURL) { - @strongify(self); - [self setImage:image forState:state]; - } - progress:progressBlock - completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType, imageURL); - } - }]; -} - -#pragma mark - Background Image - -- (nullable NSURL *)sd_currentBackgroundImageURL { - NSURL *url = self.sd_imageURLStorage[backgroundImageURLKeyForState(self.state)]; - - if (!url) { - url = self.sd_imageURLStorage[backgroundImageURLKeyForState(UIControlStateNormal)]; - } - - return url; -} - -- (nullable NSURL *)sd_backgroundImageURLForState:(UIControlState)state { - return self.sd_imageURLStorage[backgroundImageURLKeyForState(state)]; -} - -- (void)sd_setBackgroundImageWithURL:(nullable NSURL *)url forState:(UIControlState)state { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil]; -} - -- (void)sd_setBackgroundImageWithURL:(nullable NSURL *)url forState:(UIControlState)state placeholderImage:(nullable UIImage *)placeholder { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil]; -} - -- (void)sd_setBackgroundImageWithURL:(nullable NSURL *)url forState:(UIControlState)state placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:options progress:nil completed:nil]; -} - -- (void)sd_setBackgroundImageWithURL:(nullable NSURL *)url forState:(UIControlState)state placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options context:(nullable SDWebImageContext *)context { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:options context:context progress:nil completed:nil]; -} - -- (void)sd_setBackgroundImageWithURL:(nullable NSURL *)url forState:(UIControlState)state completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:completedBlock]; -} - -- (void)sd_setBackgroundImageWithURL:(nullable NSURL *)url forState:(UIControlState)state placeholderImage:(nullable UIImage *)placeholder completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:completedBlock]; -} - -- (void)sd_setBackgroundImageWithURL:(nullable NSURL *)url forState:(UIControlState)state placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:options progress:nil completed:completedBlock]; -} - -- (void)sd_setBackgroundImageWithURL:(nullable NSURL *)url forState:(UIControlState)state placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:options context:nil progress:progressBlock completed:completedBlock]; -} - -- (void)sd_setBackgroundImageWithURL:(nullable NSURL *)url - forState:(UIControlState)state - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock { - if (!url) { - [self.sd_imageURLStorage removeObjectForKey:backgroundImageURLKeyForState(state)]; - } else { - self.sd_imageURLStorage[backgroundImageURLKeyForState(state)] = url; - } - - SDWebImageMutableContext *mutableContext; - if (context) { - mutableContext = [context mutableCopy]; - } else { - mutableContext = [NSMutableDictionary dictionary]; - } - mutableContext[SDWebImageContextSetImageOperationKey] = backgroundImageOperationKeyForState(state); - @weakify(self); - [self sd_internalSetImageWithURL:url - placeholderImage:placeholder - options:options - context:mutableContext - setImageBlock:^(UIImage * _Nullable image, NSData * _Nullable imageData, SDImageCacheType cacheType, NSURL * _Nullable imageURL) { - @strongify(self); - [self setBackgroundImage:image forState:state]; - } - progress:progressBlock - completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType, imageURL); - } - }]; -} - -#pragma mark - Cancel - -- (void)sd_cancelImageLoadForState:(UIControlState)state { - [self sd_cancelImageLoadOperationWithKey:imageOperationKeyForState(state)]; -} - -- (void)sd_cancelBackgroundImageLoadForState:(UIControlState)state { - [self sd_cancelImageLoadOperationWithKey:backgroundImageOperationKeyForState(state)]; -} - -#pragma mark - Private - -- (SDStateImageURLDictionary *)sd_imageURLStorage { - SDStateImageURLDictionary *storage = objc_getAssociatedObject(self, &imageURLStorageKey); - if (!storage) { - storage = [NSMutableDictionary dictionary]; - objc_setAssociatedObject(self, &imageURLStorageKey, storage, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - } - - return storage; -} - -@end - -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+ExtendedCacheData.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+ExtendedCacheData.h deleted file mode 100644 index 482c8c4..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+ExtendedCacheData.h +++ /dev/null @@ -1,24 +0,0 @@ -/* -* This file is part of the SDWebImage package. -* (c) Olivier Poitrey -* (c) Fabrice Aneche -* -* For the full copyright and license information, please view the LICENSE -* file that was distributed with this source code. -*/ - -#import -#import "SDWebImageCompat.h" - -@interface UIImage (ExtendedCacheData) - -/** - Read and Write the extended object and bind it to the image. Which can hold some extra metadata like Image's scale factor, URL rich link, date, etc. - The extended object should conforms to NSCoding, which we use `NSKeyedArchiver` and `NSKeyedUnarchiver` to archive it to data, and write to disk cache. - @note The disk cache preserve both of the data and extended data with the same cache key. For manual query, use the `SDDiskCache` protocol method `extendedDataForKey:` instead. - @note You can specify arbitrary object conforms to NSCoding (NSObject protocol here is used to support object using `NS_ROOT_CLASS`, which is not NSObject subclass). If you load image from disk cache, you should check the extended object class to avoid corrupted data. - @warning This object don't need to implements NSSecureCoding (but it's recommended), because we allows arbitrary class. - */ -@property (nonatomic, strong, nullable) id sd_extendedObject; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+ExtendedCacheData.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+ExtendedCacheData.m deleted file mode 100644 index 05d29cf..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+ExtendedCacheData.m +++ /dev/null @@ -1,23 +0,0 @@ -/* -* This file is part of the SDWebImage package. -* (c) Olivier Poitrey -* (c) Fabrice Aneche -* -* For the full copyright and license information, please view the LICENSE -* file that was distributed with this source code. -*/ - -#import "UIImage+ExtendedCacheData.h" -#import - -@implementation UIImage (ExtendedCacheData) - -- (id)sd_extendedObject { - return objc_getAssociatedObject(self, @selector(sd_extendedObject)); -} - -- (void)setSd_extendedObject:(id)sd_extendedObject { - objc_setAssociatedObject(self, @selector(sd_extendedObject), sd_extendedObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+ForceDecode.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+ForceDecode.h deleted file mode 100644 index f368746..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+ForceDecode.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" - -/** - UIImage category about force decode feature (avoid Image/IO's lazy decoding during rendering behavior). - */ -@interface UIImage (ForceDecode) - -/** - A bool value indicating whether the image has already been decoded. This can help to avoid extra force decode. - */ -@property (nonatomic, assign) BOOL sd_isDecoded; - -/** - Decode the provided image. This is useful if you want to force decode the image before rendering to improve performance. - - @param image The image to be decoded - @return The decoded image - */ -+ (nullable UIImage *)sd_decodedImageWithImage:(nullable UIImage *)image; - -/** - Decode and scale down the provided image - - @param image The image to be decoded - @return The decoded and scaled down image - */ -+ (nullable UIImage *)sd_decodedAndScaledDownImageWithImage:(nullable UIImage *)image; - -/** - Decode and scale down the provided image with limit bytes - - @param image The image to be decoded - @param bytes The limit bytes size. Provide 0 to use the build-in limit. - @return The decoded and scaled down image - */ -+ (nullable UIImage *)sd_decodedAndScaledDownImageWithImage:(nullable UIImage *)image limitBytes:(NSUInteger)bytes; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+ForceDecode.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+ForceDecode.m deleted file mode 100644 index 9fc7258..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+ForceDecode.m +++ /dev/null @@ -1,60 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "UIImage+ForceDecode.h" -#import "SDImageCoderHelper.h" -#import "objc/runtime.h" -#import "NSImage+Compatibility.h" - -@implementation UIImage (ForceDecode) - -- (BOOL)sd_isDecoded { - NSNumber *value = objc_getAssociatedObject(self, @selector(sd_isDecoded)); - if (value != nil) { - return value.boolValue; - } else { - // Assume only CGImage based can use lazy decoding - CGImageRef cgImage = self.CGImage; - if (cgImage) { - CFStringRef uttype = CGImageGetUTType(self.CGImage); - if (uttype) { - // Only ImageIO can set `com.apple.ImageIO.imageSourceTypeIdentifier` - return NO; - } else { - // Thumbnail or CGBitmapContext drawn image - return YES; - } - } - } - // Assume others as non-decoded - return NO; -} - -- (void)setSd_isDecoded:(BOOL)sd_isDecoded { - objc_setAssociatedObject(self, @selector(sd_isDecoded), @(sd_isDecoded), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -+ (nullable UIImage *)sd_decodedImageWithImage:(nullable UIImage *)image { - if (!image) { - return nil; - } - return [SDImageCoderHelper decodedImageWithImage:image]; -} - -+ (nullable UIImage *)sd_decodedAndScaledDownImageWithImage:(nullable UIImage *)image { - return [self sd_decodedAndScaledDownImageWithImage:image limitBytes:0]; -} - -+ (nullable UIImage *)sd_decodedAndScaledDownImageWithImage:(nullable UIImage *)image limitBytes:(NSUInteger)bytes { - if (!image) { - return nil; - } - return [SDImageCoderHelper decodedAndScaledDownImageWithImage:image limitBytes:bytes]; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+GIF.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+GIF.h deleted file mode 100644 index 5da8e19..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+GIF.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * (c) Laurin Brandner - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" - -/** - This category is just use as a convenience method. For more detail control, use methods in `UIImage+MultiFormat.h` or directly use `SDImageCoder`. - */ -@interface UIImage (GIF) - -/** - Creates an animated UIImage from an NSData. - This will create animated image if the data is Animated GIF. And will create a static image is the data is Static GIF. - - @param data The GIF data - @return The created image - */ -+ (nullable UIImage *)sd_imageWithGIFData:(nullable NSData *)data; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+GIF.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+GIF.m deleted file mode 100644 index 7158cf3..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+GIF.m +++ /dev/null @@ -1,22 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * (c) Laurin Brandner - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "UIImage+GIF.h" -#import "SDImageGIFCoder.h" - -@implementation UIImage (GIF) - -+ (nullable UIImage *)sd_imageWithGIFData:(nullable NSData *)data { - if (!data) { - return nil; - } - return [[SDImageGIFCoder sharedCoder] decodedImageWithData:data options:0]; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+MemoryCacheCost.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+MemoryCacheCost.h deleted file mode 100644 index 0ff2f2f..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+MemoryCacheCost.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" - -/** - UIImage category for memory cache cost. - */ -@interface UIImage (MemoryCacheCost) - -/** - The memory cache cost for specify image used by image cache. The cost function is the bytes size held in memory. - If you set some associated object to `UIImage`, you can set the custom value to indicate the memory cost. - - For `UIImage`, this method return the single frame bytes size when `image.images` is nil for static image. Return full frame bytes size when `image.images` is not nil for animated image. - For `NSImage`, this method return the single frame bytes size because `NSImage` does not store all frames in memory. - @note Note that because of the limitations of category this property can get out of sync if you create another instance with CGImage or other methods. - @note For custom animated class conforms to `SDAnimatedImage`, you can override this getter method in your subclass to return a more proper value instead, which representing the current frame's total bytes. - */ -@property (assign, nonatomic) NSUInteger sd_memoryCost; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+MemoryCacheCost.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+MemoryCacheCost.m deleted file mode 100644 index b936500..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+MemoryCacheCost.m +++ /dev/null @@ -1,47 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "UIImage+MemoryCacheCost.h" -#import "objc/runtime.h" -#import "NSImage+Compatibility.h" - -FOUNDATION_STATIC_INLINE NSUInteger SDMemoryCacheCostForImage(UIImage *image) { - CGImageRef imageRef = image.CGImage; - if (!imageRef) { - return 0; - } - NSUInteger bytesPerFrame = CGImageGetBytesPerRow(imageRef) * CGImageGetHeight(imageRef); - NSUInteger frameCount; -#if SD_MAC - frameCount = 1; -#elif SD_UIKIT || SD_WATCH - // Filter the same frame in `_UIAnimatedImage`. - frameCount = image.images.count > 1 ? [NSSet setWithArray:image.images].count : 1; -#endif - NSUInteger cost = bytesPerFrame * frameCount; - return cost; -} - -@implementation UIImage (MemoryCacheCost) - -- (NSUInteger)sd_memoryCost { - NSNumber *value = objc_getAssociatedObject(self, @selector(sd_memoryCost)); - NSUInteger memoryCost; - if (value != nil) { - memoryCost = [value unsignedIntegerValue]; - } else { - memoryCost = SDMemoryCacheCostForImage(self); - } - return memoryCost; -} - -- (void)setSd_memoryCost:(NSUInteger)sd_memoryCost { - objc_setAssociatedObject(self, @selector(sd_memoryCost), @(sd_memoryCost), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+Metadata.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+Metadata.h deleted file mode 100644 index 90481eb..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+Metadata.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" -#import "NSData+ImageContentType.h" -#import "SDImageCoder.h" - -/** - UIImage category for image metadata, including animation, loop count, format, incremental, etc. - */ -@interface UIImage (Metadata) - -/** - * UIKit: - * For static image format, this value is always 0. - * For animated image format, 0 means infinite looping. - * Note that because of the limitations of categories this property can get out of sync if you create another instance with CGImage or other methods. - * AppKit: - * NSImage currently only support animated via `NSBitmapImageRep`(GIF) or `SDAnimatedImageRep`(APNG/GIF/WebP) unlike UIImage. - * The getter of this property will get the loop count from animated imageRep - * The setter of this property will set the loop count from animated imageRep - */ -@property (nonatomic, assign) NSUInteger sd_imageLoopCount; - -/** - * UIKit: - * Returns the `images`'s count by unapply the patch for the different frame durations. Which matches the real visible frame count when displaying on UIImageView. - * See more in `SDImageCoderHelper.animatedImageWithFrames`. - * Returns 1 for static image. - * AppKit: - * Returns the underlaying `NSBitmapImageRep` or `SDAnimatedImageRep` frame count. - * Returns 1 for static image. - */ -@property (nonatomic, assign, readonly) NSUInteger sd_imageFrameCount; - -/** - * UIKit: - * Check the `images` array property. - * AppKit: - * NSImage currently only support animated via GIF imageRep unlike UIImage. It will check the imageRep's frame count. - */ -@property (nonatomic, assign, readonly) BOOL sd_isAnimated; - -/** - * UIKit: - * Check the `isSymbolImage` property. Also check the system PDF(iOS 11+) && SVG(iOS 13+) support. - * AppKit: - * NSImage supports PDF && SVG && EPS imageRep, check the imageRep class. - */ -@property (nonatomic, assign, readonly) BOOL sd_isVector; - -/** - * The image format represent the original compressed image data format. - * If you don't manually specify a format, this information is retrieve from CGImage using `CGImageGetUTType`, which may return nil for non-CG based image. At this time it will return `SDImageFormatUndefined` as default value. - * @note Note that because of the limitations of categories this property can get out of sync if you create another instance with CGImage or other methods. - */ -@property (nonatomic, assign) SDImageFormat sd_imageFormat; - -/** - A bool value indicating whether the image is during incremental decoding and may not contains full pixels. - */ -@property (nonatomic, assign) BOOL sd_isIncremental; - -/** - A dictionary value contains the decode options when decoded from SDWebImage loading system (say, `SDImageCacheDecodeImageData/SDImageLoaderDecode[Progressive]ImageData`) - It may not always available and only image decoding related options will be saved. (including [.decodeScaleFactor, .decodeThumbnailPixelSize, .decodePreserveAspectRatio, .decodeFirstFrameOnly]) - @note This is used to identify and check the image from downloader when multiple different request (which want different image thumbnail size, image class, etc) share the same URLOperation. - @warning This API exist only because of current SDWebImageDownloader bad design which does not callback the context we call it. There will be refactory in future (API break) and you SHOULD NOT rely on this property at all. - */ -@property (nonatomic, copy) SDImageCoderOptions *sd_decodeOptions; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+Metadata.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+Metadata.m deleted file mode 100644 index a526f9b..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+Metadata.m +++ /dev/null @@ -1,199 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "UIImage+Metadata.h" -#import "NSImage+Compatibility.h" -#import "SDInternalMacros.h" -#import "objc/runtime.h" - -@implementation UIImage (Metadata) - -#if SD_UIKIT || SD_WATCH - -- (NSUInteger)sd_imageLoopCount { - NSUInteger imageLoopCount = 0; - NSNumber *value = objc_getAssociatedObject(self, @selector(sd_imageLoopCount)); - if ([value isKindOfClass:[NSNumber class]]) { - imageLoopCount = value.unsignedIntegerValue; - } - return imageLoopCount; -} - -- (void)setSd_imageLoopCount:(NSUInteger)sd_imageLoopCount { - NSNumber *value = @(sd_imageLoopCount); - objc_setAssociatedObject(self, @selector(sd_imageLoopCount), value, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (NSUInteger)sd_imageFrameCount { - NSArray *animatedImages = self.images; - if (!animatedImages || animatedImages.count <= 1) { - return 1; - } - NSNumber *value = objc_getAssociatedObject(self, @selector(sd_imageFrameCount)); - if ([value isKindOfClass:[NSNumber class]]) { - return [value unsignedIntegerValue]; - } - __block NSUInteger frameCount = 1; - __block UIImage *previousImage = animatedImages.firstObject; - [animatedImages enumerateObjectsUsingBlock:^(UIImage * _Nonnull image, NSUInteger idx, BOOL * _Nonnull stop) { - // ignore first - if (idx == 0) { - return; - } - if (![image isEqual:previousImage]) { - frameCount++; - } - previousImage = image; - }]; - objc_setAssociatedObject(self, @selector(sd_imageFrameCount), @(frameCount), OBJC_ASSOCIATION_RETAIN_NONATOMIC); - - return frameCount; -} - -- (BOOL)sd_isAnimated { - return (self.images != nil); -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" -- (BOOL)sd_isVector { - if (@available(iOS 13.0, tvOS 13.0, watchOS 6.0, *)) { - // Xcode 11 supports symbol image, keep Xcode 10 compatible currently - SEL SymbolSelector = NSSelectorFromString(@"isSymbolImage"); - if ([self respondsToSelector:SymbolSelector] && [self performSelector:SymbolSelector]) { - return YES; - } - // SVG - SEL SVGSelector = SD_SEL_SPI(CGSVGDocument); - if ([self respondsToSelector:SVGSelector] && [self performSelector:SVGSelector]) { - return YES; - } - } - if (@available(iOS 11.0, tvOS 11.0, watchOS 4.0, *)) { - // PDF - SEL PDFSelector = SD_SEL_SPI(CGPDFPage); - if ([self respondsToSelector:PDFSelector] && [self performSelector:PDFSelector]) { - return YES; - } - } - return NO; -} -#pragma clang diagnostic pop - -#else - -- (NSUInteger)sd_imageLoopCount { - NSUInteger imageLoopCount = 0; - NSRect imageRect = NSMakeRect(0, 0, self.size.width, self.size.height); - NSImageRep *imageRep = [self bestRepresentationForRect:imageRect context:nil hints:nil]; - NSBitmapImageRep *bitmapImageRep; - if ([imageRep isKindOfClass:[NSBitmapImageRep class]]) { - bitmapImageRep = (NSBitmapImageRep *)imageRep; - } - if (bitmapImageRep) { - imageLoopCount = [[bitmapImageRep valueForProperty:NSImageLoopCount] unsignedIntegerValue]; - } - return imageLoopCount; -} - -- (void)setSd_imageLoopCount:(NSUInteger)sd_imageLoopCount { - NSRect imageRect = NSMakeRect(0, 0, self.size.width, self.size.height); - NSImageRep *imageRep = [self bestRepresentationForRect:imageRect context:nil hints:nil]; - NSBitmapImageRep *bitmapImageRep; - if ([imageRep isKindOfClass:[NSBitmapImageRep class]]) { - bitmapImageRep = (NSBitmapImageRep *)imageRep; - } - if (bitmapImageRep) { - [bitmapImageRep setProperty:NSImageLoopCount withValue:@(sd_imageLoopCount)]; - } -} - -- (NSUInteger)sd_imageFrameCount { - NSRect imageRect = NSMakeRect(0, 0, self.size.width, self.size.height); - NSImageRep *imageRep = [self bestRepresentationForRect:imageRect context:nil hints:nil]; - NSBitmapImageRep *bitmapImageRep; - if ([imageRep isKindOfClass:[NSBitmapImageRep class]]) { - bitmapImageRep = (NSBitmapImageRep *)imageRep; - } - if (bitmapImageRep) { - return [[bitmapImageRep valueForProperty:NSImageFrameCount] unsignedIntegerValue]; - } - return 1; -} - -- (BOOL)sd_isAnimated { - BOOL isAnimated = NO; - NSRect imageRect = NSMakeRect(0, 0, self.size.width, self.size.height); - NSImageRep *imageRep = [self bestRepresentationForRect:imageRect context:nil hints:nil]; - NSBitmapImageRep *bitmapImageRep; - if ([imageRep isKindOfClass:[NSBitmapImageRep class]]) { - bitmapImageRep = (NSBitmapImageRep *)imageRep; - } - if (bitmapImageRep) { - NSUInteger frameCount = [[bitmapImageRep valueForProperty:NSImageFrameCount] unsignedIntegerValue]; - isAnimated = frameCount > 1 ? YES : NO; - } - return isAnimated; -} - -- (BOOL)sd_isVector { - NSRect imageRect = NSMakeRect(0, 0, self.size.width, self.size.height); - NSImageRep *imageRep = [self bestRepresentationForRect:imageRect context:nil hints:nil]; - if ([imageRep isKindOfClass:[NSPDFImageRep class]]) { - return YES; - } - if ([imageRep isKindOfClass:[NSEPSImageRep class]]) { - return YES; - } - if ([NSStringFromClass(imageRep.class) hasSuffix:@"NSSVGImageRep"]) { - return YES; - } - return NO; -} - -#endif - -- (SDImageFormat)sd_imageFormat { - SDImageFormat imageFormat = SDImageFormatUndefined; - NSNumber *value = objc_getAssociatedObject(self, @selector(sd_imageFormat)); - if ([value isKindOfClass:[NSNumber class]]) { - imageFormat = value.integerValue; - return imageFormat; - } - // Check CGImage's UTType, may return nil for non-Image/IO based image - CFStringRef uttype = CGImageGetUTType(self.CGImage); - imageFormat = [NSData sd_imageFormatFromUTType:uttype]; - return imageFormat; -} - -- (void)setSd_imageFormat:(SDImageFormat)sd_imageFormat { - objc_setAssociatedObject(self, @selector(sd_imageFormat), @(sd_imageFormat), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)setSd_isIncremental:(BOOL)sd_isIncremental { - objc_setAssociatedObject(self, @selector(sd_isIncremental), @(sd_isIncremental), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (BOOL)sd_isIncremental { - NSNumber *value = objc_getAssociatedObject(self, @selector(sd_isIncremental)); - return value.boolValue; -} - -- (void)setSd_decodeOptions:(SDImageCoderOptions *)sd_decodeOptions { - objc_setAssociatedObject(self, @selector(sd_decodeOptions), sd_decodeOptions, OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (SDImageCoderOptions *)sd_decodeOptions { - SDImageCoderOptions *value = objc_getAssociatedObject(self, @selector(sd_decodeOptions)); - if ([value isKindOfClass:NSDictionary.class]) { - return value; - } - return nil; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+MultiFormat.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+MultiFormat.h deleted file mode 100644 index a0935b5..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+MultiFormat.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" -#import "NSData+ImageContentType.h" - -/** - UIImage category for convenient image format decoding/encoding. - */ -@interface UIImage (MultiFormat) -#pragma mark - Decode -/** - Create and decode a image with the specify image data - - @param data The image data - @return The created image - */ -+ (nullable UIImage *)sd_imageWithData:(nullable NSData *)data; - -/** - Create and decode a image with the specify image data and scale - - @param data The image data - @param scale The image scale factor. Should be greater than or equal to 1.0. - @return The created image - */ -+ (nullable UIImage *)sd_imageWithData:(nullable NSData *)data scale:(CGFloat)scale; - -/** - Create and decode a image with the specify image data and scale, allow specify animate/static control - - @param data The image data - @param scale The image scale factor. Should be greater than or equal to 1.0. - @param firstFrameOnly Even if the image data is animated image format, decode the first frame only as static image. - @return The created image - */ -+ (nullable UIImage *)sd_imageWithData:(nullable NSData *)data scale:(CGFloat)scale firstFrameOnly:(BOOL)firstFrameOnly; - -#pragma mark - Encode -/** - Encode the current image to the data, the image format is unspecified - - @note If the receiver is `SDAnimatedImage`, this will return the animated image data if available. No more extra encoding process. - @return The encoded data. If can't encode, return nil - */ -- (nullable NSData *)sd_imageData; - -/** - Encode the current image to data with the specify image format - - @param imageFormat The specify image format - @return The encoded data. If can't encode, return nil - */ -- (nullable NSData *)sd_imageDataAsFormat:(SDImageFormat)imageFormat NS_SWIFT_NAME(sd_imageData(as:)); - -/** - Encode the current image to data with the specify image format and compression quality - - @param imageFormat The specify image format - @param compressionQuality The quality of the resulting image data. Value between 0.0-1.0. Some coders may not support compression quality. - @return The encoded data. If can't encode, return nil - */ -- (nullable NSData *)sd_imageDataAsFormat:(SDImageFormat)imageFormat compressionQuality:(double)compressionQuality NS_SWIFT_NAME(sd_imageData(as:compressionQuality:)); - -/** - Encode the current image to data with the specify image format and compression quality, allow specify animate/static control - - @param imageFormat The specify image format - @param compressionQuality The quality of the resulting image data. Value between 0.0-1.0. Some coders may not support compression quality. - @param firstFrameOnly Even if the image is animated image, encode the first frame only as static image. - @return The encoded data. If can't encode, return nil - */ -- (nullable NSData *)sd_imageDataAsFormat:(SDImageFormat)imageFormat compressionQuality:(double)compressionQuality firstFrameOnly:(BOOL)firstFrameOnly NS_SWIFT_NAME(sd_imageData(as:compressionQuality:firstFrameOnly:)); - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+MultiFormat.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+MultiFormat.m deleted file mode 100644 index 04d08c5..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+MultiFormat.m +++ /dev/null @@ -1,47 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "UIImage+MultiFormat.h" -#import "SDImageCodersManager.h" - -@implementation UIImage (MultiFormat) - -+ (nullable UIImage *)sd_imageWithData:(nullable NSData *)data { - return [self sd_imageWithData:data scale:1]; -} - -+ (nullable UIImage *)sd_imageWithData:(nullable NSData *)data scale:(CGFloat)scale { - return [self sd_imageWithData:data scale:scale firstFrameOnly:NO]; -} - -+ (nullable UIImage *)sd_imageWithData:(nullable NSData *)data scale:(CGFloat)scale firstFrameOnly:(BOOL)firstFrameOnly { - if (!data) { - return nil; - } - SDImageCoderOptions *options = @{SDImageCoderDecodeScaleFactor : @(MAX(scale, 1)), SDImageCoderDecodeFirstFrameOnly : @(firstFrameOnly)}; - return [[SDImageCodersManager sharedManager] decodedImageWithData:data options:options]; -} - -- (nullable NSData *)sd_imageData { - return [self sd_imageDataAsFormat:SDImageFormatUndefined]; -} - -- (nullable NSData *)sd_imageDataAsFormat:(SDImageFormat)imageFormat { - return [self sd_imageDataAsFormat:imageFormat compressionQuality:1]; -} - -- (nullable NSData *)sd_imageDataAsFormat:(SDImageFormat)imageFormat compressionQuality:(double)compressionQuality { - return [self sd_imageDataAsFormat:imageFormat compressionQuality:compressionQuality firstFrameOnly:NO]; -} - -- (nullable NSData *)sd_imageDataAsFormat:(SDImageFormat)imageFormat compressionQuality:(double)compressionQuality firstFrameOnly:(BOOL)firstFrameOnly { - SDImageCoderOptions *options = @{SDImageCoderEncodeCompressionQuality : @(compressionQuality), SDImageCoderEncodeFirstFrameOnly : @(firstFrameOnly)}; - return [[SDImageCodersManager sharedManager] encodedDataWithImage:self format:imageFormat options:options]; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+Transform.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+Transform.h deleted file mode 100644 index 06cb66d..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+Transform.h +++ /dev/null @@ -1,146 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" - -typedef NS_ENUM(NSUInteger, SDImageScaleMode) { - SDImageScaleModeFill = 0, - SDImageScaleModeAspectFit = 1, - SDImageScaleModeAspectFill = 2 -}; - -#if SD_UIKIT || SD_WATCH -typedef UIRectCorner SDRectCorner; -#else -typedef NS_OPTIONS(NSUInteger, SDRectCorner) { - SDRectCornerTopLeft = 1 << 0, - SDRectCornerTopRight = 1 << 1, - SDRectCornerBottomLeft = 1 << 2, - SDRectCornerBottomRight = 1 << 3, - SDRectCornerAllCorners = ~0UL -}; -#endif - -/** - Provide some common method for `UIImage`. - Image process is based on Core Graphics and vImage. - */ -@interface UIImage (Transform) - -#pragma mark - Image Geometry - -/** - Returns a new image which is resized from this image. - You can specify a larger or smaller size than the image size. The image content will be changed with the scale mode. - - @param size The new size to be resized, values should be positive. - @param scaleMode The scale mode for image content. - @return The new image with the given size. - */ -- (nullable UIImage *)sd_resizedImageWithSize:(CGSize)size scaleMode:(SDImageScaleMode)scaleMode; - -/** - Returns a new image which is cropped from this image. - - @param rect Image's inner rect. - @return The new image with the cropping rect. - */ -- (nullable UIImage *)sd_croppedImageWithRect:(CGRect)rect; - -/** - Rounds a new image with a given corner radius and corners. - - @param cornerRadius The radius of each corner oval. Values larger than half the - rectangle's width or height are clamped appropriately to - half the width or height. - @param corners A bitmask value that identifies the corners that you want - rounded. You can use this parameter to round only a subset - of the corners of the rectangle. - @param borderWidth The inset border line width. Values larger than half the rectangle's - width or height are clamped appropriately to half the width - or height. - @param borderColor The border stroke color. nil means clear color. - @return The new image with the round corner. - */ -- (nullable UIImage *)sd_roundedCornerImageWithRadius:(CGFloat)cornerRadius - corners:(SDRectCorner)corners - borderWidth:(CGFloat)borderWidth - borderColor:(nullable UIColor *)borderColor; - -/** - Returns a new rotated image (relative to the center). - - @param angle Rotated radians in counterclockwise.⟲ - @param fitSize YES: new image's size is extend to fit all content. - NO: image's size will not change, content may be clipped. - @return The new image with the rotation. - */ -- (nullable UIImage *)sd_rotatedImageWithAngle:(CGFloat)angle fitSize:(BOOL)fitSize; - -/** - Returns a new horizontally(vertically) flipped image. - - @param horizontal YES to flip the image horizontally. ⇋ - @param vertical YES to flip the image vertically. ⥯ - @return The new image with the flipping. - */ -- (nullable UIImage *)sd_flippedImageWithHorizontal:(BOOL)horizontal vertical:(BOOL)vertical; - -#pragma mark - Image Blending - -/** - Return a tinted image with the given color. This actually use alpha blending of current image and the tint color. - - @param tintColor The tint color. - @return The new image with the tint color. - */ -- (nullable UIImage *)sd_tintedImageWithColor:(nonnull UIColor *)tintColor; - -/** - Return the pixel color at specify position. The point is from the top-left to the bottom-right and 0-based. The returned the color is always be RGBA format. The image must be CG-based. - @note The point's x/y should not be smaller than 0, or greater than or equal to width/height. - @note The overhead of object creation means this method is best suited for infrequent color sampling. For heavy image processing, grab the raw bitmap data and process yourself. - - @param point The position of pixel - @return The color for specify pixel, or nil if any error occur - */ -- (nullable UIColor *)sd_colorAtPoint:(CGPoint)point; - -/** - Return the pixel color array with specify rectangle. The rect is from the top-left to the bottom-right and 0-based. The returned the color is always be RGBA format. The image must be CG-based. - @note The rect's width/height should not be smaller than or equal to 0. The minX/minY should not be smaller than 0. The maxX/maxY should not be greater than width/height. Attention this limit is different from `sd_colorAtPoint:` (point: (0, 0) like rect: (0, 0, 1, 1)) - @note The overhead of object creation means this method is best suited for infrequent color sampling. For heavy image processing, grab the raw bitmap data and process yourself. - - @param rect The rectangle of pixels - @return The color array for specify pixels, or nil if any error occur - */ -- (nullable NSArray *)sd_colorsWithRect:(CGRect)rect; - -#pragma mark - Image Effect - -/** - Return a new image applied a blur effect. - - @param blurRadius The radius of the blur in points, 0 means no blur effect. - - @return The new image with blur effect, or nil if an error occurs (e.g. no enough memory). - */ -- (nullable UIImage *)sd_blurredImageWithRadius:(CGFloat)blurRadius; - -#if SD_UIKIT || SD_MAC -/** - Return a new image applied a CIFilter. - - @param filter The CIFilter to be applied to the image. - @return The new image with the CIFilter, or nil if an error occurs (e.g. no - enough memory). - */ -- (nullable UIImage *)sd_filteredImageWithFilter:(nonnull CIFilter *)filter; -#endif - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+Transform.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+Transform.m deleted file mode 100644 index 2cd8a6f..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+Transform.m +++ /dev/null @@ -1,824 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "UIImage+Transform.h" -#import "NSImage+Compatibility.h" -#import "SDImageGraphics.h" -#import "SDGraphicsImageRenderer.h" -#import "NSBezierPath+SDRoundedCorners.h" -#import -#if SD_UIKIT || SD_MAC -#import -#endif - -static inline CGRect SDCGRectFitWithScaleMode(CGRect rect, CGSize size, SDImageScaleMode scaleMode) { - rect = CGRectStandardize(rect); - size.width = size.width < 0 ? -size.width : size.width; - size.height = size.height < 0 ? -size.height : size.height; - CGPoint center = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect)); - switch (scaleMode) { - case SDImageScaleModeAspectFit: - case SDImageScaleModeAspectFill: { - if (rect.size.width < 0.01 || rect.size.height < 0.01 || - size.width < 0.01 || size.height < 0.01) { - rect.origin = center; - rect.size = CGSizeZero; - } else { - CGFloat scale; - if (scaleMode == SDImageScaleModeAspectFit) { - if (size.width / size.height < rect.size.width / rect.size.height) { - scale = rect.size.height / size.height; - } else { - scale = rect.size.width / size.width; - } - } else { - if (size.width / size.height < rect.size.width / rect.size.height) { - scale = rect.size.width / size.width; - } else { - scale = rect.size.height / size.height; - } - } - size.width *= scale; - size.height *= scale; - rect.size = size; - rect.origin = CGPointMake(center.x - size.width * 0.5, center.y - size.height * 0.5); - } - } break; - case SDImageScaleModeFill: - default: { - rect = rect; - } - } - return rect; -} - -static inline UIColor * SDGetColorFromGrayscale(Pixel_88 pixel, CGBitmapInfo bitmapInfo) { - // Get alpha info, byteOrder info - CGImageAlphaInfo alphaInfo = bitmapInfo & kCGBitmapAlphaInfoMask; - CGBitmapInfo byteOrderInfo = bitmapInfo & kCGBitmapByteOrderMask; - CGFloat w = 0, a = 1; - - BOOL byteOrderNormal = NO; - switch (byteOrderInfo) { - case kCGBitmapByteOrderDefault: { - byteOrderNormal = YES; - } break; - case kCGBitmapByteOrder32Little: { - } break; - case kCGBitmapByteOrder32Big: { - byteOrderNormal = YES; - } break; - default: break; - } - switch (alphaInfo) { - case kCGImageAlphaPremultipliedFirst: - case kCGImageAlphaFirst: { - if (byteOrderNormal) { - // AW - a = pixel[0] / 255.0; - w = pixel[1] / 255.0; - } else { - // WA - w = pixel[0] / 255.0; - a = pixel[1] / 255.0; - } - } - break; - case kCGImageAlphaPremultipliedLast: - case kCGImageAlphaLast: { - if (byteOrderNormal) { - // WA - w = pixel[0] / 255.0; - a = pixel[1] / 255.0; - } else { - // AW - a = pixel[0] / 255.0; - w = pixel[1] / 255.0; - } - } - break; - case kCGImageAlphaNone: { - // W - w = pixel[0] / 255.0; - } - break; - case kCGImageAlphaNoneSkipLast: { - if (byteOrderNormal) { - // WX - w = pixel[0] / 255.0; - } else { - // XW - a = pixel[1] / 255.0; - } - } - break; - case kCGImageAlphaNoneSkipFirst: { - if (byteOrderNormal) { - // XW - a = pixel[1] / 255.0; - } else { - // WX - a = pixel[0] / 255.0; - } - } - break; - case kCGImageAlphaOnly: { - // A - a = pixel[0] / 255.0; - } - break; - default: - break; - } - - return [UIColor colorWithWhite:w alpha:a]; -} - -static inline UIColor * SDGetColorFromRGBA(Pixel_8888 pixel, CGBitmapInfo bitmapInfo) { - // Get alpha info, byteOrder info - CGImageAlphaInfo alphaInfo = bitmapInfo & kCGBitmapAlphaInfoMask; - CGBitmapInfo byteOrderInfo = bitmapInfo & kCGBitmapByteOrderMask; - CGFloat r = 0, g = 0, b = 0, a = 1; - - BOOL byteOrderNormal = NO; - switch (byteOrderInfo) { - case kCGBitmapByteOrderDefault: { - byteOrderNormal = YES; - } break; - case kCGBitmapByteOrder32Little: { - } break; - case kCGBitmapByteOrder32Big: { - byteOrderNormal = YES; - } break; - default: break; - } - switch (alphaInfo) { - case kCGImageAlphaPremultipliedFirst: - case kCGImageAlphaFirst: { - if (byteOrderNormal) { - // ARGB8888 - a = pixel[0] / 255.0; - r = pixel[1] / 255.0; - g = pixel[2] / 255.0; - b = pixel[3] / 255.0; - } else { - // BGRA8888 - b = pixel[0] / 255.0; - g = pixel[1] / 255.0; - r = pixel[2] / 255.0; - a = pixel[3] / 255.0; - } - } - break; - case kCGImageAlphaPremultipliedLast: - case kCGImageAlphaLast: { - if (byteOrderNormal) { - // RGBA8888 - r = pixel[0] / 255.0; - g = pixel[1] / 255.0; - b = pixel[2] / 255.0; - a = pixel[3] / 255.0; - } else { - // ABGR8888 - a = pixel[0] / 255.0; - b = pixel[1] / 255.0; - g = pixel[2] / 255.0; - r = pixel[3] / 255.0; - } - } - break; - case kCGImageAlphaNone: { - if (byteOrderNormal) { - // RGB - r = pixel[0] / 255.0; - g = pixel[1] / 255.0; - b = pixel[2] / 255.0; - } else { - // BGR - b = pixel[0] / 255.0; - g = pixel[1] / 255.0; - r = pixel[2] / 255.0; - } - } - break; - case kCGImageAlphaNoneSkipLast: { - if (byteOrderNormal) { - // RGBX - r = pixel[0] / 255.0; - g = pixel[1] / 255.0; - b = pixel[2] / 255.0; - } else { - // XBGR - b = pixel[1] / 255.0; - g = pixel[2] / 255.0; - r = pixel[3] / 255.0; - } - } - break; - case kCGImageAlphaNoneSkipFirst: { - if (byteOrderNormal) { - // XRGB - r = pixel[1] / 255.0; - g = pixel[2] / 255.0; - b = pixel[3] / 255.0; - } else { - // BGRX - b = pixel[0] / 255.0; - g = pixel[1] / 255.0; - r = pixel[2] / 255.0; - } - } - break; - case kCGImageAlphaOnly: { - // A - a = pixel[0] / 255.0; - } - break; - default: - break; - } - - return [UIColor colorWithRed:r green:g blue:b alpha:a]; -} - -#if SD_UIKIT || SD_MAC -// Create-Rule, caller should call CGImageRelease -static inline CGImageRef _Nullable SDCreateCGImageFromCIImage(CIImage * _Nonnull ciImage) { - CGImageRef imageRef = NULL; - if (@available(iOS 10, macOS 10.12, tvOS 10, *)) { - imageRef = ciImage.CGImage; - } - if (!imageRef) { - CIContext *context = [CIContext context]; - imageRef = [context createCGImage:ciImage fromRect:ciImage.extent]; - } else { - CGImageRetain(imageRef); - } - return imageRef; -} -#endif - -@implementation UIImage (Transform) - -- (void)sd_drawInRect:(CGRect)rect context:(CGContextRef)context scaleMode:(SDImageScaleMode)scaleMode clipsToBounds:(BOOL)clips { - CGRect drawRect = SDCGRectFitWithScaleMode(rect, self.size, scaleMode); - if (drawRect.size.width == 0 || drawRect.size.height == 0) return; - if (clips) { - if (context) { - CGContextSaveGState(context); - CGContextAddRect(context, rect); - CGContextClip(context); - [self drawInRect:drawRect]; - CGContextRestoreGState(context); - } - } else { - [self drawInRect:drawRect]; - } -} - -- (nullable UIImage *)sd_resizedImageWithSize:(CGSize)size scaleMode:(SDImageScaleMode)scaleMode { - if (size.width <= 0 || size.height <= 0) return nil; - SDGraphicsImageRendererFormat *format = [[SDGraphicsImageRendererFormat alloc] init]; - format.scale = self.scale; - SDGraphicsImageRenderer *renderer = [[SDGraphicsImageRenderer alloc] initWithSize:size format:format]; - UIImage *image = [renderer imageWithActions:^(CGContextRef _Nonnull context) { - [self sd_drawInRect:CGRectMake(0, 0, size.width, size.height) context:context scaleMode:scaleMode clipsToBounds:NO]; - }]; - return image; -} - -- (nullable UIImage *)sd_croppedImageWithRect:(CGRect)rect { - rect.origin.x *= self.scale; - rect.origin.y *= self.scale; - rect.size.width *= self.scale; - rect.size.height *= self.scale; - if (rect.size.width <= 0 || rect.size.height <= 0) return nil; - -#if SD_UIKIT || SD_MAC - // CIImage shortcut - if (self.CIImage) { - CGRect croppingRect = CGRectMake(rect.origin.x, self.size.height - CGRectGetMaxY(rect), rect.size.width, rect.size.height); - CIImage *ciImage = [self.CIImage imageByCroppingToRect:croppingRect]; -#if SD_UIKIT - UIImage *image = [UIImage imageWithCIImage:ciImage scale:self.scale orientation:self.imageOrientation]; -#else - UIImage *image = [[UIImage alloc] initWithCIImage:ciImage scale:self.scale orientation:kCGImagePropertyOrientationUp]; -#endif - return image; - } -#endif - - CGImageRef imageRef = self.CGImage; - if (!imageRef) { - return nil; - } - - CGImageRef croppedImageRef = CGImageCreateWithImageInRect(imageRef, rect); - if (!croppedImageRef) { - return nil; - } -#if SD_UIKIT || SD_WATCH - UIImage *image = [UIImage imageWithCGImage:croppedImageRef scale:self.scale orientation:self.imageOrientation]; -#else - UIImage *image = [[UIImage alloc] initWithCGImage:croppedImageRef scale:self.scale orientation:kCGImagePropertyOrientationUp]; -#endif - CGImageRelease(croppedImageRef); - return image; -} - -- (nullable UIImage *)sd_roundedCornerImageWithRadius:(CGFloat)cornerRadius corners:(SDRectCorner)corners borderWidth:(CGFloat)borderWidth borderColor:(nullable UIColor *)borderColor { - SDGraphicsImageRendererFormat *format = [[SDGraphicsImageRendererFormat alloc] init]; - format.scale = self.scale; - SDGraphicsImageRenderer *renderer = [[SDGraphicsImageRenderer alloc] initWithSize:self.size format:format]; - UIImage *image = [renderer imageWithActions:^(CGContextRef _Nonnull context) { - CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height); - - CGFloat minSize = MIN(self.size.width, self.size.height); - if (borderWidth < minSize / 2) { -#if SD_UIKIT || SD_WATCH - UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectInset(rect, borderWidth, borderWidth) byRoundingCorners:corners cornerRadii:CGSizeMake(cornerRadius, cornerRadius)]; -#else - NSBezierPath *path = [NSBezierPath sd_bezierPathWithRoundedRect:CGRectInset(rect, borderWidth, borderWidth) byRoundingCorners:corners cornerRadius:cornerRadius]; -#endif - [path closePath]; - - CGContextSaveGState(context); - [path addClip]; - [self drawInRect:rect]; - CGContextRestoreGState(context); - } - - if (borderColor && borderWidth < minSize / 2 && borderWidth > 0) { - CGFloat strokeInset = (floor(borderWidth * self.scale) + 0.5) / self.scale; - CGRect strokeRect = CGRectInset(rect, strokeInset, strokeInset); - CGFloat strokeRadius = cornerRadius > self.scale / 2 ? cornerRadius - self.scale / 2 : 0; -#if SD_UIKIT || SD_WATCH - UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:strokeRect byRoundingCorners:corners cornerRadii:CGSizeMake(strokeRadius, strokeRadius)]; -#else - NSBezierPath *path = [NSBezierPath sd_bezierPathWithRoundedRect:strokeRect byRoundingCorners:corners cornerRadius:strokeRadius]; -#endif - [path closePath]; - - path.lineWidth = borderWidth; - [borderColor setStroke]; - [path stroke]; - } - }]; - return image; -} - -- (nullable UIImage *)sd_rotatedImageWithAngle:(CGFloat)angle fitSize:(BOOL)fitSize { - size_t width = self.size.width; - size_t height = self.size.height; - CGRect newRect = CGRectApplyAffineTransform(CGRectMake(0, 0, width, height), - fitSize ? CGAffineTransformMakeRotation(angle) : CGAffineTransformIdentity); - -#if SD_UIKIT || SD_MAC - // CIImage shortcut - if (self.CIImage) { - CIImage *ciImage = self.CIImage; - if (fitSize) { - CGAffineTransform transform = CGAffineTransformMakeRotation(angle); - ciImage = [ciImage imageByApplyingTransform:transform]; - } else { - CIFilter *filter = [CIFilter filterWithName:@"CIStraightenFilter"]; - [filter setValue:ciImage forKey:kCIInputImageKey]; - [filter setValue:@(angle) forKey:kCIInputAngleKey]; - ciImage = filter.outputImage; - } -#if SD_UIKIT || SD_WATCH - UIImage *image = [UIImage imageWithCIImage:ciImage scale:self.scale orientation:self.imageOrientation]; -#else - UIImage *image = [[UIImage alloc] initWithCIImage:ciImage scale:self.scale orientation:kCGImagePropertyOrientationUp]; -#endif - return image; - } -#endif - - SDGraphicsImageRendererFormat *format = [[SDGraphicsImageRendererFormat alloc] init]; - format.scale = self.scale; - SDGraphicsImageRenderer *renderer = [[SDGraphicsImageRenderer alloc] initWithSize:newRect.size format:format]; - UIImage *image = [renderer imageWithActions:^(CGContextRef _Nonnull context) { - CGContextSetShouldAntialias(context, true); - CGContextSetAllowsAntialiasing(context, true); - CGContextSetInterpolationQuality(context, kCGInterpolationHigh); - CGContextTranslateCTM(context, +(newRect.size.width * 0.5), +(newRect.size.height * 0.5)); -#if SD_UIKIT || SD_WATCH - // Use UIKit coordinate system counterclockwise (⟲) - CGContextRotateCTM(context, -angle); -#else - CGContextRotateCTM(context, angle); -#endif - - [self drawInRect:CGRectMake(-(width * 0.5), -(height * 0.5), width, height)]; - }]; - return image; -} - -- (nullable UIImage *)sd_flippedImageWithHorizontal:(BOOL)horizontal vertical:(BOOL)vertical { - size_t width = self.size.width; - size_t height = self.size.height; - -#if SD_UIKIT || SD_MAC - // CIImage shortcut - if (self.CIImage) { - CGAffineTransform transform = CGAffineTransformIdentity; - // Use UIKit coordinate system - if (horizontal) { - CGAffineTransform flipHorizontal = CGAffineTransformMake(-1, 0, 0, 1, width, 0); - transform = CGAffineTransformConcat(transform, flipHorizontal); - } - if (vertical) { - CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, height); - transform = CGAffineTransformConcat(transform, flipVertical); - } - CIImage *ciImage = [self.CIImage imageByApplyingTransform:transform]; -#if SD_UIKIT - UIImage *image = [UIImage imageWithCIImage:ciImage scale:self.scale orientation:self.imageOrientation]; -#else - UIImage *image = [[UIImage alloc] initWithCIImage:ciImage scale:self.scale orientation:kCGImagePropertyOrientationUp]; -#endif - return image; - } -#endif - - SDGraphicsImageRendererFormat *format = [[SDGraphicsImageRendererFormat alloc] init]; - format.scale = self.scale; - SDGraphicsImageRenderer *renderer = [[SDGraphicsImageRenderer alloc] initWithSize:self.size format:format]; - UIImage *image = [renderer imageWithActions:^(CGContextRef _Nonnull context) { - // Use UIKit coordinate system - if (horizontal) { - CGAffineTransform flipHorizontal = CGAffineTransformMake(-1, 0, 0, 1, width, 0); - CGContextConcatCTM(context, flipHorizontal); - } - if (vertical) { - CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, height); - CGContextConcatCTM(context, flipVertical); - } - [self drawInRect:CGRectMake(0, 0, width, height)]; - }]; - return image; -} - -#pragma mark - Image Blending - -- (nullable UIImage *)sd_tintedImageWithColor:(nonnull UIColor *)tintColor { - BOOL hasTint = CGColorGetAlpha(tintColor.CGColor) > __FLT_EPSILON__; - if (!hasTint) { - return self; - } - -#if SD_UIKIT || SD_MAC - // CIImage shortcut - if (self.CIImage) { - CIImage *ciImage = self.CIImage; - CIImage *colorImage = [CIImage imageWithColor:[[CIColor alloc] initWithColor:tintColor]]; - colorImage = [colorImage imageByCroppingToRect:ciImage.extent]; - CIFilter *filter = [CIFilter filterWithName:@"CISourceAtopCompositing"]; - [filter setValue:colorImage forKey:kCIInputImageKey]; - [filter setValue:ciImage forKey:kCIInputBackgroundImageKey]; - ciImage = filter.outputImage; -#if SD_UIKIT - UIImage *image = [UIImage imageWithCIImage:ciImage scale:self.scale orientation:self.imageOrientation]; -#else - UIImage *image = [[UIImage alloc] initWithCIImage:ciImage scale:self.scale orientation:kCGImagePropertyOrientationUp]; -#endif - return image; - } -#endif - - CGSize size = self.size; - CGRect rect = { CGPointZero, size }; - CGFloat scale = self.scale; - - // blend mode, see https://en.wikipedia.org/wiki/Alpha_compositing - CGBlendMode blendMode = kCGBlendModeSourceAtop; - - SDGraphicsImageRendererFormat *format = [[SDGraphicsImageRendererFormat alloc] init]; - format.scale = scale; - SDGraphicsImageRenderer *renderer = [[SDGraphicsImageRenderer alloc] initWithSize:size format:format]; - UIImage *image = [renderer imageWithActions:^(CGContextRef _Nonnull context) { - [self drawInRect:rect]; - CGContextSetBlendMode(context, blendMode); - CGContextSetFillColorWithColor(context, tintColor.CGColor); - CGContextFillRect(context, rect); - }]; - return image; -} - -- (nullable UIColor *)sd_colorAtPoint:(CGPoint)point { - CGImageRef imageRef = NULL; - // CIImage compatible -#if SD_UIKIT || SD_MAC - if (self.CIImage) { - imageRef = SDCreateCGImageFromCIImage(self.CIImage); - } -#endif - if (!imageRef) { - imageRef = self.CGImage; - CGImageRetain(imageRef); - } - if (!imageRef) { - return nil; - } - - // Check point - CGFloat width = CGImageGetWidth(imageRef); - CGFloat height = CGImageGetHeight(imageRef); - if (point.x < 0 || point.y < 0 || point.x >= width || point.y >= height) { - CGImageRelease(imageRef); - return nil; - } - - // Get pixels - CGDataProviderRef provider = CGImageGetDataProvider(imageRef); - if (!provider) { - CGImageRelease(imageRef); - return nil; - } - CFDataRef data = CGDataProviderCopyData(provider); - if (!data) { - CGImageRelease(imageRef); - return nil; - } - - // Get pixel at point - size_t bytesPerRow = CGImageGetBytesPerRow(imageRef); - size_t components = CGImageGetBitsPerPixel(imageRef) / CGImageGetBitsPerComponent(imageRef); - CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); - - CFRange range = CFRangeMake(bytesPerRow * point.y + components * point.x, components); - if (CFDataGetLength(data) < range.location + range.length) { - CFRelease(data); - CGImageRelease(imageRef); - return nil; - } - // greyscale - if (components == 2) { - Pixel_88 pixel = {0}; - CFDataGetBytes(data, range, pixel); - CFRelease(data); - CGImageRelease(imageRef); - // Convert to color - return SDGetColorFromGrayscale(pixel, bitmapInfo); - } else if (components == 3 || components == 4) { - // RGB/RGBA - Pixel_8888 pixel = {0}; - CFDataGetBytes(data, range, pixel); - CFRelease(data); - CGImageRelease(imageRef); - // Convert to color - return SDGetColorFromRGBA(pixel, bitmapInfo); - } else { - NSLog(@"Unsupported components: %zu", components); - CFRelease(data); - CGImageRelease(imageRef); - return nil; - } -} - -- (nullable NSArray *)sd_colorsWithRect:(CGRect)rect { - CGImageRef imageRef = NULL; - // CIImage compatible -#if SD_UIKIT || SD_MAC - if (self.CIImage) { - imageRef = SDCreateCGImageFromCIImage(self.CIImage); - } -#endif - if (!imageRef) { - imageRef = self.CGImage; - CGImageRetain(imageRef); - } - if (!imageRef) { - return nil; - } - - // Check rect - CGFloat width = CGImageGetWidth(imageRef); - CGFloat height = CGImageGetHeight(imageRef); - if (CGRectGetWidth(rect) <= 0 || CGRectGetHeight(rect) <= 0 || CGRectGetMinX(rect) < 0 || CGRectGetMinY(rect) < 0 || CGRectGetMaxX(rect) > width || CGRectGetMaxY(rect) > height) { - CGImageRelease(imageRef); - return nil; - } - - // Get pixels - CGDataProviderRef provider = CGImageGetDataProvider(imageRef); - if (!provider) { - CGImageRelease(imageRef); - return nil; - } - CFDataRef data = CGDataProviderCopyData(provider); - if (!data) { - CGImageRelease(imageRef); - return nil; - } - - // Get pixels with rect - size_t bytesPerRow = CGImageGetBytesPerRow(imageRef); - size_t components = CGImageGetBitsPerPixel(imageRef) / CGImageGetBitsPerComponent(imageRef); - - size_t start = bytesPerRow * CGRectGetMinY(rect) + components * CGRectGetMinX(rect); - size_t end = bytesPerRow * (CGRectGetMaxY(rect) - 1) + components * CGRectGetMaxX(rect); - if (CFDataGetLength(data) < (CFIndex)end) { - CFRelease(data); - CGImageRelease(imageRef); - return nil; - } - - const UInt8 *pixels = CFDataGetBytePtr(data); - size_t row = CGRectGetMinY(rect); - size_t col = CGRectGetMaxX(rect); - - // Convert to color - CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); - NSMutableArray *colors = [NSMutableArray arrayWithCapacity:CGRectGetWidth(rect) * CGRectGetHeight(rect)]; - for (size_t index = start; index < end; index += components) { - if (index >= row * bytesPerRow + col * components) { - // Index beyond the end of current row, go next row - row++; - index = row * bytesPerRow + CGRectGetMinX(rect) * components; - index -= components; - continue; - } - UIColor *color; - if (components == 2) { - Pixel_88 pixel = {pixels[index], pixel[index+1]}; - color = SDGetColorFromGrayscale(pixel, bitmapInfo); - } else { - if (components == 3) { - Pixel_8888 pixel = {pixels[index], pixels[index+1], pixels[index+2], 0}; - color = SDGetColorFromRGBA(pixel, bitmapInfo); - } else if (components == 4) { - Pixel_8888 pixel = {pixels[index], pixels[index+1], pixels[index+2], pixels[index+3]}; - color = SDGetColorFromRGBA(pixel, bitmapInfo); - } else { - NSLog(@"Unsupported components: %zu", components); - } - } - if (color) { - [colors addObject:color]; - } - } - CFRelease(data); - CGImageRelease(imageRef); - - return [colors copy]; -} - -#pragma mark - Image Effect - -// We use vImage to do box convolve for performance and support for watchOS. However, you can just use `CIFilter.CIGaussianBlur`. For other blur effect, use any filter in `CICategoryBlur` -- (nullable UIImage *)sd_blurredImageWithRadius:(CGFloat)blurRadius { - if (self.size.width < 1 || self.size.height < 1) { - return nil; - } - BOOL hasBlur = blurRadius > __FLT_EPSILON__; - if (!hasBlur) { - return self; - } - - CGFloat scale = self.scale; - CGFloat inputRadius = blurRadius * scale; -#if SD_UIKIT || SD_MAC - if (self.CIImage) { - CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"]; - [filter setValue:self.CIImage forKey:kCIInputImageKey]; - [filter setValue:@(inputRadius) forKey:kCIInputRadiusKey]; - CIImage *ciImage = filter.outputImage; - ciImage = [ciImage imageByCroppingToRect:CGRectMake(0, 0, self.size.width, self.size.height)]; -#if SD_UIKIT - UIImage *image = [UIImage imageWithCIImage:ciImage scale:self.scale orientation:self.imageOrientation]; -#else - UIImage *image = [[UIImage alloc] initWithCIImage:ciImage scale:self.scale orientation:kCGImagePropertyOrientationUp]; -#endif - return image; - } -#endif - - CGImageRef imageRef = self.CGImage; - - //convert to BGRA if it isn't - if (CGImageGetBitsPerPixel(imageRef) != 32 || - CGImageGetBitsPerComponent(imageRef) != 8 || - !((CGImageGetBitmapInfo(imageRef) & kCGBitmapAlphaInfoMask))) { - SDGraphicsBeginImageContextWithOptions(self.size, NO, self.scale); - [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height)]; - imageRef = SDGraphicsGetImageFromCurrentImageContext().CGImage; - SDGraphicsEndImageContext(); - } - - vImage_Buffer effect = {}, scratch = {}; - vImage_Buffer *input = NULL, *output = NULL; - - vImage_CGImageFormat format = { - .bitsPerComponent = 8, - .bitsPerPixel = 32, - .colorSpace = NULL, - .bitmapInfo = kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host, //requests a BGRA buffer. - .version = 0, - .decode = NULL, - .renderingIntent = CGImageGetRenderingIntent(imageRef) - }; - - vImage_Error err; - err = vImageBuffer_InitWithCGImage(&effect, &format, NULL, imageRef, kvImageNoFlags); - if (err != kvImageNoError) { - NSLog(@"UIImage+Transform error: vImageBuffer_InitWithCGImage returned error code %zi for inputImage: %@", err, self); - return nil; - } - err = vImageBuffer_Init(&scratch, effect.height, effect.width, format.bitsPerPixel, kvImageNoFlags); - if (err != kvImageNoError) { - NSLog(@"UIImage+Transform error: vImageBuffer_Init returned error code %zi for inputImage: %@", err, self); - return nil; - } - - input = &effect; - output = &scratch; - - if (hasBlur) { - // A description of how to compute the box kernel width from the Gaussian - // radius (aka standard deviation) appears in the SVG spec: - // http://www.w3.org/TR/SVG/filters.html#feGaussianBlurElement - // - // For larger values of 's' (s >= 2.0), an approximation can be used: Three - // successive box-blurs build a piece-wise quadratic convolution kernel, which - // approximates the Gaussian kernel to within roughly 3%. - // - // let d = floor(s * 3*sqrt(2*pi)/4 + 0.5) - // - // ... if d is odd, use three box-blurs of size 'd', centered on the output pixel. - // - if (inputRadius - 2.0 < __FLT_EPSILON__) inputRadius = 2.0; - uint32_t radius = floor(inputRadius * 3.0 * sqrt(2 * M_PI) / 4 + 0.5); - radius |= 1; // force radius to be odd so that the three box-blur methodology works. - int iterations; - if (blurRadius * scale < 0.5) iterations = 1; - else if (blurRadius * scale < 1.5) iterations = 2; - else iterations = 3; - NSInteger tempSize = vImageBoxConvolve_ARGB8888(input, output, NULL, 0, 0, radius, radius, NULL, kvImageGetTempBufferSize | kvImageEdgeExtend); - void *temp = malloc(tempSize); - for (int i = 0; i < iterations; i++) { - vImageBoxConvolve_ARGB8888(input, output, temp, 0, 0, radius, radius, NULL, kvImageEdgeExtend); - vImage_Buffer *tmp = input; - input = output; - output = tmp; - } - free(temp); - } - - CGImageRef effectCGImage = NULL; - effectCGImage = vImageCreateCGImageFromBuffer(input, &format, NULL, NULL, kvImageNoAllocate, NULL); - if (effectCGImage == NULL) { - effectCGImage = vImageCreateCGImageFromBuffer(input, &format, NULL, NULL, kvImageNoFlags, NULL); - free(input->data); - } - free(output->data); -#if SD_UIKIT || SD_WATCH - UIImage *outputImage = [UIImage imageWithCGImage:effectCGImage scale:self.scale orientation:self.imageOrientation]; -#else - UIImage *outputImage = [[UIImage alloc] initWithCGImage:effectCGImage scale:self.scale orientation:kCGImagePropertyOrientationUp]; -#endif - CGImageRelease(effectCGImage); - - return outputImage; -} - -#if SD_UIKIT || SD_MAC -- (nullable UIImage *)sd_filteredImageWithFilter:(nonnull CIFilter *)filter { - CIImage *inputImage; - if (self.CIImage) { - inputImage = self.CIImage; - } else { - CGImageRef imageRef = self.CGImage; - if (!imageRef) { - return nil; - } - inputImage = [CIImage imageWithCGImage:imageRef]; - } - if (!inputImage) return nil; - - CIContext *context = [CIContext context]; - [filter setValue:inputImage forKey:kCIInputImageKey]; - CIImage *outputImage = filter.outputImage; - if (!outputImage) return nil; - - CGImageRef imageRef = [context createCGImage:outputImage fromRect:outputImage.extent]; - if (!imageRef) return nil; - -#if SD_UIKIT - UIImage *image = [UIImage imageWithCGImage:imageRef scale:self.scale orientation:self.imageOrientation]; -#else - UIImage *image = [[UIImage alloc] initWithCGImage:imageRef scale:self.scale orientation:kCGImagePropertyOrientationUp]; -#endif - CGImageRelease(imageRef); - - return image; -} -#endif - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImageView+HighlightedWebCache.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImageView+HighlightedWebCache.h deleted file mode 100644 index 6cd3ba6..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImageView+HighlightedWebCache.h +++ /dev/null @@ -1,129 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" - -#if SD_UIKIT - -#import "SDWebImageManager.h" - -/** - * Integrates SDWebImage async downloading and caching of remote images with UIImageView for highlighted state. - */ -@interface UIImageView (HighlightedWebCache) - -/** - * Set the imageView `highlightedImage` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - */ -- (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url NS_REFINED_FOR_SWIFT; - -/** - * Set the imageView `highlightedImage` with an `url` and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - */ -- (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url - options:(SDWebImageOptions)options NS_REFINED_FOR_SWIFT; - -/** - * Set the imageView `highlightedImage` with an `url`, custom options and context. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - */ -- (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context; - -/** - * Set the imageView `highlightedImage` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url - completed:(nullable SDExternalCompletionBlock)completedBlock NS_REFINED_FOR_SWIFT; - -/** - * Set the imageView `highlightedImage` with an `url` and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url - options:(SDWebImageOptions)options - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the imageView `highlightedImage` with an `url` and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param progressBlock A block called while image is downloading - * @note the progress block is executed on a background queue - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url - options:(SDWebImageOptions)options - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the imageView `highlightedImage` with an `url`, custom options and context. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - * @param progressBlock A block called while image is downloading - * @note the progress block is executed on a background queue - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock; - -@end - -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImageView+HighlightedWebCache.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImageView+HighlightedWebCache.m deleted file mode 100644 index 96c09c1..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImageView+HighlightedWebCache.m +++ /dev/null @@ -1,76 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "UIImageView+HighlightedWebCache.h" - -#if SD_UIKIT - -#import "UIView+WebCacheOperation.h" -#import "UIView+WebCache.h" -#import "SDInternalMacros.h" - -static NSString * const SDHighlightedImageOperationKey = @"UIImageViewImageOperationHighlighted"; - -@implementation UIImageView (HighlightedWebCache) - -- (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url { - [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:nil]; -} - -- (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url options:(SDWebImageOptions)options { - [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:nil]; -} - -- (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url options:(SDWebImageOptions)options context:(nullable SDWebImageContext *)context { - [self sd_setHighlightedImageWithURL:url options:options context:context progress:nil completed:nil]; -} - -- (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:completedBlock]; -} - -- (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url options:(SDWebImageOptions)options completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:completedBlock]; -} - -- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setHighlightedImageWithURL:url options:options context:nil progress:progressBlock completed:completedBlock]; -} - -- (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock { - @weakify(self); - SDWebImageMutableContext *mutableContext; - if (context) { - mutableContext = [context mutableCopy]; - } else { - mutableContext = [NSMutableDictionary dictionary]; - } - mutableContext[SDWebImageContextSetImageOperationKey] = SDHighlightedImageOperationKey; - [self sd_internalSetImageWithURL:url - placeholderImage:nil - options:options - context:mutableContext - setImageBlock:^(UIImage * _Nullable image, NSData * _Nullable imageData, SDImageCacheType cacheType, NSURL * _Nullable imageURL) { - @strongify(self); - self.highlightedImage = image; - } - progress:progressBlock - completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType, imageURL); - } - }]; -} - -@end - -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImageView+WebCache.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImageView+WebCache.h deleted file mode 100644 index 626de9d..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImageView+WebCache.h +++ /dev/null @@ -1,194 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" -#import "SDWebImageManager.h" - -/** - * Usage with a UITableViewCell sub-class: - * - * @code - -#import - -... - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *MyIdentifier = @"MyIdentifier"; - - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; - - if (cell == nil) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier]; - } - - // Here we use the provided sd_setImageWithURL:placeholderImage: method to load the web image - // Ensure you use a placeholder image otherwise cells will be initialized with no image - [cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://example.com/image.jpg"] - placeholderImage:[UIImage imageNamed:@"placeholder"]]; - - cell.textLabel.text = @"My Text"; - return cell; -} - - * @endcode - */ - -/** - * Integrates SDWebImage async downloading and caching of remote images with UIImageView. - */ -@interface UIImageView (WebCache) - -/** - * Set the imageView `image` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url NS_REFINED_FOR_SWIFT; - -/** - * Set the imageView `image` with an `url` and a placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @see sd_setImageWithURL:placeholderImage:options: - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder NS_REFINED_FOR_SWIFT; - -/** - * Set the imageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options NS_REFINED_FOR_SWIFT; - -/** - * Set the imageView `image` with an `url`, placeholder, custom options and context. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context; - -/** - * Set the imageView `image` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the imageView `image` with an `url`, placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - completed:(nullable SDExternalCompletionBlock)completedBlock NS_REFINED_FOR_SWIFT; - -/** - * Set the imageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the imageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param progressBlock A block called while image is downloading - * @note the progress block is executed on a background queue - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the imageView `image` with an `url`, placeholder, custom options and context. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - * @param progressBlock A block called while image is downloading - * @note the progress block is executed on a background queue - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImageView+WebCache.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImageView+WebCache.m deleted file mode 100644 index 9d7f18e..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImageView+WebCache.m +++ /dev/null @@ -1,67 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "UIImageView+WebCache.h" -#import "objc/runtime.h" -#import "UIView+WebCacheOperation.h" -#import "UIView+WebCache.h" - -@implementation UIImageView (WebCache) - -- (void)sd_setImageWithURL:(nullable NSURL *)url { - [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:nil]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder { - [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:nil]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options context:(nullable SDWebImageContext *)context { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options context:context progress:nil completed:nil]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options context:nil progress:progressBlock completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_internalSetImageWithURL:url - placeholderImage:placeholder - options:options - context:context - setImageBlock:nil - progress:progressBlock - completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType, imageURL); - } - }]; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIView+WebCache.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIView+WebCache.h deleted file mode 100644 index 48175f1..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIView+WebCache.h +++ /dev/null @@ -1,110 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" -#import "SDWebImageDefine.h" -#import "SDWebImageManager.h" -#import "SDWebImageTransition.h" -#import "SDWebImageIndicator.h" - -/** - The value specify that the image progress unit count cannot be determined because the progressBlock is not been called. - */ -FOUNDATION_EXPORT const int64_t SDWebImageProgressUnitCountUnknown; /* 1LL */ - -typedef void(^SDSetImageBlock)(UIImage * _Nullable image, NSData * _Nullable imageData, SDImageCacheType cacheType, NSURL * _Nullable imageURL); - -/** - Integrates SDWebImage async downloading and caching of remote images with UIView subclass. - */ -@interface UIView (WebCache) - -/** - * Get the current image URL. - * - * @note Note that because of the limitations of categories this property can get out of sync if you use setImage: directly. - */ -@property (nonatomic, strong, readonly, nullable) NSURL *sd_imageURL; - -/** - * Get the current image operation key. Operation key is used to identify the different queries for one view instance (like UIButton). - * See more about this in `SDWebImageContextSetImageOperationKey`. - * If you cancel current image load, the key will be set to nil. - * @note You can use method `UIView+WebCacheOperation` to investigate different queries' operation. - */ -@property (nonatomic, strong, readonly, nullable) NSString *sd_latestOperationKey; - -/** - * The current image loading progress associated to the view. The unit count is the received size and excepted size of download. - * The `totalUnitCount` and `completedUnitCount` will be reset to 0 after a new image loading start (change from current queue). And they will be set to `SDWebImageProgressUnitCountUnknown` if the progressBlock not been called but the image loading success to mark the progress finished (change from main queue). - * @note You can use Key-Value Observing on the progress, but you should take care that the change to progress is from a background queue during download(the same as progressBlock). If you want to using KVO and update the UI, make sure to dispatch on the main queue. And it's recommend to use some KVO libs like KVOController because it's more safe and easy to use. - * @note The getter will create a progress instance if the value is nil. But by default, we don't create one. If you need to use Key-Value Observing, you must trigger the getter or set a custom progress instance before the loading start. The default value is nil. - * @note Note that because of the limitations of categories this property can get out of sync if you update the progress directly. - */ -@property (nonatomic, strong, null_resettable) NSProgress *sd_imageProgress; - -/** - * Set the imageView `image` with an `url` and optionally a placeholder image. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - * @param setImageBlock Block used for custom set image code. If not provide, use the built-in set image code (supports `UIImageView/NSImageView` and `UIButton/NSButton` currently) - * @param progressBlock A block called while image is downloading - * @note the progress block is executed on a background queue - * @param completedBlock A block called when operation has been completed. - * This block has no return value and takes the requested UIImage as first parameter and the NSData representation as second parameter. - * In case of error the image parameter is nil and the third parameter may contain an NSError. - * - * The forth parameter is an `SDImageCacheType` enum indicating if the image was retrieved from the local cache - * or from the memory cache or from the network. - * - * The fifth parameter normally is always YES. However, if you provide SDWebImageAvoidAutoSetImage with SDWebImageProgressiveLoad options to enable progressive downloading and set the image yourself. This block is thus called repeatedly with a partial image. When image is fully downloaded, the - * block is called a last time with the full image and the last parameter set to YES. - * - * The last parameter is the original image URL - * @return The returned operation for cancelling cache and download operation, typically type is `SDWebImageCombinedOperation` - */ -- (nullable id)sd_internalSetImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - setImageBlock:(nullable SDSetImageBlock)setImageBlock - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDInternalCompletionBlock)completedBlock; - -/** - * Cancel the current image load - */ -- (void)sd_cancelCurrentImageLoad; - -#if SD_UIKIT || SD_MAC - -#pragma mark - Image Transition - -/** - The image transition when image load finished. See `SDWebImageTransition`. - If you specify nil, do not do transition. Defaults to nil. - */ -@property (nonatomic, strong, nullable) SDWebImageTransition *sd_imageTransition; - -#pragma mark - Image Indicator - -/** - The image indicator during the image loading. If you do not need indicator, specify nil. Defaults to nil - The setter will remove the old indicator view and add new indicator view to current view's subview. - @note Because this is UI related, you should access only from the main queue. - */ -@property (nonatomic, strong, nullable) id sd_imageIndicator; - -#endif - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIView+WebCache.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIView+WebCache.m deleted file mode 100644 index 486584f..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIView+WebCache.m +++ /dev/null @@ -1,446 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "UIView+WebCache.h" -#import "objc/runtime.h" -#import "UIView+WebCacheOperation.h" -#import "SDWebImageError.h" -#import "SDInternalMacros.h" -#import "SDWebImageTransitionInternal.h" -#import "SDImageCache.h" - -const int64_t SDWebImageProgressUnitCountUnknown = 1LL; - -@implementation UIView (WebCache) - -- (nullable NSURL *)sd_imageURL { - return objc_getAssociatedObject(self, @selector(sd_imageURL)); -} - -- (void)setSd_imageURL:(NSURL * _Nullable)sd_imageURL { - objc_setAssociatedObject(self, @selector(sd_imageURL), sd_imageURL, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (nullable NSString *)sd_latestOperationKey { - return objc_getAssociatedObject(self, @selector(sd_latestOperationKey)); -} - -- (void)setSd_latestOperationKey:(NSString * _Nullable)sd_latestOperationKey { - objc_setAssociatedObject(self, @selector(sd_latestOperationKey), sd_latestOperationKey, OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (NSProgress *)sd_imageProgress { - NSProgress *progress = objc_getAssociatedObject(self, @selector(sd_imageProgress)); - if (!progress) { - progress = [[NSProgress alloc] initWithParent:nil userInfo:nil]; - self.sd_imageProgress = progress; - } - return progress; -} - -- (void)setSd_imageProgress:(NSProgress *)sd_imageProgress { - objc_setAssociatedObject(self, @selector(sd_imageProgress), sd_imageProgress, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (nullable id)sd_internalSetImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - setImageBlock:(nullable SDSetImageBlock)setImageBlock - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDInternalCompletionBlock)completedBlock { - if (context) { - // copy to avoid mutable object - context = [context copy]; - } else { - context = [NSDictionary dictionary]; - } - NSString *validOperationKey = context[SDWebImageContextSetImageOperationKey]; - if (!validOperationKey) { - // pass through the operation key to downstream, which can used for tracing operation or image view class - validOperationKey = NSStringFromClass([self class]); - SDWebImageMutableContext *mutableContext = [context mutableCopy]; - mutableContext[SDWebImageContextSetImageOperationKey] = validOperationKey; - context = [mutableContext copy]; - } - self.sd_latestOperationKey = validOperationKey; - [self sd_cancelImageLoadOperationWithKey:validOperationKey]; - self.sd_imageURL = url; - - SDWebImageManager *manager = context[SDWebImageContextCustomManager]; - if (!manager) { - manager = [SDWebImageManager sharedManager]; - } else { - // remove this manager to avoid retain cycle (manger -> loader -> operation -> context -> manager) - SDWebImageMutableContext *mutableContext = [context mutableCopy]; - mutableContext[SDWebImageContextCustomManager] = nil; - context = [mutableContext copy]; - } - - BOOL shouldUseWeakCache = NO; - if ([manager.imageCache isKindOfClass:SDImageCache.class]) { - shouldUseWeakCache = ((SDImageCache *)manager.imageCache).config.shouldUseWeakMemoryCache; - } - if (!(options & SDWebImageDelayPlaceholder)) { - if (shouldUseWeakCache) { - NSString *key = [manager cacheKeyForURL:url context:context]; - // call memory cache to trigger weak cache sync logic, ignore the return value and go on normal query - // this unfortunately will cause twice memory cache query, but it's fast enough - // in the future the weak cache feature may be re-design or removed - [((SDImageCache *)manager.imageCache) imageFromMemoryCacheForKey:key]; - } - dispatch_main_async_safe(^{ - [self sd_setImage:placeholder imageData:nil basedOnClassOrViaCustomSetImageBlock:setImageBlock cacheType:SDImageCacheTypeNone imageURL:url]; - }); - } - - id operation = nil; - - if (url) { - // reset the progress - NSProgress *imageProgress = objc_getAssociatedObject(self, @selector(sd_imageProgress)); - if (imageProgress) { - imageProgress.totalUnitCount = 0; - imageProgress.completedUnitCount = 0; - } - -#if SD_UIKIT || SD_MAC - // check and start image indicator - [self sd_startImageIndicator]; - id imageIndicator = self.sd_imageIndicator; -#endif - - SDImageLoaderProgressBlock combinedProgressBlock = ^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) { - if (imageProgress) { - imageProgress.totalUnitCount = expectedSize; - imageProgress.completedUnitCount = receivedSize; - } -#if SD_UIKIT || SD_MAC - if ([imageIndicator respondsToSelector:@selector(updateIndicatorProgress:)]) { - double progress = 0; - if (expectedSize != 0) { - progress = (double)receivedSize / expectedSize; - } - progress = MAX(MIN(progress, 1), 0); // 0.0 - 1.0 - dispatch_async(dispatch_get_main_queue(), ^{ - [imageIndicator updateIndicatorProgress:progress]; - }); - } -#endif - if (progressBlock) { - progressBlock(receivedSize, expectedSize, targetURL); - } - }; - @weakify(self); - operation = [manager loadImageWithURL:url options:options context:context progress:combinedProgressBlock completed:^(UIImage *image, NSData *data, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { - @strongify(self); - if (!self) { return; } - // if the progress not been updated, mark it to complete state - if (imageProgress && finished && !error && imageProgress.totalUnitCount == 0 && imageProgress.completedUnitCount == 0) { - imageProgress.totalUnitCount = SDWebImageProgressUnitCountUnknown; - imageProgress.completedUnitCount = SDWebImageProgressUnitCountUnknown; - } - -#if SD_UIKIT || SD_MAC - // check and stop image indicator - if (finished) { - [self sd_stopImageIndicator]; - } -#endif - - BOOL shouldCallCompletedBlock = finished || (options & SDWebImageAvoidAutoSetImage); - BOOL shouldNotSetImage = ((image && (options & SDWebImageAvoidAutoSetImage)) || - (!image && !(options & SDWebImageDelayPlaceholder))); - SDWebImageNoParamsBlock callCompletedBlockClosure = ^{ - if (!self) { return; } - if (!shouldNotSetImage) { - [self sd_setNeedsLayout]; - } - if (completedBlock && shouldCallCompletedBlock) { - completedBlock(image, data, error, cacheType, finished, url); - } - }; - - // case 1a: we got an image, but the SDWebImageAvoidAutoSetImage flag is set - // OR - // case 1b: we got no image and the SDWebImageDelayPlaceholder is not set - if (shouldNotSetImage) { - dispatch_main_async_safe(callCompletedBlockClosure); - return; - } - - UIImage *targetImage = nil; - NSData *targetData = nil; - if (image) { - // case 2a: we got an image and the SDWebImageAvoidAutoSetImage is not set - targetImage = image; - targetData = data; - } else if (options & SDWebImageDelayPlaceholder) { - // case 2b: we got no image and the SDWebImageDelayPlaceholder flag is set - targetImage = placeholder; - targetData = nil; - } - -#if SD_UIKIT || SD_MAC - // check whether we should use the image transition - SDWebImageTransition *transition = nil; - BOOL shouldUseTransition = NO; - if (options & SDWebImageForceTransition) { - // Always - shouldUseTransition = YES; - } else if (cacheType == SDImageCacheTypeNone) { - // From network - shouldUseTransition = YES; - } else { - // From disk (and, user don't use sync query) - if (cacheType == SDImageCacheTypeMemory) { - shouldUseTransition = NO; - } else if (cacheType == SDImageCacheTypeDisk) { - if (options & SDWebImageQueryMemoryDataSync || options & SDWebImageQueryDiskDataSync) { - shouldUseTransition = NO; - } else { - shouldUseTransition = YES; - } - } else { - // Not valid cache type, fallback - shouldUseTransition = NO; - } - } - if (finished && shouldUseTransition) { - transition = self.sd_imageTransition; - } -#endif - dispatch_main_async_safe(^{ -#if SD_UIKIT || SD_MAC - [self sd_setImage:targetImage imageData:targetData basedOnClassOrViaCustomSetImageBlock:setImageBlock transition:transition cacheType:cacheType imageURL:imageURL]; -#else - [self sd_setImage:targetImage imageData:targetData basedOnClassOrViaCustomSetImageBlock:setImageBlock cacheType:cacheType imageURL:imageURL]; -#endif - callCompletedBlockClosure(); - }); - }]; - [self sd_setImageLoadOperation:operation forKey:validOperationKey]; - } else { -#if SD_UIKIT || SD_MAC - [self sd_stopImageIndicator]; -#endif - dispatch_main_async_safe(^{ - if (completedBlock) { - NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorInvalidURL userInfo:@{NSLocalizedDescriptionKey : @"Image url is nil"}]; - completedBlock(nil, nil, error, SDImageCacheTypeNone, YES, url); - } - }); - } - - return operation; -} - -- (void)sd_cancelCurrentImageLoad { - [self sd_cancelImageLoadOperationWithKey:self.sd_latestOperationKey]; - self.sd_latestOperationKey = nil; -} - -- (void)sd_setImage:(UIImage *)image imageData:(NSData *)imageData basedOnClassOrViaCustomSetImageBlock:(SDSetImageBlock)setImageBlock cacheType:(SDImageCacheType)cacheType imageURL:(NSURL *)imageURL { -#if SD_UIKIT || SD_MAC - [self sd_setImage:image imageData:imageData basedOnClassOrViaCustomSetImageBlock:setImageBlock transition:nil cacheType:cacheType imageURL:imageURL]; -#else - // watchOS does not support view transition. Simplify the logic - if (setImageBlock) { - setImageBlock(image, imageData, cacheType, imageURL); - } else if ([self isKindOfClass:[UIImageView class]]) { - UIImageView *imageView = (UIImageView *)self; - [imageView setImage:image]; - } -#endif -} - -#if SD_UIKIT || SD_MAC -- (void)sd_setImage:(UIImage *)image imageData:(NSData *)imageData basedOnClassOrViaCustomSetImageBlock:(SDSetImageBlock)setImageBlock transition:(SDWebImageTransition *)transition cacheType:(SDImageCacheType)cacheType imageURL:(NSURL *)imageURL { - UIView *view = self; - SDSetImageBlock finalSetImageBlock; - if (setImageBlock) { - finalSetImageBlock = setImageBlock; - } else if ([view isKindOfClass:[UIImageView class]]) { - UIImageView *imageView = (UIImageView *)view; - finalSetImageBlock = ^(UIImage *setImage, NSData *setImageData, SDImageCacheType setCacheType, NSURL *setImageURL) { - imageView.image = setImage; - }; - } -#if SD_UIKIT - else if ([view isKindOfClass:[UIButton class]]) { - UIButton *button = (UIButton *)view; - finalSetImageBlock = ^(UIImage *setImage, NSData *setImageData, SDImageCacheType setCacheType, NSURL *setImageURL) { - [button setImage:setImage forState:UIControlStateNormal]; - }; - } -#endif -#if SD_MAC - else if ([view isKindOfClass:[NSButton class]]) { - NSButton *button = (NSButton *)view; - finalSetImageBlock = ^(UIImage *setImage, NSData *setImageData, SDImageCacheType setCacheType, NSURL *setImageURL) { - button.image = setImage; - }; - } -#endif - - if (transition) { - NSString *originalOperationKey = view.sd_latestOperationKey; - -#if SD_UIKIT - [UIView transitionWithView:view duration:0 options:0 animations:^{ - if (!view.sd_latestOperationKey || ![originalOperationKey isEqualToString:view.sd_latestOperationKey]) { - return; - } - // 0 duration to let UIKit render placeholder and prepares block - if (transition.prepares) { - transition.prepares(view, image, imageData, cacheType, imageURL); - } - } completion:^(BOOL tempFinished) { - [UIView transitionWithView:view duration:transition.duration options:transition.animationOptions animations:^{ - if (!view.sd_latestOperationKey || ![originalOperationKey isEqualToString:view.sd_latestOperationKey]) { - return; - } - if (finalSetImageBlock && !transition.avoidAutoSetImage) { - finalSetImageBlock(image, imageData, cacheType, imageURL); - } - if (transition.animations) { - transition.animations(view, image); - } - } completion:^(BOOL finished) { - if (!view.sd_latestOperationKey || ![originalOperationKey isEqualToString:view.sd_latestOperationKey]) { - return; - } - if (transition.completion) { - transition.completion(finished); - } - }]; - }]; -#elif SD_MAC - [NSAnimationContext runAnimationGroup:^(NSAnimationContext * _Nonnull prepareContext) { - if (!view.sd_latestOperationKey || ![originalOperationKey isEqualToString:view.sd_latestOperationKey]) { - return; - } - // 0 duration to let AppKit render placeholder and prepares block - prepareContext.duration = 0; - if (transition.prepares) { - transition.prepares(view, image, imageData, cacheType, imageURL); - } - } completionHandler:^{ - [NSAnimationContext runAnimationGroup:^(NSAnimationContext * _Nonnull context) { - if (!view.sd_latestOperationKey || ![originalOperationKey isEqualToString:view.sd_latestOperationKey]) { - return; - } - context.duration = transition.duration; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - CAMediaTimingFunction *timingFunction = transition.timingFunction; -#pragma clang diagnostic pop - if (!timingFunction) { - timingFunction = SDTimingFunctionFromAnimationOptions(transition.animationOptions); - } - context.timingFunction = timingFunction; - context.allowsImplicitAnimation = SD_OPTIONS_CONTAINS(transition.animationOptions, SDWebImageAnimationOptionAllowsImplicitAnimation); - if (finalSetImageBlock && !transition.avoidAutoSetImage) { - finalSetImageBlock(image, imageData, cacheType, imageURL); - } - CATransition *trans = SDTransitionFromAnimationOptions(transition.animationOptions); - if (trans) { - [view.layer addAnimation:trans forKey:kCATransition]; - } - if (transition.animations) { - transition.animations(view, image); - } - } completionHandler:^{ - if (!view.sd_latestOperationKey || ![originalOperationKey isEqualToString:view.sd_latestOperationKey]) { - return; - } - if (transition.completion) { - transition.completion(YES); - } - }]; - }]; -#endif - } else { - if (finalSetImageBlock) { - finalSetImageBlock(image, imageData, cacheType, imageURL); - } - } -} -#endif - -- (void)sd_setNeedsLayout { -#if SD_UIKIT - [self setNeedsLayout]; -#elif SD_MAC - [self setNeedsLayout:YES]; -#elif SD_WATCH - // Do nothing because WatchKit automatically layout the view after property change -#endif -} - -#if SD_UIKIT || SD_MAC - -#pragma mark - Image Transition -- (SDWebImageTransition *)sd_imageTransition { - return objc_getAssociatedObject(self, @selector(sd_imageTransition)); -} - -- (void)setSd_imageTransition:(SDWebImageTransition *)sd_imageTransition { - objc_setAssociatedObject(self, @selector(sd_imageTransition), sd_imageTransition, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -#pragma mark - Indicator -- (id)sd_imageIndicator { - return objc_getAssociatedObject(self, @selector(sd_imageIndicator)); -} - -- (void)setSd_imageIndicator:(id)sd_imageIndicator { - // Remove the old indicator view - id previousIndicator = self.sd_imageIndicator; - [previousIndicator.indicatorView removeFromSuperview]; - - objc_setAssociatedObject(self, @selector(sd_imageIndicator), sd_imageIndicator, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - - // Add the new indicator view - UIView *view = sd_imageIndicator.indicatorView; - if (CGRectEqualToRect(view.frame, CGRectZero)) { - view.frame = self.bounds; - } - // Center the indicator view -#if SD_MAC - [view setFrameOrigin:CGPointMake(round((NSWidth(self.bounds) - NSWidth(view.frame)) / 2), round((NSHeight(self.bounds) - NSHeight(view.frame)) / 2))]; -#else - view.center = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds)); -#endif - view.hidden = NO; - [self addSubview:view]; -} - -- (void)sd_startImageIndicator { - id imageIndicator = self.sd_imageIndicator; - if (!imageIndicator) { - return; - } - dispatch_main_async_safe(^{ - [imageIndicator startAnimatingIndicator]; - }); -} - -- (void)sd_stopImageIndicator { - id imageIndicator = self.sd_imageIndicator; - if (!imageIndicator) { - return; - } - dispatch_main_async_safe(^{ - [imageIndicator stopAnimatingIndicator]; - }); -} - -#endif - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIView+WebCacheOperation.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIView+WebCacheOperation.h deleted file mode 100644 index fc23508..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIView+WebCacheOperation.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" -#import "SDWebImageOperation.h" - -/** - These methods are used to support canceling for UIView image loading, it's designed to be used internal but not external. - All the stored operations are weak, so it will be dealloced after image loading finished. If you need to store operations, use your own class to keep a strong reference for them. - */ -@interface UIView (WebCacheOperation) - -/** - * Get the image load operation for key - * - * @param key key for identifying the operations - * @return the image load operation - */ -- (nullable id)sd_imageLoadOperationForKey:(nullable NSString *)key; - -/** - * Set the image load operation (storage in a UIView based weak map table) - * - * @param operation the operation - * @param key key for storing the operation - */ -- (void)sd_setImageLoadOperation:(nullable id)operation forKey:(nullable NSString *)key; - -/** - * Cancel the operation for the current UIView and key - * - * @param key key for identifying the operations - */ -- (void)sd_cancelImageLoadOperationWithKey:(nullable NSString *)key; - -/** - * Just remove the operation corresponding to the current UIView and key without cancelling them - * - * @param key key for identifying the operations - */ -- (void)sd_removeImageLoadOperationWithKey:(nullable NSString *)key; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIView+WebCacheOperation.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIView+WebCacheOperation.m deleted file mode 100644 index 6fe23e4..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIView+WebCacheOperation.m +++ /dev/null @@ -1,82 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "UIView+WebCacheOperation.h" -#import "objc/runtime.h" - -// key is strong, value is weak because operation instance is retained by SDWebImageManager's runningOperations property -// we should use lock to keep thread-safe because these method may not be accessed from main queue -typedef NSMapTable> SDOperationsDictionary; - -@implementation UIView (WebCacheOperation) - -- (SDOperationsDictionary *)sd_operationDictionary { - @synchronized(self) { - SDOperationsDictionary *operations = objc_getAssociatedObject(self, @selector(sd_operationDictionary)); - if (operations) { - return operations; - } - operations = [[NSMapTable alloc] initWithKeyOptions:NSPointerFunctionsStrongMemory valueOptions:NSPointerFunctionsWeakMemory capacity:0]; - objc_setAssociatedObject(self, @selector(sd_operationDictionary), operations, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - return operations; - } -} - -- (nullable id)sd_imageLoadOperationForKey:(nullable NSString *)key { - id operation; - if (key) { - SDOperationsDictionary *operationDictionary = [self sd_operationDictionary]; - @synchronized (self) { - operation = [operationDictionary objectForKey:key]; - } - } - return operation; -} - -- (void)sd_setImageLoadOperation:(nullable id)operation forKey:(nullable NSString *)key { - if (key) { - [self sd_cancelImageLoadOperationWithKey:key]; - if (operation) { - SDOperationsDictionary *operationDictionary = [self sd_operationDictionary]; - @synchronized (self) { - [operationDictionary setObject:operation forKey:key]; - } - } - } -} - -- (void)sd_cancelImageLoadOperationWithKey:(nullable NSString *)key { - if (key) { - // Cancel in progress downloader from queue - SDOperationsDictionary *operationDictionary = [self sd_operationDictionary]; - id operation; - - @synchronized (self) { - operation = [operationDictionary objectForKey:key]; - } - if (operation) { - if ([operation conformsToProtocol:@protocol(SDWebImageOperation)]) { - [operation cancel]; - } - @synchronized (self) { - [operationDictionary removeObjectForKey:key]; - } - } - } -} - -- (void)sd_removeImageLoadOperationWithKey:(nullable NSString *)key { - if (key) { - SDOperationsDictionary *operationDictionary = [self sd_operationDictionary]; - @synchronized (self) { - [operationDictionary removeObjectForKey:key]; - } - } -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/NSBezierPath+SDRoundedCorners.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/NSBezierPath+SDRoundedCorners.h deleted file mode 100644 index dfec18b..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/NSBezierPath+SDRoundedCorners.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" - -#if SD_MAC - -#import "UIImage+Transform.h" - -@interface NSBezierPath (SDRoundedCorners) - -/** - Convenience way to create a bezier path with the specify rounding corners on macOS. Same as the one on `UIBezierPath`. - */ -+ (nonnull instancetype)sd_bezierPathWithRoundedRect:(NSRect)rect byRoundingCorners:(SDRectCorner)corners cornerRadius:(CGFloat)cornerRadius; - -@end - -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/NSBezierPath+SDRoundedCorners.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/NSBezierPath+SDRoundedCorners.m deleted file mode 100644 index b6f7a01..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/NSBezierPath+SDRoundedCorners.m +++ /dev/null @@ -1,42 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "NSBezierPath+SDRoundedCorners.h" - -#if SD_MAC - -@implementation NSBezierPath (SDRoundedCorners) - -+ (instancetype)sd_bezierPathWithRoundedRect:(NSRect)rect byRoundingCorners:(SDRectCorner)corners cornerRadius:(CGFloat)cornerRadius { - NSBezierPath *path = [NSBezierPath bezierPath]; - - CGFloat maxCorner = MIN(NSWidth(rect), NSHeight(rect)) / 2; - - CGFloat topLeftRadius = MIN(maxCorner, (corners & SDRectCornerTopLeft) ? cornerRadius : 0); - CGFloat topRightRadius = MIN(maxCorner, (corners & SDRectCornerTopRight) ? cornerRadius : 0); - CGFloat bottomLeftRadius = MIN(maxCorner, (corners & SDRectCornerBottomLeft) ? cornerRadius : 0); - CGFloat bottomRightRadius = MIN(maxCorner, (corners & SDRectCornerBottomRight) ? cornerRadius : 0); - - NSPoint topLeft = NSMakePoint(NSMinX(rect), NSMaxY(rect)); - NSPoint topRight = NSMakePoint(NSMaxX(rect), NSMaxY(rect)); - NSPoint bottomLeft = NSMakePoint(NSMinX(rect), NSMinY(rect)); - NSPoint bottomRight = NSMakePoint(NSMaxX(rect), NSMinY(rect)); - - [path moveToPoint:NSMakePoint(NSMidX(rect), NSMaxY(rect))]; - [path appendBezierPathWithArcFromPoint:topLeft toPoint:bottomLeft radius:topLeftRadius]; - [path appendBezierPathWithArcFromPoint:bottomLeft toPoint:bottomRight radius:bottomLeftRadius]; - [path appendBezierPathWithArcFromPoint:bottomRight toPoint:topRight radius:bottomRightRadius]; - [path appendBezierPathWithArcFromPoint:topRight toPoint:topLeft radius:topRightRadius]; - [path closePath]; - - return path; -} - -@end - -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDAssociatedObject.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDAssociatedObject.h deleted file mode 100644 index 199cf4f..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDAssociatedObject.h +++ /dev/null @@ -1,14 +0,0 @@ -/* -* This file is part of the SDWebImage package. -* (c) Olivier Poitrey -* -* For the full copyright and license information, please view the LICENSE -* file that was distributed with this source code. -*/ - -#import "SDWebImageCompat.h" - -/// Copy the associated object from source image to target image. The associated object including all the category read/write properties. -/// @param source source -/// @param target target -FOUNDATION_EXPORT void SDImageCopyAssociatedObject(UIImage * _Nullable source, UIImage * _Nullable target); diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDAssociatedObject.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDAssociatedObject.m deleted file mode 100644 index c122da4..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDAssociatedObject.m +++ /dev/null @@ -1,28 +0,0 @@ -/* -* This file is part of the SDWebImage package. -* (c) Olivier Poitrey -* -* For the full copyright and license information, please view the LICENSE -* file that was distributed with this source code. -*/ - -#import "SDAssociatedObject.h" -#import "UIImage+Metadata.h" -#import "UIImage+ExtendedCacheData.h" -#import "UIImage+MemoryCacheCost.h" -#import "UIImage+ForceDecode.h" - -void SDImageCopyAssociatedObject(UIImage * _Nullable source, UIImage * _Nullable target) { - if (!source || !target) { - return; - } - // Image Metadata - target.sd_isIncremental = source.sd_isIncremental; - target.sd_decodeOptions = source.sd_decodeOptions; - target.sd_imageLoopCount = source.sd_imageLoopCount; - target.sd_imageFormat = source.sd_imageFormat; - // Force Decode - target.sd_isDecoded = source.sd_isDecoded; - // Extended Cache Data - target.sd_extendedObject = source.sd_extendedObject; -} diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDAsyncBlockOperation.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDAsyncBlockOperation.h deleted file mode 100644 index a3480de..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDAsyncBlockOperation.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" - -@class SDAsyncBlockOperation; -typedef void (^SDAsyncBlock)(SDAsyncBlockOperation * __nonnull asyncOperation); - -/// A async block operation, success after you call `completer` (not like `NSBlockOperation` which is for sync block, success on return) -@interface SDAsyncBlockOperation : NSOperation - -- (nonnull instancetype)initWithBlock:(nonnull SDAsyncBlock)block; -+ (nonnull instancetype)blockOperationWithBlock:(nonnull SDAsyncBlock)block; -- (void)complete; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDAsyncBlockOperation.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDAsyncBlockOperation.m deleted file mode 100644 index 0b2fefe..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDAsyncBlockOperation.m +++ /dev/null @@ -1,92 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDAsyncBlockOperation.h" - -@interface SDAsyncBlockOperation () - -@property (assign, nonatomic, getter = isExecuting) BOOL executing; -@property (assign, nonatomic, getter = isFinished) BOOL finished; -@property (nonatomic, copy, nonnull) SDAsyncBlock executionBlock; - -@end - -@implementation SDAsyncBlockOperation - -@synthesize executing = _executing; -@synthesize finished = _finished; - -- (nonnull instancetype)initWithBlock:(nonnull SDAsyncBlock)block { - self = [super init]; - if (self) { - self.executionBlock = block; - } - return self; -} - -+ (nonnull instancetype)blockOperationWithBlock:(nonnull SDAsyncBlock)block { - SDAsyncBlockOperation *operation = [[SDAsyncBlockOperation alloc] initWithBlock:block]; - return operation; -} - -- (void)start { - @synchronized (self) { - if (self.isCancelled) { - self.finished = YES; - return; - } - - self.finished = NO; - self.executing = YES; - - if (self.executionBlock) { - self.executionBlock(self); - } else { - self.executing = NO; - self.finished = YES; - } - } -} - -- (void)cancel { - @synchronized (self) { - [super cancel]; - if (self.isExecuting) { - self.executing = NO; - self.finished = YES; - } - } -} - - -- (void)complete { - @synchronized (self) { - if (self.isExecuting) { - self.finished = YES; - self.executing = NO; - } - } - } - -- (void)setFinished:(BOOL)finished { - [self willChangeValueForKey:@"isFinished"]; - _finished = finished; - [self didChangeValueForKey:@"isFinished"]; -} - -- (void)setExecuting:(BOOL)executing { - [self willChangeValueForKey:@"isExecuting"]; - _executing = executing; - [self didChangeValueForKey:@"isExecuting"]; -} - -- (BOOL)isConcurrent { - return YES; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDDeviceHelper.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDDeviceHelper.h deleted file mode 100644 index 5d5676b..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDDeviceHelper.h +++ /dev/null @@ -1,18 +0,0 @@ -/* -* This file is part of the SDWebImage package. -* (c) Olivier Poitrey -* -* For the full copyright and license information, please view the LICENSE -* file that was distributed with this source code. -*/ - -#import -#import "SDWebImageCompat.h" - -/// Device information helper methods -@interface SDDeviceHelper : NSObject - -+ (NSUInteger)totalMemory; -+ (NSUInteger)freeMemory; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDDeviceHelper.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDDeviceHelper.m deleted file mode 100644 index 83d0229..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDDeviceHelper.m +++ /dev/null @@ -1,32 +0,0 @@ -/* -* This file is part of the SDWebImage package. -* (c) Olivier Poitrey -* -* For the full copyright and license information, please view the LICENSE -* file that was distributed with this source code. -*/ - -#import "SDDeviceHelper.h" -#import - -@implementation SDDeviceHelper - -+ (NSUInteger)totalMemory { - return (NSUInteger)[[NSProcessInfo processInfo] physicalMemory]; -} - -+ (NSUInteger)freeMemory { - mach_port_t host_port = mach_host_self(); - mach_msg_type_number_t host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t); - vm_size_t page_size; - vm_statistics_data_t vm_stat; - kern_return_t kern; - - kern = host_page_size(host_port, &page_size); - if (kern != KERN_SUCCESS) return 0; - kern = host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size); - if (kern != KERN_SUCCESS) return 0; - return vm_stat.free_count * page_size; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDDisplayLink.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDDisplayLink.h deleted file mode 100644 index 3ee8c6f..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDDisplayLink.h +++ /dev/null @@ -1,29 +0,0 @@ -/* -* This file is part of the SDWebImage package. -* (c) Olivier Poitrey -* -* For the full copyright and license information, please view the LICENSE -* file that was distributed with this source code. -*/ - -#import -#import "SDWebImageCompat.h" - -/// Cross-platform display link wrapper. Do not retain the target -/// Use `CADisplayLink` on iOS/tvOS, `CVDisplayLink` on macOS, `NSTimer` on watchOS -@interface SDDisplayLink : NSObject - -@property (readonly, nonatomic, weak, nullable) id target; -@property (readonly, nonatomic, assign, nonnull) SEL selector; -@property (readonly, nonatomic) CFTimeInterval duration; -@property (readonly, nonatomic) BOOL isRunning; - -+ (nonnull instancetype)displayLinkWithTarget:(nonnull id)target selector:(nonnull SEL)sel; - -- (void)addToRunLoop:(nonnull NSRunLoop *)runloop forMode:(nonnull NSRunLoopMode)mode; -- (void)removeFromRunLoop:(nonnull NSRunLoop *)runloop forMode:(nonnull NSRunLoopMode)mode; - -- (void)start; -- (void)stop; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDDisplayLink.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDDisplayLink.m deleted file mode 100644 index 1dcfd99..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDDisplayLink.m +++ /dev/null @@ -1,227 +0,0 @@ -/* -* This file is part of the SDWebImage package. -* (c) Olivier Poitrey -* -* For the full copyright and license information, please view the LICENSE -* file that was distributed with this source code. -*/ - -#import "SDDisplayLink.h" -#import "SDWeakProxy.h" -#if SD_MAC -#import -#elif SD_IOS || SD_TV -#import -#endif - -#if SD_MAC -static CVReturn DisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp *inNow, const CVTimeStamp *inOutputTime, CVOptionFlags flagsIn, CVOptionFlags *flagsOut, void *displayLinkContext); -#endif - -#define kSDDisplayLinkInterval 1.0 / 60 - -@interface SDDisplayLink () - -#if SD_MAC -@property (nonatomic, assign) CVDisplayLinkRef displayLink; -@property (nonatomic, assign) CVTimeStamp outputTime; -@property (nonatomic, copy) NSRunLoopMode runloopMode; -#elif SD_IOS || SD_TV -@property (nonatomic, strong) CADisplayLink *displayLink; -#else -@property (nonatomic, strong) NSTimer *displayLink; -@property (nonatomic, strong) NSRunLoop *runloop; -@property (nonatomic, copy) NSRunLoopMode runloopMode; -@property (nonatomic, assign) NSTimeInterval currentFireDate; -#endif - -@end - -@implementation SDDisplayLink - -- (void)dealloc { -#if SD_MAC - if (_displayLink) { - CVDisplayLinkRelease(_displayLink); - _displayLink = NULL; - } -#elif SD_IOS || SD_TV - [_displayLink invalidate]; - _displayLink = nil; -#else - [_displayLink invalidate]; - _displayLink = nil; -#endif -} - -- (instancetype)initWithTarget:(id)target selector:(SEL)sel { - self = [super init]; - if (self) { - _target = target; - _selector = sel; -#if SD_MAC - CVDisplayLinkCreateWithActiveCGDisplays(&_displayLink); - CVDisplayLinkSetOutputCallback(_displayLink, DisplayLinkCallback, (__bridge void *)self); -#elif SD_IOS || SD_TV - SDWeakProxy *weakProxy = [SDWeakProxy proxyWithTarget:self]; - _displayLink = [CADisplayLink displayLinkWithTarget:weakProxy selector:@selector(displayLinkDidRefresh:)]; -#else - SDWeakProxy *weakProxy = [SDWeakProxy proxyWithTarget:self]; - _displayLink = [NSTimer timerWithTimeInterval:kSDDisplayLinkInterval target:weakProxy selector:@selector(displayLinkDidRefresh:) userInfo:nil repeats:YES]; -#endif - } - return self; -} - -+ (instancetype)displayLinkWithTarget:(id)target selector:(SEL)sel { - SDDisplayLink *displayLink = [[SDDisplayLink alloc] initWithTarget:target selector:sel]; - return displayLink; -} - -- (CFTimeInterval)duration { -#if SD_MAC - CVTimeStamp outputTime = self.outputTime; - NSTimeInterval duration = 0; - double periodPerSecond = (double)outputTime.videoTimeScale * outputTime.rateScalar; - if (periodPerSecond > 0) { - duration = (double)outputTime.videoRefreshPeriod / periodPerSecond; - } -#elif SD_IOS || SD_TV -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - NSTimeInterval duration = 0; - if (@available(iOS 10.0, tvOS 10.0, *)) { - duration = self.displayLink.targetTimestamp - CACurrentMediaTime(); - } else { - duration = self.displayLink.duration * self.displayLink.frameInterval; - } -#pragma clang diagnostic pop -#else - NSTimeInterval duration = 0; - if (self.displayLink.isValid && self.currentFireDate != 0) { - NSTimeInterval nextFireDate = CFRunLoopTimerGetNextFireDate((__bridge CFRunLoopTimerRef)self.displayLink); - duration = nextFireDate - self.currentFireDate; - } -#endif - if (duration <= 0) { - duration = kSDDisplayLinkInterval; - } - return duration; -} - -- (BOOL)isRunning { -#if SD_MAC - return CVDisplayLinkIsRunning(self.displayLink); -#elif SD_IOS || SD_TV - return !self.displayLink.isPaused; -#else - return self.displayLink.isValid; -#endif -} - -- (void)addToRunLoop:(NSRunLoop *)runloop forMode:(NSRunLoopMode)mode { - if (!runloop || !mode) { - return; - } -#if SD_MAC - self.runloopMode = mode; -#elif SD_IOS || SD_TV - [self.displayLink addToRunLoop:runloop forMode:mode]; -#else - self.runloop = runloop; - self.runloopMode = mode; - CFRunLoopMode cfMode; - if ([mode isEqualToString:NSDefaultRunLoopMode]) { - cfMode = kCFRunLoopDefaultMode; - } else if ([mode isEqualToString:NSRunLoopCommonModes]) { - cfMode = kCFRunLoopCommonModes; - } else { - cfMode = (__bridge CFStringRef)mode; - } - CFRunLoopAddTimer(runloop.getCFRunLoop, (__bridge CFRunLoopTimerRef)self.displayLink, cfMode); -#endif -} - -- (void)removeFromRunLoop:(NSRunLoop *)runloop forMode:(NSRunLoopMode)mode { - if (!runloop || !mode) { - return; - } -#if SD_MAC - self.runloopMode = nil; -#elif SD_IOS || SD_TV - [self.displayLink removeFromRunLoop:runloop forMode:mode]; -#else - self.runloop = nil; - self.runloopMode = nil; - CFRunLoopMode cfMode; - if ([mode isEqualToString:NSDefaultRunLoopMode]) { - cfMode = kCFRunLoopDefaultMode; - } else if ([mode isEqualToString:NSRunLoopCommonModes]) { - cfMode = kCFRunLoopCommonModes; - } else { - cfMode = (__bridge CFStringRef)mode; - } - CFRunLoopRemoveTimer(runloop.getCFRunLoop, (__bridge CFRunLoopTimerRef)self.displayLink, cfMode); -#endif -} - -- (void)start { -#if SD_MAC - CVDisplayLinkStart(self.displayLink); -#elif SD_IOS || SD_TV - self.displayLink.paused = NO; -#else - if (self.displayLink.isValid) { - [self.displayLink fire]; - } else { - SDWeakProxy *weakProxy = [SDWeakProxy proxyWithTarget:self]; - self.displayLink = [NSTimer timerWithTimeInterval:kSDDisplayLinkInterval target:weakProxy selector:@selector(displayLinkDidRefresh:) userInfo:nil repeats:YES]; - [self addToRunLoop:self.runloop forMode:self.runloopMode]; - } -#endif -} - -- (void)stop { -#if SD_MAC - CVDisplayLinkStop(self.displayLink); -#elif SD_IOS || SD_TV - self.displayLink.paused = YES; -#else - [self.displayLink invalidate]; -#endif -} - -- (void)displayLinkDidRefresh:(id)displayLink { -#if SD_MAC - // CVDisplayLink does not use runloop, but we can provide similar behavior for modes - // May use `default` runloop to avoid extra callback when in `eventTracking` (mouse drag, scroll) or `modalPanel` (modal panel) - NSString *runloopMode = self.runloopMode; - if (![runloopMode isEqualToString:NSRunLoopCommonModes] && ![runloopMode isEqualToString:NSRunLoop.mainRunLoop.currentMode]) { - return; - } -#endif -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - [_target performSelector:_selector withObject:self]; -#pragma clang diagnostic pop -#if SD_WATCH - self.currentFireDate = CFRunLoopTimerGetNextFireDate((__bridge CFRunLoopTimerRef)self.displayLink); -#endif -} - -@end - -#if SD_MAC -static CVReturn DisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp *inNow, const CVTimeStamp *inOutputTime, CVOptionFlags flagsIn, CVOptionFlags *flagsOut, void *displayLinkContext) { - // CVDisplayLink callback is not on main queue - SDDisplayLink *object = (__bridge SDDisplayLink *)displayLinkContext; - if (inOutputTime) { - object.outputTime = *inOutputTime; - } - __weak SDDisplayLink *weakObject = object; - dispatch_async(dispatch_get_main_queue(), ^{ - [weakObject displayLinkDidRefresh:(__bridge id)(displayLink)]; - }); - return kCVReturnSuccess; -} -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDFileAttributeHelper.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDFileAttributeHelper.h deleted file mode 100644 index 3ce6bad..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDFileAttributeHelper.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// This file is from https://gist.github.com/zydeco/6292773 -// -// Created by Jesús A. Álvarez on 2008-12-17. -// Copyright 2008-2009 namedfork.net. All rights reserved. -// - -#import - -/// File Extended Attribute (xattr) helper methods -@interface SDFileAttributeHelper : NSObject - -+ (nullable NSArray *)extendedAttributeNamesAtPath:(nonnull NSString *)path traverseLink:(BOOL)follow error:(NSError * _Nullable * _Nullable)err; -+ (BOOL)hasExtendedAttribute:(nonnull NSString *)name atPath:(nonnull NSString *)path traverseLink:(BOOL)follow error:(NSError * _Nullable * _Nullable)err; -+ (nullable NSData *)extendedAttribute:(nonnull NSString *)name atPath:(nonnull NSString *)path traverseLink:(BOOL)follow error:(NSError * _Nullable * _Nullable)err; -+ (BOOL)setExtendedAttribute:(nonnull NSString *)name value:(nonnull NSData *)value atPath:(nonnull NSString *)path traverseLink:(BOOL)follow overwrite:(BOOL)overwrite error:(NSError * _Nullable * _Nullable)err; -+ (BOOL)removeExtendedAttribute:(nonnull NSString *)name atPath:(nonnull NSString *)path traverseLink:(BOOL)follow error:(NSError * _Nullable * _Nullable)err; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDFileAttributeHelper.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDFileAttributeHelper.m deleted file mode 100644 index 5122089..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDFileAttributeHelper.m +++ /dev/null @@ -1,127 +0,0 @@ -// -// This file is from https://gist.github.com/zydeco/6292773 -// -// Created by Jesús A. Álvarez on 2008-12-17. -// Copyright 2008-2009 namedfork.net. All rights reserved. -// - -#import "SDFileAttributeHelper.h" -#import - -@implementation SDFileAttributeHelper - -+ (NSArray*)extendedAttributeNamesAtPath:(NSString *)path traverseLink:(BOOL)follow error:(NSError **)err { - int flags = follow? 0 : XATTR_NOFOLLOW; - - // get size of name list - ssize_t nameBuffLen = listxattr([path fileSystemRepresentation], NULL, 0, flags); - if (nameBuffLen == -1) { - if (err) *err = [NSError errorWithDomain:NSPOSIXErrorDomain code:errno userInfo: - @{ - @"error": [NSString stringWithUTF8String:strerror(errno)], - @"function": @"listxattr", - @":path": path, - @":traverseLink": @(follow) - } - ]; - return nil; - } else if (nameBuffLen == 0) return @[]; - - // get name list - NSMutableData *nameBuff = [NSMutableData dataWithLength:nameBuffLen]; - listxattr([path fileSystemRepresentation], [nameBuff mutableBytes], nameBuffLen, flags); - - // convert to array - NSMutableArray * names = [NSMutableArray arrayWithCapacity:5]; - char *nextName, *endOfNames = [nameBuff mutableBytes] + nameBuffLen; - for(nextName = [nameBuff mutableBytes]; nextName < endOfNames; nextName += 1+strlen(nextName)) - [names addObject:[NSString stringWithUTF8String:nextName]]; - return names.copy; -} - -+ (BOOL)hasExtendedAttribute:(NSString *)name atPath:(NSString *)path traverseLink:(BOOL)follow error:(NSError **)err { - int flags = follow? 0 : XATTR_NOFOLLOW; - - // get size of name list - ssize_t nameBuffLen = listxattr([path fileSystemRepresentation], NULL, 0, flags); - if (nameBuffLen == -1) { - if (err) *err = [NSError errorWithDomain:NSPOSIXErrorDomain code:errno userInfo: - @{ - @"error": [NSString stringWithUTF8String:strerror(errno)], - @"function": @"listxattr", - @":path": path, - @":traverseLink": @(follow) - } - ]; - return NO; - } else if (nameBuffLen == 0) return NO; - - // get name list - NSMutableData *nameBuff = [NSMutableData dataWithLength:nameBuffLen]; - listxattr([path fileSystemRepresentation], [nameBuff mutableBytes], nameBuffLen, flags); - - // find our name - char *nextName, *endOfNames = [nameBuff mutableBytes] + nameBuffLen; - for(nextName = [nameBuff mutableBytes]; nextName < endOfNames; nextName += 1+strlen(nextName)) - if (strcmp(nextName, [name UTF8String]) == 0) return YES; - return NO; -} - -+ (NSData *)extendedAttribute:(NSString *)name atPath:(NSString *)path traverseLink:(BOOL)follow error:(NSError **)err { - int flags = follow? 0 : XATTR_NOFOLLOW; - // get length - ssize_t attrLen = getxattr([path fileSystemRepresentation], [name UTF8String], NULL, 0, 0, flags); - if (attrLen == -1) { - if (err) *err = [NSError errorWithDomain:NSPOSIXErrorDomain code:errno userInfo: - @{ - @"error": [NSString stringWithUTF8String:strerror(errno)], - @"function": @"getxattr", - @":name": name, - @":path": path, - @":traverseLink": @(follow) - } - ]; - return nil; - } - - // get attribute data - NSMutableData *attrData = [NSMutableData dataWithLength:attrLen]; - getxattr([path fileSystemRepresentation], [name UTF8String], [attrData mutableBytes], attrLen, 0, flags); - return attrData; -} - -+ (BOOL)setExtendedAttribute:(NSString *)name value:(NSData *)value atPath:(NSString *)path traverseLink:(BOOL)follow overwrite:(BOOL)overwrite error:(NSError **)err { - int flags = (follow? 0 : XATTR_NOFOLLOW) | (overwrite? 0 : XATTR_CREATE); - if (0 == setxattr([path fileSystemRepresentation], [name UTF8String], [value bytes], [value length], 0, flags)) return YES; - // error - if (err) *err = [NSError errorWithDomain:NSPOSIXErrorDomain code:errno userInfo: - @{ - @"error": [NSString stringWithUTF8String:strerror(errno)], - @"function": @"setxattr", - @":name": name, - @":value.length": @(value.length), - @":path": path, - @":traverseLink": @(follow), - @":overwrite": @(overwrite) - } - ]; - return NO; -} - -+ (BOOL)removeExtendedAttribute:(NSString *)name atPath:(NSString *)path traverseLink:(BOOL)follow error:(NSError **)err { - int flags = (follow? 0 : XATTR_NOFOLLOW); - if (0 == removexattr([path fileSystemRepresentation], [name UTF8String], flags)) return YES; - // error - if (err) *err = [NSError errorWithDomain:NSPOSIXErrorDomain code:errno userInfo: - @{ - @"error": [NSString stringWithUTF8String:strerror(errno)], - @"function": @"removexattr", - @":name": name, - @":path": path, - @":traverseLink": @(follow) - } - ]; - return NO; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDImageAssetManager.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDImageAssetManager.h deleted file mode 100644 index 88dee48..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDImageAssetManager.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageCompat.h" - -/// A Image-Asset manager to work like UIKit/AppKit's image cache behavior -/// Apple parse the Asset Catalog compiled file(`Assets.car`) by CoreUI.framework, however it's a private framework and there are no other ways to directly get the data. So we just process the normal bundle files :) -@interface SDImageAssetManager : NSObject - -@property (nonatomic, strong, nonnull) NSMapTable *imageTable; - -+ (nonnull instancetype)sharedAssetManager; -- (nullable NSString *)getPathForName:(nonnull NSString *)name bundle:(nonnull NSBundle *)bundle preferredScale:(nonnull CGFloat *)scale; -- (nullable UIImage *)imageForName:(nonnull NSString *)name; -- (void)storeImage:(nonnull UIImage *)image forName:(nonnull NSString *)name; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDImageAssetManager.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDImageAssetManager.m deleted file mode 100644 index 7bca347..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDImageAssetManager.m +++ /dev/null @@ -1,164 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDImageAssetManager.h" -#import "SDInternalMacros.h" - -static NSArray *SDBundlePreferredScales() { - static NSArray *scales; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ -#if SD_WATCH - CGFloat screenScale = [WKInterfaceDevice currentDevice].screenScale; -#elif SD_UIKIT - CGFloat screenScale = [UIScreen mainScreen].scale; -#elif SD_MAC - NSScreen *mainScreen = nil; - if (@available(macOS 10.12, *)) { - mainScreen = [NSScreen mainScreen]; - } else { - mainScreen = [NSScreen screens].firstObject; - } - CGFloat screenScale = mainScreen.backingScaleFactor ?: 1.0f; -#endif - if (screenScale <= 1) { - scales = @[@1,@2,@3]; - } else if (screenScale <= 2) { - scales = @[@2,@3,@1]; - } else { - scales = @[@3,@2,@1]; - } - }); - return scales; -} - -@implementation SDImageAssetManager { - SD_LOCK_DECLARE(_lock); -} - -+ (instancetype)sharedAssetManager { - static dispatch_once_t onceToken; - static SDImageAssetManager *assetManager; - dispatch_once(&onceToken, ^{ - assetManager = [[SDImageAssetManager alloc] init]; - }); - return assetManager; -} - -- (instancetype)init { - self = [super init]; - if (self) { - NSPointerFunctionsOptions valueOptions; -#if SD_MAC - // Apple says that NSImage use a weak reference to value - valueOptions = NSPointerFunctionsWeakMemory; -#else - // Apple says that UIImage use a strong reference to value - valueOptions = NSPointerFunctionsStrongMemory; -#endif - _imageTable = [NSMapTable mapTableWithKeyOptions:NSPointerFunctionsCopyIn valueOptions:valueOptions]; - SD_LOCK_INIT(_lock); -#if SD_UIKIT - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveMemoryWarning:) name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; -#endif - } - return self; -} - -- (void)dealloc { -#if SD_UIKIT - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; -#endif -} - -- (void)didReceiveMemoryWarning:(NSNotification *)notification { - SD_LOCK(_lock); - [self.imageTable removeAllObjects]; - SD_UNLOCK(_lock); -} - -- (NSString *)getPathForName:(NSString *)name bundle:(NSBundle *)bundle preferredScale:(CGFloat *)scale { - NSParameterAssert(name); - NSParameterAssert(bundle); - NSString *path; - if (name.length == 0) { - return path; - } - if ([name hasSuffix:@"/"]) { - return path; - } - NSString *extension = name.pathExtension; - if (extension.length == 0) { - // If no extension, follow Apple's doc, check PNG format - extension = @"png"; - } - name = [name stringByDeletingPathExtension]; - - CGFloat providedScale = *scale; - NSArray *scales = SDBundlePreferredScales(); - - // Check if file name contains scale - for (size_t i = 0; i < scales.count; i++) { - NSNumber *scaleValue = scales[i]; - if ([name hasSuffix:[NSString stringWithFormat:@"@%@x", scaleValue]]) { - path = [bundle pathForResource:name ofType:extension]; - if (path) { - *scale = scaleValue.doubleValue; // override - return path; - } - } - } - - // Search with provided scale first - if (providedScale != 0) { - NSString *scaledName = [name stringByAppendingFormat:@"@%@x", @(providedScale)]; - path = [bundle pathForResource:scaledName ofType:extension]; - if (path) { - return path; - } - } - - // Search with preferred scale - for (size_t i = 0; i < scales.count; i++) { - NSNumber *scaleValue = scales[i]; - if (scaleValue.doubleValue == providedScale) { - // Ignore provided scale - continue; - } - NSString *scaledName = [name stringByAppendingFormat:@"@%@x", scaleValue]; - path = [bundle pathForResource:scaledName ofType:extension]; - if (path) { - *scale = scaleValue.doubleValue; // override - return path; - } - } - - // Search without scale - path = [bundle pathForResource:name ofType:extension]; - - return path; -} - -- (UIImage *)imageForName:(NSString *)name { - NSParameterAssert(name); - UIImage *image; - SD_LOCK(_lock); - image = [self.imageTable objectForKey:name]; - SD_UNLOCK(_lock); - return image; -} - -- (void)storeImage:(UIImage *)image forName:(NSString *)name { - NSParameterAssert(image); - NSParameterAssert(name); - SD_LOCK(_lock); - [self.imageTable setObject:image forKey:name]; - SD_UNLOCK(_lock); -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDImageCachesManagerOperation.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDImageCachesManagerOperation.h deleted file mode 100644 index 0debe6c..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDImageCachesManagerOperation.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageCompat.h" - -/// This is used for operation management, but not for operation queue execute -@interface SDImageCachesManagerOperation : NSOperation - -@property (nonatomic, assign, readonly) NSUInteger pendingCount; - -- (void)beginWithTotalCount:(NSUInteger)totalCount; -- (void)completeOne; -- (void)done; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDImageCachesManagerOperation.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDImageCachesManagerOperation.m deleted file mode 100644 index 1313b68..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDImageCachesManagerOperation.m +++ /dev/null @@ -1,83 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDImageCachesManagerOperation.h" -#import "SDInternalMacros.h" - -@implementation SDImageCachesManagerOperation { - SD_LOCK_DECLARE(_pendingCountLock); -} - -@synthesize executing = _executing; -@synthesize finished = _finished; -@synthesize cancelled = _cancelled; -@synthesize pendingCount = _pendingCount; - -- (instancetype)init { - if (self = [super init]) { - SD_LOCK_INIT(_pendingCountLock); - _pendingCount = 0; - } - return self; -} - -- (void)beginWithTotalCount:(NSUInteger)totalCount { - self.executing = YES; - self.finished = NO; - _pendingCount = totalCount; -} - -- (NSUInteger)pendingCount { - SD_LOCK(_pendingCountLock); - NSUInteger pendingCount = _pendingCount; - SD_UNLOCK(_pendingCountLock); - return pendingCount; -} - -- (void)completeOne { - SD_LOCK(_pendingCountLock); - _pendingCount = _pendingCount > 0 ? _pendingCount - 1 : 0; - SD_UNLOCK(_pendingCountLock); -} - -- (void)cancel { - self.cancelled = YES; - [self reset]; -} - -- (void)done { - self.finished = YES; - self.executing = NO; - [self reset]; -} - -- (void)reset { - SD_LOCK(_pendingCountLock); - _pendingCount = 0; - SD_UNLOCK(_pendingCountLock); -} - -- (void)setFinished:(BOOL)finished { - [self willChangeValueForKey:@"isFinished"]; - _finished = finished; - [self didChangeValueForKey:@"isFinished"]; -} - -- (void)setExecuting:(BOOL)executing { - [self willChangeValueForKey:@"isExecuting"]; - _executing = executing; - [self didChangeValueForKey:@"isExecuting"]; -} - -- (void)setCancelled:(BOOL)cancelled { - [self willChangeValueForKey:@"isCancelled"]; - _cancelled = cancelled; - [self didChangeValueForKey:@"isCancelled"]; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDImageIOAnimatedCoderInternal.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDImageIOAnimatedCoderInternal.h deleted file mode 100644 index f74be7e..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDImageIOAnimatedCoderInternal.h +++ /dev/null @@ -1,36 +0,0 @@ -/* -* This file is part of the SDWebImage package. -* (c) Olivier Poitrey -* -* For the full copyright and license information, please view the LICENSE -* file that was distributed with this source code. -*/ - -#import -#import "SDImageIOAnimatedCoder.h" - -// AVFileTypeHEIC/AVFileTypeHEIF is defined in AVFoundation via iOS 11, we use this without import AVFoundation -#define kSDUTTypeHEIC ((__bridge CFStringRef)@"public.heic") -#define kSDUTTypeHEIF ((__bridge CFStringRef)@"public.heif") -// HEIC Sequence (Animated Image) -#define kSDUTTypeHEICS ((__bridge CFStringRef)@"public.heics") -// kSDUTTypeWebP seems not defined in public UTI framework, Apple use the hardcode string, we define them :) -#define kSDUTTypeWebP ((__bridge CFStringRef)@"org.webmproject.webp") - -#define kSDUTTypeImage ((__bridge CFStringRef)@"public.image") -#define kSDUTTypeJPEG ((__bridge CFStringRef)@"public.jpeg") -#define kSDUTTypePNG ((__bridge CFStringRef)@"public.png") -#define kSDUTTypeTIFF ((__bridge CFStringRef)@"public.tiff") -#define kSDUTTypeSVG ((__bridge CFStringRef)@"public.svg-image") -#define kSDUTTypeGIF ((__bridge CFStringRef)@"com.compuserve.gif") -#define kSDUTTypePDF ((__bridge CFStringRef)@"com.adobe.pdf") - -@interface SDImageIOAnimatedCoder () - -+ (NSTimeInterval)frameDurationAtIndex:(NSUInteger)index source:(nonnull CGImageSourceRef)source; -+ (NSUInteger)imageLoopCountWithSource:(nonnull CGImageSourceRef)source; -+ (nullable UIImage *)createFrameAtIndex:(NSUInteger)index source:(nonnull CGImageSourceRef)source scale:(CGFloat)scale preserveAspectRatio:(BOOL)preserveAspectRatio thumbnailSize:(CGSize)thumbnailSize options:(nullable NSDictionary *)options; -+ (BOOL)canEncodeToFormat:(SDImageFormat)format; -+ (BOOL)canDecodeFromFormat:(SDImageFormat)format; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDInternalMacros.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDInternalMacros.h deleted file mode 100644 index dfff558..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDInternalMacros.h +++ /dev/null @@ -1,122 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import -#import -#import "SDmetamacros.h" - -#define SD_USE_OS_UNFAIR_LOCK TARGET_OS_MACCATALYST ||\ - (__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_10_0) ||\ - (__MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_12) ||\ - (__TV_OS_VERSION_MIN_REQUIRED >= __TVOS_10_0) ||\ - (__WATCH_OS_VERSION_MIN_REQUIRED >= __WATCHOS_3_0) - -#ifndef SD_LOCK_DECLARE -#if SD_USE_OS_UNFAIR_LOCK -#define SD_LOCK_DECLARE(lock) os_unfair_lock lock -#else -#define SD_LOCK_DECLARE(lock) os_unfair_lock lock API_AVAILABLE(ios(10.0), tvos(10), watchos(3), macos(10.12)); \ -OSSpinLock lock##_deprecated; -#endif -#endif - -#ifndef SD_LOCK_DECLARE_STATIC -#if SD_USE_OS_UNFAIR_LOCK -#define SD_LOCK_DECLARE_STATIC(lock) static os_unfair_lock lock -#else -#define SD_LOCK_DECLARE_STATIC(lock) static os_unfair_lock lock API_AVAILABLE(ios(10.0), tvos(10), watchos(3), macos(10.12)); \ -static OSSpinLock lock##_deprecated; -#endif -#endif - -#ifndef SD_LOCK_INIT -#if SD_USE_OS_UNFAIR_LOCK -#define SD_LOCK_INIT(lock) lock = OS_UNFAIR_LOCK_INIT -#else -#define SD_LOCK_INIT(lock) if (@available(iOS 10, tvOS 10, watchOS 3, macOS 10.12, *)) lock = OS_UNFAIR_LOCK_INIT; \ -else lock##_deprecated = OS_SPINLOCK_INIT; -#endif -#endif - -#ifndef SD_LOCK -#if SD_USE_OS_UNFAIR_LOCK -#define SD_LOCK(lock) os_unfair_lock_lock(&lock) -#else -#define SD_LOCK(lock) if (@available(iOS 10, tvOS 10, watchOS 3, macOS 10.12, *)) os_unfair_lock_lock(&lock); \ -else OSSpinLockLock(&lock##_deprecated); -#endif -#endif - -#ifndef SD_UNLOCK -#if SD_USE_OS_UNFAIR_LOCK -#define SD_UNLOCK(lock) os_unfair_lock_unlock(&lock) -#else -#define SD_UNLOCK(lock) if (@available(iOS 10, tvOS 10, watchOS 3, macOS 10.12, *)) os_unfair_lock_unlock(&lock); \ -else OSSpinLockUnlock(&lock##_deprecated); -#endif -#endif - -#ifndef SD_OPTIONS_CONTAINS -#define SD_OPTIONS_CONTAINS(options, value) (((options) & (value)) == (value)) -#endif - -#ifndef SD_CSTRING -#define SD_CSTRING(str) #str -#endif - -#ifndef SD_NSSTRING -#define SD_NSSTRING(str) @(SD_CSTRING(str)) -#endif - -#ifndef SD_SEL_SPI -#define SD_SEL_SPI(name) NSSelectorFromString([NSString stringWithFormat:@"_%@", SD_NSSTRING(name)]) -#endif - -#ifndef weakify -#define weakify(...) \ -sd_keywordify \ -metamacro_foreach_cxt(sd_weakify_,, __weak, __VA_ARGS__) -#endif - -#ifndef strongify -#define strongify(...) \ -sd_keywordify \ -_Pragma("clang diagnostic push") \ -_Pragma("clang diagnostic ignored \"-Wshadow\"") \ -metamacro_foreach(sd_strongify_,, __VA_ARGS__) \ -_Pragma("clang diagnostic pop") -#endif - -#define sd_weakify_(INDEX, CONTEXT, VAR) \ -CONTEXT __typeof__(VAR) metamacro_concat(VAR, _weak_) = (VAR); - -#define sd_strongify_(INDEX, VAR) \ -__strong __typeof__(VAR) VAR = metamacro_concat(VAR, _weak_); - -#if DEBUG -#define sd_keywordify autoreleasepool {} -#else -#define sd_keywordify try {} @catch (...) {} -#endif - -#ifndef onExit -#define onExit \ -sd_keywordify \ -__strong sd_cleanupBlock_t metamacro_concat(sd_exitBlock_, __LINE__) __attribute__((cleanup(sd_executeCleanupBlock), unused)) = ^ -#endif - -typedef void (^sd_cleanupBlock_t)(void); - -#if defined(__cplusplus) -extern "C" { -#endif - void sd_executeCleanupBlock (__strong sd_cleanupBlock_t *block); -#if defined(__cplusplus) -} -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDInternalMacros.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDInternalMacros.m deleted file mode 100644 index e4981af..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDInternalMacros.m +++ /dev/null @@ -1,13 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDInternalMacros.h" - -void sd_executeCleanupBlock (__strong sd_cleanupBlock_t *block) { - (*block)(); -} diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDWeakProxy.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDWeakProxy.h deleted file mode 100644 index d92c682..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDWeakProxy.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageCompat.h" - -/// A weak proxy which forward all the message to the target -@interface SDWeakProxy : NSProxy - -@property (nonatomic, weak, readonly, nullable) id target; - -- (nonnull instancetype)initWithTarget:(nonnull id)target; -+ (nonnull instancetype)proxyWithTarget:(nonnull id)target; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDWeakProxy.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDWeakProxy.m deleted file mode 100644 index 19a4593..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDWeakProxy.m +++ /dev/null @@ -1,79 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWeakProxy.h" - -@implementation SDWeakProxy - -- (instancetype)initWithTarget:(id)target { - _target = target; - return self; -} - -+ (instancetype)proxyWithTarget:(id)target { - return [[SDWeakProxy alloc] initWithTarget:target]; -} - -- (id)forwardingTargetForSelector:(SEL)selector { - return _target; -} - -- (void)forwardInvocation:(NSInvocation *)invocation { - void *null = NULL; - [invocation setReturnValue:&null]; -} - -- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector { - return [NSObject instanceMethodSignatureForSelector:@selector(init)]; -} - -- (BOOL)respondsToSelector:(SEL)aSelector { - return [_target respondsToSelector:aSelector]; -} - -- (BOOL)isEqual:(id)object { - return [_target isEqual:object]; -} - -- (NSUInteger)hash { - return [_target hash]; -} - -- (Class)superclass { - return [_target superclass]; -} - -- (Class)class { - return [_target class]; -} - -- (BOOL)isKindOfClass:(Class)aClass { - return [_target isKindOfClass:aClass]; -} - -- (BOOL)isMemberOfClass:(Class)aClass { - return [_target isMemberOfClass:aClass]; -} - -- (BOOL)conformsToProtocol:(Protocol *)aProtocol { - return [_target conformsToProtocol:aProtocol]; -} - -- (BOOL)isProxy { - return YES; -} - -- (NSString *)description { - return [_target description]; -} - -- (NSString *)debugDescription { - return [_target debugDescription]; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDWebImageTransitionInternal.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDWebImageTransitionInternal.h deleted file mode 100644 index 1b70649..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDWebImageTransitionInternal.h +++ /dev/null @@ -1,19 +0,0 @@ -/* -* This file is part of the SDWebImage package. -* (c) Olivier Poitrey -* -* For the full copyright and license information, please view the LICENSE -* file that was distributed with this source code. -*/ - -#import "SDWebImageCompat.h" - -#if SD_MAC - -#import - -/// Helper method for Core Animation transition -FOUNDATION_EXPORT CAMediaTimingFunction * _Nullable SDTimingFunctionFromAnimationOptions(SDWebImageAnimationOptions options); -FOUNDATION_EXPORT CATransition * _Nullable SDTransitionFromAnimationOptions(SDWebImageAnimationOptions options); - -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDmetamacros.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDmetamacros.h deleted file mode 100644 index dd90d99..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDmetamacros.h +++ /dev/null @@ -1,667 +0,0 @@ -/** - * Macros for metaprogramming - * ExtendedC - * - * Copyright (C) 2012 Justin Spahr-Summers - * Released under the MIT license - */ - -#ifndef EXTC_METAMACROS_H -#define EXTC_METAMACROS_H - - -/** - * Executes one or more expressions (which may have a void type, such as a call - * to a function that returns no value) and always returns true. - */ -#define metamacro_exprify(...) \ - ((__VA_ARGS__), true) - -/** - * Returns a string representation of VALUE after full macro expansion. - */ -#define metamacro_stringify(VALUE) \ - metamacro_stringify_(VALUE) - -/** - * Returns A and B concatenated after full macro expansion. - */ -#define metamacro_concat(A, B) \ - metamacro_concat_(A, B) - -/** - * Returns the Nth variadic argument (starting from zero). At least - * N + 1 variadic arguments must be given. N must be between zero and twenty, - * inclusive. - */ -#define metamacro_at(N, ...) \ - metamacro_concat(metamacro_at, N)(__VA_ARGS__) - -/** - * Returns the number of arguments (up to twenty) provided to the macro. At - * least one argument must be provided. - * - * Inspired by P99: http://p99.gforge.inria.fr - */ -#define metamacro_argcount(...) \ - metamacro_at(20, __VA_ARGS__, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1) - -/** - * Identical to #metamacro_foreach_cxt, except that no CONTEXT argument is - * given. Only the index and current argument will thus be passed to MACRO. - */ -#define metamacro_foreach(MACRO, SEP, ...) \ - metamacro_foreach_cxt(metamacro_foreach_iter, SEP, MACRO, __VA_ARGS__) - -/** - * For each consecutive variadic argument (up to twenty), MACRO is passed the - * zero-based index of the current argument, CONTEXT, and then the argument - * itself. The results of adjoining invocations of MACRO are then separated by - * SEP. - * - * Inspired by P99: http://p99.gforge.inria.fr - */ -#define metamacro_foreach_cxt(MACRO, SEP, CONTEXT, ...) \ - metamacro_concat(metamacro_foreach_cxt, metamacro_argcount(__VA_ARGS__))(MACRO, SEP, CONTEXT, __VA_ARGS__) - -/** - * Identical to #metamacro_foreach_cxt. This can be used when the former would - * fail due to recursive macro expansion. - */ -#define metamacro_foreach_cxt_recursive(MACRO, SEP, CONTEXT, ...) \ - metamacro_concat(metamacro_foreach_cxt_recursive, metamacro_argcount(__VA_ARGS__))(MACRO, SEP, CONTEXT, __VA_ARGS__) - -/** - * In consecutive order, appends each variadic argument (up to twenty) onto - * BASE. The resulting concatenations are then separated by SEP. - * - * This is primarily useful to manipulate a list of macro invocations into instead - * invoking a different, possibly related macro. - */ -#define metamacro_foreach_concat(BASE, SEP, ...) \ - metamacro_foreach_cxt(metamacro_foreach_concat_iter, SEP, BASE, __VA_ARGS__) - -/** - * Iterates COUNT times, each time invoking MACRO with the current index - * (starting at zero) and CONTEXT. The results of adjoining invocations of MACRO - * are then separated by SEP. - * - * COUNT must be an integer between zero and twenty, inclusive. - */ -#define metamacro_for_cxt(COUNT, MACRO, SEP, CONTEXT) \ - metamacro_concat(metamacro_for_cxt, COUNT)(MACRO, SEP, CONTEXT) - -/** - * Returns the first argument given. At least one argument must be provided. - * - * This is useful when implementing a variadic macro, where you may have only - * one variadic argument, but no way to retrieve it (for example, because \c ... - * always needs to match at least one argument). - * - * @code - -#define varmacro(...) \ - metamacro_head(__VA_ARGS__) - - * @endcode - */ -#define metamacro_head(...) \ - metamacro_head_(__VA_ARGS__, 0) - -/** - * Returns every argument except the first. At least two arguments must be - * provided. - */ -#define metamacro_tail(...) \ - metamacro_tail_(__VA_ARGS__) - -/** - * Returns the first N (up to twenty) variadic arguments as a new argument list. - * At least N variadic arguments must be provided. - */ -#define metamacro_take(N, ...) \ - metamacro_concat(metamacro_take, N)(__VA_ARGS__) - -/** - * Removes the first N (up to twenty) variadic arguments from the given argument - * list. At least N variadic arguments must be provided. - */ -#define metamacro_drop(N, ...) \ - metamacro_concat(metamacro_drop, N)(__VA_ARGS__) - -/** - * Decrements VAL, which must be a number between zero and twenty, inclusive. - * - * This is primarily useful when dealing with indexes and counts in - * metaprogramming. - */ -#define metamacro_dec(VAL) \ - metamacro_at(VAL, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19) - -/** - * Increments VAL, which must be a number between zero and twenty, inclusive. - * - * This is primarily useful when dealing with indexes and counts in - * metaprogramming. - */ -#define metamacro_inc(VAL) \ - metamacro_at(VAL, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21) - -/** - * If A is equal to B, the next argument list is expanded; otherwise, the - * argument list after that is expanded. A and B must be numbers between zero - * and twenty, inclusive. Additionally, B must be greater than or equal to A. - * - * @code - -// expands to true -metamacro_if_eq(0, 0)(true)(false) - -// expands to false -metamacro_if_eq(0, 1)(true)(false) - - * @endcode - * - * This is primarily useful when dealing with indexes and counts in - * metaprogramming. - */ -#define metamacro_if_eq(A, B) \ - metamacro_concat(metamacro_if_eq, A)(B) - -/** - * Identical to #metamacro_if_eq. This can be used when the former would fail - * due to recursive macro expansion. - */ -#define metamacro_if_eq_recursive(A, B) \ - metamacro_concat(metamacro_if_eq_recursive, A)(B) - -/** - * Returns 1 if N is an even number, or 0 otherwise. N must be between zero and - * twenty, inclusive. - * - * For the purposes of this test, zero is considered even. - */ -#define metamacro_is_even(N) \ - metamacro_at(N, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1) - -/** - * Returns the logical NOT of B, which must be the number zero or one. - */ -#define metamacro_not(B) \ - metamacro_at(B, 1, 0) - -// IMPLEMENTATION DETAILS FOLLOW! -// Do not write code that depends on anything below this line. -#define metamacro_stringify_(VALUE) # VALUE -#define metamacro_concat_(A, B) A ## B -#define metamacro_foreach_iter(INDEX, MACRO, ARG) MACRO(INDEX, ARG) -#define metamacro_head_(FIRST, ...) FIRST -#define metamacro_tail_(FIRST, ...) __VA_ARGS__ -#define metamacro_consume_(...) -#define metamacro_expand_(...) __VA_ARGS__ - -// implemented from scratch so that metamacro_concat() doesn't end up nesting -#define metamacro_foreach_concat_iter(INDEX, BASE, ARG) metamacro_foreach_concat_iter_(BASE, ARG) -#define metamacro_foreach_concat_iter_(BASE, ARG) BASE ## ARG - -// metamacro_at expansions -#define metamacro_at0(...) metamacro_head(__VA_ARGS__) -#define metamacro_at1(_0, ...) metamacro_head(__VA_ARGS__) -#define metamacro_at2(_0, _1, ...) metamacro_head(__VA_ARGS__) -#define metamacro_at3(_0, _1, _2, ...) metamacro_head(__VA_ARGS__) -#define metamacro_at4(_0, _1, _2, _3, ...) metamacro_head(__VA_ARGS__) -#define metamacro_at5(_0, _1, _2, _3, _4, ...) metamacro_head(__VA_ARGS__) -#define metamacro_at6(_0, _1, _2, _3, _4, _5, ...) metamacro_head(__VA_ARGS__) -#define metamacro_at7(_0, _1, _2, _3, _4, _5, _6, ...) metamacro_head(__VA_ARGS__) -#define metamacro_at8(_0, _1, _2, _3, _4, _5, _6, _7, ...) metamacro_head(__VA_ARGS__) -#define metamacro_at9(_0, _1, _2, _3, _4, _5, _6, _7, _8, ...) metamacro_head(__VA_ARGS__) -#define metamacro_at10(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, ...) metamacro_head(__VA_ARGS__) -#define metamacro_at11(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, ...) metamacro_head(__VA_ARGS__) -#define metamacro_at12(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, ...) metamacro_head(__VA_ARGS__) -#define metamacro_at13(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, ...) metamacro_head(__VA_ARGS__) -#define metamacro_at14(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, ...) metamacro_head(__VA_ARGS__) -#define metamacro_at15(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, ...) metamacro_head(__VA_ARGS__) -#define metamacro_at16(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, ...) metamacro_head(__VA_ARGS__) -#define metamacro_at17(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, ...) metamacro_head(__VA_ARGS__) -#define metamacro_at18(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, ...) metamacro_head(__VA_ARGS__) -#define metamacro_at19(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, ...) metamacro_head(__VA_ARGS__) -#define metamacro_at20(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, ...) metamacro_head(__VA_ARGS__) - -// metamacro_foreach_cxt expansions -#define metamacro_foreach_cxt0(MACRO, SEP, CONTEXT) -#define metamacro_foreach_cxt1(MACRO, SEP, CONTEXT, _0) MACRO(0, CONTEXT, _0) - -#define metamacro_foreach_cxt2(MACRO, SEP, CONTEXT, _0, _1) \ - metamacro_foreach_cxt1(MACRO, SEP, CONTEXT, _0) \ - SEP \ - MACRO(1, CONTEXT, _1) - -#define metamacro_foreach_cxt3(MACRO, SEP, CONTEXT, _0, _1, _2) \ - metamacro_foreach_cxt2(MACRO, SEP, CONTEXT, _0, _1) \ - SEP \ - MACRO(2, CONTEXT, _2) - -#define metamacro_foreach_cxt4(MACRO, SEP, CONTEXT, _0, _1, _2, _3) \ - metamacro_foreach_cxt3(MACRO, SEP, CONTEXT, _0, _1, _2) \ - SEP \ - MACRO(3, CONTEXT, _3) - -#define metamacro_foreach_cxt5(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4) \ - metamacro_foreach_cxt4(MACRO, SEP, CONTEXT, _0, _1, _2, _3) \ - SEP \ - MACRO(4, CONTEXT, _4) - -#define metamacro_foreach_cxt6(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5) \ - metamacro_foreach_cxt5(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4) \ - SEP \ - MACRO(5, CONTEXT, _5) - -#define metamacro_foreach_cxt7(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6) \ - metamacro_foreach_cxt6(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5) \ - SEP \ - MACRO(6, CONTEXT, _6) - -#define metamacro_foreach_cxt8(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7) \ - metamacro_foreach_cxt7(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6) \ - SEP \ - MACRO(7, CONTEXT, _7) - -#define metamacro_foreach_cxt9(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8) \ - metamacro_foreach_cxt8(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7) \ - SEP \ - MACRO(8, CONTEXT, _8) - -#define metamacro_foreach_cxt10(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) \ - metamacro_foreach_cxt9(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8) \ - SEP \ - MACRO(9, CONTEXT, _9) - -#define metamacro_foreach_cxt11(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) \ - metamacro_foreach_cxt10(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) \ - SEP \ - MACRO(10, CONTEXT, _10) - -#define metamacro_foreach_cxt12(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) \ - metamacro_foreach_cxt11(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) \ - SEP \ - MACRO(11, CONTEXT, _11) - -#define metamacro_foreach_cxt13(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) \ - metamacro_foreach_cxt12(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) \ - SEP \ - MACRO(12, CONTEXT, _12) - -#define metamacro_foreach_cxt14(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) \ - metamacro_foreach_cxt13(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) \ - SEP \ - MACRO(13, CONTEXT, _13) - -#define metamacro_foreach_cxt15(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) \ - metamacro_foreach_cxt14(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) \ - SEP \ - MACRO(14, CONTEXT, _14) - -#define metamacro_foreach_cxt16(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) \ - metamacro_foreach_cxt15(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) \ - SEP \ - MACRO(15, CONTEXT, _15) - -#define metamacro_foreach_cxt17(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) \ - metamacro_foreach_cxt16(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) \ - SEP \ - MACRO(16, CONTEXT, _16) - -#define metamacro_foreach_cxt18(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) \ - metamacro_foreach_cxt17(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) \ - SEP \ - MACRO(17, CONTEXT, _17) - -#define metamacro_foreach_cxt19(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) \ - metamacro_foreach_cxt18(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) \ - SEP \ - MACRO(18, CONTEXT, _18) - -#define metamacro_foreach_cxt20(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19) \ - metamacro_foreach_cxt19(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) \ - SEP \ - MACRO(19, CONTEXT, _19) - -// metamacro_foreach_cxt_recursive expansions -#define metamacro_foreach_cxt_recursive0(MACRO, SEP, CONTEXT) -#define metamacro_foreach_cxt_recursive1(MACRO, SEP, CONTEXT, _0) MACRO(0, CONTEXT, _0) - -#define metamacro_foreach_cxt_recursive2(MACRO, SEP, CONTEXT, _0, _1) \ - metamacro_foreach_cxt_recursive1(MACRO, SEP, CONTEXT, _0) \ - SEP \ - MACRO(1, CONTEXT, _1) - -#define metamacro_foreach_cxt_recursive3(MACRO, SEP, CONTEXT, _0, _1, _2) \ - metamacro_foreach_cxt_recursive2(MACRO, SEP, CONTEXT, _0, _1) \ - SEP \ - MACRO(2, CONTEXT, _2) - -#define metamacro_foreach_cxt_recursive4(MACRO, SEP, CONTEXT, _0, _1, _2, _3) \ - metamacro_foreach_cxt_recursive3(MACRO, SEP, CONTEXT, _0, _1, _2) \ - SEP \ - MACRO(3, CONTEXT, _3) - -#define metamacro_foreach_cxt_recursive5(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4) \ - metamacro_foreach_cxt_recursive4(MACRO, SEP, CONTEXT, _0, _1, _2, _3) \ - SEP \ - MACRO(4, CONTEXT, _4) - -#define metamacro_foreach_cxt_recursive6(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5) \ - metamacro_foreach_cxt_recursive5(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4) \ - SEP \ - MACRO(5, CONTEXT, _5) - -#define metamacro_foreach_cxt_recursive7(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6) \ - metamacro_foreach_cxt_recursive6(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5) \ - SEP \ - MACRO(6, CONTEXT, _6) - -#define metamacro_foreach_cxt_recursive8(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7) \ - metamacro_foreach_cxt_recursive7(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6) \ - SEP \ - MACRO(7, CONTEXT, _7) - -#define metamacro_foreach_cxt_recursive9(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8) \ - metamacro_foreach_cxt_recursive8(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7) \ - SEP \ - MACRO(8, CONTEXT, _8) - -#define metamacro_foreach_cxt_recursive10(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) \ - metamacro_foreach_cxt_recursive9(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8) \ - SEP \ - MACRO(9, CONTEXT, _9) - -#define metamacro_foreach_cxt_recursive11(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) \ - metamacro_foreach_cxt_recursive10(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) \ - SEP \ - MACRO(10, CONTEXT, _10) - -#define metamacro_foreach_cxt_recursive12(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) \ - metamacro_foreach_cxt_recursive11(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) \ - SEP \ - MACRO(11, CONTEXT, _11) - -#define metamacro_foreach_cxt_recursive13(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) \ - metamacro_foreach_cxt_recursive12(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) \ - SEP \ - MACRO(12, CONTEXT, _12) - -#define metamacro_foreach_cxt_recursive14(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) \ - metamacro_foreach_cxt_recursive13(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) \ - SEP \ - MACRO(13, CONTEXT, _13) - -#define metamacro_foreach_cxt_recursive15(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) \ - metamacro_foreach_cxt_recursive14(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) \ - SEP \ - MACRO(14, CONTEXT, _14) - -#define metamacro_foreach_cxt_recursive16(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) \ - metamacro_foreach_cxt_recursive15(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) \ - SEP \ - MACRO(15, CONTEXT, _15) - -#define metamacro_foreach_cxt_recursive17(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) \ - metamacro_foreach_cxt_recursive16(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) \ - SEP \ - MACRO(16, CONTEXT, _16) - -#define metamacro_foreach_cxt_recursive18(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) \ - metamacro_foreach_cxt_recursive17(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) \ - SEP \ - MACRO(17, CONTEXT, _17) - -#define metamacro_foreach_cxt_recursive19(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) \ - metamacro_foreach_cxt_recursive18(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) \ - SEP \ - MACRO(18, CONTEXT, _18) - -#define metamacro_foreach_cxt_recursive20(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19) \ - metamacro_foreach_cxt_recursive19(MACRO, SEP, CONTEXT, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) \ - SEP \ - MACRO(19, CONTEXT, _19) - -// metamacro_for_cxt expansions -#define metamacro_for_cxt0(MACRO, SEP, CONTEXT) -#define metamacro_for_cxt1(MACRO, SEP, CONTEXT) MACRO(0, CONTEXT) - -#define metamacro_for_cxt2(MACRO, SEP, CONTEXT) \ - metamacro_for_cxt1(MACRO, SEP, CONTEXT) \ - SEP \ - MACRO(1, CONTEXT) - -#define metamacro_for_cxt3(MACRO, SEP, CONTEXT) \ - metamacro_for_cxt2(MACRO, SEP, CONTEXT) \ - SEP \ - MACRO(2, CONTEXT) - -#define metamacro_for_cxt4(MACRO, SEP, CONTEXT) \ - metamacro_for_cxt3(MACRO, SEP, CONTEXT) \ - SEP \ - MACRO(3, CONTEXT) - -#define metamacro_for_cxt5(MACRO, SEP, CONTEXT) \ - metamacro_for_cxt4(MACRO, SEP, CONTEXT) \ - SEP \ - MACRO(4, CONTEXT) - -#define metamacro_for_cxt6(MACRO, SEP, CONTEXT) \ - metamacro_for_cxt5(MACRO, SEP, CONTEXT) \ - SEP \ - MACRO(5, CONTEXT) - -#define metamacro_for_cxt7(MACRO, SEP, CONTEXT) \ - metamacro_for_cxt6(MACRO, SEP, CONTEXT) \ - SEP \ - MACRO(6, CONTEXT) - -#define metamacro_for_cxt8(MACRO, SEP, CONTEXT) \ - metamacro_for_cxt7(MACRO, SEP, CONTEXT) \ - SEP \ - MACRO(7, CONTEXT) - -#define metamacro_for_cxt9(MACRO, SEP, CONTEXT) \ - metamacro_for_cxt8(MACRO, SEP, CONTEXT) \ - SEP \ - MACRO(8, CONTEXT) - -#define metamacro_for_cxt10(MACRO, SEP, CONTEXT) \ - metamacro_for_cxt9(MACRO, SEP, CONTEXT) \ - SEP \ - MACRO(9, CONTEXT) - -#define metamacro_for_cxt11(MACRO, SEP, CONTEXT) \ - metamacro_for_cxt10(MACRO, SEP, CONTEXT) \ - SEP \ - MACRO(10, CONTEXT) - -#define metamacro_for_cxt12(MACRO, SEP, CONTEXT) \ - metamacro_for_cxt11(MACRO, SEP, CONTEXT) \ - SEP \ - MACRO(11, CONTEXT) - -#define metamacro_for_cxt13(MACRO, SEP, CONTEXT) \ - metamacro_for_cxt12(MACRO, SEP, CONTEXT) \ - SEP \ - MACRO(12, CONTEXT) - -#define metamacro_for_cxt14(MACRO, SEP, CONTEXT) \ - metamacro_for_cxt13(MACRO, SEP, CONTEXT) \ - SEP \ - MACRO(13, CONTEXT) - -#define metamacro_for_cxt15(MACRO, SEP, CONTEXT) \ - metamacro_for_cxt14(MACRO, SEP, CONTEXT) \ - SEP \ - MACRO(14, CONTEXT) - -#define metamacro_for_cxt16(MACRO, SEP, CONTEXT) \ - metamacro_for_cxt15(MACRO, SEP, CONTEXT) \ - SEP \ - MACRO(15, CONTEXT) - -#define metamacro_for_cxt17(MACRO, SEP, CONTEXT) \ - metamacro_for_cxt16(MACRO, SEP, CONTEXT) \ - SEP \ - MACRO(16, CONTEXT) - -#define metamacro_for_cxt18(MACRO, SEP, CONTEXT) \ - metamacro_for_cxt17(MACRO, SEP, CONTEXT) \ - SEP \ - MACRO(17, CONTEXT) - -#define metamacro_for_cxt19(MACRO, SEP, CONTEXT) \ - metamacro_for_cxt18(MACRO, SEP, CONTEXT) \ - SEP \ - MACRO(18, CONTEXT) - -#define metamacro_for_cxt20(MACRO, SEP, CONTEXT) \ - metamacro_for_cxt19(MACRO, SEP, CONTEXT) \ - SEP \ - MACRO(19, CONTEXT) - -// metamacro_if_eq expansions -#define metamacro_if_eq0(VALUE) \ - metamacro_concat(metamacro_if_eq0_, VALUE) - -#define metamacro_if_eq0_0(...) __VA_ARGS__ metamacro_consume_ -#define metamacro_if_eq0_1(...) metamacro_expand_ -#define metamacro_if_eq0_2(...) metamacro_expand_ -#define metamacro_if_eq0_3(...) metamacro_expand_ -#define metamacro_if_eq0_4(...) metamacro_expand_ -#define metamacro_if_eq0_5(...) metamacro_expand_ -#define metamacro_if_eq0_6(...) metamacro_expand_ -#define metamacro_if_eq0_7(...) metamacro_expand_ -#define metamacro_if_eq0_8(...) metamacro_expand_ -#define metamacro_if_eq0_9(...) metamacro_expand_ -#define metamacro_if_eq0_10(...) metamacro_expand_ -#define metamacro_if_eq0_11(...) metamacro_expand_ -#define metamacro_if_eq0_12(...) metamacro_expand_ -#define metamacro_if_eq0_13(...) metamacro_expand_ -#define metamacro_if_eq0_14(...) metamacro_expand_ -#define metamacro_if_eq0_15(...) metamacro_expand_ -#define metamacro_if_eq0_16(...) metamacro_expand_ -#define metamacro_if_eq0_17(...) metamacro_expand_ -#define metamacro_if_eq0_18(...) metamacro_expand_ -#define metamacro_if_eq0_19(...) metamacro_expand_ -#define metamacro_if_eq0_20(...) metamacro_expand_ - -#define metamacro_if_eq1(VALUE) metamacro_if_eq0(metamacro_dec(VALUE)) -#define metamacro_if_eq2(VALUE) metamacro_if_eq1(metamacro_dec(VALUE)) -#define metamacro_if_eq3(VALUE) metamacro_if_eq2(metamacro_dec(VALUE)) -#define metamacro_if_eq4(VALUE) metamacro_if_eq3(metamacro_dec(VALUE)) -#define metamacro_if_eq5(VALUE) metamacro_if_eq4(metamacro_dec(VALUE)) -#define metamacro_if_eq6(VALUE) metamacro_if_eq5(metamacro_dec(VALUE)) -#define metamacro_if_eq7(VALUE) metamacro_if_eq6(metamacro_dec(VALUE)) -#define metamacro_if_eq8(VALUE) metamacro_if_eq7(metamacro_dec(VALUE)) -#define metamacro_if_eq9(VALUE) metamacro_if_eq8(metamacro_dec(VALUE)) -#define metamacro_if_eq10(VALUE) metamacro_if_eq9(metamacro_dec(VALUE)) -#define metamacro_if_eq11(VALUE) metamacro_if_eq10(metamacro_dec(VALUE)) -#define metamacro_if_eq12(VALUE) metamacro_if_eq11(metamacro_dec(VALUE)) -#define metamacro_if_eq13(VALUE) metamacro_if_eq12(metamacro_dec(VALUE)) -#define metamacro_if_eq14(VALUE) metamacro_if_eq13(metamacro_dec(VALUE)) -#define metamacro_if_eq15(VALUE) metamacro_if_eq14(metamacro_dec(VALUE)) -#define metamacro_if_eq16(VALUE) metamacro_if_eq15(metamacro_dec(VALUE)) -#define metamacro_if_eq17(VALUE) metamacro_if_eq16(metamacro_dec(VALUE)) -#define metamacro_if_eq18(VALUE) metamacro_if_eq17(metamacro_dec(VALUE)) -#define metamacro_if_eq19(VALUE) metamacro_if_eq18(metamacro_dec(VALUE)) -#define metamacro_if_eq20(VALUE) metamacro_if_eq19(metamacro_dec(VALUE)) - -// metamacro_if_eq_recursive expansions -#define metamacro_if_eq_recursive0(VALUE) \ - metamacro_concat(metamacro_if_eq_recursive0_, VALUE) - -#define metamacro_if_eq_recursive0_0(...) __VA_ARGS__ metamacro_consume_ -#define metamacro_if_eq_recursive0_1(...) metamacro_expand_ -#define metamacro_if_eq_recursive0_2(...) metamacro_expand_ -#define metamacro_if_eq_recursive0_3(...) metamacro_expand_ -#define metamacro_if_eq_recursive0_4(...) metamacro_expand_ -#define metamacro_if_eq_recursive0_5(...) metamacro_expand_ -#define metamacro_if_eq_recursive0_6(...) metamacro_expand_ -#define metamacro_if_eq_recursive0_7(...) metamacro_expand_ -#define metamacro_if_eq_recursive0_8(...) metamacro_expand_ -#define metamacro_if_eq_recursive0_9(...) metamacro_expand_ -#define metamacro_if_eq_recursive0_10(...) metamacro_expand_ -#define metamacro_if_eq_recursive0_11(...) metamacro_expand_ -#define metamacro_if_eq_recursive0_12(...) metamacro_expand_ -#define metamacro_if_eq_recursive0_13(...) metamacro_expand_ -#define metamacro_if_eq_recursive0_14(...) metamacro_expand_ -#define metamacro_if_eq_recursive0_15(...) metamacro_expand_ -#define metamacro_if_eq_recursive0_16(...) metamacro_expand_ -#define metamacro_if_eq_recursive0_17(...) metamacro_expand_ -#define metamacro_if_eq_recursive0_18(...) metamacro_expand_ -#define metamacro_if_eq_recursive0_19(...) metamacro_expand_ -#define metamacro_if_eq_recursive0_20(...) metamacro_expand_ - -#define metamacro_if_eq_recursive1(VALUE) metamacro_if_eq_recursive0(metamacro_dec(VALUE)) -#define metamacro_if_eq_recursive2(VALUE) metamacro_if_eq_recursive1(metamacro_dec(VALUE)) -#define metamacro_if_eq_recursive3(VALUE) metamacro_if_eq_recursive2(metamacro_dec(VALUE)) -#define metamacro_if_eq_recursive4(VALUE) metamacro_if_eq_recursive3(metamacro_dec(VALUE)) -#define metamacro_if_eq_recursive5(VALUE) metamacro_if_eq_recursive4(metamacro_dec(VALUE)) -#define metamacro_if_eq_recursive6(VALUE) metamacro_if_eq_recursive5(metamacro_dec(VALUE)) -#define metamacro_if_eq_recursive7(VALUE) metamacro_if_eq_recursive6(metamacro_dec(VALUE)) -#define metamacro_if_eq_recursive8(VALUE) metamacro_if_eq_recursive7(metamacro_dec(VALUE)) -#define metamacro_if_eq_recursive9(VALUE) metamacro_if_eq_recursive8(metamacro_dec(VALUE)) -#define metamacro_if_eq_recursive10(VALUE) metamacro_if_eq_recursive9(metamacro_dec(VALUE)) -#define metamacro_if_eq_recursive11(VALUE) metamacro_if_eq_recursive10(metamacro_dec(VALUE)) -#define metamacro_if_eq_recursive12(VALUE) metamacro_if_eq_recursive11(metamacro_dec(VALUE)) -#define metamacro_if_eq_recursive13(VALUE) metamacro_if_eq_recursive12(metamacro_dec(VALUE)) -#define metamacro_if_eq_recursive14(VALUE) metamacro_if_eq_recursive13(metamacro_dec(VALUE)) -#define metamacro_if_eq_recursive15(VALUE) metamacro_if_eq_recursive14(metamacro_dec(VALUE)) -#define metamacro_if_eq_recursive16(VALUE) metamacro_if_eq_recursive15(metamacro_dec(VALUE)) -#define metamacro_if_eq_recursive17(VALUE) metamacro_if_eq_recursive16(metamacro_dec(VALUE)) -#define metamacro_if_eq_recursive18(VALUE) metamacro_if_eq_recursive17(metamacro_dec(VALUE)) -#define metamacro_if_eq_recursive19(VALUE) metamacro_if_eq_recursive18(metamacro_dec(VALUE)) -#define metamacro_if_eq_recursive20(VALUE) metamacro_if_eq_recursive19(metamacro_dec(VALUE)) - -// metamacro_take expansions -#define metamacro_take0(...) -#define metamacro_take1(...) metamacro_head(__VA_ARGS__) -#define metamacro_take2(...) metamacro_head(__VA_ARGS__), metamacro_take1(metamacro_tail(__VA_ARGS__)) -#define metamacro_take3(...) metamacro_head(__VA_ARGS__), metamacro_take2(metamacro_tail(__VA_ARGS__)) -#define metamacro_take4(...) metamacro_head(__VA_ARGS__), metamacro_take3(metamacro_tail(__VA_ARGS__)) -#define metamacro_take5(...) metamacro_head(__VA_ARGS__), metamacro_take4(metamacro_tail(__VA_ARGS__)) -#define metamacro_take6(...) metamacro_head(__VA_ARGS__), metamacro_take5(metamacro_tail(__VA_ARGS__)) -#define metamacro_take7(...) metamacro_head(__VA_ARGS__), metamacro_take6(metamacro_tail(__VA_ARGS__)) -#define metamacro_take8(...) metamacro_head(__VA_ARGS__), metamacro_take7(metamacro_tail(__VA_ARGS__)) -#define metamacro_take9(...) metamacro_head(__VA_ARGS__), metamacro_take8(metamacro_tail(__VA_ARGS__)) -#define metamacro_take10(...) metamacro_head(__VA_ARGS__), metamacro_take9(metamacro_tail(__VA_ARGS__)) -#define metamacro_take11(...) metamacro_head(__VA_ARGS__), metamacro_take10(metamacro_tail(__VA_ARGS__)) -#define metamacro_take12(...) metamacro_head(__VA_ARGS__), metamacro_take11(metamacro_tail(__VA_ARGS__)) -#define metamacro_take13(...) metamacro_head(__VA_ARGS__), metamacro_take12(metamacro_tail(__VA_ARGS__)) -#define metamacro_take14(...) metamacro_head(__VA_ARGS__), metamacro_take13(metamacro_tail(__VA_ARGS__)) -#define metamacro_take15(...) metamacro_head(__VA_ARGS__), metamacro_take14(metamacro_tail(__VA_ARGS__)) -#define metamacro_take16(...) metamacro_head(__VA_ARGS__), metamacro_take15(metamacro_tail(__VA_ARGS__)) -#define metamacro_take17(...) metamacro_head(__VA_ARGS__), metamacro_take16(metamacro_tail(__VA_ARGS__)) -#define metamacro_take18(...) metamacro_head(__VA_ARGS__), metamacro_take17(metamacro_tail(__VA_ARGS__)) -#define metamacro_take19(...) metamacro_head(__VA_ARGS__), metamacro_take18(metamacro_tail(__VA_ARGS__)) -#define metamacro_take20(...) metamacro_head(__VA_ARGS__), metamacro_take19(metamacro_tail(__VA_ARGS__)) - -// metamacro_drop expansions -#define metamacro_drop0(...) __VA_ARGS__ -#define metamacro_drop1(...) metamacro_tail(__VA_ARGS__) -#define metamacro_drop2(...) metamacro_drop1(metamacro_tail(__VA_ARGS__)) -#define metamacro_drop3(...) metamacro_drop2(metamacro_tail(__VA_ARGS__)) -#define metamacro_drop4(...) metamacro_drop3(metamacro_tail(__VA_ARGS__)) -#define metamacro_drop5(...) metamacro_drop4(metamacro_tail(__VA_ARGS__)) -#define metamacro_drop6(...) metamacro_drop5(metamacro_tail(__VA_ARGS__)) -#define metamacro_drop7(...) metamacro_drop6(metamacro_tail(__VA_ARGS__)) -#define metamacro_drop8(...) metamacro_drop7(metamacro_tail(__VA_ARGS__)) -#define metamacro_drop9(...) metamacro_drop8(metamacro_tail(__VA_ARGS__)) -#define metamacro_drop10(...) metamacro_drop9(metamacro_tail(__VA_ARGS__)) -#define metamacro_drop11(...) metamacro_drop10(metamacro_tail(__VA_ARGS__)) -#define metamacro_drop12(...) metamacro_drop11(metamacro_tail(__VA_ARGS__)) -#define metamacro_drop13(...) metamacro_drop12(metamacro_tail(__VA_ARGS__)) -#define metamacro_drop14(...) metamacro_drop13(metamacro_tail(__VA_ARGS__)) -#define metamacro_drop15(...) metamacro_drop14(metamacro_tail(__VA_ARGS__)) -#define metamacro_drop16(...) metamacro_drop15(metamacro_tail(__VA_ARGS__)) -#define metamacro_drop17(...) metamacro_drop16(metamacro_tail(__VA_ARGS__)) -#define metamacro_drop18(...) metamacro_drop17(metamacro_tail(__VA_ARGS__)) -#define metamacro_drop19(...) metamacro_drop18(metamacro_tail(__VA_ARGS__)) -#define metamacro_drop20(...) metamacro_drop19(metamacro_tail(__VA_ARGS__)) - -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/UIColor+SDHexString.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/UIColor+SDHexString.h deleted file mode 100644 index cf67186..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/UIColor+SDHexString.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" - -@interface UIColor (SDHexString) - -/** - Convenience way to get hex string from color. The output should always be 32-bit RGBA hex string like `#00000000`. - */ -@property (nonatomic, copy, readonly, nonnull) NSString *sd_hexString; - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/UIColor+SDHexString.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/UIColor+SDHexString.m deleted file mode 100644 index 7b43c41..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/UIColor+SDHexString.m +++ /dev/null @@ -1,42 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "UIColor+SDHexString.h" - -@implementation UIColor (SDHexString) - -- (NSString *)sd_hexString { - CGFloat red, green, blue, alpha; -#if SD_UIKIT - if (![self getRed:&red green:&green blue:&blue alpha:&alpha]) { - [self getWhite:&red alpha:&alpha]; - green = red; - blue = red; - } -#else - @try { - [self getRed:&red green:&green blue:&blue alpha:&alpha]; - } - @catch (NSException *exception) { - [self getWhite:&red alpha:&alpha]; - green = red; - blue = red; - } -#endif - - red = roundf(red * 255.f); - green = roundf(green * 255.f); - blue = roundf(blue * 255.f); - alpha = roundf(alpha * 255.f); - - uint hex = ((uint)alpha << 24) | ((uint)red << 16) | ((uint)green << 8) | ((uint)blue); - - return [NSString stringWithFormat:@"#%08x", hex]; -} - -@end diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/SDWebImage.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/SDWebImage.h deleted file mode 100644 index 46c31a6..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/SDWebImage.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * This file is part of the DDWebImageKit_Private package. - * (c) Olivier Poitrey - * (c) Florent Vilmart - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import - -//! Project version number for DDWebImageKit_Private. -FOUNDATION_EXPORT double SDWebImageVersionNumber; - -//! Project version string for DDWebImageKit_Private. -FOUNDATION_EXPORT const unsigned char SDWebImageVersionString[]; - -// In this header, you should import all the public headers of your framework using statements like #import - -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import - -// Mac -#if __has_include() -#import -#endif -#if __has_include() -#import -#endif -#if __has_include() -#import -#endif - -// MapKit -#if __has_include() -#import -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImageMapKit/MapKit/MKAnnotationView+WebCache.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImageMapKit/MapKit/MKAnnotationView+WebCache.h deleted file mode 100644 index c30eec5..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImageMapKit/MapKit/MKAnnotationView+WebCache.h +++ /dev/null @@ -1,170 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import - -#if SD_UIKIT || SD_MAC - -#import - -/** - * Integrates SDWebImage async downloading and caching of remote images with MKAnnotationView. - */ -@interface MKAnnotationView (WebCache) - -/** - * Set the imageView `image` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url NS_REFINED_FOR_SWIFT; - -/** - * Set the imageView `image` with an `url` and a placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @see sd_setImageWithURL:placeholderImage:options: - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder NS_REFINED_FOR_SWIFT; - -/** - * Set the imageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - */ - -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options NS_REFINED_FOR_SWIFT; - -/** - * Set the imageView `image` with an `url`, placeholder, custom options and context. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - */ - -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context; - -/** - * Set the imageView `image` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the imageView `image` with an `url`, placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - completed:(nullable SDExternalCompletionBlock)completedBlock NS_REFINED_FOR_SWIFT; - -/** - * Set the imageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the imageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param progressBlock A block called while image is downloading - * @note the progress block is executed on a background queue - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock; - -/** - * Set the imageView `image` with an `url`, placeholder, custom options and context. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. - * @param progressBlock A block called while image is downloading - * @note the progress block is executed on a background queue - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock; - -@end - -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImageMapKit/MapKit/MKAnnotationView+WebCache.m b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImageMapKit/MapKit/MKAnnotationView+WebCache.m deleted file mode 100644 index 4969c0b..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImageMapKit/MapKit/MKAnnotationView+WebCache.m +++ /dev/null @@ -1,71 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "MKAnnotationView+WebCache.h" - -#if SD_UIKIT || SD_MAC - -@implementation MKAnnotationView (WebCache) - -- (void)sd_setImageWithURL:(nullable NSURL *)url { - [self sd_setImageWithURL:url placeholderImage:nil options:0 completed:nil]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder { - [self sd_setImageWithURL:url placeholderImage:placeholder options:0 completed:nil]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options context:(nullable SDWebImageContext *)context { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options context:context progress:nil completed:nil]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:nil options:0 completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:placeholder options:0 completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options context:nil progress:progressBlock completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - context:(nullable SDWebImageContext *)context - progress:(nullable SDImageLoaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock { - __weak typeof(self) wself = self; - [self sd_internalSetImageWithURL:url - placeholderImage:placeholder - options:options - context:context - setImageBlock:^(UIImage * _Nullable image, NSData * _Nullable imageData, SDImageCacheType cacheType, NSURL * _Nullable imageURL) { - wself.image = image; - } - progress:progressBlock - completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType, imageURL); - } - }]; -} - -@end - -#endif diff --git a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImageMapKit/SDWebImageMapKit.h b/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImageMapKit/SDWebImageMapKit.h deleted file mode 100644 index d02e6f3..0000000 --- a/Pods/DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImageMapKit/SDWebImageMapKit.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * (c) Florent Vilmart - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import - -//! Project version number for SDWebImageMapKit. -FOUNDATION_EXPORT double SDWebImageMapKitVersionNumber; - -//! Project version string for SDWebImageMapKit. -FOUNDATION_EXPORT const unsigned char SDWebImageMapKitVersionString[]; - -// In this header, you should import all the public headers of your framework using statements like #import - -// MapKit -#import diff --git a/Pods/DDWebImageKit_Private/LICENSE b/Pods/DDWebImageKit_Private/LICENSE deleted file mode 100644 index 60fb0df..0000000 --- a/Pods/DDWebImageKit_Private/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2022 DDIsFriend - -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. diff --git a/Pods/DDWebImageKit_Private/README.md b/Pods/DDWebImageKit_Private/README.md deleted file mode 100644 index 200daa9..0000000 --- a/Pods/DDWebImageKit_Private/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# DDWebImageKit_Private - -[![CI Status](https://img.shields.io/travis/DDIsFriend/DDWebImageKit_Private.svg?style=flat)](https://travis-ci.org/DDIsFriend/DDWebImageKit_Private) -[![Version](https://img.shields.io/cocoapods/v/DDWebImageKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDWebImageKit_Private) -[![License](https://img.shields.io/cocoapods/l/DDWebImageKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDWebImageKit_Private) -[![Platform](https://img.shields.io/cocoapods/p/DDWebImageKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDWebImageKit_Private) - -## Example - -To run the example project, clone the repo, and run `pod install` from the Example directory first. - -## Requirements - -## Installation - -DDWebImageKit_Private is available through [CocoaPods](https://cocoapods.org). To install -it, simply add the following line to your Podfile: - -```ruby -pod 'DDWebImageKit_Private' -``` - -## Author - -DDIsFriend, DDIsFriend@163.com - -## License - -DDWebImageKit_Private is available under the MIT license. See the LICENSE file for more info. diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/UIImageView+ZFCache.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/UIImageView+ZFCache.h deleted file mode 100644 index 7c72463..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/UIImageView+ZFCache.h +++ /dev/null @@ -1,127 +0,0 @@ -// -// UIImageView+ZFCache.h -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 - -typedef void (^ZFDownLoadDataCallBack)(NSData *data, NSError *error); -typedef void (^ZFDownloadProgressBlock)(unsigned long long total, unsigned long long current); - -@interface ZFImageDownloader : NSObject - -@property (nonatomic, strong) NSURLSession *session; -@property (nonatomic, strong) NSURLSessionDownloadTask *task; - -@property (nonatomic, assign) unsigned long long totalLength; -@property (nonatomic, assign) unsigned long long currentLength; - -@property (nonatomic, copy) ZFDownloadProgressBlock progressBlock; -@property (nonatomic, copy) ZFDownLoadDataCallBack callbackOnFinished; - -- (void)startDownloadImageWithUrl:(NSString *)url - progress:(ZFDownloadProgressBlock)progress - finished:(ZFDownLoadDataCallBack)finished; - -@end - -typedef void (^ZFImageBlock)(UIImage *image); - -@interface UIImageView (ZFCache) - -/** - * Get/Set the callback block when download the image finished. - * - * The image object from network or from disk. - */ -@property (nonatomic, copy) ZFImageBlock completion; - -/** - * Image downloader - */ -@property (nonatomic, strong) ZFImageDownloader *imageDownloader; - -/** - * Specify the URL to download images fails, the number of retries, the default is 2 - */ -@property (nonatomic, assign) NSUInteger attemptToReloadTimesForFailedURL; - -/** - * Will automatically download to cutting for UIImageView size of image.The default value is NO. - * If set to YES, then the download after a successful store only after cutting the image - */ -@property (nonatomic, assign) BOOL shouldAutoClipImageToViewSize; - -/** - * Set the imageView `image` with an `url` and a placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholderImageName The image name to be set initially, until the image request finishes. - */ -- (void)setImageWithURLString:(NSString *)url placeholderImageName:(NSString *)placeholderImageName; - -/** - * Set the imageView `image` with an `url` and a placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholderImage The image to be set initially, until the image request finishes. - */ -- (void)setImageWithURLString:(NSString *)url placeholder:(UIImage *)placeholderImage; - -/** - * Set the imageView `image` with an `url`, placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholderImage The image to be set initially, until the image request finishes. - * @param completion A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)setImageWithURLString:(NSString *)url - placeholder:(UIImage *)placeholderImage - completion:(void (^)(UIImage *image))completion; - -/** - * Set the imageView `image` with an `url`, placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholderImageName The image name to be set initially, until the image request finishes. - * @param completion A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrieved from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)setImageWithURLString:(NSString *)url - placeholderImageName:(NSString *)placeholderImageName - completion:(void (^)(UIImage *image))completion; -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/UIImageView+ZFCache.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/UIImageView+ZFCache.m deleted file mode 100644 index 373c7d4..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/UIImageView+ZFCache.m +++ /dev/null @@ -1,411 +0,0 @@ -// -// UIImageView+ZFCache.m -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "UIImageView+ZFCache.h" -#import -#import - -@implementation ZFImageDownloader - -- (void)startDownloadImageWithUrl:(NSString *)url - progress:(ZFDownloadProgressBlock)progress - finished:(ZFDownLoadDataCallBack)finished { - self.progressBlock = progress; - self.callbackOnFinished = finished; - - if ([NSURL URLWithString:url] == nil) { - if (finished) { finished(nil, nil); } - return; - } - - NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] - cachePolicy:NSURLRequestReturnCacheDataElseLoad - timeoutInterval:60]; - [request addValue:@"image/*" forHTTPHeaderField:@"Accept"]; - NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; - NSOperationQueue *queue = [[NSOperationQueue alloc]init]; - self.session = [NSURLSession sessionWithConfiguration:config - delegate:self - delegateQueue:queue]; - NSURLSessionDownloadTask *task = [self.session downloadTaskWithRequest:request]; - [task resume]; - self.task = task; -} - -- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location { - NSData *data = [NSData dataWithContentsOfURL:location]; - - if (self.progressBlock) { - self.progressBlock(self.totalLength, self.currentLength); - } - - if (self.callbackOnFinished) { - self.callbackOnFinished(data, nil); - - // 防止重复调用 - self.callbackOnFinished = nil; - } -} - -- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite { - self.currentLength = totalBytesWritten; - self.totalLength = totalBytesExpectedToWrite; - - if (self.progressBlock) { - self.progressBlock(self.totalLength, self.currentLength); - } -} - -- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { - if ([error code] != NSURLErrorCancelled) { - if (self.callbackOnFinished) { - self.callbackOnFinished(nil, error); - } - self.callbackOnFinished = nil; - } -} - -@end - -@interface NSString (md5) - -+ (NSString *)cachedFileNameForKey:(NSString *)key; -+ (NSString *)zf_cachePath; -+ (NSString *)zf_keyForRequest:(NSURLRequest *)request; - -@end - -@implementation NSString (md5) - -+ (NSString *)zf_keyForRequest:(NSURLRequest *)request { - return request.URL.absoluteString; -} - -+ (NSString *)zf_cachePath { - NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; - NSString *directoryPath = [NSString stringWithFormat:@"%@/%@/%@",cachePath,@"default",@"com.hackemist.SDWebImageCache.default"]; - return directoryPath; -} - -+ (NSString *)cachedFileNameForKey:(NSString *)key { - const char *str = [key UTF8String]; - if (str == NULL) { - str = ""; - } - unsigned char r[CC_MD5_DIGEST_LENGTH]; - CC_MD5(str, (CC_LONG)strlen(str), r); - NSString *filename = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%@", - r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10], - r[11], r[12], r[13], r[14], r[15], [[key pathExtension] isEqualToString:@""] ? @"" : [NSString stringWithFormat:@".%@", [key pathExtension]]]; - - return filename; -} - -@end - -@interface UIApplication (ZFCacheImage) - -@property (nonatomic, strong, readonly) NSMutableDictionary *zf_cacheFaileTimes; - -- (UIImage *)zf_cacheImageForRequest:(NSURLRequest *)request; -- (void)zf_cacheImage:(UIImage *)image forRequest:(NSURLRequest *)request; -- (void)zf_cacheFailRequest:(NSURLRequest *)request; -- (NSUInteger)zf_failTimesForRequest:(NSURLRequest *)request; - -@end - -@implementation UIApplication (ZFCacheImage) - -- (NSMutableDictionary *)zf_cacheFaileTimes { - NSMutableDictionary *dict = objc_getAssociatedObject(self, _cmd); - if (!dict) { - dict = [[NSMutableDictionary alloc] init]; - } - return dict; -} - -- (void)setZf_cacheFaileTimes:(NSMutableDictionary *)zf_cacheFaileTimes { - objc_setAssociatedObject(self, @selector(zf_cacheFaileTimes), zf_cacheFaileTimes, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)zf_clearCache { - [self.zf_cacheFaileTimes removeAllObjects]; - self.zf_cacheFaileTimes = nil; -} - -- (void)zf_clearDiskCaches { - NSString *directoryPath = [NSString zf_cachePath]; - if ([[NSFileManager defaultManager] fileExistsAtPath:directoryPath isDirectory:nil]) { - dispatch_queue_t ioQueue = dispatch_queue_create("com.hackemist.SDWebImageCache", DISPATCH_QUEUE_SERIAL); - dispatch_async(ioQueue, ^{ - [[NSFileManager defaultManager] removeItemAtPath:directoryPath error:nil]; - [[NSFileManager defaultManager] createDirectoryAtPath:directoryPath - withIntermediateDirectories:YES - attributes:nil - error:nil]; - }); - } - [self zf_clearCache]; -} - -- (UIImage *)zf_cacheImageForRequest:(NSURLRequest *)request { - if (request) { - NSString *directoryPath = [NSString zf_cachePath]; - NSString *path = [NSString stringWithFormat:@"%@/%@", directoryPath, [NSString cachedFileNameForKey:[NSString zf_keyForRequest:request]]]; - return [UIImage imageWithContentsOfFile:path]; - } - return nil; -} - -- (NSUInteger)zf_failTimesForRequest:(NSURLRequest *)request { - NSNumber *faileTimes = [self.zf_cacheFaileTimes objectForKey:[NSString cachedFileNameForKey:[NSString zf_keyForRequest:request]]]; - if (faileTimes && [faileTimes respondsToSelector:@selector(integerValue)]) { - return faileTimes.integerValue; - } - return 0; -} - -- (void)zf_cacheFailRequest:(NSURLRequest *)request { - NSNumber *faileTimes = [self.zf_cacheFaileTimes objectForKey:[NSString cachedFileNameForKey:[NSString zf_keyForRequest:request]]]; - NSUInteger times = 0; - if (faileTimes && [faileTimes respondsToSelector:@selector(integerValue)]) { - times = [faileTimes integerValue]; - } - - times++; - - [self.zf_cacheFaileTimes setObject:@(times) forKey:[NSString cachedFileNameForKey:[NSString zf_keyForRequest:request]]]; -} - -- (void)zf_cacheImage:(UIImage *)image forRequest:(NSURLRequest *)request { - if (!image || !request) { return; } - - NSString *directoryPath = [NSString zf_cachePath]; - - if (![[NSFileManager defaultManager] fileExistsAtPath:directoryPath isDirectory:nil]) { - NSError *error = nil; - [[NSFileManager defaultManager] createDirectoryAtPath:directoryPath - withIntermediateDirectories:YES - attributes:nil - error:&error]; - if (error) { return; } - } - - NSString *path = [NSString stringWithFormat:@"%@/%@", directoryPath, [NSString cachedFileNameForKey:[NSString zf_keyForRequest:request]]]; - NSData *data = UIImagePNGRepresentation(image); - if (data) { - [[NSFileManager defaultManager] createFileAtPath:path contents:data attributes:nil]; - } -} - -@end - - -@implementation UIImageView (ZFCache) - -#pragma mark - getter - -- (ZFImageBlock)completion { - return objc_getAssociatedObject(self, _cmd); -} - -- (ZFImageDownloader *)imageDownloader { - return objc_getAssociatedObject(self, _cmd); -} - -- (NSUInteger)attemptToReloadTimesForFailedURL { - NSUInteger count = [objc_getAssociatedObject(self, _cmd) integerValue]; - if (count == 0) { count = 2; } - return count; -} - -- (BOOL)shouldAutoClipImageToViewSize { - return [objc_getAssociatedObject(self, _cmd) boolValue]; -} - -#pragma mark - setter - -- (void)setCompletion:(ZFImageBlock)completion { - objc_setAssociatedObject(self, @selector(completion), completion, OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (void)setImageDownloader:(ZFImageDownloader *)imageDownloader { - objc_setAssociatedObject(self, @selector(imageDownloader), imageDownloader, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)setAttemptToReloadTimesForFailedURL:(NSUInteger)attemptToReloadTimesForFailedURL { - objc_setAssociatedObject(self, @selector(attemptToReloadTimesForFailedURL), @(attemptToReloadTimesForFailedURL), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)setShouldAutoClipImageToViewSize:(BOOL)shouldAutoClipImageToViewSize { - objc_setAssociatedObject(self, @selector(shouldAutoClipImageToViewSize), @(shouldAutoClipImageToViewSize), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -#pragma mark - public method - -- (void)setImageWithURLString:(NSString *)url - placeholderImageName:(NSString *)placeholderImageName { - return [self setImageWithURLString:url placeholderImageName:placeholderImageName completion:nil]; -} - -- (void)setImageWithURLString:(NSString *)url placeholder:(UIImage *)placeholderImage { - return [self setImageWithURLString:url placeholder:placeholderImage completion:nil]; -} - -- (void)setImageWithURLString:(NSString *)url - placeholderImageName:(NSString *)placeholderImage - completion:(void (^)(UIImage *image))completion { - NSString *path = [[NSBundle mainBundle] pathForResource:placeholderImage ofType:nil]; - UIImage *image = [UIImage imageWithContentsOfFile:path]; - if (image == nil) { image = [UIImage imageNamed:placeholderImage]; } - - [self setImageWithURLString:url placeholder:image completion:completion]; -} - -- (void)setImageWithURLString:(NSString *)url - placeholder:(UIImage *)placeholderImageName - completion:(void (^)(UIImage *image))completion { - [self.layer removeAllAnimations]; - self.completion = completion; - - if (url == nil || [url isKindOfClass:[NSNull class]] || (![url hasPrefix:@"http://"] && ![url hasPrefix:@"https://"])) { - [self setImage:placeholderImageName isFromCache:YES]; - - if (completion) { - self.completion(self.image); - } - return; - } - - NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]]; - [self downloadWithReqeust:request holder:placeholderImageName]; -} - -#pragma mark - private method - -- (void)downloadWithReqeust:(NSURLRequest *)theRequest holder:(UIImage *)holder { - UIImage *cachedImage = [[UIApplication sharedApplication] zf_cacheImageForRequest:theRequest]; - - if (cachedImage) { - [self setImage:cachedImage isFromCache:YES]; - if (self.completion) { - self.completion(cachedImage); - } - return; - } - - [self setImage:holder isFromCache:YES]; - - if ([[UIApplication sharedApplication] zf_failTimesForRequest:theRequest] >= self.attemptToReloadTimesForFailedURL) { - return; - } - - [self cancelRequest]; - self.imageDownloader = nil; - - __weak __typeof(self) weakSelf = self; - - self.imageDownloader = [[ZFImageDownloader alloc] init]; - [self.imageDownloader startDownloadImageWithUrl:theRequest.URL.absoluteString progress:nil finished:^(NSData *data, NSError *error) { - // success - if (data != nil && error == nil) { - dispatch_async(dispatch_get_global_queue(0, 0), ^{ - UIImage *image = [UIImage imageWithData:data]; - UIImage *finalImage = image; - - if (image) { - if (weakSelf.shouldAutoClipImageToViewSize) { - // cutting - if (fabs(weakSelf.frame.size.width - image.size.width) != 0 - && fabs(weakSelf.frame.size.height - image.size.height) != 0) { - finalImage = [self clipImage:image toSize:weakSelf.frame.size isScaleToMax:YES]; - } - } - - [[UIApplication sharedApplication] zf_cacheImage:finalImage forRequest:theRequest]; - } else { - [[UIApplication sharedApplication] zf_cacheFailRequest:theRequest]; - } - - dispatch_async(dispatch_get_main_queue(), ^{ - if (finalImage) { - [weakSelf setImage:finalImage isFromCache:NO]; - - if (weakSelf.completion) { - weakSelf.completion(weakSelf.image); - } - } else {// error data - if (weakSelf.completion) { - weakSelf.completion(weakSelf.image); - } - } - }); - }); - } else { // error - [[UIApplication sharedApplication] zf_cacheFailRequest:theRequest]; - - if (weakSelf.completion) { - weakSelf.completion(weakSelf.image); - } - } - }]; -} - -- (void)setImage:(UIImage *)image isFromCache:(BOOL)isFromCache { - self.image = image; - if (!isFromCache) { - CATransition *animation = [CATransition animation]; - [animation setDuration:0.6f]; - [animation setType:kCATransitionFade]; - animation.removedOnCompletion = YES; - [self.layer addAnimation:animation forKey:@"transition"]; - } -} - -- (void)cancelRequest { - [self.imageDownloader.task cancel]; -} - -- (UIImage *)clipImage:(UIImage *)image toSize:(CGSize)size isScaleToMax:(BOOL)isScaleToMax { - CGFloat scale = [UIScreen mainScreen].scale; - - UIGraphicsBeginImageContextWithOptions(size, NO, scale); - - CGSize aspectFitSize = CGSizeZero; - if (image.size.width != 0 && image.size.height != 0) { - CGFloat rateWidth = size.width / image.size.width; - CGFloat rateHeight = size.height / image.size.height; - - CGFloat rate = isScaleToMax ? MAX(rateHeight, rateWidth) : MIN(rateHeight, rateWidth); - aspectFitSize = CGSizeMake(image.size.width * rate, image.size.height * rate); - } - - [image drawInRect:CGRectMake(0, 0, aspectFitSize.width, aspectFitSize.height)]; - UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - return finalImage; -} - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/UIView+ZFFrame.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/UIView+ZFFrame.h deleted file mode 100644 index 9d83061..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/UIView+ZFFrame.h +++ /dev/null @@ -1,45 +0,0 @@ -// -// UIView+ZFFrame.h -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 - -@interface UIView (ZFFrame) - -@property (nonatomic) CGFloat zf_x; -@property (nonatomic) CGFloat zf_y; -@property (nonatomic) CGFloat zf_width; -@property (nonatomic) CGFloat zf_height; - -@property (nonatomic) CGFloat zf_top; -@property (nonatomic) CGFloat zf_bottom; -@property (nonatomic) CGFloat zf_left; -@property (nonatomic) CGFloat zf_right; - -@property (nonatomic) CGFloat zf_centerX; -@property (nonatomic) CGFloat zf_centerY; - -@property (nonatomic) CGPoint zf_origin; -@property (nonatomic) CGSize zf_size; - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/UIView+ZFFrame.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/UIView+ZFFrame.m deleted file mode 100644 index bd633dd..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/UIView+ZFFrame.m +++ /dev/null @@ -1,149 +0,0 @@ -// -// UIView+ZFFrame.m -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "UIView+ZFFrame.h" - -@implementation UIView (ZFFrame) - -- (CGFloat)zf_x { - return self.frame.origin.x; -} - -- (void)setZf_x:(CGFloat)zf_x { - CGRect newFrame = self.frame; - newFrame.origin.x = zf_x; - self.frame = newFrame; -} - -- (CGFloat)zf_y { - return self.frame.origin.y; -} - -- (void)setZf_y:(CGFloat)zf_y { - CGRect newFrame = self.frame; - newFrame.origin.y = zf_y; - self.frame = newFrame; -} - -- (CGFloat)zf_width { - return CGRectGetWidth(self.bounds); -} - -- (void)setZf_width:(CGFloat)zf_width { - CGRect newFrame = self.frame; - newFrame.size.width = zf_width; - self.frame = newFrame; -} - -- (CGFloat)zf_height { - return CGRectGetHeight(self.bounds); -} - -- (void)setZf_height:(CGFloat)zf_height { - CGRect newFrame = self.frame; - newFrame.size.height = zf_height; - self.frame = newFrame; -} - -- (CGFloat)zf_top { - return self.frame.origin.y; -} - -- (void)setZf_top:(CGFloat)zf_top { - CGRect newFrame = self.frame; - newFrame.origin.y = zf_top; - self.frame = newFrame; -} - -- (CGFloat)zf_bottom { - return self.frame.origin.y + self.frame.size.height; -} - -- (void)setZf_bottom:(CGFloat)zf_bottom { - CGRect newFrame = self.frame; - newFrame.origin.y = zf_bottom - self.frame.size.height; - self.frame = newFrame; -} - -- (CGFloat)zf_left { - return self.frame.origin.x; -} - -- (void)setZf_left:(CGFloat)zf_left { - CGRect newFrame = self.frame; - newFrame.origin.x = zf_left; - self.frame = newFrame; -} - -- (CGFloat)zf_right { - return self.frame.origin.x + self.frame.size.width; -} - -- (void)setZf_right:(CGFloat)zf_right { - CGRect newFrame = self.frame; - newFrame.origin.x = zf_right - self.frame.size.width; - self.frame = newFrame; -} - -- (CGFloat)zf_centerX { - return self.center.x; -} - -- (void)setZf_centerX:(CGFloat)zf_centerX { - CGPoint newCenter = self.center; - newCenter.x = zf_centerX; - self.center = newCenter; -} - -- (CGFloat)zf_centerY { - return self.center.y; -} - -- (void)setZf_centerY:(CGFloat)zf_centerY { - CGPoint newCenter = self.center; - newCenter.y = zf_centerY; - self.center = newCenter; -} - -- (CGPoint)zf_origin { - return self.frame.origin; -} - -- (void)setZf_origin:(CGPoint)zf_origin { - CGRect newFrame = self.frame; - newFrame.origin = zf_origin; - self.frame = newFrame; -} - -- (CGSize)zf_size { - return self.frame.size; -} - -- (void)setZf_size:(CGSize)zf_size { - CGRect newFrame = self.frame; - newFrame.size = zf_size; - self.frame = newFrame; -} - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFLandScapeControlView.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFLandScapeControlView.h deleted file mode 100755 index fde7d53..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFLandScapeControlView.h +++ /dev/null @@ -1,120 +0,0 @@ -// -// ZFLandScapeControlView.h -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 -#import "ZFSliderView.h" -#if __has_include() -#import -#else -#import "ZFPlayerController.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - -@interface ZFLandScapeControlView : UIView - -/// 顶部工具栏 -@property (nonatomic, strong, readonly) UIView *topToolView; - -/// 返回按钮 -@property (nonatomic, strong, readonly) UIButton *backBtn; - -/// 标题 -@property (nonatomic, strong, readonly) UILabel *titleLabel; - -/// 底部工具栏 -@property (nonatomic, strong, readonly) UIView *bottomToolView; - -/// 播放或暂停按钮 -@property (nonatomic, strong, readonly) UIButton *playOrPauseBtn; - -/// 播放的当前时间 -@property (nonatomic, strong, readonly) UILabel *currentTimeLabel; - -/// 滑杆 -@property (nonatomic, strong, readonly) ZFSliderView *slider; - -/// 视频总时间 -@property (nonatomic, strong, readonly) UILabel *totalTimeLabel; - -/// 锁定屏幕按钮 -@property (nonatomic, strong, readonly) UIButton *lockBtn; - -/// 播放器 -@property (nonatomic, weak) ZFPlayerController *player; - -/// slider滑动中 -@property (nonatomic, copy, nullable) void(^sliderValueChanging)(CGFloat value,BOOL forward); - -/// slider滑动结束 -@property (nonatomic, copy, nullable) void(^sliderValueChanged)(CGFloat value); - -/// 返回按钮点击回调 -@property (nonatomic, copy) void(^backBtnClickCallback)(void); - -/// 如果是暂停状态,seek完是否播放,默认YES -@property (nonatomic, assign) BOOL seekToPlay; - -/// 全屏模式 -@property (nonatomic, assign) ZFFullScreenMode fullScreenMode; - -/// 重置控制层 -- (void)resetControlView; - -/// 显示控制层 -- (void)showControlView; - -/// 隐藏控制层 -- (void)hideControlView; - -/// 设置播放时间 -- (void)videoPlayer:(ZFPlayerController *)videoPlayer currentTime:(NSTimeInterval)currentTime totalTime:(NSTimeInterval)totalTime; - -/// 设置缓冲时间 -- (void)videoPlayer:(ZFPlayerController *)videoPlayer bufferTime:(NSTimeInterval)bufferTime; - -/// 是否响应该手势 -- (BOOL)shouldResponseGestureWithPoint:(CGPoint)point withGestureType:(ZFPlayerGestureType)type touch:(nonnull UITouch *)touch; - -/// 视频尺寸改变 -- (void)videoPlayer:(ZFPlayerController *)videoPlayer presentationSizeChanged:(CGSize)size; - -/// 标题和全屏模式 -- (void)showTitle:(NSString *_Nullable)title fullScreenMode:(ZFFullScreenMode)fullScreenMode; - -/// 根据当前播放状态取反 -- (void)playOrPause; - -/// 播放按钮状态 -- (void)playBtnSelectedState:(BOOL)selected; - -/// 调节播放进度slider和当前时间更新 -- (void)sliderValueChanged:(CGFloat)value currentTimeString:(NSString *)timeString; - -/// 滑杆结束滑动 -- (void)sliderChangeEnded; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFLandScapeControlView.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFLandScapeControlView.m deleted file mode 100755 index 6a8c1e4..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFLandScapeControlView.m +++ /dev/null @@ -1,462 +0,0 @@ -// -// ZFLandScapeControlView.m -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "ZFLandScapeControlView.h" -#import "UIView+ZFFrame.h" -#import "ZFUtilities.h" -#if __has_include() -#import -#else -#import "ZFPlayerConst.h" -#endif - -@interface ZFLandScapeControlView () -/// 顶部工具栏 -@property (nonatomic, strong) UIView *topToolView; -/// 返回按钮 -@property (nonatomic, strong) UIButton *backBtn; -/// 标题 -@property (nonatomic, strong) UILabel *titleLabel; -/// 底部工具栏 -@property (nonatomic, strong) UIView *bottomToolView; -/// 播放或暂停按钮 -@property (nonatomic, strong) UIButton *playOrPauseBtn; -/// 播放的当前时间 -@property (nonatomic, strong) UILabel *currentTimeLabel; -/// 滑杆 -@property (nonatomic, strong) ZFSliderView *slider; -/// 视频总时间 -@property (nonatomic, strong) UILabel *totalTimeLabel; -/// 锁定屏幕按钮 -@property (nonatomic, strong) UIButton *lockBtn; - -@property (nonatomic, assign) BOOL isShow; - -@end - -@implementation ZFLandScapeControlView - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidChangeStatusBarFrameNotification object:nil]; -} - -- (instancetype)initWithFrame:(CGRect)frame { - if (self = [super initWithFrame:frame]) { - [self addSubview:self.topToolView]; - [self.topToolView addSubview:self.backBtn]; - [self.topToolView addSubview:self.titleLabel]; - [self addSubview:self.bottomToolView]; - [self.bottomToolView addSubview:self.playOrPauseBtn]; - [self.bottomToolView addSubview:self.currentTimeLabel]; - - [self.bottomToolView addSubview:self.slider]; - [self.bottomToolView addSubview:self.totalTimeLabel]; - [self addSubview:self.lockBtn]; - - // 设置子控件的响应事件 - [self makeSubViewsAction]; - [self resetControlView]; - - /// statusBarFrame changed - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(layoutControllerViews) name:UIApplicationDidChangeStatusBarFrameNotification object:nil]; - } - return self; -} - -- (void)layoutSubviews { - [super layoutSubviews]; - CGFloat min_x = 0; - CGFloat min_y = 0; - CGFloat min_w = 0; - CGFloat min_h = 0; - CGFloat min_view_w = self.bounds.size.width; - CGFloat min_view_h = self.bounds.size.height; - - CGFloat min_margin = 9; - - min_x = 0; - min_y = 0; - min_w = min_view_w; - min_h = iPhoneX ? 110 : 80; - self.topToolView.frame = CGRectMake(min_x, min_y, min_w, min_h); - - min_x = (iPhoneX && UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) ? 44: 15; - if (@available(iOS 13.0, *)) { - min_y = UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation) ? 10 : (iPhoneX ? 40 : 20); - } else { - min_y = (iPhoneX && UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) ? 10: (iPhoneX ? 40 : 20); - } - min_w = 40; - min_h = 40; - self.backBtn.frame = CGRectMake(min_x, min_y, min_w, min_h); - - min_x = self.backBtn.zf_right + 5; - min_y = 0; - min_w = min_view_w - min_x - 15 ; - min_h = 30; - self.titleLabel.frame = CGRectMake(min_x, min_y, min_w, min_h); - self.titleLabel.zf_centerY = self.backBtn.zf_centerY; - - min_h = iPhoneX ? 100 : 73; - min_x = 0; - min_y = min_view_h - min_h; - min_w = min_view_w; - self.bottomToolView.frame = CGRectMake(min_x, min_y, min_w, min_h); - - min_x = (iPhoneX && UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) ? 44: 15; - min_y = 32; - min_w = 30; - min_h = 30; - self.playOrPauseBtn.frame = CGRectMake(min_x, min_y, min_w, min_h); - - min_x = self.playOrPauseBtn.zf_right + 4; - min_y = 0; - min_w = 62; - min_h = 30; - self.currentTimeLabel.frame = CGRectMake(min_x, min_y, min_w, min_h); - self.currentTimeLabel.zf_centerY = self.playOrPauseBtn.zf_centerY; - - min_w = 62; - min_x = self.bottomToolView.zf_width - min_w - ((iPhoneX && UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) ? 44: min_margin); - min_y = 0; - min_h = 30; - self.totalTimeLabel.frame = CGRectMake(min_x, min_y, min_w, min_h); - self.totalTimeLabel.zf_centerY = self.playOrPauseBtn.zf_centerY; - - min_x = self.currentTimeLabel.zf_right + 4; - min_y = 0; - min_w = self.totalTimeLabel.zf_left - min_x - 4; - min_h = 30; - self.slider.frame = CGRectMake(min_x, min_y, min_w, min_h); - self.slider.zf_centerY = self.playOrPauseBtn.zf_centerY; - - min_x = (iPhoneX && UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) ? 50: 18; - min_y = 0; - min_w = 40; - min_h = 40; - self.lockBtn.frame = CGRectMake(min_x, min_y, min_w, min_h); - self.lockBtn.zf_centerY = self.zf_centerY; - - if (!self.isShow) { - self.topToolView.zf_y = -self.topToolView.zf_height; - self.bottomToolView.zf_y = self.zf_height; - self.lockBtn.zf_left = iPhoneX ? -82: -47; - } else { - self.lockBtn.zf_left = iPhoneX ? 50: 18; - if (self.player.isLockedScreen) { - self.topToolView.zf_y = -self.topToolView.zf_height; - self.bottomToolView.zf_y = self.zf_height; - } else { - self.topToolView.zf_y = 0; - self.bottomToolView.zf_y = self.zf_height - self.bottomToolView.zf_height; - } - } -} - -- (void)makeSubViewsAction { - [self.backBtn addTarget:self action:@selector(backBtnClickAction:) forControlEvents:UIControlEventTouchUpInside]; - [self.playOrPauseBtn addTarget:self action:@selector(playPauseButtonClickAction:) forControlEvents:UIControlEventTouchUpInside]; - [self.lockBtn addTarget:self action:@selector(lockButtonClickAction:) forControlEvents:UIControlEventTouchUpInside]; -} - -#pragma mark - action - -- (void)layoutControllerViews { - [self layoutIfNeeded]; - [self setNeedsLayout]; -} - -- (void)backBtnClickAction:(UIButton *)sender { - self.lockBtn.selected = NO; - self.player.lockedScreen = NO; - self.lockBtn.selected = NO; - if (self.player.orientationObserver.supportInterfaceOrientation & ZFInterfaceOrientationMaskPortrait) { - [self.player enterFullScreen:NO animated:YES]; - } - if (self.backBtnClickCallback) { - self.backBtnClickCallback(); - } -} - -- (void)playPauseButtonClickAction:(UIButton *)sender { - [self playOrPause]; -} - -/// 根据当前播放状态取反 -- (void)playOrPause { - self.playOrPauseBtn.selected = !self.playOrPauseBtn.isSelected; - self.playOrPauseBtn.isSelected? [self.player.currentPlayerManager play]: [self.player.currentPlayerManager pause]; -} - -- (void)playBtnSelectedState:(BOOL)selected { - self.playOrPauseBtn.selected = selected; -} - -- (void)lockButtonClickAction:(UIButton *)sender { - sender.selected = !sender.selected; - self.player.lockedScreen = sender.selected; -} - -#pragma mark - ZFSliderViewDelegate - -- (void)sliderTouchBegan:(float)value { - self.slider.isdragging = YES; -} - -- (void)sliderTouchEnded:(float)value { - if (self.player.totalTime > 0) { - self.slider.isdragging = YES; - if (self.sliderValueChanging) self.sliderValueChanging(value, self.slider.isForward); - @zf_weakify(self) - [self.player seekToTime:self.player.totalTime*value completionHandler:^(BOOL finished) { - @zf_strongify(self) - if (finished) { - self.slider.isdragging = NO; - if (self.sliderValueChanged) self.sliderValueChanged(value); - if (self.seekToPlay) { - [self.player.currentPlayerManager play]; - } - } - }]; - } else { - self.slider.isdragging = NO; - self.slider.value = 0; - } -} - -- (void)sliderValueChanged:(float)value { - if (self.player.totalTime == 0) { - self.slider.value = 0; - return; - } - self.slider.isdragging = YES; - NSString *currentTimeString = [ZFUtilities convertTimeSecond:self.player.totalTime*value]; - self.currentTimeLabel.text = currentTimeString; - if (self.sliderValueChanging) self.sliderValueChanging(value,self.slider.isForward); -} - -- (void)sliderTapped:(float)value { - [self sliderTouchEnded:value]; - NSString *currentTimeString = [ZFUtilities convertTimeSecond:self.player.totalTime*value]; - self.currentTimeLabel.text = currentTimeString; -} - -#pragma mark - public method - -/// 重置ControlView -- (void)resetControlView { - self.slider.value = 0; - self.slider.bufferValue = 0; - self.currentTimeLabel.text = @"00:00"; - self.totalTimeLabel.text = @"00:00"; - self.backgroundColor = [UIColor clearColor]; - self.playOrPauseBtn.selected = YES; - self.titleLabel.text = @""; - self.topToolView.alpha = 1; - self.bottomToolView.alpha = 1; - self.isShow = NO; -} - -- (void)showControlView { - self.lockBtn.alpha = 1; - self.isShow = YES; - if (self.player.isLockedScreen) { - self.topToolView.zf_y = -self.topToolView.zf_height; - self.bottomToolView.zf_y = self.zf_height; - } else { - self.topToolView.zf_y = 0; - self.bottomToolView.zf_y = self.zf_height - self.bottomToolView.zf_height; - } - self.lockBtn.zf_left = iPhoneX ? 50: 18; - self.player.statusBarHidden = NO; - if (self.player.isLockedScreen) { - self.topToolView.alpha = 0; - self.bottomToolView.alpha = 0; - } else { - self.topToolView.alpha = 1; - self.bottomToolView.alpha = 1; - } -} - -- (void)hideControlView { - self.isShow = NO; - self.topToolView.zf_y = -self.topToolView.zf_height; - self.bottomToolView.zf_y = self.zf_height; - self.lockBtn.zf_left = iPhoneX ? -82: -47; - self.player.statusBarHidden = YES; - self.topToolView.alpha = 0; - self.bottomToolView.alpha = 0; - self.lockBtn.alpha = 0; -} - -- (BOOL)shouldResponseGestureWithPoint:(CGPoint)point withGestureType:(ZFPlayerGestureType)type touch:(nonnull UITouch *)touch { - CGRect sliderRect = [self.bottomToolView convertRect:self.slider.frame toView:self]; - if (CGRectContainsPoint(sliderRect, point)) { - return NO; - } - if (self.player.isLockedScreen && type != ZFPlayerGestureTypeSingleTap) { // 锁定屏幕方向后只相应tap手势 - return NO; - } - return YES; -} - -- (void)videoPlayer:(ZFPlayerController *)videoPlayer presentationSizeChanged:(CGSize)size { - self.lockBtn.hidden = self.player.orientationObserver.fullScreenMode == ZFFullScreenModePortrait; -} - -- (void)videoPlayer:(ZFPlayerController *)videoPlayer currentTime:(NSTimeInterval)currentTime totalTime:(NSTimeInterval)totalTime { - if (!self.slider.isdragging) { - NSString *currentTimeString = [ZFUtilities convertTimeSecond:currentTime]; - self.currentTimeLabel.text = currentTimeString; - NSString *totalTimeString = [ZFUtilities convertTimeSecond:totalTime]; - self.totalTimeLabel.text = totalTimeString; - self.slider.value = videoPlayer.progress; - } -} - -- (void)videoPlayer:(ZFPlayerController *)videoPlayer bufferTime:(NSTimeInterval)bufferTime { - self.slider.bufferValue = videoPlayer.bufferProgress; -} - -- (void)showTitle:(NSString *)title fullScreenMode:(ZFFullScreenMode)fullScreenMode { - self.titleLabel.text = title; - self.player.orientationObserver.fullScreenMode = fullScreenMode; - self.lockBtn.hidden = fullScreenMode == ZFFullScreenModePortrait; -} - -/// 调节播放进度slider和当前时间更新 -- (void)sliderValueChanged:(CGFloat)value currentTimeString:(NSString *)timeString { - self.slider.value = value; - self.currentTimeLabel.text = timeString; - self.slider.isdragging = YES; - [UIView animateWithDuration:0.3 animations:^{ - self.slider.sliderBtn.transform = CGAffineTransformMakeScale(1.2, 1.2); - }]; -} - -/// 滑杆结束滑动 -- (void)sliderChangeEnded { - self.slider.isdragging = NO; - [UIView animateWithDuration:0.3 animations:^{ - self.slider.sliderBtn.transform = CGAffineTransformIdentity; - }]; -} - -#pragma mark - setter - -- (void)setFullScreenMode:(ZFFullScreenMode)fullScreenMode { - _fullScreenMode = fullScreenMode; - self.player.orientationObserver.fullScreenMode = fullScreenMode; - self.lockBtn.hidden = fullScreenMode == ZFFullScreenModePortrait; -} - -#pragma mark - getter - -- (UIView *)topToolView { - if (!_topToolView) { - _topToolView = [[UIView alloc] init]; - UIImage *image = ZFPlayer_Image(@"ZFPlayer_top_shadow"); - _topToolView.layer.contents = (id)image.CGImage; - } - return _topToolView; -} - -- (UIButton *)backBtn { - if (!_backBtn) { - _backBtn = [UIButton buttonWithType:UIButtonTypeCustom]; - [_backBtn setImage:ZFPlayer_Image(@"ZFPlayer_back_full") forState:UIControlStateNormal]; - } - return _backBtn; -} - -- (UILabel *)titleLabel { - if (!_titleLabel) { - _titleLabel = [[UILabel alloc] init]; - _titleLabel.textColor = [UIColor whiteColor]; - _titleLabel.font = [UIFont systemFontOfSize:15.0]; - } - return _titleLabel; -} - -- (UIView *)bottomToolView { - if (!_bottomToolView) { - _bottomToolView = [[UIView alloc] init]; - UIImage *image = ZFPlayer_Image(@"ZFPlayer_bottom_shadow"); - _bottomToolView.layer.contents = (id)image.CGImage; - } - return _bottomToolView; -} - -- (UIButton *)playOrPauseBtn { - if (!_playOrPauseBtn) { - _playOrPauseBtn = [UIButton buttonWithType:UIButtonTypeCustom]; - [_playOrPauseBtn setImage:ZFPlayer_Image(@"ZFPlayer_play") forState:UIControlStateNormal]; - [_playOrPauseBtn setImage:ZFPlayer_Image(@"ZFPlayer_pause") forState:UIControlStateSelected]; - } - return _playOrPauseBtn; -} - -- (UILabel *)currentTimeLabel { - if (!_currentTimeLabel) { - _currentTimeLabel = [[UILabel alloc] init]; - _currentTimeLabel.textColor = [UIColor whiteColor]; - _currentTimeLabel.font = [UIFont systemFontOfSize:14.0f]; - _currentTimeLabel.textAlignment = NSTextAlignmentCenter; - } - return _currentTimeLabel; -} - -- (ZFSliderView *)slider { - if (!_slider) { - _slider = [[ZFSliderView alloc] init]; - _slider.delegate = self; - _slider.maximumTrackTintColor = [UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:0.8]; - _slider.bufferTrackTintColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:0.5]; - _slider.minimumTrackTintColor = [UIColor whiteColor]; - [_slider setThumbImage:ZFPlayer_Image(@"ZFPlayer_slider") forState:UIControlStateNormal]; - _slider.sliderHeight = 2; - } - return _slider; -} - -- (UILabel *)totalTimeLabel { - if (!_totalTimeLabel) { - _totalTimeLabel = [[UILabel alloc] init]; - _totalTimeLabel.textColor = [UIColor whiteColor]; - _totalTimeLabel.font = [UIFont systemFontOfSize:14.0f]; - _totalTimeLabel.textAlignment = NSTextAlignmentCenter; - } - return _totalTimeLabel; -} - -- (UIButton *)lockBtn { - if (!_lockBtn) { - _lockBtn = [UIButton buttonWithType:UIButtonTypeCustom]; - [_lockBtn setImage:ZFPlayer_Image(@"ZFPlayer_unlock-nor") forState:UIControlStateNormal]; - [_lockBtn setImage:ZFPlayer_Image(@"ZFPlayer_lock-nor") forState:UIControlStateSelected]; - } - return _lockBtn; -} - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFLoadingView.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFLoadingView.h deleted file mode 100755 index e27bff9..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFLoadingView.h +++ /dev/null @@ -1,66 +0,0 @@ -// -// ZFLoadingView.h -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 - -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(NSUInteger, ZFLoadingType) { - ZFLoadingTypeKeep, - ZFLoadingTypeFadeOut, -}; - -@interface ZFLoadingView : UIView - -/// default is ZFLoadingTypeKeep. -@property (nonatomic, assign) ZFLoadingType animType; - -/// default is whiteColor. -@property (nonatomic, strong, null_resettable) UIColor *lineColor; - -/// Sets the line width of the spinner's circle. -@property (nonatomic) CGFloat lineWidth; - -/// Sets whether the view is hidden when not animating. -@property (nonatomic) BOOL hidesWhenStopped; - -/// Property indicating the duration of the animation, default is 1.5s. -@property (nonatomic, readwrite) NSTimeInterval duration; - -/// anima state -@property (nonatomic, assign, readonly, getter=isAnimating) BOOL animating; - -/** - * Starts animation of the spinner. - */ -- (void)startAnimating; - -/** - * Stops animation of the spinnner. - */ -- (void)stopAnimating; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFLoadingView.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFLoadingView.m deleted file mode 100755 index c5d6e01..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFLoadingView.m +++ /dev/null @@ -1,183 +0,0 @@ -// -// ZFLoadingView.m -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "ZFLoadingView.h" - -@interface ZFLoadingView () - -@property (nonatomic, strong, readonly) CAShapeLayer *shapeLayer; -@property (nonatomic, assign, getter=isAnimating) BOOL animating; -@property (nonatomic, assign) BOOL strokeShow; - -@end - -@implementation ZFLoadingView - -@synthesize lineColor = _lineColor; -@synthesize shapeLayer = _shapeLayer; - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self initialize]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - if (self = [super initWithCoder:aDecoder]) { - [self initialize]; - } - return self; -} - -- (void)awakeFromNib { - [super awakeFromNib]; - [self initialize]; -} - -- (void)initialize { - [self.layer addSublayer:self.shapeLayer]; - self.duration = 1; - self.lineWidth = 1; - self.lineColor = [UIColor whiteColor]; - self.userInteractionEnabled = NO; -} - -- (void)layoutSubviews { - [super layoutSubviews]; - CGFloat width = MIN(self.bounds.size.width, self.bounds.size.height); - CGFloat height = width; - self.shapeLayer.frame = CGRectMake(0, 0, width, height); - - CGPoint center = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds)); - CGFloat radius = MIN(CGRectGetWidth(self.bounds) / 2, CGRectGetHeight(self.bounds) / 2) - self.shapeLayer.lineWidth / 2; - CGFloat startAngle = (CGFloat)(0); - CGFloat endAngle = (CGFloat)(2*M_PI); - UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES]; - self.shapeLayer.path = path.CGPath; -} - -- (void)startAnimating { - if (self.animating) return; - self.animating = YES; - if (self.animType == ZFLoadingTypeFadeOut) [self fadeOutShow]; - CABasicAnimation *rotationAnim = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; - rotationAnim.toValue = [NSNumber numberWithFloat:2 * M_PI]; - rotationAnim.duration = self.duration; - rotationAnim.repeatCount = CGFLOAT_MAX; - rotationAnim.removedOnCompletion = NO; - [self.shapeLayer addAnimation:rotationAnim forKey:@"rotation"]; - if (self.hidesWhenStopped) { - self.hidden = NO; - } -} - -- (void)stopAnimating { - if (!self.animating) return; - self.animating = NO; - [self.shapeLayer removeAllAnimations]; - if (self.hidesWhenStopped) { - self.hidden = YES; - } -} - -- (void)fadeOutShow { - CABasicAnimation *headAnimation = [CABasicAnimation animation]; - headAnimation.keyPath = @"strokeStart"; - headAnimation.duration = self.duration / 1.5f; - headAnimation.fromValue = @(0.f); - headAnimation.toValue = @(0.25f); - - CABasicAnimation *tailAnimation = [CABasicAnimation animation]; - tailAnimation.keyPath = @"strokeEnd"; - tailAnimation.duration = self.duration / 1.5f; - tailAnimation.fromValue = @(0.f); - tailAnimation.toValue = @(1.f); - - CABasicAnimation *endHeadAnimation = [CABasicAnimation animation]; - endHeadAnimation.keyPath = @"strokeStart"; - endHeadAnimation.beginTime = self.duration / 1.5f; - endHeadAnimation.duration = self.duration / 3.0f; - endHeadAnimation.fromValue = @(0.25f); - endHeadAnimation.toValue = @(1.f); - - CABasicAnimation *endTailAnimation = [CABasicAnimation animation]; - endTailAnimation.keyPath = @"strokeEnd"; - endTailAnimation.beginTime = self.duration / 1.5f; - endTailAnimation.duration = self.duration / 3.0f; - endTailAnimation.fromValue = @(1.f); - endTailAnimation.toValue = @(1.f); - - CAAnimationGroup *animations = [CAAnimationGroup animation]; - [animations setDuration:self.duration]; - [animations setAnimations:@[headAnimation, tailAnimation, endHeadAnimation, endTailAnimation]]; - animations.repeatCount = INFINITY; - animations.removedOnCompletion = NO; - [self.shapeLayer addAnimation:animations forKey:@"strokeAnim"]; - - if (self.hidesWhenStopped) { - self.hidden = NO; - } -} - -#pragma mark - setter and getter - -- (CAShapeLayer *)shapeLayer { - if (!_shapeLayer) { - _shapeLayer = [CAShapeLayer layer]; - _shapeLayer.strokeColor = self.lineColor.CGColor; - _shapeLayer.fillColor = [UIColor clearColor].CGColor; - _shapeLayer.strokeStart = 0.1; - _shapeLayer.strokeEnd = 1; - _shapeLayer.lineCap = @"round"; - _shapeLayer.anchorPoint = CGPointMake(0.5, 0.5); - } - return _shapeLayer; -} - -- (UIColor *)lineColor { - if (!_lineColor) { - return [UIColor whiteColor]; - } - return _lineColor; -} - -- (void)setLineWidth:(CGFloat)lineWidth { - _lineWidth = lineWidth; - self.shapeLayer.lineWidth = lineWidth; -} - -- (void)setLineColor:(UIColor *)lineColor { - if (!lineColor) return; - _lineColor = lineColor; - self.shapeLayer.strokeColor = lineColor.CGColor; -} - -- (void)setHidesWhenStopped:(BOOL)hidesWhenStopped { - _hidesWhenStopped = hidesWhenStopped; - self.hidden = !self.isAnimating && hidesWhenStopped; -} - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFNetworkSpeedMonitor.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFNetworkSpeedMonitor.h deleted file mode 100644 index 8b95283..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFNetworkSpeedMonitor.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// ZFNetworkSpeedMonitor.h -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 - -extern NSString *const ZFDownloadNetworkSpeedNotificationKey; -extern NSString *const ZFUploadNetworkSpeedNotificationKey; -extern NSString *const ZFNetworkSpeedNotificationKey; - -@interface ZFNetworkSpeedMonitor : NSObject - -@property (nonatomic, copy, readonly) NSString *downloadNetworkSpeed; -@property (nonatomic, copy, readonly) NSString *uploadNetworkSpeed; - -- (void)startNetworkSpeedMonitor; -- (void)stopNetworkSpeedMonitor; - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFNetworkSpeedMonitor.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFNetworkSpeedMonitor.m deleted file mode 100644 index 2eceaea..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFNetworkSpeedMonitor.m +++ /dev/null @@ -1,167 +0,0 @@ -// -// ZFNetworkSpeedMonitor.m -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "ZFNetworkSpeedMonitor.h" -#if __has_include() -#import -#else -#import "ZFPlayerLogManager.h" -#endif -#include -#include -#include -#include - -NSString *const ZFDownloadNetworkSpeedNotificationKey = @"ZFDownloadNetworkSpeedNotificationKey"; -NSString *const ZFUploadNetworkSpeedNotificationKey = @"ZFUploadNetworkSpeedNotificationKey"; -NSString *const ZFNetworkSpeedNotificationKey = @"ZFNetworkSpeedNotificationKey"; - -@interface ZFNetworkSpeedMonitor () { - // 总网速 - uint32_t _iBytes; - uint32_t _oBytes; - uint32_t _allFlow; - - // wifi网速 - uint32_t _wifiIBytes; - uint32_t _wifiOBytes; - uint32_t _wifiFlow; - - // 3G网速 - uint32_t _wwanIBytes; - uint32_t _wwanOBytes; - uint32_t _wwanFlow; -} - -@property (nonatomic, strong) NSTimer *timer; - -@end - -@implementation ZFNetworkSpeedMonitor - -- (instancetype)init { - if (self = [super init]) { - _iBytes = _oBytes = _allFlow = _wifiIBytes = _wifiOBytes = _wifiFlow = _wwanIBytes = _wwanOBytes = _wwanFlow = 0; - } - return self; -} - -// 开始监听网速 -- (void)startNetworkSpeedMonitor { - if (!_timer) { - _timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(checkNetworkSpeed) userInfo:nil repeats:YES]; - [[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes]; - [_timer fire]; - } -} - -// 停止监听网速 -- (void)stopNetworkSpeedMonitor { - if ([_timer isValid]) { - [_timer invalidate]; - _timer = nil; - } -} - -- (NSString *)stringWithbytes:(int)bytes { - if (bytes < 1024) { // B - return [NSString stringWithFormat:@"%dB", bytes]; - } else if (bytes >= 1024 && bytes < 1024 * 1024) { // KB - return [NSString stringWithFormat:@"%.0fKB", (double)bytes / 1024]; - } else if (bytes >= 1024 * 1024 && bytes < 1024 * 1024 * 1024) { // MB - return [NSString stringWithFormat:@"%.1fMB", (double)bytes / (1024 * 1024)]; - } else { // GB - return [NSString stringWithFormat:@"%.1fGB", (double)bytes / (1024 * 1024 * 1024)]; - } -} - -- (void)checkNetworkSpeed { - struct ifaddrs *ifa_list = 0, *ifa; - if (getifaddrs(&ifa_list) == -1) return; - - uint32_t iBytes = 0; - uint32_t oBytes = 0; - uint32_t allFlow = 0; - uint32_t wifiIBytes = 0; - uint32_t wifiOBytes = 0; - uint32_t wifiFlow = 0; - uint32_t wwanIBytes = 0; - uint32_t wwanOBytes = 0; - uint32_t wwanFlow = 0; - - for (ifa = ifa_list; ifa; ifa = ifa->ifa_next) { - if (AF_LINK != ifa->ifa_addr->sa_family) continue; - if (!(ifa->ifa_flags & IFF_UP) && !(ifa->ifa_flags & IFF_RUNNING)) continue; - if (ifa->ifa_data == 0) continue; - - // network - if (strncmp(ifa->ifa_name, "lo", 2)) { - struct if_data* if_data = (struct if_data*)ifa->ifa_data; - iBytes += if_data->ifi_ibytes; - oBytes += if_data->ifi_obytes; - allFlow = iBytes + oBytes; - } - - //wifi - if (!strcmp(ifa->ifa_name, "en0")) { - struct if_data* if_data = (struct if_data*)ifa->ifa_data; - wifiIBytes += if_data->ifi_ibytes; - wifiOBytes += if_data->ifi_obytes; - wifiFlow = wifiIBytes + wifiOBytes; - } - - //3G or gprs - if (!strcmp(ifa->ifa_name, "pdp_ip0")) { - struct if_data* if_data = (struct if_data*)ifa->ifa_data; - wwanIBytes += if_data->ifi_ibytes; - wwanOBytes += if_data->ifi_obytes; - wwanFlow = wwanIBytes + wwanOBytes; - } - } - - freeifaddrs(ifa_list); - if (_iBytes != 0) { - _downloadNetworkSpeed = [[self stringWithbytes:iBytes - _iBytes] stringByAppendingString:@"/s"]; - NSMutableDictionary *userInfo = @{}.mutableCopy; - userInfo[ZFNetworkSpeedNotificationKey] = _downloadNetworkSpeed; - - [[NSNotificationCenter defaultCenter] postNotificationName:ZFDownloadNetworkSpeedNotificationKey object:nil userInfo:userInfo]; - ZFPlayerLog(@"downloadNetworkSpeed : %@",_downloadNetworkSpeed); - } - - _iBytes = iBytes; - - if (_oBytes != 0) { - _uploadNetworkSpeed = [[self stringWithbytes:oBytes - _oBytes] stringByAppendingString:@"/s"]; - NSMutableDictionary *userInfo = @{}.mutableCopy; - userInfo[ZFNetworkSpeedNotificationKey] = _uploadNetworkSpeed; - - [[NSNotificationCenter defaultCenter] postNotificationName:ZFUploadNetworkSpeedNotificationKey object:nil userInfo:userInfo]; - ZFPlayerLog(@"uploadNetworkSpeed :%@",_uploadNetworkSpeed); - } - - _oBytes = oBytes; -} - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_back_full@2x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_back_full@2x.png deleted file mode 100644 index b6ae8af..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_back_full@2x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_back_full@3x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_back_full@3x.png deleted file mode 100644 index e0a0d1a..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_back_full@3x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_bottom_shadow.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_bottom_shadow.png deleted file mode 100644 index e67cb36..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_bottom_shadow.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_brightness_high@2x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_brightness_high@2x.png deleted file mode 100644 index a392342..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_brightness_high@2x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_brightness_high@3x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_brightness_high@3x.png deleted file mode 100644 index 346d984..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_brightness_high@3x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_brightness_low@2x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_brightness_low@2x.png deleted file mode 100644 index d3bbb7a..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_brightness_low@2x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_brightness_low@3x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_brightness_low@3x.png deleted file mode 100644 index ad58691..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_brightness_low@3x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_close@2x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_close@2x.png deleted file mode 100644 index 80ab29f..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_close@2x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_close@3x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_close@3x.png deleted file mode 100644 index 95c6484..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_close@3x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_closeWatch@2x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_closeWatch@2x.png deleted file mode 100644 index fbec875..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_closeWatch@2x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_closeWatch@3x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_closeWatch@3x.png deleted file mode 100644 index c8e8453..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_closeWatch@3x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_fast_backward@2x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_fast_backward@2x.png deleted file mode 100644 index a2f7d33..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_fast_backward@2x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_fast_backward@3x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_fast_backward@3x.png deleted file mode 100644 index 1f4e89b..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_fast_backward@3x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_fast_forward@2x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_fast_forward@2x.png deleted file mode 100644 index d6d5dd5..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_fast_forward@2x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_fast_forward@3x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_fast_forward@3x.png deleted file mode 100644 index 0f313be..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_fast_forward@3x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_fullscreen@2x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_fullscreen@2x.png deleted file mode 100644 index 769afae..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_fullscreen@2x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_fullscreen@3x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_fullscreen@3x.png deleted file mode 100644 index c68b2ce..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_fullscreen@3x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_lock-nor@2x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_lock-nor@2x.png deleted file mode 100644 index 91304b9..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_lock-nor@2x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_lock-nor@3x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_lock-nor@3x.png deleted file mode 100644 index 0d51698..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_lock-nor@3x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_muted@2x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_muted@2x.png deleted file mode 100644 index 2be5f30..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_muted@2x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_muted@3x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_muted@3x.png deleted file mode 100644 index 40427e4..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_muted@3x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_next@2x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_next@2x.png deleted file mode 100644 index 0237ac7..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_next@2x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_next@3x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_next@3x.png deleted file mode 100644 index 108681c..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_next@3x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_pause@2x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_pause@2x.png deleted file mode 100644 index b82c098..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_pause@2x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_pause@3x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_pause@3x.png deleted file mode 100644 index 3e47c07..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_pause@3x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_play@2x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_play@2x.png deleted file mode 100644 index 3ca0ae4..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_play@2x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_play@3x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_play@3x.png deleted file mode 100644 index ee7df9e..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_play@3x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_shrinkscreen@2x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_shrinkscreen@2x.png deleted file mode 100644 index 45274a4..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_shrinkscreen@2x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_shrinkscreen@3x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_shrinkscreen@3x.png deleted file mode 100644 index e83f58c..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_shrinkscreen@3x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_slider.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_slider.png deleted file mode 100644 index f3aa3ab..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_slider.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_slider@2x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_slider@2x.png deleted file mode 100644 index 7c12663..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_slider@2x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_slider@3x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_slider@3x.png deleted file mode 100644 index 6202052..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_slider@3x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_top_shadow.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_top_shadow.png deleted file mode 100644 index 1a3cfd2..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_top_shadow.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_unlock-nor@2x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_unlock-nor@2x.png deleted file mode 100644 index d6a2c98..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_unlock-nor@2x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_unlock-nor@3x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_unlock-nor@3x.png deleted file mode 100644 index 1d1f46c..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_unlock-nor@3x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_volume_high@2x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_volume_high@2x.png deleted file mode 100644 index 8994e51..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_volume_high@2x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_volume_high@3x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_volume_high@3x.png deleted file mode 100644 index 50b2d36..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_volume_high@3x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_volume_low@2x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_volume_low@2x.png deleted file mode 100644 index 336b9a4..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_volume_low@2x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_volume_low@3x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_volume_low@3x.png deleted file mode 100644 index 56cdf92..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/ZFPlayer_volume_low@3x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/new_allPause_44x44_@2x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/new_allPause_44x44_@2x.png deleted file mode 100644 index dd26a7b..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/new_allPause_44x44_@2x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/new_allPause_44x44_@3x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/new_allPause_44x44_@3x.png deleted file mode 100644 index 1a4a4d2..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/new_allPause_44x44_@3x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/new_allPlay_44x44_@2x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/new_allPlay_44x44_@2x.png deleted file mode 100644 index e678ade..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/new_allPlay_44x44_@2x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/new_allPlay_44x44_@3x.png b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/new_allPlay_44x44_@3x.png deleted file mode 100644 index 1ed28ba..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle/new_allPlay_44x44_@3x.png and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayerControlView.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayerControlView.h deleted file mode 100755 index 5b0c553..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayerControlView.h +++ /dev/null @@ -1,151 +0,0 @@ -// -// ZFPlayerControlView.h -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 -#import "ZFPortraitControlView.h" -#import "ZFLandScapeControlView.h" -#import "ZFSpeedLoadingView.h" -#import "ZFSmallFloatControlView.h" -#if __has_include() -#import -#else -#import "ZFPlayerMediaControl.h" -#endif - -@interface ZFPlayerControlView : UIView - -/// 竖屏控制层的View -@property (nonatomic, strong, readonly) ZFPortraitControlView *portraitControlView; - -/// 横屏控制层的View -@property (nonatomic, strong, readonly) ZFLandScapeControlView *landScapeControlView; - -/// 加载loading -@property (nonatomic, strong, readonly) ZFSpeedLoadingView *activity; - -/// 快进快退View -@property (nonatomic, strong, readonly) UIView *fastView; - -/// 快进快退进度progress -@property (nonatomic, strong, readonly) ZFSliderView *fastProgressView; - -/// 快进快退时间 -@property (nonatomic, strong, readonly) UILabel *fastTimeLabel; - -/// 快进快退ImageView -@property (nonatomic, strong, readonly) UIImageView *fastImageView; - -/// 加载失败按钮 -@property (nonatomic, strong, readonly) UIButton *failBtn; - -/// 底部播放进度 -@property (nonatomic, strong, readonly) ZFSliderView *bottomPgrogress; - -/// 封面图 -@property (nonatomic, strong, readonly) UIImageView *coverImageView; - -/// 高斯模糊的背景图 -@property (nonatomic, strong, readonly) UIImageView *bgImgView; - -/// 高斯模糊视图 -@property (nonatomic, strong, readonly) UIView *effectView; - -/// 小窗口控制层 -@property (nonatomic, strong, readonly) ZFSmallFloatControlView *floatControlView; - -/// 快进视图是否显示动画,默认NO. -@property (nonatomic, assign) BOOL fastViewAnimated; - -/// 视频之外区域是否高斯模糊显示,默认YES. -@property (nonatomic, assign) BOOL effectViewShow; - -/// 如果是暂停状态,seek完是否播放,默认YES -@property (nonatomic, assign) BOOL seekToPlay; - -/// 返回按钮点击回调 -@property (nonatomic, copy) void(^backBtnClickCallback)(void); - -/// 控制层显示或者隐藏 -@property (nonatomic, readonly) BOOL controlViewAppeared; - -/// 控制层显示或者隐藏的回调 -@property (nonatomic, copy) void(^controlViewAppearedCallback)(BOOL appeared); - -/// 控制层自动隐藏的时间,默认2.5秒 -@property (nonatomic, assign) NSTimeInterval autoHiddenTimeInterval; - -/// 控制层显示、隐藏动画的时长,默认0.25秒 -@property (nonatomic, assign) NSTimeInterval autoFadeTimeInterval; - -/// 横向滑动控制播放进度时是否显示控制层,默认 YES. -@property (nonatomic, assign) BOOL horizontalPanShowControlView; - -/// prepare时候是否显示控制层,默认 NO. -@property (nonatomic, assign) BOOL prepareShowControlView; - -/// prepare时候是否显示loading,默认 NO. -@property (nonatomic, assign) BOOL prepareShowLoading; - -/// 是否自定义禁止pan手势,默认 NO. -@property (nonatomic, assign) BOOL customDisablePanMovingDirection; - -/// 全屏模式 -@property (nonatomic, assign) ZFFullScreenMode fullScreenMode; - -/** - 设置标题、封面、全屏模式 - - @param title 视频的标题 - @param coverUrl 视频的封面,占位图默认是灰色的 - @param fullScreenMode 全屏模式 - */ -- (void)showTitle:(NSString *)title coverURLString:(NSString *)coverUrl fullScreenMode:(ZFFullScreenMode)fullScreenMode; - -/** - 设置标题、封面、默认占位图、全屏模式 - - @param title 视频的标题 - @param coverUrl 视频的封面 - @param placeholder 指定封面的placeholder - @param fullScreenMode 全屏模式 - */ -- (void)showTitle:(NSString *)title coverURLString:(NSString *)coverUrl placeholderImage:(UIImage *)placeholder fullScreenMode:(ZFFullScreenMode)fullScreenMode; - -/** - 设置标题、UIImage封面、全屏模式 - - @param title 视频的标题 - @param image 视频的封面UIImage - @param fullScreenMode 全屏模式 - */ -- (void)showTitle:(NSString *)title coverImage:(UIImage *)image fullScreenMode:(ZFFullScreenMode)fullScreenMode; - -//- (void)showFullScreen - -/** - 重置控制层 - */ -- (void)resetControlView; - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayerControlView.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayerControlView.m deleted file mode 100755 index 2a50fac..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayerControlView.m +++ /dev/null @@ -1,836 +0,0 @@ -// -// ZFPlayerControlView.m -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "ZFPlayerControlView.h" -#import -#import -#import "UIView+ZFFrame.h" -#import "ZFSliderView.h" -#import "ZFUtilities.h" -#import "UIImageView+ZFCache.h" -#import -#import "ZFVolumeBrightnessView.h" -#if __has_include() -#import -#else -#import "ZFPlayerConst.h" -#endif - - -@interface ZFPlayerControlView () -/// 竖屏控制层的View -@property (nonatomic, strong) ZFPortraitControlView *portraitControlView; -/// 横屏控制层的View -@property (nonatomic, strong) ZFLandScapeControlView *landScapeControlView; -/// 加载loading -@property (nonatomic, strong) ZFSpeedLoadingView *activity; -/// 快进快退View -@property (nonatomic, strong) UIView *fastView; -/// 快进快退进度progress -@property (nonatomic, strong) ZFSliderView *fastProgressView; -/// 快进快退时间 -@property (nonatomic, strong) UILabel *fastTimeLabel; -/// 快进快退ImageView -@property (nonatomic, strong) UIImageView *fastImageView; -/// 加载失败按钮 -@property (nonatomic, strong) UIButton *failBtn; -/// 底部播放进度 -@property (nonatomic, strong) ZFSliderView *bottomPgrogress; -/// 是否显示了控制层 -@property (nonatomic, assign, getter=isShowing) BOOL showing; -/// 是否播放结束 -@property (nonatomic, assign, getter=isPlayEnd) BOOL playeEnd; - -@property (nonatomic, assign) BOOL controlViewAppeared; - -@property (nonatomic, assign) NSTimeInterval sumTime; - -@property (nonatomic, strong) dispatch_block_t afterBlock; - -@property (nonatomic, strong) ZFSmallFloatControlView *floatControlView; - -@property (nonatomic, strong) ZFVolumeBrightnessView *volumeBrightnessView; - -@property (nonatomic, strong) UIImageView *bgImgView; - -@property (nonatomic, strong) UIView *effectView; - -@end - -@implementation ZFPlayerControlView -@synthesize player = _player; - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self addAllSubViews]; - self.landScapeControlView.hidden = YES; - self.floatControlView.hidden = YES; - self.seekToPlay = YES; - self.effectViewShow = YES; - self.horizontalPanShowControlView = YES; - self.autoFadeTimeInterval = 0.25; - self.autoHiddenTimeInterval = 2.5; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(volumeChanged:) - name:@"AVSystemController_SystemVolumeDidChangeNotification" - object:nil]; - } - return self; -} - -- (void)layoutSubviews { - [super layoutSubviews]; - CGFloat min_x = 0; - CGFloat min_y = 0; - CGFloat min_w = 0; - CGFloat min_h = 0; - CGFloat min_view_w = self.zf_width; - CGFloat min_view_h = self.zf_height; - - self.portraitControlView.frame = self.bounds; - self.landScapeControlView.frame = self.bounds; - self.floatControlView.frame = self.bounds; - self.coverImageView.frame = self.bounds; - self.bgImgView.frame = self.bounds; - self.effectView.frame = self.bounds; - - min_w = 80; - min_h = 80; - self.activity.frame = CGRectMake(min_x, min_y, min_w, min_h); - self.activity.zf_centerX = self.zf_centerX; - self.activity.zf_centerY = self.zf_centerY + 10; - - min_w = 150; - min_h = 30; - self.failBtn.frame = CGRectMake(min_x, min_y, min_w, min_h); - self.failBtn.center = self.center; - - min_w = 140; - min_h = 80; - self.fastView.frame = CGRectMake(min_x, min_y, min_w, min_h); - self.fastView.center = self.center; - - min_w = 32; - min_x = (self.fastView.zf_width - min_w) / 2; - min_y = 5; - min_h = 32; - self.fastImageView.frame = CGRectMake(min_x, min_y, min_w, min_h); - - min_x = 0; - min_y = self.fastImageView.zf_bottom + 2; - min_w = self.fastView.zf_width; - min_h = 20; - self.fastTimeLabel.frame = CGRectMake(min_x, min_y, min_w, min_h); - - min_x = 12; - min_y = self.fastTimeLabel.zf_bottom + 5; - min_w = self.fastView.zf_width - 2 * min_x; - min_h = 10; - self.fastProgressView.frame = CGRectMake(min_x, min_y, min_w, min_h); - - min_x = 0; - min_y = min_view_h - 1; - min_w = min_view_w; - min_h = 1; - self.bottomPgrogress.frame = CGRectMake(min_x, min_y, min_w, min_h); - - min_x = 0; - min_y = iPhoneX ? 54 : 30; - min_w = 170; - min_h = 35; - self.volumeBrightnessView.frame = CGRectMake(min_x, min_y, min_w, min_h); - self.volumeBrightnessView.zf_centerX = self.zf_centerX; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self name:@"AVSystemController_SystemVolumeDidChangeNotification" object:nil]; - [self cancelAutoFadeOutControlView]; -} - -/// 添加所有子控件 -- (void)addAllSubViews { - [self addSubview:self.portraitControlView]; - [self addSubview:self.landScapeControlView]; - [self addSubview:self.floatControlView]; - [self addSubview:self.activity]; - [self addSubview:self.failBtn]; - [self addSubview:self.fastView]; - [self.fastView addSubview:self.fastImageView]; - [self.fastView addSubview:self.fastTimeLabel]; - [self.fastView addSubview:self.fastProgressView]; - [self addSubview:self.bottomPgrogress]; - [self addSubview:self.volumeBrightnessView]; -} - -- (void)autoFadeOutControlView { - self.controlViewAppeared = YES; - [self cancelAutoFadeOutControlView]; - @zf_weakify(self) - self.afterBlock = dispatch_block_create(0, ^{ - @zf_strongify(self) - [self hideControlViewWithAnimated:YES]; - }); - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(self.autoHiddenTimeInterval * NSEC_PER_SEC)), dispatch_get_main_queue(),self.afterBlock); -} - -/// 取消延时隐藏controlView的方法 -- (void)cancelAutoFadeOutControlView { - if (self.afterBlock) { - dispatch_block_cancel(self.afterBlock); - self.afterBlock = nil; - } -} - -/// 隐藏控制层 -- (void)hideControlViewWithAnimated:(BOOL)animated { - self.controlViewAppeared = NO; - if (self.controlViewAppearedCallback) { - self.controlViewAppearedCallback(NO); - } - [UIView animateWithDuration:animated ? self.autoFadeTimeInterval : 0 animations:^{ - if (self.player.isFullScreen) { - [self.landScapeControlView hideControlView]; - } else { - if (!self.player.isSmallFloatViewShow) { - [self.portraitControlView hideControlView]; - } - } - } completion:^(BOOL finished) { - self.bottomPgrogress.hidden = NO; - }]; -} - -/// 显示控制层 -- (void)showControlViewWithAnimated:(BOOL)animated { - self.controlViewAppeared = YES; - if (self.controlViewAppearedCallback) { - self.controlViewAppearedCallback(YES); - } - [self autoFadeOutControlView]; - [UIView animateWithDuration:animated ? self.autoFadeTimeInterval : 0 animations:^{ - if (self.player.isFullScreen) { - [self.landScapeControlView showControlView]; - } else { - if (!self.player.isSmallFloatViewShow) { - [self.portraitControlView showControlView]; - } - } - } completion:^(BOOL finished) { - self.bottomPgrogress.hidden = YES; - }]; -} - -/// 音量改变的通知 -- (void)volumeChanged:(NSNotification *)notification { - NSDictionary *userInfo = notification.userInfo; - NSString *reasonstr = userInfo[@"AVSystemController_AudioVolumeChangeReasonNotificationParameter"]; - if ([reasonstr isEqualToString:@"ExplicitVolumeChange"]) { - float volume = [ userInfo[@"AVSystemController_AudioVolumeNotificationParameter"] floatValue]; - if (self.player.isFullScreen) { - [self.volumeBrightnessView updateProgress:volume withVolumeBrightnessType:ZFVolumeBrightnessTypeVolume]; - } else { - [self.volumeBrightnessView addSystemVolumeView]; - } - } -} - -#pragma mark - Public Method - -/// 重置控制层 -- (void)resetControlView { - [self.portraitControlView resetControlView]; - [self.landScapeControlView resetControlView]; - [self cancelAutoFadeOutControlView]; - self.bottomPgrogress.value = 0; - self.bottomPgrogress.bufferValue = 0; - self.floatControlView.hidden = YES; - self.failBtn.hidden = YES; - self.volumeBrightnessView.hidden = YES; - self.portraitControlView.hidden = self.player.isFullScreen; - self.landScapeControlView.hidden = !self.player.isFullScreen; - if (self.controlViewAppeared) { - [self showControlViewWithAnimated:NO]; - } else { - [self hideControlViewWithAnimated:NO]; - } -} - -/// 设置标题、封面、全屏模式 -- (void)showTitle:(NSString *)title coverURLString:(NSString *)coverUrl fullScreenMode:(ZFFullScreenMode)fullScreenMode { - UIImage *placeholder = [ZFUtilities imageWithColor:[UIColor colorWithRed:220/255.0 green:220/255.0 blue:220/255.0 alpha:1] size:self.bgImgView.bounds.size]; - [self showTitle:title coverURLString:coverUrl placeholderImage:placeholder fullScreenMode:fullScreenMode]; -} - -/// 设置标题、封面、默认占位图、全屏模式 -- (void)showTitle:(NSString *)title coverURLString:(NSString *)coverUrl placeholderImage:(UIImage *)placeholder fullScreenMode:(ZFFullScreenMode)fullScreenMode { - [self resetControlView]; - [self layoutIfNeeded]; - [self setNeedsDisplay]; - [self.portraitControlView showTitle:title fullScreenMode:fullScreenMode]; - [self.landScapeControlView showTitle:title fullScreenMode:fullScreenMode]; - /// 这里直接设置播放器视图里的coverImageView - [self.player.currentPlayerManager.view.coverImageView setImageWithURLString:coverUrl placeholder:placeholder]; - [self.bgImgView setImageWithURLString:coverUrl placeholder:placeholder]; - if (self.prepareShowControlView) { - [self showControlViewWithAnimated:NO]; - } else { - [self hideControlViewWithAnimated:NO]; - } -} - -/// 设置标题、UIImage封面、全屏模式 -- (void)showTitle:(NSString *)title coverImage:(UIImage *)image fullScreenMode:(ZFFullScreenMode)fullScreenMode { - [self resetControlView]; - [self layoutIfNeeded]; - [self setNeedsDisplay]; - [self.portraitControlView showTitle:title fullScreenMode:fullScreenMode]; - [self.landScapeControlView showTitle:title fullScreenMode:fullScreenMode]; - self.coverImageView.image = image; - self.bgImgView.image = image; - if (self.prepareShowControlView) { - [self showControlViewWithAnimated:NO]; - } else { - [self hideControlViewWithAnimated:NO]; - } -} - -#pragma mark - ZFPlayerControlViewDelegate - -/// 手势筛选,返回NO不响应该手势 -- (BOOL)gestureTriggerCondition:(ZFPlayerGestureControl *)gestureControl gestureType:(ZFPlayerGestureType)gestureType gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer touch:(nonnull UITouch *)touch { - CGPoint point = [touch locationInView:self]; - if (self.player.isSmallFloatViewShow && !self.player.isFullScreen && gestureType != ZFPlayerGestureTypeSingleTap) { - return NO; - } - if (self.player.isFullScreen) { - if (!self.customDisablePanMovingDirection) { - /// 不禁用滑动方向 - self.player.disablePanMovingDirection = ZFPlayerDisablePanMovingDirectionNone; - } - return [self.landScapeControlView shouldResponseGestureWithPoint:point withGestureType:gestureType touch:touch]; - } else { - if (!self.customDisablePanMovingDirection) { - if (self.player.scrollView) { /// 列表时候禁止上下滑动(防止和列表滑动冲突) - self.player.disablePanMovingDirection = ZFPlayerDisablePanMovingDirectionVertical; - } else { /// 不禁用滑动方向 - self.player.disablePanMovingDirection = ZFPlayerDisablePanMovingDirectionNone; - } - } - return [self.portraitControlView shouldResponseGestureWithPoint:point withGestureType:gestureType touch:touch]; - } -} - -/// 单击手势事件 -- (void)gestureSingleTapped:(ZFPlayerGestureControl *)gestureControl { - if (!self.player) return; - if (self.player.isSmallFloatViewShow && !self.player.isFullScreen) { - [self.player enterFullScreen:YES animated:YES]; - } else { - if (self.controlViewAppeared) { - [self hideControlViewWithAnimated:YES]; - } else { - /// 显示之前先把控制层复位,先隐藏后显示 - [self hideControlViewWithAnimated:NO]; - [self showControlViewWithAnimated:YES]; - } - } -} - -/// 双击手势事件 -- (void)gestureDoubleTapped:(ZFPlayerGestureControl *)gestureControl { - if (self.player.isFullScreen) { - [self.landScapeControlView playOrPause]; - } else { - [self.portraitControlView playOrPause]; - } -} - -/// 开始滑动手势事件 -- (void)gestureBeganPan:(ZFPlayerGestureControl *)gestureControl panDirection:(ZFPanDirection)direction panLocation:(ZFPanLocation)location { - if (direction == ZFPanDirectionH) { - self.sumTime = self.player.currentTime; - } -} - -/// 滑动中手势事件 -- (void)gestureChangedPan:(ZFPlayerGestureControl *)gestureControl panDirection:(ZFPanDirection)direction panLocation:(ZFPanLocation)location withVelocity:(CGPoint)velocity { - if (direction == ZFPanDirectionH) { - // 每次滑动需要叠加时间 - self.sumTime += velocity.x / 200; - // 需要限定sumTime的范围 - NSTimeInterval totalMovieDuration = self.player.totalTime; - if (totalMovieDuration == 0) return; - if (self.sumTime > totalMovieDuration) self.sumTime = totalMovieDuration; - if (self.sumTime < 0) self.sumTime = 0; - BOOL style = NO; - if (velocity.x > 0) style = YES; - if (velocity.x < 0) style = NO; - if (velocity.x == 0) return; - [self sliderValueChangingValue:self.sumTime/totalMovieDuration isForward:style]; - } else if (direction == ZFPanDirectionV) { - if (location == ZFPanLocationLeft) { /// 调节亮度 - self.player.brightness -= (velocity.y) / 10000; - [self.volumeBrightnessView updateProgress:self.player.brightness withVolumeBrightnessType:ZFVolumeBrightnessTypeumeBrightness]; - } else if (location == ZFPanLocationRight) { /// 调节声音 - self.player.volume -= (velocity.y) / 10000; - if (self.player.isFullScreen) { - [self.volumeBrightnessView updateProgress:self.player.volume withVolumeBrightnessType:ZFVolumeBrightnessTypeVolume]; - } - } - } -} - -/// 滑动结束手势事件 -- (void)gestureEndedPan:(ZFPlayerGestureControl *)gestureControl panDirection:(ZFPanDirection)direction panLocation:(ZFPanLocation)location { - @zf_weakify(self) - if (direction == ZFPanDirectionH && self.sumTime >= 0 && self.player.totalTime > 0) { - [self.player seekToTime:self.sumTime completionHandler:^(BOOL finished) { - if (finished) { - @zf_strongify(self) - /// 左右滑动调节播放进度 - [self.portraitControlView sliderChangeEnded]; - [self.landScapeControlView sliderChangeEnded]; - self.bottomPgrogress.isdragging = NO; - if (self.controlViewAppeared) { - [self autoFadeOutControlView]; - } - } - }]; - if (self.seekToPlay) { - [self.player.currentPlayerManager play]; - } - self.sumTime = 0; - } -} - -/// 捏合手势事件,这里改变了视频的填充模式 -- (void)gesturePinched:(ZFPlayerGestureControl *)gestureControl scale:(float)scale { - if (scale > 1) { - self.player.currentPlayerManager.scalingMode = ZFPlayerScalingModeAspectFill; - } else { - self.player.currentPlayerManager.scalingMode = ZFPlayerScalingModeAspectFit; - } -} - -/// 准备播放 -- (void)videoPlayer:(ZFPlayerController *)videoPlayer prepareToPlay:(NSURL *)assetURL { - [self hideControlViewWithAnimated:NO]; -} - -/// 播放状态改变 -- (void)videoPlayer:(ZFPlayerController *)videoPlayer playStateChanged:(ZFPlayerPlaybackState)state { - if (state == ZFPlayerPlayStatePlaying) { - [self.portraitControlView playBtnSelectedState:YES]; - [self.landScapeControlView playBtnSelectedState:YES]; - self.failBtn.hidden = YES; - /// 开始播放时候判断是否显示loading - if (videoPlayer.currentPlayerManager.loadState == ZFPlayerLoadStateStalled && !self.prepareShowLoading) { - [self.activity startAnimating]; - } else if ((videoPlayer.currentPlayerManager.loadState == ZFPlayerLoadStateStalled || videoPlayer.currentPlayerManager.loadState == ZFPlayerLoadStatePrepare) && self.prepareShowLoading) { - [self.activity startAnimating]; - } - } else if (state == ZFPlayerPlayStatePaused) { - [self.portraitControlView playBtnSelectedState:NO]; - [self.landScapeControlView playBtnSelectedState:NO]; - /// 暂停的时候隐藏loading - [self.activity stopAnimating]; - self.failBtn.hidden = YES; - } else if (state == ZFPlayerPlayStatePlayFailed) { - self.failBtn.hidden = NO; - [self.activity stopAnimating]; - } -} - -/// 加载状态改变 -- (void)videoPlayer:(ZFPlayerController *)videoPlayer loadStateChanged:(ZFPlayerLoadState)state { - if (state == ZFPlayerLoadStatePrepare) { - self.coverImageView.hidden = NO; - [self.portraitControlView playBtnSelectedState:videoPlayer.currentPlayerManager.shouldAutoPlay]; - [self.landScapeControlView playBtnSelectedState:videoPlayer.currentPlayerManager.shouldAutoPlay]; - } else if (state == ZFPlayerLoadStatePlaythroughOK || state == ZFPlayerLoadStatePlayable) { - self.coverImageView.hidden = YES; - if (self.effectViewShow) { - self.effectView.hidden = NO; - } else { - self.effectView.hidden = YES; - self.player.currentPlayerManager.view.backgroundColor = [UIColor blackColor]; - } - } - if (state == ZFPlayerLoadStateStalled && videoPlayer.currentPlayerManager.isPlaying && !self.prepareShowLoading) { - [self.activity startAnimating]; - } else if ((state == ZFPlayerLoadStateStalled || state == ZFPlayerLoadStatePrepare) && videoPlayer.currentPlayerManager.isPlaying && self.prepareShowLoading) { - [self.activity startAnimating]; - } else { - [self.activity stopAnimating]; - } -} - -/// 播放进度改变回调 -- (void)videoPlayer:(ZFPlayerController *)videoPlayer currentTime:(NSTimeInterval)currentTime totalTime:(NSTimeInterval)totalTime { - [self.portraitControlView videoPlayer:videoPlayer currentTime:currentTime totalTime:totalTime]; - [self.landScapeControlView videoPlayer:videoPlayer currentTime:currentTime totalTime:totalTime]; - if (!self.bottomPgrogress.isdragging) { - self.bottomPgrogress.value = videoPlayer.progress; - } -} - -/// 缓冲改变回调 -- (void)videoPlayer:(ZFPlayerController *)videoPlayer bufferTime:(NSTimeInterval)bufferTime { - [self.portraitControlView videoPlayer:videoPlayer bufferTime:bufferTime]; - [self.landScapeControlView videoPlayer:videoPlayer bufferTime:bufferTime]; - self.bottomPgrogress.bufferValue = videoPlayer.bufferProgress; -} - -- (void)videoPlayer:(ZFPlayerController *)videoPlayer presentationSizeChanged:(CGSize)size { - [self.landScapeControlView videoPlayer:videoPlayer presentationSizeChanged:size]; -} - -/// 视频view即将旋转 -- (void)videoPlayer:(ZFPlayerController *)videoPlayer orientationWillChange:(ZFOrientationObserver *)observer { - self.portraitControlView.hidden = observer.isFullScreen; - self.landScapeControlView.hidden = !observer.isFullScreen; - if (videoPlayer.isSmallFloatViewShow) { - self.floatControlView.hidden = observer.isFullScreen; - self.portraitControlView.hidden = YES; - if (observer.isFullScreen) { - self.controlViewAppeared = NO; - [self cancelAutoFadeOutControlView]; - } - } - if (self.controlViewAppeared) { - [self showControlViewWithAnimated:NO]; - } else { - [self hideControlViewWithAnimated:NO]; - } - - if (observer.isFullScreen) { - [self.volumeBrightnessView removeSystemVolumeView]; - } else { - [self.volumeBrightnessView addSystemVolumeView]; - } -} - -/// 视频view已经旋转 -- (void)videoPlayer:(ZFPlayerController *)videoPlayer orientationDidChanged:(ZFOrientationObserver *)observer { - if (self.controlViewAppeared) { - [self showControlViewWithAnimated:NO]; - } else { - [self hideControlViewWithAnimated:NO]; - } -} - -/// 锁定旋转方向 -- (void)lockedVideoPlayer:(ZFPlayerController *)videoPlayer lockedScreen:(BOOL)locked { - [self showControlViewWithAnimated:YES]; -} - -/// 列表滑动时视频view已经显示 -- (void)playerDidAppearInScrollView:(ZFPlayerController *)videoPlayer { - if (!self.player.stopWhileNotVisible && !videoPlayer.isFullScreen) { - self.floatControlView.hidden = YES; - self.portraitControlView.hidden = NO; - } -} - -/// 列表滑动时视频view已经消失 -- (void)playerDidDisappearInScrollView:(ZFPlayerController *)videoPlayer { - if (!self.player.stopWhileNotVisible && !videoPlayer.isFullScreen) { - self.floatControlView.hidden = NO; - self.portraitControlView.hidden = YES; - } -} - -- (void)videoPlayer:(ZFPlayerController *)videoPlayer floatViewShow:(BOOL)show { - self.floatControlView.hidden = !show; - self.portraitControlView.hidden = show; -} - -#pragma mark - Private Method - -- (void)sliderValueChangingValue:(CGFloat)value isForward:(BOOL)forward { - if (self.horizontalPanShowControlView) { - /// 显示控制层 - [self showControlViewWithAnimated:NO]; - [self cancelAutoFadeOutControlView]; - } - - self.fastProgressView.value = value; - self.fastView.hidden = NO; - self.fastView.alpha = 1; - if (forward) { - self.fastImageView.image = ZFPlayer_Image(@"ZFPlayer_fast_forward"); - } else { - self.fastImageView.image = ZFPlayer_Image(@"ZFPlayer_fast_backward"); - } - NSString *draggedTime = [ZFUtilities convertTimeSecond:self.player.totalTime*value]; - NSString *totalTime = [ZFUtilities convertTimeSecond:self.player.totalTime]; - self.fastTimeLabel.text = [NSString stringWithFormat:@"%@ / %@",draggedTime,totalTime]; - /// 更新滑杆 - [self.portraitControlView sliderValueChanged:value currentTimeString:draggedTime]; - [self.landScapeControlView sliderValueChanged:value currentTimeString:draggedTime]; - self.bottomPgrogress.isdragging = YES; - self.bottomPgrogress.value = value; - - [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(hideFastView) object:nil]; - [self performSelector:@selector(hideFastView) withObject:nil afterDelay:0.1]; - - if (self.fastViewAnimated) { - [UIView animateWithDuration:0.4 animations:^{ - self.fastView.transform = CGAffineTransformMakeTranslation(forward?8:-8, 0); - }]; - } -} - -/// 隐藏快进视图 -- (void)hideFastView { - [UIView animateWithDuration:0.4 animations:^{ - self.fastView.transform = CGAffineTransformIdentity; - self.fastView.alpha = 0; - } completion:^(BOOL finished) { - self.fastView.hidden = YES; - }]; -} - -/// 加载失败 -- (void)failBtnClick:(UIButton *)sender { - [self.player.currentPlayerManager reloadPlayer]; -} - -#pragma mark - setter - -- (void)setPlayer:(ZFPlayerController *)player { - _player = player; - self.landScapeControlView.player = player; - self.portraitControlView.player = player; - /// 解决播放时候黑屏闪一下问题 - [player.currentPlayerManager.view insertSubview:self.bgImgView atIndex:0]; - [self.bgImgView addSubview:self.effectView]; - self.bgImgView.frame = player.currentPlayerManager.view.bounds; - self.bgImgView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - self.effectView.frame = self.bgImgView.bounds; -} - -- (void)setSeekToPlay:(BOOL)seekToPlay { - _seekToPlay = seekToPlay; - self.portraitControlView.seekToPlay = seekToPlay; - self.landScapeControlView.seekToPlay = seekToPlay; -} - -- (void)setEffectViewShow:(BOOL)effectViewShow { - _effectViewShow = effectViewShow; - if (effectViewShow) { - self.bgImgView.hidden = NO; - } else { - self.bgImgView.hidden = YES; - } -} - -- (void)setFullScreenMode:(ZFFullScreenMode)fullScreenMode { - _fullScreenMode = fullScreenMode; - self.portraitControlView.fullScreenMode = fullScreenMode; - self.landScapeControlView.fullScreenMode = fullScreenMode; - self.player.orientationObserver.fullScreenMode = fullScreenMode; -} - -#pragma mark - getter - -- (UIImageView *)bgImgView { - if (!_bgImgView) { - _bgImgView = [[UIImageView alloc] init]; - _bgImgView.userInteractionEnabled = YES; - } - return _bgImgView; -} - -- (UIView *)effectView { - if (!_effectView) { - if (@available(iOS 8.0, *)) { - UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; - _effectView = [[UIVisualEffectView alloc] initWithEffect:effect]; - } else { - UIToolbar *effectView = [[UIToolbar alloc] init]; - effectView.barStyle = UIBarStyleBlackTranslucent; - _effectView = effectView; - } - } - return _effectView; -} - -- (ZFPortraitControlView *)portraitControlView { - if (!_portraitControlView) { - @zf_weakify(self) - _portraitControlView = [[ZFPortraitControlView alloc] init]; - _portraitControlView.sliderValueChanging = ^(CGFloat value, BOOL forward) { - @zf_strongify(self) - NSString *draggedTime = [ZFUtilities convertTimeSecond:self.player.totalTime*value]; - /// 更新滑杆和时间 - [self.landScapeControlView sliderValueChanged:value currentTimeString:draggedTime]; - self.fastProgressView.value = value; - self.bottomPgrogress.isdragging = YES; - self.bottomPgrogress.value = value; - [self cancelAutoFadeOutControlView]; - }; - _portraitControlView.sliderValueChanged = ^(CGFloat value) { - @zf_strongify(self) - [self.landScapeControlView sliderChangeEnded]; - self.fastProgressView.value = value; - self.bottomPgrogress.isdragging = NO; - self.bottomPgrogress.value = value; - [self autoFadeOutControlView]; - }; - } - return _portraitControlView; -} - -- (ZFLandScapeControlView *)landScapeControlView { - if (!_landScapeControlView) { - @zf_weakify(self) - _landScapeControlView = [[ZFLandScapeControlView alloc] init]; - _landScapeControlView.sliderValueChanging = ^(CGFloat value, BOOL forward) { - @zf_strongify(self) - NSString *draggedTime = [ZFUtilities convertTimeSecond:self.player.totalTime*value]; - /// 更新滑杆和时间 - [self.portraitControlView sliderValueChanged:value currentTimeString:draggedTime]; - self.fastProgressView.value = value; - self.bottomPgrogress.isdragging = YES; - self.bottomPgrogress.value = value; - [self cancelAutoFadeOutControlView]; - }; - _landScapeControlView.sliderValueChanged = ^(CGFloat value) { - @zf_strongify(self) - [self.portraitControlView sliderChangeEnded]; - self.fastProgressView.value = value; - self.bottomPgrogress.isdragging = NO; - self.bottomPgrogress.value = value; - [self autoFadeOutControlView]; - }; - } - return _landScapeControlView; -} - -- (ZFSpeedLoadingView *)activity { - if (!_activity) { - _activity = [[ZFSpeedLoadingView alloc] init]; - } - return _activity; -} - -- (UIView *)fastView { - if (!_fastView) { - _fastView = [[UIView alloc] init]; - _fastView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.7]; - _fastView.layer.cornerRadius = 4; - _fastView.layer.masksToBounds = YES; - _fastView.hidden = YES; - } - return _fastView; -} - -- (UIImageView *)fastImageView { - if (!_fastImageView) { - _fastImageView = [[UIImageView alloc] init]; - } - return _fastImageView; -} - -- (UILabel *)fastTimeLabel { - if (!_fastTimeLabel) { - _fastTimeLabel = [[UILabel alloc] init]; - _fastTimeLabel.textColor = [UIColor whiteColor]; - _fastTimeLabel.textAlignment = NSTextAlignmentCenter; - _fastTimeLabel.font = [UIFont systemFontOfSize:14.0]; - _fastTimeLabel.adjustsFontSizeToFitWidth = YES; - } - return _fastTimeLabel; -} - -- (ZFSliderView *)fastProgressView { - if (!_fastProgressView) { - _fastProgressView = [[ZFSliderView alloc] init]; - _fastProgressView.maximumTrackTintColor = [[UIColor lightGrayColor] colorWithAlphaComponent:0.4]; - _fastProgressView.minimumTrackTintColor = [UIColor whiteColor]; - _fastProgressView.sliderHeight = 2; - _fastProgressView.isHideSliderBlock = NO; - } - return _fastProgressView; -} - -- (UIButton *)failBtn { - if (!_failBtn) { - _failBtn = [UIButton buttonWithType:UIButtonTypeSystem]; - [_failBtn setTitle:@"加载失败,点击重试" forState:UIControlStateNormal]; - [_failBtn addTarget:self action:@selector(failBtnClick:) forControlEvents:UIControlEventTouchUpInside]; - [_failBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; - _failBtn.titleLabel.font = [UIFont systemFontOfSize:14.0]; - _failBtn.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.7]; - _failBtn.hidden = YES; - } - return _failBtn; -} - -- (ZFSliderView *)bottomPgrogress { - if (!_bottomPgrogress) { - _bottomPgrogress = [[ZFSliderView alloc] init]; - _bottomPgrogress.maximumTrackTintColor = [UIColor clearColor]; - _bottomPgrogress.minimumTrackTintColor = [UIColor whiteColor]; - _bottomPgrogress.bufferTrackTintColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:0.5]; - _bottomPgrogress.sliderHeight = 1; - _bottomPgrogress.isHideSliderBlock = NO; - } - return _bottomPgrogress; -} - -- (ZFSmallFloatControlView *)floatControlView { - if (!_floatControlView) { - _floatControlView = [[ZFSmallFloatControlView alloc] init]; - @zf_weakify(self) - _floatControlView.closeClickCallback = ^{ - @zf_strongify(self) - if (self.player.containerType == ZFPlayerContainerTypeCell) { - [self.player stopCurrentPlayingCell]; - } else if (self.player.containerType == ZFPlayerContainerTypeView) { - [self.player stopCurrentPlayingView]; - } - [self resetControlView]; - }; - } - return _floatControlView; -} - -- (ZFVolumeBrightnessView *)volumeBrightnessView { - if (!_volumeBrightnessView) { - _volumeBrightnessView = [[ZFVolumeBrightnessView alloc] init]; - _volumeBrightnessView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.7]; - _volumeBrightnessView.hidden = YES; - } - return _volumeBrightnessView; -} - -- (void)setBackBtnClickCallback:(void (^)(void))backBtnClickCallback { - _backBtnClickCallback = [backBtnClickCallback copy]; - self.landScapeControlView.backBtnClickCallback = _backBtnClickCallback; -} - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPortraitControlView.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPortraitControlView.h deleted file mode 100755 index d1e8c76..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPortraitControlView.h +++ /dev/null @@ -1,111 +0,0 @@ -// -// ZFPortraitControlView.h -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 -#import "ZFSliderView.h" -#if __has_include() -#import -#else -#import "ZFPlayerController.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - -@interface ZFPortraitControlView : UIView - -/// 底部工具栏 -@property (nonatomic, strong, readonly) UIView *bottomToolView; - -/// 顶部工具栏 -@property (nonatomic, strong, readonly) UIView *topToolView; - -/// 标题 -@property (nonatomic, strong, readonly) UILabel *titleLabel; - -/// 播放或暂停按钮 -@property (nonatomic, strong, readonly) UIButton *playOrPauseBtn; - -/// 播放的当前时间 -@property (nonatomic, strong, readonly) UILabel *currentTimeLabel; - -/// 滑杆 -@property (nonatomic, strong, readonly) ZFSliderView *slider; - -/// 视频总时间 -@property (nonatomic, strong, readonly) UILabel *totalTimeLabel; - -/// 全屏按钮 -@property (nonatomic, strong, readonly) UIButton *fullScreenBtn; - -/// 播放器 -@property (nonatomic, weak) ZFPlayerController *player; - -/// slider滑动中 -@property (nonatomic, copy, nullable) void(^sliderValueChanging)(CGFloat value,BOOL forward); - -/// slider滑动结束 -@property (nonatomic, copy, nullable) void(^sliderValueChanged)(CGFloat value); - -/// 如果是暂停状态,seek完是否播放,默认YES -@property (nonatomic, assign) BOOL seekToPlay; - -/// 全屏模式 -@property (nonatomic, assign) ZFFullScreenMode fullScreenMode; - -/// 重置控制层 -- (void)resetControlView; - -/// 显示控制层 -- (void)showControlView; - -/// 隐藏控制层 -- (void)hideControlView; - -/// 设置播放时间 -- (void)videoPlayer:(ZFPlayerController *)videoPlayer currentTime:(NSTimeInterval)currentTime totalTime:(NSTimeInterval)totalTime; - -/// 设置缓冲时间 -- (void)videoPlayer:(ZFPlayerController *)videoPlayer bufferTime:(NSTimeInterval)bufferTime; - -/// 是否响应该手势 -- (BOOL)shouldResponseGestureWithPoint:(CGPoint)point withGestureType:(ZFPlayerGestureType)type touch:(nonnull UITouch *)touch; - -/// 标题和全屏模式 -- (void)showTitle:(NSString *_Nullable)title fullScreenMode:(ZFFullScreenMode)fullScreenMode; - -/// 根据当前播放状态取反 -- (void)playOrPause; - -/// 播放按钮状态 -- (void)playBtnSelectedState:(BOOL)selected; - -/// 调节播放进度slider和当前时间更新 -- (void)sliderValueChanged:(CGFloat)value currentTimeString:(NSString *)timeString; - -/// 滑杆结束滑动 -- (void)sliderChangeEnded; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPortraitControlView.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPortraitControlView.m deleted file mode 100755 index 43a07b0..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPortraitControlView.m +++ /dev/null @@ -1,387 +0,0 @@ -// -// ZFPortraitControlView.m -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "ZFPortraitControlView.h" -#import "UIView+ZFFrame.h" -#import "ZFUtilities.h" -#if __has_include() -#import -#else -#import "ZFPlayerConst.h" -#endif - -@interface ZFPortraitControlView () -/// 底部工具栏 -@property (nonatomic, strong) UIView *bottomToolView; -/// 顶部工具栏 -@property (nonatomic, strong) UIView *topToolView; -/// 标题 -@property (nonatomic, strong) UILabel *titleLabel; -/// 播放或暂停按钮 -@property (nonatomic, strong) UIButton *playOrPauseBtn; -/// 播放的当前时间 -@property (nonatomic, strong) UILabel *currentTimeLabel; -/// 滑杆 -@property (nonatomic, strong) ZFSliderView *slider; -/// 视频总时间 -@property (nonatomic, strong) UILabel *totalTimeLabel; -/// 全屏按钮 -@property (nonatomic, strong) UIButton *fullScreenBtn; - -@property (nonatomic, assign) BOOL isShow; - -@end - -@implementation ZFPortraitControlView - -- (instancetype)initWithFrame:(CGRect)frame { - if (self = [super initWithFrame:frame]) { - // 添加子控件 - [self addSubview:self.topToolView]; - [self addSubview:self.bottomToolView]; - [self addSubview:self.playOrPauseBtn]; - [self.topToolView addSubview:self.titleLabel]; - [self.bottomToolView addSubview:self.currentTimeLabel]; - [self.bottomToolView addSubview:self.slider]; - [self.bottomToolView addSubview:self.totalTimeLabel]; - [self.bottomToolView addSubview:self.fullScreenBtn]; - - // 设置子控件的响应事件 - [self makeSubViewsAction]; - - [self resetControlView]; - self.clipsToBounds = YES; - } - return self; -} - -- (void)layoutSubviews { - [super layoutSubviews]; - - CGFloat min_x = 0; - CGFloat min_y = 0; - CGFloat min_w = 0; - CGFloat min_h = 0; - CGFloat min_view_w = self.bounds.size.width; - CGFloat min_view_h = self.bounds.size.height; - CGFloat min_margin = 9; - - min_x = 0; - min_y = 0; - min_w = min_view_w; - min_h = 40; - self.topToolView.frame = CGRectMake(min_x, min_y, min_w, min_h); - - min_x = 15; - min_y = 5; - min_w = min_view_w - min_x - 15; - min_h = 30; - self.titleLabel.frame = CGRectMake(min_x, min_y, min_w, min_h); - - min_h = 40; - min_x = 0; - min_y = min_view_h - min_h; - min_w = min_view_w; - self.bottomToolView.frame = CGRectMake(min_x, min_y, min_w, min_h); - - min_x = 0; - min_y = 0; - min_w = 44; - min_h = min_w; - self.playOrPauseBtn.frame = CGRectMake(min_x, min_y, min_w, min_h); - self.playOrPauseBtn.center = self.center; - - min_x = min_margin; - min_w = 62; - min_h = 28; - min_y = (self.bottomToolView.zf_height - min_h)/2; - self.currentTimeLabel.frame = CGRectMake(min_x, min_y, min_w, min_h); - - min_w = 28; - min_h = min_w; - min_x = self.bottomToolView.zf_width - min_w - min_margin; - min_y = 0; - self.fullScreenBtn.frame = CGRectMake(min_x, min_y, min_w, min_h); - self.fullScreenBtn.zf_centerY = self.currentTimeLabel.zf_centerY; - - min_w = 62; - min_h = 28; - min_x = self.fullScreenBtn.zf_left - min_w - 4; - min_y = 0; - self.totalTimeLabel.frame = CGRectMake(min_x, min_y, min_w, min_h); - self.totalTimeLabel.zf_centerY = self.currentTimeLabel.zf_centerY; - - min_x = self.currentTimeLabel.zf_right + 4; - min_y = 0; - min_w = self.totalTimeLabel.zf_left - min_x - 4; - min_h = 30; - self.slider.frame = CGRectMake(min_x, min_y, min_w, min_h); - self.slider.zf_centerY = self.currentTimeLabel.zf_centerY; - - if (!self.isShow) { - self.topToolView.zf_y = -self.topToolView.zf_height; - self.bottomToolView.zf_y = self.zf_height; - self.playOrPauseBtn.alpha = 0; - } else { - self.topToolView.zf_y = 0; - self.bottomToolView.zf_y = self.zf_height - self.bottomToolView.zf_height; - self.playOrPauseBtn.alpha = 1; - } -} - -- (void)makeSubViewsAction { - [self.playOrPauseBtn addTarget:self action:@selector(playPauseButtonClickAction:) forControlEvents:UIControlEventTouchUpInside]; - [self.fullScreenBtn addTarget:self action:@selector(fullScreenButtonClickAction:) forControlEvents:UIControlEventTouchUpInside]; -} - -#pragma mark - action - -- (void)playPauseButtonClickAction:(UIButton *)sender { - [self playOrPause]; -} - -- (void)fullScreenButtonClickAction:(UIButton *)sender { - [self.player enterFullScreen:YES animated:YES]; -} - -/// 根据当前播放状态取反 -- (void)playOrPause { - self.playOrPauseBtn.selected = !self.playOrPauseBtn.isSelected; - self.playOrPauseBtn.isSelected? [self.player.currentPlayerManager play]: [self.player.currentPlayerManager pause]; -} - -- (void)playBtnSelectedState:(BOOL)selected { - self.playOrPauseBtn.selected = selected; -} - -#pragma mark - ZFSliderViewDelegate - -- (void)sliderTouchBegan:(float)value { - self.slider.isdragging = YES; -} - -- (void)sliderTouchEnded:(float)value { - if (self.player.totalTime > 0) { - self.slider.isdragging = YES; - if (self.sliderValueChanging) self.sliderValueChanging(value, self.slider.isForward); - @zf_weakify(self) - [self.player seekToTime:self.player.totalTime*value completionHandler:^(BOOL finished) { - @zf_strongify(self) - if (finished) { - self.slider.isdragging = NO; - if (self.sliderValueChanged) self.sliderValueChanged(value); - } - }]; - if (self.seekToPlay) { - [self.player.currentPlayerManager play]; - } - } else { - self.slider.isdragging = NO; - self.slider.value = 0; - } -} - -- (void)sliderValueChanged:(float)value { - if (self.player.totalTime == 0) { - self.slider.value = 0; - return; - } - self.slider.isdragging = YES; - NSString *currentTimeString = [ZFUtilities convertTimeSecond:self.player.totalTime*value]; - self.currentTimeLabel.text = currentTimeString; - if (self.sliderValueChanging) self.sliderValueChanging(value,self.slider.isForward); -} - -- (void)sliderTapped:(float)value { - [self sliderTouchEnded:value]; - NSString *currentTimeString = [ZFUtilities convertTimeSecond:self.player.totalTime*value]; - self.currentTimeLabel.text = currentTimeString; -} - -#pragma mark - public method - -/** 重置ControlView */ -- (void)resetControlView { - self.bottomToolView.alpha = 1; - self.slider.value = 0; - self.slider.bufferValue = 0; - self.currentTimeLabel.text = @"00:00"; - self.totalTimeLabel.text = @"00:00"; - self.backgroundColor = [UIColor clearColor]; - self.playOrPauseBtn.selected = YES; - self.titleLabel.text = @""; -} - -- (void)showControlView { - self.topToolView.alpha = 1; - self.bottomToolView.alpha = 1; - self.isShow = YES; - self.topToolView.zf_y = 0; - self.bottomToolView.zf_y = self.zf_height - self.bottomToolView.zf_height; - self.playOrPauseBtn.alpha = 1; - self.player.statusBarHidden = NO; -} - -- (void)hideControlView { - self.isShow = NO; - self.topToolView.zf_y = -self.topToolView.zf_height; - self.bottomToolView.zf_y = self.zf_height; - self.player.statusBarHidden = NO; - self.playOrPauseBtn.alpha = 0; - self.topToolView.alpha = 0; - self.bottomToolView.alpha = 0; -} - -- (BOOL)shouldResponseGestureWithPoint:(CGPoint)point withGestureType:(ZFPlayerGestureType)type touch:(nonnull UITouch *)touch { - CGRect sliderRect = [self.bottomToolView convertRect:self.slider.frame toView:self]; - if (CGRectContainsPoint(sliderRect, point)) { - return NO; - } - return YES; -} - -- (void)videoPlayer:(ZFPlayerController *)videoPlayer currentTime:(NSTimeInterval)currentTime totalTime:(NSTimeInterval)totalTime { - if (!self.slider.isdragging) { - NSString *currentTimeString = [ZFUtilities convertTimeSecond:currentTime]; - self.currentTimeLabel.text = currentTimeString; - NSString *totalTimeString = [ZFUtilities convertTimeSecond:totalTime]; - self.totalTimeLabel.text = totalTimeString; - self.slider.value = videoPlayer.progress; - } -} - -- (void)videoPlayer:(ZFPlayerController *)videoPlayer bufferTime:(NSTimeInterval)bufferTime { - self.slider.bufferValue = videoPlayer.bufferProgress; -} - -- (void)showTitle:(NSString *)title fullScreenMode:(ZFFullScreenMode)fullScreenMode { - self.titleLabel.text = title; - self.player.orientationObserver.fullScreenMode = fullScreenMode; -} - -/// 调节播放进度slider和当前时间更新 -- (void)sliderValueChanged:(CGFloat)value currentTimeString:(NSString *)timeString { - self.slider.value = value; - self.currentTimeLabel.text = timeString; - self.slider.isdragging = YES; - [UIView animateWithDuration:0.3 animations:^{ - self.slider.sliderBtn.transform = CGAffineTransformMakeScale(1.2, 1.2); - }]; -} - -/// 滑杆结束滑动 -- (void)sliderChangeEnded { - self.slider.isdragging = NO; - [UIView animateWithDuration:0.3 animations:^{ - self.slider.sliderBtn.transform = CGAffineTransformIdentity; - }]; -} - -#pragma mark - setter - -- (void)setFullScreenMode:(ZFFullScreenMode)fullScreenMode { - _fullScreenMode = fullScreenMode; - self.player.orientationObserver.fullScreenMode = fullScreenMode; -} - -#pragma mark - getter - -- (UIView *)topToolView { - if (!_topToolView) { - _topToolView = [[UIView alloc] init]; - UIImage *image = ZFPlayer_Image(@"ZFPlayer_top_shadow"); - _topToolView.layer.contents = (id)image.CGImage; - } - return _topToolView; -} - -- (UILabel *)titleLabel { - if (!_titleLabel) { - _titleLabel = [[UILabel alloc] init]; - _titleLabel.textColor = [UIColor whiteColor]; - _titleLabel.font = [UIFont systemFontOfSize:15.0]; - } - return _titleLabel; -} - -- (UIView *)bottomToolView { - if (!_bottomToolView) { - _bottomToolView = [[UIView alloc] init]; - UIImage *image = ZFPlayer_Image(@"ZFPlayer_bottom_shadow"); - _bottomToolView.layer.contents = (id)image.CGImage; - } - return _bottomToolView; -} - -- (UIButton *)playOrPauseBtn { - if (!_playOrPauseBtn) { - _playOrPauseBtn = [UIButton buttonWithType:UIButtonTypeCustom]; - [_playOrPauseBtn setImage:ZFPlayer_Image(@"new_allPlay_44x44_") forState:UIControlStateNormal]; - [_playOrPauseBtn setImage:ZFPlayer_Image(@"new_allPause_44x44_") forState:UIControlStateSelected]; - } - return _playOrPauseBtn; -} - -- (UILabel *)currentTimeLabel { - if (!_currentTimeLabel) { - _currentTimeLabel = [[UILabel alloc] init]; - _currentTimeLabel.textColor = [UIColor whiteColor]; - _currentTimeLabel.font = [UIFont systemFontOfSize:14.0f]; - _currentTimeLabel.textAlignment = NSTextAlignmentCenter; - } - return _currentTimeLabel; -} - -- (ZFSliderView *)slider { - if (!_slider) { - _slider = [[ZFSliderView alloc] init]; - _slider.delegate = self; - _slider.maximumTrackTintColor = [UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:0.8]; - _slider.bufferTrackTintColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:0.5]; - _slider.minimumTrackTintColor = [UIColor whiteColor]; - [_slider setThumbImage:ZFPlayer_Image(@"ZFPlayer_slider") forState:UIControlStateNormal]; - _slider.sliderHeight = 2; - } - return _slider; -} - -- (UILabel *)totalTimeLabel { - if (!_totalTimeLabel) { - _totalTimeLabel = [[UILabel alloc] init]; - _totalTimeLabel.textColor = [UIColor whiteColor]; - _totalTimeLabel.font = [UIFont systemFontOfSize:14.0f]; - _totalTimeLabel.textAlignment = NSTextAlignmentCenter; - } - return _totalTimeLabel; -} - -- (UIButton *)fullScreenBtn { - if (!_fullScreenBtn) { - _fullScreenBtn = [UIButton buttonWithType:UIButtonTypeCustom]; - [_fullScreenBtn setImage:ZFPlayer_Image(@"ZFPlayer_fullscreen") forState:UIControlStateNormal]; - } - return _fullScreenBtn; -} - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFSliderView.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFSliderView.h deleted file mode 100644 index 7a40250..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFSliderView.h +++ /dev/null @@ -1,118 +0,0 @@ -// -// ZFSliderView.h -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 - -@protocol ZFSliderViewDelegate - -@optional -// 滑块滑动开始 -- (void)sliderTouchBegan:(float)value; -// 滑块滑动中 -- (void)sliderValueChanged:(float)value; -// 滑块滑动结束 -- (void)sliderTouchEnded:(float)value; -// 滑杆点击 -- (void)sliderTapped:(float)value; - -@end - -@interface ZFSliderButton : UIButton - -@end - -@interface ZFSliderView : UIView - -@property (nonatomic, weak) id delegate; - -/** 滑块 */ -@property (nonatomic, strong, readonly) ZFSliderButton *sliderBtn; - -/** 默认滑杆的颜色 */ -@property (nonatomic, strong) UIColor *maximumTrackTintColor; - -/** 滑杆进度颜色 */ -@property (nonatomic, strong) UIColor *minimumTrackTintColor; - -/** 缓存进度颜色 */ -@property (nonatomic, strong) UIColor *bufferTrackTintColor; - -/** loading进度颜色 */ -@property (nonatomic, strong) UIColor *loadingTintColor; - -/** 默认滑杆的图片 */ -@property (nonatomic, strong) UIImage *maximumTrackImage; - -/** 滑杆进度的图片 */ -@property (nonatomic, strong) UIImage *minimumTrackImage; - -/** 缓存进度的图片 */ -@property (nonatomic, strong) UIImage *bufferTrackImage; - -/** 滑杆进度 */ -@property (nonatomic, assign) float value; - -/** 缓存进度 */ -@property (nonatomic, assign) float bufferValue; - -/** 是否允许点击,默认是YES */ -@property (nonatomic, assign) BOOL allowTapped; - -/** 是否允许点击,默认是YES */ -@property (nonatomic, assign) BOOL animate; - -/** 设置滑杆的高度 */ -@property (nonatomic, assign) CGFloat sliderHeight; - -/** 设置滑杆的圆角 */ -@property (nonatomic, assign) CGFloat sliderRadius; - -/** 是否隐藏滑块(默认为NO) */ -@property (nonatomic, assign) BOOL isHideSliderBlock; - -/// 是否正在拖动 -@property (nonatomic, assign) BOOL isdragging; - -/// 向前还是向后拖动 -@property (nonatomic, assign) BOOL isForward; - -@property (nonatomic, assign) CGSize thumbSize; - -/** - * Starts animation of the spinner. - */ -- (void)startAnimating; - -/** - * Stops animation of the spinnner. - */ -- (void)stopAnimating; - -// 设置滑块背景色 -- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state; - -// 设置滑块图片 -- (void)setThumbImage:(UIImage *)image forState:(UIControlState)state; - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFSliderView.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFSliderView.m deleted file mode 100644 index 55a38aa..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFSliderView.m +++ /dev/null @@ -1,426 +0,0 @@ -// -// ZFSliderView.m -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "ZFSliderView.h" -#import "UIView+ZFFrame.h" - -/** 滑块的大小 */ -static const CGFloat kSliderBtnWH = 19.0; -/** 进度的高度 */ -static const CGFloat kProgressH = 1.0; -/** 拖动slider动画的时间*/ -static const CGFloat kAnimate = 0.3; - -@implementation ZFSliderButton - -// 重写此方法将按钮的点击范围扩大 -- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { - CGRect bounds = self.bounds; - // 扩大点击区域 - bounds = CGRectInset(bounds, -20, -20); - // 若点击的点在新的bounds里面。就返回yes - return CGRectContainsPoint(bounds, point); -} - -@end - -@interface ZFSliderView () - -/** 进度背景 */ -@property (nonatomic, strong) UIImageView *bgProgressView; -/** 缓存进度 */ -@property (nonatomic, strong) UIImageView *bufferProgressView; -/** 滑动进度 */ -@property (nonatomic, strong) UIImageView *sliderProgressView; -/** 滑块 */ -@property (nonatomic, strong) ZFSliderButton *sliderBtn; - -@property (nonatomic, strong) UIView *loadingBarView; - -@property (nonatomic, assign) BOOL isLoading; - -@property (nonatomic, strong) UITapGestureRecognizer *tapGesture; - -@end - -@implementation ZFSliderView - -- (instancetype)initWithFrame:(CGRect)frame { - if (self = [super initWithFrame:frame]) { - self.allowTapped = YES; - self.animate = YES; - [self addSubViews]; - } - return self; -} - -- (void)awakeFromNib { - [super awakeFromNib]; - self.allowTapped = YES; - self.animate = YES; - [self addSubViews]; -} - -- (void)layoutSubviews { - [super layoutSubviews]; - if (isnan(self.value) || isnan(self.bufferValue)) return; - - CGFloat min_x = 0; - CGFloat min_y = 0; - CGFloat min_w = 0; - CGFloat min_h = 0; - CGFloat min_view_w = self.bounds.size.width; - CGFloat min_view_h = self.bounds.size.height; - - min_x = 0; - min_w = min_view_w; - min_y = 0; - min_h = self.sliderHeight; - self.bgProgressView.frame = CGRectMake(min_x, min_y, min_w, min_h); - - min_x = 0; - min_y = 0; - min_w = self.thumbSize.width; - min_h = self.thumbSize.height; - self.sliderBtn.frame = CGRectMake(min_x, min_y, min_w, min_h); - self.sliderBtn.zf_centerX = self.bgProgressView.zf_width * self.value; - - min_x = 0; - min_y = 0; - if (self.sliderBtn.hidden) { - min_w = self.bgProgressView.zf_width * self.value; - } else { - min_w = self.sliderBtn.zf_centerX; - } - min_h = self.sliderHeight; - self.sliderProgressView.frame = CGRectMake(min_x, min_y, min_w, min_h); - - min_x = 0; - min_y = 0; - min_w = self.bgProgressView.zf_width * self.bufferValue; - min_h = self.sliderHeight; - self.bufferProgressView.frame = CGRectMake(min_x, min_y, min_w, min_h); - - min_w = 0.1; - min_h = self.sliderHeight; - min_x = (min_view_w - min_w)/2; - min_y = (min_view_h - min_h)/2; - self.loadingBarView.frame = CGRectMake(min_x, min_y, min_w, min_h); - - self.bgProgressView.zf_centerY = min_view_h * 0.5; - self.bufferProgressView.zf_centerY = min_view_h * 0.5; - self.sliderProgressView.zf_centerY = min_view_h * 0.5; - self.sliderBtn.zf_centerY = min_view_h * 0.5; -} - -/** - 添加子视图 - */ -- (void)addSubViews { - self.thumbSize = CGSizeMake(kSliderBtnWH, kSliderBtnWH); - self.sliderHeight = kProgressH; - self.backgroundColor = [UIColor clearColor]; - [self addSubview:self.bgProgressView]; - [self addSubview:self.bufferProgressView]; - [self addSubview:self.sliderProgressView]; - [self addSubview:self.sliderBtn]; - [self addSubview:self.loadingBarView]; - - // 添加点击手势 - self.tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)]; - [self addGestureRecognizer:self.tapGesture]; - - // 添加滑动手势 - UIPanGestureRecognizer *sliderGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(sliderGesture:)]; - [self addGestureRecognizer:sliderGesture]; -} - -#pragma mark - Setter - -- (void)setMaximumTrackTintColor:(UIColor *)maximumTrackTintColor { - _maximumTrackTintColor = maximumTrackTintColor; - self.bgProgressView.backgroundColor = maximumTrackTintColor; -} - -- (void)setMinimumTrackTintColor:(UIColor *)minimumTrackTintColor { - _minimumTrackTintColor = minimumTrackTintColor; - self.sliderProgressView.backgroundColor = minimumTrackTintColor; -} - -- (void)setBufferTrackTintColor:(UIColor *)bufferTrackTintColor { - _bufferTrackTintColor = bufferTrackTintColor; - self.bufferProgressView.backgroundColor = bufferTrackTintColor; -} - -- (void)setLoadingTintColor:(UIColor *)loadingTintColor { - _loadingTintColor = loadingTintColor; - self.loadingBarView.backgroundColor = loadingTintColor; -} - -- (void)setMaximumTrackImage:(UIImage *)maximumTrackImage { - _maximumTrackImage = maximumTrackImage; - self.bgProgressView.image = maximumTrackImage; - self.maximumTrackTintColor = [UIColor clearColor]; -} - -- (void)setMinimumTrackImage:(UIImage *)minimumTrackImage { - _minimumTrackImage = minimumTrackImage; - self.sliderProgressView.image = minimumTrackImage; - self.minimumTrackTintColor = [UIColor clearColor]; -} - -- (void)setBufferTrackImage:(UIImage *)bufferTrackImage { - _bufferTrackImage = bufferTrackImage; - self.bufferProgressView.image = bufferTrackImage; - self.bufferTrackTintColor = [UIColor clearColor]; -} - -- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state { - [self.sliderBtn setBackgroundImage:image forState:state]; -} - -- (void)setThumbImage:(UIImage *)image forState:(UIControlState)state { - [self.sliderBtn setImage:image forState:state]; -} - -- (void)setValue:(float)value { - if (isnan(value)) return; - value = MIN(1.0, value); - _value = value; - if (self.sliderBtn.hidden) { - self.sliderProgressView.zf_width = self.bgProgressView.zf_width * value; - } else { - self.sliderBtn.zf_centerX = self.bgProgressView.zf_width * value; - self.sliderProgressView.zf_width = self.sliderBtn.zf_centerX; - } -} - -- (void)setBufferValue:(float)bufferValue { - if (isnan(bufferValue)) return; - bufferValue = MIN(1.0, bufferValue); - _bufferValue = bufferValue; - self.bufferProgressView.zf_width = self.bgProgressView.zf_width * bufferValue; -} - -- (void)setAllowTapped:(BOOL)allowTapped { - _allowTapped = allowTapped; - if (!allowTapped) { - [self removeGestureRecognizer:self.tapGesture]; - } -} - -- (void)setSliderHeight:(CGFloat)sliderHeight { - if (isnan(sliderHeight)) return; - _sliderHeight = sliderHeight; - self.bgProgressView.zf_height = sliderHeight; - self.bufferProgressView.zf_height = sliderHeight; - self.sliderProgressView.zf_height = sliderHeight; -} - -- (void)setSliderRadius:(CGFloat)sliderRadius { - if (isnan(sliderRadius)) return; - _sliderRadius = sliderRadius; - self.bgProgressView.layer.cornerRadius = sliderRadius; - self.bufferProgressView.layer.cornerRadius = sliderRadius; - self.sliderProgressView.layer.cornerRadius = sliderRadius; - self.bgProgressView.layer.masksToBounds = YES; - self.bufferProgressView.layer.masksToBounds = YES; - self.sliderProgressView.layer.masksToBounds = YES; -} - -- (void)setIsHideSliderBlock:(BOOL)isHideSliderBlock { - _isHideSliderBlock = isHideSliderBlock; - // 隐藏滑块,滑杆不可点击 - if (isHideSliderBlock) { - self.sliderBtn.hidden = YES; - self.bgProgressView.zf_left = 0; - self.bufferProgressView.zf_left = 0; - self.sliderProgressView.zf_left = 0; - self.allowTapped = NO; - } -} - -/** - * Starts animation of the spinner. - */ -- (void)startAnimating { - if (self.isLoading) return; - self.isLoading = YES; - self.bufferProgressView.hidden = YES; - self.sliderProgressView.hidden = YES; - self.sliderBtn.hidden = YES; - self.loadingBarView.hidden = NO; - - [self.loadingBarView.layer removeAllAnimations]; - CAAnimationGroup *animationGroup = [[CAAnimationGroup alloc] init]; - animationGroup.duration = 0.4; - animationGroup.beginTime = CACurrentMediaTime() + 0.4; - animationGroup.repeatCount = MAXFLOAT; - animationGroup.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; - - CABasicAnimation *scaleAnimation = [CABasicAnimation animation]; - scaleAnimation.keyPath = @"transform.scale.x"; - scaleAnimation.fromValue = @(1000.0f); - scaleAnimation.toValue = @(self.zf_width * 10); - - CABasicAnimation *alphaAnimation = [CABasicAnimation animation]; - alphaAnimation.keyPath = @"opacity"; - alphaAnimation.fromValue = @(1.0f); - alphaAnimation.toValue = @(0.0f); - - [animationGroup setAnimations:@[scaleAnimation, alphaAnimation]]; - [self.loadingBarView.layer addAnimation:animationGroup forKey:@"loading"]; -} - -/** - * Stops animation of the spinnner. - */ -- (void)stopAnimating { - self.isLoading = NO; - self.bufferProgressView.hidden = NO; - self.sliderProgressView.hidden = NO; - self.sliderBtn.hidden = self.isHideSliderBlock; - self.loadingBarView.hidden = YES; - [self.loadingBarView.layer removeAllAnimations]; -} - -#pragma mark - User Action - -- (void)sliderGesture:(UIGestureRecognizer *)gesture { - switch (gesture.state) { - case UIGestureRecognizerStateBegan: { - [self sliderBtnTouchBegin:self.sliderBtn]; - } - break; - case UIGestureRecognizerStateChanged: { - [self sliderBtnDragMoving:self.sliderBtn point:[gesture locationInView:self.bgProgressView]]; - } - break; - case UIGestureRecognizerStateEnded: { - [self sliderBtnTouchEnded:self.sliderBtn]; - } - break; - default: - break; - } -} - -- (void)sliderBtnTouchBegin:(UIButton *)btn { - if ([self.delegate respondsToSelector:@selector(sliderTouchBegan:)]) { - [self.delegate sliderTouchBegan:self.value]; - } - if (self.animate) { - [UIView animateWithDuration:kAnimate animations:^{ - btn.transform = CGAffineTransformMakeScale(1.2, 1.2); - }]; - } -} - -- (void)sliderBtnTouchEnded:(UIButton *)btn { - if ([self.delegate respondsToSelector:@selector(sliderTouchEnded:)]) { - [self.delegate sliderTouchEnded:self.value]; - } - if (self.animate) { - [UIView animateWithDuration:kAnimate animations:^{ - btn.transform = CGAffineTransformIdentity; - }]; - } -} - -- (void)sliderBtnDragMoving:(UIButton *)btn point:(CGPoint)touchPoint { - // 点击的位置 - CGPoint point = touchPoint; - // 获取进度值 由于btn是从 0-(self.width - btn.width) - CGFloat value = (point.x - btn.zf_width * 0.5) / self.bgProgressView.zf_width; - // value的值需在0-1之间 - value = value >= 1.0 ? 1.0 : value <= 0.0 ? 0.0 : value; - if (self.value == value) return; - self.isForward = self.value < value; - self.value = value; - if ([self.delegate respondsToSelector:@selector(sliderValueChanged:)]) { - [self.delegate sliderValueChanged:value]; - } -} - -- (void)tapped:(UITapGestureRecognizer *)tap { - CGPoint point = [tap locationInView:self.bgProgressView]; - // 获取进度 - CGFloat value = (point.x - self.sliderBtn.zf_width * 0.5) * 1.0 / self.bgProgressView.zf_width; - value = value >= 1.0 ? 1.0 : value <= 0 ? 0 : value; - self.value = value; - if ([self.delegate respondsToSelector:@selector(sliderTapped:)]) { - [self.delegate sliderTapped:value]; - } -} - -#pragma mark - getter - -- (UIView *)bgProgressView { - if (!_bgProgressView) { - _bgProgressView = [UIImageView new]; - _bgProgressView.backgroundColor = [UIColor grayColor]; - _bgProgressView.contentMode = UIViewContentModeScaleAspectFill; - _bgProgressView.clipsToBounds = YES; - } - return _bgProgressView; -} - -- (UIView *)bufferProgressView { - if (!_bufferProgressView) { - _bufferProgressView = [UIImageView new]; - _bufferProgressView.backgroundColor = [UIColor whiteColor]; - _bufferProgressView.contentMode = UIViewContentModeScaleAspectFill; - _bufferProgressView.clipsToBounds = YES; - } - return _bufferProgressView; -} - -- (UIView *)sliderProgressView { - if (!_sliderProgressView) { - _sliderProgressView = [UIImageView new]; - _sliderProgressView.backgroundColor = [UIColor redColor]; - _sliderProgressView.contentMode = UIViewContentModeScaleAspectFill; - _sliderProgressView.clipsToBounds = YES; - } - return _sliderProgressView; -} - -- (ZFSliderButton *)sliderBtn { - if (!_sliderBtn) { - _sliderBtn = [ZFSliderButton buttonWithType:UIButtonTypeCustom]; - [_sliderBtn setAdjustsImageWhenHighlighted:NO]; - } - return _sliderBtn; -} - -- (UIView *)loadingBarView { - if (!_loadingBarView) { - _loadingBarView = [[UIView alloc] init]; - _loadingBarView.backgroundColor = [UIColor whiteColor]; - _loadingBarView.hidden = YES; - } - return _loadingBarView; -} - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFSmallFloatControlView.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFSmallFloatControlView.h deleted file mode 100644 index 96437d9..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFSmallFloatControlView.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// ZFSmallFloatControlView.h -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 - -@interface ZFSmallFloatControlView : UIView - -@property (nonatomic, copy, nullable) void(^closeClickCallback)(void); - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFSmallFloatControlView.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFSmallFloatControlView.m deleted file mode 100644 index 11cbf64..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFSmallFloatControlView.m +++ /dev/null @@ -1,72 +0,0 @@ -// -// ZFSmallFloatControlView.m -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "ZFSmallFloatControlView.h" -#import "ZFUtilities.h" - -@interface ZFSmallFloatControlView () - -@property (nonatomic, strong) UIButton *closeBtn; - -@end - -@implementation ZFSmallFloatControlView - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self addSubview:self.closeBtn]; - } - return self; -} - -- (void)layoutSubviews { - [super layoutSubviews]; - CGFloat min_x = 0; - CGFloat min_y = 0; - CGFloat min_w = 0; - CGFloat min_h = 0; - CGFloat min_view_w = self.bounds.size.width; - - min_x = min_view_w-20; - min_y = -10; - min_w = 30; - min_h = min_w; - self.closeBtn.frame = CGRectMake(min_x, min_y, min_w, min_h); -} - -- (void)closeBtnClick:(UIButton *)sender { - if (self.closeClickCallback) self.closeClickCallback(); -} - -- (UIButton *)closeBtn { - if (!_closeBtn) { - _closeBtn = [UIButton buttonWithType:UIButtonTypeCustom]; - [_closeBtn setImage:ZFPlayer_Image(@"ZFPlayer_close") forState:UIControlStateNormal]; - [_closeBtn addTarget:self action:@selector(closeBtnClick:) forControlEvents:UIControlEventTouchUpInside]; - } - return _closeBtn; -} - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFSpeedLoadingView.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFSpeedLoadingView.h deleted file mode 100644 index a8bffc0..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFSpeedLoadingView.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// ZFSpeedLoadingView.h -// Pods-ZFPlayer_Example -// -// Created by 紫枫 on 2018/6/27. -// - -#import -#import "ZFLoadingView.h" - -@interface ZFSpeedLoadingView : UIView - -@property (nonatomic, strong) ZFLoadingView *loadingView; - -@property (nonatomic, strong) UILabel *speedTextLabel; - -/** - * Starts animation of the spinner. - */ -- (void)startAnimating; - -/** - * Stops animation of the spinnner. - */ -- (void)stopAnimating; - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFSpeedLoadingView.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFSpeedLoadingView.m deleted file mode 100644 index c8a5bb9..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFSpeedLoadingView.m +++ /dev/null @@ -1,117 +0,0 @@ -// -// ZFSpeedLoadingView.m -// Pods-ZFPlayer_Example -// -// Created by 紫枫 on 2018/6/27. -// - -#import "ZFSpeedLoadingView.h" -#import "ZFNetworkSpeedMonitor.h" -#import "UIView+ZFFrame.h" - -@interface ZFSpeedLoadingView () - -@property (nonatomic, strong) ZFNetworkSpeedMonitor *speedMonitor; - -@end - -@implementation ZFSpeedLoadingView - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self initialize]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - if (self = [super initWithCoder:aDecoder]) { - [self initialize]; - } - return self; -} - -- (void)awakeFromNib { - [super awakeFromNib]; - [self initialize]; -} - -- (void)initialize { - self.userInteractionEnabled = NO; - [self addSubview:self.loadingView]; - [self addSubview:self.speedTextLabel]; - [self.speedMonitor startNetworkSpeedMonitor]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkSpeedChanged:) name:ZFDownloadNetworkSpeedNotificationKey object:nil]; -} - -- (void)dealloc { - [self.speedMonitor stopNetworkSpeedMonitor]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:ZFDownloadNetworkSpeedNotificationKey object:nil]; -} - -- (void)layoutSubviews { - [super layoutSubviews]; - CGFloat min_x = 0; - CGFloat min_y = 0; - CGFloat min_w = 0; - CGFloat min_h = 0; - CGFloat min_view_w = self.zf_width; - CGFloat min_view_h = self.zf_height; - - min_w = 44; - min_h = min_w; - min_x = (min_view_w - min_w) / 2; - min_y = (min_view_h - min_h) / 2 - 10; - self.loadingView.frame = CGRectMake(min_x, min_y, min_w, min_h); - - min_x = 0; - min_y = self.loadingView.zf_bottom+5; - min_w = min_view_w; - min_h = 20; - self.speedTextLabel.frame = CGRectMake(min_x, min_y, min_w, min_h); -} - -- (void)networkSpeedChanged:(NSNotification *)sender { - NSString *downloadSpped = [sender.userInfo objectForKey:ZFNetworkSpeedNotificationKey]; - self.speedTextLabel.text = downloadSpped; -} - -- (void)startAnimating { - [self.loadingView startAnimating]; - self.hidden = NO; -} - -- (void)stopAnimating { - [self.loadingView stopAnimating]; - self.hidden = YES; -} - -- (UILabel *)speedTextLabel { - if (!_speedTextLabel) { - _speedTextLabel = [UILabel new]; - _speedTextLabel.textColor = [UIColor whiteColor]; - _speedTextLabel.font = [UIFont systemFontOfSize:12.0]; - _speedTextLabel.textAlignment = NSTextAlignmentCenter; - } - return _speedTextLabel; -} - -- (ZFNetworkSpeedMonitor *)speedMonitor { - if (!_speedMonitor) { - _speedMonitor = [[ZFNetworkSpeedMonitor alloc] init]; - } - return _speedMonitor; -} - -- (ZFLoadingView *)loadingView { - if (!_loadingView) { - _loadingView = [[ZFLoadingView alloc] init]; - _loadingView.lineWidth = 0.8; - _loadingView.duration = 1; - _loadingView.hidesWhenStopped = YES; - } - return _loadingView; -} - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFUtilities.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFUtilities.h deleted file mode 100644 index a9eab51..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFUtilities.h +++ /dev/null @@ -1,47 +0,0 @@ -// -// ZFUtilities.m -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 -#import - -/// iPhoneX iPhoneXS iPhoneXS Max iPhoneXR 机型判断 -#define iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? ((NSInteger)(([[UIScreen mainScreen] currentMode].size.height/[[UIScreen mainScreen] currentMode].size.width)*100) == 216) : NO) - -#define ZFPlayer_Image(file) [ZFUtilities imageNamed:file] - -// 屏幕的宽 -#define ZFPlayer_ScreenWidth [[UIScreen mainScreen] bounds].size.width -// 屏幕的高 -#define ZFPlayer_ScreenHeight [[UIScreen mainScreen] bounds].size.height - -@interface ZFUtilities : NSObject - -+ (NSString *)convertTimeSecond:(NSInteger)timeSecond; - -+ (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size; - -+ (UIImage *)imageNamed:(NSString *)name; - -@end - diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFUtilities.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFUtilities.m deleted file mode 100644 index 55b0dd5..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFUtilities.m +++ /dev/null @@ -1,74 +0,0 @@ -// -// ZFUtilities.m -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "ZFUtilities.h" - -@implementation ZFUtilities - -+ (NSString *)convertTimeSecond:(NSInteger)timeSecond { - NSString *theLastTime = nil; - long second = timeSecond; - if (timeSecond < 60) { - theLastTime = [NSString stringWithFormat:@"00:%02zd", second]; - } else if(timeSecond >= 60 && timeSecond < 3600){ - theLastTime = [NSString stringWithFormat:@"%02zd:%02zd", second/60, second%60]; - } else if(timeSecond >= 3600){ - theLastTime = [NSString stringWithFormat:@"%02zd:%02zd:%02zd", second/3600, second%3600/60, second%60]; - } - return theLastTime; -} - -+ (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size { - if (!color || size.width <= 0 || size.height <= 0) return nil; - CGRect rect = CGRectMake(0.0f, 0.0f, size.width, size.height); - UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0); - CGContextRef context = UIGraphicsGetCurrentContext(); - CGContextSetFillColorWithColor(context, color.CGColor); - CGContextFillRect(context, rect); - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return image; -} - -+ (NSBundle *)bundle { - static NSBundle *bundle = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - bundle = [NSBundle bundleWithPath:[[NSBundle bundleForClass:[self class]] pathForResource:@"ZFPlayer" ofType:@"bundle"]]; - }); - return bundle; -} - -+ (UIImage *)imageNamed:(NSString *)name { - if (name.length == 0) return nil; - int scale = (int)UIScreen.mainScreen.scale; - if (scale < 2) scale = 2; - else if (scale > 3) scale = 3; - NSString *n = [NSString stringWithFormat:@"%@@%dx", name, scale]; - UIImage *image = [UIImage imageWithContentsOfFile:[self.bundle pathForResource:n ofType:@"png"]]; - if (!image) image = [UIImage imageWithContentsOfFile:[self.bundle pathForResource:name ofType:@"png"]]; - return image; -} - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFVolumeBrightnessView.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFVolumeBrightnessView.h deleted file mode 100644 index 065b086..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFVolumeBrightnessView.h +++ /dev/null @@ -1,46 +0,0 @@ -// -// ZFVolumeBrightnessView.h -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 - -typedef NS_ENUM(NSInteger, ZFVolumeBrightnessType) { - ZFVolumeBrightnessTypeVolume, // volume - ZFVolumeBrightnessTypeumeBrightness // brightness -}; - -@interface ZFVolumeBrightnessView : UIView - -@property (nonatomic, assign, readonly) ZFVolumeBrightnessType volumeBrightnessType; -@property (nonatomic, strong, readonly) UIProgressView *progressView; -@property (nonatomic, strong, readonly) UIImageView *iconImageView; - -- (void)updateProgress:(CGFloat)progress withVolumeBrightnessType:(ZFVolumeBrightnessType)volumeBrightnessType; - -/// 添加系统音量view -- (void)addSystemVolumeView; - -/// 移除系统音量view -- (void)removeSystemVolumeView; - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFVolumeBrightnessView.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFVolumeBrightnessView.m deleted file mode 100644 index 1fe4e4a..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFVolumeBrightnessView.m +++ /dev/null @@ -1,162 +0,0 @@ -// -// ZFVolumeBrightnessView.m -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "ZFVolumeBrightnessView.h" -#import -#import "ZFUtilities.h" - -@interface ZFVolumeBrightnessView () - -@property (nonatomic, strong) UIProgressView *progressView; -@property (nonatomic, strong) UIImageView *iconImageView; -@property (nonatomic, assign) ZFVolumeBrightnessType volumeBrightnessType; -@property (nonatomic, strong) MPVolumeView *volumeView; - -@end - -@implementation ZFVolumeBrightnessView - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self addSubview:self.iconImageView]; - [self addSubview:self.progressView]; - [self hideTipView]; - } - return self; -} - -- (void)dealloc { - [self addSystemVolumeView]; -} - -- (void)layoutSubviews { - [super layoutSubviews]; - CGFloat min_x = 0; - CGFloat min_y = 0; - CGFloat min_w = 0; - CGFloat min_h = 0; - CGFloat min_view_w = self.frame.size.width; - CGFloat min_view_h = self.frame.size.height; - CGFloat margin = 10; - - min_x = margin; - min_w = 20; - min_h = min_w; - min_y = (min_view_h-min_h)/2; - self.iconImageView.frame = CGRectMake(min_x, min_y, min_w, min_h); - - min_x = CGRectGetMaxX(self.iconImageView.frame) + margin; - min_h = 2; - min_y = (min_view_h-min_h)/2; - min_w = min_view_w - min_x - margin; - self.progressView.frame = CGRectMake(min_x, min_y, min_w, min_h); - - self.layer.cornerRadius = min_view_h/2; - self.layer.masksToBounds = YES; -} - -- (void)hideTipView { - [UIView animateWithDuration:0.5 animations:^{ - self.alpha = 0; - } completion:^(BOOL finished) { - self.hidden = YES; - }]; -} - -/// 添加系统音量view -- (void)addSystemVolumeView { - [self.volumeView removeFromSuperview]; -} - -/// 移除系统音量view -- (void)removeSystemVolumeView { - [[UIApplication sharedApplication].keyWindow addSubview:self.volumeView]; -} - -- (void)updateProgress:(CGFloat)progress withVolumeBrightnessType:(ZFVolumeBrightnessType)volumeBrightnessType { - if (progress >= 1) { - progress = 1; - } else if (progress <= 0) { - progress = 0; - } - self.progressView.progress = progress; - self.volumeBrightnessType = volumeBrightnessType; - UIImage *playerImage = nil; - if (volumeBrightnessType == ZFVolumeBrightnessTypeVolume) { - if (progress == 0) { - playerImage = ZFPlayer_Image(@"ZFPlayer_muted"); - } else if (progress > 0 && progress < 0.5) { - playerImage = ZFPlayer_Image(@"ZFPlayer_volume_low"); - } else { - playerImage = ZFPlayer_Image(@"ZFPlayer_volume_high"); - } - } else if (volumeBrightnessType == ZFVolumeBrightnessTypeumeBrightness) { - if (progress >= 0 && progress < 0.5) { - playerImage = ZFPlayer_Image(@"ZFPlayer_brightness_low"); - } else { - playerImage = ZFPlayer_Image(@"ZFPlayer_brightness_high"); - } - } - self.iconImageView.image = playerImage; - self.hidden = NO; - self.alpha = 1; - [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(hideTipView) object:nil]; - [self performSelector:@selector(hideTipView) withObject:nil afterDelay:1.5]; -} - -- (void)setVolumeBrightnessType:(ZFVolumeBrightnessType)volumeBrightnessType { - _volumeBrightnessType = volumeBrightnessType; - if (volumeBrightnessType == ZFVolumeBrightnessTypeVolume) { - self.iconImageView.image = ZFPlayer_Image(@"ZFPlayer_volume"); - } else { - self.iconImageView.image = ZFPlayer_Image(@"ZFPlayer_brightness"); - } -} - -- (UIProgressView *)progressView { - if (!_progressView) { - _progressView = [[UIProgressView alloc] init]; - _progressView.progressTintColor = [UIColor whiteColor]; - _progressView.trackTintColor = [[UIColor lightGrayColor] colorWithAlphaComponent:0.4];; - } - return _progressView; -} - -- (UIImageView *)iconImageView { - if (!_iconImageView) { - _iconImageView = [UIImageView new]; - } - return _iconImageView; -} - -- (MPVolumeView *)volumeView { - if (!_volumeView) { - _volumeView = [[MPVolumeView alloc] init]; - _volumeView.frame = CGRectMake(-1000, -1000, 100, 100); - } - return _volumeView; -} - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/UIScrollView+ZFPlayer.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/UIScrollView+ZFPlayer.h deleted file mode 100644 index 0338d86..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/UIScrollView+ZFPlayer.h +++ /dev/null @@ -1,244 +0,0 @@ -// -// UIScrollView+ZFPlayer.h -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 - -NS_ASSUME_NONNULL_BEGIN - -/* - * The scroll direction of scrollView. - */ -typedef NS_ENUM(NSUInteger, ZFPlayerScrollDirection) { - ZFPlayerScrollDirectionNone, - ZFPlayerScrollDirectionUp, // Scroll up - ZFPlayerScrollDirectionDown, // Scroll Down - ZFPlayerScrollDirectionLeft, // Scroll left - ZFPlayerScrollDirectionRight // Scroll right -}; - -/* - * The scrollView direction. - */ -typedef NS_ENUM(NSInteger, ZFPlayerScrollViewDirection) { - ZFPlayerScrollViewDirectionVertical, - ZFPlayerScrollViewDirectionHorizontal -}; - -/* - * The player container type - */ -typedef NS_ENUM(NSInteger, ZFPlayerContainerType) { - ZFPlayerContainerTypeView, - ZFPlayerContainerTypeCell -}; - -typedef NS_ENUM(NSInteger , ZFPlayerScrollViewScrollPosition) { - ZFPlayerScrollViewScrollPositionNone, - /// Apply to UITableView and UICollectionViewDirection is vertical scrolling. - ZFPlayerScrollViewScrollPositionTop, - ZFPlayerScrollViewScrollPositionCenteredVertically, - ZFPlayerScrollViewScrollPositionBottom, - - /// Only apply to UICollectionViewDirection is horizontal scrolling. - ZFPlayerScrollViewScrollPositionLeft, - ZFPlayerScrollViewScrollPositionCenteredHorizontally, - ZFPlayerScrollViewScrollPositionRight -}; - -@interface UIScrollView (ZFPlayer) - -/// When the ZFPlayerScrollViewDirection is ZFPlayerScrollViewDirectionVertical,the property has value. -@property (nonatomic, readonly) CGFloat zf_lastOffsetY; - -/// When the ZFPlayerScrollViewDirection is ZFPlayerScrollViewDirectionHorizontal,the property has value. -@property (nonatomic, readonly) CGFloat zf_lastOffsetX; - -/// The scrollView scroll direction, default is ZFPlayerScrollViewDirectionVertical. -@property (nonatomic) ZFPlayerScrollViewDirection zf_scrollViewDirection; - -/// The scroll direction of scrollView while scrolling. -/// When the ZFPlayerScrollViewDirection is ZFPlayerScrollViewDirectionVertical,this value can only be ZFPlayerScrollDirectionUp or ZFPlayerScrollDirectionDown. -/// When the ZFPlayerScrollViewDirection is ZFPlayerScrollViewDirectionHorizontal,this value can only be ZFPlayerScrollDirectionLeft or ZFPlayerScrollDirectionRight. -@property (nonatomic, readonly) ZFPlayerScrollDirection zf_scrollDirection; - -/// Get the cell according to indexPath. -- (UIView *)zf_getCellForIndexPath:(NSIndexPath *)indexPath; - -/// Get the indexPath for cell. -- (NSIndexPath *)zf_getIndexPathForCell:(UIView *)cell; - -/** -Scroll to indexPath with position. - -@param indexPath scroll the indexPath. -@param scrollPosition scrollView scroll position. -@param animated animate. -@param completionHandler Scroll completion callback. -*/ -- (void)zf_scrollToRowAtIndexPath:(NSIndexPath *)indexPath - atScrollPosition:(ZFPlayerScrollViewScrollPosition)scrollPosition - animated:(BOOL)animated - completionHandler:(void (^ __nullable)(void))completionHandler; - -/** -Scroll to indexPath with position. - -@param indexPath scroll the indexPath. -@param scrollPosition scrollView scroll position. -@param duration animate duration. -@param completionHandler Scroll completion callback. -*/ -- (void)zf_scrollToRowAtIndexPath:(NSIndexPath *)indexPath - atScrollPosition:(ZFPlayerScrollViewScrollPosition)scrollPosition - animateDuration:(NSTimeInterval)duration - completionHandler:(void (^ __nullable)(void))completionHandler; - -///------------------------------------ -/// The following method must be implemented in UIScrollViewDelegate. -///------------------------------------ - -- (void)zf_scrollViewDidEndDecelerating; - -- (void)zf_scrollViewDidEndDraggingWillDecelerate:(BOOL)decelerate; - -- (void)zf_scrollViewDidScrollToTop; - -- (void)zf_scrollViewDidScroll; - -- (void)zf_scrollViewWillBeginDragging; - -///------------------------------------ -/// end -///------------------------------------ - - -@end - -@interface UIScrollView (ZFPlayerCannotCalled) - -/// The block invoked When the player appearing. -@property (nonatomic, copy, nullable) void(^zf_playerAppearingInScrollView)(NSIndexPath *indexPath, CGFloat playerApperaPercent); - -/// The block invoked When the player disappearing. -@property (nonatomic, copy, nullable) void(^zf_playerDisappearingInScrollView)(NSIndexPath *indexPath, CGFloat playerDisapperaPercent); - -/// The block invoked When the player will appeared. -@property (nonatomic, copy, nullable) void(^zf_playerWillAppearInScrollView)(NSIndexPath *indexPath); - -/// The block invoked When the player did appeared. -@property (nonatomic, copy, nullable) void(^zf_playerDidAppearInScrollView)(NSIndexPath *indexPath); - -/// The block invoked When the player will disappear. -@property (nonatomic, copy, nullable) void(^zf_playerWillDisappearInScrollView)(NSIndexPath *indexPath); - -/// The block invoked When the player did disappeared. -@property (nonatomic, copy, nullable) void(^zf_playerDidDisappearInScrollView)(NSIndexPath *indexPath); - -/// The block invoked When the player did stop scroll. -@property (nonatomic, copy, nullable) void(^zf_scrollViewDidEndScrollingCallback)(NSIndexPath *indexPath); - -/// The block invoked When the player did scroll. -@property (nonatomic, copy, nullable) void(^zf_scrollViewDidScrollCallback)(NSIndexPath *indexPath); - -/// The block invoked When the player should play. -@property (nonatomic, copy, nullable) void(^zf_playerShouldPlayInScrollView)(NSIndexPath *indexPath); - -/// The current player scroll slides off the screen percent. -/// the property used when the `stopWhileNotVisible` is YES, stop the current playing player. -/// the property used when the `stopWhileNotVisible` is NO, the current playing player add to small container view. -/// 0.0~1.0, defalut is 0.5. -/// 0.0 is the player will disappear. -/// 1.0 is the player did disappear. -@property (nonatomic) CGFloat zf_playerDisapperaPercent; - -/// The current player scroll to the screen percent to play the video. -/// 0.0~1.0, defalut is 0.0. -/// 0.0 is the player will appear. -/// 1.0 is the player did appear. -@property (nonatomic) CGFloat zf_playerApperaPercent; - -/// The current player controller is disappear, not dealloc -@property (nonatomic) BOOL zf_viewControllerDisappear; - -/// Has stopped playing -@property (nonatomic, assign) BOOL zf_stopPlay; - -/// The currently playing cell stop playing when the cell has out off the screen,defalut is YES. -@property (nonatomic, assign) BOOL zf_stopWhileNotVisible; - -/// The indexPath is playing. -@property (nonatomic, nullable) NSIndexPath *zf_playingIndexPath; - -/// The indexPath should be play while scrolling. -@property (nonatomic, nullable) NSIndexPath *zf_shouldPlayIndexPath; - -/// WWANA networks play automatically,default NO. -@property (nonatomic, getter=zf_isWWANAutoPlay) BOOL zf_WWANAutoPlay; - -/// The player should auto player,default is YES. -@property (nonatomic) BOOL zf_shouldAutoPlay; - -/// The view tag that the player display in scrollView. -@property (nonatomic) NSInteger zf_containerViewTag; - -/// The video contrainerView in normal model. -@property (nonatomic, strong) UIView *zf_containerView; - -/// The video contrainerView type. -@property (nonatomic, assign) ZFPlayerContainerType zf_containerType; - -/// Filter the cell that should be played when the scroll is stopped (to play when the scroll is stopped). -- (void)zf_filterShouldPlayCellWhileScrolled:(void (^ __nullable)(NSIndexPath *indexPath))handler; - -/// Filter the cell that should be played while scrolling (you can use this to filter the highlighted cell). -- (void)zf_filterShouldPlayCellWhileScrolling:(void (^ __nullable)(NSIndexPath *indexPath))handler; - -@end - -@interface UIScrollView (ZFPlayerDeprecated) - -/// The block invoked When the player did stop scroll. -@property (nonatomic, copy, nullable) void(^zf_scrollViewDidStopScrollCallback)(NSIndexPath *indexPath) __attribute__((deprecated("use `ZFPlayerController.zf_scrollViewDidEndScrollingCallback` instead."))); - -/// The block invoked When the player should play. -@property (nonatomic, copy, nullable) void(^zf_shouldPlayIndexPathCallback)(NSIndexPath *indexPath) __attribute__((deprecated("use `ZFPlayerController.zf_playerShouldPlayInScrollView` instead."))); - - -/// Scroll to indexPath position `ZFPlayerScrollViewScrollPositionTop` with animations. -- (void)zf_scrollToRowAtIndexPath:(NSIndexPath *)indexPath - completionHandler:(void (^ __nullable)(void))completionHandler __attribute__((deprecated("use `zf_scrollToRowAtIndexPath:atScrollPosition:animated:completionHandler:` instead."))); - -/// Scroll to indexPath position `ZFPlayerScrollViewScrollPositionTop` with animations. -- (void)zf_scrollToRowAtIndexPath:(NSIndexPath *)indexPath - animated:(BOOL)animated - completionHandler:(void (^ __nullable)(void))completionHandler __attribute__((deprecated("use `zf_scrollToRowAtIndexPath:atScrollPosition:animated:completionHandler:` instead."))); - -/// Scroll to indexPath position `ZFPlayerScrollViewScrollPositionTop` with animations. -- (void)zf_scrollToRowAtIndexPath:(NSIndexPath *)indexPath - animateWithDuration:(NSTimeInterval)duration - completionHandler:(void (^ __nullable)(void))completionHandler __attribute__((deprecated("use `zf_scrollToRowAtIndexPath:atScrollPosition:animateDuration:completionHandler:` instead."))); - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/UIScrollView+ZFPlayer.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/UIScrollView+ZFPlayer.m deleted file mode 100644 index ca4acbb..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/UIScrollView+ZFPlayer.m +++ /dev/null @@ -1,915 +0,0 @@ -// -// UIScrollView+ZFPlayer.m -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "UIScrollView+ZFPlayer.h" -#import -#import "ZFReachabilityManager.h" -#import "ZFPlayerConst.h" - -#pragma clang diagnostic push -#pragma clang diagnostic ignored"-Wdeprecated-declarations" - -@interface UIScrollView () - -@property (nonatomic) CGFloat zf_lastOffsetY; -@property (nonatomic) CGFloat zf_lastOffsetX; -@property (nonatomic) ZFPlayerScrollDirection zf_scrollDirection; - -@end - -@implementation UIScrollView (ZFPlayer) - -#pragma mark - public method - -- (UIView *)zf_getCellForIndexPath:(NSIndexPath *)indexPath { - if ([self _isTableView]) { - UITableView *tableView = (UITableView *)self; - UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; - return cell; - } else if ([self _isCollectionView]) { - UICollectionView *collectionView = (UICollectionView *)self; - UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath]; - return cell; - } - return nil; -} - -- (NSIndexPath *)zf_getIndexPathForCell:(UIView *)cell { - if ([self _isTableView]) { - UITableView *tableView = (UITableView *)self; - NSIndexPath *indexPath = [tableView indexPathForCell:(UITableViewCell *)cell]; - return indexPath; - } else if ([self _isCollectionView]) { - UICollectionView *collectionView = (UICollectionView *)self; - NSIndexPath *indexPath = [collectionView indexPathForCell:(UICollectionViewCell *)cell]; - return indexPath; - } - return nil; -} - -/** -Scroll to indexPath with position. - -@param indexPath scroll the indexPath. -@param scrollPosition scrollView scroll position. -@param animated animate. -@param completionHandler Scroll completion callback. -*/ -- (void)zf_scrollToRowAtIndexPath:(NSIndexPath *)indexPath - atScrollPosition:(ZFPlayerScrollViewScrollPosition)scrollPosition - animated:(BOOL)animated - completionHandler:(void (^ __nullable)(void))completionHandler { - [self zf_scrollToRowAtIndexPath:indexPath atScrollPosition:scrollPosition animateDuration:animated ? 0.4 : 0.0 completionHandler:completionHandler]; -} - -- (void)zf_scrollToRowAtIndexPath:(NSIndexPath *)indexPath - atScrollPosition:(ZFPlayerScrollViewScrollPosition)scrollPosition - animateDuration:(NSTimeInterval)duration - completionHandler:(void (^ __nullable)(void))completionHandler { - BOOL animated = duration > 0.0; - if ([self _isTableView]) { - UITableView *tableView = (UITableView *)self; - UITableViewScrollPosition tableScrollPosition = UITableViewScrollPositionNone; - if (scrollPosition <= ZFPlayerScrollViewScrollPositionBottom) { - tableScrollPosition = (UITableViewScrollPosition)scrollPosition; - } - [tableView scrollToRowAtIndexPath:indexPath atScrollPosition:tableScrollPosition animated:animated]; - } else if ([self _isCollectionView]) { - UICollectionView *collectionView = (UICollectionView *)self; - if (self.zf_scrollViewDirection == ZFPlayerScrollViewDirectionVertical) { - UICollectionViewScrollPosition collectionScrollPosition = UICollectionViewScrollPositionNone; - switch (scrollPosition) { - case ZFPlayerScrollViewScrollPositionNone: - collectionScrollPosition = UICollectionViewScrollPositionNone; - break; - case ZFPlayerScrollViewScrollPositionTop: - collectionScrollPosition = UICollectionViewScrollPositionTop; - break; - case ZFPlayerScrollViewScrollPositionCenteredVertically: - collectionScrollPosition = UICollectionViewScrollPositionCenteredVertically; - break; - case ZFPlayerScrollViewScrollPositionBottom: - collectionScrollPosition = UICollectionViewScrollPositionBottom; - break; - default: - break; - } - [collectionView scrollToItemAtIndexPath:indexPath atScrollPosition:collectionScrollPosition animated:animated]; - } else if (self.zf_scrollViewDirection == ZFPlayerScrollViewDirectionHorizontal) { - UICollectionViewScrollPosition collectionScrollPosition = UICollectionViewScrollPositionNone; - switch (scrollPosition) { - case ZFPlayerScrollViewScrollPositionNone: - collectionScrollPosition = UICollectionViewScrollPositionNone; - break; - case ZFPlayerScrollViewScrollPositionLeft: - collectionScrollPosition = UICollectionViewScrollPositionLeft; - break; - case ZFPlayerScrollViewScrollPositionCenteredHorizontally: - collectionScrollPosition = UICollectionViewScrollPositionCenteredHorizontally; - break; - case ZFPlayerScrollViewScrollPositionRight: - collectionScrollPosition = UICollectionViewScrollPositionRight; - break; - default: - break; - } - [collectionView scrollToItemAtIndexPath:indexPath atScrollPosition:collectionScrollPosition animated:animated]; - } - } - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - if (completionHandler) completionHandler(); - }); -} - -- (void)zf_scrollViewDidEndDecelerating { - BOOL scrollToScrollStop = !self.tracking && !self.dragging && !self.decelerating; - if (scrollToScrollStop) { - [self _scrollViewDidStopScroll]; - } -} - -- (void)zf_scrollViewDidEndDraggingWillDecelerate:(BOOL)decelerate { - if (!decelerate) { - BOOL dragToDragStop = self.tracking && !self.dragging && !self.decelerating; - if (dragToDragStop) { - [self _scrollViewDidStopScroll]; - } - } -} - -- (void)zf_scrollViewDidScrollToTop { - [self _scrollViewDidStopScroll]; -} - -- (void)zf_scrollViewDidScroll { - if (self.zf_scrollViewDirection == ZFPlayerScrollViewDirectionVertical) { - [self _findCorrectCellWhenScrollViewDirectionVertical:nil]; - [self _scrollViewScrollingDirectionVertical]; - } else { - [self _findCorrectCellWhenScrollViewDirectionHorizontal:nil]; - [self _scrollViewScrollingDirectionHorizontal]; - } -} - -- (void)zf_scrollViewWillBeginDragging { - [self _scrollViewBeginDragging]; -} - -#pragma mark - private method - -- (void)_scrollViewDidStopScroll { - self.zf_scrollDirection = ZFPlayerScrollDirectionNone; - @zf_weakify(self) - [self zf_filterShouldPlayCellWhileScrolled:^(NSIndexPath * _Nonnull indexPath) { - @zf_strongify(self) - if (self.zf_scrollViewDidStopScrollCallback) self.zf_scrollViewDidStopScrollCallback(indexPath); - if (self.zf_scrollViewDidEndScrollingCallback) self.zf_scrollViewDidEndScrollingCallback(indexPath); - }]; -} - -- (void)_scrollViewBeginDragging { - if (self.zf_scrollViewDirection == ZFPlayerScrollViewDirectionVertical) { - self.zf_lastOffsetY = self.contentOffset.y; - } else { - self.zf_lastOffsetX = self.contentOffset.x; - } -} - -/** - The percentage of scrolling processed in vertical scrolling. - */ -- (void)_scrollViewScrollingDirectionVertical { - CGFloat offsetY = self.contentOffset.y; - self.zf_scrollDirection = (offsetY - self.zf_lastOffsetY > 0) ? ZFPlayerScrollDirectionUp : ZFPlayerScrollDirectionDown; - self.zf_lastOffsetY = offsetY; - if (self.zf_stopPlay) return; - - UIView *playerView; - if (self.zf_containerType == ZFPlayerContainerTypeCell) { - // Avoid being paused the first time you play it. - if (self.contentOffset.y < 0) return; - if (!self.zf_playingIndexPath) return; - - UIView *cell = [self zf_getCellForIndexPath:self.zf_playingIndexPath]; - if (!cell) { - if (self.zf_playerDidDisappearInScrollView) self.zf_playerDidDisappearInScrollView(self.zf_playingIndexPath); - return; - } - playerView = [cell viewWithTag:self.zf_containerViewTag]; - } else if (self.zf_containerType == ZFPlayerContainerTypeView) { - if (!self.zf_containerView) return; - playerView = self.zf_containerView; - } - - CGRect rect1 = [playerView convertRect:playerView.frame toView:self]; - CGRect rect = [self convertRect:rect1 toView:self.superview]; - /// playerView top to scrollView top space. - CGFloat topSpacing = CGRectGetMinY(rect) - CGRectGetMinY(self.frame) - CGRectGetMinY(playerView.frame); - /// playerView bottom to scrollView bottom space. - CGFloat bottomSpacing = CGRectGetMaxY(self.frame) - CGRectGetMaxY(rect) + CGRectGetMinY(playerView.frame); - /// The height of the content area. - CGFloat contentInsetHeight = CGRectGetMaxY(self.frame) - CGRectGetMinY(self.frame); - - CGFloat playerDisapperaPercent = 0; - CGFloat playerApperaPercent = 0; - - if (self.zf_scrollDirection == ZFPlayerScrollDirectionUp) { /// Scroll up - /// Player is disappearing. - if (topSpacing <= 0 && CGRectGetHeight(rect) != 0) { - playerDisapperaPercent = -topSpacing/CGRectGetHeight(rect); - if (playerDisapperaPercent > 1.0) playerDisapperaPercent = 1.0; - if (self.zf_playerDisappearingInScrollView) self.zf_playerDisappearingInScrollView(self.zf_playingIndexPath, playerDisapperaPercent); - } - - /// Top area - if (topSpacing <= 0 && topSpacing > -CGRectGetHeight(rect)/2) { - /// When the player will disappear. - if (self.zf_playerWillDisappearInScrollView) self.zf_playerWillDisappearInScrollView(self.zf_playingIndexPath); - } else if (topSpacing <= -CGRectGetHeight(rect)) { - /// When the player did disappeared. - if (self.zf_playerDidDisappearInScrollView) self.zf_playerDidDisappearInScrollView(self.zf_playingIndexPath); - } else if (topSpacing > 0 && topSpacing <= contentInsetHeight) { - /// Player is appearing. - if (CGRectGetHeight(rect) != 0) { - playerApperaPercent = -(topSpacing-contentInsetHeight)/CGRectGetHeight(rect); - if (playerApperaPercent > 1.0) playerApperaPercent = 1.0; - if (self.zf_playerAppearingInScrollView) self.zf_playerAppearingInScrollView(self.zf_playingIndexPath, playerApperaPercent); - } - /// In visable area - if (topSpacing <= contentInsetHeight && topSpacing > contentInsetHeight-CGRectGetHeight(rect)/2) { - /// When the player will appear. - if (self.zf_playerWillAppearInScrollView) self.zf_playerWillAppearInScrollView(self.zf_playingIndexPath); - } else { - /// When the player did appeared. - if (self.zf_playerDidAppearInScrollView) self.zf_playerDidAppearInScrollView(self.zf_playingIndexPath); - } - } - - } else if (self.zf_scrollDirection == ZFPlayerScrollDirectionDown) { /// Scroll Down - /// Player is disappearing. - if (bottomSpacing <= 0 && CGRectGetHeight(rect) != 0) { - playerDisapperaPercent = -bottomSpacing/CGRectGetHeight(rect); - if (playerDisapperaPercent > 1.0) playerDisapperaPercent = 1.0; - if (self.zf_playerDisappearingInScrollView) self.zf_playerDisappearingInScrollView(self.zf_playingIndexPath, playerDisapperaPercent); - } - - /// Bottom area - if (bottomSpacing <= 0 && bottomSpacing > -CGRectGetHeight(rect)/2) { - /// When the player will disappear. - if (self.zf_playerWillDisappearInScrollView) self.zf_playerWillDisappearInScrollView(self.zf_playingIndexPath); - } else if (bottomSpacing <= -CGRectGetHeight(rect)) { - /// When the player did disappeared. - if (self.zf_playerDidDisappearInScrollView) self.zf_playerDidDisappearInScrollView(self.zf_playingIndexPath); - } else if (bottomSpacing > 0 && bottomSpacing <= contentInsetHeight) { - /// Player is appearing. - if (CGRectGetHeight(rect) != 0) { - playerApperaPercent = -(bottomSpacing-contentInsetHeight)/CGRectGetHeight(rect); - if (playerApperaPercent > 1.0) playerApperaPercent = 1.0; - if (self.zf_playerAppearingInScrollView) self.zf_playerAppearingInScrollView(self.zf_playingIndexPath, playerApperaPercent); - } - /// In visable area - if (bottomSpacing <= contentInsetHeight && bottomSpacing > contentInsetHeight-CGRectGetHeight(rect)/2) { - /// When the player will appear. - if (self.zf_playerWillAppearInScrollView) self.zf_playerWillAppearInScrollView(self.zf_playingIndexPath); - } else { - /// When the player did appeared. - if (self.zf_playerDidAppearInScrollView) self.zf_playerDidAppearInScrollView(self.zf_playingIndexPath); - } - } - } -} - -/** - The percentage of scrolling processed in horizontal scrolling. - */ -- (void)_scrollViewScrollingDirectionHorizontal { - CGFloat offsetX = self.contentOffset.x; - self.zf_scrollDirection = (offsetX - self.zf_lastOffsetX > 0) ? ZFPlayerScrollDirectionLeft : ZFPlayerScrollDirectionRight; - self.zf_lastOffsetX = offsetX; - if (self.zf_stopPlay) return; - - UIView *playerView; - if (self.zf_containerType == ZFPlayerContainerTypeCell) { - // Avoid being paused the first time you play it. - if (self.contentOffset.x < 0) return; - if (!self.zf_playingIndexPath) return; - - UIView *cell = [self zf_getCellForIndexPath:self.zf_playingIndexPath]; - if (!cell) { - if (self.zf_playerDidDisappearInScrollView) self.zf_playerDidDisappearInScrollView(self.zf_playingIndexPath); - return; - } - playerView = [cell viewWithTag:self.zf_containerViewTag]; - } else if (self.zf_containerType == ZFPlayerContainerTypeView) { - if (!self.zf_containerView) return; - playerView = self.zf_containerView; - } - - CGRect rect1 = [playerView convertRect:playerView.frame toView:self]; - CGRect rect = [self convertRect:rect1 toView:self.superview]; - /// playerView left to scrollView left space. - CGFloat leftSpacing = CGRectGetMinX(rect) - CGRectGetMinX(self.frame) - CGRectGetMinX(playerView.frame); - /// playerView bottom to scrollView right space. - CGFloat rightSpacing = CGRectGetMaxX(self.frame) - CGRectGetMaxX(rect) + CGRectGetMinX(playerView.frame); - /// The height of the content area. - CGFloat contentInsetWidth = CGRectGetMaxX(self.frame) - CGRectGetMinX(self.frame); - - CGFloat playerDisapperaPercent = 0; - CGFloat playerApperaPercent = 0; - - if (self.zf_scrollDirection == ZFPlayerScrollDirectionLeft) { /// Scroll left - /// Player is disappearing. - if (leftSpacing <= 0 && CGRectGetWidth(rect) != 0) { - playerDisapperaPercent = -leftSpacing/CGRectGetWidth(rect); - if (playerDisapperaPercent > 1.0) playerDisapperaPercent = 1.0; - if (self.zf_playerDisappearingInScrollView) self.zf_playerDisappearingInScrollView(self.zf_playingIndexPath, playerDisapperaPercent); - } - - /// Top area - if (leftSpacing <= 0 && leftSpacing > -CGRectGetWidth(rect)/2) { - /// When the player will disappear. - if (self.zf_playerWillDisappearInScrollView) self.zf_playerWillDisappearInScrollView(self.zf_playingIndexPath); - } else if (leftSpacing <= -CGRectGetWidth(rect)) { - /// When the player did disappeared. - if (self.zf_playerDidDisappearInScrollView) self.zf_playerDidDisappearInScrollView(self.zf_playingIndexPath); - } else if (leftSpacing > 0 && leftSpacing <= contentInsetWidth) { - /// Player is appearing. - if (CGRectGetWidth(rect) != 0) { - playerApperaPercent = -(leftSpacing-contentInsetWidth)/CGRectGetWidth(rect); - if (playerApperaPercent > 1.0) playerApperaPercent = 1.0; - if (self.zf_playerAppearingInScrollView) self.zf_playerAppearingInScrollView(self.zf_playingIndexPath, playerApperaPercent); - } - /// In visable area - if (leftSpacing <= contentInsetWidth && leftSpacing > contentInsetWidth-CGRectGetWidth(rect)/2) { - /// When the player will appear. - if (self.zf_playerWillAppearInScrollView) self.zf_playerWillAppearInScrollView(self.zf_playingIndexPath); - } else { - /// When the player did appeared. - if (self.zf_playerDidAppearInScrollView) self.zf_playerDidAppearInScrollView(self.zf_playingIndexPath); - } - } - - } else if (self.zf_scrollDirection == ZFPlayerScrollDirectionRight) { /// Scroll right - /// Player is disappearing. - if (rightSpacing <= 0 && CGRectGetWidth(rect) != 0) { - playerDisapperaPercent = -rightSpacing/CGRectGetWidth(rect); - if (playerDisapperaPercent > 1.0) playerDisapperaPercent = 1.0; - if (self.zf_playerDisappearingInScrollView) self.zf_playerDisappearingInScrollView(self.zf_playingIndexPath, playerDisapperaPercent); - } - - /// Bottom area - if (rightSpacing <= 0 && rightSpacing > -CGRectGetWidth(rect)/2) { - /// When the player will disappear. - if (self.zf_playerWillDisappearInScrollView) self.zf_playerWillDisappearInScrollView(self.zf_playingIndexPath); - } else if (rightSpacing <= -CGRectGetWidth(rect)) { - /// When the player did disappeared. - if (self.zf_playerDidDisappearInScrollView) self.zf_playerDidDisappearInScrollView(self.zf_playingIndexPath); - } else if (rightSpacing > 0 && rightSpacing <= contentInsetWidth) { - /// Player is appearing. - if (CGRectGetWidth(rect) != 0) { - playerApperaPercent = -(rightSpacing-contentInsetWidth)/CGRectGetWidth(rect); - if (playerApperaPercent > 1.0) playerApperaPercent = 1.0; - if (self.zf_playerAppearingInScrollView) self.zf_playerAppearingInScrollView(self.zf_playingIndexPath, playerApperaPercent); - } - /// In visable area - if (rightSpacing <= contentInsetWidth && rightSpacing > contentInsetWidth-CGRectGetWidth(rect)/2) { - /// When the player will appear. - if (self.zf_playerWillAppearInScrollView) self.zf_playerWillAppearInScrollView(self.zf_playingIndexPath); - } else { - /// When the player did appeared. - if (self.zf_playerDidAppearInScrollView) self.zf_playerDidAppearInScrollView(self.zf_playingIndexPath); - } - } - } -} - -/** - Find the playing cell while the scrollDirection is vertical. - */ -- (void)_findCorrectCellWhenScrollViewDirectionVertical:(void (^ __nullable)(NSIndexPath *indexPath))handler { - if (!self.zf_shouldAutoPlay) return; - if (self.zf_containerType == ZFPlayerContainerTypeView) return; - - if (!self.zf_stopWhileNotVisible) { - /// If you have a cell that is playing, stop the traversal. - if (self.zf_playingIndexPath) { - NSIndexPath *finalIndexPath = self.zf_playingIndexPath; - if (self.zf_scrollViewDidScrollCallback) self.zf_scrollViewDidScrollCallback(finalIndexPath); - if (handler) handler(finalIndexPath); - self.zf_shouldPlayIndexPath = finalIndexPath; - return; - } - } - NSArray *visiableCells = nil; - NSIndexPath *indexPath = nil; - BOOL isLast = self.contentOffset.y + self.frame.size.height >= self.contentSize.height; - if ([self _isTableView]) { - UITableView *tableView = (UITableView *)self; - visiableCells = [tableView visibleCells]; - // First visible cell indexPath - indexPath = tableView.indexPathsForVisibleRows.firstObject; - if ((self.contentOffset.y <= 0 || isLast) && (!self.zf_playingIndexPath || [indexPath compare:self.zf_playingIndexPath] == NSOrderedSame)) { - UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; - UIView *playerView = [cell viewWithTag:self.zf_containerViewTag]; - if (playerView && !playerView.hidden && playerView.alpha > 0.01) { - if (self.zf_scrollViewDidScrollCallback) self.zf_scrollViewDidScrollCallback(indexPath); - if (handler) handler(indexPath); - self.zf_shouldPlayIndexPath = indexPath; - return; - } - } - } else if ([self _isCollectionView]) { - UICollectionView *collectionView = (UICollectionView *)self; - visiableCells = [collectionView visibleCells]; - NSArray *sortedIndexPaths = [collectionView.indexPathsForVisibleItems sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { - return [obj1 compare:obj2]; - }]; - - visiableCells = [visiableCells sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { - NSIndexPath *path1 = (NSIndexPath *)[collectionView indexPathForCell:obj1]; - NSIndexPath *path2 = (NSIndexPath *)[collectionView indexPathForCell:obj2]; - return [path1 compare:path2]; - }]; - - // First visible cell indexPath - indexPath = sortedIndexPaths.firstObject; - if ((self.contentOffset.y <= 0 || isLast) && (!self.zf_playingIndexPath || [indexPath compare:self.zf_playingIndexPath] == NSOrderedSame)) { - UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath]; - UIView *playerView = [cell viewWithTag:self.zf_containerViewTag]; - if (playerView && !playerView.hidden && playerView.alpha > 0.01) { - if (self.zf_scrollViewDidScrollCallback) self.zf_scrollViewDidScrollCallback(indexPath); - if (handler) handler(indexPath); - self.zf_shouldPlayIndexPath = indexPath; - return; - } - } - } - - NSArray *cells = nil; - if (self.zf_scrollDirection == ZFPlayerScrollDirectionUp) { - cells = visiableCells; - } else { - cells = [visiableCells reverseObjectEnumerator].allObjects; - } - - /// Mid line. - CGFloat scrollViewMidY = CGRectGetHeight(self.frame)/2; - /// The final playing indexPath. - __block NSIndexPath *finalIndexPath = nil; - /// The final distance from the center line. - __block CGFloat finalSpace = 0; - @zf_weakify(self) - [cells enumerateObjectsUsingBlock:^(UIView *cell, NSUInteger idx, BOOL * _Nonnull stop) { - @zf_strongify(self) - UIView *playerView = [cell viewWithTag:self.zf_containerViewTag]; - if (!playerView || playerView.hidden || playerView.alpha <= 0.01) return; - CGRect rect1 = [playerView convertRect:playerView.frame toView:self]; - CGRect rect = [self convertRect:rect1 toView:self.superview]; - /// playerView top to scrollView top space. - CGFloat topSpacing = CGRectGetMinY(rect) - CGRectGetMinY(self.frame) - CGRectGetMinY(playerView.frame); - /// playerView bottom to scrollView bottom space. - CGFloat bottomSpacing = CGRectGetMaxY(self.frame) - CGRectGetMaxY(rect) + CGRectGetMinY(playerView.frame); - CGFloat centerSpacing = ABS(scrollViewMidY - CGRectGetMidY(rect)); - NSIndexPath *indexPath = [self zf_getIndexPathForCell:cell]; - - /// Play when the video playback section is visible. - if ((topSpacing >= -(1 - self.zf_playerApperaPercent) * CGRectGetHeight(rect)) && (bottomSpacing >= -(1 - self.zf_playerApperaPercent) * CGRectGetHeight(rect))) { - if (!finalIndexPath || centerSpacing < finalSpace) { - finalIndexPath = indexPath; - finalSpace = centerSpacing; - } - } - }]; - /// if find the playing indexPath. - if (finalIndexPath) { - if (self.zf_scrollViewDidScrollCallback) self.zf_scrollViewDidScrollCallback(indexPath); - if (handler) handler(finalIndexPath); - } - self.zf_shouldPlayIndexPath = finalIndexPath; -} - -/** - Find the playing cell while the scrollDirection is horizontal. - */ -- (void)_findCorrectCellWhenScrollViewDirectionHorizontal:(void (^ __nullable)(NSIndexPath *indexPath))handler { - if (!self.zf_shouldAutoPlay) return; - if (self.zf_containerType == ZFPlayerContainerTypeView) return; - if (!self.zf_stopWhileNotVisible) { - /// If you have a cell that is playing, stop the traversal. - if (self.zf_playingIndexPath) { - NSIndexPath *finalIndexPath = self.zf_playingIndexPath; - if (self.zf_scrollViewDidScrollCallback) self.zf_scrollViewDidScrollCallback(finalIndexPath); - if (handler) handler(finalIndexPath); - self.zf_shouldPlayIndexPath = finalIndexPath; - return; - } - } - - NSArray *visiableCells = nil; - NSIndexPath *indexPath = nil; - BOOL isLast = self.contentOffset.x + self.frame.size.width >= self.contentSize.width; - if ([self _isTableView]) { - UITableView *tableView = (UITableView *)self; - visiableCells = [tableView visibleCells]; - // First visible cell indexPath - indexPath = tableView.indexPathsForVisibleRows.firstObject; - if ((self.contentOffset.x <= 0 || isLast) && (!self.zf_playingIndexPath || [indexPath compare:self.zf_playingIndexPath] == NSOrderedSame)) { - UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; - UIView *playerView = [cell viewWithTag:self.zf_containerViewTag]; - if (playerView && !playerView.hidden && playerView.alpha > 0.01) { - if (self.zf_scrollViewDidScrollCallback) self.zf_scrollViewDidScrollCallback(indexPath); - if (handler) handler(indexPath); - self.zf_shouldPlayIndexPath = indexPath; - return; - } - } - } else if ([self _isCollectionView]) { - UICollectionView *collectionView = (UICollectionView *)self; - visiableCells = [collectionView visibleCells]; - NSArray *sortedIndexPaths = [collectionView.indexPathsForVisibleItems sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { - return [obj1 compare:obj2]; - }]; - - visiableCells = [visiableCells sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { - NSIndexPath *path1 = (NSIndexPath *)[collectionView indexPathForCell:obj1]; - NSIndexPath *path2 = (NSIndexPath *)[collectionView indexPathForCell:obj2]; - return [path1 compare:path2]; - }]; - - // First visible cell indexPath - indexPath = sortedIndexPaths.firstObject; - if ((self.contentOffset.x <= 0 || isLast) && (!self.zf_playingIndexPath || [indexPath compare:self.zf_playingIndexPath] == NSOrderedSame)) { - UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath]; - UIView *playerView = [cell viewWithTag:self.zf_containerViewTag]; - if (playerView && !playerView.hidden && playerView.alpha > 0.01) { - if (self.zf_scrollViewDidScrollCallback) self.zf_scrollViewDidScrollCallback(indexPath); - if (handler) handler(indexPath); - self.zf_shouldPlayIndexPath = indexPath; - return; - } - } - } - - NSArray *cells = nil; - if (self.zf_scrollDirection == ZFPlayerScrollDirectionUp) { - cells = visiableCells; - } else { - cells = [visiableCells reverseObjectEnumerator].allObjects; - } - - /// Mid line. - CGFloat scrollViewMidX = CGRectGetWidth(self.frame)/2; - /// The final playing indexPath. - __block NSIndexPath *finalIndexPath = nil; - /// The final distance from the center line. - __block CGFloat finalSpace = 0; - @zf_weakify(self) - [cells enumerateObjectsUsingBlock:^(UIView *cell, NSUInteger idx, BOOL * _Nonnull stop) { - @zf_strongify(self) - UIView *playerView = [cell viewWithTag:self.zf_containerViewTag]; - if (!playerView || playerView.hidden || playerView.alpha <= 0.01) return; - CGRect rect1 = [playerView convertRect:playerView.frame toView:self]; - CGRect rect = [self convertRect:rect1 toView:self.superview]; - /// playerView left to scrollView top space. - CGFloat leftSpacing = CGRectGetMinX(rect) - CGRectGetMinX(self.frame) - CGRectGetMinX(playerView.frame); - /// playerView right to scrollView top space. - CGFloat rightSpacing = CGRectGetMaxX(self.frame) - CGRectGetMaxX(rect) + CGRectGetMinX(playerView.frame); - CGFloat centerSpacing = ABS(scrollViewMidX - CGRectGetMidX(rect)); - NSIndexPath *indexPath = [self zf_getIndexPathForCell:cell]; - - /// Play when the video playback section is visible. - if ((leftSpacing >= -(1 - self.zf_playerApperaPercent) * CGRectGetWidth(rect)) && (rightSpacing >= -(1 - self.zf_playerApperaPercent) * CGRectGetWidth(rect))) { - if (!finalIndexPath || centerSpacing < finalSpace) { - finalIndexPath = indexPath; - finalSpace = centerSpacing; - } - } - }]; - /// if find the playing indexPath. - if (finalIndexPath) { - if (self.zf_scrollViewDidScrollCallback) self.zf_scrollViewDidScrollCallback(indexPath); - if (handler) handler(finalIndexPath); - self.zf_shouldPlayIndexPath = finalIndexPath; - } -} - -- (BOOL)_isTableView { - return [self isKindOfClass:[UITableView class]]; -} - -- (BOOL)_isCollectionView { - return [self isKindOfClass:[UICollectionView class]]; -} - -#pragma mark - getter - -- (ZFPlayerScrollDirection)zf_scrollDirection { - return [objc_getAssociatedObject(self, _cmd) integerValue]; -} - -- (ZFPlayerScrollViewDirection)zf_scrollViewDirection { - return [objc_getAssociatedObject(self, _cmd) integerValue]; -} - -- (CGFloat)zf_lastOffsetY { - return [objc_getAssociatedObject(self, _cmd) floatValue]; -} - -- (CGFloat)zf_lastOffsetX { - return [objc_getAssociatedObject(self, _cmd) floatValue]; -} - -#pragma mark - setter - -- (void)setZf_scrollDirection:(ZFPlayerScrollDirection)zf_scrollDirection { - objc_setAssociatedObject(self, @selector(zf_scrollDirection), @(zf_scrollDirection), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)setZf_scrollViewDirection:(ZFPlayerScrollViewDirection)zf_scrollViewDirection { - objc_setAssociatedObject(self, @selector(zf_scrollViewDirection), @(zf_scrollViewDirection), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)setZf_lastOffsetY:(CGFloat)zf_lastOffsetY { - objc_setAssociatedObject(self, @selector(zf_lastOffsetY), @(zf_lastOffsetY), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)setZf_lastOffsetX:(CGFloat)zf_lastOffsetX { - objc_setAssociatedObject(self, @selector(zf_lastOffsetX), @(zf_lastOffsetX), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -@end - -@implementation UIScrollView (ZFPlayerCannotCalled) - -- (void)zf_filterShouldPlayCellWhileScrolling:(void (^ __nullable)(NSIndexPath *indexPath))handler { - if (self.zf_scrollViewDirection == ZFPlayerScrollViewDirectionVertical) { - [self _findCorrectCellWhenScrollViewDirectionVertical:handler]; - } else { - [self _findCorrectCellWhenScrollViewDirectionHorizontal:handler]; - } -} - -- (void)zf_filterShouldPlayCellWhileScrolled:(void (^ __nullable)(NSIndexPath *indexPath))handler { - if (!self.zf_shouldAutoPlay) return; - @zf_weakify(self) - [self zf_filterShouldPlayCellWhileScrolling:^(NSIndexPath *indexPath) { - @zf_strongify(self) - /// 如果当前控制器已经消失,直接return - if (self.zf_viewControllerDisappear) return; - if ([ZFReachabilityManager sharedManager].isReachableViaWWAN && !self.zf_WWANAutoPlay) { - /// 移动网络 - self.zf_shouldPlayIndexPath = indexPath; - return; - } - if (handler) handler(indexPath); - self.zf_playingIndexPath = indexPath; - }]; -} - -#pragma mark - getter - -- (void (^)(NSIndexPath * _Nonnull, CGFloat))zf_playerDisappearingInScrollView { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(NSIndexPath * _Nonnull, CGFloat))zf_playerAppearingInScrollView { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(NSIndexPath * _Nonnull))zf_playerDidAppearInScrollView { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(NSIndexPath * _Nonnull))zf_playerWillDisappearInScrollView { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(NSIndexPath * _Nonnull))zf_playerWillAppearInScrollView { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(NSIndexPath * _Nonnull))zf_playerDidDisappearInScrollView { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(NSIndexPath * _Nonnull))zf_scrollViewDidEndScrollingCallback { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(NSIndexPath * _Nonnull))zf_scrollViewDidScrollCallback { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(NSIndexPath * _Nonnull))zf_playerShouldPlayInScrollView { - return objc_getAssociatedObject(self, _cmd); -} - -- (CGFloat)zf_playerApperaPercent { - return [objc_getAssociatedObject(self, _cmd) floatValue]; -} - -- (CGFloat)zf_playerDisapperaPercent { - return [objc_getAssociatedObject(self, _cmd) floatValue]; -} - -- (BOOL)zf_viewControllerDisappear { - return [objc_getAssociatedObject(self, _cmd) boolValue]; -} - -- (BOOL)zf_stopPlay { - NSNumber *number = objc_getAssociatedObject(self, _cmd); - if (number) return number.boolValue; - self.zf_stopPlay = YES; - return YES; -} - -- (BOOL)zf_stopWhileNotVisible { - return [objc_getAssociatedObject(self, _cmd) boolValue]; -} - -- (NSIndexPath *)zf_playingIndexPath { - return objc_getAssociatedObject(self, _cmd); -} - -- (NSIndexPath *)zf_shouldPlayIndexPath { - return objc_getAssociatedObject(self, _cmd); -} - -- (NSInteger)zf_containerViewTag { - return [objc_getAssociatedObject(self, _cmd) integerValue]; -} - -- (BOOL)zf_isWWANAutoPlay { - return [objc_getAssociatedObject(self, _cmd) boolValue]; -} - -- (BOOL)zf_shouldAutoPlay { - NSNumber *number = objc_getAssociatedObject(self, _cmd); - if (number) return number.boolValue; - self.zf_shouldAutoPlay = YES; - return YES; -} - -- (ZFPlayerContainerType)zf_containerType { - return [objc_getAssociatedObject(self, _cmd) integerValue]; -} - -- (UIView *)zf_containerView { - return objc_getAssociatedObject(self, _cmd); -} - -#pragma mark - setter - -- (void)setZf_playerDisappearingInScrollView:(void (^)(NSIndexPath * _Nonnull, CGFloat))zf_playerDisappearingInScrollView { - objc_setAssociatedObject(self, @selector(zf_playerDisappearingInScrollView), zf_playerDisappearingInScrollView, OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (void)setZf_playerAppearingInScrollView:(void (^)(NSIndexPath * _Nonnull, CGFloat))zf_playerAppearingInScrollView { - objc_setAssociatedObject(self, @selector(zf_playerAppearingInScrollView), zf_playerAppearingInScrollView, OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (void)setZf_playerDidAppearInScrollView:(void (^)(NSIndexPath * _Nonnull))zf_playerDidAppearInScrollView { - objc_setAssociatedObject(self, @selector(zf_playerDidAppearInScrollView), zf_playerDidAppearInScrollView, OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (void)setZf_playerWillDisappearInScrollView:(void (^)(NSIndexPath * _Nonnull))zf_playerWillDisappearInScrollView { - objc_setAssociatedObject(self, @selector(zf_playerWillDisappearInScrollView), zf_playerWillDisappearInScrollView, OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (void)setZf_playerWillAppearInScrollView:(void (^)(NSIndexPath * _Nonnull))zf_playerWillAppearInScrollView { - objc_setAssociatedObject(self, @selector(zf_playerWillAppearInScrollView), zf_playerWillAppearInScrollView, OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (void)setZf_playerDidDisappearInScrollView:(void (^)(NSIndexPath * _Nonnull))zf_playerDidDisappearInScrollView { - objc_setAssociatedObject(self, @selector(zf_playerDidDisappearInScrollView), zf_playerDidDisappearInScrollView, OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (void)setZf_scrollViewDidEndScrollingCallback:(void (^)(NSIndexPath * _Nonnull))zf_scrollViewDidEndScrollingCallback { - objc_setAssociatedObject(self, @selector(zf_scrollViewDidEndScrollingCallback), zf_scrollViewDidEndScrollingCallback, OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (void)setZf_scrollViewDidScrollCallback:(void (^)(NSIndexPath * _Nonnull))zf_scrollViewDidScrollCallback { - objc_setAssociatedObject(self, @selector(zf_scrollViewDidScrollCallback), zf_scrollViewDidScrollCallback, OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (void)setZf_playerShouldPlayInScrollView:(void (^)(NSIndexPath * _Nonnull))zf_playerShouldPlayInScrollView { - objc_setAssociatedObject(self, @selector(zf_playerShouldPlayInScrollView), zf_playerShouldPlayInScrollView, OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (void)setZf_playerApperaPercent:(CGFloat)zf_playerApperaPercent { - objc_setAssociatedObject(self, @selector(zf_playerApperaPercent), @(zf_playerApperaPercent), OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (void)setZf_playerDisapperaPercent:(CGFloat)zf_playerDisapperaPercent { - objc_setAssociatedObject(self, @selector(zf_playerDisapperaPercent), @(zf_playerDisapperaPercent), OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (void)setZf_viewControllerDisappear:(BOOL)zf_viewControllerDisappear { - objc_setAssociatedObject(self, @selector(zf_viewControllerDisappear), @(zf_viewControllerDisappear), OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (void)setZf_stopPlay:(BOOL)zf_stopPlay { - objc_setAssociatedObject(self, @selector(zf_stopPlay), @(zf_stopPlay), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)setZf_stopWhileNotVisible:(BOOL)zf_stopWhileNotVisible { - objc_setAssociatedObject(self, @selector(zf_stopWhileNotVisible), @(zf_stopWhileNotVisible), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)setZf_playingIndexPath:(NSIndexPath *)zf_playingIndexPath { - objc_setAssociatedObject(self, @selector(zf_playingIndexPath), zf_playingIndexPath, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - if (zf_playingIndexPath && [zf_playingIndexPath compare:self.zf_shouldPlayIndexPath] != NSOrderedSame) { - self.zf_shouldPlayIndexPath = zf_playingIndexPath; - } -} - -- (void)setZf_shouldPlayIndexPath:(NSIndexPath *)zf_shouldPlayIndexPath { - if (self.zf_playerShouldPlayInScrollView) self.zf_playerShouldPlayInScrollView(zf_shouldPlayIndexPath); - if (self.zf_shouldPlayIndexPathCallback) self.zf_shouldPlayIndexPathCallback(zf_shouldPlayIndexPath); - objc_setAssociatedObject(self, @selector(zf_shouldPlayIndexPath), zf_shouldPlayIndexPath, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)setZf_containerViewTag:(NSInteger)zf_containerViewTag { - objc_setAssociatedObject(self, @selector(zf_containerViewTag), @(zf_containerViewTag), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)setZf_containerType:(ZFPlayerContainerType)zf_containerType { - objc_setAssociatedObject(self, @selector(zf_containerType), @(zf_containerType), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)setZf_containerView:(UIView *)zf_containerView { - objc_setAssociatedObject(self, @selector(zf_containerView), zf_containerView, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)setZf_shouldAutoPlay:(BOOL)zf_shouldAutoPlay { - objc_setAssociatedObject(self, @selector(zf_shouldAutoPlay), @(zf_shouldAutoPlay), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)setZf_WWANAutoPlay:(BOOL)zf_WWANAutoPlay { - objc_setAssociatedObject(self, @selector(zf_isWWANAutoPlay), @(zf_WWANAutoPlay), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -@end - - -@implementation UIScrollView (ZFPlayerDeprecated) - -#pragma mark - getter - -- (void (^)(NSIndexPath * _Nonnull))zf_scrollViewDidStopScrollCallback { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(NSIndexPath * _Nonnull))zf_shouldPlayIndexPathCallback { - return objc_getAssociatedObject(self, _cmd); -} - -#pragma mark - setter - -- (void)setZf_scrollViewDidStopScrollCallback:(void (^)(NSIndexPath * _Nonnull))zf_scrollViewDidStopScrollCallback { - objc_setAssociatedObject(self, @selector(zf_scrollViewDidStopScrollCallback), zf_scrollViewDidStopScrollCallback, OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (void)setZf_shouldPlayIndexPathCallback:(void (^)(NSIndexPath * _Nonnull))zf_shouldPlayIndexPathCallback { - objc_setAssociatedObject(self, @selector(zf_shouldPlayIndexPathCallback), zf_shouldPlayIndexPathCallback, OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -#pragma mark - method - -- (void)zf_scrollToRowAtIndexPath:(NSIndexPath *)indexPath completionHandler:(void (^ __nullable)(void))completionHandler { - [self zf_scrollToRowAtIndexPath:indexPath animated:YES completionHandler:completionHandler]; -} - -- (void)zf_scrollToRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated completionHandler:(void (^ __nullable)(void))completionHandler { - [self zf_scrollToRowAtIndexPath:indexPath animateWithDuration:animated ? 0.4 : 0.0 completionHandler:completionHandler]; -} - -/// Scroll to indexPath with animations duration. -- (void)zf_scrollToRowAtIndexPath:(NSIndexPath *)indexPath animateWithDuration:(NSTimeInterval)duration completionHandler:(void (^ __nullable)(void))completionHandler { - [self zf_scrollToRowAtIndexPath:indexPath atScrollPosition:ZFPlayerScrollViewScrollPositionTop animateDuration:duration completionHandler:completionHandler]; -} - -@end - -#pragma clang diagnostic pop diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/UIViewController+ZFPlayerRotation.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/UIViewController+ZFPlayerRotation.m deleted file mode 100644 index edf6678..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/UIViewController+ZFPlayerRotation.m +++ /dev/null @@ -1,120 +0,0 @@ -// -// UIViewController+ZFPlayerRotation.m -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 -#import - -@implementation UITabBarController (ZFPlayerRotation) - -+ (void)initialize { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - SEL selectors[] = { - @selector(selectedIndex) - }; - - for (NSUInteger index = 0; index < sizeof(selectors) / sizeof(SEL); ++index) { - SEL originalSelector = selectors[index]; - SEL swizzledSelector = NSSelectorFromString([@"zf_" stringByAppendingString:NSStringFromSelector(originalSelector)]); - Method originalMethod = class_getInstanceMethod(self, originalSelector); - Method swizzledMethod = class_getInstanceMethod(self, swizzledSelector); - if (class_addMethod(self, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod))) { - class_replaceMethod(self, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod)); - } else { - method_exchangeImplementations(originalMethod, swizzledMethod); - } - } - }); -} - -- (NSInteger)zf_selectedIndex { - NSInteger index = [self zf_selectedIndex]; - if (index > self.viewControllers.count) return 0; - return index; -} - -/** - * If the root view of the window is a UINavigationController, you call this Category first, and then UIViewController called. - * All you need to do is revisit the following three methods on a page that supports directions other than portrait. - */ - -// Whether automatic screen rotation is supported. -- (BOOL)shouldAutorotate { - return [[self viewControllerRotation] shouldAutorotate]; -} - -// Which screen directions are supported. -- (UIInterfaceOrientationMask)supportedInterfaceOrientations { - return [[self viewControllerRotation] supportedInterfaceOrientations]; -} - -// The default screen direction (the current ViewController must be represented by a modal UIViewController (which is not valid with modal navigation) to call this method). -- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { - return [[self viewControllerRotation] preferredInterfaceOrientationForPresentation]; -} - -// Return ViewController which decide rotation,if selected in UITabBarController is UINavigationController,return topViewController -- (UIViewController *)viewControllerRotation { - UIViewController *vc = self.viewControllers[self.selectedIndex]; - if ([vc isKindOfClass:[UINavigationController class]]) { - UINavigationController *nav = (UINavigationController *)vc; - return nav.topViewController; - } else { - return vc; - } -} - - -@end - -@implementation UINavigationController (ZFPlayerRotation) - -/** - * If the root view of the window is a UINavigationController, you call this Category first, and then UIViewController called. - * All you need to do is revisit the following three methods on a page that supports directions other than portrait. - */ - -// Whether automatic screen rotation is supported -- (BOOL)shouldAutorotate { - return [self.topViewController shouldAutorotate]; -} - -// Which screen directions are supported -- (UIInterfaceOrientationMask)supportedInterfaceOrientations { - return [self.topViewController supportedInterfaceOrientations]; -} - -// The default screen direction (the current ViewController must be represented by a modal UIViewController (which is not valid with modal navigation) to call this method). -- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { - return [self.topViewController preferredInterfaceOrientationForPresentation]; -} - -- (UIViewController *)childViewControllerForStatusBarStyle { - return self.topViewController; -} - -- (UIViewController *)childViewControllerForStatusBarHidden { - return self.topViewController; -} - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFFloatView.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFFloatView.h deleted file mode 100755 index 7c40456..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFFloatView.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// ZFFloatView.h -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 - -@interface ZFFloatView : UIView - -/// The parent View -@property(nonatomic, weak) UIView *parentView; - -/// Safe margins, mainly for those with Navbar and tabbar -@property(nonatomic, assign) UIEdgeInsets safeInsets; - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFFloatView.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFFloatView.m deleted file mode 100755 index 0dc73a7..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFFloatView.m +++ /dev/null @@ -1,85 +0,0 @@ -// -// ZFFloatView.m -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "ZFFloatView.h" - -@implementation ZFFloatView - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self initilize]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder{ - self = [super initWithCoder:aDecoder]; - if (self) { - [self initilize]; - } - return self; -} - -- (void)initilize { - self.safeInsets = UIEdgeInsetsMake(0, 0, 0, 0); - UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(doMoveAction:)]; - [self addGestureRecognizer:panGestureRecognizer]; -} - -- (void)setParentView:(UIView *)parentView { - _parentView = parentView; - [parentView addSubview:self]; -} - -#pragma mark - Action - -- (void)doMoveAction:(UIPanGestureRecognizer *)recognizer { - /// The position where the gesture is moving in the self.view. - CGPoint translation = [recognizer translationInView:self.parentView]; - CGPoint newCenter = CGPointMake(recognizer.view.center.x + translation.x, - recognizer.view.center.y + translation.y); - - // Limited screen range: - // Top margin limit. - newCenter.y = MAX(recognizer.view.frame.size.height/2 + self.safeInsets.top, newCenter.y); - - // Bottom margin limit. - newCenter.y = MIN(self.parentView.frame.size.height - self.safeInsets.bottom - recognizer.view.frame.size.height/2, newCenter.y); - - // Left margin limit. - newCenter.x = MAX(recognizer.view.frame.size.width/2, newCenter.x); - - // Right margin limit. - newCenter.x = MIN(self.parentView.frame.size.width - recognizer.view.frame.size.width/2,newCenter.x); - - // Set the center point. - recognizer.view.center = newCenter; - - // Set the gesture coordinates to 0, otherwise it will add up. - [recognizer setTranslation:CGPointZero inView:self.parentView]; -} - - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFKVOController.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFKVOController.h deleted file mode 100644 index 2b991f6..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFKVOController.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// UIScrollView+ZFPlayer.m -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 - -@interface ZFKVOController : NSObject - -- (instancetype)initWithTarget:(NSObject *)target; - -- (void)safelyAddObserver:(NSObject *)observer - forKeyPath:(NSString *)keyPath - options:(NSKeyValueObservingOptions)options - context:(void *)context; -- (void)safelyRemoveObserver:(NSObject *)observer - forKeyPath:(NSString *)keyPath; - -- (void)safelyRemoveAllObservers; - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFKVOController.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFKVOController.m deleted file mode 100644 index d051a69..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFKVOController.m +++ /dev/null @@ -1,130 +0,0 @@ -// -// UIScrollView+ZFPlayer.m -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "ZFKVOController.h" - -@interface ZFKVOEntry : NSObject -@property (nonatomic, weak) NSObject *observer; -@property (nonatomic, copy) NSString *keyPath; - -@end - -@implementation ZFKVOEntry - -@end - -@interface ZFKVOController () -@property (nonatomic, weak) NSObject *target; -@property (nonatomic, strong) NSMutableArray *observerArray; - -@end - -@implementation ZFKVOController - -- (instancetype)initWithTarget:(NSObject *)target { - self = [super init]; - if (self) { - _target = target; - _observerArray = [[NSMutableArray alloc] init]; - } - return self; -} - -- (void)safelyAddObserver:(NSObject *)observer - forKeyPath:(NSString *)keyPath - options:(NSKeyValueObservingOptions)options - context:(void *)context { - if (_target == nil) return; - - NSInteger indexEntry = [self indexEntryOfObserver:observer forKeyPath:keyPath]; - if (indexEntry != NSNotFound) { - // duplicated register - NSLog(@"duplicated observer"); - } else { - @try { - [_target addObserver:observer - forKeyPath:keyPath - options:options - context:context]; - - ZFKVOEntry *entry = [[ZFKVOEntry alloc] init]; - entry.observer = observer; - entry.keyPath = keyPath; - [_observerArray addObject:entry]; - } @catch (NSException *e) { - NSLog(@"ZFKVO: failed to add observer for %@\n", keyPath); - } - } -} - -- (void)safelyRemoveObserver:(NSObject *)observer - forKeyPath:(NSString *)keyPath { - if (_target == nil) return; - - NSInteger indexEntry = [self indexEntryOfObserver:observer forKeyPath:keyPath]; - if (indexEntry == NSNotFound) { - // duplicated register - NSLog(@"duplicated observer"); - } else { - [_observerArray removeObjectAtIndex:indexEntry]; - @try { - [_target removeObserver:observer - forKeyPath:keyPath]; - } @catch (NSException *e) { - NSLog(@"ZFKVO: failed to remove observer for %@\n", keyPath); - } - } -} - -- (void)safelyRemoveAllObservers { - if (_target == nil) return; - [_observerArray enumerateObjectsUsingBlock:^(ZFKVOEntry *entry, NSUInteger idx, BOOL *stop) { - if (entry == nil) return; - NSObject *observer = entry.observer; - if (observer == nil) return; - @try { - [_target removeObserver:observer - forKeyPath:entry.keyPath]; - } @catch (NSException *e) { - NSLog(@"ZFKVO: failed to remove observer for %@\n", entry.keyPath); - } - }]; - - [_observerArray removeAllObjects]; -} - -- (NSInteger)indexEntryOfObserver:(NSObject *)observer - forKeyPath:(NSString *)keyPath { - __block NSInteger foundIndex = NSNotFound; - [_observerArray enumerateObjectsUsingBlock:^(ZFKVOEntry *entry, NSUInteger idx, BOOL *stop) { - if (entry.observer == observer && - [entry.keyPath isEqualToString:keyPath]) { - foundIndex = idx; - *stop = YES; - } - }]; - return foundIndex; -} - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFLandscapeViewController.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFLandscapeViewController.h deleted file mode 100644 index 5fe1012..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFLandscapeViewController.h +++ /dev/null @@ -1,65 +0,0 @@ -// -// ZFFullscreenViewController.h -// ZFPlayer -// -// Copyright (c) 2020年 任子丰 ( http://github.com/renzifeng ) -// -// 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 -@class ZFLandscapeViewController; - -NS_ASSUME_NONNULL_BEGIN - -@protocol ZFLandscapeViewControllerDelegate - -- (BOOL)ls_shouldAutorotate; -- (void)ls_willRotateToOrientation:(UIInterfaceOrientation)orientation; -- (void)ls_didRotateFromOrientation:(UIInterfaceOrientation)orientation; -- (CGRect)ls_targetRect; - -@end - -@interface ZFLandscapeViewController : UIViewController - -@property (nonatomic, weak) UIView *contentView; - -@property (nonatomic, weak) UIView *containerView; - -@property (nonatomic, assign) CGRect targetRect; - -@property (nonatomic, weak, nullable) id delegate; - -@property (nonatomic, readonly) BOOL isFullscreen; - -@property (nonatomic, getter=isRotating) BOOL rotating; - -@property (nonatomic, assign) BOOL disableAnimations; - -@property (nonatomic, assign) BOOL statusBarHidden; -/// default is UIStatusBarStyleLightContent. -@property (nonatomic, assign) UIStatusBarStyle statusBarStyle; -/// defalut is UIStatusBarAnimationSlide. -@property (nonatomic, assign) UIStatusBarAnimation statusBarAnimation; - -@property (nonatomic, copy) void(^rotatingCompleted)(void); - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFLandscapeViewController.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFLandscapeViewController.m deleted file mode 100644 index 8e3d700..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFLandscapeViewController.m +++ /dev/null @@ -1,140 +0,0 @@ -// -// ZFFullScreenViewController.m -// ZFPlayer -// -// Copyright (c) 2020年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "ZFLandscapeViewController.h" - -@interface ZFLandscapeViewController () - -@property (nonatomic, assign) UIInterfaceOrientation currentOrientation; - -@end - -@implementation ZFLandscapeViewController - -- (instancetype)init { - self = [super init]; - if (self) { - _currentOrientation = UIInterfaceOrientationPortrait; - _statusBarStyle = UIStatusBarStyleLightContent; - _statusBarAnimation = UIStatusBarAnimationSlide; - } - return self; -} - -- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator { - self.rotating = YES; - [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; - if (!UIDeviceOrientationIsValidInterfaceOrientation([UIDevice currentDevice].orientation)) { - return; - } - UIInterfaceOrientation newOrientation = (UIInterfaceOrientation)[UIDevice currentDevice].orientation; - UIInterfaceOrientation oldOrientation = _currentOrientation; - if (UIInterfaceOrientationIsLandscape(newOrientation)) { - if (self.contentView.superview != self.view) { - [self.view addSubview:self.contentView]; - } - } - - if (oldOrientation == UIInterfaceOrientationPortrait) { - self.contentView.frame = [self.delegate ls_targetRect]; - [self.contentView layoutIfNeeded]; - } - self.currentOrientation = newOrientation; - - [self.delegate ls_willRotateToOrientation:self.currentOrientation]; - BOOL isFullscreen = size.width > size.height; - if (self.disableAnimations) { - [CATransaction begin]; - [CATransaction setDisableActions:YES]; - } - [coordinator animateAlongsideTransition:^(id _Nonnull context) { - if (isFullscreen) { - self.contentView.frame = CGRectMake(0, 0, size.width, size.height); - } else { - self.contentView.frame = [self.delegate ls_targetRect]; - } - [self.contentView layoutIfNeeded]; - } completion:^(id _Nonnull context) { - if (self.disableAnimations) { - [CATransaction commit]; - } - [self.delegate ls_didRotateFromOrientation:self.currentOrientation]; - if (!isFullscreen) { - self.contentView.frame = self.containerView.bounds; - [self.contentView layoutIfNeeded]; - } - self.disableAnimations = NO; - self.rotating = NO; - }]; -} - -- (BOOL)isFullscreen { - return UIInterfaceOrientationIsLandscape(_currentOrientation); -} - -- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { - return UIInterfaceOrientationPortrait; -} - -- (BOOL)shouldAutorotate { - return [self.delegate ls_shouldAutorotate]; -} - -- (UIInterfaceOrientationMask)supportedInterfaceOrientations { - UIInterfaceOrientation currentOrientation = (UIInterfaceOrientation)[UIDevice currentDevice].orientation; - if (UIInterfaceOrientationIsLandscape(currentOrientation)) { - return UIInterfaceOrientationMaskLandscape; - } - return UIInterfaceOrientationMaskAll; -} - -- (BOOL)prefersHomeIndicatorAutoHidden { - UIInterfaceOrientation currentOrientation = (UIInterfaceOrientation)[UIDevice currentDevice].orientation; - if (UIInterfaceOrientationIsLandscape(currentOrientation)) { - return YES; - } - return NO; -} - -- (BOOL)prefersStatusBarHidden { - return self.statusBarHidden; -} - -- (UIStatusBarStyle)preferredStatusBarStyle { - return self.statusBarStyle; -} - -- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation { - return self.statusBarAnimation; -} - -- (void)setRotating:(BOOL)rotating { - _rotating = rotating; - if (!rotating && self.rotatingCompleted) { - self.rotatingCompleted(); - } -} - -@end - diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFLandscapeWindow.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFLandscapeWindow.h deleted file mode 100644 index d405aff..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFLandscapeWindow.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// ZFLandScaprWindow.h -// ZFPlayer -// -// Copyright (c) 2020年 任子丰 ( http://github.com/renzifeng ) -// -// 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 -#import "ZFLandscapeViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface ZFLandscapeWindow : UIWindow - -@property (nonatomic, strong, readonly) ZFLandscapeViewController *landscapeViewController; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFLandscapeWindow.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFLandscapeWindow.m deleted file mode 100644 index dc0bc87..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFLandscapeWindow.m +++ /dev/null @@ -1,75 +0,0 @@ -// -// ZFLandScaprWindow.m -// ZFPlayer -// -// Copyright (c) 2020年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "ZFLandscapeWindow.h" - -@implementation ZFLandscapeWindow -@dynamic rootViewController; - -- (void)setBackgroundColor:(nullable UIColor *)backgroundColor {} - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - self.windowLevel = UIWindowLevelNormal; - _landscapeViewController = [[ZFLandscapeViewController alloc] init]; - self.rootViewController = _landscapeViewController; - if (@available(iOS 13.0, *)) { - if (self.windowScene == nil) { - self.windowScene = UIApplication.sharedApplication.keyWindow.windowScene; - } - } - self.hidden = YES; - } - return self; -} - -- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *_Nullable)event { - return YES; -} - -- (void)layoutSubviews { - [super layoutSubviews]; - static CGRect bounds; - if (!CGRectEqualToRect(bounds, self.bounds)) { - UIView *superview = self; - if (@available(iOS 13.0, *)) { - superview = self.subviews.firstObject; - } - [UIView performWithoutAnimation:^{ - for (UIView *view in superview.subviews) { - if (view != self.rootViewController.view && [view isMemberOfClass:UIView.class]) { - view.backgroundColor = UIColor.clearColor; - for (UIView *subview in view.subviews) { - subview.backgroundColor = UIColor.clearColor; - } - } - } - }]; - } - bounds = self.bounds; - self.rootViewController.view.frame = bounds; -} - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFOrientationObserver.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFOrientationObserver.h deleted file mode 100755 index 9206152..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFOrientationObserver.h +++ /dev/null @@ -1,170 +0,0 @@ -// -// ZFOrentationObserver.h -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 -#import "ZFPlayerView.h" - -NS_ASSUME_NONNULL_BEGIN - -/// Full screen mode -typedef NS_ENUM(NSUInteger, ZFFullScreenMode) { - ZFFullScreenModeAutomatic, // Determine full screen mode automatically - ZFFullScreenModeLandscape, // Landscape full screen mode - ZFFullScreenModePortrait // Portrait full screen Model -}; - -/// Portrait full screen mode. -typedef NS_ENUM(NSUInteger, ZFPortraitFullScreenMode) { - ZFPortraitFullScreenModeScaleToFill, // Full fill - ZFPortraitFullScreenModeScaleAspectFit // contents scaled to fit with fixed aspect. remainder is transparent -}; - -/// Player view mode -typedef NS_ENUM(NSUInteger, ZFRotateType) { - ZFRotateTypeNormal, // Normal - ZFRotateTypeCell // Cell -}; - -/** - Rotation of support direction - */ -typedef NS_OPTIONS(NSUInteger, ZFInterfaceOrientationMask) { - ZFInterfaceOrientationMaskPortrait = (1 << 0), - ZFInterfaceOrientationMaskLandscapeLeft = (1 << 1), - ZFInterfaceOrientationMaskLandscapeRight = (1 << 2), - ZFInterfaceOrientationMaskPortraitUpsideDown = (1 << 3), - ZFInterfaceOrientationMaskLandscape = (ZFInterfaceOrientationMaskLandscapeLeft | ZFInterfaceOrientationMaskLandscapeRight), - ZFInterfaceOrientationMaskAll = (ZFInterfaceOrientationMaskPortrait | ZFInterfaceOrientationMaskLandscape | ZFInterfaceOrientationMaskPortraitUpsideDown), - ZFInterfaceOrientationMaskAllButUpsideDown = (ZFInterfaceOrientationMaskPortrait | ZFInterfaceOrientationMaskLandscape), -}; - -/// This enumeration lists some of the gesture types that the player has by default. -typedef NS_OPTIONS(NSUInteger, ZFDisablePortraitGestureTypes) { - ZFDisablePortraitGestureTypesNone = 0, - ZFDisablePortraitGestureTypesTap = 1 << 0, - ZFDisablePortraitGestureTypesPan = 1 << 1, - ZFDisablePortraitGestureTypesAll = (ZFDisablePortraitGestureTypesTap | ZFDisablePortraitGestureTypesPan) -}; - -@protocol ZFPortraitOrientationDelegate - -- (void)zf_orientationWillChange:(BOOL)isFullScreen; - -- (void)zf_orientationDidChanged:(BOOL)isFullScreen; - -- (void)zf_interationState:(BOOL)isDragging; - -@end - -@interface ZFOrientationObserver : NSObject - -/// update the rotateView and containerView. -- (void)updateRotateView:(ZFPlayerView *)rotateView - containerView:(UIView *)containerView; - -/// list play -- (void)updateRotateView:(ZFPlayerView *)rotateView - rotateViewAtCell:(UIView *)cell - playerViewTag:(NSInteger)playerViewTag; - -/// Container view of a full screen state player. -@property (nonatomic, strong) UIView *fullScreenContainerView; - -/// Container view of a small screen state player. -@property (nonatomic, weak) UIView *containerView; - -/// The block invoked When player will rotate. -@property (nonatomic, copy, nullable) void(^orientationWillChange)(ZFOrientationObserver *observer, BOOL isFullScreen); - -/// The block invoked when player rotated. -@property (nonatomic, copy, nullable) void(^orientationDidChanged)(ZFOrientationObserver *observer, BOOL isFullScreen); - -/// Full screen mode, the default landscape into full screen -@property (nonatomic) ZFFullScreenMode fullScreenMode; - -@property (nonatomic, assign) ZFPortraitFullScreenMode portraitFullScreenMode; - -/// rotate duration, default is 0.30 -@property (nonatomic) NSTimeInterval duration; - -/// If the full screen. -@property (nonatomic, readonly, getter=isFullScreen) BOOL fullScreen; - -/// Lock screen orientation -@property (nonatomic, getter=isLockedScreen) BOOL lockedScreen; - -/// The fullscreen statusbar hidden. -@property (nonatomic, assign) BOOL fullScreenStatusBarHidden; - -/// default is UIStatusBarStyleLightContent. -@property (nonatomic, assign) UIStatusBarStyle fullScreenStatusBarStyle; - -/// defalut is UIStatusBarAnimationSlide. -@property (nonatomic, assign) UIStatusBarAnimation fullScreenStatusBarAnimation; - -@property (nonatomic, assign) CGSize presentationSize; - -/// default is ZFDisablePortraitGestureTypesAll. -@property (nonatomic, assign) ZFDisablePortraitGestureTypes disablePortraitGestureTypes; - -/// The current orientation of the player. -/// Default is UIInterfaceOrientationPortrait. -@property (nonatomic, readonly) UIInterfaceOrientation currentOrientation; - -/// Whether allow the video orientation rotate. -/// default is YES. -@property (nonatomic, assign) BOOL allowOrientationRotation; - -/// The support Interface Orientation,default is ZFInterfaceOrientationMaskAllButUpsideDown -@property (nonatomic, assign) ZFInterfaceOrientationMask supportInterfaceOrientation; - -/// Add the device orientation observer. -- (void)addDeviceOrientationObserver; - -/// Remove the device orientation observer. -- (void)removeDeviceOrientationObserver; - -/// Enter the fullScreen while the ZFFullScreenMode is ZFFullScreenModeLandscape. -- (void)rotateToOrientation:(UIInterfaceOrientation)orientation animated:(BOOL)animated; - -/// Enter the fullScreen while the ZFFullScreenMode is ZFFullScreenModeLandscape. -- (void)rotateToOrientation:(UIInterfaceOrientation)orientation animated:(BOOL)animated completion:(void(^ __nullable)(void))completion; - -/// Enter the fullScreen while the ZFFullScreenMode is ZFFullScreenModePortrait. -- (void)enterPortraitFullScreen:(BOOL)fullScreen animated:(BOOL)animated; - -/// Enter the fullScreen while the ZFFullScreenMode is ZFFullScreenModePortrait. -- (void)enterPortraitFullScreen:(BOOL)fullScreen animated:(BOOL)animated completion:(void(^ __nullable)(void))completion; - -/// FullScreen mode is determined by ZFFullScreenMode. -- (void)enterFullScreen:(BOOL)fullScreen animated:(BOOL)animated; - -/// FullScreen mode is determined by ZFFullScreenMode. -- (void)enterFullScreen:(BOOL)fullScreen animated:(BOOL)animated completion:(void (^ _Nullable)(void))completion; - -@end - -NS_ASSUME_NONNULL_END - - diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFOrientationObserver.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFOrientationObserver.m deleted file mode 100755 index 1eed04d..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFOrientationObserver.m +++ /dev/null @@ -1,551 +0,0 @@ - -// ZFOrentationObserver.m -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "ZFOrientationObserver.h" -#import "ZFLandscapeWindow.h" -#import "ZFPortraitViewController.h" -#import "ZFPlayerConst.h" -#import - -@interface UIWindow (CurrentViewController) - -/*! - @method currentViewController - @return Returns the topViewController in stack of topMostController. - */ -+ (UIViewController*)zf_currentViewController; - -@end - -@implementation UIWindow (CurrentViewController) - -+ (UIViewController*)zf_currentViewController; { - __block UIWindow *window; - if (@available(iOS 13, *)) { - [[UIApplication sharedApplication].connectedScenes enumerateObjectsUsingBlock:^(UIScene * _Nonnull scene, BOOL * _Nonnull scenesStop) { - if ([scene isKindOfClass: [UIWindowScene class]]) { - UIWindowScene * windowScene = (UIWindowScene *)scene; - [windowScene.windows enumerateObjectsUsingBlock:^(UIWindow * _Nonnull windowTemp, NSUInteger idx, BOOL * _Nonnull windowStop) { - if (windowTemp.isKeyWindow) { - window = windowTemp; - *windowStop = YES; - *scenesStop = YES; - } - }]; - } - }]; - } else { - window = [[UIApplication sharedApplication].delegate window]; - } - UIViewController *topViewController = [window rootViewController]; - while (true) { - if (topViewController.presentedViewController) { - topViewController = topViewController.presentedViewController; - } else if ([topViewController isKindOfClass:[UINavigationController class]] && [(UINavigationController *)topViewController topViewController]) { - topViewController = [(UINavigationController *)topViewController topViewController]; - } else if ([topViewController isKindOfClass:[UITabBarController class]]) { - UITabBarController *tab = (UITabBarController *)topViewController; - topViewController = tab.selectedViewController; - } else { - break; - } - } - return topViewController; -} - -@end - -@interface ZFOrientationObserver () - -@property (nonatomic, weak) ZFPlayerView *view; - -@property (nonatomic, assign, getter=isFullScreen) BOOL fullScreen; - -@property (nonatomic, strong) UIView *cell; - -@property (nonatomic, assign) NSInteger playerViewTag; - -@property (nonatomic, assign) ZFRotateType rotateType; - -@property (nonatomic, strong) UIWindow *previousKeyWindow; - -@property (nonatomic, strong) ZFLandscapeWindow *window; - -@property (nonatomic, readonly, getter=isRotating) BOOL rotating; - -@property (nonatomic, strong) ZFPortraitViewController *portraitViewController; - -/// current device orientation observer is activie. -@property (nonatomic, assign) BOOL activeDeviceObserver; - -/// Force Rotaion, default NO. -@property (nonatomic, assign) BOOL forceRotaion; - -@end - -@implementation ZFOrientationObserver -@synthesize presentationSize = _presentationSize; - -- (instancetype)init { - self = [super init]; - if (self) { - _duration = 0.30; - _fullScreenMode = ZFFullScreenModeLandscape; - _supportInterfaceOrientation = ZFInterfaceOrientationMaskAllButUpsideDown; - _allowOrientationRotation = YES; - _rotateType = ZFRotateTypeNormal; - _currentOrientation = UIInterfaceOrientationPortrait; - _portraitFullScreenMode = ZFPortraitFullScreenModeScaleToFill; - _disablePortraitGestureTypes = ZFDisablePortraitGestureTypesAll; - } - return self; -} - -- (void)updateRotateView:(ZFPlayerView *)rotateView - containerView:(UIView *)containerView { - self.rotateType = ZFRotateTypeNormal; - self.view = rotateView; - self.containerView = containerView; -} - -- (void)updateRotateView:(ZFPlayerView *)rotateView rotateViewAtCell:(UIView *)cell playerViewTag:(NSInteger)playerViewTag { - self.rotateType = ZFRotateTypeCell; - self.view = rotateView; - self.cell = cell; - self.playerViewTag = playerViewTag; -} - -- (void)dealloc { - [self removeDeviceOrientationObserver]; -} - -- (void)addDeviceOrientationObserver { - if (self.allowOrientationRotation) { - self.activeDeviceObserver = YES; - if (![UIDevice currentDevice].generatesDeviceOrientationNotifications) { - [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; - } - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleDeviceOrientationChange) name:UIDeviceOrientationDidChangeNotification object:nil]; - } -} - -- (void)removeDeviceOrientationObserver { - self.activeDeviceObserver = NO; - if (![UIDevice currentDevice].generatesDeviceOrientationNotifications) { - [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications]; - } - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil]; -} - -- (void)handleDeviceOrientationChange { - if (self.fullScreenMode == ZFFullScreenModePortrait || !self.allowOrientationRotation) return; - if (!UIDeviceOrientationIsValidInterfaceOrientation([UIDevice currentDevice].orientation)) { - return; - } - UIInterfaceOrientation currentOrientation = (UIInterfaceOrientation)[UIDevice currentDevice].orientation; - - // Determine that if the current direction is the same as the direction you want to rotate, do nothing - if (currentOrientation == _currentOrientation) return; - _currentOrientation = currentOrientation; - if (_currentOrientation == UIInterfaceOrientationPortraitUpsideDown) return; - - switch (currentOrientation) { - case UIInterfaceOrientationPortrait: { - if ([self _isSupportedPortrait]) { - [self rotateToOrientation:UIInterfaceOrientationPortrait animated:YES]; - } - } - break; - case UIInterfaceOrientationLandscapeLeft: { - if ([self _isSupportedLandscapeLeft]) { - [self rotateToOrientation:UIInterfaceOrientationLandscapeLeft animated:YES]; - } - } - break; - case UIInterfaceOrientationLandscapeRight: { - if ([self _isSupportedLandscapeRight]) { - [self rotateToOrientation:UIInterfaceOrientationLandscapeRight animated:YES]; - } - } - break; - default: break; - } -} - -- (void)interfaceOrientation:(UIInterfaceOrientation)orientation { - if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) { - SEL selector = NSSelectorFromString(@"setOrientation:"); - NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]]; - [invocation setSelector:selector]; - [invocation setTarget:[UIDevice currentDevice]]; - UIInterfaceOrientation val = orientation; - [invocation setArgument:&val atIndex:2]; - [invocation invoke]; - } -} - -#pragma mark - public - -- (void)rotateToOrientation:(UIInterfaceOrientation)orientation animated:(BOOL)animated { - [self rotateToOrientation:orientation animated:animated completion:nil]; -} - -- (void)rotateToOrientation:(UIInterfaceOrientation)orientation animated:(BOOL)animated completion:(void(^ __nullable)(void))completion { - if (self.fullScreenMode == ZFFullScreenModePortrait) return; - _currentOrientation = orientation; - self.forceRotaion = YES; - if (UIInterfaceOrientationIsLandscape(orientation)) { - if (!self.fullScreen) { - UIView *containerView = nil; - if (self.rotateType == ZFRotateTypeCell) { - containerView = [self.cell viewWithTag:self.playerViewTag]; - } else { - containerView = self.containerView; - } - CGRect targetRect = [self.view convertRect:self.view.frame toView:containerView.window]; - - if (!self.window) { - self.window = [ZFLandscapeWindow new]; - self.window.landscapeViewController.delegate = self; - if (@available(iOS 9.0, *)) { - [self.window.rootViewController loadViewIfNeeded]; - } else { - [self.window.rootViewController view]; - } - } - - self.window.landscapeViewController.targetRect = targetRect; - self.window.landscapeViewController.contentView = self.view; - self.window.landscapeViewController.containerView = self.containerView; - self.fullScreen = YES; - } - if (self.orientationWillChange) self.orientationWillChange(self, self.isFullScreen); - } else { - self.fullScreen = NO; - } - self.window.landscapeViewController.disableAnimations = !animated; - @zf_weakify(self) - self.window.landscapeViewController.rotatingCompleted = ^{ - @zf_strongify(self) - self.forceRotaion = NO; - if (completion) completion(); - }; - - [self interfaceOrientation:UIInterfaceOrientationUnknown]; - [self interfaceOrientation:orientation]; -} - -- (void)enterPortraitFullScreen:(BOOL)fullScreen animated:(BOOL)animated { - [self enterPortraitFullScreen:fullScreen animated:animated completion:nil]; -} - -- (void)enterPortraitFullScreen:(BOOL)fullScreen animated:(BOOL)animated completion:(void(^ __nullable)(void))completion { - self.fullScreen = fullScreen; - if (fullScreen) { - self.portraitViewController.contentView = self.view; - self.portraitViewController.containerView = self.containerView; - self.portraitViewController.duration = self.duration; - if (self.portraitFullScreenMode == ZFPortraitFullScreenModeScaleAspectFit) { - self.portraitViewController.presentationSize = self.presentationSize; - } else if (self.portraitFullScreenMode == ZFPortraitFullScreenModeScaleToFill) { - self.portraitViewController.presentationSize = CGSizeMake(ZFPlayerScreenWidth, ZFPlayerScreenHeight); - } - self.portraitViewController.fullScreenAnimation = animated; - [[UIWindow zf_currentViewController] presentViewController:self.portraitViewController animated:animated completion:^{ - if (completion) completion(); - }]; - } else { - self.portraitViewController.fullScreenAnimation = animated; - [self.portraitViewController dismissViewControllerAnimated:animated completion:^{ - if (completion) completion(); - }]; - } -} - -- (void)enterFullScreen:(BOOL)fullScreen animated:(BOOL)animated { - [self enterFullScreen:fullScreen animated:animated]; -} - -- (void)enterFullScreen:(BOOL)fullScreen animated:(BOOL)animated completion:(void (^ _Nullable)(void))completion { - if (self.fullScreenMode == ZFFullScreenModePortrait) { - [self enterPortraitFullScreen:fullScreen animated:animated completion:completion]; - } else { - UIInterfaceOrientation orientation = UIInterfaceOrientationUnknown; - orientation = fullScreen? UIInterfaceOrientationLandscapeRight : UIInterfaceOrientationPortrait; - [self rotateToOrientation:orientation animated:animated completion:completion]; - } -} - -#pragma mark - private - -/// is support portrait -- (BOOL)_isSupportedPortrait { - return self.supportInterfaceOrientation & ZFInterfaceOrientationMaskPortrait; -} - -/// is support landscapeLeft -- (BOOL)_isSupportedLandscapeLeft { - return self.supportInterfaceOrientation & ZFInterfaceOrientationMaskLandscapeLeft; -} - -/// is support landscapeRight -- (BOOL)_isSupportedLandscapeRight { - return self.supportInterfaceOrientation & ZFInterfaceOrientationMaskLandscapeRight; -} - -- (BOOL)_isSupported:(UIInterfaceOrientation)orientation { - switch (orientation) { - case UIInterfaceOrientationPortrait: - return self.supportInterfaceOrientation & ZFInterfaceOrientationMaskPortrait; - case UIInterfaceOrientationLandscapeLeft: - return self.supportInterfaceOrientation & ZFInterfaceOrientationMaskLandscapeLeft; - case UIInterfaceOrientationLandscapeRight: - return self.supportInterfaceOrientation & ZFInterfaceOrientationMaskLandscapeRight; - default: - return NO; - } - return NO; -} - -- (void)_rotationToLandscapeOrientation:(UIInterfaceOrientation)orientation { - if (UIInterfaceOrientationIsLandscape(orientation)) { - UIWindow *keyWindow = UIApplication.sharedApplication.keyWindow; - if (keyWindow != self.window && self.previousKeyWindow != keyWindow) { - self.previousKeyWindow = UIApplication.sharedApplication.keyWindow; - } - if (!self.window.isKeyWindow) { - self.window.hidden = NO; - [self.window makeKeyAndVisible]; - } - } -} - -- (void)_rotationToPortraitOrientation:(UIInterfaceOrientation)orientation { - if (orientation == UIInterfaceOrientationPortrait && !self.window.hidden) { - UIView *containerView = nil; - if (self.rotateType == ZFRotateTypeCell) { - containerView = [self.cell viewWithTag:self.playerViewTag]; - } else { - containerView = self.containerView; - } - UIView *snapshot = [self.view snapshotViewAfterScreenUpdates:NO]; - snapshot.frame = containerView.bounds; - [containerView addSubview:snapshot]; - [self performSelector:@selector(_contentViewAdd:) onThread:NSThread.mainThread withObject:containerView waitUntilDone:NO modes:@[NSDefaultRunLoopMode]]; - [self performSelector:@selector(_makeKeyAndVisible:) onThread:NSThread.mainThread withObject:snapshot waitUntilDone:NO modes:@[NSDefaultRunLoopMode]]; - } -} - -- (void)_contentViewAdd:(UIView *)containerView { - [containerView addSubview:self.view]; - self.view.frame = containerView.bounds; - [self.view layoutIfNeeded]; -} - -- (void)_makeKeyAndVisible:(UIView *)snapshot { - [snapshot removeFromSuperview]; - UIWindow *previousKeyWindow = self.previousKeyWindow ?: UIApplication.sharedApplication.windows.firstObject; - [previousKeyWindow makeKeyAndVisible]; - self.previousKeyWindow = nil; - self.window.hidden = YES; -} - -#pragma mark - ZFLandscapeViewControllerDelegate - -- (BOOL)ls_shouldAutorotate { - if (self.fullScreenMode == ZFFullScreenModePortrait) { - return NO; - } - - UIInterfaceOrientation currentOrientation = (UIInterfaceOrientation)[UIDevice currentDevice].orientation; - if (![self _isSupported:currentOrientation]) { - return NO; - } - - if (self.forceRotaion) { - [self _rotationToLandscapeOrientation:currentOrientation]; - return YES; - } - - if (!self.activeDeviceObserver) { - return NO; - } - - [self _rotationToLandscapeOrientation:currentOrientation]; - return YES; -} - -- (void)ls_willRotateToOrientation:(UIInterfaceOrientation)orientation { - self.fullScreen = UIInterfaceOrientationIsLandscape(orientation); - if (self.orientationWillChange) self.orientationWillChange(self, self.isFullScreen); -} - -- (void)ls_didRotateFromOrientation:(UIInterfaceOrientation)orientation { - if (self.orientationDidChanged) self.orientationDidChanged(self, self.isFullScreen); - if (!self.isFullScreen) { - [self _rotationToPortraitOrientation:UIInterfaceOrientationPortrait]; - } -} - -- (CGRect)ls_targetRect { - UIView *containerView = nil; - if (self.rotateType == ZFRotateTypeCell) { - containerView = [self.cell viewWithTag:self.playerViewTag]; - } else { - containerView = self.containerView; - } - CGRect targetRect = [containerView convertRect:containerView.bounds toView:containerView.window]; - return targetRect; -} - -#pragma mark - getter - -- (ZFPortraitViewController *)portraitViewController { - if (!_portraitViewController) { - @zf_weakify(self) - _portraitViewController = [[ZFPortraitViewController alloc] init]; - if (@available(iOS 9.0, *)) { - [_portraitViewController loadViewIfNeeded]; - } else { - [_portraitViewController view]; - } - _portraitViewController.orientationWillChange = ^(BOOL isFullScreen) { - @zf_strongify(self) - self.fullScreen = isFullScreen; - if (self.orientationWillChange) self.orientationWillChange(self, isFullScreen); - }; - _portraitViewController.orientationDidChanged = ^(BOOL isFullScreen) { - @zf_strongify(self) - self.fullScreen = isFullScreen; - if (self.orientationDidChanged) self.orientationDidChanged(self, isFullScreen); - }; - } - return _portraitViewController; -} - -#pragma mark - setter - -- (void)setLockedScreen:(BOOL)lockedScreen { - _lockedScreen = lockedScreen; - if (lockedScreen) { - [self removeDeviceOrientationObserver]; - } else { - [self addDeviceOrientationObserver]; - } -} - -- (UIView *)fullScreenContainerView { - if (self.fullScreenMode == ZFFullScreenModeLandscape) { - return self.window.landscapeViewController.view; - } else if (self.fullScreenMode == ZFFullScreenModePortrait) { - return self.portraitViewController.view; - } - return nil; -} - -- (void)setFullScreen:(BOOL)fullScreen { - _fullScreen = fullScreen; - [self.window.landscapeViewController setNeedsStatusBarAppearanceUpdate]; - [UIViewController attemptRotationToDeviceOrientation]; -} - -- (void)setFullScreenStatusBarHidden:(BOOL)fullScreenStatusBarHidden { - _fullScreenStatusBarHidden = fullScreenStatusBarHidden; - if (self.fullScreenMode == ZFFullScreenModePortrait) { - self.portraitViewController.statusBarHidden = fullScreenStatusBarHidden; - [self.portraitViewController setNeedsStatusBarAppearanceUpdate]; - } else if (self.fullScreenMode == ZFFullScreenModeLandscape) { - self.window.landscapeViewController.statusBarHidden = fullScreenStatusBarHidden; - [self.window.landscapeViewController setNeedsStatusBarAppearanceUpdate]; - } -} - -- (void)setFullScreenStatusBarStyle:(UIStatusBarStyle)fullScreenStatusBarStyle { - _fullScreenStatusBarStyle = fullScreenStatusBarStyle; - if (self.fullScreenMode == ZFFullScreenModePortrait) { - self.portraitViewController.statusBarStyle = fullScreenStatusBarStyle; - [self.portraitViewController setNeedsStatusBarAppearanceUpdate]; - } else if (self.fullScreenMode == ZFFullScreenModeLandscape) { - self.window.landscapeViewController.statusBarStyle = fullScreenStatusBarStyle; - [self.window.landscapeViewController setNeedsStatusBarAppearanceUpdate]; - } -} - -- (void)setFullScreenStatusBarAnimation:(UIStatusBarAnimation)fullScreenStatusBarAnimation { - _fullScreenStatusBarAnimation = fullScreenStatusBarAnimation; - if (self.fullScreenMode == ZFFullScreenModePortrait) { - self.portraitViewController.statusBarAnimation = fullScreenStatusBarAnimation; - [self.portraitViewController setNeedsStatusBarAppearanceUpdate]; - } else if (self.fullScreenMode == ZFFullScreenModeLandscape) { - self.window.landscapeViewController.statusBarAnimation = fullScreenStatusBarAnimation; - [self.window.landscapeViewController setNeedsStatusBarAppearanceUpdate]; - } -} - -- (void)setDisablePortraitGestureTypes:(ZFDisablePortraitGestureTypes)disablePortraitGestureTypes { - _disablePortraitGestureTypes = disablePortraitGestureTypes; - self.portraitViewController.disablePortraitGestureTypes = disablePortraitGestureTypes; -} - -- (void)setPresentationSize:(CGSize)presentationSize { - _presentationSize = presentationSize; - if (self.fullScreenMode == ZFFullScreenModePortrait && self.portraitFullScreenMode == ZFPortraitFullScreenModeScaleAspectFit) { - self.portraitViewController.presentationSize = presentationSize; - } -} - -- (void)setView:(ZFPlayerView *)view { - if (view == _view) { - return; - } - _view = view; - if (self.fullScreenMode == ZFFullScreenModeLandscape && self.window) { - self.window.landscapeViewController.contentView = view; - } else if (self.fullScreenMode == ZFFullScreenModePortrait) { - self.portraitViewController.contentView = view; - } -} - -- (void)setContainerView:(UIView *)containerView { - if (containerView == _containerView) { - return; - } - _containerView = containerView; - if (self.fullScreenMode == ZFFullScreenModeLandscape) { - self.window.landscapeViewController.containerView = containerView; - } else if (self.fullScreenMode == ZFFullScreenModePortrait) { - self.portraitViewController.containerView = containerView; - } -} - -- (void)setAllowOrientationRotation:(BOOL)allowOrientationRotation { - _allowOrientationRotation = allowOrientationRotation; - if (allowOrientationRotation) { - [self addDeviceOrientationObserver]; - } else { - [self removeDeviceOrientationObserver]; - } -} - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPersentInteractiveTransition.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPersentInteractiveTransition.h deleted file mode 100644 index afba5b0..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPersentInteractiveTransition.h +++ /dev/null @@ -1,47 +0,0 @@ -// -// ZFPersentInteractiveTransition.h -// ZFPlayer -// -// Copyright (c) 2020年 任子丰 ( http://github.com/renzifeng ) -// -// 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 -#import "ZFOrientationObserver.h" - -@interface ZFPersentInteractiveTransition : UIPercentDrivenInteractiveTransition - -@property (nonatomic, weak) id delagate; - -@property (nonatomic, assign) BOOL interation; - -/// default is ZFDisablePortraitGestureTypesNone. -@property (nonatomic, assign) ZFDisablePortraitGestureTypes disablePortraitGestureTypes; - -@property (nonatomic, assign) BOOL fullScreenAnimation; - -@property (nonatomic, assign) CGRect contentFullScreenRect; - -@property (nonatomic, weak) UIViewController *viewController; - -- (void)updateContentView:(UIView *)contenView - containerView:(UIView *)containerView; - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPersentInteractiveTransition.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPersentInteractiveTransition.m deleted file mode 100644 index d0f5868..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPersentInteractiveTransition.m +++ /dev/null @@ -1,296 +0,0 @@ -// -// ZFPersentInteractiveTransition.m -// ZFPlayer -// -// Copyright (c) 2020年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "ZFPersentInteractiveTransition.h" - -@interface ZFPersentInteractiveTransition () - -@property (nonatomic, weak) id transitionContext; -@property (nonatomic, strong) UIView *bgView; -@property (nonatomic, assign) CGPoint transitionImgViewCenter; -@property (nonatomic, strong) UIView *contentView; -@property (nonatomic, strong) UIView *containerView; -@property (nonatomic, assign) CGFloat scrollViewZoomScale; -@property (nonatomic, assign) CGSize scrollViewContentSize; -@property (nonatomic, assign) CGPoint scrollViewContentOffset; -@property (nonatomic, strong) UIPanGestureRecognizer *panGesture; -@property (nonatomic, strong) UITapGestureRecognizer *tapGesture; -@property (nonatomic, assign) BOOL isDragging; - -@end - -@implementation ZFPersentInteractiveTransition - -- (void)updateContentView:(UIView *)contenView - containerView:(UIView *)containerView { - self.contentView = contenView; - self.containerView = containerView; -} - -- (void)removeGestureToView:(UIView *)view { - [view removeGestureRecognizer:self.tapGesture]; - [view removeGestureRecognizer:self.panGesture]; -} - -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { - if ([otherGestureRecognizer.view isKindOfClass:[UICollectionView class]]) { - return NO; - } - if ([otherGestureRecognizer.view isKindOfClass:[UIScrollView class]]) { - UIScrollView *scrollView = (UIScrollView *)otherGestureRecognizer.view; - if (scrollView.contentOffset.y <= 0 && !scrollView.zooming) { - return YES; - } - } - if ([otherGestureRecognizer isKindOfClass:[UITapGestureRecognizer class]] || [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) { - return NO; - } - return YES; -} - -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { - ZFDisablePortraitGestureTypes type = ZFDisablePortraitGestureTypesNone; - if (gestureRecognizer == self.tapGesture) type = ZFDisablePortraitGestureTypesTap; - else if (gestureRecognizer == self.panGesture) type = ZFDisablePortraitGestureTypesPan; - else return NO; - - switch (type) { - case ZFDisablePortraitGestureTypesTap: { - if (self.disablePortraitGestureTypes & ZFDisablePortraitGestureTypesTap) { - return NO; - } - } - break; - case ZFDisablePortraitGestureTypesPan: { - if (self.disablePortraitGestureTypes & ZFDisablePortraitGestureTypesPan) { - return NO; - } - } - break; - default: - break; - } - return YES; -} - -- (void)tapGestureAction { - [self.viewController dismissViewControllerAnimated:self.fullScreenAnimation completion:nil]; -} - -- (void)gestureRecognizeDidUpdate:(UIPanGestureRecognizer *)gestureRecognizer { - CGFloat scale = 0; - CGPoint translation = [gestureRecognizer translationInView:gestureRecognizer.view]; - scale = translation.y / ((gestureRecognizer.view.frame.size.height - 50) / 2); - - if (scale > 1.f) { - scale = 1.f; - } - switch (gestureRecognizer.state) { - case UIGestureRecognizerStateBegan: { - if (scale < 0) return; - self.interation = YES; - [self.viewController dismissViewControllerAnimated:self.fullScreenAnimation completion:nil]; - } - break; - case UIGestureRecognizerStateChanged: { - if (self.interation) { - if (scale < 0.f) { - scale = 0.f; - } - CGFloat imageViewScale = 1 - scale * 0.5; - if (imageViewScale < 0.4) { - imageViewScale = 0.4; - } - self.contentView.center = CGPointMake(self.transitionImgViewCenter.x + translation.x, self.transitionImgViewCenter.y + translation.y); - self.contentView.transform = CGAffineTransformMakeScale(imageViewScale, imageViewScale); - [self updateInterPercent:imageViewScale]; - [self updateInteractiveTransition:scale]; - } - } - break; - case UIGestureRecognizerStateEnded: { - if (self.interation) { - if (scale < 0.f) { - scale = 0.f; - } - self.interation = NO; - if (scale < 0.15f) { - [self cancelInteractiveTransition]; - [self interPercentCancel]; - } else { - [self finishInteractiveTransition]; - [self interPercentFinish]; - } - } - } - break; - default: { - if (self.interation) { - self.interation = NO; - [self cancelInteractiveTransition]; - [self interPercentCancel]; - } - } - break; - } -} - -- (void)beginInterPercent { - id transitionContext = self.transitionContext; - UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; - UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; - if ([toVC isKindOfClass:[UINavigationController class]]) { - UINavigationController *nav = (UINavigationController *)toVC; - toVC = nav.viewControllers.lastObject; - } else if ([toVC isKindOfClass:[UITabBarController class]]) { - UITabBarController *tabBar = (UITabBarController *)toVC; - if ([tabBar.selectedViewController isKindOfClass:[UINavigationController class]]) { - UINavigationController *nav = (UINavigationController *)tabBar.selectedViewController; - toVC = nav.viewControllers.lastObject; - } else { - toVC = tabBar.selectedViewController; - } - } - - UIView *containerView = [transitionContext containerView]; - CGRect tempImageViewFrame = [fromVC.view convertRect:self.contentView.frame toView:toVC.view]; - - self.bgView = [[UIView alloc] initWithFrame:containerView.bounds]; - self.contentView.frame = tempImageViewFrame; - self.transitionImgViewCenter = self.contentView.center; - - [containerView addSubview:self.bgView]; - [containerView addSubview:self.contentView]; - [containerView addSubview:fromVC.view]; - - self.bgView.backgroundColor = [UIColor blackColor]; - fromVC.view.backgroundColor = [UIColor clearColor]; -} - -- (void)updateInterPercent:(CGFloat)scale { - UIViewController *fromVC = [self.transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; - fromVC.view.alpha = scale; - self.bgView.alpha = scale; -} - -- (void)interPercentCancel { - id transitionContext = self.transitionContext; - UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; - [UIView animateWithDuration:0.2f animations:^{ - fromVC.view.alpha = 1; - self.contentView.transform = CGAffineTransformIdentity; - self.contentView.center = self.transitionImgViewCenter; - self.bgView.alpha = 1; - } completion:^(BOOL finished) { - fromVC.view.backgroundColor = [UIColor blackColor]; - self.contentView.layer.anchorPoint = CGPointMake(0.5f, 0.5f); - self.contentView.frame = self.contentFullScreenRect; - if (self.scrollViewContentOffset.y < 0) { - self.scrollViewContentOffset = CGPointMake(self.scrollViewContentOffset.x, 0); - } - [self.viewController.view addSubview:self.contentView]; - [self.bgView removeFromSuperview]; - self.bgView = nil; - [transitionContext completeTransition:![transitionContext transitionWasCancelled]]; - }]; -} - -- (void)interPercentFinish { - id transitionContext = self.transitionContext; - UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; - UIViewController *toVC = [self.transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; - if ([toVC isKindOfClass:[UINavigationController class]]) { - UINavigationController *nav = (UINavigationController *)toVC; - toVC = nav.viewControllers.lastObject; - } else if ([toVC isKindOfClass:[UITabBarController class]]) { - UITabBarController *tabBar = (UITabBarController *)toVC; - if ([tabBar.selectedViewController isKindOfClass:[UINavigationController class]]) { - UINavigationController *nav = (UINavigationController *)tabBar.selectedViewController; - toVC = nav.viewControllers.lastObject; - } else { - toVC = tabBar.selectedViewController; - } - } - CGRect tempImageViewFrame = self.contentView.frame; - self.contentView.layer.anchorPoint = CGPointMake(0.5, 0.5); - self.contentView.transform = CGAffineTransformIdentity; - self.contentView.frame = tempImageViewFrame; - - CGRect toRect = [self.containerView convertRect:self.containerView.bounds toView:self.containerView.window]; - [self.delagate zf_orientationWillChange:NO]; - [UIView animateWithDuration:0.3f animations:^{ - self.contentView.frame = toRect; - fromVC.view.alpha = 0; - self.bgView.alpha = 0; - toVC.navigationController.navigationBar.alpha = 1; - [self.contentView layoutIfNeeded]; - } completion:^(BOOL finished) { - [self.containerView addSubview:self.contentView]; - self.contentView.frame = self.containerView.bounds; - [self.contentView layoutIfNeeded]; - [self.bgView removeFromSuperview]; - fromVC.view.backgroundColor = [UIColor blackColor]; - [self.delagate zf_orientationDidChanged:NO]; - [transitionContext completeTransition:![transitionContext transitionWasCancelled]]; - }]; -} - -- (void)startInteractiveTransition:(id)transitionContext { - self.transitionContext = transitionContext; - [self beginInterPercent]; -} - -- (void)setInteration:(BOOL)interation { - _interation = interation; - if ([self.delagate respondsToSelector:@selector(zf_interationState:)]) { - [self.delagate zf_interationState:interation]; - } -} - -- (void)setViewController:(UIViewController *)viewController { - _viewController = viewController; - [self removeGestureToView:viewController.view]; - [viewController.view addGestureRecognizer:self.panGesture]; - [viewController.view addGestureRecognizer:self.tapGesture]; -} - -#pragma mark - getter - -- (UIPanGestureRecognizer *)panGesture { - if (!_panGesture) { - _panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(gestureRecognizeDidUpdate:)]; - _panGesture.delegate = self; - } - return _panGesture; -} - -- (UITapGestureRecognizer *)tapGesture { - if (!_tapGesture) { - _tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureAction)]; - _tapGesture.delegate = self; - } - return _tapGesture; -} - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayer.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayer.h deleted file mode 100644 index 574f5d3..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayer.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// ZFPlayer.h -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 - -//! Project version number for ZFPlayer. -FOUNDATION_EXPORT double ZFPlayerVersionNumber; - -//! Project version string for ZFPlayer. -FOUNDATION_EXPORT const unsigned char ZFPlayerVersionString[]; - -#import "ZFPlayerController.h" -#import "ZFPlayerMediaControl.h" -#import "ZFKVOController.h" -#import "UIScrollView+ZFPlayer.h" -#import "ZFPlayerLogManager.h" -#import "ZFPlayerConst.h" diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerConst.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerConst.h deleted file mode 100644 index c96ca57..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerConst.h +++ /dev/null @@ -1,130 +0,0 @@ -// -// ZFPlayerConst.h -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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. - -typedef NS_ENUM(NSUInteger, ZFPlayerPlaybackState) { - ZFPlayerPlayStateUnknown, - ZFPlayerPlayStatePlaying, - ZFPlayerPlayStatePaused, - ZFPlayerPlayStatePlayFailed, - ZFPlayerPlayStatePlayStopped -}; - -typedef NS_OPTIONS(NSUInteger, ZFPlayerLoadState) { - ZFPlayerLoadStateUnknown = 0, - ZFPlayerLoadStatePrepare = 1 << 0, - ZFPlayerLoadStatePlayable = 1 << 1, - ZFPlayerLoadStatePlaythroughOK = 1 << 2, // Playback will be automatically started. - ZFPlayerLoadStateStalled = 1 << 3, // Playback will be automatically paused in this state, if started. -}; - -typedef NS_ENUM(NSInteger, ZFPlayerScalingMode) { - ZFPlayerScalingModeNone, // No scaling. - ZFPlayerScalingModeAspectFit, // Uniform scale until one dimension fits. - ZFPlayerScalingModeAspectFill, // Uniform scale until the movie fills the visible bounds. One dimension may have clipped contents. - ZFPlayerScalingModeFill // Non-uniform scale. Both render dimensions will exactly match the visible bounds. -}; - -/** - Synthsize a weak or strong reference. - - Example: - @zf_weakify(self) - [self doSomething^{ - @zf_strongify(self) - if (!self) return; - ... - }]; - - */ -#ifndef weakify -#if DEBUG -#if __has_feature(objc_arc) -#define zf_weakify(object) autoreleasepool{} __weak __typeof__(object) weak##_##object = object; -#else -#define zf_weakify(object) autoreleasepool{} __block __typeof__(object) block##_##object = object; -#endif -#else -#if __has_feature(objc_arc) -#define zf_weakify(object) try{} @finally{} {} __weak __typeof__(object) weak##_##object = object; -#else -#define zf_weakify(object) try{} @finally{} {} __block __typeof__(object) block##_##object = object; -#endif -#endif -#endif - -#ifndef strongify -#if DEBUG -#if __has_feature(objc_arc) -#define zf_strongify(object) autoreleasepool{} __typeof__(object) object = weak##_##object; -#else -#define zf_strongify(object) autoreleasepool{} __typeof__(object) object = block##_##object; -#endif -#else -#if __has_feature(objc_arc) -#define zf_strongify(object) try{} @finally{} __typeof__(object) object = weak##_##object; -#else -#define zf_strongify(object) try{} @finally{} __typeof__(object) object = block##_##object; -#endif -#endif -#endif - -// Screen width -#define ZFPlayerScreenWidth [[UIScreen mainScreen] bounds].size.width -// Screen height -#define ZFPlayerScreenHeight [[UIScreen mainScreen] bounds].size.height - - -// deprecated -#ifndef weakify -#if DEBUG -#if __has_feature(objc_arc) -#define weakify(object) autoreleasepool{} __weak __typeof__(object) weak##_##object = object; -#else -#define weakify(object) autoreleasepool{} __block __typeof__(object) block##_##object = object; -#endif -#else -#if __has_feature(objc_arc) -#define weakify(object) try{} @finally{} {} __weak __typeof__(object) weak##_##object = object; -#else -#define weakify(object) try{} @finally{} {} __block __typeof__(object) block##_##object = object; -#endif -#endif -#endif - -#ifndef strongify -#if DEBUG -#if __has_feature(objc_arc) -#define strongify(object) autoreleasepool{} __typeof__(object) object = weak##_##object; -#else -#define strongify(object) autoreleasepool{} __typeof__(object) object = block##_##object; -#endif -#else -#if __has_feature(objc_arc) -#define strongify(object) try{} @finally{} __typeof__(object) object = weak##_##object; -#else -#define strongify(object) try{} @finally{} __typeof__(object) object = block##_##object; -#endif -#endif -#endif - diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerController.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerController.h deleted file mode 100644 index 08ac125..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerController.h +++ /dev/null @@ -1,608 +0,0 @@ -// -// ZFPlayerController.h -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 -#import -#import "ZFPlayerMediaPlayback.h" -#import "ZFOrientationObserver.h" -#import "ZFPlayerMediaControl.h" -#import "ZFPlayerGestureControl.h" -#import "ZFPlayerNotification.h" -#import "ZFFloatView.h" -#import "UIScrollView+ZFPlayer.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface ZFPlayerController : NSObject - -/// The video contrainerView in normal model. -@property (nonatomic, strong) UIView *containerView; - -/// The currentPlayerManager must conform `ZFPlayerMediaPlayback` protocol. -@property (nonatomic, strong) id currentPlayerManager; - -/// The custom controlView must conform `ZFPlayerMediaControl` protocol. -@property (nonatomic, strong) UIView *controlView; - -/// The notification manager class. -@property (nonatomic, strong, readonly) ZFPlayerNotification *notification; - -/// The container view type. -@property (nonatomic, assign, readonly) ZFPlayerContainerType containerType; - -/// The player's small container view. -@property (nonatomic, strong, readonly) ZFFloatView *smallFloatView; - -/// Whether the small window is displayed. -@property (nonatomic, assign, readonly) BOOL isSmallFloatViewShow; - -/*! - @method playerWithPlayerManager:containerView: - @abstract Create an ZFPlayerController that plays a single audiovisual item. - @param playerManager must conform `ZFPlayerMediaPlayback` protocol. - @param containerView to see the video frames must set the contrainerView. - @result An instance of ZFPlayerController. - */ -+ (instancetype)playerWithPlayerManager:(id)playerManager containerView:(UIView *)containerView; - -/*! - @method initWithPlayerManager:containerView: - @abstract Create an ZFPlayerController that plays a single audiovisual item. - @param playerManager must conform `ZFPlayerMediaPlayback` protocol. - @param containerView to see the video frames must set the contrainerView. - @result An instance of ZFPlayerController. - */ -- (instancetype)initWithPlayerManager:(id)playerManager containerView:(UIView *)containerView; - -/*! - @method playerWithScrollView:playerManager:containerViewTag: - @abstract Create an ZFPlayerController that plays a single audiovisual item. Use in `UITableView` or `UICollectionView`. - @param scrollView is `tableView` or `collectionView`. - @param playerManager must conform `ZFPlayerMediaPlayback` protocol. - @param containerViewTag to see the video at scrollView must set the contrainerViewTag. - @result An instance of ZFPlayerController. - */ -+ (instancetype)playerWithScrollView:(UIScrollView *)scrollView playerManager:(id)playerManager containerViewTag:(NSInteger)containerViewTag; - -/*! - @method initWithScrollView:playerManager:containerViewTag: - @abstract Create an ZFPlayerController that plays a single audiovisual item. Use in `UITableView` or `UICollectionView`. - @param scrollView is `tableView` or `collectionView`. - @param playerManager must conform `ZFPlayerMediaPlayback` protocol. - @param containerViewTag to see the video at scrollView must set the contrainerViewTag. - @result An instance of ZFPlayerController. - */ -- (instancetype)initWithScrollView:(UIScrollView *)scrollView playerManager:(id)playerManager containerViewTag:(NSInteger)containerViewTag; - -/*! - @method playerWithScrollView:playerManager:containerView: - @abstract Create an ZFPlayerController that plays a single audiovisual item. Use in `UIScrollView`. - @param playerManager must conform `ZFPlayerMediaPlayback` protocol. - @param containerView to see the video at the scrollView. - @result An instance of ZFPlayerController. - */ -+ (instancetype)playerWithScrollView:(UIScrollView *)scrollView playerManager:(id)playerManager containerView:(UIView *)containerView; - -/*! - @method initWithScrollView:playerManager:containerView: - @abstract Create an ZFPlayerController that plays a single audiovisual item. Use in `UIScrollView`. - @param playerManager must conform `ZFPlayerMediaPlayback` protocol. - @param containerView to see the video at the scrollView. - @result An instance of ZFPlayerController. - */ -- (instancetype)initWithScrollView:(UIScrollView *)scrollView playerManager:(id)playerManager containerView:(UIView *)containerView; - -@end - -@interface ZFPlayerController (ZFPlayerTimeControl) - -/// The player current play time. -@property (nonatomic, readonly) NSTimeInterval currentTime; - -/// The player total time. -@property (nonatomic, readonly) NSTimeInterval totalTime; - -/// The player buffer time. -@property (nonatomic, readonly) NSTimeInterval bufferTime; - -/// The player progress, 0...1 -@property (nonatomic, readonly) float progress; - -/// The player bufferProgress, 0...1 -@property (nonatomic, readonly) float bufferProgress; - -/** - Use this method to seek to a specified time for the current player and to be notified when the seek operation is complete. - - @param time seek time. - @param completionHandler completion handler. - */ -- (void)seekToTime:(NSTimeInterval)time completionHandler:(void (^ __nullable)(BOOL finished))completionHandler; - -@end - -@interface ZFPlayerController (ZFPlayerPlaybackControl) - -/// Resume playback record.default is NO. -/// Memory storage playback records. -@property (nonatomic, assign) BOOL resumePlayRecord; - -/// 0...1.0 -/// Only affects audio volume for the device instance and not for the player. -/// You can change device volume or player volume as needed,change the player volume you can conform the `ZFPlayerMediaPlayback` protocol. -@property (nonatomic) float volume; - -/// The device muted. -/// Only affects audio muting for the device instance and not for the player. -/// You can change device mute or player mute as needed,change the player mute you can conform the `ZFPlayerMediaPlayback` protocol. -@property (nonatomic, getter=isMuted) BOOL muted; - -// 0...1.0, where 1.0 is maximum brightness. Only supported by main screen. -@property (nonatomic) float brightness; - -/// The play asset URL. -@property (nonatomic) NSURL *assetURL; - -/// If tableView or collectionView has only one section , use `assetURLs`. -/// If tableView or collectionView has more sections , use `sectionAssetURLs`. -/// Set this you can use `playTheNext` `playThePrevious` `playTheIndex:` method. -@property (nonatomic, copy, nullable) NSArray *assetURLs; - -/// The currently playing index,limited to one-dimensional arrays. -@property (nonatomic) NSInteger currentPlayIndex; - -/// is the last asset URL in `assetURLs`. -@property (nonatomic, readonly) BOOL isLastAssetURL; - -/// is the first asset URL in `assetURLs`. -@property (nonatomic, readonly) BOOL isFirstAssetURL; - -/// If Yes, player will be called pause method When Received `UIApplicationWillResignActiveNotification` notification. -/// default is YES. -@property (nonatomic) BOOL pauseWhenAppResignActive; - -/// When the player is playing, it is paused by some event,not by user click to pause. -/// For example, when the player is playing, application goes into the background or pushed to another viewController -@property (nonatomic, getter=isPauseByEvent) BOOL pauseByEvent; - -/// The current player controller is disappear, not dealloc -@property (nonatomic, getter=isViewControllerDisappear) BOOL viewControllerDisappear; - -/// You can custom the AVAudioSession, -/// default is NO. -@property (nonatomic, assign) BOOL customAudioSession; - -/// The block invoked when the player is Prepare to play. -@property (nonatomic, copy, nullable) void(^playerPrepareToPlay)(id asset, NSURL *assetURL); - -/// The block invoked when the player is Ready to play. -@property (nonatomic, copy, nullable) void(^playerReadyToPlay)(id asset, NSURL *assetURL); - -/// The block invoked when the player play progress changed. -@property (nonatomic, copy, nullable) void(^playerPlayTimeChanged)(id asset, NSTimeInterval currentTime, NSTimeInterval duration); - -/// The block invoked when the player play buffer changed. -@property (nonatomic, copy, nullable) void(^playerBufferTimeChanged)(id asset, NSTimeInterval bufferTime); - -/// The block invoked when the player playback state changed. -@property (nonatomic, copy, nullable) void(^playerPlayStateChanged)(id asset, ZFPlayerPlaybackState playState); - -/// The block invoked when the player load state changed. -@property (nonatomic, copy, nullable) void(^playerLoadStateChanged)(id asset, ZFPlayerLoadState loadState); - -/// The block invoked when the player play failed. -@property (nonatomic, copy, nullable) void(^playerPlayFailed)(id asset, id error); - -/// The block invoked when the player play end. -@property (nonatomic, copy, nullable) void(^playerDidToEnd)(id asset); - -// The block invoked when video size changed. -@property (nonatomic, copy, nullable) void(^presentationSizeChanged)(id asset, CGSize size); - -/** - Play the next url ,while the `assetURLs` is not NULL. - */ -- (void)playTheNext; - -/** - Play the previous url ,while the `assetURLs` is not NULL. - */ -- (void)playThePrevious; - -/** - Play the index of url ,while the `assetURLs` is not NULL. - - @param index play the index. - */ -- (void)playTheIndex:(NSInteger)index; - -/** - Player stop and playerView remove from super view,remove other notification. - */ -- (void)stop; - -/*! - @method replaceCurrentPlayerManager: - @abstract Replaces the player's current playeranager with the specified player item. - @param manager must conform `ZFPlayerMediaPlayback` protocol - @discussion The playerManager that will become the player's current playeranager. - */ -- (void)replaceCurrentPlayerManager:(id)manager; - -/** - Add video to cell. - */ -- (void)addPlayerViewToCell; - -/** - Add video to container view. - */ -- (void)addPlayerViewToContainerView:(UIView *)containerView; - -/** - Add to small float view. - */ -- (void)addPlayerViewToSmallFloatView; - -/** - Stop the current playing video and remove the playerView. - */ -- (void)stopCurrentPlayingView; - -/** - stop the current playing video on cell. - */ -- (void)stopCurrentPlayingCell; - -@end - -@interface ZFPlayerController (ZFPlayerOrientationRotation) - -@property (nonatomic, readonly) ZFOrientationObserver *orientationObserver; - -/// Whether automatic screen rotation is supported. -/// The value is NO. -/// This property is used for the return value of UIViewController `shouldAutorotate` method. -@property (nonatomic, readonly) BOOL shouldAutorotate; - -/// Whether allow the video orientation rotate. -/// default is YES. -@property (nonatomic) BOOL allowOrentitaionRotation; - -/// When ZFFullScreenMode is ZFFullScreenModeLandscape the orientation is LandscapeLeft or LandscapeRight, this value is YES. -/// When ZFFullScreenMode is ZFFullScreenModePortrait, while the player fullSceen this value is YES. -@property (nonatomic, readonly) BOOL isFullScreen; - -/// when call the `stop` method, exit the fullScreen model, default is YES. -@property (nonatomic, assign) BOOL exitFullScreenWhenStop; - -/// Lock the screen orientation. -@property (nonatomic, getter=isLockedScreen) BOOL lockedScreen; - -/// The current orientation of the player. -/// Default is UIInterfaceOrientationPortrait. -@property (nonatomic, readonly) UIInterfaceOrientation currentOrientation; - -/// The block invoked When player will rotate. -@property (nonatomic, copy, nullable) void(^orientationWillChange)(ZFPlayerController *player, BOOL isFullScreen); - -/// The block invoked when player rotated. -@property (nonatomic, copy, nullable) void(^orientationDidChanged)(ZFPlayerController *player, BOOL isFullScreen); - -/// default is UIStatusBarStyleLightContent. -@property (nonatomic, assign) UIStatusBarStyle fullScreenStatusBarStyle; - -/// defalut is UIStatusBarAnimationSlide. -@property (nonatomic, assign) UIStatusBarAnimation fullScreenStatusBarAnimation; - -/// The fullscreen statusbar hidden. -@property (nonatomic, getter=isStatusBarHidden) BOOL statusBarHidden; - -/** - Add the device orientation observer. - */ -- (void)addDeviceOrientationObserver; - -/** - Remove the device orientation observer. - */ -- (void)removeDeviceOrientationObserver; - -/** - Enter the fullScreen while the ZFFullScreenMode is ZFFullScreenModeLandscape. - - @param orientation is UIInterfaceOrientation. - @param animated is animated. -*/ -- (void)rotateToOrientation:(UIInterfaceOrientation)orientation animated:(BOOL)animated; - -/** - Enter the fullScreen while the ZFFullScreenMode is ZFFullScreenModeLandscape. - - @param orientation is UIInterfaceOrientation. - @param animated is animated. - @param completion rotating completed callback. -*/ -- (void)rotateToOrientation:(UIInterfaceOrientation)orientation animated:(BOOL)animated completion:(void(^ __nullable)(void))completion; - -/** - Enter the fullScreen while the ZFFullScreenMode is ZFFullScreenModePortrait. - - @param fullScreen is fullscreen. - @param animated is animated. - @param completion rotating completed callback. - */ -- (void)enterPortraitFullScreen:(BOOL)fullScreen animated:(BOOL)animated completion:(void(^ __nullable)(void))completion; - -/** - Enter the fullScreen while the ZFFullScreenMode is ZFFullScreenModePortrait. - - @param fullScreen is fullscreen. - @param animated is animated. - */ -- (void)enterPortraitFullScreen:(BOOL)fullScreen animated:(BOOL)animated; - -/** - FullScreen mode is determined by ZFFullScreenMode. - - @param fullScreen is fullscreen. - @param animated is animated. - @param completion rotating completed callback. - */ -- (void)enterFullScreen:(BOOL)fullScreen animated:(BOOL)animated completion:(void(^ __nullable)(void))completion; - -/** - FullScreen mode is determined by ZFFullScreenMode. - - @param fullScreen is fullscreen. - @param animated is animated. - */ -- (void)enterFullScreen:(BOOL)fullScreen animated:(BOOL)animated; - -@end - -@interface ZFPlayerController (ZFPlayerViewGesture) - -/// An instance of ZFPlayerGestureControl. -@property (nonatomic, readonly) ZFPlayerGestureControl *gestureControl; - -/// The gesture types that the player not support. -@property (nonatomic, assign) ZFPlayerDisableGestureTypes disableGestureTypes; - -/// The pan gesture moving direction that the player not support. -@property (nonatomic) ZFPlayerDisablePanMovingDirection disablePanMovingDirection; - -@end - -@interface ZFPlayerController (ZFPlayerScrollView) - -/// The scroll view is `tableView` or `collectionView`. -@property (nonatomic, readonly, nullable) UIScrollView *scrollView; - -/// The scrollView player should auto player, default is YES. -@property (nonatomic) BOOL shouldAutoPlay; - -/// WWAN network auto play, only support in scrollView mode when the `shouldAutoPlay` is YES, default is NO. -@property (nonatomic, getter=isWWANAutoPlay) BOOL WWANAutoPlay; - -/// The indexPath is playing. -@property (nonatomic, readonly, nullable) NSIndexPath *playingIndexPath; - -/// The indexPath should be play while scrolling. -@property (nonatomic, readonly, nullable) NSIndexPath *shouldPlayIndexPath; - -/// The view tag that the player display in scrollView. -@property (nonatomic, readonly) NSInteger containerViewTag; - -/// The current playing cell stop playing when the cell has out off the screen,defalut is YES. -@property (nonatomic) BOOL stopWhileNotVisible; - -/** - The current player scroll slides off the screen percent. - the property used when the `stopWhileNotVisible` is YES, stop the current playing player. - the property used when the `stopWhileNotVisible` is NO, the current playing player add to small container view. - The range is 0.0~1.0, defalut is 0.5. - 0.0 is the player will disappear. - 1.0 is the player did disappear. - */ -@property (nonatomic) CGFloat playerDisapperaPercent; - -/** - The current player scroll to the screen percent to play the video. - The range is 0.0~1.0, defalut is 0.0. - 0.0 is the player will appear. - 1.0 is the player did appear. - */ -@property (nonatomic) CGFloat playerApperaPercent; - -/// If tableView or collectionView has more sections, use `sectionAssetURLs`. -@property (nonatomic, copy, nullable) NSArray *>*sectionAssetURLs; - -/// The block invoked When the player appearing. -@property (nonatomic, copy, nullable) void(^zf_playerAppearingInScrollView)(NSIndexPath *indexPath, CGFloat playerApperaPercent); - -/// The block invoked When the player disappearing. -@property (nonatomic, copy, nullable) void(^zf_playerDisappearingInScrollView)(NSIndexPath *indexPath, CGFloat playerDisapperaPercent); - -/// The block invoked When the player will appeared. -@property (nonatomic, copy, nullable) void(^zf_playerWillAppearInScrollView)(NSIndexPath *indexPath); - -/// The block invoked When the player did appeared. -@property (nonatomic, copy, nullable) void(^zf_playerDidAppearInScrollView)(NSIndexPath *indexPath); - -/// The block invoked When the player will disappear. -@property (nonatomic, copy, nullable) void(^zf_playerWillDisappearInScrollView)(NSIndexPath *indexPath); - -/// The block invoked When the player did disappeared. -@property (nonatomic, copy, nullable) void(^zf_playerDidDisappearInScrollView)(NSIndexPath *indexPath); - -/// The block invoked When the player should play. -@property (nonatomic, copy, nullable) void(^zf_playerShouldPlayInScrollView)(NSIndexPath *indexPath); - -/// The block invoked When the player did stop scroll. -@property (nonatomic, copy, nullable) void(^zf_scrollViewDidEndScrollingCallback)(NSIndexPath *indexPath); - -/// Filter the cell that should be played when the scroll is stopped (to play when the scroll is stopped). -- (void)zf_filterShouldPlayCellWhileScrolled:(void (^ __nullable)(NSIndexPath *indexPath))handler; - -/// Filter the cell that should be played while scrolling (you can use this to filter the highlighted cell). -- (void)zf_filterShouldPlayCellWhileScrolling:(void (^ __nullable)(NSIndexPath *indexPath))handler; - -/** - Play the indexPath of url without scroll postion, while the `assetURLs` or `sectionAssetURLs` is not NULL. - - @param indexPath Play the indexPath of url. - */ -- (void)playTheIndexPath:(NSIndexPath *)indexPath; - -/** - Play the indexPath of url, while the `assetURLs` or `sectionAssetURLs` is not NULL. - - @param indexPath Play the indexPath of url. - @param scrollPosition scroll position. - @param animated scroll animation. - */ -- (void)playTheIndexPath:(NSIndexPath *)indexPath - scrollPosition:(ZFPlayerScrollViewScrollPosition)scrollPosition - animated:(BOOL)animated; - -/** - Play the indexPath of url with scroll postion, while the `assetURLs` or `sectionAssetURLs` is not NULL. - - @param indexPath Play the indexPath of url. - @param scrollPosition scroll position. - @param animated scroll animation. - @param completionHandler Scroll completion callback. - */ -- (void)playTheIndexPath:(NSIndexPath *)indexPath - scrollPosition:(ZFPlayerScrollViewScrollPosition)scrollPosition - animated:(BOOL)animated - completionHandler:(void (^ __nullable)(void))completionHandler; - - -/** - Play the indexPath of url with scroll postion. - - @param indexPath Play the indexPath of url - @param assetURL The player URL. - */ -- (void)playTheIndexPath:(NSIndexPath *)indexPath assetURL:(NSURL *)assetURL; - - -/** - Play the indexPath of url with scroll postion. - - @param indexPath Play the indexPath of url - @param assetURL The player URL. - @param scrollPosition scroll position. - @param animated scroll animation. - */ -- (void)playTheIndexPath:(NSIndexPath *)indexPath - assetURL:(NSURL *)assetURL - scrollPosition:(ZFPlayerScrollViewScrollPosition)scrollPosition - animated:(BOOL)animated; - -/** - Play the indexPath of url with scroll postion. - - @param indexPath Play the indexPath of url - @param assetURL The player URL. - @param scrollPosition scroll position. - @param animated scroll animation. - @param completionHandler Scroll completion callback. - */ -- (void)playTheIndexPath:(NSIndexPath *)indexPath - assetURL:(NSURL *)assetURL - scrollPosition:(ZFPlayerScrollViewScrollPosition)scrollPosition - animated:(BOOL)animated - completionHandler:(void (^ __nullable)(void))completionHandler; - - -@end - -@interface ZFPlayerController (ZFPlayerDeprecated) - -/** - Add the playerView to cell. - */ -- (void)updateScrollViewPlayerToCell __attribute__((deprecated("use `addPlayerViewToCell:` instead."))); - -/** - Add the playerView to containerView. - - @param containerView The playerView containerView. - */ -- (void)updateNoramlPlayerWithContainerView:(UIView *)containerView __attribute__((deprecated("use `addPlayerViewToContainerView:` instead."))); - -/** - Play the indexPath of url ,while the `assetURLs` or `sectionAssetURLs` is not NULL. - - @param indexPath Play the indexPath of url - @param scrollToTop Scroll the current cell to top with animations. - */ -- (void)playTheIndexPath:(NSIndexPath *)indexPath scrollToTop:(BOOL)scrollToTop __attribute__((deprecated("use `playTheIndexPath:scrollPosition:animated:` instead."))); - -/** - Play the indexPath of url with scroll postion. - - @param indexPath Play the indexPath of url - @param assetURL The player URL. - @param scrollToTop Scroll the current cell to top with animations. - */ -- (void)playTheIndexPath:(NSIndexPath *)indexPath assetURL:(NSURL *)assetURL scrollToTop:(BOOL)scrollToTop __attribute__((deprecated("use `playTheIndexPath:assetURL:scrollPosition:animated:` instead."))); - -/** - Play the indexPath of url ,while the `assetURLs` or `sectionAssetURLs` is not NULL. - - @param indexPath Play the indexPath of url - @param scrollToTop scroll the current cell to top with animations. - @param completionHandler Scroll completion callback. - */ -- (void)playTheIndexPath:(NSIndexPath *)indexPath scrollToTop:(BOOL)scrollToTop completionHandler:(void (^ __nullable)(void))completionHandler __attribute__((deprecated("use `playTheIndexPath:scrollPosition:animated:completionHandler:` instead."))); - -/** - Enter the fullScreen while the ZFFullScreenMode is ZFFullScreenModeLandscape. - - @param orientation UIInterfaceOrientation - @param animated is animated. - @param completion rotating completed callback. - */ -- (void)enterLandscapeFullScreen:(UIInterfaceOrientation)orientation animated:(BOOL)animated completion:(void(^ __nullable)(void))completion __attribute__((deprecated("use `rotateToOrientation:animated:completion:` instead."))); - -/** - Enter the fullScreen while the ZFFullScreenMode is ZFFullScreenModeLandscape. - - @param orientation UIInterfaceOrientation - @param animated is animated. - */ -- (void)enterLandscapeFullScreen:(UIInterfaceOrientation)orientation animated:(BOOL)animated __attribute__((deprecated("use `rotateToOrientation:animated:` instead."))); - -/** - Add to the keyWindow. - */ -- (void)addPlayerViewToKeyWindow __attribute__((deprecated("use `addPlayerViewToSmallFloatView` instead.")));; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerController.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerController.m deleted file mode 100644 index 170078b..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerController.m +++ /dev/null @@ -1,1448 +0,0 @@ -// -// ZFPlayerController.m -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "ZFPlayerController.h" -#import -#import -#import -#import "UIScrollView+ZFPlayer.h" -#import "ZFReachabilityManager.h" -#import "ZFPlayerConst.h" - -static NSMutableDictionary *_zfPlayRecords; - -@interface ZFPlayerController () - -@property (nonatomic, strong) ZFPlayerNotification *notification; -@property (nonatomic, weak) UIScrollView *scrollView; -@property (nonatomic, strong) UISlider *volumeViewSlider; -@property (nonatomic, assign) NSInteger containerViewTag; -@property (nonatomic, assign) ZFPlayerContainerType containerType; -/// The player's small container view. -@property (nonatomic, strong) ZFFloatView *smallFloatView; -/// Whether the small window is displayed. -@property (nonatomic, assign) BOOL isSmallFloatViewShow; -/// The indexPath is playing. -@property (nonatomic, nullable) NSIndexPath *playingIndexPath; - -@end - -@implementation ZFPlayerController - -@dynamic scrollView; -@dynamic containerViewTag; -@dynamic playingIndexPath; - -- (instancetype)init { - self = [super init]; - if (self) { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _zfPlayRecords = @{}.mutableCopy; - }); - @zf_weakify(self) - [[ZFReachabilityManager sharedManager] startMonitoring]; - [[ZFReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(ZFReachabilityStatus status) { - @zf_strongify(self) - if ([self.controlView respondsToSelector:@selector(videoPlayer:reachabilityChanged:)]) { - [self.controlView videoPlayer:self reachabilityChanged:status]; - } - }]; - [self configureVolume]; - } - return self; -} - -/// Get system volume -- (void)configureVolume { - MPVolumeView *volumeView = [[MPVolumeView alloc] init]; - self.volumeViewSlider = nil; - for (UIView *view in [volumeView subviews]){ - if ([view.class.description isEqualToString:@"MPVolumeSlider"]){ - self.volumeViewSlider = (UISlider *)view; - break; - } - } -} - -- (void)dealloc { - [self.currentPlayerManager stop]; -} - -+ (instancetype)playerWithPlayerManager:(id)playerManager containerView:(nonnull UIView *)containerView { - ZFPlayerController *player = [[self alloc] initWithPlayerManager:playerManager containerView:containerView]; - return player; -} - -+ (instancetype)playerWithScrollView:(UIScrollView *)scrollView playerManager:(id)playerManager containerViewTag:(NSInteger)containerViewTag { - ZFPlayerController *player = [[self alloc] initWithScrollView:scrollView playerManager:playerManager containerViewTag:containerViewTag]; - return player; -} - -+ (instancetype)playerWithScrollView:(UIScrollView *)scrollView playerManager:(id)playerManager containerView:(UIView *)containerView { - ZFPlayerController *player = [[self alloc] initWithScrollView:scrollView playerManager:playerManager containerView:containerView]; - return player; -} - -- (instancetype)initWithPlayerManager:(id)playerManager containerView:(nonnull UIView *)containerView { - ZFPlayerController *player = [self init]; - player.containerView = containerView; - player.currentPlayerManager = playerManager; - player.containerType = ZFPlayerContainerTypeView; - return player; -} - -- (instancetype)initWithScrollView:(UIScrollView *)scrollView playerManager:(id)playerManager containerViewTag:(NSInteger)containerViewTag { - ZFPlayerController *player = [self init]; - player.scrollView = scrollView; - player.containerViewTag = containerViewTag; - player.currentPlayerManager = playerManager; - player.containerType = ZFPlayerContainerTypeCell; - return player; -} - -- (instancetype)initWithScrollView:(UIScrollView *)scrollView playerManager:(id)playerManager containerView:(UIView *)containerView { - ZFPlayerController *player = [self init]; - player.scrollView = scrollView; - player.containerView = containerView; - player.currentPlayerManager = playerManager; - player.containerType = ZFPlayerContainerTypeView; - return player; -} - -- (void)playerManagerCallbcak { - @zf_weakify(self) - self.currentPlayerManager.playerPrepareToPlay = ^(id _Nonnull asset, NSURL * _Nonnull assetURL) { - @zf_strongify(self) - if (self.resumePlayRecord && [_zfPlayRecords valueForKey:assetURL.absoluteString]) { - NSTimeInterval seekTime = [_zfPlayRecords valueForKey:assetURL.absoluteString].doubleValue; - self.currentPlayerManager.seekTime = seekTime; - } - [self.notification addNotification]; - [self addDeviceOrientationObserver]; - if (self.scrollView) { - self.scrollView.zf_stopPlay = NO; - } - [self layoutPlayerSubViews]; - if (self.playerPrepareToPlay) self.playerPrepareToPlay(asset,assetURL); - if ([self.controlView respondsToSelector:@selector(videoPlayer:prepareToPlay:)]) { - [self.controlView videoPlayer:self prepareToPlay:assetURL]; - } - }; - - self.currentPlayerManager.playerReadyToPlay = ^(id _Nonnull asset, NSURL * _Nonnull assetURL) { - @zf_strongify(self) - if (self.playerReadyToPlay) self.playerReadyToPlay(asset,assetURL); - if (!self.customAudioSession) { - // Apps using this category don't mute when the phone's mute button is turned on, but play sound when the phone is silent - [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionAllowBluetooth error:nil]; - [[AVAudioSession sharedInstance] setActive:YES error:nil]; - } - if (self.viewControllerDisappear) self.pauseByEvent = YES; - }; - - self.currentPlayerManager.playerPlayTimeChanged = ^(id _Nonnull asset, NSTimeInterval currentTime, NSTimeInterval duration) { - @zf_strongify(self) - if (self.playerPlayTimeChanged) self.playerPlayTimeChanged(asset,currentTime,duration); - if ([self.controlView respondsToSelector:@selector(videoPlayer:currentTime:totalTime:)]) { - [self.controlView videoPlayer:self currentTime:currentTime totalTime:duration]; - } - if (self.currentPlayerManager.assetURL.absoluteString) { - [_zfPlayRecords setValue:@(currentTime) forKey:self.currentPlayerManager.assetURL.absoluteString]; - } - }; - - self.currentPlayerManager.playerBufferTimeChanged = ^(id _Nonnull asset, NSTimeInterval bufferTime) { - @zf_strongify(self) - if ([self.controlView respondsToSelector:@selector(videoPlayer:bufferTime:)]) { - [self.controlView videoPlayer:self bufferTime:bufferTime]; - } - if (self.playerBufferTimeChanged) self.playerBufferTimeChanged(asset,bufferTime); - }; - - self.currentPlayerManager.playerPlayStateChanged = ^(id _Nonnull asset, ZFPlayerPlaybackState playState) { - @zf_strongify(self) - if (self.playerPlayStateChanged) self.playerPlayStateChanged(asset, playState); - if ([self.controlView respondsToSelector:@selector(videoPlayer:playStateChanged:)]) { - [self.controlView videoPlayer:self playStateChanged:playState]; - } - }; - - self.currentPlayerManager.playerLoadStateChanged = ^(id _Nonnull asset, ZFPlayerLoadState loadState) { - @zf_strongify(self) - if (loadState == ZFPlayerLoadStatePrepare && CGSizeEqualToSize(CGSizeZero, self.currentPlayerManager.presentationSize)) { - CGSize size = self.currentPlayerManager.view.frame.size; - self.orientationObserver.presentationSize = size; - } - if (self.playerLoadStateChanged) self.playerLoadStateChanged(asset, loadState); - if ([self.controlView respondsToSelector:@selector(videoPlayer:loadStateChanged:)]) { - [self.controlView videoPlayer:self loadStateChanged:loadState]; - } - }; - - self.currentPlayerManager.playerDidToEnd = ^(id _Nonnull asset) { - @zf_strongify(self) - if (self.currentPlayerManager.assetURL.absoluteString) { - [_zfPlayRecords setValue:@(0) forKey:self.currentPlayerManager.assetURL.absoluteString]; - } - if (self.playerDidToEnd) self.playerDidToEnd(asset); - if ([self.controlView respondsToSelector:@selector(videoPlayerPlayEnd:)]) { - [self.controlView videoPlayerPlayEnd:self]; - } - }; - - self.currentPlayerManager.playerPlayFailed = ^(id _Nonnull asset, id _Nonnull error) { - @zf_strongify(self) - if (self.playerPlayFailed) self.playerPlayFailed(asset, error); - if ([self.controlView respondsToSelector:@selector(videoPlayerPlayFailed:error:)]) { - [self.controlView videoPlayerPlayFailed:self error:error]; - } - }; - - self.currentPlayerManager.presentationSizeChanged = ^(id _Nonnull asset, CGSize size){ - @zf_strongify(self) - self.orientationObserver.presentationSize = size; - if (self.orientationObserver.fullScreenMode == ZFFullScreenModeAutomatic) { - if (size.width > size.height) { - self.orientationObserver.fullScreenMode = ZFFullScreenModeLandscape; - } else { - self.orientationObserver.fullScreenMode = ZFFullScreenModePortrait; - } - } - if (self.presentationSizeChanged) self.presentationSizeChanged(asset, size); - if ([self.controlView respondsToSelector:@selector(videoPlayer:presentationSizeChanged:)]) { - [self.controlView videoPlayer:self presentationSizeChanged:size]; - } - }; -} - -- (void)layoutPlayerSubViews { - if (self.containerView && self.currentPlayerManager.view && self.currentPlayerManager.isPreparedToPlay) { - UIView *superview = nil; - if (self.isFullScreen) { - superview = self.orientationObserver.fullScreenContainerView; - } else if (self.containerView) { - superview = self.containerView; - } - [superview addSubview:self.currentPlayerManager.view]; - [self.currentPlayerManager.view addSubview:self.controlView]; - - self.currentPlayerManager.view.frame = superview.bounds; - self.currentPlayerManager.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - self.controlView.frame = self.currentPlayerManager.view.bounds; - self.controlView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - [self.orientationObserver updateRotateView:self.currentPlayerManager.view containerView:self.containerView]; - } -} - -#pragma mark - getter - -- (ZFPlayerNotification *)notification { - if (!_notification) { - _notification = [[ZFPlayerNotification alloc] init]; - @zf_weakify(self) - _notification.willResignActive = ^(ZFPlayerNotification * _Nonnull registrar) { - @zf_strongify(self) - if (self.isViewControllerDisappear) return; - if (self.pauseWhenAppResignActive && self.currentPlayerManager.isPlaying) { - self.pauseByEvent = YES; - } - self.orientationObserver.lockedScreen = YES; - [[UIApplication sharedApplication].keyWindow endEditing:YES]; - if (!self.pauseWhenAppResignActive) { - [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; - [[AVAudioSession sharedInstance] setActive:YES error:nil]; - } - }; - _notification.didBecomeActive = ^(ZFPlayerNotification * _Nonnull registrar) { - @zf_strongify(self) - if (self.isViewControllerDisappear) return; - if (self.isPauseByEvent) self.pauseByEvent = NO; - self.orientationObserver.lockedScreen = NO; - }; - _notification.oldDeviceUnavailable = ^(ZFPlayerNotification * _Nonnull registrar) { - @zf_strongify(self) - if (self.currentPlayerManager.isPlaying) { - [self.currentPlayerManager play]; - } - }; - } - return _notification; -} - -- (ZFFloatView *)smallFloatView { - if (!_smallFloatView) { - _smallFloatView = [[ZFFloatView alloc] init]; - _smallFloatView.parentView = [UIApplication sharedApplication].keyWindow; - _smallFloatView.hidden = YES; - } - return _smallFloatView; -} - -#pragma mark - setter - -- (void)setCurrentPlayerManager:(id)currentPlayerManager { - if (!currentPlayerManager) return; - if (_currentPlayerManager.isPreparedToPlay) { - [_currentPlayerManager stop]; - [_currentPlayerManager.view removeFromSuperview]; - [self removeDeviceOrientationObserver]; - [self.gestureControl removeGestureToView:self.currentPlayerManager.view]; - } - _currentPlayerManager = currentPlayerManager; - self.gestureControl.disableTypes = self.disableGestureTypes; - [self.gestureControl addGestureToView:currentPlayerManager.view]; - [self playerManagerCallbcak]; - self.controlView.player = self; - [self layoutPlayerSubViews]; - if (currentPlayerManager.isPreparedToPlay) { - [self addDeviceOrientationObserver]; - } - [self.orientationObserver updateRotateView:currentPlayerManager.view containerView:self.containerView]; -} - -- (void)setContainerView:(UIView *)containerView { - _containerView = containerView; - if (self.scrollView) { - self.scrollView.zf_containerView = containerView; - } - if (!containerView) return; - containerView.userInteractionEnabled = YES; - [self layoutPlayerSubViews]; - [self.orientationObserver updateRotateView:self.currentPlayerManager.view containerView:containerView]; -} - -- (void)setControlView:(UIView *)controlView { - if (controlView && controlView != _controlView) { - [_controlView removeFromSuperview]; - } - _controlView = controlView; - if (!controlView) return; - controlView.player = self; - [self layoutPlayerSubViews]; -} - -- (void)setContainerType:(ZFPlayerContainerType)containerType { - _containerType = containerType; - if (self.scrollView) { - self.scrollView.zf_containerType = containerType; - } -} - -@end - -@implementation ZFPlayerController (ZFPlayerTimeControl) - -- (NSTimeInterval)currentTime { - return self.currentPlayerManager.currentTime; -} - -- (NSTimeInterval)totalTime { - return self.currentPlayerManager.totalTime; -} - -- (NSTimeInterval)bufferTime { - return self.currentPlayerManager.bufferTime; -} - -- (float)progress { - if (self.totalTime == 0) return 0; - return self.currentTime/self.totalTime; -} - -- (float)bufferProgress { - if (self.totalTime == 0) return 0; - return self.bufferTime/self.totalTime; -} - -- (void)seekToTime:(NSTimeInterval)time completionHandler:(void (^)(BOOL))completionHandler { - [self.currentPlayerManager seekToTime:time completionHandler:completionHandler]; -} - -@end - -@implementation ZFPlayerController (ZFPlayerPlaybackControl) - -- (void)playTheNext { - if (self.assetURLs.count > 0) { - NSInteger index = self.currentPlayIndex + 1; - if (index >= self.assetURLs.count) return; - NSURL *assetURL = [self.assetURLs objectAtIndex:index]; - self.assetURL = assetURL; - self.currentPlayIndex = [self.assetURLs indexOfObject:assetURL]; - } -} - -- (void)playThePrevious { - if (self.assetURLs.count > 0) { - NSInteger index = self.currentPlayIndex - 1; - if (index < 0) return; - NSURL *assetURL = [self.assetURLs objectAtIndex:index]; - self.assetURL = assetURL; - self.currentPlayIndex = [self.assetURLs indexOfObject:assetURL]; - } -} - -- (void)playTheIndex:(NSInteger)index { - if (self.assetURLs.count > 0) { - if (index >= self.assetURLs.count) return; - NSURL *assetURL = [self.assetURLs objectAtIndex:index]; - self.assetURL = assetURL; - self.currentPlayIndex = index; - } -} - -- (void)stop { - if (self.isFullScreen && self.exitFullScreenWhenStop) { - @zf_weakify(self) - [self.orientationObserver enterFullScreen:NO animated:NO completion:^{ - @zf_strongify(self) - [self.currentPlayerManager stop]; - [self.currentPlayerManager.view removeFromSuperview]; - }]; - } else { - [self.currentPlayerManager stop]; - [self.currentPlayerManager.view removeFromSuperview]; - } - if (self.scrollView) self.scrollView.zf_stopPlay = YES; - [self.notification removeNotification]; - [self.orientationObserver removeDeviceOrientationObserver]; -} - -- (void)replaceCurrentPlayerManager:(id)playerManager { - self.currentPlayerManager = playerManager; -} - -//// Add video to the cell -- (void)addPlayerViewToCell { - self.isSmallFloatViewShow = NO; - self.smallFloatView.hidden = YES; - UIView *cell = [self.scrollView zf_getCellForIndexPath:self.playingIndexPath]; - self.containerView = [cell viewWithTag:self.containerViewTag]; - [self.containerView addSubview:self.currentPlayerManager.view]; - self.currentPlayerManager.view.frame = self.containerView.bounds; - self.currentPlayerManager.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - [self.orientationObserver updateRotateView:self.currentPlayerManager.view rotateViewAtCell:cell playerViewTag:self.containerViewTag]; - if ([self.controlView respondsToSelector:@selector(videoPlayer:floatViewShow:)]) { - [self.controlView videoPlayer:self floatViewShow:NO]; - } -} - -//// Add video to the container view -- (void)addPlayerViewToContainerView:(UIView *)containerView { - self.isSmallFloatViewShow = NO; - self.smallFloatView.hidden = YES; - self.containerView = containerView; - [self.containerView addSubview:self.currentPlayerManager.view]; - self.currentPlayerManager.view.frame = self.containerView.bounds; - self.currentPlayerManager.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - [self.orientationObserver updateRotateView:self.currentPlayerManager.view containerView:self.containerView]; - if ([self.controlView respondsToSelector:@selector(videoPlayer:floatViewShow:)]) { - [self.controlView videoPlayer:self floatViewShow:NO]; - } -} - -- (void)addPlayerViewToSmallFloatView { - self.isSmallFloatViewShow = YES; - self.smallFloatView.hidden = NO; - [self.smallFloatView addSubview:self.currentPlayerManager.view]; - self.currentPlayerManager.view.frame = self.smallFloatView.bounds; - self.currentPlayerManager.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - [self.orientationObserver updateRotateView:self.currentPlayerManager.view containerView:self.smallFloatView]; - if ([self.controlView respondsToSelector:@selector(videoPlayer:floatViewShow:)]) { - [self.controlView videoPlayer:self floatViewShow:YES]; - } -} - -- (void)stopCurrentPlayingView { - if (self.containerView) { - [self stop]; - self.isSmallFloatViewShow = NO; - if (self.smallFloatView) self.smallFloatView.hidden = YES; - } -} - -- (void)stopCurrentPlayingCell { - if (self.scrollView.zf_playingIndexPath) { - [self stop]; - self.isSmallFloatViewShow = NO; - self.playingIndexPath = nil; - if (self.smallFloatView) self.smallFloatView.hidden = YES; - } -} - -#pragma mark - getter - -- (BOOL)resumePlayRecord { - return [objc_getAssociatedObject(self, _cmd) boolValue]; -} - -- (NSURL *)assetURL { - return objc_getAssociatedObject(self, _cmd); -} - -- (NSArray *)assetURLs { - return objc_getAssociatedObject(self, _cmd); -} - -- (BOOL)isLastAssetURL { - if (self.assetURLs.count > 0) { - return [self.assetURL isEqual:self.assetURLs.lastObject]; - } - return NO; -} - -- (BOOL)isFirstAssetURL { - if (self.assetURLs.count > 0) { - return [self.assetURL isEqual:self.assetURLs.firstObject]; - } - return NO; -} - -- (BOOL)isPauseByEvent { - return [objc_getAssociatedObject(self, _cmd) boolValue]; -} - -- (float)brightness { - return [UIScreen mainScreen].brightness; -} - -- (float)volume { - CGFloat volume = self.volumeViewSlider.value; - if (volume == 0) { - volume = [[AVAudioSession sharedInstance] outputVolume]; - } - return volume; -} - -- (BOOL)isMuted { - return self.volume == 0; -} - -- (float)lastVolumeValue { - return [objc_getAssociatedObject(self, _cmd) floatValue]; -} - -- (ZFPlayerPlaybackState)playState { - return self.currentPlayerManager.playState; -} - -- (BOOL)isPlaying { - return self.currentPlayerManager.isPlaying; -} - -- (BOOL)pauseWhenAppResignActive { - NSNumber *number = objc_getAssociatedObject(self, _cmd); - if (number) return number.boolValue; - self.pauseWhenAppResignActive = YES; - return YES; -} - -- (void (^)(id _Nonnull, NSURL * _Nonnull))playerPrepareToPlay { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(id _Nonnull, NSURL * _Nonnull))playerReadyToPlay { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(id _Nonnull, NSTimeInterval, NSTimeInterval))playerPlayTimeChanged { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(id _Nonnull, NSTimeInterval))playerBufferTimeChanged { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(id _Nonnull, ZFPlayerPlaybackState))playerPlayStateChanged { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(id _Nonnull, ZFPlayerLoadState))playerLoadStateChanged { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(id _Nonnull))playerDidToEnd { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(id _Nonnull, id _Nonnull))playerPlayFailed { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(id _Nonnull, CGSize ))presentationSizeChanged { - return objc_getAssociatedObject(self, _cmd); -} - -- (NSInteger)currentPlayIndex { - return [objc_getAssociatedObject(self, _cmd) integerValue]; -} - -- (BOOL)isViewControllerDisappear { - return [objc_getAssociatedObject(self, _cmd) boolValue]; -} - -- (BOOL)customAudioSession { - return [objc_getAssociatedObject(self, _cmd) boolValue]; -} - -#pragma mark - setter - -- (void)setResumePlayRecord:(BOOL)resumePlayRecord { - objc_setAssociatedObject(self, @selector(resumePlayRecord), @(resumePlayRecord), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)setAssetURL:(NSURL *)assetURL { - objc_setAssociatedObject(self, @selector(assetURL), assetURL, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - self.currentPlayerManager.assetURL = assetURL; -} - -- (void)setAssetURLs:(NSArray * _Nullable)assetURLs { - objc_setAssociatedObject(self, @selector(assetURLs), assetURLs, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)setVolume:(float)volume { - volume = MIN(MAX(0, volume), 1); - objc_setAssociatedObject(self, @selector(volume), @(volume), OBJC_ASSOCIATION_RETAIN_NONATOMIC); - self.volumeViewSlider.value = volume; -} - -- (void)setMuted:(BOOL)muted { - if (muted) { - if (self.volumeViewSlider.value > 0) { - self.lastVolumeValue = self.volumeViewSlider.value; - } - self.volumeViewSlider.value = 0; - } else { - self.volumeViewSlider.value = self.lastVolumeValue; - } -} - -- (void)setLastVolumeValue:(float)lastVolumeValue { - objc_setAssociatedObject(self, @selector(lastVolumeValue), @(lastVolumeValue), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)setBrightness:(float)brightness { - brightness = MIN(MAX(0, brightness), 1); - objc_setAssociatedObject(self, @selector(brightness), @(brightness), OBJC_ASSOCIATION_RETAIN_NONATOMIC); - [UIScreen mainScreen].brightness = brightness; -} - -- (void)setPauseByEvent:(BOOL)pauseByEvent { - objc_setAssociatedObject(self, @selector(isPauseByEvent), @(pauseByEvent), OBJC_ASSOCIATION_RETAIN_NONATOMIC); - if (pauseByEvent) { - [self.currentPlayerManager pause]; - } else { - [self.currentPlayerManager play]; - } -} - -- (void)setPauseWhenAppResignActive:(BOOL)pauseWhenAppResignActive { - objc_setAssociatedObject(self, @selector(pauseWhenAppResignActive), @(pauseWhenAppResignActive), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)setPlayerPrepareToPlay:(void (^)(id _Nonnull, NSURL * _Nonnull))playerPrepareToPlay { - objc_setAssociatedObject(self, @selector(playerPrepareToPlay), playerPrepareToPlay, OBJC_ASSOCIATION_COPY); -} - -- (void)setPlayerReadyToPlay:(void (^)(id _Nonnull, NSURL * _Nonnull))playerReadyToPlay { - objc_setAssociatedObject(self, @selector(playerReadyToPlay), playerReadyToPlay, OBJC_ASSOCIATION_COPY); -} - -- (void)setPlayerPlayTimeChanged:(void (^)(id _Nonnull, NSTimeInterval, NSTimeInterval))playerPlayTimeChanged { - objc_setAssociatedObject(self, @selector(playerPlayTimeChanged), playerPlayTimeChanged, OBJC_ASSOCIATION_COPY); -} - -- (void)setPlayerBufferTimeChanged:(void (^)(id _Nonnull, NSTimeInterval))playerBufferTimeChanged { - objc_setAssociatedObject(self, @selector(playerBufferTimeChanged), playerBufferTimeChanged, OBJC_ASSOCIATION_COPY); -} - -- (void)setPlayerPlayStateChanged:(void (^)(id _Nonnull, ZFPlayerPlaybackState))playerPlayStateChanged { - objc_setAssociatedObject(self, @selector(playerPlayStateChanged), playerPlayStateChanged, OBJC_ASSOCIATION_COPY); -} - -- (void)setPlayerLoadStateChanged:(void (^)(id _Nonnull, ZFPlayerLoadState))playerLoadStateChanged { - objc_setAssociatedObject(self, @selector(playerLoadStateChanged), playerLoadStateChanged, OBJC_ASSOCIATION_COPY); -} - -- (void)setPlayerDidToEnd:(void (^)(id _Nonnull))playerDidToEnd { - objc_setAssociatedObject(self, @selector(playerDidToEnd), playerDidToEnd, OBJC_ASSOCIATION_COPY); -} - -- (void)setPlayerPlayFailed:(void (^)(id _Nonnull, id _Nonnull))playerPlayFailed { - objc_setAssociatedObject(self, @selector(playerPlayFailed), playerPlayFailed, OBJC_ASSOCIATION_COPY); -} - -- (void)setPresentationSizeChanged:(void (^)(id _Nonnull, CGSize))presentationSizeChanged { - objc_setAssociatedObject(self, @selector(presentationSizeChanged), presentationSizeChanged, OBJC_ASSOCIATION_COPY); -} - -- (void)setCurrentPlayIndex:(NSInteger)currentPlayIndex { - objc_setAssociatedObject(self, @selector(currentPlayIndex), @(currentPlayIndex), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)setViewControllerDisappear:(BOOL)viewControllerDisappear { - objc_setAssociatedObject(self, @selector(isViewControllerDisappear), @(viewControllerDisappear), OBJC_ASSOCIATION_RETAIN_NONATOMIC); - if (self.scrollView) self.scrollView.zf_viewControllerDisappear = viewControllerDisappear; - if (!self.currentPlayerManager.isPreparedToPlay) return; - if (viewControllerDisappear) { - [self removeDeviceOrientationObserver]; - if (self.currentPlayerManager.isPlaying) self.pauseByEvent = YES; - if (self.isSmallFloatViewShow) self.smallFloatView.hidden = YES; - } else { - [self addDeviceOrientationObserver]; - if (self.isPauseByEvent) self.pauseByEvent = NO; - if (self.isSmallFloatViewShow) self.smallFloatView.hidden = NO; - } -} - -- (void)setCustomAudioSession:(BOOL)customAudioSession { - objc_setAssociatedObject(self, @selector(customAudioSession), @(customAudioSession), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -@end - -@implementation ZFPlayerController (ZFPlayerOrientationRotation) - -- (void)addDeviceOrientationObserver { - if (self.allowOrentitaionRotation) { - [self.orientationObserver addDeviceOrientationObserver]; - } -} - -- (void)removeDeviceOrientationObserver { - [self.orientationObserver removeDeviceOrientationObserver]; -} - -/// Enter the fullScreen while the ZFFullScreenMode is ZFFullScreenModeLandscape. -- (void)rotateToOrientation:(UIInterfaceOrientation)orientation animated:(BOOL)animated { - [self rotateToOrientation:orientation animated:animated completion:nil]; -} - -/// Enter the fullScreen while the ZFFullScreenMode is ZFFullScreenModeLandscape. -- (void)rotateToOrientation:(UIInterfaceOrientation)orientation animated:(BOOL)animated completion:(void(^ __nullable)(void))completion { - self.orientationObserver.fullScreenMode = ZFFullScreenModeLandscape; - [self.orientationObserver rotateToOrientation:orientation animated:animated completion:nil]; -} - -- (void)enterPortraitFullScreen:(BOOL)fullScreen animated:(BOOL)animated completion:(void (^ _Nullable)(void))completion { - self.orientationObserver.fullScreenMode = ZFFullScreenModePortrait; - [self.orientationObserver enterPortraitFullScreen:fullScreen animated:animated completion:completion]; -} - -- (void)enterPortraitFullScreen:(BOOL)fullScreen animated:(BOOL)animated { - [self enterPortraitFullScreen:fullScreen animated:animated completion:nil]; -} - -- (void)enterFullScreen:(BOOL)fullScreen animated:(BOOL)animated completion:(void (^ _Nullable)(void))completion { - if (self.orientationObserver.fullScreenMode == ZFFullScreenModePortrait) { - [self.orientationObserver enterPortraitFullScreen:fullScreen animated:animated completion:completion]; - } else { - UIInterfaceOrientation orientation = UIInterfaceOrientationUnknown; - orientation = fullScreen? UIInterfaceOrientationLandscapeRight : UIInterfaceOrientationPortrait; - [self.orientationObserver rotateToOrientation:orientation animated:animated completion:completion]; - } -} - -- (void)enterFullScreen:(BOOL)fullScreen animated:(BOOL)animated { - [self enterFullScreen:fullScreen animated:animated completion:nil]; -} - -#pragma mark - getter - -- (ZFOrientationObserver *)orientationObserver { - @zf_weakify(self) - ZFOrientationObserver *orientationObserver = objc_getAssociatedObject(self, _cmd); - if (!orientationObserver) { - orientationObserver = [[ZFOrientationObserver alloc] init]; - orientationObserver.orientationWillChange = ^(ZFOrientationObserver * _Nonnull observer, BOOL isFullScreen) { - @zf_strongify(self) - if (self.orientationWillChange) self.orientationWillChange(self, isFullScreen); - if ([self.controlView respondsToSelector:@selector(videoPlayer:orientationWillChange:)]) { - [self.controlView videoPlayer:self orientationWillChange:observer]; - } - [self.controlView setNeedsLayout]; - [self.controlView layoutIfNeeded]; - }; - orientationObserver.orientationDidChanged = ^(ZFOrientationObserver * _Nonnull observer, BOOL isFullScreen) { - @zf_strongify(self) - if (self.orientationDidChanged) self.orientationDidChanged(self, isFullScreen); - if ([self.controlView respondsToSelector:@selector(videoPlayer:orientationDidChanged:)]) { - [self.controlView videoPlayer:self orientationDidChanged:observer]; - } - }; - objc_setAssociatedObject(self, _cmd, orientationObserver, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - } - return orientationObserver; -} - -- (void (^)(ZFPlayerController * _Nonnull, BOOL))orientationWillChange { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(ZFPlayerController * _Nonnull, BOOL))orientationDidChanged { - return objc_getAssociatedObject(self, _cmd); -} - -- (BOOL)isFullScreen { - return self.orientationObserver.isFullScreen; -} - -- (BOOL)exitFullScreenWhenStop { - NSNumber *number = objc_getAssociatedObject(self, _cmd); - if (number) return number.boolValue; - self.exitFullScreenWhenStop = YES; - return YES; -} - -- (UIInterfaceOrientation)currentOrientation { - return self.orientationObserver.currentOrientation; -} - -- (BOOL)isStatusBarHidden { - return [objc_getAssociatedObject(self, _cmd) boolValue]; -} - -- (BOOL)isLockedScreen { - return [objc_getAssociatedObject(self, _cmd) boolValue]; -} - -- (BOOL)shouldAutorotate { - return NO; -} - -- (BOOL)allowOrentitaionRotation { - NSNumber *number = objc_getAssociatedObject(self, _cmd); - if (number) return number.boolValue; - self.allowOrentitaionRotation = YES; - return YES; -} - -- (UIStatusBarStyle)fullScreenStatusBarStyle { - NSNumber *number = objc_getAssociatedObject(self, _cmd); - if (number) return number.integerValue; - self.fullScreenStatusBarStyle = UIStatusBarStyleLightContent; - return UIStatusBarStyleLightContent; -} - -- (UIStatusBarAnimation)fullScreenStatusBarAnimation { - NSNumber *number = objc_getAssociatedObject(self, _cmd); - if (number) return number.integerValue; - self.fullScreenStatusBarAnimation = UIStatusBarAnimationSlide; - return UIStatusBarAnimationSlide; -} - -#pragma mark - setter - -- (void)setOrientationWillChange:(void (^)(ZFPlayerController * _Nonnull, BOOL))orientationWillChange { - objc_setAssociatedObject(self, @selector(orientationWillChange), orientationWillChange, OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (void)setOrientationDidChanged:(void (^)(ZFPlayerController * _Nonnull, BOOL))orientationDidChanged { - objc_setAssociatedObject(self, @selector(orientationDidChanged), orientationDidChanged, OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (void)setStatusBarHidden:(BOOL)statusBarHidden { - objc_setAssociatedObject(self, @selector(isStatusBarHidden), @(statusBarHidden), OBJC_ASSOCIATION_RETAIN_NONATOMIC); - self.orientationObserver.fullScreenStatusBarHidden = statusBarHidden; -} - -- (void)setLockedScreen:(BOOL)lockedScreen { - objc_setAssociatedObject(self, @selector(isLockedScreen), @(lockedScreen), OBJC_ASSOCIATION_RETAIN_NONATOMIC); - self.orientationObserver.lockedScreen = lockedScreen; - if ([self.controlView respondsToSelector:@selector(lockedVideoPlayer:lockedScreen:)]) { - [self.controlView lockedVideoPlayer:self lockedScreen:lockedScreen]; - } -} - -- (void)setAllowOrentitaionRotation:(BOOL)allowOrentitaionRotation { - objc_setAssociatedObject(self, @selector(allowOrentitaionRotation), @(allowOrentitaionRotation), OBJC_ASSOCIATION_RETAIN_NONATOMIC); - self.orientationObserver.allowOrientationRotation = allowOrentitaionRotation; -} - -- (void)setExitFullScreenWhenStop:(BOOL)exitFullScreenWhenStop { - objc_setAssociatedObject(self, @selector(exitFullScreenWhenStop), @(exitFullScreenWhenStop), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)setFullScreenStatusBarStyle:(UIStatusBarStyle)fullScreenStatusBarStyle { - objc_setAssociatedObject(self, @selector(fullScreenStatusBarStyle), @(fullScreenStatusBarStyle), OBJC_ASSOCIATION_RETAIN_NONATOMIC); - self.orientationObserver.fullScreenStatusBarStyle = fullScreenStatusBarStyle; -} - -- (void)setFullScreenStatusBarAnimation:(UIStatusBarAnimation)fullScreenStatusBarAnimation { - objc_setAssociatedObject(self, @selector(fullScreenStatusBarAnimation), @(fullScreenStatusBarAnimation), OBJC_ASSOCIATION_RETAIN_NONATOMIC); - self.orientationObserver.fullScreenStatusBarAnimation = fullScreenStatusBarAnimation; -} - -@end - - -@implementation ZFPlayerController (ZFPlayerViewGesture) - -#pragma mark - getter - -- (ZFPlayerGestureControl *)gestureControl { - ZFPlayerGestureControl *gestureControl = objc_getAssociatedObject(self, _cmd); - if (!gestureControl) { - gestureControl = [[ZFPlayerGestureControl alloc] init]; - @zf_weakify(self) - gestureControl.triggerCondition = ^BOOL(ZFPlayerGestureControl * _Nonnull control, ZFPlayerGestureType type, UIGestureRecognizer * _Nonnull gesture, UITouch *touch) { - @zf_strongify(self) - if ([self.controlView respondsToSelector:@selector(gestureTriggerCondition:gestureType:gestureRecognizer:touch:)]) { - return [self.controlView gestureTriggerCondition:control gestureType:type gestureRecognizer:gesture touch:touch]; - } - return YES; - }; - - gestureControl.singleTapped = ^(ZFPlayerGestureControl * _Nonnull control) { - @zf_strongify(self) - if ([self.controlView respondsToSelector:@selector(gestureSingleTapped:)]) { - [self.controlView gestureSingleTapped:control]; - } - }; - - gestureControl.doubleTapped = ^(ZFPlayerGestureControl * _Nonnull control) { - @zf_strongify(self) - if ([self.controlView respondsToSelector:@selector(gestureDoubleTapped:)]) { - [self.controlView gestureDoubleTapped:control]; - } - }; - - gestureControl.beganPan = ^(ZFPlayerGestureControl * _Nonnull control, ZFPanDirection direction, ZFPanLocation location) { - @zf_strongify(self) - if ([self.controlView respondsToSelector:@selector(gestureBeganPan:panDirection:panLocation:)]) { - [self.controlView gestureBeganPan:control panDirection:direction panLocation:location]; - } - }; - - gestureControl.changedPan = ^(ZFPlayerGestureControl * _Nonnull control, ZFPanDirection direction, ZFPanLocation location, CGPoint velocity) { - @zf_strongify(self) - if ([self.controlView respondsToSelector:@selector(gestureChangedPan:panDirection:panLocation:withVelocity:)]) { - [self.controlView gestureChangedPan:control panDirection:direction panLocation:location withVelocity:velocity]; - } - }; - - gestureControl.endedPan = ^(ZFPlayerGestureControl * _Nonnull control, ZFPanDirection direction, ZFPanLocation location) { - @zf_strongify(self) - if ([self.controlView respondsToSelector:@selector(gestureEndedPan:panDirection:panLocation:)]) { - [self.controlView gestureEndedPan:control panDirection:direction panLocation:location]; - } - }; - - gestureControl.pinched = ^(ZFPlayerGestureControl * _Nonnull control, float scale) { - @zf_strongify(self) - if ([self.controlView respondsToSelector:@selector(gesturePinched:scale:)]) { - [self.controlView gesturePinched:control scale:scale]; - } - }; - objc_setAssociatedObject(self, _cmd, gestureControl, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - } - return gestureControl; -} - -- (ZFPlayerDisableGestureTypes)disableGestureTypes { - return [objc_getAssociatedObject(self, _cmd) integerValue]; -} - -- (ZFPlayerDisablePanMovingDirection)disablePanMovingDirection { - return [objc_getAssociatedObject(self, _cmd) integerValue]; -} - -#pragma mark - setter - -- (void)setDisableGestureTypes:(ZFPlayerDisableGestureTypes)disableGestureTypes { - objc_setAssociatedObject(self, @selector(disableGestureTypes), @(disableGestureTypes), OBJC_ASSOCIATION_RETAIN_NONATOMIC); - self.gestureControl.disableTypes = disableGestureTypes; -} - -- (void)setDisablePanMovingDirection:(ZFPlayerDisablePanMovingDirection)disablePanMovingDirection { - objc_setAssociatedObject(self, @selector(disablePanMovingDirection), @(disablePanMovingDirection), OBJC_ASSOCIATION_RETAIN_NONATOMIC); - self.gestureControl.disablePanMovingDirection = disablePanMovingDirection; -} - -@end - -@implementation ZFPlayerController (ZFPlayerScrollView) - -+ (void)initialize { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - SEL selectors[] = { - NSSelectorFromString(@"dealloc") - }; - - for (NSInteger index = 0; index < sizeof(selectors) / sizeof(SEL); ++index) { - SEL originalSelector = selectors[index]; - SEL swizzledSelector = NSSelectorFromString([@"zf_" stringByAppendingString:NSStringFromSelector(originalSelector)]); - Method originalMethod = class_getInstanceMethod(self, originalSelector); - Method swizzledMethod = class_getInstanceMethod(self, swizzledSelector); - if (class_addMethod(self, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod))) { - class_replaceMethod(self, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod)); - } else { - method_exchangeImplementations(originalMethod, swizzledMethod); - } - } - }); -} - -- (void)zf_dealloc { - [self.smallFloatView removeFromSuperview]; - self.smallFloatView = nil; - [self zf_dealloc]; -} - -#pragma mark - setter - -- (void)setScrollView:(UIScrollView *)scrollView { - objc_setAssociatedObject(self, @selector(scrollView), scrollView, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - self.scrollView.zf_WWANAutoPlay = self.isWWANAutoPlay; - @zf_weakify(self) - scrollView.zf_playerWillAppearInScrollView = ^(NSIndexPath * _Nonnull indexPath) { - @zf_strongify(self) - if (self.isFullScreen) return; - if (self.zf_playerWillAppearInScrollView) self.zf_playerWillAppearInScrollView(indexPath); - if ([self.controlView respondsToSelector:@selector(playerDidAppearInScrollView:)]) { - [self.controlView playerDidAppearInScrollView:self]; - } - }; - - scrollView.zf_playerDidAppearInScrollView = ^(NSIndexPath * _Nonnull indexPath) { - @zf_strongify(self) - if (self.isFullScreen) return; - if (self.zf_playerDidAppearInScrollView) self.zf_playerDidAppearInScrollView(indexPath); - if ([self.controlView respondsToSelector:@selector(playerDidAppearInScrollView:)]) { - [self.controlView playerDidAppearInScrollView:self]; - } - }; - - scrollView.zf_playerWillDisappearInScrollView = ^(NSIndexPath * _Nonnull indexPath) { - @zf_strongify(self) - if (self.isFullScreen) return; - if (self.zf_playerWillDisappearInScrollView) self.zf_playerWillDisappearInScrollView(indexPath); - if ([self.controlView respondsToSelector:@selector(playerWillDisappearInScrollView:)]) { - [self.controlView playerWillDisappearInScrollView:self]; - } - }; - - scrollView.zf_playerDidDisappearInScrollView = ^(NSIndexPath * _Nonnull indexPath) { - @zf_strongify(self) - if (self.isFullScreen) return; - if (self.zf_playerDidDisappearInScrollView) self.zf_playerDidDisappearInScrollView(indexPath); - if ([self.controlView respondsToSelector:@selector(playerDidDisappearInScrollView:)]) { - [self.controlView playerDidDisappearInScrollView:self]; - } - - if (self.stopWhileNotVisible) { /// stop playing - if (self.containerType == ZFPlayerContainerTypeView) { - [self stopCurrentPlayingView]; - } else if (self.containerType == ZFPlayerContainerTypeCell) { - [self stopCurrentPlayingCell]; - } - } else { /// add to window - if (!self.isSmallFloatViewShow) { - [self addPlayerViewToSmallFloatView]; - } - } - }; - - scrollView.zf_playerAppearingInScrollView = ^(NSIndexPath * _Nonnull indexPath, CGFloat playerApperaPercent) { - @zf_strongify(self) - if (self.isFullScreen) return; - if (self.zf_playerAppearingInScrollView) self.zf_playerAppearingInScrollView(indexPath, playerApperaPercent); - if ([self.controlView respondsToSelector:@selector(playerAppearingInScrollView:playerApperaPercent:)]) { - [self.controlView playerAppearingInScrollView:self playerApperaPercent:playerApperaPercent]; - } - if (!self.stopWhileNotVisible && playerApperaPercent >= self.playerApperaPercent) { - if (self.containerType == ZFPlayerContainerTypeView) { - if (self.isSmallFloatViewShow) { - [self addPlayerViewToContainerView:self.containerView]; - } - } else if (self.containerType == ZFPlayerContainerTypeCell) { - if (self.isSmallFloatViewShow) { - [self addPlayerViewToCell]; - } - } - } - }; - - scrollView.zf_playerDisappearingInScrollView = ^(NSIndexPath * _Nonnull indexPath, CGFloat playerDisapperaPercent) { - @zf_strongify(self) - if (self.isFullScreen) return; - if (self.zf_playerDisappearingInScrollView) self.zf_playerDisappearingInScrollView(indexPath, playerDisapperaPercent); - if ([self.controlView respondsToSelector:@selector(playerDisappearingInScrollView:playerDisapperaPercent:)]) { - [self.controlView playerDisappearingInScrollView:self playerDisapperaPercent:playerDisapperaPercent]; - } - if (playerDisapperaPercent >= self.playerDisapperaPercent) { - if (self.stopWhileNotVisible) { /// stop playing - if (self.containerType == ZFPlayerContainerTypeView) { - [self stopCurrentPlayingView]; - } else if (self.containerType == ZFPlayerContainerTypeCell) { - [self stopCurrentPlayingCell]; - } - } else { /// add to window - if (!self.isSmallFloatViewShow) { - [self addPlayerViewToSmallFloatView]; - } - } - } - }; - - scrollView.zf_playerShouldPlayInScrollView = ^(NSIndexPath * _Nonnull indexPath) { - @zf_strongify(self) - if (self.zf_playerShouldPlayInScrollView) self.zf_playerShouldPlayInScrollView(indexPath); - }; - - scrollView.zf_scrollViewDidEndScrollingCallback = ^(NSIndexPath * _Nonnull indexPath) { - @zf_strongify(self) - if (self.zf_scrollViewDidEndScrollingCallback) self.zf_scrollViewDidEndScrollingCallback(indexPath); - }; -} - -- (void)setWWANAutoPlay:(BOOL)WWANAutoPlay { - objc_setAssociatedObject(self, @selector(isWWANAutoPlay), @(WWANAutoPlay), OBJC_ASSOCIATION_RETAIN_NONATOMIC); - if (self.scrollView) self.scrollView.zf_WWANAutoPlay = self.isWWANAutoPlay; -} - -- (void)setStopWhileNotVisible:(BOOL)stopWhileNotVisible { - self.scrollView.zf_stopWhileNotVisible = stopWhileNotVisible; - objc_setAssociatedObject(self, @selector(stopWhileNotVisible), @(stopWhileNotVisible), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)setContainerViewTag:(NSInteger)containerViewTag { - objc_setAssociatedObject(self, @selector(containerViewTag), @(containerViewTag), OBJC_ASSOCIATION_RETAIN_NONATOMIC); - self.scrollView.zf_containerViewTag = containerViewTag; -} - -- (void)setPlayingIndexPath:(NSIndexPath *)playingIndexPath { - objc_setAssociatedObject(self, @selector(playingIndexPath), playingIndexPath, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - if (playingIndexPath) { - self.isSmallFloatViewShow = NO; - if (self.smallFloatView) self.smallFloatView.hidden = YES; - - UIView *cell = [self.scrollView zf_getCellForIndexPath:playingIndexPath]; - self.containerView = [cell viewWithTag:self.containerViewTag]; - [self.orientationObserver updateRotateView:self.currentPlayerManager.view rotateViewAtCell:cell playerViewTag:self.containerViewTag]; - [self addDeviceOrientationObserver]; - self.scrollView.zf_playingIndexPath = playingIndexPath; - [self layoutPlayerSubViews]; - } else { - self.scrollView.zf_playingIndexPath = playingIndexPath; - } -} - -- (void)setShouldAutoPlay:(BOOL)shouldAutoPlay { - objc_setAssociatedObject(self, @selector(shouldAutoPlay), @(shouldAutoPlay), OBJC_ASSOCIATION_RETAIN_NONATOMIC); - self.scrollView.zf_shouldAutoPlay = shouldAutoPlay; -} - -- (void)setSectionAssetURLs:(NSArray *> * _Nullable)sectionAssetURLs { - objc_setAssociatedObject(self, @selector(sectionAssetURLs), sectionAssetURLs, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)setPlayerDisapperaPercent:(CGFloat)playerDisapperaPercent { - playerDisapperaPercent = MIN(MAX(0.0, playerDisapperaPercent), 1.0); - self.scrollView.zf_playerDisapperaPercent = playerDisapperaPercent; - objc_setAssociatedObject(self, @selector(playerDisapperaPercent), @(playerDisapperaPercent), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)setPlayerApperaPercent:(CGFloat)playerApperaPercent { - playerApperaPercent = MIN(MAX(0.0, playerApperaPercent), 1.0); - self.scrollView.zf_playerApperaPercent = playerApperaPercent; - objc_setAssociatedObject(self, @selector(playerApperaPercent), @(playerApperaPercent), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (void)setZf_playerAppearingInScrollView:(void (^)(NSIndexPath * _Nonnull, CGFloat))zf_playerAppearingInScrollView { - objc_setAssociatedObject(self, @selector(zf_playerAppearingInScrollView), zf_playerAppearingInScrollView, OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (void)setZf_playerDisappearingInScrollView:(void (^)(NSIndexPath * _Nonnull, CGFloat))zf_playerDisappearingInScrollView { - objc_setAssociatedObject(self, @selector(zf_playerDisappearingInScrollView), zf_playerDisappearingInScrollView, OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (void)setZf_playerDidAppearInScrollView:(void (^)(NSIndexPath * _Nonnull))zf_playerDidAppearInScrollView { - objc_setAssociatedObject(self, @selector(zf_playerDidAppearInScrollView), zf_playerDidAppearInScrollView, OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (void)setZf_playerWillDisappearInScrollView:(void (^)(NSIndexPath * _Nonnull))zf_playerWillDisappearInScrollView { - objc_setAssociatedObject(self, @selector(zf_playerWillDisappearInScrollView), zf_playerWillDisappearInScrollView, OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (void)setZf_playerWillAppearInScrollView:(void (^)(NSIndexPath * _Nonnull))zf_playerWillAppearInScrollView { - objc_setAssociatedObject(self, @selector(zf_playerWillAppearInScrollView), zf_playerWillAppearInScrollView, OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (void)setZf_playerDidDisappearInScrollView:(void (^)(NSIndexPath * _Nonnull))zf_playerDidDisappearInScrollView { - objc_setAssociatedObject(self, @selector(zf_playerDidDisappearInScrollView), zf_playerDidDisappearInScrollView, OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (void)setZf_playerShouldPlayInScrollView:(void (^)(NSIndexPath * _Nonnull))zf_playerShouldPlayInScrollView { - objc_setAssociatedObject(self, @selector(zf_playerShouldPlayInScrollView), zf_playerShouldPlayInScrollView, OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (void)setZf_scrollViewDidEndScrollingCallback:(void (^)(NSIndexPath * _Nonnull))zf_scrollViewDidEndScrollingCallback { - objc_setAssociatedObject(self, @selector(zf_scrollViewDidEndScrollingCallback), zf_scrollViewDidEndScrollingCallback, OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -#pragma mark - getter - -- (UIScrollView *)scrollView { - UIScrollView *scrollView = objc_getAssociatedObject(self, _cmd); - return scrollView; -} - -- (BOOL)isWWANAutoPlay { - return [objc_getAssociatedObject(self, _cmd) boolValue]; -} - -- (BOOL)stopWhileNotVisible { - NSNumber *number = objc_getAssociatedObject(self, _cmd); - if (number) return number.boolValue; - self.stopWhileNotVisible = YES; - return YES; -} - -- (NSInteger)containerViewTag { - return [objc_getAssociatedObject(self, _cmd) integerValue]; -} - -- (NSIndexPath *)playingIndexPath { - return objc_getAssociatedObject(self, _cmd); -} - -- (NSIndexPath *)shouldPlayIndexPath { - return self.scrollView.zf_shouldPlayIndexPath; -} - -- (NSArray *> *)sectionAssetURLs { - return objc_getAssociatedObject(self, _cmd); -} - -- (BOOL)shouldAutoPlay { - return [objc_getAssociatedObject(self, _cmd) boolValue]; -} - -- (CGFloat)playerDisapperaPercent { - NSNumber *number = objc_getAssociatedObject(self, _cmd); - if (number) return number.floatValue; - self.playerDisapperaPercent = 0.5; - return 0.5; -} - -- (CGFloat)playerApperaPercent { - NSNumber *number = objc_getAssociatedObject(self, _cmd); - if (number) return number.floatValue; - self.playerApperaPercent = 0.0; - return 0.0; -} - -- (void (^)(NSIndexPath * _Nonnull, CGFloat))zf_playerAppearingInScrollView { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(NSIndexPath * _Nonnull, CGFloat))zf_playerDisappearingInScrollView { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(NSIndexPath * _Nonnull))zf_playerDidAppearInScrollView { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(NSIndexPath * _Nonnull))zf_playerWillDisappearInScrollView { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(NSIndexPath * _Nonnull))zf_playerWillAppearInScrollView { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(NSIndexPath * _Nonnull))zf_playerDidDisappearInScrollView { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(NSIndexPath * _Nonnull))zf_playerShouldPlayInScrollView { - return objc_getAssociatedObject(self, _cmd); -} - -- (void (^)(NSIndexPath * _Nonnull))zf_scrollViewDidEndScrollingCallback { - return objc_getAssociatedObject(self, _cmd); -} - -#pragma mark - Public method - -- (void)zf_filterShouldPlayCellWhileScrolled:(void (^ __nullable)(NSIndexPath *indexPath))handler { - [self.scrollView zf_filterShouldPlayCellWhileScrolled:handler]; -} - -- (void)zf_filterShouldPlayCellWhileScrolling:(void (^ __nullable)(NSIndexPath *indexPath))handler { - [self.scrollView zf_filterShouldPlayCellWhileScrolling:handler]; -} - -- (void)playTheIndexPath:(NSIndexPath *)indexPath { - self.playingIndexPath = indexPath; - NSURL *assetURL; - if (self.sectionAssetURLs.count) { - assetURL = self.sectionAssetURLs[indexPath.section][indexPath.row]; - } else if (self.assetURLs.count) { - assetURL = self.assetURLs[indexPath.row]; - self.currentPlayIndex = indexPath.row; - } - self.assetURL = assetURL; -} - - -- (void)playTheIndexPath:(NSIndexPath *)indexPath scrollPosition:(ZFPlayerScrollViewScrollPosition)scrollPosition animated:(BOOL)animated { - [self playTheIndexPath:indexPath scrollPosition:scrollPosition animated:animated completionHandler:nil]; -} - -- (void)playTheIndexPath:(NSIndexPath *)indexPath scrollPosition:(ZFPlayerScrollViewScrollPosition)scrollPosition animated:(BOOL)animated completionHandler:(void (^ __nullable)(void))completionHandler { - NSURL *assetURL; - if (self.sectionAssetURLs.count) { - assetURL = self.sectionAssetURLs[indexPath.section][indexPath.row]; - } else if (self.assetURLs.count) { - assetURL = self.assetURLs[indexPath.row]; - self.currentPlayIndex = indexPath.row; - } - @zf_weakify(self) - [self.scrollView zf_scrollToRowAtIndexPath:indexPath atScrollPosition:scrollPosition animated:animated completionHandler:^{ - @zf_strongify(self) - if (completionHandler) completionHandler(); - self.playingIndexPath = indexPath; - self.assetURL = assetURL; - }]; -} - - -- (void)playTheIndexPath:(NSIndexPath *)indexPath assetURL:(NSURL *)assetURL { - self.playingIndexPath = indexPath; - self.assetURL = assetURL; -} - - -- (void)playTheIndexPath:(NSIndexPath *)indexPath - assetURL:(NSURL *)assetURL - scrollPosition:(ZFPlayerScrollViewScrollPosition)scrollPosition - animated:(BOOL)animated { - [self playTheIndexPath:indexPath assetURL:assetURL scrollPosition:scrollPosition animated:animated completionHandler:nil]; -} - - -- (void)playTheIndexPath:(NSIndexPath *)indexPath - assetURL:(NSURL *)assetURL - scrollPosition:(ZFPlayerScrollViewScrollPosition)scrollPosition - animated:(BOOL)animated - completionHandler:(void (^ __nullable)(void))completionHandler { - @zf_weakify(self) - [self.scrollView zf_scrollToRowAtIndexPath:indexPath atScrollPosition:scrollPosition animated:animated completionHandler:^{ - @zf_strongify(self) - if (completionHandler) completionHandler(); - self.playingIndexPath = indexPath; - self.assetURL = assetURL; - }]; -} - -@end - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - -@implementation ZFPlayerController (ZFPlayerDeprecated) - -- (void)updateScrollViewPlayerToCell { - if (self.currentPlayerManager.view && self.playingIndexPath && self.containerViewTag) { - UIView *cell = [self.scrollView zf_getCellForIndexPath:self.playingIndexPath]; - self.containerView = [cell viewWithTag:self.containerViewTag]; - [self.orientationObserver updateRotateView:self.currentPlayerManager.view rotateViewAtCell:cell playerViewTag:self.containerViewTag]; - [self layoutPlayerSubViews]; - } -} - -- (void)updateNoramlPlayerWithContainerView:(UIView *)containerView { - if (self.currentPlayerManager.view && self.containerView) { - self.containerView = containerView; - [self.orientationObserver updateRotateView:self.currentPlayerManager.view containerView:self.containerView]; - [self layoutPlayerSubViews]; - } -} - -- (void)playTheIndexPath:(NSIndexPath *)indexPath scrollToTop:(BOOL)scrollToTop completionHandler:(void (^ _Nullable)(void))completionHandler { - NSURL *assetURL; - if (self.sectionAssetURLs.count) { - assetURL = self.sectionAssetURLs[indexPath.section][indexPath.row]; - } else if (self.assetURLs.count) { - assetURL = self.assetURLs[indexPath.row]; - self.currentPlayIndex = indexPath.row; - } - if (scrollToTop) { - @zf_weakify(self) - [self.scrollView zf_scrollToRowAtIndexPath:indexPath completionHandler:^{ - @zf_strongify(self) - if (completionHandler) completionHandler(); - self.playingIndexPath = indexPath; - self.assetURL = assetURL; - }]; - } else { - if (completionHandler) completionHandler(); - self.playingIndexPath = indexPath; - self.assetURL = assetURL; - } -} - -- (void)playTheIndexPath:(NSIndexPath *)indexPath scrollToTop:(BOOL)scrollToTop { - if ([indexPath compare:self.playingIndexPath] == NSOrderedSame) return; - if (scrollToTop) { - @zf_weakify(self) - [self.scrollView zf_scrollToRowAtIndexPath:indexPath completionHandler:^{ - @zf_strongify(self) - [self playTheIndexPath:indexPath]; - }]; - } else { - [self playTheIndexPath:indexPath]; - } -} - -- (void)playTheIndexPath:(NSIndexPath *)indexPath assetURL:(NSURL *)assetURL scrollToTop:(BOOL)scrollToTop { - self.playingIndexPath = indexPath; - self.assetURL = assetURL; - if (scrollToTop) { - [self.scrollView zf_scrollToRowAtIndexPath:indexPath completionHandler:nil]; - } -} - -- (void)enterLandscapeFullScreen:(UIInterfaceOrientation)orientation animated:(BOOL)animated completion:(void (^ _Nullable)(void))completion { - self.orientationObserver.fullScreenMode = ZFFullScreenModeLandscape; - [self.orientationObserver rotateToOrientation:orientation animated:animated completion:completion]; -} - -- (void)enterLandscapeFullScreen:(UIInterfaceOrientation)orientation animated:(BOOL)animated { - [self enterLandscapeFullScreen:orientation animated:animated completion:nil]; -} - -/// Add to the keyWindow -- (void)addPlayerViewToKeyWindow { - [self addPlayerViewToSmallFloatView]; -} - -@end - -#pragma clang diagnostic pop diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerGestureControl.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerGestureControl.h deleted file mode 100755 index 120ed45..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerGestureControl.h +++ /dev/null @@ -1,137 +0,0 @@ -// -// ZFPlayerGestureControl.h -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 - -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(NSUInteger, ZFPlayerGestureType) { - ZFPlayerGestureTypeUnknown, - ZFPlayerGestureTypeSingleTap, - ZFPlayerGestureTypeDoubleTap, - ZFPlayerGestureTypePan, - ZFPlayerGestureTypePinch -}; - -typedef NS_ENUM(NSUInteger, ZFPanDirection) { - ZFPanDirectionUnknown, - ZFPanDirectionV, - ZFPanDirectionH, -}; - -typedef NS_ENUM(NSUInteger, ZFPanLocation) { - ZFPanLocationUnknown, - ZFPanLocationLeft, - ZFPanLocationRight, -}; - -typedef NS_ENUM(NSUInteger, ZFPanMovingDirection) { - ZFPanMovingDirectionUnkown, - ZFPanMovingDirectionTop, - ZFPanMovingDirectionLeft, - ZFPanMovingDirectionBottom, - ZFPanMovingDirectionRight, -}; - -/// This enumeration lists some of the gesture types that the player has by default. -typedef NS_OPTIONS(NSUInteger, ZFPlayerDisableGestureTypes) { - ZFPlayerDisableGestureTypesNone = 0, - ZFPlayerDisableGestureTypesSingleTap = 1 << 0, - ZFPlayerDisableGestureTypesDoubleTap = 1 << 1, - ZFPlayerDisableGestureTypesPan = 1 << 2, - ZFPlayerDisableGestureTypesPinch = 1 << 3, - ZFPlayerDisableGestureTypesAll = (ZFPlayerDisableGestureTypesSingleTap | ZFPlayerDisableGestureTypesDoubleTap | ZFPlayerDisableGestureTypesPan | ZFPlayerDisableGestureTypesPinch) -}; - -/// This enumeration lists some of the pan gesture moving direction that the player not support. -typedef NS_OPTIONS(NSUInteger, ZFPlayerDisablePanMovingDirection) { - ZFPlayerDisablePanMovingDirectionNone = 0, /// Not disable pan moving direction. - ZFPlayerDisablePanMovingDirectionVertical = 1 << 0, /// Disable pan moving vertical direction. - ZFPlayerDisablePanMovingDirectionHorizontal = 1 << 1, /// Disable pan moving horizontal direction. - ZFPlayerDisablePanMovingDirectionAll = (ZFPlayerDisablePanMovingDirectionVertical | ZFPlayerDisablePanMovingDirectionHorizontal) /// Disable pan moving all direction. -}; - -@interface ZFPlayerGestureControl : NSObject - -/// Gesture condition callback. -@property (nonatomic, copy, nullable) BOOL(^triggerCondition)(ZFPlayerGestureControl *control, ZFPlayerGestureType type, UIGestureRecognizer *gesture, UITouch *touch); - -/// Single tap gesture callback. -@property (nonatomic, copy, nullable) void(^singleTapped)(ZFPlayerGestureControl *control); - -/// Double tap gesture callback. -@property (nonatomic, copy, nullable) void(^doubleTapped)(ZFPlayerGestureControl *control); - -/// Begin pan gesture callback. -@property (nonatomic, copy, nullable) void(^beganPan)(ZFPlayerGestureControl *control, ZFPanDirection direction, ZFPanLocation location); - -/// Pan gesture changing callback. -@property (nonatomic, copy, nullable) void(^changedPan)(ZFPlayerGestureControl *control, ZFPanDirection direction, ZFPanLocation location, CGPoint velocity); - -/// End the Pan gesture callback. -@property (nonatomic, copy, nullable) void(^endedPan)(ZFPlayerGestureControl *control, ZFPanDirection direction, ZFPanLocation location); - -/// Pinch gesture callback. -@property (nonatomic, copy, nullable) void(^pinched)(ZFPlayerGestureControl *control, float scale); - -/// The single tap gesture. -@property (nonatomic, strong, readonly) UITapGestureRecognizer *singleTap; - -/// The double tap gesture. -@property (nonatomic, strong, readonly) UITapGestureRecognizer *doubleTap; - -/// The pan tap gesture. -@property (nonatomic, strong, readonly) UIPanGestureRecognizer *panGR; - -/// The pinch tap gesture. -@property (nonatomic, strong, readonly) UIPinchGestureRecognizer *pinchGR; - -/// The pan gesture direction. -@property (nonatomic, readonly) ZFPanDirection panDirection; - -/// The pan location. -@property (nonatomic, readonly) ZFPanLocation panLocation; - -/// The moving drection. -@property (nonatomic, readonly) ZFPanMovingDirection panMovingDirection; - -/// The gesture types that the player not support. -@property (nonatomic) ZFPlayerDisableGestureTypes disableTypes; - -/// The pan gesture moving direction that the player not support. -@property (nonatomic) ZFPlayerDisablePanMovingDirection disablePanMovingDirection; - -/** - Add all gestures(singleTap、doubleTap、panGR、pinchGR) to the view. - */ -- (void)addGestureToView:(UIView *)view; - -/** - Remove all gestures(singleTap、doubleTap、panGR、pinchGR) form the view. - */ -- (void)removeGestureToView:(UIView *)view; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerGestureControl.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerGestureControl.m deleted file mode 100755 index f2677d8..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerGestureControl.m +++ /dev/null @@ -1,261 +0,0 @@ -// -// ZFPlayerGestureControl.m -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "ZFPlayerGestureControl.h" - -@interface ZFPlayerGestureControl () - -@property (nonatomic, strong) UITapGestureRecognizer *singleTap; -@property (nonatomic, strong) UITapGestureRecognizer *doubleTap; -@property (nonatomic, strong) UIPanGestureRecognizer *panGR; -@property (nonatomic, strong) UIPinchGestureRecognizer *pinchGR; -@property (nonatomic) ZFPanDirection panDirection; -@property (nonatomic) ZFPanLocation panLocation; -@property (nonatomic) ZFPanMovingDirection panMovingDirection; -@property (nonatomic, weak) UIView *targetView; - -@end - -@implementation ZFPlayerGestureControl - -- (void)addGestureToView:(UIView *)view { - self.targetView = view; - self.targetView.multipleTouchEnabled = YES; - [self.singleTap requireGestureRecognizerToFail:self.doubleTap]; - [self.singleTap requireGestureRecognizerToFail:self.panGR]; - [self.targetView addGestureRecognizer:self.singleTap]; - [self.targetView addGestureRecognizer:self.doubleTap]; - [self.targetView addGestureRecognizer:self.panGR]; - [self.targetView addGestureRecognizer:self.pinchGR]; -} - -- (void)removeGestureToView:(UIView *)view { - [view removeGestureRecognizer:self.singleTap]; - [view removeGestureRecognizer:self.doubleTap]; - [view removeGestureRecognizer:self.panGR]; - [view removeGestureRecognizer:self.pinchGR]; -} - -- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { - if (gestureRecognizer == self.panGR) { - CGPoint translation = [(UIPanGestureRecognizer *)gestureRecognizer translationInView:self.targetView]; - CGFloat x = fabs(translation.x); - CGFloat y = fabs(translation.y); - if (x < y && self.disablePanMovingDirection & ZFPlayerDisablePanMovingDirectionVertical) { /// up and down moving direction. - return NO; - } else if (x > y && self.disablePanMovingDirection & ZFPlayerDisablePanMovingDirectionHorizontal) { /// left and right moving direction. - return NO; - } - } - return YES; -} - -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { - ZFPlayerGestureType type = ZFPlayerGestureTypeUnknown; - if (gestureRecognizer == self.singleTap) type = ZFPlayerGestureTypeSingleTap; - else if (gestureRecognizer == self.doubleTap) type = ZFPlayerGestureTypeDoubleTap; - else if (gestureRecognizer == self.panGR) type = ZFPlayerGestureTypePan; - else if (gestureRecognizer == self.pinchGR) type = ZFPlayerGestureTypePinch; - CGPoint locationPoint = [touch locationInView:touch.view]; - if (locationPoint.x > _targetView.bounds.size.width / 2) { - self.panLocation = ZFPanLocationRight; - } else { - self.panLocation = ZFPanLocationLeft; - } - - switch (type) { - case ZFPlayerGestureTypeUnknown: break; - case ZFPlayerGestureTypePan: { - if (self.disableTypes & ZFPlayerDisableGestureTypesPan) { - return NO; - } - } - break; - case ZFPlayerGestureTypePinch: { - if (self.disableTypes & ZFPlayerDisableGestureTypesPinch) { - return NO; - } - } - break; - case ZFPlayerGestureTypeDoubleTap: { - if (self.disableTypes & ZFPlayerDisableGestureTypesDoubleTap) { - return NO; - } - } - break; - case ZFPlayerGestureTypeSingleTap: { - if (self.disableTypes & ZFPlayerDisableGestureTypesSingleTap) { - return NO; - } - } - break; - } - - if (self.triggerCondition) return self.triggerCondition(self, type, gestureRecognizer, touch); - return YES; -} - -// Whether to support multi-trigger, return YES, you can trigger a method with multiple gestures, return NO is mutually exclusive -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { - if (otherGestureRecognizer != self.singleTap && - otherGestureRecognizer != self.doubleTap && - otherGestureRecognizer != self.panGR && - otherGestureRecognizer != self.pinchGR) return NO; - - if (gestureRecognizer == self.panGR) { - CGPoint translation = [(UIPanGestureRecognizer *)gestureRecognizer translationInView:self.targetView]; - CGFloat x = fabs(translation.x); - CGFloat y = fabs(translation.y); - if (x < y && self.disablePanMovingDirection & ZFPlayerDisablePanMovingDirectionVertical) { - return YES; - } else if (x > y && self.disablePanMovingDirection & ZFPlayerDisablePanMovingDirectionHorizontal) { - return YES; - } - } - if (gestureRecognizer.numberOfTouches >= 2) { - return NO; - } - return YES; -} - -- (UITapGestureRecognizer *)singleTap { - if (!_singleTap){ - _singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; - _singleTap.delegate = self; - _singleTap.delaysTouchesBegan = YES; - _singleTap.delaysTouchesEnded = YES; - _singleTap.numberOfTouchesRequired = 1; - _singleTap.numberOfTapsRequired = 1; - } - return _singleTap; -} - -- (UITapGestureRecognizer *)doubleTap { - if (!_doubleTap) { - _doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)]; - _doubleTap.delegate = self; - _doubleTap.delaysTouchesBegan = YES; - _singleTap.delaysTouchesEnded = YES; - _doubleTap.numberOfTouchesRequired = 1; - _doubleTap.numberOfTapsRequired = 2; - } - return _doubleTap; -} - -- (UIPanGestureRecognizer *)panGR { - if (!_panGR) { - _panGR = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; - _panGR.delegate = self; - _panGR.delaysTouchesBegan = YES; - _panGR.delaysTouchesEnded = YES; - _panGR.maximumNumberOfTouches = 1; - _panGR.cancelsTouchesInView = YES; - } - return _panGR; -} - -- (UIPinchGestureRecognizer *)pinchGR { - if (!_pinchGR) { - _pinchGR = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)]; - _pinchGR.delegate = self; - _pinchGR.delaysTouchesBegan = YES; - } - return _pinchGR; -} - -- (void)handleSingleTap:(UITapGestureRecognizer *)tap { - if (self.singleTapped) self.singleTapped(self); -} - -- (void)handleDoubleTap:(UITapGestureRecognizer *)tap { - if (self.doubleTapped) self.doubleTapped(self); -} - -- (void)handlePan:(UIPanGestureRecognizer *)pan { - CGPoint translate = [pan translationInView:pan.view]; - CGPoint velocity = [pan velocityInView:pan.view]; - switch (pan.state) { - case UIGestureRecognizerStateBegan: { - self.panMovingDirection = ZFPanMovingDirectionUnkown; - CGFloat x = fabs(velocity.x); - CGFloat y = fabs(velocity.y); - if (x > y) { - self.panDirection = ZFPanDirectionH; - } else if (x < y) { - self.panDirection = ZFPanDirectionV; - } else { - self.panDirection = ZFPanDirectionUnknown; - } - - if (self.beganPan) self.beganPan(self, self.panDirection, self.panLocation); - } - break; - case UIGestureRecognizerStateChanged: { - switch (_panDirection) { - case ZFPanDirectionH: { - if (translate.x > 0) { - self.panMovingDirection = ZFPanMovingDirectionRight; - } else { - self.panMovingDirection = ZFPanMovingDirectionLeft; - } - } - break; - case ZFPanDirectionV: { - if (translate.y > 0) { - self.panMovingDirection = ZFPanMovingDirectionBottom; - } else { - self.panMovingDirection = ZFPanMovingDirectionTop; - } - } - break; - case ZFPanDirectionUnknown: - break; - } - if (self.changedPan) self.changedPan(self, self.panDirection, self.panLocation, velocity); - } - break; - case UIGestureRecognizerStateFailed: - case UIGestureRecognizerStateCancelled: - case UIGestureRecognizerStateEnded: { - if (self.endedPan) self.endedPan(self, self.panDirection, self.panLocation); - } - break; - default: - break; - } - [pan setTranslation:CGPointZero inView:pan.view]; -} - -- (void)handlePinch:(UIPinchGestureRecognizer *)pinch { - switch (pinch.state) { - case UIGestureRecognizerStateEnded: { - if (self.pinched) self.pinched(self, pinch.scale); - } - break; - default: - break; - } -} - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerLogManager.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerLogManager.h deleted file mode 100755 index 1b0e60a..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerLogManager.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// ZFPlayerLogManager.h -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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. - -#define ZFPlayerLog(format,...) [ZFPlayerLogManager logWithFunction:__FUNCTION__ lineNumber:__LINE__ formatString:[NSString stringWithFormat:format, ##__VA_ARGS__]] - -#import -#import - -@interface ZFPlayerLogManager : NSObject - -// Set the log output status. -+ (void)setLogEnable:(BOOL)enable; - -// Gets the log output status. -+ (BOOL)getLogEnable; - -/// Get ZFPlayer version. -+ (NSString *)version; - -// Log output method. -+ (void)logWithFunction:(const char *)function lineNumber:(int)lineNumber formatString:(NSString *)formatString; - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerLogManager.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerLogManager.m deleted file mode 100755 index d6ff517..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerLogManager.m +++ /dev/null @@ -1,49 +0,0 @@ -// -// ZFPlayerLogManager.m -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "ZFPlayerLogManager.h" - -static BOOL kLogEnable = NO; - -@implementation ZFPlayerLogManager - -+ (void)setLogEnable:(BOOL)enable { - kLogEnable = enable; -} - -+ (BOOL)getLogEnable { - return kLogEnable; -} - -+ (NSString *)version { - return @"4.0.2"; -} - -+ (void)logWithFunction:(const char *)function lineNumber:(int)lineNumber formatString:(NSString *)formatString { - if ([self getLogEnable]) { - NSLog(@"%s[%d]%@", function, lineNumber, formatString); - } -} - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerMediaControl.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerMediaControl.h deleted file mode 100644 index 2bf4749..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerMediaControl.h +++ /dev/null @@ -1,210 +0,0 @@ -// -// ZFPlayerMediaControl.h -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 -#import "ZFPlayerMediaPlayback.h" -#import "ZFOrientationObserver.h" -#import "ZFPlayerGestureControl.h" -#import "ZFReachabilityManager.h" -@class ZFPlayerController; - -NS_ASSUME_NONNULL_BEGIN - -@protocol ZFPlayerMediaControl - -@required -/// Current playerController -@property (nonatomic, weak) ZFPlayerController *player; - -@optional - -#pragma mark - Playback state - -/// When the player prepare to play the video. -- (void)videoPlayer:(ZFPlayerController *)videoPlayer prepareToPlay:(NSURL *)assetURL; - -/// When th player playback state changed. -- (void)videoPlayer:(ZFPlayerController *)videoPlayer playStateChanged:(ZFPlayerPlaybackState)state; - -/// When th player loading state changed. -- (void)videoPlayer:(ZFPlayerController *)videoPlayer loadStateChanged:(ZFPlayerLoadState)state; - -#pragma mark - progress - -/** - When the playback changed. - - @param videoPlayer the player. - @param currentTime the current play time. - @param totalTime the video total time. - */ -- (void)videoPlayer:(ZFPlayerController *)videoPlayer - currentTime:(NSTimeInterval)currentTime - totalTime:(NSTimeInterval)totalTime; - -/** - When buffer progress changed. - */ -- (void)videoPlayer:(ZFPlayerController *)videoPlayer - bufferTime:(NSTimeInterval)bufferTime; - -/** - When you are dragging to change the video progress. - */ -- (void)videoPlayer:(ZFPlayerController *)videoPlayer - draggingTime:(NSTimeInterval)seekTime - totalTime:(NSTimeInterval)totalTime; - -/** - When play end. - */ -- (void)videoPlayerPlayEnd:(ZFPlayerController *)videoPlayer; - -/** - When play failed. - */ -- (void)videoPlayerPlayFailed:(ZFPlayerController *)videoPlayer error:(id)error; - -#pragma mark - lock screen - -/** - When set `videoPlayer.lockedScreen`. - */ -- (void)lockedVideoPlayer:(ZFPlayerController *)videoPlayer lockedScreen:(BOOL)locked; - -#pragma mark - Screen rotation - -/** - When the fullScreen maode will changed. - */ -- (void)videoPlayer:(ZFPlayerController *)videoPlayer orientationWillChange:(ZFOrientationObserver *)observer; - -/** - When the fullScreen maode did changed. - */ -- (void)videoPlayer:(ZFPlayerController *)videoPlayer orientationDidChanged:(ZFOrientationObserver *)observer; - -#pragma mark - The network changed - -/** - When the network changed - */ -- (void)videoPlayer:(ZFPlayerController *)videoPlayer reachabilityChanged:(ZFReachabilityStatus)status; - -#pragma mark - The video size changed - -/** - When the video size changed - */ -- (void)videoPlayer:(ZFPlayerController *)videoPlayer presentationSizeChanged:(CGSize)size; - -#pragma mark - Gesture - -/** - When the gesture condition - */ -- (BOOL)gestureTriggerCondition:(ZFPlayerGestureControl *)gestureControl - gestureType:(ZFPlayerGestureType)gestureType - gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer - touch:(UITouch *)touch; - -/** - When the gesture single tapped - */ -- (void)gestureSingleTapped:(ZFPlayerGestureControl *)gestureControl; - -/** - When the gesture double tapped - */ -- (void)gestureDoubleTapped:(ZFPlayerGestureControl *)gestureControl; - -/** - When the gesture begin panGesture - */ -- (void)gestureBeganPan:(ZFPlayerGestureControl *)gestureControl - panDirection:(ZFPanDirection)direction - panLocation:(ZFPanLocation)location; - -/** - When the gesture paning - */ -- (void)gestureChangedPan:(ZFPlayerGestureControl *)gestureControl - panDirection:(ZFPanDirection)direction - panLocation:(ZFPanLocation)location - withVelocity:(CGPoint)velocity; - -/** - When the end panGesture - */ -- (void)gestureEndedPan:(ZFPlayerGestureControl *)gestureControl - panDirection:(ZFPanDirection)direction - panLocation:(ZFPanLocation)location; - -/** - When the pinchGesture changed - */ -- (void)gesturePinched:(ZFPlayerGestureControl *)gestureControl - scale:(float)scale; - -#pragma mark - scrollview - -/** - When the player will appear in scrollView. - */ -- (void)playerWillAppearInScrollView:(ZFPlayerController *)videoPlayer; - -/** - When the player did appear in scrollView. - */ -- (void)playerDidAppearInScrollView:(ZFPlayerController *)videoPlayer; - -/** - When the player will disappear in scrollView. - */ -- (void)playerWillDisappearInScrollView:(ZFPlayerController *)videoPlayer; - -/** - When the player did disappear in scrollView. - */ -- (void)playerDidDisappearInScrollView:(ZFPlayerController *)videoPlayer; - -/** - When the player appearing in scrollView. - */ -- (void)playerAppearingInScrollView:(ZFPlayerController *)videoPlayer playerApperaPercent:(CGFloat)playerApperaPercent; - -/** - When the player disappearing in scrollView. - */ -- (void)playerDisappearingInScrollView:(ZFPlayerController *)videoPlayer playerDisapperaPercent:(CGFloat)playerDisapperaPercent; - -/** - When the small float view show. - */ -- (void)videoPlayer:(ZFPlayerController *)videoPlayer floatViewShow:(BOOL)show; - -@end - -NS_ASSUME_NONNULL_END - diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerMediaPlayback.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerMediaPlayback.h deleted file mode 100644 index dc64493..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerMediaPlayback.h +++ /dev/null @@ -1,160 +0,0 @@ -// -// ZFMediaPlayback.h -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 -#import "ZFPlayerView.h" -#import "ZFPlayerConst.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol ZFPlayerMediaPlayback - -@required -/// The view must inherited `ZFPlayerView`,this view deals with some gesture conflicts. -@property (nonatomic) ZFPlayerView *view; - -/// The player volume. -/// Only affects audio volume for the player instance and not for the device. -/// You can change device volume or player volume as needed,change the player volume you can follow the `ZFPlayerMediaPlayback` protocol. -@property (nonatomic) float volume; - -/// The player muted. -/// indicates whether or not audio output of the player is muted. Only affects audio muting for the player instance and not for the device. -/// You can change device volume or player muted as needed,change the player muted you can follow the `ZFPlayerMediaPlayback` protocol. -@property (nonatomic, getter=isMuted) BOOL muted; - -/// Playback speed,0.5...2 -@property (nonatomic) float rate; - -/// The player current play time. -@property (nonatomic, readonly) NSTimeInterval currentTime; - -/// The player total time. -@property (nonatomic, readonly) NSTimeInterval totalTime; - -/// The player buffer time. -@property (nonatomic, readonly) NSTimeInterval bufferTime; - -/// The player seek time. -@property (nonatomic) NSTimeInterval seekTime; - -/// The player play state,playing or not playing. -@property (nonatomic, readonly) BOOL isPlaying; - -/// Determines how the content scales to fit the view. Defaults to ZFPlayerScalingModeNone. -@property (nonatomic) ZFPlayerScalingMode scalingMode; - -/** - @abstract Check whether video preparation is complete. - @discussion isPreparedToPlay processing logic - - * If isPreparedToPlay is true, you can call [ZFPlayerMediaPlayback play] API start playing; - * If isPreparedToPlay to false, direct call [ZFPlayerMediaPlayback play], in the play the internal automatic call [ZFPlayerMediaPlayback prepareToPlay] API. - * Returns true if prepared for playback. - */ -@property (nonatomic, readonly) BOOL isPreparedToPlay; - -/// The player should auto player, default is YES. -@property (nonatomic) BOOL shouldAutoPlay; - -/// The play asset URL. -@property (nonatomic) NSURL *assetURL; - -/// The video size. -@property (nonatomic) CGSize presentationSize; - -/// The playback state. -@property (nonatomic, readonly) ZFPlayerPlaybackState playState; - -/// The player load state. -@property (nonatomic, readonly) ZFPlayerLoadState loadState; - -///------------------------------------ -/// If you don't appoint the controlView, you can called the following blocks. -/// If you appoint the controlView, The following block cannot be called outside, only for `ZFPlayerController` calls. -///------------------------------------ - -/// The block invoked when the player is Prepare to play. -@property (nonatomic, copy, nullable) void(^playerPrepareToPlay)(id asset, NSURL *assetURL); - -/// The block invoked when the player is Ready to play. -@property (nonatomic, copy, nullable) void(^playerReadyToPlay)(id asset, NSURL *assetURL); - -/// The block invoked when the player play progress changed. -@property (nonatomic, copy, nullable) void(^playerPlayTimeChanged)(id asset, NSTimeInterval currentTime, NSTimeInterval duration); - -/// The block invoked when the player play buffer changed. -@property (nonatomic, copy, nullable) void(^playerBufferTimeChanged)(id asset, NSTimeInterval bufferTime); - -/// The block invoked when the player playback state changed. -@property (nonatomic, copy, nullable) void(^playerPlayStateChanged)(id asset, ZFPlayerPlaybackState playState); - -/// The block invoked when the player load state changed. -@property (nonatomic, copy, nullable) void(^playerLoadStateChanged)(id asset, ZFPlayerLoadState loadState); - -/// The block invoked when the player play failed. -@property (nonatomic, copy, nullable) void(^playerPlayFailed)(id asset, id error); - -/// The block invoked when the player play end. -@property (nonatomic, copy, nullable) void(^playerDidToEnd)(id asset); - -// The block invoked when video size changed. -@property (nonatomic, copy, nullable) void(^presentationSizeChanged)(id asset, CGSize size); - -///------------------------------------ -/// end -///------------------------------------ - -/// Prepares the current queue for playback, interrupting any active (non-mixible) audio sessions. -- (void)prepareToPlay; - -/// Reload player. -- (void)reloadPlayer; - -/// Play playback. -- (void)play; - -/// Pauses playback. -- (void)pause; - -/// Replay playback. -- (void)replay; - -/// Stop playback. -- (void)stop; - -/// Use this method to seek to a specified time for the current player and to be notified when the seek operation is complete. -- (void)seekToTime:(NSTimeInterval)time completionHandler:(void (^ __nullable)(BOOL finished))completionHandler; - -@optional - -/// Video UIImage at the current time. -- (UIImage *)thumbnailImageAtCurrentTime; - -/// Video UIImage at the current time. -- (void)thumbnailImageAtCurrentTime:(void(^)(UIImage *))handler; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerNotification.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerNotification.h deleted file mode 100755 index 7311c70..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerNotification.h +++ /dev/null @@ -1,59 +0,0 @@ -// -// ZFPlayerNotification.h -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(NSUInteger, ZFPlayerBackgroundState) { - ZFPlayerBackgroundStateForeground, // Enter the foreground from the background. - ZFPlayerBackgroundStateBackground, // From the foreground to the background. -}; - -@interface ZFPlayerNotification : NSObject - -@property (nonatomic, readonly) ZFPlayerBackgroundState backgroundState; - -@property (nonatomic, copy, nullable) void(^willResignActive)(ZFPlayerNotification *registrar); - -@property (nonatomic, copy, nullable) void(^didBecomeActive)(ZFPlayerNotification *registrar); - -@property (nonatomic, copy, nullable) void(^newDeviceAvailable)(ZFPlayerNotification *registrar); - -@property (nonatomic, copy, nullable) void(^oldDeviceUnavailable)(ZFPlayerNotification *registrar); - -@property (nonatomic, copy, nullable) void(^categoryChange)(ZFPlayerNotification *registrar); - -@property (nonatomic, copy, nullable) void(^volumeChanged)(float volume); - -@property (nonatomic, copy, nullable) void(^audioInterruptionCallback)(AVAudioSessionInterruptionType interruptionType); - -- (void)addNotification; - -- (void)removeNotification; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerNotification.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerNotification.m deleted file mode 100755 index f0340c2..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerNotification.m +++ /dev/null @@ -1,113 +0,0 @@ -// -// ZFPlayerNotification.m -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "ZFPlayerNotification.h" - -@interface ZFPlayerNotification () - -@property (nonatomic, assign) ZFPlayerBackgroundState backgroundState; - -@end - -@implementation ZFPlayerNotification - -- (void)addNotification { - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(audioSessionRouteChangeNotification:) - name:AVAudioSessionRouteChangeNotification - object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(applicationWillResignActiveNotification) - name:UIApplicationWillResignActiveNotification - object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(applicationDidBecomeActiveNotification) - name:UIApplicationDidBecomeActiveNotification - object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(volumeDidChangeNotification:) - name:@"AVSystemController_SystemVolumeDidChangeNotification" - object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(audioSessionInterruptionNotification:) - name:AVAudioSessionInterruptionNotification - object:nil]; - -} - -- (void)removeNotification { - [[NSNotificationCenter defaultCenter] removeObserver:self name:AVAudioSessionRouteChangeNotification object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillResignActiveNotification object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:@"AVSystemController_SystemVolumeDidChangeNotification" object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:AVAudioSessionInterruptionNotification object:nil]; -} - -- (void)dealloc { - [self removeNotification]; -} - -- (void)audioSessionRouteChangeNotification:(NSNotification*)notification { - dispatch_async(dispatch_get_main_queue(), ^{ - NSDictionary *interuptionDict = notification.userInfo; - NSInteger routeChangeReason = [[interuptionDict valueForKey:AVAudioSessionRouteChangeReasonKey] integerValue]; - switch (routeChangeReason) { - case AVAudioSessionRouteChangeReasonNewDeviceAvailable: { - if (self.newDeviceAvailable) self.newDeviceAvailable(self); - } - break; - case AVAudioSessionRouteChangeReasonOldDeviceUnavailable: { - if (self.oldDeviceUnavailable) self.oldDeviceUnavailable(self); - } - break; - case AVAudioSessionRouteChangeReasonCategoryChange: { - if (self.categoryChange) self.categoryChange(self); - } - break; - } - }); -} - -- (void)volumeDidChangeNotification:(NSNotification *)notification { - float volume = [[[notification userInfo] objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"] floatValue]; - if (self.volumeChanged) self.volumeChanged(volume); -} - -- (void)applicationWillResignActiveNotification { - self.backgroundState = ZFPlayerBackgroundStateBackground; - if (_willResignActive) _willResignActive(self); -} - -- (void)applicationDidBecomeActiveNotification { - self.backgroundState = ZFPlayerBackgroundStateForeground; - if (_didBecomeActive) _didBecomeActive(self); -} - -- (void)audioSessionInterruptionNotification:(NSNotification *)notification { - NSDictionary *interuptionDict = notification.userInfo; - AVAudioSessionInterruptionType interruptionType = [[interuptionDict valueForKey:AVAudioSessionInterruptionTypeKey] integerValue]; - if (self.audioInterruptionCallback) self.audioInterruptionCallback(interruptionType); -} - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerView.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerView.h deleted file mode 100644 index 67afc70..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerView.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// ZFPlayerView.h -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 -#import "ZFPlayerConst.h" - -@interface ZFPlayerView : UIView - -/// player content view. -@property (nonatomic, strong) UIView *playerView; - -/// Determines how the content scales to fit the view. -@property (nonatomic, assign) ZFPlayerScalingMode scalingMode; - -/// The video size. -@property (nonatomic, assign) CGSize presentationSize; - -/// The cover for playerView. -@property (nonatomic, strong, readonly) UIImageView *coverImageView; - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerView.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerView.m deleted file mode 100644 index 6952c05..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerView.m +++ /dev/null @@ -1,125 +0,0 @@ -// -// ZFPlayerView.m -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "ZFPlayerView.h" -#import "ZFPlayerConst.h" - -@implementation ZFPlayerView -@synthesize presentationSize = _presentationSize; -@synthesize coverImageView = _coverImageView; - -- (instancetype)init { - self = [super init]; - if (self) { - self.backgroundColor = [UIColor blackColor]; - [self addSubview:self.coverImageView]; - } - return self; -} - -- (void)setPlayerView:(UIView *)playerView { - if (_playerView) { - [_playerView removeFromSuperview]; - self.presentationSize = CGSizeZero; - } - _playerView = playerView; - if (playerView != nil) { - [self addSubview:playerView]; - } -} - -- (void)layoutSubviews { - [super layoutSubviews]; - CGFloat min_x = 0; - CGFloat min_y = 0; - CGFloat min_w = 0; - CGFloat min_h = 0; - CGFloat min_view_w = self.frame.size.width; - CGFloat min_view_h = self.frame.size.height; - - CGSize playerViewSize = CGSizeZero; - CGFloat videoWidth = self.presentationSize.width; - CGFloat videoHeight = self.presentationSize.height; - if (videoHeight == 0) return; - CGFloat screenScale = min_view_w/min_view_h; - CGFloat videoScale = videoWidth/videoHeight; - if (screenScale > videoScale) { - CGFloat height = min_view_h; - CGFloat width = height * videoScale; - playerViewSize = CGSizeMake(width, height); - } else { - CGFloat width = min_view_w; - CGFloat height = width / videoScale; - playerViewSize = CGSizeMake(width, height); - } - - if (self.scalingMode == ZFPlayerScalingModeNone || self.scalingMode == ZFPlayerScalingModeAspectFit) { - min_w = playerViewSize.width; - min_h = playerViewSize.height; - min_x = (min_view_w - min_w) / 2.0; - min_y = (min_view_h - min_h) / 2.0; - self.playerView.frame = CGRectMake(min_x, min_y, min_w, min_h); - } else if (self.scalingMode == ZFPlayerScalingModeAspectFill || self.scalingMode == ZFPlayerScalingModeFill) { - self.playerView.frame = self.bounds; - } - self.coverImageView.frame = self.playerView.frame; -} - -- (CGSize)presentationSize { - if (CGSizeEqualToSize(_presentationSize, CGSizeZero)) { - _presentationSize = self.frame.size; - } - return _presentationSize; -} - -- (UIImageView *)coverImageView { - if (!_coverImageView) { - _coverImageView = [[UIImageView alloc] init]; - _coverImageView.userInteractionEnabled = YES; - _coverImageView.clipsToBounds = YES; - _coverImageView.contentMode = UIViewContentModeScaleAspectFit; - } - return _coverImageView; -} - -- (void)setScalingMode:(ZFPlayerScalingMode)scalingMode { - _scalingMode = scalingMode; - if (scalingMode == ZFPlayerScalingModeNone || scalingMode == ZFPlayerScalingModeAspectFit) { - self.coverImageView.contentMode = UIViewContentModeScaleAspectFit; - } else if (scalingMode == ZFPlayerScalingModeAspectFill) { - self.coverImageView.contentMode = UIViewContentModeScaleAspectFill; - } else if (scalingMode == ZFPlayerScalingModeFill) { - self.coverImageView.contentMode = UIViewContentModeScaleToFill; - } - [self layoutIfNeeded]; -} - -- (void)setPresentationSize:(CGSize)presentationSize { - _presentationSize = presentationSize; - if (CGSizeEqualToSize(CGSizeZero, presentationSize)) return; - [self setNeedsLayout]; - [self layoutIfNeeded]; -} - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPortraitViewController.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPortraitViewController.h deleted file mode 100644 index 486804c..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPortraitViewController.h +++ /dev/null @@ -1,60 +0,0 @@ -// -// ZFPortraitViewController.h -// ZFPlayer -// -// Copyright (c) 2020年 任子丰 ( http://github.com/renzifeng ) -// -// 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 -#import "ZFOrientationObserver.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface ZFPortraitViewController : UIViewController - -/// The block invoked When player will rotate. -@property (nonatomic, copy, nullable) void(^orientationWillChange)(BOOL isFullScreen); - -/// The block invoked when player rotated. -@property (nonatomic, copy, nullable) void(^orientationDidChanged)(BOOL isFullScreen); - -@property (nonatomic, strong) UIView *contentView; - -@property (nonatomic, strong) UIView *containerView; - -@property (nonatomic, assign) BOOL statusBarHidden; - -/// default is UIStatusBarStyleLightContent. -@property (nonatomic, assign) UIStatusBarStyle statusBarStyle; -/// defalut is UIStatusBarAnimationSlide. -@property (nonatomic, assign) UIStatusBarAnimation statusBarAnimation; - -/// default is ZFDisablePortraitGestureTypesNone. -@property (nonatomic, assign) ZFDisablePortraitGestureTypes disablePortraitGestureTypes; - -@property (nonatomic, assign) CGSize presentationSize; - -@property (nonatomic, assign) BOOL fullScreenAnimation; - -@property (nonatomic, assign) NSTimeInterval duration; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPortraitViewController.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPortraitViewController.m deleted file mode 100644 index bb1ea04..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPortraitViewController.m +++ /dev/null @@ -1,231 +0,0 @@ -// -// ZFPortraitViewController.m -// ZFPlayer -// -// Copyright (c) 2020年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "ZFPortraitViewController.h" -#import "ZFPersentInteractiveTransition.h" -#import "ZFPresentTransition.h" - -@interface ZFPortraitViewController () - -@property (nonatomic, strong) ZFPresentTransition *transition; -@property (nonatomic, strong) ZFPersentInteractiveTransition *interactiveTransition; -@property (nonatomic, assign, getter=isFullScreen) BOOL fullScreen; - -@end - -@implementation ZFPortraitViewController - -- (instancetype)init { - self = [super init]; - if (self) { - self.transitioningDelegate = self; - self.modalPresentationStyle = UIModalPresentationOverFullScreen; - self.modalPresentationCapturesStatusBarAppearance = YES; - _statusBarStyle = UIStatusBarStyleLightContent; - _statusBarAnimation = UIStatusBarAnimationSlide; - } - return self; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - self.view.backgroundColor = [UIColor blackColor]; -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - if (!self.fullScreenAnimation) { - if (self.orientationWillChange) { - self.orientationWillChange(YES); - } - } -} - -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - if (!self.fullScreenAnimation) { - self.view.alpha = 1; - [self.view addSubview:self.contentView]; - self.contentView.frame = [self contentFullScreenRect]; - if (self.orientationDidChanged) { - self.orientationDidChanged(YES); - } - } - self.fullScreen = YES; - [self.interactiveTransition updateContentView:self.contentView - containerView:self.containerView]; -} - -- (void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - if (!self.fullScreenAnimation) { - if (self.orientationWillChange) { - self.orientationWillChange(NO); - } - } -} - -- (void)viewDidDisappear:(BOOL)animated { - [super viewDidDisappear:animated]; - self.fullScreen = NO; - if (!self.fullScreenAnimation) { - [self.containerView addSubview:self.contentView]; - self.contentView.frame = self.containerView.bounds; - if (self.orientationDidChanged) { - self.orientationDidChanged(NO); - } - } -} - -#pragma mark - transition delegate - -- (id)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source { - [self.transition transitionWithTransitionType:ZFPresentTransitionTypePresent contentView:self.contentView containerView:self.containerView]; - return self.transition; -} - -- (id)animationControllerForDismissedController:(UIViewController *)dismissed { - [self.transition transitionWithTransitionType:ZFPresentTransitionTypeDismiss contentView:self.contentView containerView:self.containerView]; - return self.transition; -} - -- (id)interactionControllerForDismissal:(id)animator { - return self.interactiveTransition.interation ? self.interactiveTransition : nil; -} - - -- (BOOL)shouldAutorotate { - return NO; -} - -- (BOOL)prefersStatusBarHidden { - return self.statusBarHidden; -} - -- (UIStatusBarStyle)preferredStatusBarStyle { - return self.statusBarStyle; -} - -- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation { - return self.statusBarAnimation; -} - -- (UIInterfaceOrientationMask)supportedInterfaceOrientations { - return UIInterfaceOrientationMaskPortrait; -} - -#pragma mark - ZFPortraitOrientationDelegate - -- (void)zf_orientationWillChange:(BOOL)isFullScreen { - if (self.orientationWillChange) { - self.orientationWillChange(isFullScreen); - } -} - -- (void)zf_orientationDidChanged:(BOOL)isFullScreen { - if (self.orientationDidChanged) { - self.orientationDidChanged(isFullScreen); - } -} - -- (void)zf_interationState:(BOOL)isDragging { - self.transition.interation = isDragging; -} - -#pragma mark - getter - -- (ZFPresentTransition *)transition { - if (!_transition) { - _transition = [[ZFPresentTransition alloc] init]; - _transition.contentFullScreenRect = [self contentFullScreenRect]; - _transition.delagate = self; - } - return _transition; -} - -- (ZFPersentInteractiveTransition *)interactiveTransition { - if (!_interactiveTransition) { - _interactiveTransition = [[ZFPersentInteractiveTransition alloc] init]; - _interactiveTransition.contentFullScreenRect = [self contentFullScreenRect]; - _interactiveTransition.viewController = self; - _interactiveTransition.delagate = self; - } - return _interactiveTransition;; -} - -- (void)setDisablePortraitGestureTypes:(ZFDisablePortraitGestureTypes)disablePortraitGestureTypes { - _disablePortraitGestureTypes = disablePortraitGestureTypes; - self.interactiveTransition.disablePortraitGestureTypes = disablePortraitGestureTypes; -} - -- (void)setPresentationSize:(CGSize)presentationSize { - _presentationSize = presentationSize; - self.transition.contentFullScreenRect = [self contentFullScreenRect]; - self.interactiveTransition.contentFullScreenRect = [self contentFullScreenRect]; - if (!self.fullScreenAnimation && self.isFullScreen) { - self.contentView.frame = [self contentFullScreenRect]; - } -} - -- (void)setFullScreen:(BOOL)fullScreen { - _fullScreen = fullScreen; - self.transition.fullScreen = fullScreen; -} - -- (void)setFullScreenAnimation:(BOOL)fullScreenAnimation { - _fullScreenAnimation = fullScreenAnimation; - self.interactiveTransition.fullScreenAnimation = fullScreenAnimation; -} - -- (void)setDuration:(NSTimeInterval)duration { - _duration = duration; - self.transition.duration = duration; -} - -- (CGRect)contentFullScreenRect { - CGFloat videoWidth = self.presentationSize.width; - CGFloat videoHeight = self.presentationSize.height; - if (videoHeight == 0) { - return CGRectZero; - } - CGSize fullScreenScaleSize = CGSizeZero; - CGFloat screenScale = ZFPlayerScreenWidth/ZFPlayerScreenHeight; - CGFloat videoScale = videoWidth/videoHeight; - if (screenScale > videoScale) { - CGFloat height = ZFPlayerScreenHeight; - CGFloat width = height * videoScale; - fullScreenScaleSize = CGSizeMake(width, height); - } else { - CGFloat width = ZFPlayerScreenWidth; - CGFloat height = (CGFloat)(width / videoScale); - fullScreenScaleSize = CGSizeMake(width, height); - } - - videoWidth = fullScreenScaleSize.width; - videoHeight = fullScreenScaleSize.height; - CGRect rect = CGRectMake((ZFPlayerScreenWidth - videoWidth) / 2.0, (ZFPlayerScreenHeight - videoHeight) / 2.0, videoWidth, videoHeight); - return rect; -} - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPresentTransition.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPresentTransition.h deleted file mode 100644 index 2189c7f..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPresentTransition.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// ZFPresentTransition.h -// ZFPlayer -// -// Copyright (c) 2020年 任子丰 ( http://github.com/renzifeng ) -// -// 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 -#import "ZFOrientationObserver.h" - -typedef NS_ENUM(NSUInteger, ZFPresentTransitionType) { - ZFPresentTransitionTypePresent, - ZFPresentTransitionTypeDismiss, -}; - -@interface ZFPresentTransition : NSObject - -@property (nonatomic, weak) id delagate; - -@property (nonatomic, assign) CGRect contentFullScreenRect; - -@property (nonatomic, assign, getter=isFullScreen) BOOL fullScreen; - -@property (nonatomic, assign) BOOL interation; - -@property (nonatomic, assign) NSTimeInterval duration; - -- (void)transitionWithTransitionType:(ZFPresentTransitionType)type - contentView:(UIView *)contentView - containerView:(UIView *)containerView; - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPresentTransition.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPresentTransition.m deleted file mode 100644 index 5ea95d9..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPresentTransition.m +++ /dev/null @@ -1,156 +0,0 @@ -// -// ZFPresentTransition.m -// ZFPlayer -// -// Copyright (c) 2020年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "ZFPresentTransition.h" -#import "ZFPlayerConst.h" - -@interface ZFPresentTransition () - -@property (nonatomic, strong) UIView *contentView; -@property (nonatomic, assign) ZFPresentTransitionType type; -@property (nonatomic, strong) UIView *containerView; -@property (nonatomic, assign, getter=isTransiting) BOOL transiting; - -@end - -@implementation ZFPresentTransition - -- (void)transitionWithTransitionType:(ZFPresentTransitionType)type - contentView:(UIView *)contentView - containerView:(UIView *)containerView { - - self.type = type; - self.contentView = contentView; - self.containerView = containerView; -} - -- (NSTimeInterval)transitionDuration:(id)transitionContext { - return self.duration == 0 ? 0.25f : self.duration; -} - -- (void)animateTransition:(id)transitionContext { - switch (self.type) { - case ZFPresentTransitionTypePresent: { - [self presentAnimation:transitionContext]; - } - break; - case ZFPresentTransitionTypeDismiss: { - [self dismissAnimation:transitionContext]; - } - break; - } -} - -- (void)presentAnimation:(id)transitionContext { - UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; - UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; - if ([fromVC isKindOfClass:[UINavigationController class]]) { - UINavigationController *nav = (UINavigationController *)fromVC; - fromVC = nav.viewControllers.lastObject; - } else if ([fromVC isKindOfClass:[UITabBarController class]]) { - UITabBarController *tabBar = (UITabBarController *)fromVC; - if ([tabBar.selectedViewController isKindOfClass:[UINavigationController class]]) { - UINavigationController *nav = (UINavigationController *)tabBar.selectedViewController; - fromVC = nav.viewControllers.lastObject; - } else { - fromVC = tabBar.selectedViewController; - } - } - UIView *containerView = [transitionContext containerView]; - [containerView addSubview:toVC.view]; - [containerView addSubview:self.contentView]; - CGRect originRect = [self.containerView convertRect:self.contentView.frame toView:toVC.view]; - self.contentView.frame = originRect; - - UIColor *tempColor = toVC.view.backgroundColor; - toVC.view.backgroundColor = [tempColor colorWithAlphaComponent:0]; - toVC.view.alpha = 1; - [self.delagate zf_orientationWillChange:YES]; - - CGRect toRect = self.contentFullScreenRect; - self.transiting = YES; - [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{ - self.contentView.frame = toRect; - [self.contentView layoutIfNeeded]; - toVC.view.backgroundColor = [tempColor colorWithAlphaComponent:1.f]; - } completion:^(BOOL finished) { - self.transiting = NO; - [toVC.view addSubview:self.contentView]; - [transitionContext completeTransition:YES]; - [self.delagate zf_orientationDidChanged:YES]; - if (!CGRectEqualToRect(toRect, self.contentFullScreenRect)) { - self.contentView.frame = self.contentFullScreenRect; - [self.contentView layoutIfNeeded]; - } - }]; -} - -- (void)dismissAnimation:(id)transitionContext { - UIView *containerView = [transitionContext containerView]; - UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; - if ([toVC isKindOfClass:[UINavigationController class]]) { - UINavigationController *nav = (UINavigationController *)toVC; - toVC = nav.viewControllers.lastObject; - } else if ([toVC isKindOfClass:[UITabBarController class]]) { - UITabBarController *tabBar = (UITabBarController *)toVC; - if ([tabBar.selectedViewController isKindOfClass:[UINavigationController class]]) { - UINavigationController *nav = (UINavigationController *)tabBar.selectedViewController; - toVC = nav.viewControllers.lastObject; - } else { - toVC = tabBar.selectedViewController; - } - } - - UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; - fromVC.view.frame = containerView.bounds; - [containerView addSubview:fromVC.view]; - [containerView addSubview:self.contentView]; - - CGRect originRect = [fromVC.view convertRect:self.contentView.frame toView:toVC.view]; - self.contentView.frame = originRect; - CGRect toRect = [self.containerView convertRect:self.containerView.bounds toView:toVC.view]; - [fromVC.view convertRect:self.contentView.bounds toView:self.containerView.window]; - [self.delagate zf_orientationWillChange:NO]; - self.transiting = YES; - [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{ - fromVC.view.alpha = 0; - self.contentView.frame = toRect; - [self.contentView layoutIfNeeded]; - } completion:^(BOOL finished) { - [self.containerView addSubview:self.contentView]; - self.contentView.frame = self.containerView.bounds; - [transitionContext completeTransition:YES]; - [self.delagate zf_orientationDidChanged:NO]; - self.transiting = NO; - }]; -} - -- (void)setContentFullScreenRect:(CGRect)contentFullScreenRect { - _contentFullScreenRect = contentFullScreenRect; - if (!self.transiting && self.isFullScreen && !self.interation) { - self.contentView.frame = contentFullScreenRect; - } -} - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFReachabilityManager.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFReachabilityManager.h deleted file mode 100644 index 7fcbedf..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFReachabilityManager.h +++ /dev/null @@ -1,167 +0,0 @@ -// -// ZFReachabilityManager.h -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 -#if !TARGET_OS_WATCH -#import - -typedef NS_ENUM(NSInteger, ZFReachabilityStatus) { - ZFReachabilityStatusUnknown = -1, - ZFReachabilityStatusNotReachable = 0, - ZFReachabilityStatusReachableViaWiFi = 1, - ZFReachabilityStatusReachableVia2G = 2, - ZFReachabilityStatusReachableVia3G = 3, - ZFReachabilityStatusReachableVia4G = 4, -}; - -NS_ASSUME_NONNULL_BEGIN - -/** - `ZFReachabilityManager` monitors the reachability of domains, and addresses for both WWAN and WiFi network interfaces. - - Reachability can be used to determine background information about why a network operation failed, or to trigger a network operation retrying when a connection is established. It should not be used to prevent a user from initiating a network request, as it's possible that an initial request may be required to establish reachability. - - See Apple's Reachability Sample Code ( https://developer.apple.com/library/ios/samplecode/reachability/ ) - - @warning Instances of `AFNetworkReachabilityManager` must be started with `-startMonitoring` before reachability status can be determined. - */ -@interface ZFReachabilityManager : NSObject - -/** - The current network reachability status. - */ -@property (readonly, nonatomic, assign) ZFReachabilityStatus networkReachabilityStatus; - -/** - Whether or not the network is currently reachable. - */ -@property (readonly, nonatomic, assign, getter = isReachable) BOOL reachable; - -/** - Whether or not the network is currently reachable via WWAN. - */ -@property (readonly, nonatomic, assign, getter = isReachableViaWWAN) BOOL reachableViaWWAN; - -/** - Whether or not the network is currently reachable via WiFi. - */ -@property (readonly, nonatomic, assign, getter = isReachableViaWiFi) BOOL reachableViaWiFi; - -///--------------------- -/// @name Initialization -///--------------------- - -/** - Returns the shared network reachability manager. - */ -+ (instancetype)sharedManager; - -/** - Creates and returns a network reachability manager with the default socket address. - - @return An initialized network reachability manager, actively monitoring the default socket address. - */ -+ (instancetype)manager; - -/** - Creates and returns a network reachability manager for the specified domain. - - @param domain The domain used to evaluate network reachability. - - @return An initialized network reachability manager, actively monitoring the specified domain. - */ -+ (instancetype)managerForDomain:(NSString *)domain; - -/** - Creates and returns a network reachability manager for the socket address. - - @param address The socket address (`sockaddr_in6`) used to evaluate network reachability. - - @return An initialized network reachability manager, actively monitoring the specified socket address. - */ -+ (instancetype)managerForAddress:(const void *)address; - -/** - Initializes an instance of a network reachability manager from the specified reachability object. - - @param reachability The reachability object to monitor. - - @return An initialized network reachability manager, actively monitoring the specified reachability. - */ -- (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability NS_DESIGNATED_INITIALIZER; - -///-------------------------------------------------- -/// @name Starting & Stopping Reachability Monitoring -///-------------------------------------------------- - -/** - Starts monitoring for changes in network reachability status. - */ -- (void)startMonitoring; - -/** - Stops monitoring for changes in network reachability status. - */ -- (void)stopMonitoring; - -///------------------------------------------------- -/// @name Getting Localized Reachability Description -///------------------------------------------------- - -/** - Returns a localized string representation of the current network reachability status. - */ -- (NSString *)localizedNetworkReachabilityStatusString; - -///--------------------------------------------------- -/// @name Setting Network Reachability Change Callback -///--------------------------------------------------- - -/** - Sets a callback to be executed when the network availability of the `baseURL` host changes. - - @param block A block object to be executed when the network availability of the `baseURL` host changes.. This block has no return value and takes a single argument which represents the various reachability states from the device to the `baseURL`. - */ -- (void)setReachabilityStatusChangeBlock:(nullable void (^)(ZFReachabilityStatus status))block; - -@end - -///-------------------- -/// @name Notifications -///-------------------- - -FOUNDATION_EXPORT NSString * const ZFReachabilityDidChangeNotification; -FOUNDATION_EXPORT NSString * const ZFReachabilityNotificationStatusItem; - -///-------------------- -/// @name Functions -///-------------------- - -/** - Returns a localized string representation of an `ZFReachabilityStatus` value. - */ -FOUNDATION_EXPORT NSString * ZFStringFromNetworkReachabilityStatus(ZFReachabilityStatus status); - -NS_ASSUME_NONNULL_END -#endif diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFReachabilityManager.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFReachabilityManager.m deleted file mode 100644 index 240aa4a..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFReachabilityManager.m +++ /dev/null @@ -1,269 +0,0 @@ -// -// ZFReachabilityManager.m -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "ZFReachabilityManager.h" -#if !TARGET_OS_WATCH -#import -#import -#import -#import -#import -#import - -NSString * const ZFReachabilityDidChangeNotification = @"com.ZFPlayer.reachability.change"; -NSString * const ZFReachabilityNotificationStatusItem = @"ZFNetworkingReachabilityNotificationStatusItem"; - -typedef void (^ZFReachabilityStatusBlock)(ZFReachabilityStatus status); - -NSString * ZFStringFromNetworkReachabilityStatus(ZFReachabilityStatus status) { - switch (status) { - case ZFReachabilityStatusNotReachable: - return NSLocalizedStringFromTable(@"Not Reachable", @"ZFPlayer", nil); - case ZFReachabilityStatusReachableViaWiFi: - return NSLocalizedStringFromTable(@"Reachable via WiFi", @"ZFPlayer", nil); - case ZFReachabilityStatusReachableVia2G: - return NSLocalizedStringFromTable(@"Reachable via 2G", @"ZFPlayer", nil); - case ZFReachabilityStatusReachableVia3G: - return NSLocalizedStringFromTable(@"Reachable via 3G", @"ZFPlayer", nil); - case ZFReachabilityStatusReachableVia4G: - return NSLocalizedStringFromTable(@"Reachable via 4G", @"ZFPlayer", nil); - case ZFReachabilityStatusUnknown: - default: - return NSLocalizedStringFromTable(@"Unknown", @"ZFPlayer", nil); - } -} - -static ZFReachabilityStatus ZFReachabilityStatusForFlags(SCNetworkReachabilityFlags flags) { - BOOL isReachable = ((flags & kSCNetworkReachabilityFlagsReachable) != 0); - BOOL needsConnection = ((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0); - BOOL canConnectionAutomatically = (((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) || ((flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0)); - BOOL canConnectWithoutUserInteraction = (canConnectionAutomatically && (flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0); - BOOL isNetworkReachable = (isReachable && (!needsConnection || canConnectWithoutUserInteraction)); - - ZFReachabilityStatus status = ZFReachabilityStatusUnknown; - if (isNetworkReachable == NO) { - status = ZFReachabilityStatusNotReachable; - } -#if TARGET_OS_IPHONE - else if ((flags & kSCNetworkReachabilityFlagsIsWWAN) != 0) { - CTTelephonyNetworkInfo * info = [[CTTelephonyNetworkInfo alloc] init]; - NSString *currentRadioAccessTechnology = info.currentRadioAccessTechnology; - if (currentRadioAccessTechnology) { - if ([currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyLTE]) { - status = ZFReachabilityStatusReachableVia4G; - } else if ([currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge] || [currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyGPRS]) { - status = ZFReachabilityStatusReachableVia2G; - } else { - status = ZFReachabilityStatusReachableVia3G; - } - } - } -#endif - else { - status = ZFReachabilityStatusReachableViaWiFi; - } - return status; - -} - -/** - * Queue a status change notification for the main thread. - * - * This is done to ensure that the notifications are received in the same order - * as they are sent. If notifications are sent directly, it is possible that - * a queued notification (for an earlier status condition) is processed after - * the later update, resulting in the listener being left in the wrong state. - */ -static void ZFPostReachabilityStatusChange(SCNetworkReachabilityFlags flags, ZFReachabilityStatusBlock block) { - ZFReachabilityStatus status = ZFReachabilityStatusForFlags(flags); - dispatch_async(dispatch_get_main_queue(), ^{ - if (block) block(status); - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - NSMutableDictionary *userInfo = @{}.mutableCopy; - userInfo[ZFReachabilityNotificationStatusItem] = @(status); - - [notificationCenter postNotificationName:ZFReachabilityDidChangeNotification object:nil userInfo:userInfo]; - }); -} - -static void AFNetworkReachabilityCallback(SCNetworkReachabilityRef __unused target, SCNetworkReachabilityFlags flags, void *info) { - ZFPostReachabilityStatusChange(flags, (__bridge ZFReachabilityStatusBlock)info); -} - - -static const void * ZFReachabilityRetainCallback(const void *info) { - return Block_copy(info); -} - -static void ZFReachabilityReleaseCallback(const void *info) { - if (info) { - Block_release(info); - } -} - -@interface ZFReachabilityManager () - -@property (readonly, nonatomic, assign) SCNetworkReachabilityRef networkReachability; -@property (readwrite, nonatomic, assign) ZFReachabilityStatus networkReachabilityStatus; -@property (readwrite, nonatomic, copy) ZFReachabilityStatusBlock networkReachabilityStatusBlock; - -@end - -@implementation ZFReachabilityManager - -+ (instancetype)sharedManager { - static ZFReachabilityManager *_sharedManager = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _sharedManager = [self manager]; - }); - return _sharedManager; -} - -+ (instancetype)managerForDomain:(NSString *)domain { - SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, [domain UTF8String]); - ZFReachabilityManager *manager = [[self alloc] initWithReachability:reachability]; - CFRelease(reachability); - return manager; -} - -+ (instancetype)managerForAddress:(const void *)address { - SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *)address); - ZFReachabilityManager *manager = [[self alloc] initWithReachability:reachability]; - CFRelease(reachability); - return manager; -} - -+ (instancetype)manager { -#if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 90000) || (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) - struct sockaddr_in6 address; - bzero(&address, sizeof(address)); - address.sin6_len = sizeof(address); - address.sin6_family = AF_INET6; -#else - struct sockaddr_in address; - bzero(&address, sizeof(address)); - address.sin_len = sizeof(address); - address.sin_family = AF_INET; -#endif - return [self managerForAddress:&address]; -} - -- (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability { - self = [super init]; - if (!self) { - return nil; - } - _networkReachability = CFRetain(reachability); - self.networkReachabilityStatus = ZFReachabilityStatusUnknown; - - return self; -} - -- (instancetype)init NS_UNAVAILABLE -{ - return nil; -} - -- (void)dealloc { - [self stopMonitoring]; - if (_networkReachability != NULL) { - CFRelease(_networkReachability); - } -} - -#pragma mark - - -- (BOOL)isReachable { - return [self isReachableViaWWAN] || [self isReachableViaWiFi]; -} - -- (BOOL)isReachableViaWWAN { - return (self.networkReachabilityStatus == ZFReachabilityStatusReachableVia2G ||self.networkReachabilityStatus == ZFReachabilityStatusReachableVia3G || self.networkReachabilityStatus == ZFReachabilityStatusReachableVia4G); -} - -- (BOOL)isReachableViaWiFi { - return self.networkReachabilityStatus == ZFReachabilityStatusReachableViaWiFi; -} - -#pragma mark - - -- (void)startMonitoring { - [self stopMonitoring]; - if (!self.networkReachability) { - return; - } - - __weak __typeof(self)weakSelf = self; - ZFReachabilityStatusBlock callback = ^(ZFReachabilityStatus status) { - __strong __typeof(weakSelf)strongSelf = weakSelf; - strongSelf.networkReachabilityStatus = status; - if (strongSelf.networkReachabilityStatusBlock) { - strongSelf.networkReachabilityStatusBlock(status); - } - }; - - SCNetworkReachabilityContext context = {0, (__bridge void *)callback, ZFReachabilityRetainCallback, ZFReachabilityReleaseCallback, NULL}; - SCNetworkReachabilitySetCallback(self.networkReachability, AFNetworkReachabilityCallback, &context); - SCNetworkReachabilityScheduleWithRunLoop(self.networkReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes); - - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),^{ - SCNetworkReachabilityFlags flags; - if (SCNetworkReachabilityGetFlags(self.networkReachability, &flags)) { - ZFPostReachabilityStatusChange(flags, callback); - } - }); -} - -- (void)stopMonitoring { - if (!self.networkReachability) { - return; - } - - SCNetworkReachabilityUnscheduleFromRunLoop(self.networkReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes); -} - -#pragma mark - - -- (NSString *)localizedNetworkReachabilityStatusString { - return ZFStringFromNetworkReachabilityStatus(self.networkReachabilityStatus); -} - -#pragma mark - - -- (void)setReachabilityStatusChangeBlock:(void (^)(ZFReachabilityStatus status))block { - self.networkReachabilityStatusBlock = block; -} - -#pragma mark - NSKeyValueObserving - -+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key { - if ([key isEqualToString:@"reachable"] || [key isEqualToString:@"reachableViaWWAN"] || [key isEqualToString:@"reachableViaWiFi"]) { - return [NSSet setWithObject:@"networkReachabilityStatus"]; - } - return [super keyPathsForValuesAffectingValueForKey:key]; -} - -@end -#endif diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKAVMoviePlayerController.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKAVMoviePlayerController.h deleted file mode 100644 index 39465c9..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKAVMoviePlayerController.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * IJKAVMoviePlayerController.h - * - * Copyright (c) 2014 Bilibili - * Copyright (c) 2014 Zhang Rui - * - * This file is part of ijkPlayer. - * - * ijkPlayer is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * ijkPlayer is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with ijkPlayer; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/* - File: AVPlayerDemoPlaybackViewController.h - Abstract: UIViewController managing a playback view, thumbnail view, and associated playback UI. - Version: 1.3 - - Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple - Inc. ("Apple") in consideration of your agreement to the following - terms, and your use, installation, modification or redistribution of - this Apple software constitutes acceptance of these terms. If you do - not agree with these terms, please do not use, install, modify or - redistribute this Apple software. - - In consideration of your agreement to abide by the following terms, and - subject to these terms, Apple grants you a personal, non-exclusive - license, under Apple's copyrights in this original Apple software (the - "Apple Software"), to use, reproduce, modify and redistribute the Apple - Software, with or without modifications, in source and/or binary forms; - provided that if you redistribute the Apple Software in its entirety and - without modifications, you must retain this notice and the following - text and disclaimers in all such redistributions of the Apple Software. - Neither the name, trademarks, service marks or logos of Apple Inc. may - be used to endorse or promote products derived from the Apple Software - without specific prior written permission from Apple. Except as - expressly stated in this notice, no other rights or licenses, express or - implied, are granted by Apple herein, including but not limited to any - patent rights that may be infringed by your derivative works or by other - works in which the Apple Software may be incorporated. - - The Apple Software is provided by Apple on an "AS IS" basis. APPLE - MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION - THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS - FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND - OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. - - IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, - MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED - AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), - STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - - Copyright (C) 2014 Apple Inc. All Rights Reserved. - - */ - -#import "IJKMediaPlayback.h" - -@interface IJKAVMoviePlayerController : NSObject - -- (id)initWithContentURL:(NSURL *)aUrl; -- (id)initWithContentURLString:(NSString *)aUrl; -+ (id)getInstance:(NSString *)aUrl; - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKFFMonitor.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKFFMonitor.h deleted file mode 100644 index 0e70d39..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKFFMonitor.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2016 Bilibili - * Copyright (c) 2016 Zhang Rui - * - * This file is part of ijkPlayer. - * - * ijkPlayer is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * ijkPlayer is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with ijkPlayer; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#import - -@interface IJKFFMonitor : NSObject - -- (instancetype)init; - -@property(nonatomic) NSDictionary *mediaMeta; -@property(nonatomic) NSDictionary *videoMeta; -@property(nonatomic) NSDictionary *audioMeta; - -@property(nonatomic, readonly) int64_t duration; // milliseconds -@property(nonatomic, readonly) int64_t bitrate; // bit / sec -@property(nonatomic, readonly) float fps; // frame / sec -@property(nonatomic, readonly) int width; // width -@property(nonatomic, readonly) int height; // height -@property(nonatomic, readonly) NSString *vcodec; // video codec -@property(nonatomic, readonly) NSString *acodec; // audio codec -@property(nonatomic, readonly) int sampleRate; -@property(nonatomic, readonly) int64_t channelLayout; - -@property(nonatomic) NSString *vdecoder; - -@property(nonatomic) int tcpError; -@property(nonatomic) NSString *remoteIp; - -@property(nonatomic) int httpError; -@property(nonatomic) NSString *httpUrl; -@property(nonatomic) NSString *httpHost; -@property(nonatomic) int httpCode; -@property(nonatomic) int64_t httpOpenTick; -@property(nonatomic) int64_t httpSeekTick; -@property(nonatomic) int httpOpenCount; -@property(nonatomic) int httpSeekCount; -@property(nonatomic) int64_t lastHttpOpenDuration; -@property(nonatomic) int64_t lastHttpSeekDuration; -@property(nonatomic) int64_t filesize; - -@property(nonatomic) int64_t prepareStartTick; -@property(nonatomic) int64_t prepareDuration; -@property(nonatomic) int64_t firstVideoFrameLatency; -@property(nonatomic) int64_t lastPrerollStartTick; -@property(nonatomic) int64_t lastPrerollDuration; - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKFFMoviePlayerController.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKFFMoviePlayerController.h deleted file mode 100644 index 004c123..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKFFMoviePlayerController.h +++ /dev/null @@ -1,155 +0,0 @@ -/* - * IJKFFMoviePlayerController.h - * - * Copyright (c) 2013 Bilibili - * Copyright (c) 2013 Zhang Rui - * - * This file is part of ijkPlayer. - * - * ijkPlayer is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * ijkPlayer is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with ijkPlayer; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#import "IJKMediaPlayback.h" -#import "IJKFFMonitor.h" -#import "IJKFFOptions.h" -#import "IJKSDLGLViewProtocol.h" - -// media meta -#define k_IJKM_KEY_FORMAT @"format" -#define k_IJKM_KEY_DURATION_US @"duration_us" -#define k_IJKM_KEY_START_US @"start_us" -#define k_IJKM_KEY_BITRATE @"bitrate" - -// stream meta -#define k_IJKM_KEY_TYPE @"type" -#define k_IJKM_VAL_TYPE__VIDEO @"video" -#define k_IJKM_VAL_TYPE__AUDIO @"audio" -#define k_IJKM_VAL_TYPE__UNKNOWN @"unknown" - -#define k_IJKM_KEY_CODEC_NAME @"codec_name" -#define k_IJKM_KEY_CODEC_PROFILE @"codec_profile" -#define k_IJKM_KEY_CODEC_LONG_NAME @"codec_long_name" - -// stream: video -#define k_IJKM_KEY_WIDTH @"width" -#define k_IJKM_KEY_HEIGHT @"height" -#define k_IJKM_KEY_FPS_NUM @"fps_num" -#define k_IJKM_KEY_FPS_DEN @"fps_den" -#define k_IJKM_KEY_TBR_NUM @"tbr_num" -#define k_IJKM_KEY_TBR_DEN @"tbr_den" -#define k_IJKM_KEY_SAR_NUM @"sar_num" -#define k_IJKM_KEY_SAR_DEN @"sar_den" -// stream: audio -#define k_IJKM_KEY_SAMPLE_RATE @"sample_rate" -#define k_IJKM_KEY_CHANNEL_LAYOUT @"channel_layout" - -#define kk_IJKM_KEY_STREAMS @"streams" - -typedef enum IJKLogLevel { - k_IJK_LOG_UNKNOWN = 0, - k_IJK_LOG_DEFAULT = 1, - - k_IJK_LOG_VERBOSE = 2, - k_IJK_LOG_DEBUG = 3, - k_IJK_LOG_INFO = 4, - k_IJK_LOG_WARN = 5, - k_IJK_LOG_ERROR = 6, - k_IJK_LOG_FATAL = 7, - k_IJK_LOG_SILENT = 8, -} IJKLogLevel; - -@interface IJKFFMoviePlayerController : NSObject - -- (id)initWithContentURL:(NSURL *)aUrl - withOptions:(IJKFFOptions *)options; - -- (id)initWithContentURLString:(NSString *)aUrlString - withOptions:(IJKFFOptions *)options; - -- (id)initWithMoreContent:(NSURL *)aUrl - withOptions:(IJKFFOptions *)options - withGLView:(UIView *)glView; - -- (id)initWithMoreContentString:(NSString *)aUrlString - withOptions:(IJKFFOptions *)options - withGLView:(UIView *)glView; - -- (void)prepareToPlay; -- (void)play; -- (void)pause; -- (void)stop; -- (BOOL)isPlaying; -- (int64_t)trafficStatistic; -- (float)dropFrameRate; - -- (void)setPauseInBackground:(BOOL)pause; -- (BOOL)isVideoToolboxOpen; - -- (void)setHudValue:(NSString *)value forKey:(NSString *)key; - -+ (void)setLogReport:(BOOL)preferLogReport; -+ (void)setLogLevel:(IJKLogLevel)logLevel; -+ (BOOL)checkIfFFmpegVersionMatch:(BOOL)showAlert; -+ (BOOL)checkIfPlayerVersionMatch:(BOOL)showAlert - version:(NSString *)version; - -@property(nonatomic, readonly) CGFloat fpsInMeta; -@property(nonatomic, readonly) CGFloat fpsAtOutput; -@property(nonatomic) BOOL shouldShowHudView; - -- (void)setOptionValue:(NSString *)value - forKey:(NSString *)key - ofCategory:(IJKFFOptionCategory)category; - -- (void)setOptionIntValue:(int64_t)value - forKey:(NSString *)key - ofCategory:(IJKFFOptionCategory)category; - - - -- (void)setFormatOptionValue: (NSString *)value forKey:(NSString *)key; -- (void)setCodecOptionValue: (NSString *)value forKey:(NSString *)key; -- (void)setSwsOptionValue: (NSString *)value forKey:(NSString *)key; -- (void)setPlayerOptionValue: (NSString *)value forKey:(NSString *)key; - -- (void)setFormatOptionIntValue: (int64_t)value forKey:(NSString *)key; -- (void)setCodecOptionIntValue: (int64_t)value forKey:(NSString *)key; -- (void)setSwsOptionIntValue: (int64_t)value forKey:(NSString *)key; -- (void)setPlayerOptionIntValue: (int64_t)value forKey:(NSString *)key; - -@property (nonatomic, retain) id segmentOpenDelegate; -@property (nonatomic, retain) id tcpOpenDelegate; -@property (nonatomic, retain) id httpOpenDelegate; -@property (nonatomic, retain) id liveOpenDelegate; - -@property (nonatomic, retain) id nativeInvokeDelegate; - -- (void)didShutdown; - -#pragma mark KVO properties -@property (nonatomic, readonly) IJKFFMonitor *monitor; - -@end - -#define IJK_FF_IO_TYPE_READ (1) -void IJKFFIOStatDebugCallback(const char *url, int type, int bytes); -void IJKFFIOStatRegister(void (*cb)(const char *url, int type, int bytes)); - -void IJKFFIOStatCompleteDebugCallback(const char *url, - int64_t read_bytes, int64_t total_size, - int64_t elpased_time, int64_t total_duration); -void IJKFFIOStatCompleteRegister(void (*cb)(const char *url, - int64_t read_bytes, int64_t total_size, - int64_t elpased_time, int64_t total_duration)); diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKFFOptions.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKFFOptions.h deleted file mode 100644 index cc03847..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKFFOptions.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * IJKFFOptions.h - * - * Copyright (c) 2013-2015 Bilibili - * Copyright (c) 2013-2015 Zhang Rui - * - * This file is part of ijkPlayer. - * - * ijkPlayer is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * ijkPlayer is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with ijkPlayer; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#import - -typedef enum IJKFFOptionCategory { - kIJKFFOptionCategoryFormat = 1, - kIJKFFOptionCategoryCodec = 2, - kIJKFFOptionCategorySws = 3, - kIJKFFOptionCategoryPlayer = 4, - kIJKFFOptionCategorySwr = 5, -} IJKFFOptionCategory; - -// for codec option 'skip_loop_filter' and 'skip_frame' -typedef enum IJKAVDiscard { - /* We leave some space between them for extensions (drop some - * keyframes for intra-only or drop just some bidir frames). */ - IJK_AVDISCARD_NONE =-16, ///< discard nothing - IJK_AVDISCARD_DEFAULT = 0, ///< discard useless packets like 0 size packets in avi - IJK_AVDISCARD_NONREF = 8, ///< discard all non reference - IJK_AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames - IJK_AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes - IJK_AVDISCARD_ALL = 48, ///< discard all -} IJKAVDiscard; - -struct IjkMediaPlayer; - -@interface IJKFFOptions : NSObject - -+(IJKFFOptions *)optionsByDefault; - --(void)applyTo:(struct IjkMediaPlayer *)mediaPlayer; - -- (void)setOptionValue:(NSString *)value - forKey:(NSString *)key - ofCategory:(IJKFFOptionCategory)category; - -- (void)setOptionIntValue:(int64_t)value - forKey:(NSString *)key - ofCategory:(IJKFFOptionCategory)category; - - --(void)setFormatOptionValue: (NSString *)value forKey:(NSString *)key; --(void)setCodecOptionValue: (NSString *)value forKey:(NSString *)key; --(void)setSwsOptionValue: (NSString *)value forKey:(NSString *)key; --(void)setPlayerOptionValue: (NSString *)value forKey:(NSString *)key; - --(void)setFormatOptionIntValue: (int64_t)value forKey:(NSString *)key; --(void)setCodecOptionIntValue: (int64_t)value forKey:(NSString *)key; --(void)setSwsOptionIntValue: (int64_t)value forKey:(NSString *)key; --(void)setPlayerOptionIntValue: (int64_t)value forKey:(NSString *)key; - -@property(nonatomic) BOOL showHudView; - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKKVOController.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKKVOController.h deleted file mode 100644 index 3a6bf15..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKKVOController.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * IJKKVOController.h - * - * Copyright (c) 2014 Bilibili - * Copyright (c) 2014 Zhang Rui - * - * This file is part of ijkPlayer. - * - * ijkPlayer is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * ijkPlayer is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with ijkPlayer; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#import - -@interface IJKKVOController : NSObject - -- (id)initWithTarget:(NSObject *)target; - -- (void)safelyAddObserver:(NSObject *)observer - forKeyPath:(NSString *)keyPath - options:(NSKeyValueObservingOptions)options - context:(void *)context; -- (void)safelyRemoveObserver:(NSObject *)observer - forKeyPath:(NSString *)keyPath; - -- (void)safelyRemoveAllObservers; - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKMPMoviePlayerController.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKMPMoviePlayerController.h deleted file mode 100644 index b17f175..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKMPMoviePlayerController.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * IJKMPMoviePlayerController.h - * - * Copyright (c) 2013 Bilibili - * Copyright (c) 2013 Zhang Rui - * - * This file is part of ijkPlayer. - * - * ijkPlayer is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * ijkPlayer is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with ijkPlayer; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#import "IJKMediaPlayback.h" -#import - -@interface IJKMPMoviePlayerController : MPMoviePlayerController - -- (id)initWithContentURL:(NSURL *)aUrl; -- (id)initWithContentURLString:(NSString *)aUrl; - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKMediaFramework.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKMediaFramework.h deleted file mode 100644 index d0bc526..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKMediaFramework.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * IJKMediaFramework.h - * - * Copyright (c) 2013 Bilibili - * Copyright (c) 2013 Zhang Rui - * - * This file is part of ijkPlayer. - * - * ijkPlayer is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * ijkPlayer is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with ijkPlayer; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#import - -//! Project version number for IJKMediaFramework. -FOUNDATION_EXPORT double IJKMediaFrameworkVersionNumber; - -//! Project version string for IJKMediaFramework. -FOUNDATION_EXPORT const unsigned char IJKMediaFrameworkVersionString[]; - -// In this header, you should import all the public headers of your framework using statements like #import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import - -// backward compatible for old names -#define IJKMediaPlaybackIsPreparedToPlayDidChangeNotification IJKMPMediaPlaybackIsPreparedToPlayDidChangeNotification -#define IJKMoviePlayerLoadStateDidChangeNotification IJKMPMoviePlayerLoadStateDidChangeNotification -#define IJKMoviePlayerPlaybackDidFinishNotification IJKMPMoviePlayerPlaybackDidFinishNotification -#define IJKMoviePlayerPlaybackDidFinishReasonUserInfoKey IJKMPMoviePlayerPlaybackDidFinishReasonUserInfoKey -#define IJKMoviePlayerPlaybackStateDidChangeNotification IJKMPMoviePlayerPlaybackStateDidChangeNotification -#define IJKMoviePlayerIsAirPlayVideoActiveDidChangeNotification IJKMPMoviePlayerIsAirPlayVideoActiveDidChangeNotification -#define IJKMoviePlayerVideoDecoderOpenNotification IJKMPMoviePlayerVideoDecoderOpenNotification -#define IJKMoviePlayerFirstVideoFrameRenderedNotification IJKMPMoviePlayerFirstVideoFrameRenderedNotification -#define IJKMoviePlayerFirstAudioFrameRenderedNotification IJKMPMoviePlayerFirstAudioFrameRenderedNotification -#define IJKMoviePlayerFirstAudioFrameDecodedNotification IJKMPMoviePlayerFirstAudioFrameDecodedNotification -#define IJKMoviePlayerFirstVideoFrameDecodedNotification IJKMPMoviePlayerFirstVideoFrameDecodedNotification -#define IJKMoviePlayerOpenInputNotification IJKMPMoviePlayerOpenInputNotification -#define IJKMoviePlayerFindStreamInfoNotification IJKMPMoviePlayerFindStreamInfoNotification -#define IJKMoviePlayerComponentOpenNotification IJKMPMoviePlayerComponentOpenNotification - -#define IJKMPMoviePlayerAccurateSeekCompleteNotification IJKMPMoviePlayerAccurateSeekCompleteNotification -#define IJKMoviePlayerSeekAudioStartNotification IJKMPMoviePlayerSeekAudioStartNotification -#define IJKMoviePlayerSeekVideoStartNotification IJKMPMoviePlayerSeekVideoStartNotification - diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKMediaModule.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKMediaModule.h deleted file mode 100644 index c0e23f9..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKMediaModule.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * IJKMediaModule.h - * - * Copyright (c) 2013 Bilibili - * Copyright (c) 2013 Zhang Rui - * - * This file is part of ijkPlayer. - * - * ijkPlayer is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * ijkPlayer is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with ijkPlayer; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#import - -@interface IJKMediaModule : NSObject - -+ (IJKMediaModule *)sharedModule; - -@property(atomic, getter=isAppIdleTimerDisabled) BOOL appIdleTimerDisabled; -@property(atomic, getter=isMediaModuleIdleTimerDisabled) BOOL mediaModuleIdleTimerDisabled; - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKMediaPlayback.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKMediaPlayback.h deleted file mode 100644 index b5e50e0..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKMediaPlayback.h +++ /dev/null @@ -1,227 +0,0 @@ -/* - * IJKMediaPlayback.h - * - * Copyright (c) 2013 Bilibili - * Copyright (c) 2013 Zhang Rui - * - * This file is part of ijkPlayer. - * - * ijkPlayer is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * ijkPlayer is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with ijkPlayer; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#import -#import - -typedef NS_ENUM(NSInteger, IJKMPMovieScalingMode) { - IJKMPMovieScalingModeNone, // No scaling - IJKMPMovieScalingModeAspectFit, // Uniform scale until one dimension fits - IJKMPMovieScalingModeAspectFill, // Uniform scale until the movie fills the visible bounds. One dimension may have clipped contents - IJKMPMovieScalingModeFill // Non-uniform scale. Both render dimensions will exactly match the visible bounds -}; - -typedef NS_ENUM(NSInteger, IJKMPMoviePlaybackState) { - IJKMPMoviePlaybackStateStopped, - IJKMPMoviePlaybackStatePlaying, - IJKMPMoviePlaybackStatePaused, - IJKMPMoviePlaybackStateInterrupted, - IJKMPMoviePlaybackStateSeekingForward, - IJKMPMoviePlaybackStateSeekingBackward -}; - -typedef NS_OPTIONS(NSUInteger, IJKMPMovieLoadState) { - IJKMPMovieLoadStateUnknown = 0, - IJKMPMovieLoadStatePlayable = 1 << 0, - IJKMPMovieLoadStatePlaythroughOK = 1 << 1, // Playback will be automatically started in this state when shouldAutoplay is YES - IJKMPMovieLoadStateStalled = 1 << 2, // Playback will be automatically paused in this state, if started -}; - -typedef NS_ENUM(NSInteger, IJKMPMovieFinishReason) { - IJKMPMovieFinishReasonPlaybackEnded, - IJKMPMovieFinishReasonPlaybackError, - IJKMPMovieFinishReasonUserExited -}; - -// ----------------------------------------------------------------------------- -// Thumbnails - -typedef NS_ENUM(NSInteger, IJKMPMovieTimeOption) { - IJKMPMovieTimeOptionNearestKeyFrame, - IJKMPMovieTimeOptionExact -}; - -@protocol IJKMediaPlayback; - -#pragma mark IJKMediaPlayback - -@protocol IJKMediaPlayback - -- (void)prepareToPlay; -- (void)play; -- (void)pause; -- (void)stop; -- (BOOL)isPlaying; -- (void)shutdown; -- (void)setPauseInBackground:(BOOL)pause; - -@property(nonatomic, readonly) UIView *view; -@property(nonatomic) NSTimeInterval currentPlaybackTime; -@property(nonatomic, readonly) NSTimeInterval duration; -@property(nonatomic, readonly) NSTimeInterval playableDuration; -@property(nonatomic, readonly) NSInteger bufferingProgress; - -@property(nonatomic, readonly) BOOL isPreparedToPlay; -@property(nonatomic, readonly) IJKMPMoviePlaybackState playbackState; -@property(nonatomic, readonly) IJKMPMovieLoadState loadState; -@property(nonatomic, readonly) int isSeekBuffering; -@property(nonatomic, readonly) int isAudioSync; -@property(nonatomic, readonly) int isVideoSync; - -@property(nonatomic, readonly) int64_t numberOfBytesTransferred; - -@property(nonatomic, readonly) CGSize naturalSize; -@property(nonatomic) IJKMPMovieScalingMode scalingMode; -@property(nonatomic) BOOL shouldAutoplay; - -@property (nonatomic) BOOL allowsMediaAirPlay; -@property (nonatomic) BOOL isDanmakuMediaAirPlay; -@property (nonatomic, readonly) BOOL airPlayMediaActive; - -@property (nonatomic) float playbackRate; -@property (nonatomic) float playbackVolume; - -- (UIImage *)thumbnailImageAtCurrentTime; - -#pragma mark Notifications - -#ifdef __cplusplus -#define IJK_EXTERN extern "C" __attribute__((visibility ("default"))) -#else -#define IJK_EXTERN extern __attribute__((visibility ("default"))) -#endif - -// ----------------------------------------------------------------------------- -// MPMediaPlayback.h - -// Posted when the prepared state changes of an object conforming to the MPMediaPlayback protocol changes. -// This supersedes MPMoviePlayerContentPreloadDidFinishNotification. -IJK_EXTERN NSString *const IJKMPMediaPlaybackIsPreparedToPlayDidChangeNotification; - -// ----------------------------------------------------------------------------- -// MPMoviePlayerController.h -// Movie Player Notifications - -// Posted when the scaling mode changes. -IJK_EXTERN NSString* const IJKMPMoviePlayerScalingModeDidChangeNotification; - -// Posted when movie playback ends or a user exits playback. -IJK_EXTERN NSString* const IJKMPMoviePlayerPlaybackDidFinishNotification; -IJK_EXTERN NSString* const IJKMPMoviePlayerPlaybackDidFinishReasonUserInfoKey; // NSNumber (IJKMPMovieFinishReason) - -// Posted when the playback state changes, either programatically or by the user. -IJK_EXTERN NSString* const IJKMPMoviePlayerPlaybackStateDidChangeNotification; - -// Posted when the network load state changes. -IJK_EXTERN NSString* const IJKMPMoviePlayerLoadStateDidChangeNotification; - -// Posted when the movie player begins or ends playing video via AirPlay. -IJK_EXTERN NSString* const IJKMPMoviePlayerIsAirPlayVideoActiveDidChangeNotification; - -// ----------------------------------------------------------------------------- -// Movie Property Notifications - -// Calling -prepareToPlay on the movie player will begin determining movie properties asynchronously. -// These notifications are posted when the associated movie property becomes available. -IJK_EXTERN NSString* const IJKMPMovieNaturalSizeAvailableNotification; - -// ----------------------------------------------------------------------------- -// Extend Notifications - -IJK_EXTERN NSString *const IJKMPMoviePlayerVideoDecoderOpenNotification; -IJK_EXTERN NSString *const IJKMPMoviePlayerFirstVideoFrameRenderedNotification; -IJK_EXTERN NSString *const IJKMPMoviePlayerFirstAudioFrameRenderedNotification; -IJK_EXTERN NSString *const IJKMPMoviePlayerFirstAudioFrameDecodedNotification; -IJK_EXTERN NSString *const IJKMPMoviePlayerFirstVideoFrameDecodedNotification; -IJK_EXTERN NSString *const IJKMPMoviePlayerOpenInputNotification; -IJK_EXTERN NSString *const IJKMPMoviePlayerFindStreamInfoNotification; -IJK_EXTERN NSString *const IJKMPMoviePlayerComponentOpenNotification; - -IJK_EXTERN NSString *const IJKMPMoviePlayerDidSeekCompleteNotification; -IJK_EXTERN NSString *const IJKMPMoviePlayerDidSeekCompleteTargetKey; -IJK_EXTERN NSString *const IJKMPMoviePlayerDidSeekCompleteErrorKey; -IJK_EXTERN NSString *const IJKMPMoviePlayerDidAccurateSeekCompleteCurPos; -IJK_EXTERN NSString *const IJKMPMoviePlayerAccurateSeekCompleteNotification; -IJK_EXTERN NSString *const IJKMPMoviePlayerSeekAudioStartNotification; -IJK_EXTERN NSString *const IJKMPMoviePlayerSeekVideoStartNotification; - -@end - -#pragma mark IJKMediaUrlOpenDelegate - -// Must equal to the defination in ijkavformat/ijkavformat.h -typedef NS_ENUM(NSInteger, IJKMediaEvent) { - - // Notify Events - IJKMediaEvent_WillHttpOpen = 1, // attr: url - IJKMediaEvent_DidHttpOpen = 2, // attr: url, error, http_code - IJKMediaEvent_WillHttpSeek = 3, // attr: url, offset - IJKMediaEvent_DidHttpSeek = 4, // attr: url, offset, error, http_code - // Control Message - IJKMediaCtrl_WillTcpOpen = 0x20001, // IJKMediaUrlOpenData: no args - IJKMediaCtrl_DidTcpOpen = 0x20002, // IJKMediaUrlOpenData: error, family, ip, port, fd - IJKMediaCtrl_WillHttpOpen = 0x20003, // IJKMediaUrlOpenData: url, segmentIndex, retryCounter - IJKMediaCtrl_WillLiveOpen = 0x20005, // IJKMediaUrlOpenData: url, retryCounter - IJKMediaCtrl_WillConcatSegmentOpen = 0x20007, // IJKMediaUrlOpenData: url, segmentIndex, retryCounter -}; - -#define IJKMediaEventAttrKey_url @"url" -#define IJKMediaEventAttrKey_host @"host" -#define IJKMediaEventAttrKey_error @"error" -#define IJKMediaEventAttrKey_time_of_event @"time_of_event" -#define IJKMediaEventAttrKey_http_code @"http_code" -#define IJKMediaEventAttrKey_offset @"offset" -#define IJKMediaEventAttrKey_file_size @"file_size" - -// event of IJKMediaUrlOpenEvent_xxx -@interface IJKMediaUrlOpenData: NSObject - -- (id)initWithUrl:(NSString *)url - event:(IJKMediaEvent)event - segmentIndex:(int)segmentIndex - retryCounter:(int)retryCounter; - -@property(nonatomic, readonly) IJKMediaEvent event; -@property(nonatomic, readonly) int segmentIndex; -@property(nonatomic, readonly) int retryCounter; - -@property(nonatomic, retain) NSString *url; -@property(nonatomic, assign) int fd; -@property(nonatomic, strong) NSString *msg; -@property(nonatomic) int error; // set a negative value to indicate an error has occured. -@property(nonatomic, getter=isHandled) BOOL handled; // auto set to YES if url changed -@property(nonatomic, getter=isUrlChanged) BOOL urlChanged; // auto set to YES by url changed - -@end - -@protocol IJKMediaUrlOpenDelegate - -- (void)willOpenUrl:(IJKMediaUrlOpenData*) urlOpenData; - -@end - -@protocol IJKMediaNativeInvokeDelegate - -- (int)invoke:(IJKMediaEvent)event attributes:(NSDictionary *)attributes; - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKMediaPlayer.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKMediaPlayer.h deleted file mode 100644 index 28c8bab..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKMediaPlayer.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * IJKMediaPlayer.h - * - * Copyright (c) 2013 Bilibili - * Copyright (c) 2013 Zhang Rui - * - * This file is part of ijkPlayer. - * - * ijkPlayer is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * ijkPlayer is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with ijkPlayer; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#import "IJKMediaPlayback.h" -#import "IJKMPMoviePlayerController.h" - -#import "IJKFFOptions.h" -#import "IJKFFMoviePlayerController.h" - -#import "IJKAVMoviePlayerController.h" - -#import "IJKMediaModule.h" diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKNotificationManager.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKNotificationManager.h deleted file mode 100644 index 6190049..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKNotificationManager.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * IJKNotificationManager.h - * - * Copyright (c) 2016 Bilibili - * Copyright (c) 2016 Zhang Rui - * - * This file is part of ijkPlayer. - * - * ijkPlayer is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * ijkPlayer is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with ijkPlayer; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#import - -@interface IJKNotificationManager : NSObject - -- (nullable instancetype)init; - -- (void)addObserver:(nonnull id)observer - selector:(nonnull SEL)aSelector - name:(nullable NSString *)aName - object:(nullable id)anObject; - -- (void)removeAllObservers:(nonnull id)observer; - -@end diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKSDLGLViewProtocol.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKSDLGLViewProtocol.h deleted file mode 100644 index 0f27f26..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Headers/IJKSDLGLViewProtocol.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * IJKSDLGLViewProtocol.h - * - * Copyright (c) 2017 Bilibili - * Copyright (c) 2017 raymond - * - * This file is part of ijkPlayer. - * - * ijkPlayer is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * ijkPlayer is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with ijkPlayer; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef IJKSDLGLViewProtocol_h -#define IJKSDLGLViewProtocol_h - -#import - -typedef struct IJKOverlay IJKOverlay; -struct IJKOverlay { - int w; - int h; - UInt32 format; - int planes; - UInt16 *pitches; - UInt8 **pixels; - int sar_num; - int sar_den; - CVPixelBufferRef pixel_buffer; -}; - -@protocol IJKSDLGLViewProtocol -- (UIImage*) snapshot; -@property(nonatomic, readonly) CGFloat fps; -@property(nonatomic) CGFloat scaleFactor; -@property(nonatomic) BOOL isThirdGLView; -- (void) display_pixels: (IJKOverlay *) overlay; -@end - -#endif /* IJKSDLGLViewProtocol_h */ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/IJKMediaFramework b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/IJKMediaFramework deleted file mode 100644 index 791910b..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/IJKMediaFramework and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Info.plist b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Info.plist deleted file mode 100644 index 5fa5847..0000000 Binary files a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Info.plist and /dev/null differ diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Modules/module.modulemap b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Modules/module.modulemap deleted file mode 100644 index adc4ba1..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework/Modules/module.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module IJKMediaFramework { - umbrella header "IJKMediaFramework.h" - - export * - module * { export * } -} diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/ZFIJKPlayerManager.h b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/ZFIJKPlayerManager.h deleted file mode 100644 index b1e30d5..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/ZFIJKPlayerManager.h +++ /dev/null @@ -1,45 +0,0 @@ -// -// ZFIJKPlayerManager.h -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 -#if __has_include() -#import -#else -#import "ZFPlayerMediaPlayback.h" -#endif - -#if __has_include() -#import - -@interface ZFIJKPlayerManager : NSObject - -@property (nonatomic, strong, readonly) IJKFFMoviePlayerController *player; - -@property (nonatomic, strong, readonly) IJKFFOptions *options; - -@property (nonatomic, assign) NSTimeInterval timeRefreshInterval; - -@end - -#endif diff --git a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/ZFIJKPlayerManager.m b/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/ZFIJKPlayerManager.m deleted file mode 100644 index d46f905..0000000 --- a/Pods/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/ZFIJKPlayerManager.m +++ /dev/null @@ -1,458 +0,0 @@ -// -// ZFIJKPlayerManager.m -// ZFPlayer -// -// Copyright (c) 2016年 任子丰 ( http://github.com/renzifeng ) -// -// 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 "ZFIJKPlayerManager.h" -#if __has_include() -#import -#import -#else -#import "ZFPlayer.h" -#import "ZFPlayerConst.h" -#endif -#if __has_include() - -@interface ZFIJKPlayerManager () - -@property (nonatomic, strong) IJKFFMoviePlayerController *player; -@property (nonatomic, strong) IJKFFOptions *options; -@property (nonatomic, assign) CGFloat lastVolume; -@property (nonatomic, strong) NSTimer *timer; -@property (nonatomic, assign) BOOL isReadyToPlay; - -@end - -@implementation ZFIJKPlayerManager -@synthesize view = _view; -@synthesize currentTime = _currentTime; -@synthesize totalTime = _totalTime; -@synthesize playerPlayTimeChanged = _playerPlayTimeChanged; -@synthesize playerBufferTimeChanged = _playerBufferTimeChanged; -@synthesize playerDidToEnd = _playerDidToEnd; -@synthesize bufferTime = _bufferTime; -@synthesize playState = _playState; -@synthesize loadState = _loadState; -@synthesize assetURL = _assetURL; -@synthesize playerPrepareToPlay = _playerPrepareToPlay; -@synthesize playerReadyToPlay = _playerReadyToPlay; -@synthesize playerPlayStateChanged = _playerPlayStateChanged; -@synthesize playerLoadStateChanged = _playerLoadStateChanged; -@synthesize seekTime = _seekTime; -@synthesize muted = _muted; -@synthesize volume = _volume; -@synthesize presentationSize = _presentationSize; -@synthesize isPlaying = _isPlaying; -@synthesize rate = _rate; -@synthesize isPreparedToPlay = _isPreparedToPlay; -@synthesize shouldAutoPlay = _shouldAutoPlay; -@synthesize scalingMode = _scalingMode; -@synthesize playerPlayFailed = _playerPlayFailed; -@synthesize presentationSizeChanged = _presentationSizeChanged; - -- (void)dealloc { - [self stop]; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _scalingMode = ZFPlayerScalingModeAspectFit; - _shouldAutoPlay = YES; - } - return self; -} - -- (void)prepareToPlay { - if (!_assetURL) return; - _isPreparedToPlay = YES; - [self initializePlayer]; - if (self.shouldAutoPlay) { - [self play]; - } - self.loadState = ZFPlayerLoadStatePrepare; - if (self.playerPrepareToPlay) self.playerPrepareToPlay(self, self.assetURL); -} - -- (void)reloadPlayer { - [self prepareToPlay]; -} - -- (void)play { - if (!_isPreparedToPlay) { - [self prepareToPlay]; - } else { - [self.player play]; - if (self.timer) [self.timer setFireDate:[NSDate date]]; - self.player.playbackRate = self.rate; - _isPlaying = YES; - self.playState = ZFPlayerPlayStatePlaying; - } -} - -- (void)pause { - if (self.timer) [self.timer setFireDate:[NSDate distantFuture]]; - [self.player pause]; - _isPlaying = NO; - self.playState = ZFPlayerPlayStatePaused; -} - -- (void)stop { - [self removeMovieNotificationObservers]; - [self.player shutdown]; - [self.player.view removeFromSuperview]; - self.player = nil; - _assetURL = nil; - [self.timer invalidate]; - self.presentationSize = CGSizeZero; - self.timer = nil; - _isPlaying = NO; - _isPreparedToPlay = NO; - self->_currentTime = 0; - self->_totalTime = 0; - self->_bufferTime = 0; - self.isReadyToPlay = NO; - self.playState = ZFPlayerPlayStatePlayStopped; -} - -- (void)replay { - @zf_weakify(self) - [self seekToTime:0 completionHandler:^(BOOL finished) { - @zf_strongify(self) - if (finished) { - [self play]; - } - }]; -} - -- (void)seekToTime:(NSTimeInterval)time completionHandler:(void (^ __nullable)(BOOL finished))completionHandler { - if (self.player.duration > 0) { - self.player.currentPlaybackTime = time; - if (completionHandler) completionHandler(YES); - } else { - self.seekTime = time; - } -} - -- (UIImage *)thumbnailImageAtCurrentTime { - return [self.player thumbnailImageAtCurrentTime]; -} - -#pragma mark - private method - -- (void)initializePlayer { - // IJKFFMoviePlayerController 初始化后,必须手动进行释放,否则会依然存在内存中对资源进行播放。 - if (self.player) { - [self removeMovieNotificationObservers]; - [self.player shutdown]; - [self.player.view removeFromSuperview]; - self.player = nil; - } - - self.player = [[IJKFFMoviePlayerController alloc] initWithContentURL:self.assetURL withOptions:self.options]; - self.player.shouldAutoplay = self.shouldAutoPlay; - [self.player prepareToPlay]; - self.view.playerView = self.player.view; - self.scalingMode = self->_scalingMode; - [self addPlayerNotificationObservers]; -} - -- (void)addPlayerNotificationObservers { - /// 准备播放 - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(loadStateDidChange:) - name:IJKMPMoviePlayerLoadStateDidChangeNotification - object:_player]; - /// 播放完成或者用户退出 - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(moviePlayBackFinish:) - name:IJKMPMoviePlayerPlaybackDidFinishNotification - object:_player]; - /// 准备开始播放了 - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(mediaIsPreparedToPlayDidChange:) - name:IJKMPMediaPlaybackIsPreparedToPlayDidChangeNotification - object:_player]; - /// 播放状态改变了 - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(moviePlayBackStateDidChange:) - name:IJKMPMoviePlayerPlaybackStateDidChangeNotification - object:_player]; - - /// 视频的尺寸变化了 - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(sizeAvailableChange:) - name:IJKMPMovieNaturalSizeAvailableNotification - object:self.player]; -} - -- (void)removeMovieNotificationObservers { - [[NSNotificationCenter defaultCenter] removeObserver:self - name:IJKMPMoviePlayerLoadStateDidChangeNotification - object:_player]; - [[NSNotificationCenter defaultCenter] removeObserver:self - name:IJKMPMoviePlayerPlaybackDidFinishNotification - object:_player]; - [[NSNotificationCenter defaultCenter] removeObserver:self - name:IJKMPMediaPlaybackIsPreparedToPlayDidChangeNotification - object:_player]; - [[NSNotificationCenter defaultCenter] removeObserver:self - name:IJKMPMoviePlayerPlaybackStateDidChangeNotification - object:_player]; - [[NSNotificationCenter defaultCenter] removeObserver:self - name:IJKMPMovieNaturalSizeAvailableNotification - object:_player]; -} - -- (void)timerUpdate { - if (self.player.currentPlaybackTime > 0 && !self.isReadyToPlay) { - self.isReadyToPlay = YES; - self.loadState = ZFPlayerLoadStatePlaythroughOK; - } - self->_currentTime = self.player.currentPlaybackTime > 0 ? self.player.currentPlaybackTime : 0; - self->_totalTime = self.player.duration; - self->_bufferTime = self.player.playableDuration; - if (self.playerPlayTimeChanged) self.playerPlayTimeChanged(self, self.currentTime, self.totalTime); - if (self.playerBufferTimeChanged) self.playerBufferTimeChanged(self, self.bufferTime); -} - -#pragma - notification - -/// 播放完成 -- (void)moviePlayBackFinish:(NSNotification *)notification { - int reason = [[[notification userInfo] valueForKey:IJKMPMoviePlayerPlaybackDidFinishReasonUserInfoKey] intValue]; - switch (reason) { - case IJKMPMovieFinishReasonPlaybackEnded: { - ZFPlayerLog(@"playbackStateDidChange: 播放完毕: %d\n", reason); - self.playState = ZFPlayerPlayStatePlayStopped; - if (self.playerDidToEnd) self.playerDidToEnd(self); - } - break; - - case IJKMPMovieFinishReasonUserExited: { - ZFPlayerLog(@"playbackStateDidChange: 用户退出播放: %d\n", reason); - } - break; - - case IJKMPMovieFinishReasonPlaybackError: { - ZFPlayerLog(@"playbackStateDidChange: 播放出现错误: %d\n", reason); - self.playState = ZFPlayerPlayStatePlayFailed; - if (self.playerPlayFailed) self.playerPlayFailed(self, @(reason)); - } - break; - - default: - ZFPlayerLog(@"playbackPlayBackDidFinish: ???: %d\n", reason); - break; - } -} - -// 准备开始播放了 -- (void)mediaIsPreparedToPlayDidChange:(NSNotification *)notification { - ZFPlayerLog(@"加载状态变成了已经缓存完成,如果设置了自动播放, 会自动播放"); - // 视频开始播放的时候开启计时器 - if (!self.timer) { - self.timer = [NSTimer scheduledTimerWithTimeInterval:self.timeRefreshInterval > 0 ? self.timeRefreshInterval : 0.1 target:self selector:@selector(timerUpdate) userInfo:nil repeats:YES]; - [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes]; - } - - if (self.isPlaying) { - [self play]; - self.muted = self.muted; - if (self.seekTime > 0) { - [self seekToTime:self.seekTime completionHandler:nil]; - self.seekTime = 0; // 滞空, 防止下次播放出错 - [self play]; - } - } - if (self.playerReadyToPlay) self.playerReadyToPlay(self, self.assetURL); -} - - -#pragma mark - 加载状态改变 -/** - 视频加载状态改变了 - IJKMPMovieLoadStateUnknown == 0 - IJKMPMovieLoadStatePlayable == 1 - IJKMPMovieLoadStatePlaythroughOK == 2 - IJKMPMovieLoadStateStalled == 4 - */ -- (void)loadStateDidChange:(NSNotification*)notification { - IJKMPMovieLoadState loadState = self.player.loadState; - if ((loadState & IJKMPMovieLoadStatePlayable)) { - ZFPlayerLog(@"加载状态变成了缓存数据足够开始播放,但是视频并没有缓存完全"); - if (self.player.currentPlaybackTime > 0) { - self.loadState = ZFPlayerLoadStatePlayable; - } - } else if ((loadState & IJKMPMovieLoadStatePlaythroughOK)) { - // 加载完成,即将播放,停止加载的动画,并将其移除 - ZFPlayerLog(@"加载状态变成了已经缓存完成,如果设置了自动播放, 会自动播放"); - } else if ((loadState & IJKMPMovieLoadStateStalled)) { - // 可能由于网速不好等因素导致了暂停,重新添加加载的动画 - ZFPlayerLog(@"网速不好等因素导致了暂停"); - self.loadState = ZFPlayerLoadStateStalled; - } else { - ZFPlayerLog(@"加载状态变成了未知状态"); - self.loadState = ZFPlayerLoadStateUnknown; - } -} - -// 播放状态改变 -- (void)moviePlayBackStateDidChange:(NSNotification *)notification { - switch (self.player.playbackState) { - case IJKMPMoviePlaybackStateStopped: { - ZFPlayerLog(@"播放器的播放状态变了,现在是停止状态 %d: stoped", (int)_player.playbackState); - // 这里的回调也会来多次(一次播放完成, 会回调三次), 所以, 这里不设置 - self.playState = ZFPlayerPlayStatePlayStopped; - } - break; - - case IJKMPMoviePlaybackStatePlaying: { - ZFPlayerLog(@"播放器的播放状态变了,现在是播放状态 %d: playing", (int)_player.playbackState); - } - break; - - case IJKMPMoviePlaybackStatePaused: { - ZFPlayerLog(@"播放器的播放状态变了,现在是暂停状态 %d: paused", (int)_player.playbackState); - } - break; - - case IJKMPMoviePlaybackStateInterrupted: { - ZFPlayerLog(@"播放器的播放状态变了,现在是中断状态 %d: interrupted", (int)_player.playbackState); - } - break; - - case IJKMPMoviePlaybackStateSeekingForward: { - ZFPlayerLog(@"播放器的播放状态变了,现在是向前拖动状态:%d forward",(int)self.player.playbackState); - } - break; - case IJKMPMoviePlaybackStateSeekingBackward: { - ZFPlayerLog(@"放器的播放状态变了,现在是向后拖动状态 %d: backward", (int)_player.playbackState); - } - break; - - default: { - ZFPlayerLog(@"播放器的播放状态变了,现在是未知状态 %d: unknown", (int)_player.playbackState); - } - break; - } -} - -/// 视频的尺寸变化了 -- (void)sizeAvailableChange:(NSNotification *)notify { - self.presentationSize = self.player.naturalSize; - self.view.presentationSize = self.presentationSize; - if (self.presentationSizeChanged) { - self.presentationSizeChanged(self, self->_presentationSize); - } -} - -#pragma mark - getter - -- (ZFPlayerView *)view { - if (!_view) { - _view = [[ZFPlayerView alloc] init]; - } - return _view; -} - -- (float)rate { - return _rate == 0 ?1:_rate; -} - -- (IJKFFOptions *)options { - if (!_options) { - _options = [IJKFFOptions optionsByDefault]; - /// 精准seek - [_options setPlayerOptionIntValue:1 forKey:@"enable-accurate-seek"]; - /// 解决http播放不了 - [_options setOptionIntValue:1 forKey:@"dns_cache_clear" ofCategory:kIJKFFOptionCategoryFormat]; - } - return _options; -} - -#pragma mark - setter - -- (void)setPlayState:(ZFPlayerPlaybackState)playState { - _playState = playState; - if (self.playerPlayStateChanged) self.playerPlayStateChanged(self, playState); -} - -- (void)setLoadState:(ZFPlayerLoadState)loadState { - _loadState = loadState; - if (self.playerLoadStateChanged) self.playerLoadStateChanged(self, loadState); -} - -- (void)setAssetURL:(NSURL *)assetURL { - if (self.player) [self stop]; - _assetURL = assetURL; - [self prepareToPlay]; -} - -- (void)setRate:(float)rate { - _rate = rate; - if (self.player && fabsf(_player.playbackRate) > 0.00001f) { - self.player.playbackRate = rate; - } -} - -- (void)setMuted:(BOOL)muted { - _muted = muted; - if (muted) { - self.lastVolume = self.player.playbackVolume; - self.player.playbackVolume = 0; - } else { - /// Fix first called the lastVolume is 0. - if (self.lastVolume == 0) self.lastVolume = self.player.playbackVolume; - self.player.playbackVolume = self.lastVolume; - } -} - -- (void)setScalingMode:(ZFPlayerScalingMode)scalingMode { - _scalingMode = scalingMode; - self.view.scalingMode = scalingMode; - switch (scalingMode) { - case ZFPlayerScalingModeNone: - self.player.scalingMode = IJKMPMovieScalingModeNone; - break; - case ZFPlayerScalingModeAspectFit: - self.player.scalingMode = IJKMPMovieScalingModeAspectFit; - break; - case ZFPlayerScalingModeAspectFill: - self.player.scalingMode = IJKMPMovieScalingModeAspectFill; - break; - case ZFPlayerScalingModeFill: - self.player.scalingMode = IJKMPMovieScalingModeFill; - break; - default: - break; - } -} - -- (void)setVolume:(float)volume { - _volume = MIN(MAX(0, volume), 1); - self.player.playbackVolume = volume; -} - -@end - -#endif diff --git a/Pods/DDZFPlayerKit_Private/LICENSE b/Pods/DDZFPlayerKit_Private/LICENSE deleted file mode 100644 index b75c465..0000000 --- a/Pods/DDZFPlayerKit_Private/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2023 DDIsFriend - -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. diff --git a/Pods/DDZFPlayerKit_Private/README.md b/Pods/DDZFPlayerKit_Private/README.md deleted file mode 100644 index bd05467..0000000 --- a/Pods/DDZFPlayerKit_Private/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# DDZFPlayerKit_Private - -[![CI Status](https://img.shields.io/travis/DDIsFriend/DDZFPlayerKit_Private.svg?style=flat)](https://travis-ci.org/DDIsFriend/DDZFPlayerKit_Private) -[![Version](https://img.shields.io/cocoapods/v/DDZFPlayerKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDZFPlayerKit_Private) -[![License](https://img.shields.io/cocoapods/l/DDZFPlayerKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDZFPlayerKit_Private) -[![Platform](https://img.shields.io/cocoapods/p/DDZFPlayerKit_Private.svg?style=flat)](https://cocoapods.org/pods/DDZFPlayerKit_Private) - -## Example - -To run the example project, clone the repo, and run `pod install` from the Example directory first. - -## Requirements - -## Installation - -DDZFPlayerKit_Private is available through [CocoaPods](https://cocoapods.org). To install -it, simply add the following line to your Podfile: - -```ruby -pod 'DDZFPlayerKit_Private' -``` - -## Author - -DDIsFriend, DDIsFriend@163.com - -## License - -DDZFPlayerKit_Private is available under the MIT license. See the LICENSE file for more info. diff --git a/Pods/DynamicBlurView/LICENSE b/Pods/DynamicBlurView/LICENSE deleted file mode 100644 index 5cba1b1..0000000 --- a/Pods/DynamicBlurView/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Kyohei Ito - -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. - diff --git a/Pods/DynamicBlurView/README.md b/Pods/DynamicBlurView/README.md deleted file mode 100644 index ba0f496..0000000 --- a/Pods/DynamicBlurView/README.md +++ /dev/null @@ -1,162 +0,0 @@ -# DynamicBlurView - -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) -[![Version](https://img.shields.io/cocoapods/v/DynamicBlurView.svg?style=flat)](http://cocoadocs.org/docsets/DynamicBlurView) -[![License](https://img.shields.io/cocoapods/l/DynamicBlurView.svg?style=flat)](http://cocoadocs.org/docsets/DynamicBlurView) -[![Platform](https://img.shields.io/cocoapods/p/DynamicBlurView.svg?style=flat)](http://cocoadocs.org/docsets/DynamicBlurView) - -DynamicBlurView is a dynamic and high performance UIView subclass for Blur. - -#### [Appetize's Demo](https://appetize.io/app/9pvxr367tm0jj2bcy8zavxnqkg?device=iphone6&scale=75&orientation=portrait) - -![home](https://user-images.githubusercontent.com/5707132/33749021-0342ea8c-dc0f-11e7-9260-af2d2e9c8d0c.gif)![home](https://user-images.githubusercontent.com/5707132/33749025-07595de0-dc0f-11e7-8814-fe757f437b69.png) - - -- Since using the CADisplayLink, it is a high performance. -- Can generate a plurality of BlurView. - -## Requirements - -- Swift 4.2 -- iOS 8.0 or later -- tvOS 9.0 or later - -## How to Install DynamicBlurView - -#### CocoaPods - -Add the following to your `Podfile`: - -```Ruby -pod "DynamicBlurView" -``` - -#### Carthage - -Add the following to your `Cartfile`: - -```Ruby -github "KyoheiG3/DynamicBlurView" -``` - -## Usage - -### Example - -Blur the whole - -```swift -let blurView = DynamicBlurView(frame: view.bounds) -blurView.blurRadius = 10 -view.addSubview(blurView) -``` - -Animation - -```swift -UIView.animateWithDuration(0.5) { - blurView.blurRadius = 30 -} -``` - -Ratio - -```swift -blurView.blurRatio = 0.5 -``` - -### Variable - -```swift -var drawsAsynchronously: Bool -``` - -- When true, it captures displays image and blur it asynchronously. Try to set true if needs more performance. -- Asynchronous drawing is possibly crash when needs to process on main thread that drawing with animation for example. -- Default is false. - -```Swift -var blurRadius: CGFloat -``` - -- Strength of the blur. - -```Swift -var trackingMode: TrackingMode -``` - -- Mode for update frequency. -- `Common` is constantly updated. -- `Tracking` is only during scrolling update. -- `None` is not update. - -```swift -var blendColor: UIColor? -``` - -- Blend in the blurred image. - -```swift -var iterations: Int -``` - -- Number of times for blur. -- Default is 3. - -```swift -var isDeepRendering: Bool -``` - -- If the view want to render beyond the layer, should be true. -- Default is false. - -```swift -var blurRatio: CGFloat -``` - -- When none of tracking mode, it can change the radius of blur with the ratio. Should set from 0 to 1. -- Default is 1. - -```swift -var quality: CaptureQuality -``` - -- Quality of captured image. -- Default is medium. - -### Function - -```swift -func refresh() -``` - -- Remove cache of blur image then get it again. - -```swift -func remove() -``` - -- Remove cache of blur image. - -```swift -func animate() -``` - -- Should use when needs to change layout with animation when is set none of tracking mode. - -## Acknowledgements - -- Inspired by [FXBlurView](https://github.com/nicklockwood/FXBlurView) in [nicklockwood](https://github.com/nicklockwood). - -## Author - -#### Kyohei Ito - -- [GitHub](https://github.com/kyoheig3) -- [Twitter](https://twitter.com/kyoheig3) - -Follow me 🎉 - -## LICENSE - -Under the MIT license. See LICENSE file for details. diff --git a/Pods/DynamicBlurView/Sources/DynamicBlurView/BlurLayer.swift b/Pods/DynamicBlurView/Sources/DynamicBlurView/BlurLayer.swift deleted file mode 100644 index 7f19f88..0000000 --- a/Pods/DynamicBlurView/Sources/DynamicBlurView/BlurLayer.swift +++ /dev/null @@ -1,131 +0,0 @@ -// -// BlurLayer.swift -// DynamicBlurView -// -// Created by Kyohei Ito on 2017/08/14. -// Copyright © 2017年 kyohei_ito. All rights reserved. -// - -import UIKit - -private extension CGRect { - func rectangle(_ s: CGSize) -> CGRect { - let x = origin.x / s.width - let y = origin.y / s.height - let width = size.width / s.width - let height = size.height / s.height - return CGRect(x: x, y: y, width: width, height: height) - } -} - -class BlurLayer: CALayer { - private static let blurRadiusKey = "blurRadius" - private static let blurLayoutKey = "blurLayout" - @NSManaged var blurRadius: CGFloat - @NSManaged private var blurLayout: CGFloat - - private var fromBlurRadius: CGFloat? - var presentationRadius: CGFloat { - if let radius = fromBlurRadius { - if let layer = presentation() { - return layer.blurRadius - } else { - return radius - } - } else { - return blurRadius - } - } - - override class func needsDisplay(forKey key: String) -> Bool { - if key == blurRadiusKey || key == blurLayoutKey { - return true - } - return super.needsDisplay(forKey: key) - } - - open override func action(forKey event: String) -> CAAction? { - if event == BlurLayer.blurRadiusKey { - fromBlurRadius = nil - - if let action = super.action(forKey: "opacity") as? CABasicAnimation { - fromBlurRadius = (presentation() ?? self).blurRadius - - action.keyPath = event - action.fromValue = fromBlurRadius - return action - } - } - - if event == BlurLayer.blurLayoutKey, let action = super.action(forKey: "opacity") as? CABasicAnimation { - action.keyPath = event - action.fromValue = 0 - action.toValue = 1 - return action - } - - return super.action(forKey: event) - } -} - -extension BlurLayer { - func draw(_ image: UIImage, fixes isFixes: Bool, baseLayer: CALayer?) { - contents = image.cgImage - contentsScale = image.scale - - if isFixes, let blurLayer = presentation() { - contentsRect = blurLayer.convert(blurLayer.bounds, to: baseLayer).rectangle(image.size) - } - } - - func refresh() { - fromBlurRadius = nil - } - - func animate() { - UIView.performWithoutAnimation { - blurLayout = 0 - } - blurLayout = 1 - } - - func render(in context: CGContext, for layer: CALayer) { - let layers = hideOverlappingLayers(layer.sublayers) - layer.render(in: context) - layers.forEach { - $0.isHidden = false - } - } - - private func hideOverlappingLayers(_ layers: [CALayer]?) -> [CALayer] { - var hiddenLayers: [CALayer] = [] - guard let layers = layers else { - return hiddenLayers - } - - for layer in layers.reversed() { - if isHang(to: layer) { - return hiddenLayers + hideOverlappingLayers(layer.sublayers) - } - if layer.isHidden == false { - layer.isHidden = true - hiddenLayers.append(layer) - } - if layer == self { - return hiddenLayers - } - } - return hiddenLayers - } - - private func isHang(to target: CALayer) -> Bool { - var layer = superlayer - while layer != nil { - if layer == target { - return true - } - layer = layer?.superlayer - } - return false - } -} diff --git a/Pods/DynamicBlurView/Sources/DynamicBlurView/CGContext+CGImage.swift b/Pods/DynamicBlurView/Sources/DynamicBlurView/CGContext+CGImage.swift deleted file mode 100644 index 84808b2..0000000 --- a/Pods/DynamicBlurView/Sources/DynamicBlurView/CGContext+CGImage.swift +++ /dev/null @@ -1,33 +0,0 @@ -// -// CGContext+CGImage.swift -// DynamicBlurView -// -// Created by Kyohei Ito on 2017/08/17. -// Copyright © 2017年 kyohei_ito. All rights reserved. -// - -import UIKit - -extension CGContext { - static func imageContext(with quality: CaptureQuality, rect: CGRect, opaque: Bool) -> CGContext? { - UIGraphicsBeginImageContextWithOptions(rect.size, opaque, quality.imageScale) - guard let context = UIGraphicsGetCurrentContext() else { - return nil - } - - context.translateBy(x: -rect.origin.x, y: -rect.origin.y) - context.interpolationQuality = quality.interpolationQuality - - return context - } - - func makeImage(with blendColor: UIColor?, blendMode: CGBlendMode, size: CGSize) -> CGImage? { - if let color = blendColor { - setFillColor(color.cgColor) - setBlendMode(blendMode) - fill(CGRect(origin: .zero, size: size)) - } - - return makeImage() - } -} diff --git a/Pods/DynamicBlurView/Sources/DynamicBlurView/CGImage+Accelerate.swift b/Pods/DynamicBlurView/Sources/DynamicBlurView/CGImage+Accelerate.swift deleted file mode 100644 index 7931e31..0000000 --- a/Pods/DynamicBlurView/Sources/DynamicBlurView/CGImage+Accelerate.swift +++ /dev/null @@ -1,66 +0,0 @@ -// -// CGImage+Accelerate.swift -// DynamicBlurView -// -// Created by Kyohei Ito on 2017/08/17. -// Copyright © 2017年 kyohei_ito. All rights reserved. -// - -import Accelerate -import UIKit - -extension CGImage { - var area: Int { - return width * height - } - - private var size: CGSize { - return CGSize(width: width, height: height) - } - - private var bytes: Int { - return bytesPerRow * height - } - - private func imageBuffer(from data: UnsafeMutableRawPointer!) -> vImage_Buffer { - return vImage_Buffer(data: data, height: vImagePixelCount(height), width: vImagePixelCount(width), rowBytes: bytesPerRow) - } - - func blurred(with boxSize: UInt32, iterations: Int, blendColor: UIColor?, blendMode: CGBlendMode) -> CGImage? { - guard let providerData = dataProvider?.data else { - return nil - } - - let inData = malloc(bytes) - var inBuffer = imageBuffer(from: inData) - - let outData = malloc(bytes) - var outBuffer = imageBuffer(from: outData) - - let tempSize = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer, nil, 0, 0, boxSize, boxSize, nil, vImage_Flags(kvImageEdgeExtend + kvImageGetTempBufferSize)) - let tempData = malloc(tempSize) - - defer { - free(inData) - free(outData) - free(tempData) - } - - let source = CFDataGetBytePtr(providerData) - memcpy(inBuffer.data, source, bytes) - - for _ in 0.. - -//! Project version number for DynamicBlurView. -FOUNDATION_EXPORT double DynamicBlurViewVersionNumber; - -//! Project version string for DynamicBlurView. -FOUNDATION_EXPORT const unsigned char DynamicBlurViewVersionString[]; - -// In this header, you should import all the public headers of your framework using statements like #import - - diff --git a/Pods/DynamicBlurView/Sources/DynamicBlurView/DynamicBlurView.swift b/Pods/DynamicBlurView/Sources/DynamicBlurView/DynamicBlurView.swift deleted file mode 100644 index 5b9fbb8..0000000 --- a/Pods/DynamicBlurView/Sources/DynamicBlurView/DynamicBlurView.swift +++ /dev/null @@ -1,195 +0,0 @@ -// -// DynamicBlurView.swift -// DynamicBlurView -// -// Created by Kyohei Ito on 2015/04/08. -// Copyright (c) 2015年 kyohei_ito. All rights reserved. -// - -import UIKit - -open class DynamicBlurView: UIView { - open override class var layerClass : AnyClass { - return BlurLayer.self - } - - private var staticImage: UIImage? - private var displayLink: CADisplayLink? - private var blurLayer: BlurLayer { - return layer as! BlurLayer - } - private let mainQueue = DispatchQueue.main - private let globalQueue: DispatchQueue = { - if #available (iOS 8.0, *) { - return .global(qos: .userInteractive) - } else { - return .global(priority: .high) - } - }() - private var renderingTarget: UIView? { - if isDeepRendering { - return window - } else { - return superview - } - } - - /// When true, it captures displays image and blur it asynchronously. Try to set true if needs more performance. - /// Asynchronous drawing is possibly crash when needs to process on main thread that drawing with animation for example. - open var drawsAsynchronously: Bool = false - /// Radius of blur. - open var blurRadius: CGFloat { - set { blurLayer.blurRadius = newValue } - get { return blurLayer.blurRadius } - } - /// Default is none. - open var trackingMode: TrackingMode = .none { - didSet { - if trackingMode != oldValue { - linkForDisplay() - } - } - } - /// Blend color. - open var blendColor: UIColor? - /// Blend mode. - open var blendMode: CGBlendMode = .plusLighter - /// Default is 3. - open var iterations: Int = 3 - /// If the view want to render beyond the layer, should be true. - open var isDeepRendering: Bool = false - /// When none of tracking mode, it can change the radius of blur with the ratio. Should set from 0 to 1. - open var blurRatio: CGFloat = 1 { - didSet { - if let image = staticImage, oldValue != blurRatio { - draw(image, blurRadius: blurRadius, fixes: false, baseLayer: renderingTarget?.layer) - } - } - } - /// Quality of captured image. - open var quality: CaptureQuality = .medium - - public override init(frame: CGRect) { - super.init(frame: frame) - isUserInteractionEnabled = false - } - - public required init?(coder aDecoder: NSCoder) { - super.init(coder: aDecoder) - isUserInteractionEnabled = false - } - - open override func didMoveToWindow() { - super.didMoveToWindow() - - if let view = renderingTarget, window != nil && trackingMode == .none { - staticImage = snapshotImage(for: view.layer, conversion: !isDeepRendering) - } - } - - open override func didMoveToSuperview() { - super.didMoveToSuperview() - - if superview == nil { - displayLink?.invalidate() - displayLink = nil - } else { - linkForDisplay() - } - } - - private func async(on queue: DispatchQueue, actions: @escaping () -> Void) { - if drawsAsynchronously { - queue.async(execute: actions) - } else { - actions() - } - } - - private func sync(on queue: DispatchQueue, actions: () -> Void) { - if drawsAsynchronously { - queue.sync(execute: actions) - } else { - actions() - } - } - - private func draw(_ image: UIImage, blurRadius radius: CGFloat, fixes isFixes: Bool, baseLayer: CALayer?) { - async(on: globalQueue) { [weak self] in - if let me = self, let blurredImage = image.blurred(radius: radius, iterations: me.iterations, ratio: me.blurRatio, blendColor: me.blendColor, blendMode: me.blendMode) { - me.sync(on: me.mainQueue) { - me.blurLayer.draw(blurredImage, fixes: isFixes, baseLayer: baseLayer) - } - } - } - } - - private func blurLayerRect(to layer: CALayer, conversion: Bool) -> CGRect { - if conversion { - let presentationLayer = blurLayer.presentation() ?? blurLayer - return presentationLayer.convert(presentationLayer.bounds, to: layer) - } else { - return layer.bounds - } - } - - private func snapshotImage(for layer: CALayer, conversion: Bool) -> UIImage? { - let rect = blurLayerRect(to: layer, conversion: conversion) - guard let context = CGContext.imageContext(with: quality, rect: rect, opaque: isOpaque) else { - return nil - } - - blurLayer.render(in: context, for: layer) - - defer { - UIGraphicsEndImageContext() - } - - return UIGraphicsGetImageFromCurrentImageContext() - } -} - -extension DynamicBlurView { - open override func display(_ layer: CALayer) { - let blurRadius = blurLayer.presentationRadius - let isFixes = isDeepRendering && staticImage != nil - if let view = renderingTarget, let image = staticImage ?? snapshotImage(for: view.layer, conversion: !isFixes) { - draw(image, blurRadius: blurRadius, fixes: isFixes, baseLayer: view.layer) - } - } -} - -extension DynamicBlurView { - private func linkForDisplay() { - displayLink?.invalidate() - displayLink = UIScreen.main.displayLink(withTarget: self, selector: #selector(DynamicBlurView.displayDidRefresh(_:))) - displayLink?.add(to: .main, forMode: RunLoop.Mode(rawValue: trackingMode.description)) - } - - @objc private func displayDidRefresh(_ displayLink: CADisplayLink) { - display(layer) - } -} - -extension DynamicBlurView { - /// Remove cache of blur image then get it again. - open func refresh() { - blurLayer.refresh() - staticImage = nil - blurRatio = 1 - display(layer) - } - - /// Remove cache of blur image. - open func remove() { - blurLayer.refresh() - staticImage = nil - blurRatio = 1 - layer.contents = nil - } - - /// Should use when needs to change layout with animation when is set none of tracking mode. - public func animate() { - blurLayer.animate() - } -} diff --git a/Pods/DynamicBlurView/Sources/DynamicBlurView/TrackingMode.swift b/Pods/DynamicBlurView/Sources/DynamicBlurView/TrackingMode.swift deleted file mode 100644 index a61a78d..0000000 --- a/Pods/DynamicBlurView/Sources/DynamicBlurView/TrackingMode.swift +++ /dev/null @@ -1,27 +0,0 @@ -// -// TrackingMode.swift -// DynamicBlurView -// -// Created by Kyohei Ito on 2017/08/17. -// Copyright © 2017年 kyohei_ito. All rights reserved. -// - -import UIKit - -public enum TrackingMode: CustomStringConvertible { - case tracking - case common - case none - - public var description: String { - switch self { - case .tracking: - return RunLoop.Mode.tracking.rawValue - case .common: - return RunLoop.Mode.common.rawValue - case .none: - return "" - } - } -} - diff --git a/Pods/DynamicBlurView/Sources/DynamicBlurView/UIImage+Blur.swift b/Pods/DynamicBlurView/Sources/DynamicBlurView/UIImage+Blur.swift deleted file mode 100644 index 324aa91..0000000 --- a/Pods/DynamicBlurView/Sources/DynamicBlurView/UIImage+Blur.swift +++ /dev/null @@ -1,30 +0,0 @@ -// -// UIImage+Blur.swift -// DynamicBlurView -// -// Created by Kyohei Ito on 2017/08/11. -// Copyright © 2017年 kyohei_ito. All rights reserved. -// - -import UIKit - -public extension UIImage { - func blurred(radius: CGFloat, iterations: Int, ratio: CGFloat, blendColor color: UIColor?, blendMode mode: CGBlendMode) -> UIImage? { - guard let cgImage = cgImage else { - return nil - } - - if cgImage.area <= 0 || radius <= 0 { - return self - } - - var boxSize = UInt32(radius * scale * ratio) - if boxSize % 2 == 0 { - boxSize += 1 - } - - return cgImage.blurred(with: boxSize, iterations: iterations, blendColor: color, blendMode: mode).map { - UIImage(cgImage: $0, scale: scale, orientation: imageOrientation) - } - } -} diff --git a/Pods/ESTabBarController-swift/LICENSE b/Pods/ESTabBarController-swift/LICENSE deleted file mode 100644 index 5e81458..0000000 --- a/Pods/ESTabBarController-swift/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 lihao - -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. diff --git a/Pods/ESTabBarController-swift/README.md b/Pods/ESTabBarController-swift/README.md deleted file mode 100644 index f3af966..0000000 --- a/Pods/ESTabBarController-swift/README.md +++ /dev/null @@ -1,100 +0,0 @@ -![ESTabBarController](logo.png) - -[![SwiftPM compatible](https://img.shields.io/badge/SwiftPM-compatible-orange.svg)](#swift-package-manager) -[![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) -[![CocoaPods](https://img.shields.io/cocoapods/v/ESTabBarController-swift.svg)](http://cocoapods.org/pods/ESTabBarController-swift) -[![Swift v5](https://img.shields.io/badge/Swift-5-orange.svg?style=flat)](https://developer.apple.com/swift/) -[![Twitter](https://img.shields.io/badge/Twitter-@lihao_iOS-blue.svg?style=flat)](https://twitter.com/lihao_iOS) -[![Twitter](https://img.shields.io/badge/Weibo-@李昊_____-orange.svg?style=flat)](http://weibo.com/5120522686/profile?rightmod=1&wvr=6&mod=personinfo&is_all=1) -[![Chat Gitter.im](https://badges.gitter.im/ESTabBarController/Lobby.svg)](https://gitter.im/ESTabBarController/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - -### [中文介绍](README_CN.md) - -**ESTabBarController** is a highly customizable TabBarController component, which is inherited from UITabBarController. - -### Why? - -In real-world development, we may encounter the situation that customizing the UITabBar. For instance: change font style, add animation, use bigger item. However it's hard to do with UITabBarItem. - -**With ESTabBarController, You can easily achieve these!** - --| Feature |Description --------------|-------------|------------- -1| Default style | You can get system-like style by initializing the TabBar with ESTabBarController directly.

UITabBarController style:

![System native style](Resources/SystemStyle.png)

ESTabBarController default style:

![ES system-like style](Resources/CustomStyle.png) -2| Default style with "More" item | If the items are more than the maximum number of displays, there will be a "More" item.

UITabBarController with "More":

![enter image description here](Resources/SystemMoreStyle.png)

ESTabBarController with "More":

![enter image description here](Resources/CustomMoreStyle.png) -3| Mix UITabBarItem and ESTabBarItem | You can set any item as you want, including UITabBarItem and ESTabBarItem.

ESTabBar and UITabBar mixed style:

![enter image description here](Resources/MixtureStyle.png)

ESTabBar and UITabBar mixed style with "More":

![enter image description here](Resources/MixtureMoreStyle.png) -4| UIKit attributes | ESTabBarController is compatible with UITabBarController, UITabBar and UITabBarItem's most API attributes. You can migrate to ESTabBarController without any modification of the origin code.

Compatible with UITabBarController's `selectedIndex`:

![enter image description here](Resources/SelectIndexCode.png) -5| Any nesting with UINavigationController | Developing with`UITabBarController`, there are two common ways to handle layers:

First :

├── UITabBarController

└──── UINavigationController

└────── UIViewController

└──────── SubviewControllers

Second :

├── UINavigationController

└──── UITabBarController

└────── UIViewController

└──────── SubviewControllers

In the first case, need to set `hidesBottomBarWhenPushed = true` when pushing subViews. The second is not.

In ESTabBarController, add Container views to UITabBar to be compatible with these two ways。 -6| Customizable style | With ESTabBarController, you can:

1. Customize selected item's color and style:

![enter image description here](Resources/CustomSelectStyleGif.gif)

2. Add selecting animation:

![enter image description here](Resources/CustomSelectAnimateGif.gif)

3. Customize item's background color:

![enter image description here](Resources/CustomBackgroundGif.gif)

4. Add highlight animation:

![enter image description here](Resources/CustomHighlightGif.gif)

5. Add animation to prompt users:

![enter image description here](Resources/CustomImpliesGif.gif)

6. And much more ...

-7| Customizable item's size

Customizable click event | You can easily customize item's size using ESTabBarController.

**When the button's frame is larger than TabBar, through the use of HitTest to achieve making outer TabBar area click valid.**

In addition, ESTabBarController can customize click event, and through a block to callback super-layer to handle.

With big item in the middle of TabBar:

![enter image description here](Resources/CustomStyle2.png)

With a special hint style:

![enter image description here](Resources/CustomStyle3.png)

Customize click event:

![enter image description here](Resources/CustomHitGif.gif) -8| Default notification style | You can get system-like notification style by initializing the TabBar with ESTabBarController directly.

UITabBarController notification style:

![enter image description here](Resources/SystemNotificationStyle.png)

ESTabBarController system-like notification style:

![enter image description here](Resources/CustomNotificationStyle.png) -9| Customizable notification style | With ESTabBarController, you can:

1. Customize notification animation:

![enter image description here](Resources/CustomNofticationGif.gif)

![enter image description here](Resources/CustomNofticationGif2.gif)

2. Customize prompt style:

![enter image description here](Resources/CustomNofticationGif3.gif)

3. And much more ...

-10| Lottie | Through customizing ContentView, you are able to add Lottie's LAAnimationView to Item(s)

![enter image description here](Resources/LottieGif.gif) - -## Requirements - -* Xcode 8 or later -* iOS 8.0 or later -* ARC -* Swift 5 or later - -## Demo - -You can download and build ESTabBarControllerExample project, and you will find more examples to use ESTabBarController, and also more examples to customize UITabBar。 - -## Usage - -### CocoaPods - -``` ruby -pod "ESTabBarController-swift" -``` - -### Carthage - -```ruby -github "eggswift/ESTabBarController" -``` - -### Manually - -``` ruby -git clone https://github.com/eggswift/ESTabBarController.git -open ESTabBarController -``` - -## TODO - -1. The Containers' layout is purely based on code,using Autolayout will be better. -2. When there is "More", if edit it will occurs problem. -3. Partial UITabBarItem attributes are not bridge to ESTabBarItem. -4. ~~The picture of 'More' item in ESTabBarItemMoreContentView is not set into framework, plan to convert it to CGBitmap.~~ - - -## Acknowledgement - -* [animated-tab-bar](https://github.com/Ramotion/animated-tab-bar) by -* Partial pictures in Example are from - - -## About - -ESTabBarController is developed and maintained by [Vincent Li](mailto:lihao_iOS@hotmail.com). If you have any questions or issues in using ESTabBarController, welcome to [issue](https://github.com/eggswift/ESTabBarController/issues).
-If you want to contribute to ESTabBarController, Please submit [Pull Request](https://github.com/eggswift/ESTabBarController/pulls), I will deal with it as soon as possible.
- -[![Twitter URL](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=https://github.com/eggswift/ESTabBarController) -[![Twitter Follow](https://img.shields.io/twitter/follow/lihao_ios.svg?style=social)](https://twitter.com/lihao_iOS) - - -## License - -The MIT License (MIT) - -Copyright (c) 2013-2016 eggswift. All rights reserved. - -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. - diff --git a/Pods/ESTabBarController-swift/Sources/ESTabBar.swift b/Pods/ESTabBarController-swift/Sources/ESTabBar.swift deleted file mode 100644 index c5363d8..0000000 --- a/Pods/ESTabBarController-swift/Sources/ESTabBar.swift +++ /dev/null @@ -1,438 +0,0 @@ -// -// ESTabBar.swift -// -// Created by Vincent Li on 2017/2/8. -// Copyright (c) 2013-2018 ESTabBarController (https://github.com/eggswift/ESTabBarController) -// -// 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 - - -/// 对原生的UITabBarItemPositioning进行扩展,通过UITabBarItemPositioning设置时,系统会自动添加insets,这使得添加背景样式的需求变得不可能实现。ESTabBarItemPositioning完全支持原有的item Position 类型,除此之外还支持完全fill模式。 -/// -/// - automatic: UITabBarItemPositioning.automatic -/// - fill: UITabBarItemPositioning.fill -/// - centered: UITabBarItemPositioning.centered -/// - fillExcludeSeparator: 完全fill模式,布局不覆盖tabBar顶部分割线 -/// - fillIncludeSeparator: 完全fill模式,布局覆盖tabBar顶部分割线 -public enum ESTabBarItemPositioning : Int { - - case automatic - - case fill - - case centered - - case fillExcludeSeparator - - case fillIncludeSeparator -} - - - -/// 对UITabBarDelegate进行扩展,以支持UITabBarControllerDelegate的相关方法桥接 -internal protocol ESTabBarDelegate: NSObjectProtocol { - - /// 当前item是否支持选中 - /// - /// - Parameters: - /// - tabBar: tabBar - /// - item: 当前item - /// - Returns: Bool - func tabBar(_ tabBar: UITabBar, shouldSelect item: UITabBarItem) -> Bool - - /// 当前item是否需要被劫持 - /// - /// - Parameters: - /// - tabBar: tabBar - /// - item: 当前item - /// - Returns: Bool - func tabBar(_ tabBar: UITabBar, shouldHijack item: UITabBarItem) -> Bool - - /// 当前item的点击被劫持 - /// - /// - Parameters: - /// - tabBar: tabBar - /// - item: 当前item - /// - Returns: Void - func tabBar(_ tabBar: UITabBar, didHijack item: UITabBarItem) -} - - - -/// ESTabBar是高度自定义的UITabBar子类,通过添加UIControl的方式实现自定义tabBarItem的效果。目前支持tabBar的大部分属性的设置,例如delegate,items,selectedImge,itemPositioning,itemWidth,itemSpacing等,以后会更加细致的优化tabBar原有属性的设置效果。 -open class ESTabBar: UITabBar { - - internal weak var customDelegate: ESTabBarDelegate? - - /// tabBar中items布局偏移量 - public var itemEdgeInsets = UIEdgeInsets.zero - /// 是否设置为自定义布局方式,默认为空。如果为空,则通过itemPositioning属性来设置。如果不为空则忽略itemPositioning,所以当tabBar的itemCustomPositioning属性不为空时,如果想改变布局规则,请设置此属性而非itemPositioning。 - public var itemCustomPositioning: ESTabBarItemPositioning? { - didSet { - if let itemCustomPositioning = itemCustomPositioning { - switch itemCustomPositioning { - case .fill: - itemPositioning = .fill - case .automatic: - itemPositioning = .automatic - case .centered: - itemPositioning = .centered - default: - break - } - } - self.reload() - } - } - /// tabBar自定义item的容器view - internal var containers = [ESTabBarItemContainer]() - /// 缓存当前tabBarController用来判断是否存在"More"Tab - internal weak var tabBarController: UITabBarController? - /// 自定义'More'按钮样式,继承自ESTabBarItemContentView - open var moreContentView: ESTabBarItemContentView? = ESTabBarItemMoreContentView.init() { - didSet { self.reload() } - } - - open override var items: [UITabBarItem]? { - didSet { - self.reload() - } - } - - open var isEditing: Bool = false { - didSet { - if oldValue != isEditing { - self.updateLayout() - } - } - } - - open override func setItems(_ items: [UITabBarItem]?, animated: Bool) { - super.setItems(items, animated: animated) - self.reload() - } - - open override func beginCustomizingItems(_ items: [UITabBarItem]) { - ESTabBarController.printError("beginCustomizingItems(_:) is unsupported in ESTabBar.") - super.beginCustomizingItems(items) - } - - open override func endCustomizing(animated: Bool) -> Bool { - ESTabBarController.printError("endCustomizing(_:) is unsupported in ESTabBar.") - return super.endCustomizing(animated: animated) - } - - open override func layoutSubviews() { - super.layoutSubviews() - self.updateLayout() - } - - open override func point(inside point: CGPoint, with event: UIEvent?) -> Bool { - var b = super.point(inside: point, with: event) - if !b { - for container in containers { - if container.point(inside: CGPoint.init(x: point.x - container.frame.origin.x, y: point.y - container.frame.origin.y), with: event) { - b = true - } - } - } - return b - } - -} - -internal extension ESTabBar /* Layout */ { - - func updateLayout() { - guard let tabBarItems = self.items else { - ESTabBarController.printError("empty items") - return - } - - let tabBarButtons = subviews.filter { subview -> Bool in - if let cls = NSClassFromString("UITabBarButton") { - return subview.isKind(of: cls) - } - return false - } .sorted { (subview1, subview2) -> Bool in - return subview1.frame.origin.x < subview2.frame.origin.x - } - - if isCustomizing { - for (idx, _) in tabBarItems.enumerated() { - tabBarButtons[idx].isHidden = false - moreContentView?.isHidden = true - } - for (_, container) in containers.enumerated(){ - container.isHidden = true - } - } else { - for (idx, item) in tabBarItems.enumerated() { - if let _ = item as? ESTabBarItem { - tabBarButtons[idx].isHidden = true - } else { - tabBarButtons[idx].isHidden = false - } - if isMoreItem(idx), let _ = moreContentView { - tabBarButtons[idx].isHidden = true - } - } - for (_, container) in containers.enumerated(){ - container.isHidden = false - } - } - - var layoutBaseSystem = true - if let itemCustomPositioning = itemCustomPositioning { - switch itemCustomPositioning { - case .fill, .automatic, .centered: - break - case .fillIncludeSeparator, .fillExcludeSeparator: - layoutBaseSystem = false - } - } - - if layoutBaseSystem { - // System itemPositioning - for (idx, container) in containers.enumerated(){ - if !tabBarButtons[idx].frame.isEmpty { - container.frame = tabBarButtons[idx].frame - } - } - } else { - // Custom itemPositioning - var x: CGFloat = itemEdgeInsets.left - var y: CGFloat = itemEdgeInsets.top - switch itemCustomPositioning! { - case .fillExcludeSeparator: - if y <= 0.0 { - y += 1.0 - } - default: - break - } - let width = bounds.size.width - itemEdgeInsets.left - itemEdgeInsets.right - let height = bounds.size.height - y - itemEdgeInsets.bottom - let eachWidth = itemWidth == 0.0 ? width / CGFloat(containers.count) : itemWidth - let eachSpacing = itemSpacing == 0.0 ? 0.0 : itemSpacing - - for container in containers { - container.frame = CGRect.init(x: x, y: y, width: eachWidth, height: height) - x += eachWidth - x += eachSpacing - } - } - } -} - -internal extension ESTabBar /* Actions */ { - - func isMoreItem(_ index: Int) -> Bool { - return ESTabBarController.isShowingMore(tabBarController) && (index == (items?.count ?? 0) - 1) - } - - func removeAll() { - for container in containers { - container.removeFromSuperview() - } - containers.removeAll() - } - - func reload() { - removeAll() - guard let tabBarItems = self.items else { - ESTabBarController.printError("empty items") - return - } - for (idx, item) in tabBarItems.enumerated() { - let container = ESTabBarItemContainer.init(self, tag: 1000 + idx) - self.addSubview(container) - self.containers.append(container) - - if let item = item as? ESTabBarItem, let contentView = item.contentView { - container.addSubview(contentView) - } - if self.isMoreItem(idx), let moreContentView = moreContentView { - container.addSubview(moreContentView) - } - } - - self.updateAccessibilityLabels() - self.setNeedsLayout() - } - - @objc func highlightAction(_ sender: AnyObject?) { - guard let container = sender as? ESTabBarItemContainer else { - return - } - let newIndex = max(0, container.tag - 1000) - guard newIndex < items?.count ?? 0, let item = self.items?[newIndex], item.isEnabled == true else { - return - } - - if (customDelegate?.tabBar(self, shouldSelect: item) ?? true) == false { - return - } - - if let item = item as? ESTabBarItem { - item.contentView?.highlight(animated: true, completion: nil) - } else if self.isMoreItem(newIndex) { - moreContentView?.highlight(animated: true, completion: nil) - } - } - - @objc func dehighlightAction(_ sender: AnyObject?) { - guard let container = sender as? ESTabBarItemContainer else { - return - } - let newIndex = max(0, container.tag - 1000) - guard newIndex < items?.count ?? 0, let item = self.items?[newIndex], item.isEnabled == true else { - return - } - - if (customDelegate?.tabBar(self, shouldSelect: item) ?? true) == false { - return - } - - if let item = item as? ESTabBarItem { - item.contentView?.dehighlight(animated: true, completion: nil) - } else if self.isMoreItem(newIndex) { - moreContentView?.dehighlight(animated: true, completion: nil) - } - } - - @objc func selectAction(_ sender: AnyObject?) { - guard let container = sender as? ESTabBarItemContainer else { - return - } - select(itemAtIndex: container.tag - 1000, animated: true) - } - - @objc func select(itemAtIndex idx: Int, animated: Bool) { - let newIndex = max(0, idx) - let currentIndex = (selectedItem != nil) ? (items?.firstIndex(of: selectedItem!) ?? -1) : -1 - guard newIndex < items?.count ?? 0, let item = self.items?[newIndex], item.isEnabled == true else { - return - } - - if (customDelegate?.tabBar(self, shouldSelect: item) ?? true) == false { - return - } - - if (customDelegate?.tabBar(self, shouldHijack: item) ?? false) == true { - customDelegate?.tabBar(self, didHijack: item) - if animated { - if let item = item as? ESTabBarItem { - item.contentView?.select(animated: animated, completion: { - item.contentView?.deselect(animated: false, completion: nil) - }) - } else if self.isMoreItem(newIndex) { - moreContentView?.select(animated: animated, completion: { - self.moreContentView?.deselect(animated: animated, completion: nil) - }) - } - } - return - } - - if currentIndex != newIndex { - if currentIndex != -1 && currentIndex < items?.count ?? 0{ - if let currentItem = items?[currentIndex] as? ESTabBarItem { - currentItem.contentView?.deselect(animated: animated, completion: nil) - } else if self.isMoreItem(currentIndex) { - moreContentView?.deselect(animated: animated, completion: nil) - } - } - if let item = item as? ESTabBarItem { - item.contentView?.select(animated: animated, completion: nil) - } else if self.isMoreItem(newIndex) { - moreContentView?.select(animated: animated, completion: nil) - } - } else if currentIndex == newIndex { - if let item = item as? ESTabBarItem { - item.contentView?.reselect(animated: animated, completion: nil) - } else if self.isMoreItem(newIndex) { - moreContentView?.reselect(animated: animated, completion: nil) - } - - if let tabBarController = tabBarController { - var navVC: UINavigationController? - if let n = tabBarController.selectedViewController as? UINavigationController { - navVC = n - } else if let n = tabBarController.selectedViewController?.navigationController { - navVC = n - } - - if let navVC = navVC { - if navVC.viewControllers.contains(tabBarController) { - if navVC.viewControllers.count > 1 && navVC.viewControllers.last != tabBarController { - navVC.popToViewController(tabBarController, animated: true); - } - } else { - if navVC.viewControllers.count > 1 { - navVC.popToRootViewController(animated: animated) - } - } - } - - } - } - - delegate?.tabBar?(self, didSelect: item) - self.updateAccessibilityLabels() - } - - func updateAccessibilityLabels() { - guard let tabBarItems = self.items, tabBarItems.count == self.containers.count else { - return - } - - for (idx, item) in tabBarItems.enumerated() { - let container = self.containers[idx] - container.accessibilityIdentifier = item.accessibilityIdentifier - container.accessibilityTraits = item.accessibilityTraits - - if item == selectedItem { - container.accessibilityTraits = container.accessibilityTraits.union(.selected) - } - - if let explicitLabel = item.accessibilityLabel { - container.accessibilityLabel = explicitLabel - container.accessibilityHint = item.accessibilityHint ?? container.accessibilityHint - } else { - var accessibilityTitle = "" - if let item = item as? ESTabBarItem { - accessibilityTitle = item.accessibilityLabel ?? item.title ?? "" - } - if self.isMoreItem(idx) { - accessibilityTitle = NSLocalizedString("More_TabBarItem", bundle: Bundle(for:ESTabBarController.self), comment: "") - } - - let formatString = NSLocalizedString(item == selectedItem ? "TabBarItem_Selected_AccessibilityLabel" : "TabBarItem_AccessibilityLabel", - bundle: Bundle(for: ESTabBarController.self), - comment: "") - container.accessibilityLabel = String(format: formatString, accessibilityTitle, idx + 1, tabBarItems.count) - } - - } - } -} diff --git a/Pods/ESTabBarController-swift/Sources/ESTabBarController.swift b/Pods/ESTabBarController-swift/Sources/ESTabBarController.swift deleted file mode 100644 index 61f0f78..0000000 --- a/Pods/ESTabBarController-swift/Sources/ESTabBarController.swift +++ /dev/null @@ -1,152 +0,0 @@ -// -// ESTabBarController.swift -// -// Created by Vincent Li on 2017/2/8. -// Copyright (c) 2013-2018 ESTabBarController (https://github.com/eggswift/ESTabBarController) -// -// 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 - -/// 是否需要自定义点击事件回调类型 -public typealias ESTabBarControllerShouldHijackHandler = ((_ tabBarController: UITabBarController, _ viewController: UIViewController, _ index: Int) -> (Bool)) -/// 自定义点击事件回调类型 -public typealias ESTabBarControllerDidHijackHandler = ((_ tabBarController: UITabBarController, _ viewController: UIViewController, _ index: Int) -> (Void)) - -open class ESTabBarController: UITabBarController, ESTabBarDelegate { - - /// 打印异常 - public static func printError(_ description: String) { - #if DEBUG - print("ERROR: ESTabBarController catch an error '\(description)' \n") - #endif - } - - /// 当前tabBarController是否存在"More"tab - public static func isShowingMore(_ tabBarController: UITabBarController?) -> Bool { - return tabBarController?.moreNavigationController.parent != nil - } - - /// Ignore next selection or not. - fileprivate var ignoreNextSelection = false - - /// Should hijack select action or not. - open var shouldHijackHandler: ESTabBarControllerShouldHijackHandler? - /// Hijack select action. - open var didHijackHandler: ESTabBarControllerDidHijackHandler? - - /// Observer tabBarController's selectedViewController. change its selection when it will-set. - open override var selectedViewController: UIViewController? { - willSet { - guard let newValue = newValue else { - // if newValue == nil ... - return - } - guard !ignoreNextSelection else { - ignoreNextSelection = false - return - } - guard let tabBar = self.tabBar as? ESTabBar, let items = tabBar.items, let index = viewControllers?.firstIndex(of: newValue) else { - return - } - let value = (ESTabBarController.isShowingMore(self) && index > items.count - 1) ? items.count - 1 : index - tabBar.select(itemAtIndex: value, animated: false) - } - } - - /// Observer tabBarController's selectedIndex. change its selection when it will-set. - open override var selectedIndex: Int { - willSet { - guard !ignoreNextSelection else { - ignoreNextSelection = false - return - } - guard let tabBar = self.tabBar as? ESTabBar, let items = tabBar.items else { - return - } - let value = (ESTabBarController.isShowingMore(self) && newValue > items.count - 1) ? items.count - 1 : newValue - tabBar.select(itemAtIndex: value, animated: false) - } - } - - /// Customize set tabBar use KVC. - open override func viewDidLoad() { - super.viewDidLoad() - let tabBar = { () -> ESTabBar in - let tabBar = ESTabBar() - tabBar.delegate = self - tabBar.customDelegate = self - tabBar.tabBarController = self - return tabBar - }() - self.setValue(tabBar, forKey: "tabBar") - } - - // MARK: - UITabBar delegate - open override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { - guard let idx = tabBar.items?.firstIndex(of: item) else { - return; - } - if idx == tabBar.items!.count - 1, ESTabBarController.isShowingMore(self) { - ignoreNextSelection = true - selectedViewController = moreNavigationController - return; - } - if let vc = viewControllers?[idx] { - ignoreNextSelection = true - selectedIndex = idx - delegate?.tabBarController?(self, didSelect: vc) - } - } - - open override func tabBar(_ tabBar: UITabBar, willBeginCustomizing items: [UITabBarItem]) { - if let tabBar = tabBar as? ESTabBar { - tabBar.updateLayout() - } - } - - open override func tabBar(_ tabBar: UITabBar, didEndCustomizing items: [UITabBarItem], changed: Bool) { - if let tabBar = tabBar as? ESTabBar { - tabBar.updateLayout() - } - } - - // MARK: - ESTabBar delegate - internal func tabBar(_ tabBar: UITabBar, shouldSelect item: UITabBarItem) -> Bool { - if let idx = tabBar.items?.firstIndex(of: item), let vc = viewControllers?[idx] { - return delegate?.tabBarController?(self, shouldSelect: vc) ?? true - } - return true - } - - internal func tabBar(_ tabBar: UITabBar, shouldHijack item: UITabBarItem) -> Bool { - if let idx = tabBar.items?.firstIndex(of: item), let vc = viewControllers?[idx] { - return shouldHijackHandler?(self, vc, idx) ?? false - } - return false - } - - internal func tabBar(_ tabBar: UITabBar, didHijack item: UITabBarItem) { - if let idx = tabBar.items?.firstIndex(of: item), let vc = viewControllers?[idx] { - didHijackHandler?(self, vc, idx) - } - } - -} diff --git a/Pods/ESTabBarController-swift/Sources/ESTabBarItem.swift b/Pods/ESTabBarController-swift/Sources/ESTabBarItem.swift deleted file mode 100644 index 9296d2f..0000000 --- a/Pods/ESTabBarController-swift/Sources/ESTabBarItem.swift +++ /dev/null @@ -1,107 +0,0 @@ -// -// ESTabBarController.swift -// -// Created by Vincent Li on 2017/2/8. -// Copyright (c) 2013-2018 ESTabBarController (https://github.com/eggswift/ESTabBarController) -// -// 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 - -/* - * ESTabBarItem继承自UITabBarItem,目的是为ESTabBarItemContentView提供UITabBarItem属性的设置。 - * 目前支持大多常用的属性,例如image, selectedImage, title, tag 等。 - * - * Unsupport properties: - * MARK: UIBarItem properties - * 1. var isEnabled: Bool - * 2. var landscapeImagePhone: UIImage? - * 3. var imageInsets: UIEdgeInsets - * 4. var landscapeImagePhoneInsets: UIEdgeInsets - * 5. func setTitleTextAttributes(_ attributes: [String : Any]?, for state: UIControlState) - * 6. func titleTextAttributes(for state: UIControlState) -> [String : Any]? - * MARK: UITabBarItem properties - * 7. var titlePositionAdjustment: UIOffset - * 8. func setBadgeTextAttributes(_ textAttributes: [String : Any]?, for state: UIControlState) - * 9. func badgeTextAttributes(for state: UIControlState) -> [String : Any]? - */ -@available(iOS 8.0, *) -open class ESTabBarItem: UITabBarItem { - - /// Customize content view - open var contentView: ESTabBarItemContentView? - - // MARK: UIBarItem properties - open override var title: String? // default is nil - { - didSet { self.contentView?.title = title } - } - - open override var image: UIImage? // default is nil - { - didSet { self.contentView?.image = image } - } - - // MARK: UITabBarItem properties - open override var selectedImage: UIImage? // default is nil - { - didSet { self.contentView?.selectedImage = selectedImage } - } - - open override var badgeValue: String? // default is nil - { - get { return contentView?.badgeValue } - set(newValue) { contentView?.badgeValue = newValue } - } - - /// Override UITabBarItem.badgeColor, make it available for iOS8.0 and later. - /// If this item displays a badge, this color will be used for the badge's background. If set to nil, the default background color will be used instead. - @available(iOS 8.0, *) - open override var badgeColor: UIColor? { - get { return contentView?.badgeColor } - set(newValue) { contentView?.badgeColor = newValue } - } - - open override var tag: Int // default is 0 - { - didSet { self.contentView?.tag = tag } - } - - /* The unselected image is autogenerated from the image argument. The selected image - is autogenerated from the selectedImage if provided and the image argument otherwise. - To prevent system coloring, provide images with UIImageRenderingModeAlwaysOriginal (see UIImage.h) - */ - public init(_ contentView: ESTabBarItemContentView = ESTabBarItemContentView(), title: String? = nil, image: UIImage? = nil, selectedImage: UIImage? = nil, tag: Int = 0) { - super.init() - self.contentView = contentView - self.setTitle(title, image: image, selectedImage: selectedImage, tag: tag) - } - public required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - open func setTitle(_ title: String? = nil, image: UIImage? = nil, selectedImage: UIImage? = nil, tag: Int = 0) { - self.title = title - self.image = image - self.selectedImage = selectedImage - self.tag = tag - } - -} diff --git a/Pods/ESTabBarController-swift/Sources/ESTabBarItemBadgeView.swift b/Pods/ESTabBarController-swift/Sources/ESTabBarItemBadgeView.swift deleted file mode 100644 index 9c921f2..0000000 --- a/Pods/ESTabBarController-swift/Sources/ESTabBarItemBadgeView.swift +++ /dev/null @@ -1,116 +0,0 @@ -// -// ESTabBarItemBadgeView.swift -// -// Created by Vincent Li on 2017/2/8. -// Copyright (c) 2013-2018 ESTabBarController (https://github.com/eggswift/ESTabBarController) -// -// 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 - -/* - * ESTabBarItemBadgeView - * 这个类定义了item中使用的badge视图样式,默认为ESTabBarItemBadgeView类对象。 - * 你可以设置ESTabBarItemContentView的badgeView属性为自定义的ESTabBarItemBadgeView子类,这样就可以轻松实现 自定义通知样式了。 - */ -open class ESTabBarItemBadgeView: UIView { - - /// 默认颜色 - public static var defaultBadgeColor = UIColor(red: 255.0/255.0, green: 59.0/255.0, blue: 48.0/255.0, alpha: 1.0) - - /// Badge color - open var badgeColor: UIColor? = defaultBadgeColor { - didSet { - imageView.backgroundColor = badgeColor - } - } - - /// Badge value, supprot nil, "", "1", "someText". Hidden when nil. Show Little dot style when "". - open var badgeValue: String? { - didSet { - badgeLabel.text = badgeValue - } - } - - /// Image view - open var imageView: UIImageView = { - let imageView = UIImageView.init(frame: CGRect.zero) - imageView.backgroundColor = .clear - return imageView - }() - - /// 显示badgeValue的Label - open var badgeLabel: UILabel = { - let badgeLabel = UILabel.init(frame: CGRect.zero) - badgeLabel.backgroundColor = .clear - badgeLabel.textColor = .white - badgeLabel.font = UIFont.systemFont(ofSize: 13.0) - badgeLabel.textAlignment = .center - return badgeLabel - }() - - /// Initializer - public override init(frame: CGRect) { - super.init(frame: frame) - self.addSubview(imageView) - self.addSubview(badgeLabel) - self.imageView.backgroundColor = badgeColor - } - public required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - /* - * 通过layoutSubviews()布局子视图,你可以通过重写此方法实现自定义布局。 - **/ - open override func layoutSubviews() { - super.layoutSubviews() - guard let badgeValue = badgeValue else { - imageView.isHidden = true - badgeLabel.isHidden = true - return - } - - imageView.isHidden = false - badgeLabel.isHidden = false - - if badgeValue == "" { - imageView.frame = CGRect.init(origin: CGPoint.init(x: (bounds.size.width - 8.0) / 2.0, y: (bounds.size.height - 8.0) / 2.0), size: CGSize.init(width: 8.0, height: 8.0)) - } else { - imageView.frame = bounds - } - imageView.layer.cornerRadius = imageView.bounds.size.height / 2.0 - badgeLabel.sizeToFit() - badgeLabel.center = imageView.center - } - - /* - * 通过此方法计算badge视图需要占用父视图的frame大小,通过重写此方法可以自定义badge视图的大小。 - * 如果你需要自定义badge视图在Content中的位置,可以设置Content的badgeOffset属性。 - */ - open override func sizeThatFits(_ size: CGSize) -> CGSize { - guard let _ = badgeValue else { - return CGSize.init(width: 18.0, height: 18.0) - } - let textSize = badgeLabel.sizeThatFits(CGSize.init(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude)) - return CGSize.init(width: max(18.0, textSize.width + 10.0), height: 18.0) - } - -} diff --git a/Pods/ESTabBarController-swift/Sources/ESTabBarItemContainer.swift b/Pods/ESTabBarController-swift/Sources/ESTabBarItemContainer.swift deleted file mode 100644 index 72563b0..0000000 --- a/Pods/ESTabBarController-swift/Sources/ESTabBarItemContainer.swift +++ /dev/null @@ -1,67 +0,0 @@ -// -// ESTabBarItemContainer.swift -// -// Created by Vincent Li on 2017/2/8. -// Copyright (c) 2013-2018 ESTabBarController (https://github.com/eggswift/ESTabBarController) -// -// 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 - -internal class ESTabBarItemContainer: UIControl { - - internal init(_ target: AnyObject?, tag: Int) { - super.init(frame: CGRect.zero) - self.tag = tag - self.addTarget(target, action: #selector(ESTabBar.selectAction(_:)), for: .touchUpInside) - self.addTarget(target, action: #selector(ESTabBar.highlightAction(_:)), for: .touchDown) - self.addTarget(target, action: #selector(ESTabBar.highlightAction(_:)), for: .touchDragEnter) - self.addTarget(target, action: #selector(ESTabBar.dehighlightAction(_:)), for: .touchDragExit) - self.backgroundColor = .clear - self.isAccessibilityElement = true - } - - internal required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - internal override func layoutSubviews() { - super.layoutSubviews() - for subview in self.subviews { - if let subview = subview as? ESTabBarItemContentView { - subview.frame = CGRect.init(x: subview.insets.left, y: subview.insets.top, width: bounds.size.width - subview.insets.left - subview.insets.right, height: bounds.size.height - subview.insets.top - subview.insets.bottom) - subview.updateLayout() - } - } - } - - internal override func point(inside point: CGPoint, with event: UIEvent?) -> Bool { - var b = super.point(inside: point, with: event) - if !b { - for subview in self.subviews { - if subview.point(inside: CGPoint.init(x: point.x - subview.frame.origin.x, y: point.y - subview.frame.origin.y), with: event) { - b = true - } - } - } - return b - } - -} diff --git a/Pods/ESTabBarController-swift/Sources/ESTabBarItemContentView.swift b/Pods/ESTabBarController-swift/Sources/ESTabBarItemContentView.swift deleted file mode 100644 index 3936dae..0000000 --- a/Pods/ESTabBarController-swift/Sources/ESTabBarItemContentView.swift +++ /dev/null @@ -1,394 +0,0 @@ -// -// ESTabBarContentView.swift -// -// Created by Vincent Li on 2017/2/8. -// Copyright (c) 2013-2018 ESTabBarController (https://github.com/eggswift/ESTabBarController) -// -// 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 - -public enum ESTabBarItemContentMode : Int { - - case alwaysOriginal // Always set the original image size - - case alwaysTemplate // Always set the image as a template image size -} - - -open class ESTabBarItemContentView: UIView { - - // MARK: - PROPERTY SETTING - - /// 设置contentView的偏移 - open var insets = UIEdgeInsets.zero - - /// 是否被选中 - open var selected = false - - /// 是否处于高亮状态 - open var highlighted = false - - /// 是否支持高亮 - open var highlightEnabled = true - - /// 文字颜色 - open var textColor = UIColor(white: 0.57254902, alpha: 1.0) { - didSet { - if !selected { titleLabel.textColor = textColor } - } - } - - /// 高亮时文字颜色 - open var highlightTextColor = UIColor(red: 0.0, green: 0.47843137, blue: 1.0, alpha: 1.0) { - didSet { - if selected { titleLabel.textColor = highlightIconColor } - } - } - - /// icon颜色 - open var iconColor = UIColor(white: 0.57254902, alpha: 1.0) { - didSet { - if !selected { imageView.tintColor = iconColor } - } - } - - /// 高亮时icon颜色 - open var highlightIconColor = UIColor(red: 0.0, green: 0.47843137, blue: 1.0, alpha: 1.0) { - didSet { - if selected { imageView.tintColor = highlightIconColor } - } - } - - /// 背景颜色 - open var backdropColor = UIColor.clear { - didSet { - if !selected { backgroundColor = backdropColor } - } - } - - /// 高亮时背景颜色 - open var highlightBackdropColor = UIColor.clear { - didSet { - if selected { backgroundColor = highlightBackdropColor } - } - } - - open var title: String? { - didSet { - self.titleLabel.text = title - self.updateLayout() - } - } - - /// Icon imageView renderingMode, default is .alwaysTemplate like UITabBarItem - open var renderingMode: UIImage.RenderingMode = .alwaysTemplate { - didSet { - self.updateDisplay() - } - } - - /// Item content mode, default is .alwaysTemplate like UITabBarItem - open var itemContentMode: ESTabBarItemContentMode = .alwaysTemplate { - didSet { - self.updateDisplay() - } - } - - /// Icon imageView's image - open var image: UIImage? { - didSet { - if !selected { self.updateDisplay() } - } - } - - open var selectedImage: UIImage? { - didSet { - if selected { self.updateDisplay() } - } - } - - open var imageView: UIImageView = { - let imageView = UIImageView.init(frame: CGRect.zero) - imageView.backgroundColor = .clear - return imageView - }() - - open var titleLabel: UILabel = { - let titleLabel = UILabel.init(frame: CGRect.zero) - titleLabel.backgroundColor = .clear - titleLabel.textColor = .clear - titleLabel.textAlignment = .center - return titleLabel - }() - - - /// Badge value - open var badgeValue: String? { - didSet { - if let _ = badgeValue { - self.badgeView.badgeValue = badgeValue - self.addSubview(badgeView) - self.updateLayout() - } else { - // Remove when nil. - self.badgeView.removeFromSuperview() - } - badgeChanged(animated: true, completion: nil) - } - } - open var badgeColor: UIColor? { - didSet { - if let _ = badgeColor { - self.badgeView.badgeColor = badgeColor - } else { - self.badgeView.badgeColor = ESTabBarItemBadgeView.defaultBadgeColor - } - } - } - open var badgeView: ESTabBarItemBadgeView = ESTabBarItemBadgeView() { - willSet { - if let _ = badgeView.superview { - badgeView.removeFromSuperview() - } - } - didSet { - if let _ = badgeView.superview { - self.updateLayout() - } - } - } - open var badgeOffset: UIOffset = UIOffset.init(horizontal: 6.0, vertical: -22.0) { - didSet { - if badgeOffset != oldValue { - self.updateLayout() - } - } - } - - // MARK: - - public override init(frame: CGRect) { - super.init(frame: frame) - self.isUserInteractionEnabled = false - - addSubview(imageView) - addSubview(titleLabel) - - titleLabel.textColor = textColor - imageView.tintColor = iconColor - backgroundColor = backdropColor - } - - public required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - open func updateDisplay() { - imageView.image = (selected ? (selectedImage ?? image) : image)?.withRenderingMode(renderingMode) - imageView.tintColor = selected ? highlightIconColor : iconColor - titleLabel.textColor = selected ? highlightTextColor : textColor - backgroundColor = selected ? highlightBackdropColor : backdropColor - } - - open func updateLayout() { - let w = self.bounds.size.width - let h = self.bounds.size.height - - imageView.isHidden = (imageView.image == nil) - titleLabel.isHidden = (titleLabel.text == nil) - - if self.itemContentMode == .alwaysTemplate { - var s: CGFloat = 0.0 // image size - var f: CGFloat = 0.0 // font - var isLandscape = false - if let keyWindow = UIApplication.shared.keyWindow { - isLandscape = keyWindow.bounds.width > keyWindow.bounds.height - } - let isWide = isLandscape || traitCollection.horizontalSizeClass == .regular // is landscape or regular - if #available(iOS 11.0, *), isWide { - s = UIScreen.main.scale == 3.0 ? 23.0 : 20.0 - f = UIScreen.main.scale == 3.0 ? 13.0 : 12.0 - } else { - s = 23.0 - f = 10.0 - } - - if !imageView.isHidden && !titleLabel.isHidden { - titleLabel.font = UIFont.systemFont(ofSize: f) - titleLabel.sizeToFit() - if #available(iOS 11.0, *), isWide { - titleLabel.frame = CGRect.init(x: (w - titleLabel.bounds.size.width) / 2.0 + (UIScreen.main.scale == 3.0 ? 14.25 : 12.25), - y: (h - titleLabel.bounds.size.height) / 2.0, - width: titleLabel.bounds.size.width, - height: titleLabel.bounds.size.height) - imageView.frame = CGRect.init(x: titleLabel.frame.origin.x - s - (UIScreen.main.scale == 3.0 ? 6.0 : 5.0), - y: (h - s) / 2.0, - width: s, - height: s) - } else { - titleLabel.frame = CGRect.init(x: (w - titleLabel.bounds.size.width) / 2.0, - y: h - titleLabel.bounds.size.height - 1.0, - width: titleLabel.bounds.size.width, - height: titleLabel.bounds.size.height) - imageView.frame = CGRect.init(x: (w - s) / 2.0, - y: (h - s) / 2.0 - 6.0, - width: s, - height: s) - } - } else if !imageView.isHidden { - imageView.frame = CGRect.init(x: (w - s) / 2.0, - y: (h - s) / 2.0, - width: s, - height: s) - } else if !titleLabel.isHidden { - titleLabel.font = UIFont.systemFont(ofSize: f) - titleLabel.sizeToFit() - titleLabel.frame = CGRect.init(x: (w - titleLabel.bounds.size.width) / 2.0, - y: (h - titleLabel.bounds.size.height) / 2.0, - width: titleLabel.bounds.size.width, - height: titleLabel.bounds.size.height) - } - - if let _ = badgeView.superview { - let size = badgeView.sizeThatFits(self.frame.size) - if #available(iOS 11.0, *), isWide { - badgeView.frame = CGRect.init(origin: CGPoint.init(x: imageView.frame.midX - 3 + badgeOffset.horizontal, y: imageView.frame.midY + 3 + badgeOffset.vertical), size: size) - } else { - badgeView.frame = CGRect.init(origin: CGPoint.init(x: w / 2.0 + badgeOffset.horizontal, y: h / 2.0 + badgeOffset.vertical), size: size) - } - badgeView.setNeedsLayout() - } - - } else { - if !imageView.isHidden && !titleLabel.isHidden { - titleLabel.sizeToFit() - imageView.sizeToFit() - titleLabel.frame = CGRect.init(x: (w - titleLabel.bounds.size.width) / 2.0, - y: h - titleLabel.bounds.size.height - 1.0, - width: titleLabel.bounds.size.width, - height: titleLabel.bounds.size.height) - imageView.frame = CGRect.init(x: (w - imageView.bounds.size.width) / 2.0, - y: (h - imageView.bounds.size.height) / 2.0 - 6.0, - width: imageView.bounds.size.width, - height: imageView.bounds.size.height) - } else if !imageView.isHidden { - imageView.sizeToFit() - imageView.center = CGPoint.init(x: w / 2.0, y: h / 2.0) - } else if !titleLabel.isHidden { - titleLabel.sizeToFit() - titleLabel.center = CGPoint.init(x: w / 2.0, y: h / 2.0) - } - - if let _ = badgeView.superview { - let size = badgeView.sizeThatFits(self.frame.size) - badgeView.frame = CGRect.init(origin: CGPoint.init(x: w / 2.0 + badgeOffset.horizontal, y: h / 2.0 + badgeOffset.vertical), size: size) - badgeView.setNeedsLayout() - } - } - } - - // MARK: - INTERNAL METHODS - internal final func select(animated: Bool, completion: (() -> ())?) { - selected = true - if highlightEnabled && highlighted { - highlighted = false - dehighlightAnimation(animated: animated, completion: { [weak self] in - self?.updateDisplay() - self?.selectAnimation(animated: animated, completion: completion) - }) - } else { - updateDisplay() - selectAnimation(animated: animated, completion: completion) - } - } - - internal final func deselect(animated: Bool, completion: (() -> ())?) { - selected = false - updateDisplay() - self.deselectAnimation(animated: animated, completion: completion) - } - - internal final func reselect(animated: Bool, completion: (() -> ())?) { - if selected == false { - select(animated: animated, completion: completion) - } else { - if highlightEnabled && highlighted { - highlighted = false - dehighlightAnimation(animated: animated, completion: { [weak self] in - self?.reselectAnimation(animated: animated, completion: completion) - }) - } else { - reselectAnimation(animated: animated, completion: completion) - } - } - } - - internal final func highlight(animated: Bool, completion: (() -> ())?) { - if !highlightEnabled { - return - } - if highlighted == true { - return - } - highlighted = true - self.highlightAnimation(animated: animated, completion: completion) - } - - internal final func dehighlight(animated: Bool, completion: (() -> ())?) { - if !highlightEnabled { - return - } - if !highlighted { - return - } - highlighted = false - self.dehighlightAnimation(animated: animated, completion: completion) - } - - internal func badgeChanged(animated: Bool, completion: (() -> ())?) { - self.badgeChangedAnimation(animated: animated, completion: completion) - } - - // MARK: - ANIMATION METHODS - open func selectAnimation(animated: Bool, completion: (() -> ())?) { - completion?() - } - - open func deselectAnimation(animated: Bool, completion: (() -> ())?) { - completion?() - } - - open func reselectAnimation(animated: Bool, completion: (() -> ())?) { - completion?() - } - - open func highlightAnimation(animated: Bool, completion: (() -> ())?) { - completion?() - } - - open func dehighlightAnimation(animated: Bool, completion: (() -> ())?) { - completion?() - } - - open func badgeChangedAnimation(animated: Bool, completion: (() -> ())?) { - completion?() - } - -} diff --git a/Pods/ESTabBarController-swift/Sources/ESTabBarItemMoreContentView.swift b/Pods/ESTabBarController-swift/Sources/ESTabBarItemMoreContentView.swift deleted file mode 100644 index 786ecca..0000000 --- a/Pods/ESTabBarController-swift/Sources/ESTabBarItemMoreContentView.swift +++ /dev/null @@ -1,71 +0,0 @@ -// -// ESTabBarItemMoreContentView.swift -// -// Created by Vincent Li on 2017/2/8. -// Copyright (c) 2013-2018 ESTabBarController (https://github.com/eggswift/ESTabBarController) -// -// 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 - -open class ESTabBarItemMoreContentView: ESTabBarItemContentView { - - public override init(frame: CGRect) { - super.init(frame: frame) - self.title = NSLocalizedString("More_TabBarItem", bundle: Bundle(for:ESTabBarController.self), comment: "") - self.image = systemMore(highlighted: false) - self.selectedImage = systemMore(highlighted: true) - } - - public required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - public func systemMore(highlighted isHighlighted: Bool) -> UIImage? { - let image = UIImage.init() - let circleDiameter = isHighlighted ? 5.0 : 4.0 - let scale = UIScreen.main.scale - - UIGraphicsBeginImageContextWithOptions(CGSize.init(width: 32, height: 32), false, scale) - - if let context = UIGraphicsGetCurrentContext() { - context.setLineWidth(1.0) - for index in 0...2 { - let tmpRect = CGRect.init(x: 5.0 + 9.0 * Double(index), y: 14.0, width: circleDiameter, height: circleDiameter) - context.addEllipse(in: tmpRect) - image.draw(in: tmpRect) - } - - if isHighlighted { - context.setFillColor(UIColor.blue.cgColor) - context.fillPath() - } else { - context.strokePath() - } - - let newImage = UIGraphicsGetImageFromCurrentImageContext() - UIGraphicsEndImageContext() - return newImage - } - - return nil - } - -} diff --git a/Pods/ESTabBarController-swift/Sources/en.lproj/Localizable.strings b/Pods/ESTabBarController-swift/Sources/en.lproj/Localizable.strings deleted file mode 100644 index 5763f6e..0000000 --- a/Pods/ESTabBarController-swift/Sources/en.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -"TabBarItem_AccessibilityLabel"="%1$@ - tab - %2$i of %3$i"; -"TabBarItem_Selected_AccessibilityLabel"="Selected - %1$@ - tab - %2$i of %3$i"; -"More_TabBarItem"="More"; diff --git a/Pods/Headers/Private/BRPickerView/BRAddressModel.h b/Pods/Headers/Private/BRPickerView/BRAddressModel.h deleted file mode 120000 index 5efc748..0000000 --- a/Pods/Headers/Private/BRPickerView/BRAddressModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../BRPickerView/BRPickerView/AddressPickerView/BRAddressModel.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRPickerView/BRAddressPickerView.h b/Pods/Headers/Private/BRPickerView/BRAddressPickerView.h deleted file mode 120000 index 84160d7..0000000 --- a/Pods/Headers/Private/BRPickerView/BRAddressPickerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../BRPickerView/BRPickerView/AddressPickerView/BRAddressPickerView.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRPickerView/BRBaseView.h b/Pods/Headers/Private/BRPickerView/BRBaseView.h deleted file mode 120000 index ee575d4..0000000 --- a/Pods/Headers/Private/BRPickerView/BRBaseView.h +++ /dev/null @@ -1 +0,0 @@ -../../../BRPickerView/BRPickerView/Base/BRBaseView.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRPickerView/BRDatePickerView+BR.h b/Pods/Headers/Private/BRPickerView/BRDatePickerView+BR.h deleted file mode 120000 index acb998e..0000000 --- a/Pods/Headers/Private/BRPickerView/BRDatePickerView+BR.h +++ /dev/null @@ -1 +0,0 @@ -../../../BRPickerView/BRPickerView/DatePickerView/BRDatePickerView+BR.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRPickerView/BRDatePickerView.h b/Pods/Headers/Private/BRPickerView/BRDatePickerView.h deleted file mode 120000 index a291c10..0000000 --- a/Pods/Headers/Private/BRPickerView/BRDatePickerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../BRPickerView/BRPickerView/DatePickerView/BRDatePickerView.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRPickerView/BRPickerStyle.h b/Pods/Headers/Private/BRPickerView/BRPickerStyle.h deleted file mode 120000 index d376cfa..0000000 --- a/Pods/Headers/Private/BRPickerView/BRPickerStyle.h +++ /dev/null @@ -1 +0,0 @@ -../../../BRPickerView/BRPickerView/Base/BRPickerStyle.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRPickerView/BRPickerView.h b/Pods/Headers/Private/BRPickerView/BRPickerView.h deleted file mode 120000 index 06ce73a..0000000 --- a/Pods/Headers/Private/BRPickerView/BRPickerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../BRPickerView/BRPickerView/BRPickerView.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRPickerView/BRPickerViewMacro.h b/Pods/Headers/Private/BRPickerView/BRPickerViewMacro.h deleted file mode 120000 index 40ca8ad..0000000 --- a/Pods/Headers/Private/BRPickerView/BRPickerViewMacro.h +++ /dev/null @@ -1 +0,0 @@ -../../../BRPickerView/BRPickerView/Base/BRPickerViewMacro.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRPickerView/BRResultModel.h b/Pods/Headers/Private/BRPickerView/BRResultModel.h deleted file mode 120000 index f95bb15..0000000 --- a/Pods/Headers/Private/BRPickerView/BRResultModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../BRPickerView/BRPickerView/StringPickerView/BRResultModel.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRPickerView/BRStringPickerView.h b/Pods/Headers/Private/BRPickerView/BRStringPickerView.h deleted file mode 120000 index 623f0b7..0000000 --- a/Pods/Headers/Private/BRPickerView/BRStringPickerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../BRPickerView/BRPickerView/StringPickerView/BRStringPickerView.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRPickerView/NSBundle+BRPickerView.h b/Pods/Headers/Private/BRPickerView/NSBundle+BRPickerView.h deleted file mode 120000 index 6607c25..0000000 --- a/Pods/Headers/Private/BRPickerView/NSBundle+BRPickerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../BRPickerView/BRPickerView/Base/NSBundle+BRPickerView.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRPickerView/NSDate+BRPickerView.h b/Pods/Headers/Private/BRPickerView/NSDate+BRPickerView.h deleted file mode 120000 index 97dab86..0000000 --- a/Pods/Headers/Private/BRPickerView/NSDate+BRPickerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../BRPickerView/BRPickerView/DatePickerView/NSDate+BRPickerView.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseAttributedString.h b/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseAttributedString.h deleted file mode 120000 index ddc6783..0000000 --- a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseAttributedString.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseAttributedString/DDBaseAttributedString.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseButton.h b/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseButton.h deleted file mode 120000 index ac78bb1..0000000 --- a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseButton.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseButton/DDBaseButton.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseCollectionView.h b/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseCollectionView.h deleted file mode 120000 index b2727cc..0000000 --- a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseCollectionView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseCollectionView/DDBaseCollectionView.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseCollectionViewCell.h b/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseCollectionViewCell.h deleted file mode 120000 index 9942dc8..0000000 --- a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseCollectionViewCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseCollectionViewCell/DDBaseCollectionViewCell.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseImage.h b/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseImage.h deleted file mode 120000 index 805623b..0000000 --- a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseImage.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseImage/DDBaseImage.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseImageView.h b/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseImageView.h deleted file mode 120000 index dacdc4c..0000000 --- a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseImageView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseImageView/DDBaseImageView.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseLabel.h b/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseLabel.h deleted file mode 120000 index e91d692..0000000 --- a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseLabel.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseLabel/DDBaseLabel.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseModel.h b/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseModel.h deleted file mode 120000 index e6c772e..0000000 --- a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseModel/DDBaseModel.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseMutableAttributedString.h b/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseMutableAttributedString.h deleted file mode 120000 index 45fed5c..0000000 --- a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseMutableAttributedString.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseAttributedString/DDBaseMutableAttributedString.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseNavigationController.h b/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseNavigationController.h deleted file mode 120000 index e3dbf87..0000000 --- a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseNavigationController.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseNavigationController/DDBaseNavigationController.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseScrollView.h b/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseScrollView.h deleted file mode 120000 index 78a41ff..0000000 --- a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseScrollView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseScrollView/DDBaseScrollView.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseSwitch.h b/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseSwitch.h deleted file mode 120000 index 50d709a..0000000 --- a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseSwitch.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseSwitch/DDBaseSwitch.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseTabBarController.h b/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseTabBarController.h deleted file mode 120000 index 8cc12af..0000000 --- a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseTabBarController.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTabBarController/DDBaseTabBarController.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseTableView.h b/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseTableView.h deleted file mode 120000 index e97262d..0000000 --- a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseTableView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTableView/DDBaseTableView.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseTableViewCell.h b/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseTableViewCell.h deleted file mode 120000 index d6d61a8..0000000 --- a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseTableViewCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTableViewCell/DDBaseTableViewCell.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseTextField.h b/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseTextField.h deleted file mode 120000 index 7d516a9..0000000 --- a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseTextField.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTextField/DDBaseTextField.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseTextView.h b/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseTextView.h deleted file mode 120000 index 4752348..0000000 --- a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseTextView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTextView/DDBaseTextView.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseView.h b/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseView.h deleted file mode 120000 index c05ba2b..0000000 --- a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseView/DDBaseView.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseViewController.h b/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseViewController.h deleted file mode 120000 index 1168c2a..0000000 --- a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseViewController/DDBaseViewController.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseViewModel.h b/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseViewModel.h deleted file mode 120000 index ab585b8..0000000 --- a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBaseViewModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseViewModel/DDBaseViewModel.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBasicControls.h b/Pods/Headers/Private/DDBasicControlsKit_Private/DDBasicControls.h deleted file mode 120000 index 85b0cb6..0000000 --- a/Pods/Headers/Private/DDBasicControlsKit_Private/DDBasicControls.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBasicControls.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDBasicControlsKit_Private/DDNavigationControllerDelegateReceiver.h b/Pods/Headers/Private/DDBasicControlsKit_Private/DDNavigationControllerDelegateReceiver.h deleted file mode 120000 index 7849122..0000000 --- a/Pods/Headers/Private/DDBasicControlsKit_Private/DDNavigationControllerDelegateReceiver.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseNavigationController/DDNavigationControllerDelegateReceiver.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDBasicControlsKit_Private/DDViewControllerAnimatedTransition.h b/Pods/Headers/Private/DDBasicControlsKit_Private/DDViewControllerAnimatedTransition.h deleted file mode 120000 index 1e394f6..0000000 --- a/Pods/Headers/Private/DDBasicControlsKit_Private/DDViewControllerAnimatedTransition.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseAnimation/DDTransitionAnimation/DDViewControllerAnimatedTransition.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/CALayer+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/CALayer+DDCategory.h deleted file mode 120000 index 46eb7ba..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/CALayer+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/CALayer+DDCategory/CALayer+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/DDCategory.h deleted file mode 120000 index e5ba59b..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/NSAttributedString+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/NSAttributedString+DDCategory.h deleted file mode 120000 index ff63688..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/NSAttributedString+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSAttributedString+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/NSBundle+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/NSBundle+DDCategory.h deleted file mode 120000 index a153d8d..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/NSBundle+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSBundle+DDCategory/NSBundle+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/NSMutableAttributedString+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/NSMutableAttributedString+DDCategory.h deleted file mode 120000 index 336eba5..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/NSMutableAttributedString+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSMutableAttributedString+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/NSMutableParagraphStyle+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/NSMutableParagraphStyle+DDCategory.h deleted file mode 120000 index 043605f..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/NSMutableParagraphStyle+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSMutableParagraphStyle+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/NSObject+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/NSObject+DDCategory.h deleted file mode 120000 index 40ba76d..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/NSObject+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSObject+DDCategory/NSObject+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/NSThread+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/NSThread+DDCategory.h deleted file mode 120000 index e58c214..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/NSThread+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSThread+DDCategory/NSThread+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/NSURL+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/NSURL+DDCategory.h deleted file mode 120000 index d2e9412..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/NSURL+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSUrl+DDCategory/NSURL+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/UIApplication+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/UIApplication+DDCategory.h deleted file mode 120000 index ce8afbb..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/UIApplication+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIApplication+DDCategory/UIApplication+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/UIBarButtonItem+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/UIBarButtonItem+DDCategory.h deleted file mode 120000 index aff6c76..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/UIBarButtonItem+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIBarButtonItem+DDCategory/UIBarButtonItem+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/UIButton+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/UIButton+DDCategory.h deleted file mode 120000 index a4d9da4..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/UIButton+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIButton+DDCategory/UIButton+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/UICollectionView+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/UICollectionView+DDCategory.h deleted file mode 120000 index cd4f571..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/UICollectionView+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UICollectionView+DDCategory/UICollectionView+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/UICollectionViewCell+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/UICollectionViewCell+DDCategory.h deleted file mode 120000 index 5db3d9b..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/UICollectionViewCell+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UICollectionViewCell+DDCategory/UICollectionViewCell+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/UIFont+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/UIFont+DDCategory.h deleted file mode 120000 index 70f8494..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/UIFont+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIFont+DDCategory/UIFont+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/UIImage+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/UIImage+DDCategory.h deleted file mode 120000 index bdaa84a..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/UIImage+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIImage+DDCategory/UIImage+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/UIImageView+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/UIImageView+DDCategory.h deleted file mode 120000 index 66082ca..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/UIImageView+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIImageView+DDCategory/UIImageView+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/UILabel+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/UILabel+DDCategory.h deleted file mode 120000 index bfb965e..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/UILabel+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UILabel+DDCategory/UILabel+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/UINavigationBar+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/UINavigationBar+DDCategory.h deleted file mode 120000 index e1ec83d..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/UINavigationBar+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UINavigationBar+DDCategory/UINavigationBar+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/UINavigationController+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/UINavigationController+DDCategory.h deleted file mode 120000 index acf900c..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/UINavigationController+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UINavigationController+DDCategory/UINavigationController+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/UINavigationItem+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/UINavigationItem+DDCategory.h deleted file mode 120000 index 6fe77fd..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/UINavigationItem+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UINavigationItem+DDCategory/UINavigationItem+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/UIScreen+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/UIScreen+DDCategory.h deleted file mode 120000 index 525f040..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/UIScreen+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIScreen+DDCategory/UIScreen+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/UIScrollView+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/UIScrollView+DDCategory.h deleted file mode 120000 index 437f294..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/UIScrollView+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIScrollView+DDCategory/UIScrollView+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/UISwitch+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/UISwitch+DDCategory.h deleted file mode 120000 index a76a170..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/UISwitch+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UISwitch+DDCategory/UISwitch+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/UITabBarController+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/UITabBarController+DDCategory.h deleted file mode 120000 index e94b594..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/UITabBarController+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITabBarController+DDCategory/UITabBarController+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/UITableView+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/UITableView+DDCategory.h deleted file mode 120000 index 132fd01..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/UITableView+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITableView+DDCategory/UITableView+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/UITableViewCell+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/UITableViewCell+DDCategory.h deleted file mode 120000 index 313f2cd..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/UITableViewCell+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITableViewCell+DDCategory/UITableViewCell+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/UITextField+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/UITextField+DDCategory.h deleted file mode 120000 index 025b83b..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/UITextField+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITextField+DDCategory/UITextField+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/UITextView+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/UITextView+DDCategory.h deleted file mode 120000 index 6ff1692..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/UITextView+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITextView+DDCategory/UITextView+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/UIView+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/UIView+DDCategory.h deleted file mode 120000 index 23fed21..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/UIView+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIView+DDCategory/UIView+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/UIViewController+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/UIViewController+DDCategory.h deleted file mode 120000 index 90e8761..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/UIViewController+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIViewController+DDCategory/UIViewController+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDCategoryKit_Private/UIWindow+DDCategory.h b/Pods/Headers/Private/DDCategoryKit_Private/UIWindow+DDCategory.h deleted file mode 120000 index 8ec2d4a..0000000 --- a/Pods/Headers/Private/DDCategoryKit_Private/UIWindow+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIWindow+DDCategory/UIWindow+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDLogKit_Private/DDOCLog.h b/Pods/Headers/Private/DDLogKit_Private/DDOCLog.h deleted file mode 120000 index 9060229..0000000 --- a/Pods/Headers/Private/DDLogKit_Private/DDOCLog.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDLogKit_Private/DDLogKit_Private/Classes/OCLog/DDOCLog.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDMAMapKit_Private/DDMAGeometry.h b/Pods/Headers/Private/DDMAMapKit_Private/DDMAGeometry.h deleted file mode 120000 index dbd61f5..0000000 --- a/Pods/Headers/Private/DDMAMapKit_Private/DDMAGeometry.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAUtil/DDMAGeometry.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDMAMapKit_Private/DDMALocationManager.h b/Pods/Headers/Private/DDMAMapKit_Private/DDMALocationManager.h deleted file mode 120000 index aff540c..0000000 --- a/Pods/Headers/Private/DDMAMapKit_Private/DDMALocationManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMALocation/DDMALocationManager.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDMAMapKit_Private/DDMAMapView.h b/Pods/Headers/Private/DDMAMapKit_Private/DDMAMapView.h deleted file mode 120000 index 2ebc423..0000000 --- a/Pods/Headers/Private/DDMAMapKit_Private/DDMAMapView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/MapView/DDMAMapView.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDMAMapKit_Private/DDMANaviManager.h b/Pods/Headers/Private/DDMAMapKit_Private/DDMANaviManager.h deleted file mode 120000 index 123729a..0000000 --- a/Pods/Headers/Private/DDMAMapKit_Private/DDMANaviManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMANaviManager/DDMANaviManager.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDMAMapKit_Private/DDMASearch.h b/Pods/Headers/Private/DDMAMapKit_Private/DDMASearch.h deleted file mode 120000 index bc23bb4..0000000 --- a/Pods/Headers/Private/DDMAMapKit_Private/DDMASearch.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMASearch/DDMASearch.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDMAMapKit_Private/DDMATrackManager.h b/Pods/Headers/Private/DDMAMapKit_Private/DDMATrackManager.h deleted file mode 120000 index 8739b6e..0000000 --- a/Pods/Headers/Private/DDMAMapKit_Private/DDMATrackManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMATrackManager/DDMATrackManager.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDMAMapKit_Private/DriveRouteCustomAnnotation.h b/Pods/Headers/Private/DDMAMapKit_Private/DriveRouteCustomAnnotation.h deleted file mode 120000 index 2a9f5f2..0000000 --- a/Pods/Headers/Private/DDMAMapKit_Private/DriveRouteCustomAnnotation.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Annotation/DriveRouteCustomAnnotation.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDMAMapKit_Private/DriveRouteCustomAnnotationView.h b/Pods/Headers/Private/DDMAMapKit_Private/DriveRouteCustomAnnotationView.h deleted file mode 120000 index 595d048..0000000 --- a/Pods/Headers/Private/DDMAMapKit_Private/DriveRouteCustomAnnotationView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/AnnotationView/DriveRouteCustomAnnotationView.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDMAMapKit_Private/MABaseOverlay+DDCategory.h b/Pods/Headers/Private/DDMAMapKit_Private/MABaseOverlay+DDCategory.h deleted file mode 120000 index 72a24d4..0000000 --- a/Pods/Headers/Private/DDMAMapKit_Private/MABaseOverlay+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Overlay/MABaseOverlay+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDMAMapKit_Private/MAPointAnnotation+DDCategory.h b/Pods/Headers/Private/DDMAMapKit_Private/MAPointAnnotation+DDCategory.h deleted file mode 120000 index 11e7bc4..0000000 --- a/Pods/Headers/Private/DDMAMapKit_Private/MAPointAnnotation+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Annotation/MAPointAnnotation+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDMAMapKit_Private/MATraceReplayOverlay+Addition.h b/Pods/Headers/Private/DDMAMapKit_Private/MATraceReplayOverlay+Addition.h deleted file mode 120000 index 6cdd473..0000000 --- a/Pods/Headers/Private/DDMAMapKit_Private/MATraceReplayOverlay+Addition.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlay+Addition.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDMAMapKit_Private/MATraceReplayOverlay.h b/Pods/Headers/Private/DDMAMapKit_Private/MATraceReplayOverlay.h deleted file mode 120000 index c74de94..0000000 --- a/Pods/Headers/Private/DDMAMapKit_Private/MATraceReplayOverlay.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlay.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDMAMapKit_Private/MATraceReplayOverlayRender.h b/Pods/Headers/Private/DDMAMapKit_Private/MATraceReplayOverlayRender.h deleted file mode 120000 index 917781b..0000000 --- a/Pods/Headers/Private/DDMAMapKit_Private/MATraceReplayOverlayRender.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlayRender.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDProgressHUDKit_Private/MBProgressHUD.h b/Pods/Headers/Private/DDProgressHUDKit_Private/MBProgressHUD.h deleted file mode 120000 index 2161d9c..0000000 --- a/Pods/Headers/Private/DDProgressHUDKit_Private/MBProgressHUD.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDProgressHUDKit_Private/DDProgressHUDKit_Private/Classes/MBProgressHUD.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/MKAnnotationView+WebCache.h b/Pods/Headers/Private/DDWebImageKit_Private/MKAnnotationView+WebCache.h deleted file mode 120000 index e7bfdbd..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/MKAnnotationView+WebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImageMapKit/MapKit/MKAnnotationView+WebCache.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/NSBezierPath+SDRoundedCorners.h b/Pods/Headers/Private/DDWebImageKit_Private/NSBezierPath+SDRoundedCorners.h deleted file mode 120000 index 1cbb39d..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/NSBezierPath+SDRoundedCorners.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/NSBezierPath+SDRoundedCorners.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/NSButton+WebCache.h b/Pods/Headers/Private/DDWebImageKit_Private/NSButton+WebCache.h deleted file mode 120000 index 41d47f9..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/NSButton+WebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/NSButton+WebCache.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/NSData+ImageContentType.h b/Pods/Headers/Private/DDWebImageKit_Private/NSData+ImageContentType.h deleted file mode 120000 index 973b15b..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/NSData+ImageContentType.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/NSData+ImageContentType.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/NSImage+Compatibility.h b/Pods/Headers/Private/DDWebImageKit_Private/NSImage+Compatibility.h deleted file mode 120000 index b4c6c19..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/NSImage+Compatibility.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/NSImage+Compatibility.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDAnimatedImage.h b/Pods/Headers/Private/DDWebImageKit_Private/SDAnimatedImage.h deleted file mode 120000 index aeaa455..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDAnimatedImage.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImage.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDAnimatedImagePlayer.h b/Pods/Headers/Private/DDWebImageKit_Private/SDAnimatedImagePlayer.h deleted file mode 120000 index dc95ccd..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDAnimatedImagePlayer.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImagePlayer.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDAnimatedImageRep.h b/Pods/Headers/Private/DDWebImageKit_Private/SDAnimatedImageRep.h deleted file mode 120000 index 8a1c020..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDAnimatedImageRep.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageRep.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDAnimatedImageView+WebCache.h b/Pods/Headers/Private/DDWebImageKit_Private/SDAnimatedImageView+WebCache.h deleted file mode 120000 index 5f0fa30..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDAnimatedImageView+WebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageView+WebCache.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDAnimatedImageView.h b/Pods/Headers/Private/DDWebImageKit_Private/SDAnimatedImageView.h deleted file mode 120000 index 4c8988e..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDAnimatedImageView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageView.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDAssociatedObject.h b/Pods/Headers/Private/DDWebImageKit_Private/SDAssociatedObject.h deleted file mode 120000 index 56004db..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDAssociatedObject.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDAssociatedObject.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDAsyncBlockOperation.h b/Pods/Headers/Private/DDWebImageKit_Private/SDAsyncBlockOperation.h deleted file mode 120000 index df801ca..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDAsyncBlockOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDAsyncBlockOperation.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDDeviceHelper.h b/Pods/Headers/Private/DDWebImageKit_Private/SDDeviceHelper.h deleted file mode 120000 index b3c5718..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDDeviceHelper.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDDeviceHelper.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDDiskCache.h b/Pods/Headers/Private/DDWebImageKit_Private/SDDiskCache.h deleted file mode 120000 index fe72f63..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDDiskCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDDiskCache.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDDisplayLink.h b/Pods/Headers/Private/DDWebImageKit_Private/SDDisplayLink.h deleted file mode 120000 index 01a27d3..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDDisplayLink.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDDisplayLink.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDFileAttributeHelper.h b/Pods/Headers/Private/DDWebImageKit_Private/SDFileAttributeHelper.h deleted file mode 120000 index 2b50a29..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDFileAttributeHelper.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDFileAttributeHelper.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDGraphicsImageRenderer.h b/Pods/Headers/Private/DDWebImageKit_Private/SDGraphicsImageRenderer.h deleted file mode 120000 index ae7ad70..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDGraphicsImageRenderer.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDGraphicsImageRenderer.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDImageAPNGCoder.h b/Pods/Headers/Private/DDWebImageKit_Private/SDImageAPNGCoder.h deleted file mode 120000 index 67e3f67..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDImageAPNGCoder.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageAPNGCoder.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDImageAWebPCoder.h b/Pods/Headers/Private/DDWebImageKit_Private/SDImageAWebPCoder.h deleted file mode 120000 index 8a44d76..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDImageAWebPCoder.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageAWebPCoder.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDImageAssetManager.h b/Pods/Headers/Private/DDWebImageKit_Private/SDImageAssetManager.h deleted file mode 120000 index c912f63..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDImageAssetManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDImageAssetManager.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDImageCache.h b/Pods/Headers/Private/DDWebImageKit_Private/SDImageCache.h deleted file mode 120000 index d7ec674..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDImageCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCache.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDImageCacheConfig.h b/Pods/Headers/Private/DDWebImageKit_Private/SDImageCacheConfig.h deleted file mode 120000 index 6a09962..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDImageCacheConfig.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCacheConfig.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDImageCacheDefine.h b/Pods/Headers/Private/DDWebImageKit_Private/SDImageCacheDefine.h deleted file mode 120000 index b2714a2..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDImageCacheDefine.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCacheDefine.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDImageCachesManager.h b/Pods/Headers/Private/DDWebImageKit_Private/SDImageCachesManager.h deleted file mode 120000 index 532da3d..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDImageCachesManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCachesManager.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDImageCachesManagerOperation.h b/Pods/Headers/Private/DDWebImageKit_Private/SDImageCachesManagerOperation.h deleted file mode 120000 index 023c916..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDImageCachesManagerOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDImageCachesManagerOperation.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDImageCoder.h b/Pods/Headers/Private/DDWebImageKit_Private/SDImageCoder.h deleted file mode 120000 index 927487e..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDImageCoder.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCoder.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDImageCoderHelper.h b/Pods/Headers/Private/DDWebImageKit_Private/SDImageCoderHelper.h deleted file mode 120000 index 43cfef1..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDImageCoderHelper.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCoderHelper.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDImageCodersManager.h b/Pods/Headers/Private/DDWebImageKit_Private/SDImageCodersManager.h deleted file mode 120000 index 6597ec1..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDImageCodersManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCodersManager.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDImageFrame.h b/Pods/Headers/Private/DDWebImageKit_Private/SDImageFrame.h deleted file mode 120000 index 79329b3..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDImageFrame.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageFrame.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDImageGIFCoder.h b/Pods/Headers/Private/DDWebImageKit_Private/SDImageGIFCoder.h deleted file mode 120000 index 98df5a4..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDImageGIFCoder.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageGIFCoder.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDImageGraphics.h b/Pods/Headers/Private/DDWebImageKit_Private/SDImageGraphics.h deleted file mode 120000 index 400489e..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDImageGraphics.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageGraphics.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDImageHEICCoder.h b/Pods/Headers/Private/DDWebImageKit_Private/SDImageHEICCoder.h deleted file mode 120000 index 30a45e7..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDImageHEICCoder.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageHEICCoder.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDImageIOAnimatedCoder.h b/Pods/Headers/Private/DDWebImageKit_Private/SDImageIOAnimatedCoder.h deleted file mode 120000 index aca6183..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDImageIOAnimatedCoder.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageIOAnimatedCoder.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDImageIOAnimatedCoderInternal.h b/Pods/Headers/Private/DDWebImageKit_Private/SDImageIOAnimatedCoderInternal.h deleted file mode 120000 index 33498cb..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDImageIOAnimatedCoderInternal.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDImageIOAnimatedCoderInternal.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDImageIOCoder.h b/Pods/Headers/Private/DDWebImageKit_Private/SDImageIOCoder.h deleted file mode 120000 index 4b1575d..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDImageIOCoder.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageIOCoder.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDImageLoader.h b/Pods/Headers/Private/DDWebImageKit_Private/SDImageLoader.h deleted file mode 120000 index 805d60a..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDImageLoader.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageLoader.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDImageLoadersManager.h b/Pods/Headers/Private/DDWebImageKit_Private/SDImageLoadersManager.h deleted file mode 120000 index f60a6ba..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDImageLoadersManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageLoadersManager.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDImageTransformer.h b/Pods/Headers/Private/DDWebImageKit_Private/SDImageTransformer.h deleted file mode 120000 index 09aff94..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDImageTransformer.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageTransformer.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDInternalMacros.h b/Pods/Headers/Private/DDWebImageKit_Private/SDInternalMacros.h deleted file mode 120000 index 8b082d0..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDInternalMacros.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDInternalMacros.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDMemoryCache.h b/Pods/Headers/Private/DDWebImageKit_Private/SDMemoryCache.h deleted file mode 120000 index a38c4c0..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDMemoryCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDMemoryCache.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDWeakProxy.h b/Pods/Headers/Private/DDWebImageKit_Private/SDWeakProxy.h deleted file mode 120000 index a457f14..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDWeakProxy.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDWeakProxy.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImage.h b/Pods/Headers/Private/DDWebImageKit_Private/SDWebImage.h deleted file mode 120000 index d58e442..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImage.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/SDWebImage.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageCacheKeyFilter.h b/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageCacheKeyFilter.h deleted file mode 120000 index 281af79..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageCacheKeyFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCacheKeyFilter.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageCacheSerializer.h b/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageCacheSerializer.h deleted file mode 120000 index cba2529..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageCacheSerializer.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCacheSerializer.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageCompat.h b/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageCompat.h deleted file mode 120000 index 6989f8e..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageCompat.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCompat.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageDefine.h b/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageDefine.h deleted file mode 120000 index 3da6e59..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageDefine.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDefine.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageDownloader.h b/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageDownloader.h deleted file mode 120000 index 023e812..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageDownloader.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloader.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageDownloaderConfig.h b/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageDownloaderConfig.h deleted file mode 120000 index 25238ff..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageDownloaderConfig.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderConfig.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageDownloaderDecryptor.h b/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageDownloaderDecryptor.h deleted file mode 120000 index b506d13..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageDownloaderDecryptor.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderDecryptor.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageDownloaderOperation.h b/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageDownloaderOperation.h deleted file mode 120000 index 9803305..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageDownloaderOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderOperation.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageDownloaderRequestModifier.h b/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageDownloaderRequestModifier.h deleted file mode 120000 index a51bfed..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageDownloaderRequestModifier.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderRequestModifier.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageDownloaderResponseModifier.h b/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageDownloaderResponseModifier.h deleted file mode 120000 index 21f84a4..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageDownloaderResponseModifier.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderResponseModifier.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageError.h b/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageError.h deleted file mode 120000 index fa4e47a..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageError.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageError.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageIndicator.h b/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageIndicator.h deleted file mode 120000 index feba5df..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageIndicator.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageIndicator.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageManager.h b/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageManager.h deleted file mode 120000 index 0984cb4..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageManager.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageMapKit.h b/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageMapKit.h deleted file mode 120000 index c0a052c..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageMapKit.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImageMapKit/SDWebImageMapKit.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageOperation.h b/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageOperation.h deleted file mode 120000 index d02b183..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageOperation.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageOptionsProcessor.h b/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageOptionsProcessor.h deleted file mode 120000 index f249e26..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageOptionsProcessor.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageOptionsProcessor.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImagePrefetcher.h b/Pods/Headers/Private/DDWebImageKit_Private/SDWebImagePrefetcher.h deleted file mode 120000 index e732a7d..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImagePrefetcher.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImagePrefetcher.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageTransition.h b/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageTransition.h deleted file mode 120000 index e710d16..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageTransition.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageTransition.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageTransitionInternal.h b/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageTransitionInternal.h deleted file mode 120000 index 83f504a..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDWebImageTransitionInternal.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDWebImageTransitionInternal.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/SDmetamacros.h b/Pods/Headers/Private/DDWebImageKit_Private/SDmetamacros.h deleted file mode 120000 index cd6a5b4..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/SDmetamacros.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/SDmetamacros.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/UIButton+WebCache.h b/Pods/Headers/Private/DDWebImageKit_Private/UIButton+WebCache.h deleted file mode 120000 index a36aa0a..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/UIButton+WebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIButton+WebCache.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/UIColor+SDHexString.h b/Pods/Headers/Private/DDWebImageKit_Private/UIColor+SDHexString.h deleted file mode 120000 index 046f095..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/UIColor+SDHexString.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Private/UIColor+SDHexString.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/UIImage+ExtendedCacheData.h b/Pods/Headers/Private/DDWebImageKit_Private/UIImage+ExtendedCacheData.h deleted file mode 120000 index c8e49ed..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/UIImage+ExtendedCacheData.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+ExtendedCacheData.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/UIImage+ForceDecode.h b/Pods/Headers/Private/DDWebImageKit_Private/UIImage+ForceDecode.h deleted file mode 120000 index a21dc67..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/UIImage+ForceDecode.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+ForceDecode.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/UIImage+GIF.h b/Pods/Headers/Private/DDWebImageKit_Private/UIImage+GIF.h deleted file mode 120000 index b456213..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/UIImage+GIF.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+GIF.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/UIImage+MemoryCacheCost.h b/Pods/Headers/Private/DDWebImageKit_Private/UIImage+MemoryCacheCost.h deleted file mode 120000 index 455f062..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/UIImage+MemoryCacheCost.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+MemoryCacheCost.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/UIImage+Metadata.h b/Pods/Headers/Private/DDWebImageKit_Private/UIImage+Metadata.h deleted file mode 120000 index a1ef730..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/UIImage+Metadata.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+Metadata.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/UIImage+MultiFormat.h b/Pods/Headers/Private/DDWebImageKit_Private/UIImage+MultiFormat.h deleted file mode 120000 index 0366165..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/UIImage+MultiFormat.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+MultiFormat.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/UIImage+Transform.h b/Pods/Headers/Private/DDWebImageKit_Private/UIImage+Transform.h deleted file mode 120000 index 21d4df8..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/UIImage+Transform.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+Transform.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/UIImageView+DDWebCache.h b/Pods/Headers/Private/DDWebImageKit_Private/UIImageView+DDWebCache.h deleted file mode 120000 index e075eb2..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/UIImageView+DDWebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/DDWebImage/UIImageView+DDWebCache.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/UIImageView+HighlightedWebCache.h b/Pods/Headers/Private/DDWebImageKit_Private/UIImageView+HighlightedWebCache.h deleted file mode 120000 index 82146d8..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/UIImageView+HighlightedWebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImageView+HighlightedWebCache.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/UIImageView+WebCache.h b/Pods/Headers/Private/DDWebImageKit_Private/UIImageView+WebCache.h deleted file mode 120000 index 2b21f49..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/UIImageView+WebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImageView+WebCache.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/UIView+WebCache.h b/Pods/Headers/Private/DDWebImageKit_Private/UIView+WebCache.h deleted file mode 120000 index 9f671e3..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/UIView+WebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIView+WebCache.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDWebImageKit_Private/UIView+WebCacheOperation.h b/Pods/Headers/Private/DDWebImageKit_Private/UIView+WebCacheOperation.h deleted file mode 120000 index 60059fe..0000000 --- a/Pods/Headers/Private/DDWebImageKit_Private/UIView+WebCacheOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIView+WebCacheOperation.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/UIImageView+ZFCache.h b/Pods/Headers/Private/DDZFPlayerKit_Private/UIImageView+ZFCache.h deleted file mode 120000 index 02e533d..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/UIImageView+ZFCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/UIImageView+ZFCache.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/UIScrollView+ZFPlayer.h b/Pods/Headers/Private/DDZFPlayerKit_Private/UIScrollView+ZFPlayer.h deleted file mode 120000 index b2f0b24..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/UIScrollView+ZFPlayer.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/UIScrollView+ZFPlayer.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/UIView+ZFFrame.h b/Pods/Headers/Private/DDZFPlayerKit_Private/UIView+ZFFrame.h deleted file mode 120000 index a8ea736..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/UIView+ZFFrame.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/UIView+ZFFrame.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFFloatView.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFFloatView.h deleted file mode 120000 index dca0da5..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFFloatView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFFloatView.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFIJKPlayerManager.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFIJKPlayerManager.h deleted file mode 120000 index 26950f1..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFIJKPlayerManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/ZFIJKPlayerManager.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFKVOController.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFKVOController.h deleted file mode 120000 index 109696e..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFKVOController.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFKVOController.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFLandScapeControlView.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFLandScapeControlView.h deleted file mode 120000 index ede5424..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFLandScapeControlView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFLandScapeControlView.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFLandscapeViewController.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFLandscapeViewController.h deleted file mode 120000 index 14fd00c..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFLandscapeViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFLandscapeViewController.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFLandscapeWindow.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFLandscapeWindow.h deleted file mode 120000 index 90247a1..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFLandscapeWindow.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFLandscapeWindow.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFLoadingView.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFLoadingView.h deleted file mode 120000 index c6c2877..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFLoadingView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFLoadingView.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFNetworkSpeedMonitor.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFNetworkSpeedMonitor.h deleted file mode 120000 index 65aa71f..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFNetworkSpeedMonitor.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFNetworkSpeedMonitor.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFOrientationObserver.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFOrientationObserver.h deleted file mode 120000 index 1c689c2..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFOrientationObserver.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFOrientationObserver.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPersentInteractiveTransition.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPersentInteractiveTransition.h deleted file mode 120000 index a110432..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPersentInteractiveTransition.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPersentInteractiveTransition.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayer.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayer.h deleted file mode 120000 index 1fc766b..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayer.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayer.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerConst.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerConst.h deleted file mode 120000 index 5281570..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerConst.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerConst.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerControlView.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerControlView.h deleted file mode 120000 index 1cdf244..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerControlView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayerControlView.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerController.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerController.h deleted file mode 120000 index e014111..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerController.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerController.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerGestureControl.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerGestureControl.h deleted file mode 120000 index 91d61c5..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerGestureControl.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerGestureControl.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerLogManager.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerLogManager.h deleted file mode 120000 index 7a6e417..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerLogManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerLogManager.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerMediaControl.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerMediaControl.h deleted file mode 120000 index 149cbe1..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerMediaControl.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerMediaControl.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerMediaPlayback.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerMediaPlayback.h deleted file mode 120000 index 4760ac8..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerMediaPlayback.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerMediaPlayback.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerNotification.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerNotification.h deleted file mode 120000 index b106b6e..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerNotification.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerNotification.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerView.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerView.h deleted file mode 120000 index 82d2a29..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPlayerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerView.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPortraitControlView.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPortraitControlView.h deleted file mode 120000 index 38a196d..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPortraitControlView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPortraitControlView.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPortraitViewController.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPortraitViewController.h deleted file mode 120000 index 3eb85cd..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPortraitViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPortraitViewController.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPresentTransition.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPresentTransition.h deleted file mode 120000 index 1740272..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFPresentTransition.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPresentTransition.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFReachabilityManager.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFReachabilityManager.h deleted file mode 120000 index 914249a..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFReachabilityManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFReachabilityManager.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFSliderView.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFSliderView.h deleted file mode 120000 index 56ab5aa..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFSliderView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFSliderView.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFSmallFloatControlView.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFSmallFloatControlView.h deleted file mode 120000 index 1509c33..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFSmallFloatControlView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFSmallFloatControlView.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFSpeedLoadingView.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFSpeedLoadingView.h deleted file mode 120000 index e7b7b03..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFSpeedLoadingView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFSpeedLoadingView.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFUtilities.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFUtilities.h deleted file mode 120000 index 5d2a4ef..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFUtilities.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFUtilities.h \ No newline at end of file diff --git a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFVolumeBrightnessView.h b/Pods/Headers/Private/DDZFPlayerKit_Private/ZFVolumeBrightnessView.h deleted file mode 120000 index f8dc4f7..0000000 --- a/Pods/Headers/Private/DDZFPlayerKit_Private/ZFVolumeBrightnessView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFVolumeBrightnessView.h \ No newline at end of file diff --git a/Pods/Headers/Private/DynamicBlurView/DynamicBlurView.h b/Pods/Headers/Private/DynamicBlurView/DynamicBlurView.h deleted file mode 120000 index 37b0754..0000000 --- a/Pods/Headers/Private/DynamicBlurView/DynamicBlurView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DynamicBlurView/Sources/DynamicBlurView/DynamicBlurView.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryBaseCell.h b/Pods/Headers/Private/JXCategoryView/JXCategoryBaseCell.h deleted file mode 120000 index 71cb01c..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryBaseCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Base/JXCategoryBaseCell.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryBaseCellModel.h b/Pods/Headers/Private/JXCategoryView/JXCategoryBaseCellModel.h deleted file mode 120000 index 7f2afaf..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryBaseCellModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Base/JXCategoryBaseCellModel.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryBaseView.h b/Pods/Headers/Private/JXCategoryView/JXCategoryBaseView.h deleted file mode 120000 index a7e60bb..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryBaseView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Base/JXCategoryBaseView.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryCollectionView.h b/Pods/Headers/Private/JXCategoryView/JXCategoryCollectionView.h deleted file mode 120000 index 8e84ca8..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryCollectionView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Common/JXCategoryCollectionView.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryDotCell.h b/Pods/Headers/Private/JXCategoryView/JXCategoryDotCell.h deleted file mode 120000 index 3970df3..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryDotCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Dot/JXCategoryDotCell.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryDotCellModel.h b/Pods/Headers/Private/JXCategoryView/JXCategoryDotCellModel.h deleted file mode 120000 index 35d4888..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryDotCellModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Dot/JXCategoryDotCellModel.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryDotView.h b/Pods/Headers/Private/JXCategoryView/JXCategoryDotView.h deleted file mode 120000 index ebac707..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryDotView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Dot/JXCategoryDotView.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryFactory.h b/Pods/Headers/Private/JXCategoryView/JXCategoryFactory.h deleted file mode 120000 index 72e8255..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryFactory.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Common/JXCategoryFactory.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryImageCell.h b/Pods/Headers/Private/JXCategoryView/JXCategoryImageCell.h deleted file mode 120000 index 6d43555..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryImageCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Image/JXCategoryImageCell.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryImageCellModel.h b/Pods/Headers/Private/JXCategoryView/JXCategoryImageCellModel.h deleted file mode 120000 index 213c6b4..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryImageCellModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Image/JXCategoryImageCellModel.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryImageView.h b/Pods/Headers/Private/JXCategoryView/JXCategoryImageView.h deleted file mode 120000 index d7e264a..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryImageView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Image/JXCategoryImageView.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorBackgroundView.h b/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorBackgroundView.h deleted file mode 120000 index f78fa04..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorBackgroundView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorBackgroundView.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorBallView.h b/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorBallView.h deleted file mode 120000 index 9babcbf..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorBallView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorBallView.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorCell.h b/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorCell.h deleted file mode 120000 index 6696e4f..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Indicator/JXCategoryIndicatorCell.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorCellModel.h b/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorCellModel.h deleted file mode 120000 index 542aa28..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorCellModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Indicator/JXCategoryIndicatorCellModel.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorComponentView.h b/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorComponentView.h deleted file mode 120000 index 81c5388..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorComponentView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorComponentView.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorDotLineView.h b/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorDotLineView.h deleted file mode 120000 index 8235a5b..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorDotLineView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorDotLineView.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorImageView.h b/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorImageView.h deleted file mode 120000 index 1d828d0..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorImageView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorImageView.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorLineView.h b/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorLineView.h deleted file mode 120000 index 9ff88fc..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorLineView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorLineView.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorParamsModel.h b/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorParamsModel.h deleted file mode 120000 index 44fed4f..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorParamsModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Common/JXCategoryIndicatorParamsModel.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorProtocol.h b/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorProtocol.h deleted file mode 120000 index 1e71be2..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorProtocol.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Common/JXCategoryIndicatorProtocol.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorRainbowLineView.h b/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorRainbowLineView.h deleted file mode 120000 index defd7da..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorRainbowLineView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorRainbowLineView.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorTriangleView.h b/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorTriangleView.h deleted file mode 120000 index 2e94f98..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorTriangleView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorTriangleView.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorView.h b/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorView.h deleted file mode 120000 index 2686025..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryIndicatorView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Indicator/JXCategoryIndicatorView.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryListContainerRTLCell.h b/Pods/Headers/Private/JXCategoryView/JXCategoryListContainerRTLCell.h deleted file mode 120000 index 46867ae..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryListContainerRTLCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Common/JXCategoryListContainerRTLCell.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryListContainerView.h b/Pods/Headers/Private/JXCategoryView/JXCategoryListContainerView.h deleted file mode 120000 index 17d16ad..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryListContainerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Common/JXCategoryListContainerView.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryNumberCell.h b/Pods/Headers/Private/JXCategoryView/JXCategoryNumberCell.h deleted file mode 120000 index 347c3dc..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryNumberCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Number/JXCategoryNumberCell.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryNumberCellModel.h b/Pods/Headers/Private/JXCategoryView/JXCategoryNumberCellModel.h deleted file mode 120000 index 6f6630d..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryNumberCellModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Number/JXCategoryNumberCellModel.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryNumberView.h b/Pods/Headers/Private/JXCategoryView/JXCategoryNumberView.h deleted file mode 120000 index 7527df3..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryNumberView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Number/JXCategoryNumberView.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryTitleCell.h b/Pods/Headers/Private/JXCategoryView/JXCategoryTitleCell.h deleted file mode 120000 index 4d57bb8..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryTitleCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Title/JXCategoryTitleCell.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryTitleCellModel.h b/Pods/Headers/Private/JXCategoryView/JXCategoryTitleCellModel.h deleted file mode 120000 index 70f6631..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryTitleCellModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Title/JXCategoryTitleCellModel.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryTitleImageCell.h b/Pods/Headers/Private/JXCategoryView/JXCategoryTitleImageCell.h deleted file mode 120000 index 994ae08..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryTitleImageCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/TitleImage/JXCategoryTitleImageCell.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryTitleImageCellModel.h b/Pods/Headers/Private/JXCategoryView/JXCategoryTitleImageCellModel.h deleted file mode 120000 index b15e0c4..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryTitleImageCellModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/TitleImage/JXCategoryTitleImageCellModel.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryTitleImageView.h b/Pods/Headers/Private/JXCategoryView/JXCategoryTitleImageView.h deleted file mode 120000 index 1495739..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryTitleImageView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/TitleImage/JXCategoryTitleImageView.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryTitleVerticalZoomCell.h b/Pods/Headers/Private/JXCategoryView/JXCategoryTitleVerticalZoomCell.h deleted file mode 120000 index e68bf25..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryTitleVerticalZoomCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomCell.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryTitleVerticalZoomCellModel.h b/Pods/Headers/Private/JXCategoryView/JXCategoryTitleVerticalZoomCellModel.h deleted file mode 120000 index c28497f..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryTitleVerticalZoomCellModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomCellModel.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryTitleVerticalZoomView.h b/Pods/Headers/Private/JXCategoryView/JXCategoryTitleVerticalZoomView.h deleted file mode 120000 index 67b41dd..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryTitleVerticalZoomView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomView.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryTitleView.h b/Pods/Headers/Private/JXCategoryView/JXCategoryTitleView.h deleted file mode 120000 index 885f1d9..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryTitleView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Title/JXCategoryTitleView.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryView.h b/Pods/Headers/Private/JXCategoryView/JXCategoryView.h deleted file mode 120000 index 37f85be..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/JXCategoryView.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryViewAnimator.h b/Pods/Headers/Private/JXCategoryView/JXCategoryViewAnimator.h deleted file mode 120000 index 78a8bd8..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryViewAnimator.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Common/JXCategoryViewAnimator.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/JXCategoryViewDefines.h b/Pods/Headers/Private/JXCategoryView/JXCategoryViewDefines.h deleted file mode 120000 index 037bd05..0000000 --- a/Pods/Headers/Private/JXCategoryView/JXCategoryViewDefines.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Common/JXCategoryViewDefines.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/RTLManager.h b/Pods/Headers/Private/JXCategoryView/RTLManager.h deleted file mode 120000 index 386a46e..0000000 --- a/Pods/Headers/Private/JXCategoryView/RTLManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/RLTManager/RTLManager.h \ No newline at end of file diff --git a/Pods/Headers/Private/JXCategoryView/UIColor+JXAdd.h b/Pods/Headers/Private/JXCategoryView/UIColor+JXAdd.h deleted file mode 120000 index 93e4b34..0000000 --- a/Pods/Headers/Private/JXCategoryView/UIColor+JXAdd.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Common/UIColor+JXAdd.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/MJRefresh.h b/Pods/Headers/Private/MJRefresh/MJRefresh.h deleted file mode 120000 index d83fdd6..0000000 --- a/Pods/Headers/Private/MJRefresh/MJRefresh.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/MJRefresh.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/MJRefreshAutoFooter.h b/Pods/Headers/Private/MJRefresh/MJRefreshAutoFooter.h deleted file mode 120000 index 5bb1fbc..0000000 --- a/Pods/Headers/Private/MJRefresh/MJRefreshAutoFooter.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/MJRefreshAutoGifFooter.h b/Pods/Headers/Private/MJRefresh/MJRefreshAutoGifFooter.h deleted file mode 120000 index 1435437..0000000 --- a/Pods/Headers/Private/MJRefresh/MJRefreshAutoGifFooter.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/MJRefreshAutoNormalFooter.h b/Pods/Headers/Private/MJRefresh/MJRefreshAutoNormalFooter.h deleted file mode 120000 index 6b87abe..0000000 --- a/Pods/Headers/Private/MJRefresh/MJRefreshAutoNormalFooter.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/MJRefreshAutoStateFooter.h b/Pods/Headers/Private/MJRefresh/MJRefreshAutoStateFooter.h deleted file mode 120000 index 19b2053..0000000 --- a/Pods/Headers/Private/MJRefresh/MJRefreshAutoStateFooter.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/MJRefreshBackFooter.h b/Pods/Headers/Private/MJRefresh/MJRefreshBackFooter.h deleted file mode 120000 index 3df4973..0000000 --- a/Pods/Headers/Private/MJRefresh/MJRefreshBackFooter.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/MJRefreshBackGifFooter.h b/Pods/Headers/Private/MJRefresh/MJRefreshBackGifFooter.h deleted file mode 120000 index e5d5f96..0000000 --- a/Pods/Headers/Private/MJRefresh/MJRefreshBackGifFooter.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/MJRefreshBackNormalFooter.h b/Pods/Headers/Private/MJRefresh/MJRefreshBackNormalFooter.h deleted file mode 120000 index c578c7f..0000000 --- a/Pods/Headers/Private/MJRefresh/MJRefreshBackNormalFooter.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/MJRefreshBackStateFooter.h b/Pods/Headers/Private/MJRefresh/MJRefreshBackStateFooter.h deleted file mode 120000 index 3317188..0000000 --- a/Pods/Headers/Private/MJRefresh/MJRefreshBackStateFooter.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/MJRefreshComponent.h b/Pods/Headers/Private/MJRefresh/MJRefreshComponent.h deleted file mode 120000 index 35cb1b1..0000000 --- a/Pods/Headers/Private/MJRefresh/MJRefreshComponent.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Base/MJRefreshComponent.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/MJRefreshConfig.h b/Pods/Headers/Private/MJRefresh/MJRefreshConfig.h deleted file mode 120000 index f18429b..0000000 --- a/Pods/Headers/Private/MJRefresh/MJRefreshConfig.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/MJRefreshConfig.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/MJRefreshConst.h b/Pods/Headers/Private/MJRefresh/MJRefreshConst.h deleted file mode 120000 index 035954b..0000000 --- a/Pods/Headers/Private/MJRefresh/MJRefreshConst.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/MJRefreshConst.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/MJRefreshFooter.h b/Pods/Headers/Private/MJRefresh/MJRefreshFooter.h deleted file mode 120000 index 743dda2..0000000 --- a/Pods/Headers/Private/MJRefresh/MJRefreshFooter.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Base/MJRefreshFooter.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/MJRefreshGifHeader.h b/Pods/Headers/Private/MJRefresh/MJRefreshGifHeader.h deleted file mode 120000 index aa6afbd..0000000 --- a/Pods/Headers/Private/MJRefresh/MJRefreshGifHeader.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/MJRefreshHeader.h b/Pods/Headers/Private/MJRefresh/MJRefreshHeader.h deleted file mode 120000 index 3a38b26..0000000 --- a/Pods/Headers/Private/MJRefresh/MJRefreshHeader.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Base/MJRefreshHeader.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/MJRefreshNormalHeader.h b/Pods/Headers/Private/MJRefresh/MJRefreshNormalHeader.h deleted file mode 120000 index b5cc164..0000000 --- a/Pods/Headers/Private/MJRefresh/MJRefreshNormalHeader.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/MJRefreshNormalTrailer.h b/Pods/Headers/Private/MJRefresh/MJRefreshNormalTrailer.h deleted file mode 120000 index f561996..0000000 --- a/Pods/Headers/Private/MJRefresh/MJRefreshNormalTrailer.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Custom/Trailer/MJRefreshNormalTrailer.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/MJRefreshStateHeader.h b/Pods/Headers/Private/MJRefresh/MJRefreshStateHeader.h deleted file mode 120000 index 7bd25cf..0000000 --- a/Pods/Headers/Private/MJRefresh/MJRefreshStateHeader.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/MJRefreshStateTrailer.h b/Pods/Headers/Private/MJRefresh/MJRefreshStateTrailer.h deleted file mode 120000 index 7b54429..0000000 --- a/Pods/Headers/Private/MJRefresh/MJRefreshStateTrailer.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Custom/Trailer/MJRefreshStateTrailer.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/MJRefreshTrailer.h b/Pods/Headers/Private/MJRefresh/MJRefreshTrailer.h deleted file mode 120000 index a25342e..0000000 --- a/Pods/Headers/Private/MJRefresh/MJRefreshTrailer.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Base/MJRefreshTrailer.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/NSBundle+MJRefresh.h b/Pods/Headers/Private/MJRefresh/NSBundle+MJRefresh.h deleted file mode 120000 index 2a628b4..0000000 --- a/Pods/Headers/Private/MJRefresh/NSBundle+MJRefresh.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/NSBundle+MJRefresh.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/UICollectionViewLayout+MJRefresh.h b/Pods/Headers/Private/MJRefresh/UICollectionViewLayout+MJRefresh.h deleted file mode 120000 index 151df84..0000000 --- a/Pods/Headers/Private/MJRefresh/UICollectionViewLayout+MJRefresh.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/UICollectionViewLayout+MJRefresh.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/UIScrollView+MJExtension.h b/Pods/Headers/Private/MJRefresh/UIScrollView+MJExtension.h deleted file mode 120000 index 1919784..0000000 --- a/Pods/Headers/Private/MJRefresh/UIScrollView+MJExtension.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/UIScrollView+MJExtension.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/UIScrollView+MJRefresh.h b/Pods/Headers/Private/MJRefresh/UIScrollView+MJRefresh.h deleted file mode 120000 index 47b703d..0000000 --- a/Pods/Headers/Private/MJRefresh/UIScrollView+MJRefresh.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/UIScrollView+MJRefresh.h \ No newline at end of file diff --git a/Pods/Headers/Private/MJRefresh/UIView+MJExtension.h b/Pods/Headers/Private/MJRefresh/UIView+MJExtension.h deleted file mode 120000 index 5f19813..0000000 --- a/Pods/Headers/Private/MJRefresh/UIView+MJExtension.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/UIView+MJExtension.h \ No newline at end of file diff --git a/Pods/Headers/Private/RxCocoa/RxCocoa/RxCocoa.h b/Pods/Headers/Private/RxCocoa/RxCocoa/RxCocoa.h deleted file mode 120000 index a7f5b5a..0000000 --- a/Pods/Headers/Private/RxCocoa/RxCocoa/RxCocoa.h +++ /dev/null @@ -1 +0,0 @@ -../../../../RxCocoa/RxCocoa/RxCocoa.h \ No newline at end of file diff --git a/Pods/Headers/Private/RxCocoa/RxCocoa/RxCocoaRuntime.h b/Pods/Headers/Private/RxCocoa/RxCocoa/RxCocoaRuntime.h deleted file mode 120000 index c8dd542..0000000 --- a/Pods/Headers/Private/RxCocoa/RxCocoa/RxCocoaRuntime.h +++ /dev/null @@ -1 +0,0 @@ -../../../../RxCocoa/RxCocoa/Runtime/include/RxCocoaRuntime.h \ No newline at end of file diff --git a/Pods/Headers/Private/RxCocoa/RxCocoa/_RX.h b/Pods/Headers/Private/RxCocoa/RxCocoa/_RX.h deleted file mode 120000 index b757b0a..0000000 --- a/Pods/Headers/Private/RxCocoa/RxCocoa/_RX.h +++ /dev/null @@ -1 +0,0 @@ -../../../../RxCocoa/RxCocoa/Runtime/include/_RX.h \ No newline at end of file diff --git a/Pods/Headers/Private/RxCocoa/RxCocoa/_RXDelegateProxy.h b/Pods/Headers/Private/RxCocoa/RxCocoa/_RXDelegateProxy.h deleted file mode 120000 index 68743c3..0000000 --- a/Pods/Headers/Private/RxCocoa/RxCocoa/_RXDelegateProxy.h +++ /dev/null @@ -1 +0,0 @@ -../../../../RxCocoa/RxCocoa/Runtime/include/_RXDelegateProxy.h \ No newline at end of file diff --git a/Pods/Headers/Private/RxCocoa/RxCocoa/_RXKVOObserver.h b/Pods/Headers/Private/RxCocoa/RxCocoa/_RXKVOObserver.h deleted file mode 120000 index d4fa1df..0000000 --- a/Pods/Headers/Private/RxCocoa/RxCocoa/_RXKVOObserver.h +++ /dev/null @@ -1 +0,0 @@ -../../../../RxCocoa/RxCocoa/Runtime/include/_RXKVOObserver.h \ No newline at end of file diff --git a/Pods/Headers/Private/RxCocoa/RxCocoa/_RXObjCRuntime.h b/Pods/Headers/Private/RxCocoa/RxCocoa/_RXObjCRuntime.h deleted file mode 120000 index 0b35e0b..0000000 --- a/Pods/Headers/Private/RxCocoa/RxCocoa/_RXObjCRuntime.h +++ /dev/null @@ -1 +0,0 @@ -../../../../RxCocoa/RxCocoa/Runtime/include/_RXObjCRuntime.h \ No newline at end of file diff --git a/Pods/Headers/Private/SwiftyRSA/NSData+SHA.h b/Pods/Headers/Private/SwiftyRSA/NSData+SHA.h deleted file mode 120000 index 51d1e7d..0000000 --- a/Pods/Headers/Private/SwiftyRSA/NSData+SHA.h +++ /dev/null @@ -1 +0,0 @@ -../../../SwiftyRSA/Source/NSData+SHA.h \ No newline at end of file diff --git a/Pods/Headers/Private/SwiftyRSA/SwiftyRSA.h b/Pods/Headers/Private/SwiftyRSA/SwiftyRSA.h deleted file mode 120000 index 92e46df..0000000 --- a/Pods/Headers/Private/SwiftyRSA/SwiftyRSA.h +++ /dev/null @@ -1 +0,0 @@ -../../../SwiftyRSA/Source/SwiftyRSA.h \ No newline at end of file diff --git a/Pods/Headers/Private/TYCyclePagerView/TYCyclePagerTransformLayout.h b/Pods/Headers/Private/TYCyclePagerView/TYCyclePagerTransformLayout.h deleted file mode 120000 index 9912254..0000000 --- a/Pods/Headers/Private/TYCyclePagerView/TYCyclePagerTransformLayout.h +++ /dev/null @@ -1 +0,0 @@ -../../../TYCyclePagerView/TYCyclePagerViewDemo/TYCyclePagerView/TYCyclePagerTransformLayout.h \ No newline at end of file diff --git a/Pods/Headers/Private/TYCyclePagerView/TYCyclePagerView.h b/Pods/Headers/Private/TYCyclePagerView/TYCyclePagerView.h deleted file mode 120000 index c7cf1bb..0000000 --- a/Pods/Headers/Private/TYCyclePagerView/TYCyclePagerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../TYCyclePagerView/TYCyclePagerViewDemo/TYCyclePagerView/TYCyclePagerView.h \ No newline at end of file diff --git a/Pods/Headers/Private/TYCyclePagerView/TYPageControl.h b/Pods/Headers/Private/TYCyclePagerView/TYPageControl.h deleted file mode 120000 index c1270e0..0000000 --- a/Pods/Headers/Private/TYCyclePagerView/TYPageControl.h +++ /dev/null @@ -1 +0,0 @@ -../../../TYCyclePagerView/TYCyclePagerViewDemo/TYCyclePagerView/TYPageControl.h \ No newline at end of file diff --git a/Pods/Headers/Private/ZLPhotoBrowser/ZLPhotoBrowser.h b/Pods/Headers/Private/ZLPhotoBrowser/ZLPhotoBrowser.h deleted file mode 120000 index 96d5c28..0000000 --- a/Pods/Headers/Private/ZLPhotoBrowser/ZLPhotoBrowser.h +++ /dev/null @@ -1 +0,0 @@ -../../../ZLPhotoBrowser/Sources/ZLPhotoBrowser.h \ No newline at end of file diff --git a/Pods/Headers/Public/Alamofire/Alamofire-umbrella.h b/Pods/Headers/Public/Alamofire/Alamofire-umbrella.h deleted file mode 120000 index 9e5c694..0000000 --- a/Pods/Headers/Public/Alamofire/Alamofire-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/Alamofire/Alamofire-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/Alamofire/Alamofire.modulemap b/Pods/Headers/Public/Alamofire/Alamofire.modulemap deleted file mode 120000 index 8c5fb09..0000000 --- a/Pods/Headers/Public/Alamofire/Alamofire.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/Alamofire/Alamofire.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/BRPickerView/BRAddressModel.h b/Pods/Headers/Public/BRPickerView/BRAddressModel.h deleted file mode 120000 index 5efc748..0000000 --- a/Pods/Headers/Public/BRPickerView/BRAddressModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../BRPickerView/BRPickerView/AddressPickerView/BRAddressModel.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRPickerView/BRAddressPickerView.h b/Pods/Headers/Public/BRPickerView/BRAddressPickerView.h deleted file mode 120000 index 84160d7..0000000 --- a/Pods/Headers/Public/BRPickerView/BRAddressPickerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../BRPickerView/BRPickerView/AddressPickerView/BRAddressPickerView.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRPickerView/BRBaseView.h b/Pods/Headers/Public/BRPickerView/BRBaseView.h deleted file mode 120000 index ee575d4..0000000 --- a/Pods/Headers/Public/BRPickerView/BRBaseView.h +++ /dev/null @@ -1 +0,0 @@ -../../../BRPickerView/BRPickerView/Base/BRBaseView.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRPickerView/BRDatePickerView+BR.h b/Pods/Headers/Public/BRPickerView/BRDatePickerView+BR.h deleted file mode 120000 index acb998e..0000000 --- a/Pods/Headers/Public/BRPickerView/BRDatePickerView+BR.h +++ /dev/null @@ -1 +0,0 @@ -../../../BRPickerView/BRPickerView/DatePickerView/BRDatePickerView+BR.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRPickerView/BRDatePickerView.h b/Pods/Headers/Public/BRPickerView/BRDatePickerView.h deleted file mode 120000 index a291c10..0000000 --- a/Pods/Headers/Public/BRPickerView/BRDatePickerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../BRPickerView/BRPickerView/DatePickerView/BRDatePickerView.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRPickerView/BRPickerStyle.h b/Pods/Headers/Public/BRPickerView/BRPickerStyle.h deleted file mode 120000 index d376cfa..0000000 --- a/Pods/Headers/Public/BRPickerView/BRPickerStyle.h +++ /dev/null @@ -1 +0,0 @@ -../../../BRPickerView/BRPickerView/Base/BRPickerStyle.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRPickerView/BRPickerView-umbrella.h b/Pods/Headers/Public/BRPickerView/BRPickerView-umbrella.h deleted file mode 120000 index aca1149..0000000 --- a/Pods/Headers/Public/BRPickerView/BRPickerView-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/BRPickerView/BRPickerView-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRPickerView/BRPickerView.h b/Pods/Headers/Public/BRPickerView/BRPickerView.h deleted file mode 120000 index 06ce73a..0000000 --- a/Pods/Headers/Public/BRPickerView/BRPickerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../BRPickerView/BRPickerView/BRPickerView.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRPickerView/BRPickerView.modulemap b/Pods/Headers/Public/BRPickerView/BRPickerView.modulemap deleted file mode 120000 index f1a65f1..0000000 --- a/Pods/Headers/Public/BRPickerView/BRPickerView.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/BRPickerView/BRPickerView.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/BRPickerView/BRPickerViewMacro.h b/Pods/Headers/Public/BRPickerView/BRPickerViewMacro.h deleted file mode 120000 index 40ca8ad..0000000 --- a/Pods/Headers/Public/BRPickerView/BRPickerViewMacro.h +++ /dev/null @@ -1 +0,0 @@ -../../../BRPickerView/BRPickerView/Base/BRPickerViewMacro.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRPickerView/BRResultModel.h b/Pods/Headers/Public/BRPickerView/BRResultModel.h deleted file mode 120000 index f95bb15..0000000 --- a/Pods/Headers/Public/BRPickerView/BRResultModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../BRPickerView/BRPickerView/StringPickerView/BRResultModel.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRPickerView/BRStringPickerView.h b/Pods/Headers/Public/BRPickerView/BRStringPickerView.h deleted file mode 120000 index 623f0b7..0000000 --- a/Pods/Headers/Public/BRPickerView/BRStringPickerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../BRPickerView/BRPickerView/StringPickerView/BRStringPickerView.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRPickerView/NSBundle+BRPickerView.h b/Pods/Headers/Public/BRPickerView/NSBundle+BRPickerView.h deleted file mode 120000 index 6607c25..0000000 --- a/Pods/Headers/Public/BRPickerView/NSBundle+BRPickerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../BRPickerView/BRPickerView/Base/NSBundle+BRPickerView.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRPickerView/NSDate+BRPickerView.h b/Pods/Headers/Public/BRPickerView/NSDate+BRPickerView.h deleted file mode 120000 index 97dab86..0000000 --- a/Pods/Headers/Public/BRPickerView/NSDate+BRPickerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../BRPickerView/BRPickerView/DatePickerView/NSDate+BRPickerView.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private-umbrella.h b/Pods/Headers/Public/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private-umbrella.h deleted file mode 120000 index 78e2b0a..0000000 --- a/Pods/Headers/Public/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private.modulemap b/Pods/Headers/Public/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private.modulemap deleted file mode 120000 index 058f140..0000000 --- a/Pods/Headers/Public/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/DDAutoUIKit_Private/DDAutoUIKit_Private-umbrella.h b/Pods/Headers/Public/DDAutoUIKit_Private/DDAutoUIKit_Private-umbrella.h deleted file mode 120000 index ba9fad7..0000000 --- a/Pods/Headers/Public/DDAutoUIKit_Private/DDAutoUIKit_Private-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDAutoUIKit_Private/DDAutoUIKit_Private-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap b/Pods/Headers/Public/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap deleted file mode 120000 index 558a330..0000000 --- a/Pods/Headers/Public/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseAttributedString.h b/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseAttributedString.h deleted file mode 120000 index ddc6783..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseAttributedString.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseAttributedString/DDBaseAttributedString.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseButton.h b/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseButton.h deleted file mode 120000 index ac78bb1..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseButton.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseButton/DDBaseButton.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseCollectionView.h b/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseCollectionView.h deleted file mode 120000 index b2727cc..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseCollectionView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseCollectionView/DDBaseCollectionView.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseCollectionViewCell.h b/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseCollectionViewCell.h deleted file mode 120000 index 9942dc8..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseCollectionViewCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseCollectionViewCell/DDBaseCollectionViewCell.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseImage.h b/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseImage.h deleted file mode 120000 index 805623b..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseImage.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseImage/DDBaseImage.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseImageView.h b/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseImageView.h deleted file mode 120000 index dacdc4c..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseImageView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseImageView/DDBaseImageView.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseLabel.h b/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseLabel.h deleted file mode 120000 index e91d692..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseLabel.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseLabel/DDBaseLabel.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseModel.h b/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseModel.h deleted file mode 120000 index e6c772e..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseModel/DDBaseModel.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseMutableAttributedString.h b/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseMutableAttributedString.h deleted file mode 120000 index 45fed5c..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseMutableAttributedString.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseAttributedString/DDBaseMutableAttributedString.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseNavigationController.h b/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseNavigationController.h deleted file mode 120000 index e3dbf87..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseNavigationController.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseNavigationController/DDBaseNavigationController.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseScrollView.h b/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseScrollView.h deleted file mode 120000 index 78a41ff..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseScrollView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseScrollView/DDBaseScrollView.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseSwitch.h b/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseSwitch.h deleted file mode 120000 index 50d709a..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseSwitch.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseSwitch/DDBaseSwitch.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseTabBarController.h b/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseTabBarController.h deleted file mode 120000 index 8cc12af..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseTabBarController.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTabBarController/DDBaseTabBarController.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseTableView.h b/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseTableView.h deleted file mode 120000 index e97262d..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseTableView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTableView/DDBaseTableView.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseTableViewCell.h b/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseTableViewCell.h deleted file mode 120000 index d6d61a8..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseTableViewCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTableViewCell/DDBaseTableViewCell.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseTextField.h b/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseTextField.h deleted file mode 120000 index 7d516a9..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseTextField.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTextField/DDBaseTextField.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseTextView.h b/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseTextView.h deleted file mode 120000 index 4752348..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseTextView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseTextView/DDBaseTextView.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseView.h b/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseView.h deleted file mode 120000 index c05ba2b..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseView/DDBaseView.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseViewController.h b/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseViewController.h deleted file mode 120000 index 1168c2a..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseViewController/DDBaseViewController.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseViewModel.h b/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseViewModel.h deleted file mode 120000 index ab585b8..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBaseViewModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseViewModel/DDBaseViewModel.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBasicControls.h b/Pods/Headers/Public/DDBasicControlsKit_Private/DDBasicControls.h deleted file mode 120000 index 85b0cb6..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBasicControls.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBasicControls.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private-umbrella.h b/Pods/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private-umbrella.h deleted file mode 120000 index 593a17b..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDBasicControlsKit_Private/DDBasicControlsKit_Private-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap b/Pods/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap deleted file mode 120000 index b31522b..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDNavigationControllerDelegateReceiver.h b/Pods/Headers/Public/DDBasicControlsKit_Private/DDNavigationControllerDelegateReceiver.h deleted file mode 120000 index 7849122..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDNavigationControllerDelegateReceiver.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseNavigationController/DDNavigationControllerDelegateReceiver.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDBasicControlsKit_Private/DDViewControllerAnimatedTransition.h b/Pods/Headers/Public/DDBasicControlsKit_Private/DDViewControllerAnimatedTransition.h deleted file mode 120000 index 1e394f6..0000000 --- a/Pods/Headers/Public/DDBasicControlsKit_Private/DDViewControllerAnimatedTransition.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDBasicControlsKit_Private/DDBasicControlsKit_Private/Classes/DDBaseAnimation/DDTransitionAnimation/DDViewControllerAnimatedTransition.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/CALayer+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/CALayer+DDCategory.h deleted file mode 120000 index 46eb7ba..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/CALayer+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/CALayer+DDCategory/CALayer+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/DDCategory.h deleted file mode 120000 index e5ba59b..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private-umbrella.h b/Pods/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private-umbrella.h deleted file mode 120000 index 2dfccc1..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDCategoryKit_Private/DDCategoryKit_Private-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap b/Pods/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap deleted file mode 120000 index a04c3d9..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDCategoryKit_Private/DDCategoryKit_Private.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/NSAttributedString+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/NSAttributedString+DDCategory.h deleted file mode 120000 index ff63688..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/NSAttributedString+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSAttributedString+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/NSBundle+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/NSBundle+DDCategory.h deleted file mode 120000 index a153d8d..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/NSBundle+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSBundle+DDCategory/NSBundle+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/NSMutableAttributedString+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/NSMutableAttributedString+DDCategory.h deleted file mode 120000 index 336eba5..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/NSMutableAttributedString+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSMutableAttributedString+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/NSMutableParagraphStyle+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/NSMutableParagraphStyle+DDCategory.h deleted file mode 120000 index 043605f..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/NSMutableParagraphStyle+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSMutableParagraphStyle+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/NSObject+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/NSObject+DDCategory.h deleted file mode 120000 index 40ba76d..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/NSObject+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSObject+DDCategory/NSObject+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/NSThread+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/NSThread+DDCategory.h deleted file mode 120000 index e58c214..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/NSThread+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSThread+DDCategory/NSThread+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/NSURL+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/NSURL+DDCategory.h deleted file mode 120000 index d2e9412..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/NSURL+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSUrl+DDCategory/NSURL+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/UIApplication+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/UIApplication+DDCategory.h deleted file mode 120000 index ce8afbb..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/UIApplication+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIApplication+DDCategory/UIApplication+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/UIBarButtonItem+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/UIBarButtonItem+DDCategory.h deleted file mode 120000 index aff6c76..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/UIBarButtonItem+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIBarButtonItem+DDCategory/UIBarButtonItem+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/UIButton+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/UIButton+DDCategory.h deleted file mode 120000 index a4d9da4..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/UIButton+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIButton+DDCategory/UIButton+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/UICollectionView+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/UICollectionView+DDCategory.h deleted file mode 120000 index cd4f571..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/UICollectionView+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UICollectionView+DDCategory/UICollectionView+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/UICollectionViewCell+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/UICollectionViewCell+DDCategory.h deleted file mode 120000 index 5db3d9b..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/UICollectionViewCell+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UICollectionViewCell+DDCategory/UICollectionViewCell+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/UIFont+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/UIFont+DDCategory.h deleted file mode 120000 index 70f8494..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/UIFont+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIFont+DDCategory/UIFont+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/UIImage+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/UIImage+DDCategory.h deleted file mode 120000 index bdaa84a..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/UIImage+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIImage+DDCategory/UIImage+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/UIImageView+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/UIImageView+DDCategory.h deleted file mode 120000 index 66082ca..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/UIImageView+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIImageView+DDCategory/UIImageView+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/UILabel+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/UILabel+DDCategory.h deleted file mode 120000 index bfb965e..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/UILabel+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UILabel+DDCategory/UILabel+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/UINavigationBar+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/UINavigationBar+DDCategory.h deleted file mode 120000 index e1ec83d..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/UINavigationBar+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UINavigationBar+DDCategory/UINavigationBar+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/UINavigationController+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/UINavigationController+DDCategory.h deleted file mode 120000 index acf900c..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/UINavigationController+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UINavigationController+DDCategory/UINavigationController+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/UINavigationItem+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/UINavigationItem+DDCategory.h deleted file mode 120000 index 6fe77fd..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/UINavigationItem+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UINavigationItem+DDCategory/UINavigationItem+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/UIScreen+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/UIScreen+DDCategory.h deleted file mode 120000 index 525f040..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/UIScreen+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIScreen+DDCategory/UIScreen+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/UIScrollView+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/UIScrollView+DDCategory.h deleted file mode 120000 index 437f294..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/UIScrollView+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIScrollView+DDCategory/UIScrollView+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/UISwitch+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/UISwitch+DDCategory.h deleted file mode 120000 index a76a170..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/UISwitch+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UISwitch+DDCategory/UISwitch+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/UITabBarController+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/UITabBarController+DDCategory.h deleted file mode 120000 index e94b594..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/UITabBarController+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITabBarController+DDCategory/UITabBarController+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/UITableView+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/UITableView+DDCategory.h deleted file mode 120000 index 132fd01..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/UITableView+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITableView+DDCategory/UITableView+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/UITableViewCell+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/UITableViewCell+DDCategory.h deleted file mode 120000 index 313f2cd..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/UITableViewCell+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITableViewCell+DDCategory/UITableViewCell+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/UITextField+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/UITextField+DDCategory.h deleted file mode 120000 index 025b83b..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/UITextField+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITextField+DDCategory/UITextField+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/UITextView+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/UITextView+DDCategory.h deleted file mode 120000 index 6ff1692..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/UITextView+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UITextView+DDCategory/UITextView+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/UIView+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/UIView+DDCategory.h deleted file mode 120000 index 23fed21..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/UIView+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIView+DDCategory/UIView+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/UIViewController+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/UIViewController+DDCategory.h deleted file mode 120000 index 90e8761..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/UIViewController+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIViewController+DDCategory/UIViewController+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDCategoryKit_Private/UIWindow+DDCategory.h b/Pods/Headers/Public/DDCategoryKit_Private/UIWindow+DDCategory.h deleted file mode 120000 index 8ec2d4a..0000000 --- a/Pods/Headers/Public/DDCategoryKit_Private/UIWindow+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIWindow+DDCategory/UIWindow+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDColorKit_Private/DDColorKit_Private-umbrella.h b/Pods/Headers/Public/DDColorKit_Private/DDColorKit_Private-umbrella.h deleted file mode 120000 index 376a02b..0000000 --- a/Pods/Headers/Public/DDColorKit_Private/DDColorKit_Private-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDColorKit_Private/DDColorKit_Private-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDColorKit_Private/DDColorKit_Private.modulemap b/Pods/Headers/Public/DDColorKit_Private/DDColorKit_Private.modulemap deleted file mode 120000 index ae06811..0000000 --- a/Pods/Headers/Public/DDColorKit_Private/DDColorKit_Private.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDColorKit_Private/DDColorKit_Private.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/DDControlsKit_Private/DDControlsKit_Private-umbrella.h b/Pods/Headers/Public/DDControlsKit_Private/DDControlsKit_Private-umbrella.h deleted file mode 120000 index c87b306..0000000 --- a/Pods/Headers/Public/DDControlsKit_Private/DDControlsKit_Private-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDControlsKit_Private/DDControlsKit_Private-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDControlsKit_Private/DDControlsKit_Private.modulemap b/Pods/Headers/Public/DDControlsKit_Private/DDControlsKit_Private.modulemap deleted file mode 120000 index 3f433e9..0000000 --- a/Pods/Headers/Public/DDControlsKit_Private/DDControlsKit_Private.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDControlsKit_Private/DDControlsKit_Private.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/DDDateKit_Private/DDDateKit_Private-umbrella.h b/Pods/Headers/Public/DDDateKit_Private/DDDateKit_Private-umbrella.h deleted file mode 120000 index 7a1c74b..0000000 --- a/Pods/Headers/Public/DDDateKit_Private/DDDateKit_Private-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDDateKit_Private/DDDateKit_Private-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDDateKit_Private/DDDateKit_Private.modulemap b/Pods/Headers/Public/DDDateKit_Private/DDDateKit_Private.modulemap deleted file mode 120000 index 6e3d049..0000000 --- a/Pods/Headers/Public/DDDateKit_Private/DDDateKit_Private.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDDateKit_Private/DDDateKit_Private.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/DDFontKit_Private/DDFontKit_Private-umbrella.h b/Pods/Headers/Public/DDFontKit_Private/DDFontKit_Private-umbrella.h deleted file mode 120000 index fa4976c..0000000 --- a/Pods/Headers/Public/DDFontKit_Private/DDFontKit_Private-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDFontKit_Private/DDFontKit_Private-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDFontKit_Private/DDFontKit_Private.modulemap b/Pods/Headers/Public/DDFontKit_Private/DDFontKit_Private.modulemap deleted file mode 120000 index 3d8a260..0000000 --- a/Pods/Headers/Public/DDFontKit_Private/DDFontKit_Private.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDFontKit_Private/DDFontKit_Private.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/DDLogKit_Private/DDLogKit_Private-umbrella.h b/Pods/Headers/Public/DDLogKit_Private/DDLogKit_Private-umbrella.h deleted file mode 120000 index b7b6d99..0000000 --- a/Pods/Headers/Public/DDLogKit_Private/DDLogKit_Private-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDLogKit_Private/DDLogKit_Private-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDLogKit_Private/DDLogKit_Private.modulemap b/Pods/Headers/Public/DDLogKit_Private/DDLogKit_Private.modulemap deleted file mode 120000 index 31eb35a..0000000 --- a/Pods/Headers/Public/DDLogKit_Private/DDLogKit_Private.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDLogKit_Private/DDLogKit_Private.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/DDLogKit_Private/DDOCLog.h b/Pods/Headers/Public/DDLogKit_Private/DDOCLog.h deleted file mode 120000 index 9060229..0000000 --- a/Pods/Headers/Public/DDLogKit_Private/DDOCLog.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDLogKit_Private/DDLogKit_Private/Classes/OCLog/DDOCLog.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDMAMapKit_Private/DDMAGeometry.h b/Pods/Headers/Public/DDMAMapKit_Private/DDMAGeometry.h deleted file mode 120000 index dbd61f5..0000000 --- a/Pods/Headers/Public/DDMAMapKit_Private/DDMAGeometry.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAUtil/DDMAGeometry.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDMAMapKit_Private/DDMALocationManager.h b/Pods/Headers/Public/DDMAMapKit_Private/DDMALocationManager.h deleted file mode 120000 index aff540c..0000000 --- a/Pods/Headers/Public/DDMAMapKit_Private/DDMALocationManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMALocation/DDMALocationManager.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private-umbrella.h b/Pods/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private-umbrella.h deleted file mode 120000 index 25ec80f..0000000 --- a/Pods/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDMAMapKit_Private/DDMAMapKit_Private-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap b/Pods/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap deleted file mode 120000 index bd02c30..0000000 --- a/Pods/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDMAMapKit_Private/DDMAMapKit_Private.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/DDMAMapKit_Private/DDMAMapView.h b/Pods/Headers/Public/DDMAMapKit_Private/DDMAMapView.h deleted file mode 120000 index 2ebc423..0000000 --- a/Pods/Headers/Public/DDMAMapKit_Private/DDMAMapView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/MapView/DDMAMapView.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDMAMapKit_Private/DDMANaviManager.h b/Pods/Headers/Public/DDMAMapKit_Private/DDMANaviManager.h deleted file mode 120000 index 123729a..0000000 --- a/Pods/Headers/Public/DDMAMapKit_Private/DDMANaviManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMANaviManager/DDMANaviManager.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDMAMapKit_Private/DDMASearch.h b/Pods/Headers/Public/DDMAMapKit_Private/DDMASearch.h deleted file mode 120000 index bc23bb4..0000000 --- a/Pods/Headers/Public/DDMAMapKit_Private/DDMASearch.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMASearch/DDMASearch.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDMAMapKit_Private/DDMATrackManager.h b/Pods/Headers/Public/DDMAMapKit_Private/DDMATrackManager.h deleted file mode 120000 index 8739b6e..0000000 --- a/Pods/Headers/Public/DDMAMapKit_Private/DDMATrackManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMATrackManager/DDMATrackManager.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDMAMapKit_Private/DriveRouteCustomAnnotation.h b/Pods/Headers/Public/DDMAMapKit_Private/DriveRouteCustomAnnotation.h deleted file mode 120000 index 2a9f5f2..0000000 --- a/Pods/Headers/Public/DDMAMapKit_Private/DriveRouteCustomAnnotation.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Annotation/DriveRouteCustomAnnotation.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDMAMapKit_Private/DriveRouteCustomAnnotationView.h b/Pods/Headers/Public/DDMAMapKit_Private/DriveRouteCustomAnnotationView.h deleted file mode 120000 index 595d048..0000000 --- a/Pods/Headers/Public/DDMAMapKit_Private/DriveRouteCustomAnnotationView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/AnnotationView/DriveRouteCustomAnnotationView.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDMAMapKit_Private/MABaseOverlay+DDCategory.h b/Pods/Headers/Public/DDMAMapKit_Private/MABaseOverlay+DDCategory.h deleted file mode 120000 index 72a24d4..0000000 --- a/Pods/Headers/Public/DDMAMapKit_Private/MABaseOverlay+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Overlay/MABaseOverlay+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDMAMapKit_Private/MAPointAnnotation+DDCategory.h b/Pods/Headers/Public/DDMAMapKit_Private/MAPointAnnotation+DDCategory.h deleted file mode 120000 index 11e7bc4..0000000 --- a/Pods/Headers/Public/DDMAMapKit_Private/MAPointAnnotation+DDCategory.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Annotation/MAPointAnnotation+DDCategory.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDMAMapKit_Private/MATraceReplayOverlay+Addition.h b/Pods/Headers/Public/DDMAMapKit_Private/MATraceReplayOverlay+Addition.h deleted file mode 120000 index 6cdd473..0000000 --- a/Pods/Headers/Public/DDMAMapKit_Private/MATraceReplayOverlay+Addition.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlay+Addition.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDMAMapKit_Private/MATraceReplayOverlay.h b/Pods/Headers/Public/DDMAMapKit_Private/MATraceReplayOverlay.h deleted file mode 120000 index c74de94..0000000 --- a/Pods/Headers/Public/DDMAMapKit_Private/MATraceReplayOverlay.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlay.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDMAMapKit_Private/MATraceReplayOverlayRender.h b/Pods/Headers/Public/DDMAMapKit_Private/MATraceReplayOverlayRender.h deleted file mode 120000 index 917781b..0000000 --- a/Pods/Headers/Public/DDMAMapKit_Private/MATraceReplayOverlayRender.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDMAMapKit_Private/DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlayRender.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private-umbrella.h b/Pods/Headers/Public/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private-umbrella.h deleted file mode 120000 index b78bb68..0000000 --- a/Pods/Headers/Public/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap b/Pods/Headers/Public/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap deleted file mode 120000 index 5868dd9..0000000 --- a/Pods/Headers/Public/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/DDPersistenceKit_Private/DDPersistenceKit_Private-umbrella.h b/Pods/Headers/Public/DDPersistenceKit_Private/DDPersistenceKit_Private-umbrella.h deleted file mode 120000 index 2dfa55b..0000000 --- a/Pods/Headers/Public/DDPersistenceKit_Private/DDPersistenceKit_Private-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDPersistenceKit_Private/DDPersistenceKit_Private-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDPersistenceKit_Private/DDPersistenceKit_Private.modulemap b/Pods/Headers/Public/DDPersistenceKit_Private/DDPersistenceKit_Private.modulemap deleted file mode 120000 index 9b67e74..0000000 --- a/Pods/Headers/Public/DDPersistenceKit_Private/DDPersistenceKit_Private.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDPersistenceKit_Private/DDPersistenceKit_Private.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/DDProgressHUDKit_Private/DDProgressHUDKit_Private-umbrella.h b/Pods/Headers/Public/DDProgressHUDKit_Private/DDProgressHUDKit_Private-umbrella.h deleted file mode 120000 index c3cbb19..0000000 --- a/Pods/Headers/Public/DDProgressHUDKit_Private/DDProgressHUDKit_Private-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDProgressHUDKit_Private/DDProgressHUDKit_Private-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap b/Pods/Headers/Public/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap deleted file mode 120000 index c6d0c39..0000000 --- a/Pods/Headers/Public/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/DDProgressHUDKit_Private/MBProgressHUD.h b/Pods/Headers/Public/DDProgressHUDKit_Private/MBProgressHUD.h deleted file mode 120000 index 2161d9c..0000000 --- a/Pods/Headers/Public/DDProgressHUDKit_Private/MBProgressHUD.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDProgressHUDKit_Private/DDProgressHUDKit_Private/Classes/MBProgressHUD.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDToastKit_Private/DDToastKit_Private-umbrella.h b/Pods/Headers/Public/DDToastKit_Private/DDToastKit_Private-umbrella.h deleted file mode 120000 index ab682b4..0000000 --- a/Pods/Headers/Public/DDToastKit_Private/DDToastKit_Private-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDToastKit_Private/DDToastKit_Private-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDToastKit_Private/DDToastKit_Private.modulemap b/Pods/Headers/Public/DDToastKit_Private/DDToastKit_Private.modulemap deleted file mode 120000 index a094170..0000000 --- a/Pods/Headers/Public/DDToastKit_Private/DDToastKit_Private.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDToastKit_Private/DDToastKit_Private.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/DDUIGestureRecognizer/DDUIGestureRecognizer-umbrella.h b/Pods/Headers/Public/DDUIGestureRecognizer/DDUIGestureRecognizer-umbrella.h deleted file mode 120000 index 0523516..0000000 --- a/Pods/Headers/Public/DDUIGestureRecognizer/DDUIGestureRecognizer-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDUIGestureRecognizer/DDUIGestureRecognizer-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDUIGestureRecognizer/DDUIGestureRecognizer.modulemap b/Pods/Headers/Public/DDUIGestureRecognizer/DDUIGestureRecognizer.modulemap deleted file mode 120000 index da7a6db..0000000 --- a/Pods/Headers/Public/DDUIGestureRecognizer/DDUIGestureRecognizer.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDUIGestureRecognizer/DDUIGestureRecognizer.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/DDUIKit/DDUIKit-umbrella.h b/Pods/Headers/Public/DDUIKit/DDUIKit-umbrella.h deleted file mode 120000 index 46076e3..0000000 --- a/Pods/Headers/Public/DDUIKit/DDUIKit-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDUIKit/DDUIKit-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDUIKit/DDUIKit.modulemap b/Pods/Headers/Public/DDUIKit/DDUIKit.modulemap deleted file mode 120000 index 639bedf..0000000 --- a/Pods/Headers/Public/DDUIKit/DDUIKit.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDUIKit/DDUIKit.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private-umbrella.h b/Pods/Headers/Public/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private-umbrella.h deleted file mode 120000 index 5bd7083..0000000 --- a/Pods/Headers/Public/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private.modulemap b/Pods/Headers/Public/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private.modulemap deleted file mode 120000 index 4768d2d..0000000 --- a/Pods/Headers/Public/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private-umbrella.h b/Pods/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private-umbrella.h deleted file mode 120000 index 0da7439..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDWebImageKit_Private/DDWebImageKit_Private-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap b/Pods/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap deleted file mode 120000 index 56c6237..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDWebImageKit_Private/DDWebImageKit_Private.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/MKAnnotationView+WebCache.h b/Pods/Headers/Public/DDWebImageKit_Private/MKAnnotationView+WebCache.h deleted file mode 120000 index e7bfdbd..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/MKAnnotationView+WebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImageMapKit/MapKit/MKAnnotationView+WebCache.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/NSButton+WebCache.h b/Pods/Headers/Public/DDWebImageKit_Private/NSButton+WebCache.h deleted file mode 120000 index 41d47f9..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/NSButton+WebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/NSButton+WebCache.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/NSData+ImageContentType.h b/Pods/Headers/Public/DDWebImageKit_Private/NSData+ImageContentType.h deleted file mode 120000 index 973b15b..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/NSData+ImageContentType.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/NSData+ImageContentType.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/NSImage+Compatibility.h b/Pods/Headers/Public/DDWebImageKit_Private/NSImage+Compatibility.h deleted file mode 120000 index b4c6c19..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/NSImage+Compatibility.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/NSImage+Compatibility.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDAnimatedImage.h b/Pods/Headers/Public/DDWebImageKit_Private/SDAnimatedImage.h deleted file mode 120000 index aeaa455..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDAnimatedImage.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImage.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDAnimatedImagePlayer.h b/Pods/Headers/Public/DDWebImageKit_Private/SDAnimatedImagePlayer.h deleted file mode 120000 index dc95ccd..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDAnimatedImagePlayer.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImagePlayer.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDAnimatedImageRep.h b/Pods/Headers/Public/DDWebImageKit_Private/SDAnimatedImageRep.h deleted file mode 120000 index 8a1c020..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDAnimatedImageRep.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageRep.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDAnimatedImageView+WebCache.h b/Pods/Headers/Public/DDWebImageKit_Private/SDAnimatedImageView+WebCache.h deleted file mode 120000 index 5f0fa30..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDAnimatedImageView+WebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageView+WebCache.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDAnimatedImageView.h b/Pods/Headers/Public/DDWebImageKit_Private/SDAnimatedImageView.h deleted file mode 120000 index 4c8988e..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDAnimatedImageView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageView.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDDiskCache.h b/Pods/Headers/Public/DDWebImageKit_Private/SDDiskCache.h deleted file mode 120000 index fe72f63..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDDiskCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDDiskCache.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDGraphicsImageRenderer.h b/Pods/Headers/Public/DDWebImageKit_Private/SDGraphicsImageRenderer.h deleted file mode 120000 index ae7ad70..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDGraphicsImageRenderer.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDGraphicsImageRenderer.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDImageAPNGCoder.h b/Pods/Headers/Public/DDWebImageKit_Private/SDImageAPNGCoder.h deleted file mode 120000 index 67e3f67..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDImageAPNGCoder.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageAPNGCoder.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDImageAWebPCoder.h b/Pods/Headers/Public/DDWebImageKit_Private/SDImageAWebPCoder.h deleted file mode 120000 index 8a44d76..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDImageAWebPCoder.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageAWebPCoder.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDImageCache.h b/Pods/Headers/Public/DDWebImageKit_Private/SDImageCache.h deleted file mode 120000 index d7ec674..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDImageCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCache.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDImageCacheConfig.h b/Pods/Headers/Public/DDWebImageKit_Private/SDImageCacheConfig.h deleted file mode 120000 index 6a09962..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDImageCacheConfig.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCacheConfig.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDImageCacheDefine.h b/Pods/Headers/Public/DDWebImageKit_Private/SDImageCacheDefine.h deleted file mode 120000 index b2714a2..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDImageCacheDefine.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCacheDefine.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDImageCachesManager.h b/Pods/Headers/Public/DDWebImageKit_Private/SDImageCachesManager.h deleted file mode 120000 index 532da3d..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDImageCachesManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCachesManager.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDImageCoder.h b/Pods/Headers/Public/DDWebImageKit_Private/SDImageCoder.h deleted file mode 120000 index 927487e..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDImageCoder.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCoder.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDImageCoderHelper.h b/Pods/Headers/Public/DDWebImageKit_Private/SDImageCoderHelper.h deleted file mode 120000 index 43cfef1..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDImageCoderHelper.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCoderHelper.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDImageCodersManager.h b/Pods/Headers/Public/DDWebImageKit_Private/SDImageCodersManager.h deleted file mode 120000 index 6597ec1..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDImageCodersManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCodersManager.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDImageFrame.h b/Pods/Headers/Public/DDWebImageKit_Private/SDImageFrame.h deleted file mode 120000 index 79329b3..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDImageFrame.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageFrame.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDImageGIFCoder.h b/Pods/Headers/Public/DDWebImageKit_Private/SDImageGIFCoder.h deleted file mode 120000 index 98df5a4..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDImageGIFCoder.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageGIFCoder.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDImageGraphics.h b/Pods/Headers/Public/DDWebImageKit_Private/SDImageGraphics.h deleted file mode 120000 index 400489e..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDImageGraphics.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageGraphics.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDImageHEICCoder.h b/Pods/Headers/Public/DDWebImageKit_Private/SDImageHEICCoder.h deleted file mode 120000 index 30a45e7..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDImageHEICCoder.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageHEICCoder.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDImageIOAnimatedCoder.h b/Pods/Headers/Public/DDWebImageKit_Private/SDImageIOAnimatedCoder.h deleted file mode 120000 index aca6183..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDImageIOAnimatedCoder.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageIOAnimatedCoder.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDImageIOCoder.h b/Pods/Headers/Public/DDWebImageKit_Private/SDImageIOCoder.h deleted file mode 120000 index 4b1575d..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDImageIOCoder.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageIOCoder.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDImageLoader.h b/Pods/Headers/Public/DDWebImageKit_Private/SDImageLoader.h deleted file mode 120000 index 805d60a..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDImageLoader.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageLoader.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDImageLoadersManager.h b/Pods/Headers/Public/DDWebImageKit_Private/SDImageLoadersManager.h deleted file mode 120000 index f60a6ba..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDImageLoadersManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageLoadersManager.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDImageTransformer.h b/Pods/Headers/Public/DDWebImageKit_Private/SDImageTransformer.h deleted file mode 120000 index 09aff94..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDImageTransformer.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageTransformer.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDMemoryCache.h b/Pods/Headers/Public/DDWebImageKit_Private/SDMemoryCache.h deleted file mode 120000 index a38c4c0..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDMemoryCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDMemoryCache.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImage.h b/Pods/Headers/Public/DDWebImageKit_Private/SDWebImage.h deleted file mode 120000 index d58e442..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImage.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/SDWebImage.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageCacheKeyFilter.h b/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageCacheKeyFilter.h deleted file mode 120000 index 281af79..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageCacheKeyFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCacheKeyFilter.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageCacheSerializer.h b/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageCacheSerializer.h deleted file mode 120000 index cba2529..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageCacheSerializer.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCacheSerializer.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageCompat.h b/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageCompat.h deleted file mode 120000 index 6989f8e..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageCompat.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCompat.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageDefine.h b/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageDefine.h deleted file mode 120000 index 3da6e59..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageDefine.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDefine.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageDownloader.h b/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageDownloader.h deleted file mode 120000 index 023e812..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageDownloader.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloader.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageDownloaderConfig.h b/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageDownloaderConfig.h deleted file mode 120000 index 25238ff..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageDownloaderConfig.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderConfig.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageDownloaderDecryptor.h b/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageDownloaderDecryptor.h deleted file mode 120000 index b506d13..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageDownloaderDecryptor.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderDecryptor.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageDownloaderOperation.h b/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageDownloaderOperation.h deleted file mode 120000 index 9803305..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageDownloaderOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderOperation.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageDownloaderRequestModifier.h b/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageDownloaderRequestModifier.h deleted file mode 120000 index a51bfed..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageDownloaderRequestModifier.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderRequestModifier.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageDownloaderResponseModifier.h b/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageDownloaderResponseModifier.h deleted file mode 120000 index 21f84a4..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageDownloaderResponseModifier.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderResponseModifier.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageError.h b/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageError.h deleted file mode 120000 index fa4e47a..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageError.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageError.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageIndicator.h b/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageIndicator.h deleted file mode 120000 index feba5df..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageIndicator.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageIndicator.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageManager.h b/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageManager.h deleted file mode 120000 index 0984cb4..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageManager.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageMapKit.h b/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageMapKit.h deleted file mode 120000 index c0a052c..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageMapKit.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImageMapKit/SDWebImageMapKit.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageOperation.h b/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageOperation.h deleted file mode 120000 index d02b183..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageOperation.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageOptionsProcessor.h b/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageOptionsProcessor.h deleted file mode 120000 index f249e26..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageOptionsProcessor.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageOptionsProcessor.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImagePrefetcher.h b/Pods/Headers/Public/DDWebImageKit_Private/SDWebImagePrefetcher.h deleted file mode 120000 index e732a7d..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImagePrefetcher.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImagePrefetcher.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageTransition.h b/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageTransition.h deleted file mode 120000 index e710d16..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/SDWebImageTransition.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageTransition.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/UIButton+WebCache.h b/Pods/Headers/Public/DDWebImageKit_Private/UIButton+WebCache.h deleted file mode 120000 index a36aa0a..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/UIButton+WebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIButton+WebCache.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/UIImage+ExtendedCacheData.h b/Pods/Headers/Public/DDWebImageKit_Private/UIImage+ExtendedCacheData.h deleted file mode 120000 index c8e49ed..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/UIImage+ExtendedCacheData.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+ExtendedCacheData.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/UIImage+ForceDecode.h b/Pods/Headers/Public/DDWebImageKit_Private/UIImage+ForceDecode.h deleted file mode 120000 index a21dc67..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/UIImage+ForceDecode.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+ForceDecode.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/UIImage+GIF.h b/Pods/Headers/Public/DDWebImageKit_Private/UIImage+GIF.h deleted file mode 120000 index b456213..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/UIImage+GIF.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+GIF.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/UIImage+MemoryCacheCost.h b/Pods/Headers/Public/DDWebImageKit_Private/UIImage+MemoryCacheCost.h deleted file mode 120000 index 455f062..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/UIImage+MemoryCacheCost.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+MemoryCacheCost.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/UIImage+Metadata.h b/Pods/Headers/Public/DDWebImageKit_Private/UIImage+Metadata.h deleted file mode 120000 index a1ef730..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/UIImage+Metadata.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+Metadata.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/UIImage+MultiFormat.h b/Pods/Headers/Public/DDWebImageKit_Private/UIImage+MultiFormat.h deleted file mode 120000 index 0366165..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/UIImage+MultiFormat.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+MultiFormat.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/UIImage+Transform.h b/Pods/Headers/Public/DDWebImageKit_Private/UIImage+Transform.h deleted file mode 120000 index 21d4df8..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/UIImage+Transform.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+Transform.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/UIImageView+DDWebCache.h b/Pods/Headers/Public/DDWebImageKit_Private/UIImageView+DDWebCache.h deleted file mode 120000 index e075eb2..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/UIImageView+DDWebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/DDWebImage/UIImageView+DDWebCache.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/UIImageView+HighlightedWebCache.h b/Pods/Headers/Public/DDWebImageKit_Private/UIImageView+HighlightedWebCache.h deleted file mode 120000 index 82146d8..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/UIImageView+HighlightedWebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImageView+HighlightedWebCache.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/UIImageView+WebCache.h b/Pods/Headers/Public/DDWebImageKit_Private/UIImageView+WebCache.h deleted file mode 120000 index 2b21f49..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/UIImageView+WebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIImageView+WebCache.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/UIView+WebCache.h b/Pods/Headers/Public/DDWebImageKit_Private/UIView+WebCache.h deleted file mode 120000 index 9f671e3..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/UIView+WebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIView+WebCache.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDWebImageKit_Private/UIView+WebCacheOperation.h b/Pods/Headers/Public/DDWebImageKit_Private/UIView+WebCacheOperation.h deleted file mode 120000 index 60059fe..0000000 --- a/Pods/Headers/Public/DDWebImageKit_Private/UIView+WebCacheOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDWebImageKit_Private/DDWebImageKit_Private/Classes/SDWebImage/Core/UIView+WebCacheOperation.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private-umbrella.h b/Pods/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private-umbrella.h deleted file mode 120000 index d0781de..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDZFPlayerKit_Private/DDZFPlayerKit_Private-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap b/Pods/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap deleted file mode 120000 index 98ea258..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/UIImageView+ZFCache.h b/Pods/Headers/Public/DDZFPlayerKit_Private/UIImageView+ZFCache.h deleted file mode 120000 index 02e533d..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/UIImageView+ZFCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/UIImageView+ZFCache.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/UIScrollView+ZFPlayer.h b/Pods/Headers/Public/DDZFPlayerKit_Private/UIScrollView+ZFPlayer.h deleted file mode 120000 index b2f0b24..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/UIScrollView+ZFPlayer.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/UIScrollView+ZFPlayer.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/UIView+ZFFrame.h b/Pods/Headers/Public/DDZFPlayerKit_Private/UIView+ZFFrame.h deleted file mode 120000 index a8ea736..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/UIView+ZFFrame.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/UIView+ZFFrame.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFFloatView.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFFloatView.h deleted file mode 120000 index dca0da5..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFFloatView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFFloatView.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFIJKPlayerManager.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFIJKPlayerManager.h deleted file mode 120000 index 26950f1..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFIJKPlayerManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer/ZFIJKPlayerManager.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFKVOController.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFKVOController.h deleted file mode 120000 index 109696e..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFKVOController.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFKVOController.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFLandScapeControlView.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFLandScapeControlView.h deleted file mode 120000 index ede5424..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFLandScapeControlView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFLandScapeControlView.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFLandscapeViewController.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFLandscapeViewController.h deleted file mode 120000 index 14fd00c..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFLandscapeViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFLandscapeViewController.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFLandscapeWindow.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFLandscapeWindow.h deleted file mode 120000 index 90247a1..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFLandscapeWindow.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFLandscapeWindow.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFLoadingView.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFLoadingView.h deleted file mode 120000 index c6c2877..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFLoadingView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFLoadingView.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFNetworkSpeedMonitor.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFNetworkSpeedMonitor.h deleted file mode 120000 index 65aa71f..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFNetworkSpeedMonitor.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFNetworkSpeedMonitor.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFOrientationObserver.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFOrientationObserver.h deleted file mode 120000 index 1c689c2..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFOrientationObserver.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFOrientationObserver.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPersentInteractiveTransition.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPersentInteractiveTransition.h deleted file mode 120000 index a110432..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPersentInteractiveTransition.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPersentInteractiveTransition.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayer.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayer.h deleted file mode 120000 index 1fc766b..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayer.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayer.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerConst.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerConst.h deleted file mode 120000 index 5281570..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerConst.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerConst.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerControlView.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerControlView.h deleted file mode 120000 index 1cdf244..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerControlView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayerControlView.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerController.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerController.h deleted file mode 120000 index e014111..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerController.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerController.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerGestureControl.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerGestureControl.h deleted file mode 120000 index 91d61c5..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerGestureControl.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerGestureControl.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerLogManager.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerLogManager.h deleted file mode 120000 index 7a6e417..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerLogManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerLogManager.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerMediaControl.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerMediaControl.h deleted file mode 120000 index 149cbe1..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerMediaControl.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerMediaControl.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerMediaPlayback.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerMediaPlayback.h deleted file mode 120000 index 4760ac8..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerMediaPlayback.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerMediaPlayback.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerNotification.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerNotification.h deleted file mode 120000 index b106b6e..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerNotification.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerNotification.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerView.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerView.h deleted file mode 120000 index 82d2a29..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPlayerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPlayerView.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPortraitControlView.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPortraitControlView.h deleted file mode 120000 index 38a196d..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPortraitControlView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPortraitControlView.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPortraitViewController.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPortraitViewController.h deleted file mode 120000 index 3eb85cd..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPortraitViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPortraitViewController.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPresentTransition.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPresentTransition.h deleted file mode 120000 index 1740272..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFPresentTransition.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFPresentTransition.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFReachabilityManager.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFReachabilityManager.h deleted file mode 120000 index 914249a..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFReachabilityManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/Core/ZFReachabilityManager.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFSliderView.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFSliderView.h deleted file mode 120000 index 56ab5aa..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFSliderView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFSliderView.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFSmallFloatControlView.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFSmallFloatControlView.h deleted file mode 120000 index 1509c33..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFSmallFloatControlView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFSmallFloatControlView.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFSpeedLoadingView.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFSpeedLoadingView.h deleted file mode 120000 index e7b7b03..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFSpeedLoadingView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFSpeedLoadingView.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFUtilities.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFUtilities.h deleted file mode 120000 index 5d2a4ef..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFUtilities.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFUtilities.h \ No newline at end of file diff --git a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFVolumeBrightnessView.h b/Pods/Headers/Public/DDZFPlayerKit_Private/ZFVolumeBrightnessView.h deleted file mode 120000 index f8dc4f7..0000000 --- a/Pods/Headers/Public/DDZFPlayerKit_Private/ZFVolumeBrightnessView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFVolumeBrightnessView.h \ No newline at end of file diff --git a/Pods/Headers/Public/DynamicBlurView/DynamicBlurView-umbrella.h b/Pods/Headers/Public/DynamicBlurView/DynamicBlurView-umbrella.h deleted file mode 120000 index 0a623e6..0000000 --- a/Pods/Headers/Public/DynamicBlurView/DynamicBlurView-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DynamicBlurView/DynamicBlurView-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/DynamicBlurView/DynamicBlurView.h b/Pods/Headers/Public/DynamicBlurView/DynamicBlurView.h deleted file mode 120000 index 37b0754..0000000 --- a/Pods/Headers/Public/DynamicBlurView/DynamicBlurView.h +++ /dev/null @@ -1 +0,0 @@ -../../../DynamicBlurView/Sources/DynamicBlurView/DynamicBlurView.h \ No newline at end of file diff --git a/Pods/Headers/Public/DynamicBlurView/DynamicBlurView.modulemap b/Pods/Headers/Public/DynamicBlurView/DynamicBlurView.modulemap deleted file mode 120000 index 367c813..0000000 --- a/Pods/Headers/Public/DynamicBlurView/DynamicBlurView.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/DynamicBlurView/DynamicBlurView.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/ESTabBarController_swift/ESTabBarController-swift-umbrella.h b/Pods/Headers/Public/ESTabBarController_swift/ESTabBarController-swift-umbrella.h deleted file mode 120000 index f5360c2..0000000 --- a/Pods/Headers/Public/ESTabBarController_swift/ESTabBarController-swift-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/ESTabBarController-swift/ESTabBarController-swift-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/ESTabBarController_swift/ESTabBarController-swift.modulemap b/Pods/Headers/Public/ESTabBarController_swift/ESTabBarController-swift.modulemap deleted file mode 120000 index 461b07d..0000000 --- a/Pods/Headers/Public/ESTabBarController_swift/ESTabBarController-swift.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/ESTabBarController-swift/ESTabBarController-swift.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/IQKeyboardManagerSwift/IQKeyboardManagerSwift-umbrella.h b/Pods/Headers/Public/IQKeyboardManagerSwift/IQKeyboardManagerSwift-umbrella.h deleted file mode 120000 index 45a0c56..0000000 --- a/Pods/Headers/Public/IQKeyboardManagerSwift/IQKeyboardManagerSwift-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap b/Pods/Headers/Public/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap deleted file mode 120000 index 85803b1..0000000 --- a/Pods/Headers/Public/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryBaseCell.h b/Pods/Headers/Public/JXCategoryView/JXCategoryBaseCell.h deleted file mode 120000 index 71cb01c..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryBaseCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Base/JXCategoryBaseCell.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryBaseCellModel.h b/Pods/Headers/Public/JXCategoryView/JXCategoryBaseCellModel.h deleted file mode 120000 index 7f2afaf..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryBaseCellModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Base/JXCategoryBaseCellModel.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryBaseView.h b/Pods/Headers/Public/JXCategoryView/JXCategoryBaseView.h deleted file mode 120000 index a7e60bb..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryBaseView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Base/JXCategoryBaseView.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryCollectionView.h b/Pods/Headers/Public/JXCategoryView/JXCategoryCollectionView.h deleted file mode 120000 index 8e84ca8..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryCollectionView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Common/JXCategoryCollectionView.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryDotCell.h b/Pods/Headers/Public/JXCategoryView/JXCategoryDotCell.h deleted file mode 120000 index 3970df3..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryDotCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Dot/JXCategoryDotCell.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryDotCellModel.h b/Pods/Headers/Public/JXCategoryView/JXCategoryDotCellModel.h deleted file mode 120000 index 35d4888..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryDotCellModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Dot/JXCategoryDotCellModel.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryDotView.h b/Pods/Headers/Public/JXCategoryView/JXCategoryDotView.h deleted file mode 120000 index ebac707..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryDotView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Dot/JXCategoryDotView.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryFactory.h b/Pods/Headers/Public/JXCategoryView/JXCategoryFactory.h deleted file mode 120000 index 72e8255..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryFactory.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Common/JXCategoryFactory.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryImageCell.h b/Pods/Headers/Public/JXCategoryView/JXCategoryImageCell.h deleted file mode 120000 index 6d43555..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryImageCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Image/JXCategoryImageCell.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryImageCellModel.h b/Pods/Headers/Public/JXCategoryView/JXCategoryImageCellModel.h deleted file mode 120000 index 213c6b4..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryImageCellModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Image/JXCategoryImageCellModel.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryImageView.h b/Pods/Headers/Public/JXCategoryView/JXCategoryImageView.h deleted file mode 120000 index d7e264a..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryImageView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Image/JXCategoryImageView.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorBackgroundView.h b/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorBackgroundView.h deleted file mode 120000 index f78fa04..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorBackgroundView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorBackgroundView.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorBallView.h b/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorBallView.h deleted file mode 120000 index 9babcbf..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorBallView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorBallView.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorCell.h b/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorCell.h deleted file mode 120000 index 6696e4f..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Indicator/JXCategoryIndicatorCell.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorCellModel.h b/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorCellModel.h deleted file mode 120000 index 542aa28..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorCellModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Indicator/JXCategoryIndicatorCellModel.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorComponentView.h b/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorComponentView.h deleted file mode 120000 index 81c5388..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorComponentView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorComponentView.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorDotLineView.h b/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorDotLineView.h deleted file mode 120000 index 8235a5b..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorDotLineView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorDotLineView.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorImageView.h b/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorImageView.h deleted file mode 120000 index 1d828d0..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorImageView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorImageView.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorLineView.h b/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorLineView.h deleted file mode 120000 index 9ff88fc..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorLineView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorLineView.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorParamsModel.h b/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorParamsModel.h deleted file mode 120000 index 44fed4f..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorParamsModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Common/JXCategoryIndicatorParamsModel.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorProtocol.h b/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorProtocol.h deleted file mode 120000 index 1e71be2..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorProtocol.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Common/JXCategoryIndicatorProtocol.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorRainbowLineView.h b/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorRainbowLineView.h deleted file mode 120000 index defd7da..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorRainbowLineView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorRainbowLineView.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorTriangleView.h b/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorTriangleView.h deleted file mode 120000 index 2e94f98..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorTriangleView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorTriangleView.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorView.h b/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorView.h deleted file mode 120000 index 2686025..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryIndicatorView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Indicator/JXCategoryIndicatorView.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryListContainerRTLCell.h b/Pods/Headers/Public/JXCategoryView/JXCategoryListContainerRTLCell.h deleted file mode 120000 index 46867ae..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryListContainerRTLCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Common/JXCategoryListContainerRTLCell.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryListContainerView.h b/Pods/Headers/Public/JXCategoryView/JXCategoryListContainerView.h deleted file mode 120000 index 17d16ad..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryListContainerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Common/JXCategoryListContainerView.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryNumberCell.h b/Pods/Headers/Public/JXCategoryView/JXCategoryNumberCell.h deleted file mode 120000 index 347c3dc..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryNumberCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Number/JXCategoryNumberCell.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryNumberCellModel.h b/Pods/Headers/Public/JXCategoryView/JXCategoryNumberCellModel.h deleted file mode 120000 index 6f6630d..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryNumberCellModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Number/JXCategoryNumberCellModel.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryNumberView.h b/Pods/Headers/Public/JXCategoryView/JXCategoryNumberView.h deleted file mode 120000 index 7527df3..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryNumberView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Number/JXCategoryNumberView.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryTitleCell.h b/Pods/Headers/Public/JXCategoryView/JXCategoryTitleCell.h deleted file mode 120000 index 4d57bb8..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryTitleCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Title/JXCategoryTitleCell.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryTitleCellModel.h b/Pods/Headers/Public/JXCategoryView/JXCategoryTitleCellModel.h deleted file mode 120000 index 70f6631..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryTitleCellModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Title/JXCategoryTitleCellModel.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryTitleImageCell.h b/Pods/Headers/Public/JXCategoryView/JXCategoryTitleImageCell.h deleted file mode 120000 index 994ae08..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryTitleImageCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/TitleImage/JXCategoryTitleImageCell.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryTitleImageCellModel.h b/Pods/Headers/Public/JXCategoryView/JXCategoryTitleImageCellModel.h deleted file mode 120000 index b15e0c4..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryTitleImageCellModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/TitleImage/JXCategoryTitleImageCellModel.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryTitleImageView.h b/Pods/Headers/Public/JXCategoryView/JXCategoryTitleImageView.h deleted file mode 120000 index 1495739..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryTitleImageView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/TitleImage/JXCategoryTitleImageView.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryTitleVerticalZoomCell.h b/Pods/Headers/Public/JXCategoryView/JXCategoryTitleVerticalZoomCell.h deleted file mode 120000 index e68bf25..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryTitleVerticalZoomCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomCell.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryTitleVerticalZoomCellModel.h b/Pods/Headers/Public/JXCategoryView/JXCategoryTitleVerticalZoomCellModel.h deleted file mode 120000 index c28497f..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryTitleVerticalZoomCellModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomCellModel.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryTitleVerticalZoomView.h b/Pods/Headers/Public/JXCategoryView/JXCategoryTitleVerticalZoomView.h deleted file mode 120000 index 67b41dd..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryTitleVerticalZoomView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomView.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryTitleView.h b/Pods/Headers/Public/JXCategoryView/JXCategoryTitleView.h deleted file mode 120000 index 885f1d9..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryTitleView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Title/JXCategoryTitleView.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryView-umbrella.h b/Pods/Headers/Public/JXCategoryView/JXCategoryView-umbrella.h deleted file mode 120000 index e534125..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryView-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/JXCategoryView/JXCategoryView-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryView.h b/Pods/Headers/Public/JXCategoryView/JXCategoryView.h deleted file mode 120000 index 37f85be..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryView.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/JXCategoryView.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryView.modulemap b/Pods/Headers/Public/JXCategoryView/JXCategoryView.modulemap deleted file mode 120000 index 305d693..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryView.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/JXCategoryView/JXCategoryView.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryViewAnimator.h b/Pods/Headers/Public/JXCategoryView/JXCategoryViewAnimator.h deleted file mode 120000 index 78a8bd8..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryViewAnimator.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Common/JXCategoryViewAnimator.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/JXCategoryViewDefines.h b/Pods/Headers/Public/JXCategoryView/JXCategoryViewDefines.h deleted file mode 120000 index 037bd05..0000000 --- a/Pods/Headers/Public/JXCategoryView/JXCategoryViewDefines.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Common/JXCategoryViewDefines.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/RTLManager.h b/Pods/Headers/Public/JXCategoryView/RTLManager.h deleted file mode 120000 index 386a46e..0000000 --- a/Pods/Headers/Public/JXCategoryView/RTLManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/RLTManager/RTLManager.h \ No newline at end of file diff --git a/Pods/Headers/Public/JXCategoryView/UIColor+JXAdd.h b/Pods/Headers/Public/JXCategoryView/UIColor+JXAdd.h deleted file mode 120000 index 93e4b34..0000000 --- a/Pods/Headers/Public/JXCategoryView/UIColor+JXAdd.h +++ /dev/null @@ -1 +0,0 @@ -../../../JXCategoryView/Sources/Common/UIColor+JXAdd.h \ No newline at end of file diff --git a/Pods/Headers/Public/Kingfisher/Kingfisher-umbrella.h b/Pods/Headers/Public/Kingfisher/Kingfisher-umbrella.h deleted file mode 120000 index b03f24d..0000000 --- a/Pods/Headers/Public/Kingfisher/Kingfisher-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/Kingfisher/Kingfisher-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/Kingfisher/Kingfisher.modulemap b/Pods/Headers/Public/Kingfisher/Kingfisher.modulemap deleted file mode 120000 index 13f400b..0000000 --- a/Pods/Headers/Public/Kingfisher/Kingfisher.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/Kingfisher/Kingfisher.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/MJRefresh-umbrella.h b/Pods/Headers/Public/MJRefresh/MJRefresh-umbrella.h deleted file mode 120000 index 63c4152..0000000 --- a/Pods/Headers/Public/MJRefresh/MJRefresh-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/MJRefresh/MJRefresh-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/MJRefresh.h b/Pods/Headers/Public/MJRefresh/MJRefresh.h deleted file mode 120000 index d83fdd6..0000000 --- a/Pods/Headers/Public/MJRefresh/MJRefresh.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/MJRefresh.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/MJRefresh.modulemap b/Pods/Headers/Public/MJRefresh/MJRefresh.modulemap deleted file mode 120000 index f1b4753..0000000 --- a/Pods/Headers/Public/MJRefresh/MJRefresh.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/MJRefresh/MJRefresh.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/MJRefreshAutoFooter.h b/Pods/Headers/Public/MJRefresh/MJRefreshAutoFooter.h deleted file mode 120000 index 5bb1fbc..0000000 --- a/Pods/Headers/Public/MJRefresh/MJRefreshAutoFooter.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/MJRefreshAutoGifFooter.h b/Pods/Headers/Public/MJRefresh/MJRefreshAutoGifFooter.h deleted file mode 120000 index 1435437..0000000 --- a/Pods/Headers/Public/MJRefresh/MJRefreshAutoGifFooter.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/MJRefreshAutoNormalFooter.h b/Pods/Headers/Public/MJRefresh/MJRefreshAutoNormalFooter.h deleted file mode 120000 index 6b87abe..0000000 --- a/Pods/Headers/Public/MJRefresh/MJRefreshAutoNormalFooter.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/MJRefreshAutoStateFooter.h b/Pods/Headers/Public/MJRefresh/MJRefreshAutoStateFooter.h deleted file mode 120000 index 19b2053..0000000 --- a/Pods/Headers/Public/MJRefresh/MJRefreshAutoStateFooter.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/MJRefreshBackFooter.h b/Pods/Headers/Public/MJRefresh/MJRefreshBackFooter.h deleted file mode 120000 index 3df4973..0000000 --- a/Pods/Headers/Public/MJRefresh/MJRefreshBackFooter.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/MJRefreshBackGifFooter.h b/Pods/Headers/Public/MJRefresh/MJRefreshBackGifFooter.h deleted file mode 120000 index e5d5f96..0000000 --- a/Pods/Headers/Public/MJRefresh/MJRefreshBackGifFooter.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/MJRefreshBackNormalFooter.h b/Pods/Headers/Public/MJRefresh/MJRefreshBackNormalFooter.h deleted file mode 120000 index c578c7f..0000000 --- a/Pods/Headers/Public/MJRefresh/MJRefreshBackNormalFooter.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/MJRefreshBackStateFooter.h b/Pods/Headers/Public/MJRefresh/MJRefreshBackStateFooter.h deleted file mode 120000 index 3317188..0000000 --- a/Pods/Headers/Public/MJRefresh/MJRefreshBackStateFooter.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/MJRefreshComponent.h b/Pods/Headers/Public/MJRefresh/MJRefreshComponent.h deleted file mode 120000 index 35cb1b1..0000000 --- a/Pods/Headers/Public/MJRefresh/MJRefreshComponent.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Base/MJRefreshComponent.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/MJRefreshConfig.h b/Pods/Headers/Public/MJRefresh/MJRefreshConfig.h deleted file mode 120000 index f18429b..0000000 --- a/Pods/Headers/Public/MJRefresh/MJRefreshConfig.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/MJRefreshConfig.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/MJRefreshConst.h b/Pods/Headers/Public/MJRefresh/MJRefreshConst.h deleted file mode 120000 index 035954b..0000000 --- a/Pods/Headers/Public/MJRefresh/MJRefreshConst.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/MJRefreshConst.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/MJRefreshFooter.h b/Pods/Headers/Public/MJRefresh/MJRefreshFooter.h deleted file mode 120000 index 743dda2..0000000 --- a/Pods/Headers/Public/MJRefresh/MJRefreshFooter.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Base/MJRefreshFooter.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/MJRefreshGifHeader.h b/Pods/Headers/Public/MJRefresh/MJRefreshGifHeader.h deleted file mode 120000 index aa6afbd..0000000 --- a/Pods/Headers/Public/MJRefresh/MJRefreshGifHeader.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/MJRefreshHeader.h b/Pods/Headers/Public/MJRefresh/MJRefreshHeader.h deleted file mode 120000 index 3a38b26..0000000 --- a/Pods/Headers/Public/MJRefresh/MJRefreshHeader.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Base/MJRefreshHeader.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/MJRefreshNormalHeader.h b/Pods/Headers/Public/MJRefresh/MJRefreshNormalHeader.h deleted file mode 120000 index b5cc164..0000000 --- a/Pods/Headers/Public/MJRefresh/MJRefreshNormalHeader.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/MJRefreshNormalTrailer.h b/Pods/Headers/Public/MJRefresh/MJRefreshNormalTrailer.h deleted file mode 120000 index f561996..0000000 --- a/Pods/Headers/Public/MJRefresh/MJRefreshNormalTrailer.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Custom/Trailer/MJRefreshNormalTrailer.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/MJRefreshStateHeader.h b/Pods/Headers/Public/MJRefresh/MJRefreshStateHeader.h deleted file mode 120000 index 7bd25cf..0000000 --- a/Pods/Headers/Public/MJRefresh/MJRefreshStateHeader.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/MJRefreshStateTrailer.h b/Pods/Headers/Public/MJRefresh/MJRefreshStateTrailer.h deleted file mode 120000 index 7b54429..0000000 --- a/Pods/Headers/Public/MJRefresh/MJRefreshStateTrailer.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Custom/Trailer/MJRefreshStateTrailer.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/MJRefreshTrailer.h b/Pods/Headers/Public/MJRefresh/MJRefreshTrailer.h deleted file mode 120000 index a25342e..0000000 --- a/Pods/Headers/Public/MJRefresh/MJRefreshTrailer.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/Base/MJRefreshTrailer.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/NSBundle+MJRefresh.h b/Pods/Headers/Public/MJRefresh/NSBundle+MJRefresh.h deleted file mode 120000 index 2a628b4..0000000 --- a/Pods/Headers/Public/MJRefresh/NSBundle+MJRefresh.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/NSBundle+MJRefresh.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/UICollectionViewLayout+MJRefresh.h b/Pods/Headers/Public/MJRefresh/UICollectionViewLayout+MJRefresh.h deleted file mode 120000 index 151df84..0000000 --- a/Pods/Headers/Public/MJRefresh/UICollectionViewLayout+MJRefresh.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/UICollectionViewLayout+MJRefresh.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/UIScrollView+MJExtension.h b/Pods/Headers/Public/MJRefresh/UIScrollView+MJExtension.h deleted file mode 120000 index 1919784..0000000 --- a/Pods/Headers/Public/MJRefresh/UIScrollView+MJExtension.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/UIScrollView+MJExtension.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/UIScrollView+MJRefresh.h b/Pods/Headers/Public/MJRefresh/UIScrollView+MJRefresh.h deleted file mode 120000 index 47b703d..0000000 --- a/Pods/Headers/Public/MJRefresh/UIScrollView+MJRefresh.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/UIScrollView+MJRefresh.h \ No newline at end of file diff --git a/Pods/Headers/Public/MJRefresh/UIView+MJExtension.h b/Pods/Headers/Public/MJRefresh/UIView+MJExtension.h deleted file mode 120000 index 5f19813..0000000 --- a/Pods/Headers/Public/MJRefresh/UIView+MJExtension.h +++ /dev/null @@ -1 +0,0 @@ -../../../MJRefresh/MJRefresh/UIView+MJExtension.h \ No newline at end of file diff --git a/Pods/Headers/Public/PopupDialog/PopupDialog-umbrella.h b/Pods/Headers/Public/PopupDialog/PopupDialog-umbrella.h deleted file mode 120000 index b9aa82b..0000000 --- a/Pods/Headers/Public/PopupDialog/PopupDialog-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/PopupDialog/PopupDialog-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/PopupDialog/PopupDialog.modulemap b/Pods/Headers/Public/PopupDialog/PopupDialog.modulemap deleted file mode 120000 index 88ab9ff..0000000 --- a/Pods/Headers/Public/PopupDialog/PopupDialog.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/PopupDialog/PopupDialog.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/RxCocoa/RxCocoa-umbrella.h b/Pods/Headers/Public/RxCocoa/RxCocoa-umbrella.h deleted file mode 120000 index e4cad2b..0000000 --- a/Pods/Headers/Public/RxCocoa/RxCocoa-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/RxCocoa/RxCocoa-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/RxCocoa/RxCocoa.modulemap b/Pods/Headers/Public/RxCocoa/RxCocoa.modulemap deleted file mode 120000 index 112f0d8..0000000 --- a/Pods/Headers/Public/RxCocoa/RxCocoa.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/RxCocoa/RxCocoa.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/RxCocoa/RxCocoa/RxCocoa.h b/Pods/Headers/Public/RxCocoa/RxCocoa/RxCocoa.h deleted file mode 120000 index a7f5b5a..0000000 --- a/Pods/Headers/Public/RxCocoa/RxCocoa/RxCocoa.h +++ /dev/null @@ -1 +0,0 @@ -../../../../RxCocoa/RxCocoa/RxCocoa.h \ No newline at end of file diff --git a/Pods/Headers/Public/RxCocoa/RxCocoa/RxCocoaRuntime.h b/Pods/Headers/Public/RxCocoa/RxCocoa/RxCocoaRuntime.h deleted file mode 120000 index c8dd542..0000000 --- a/Pods/Headers/Public/RxCocoa/RxCocoa/RxCocoaRuntime.h +++ /dev/null @@ -1 +0,0 @@ -../../../../RxCocoa/RxCocoa/Runtime/include/RxCocoaRuntime.h \ No newline at end of file diff --git a/Pods/Headers/Public/RxCocoa/RxCocoa/_RX.h b/Pods/Headers/Public/RxCocoa/RxCocoa/_RX.h deleted file mode 120000 index b757b0a..0000000 --- a/Pods/Headers/Public/RxCocoa/RxCocoa/_RX.h +++ /dev/null @@ -1 +0,0 @@ -../../../../RxCocoa/RxCocoa/Runtime/include/_RX.h \ No newline at end of file diff --git a/Pods/Headers/Public/RxCocoa/RxCocoa/_RXDelegateProxy.h b/Pods/Headers/Public/RxCocoa/RxCocoa/_RXDelegateProxy.h deleted file mode 120000 index 68743c3..0000000 --- a/Pods/Headers/Public/RxCocoa/RxCocoa/_RXDelegateProxy.h +++ /dev/null @@ -1 +0,0 @@ -../../../../RxCocoa/RxCocoa/Runtime/include/_RXDelegateProxy.h \ No newline at end of file diff --git a/Pods/Headers/Public/RxCocoa/RxCocoa/_RXKVOObserver.h b/Pods/Headers/Public/RxCocoa/RxCocoa/_RXKVOObserver.h deleted file mode 120000 index d4fa1df..0000000 --- a/Pods/Headers/Public/RxCocoa/RxCocoa/_RXKVOObserver.h +++ /dev/null @@ -1 +0,0 @@ -../../../../RxCocoa/RxCocoa/Runtime/include/_RXKVOObserver.h \ No newline at end of file diff --git a/Pods/Headers/Public/RxCocoa/RxCocoa/_RXObjCRuntime.h b/Pods/Headers/Public/RxCocoa/RxCocoa/_RXObjCRuntime.h deleted file mode 120000 index 0b35e0b..0000000 --- a/Pods/Headers/Public/RxCocoa/RxCocoa/_RXObjCRuntime.h +++ /dev/null @@ -1 +0,0 @@ -../../../../RxCocoa/RxCocoa/Runtime/include/_RXObjCRuntime.h \ No newline at end of file diff --git a/Pods/Headers/Public/RxRelay/RxRelay-umbrella.h b/Pods/Headers/Public/RxRelay/RxRelay-umbrella.h deleted file mode 120000 index 004164f..0000000 --- a/Pods/Headers/Public/RxRelay/RxRelay-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/RxRelay/RxRelay-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/RxRelay/RxRelay.modulemap b/Pods/Headers/Public/RxRelay/RxRelay.modulemap deleted file mode 120000 index 902032c..0000000 --- a/Pods/Headers/Public/RxRelay/RxRelay.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/RxRelay/RxRelay.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/RxSwift/RxSwift-umbrella.h b/Pods/Headers/Public/RxSwift/RxSwift-umbrella.h deleted file mode 120000 index 889c027..0000000 --- a/Pods/Headers/Public/RxSwift/RxSwift-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/RxSwift/RxSwift-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/RxSwift/RxSwift.modulemap b/Pods/Headers/Public/RxSwift/RxSwift.modulemap deleted file mode 120000 index aacf559..0000000 --- a/Pods/Headers/Public/RxSwift/RxSwift.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/RxSwift/RxSwift.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/SnapKit/SnapKit-umbrella.h b/Pods/Headers/Public/SnapKit/SnapKit-umbrella.h deleted file mode 120000 index 2d70f44..0000000 --- a/Pods/Headers/Public/SnapKit/SnapKit-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/SnapKit/SnapKit-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/SnapKit/SnapKit.modulemap b/Pods/Headers/Public/SnapKit/SnapKit.modulemap deleted file mode 120000 index e8f9e65..0000000 --- a/Pods/Headers/Public/SnapKit/SnapKit.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/SnapKit/SnapKit.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/SwiftEntryKit/SwiftEntryKit-umbrella.h b/Pods/Headers/Public/SwiftEntryKit/SwiftEntryKit-umbrella.h deleted file mode 120000 index bae9d1c..0000000 --- a/Pods/Headers/Public/SwiftEntryKit/SwiftEntryKit-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/SwiftEntryKit/SwiftEntryKit-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/SwiftEntryKit/SwiftEntryKit.modulemap b/Pods/Headers/Public/SwiftEntryKit/SwiftEntryKit.modulemap deleted file mode 120000 index 62cc2ce..0000000 --- a/Pods/Headers/Public/SwiftEntryKit/SwiftEntryKit.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/SwiftEntryKit/SwiftEntryKit.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/SwiftyRSA/NSData+SHA.h b/Pods/Headers/Public/SwiftyRSA/NSData+SHA.h deleted file mode 120000 index 51d1e7d..0000000 --- a/Pods/Headers/Public/SwiftyRSA/NSData+SHA.h +++ /dev/null @@ -1 +0,0 @@ -../../../SwiftyRSA/Source/NSData+SHA.h \ No newline at end of file diff --git a/Pods/Headers/Public/SwiftyRSA/SwiftyRSA-umbrella.h b/Pods/Headers/Public/SwiftyRSA/SwiftyRSA-umbrella.h deleted file mode 120000 index 2723a17..0000000 --- a/Pods/Headers/Public/SwiftyRSA/SwiftyRSA-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/SwiftyRSA/SwiftyRSA-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/SwiftyRSA/SwiftyRSA.h b/Pods/Headers/Public/SwiftyRSA/SwiftyRSA.h deleted file mode 120000 index 92e46df..0000000 --- a/Pods/Headers/Public/SwiftyRSA/SwiftyRSA.h +++ /dev/null @@ -1 +0,0 @@ -../../../SwiftyRSA/Source/SwiftyRSA.h \ No newline at end of file diff --git a/Pods/Headers/Public/SwiftyRSA/SwiftyRSA.modulemap b/Pods/Headers/Public/SwiftyRSA/SwiftyRSA.modulemap deleted file mode 120000 index 585878e..0000000 --- a/Pods/Headers/Public/SwiftyRSA/SwiftyRSA.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/SwiftyRSA/SwiftyRSA.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/TYCyclePagerView/TYCyclePagerTransformLayout.h b/Pods/Headers/Public/TYCyclePagerView/TYCyclePagerTransformLayout.h deleted file mode 120000 index 9912254..0000000 --- a/Pods/Headers/Public/TYCyclePagerView/TYCyclePagerTransformLayout.h +++ /dev/null @@ -1 +0,0 @@ -../../../TYCyclePagerView/TYCyclePagerViewDemo/TYCyclePagerView/TYCyclePagerTransformLayout.h \ No newline at end of file diff --git a/Pods/Headers/Public/TYCyclePagerView/TYCyclePagerView-umbrella.h b/Pods/Headers/Public/TYCyclePagerView/TYCyclePagerView-umbrella.h deleted file mode 120000 index c58f827..0000000 --- a/Pods/Headers/Public/TYCyclePagerView/TYCyclePagerView-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/TYCyclePagerView/TYCyclePagerView-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/TYCyclePagerView/TYCyclePagerView.h b/Pods/Headers/Public/TYCyclePagerView/TYCyclePagerView.h deleted file mode 120000 index c7cf1bb..0000000 --- a/Pods/Headers/Public/TYCyclePagerView/TYCyclePagerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../TYCyclePagerView/TYCyclePagerViewDemo/TYCyclePagerView/TYCyclePagerView.h \ No newline at end of file diff --git a/Pods/Headers/Public/TYCyclePagerView/TYCyclePagerView.modulemap b/Pods/Headers/Public/TYCyclePagerView/TYCyclePagerView.modulemap deleted file mode 120000 index 7754882..0000000 --- a/Pods/Headers/Public/TYCyclePagerView/TYCyclePagerView.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/TYCyclePagerView/TYCyclePagerView.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/TYCyclePagerView/TYPageControl.h b/Pods/Headers/Public/TYCyclePagerView/TYPageControl.h deleted file mode 120000 index c1270e0..0000000 --- a/Pods/Headers/Public/TYCyclePagerView/TYPageControl.h +++ /dev/null @@ -1 +0,0 @@ -../../../TYCyclePagerView/TYCyclePagerViewDemo/TYCyclePagerView/TYPageControl.h \ No newline at end of file diff --git a/Pods/Headers/Public/ZLPhotoBrowser/ZLPhotoBrowser-umbrella.h b/Pods/Headers/Public/ZLPhotoBrowser/ZLPhotoBrowser-umbrella.h deleted file mode 120000 index f2572d2..0000000 --- a/Pods/Headers/Public/ZLPhotoBrowser/ZLPhotoBrowser-umbrella.h +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/ZLPhotoBrowser/ZLPhotoBrowser-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/ZLPhotoBrowser/ZLPhotoBrowser.h b/Pods/Headers/Public/ZLPhotoBrowser/ZLPhotoBrowser.h deleted file mode 120000 index 96d5c28..0000000 --- a/Pods/Headers/Public/ZLPhotoBrowser/ZLPhotoBrowser.h +++ /dev/null @@ -1 +0,0 @@ -../../../ZLPhotoBrowser/Sources/ZLPhotoBrowser.h \ No newline at end of file diff --git a/Pods/Headers/Public/ZLPhotoBrowser/ZLPhotoBrowser.modulemap b/Pods/Headers/Public/ZLPhotoBrowser/ZLPhotoBrowser.modulemap deleted file mode 120000 index a4f7e2f..0000000 --- a/Pods/Headers/Public/ZLPhotoBrowser/ZLPhotoBrowser.modulemap +++ /dev/null @@ -1 +0,0 @@ -../../../Target Support Files/ZLPhotoBrowser/ZLPhotoBrowser.modulemap \ No newline at end of file diff --git a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQNSArray+Sort.swift b/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQNSArray+Sort.swift deleted file mode 100644 index 1d3a4c2..0000000 --- a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQNSArray+Sort.swift +++ /dev/null @@ -1,57 +0,0 @@ -// -// IQNSArray+Sort.swift -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-20 Iftekhar Qurashi. -// -// 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 - UIKit contains Foundation -import UIKit - -/** -UIView.subviews sorting category. -*/ -@available(iOSApplicationExtension, unavailable) -internal extension Array where Element: UIView { - - /** - Returns the array by sorting the UIView's by their tag property. - */ - func sortedArrayByTag() -> [Element] { - - return sorted(by: { (obj1: Element, obj2: Element) -> Bool in - - return (obj1.tag < obj2.tag) - }) - } - - /** - Returns the array by sorting the UIView's by their tag property. - */ - func sortedArrayByPosition() -> [Element] { - - return sorted(by: { (obj1: Element, obj2: Element) -> Bool in - if obj1.frame.minY != obj2.frame.minY { - return obj1.frame.minY < obj2.frame.minY - } else { - return obj1.frame.minX < obj2.frame.minX - } - }) - } -} diff --git a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUIScrollView+Additions.swift b/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUIScrollView+Additions.swift deleted file mode 100644 index 93d495a..0000000 --- a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUIScrollView+Additions.swift +++ /dev/null @@ -1,117 +0,0 @@ -// -// IQUIScrollView+Additions.swift -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-20 Iftekhar Qurashi. -// -// 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 - UIKit contains Foundation -import UIKit - -@available(iOSApplicationExtension, unavailable) -@objc public extension UIScrollView { - - private struct AssociatedKeys { - static var shouldIgnoreScrollingAdjustment = "shouldIgnoreScrollingAdjustment" - static var shouldIgnoreContentInsetAdjustment = "shouldIgnoreContentInsetAdjustment" - static var shouldRestoreScrollViewContentOffset = "shouldRestoreScrollViewContentOffset" - } - - /** - If YES, then scrollview will ignore scrolling (simply not scroll it) for adjusting textfield position. Default is NO. - */ - var shouldIgnoreScrollingAdjustment: Bool { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.shouldIgnoreScrollingAdjustment) as? Bool ?? false - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.shouldIgnoreScrollingAdjustment, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - /** - If YES, then scrollview will ignore content inset adjustment (simply not updating it) when keyboard is shown. Default is NO. - */ - var shouldIgnoreContentInsetAdjustment: Bool { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.shouldIgnoreContentInsetAdjustment) as? Bool ?? false - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.shouldIgnoreContentInsetAdjustment, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - /** - To set customized distance from keyboard for textField/textView. Can't be less than zero - */ - var shouldRestoreScrollViewContentOffset: Bool { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.shouldRestoreScrollViewContentOffset) as? Bool ?? false - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.shouldRestoreScrollViewContentOffset, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } -} - -@available(iOSApplicationExtension, unavailable) -internal extension UITableView { - - func previousIndexPath(of indexPath: IndexPath) -> IndexPath? { - var previousRow = indexPath.row - 1 - var previousSection = indexPath.section - - //Fixing indexPath - if previousRow < 0 { - previousSection -= 1 - if previousSection >= 0 { - previousRow = self.numberOfRows(inSection: previousSection) - 1 - } - } - - if previousRow >= 0, previousSection >= 0 { - return IndexPath(row: previousRow, section: previousSection) - } else { - return nil - } - } -} - -@available(iOSApplicationExtension, unavailable) -internal extension UICollectionView { - - func previousIndexPath(of indexPath: IndexPath) -> IndexPath? { - var previousRow = indexPath.row - 1 - var previousSection = indexPath.section - - //Fixing indexPath - if previousRow < 0 { - previousSection -= 1 - if previousSection >= 0 { - previousRow = self.numberOfItems(inSection: previousSection) - 1 - } - } - - if previousRow >= 0, previousSection >= 0 { - return IndexPath(item: previousRow, section: previousSection) - } else { - return nil - } - } -} diff --git a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUITextFieldView+Additions.swift b/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUITextFieldView+Additions.swift deleted file mode 100644 index 3a14494..0000000 --- a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUITextFieldView+Additions.swift +++ /dev/null @@ -1,93 +0,0 @@ -// -// IQUITextFieldView+Additions.swift -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-20 Iftekhar Qurashi. -// -// 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 - UIKit contains Foundation -import UIKit - -/** -Uses default keyboard distance for textField. -*/ -@available(iOSApplicationExtension, unavailable) -public let kIQUseDefaultKeyboardDistance = CGFloat.greatestFiniteMagnitude - -/** -UIView category for managing UITextField/UITextView -*/ -@available(iOSApplicationExtension, unavailable) -@objc public extension UIView { - - private struct AssociatedKeys { - static var keyboardDistanceFromTextField = "keyboardDistanceFromTextField" - static var ignoreSwitchingByNextPrevious = "ignoreSwitchingByNextPrevious" - static var enableMode = "enableMode" - static var shouldResignOnTouchOutsideMode = "shouldResignOnTouchOutsideMode" - } - - /** - To set customized distance from keyboard for textField/textView. Can't be less than zero - */ - var keyboardDistanceFromTextField: CGFloat { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.keyboardDistanceFromTextField) as? CGFloat ?? kIQUseDefaultKeyboardDistance - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.keyboardDistanceFromTextField, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - /** - If shouldIgnoreSwitchingByNextPrevious is true then library will ignore this textField/textView while moving to other textField/textView using keyboard toolbar next previous buttons. Default is false - */ - var ignoreSwitchingByNextPrevious: Bool { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.ignoreSwitchingByNextPrevious) as? Bool ?? false - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.ignoreSwitchingByNextPrevious, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - /** - Override Enable/disable managing distance between keyboard and textField behaviour for this particular textField. - */ - var enableMode: IQEnableMode { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.enableMode) as? IQEnableMode ?? .default - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.enableMode, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - /** - Override resigns Keyboard on touching outside of UITextField/View behaviour for this particular textField. - */ - var shouldResignOnTouchOutsideMode: IQEnableMode { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.shouldResignOnTouchOutsideMode) as? IQEnableMode ?? .default - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.shouldResignOnTouchOutsideMode, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } -} diff --git a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUIView+Hierarchy.swift b/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUIView+Hierarchy.swift deleted file mode 100644 index d824c32..0000000 --- a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUIView+Hierarchy.swift +++ /dev/null @@ -1,324 +0,0 @@ -// -// IQUIView+Hierarchy.swift -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-20 Iftekhar Qurashi. -// -// 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 - -/** -UIView hierarchy category. -*/ -@available(iOSApplicationExtension, unavailable) -@objc public extension UIView { - - // MARK: viewControllers - - /** - Returns the UIViewController object that manages the receiver. - */ - func viewContainingController() -> UIViewController? { - - var nextResponder: UIResponder? = self - - repeat { - nextResponder = nextResponder?.next - - if let viewController = nextResponder as? UIViewController { - return viewController - } - - } while nextResponder != nil - - return nil - } - - /** - Returns the topMost UIViewController object in hierarchy. - */ - func topMostController() -> UIViewController? { - - var controllersHierarchy = [UIViewController]() - - if var topController = window?.rootViewController { - controllersHierarchy.append(topController) - - while let presented = topController.presentedViewController { - - topController = presented - - controllersHierarchy.append(presented) - } - - var matchController: UIResponder? = viewContainingController() - - while let mController = matchController as? UIViewController, controllersHierarchy.contains(mController) == false { - - repeat { - matchController = matchController?.next - - } while matchController != nil && matchController is UIViewController == false - } - - return matchController as? UIViewController - - } else { - return viewContainingController() - } - } - - /** - Returns the UIViewController object that is actually the parent of this object. Most of the time it's the viewController object which actually contains it, but result may be different if it's viewController is added as childViewController of another viewController. - */ - func parentContainerViewController() -> UIViewController? { - - var matchController = viewContainingController() - var parentContainerViewController: UIViewController? - - if var navController = matchController?.navigationController { - - while let parentNav = navController.navigationController { - navController = parentNav - } - - var parentController: UIViewController = navController - - while let parent = parentController.parent, - (parent.isKind(of: UINavigationController.self) == false && - parent.isKind(of: UITabBarController.self) == false && - parent.isKind(of: UISplitViewController.self) == false) { - - parentController = parent - } - - if navController == parentController { - parentContainerViewController = navController.topViewController - } else { - parentContainerViewController = parentController - } - } else if let tabController = matchController?.tabBarController { - - if let navController = tabController.selectedViewController as? UINavigationController { - parentContainerViewController = navController.topViewController - } else { - parentContainerViewController = tabController.selectedViewController - } - } else { - while let parentController = matchController?.parent, - (parentController.isKind(of: UINavigationController.self) == false && - parentController.isKind(of: UITabBarController.self) == false && - parentController.isKind(of: UISplitViewController.self) == false) { - - matchController = parentController - } - - parentContainerViewController = matchController - } - - let finalController = parentContainerViewController?.parentIQContainerViewController() ?? parentContainerViewController - - return finalController - - } - - // MARK: Superviews/Subviews/Siglings - - /** - Returns the superView of provided class type. - - - @param classType class type of the object which is to be search in above hierarchy and return - - @param belowView view object in upper hierarchy where method should stop searching and return nil -*/ - func superviewOfClassType(_ classType: UIView.Type, belowView: UIView? = nil) -> UIView? { - - var superView = superview - - while let unwrappedSuperView = superView { - - if unwrappedSuperView.isKind(of: classType) { - - //If it's UIScrollView, then validating for special cases - if unwrappedSuperView.isKind(of: UIScrollView.self) { - - let classNameString: String = "\(type(of: unwrappedSuperView.self))" - - // If it's not UITableViewWrapperView class, this is internal class which is actually manage in UITableview. The speciality of this class is that it's superview is UITableView. - // If it's not UITableViewCellScrollView class, this is internal class which is actually manage in UITableviewCell. The speciality of this class is that it's superview is UITableViewCell. - //If it's not _UIQueuingScrollView class, actually we validate for _ prefix which usually used by Apple internal classes - if unwrappedSuperView.superview?.isKind(of: UITableView.self) == false, - unwrappedSuperView.superview?.isKind(of: UITableViewCell.self) == false, - classNameString.hasPrefix("_") == false { - return superView - } - } else { - return superView - } - } else if unwrappedSuperView == belowView { - return nil - } - - superView = unwrappedSuperView.superview - } - - return nil - } - - /** - Returns all siblings of the receiver which canBecomeFirstResponder. - */ - internal func responderSiblings() -> [UIView] { - - //Array of (UITextField/UITextView's). - var tempTextFields = [UIView]() - - // Getting all siblings - if let siblings = superview?.subviews { - for textField in siblings { - if (textField == self || textField.ignoreSwitchingByNextPrevious == false), textField.IQcanBecomeFirstResponder() { - tempTextFields.append(textField) - } - } - } - - return tempTextFields - } - - /** - Returns all deep subViews of the receiver which canBecomeFirstResponder. - */ - internal func deepResponderViews() -> [UIView] { - - //Array of (UITextField/UITextView's). - var textfields = [UIView]() - - for textField in subviews { - - if (textField == self || textField.ignoreSwitchingByNextPrevious == false), textField.IQcanBecomeFirstResponder() { - textfields.append(textField) - } - //Sometimes there are hidden or disabled views and textField inside them still recorded, so we added some more validations here (Bug ID: #458) - //Uncommented else (Bug ID: #625) - else if textField.subviews.count != 0, isUserInteractionEnabled, !isHidden, alpha != 0.0 { - for deepView in textField.deepResponderViews() { - textfields.append(deepView) - } - } - } - - //subviews are returning in opposite order. Sorting according the frames 'y'. - return textfields.sorted(by: { (view1: UIView, view2: UIView) -> Bool in - - let frame1 = view1.convert(view1.bounds, to: self) - let frame2 = view2.convert(view2.bounds, to: self) - - if frame1.minY != frame2.minY { - return frame1.minY < frame2.minY - } else { - return frame1.minX < frame2.minX - } - }) - } - - private func IQcanBecomeFirstResponder() -> Bool { - - var IQcanBecomeFirstResponder = false - - if self.conforms(to: UITextInput.self) { - // Setting toolbar to keyboard. - if let textView = self as? UITextView { - IQcanBecomeFirstResponder = textView.isEditable - } else if let textField = self as? UITextField { - IQcanBecomeFirstResponder = textField.isEnabled - } - } - - if IQcanBecomeFirstResponder { - IQcanBecomeFirstResponder = isUserInteractionEnabled && !isHidden && alpha != 0.0 && !isAlertViewTextField() && textFieldSearchBar() == nil - } - - return IQcanBecomeFirstResponder - } - - // MARK: Special TextFields - - /** - Returns searchBar if receiver object is UISearchBarTextField, otherwise return nil. - */ - internal func textFieldSearchBar() -> UISearchBar? { - - var responder: UIResponder? = self.next - - while let bar = responder { - - if let searchBar = bar as? UISearchBar { - return searchBar - } else if bar is UIViewController { - break - } - - responder = bar.next - } - - return nil - } - - /** - Returns YES if the receiver object is UIAlertSheetTextField, otherwise return NO. - */ - internal func isAlertViewTextField() -> Bool { - - var alertViewController: UIResponder? = viewContainingController() - - var isAlertViewTextField = false - - while let controller = alertViewController, !isAlertViewTextField { - - if controller.isKind(of: UIAlertController.self) { - isAlertViewTextField = true - break - } - - alertViewController = controller.next - } - - return isAlertViewTextField - } - - private func depth() -> Int { - var depth: Int = 0 - - if let superView = superview { - depth = superView.depth()+1 - } - - return depth - } - -} - -@available(iOSApplicationExtension, unavailable) -extension NSObject { - - internal func _IQDescription() -> String { - return "<\(self) \(Unmanaged.passUnretained(self).toOpaque())>" - } -} diff --git a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUIViewController+Additions.swift b/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUIViewController+Additions.swift deleted file mode 100644 index fadf69f..0000000 --- a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Categories/IQUIViewController+Additions.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// IQUIViewController+Additions.swift -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-20 Iftekhar Qurashi. -// -// 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 - -@available(iOSApplicationExtension, unavailable) -@objc extension UIViewController { - - private struct AssociatedKeys { - static var IQLayoutGuideConstraint = "IQLayoutGuideConstraint" - } - - /** - This method is provided to override by viewController's if the library lifts a viewController which you doesn't want to lift . This may happen if you have implemented side menu feature in your app and the library try to lift the side menu controller. Overriding this method in side menu class to return correct controller should fix the problem. - */ - open func parentIQContainerViewController() -> UIViewController? { - return self - } - - /** - To set customized distance from keyboard for textField/textView. Can't be less than zero - - @deprecated Due to change in core-logic of handling distance between textField and keyboard distance, this layout contraint tweak is no longer needed and things will just work out of the box regardless of constraint pinned with safeArea/layoutGuide/superview - */ - @available(*, deprecated, message: "Due to change in core-logic of handling distance between textField and keyboard distance, this layout contraint tweak is no longer needed and things will just work out of the box regardless of constraint pinned with safeArea/layoutGuide/superview.") - @IBOutlet public var IQLayoutGuideConstraint: NSLayoutConstraint? { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.IQLayoutGuideConstraint) as? NSLayoutConstraint - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.IQLayoutGuideConstraint, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } -} diff --git a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstants.swift b/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstants.swift deleted file mode 100644 index 3eea696..0000000 --- a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstants.swift +++ /dev/null @@ -1,150 +0,0 @@ -// -// IQKeyboardManagerConstants.swift -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-20 Iftekhar Qurashi. -// -// 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 - -// MARK: IQAutoToolbarManageBehaviour - -/** -`IQAutoToolbarBySubviews` -Creates Toolbar according to subview's hirarchy of Textfield's in view. - -`IQAutoToolbarByTag` -Creates Toolbar according to tag property of TextField's. - -`IQAutoToolbarByPosition` -Creates Toolbar according to the y,x position of textField in it's superview coordinate. -*/ -@available(iOSApplicationExtension, unavailable) -@objc public enum IQAutoToolbarManageBehaviour: Int { - case bySubviews - case byTag - case byPosition -} - -/** - `IQPreviousNextDisplayModeDefault` - Show NextPrevious when there are more than 1 textField otherwise hide. - - `IQPreviousNextDisplayModeAlwaysHide` - Do not show NextPrevious buttons in any case. - - `IQPreviousNextDisplayModeAlwaysShow` - Always show nextPrevious buttons, if there are more than 1 textField then both buttons will be visible but will be shown as disabled. - */ -@available(iOSApplicationExtension, unavailable) -@objc public enum IQPreviousNextDisplayMode: Int { - case `default` - case alwaysHide - case alwaysShow -} - -/** - `IQEnableModeDefault` - Pick default settings. - - `IQEnableModeEnabled` - setting is enabled. - - `IQEnableModeDisabled` - setting is disabled. - */ -@available(iOSApplicationExtension, unavailable) -@objc public enum IQEnableMode: Int { - case `default` - case enabled - case disabled -} - -/* - /---------------------------------------------------------------------------------------------------\ - \---------------------------------------------------------------------------------------------------/ - | iOS Notification Mechanism | - /---------------------------------------------------------------------------------------------------\ - \---------------------------------------------------------------------------------------------------/ - - ------------------------------------------------------------ - When UITextField become first responder - ------------------------------------------------------------ - - UITextFieldTextDidBeginEditingNotification (UITextField) - - UIKeyboardWillShowNotification - - UIKeyboardDidShowNotification - - ------------------------------------------------------------ - When UITextView become first responder - ------------------------------------------------------------ - - UIKeyboardWillShowNotification - - UITextViewTextDidBeginEditingNotification (UITextView) - - UIKeyboardDidShowNotification - - ------------------------------------------------------------ - When switching focus from UITextField to another UITextField - ------------------------------------------------------------ - - UITextFieldTextDidEndEditingNotification (UITextField1) - - UITextFieldTextDidBeginEditingNotification (UITextField2) - - UIKeyboardWillShowNotification - - UIKeyboardDidShowNotification - - ------------------------------------------------------------ - When switching focus from UITextView to another UITextView - ------------------------------------------------------------ - - UITextViewTextDidEndEditingNotification: (UITextView1) - - UIKeyboardWillShowNotification - - UITextViewTextDidBeginEditingNotification: (UITextView2) - - UIKeyboardDidShowNotification - - ------------------------------------------------------------ - When switching focus from UITextField to UITextView - ------------------------------------------------------------ - - UITextFieldTextDidEndEditingNotification (UITextField) - - UIKeyboardWillShowNotification - - UITextViewTextDidBeginEditingNotification (UITextView) - - UIKeyboardDidShowNotification - - ------------------------------------------------------------ - When switching focus from UITextView to UITextField - ------------------------------------------------------------ - - UITextViewTextDidEndEditingNotification (UITextView) - - UITextFieldTextDidBeginEditingNotification (UITextField) - - UIKeyboardWillShowNotification - - UIKeyboardDidShowNotification - - ------------------------------------------------------------ - When opening/closing UIKeyboard Predictive bar - ------------------------------------------------------------ - - UIKeyboardWillShowNotification - - UIKeyboardDidShowNotification - - ------------------------------------------------------------ - On orientation change - ------------------------------------------------------------ - - UIApplicationWillChangeStatusBarOrientationNotification - - UIKeyboardWillHideNotification - - UIKeyboardDidHideNotification - - UIApplicationDidChangeStatusBarOrientationNotification - - UIKeyboardWillShowNotification - - UIKeyboardDidShowNotification - - UIKeyboardWillShowNotification - - UIKeyboardDidShowNotification - - */ diff --git a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstantsInternal.swift b/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstantsInternal.swift deleted file mode 100644 index 595b2e5..0000000 --- a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstantsInternal.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// IQKeyboardManagerConstantsInternal.swift -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-20 Iftekhar Qurashi. -// -// 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 diff --git a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+Debug.swift b/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+Debug.swift deleted file mode 100644 index 8efe2fb..0000000 --- a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+Debug.swift +++ /dev/null @@ -1,111 +0,0 @@ -// -// IQKeyboardManager+Debug.swift -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-20 Iftekhar Qurashi. -// -// 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 - UIKit contains Foundation -import UIKit - -// MARK: Debugging & Developer options -@available(iOSApplicationExtension, unavailable) -public extension IQKeyboardManager { - - private struct AssociatedKeys { - static var enableDebugging = "enableDebugging" - } - - @objc var enableDebugging: Bool { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.enableDebugging) as? Bool ?? false - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.enableDebugging, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - /** - @warning Use below methods to completely enable/disable notifications registered by library internally. - Please keep in mind that library is totally dependent on NSNotification of UITextField, UITextField, Keyboard etc. - If you do unregisterAllNotifications then library will not work at all. You should only use below methods if you want to completedly disable all library functions. - You should use below methods at your own risk. - */ - @objc func registerAllNotifications() { - - // Registering for keyboard notification. - NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardDidShow(_:)), name: UIResponder.keyboardDidShowNotification, object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardDidHide(_:)), name: UIResponder.keyboardDidHideNotification, object: nil) - - // Registering for UITextField notification. - registerTextFieldViewClass(UITextField.self, didBeginEditingNotificationName: UITextField.textDidBeginEditingNotification.rawValue, didEndEditingNotificationName: UITextField.textDidEndEditingNotification.rawValue) - - // Registering for UITextView notification. - registerTextFieldViewClass(UITextView.self, didBeginEditingNotificationName: UITextView.textDidBeginEditingNotification.rawValue, didEndEditingNotificationName: UITextView.textDidEndEditingNotification.rawValue) - - // Registering for orientation changes notification - NotificationCenter.default.addObserver(self, selector: #selector(self.willChangeStatusBarOrientation(_:)), name: UIApplication.willChangeStatusBarOrientationNotification, object: UIApplication.shared) - } - - @objc func unregisterAllNotifications() { - - // Unregistering for keyboard notification. - NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil) - NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardDidShowNotification, object: nil) - NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil) - NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardDidHideNotification, object: nil) - - // Unregistering for UITextField notification. - unregisterTextFieldViewClass(UITextField.self, didBeginEditingNotificationName: UITextField.textDidBeginEditingNotification.rawValue, didEndEditingNotificationName: UITextField.textDidEndEditingNotification.rawValue) - - // Unregistering for UITextView notification. - unregisterTextFieldViewClass(UITextView.self, didBeginEditingNotificationName: UITextView.textDidBeginEditingNotification.rawValue, didEndEditingNotificationName: UITextView.textDidEndEditingNotification.rawValue) - - // Unregistering for orientation changes notification - NotificationCenter.default.removeObserver(self, name: UIApplication.willChangeStatusBarOrientationNotification, object: UIApplication.shared) - } - - struct Static { - static var indentation = 0 - } - - internal func showLog(_ logString: String, indentation: Int = 0) { - - guard enableDebugging else { - return - } - - if indentation < 0 { - Static.indentation = max(0, Static.indentation + indentation) - } - - var preLog = "IQKeyboardManager" - for _ in 0 ... Static.indentation { - preLog += "|\t" - } - - print(preLog + logString) - - if indentation > 0 { - Static.indentation += indentation - } - } -} diff --git a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+Internal.swift b/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+Internal.swift deleted file mode 100644 index cfa9413..0000000 --- a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+Internal.swift +++ /dev/null @@ -1,193 +0,0 @@ -// -// IQKeyboardManager+Internal.swift -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-20 Iftekhar Qurashi. -// -// 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 - UIKit contains Foundation -import UIKit - -@available(iOSApplicationExtension, unavailable) -internal extension IQKeyboardManager { - - /** Get all UITextField/UITextView siblings of textFieldView. */ - func responderViews() -> [UIView]? { - - var superConsideredView: UIView? - - //If find any consider responderView in it's upper hierarchy then will get deepResponderView. - for disabledClass in toolbarPreviousNextAllowedClasses { - superConsideredView = textFieldView?.superviewOfClassType(disabledClass) - if superConsideredView != nil { - break - } - } - - //If there is a superConsideredView in view's hierarchy, then fetching all it's subview that responds. No sorting for superConsideredView, it's by subView position. (Enhancement ID: #22) - if let view = superConsideredView { - return view.deepResponderViews() - } else { //Otherwise fetching all the siblings - - guard let textFields = textFieldView?.responderSiblings() else { - return nil - } - - //Sorting textFields according to behaviour - switch toolbarManageBehaviour { - //If autoToolbar behaviour is bySubviews, then returning it. - case .bySubviews: return textFields - - //If autoToolbar behaviour is by tag, then sorting it according to tag property. - case .byTag: return textFields.sortedArrayByTag() - - //If autoToolbar behaviour is by tag, then sorting it according to tag property. - case .byPosition: return textFields.sortedArrayByPosition() - } - } - } - - func privateIsEnabled() -> Bool { - - var isEnabled = enable - - let enableMode = textFieldView?.enableMode - - if enableMode == .enabled { - isEnabled = true - } else if enableMode == .disabled { - isEnabled = false - } else if var textFieldViewController = textFieldView?.viewContainingController() { - - //If it is searchBar textField embedded in Navigation Bar - if textFieldView?.textFieldSearchBar() != nil, let navController = textFieldViewController as? UINavigationController, let topController = navController.topViewController { - textFieldViewController = topController - } - - //If viewController is kind of enable viewController class, then assuming it's enabled. - if !isEnabled, enabledDistanceHandlingClasses.contains(where: { textFieldViewController.isKind(of: $0) }) { - isEnabled = true - } - - if isEnabled { - - //If viewController is kind of disabled viewController class, then assuming it's disabled. - if disabledDistanceHandlingClasses.contains(where: { textFieldViewController.isKind(of: $0) }) { - isEnabled = false - } - - //Special Controllers - if isEnabled { - - let classNameString: String = "\(type(of: textFieldViewController.self))" - - //_UIAlertControllerTextFieldViewController - if classNameString.contains("UIAlertController"), classNameString.hasSuffix("TextFieldViewController") { - isEnabled = false - } - } - } - } - - return isEnabled - } - - func privateIsEnableAutoToolbar() -> Bool { - - guard var textFieldViewController = textFieldView?.viewContainingController() else { - return enableAutoToolbar - } - - //If it is searchBar textField embedded in Navigation Bar - if textFieldView?.textFieldSearchBar() != nil, let navController = textFieldViewController as? UINavigationController, let topController = navController.topViewController { - textFieldViewController = topController - } - - var enableToolbar = enableAutoToolbar - - if !enableToolbar, enabledToolbarClasses.contains(where: { textFieldViewController.isKind(of: $0) }) { - enableToolbar = true - } - - if enableToolbar { - - //If found any toolbar disabled classes then return. - if disabledToolbarClasses.contains(where: { textFieldViewController.isKind(of: $0) }) { - enableToolbar = false - } - - //Special Controllers - if enableToolbar { - - let classNameString: String = "\(type(of: textFieldViewController.self))" - - //_UIAlertControllerTextFieldViewController - if classNameString.contains("UIAlertController"), classNameString.hasSuffix("TextFieldViewController") { - enableToolbar = false - } - } - } - - return enableToolbar - } - - func privateShouldResignOnTouchOutside() -> Bool { - - var shouldResign = shouldResignOnTouchOutside - - let enableMode = textFieldView?.shouldResignOnTouchOutsideMode - - if enableMode == .enabled { - shouldResign = true - } else if enableMode == .disabled { - shouldResign = false - } else if var textFieldViewController = textFieldView?.viewContainingController() { - - //If it is searchBar textField embedded in Navigation Bar - if textFieldView?.textFieldSearchBar() != nil, let navController = textFieldViewController as? UINavigationController, let topController = navController.topViewController { - textFieldViewController = topController - } - - //If viewController is kind of enable viewController class, then assuming shouldResignOnTouchOutside is enabled. - if !shouldResign, enabledTouchResignedClasses.contains(where: { textFieldViewController.isKind(of: $0) }) { - shouldResign = true - } - - if shouldResign { - - //If viewController is kind of disable viewController class, then assuming shouldResignOnTouchOutside is disable. - if disabledTouchResignedClasses.contains(where: { textFieldViewController.isKind(of: $0) }) { - shouldResign = false - } - - //Special Controllers - if shouldResign { - - let classNameString: String = "\(type(of: textFieldViewController.self))" - - //_UIAlertControllerTextFieldViewController - if classNameString.contains("UIAlertController"), classNameString.hasSuffix("TextFieldViewController") { - shouldResign = false - } - } - } - } - return shouldResign - } -} diff --git a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+OrientationNotification.swift b/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+OrientationNotification.swift deleted file mode 100644 index 6060626..0000000 --- a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+OrientationNotification.swift +++ /dev/null @@ -1,77 +0,0 @@ -// -// IQKeyboardManager+OrientationNotification.swift -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-20 Iftekhar Qurashi. -// -// 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 - UIKit contains Foundation -import UIKit - -// MARK: UIStatusBar Notification methods -@available(iOSApplicationExtension, unavailable) -internal extension IQKeyboardManager { - - /** UIApplicationWillChangeStatusBarOrientationNotification. Need to set the textView to it's original position. If any frame changes made. (Bug ID: #92)*/ - @objc func willChangeStatusBarOrientation(_ notification: Notification) { - - let currentStatusBarOrientation: UIInterfaceOrientation - #if swift(>=5.1) - if #available(iOS 13, *) { - currentStatusBarOrientation = keyWindow()?.windowScene?.interfaceOrientation ?? UIInterfaceOrientation.unknown - } else { - currentStatusBarOrientation = UIApplication.shared.statusBarOrientation - } - #else - currentStatusBarOrientation = UIApplication.shared.statusBarOrientation - #endif - - guard let statusBarOrientation = notification.userInfo?[UIApplication.statusBarOrientationUserInfoKey] as? Int, currentStatusBarOrientation.rawValue != statusBarOrientation else { - return - } - - let startTime = CACurrentMediaTime() - showLog("📱>>>>> \(#function) started >>>>>", indentation: 1) - showLog("Notification Object:\(notification.object ?? "NULL")") - - //If textViewContentInsetChanged is saved then restore it. - if let textView = textFieldView as? UIScrollView, textView.responds(to: #selector(getter: UITextView.isEditable)) { - - if isTextViewContentInsetChanged { - self.isTextViewContentInsetChanged = false - if textView.contentInset != self.startingTextViewContentInsets { - UIView.animate(withDuration: animationDuration, delay: 0, options: animationCurve, animations: { () -> Void in - - self.showLog("Restoring textView.contentInset to: \(self.startingTextViewContentInsets)") - - //Setting textField to it's initial contentInset - textView.contentInset = self.startingTextViewContentInsets - textView.scrollIndicatorInsets = self.startingTextViewScrollIndicatorInsets - - }, completion: { (_) -> Void in }) - } - } - } - - restorePosition() - - let elapsedTime = CACurrentMediaTime() - startTime - showLog("📱<<<<< \(#function) ended: \(elapsedTime) seconds <<<<<", indentation: -1) - } -} diff --git a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+Position.swift b/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+Position.swift deleted file mode 100644 index 16fd485..0000000 --- a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+Position.swift +++ /dev/null @@ -1,717 +0,0 @@ -// -// IQKeyboardManager+Position.swift -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-20 Iftekhar Qurashi. -// -// 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 - UIKit contains Foundation -import UIKit - -@available(iOSApplicationExtension, unavailable) -public extension IQKeyboardManager { - - private struct AssociatedKeys { - static var movedDistance = "movedDistance" - static var movedDistanceChanged = "movedDistanceChanged" - static var lastScrollView = "lastScrollView" - static var startingContentOffset = "startingContentOffset" - static var startingScrollIndicatorInsets = "startingScrollIndicatorInsets" - static var startingContentInsets = "startingContentInsets" - static var startingTextViewContentInsets = "startingTextViewContentInsets" - static var startingTextViewScrollIndicatorInsets = "startingTextViewScrollIndicatorInsets" - static var isTextViewContentInsetChanged = "isTextViewContentInsetChanged" - static var hasPendingAdjustRequest = "hasPendingAdjustRequest" - } - - /** - moved distance to the top used to maintain distance between keyboard and textField. Most of the time this will be a positive value. - */ - @objc private(set) var movedDistance: CGFloat { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.movedDistance) as? CGFloat ?? 0.0 - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.movedDistance, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - movedDistanceChanged?(movedDistance) - } - } - - /** - Will be called then movedDistance will be changed - */ - @objc var movedDistanceChanged: ((CGFloat) -> Void)? { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.movedDistanceChanged) as? ((CGFloat) -> Void) - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.movedDistanceChanged, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - movedDistanceChanged?(movedDistance) - } - } - - /** Variable to save lastScrollView that was scrolled. */ - internal weak var lastScrollView: UIScrollView? { - get { - return (objc_getAssociatedObject(self, &AssociatedKeys.lastScrollView) as? WeakObjectContainer)?.object as? UIScrollView - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.lastScrollView, WeakObjectContainer(object: newValue), .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - /** LastScrollView's initial contentOffset. */ - internal var startingContentOffset: CGPoint { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.startingContentOffset) as? CGPoint ?? IQKeyboardManager.kIQCGPointInvalid - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.startingContentOffset, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - /** LastScrollView's initial scrollIndicatorInsets. */ - internal var startingScrollIndicatorInsets: UIEdgeInsets { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.startingScrollIndicatorInsets) as? UIEdgeInsets ?? .init() - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.startingScrollIndicatorInsets, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - /** LastScrollView's initial contentInsets. */ - internal var startingContentInsets: UIEdgeInsets { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.startingContentInsets) as? UIEdgeInsets ?? .init() - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.startingContentInsets, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - /** used to adjust contentInset of UITextView. */ - internal var startingTextViewContentInsets: UIEdgeInsets { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.startingTextViewContentInsets) as? UIEdgeInsets ?? .init() - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.startingTextViewContentInsets, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - /** used to adjust scrollIndicatorInsets of UITextView. */ - internal var startingTextViewScrollIndicatorInsets: UIEdgeInsets { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.startingTextViewScrollIndicatorInsets) as? UIEdgeInsets ?? .init() - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.startingTextViewScrollIndicatorInsets, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - /** used with textView to detect a textFieldView contentInset is changed or not. (Bug ID: #92)*/ - internal var isTextViewContentInsetChanged: Bool { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.isTextViewContentInsetChanged) as? Bool ?? false - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.isTextViewContentInsetChanged, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - /** To know if we have any pending request to adjust view position. */ - private var hasPendingAdjustRequest: Bool { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.hasPendingAdjustRequest) as? Bool ?? false - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.hasPendingAdjustRequest, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - internal func optimizedAdjustPosition() { - if !hasPendingAdjustRequest { - hasPendingAdjustRequest = true - OperationQueue.main.addOperation { - self.adjustPosition() - self.hasPendingAdjustRequest = false - } - } - } - - /* Adjusting RootViewController's frame according to interface orientation. */ - private func adjustPosition() { - - // We are unable to get textField object while keyboard showing on WKWebView's textField. (Bug ID: #11) - guard hasPendingAdjustRequest, - let textFieldView = textFieldView, - let rootController = textFieldView.parentContainerViewController(), - let window = keyWindow(), - let textFieldViewRectInWindow = textFieldView.superview?.convert(textFieldView.frame, to: window), - let textFieldViewRectInRootSuperview = textFieldView.superview?.convert(textFieldView.frame, to: rootController.view?.superview) else { - return - } - - let startTime = CACurrentMediaTime() - showLog(">>>>> \(#function) started >>>>>", indentation: 1) - - // Getting RootViewOrigin. - var rootViewOrigin = rootController.view.frame.origin - - //Maintain keyboardDistanceFromTextField - var specialKeyboardDistanceFromTextField = textFieldView.keyboardDistanceFromTextField - - if let searchBar = textFieldView.textFieldSearchBar() { - specialKeyboardDistanceFromTextField = searchBar.keyboardDistanceFromTextField - } - - let newKeyboardDistanceFromTextField = (specialKeyboardDistanceFromTextField == kIQUseDefaultKeyboardDistance) ? keyboardDistanceFromTextField : specialKeyboardDistanceFromTextField - - var kbSize = keyboardFrame.size - - do { - var kbFrame = keyboardFrame - - kbFrame.origin.y -= newKeyboardDistanceFromTextField - kbFrame.size.height += newKeyboardDistanceFromTextField - - //Calculating actual keyboard covered size respect to window, keyboard frame may be different when hardware keyboard is attached (Bug ID: #469) (Bug ID: #381) (Bug ID: #1506) - let intersectRect = kbFrame.intersection(window.frame) - - if intersectRect.isNull { - kbSize = CGSize(width: kbFrame.size.width, height: 0) - } else { - kbSize = intersectRect.size - } - } - - let statusBarHeight: CGFloat - - let navigationBarAreaHeight: CGFloat - if let navigationController = rootController.navigationController { - navigationBarAreaHeight = navigationController.navigationBar.frame.maxY - } else { -#if swift(>=5.1) - if #available(iOS 13, *) { - statusBarHeight = window.windowScene?.statusBarManager?.statusBarFrame.height ?? 0 - } else { - statusBarHeight = UIApplication.shared.statusBarFrame.height - } -#else - statusBarHeight = UIApplication.shared.statusBarFrame.height -#endif - navigationBarAreaHeight = statusBarHeight - } - - let layoutAreaHeight: CGFloat = rootController.view.layoutMargins.bottom - - let isTextView: Bool - let isNonScrollableTextView: Bool - - if let textView = textFieldView as? UIScrollView, textFieldView.responds(to: #selector(getter: UITextView.isEditable)) { - - isTextView = true - isNonScrollableTextView = !textView.isScrollEnabled - } else { - isTextView = false - isNonScrollableTextView = false - } - - let topLayoutGuide: CGFloat = max(navigationBarAreaHeight, layoutAreaHeight) + 5 - - let bottomLayoutGuide: CGFloat = (isTextView && !isNonScrollableTextView) ? 0 : rootController.view.layoutMargins.bottom //Validation of textView for case where there is a tab bar at the bottom or running on iPhone X and textView is at the bottom. - let visibleHeight: CGFloat = window.frame.height-kbSize.height - - // Move positive = textField is hidden. - // Move negative = textField is showing. - // Calculating move position. - var move: CGFloat - - //Special case: when the textView is not scrollable, then we'll be scrolling to the bottom part and let hide the top part above - if isNonScrollableTextView { - move = textFieldViewRectInWindow.maxY - visibleHeight + bottomLayoutGuide - } else { - move = min(textFieldViewRectInRootSuperview.minY-(topLayoutGuide), textFieldViewRectInWindow.maxY - visibleHeight + bottomLayoutGuide) - } - - showLog("Need to move: \(move)") - - var superScrollView: UIScrollView? - var superView = textFieldView.superviewOfClassType(UIScrollView.self) as? UIScrollView - - //Getting UIScrollView whose scrolling is enabled. // (Bug ID: #285) - while let view = superView { - - if view.isScrollEnabled, !view.shouldIgnoreScrollingAdjustment { - superScrollView = view - break - } else { - // Getting it's superScrollView. // (Enhancement ID: #21, #24) - superView = view.superviewOfClassType(UIScrollView.self) as? UIScrollView - } - } - - //If there was a lastScrollView. // (Bug ID: #34) - if let lastScrollView = lastScrollView { - //If we can't find current superScrollView, then setting lastScrollView to it's original form. - if superScrollView == nil { - - if lastScrollView.contentInset != self.startingContentInsets { - showLog("Restoring contentInset to: \(startingContentInsets)") - UIView.animate(withDuration: animationDuration, delay: 0, options: animationCurve, animations: { () -> Void in - - lastScrollView.contentInset = self.startingContentInsets - lastScrollView.scrollIndicatorInsets = self.startingScrollIndicatorInsets - }) - } - - if lastScrollView.shouldRestoreScrollViewContentOffset, !lastScrollView.contentOffset.equalTo(startingContentOffset) { - showLog("Restoring contentOffset to: \(startingContentOffset)") - - let animatedContentOffset = textFieldView.superviewOfClassType(UIStackView.self, belowView: lastScrollView) != nil // (Bug ID: #1365, #1508, #1541) - - if animatedContentOffset { - lastScrollView.setContentOffset(startingContentOffset, animated: UIView.areAnimationsEnabled) - } else { - lastScrollView.contentOffset = startingContentOffset - } - } - - startingContentInsets = UIEdgeInsets() - startingScrollIndicatorInsets = UIEdgeInsets() - startingContentOffset = CGPoint.zero - self.lastScrollView = nil - } else if superScrollView != lastScrollView { //If both scrollView's are different, then reset lastScrollView to it's original frame and setting current scrollView as last scrollView. - - if lastScrollView.contentInset != self.startingContentInsets { - showLog("Restoring contentInset to: \(startingContentInsets)") - UIView.animate(withDuration: animationDuration, delay: 0, options: animationCurve, animations: { () -> Void in - - lastScrollView.contentInset = self.startingContentInsets - lastScrollView.scrollIndicatorInsets = self.startingScrollIndicatorInsets - }) - } - - if lastScrollView.shouldRestoreScrollViewContentOffset, !lastScrollView.contentOffset.equalTo(startingContentOffset) { - showLog("Restoring contentOffset to: \(startingContentOffset)") - - let animatedContentOffset = textFieldView.superviewOfClassType(UIStackView.self, belowView: lastScrollView) != nil // (Bug ID: #1365, #1508, #1541) - - if animatedContentOffset { - lastScrollView.setContentOffset(startingContentOffset, animated: UIView.areAnimationsEnabled) - } else { - lastScrollView.contentOffset = startingContentOffset - } - } - - self.lastScrollView = superScrollView - if let scrollView = superScrollView { - startingContentInsets = scrollView.contentInset - startingContentOffset = scrollView.contentOffset - - #if swift(>=5.1) - if #available(iOS 11.1, *) { - startingScrollIndicatorInsets = scrollView.verticalScrollIndicatorInsets - } else { - startingScrollIndicatorInsets = scrollView.scrollIndicatorInsets - } - #else - startingScrollIndicatorInsets = scrollView.scrollIndicatorInsets - #endif - } - - showLog("Saving ScrollView New contentInset: \(startingContentInsets) and contentOffset: \(startingContentOffset)") - } - //Else the case where superScrollView == lastScrollView means we are on same scrollView after switching to different textField. So doing nothing, going ahead - } else if let unwrappedSuperScrollView = superScrollView { //If there was no lastScrollView and we found a current scrollView. then setting it as lastScrollView. - lastScrollView = unwrappedSuperScrollView - startingContentInsets = unwrappedSuperScrollView.contentInset - startingContentOffset = unwrappedSuperScrollView.contentOffset - - #if swift(>=5.1) - if #available(iOS 11.1, *) { - startingScrollIndicatorInsets = unwrappedSuperScrollView.verticalScrollIndicatorInsets - } else { - startingScrollIndicatorInsets = unwrappedSuperScrollView.scrollIndicatorInsets - } - #else - startingScrollIndicatorInsets = unwrappedSuperScrollView.scrollIndicatorInsets - #endif - - showLog("Saving ScrollView contentInset: \(startingContentInsets) and contentOffset: \(startingContentOffset)") - } - - // Special case for ScrollView. - // If we found lastScrollView then setting it's contentOffset to show textField. - if let lastScrollView = lastScrollView { - //Saving - var lastView = textFieldView - var superScrollView = self.lastScrollView - - while let scrollView = superScrollView { - - var shouldContinue = false - - if move > 0 { - shouldContinue = move > (-scrollView.contentOffset.y - scrollView.contentInset.top) - - } else if let tableView = scrollView.superviewOfClassType(UITableView.self) as? UITableView { - - shouldContinue = scrollView.contentOffset.y > 0 - - if shouldContinue, let tableCell = textFieldView.superviewOfClassType(UITableViewCell.self) as? UITableViewCell, let indexPath = tableView.indexPath(for: tableCell), let previousIndexPath = tableView.previousIndexPath(of: indexPath) { - - let previousCellRect = tableView.rectForRow(at: previousIndexPath) - if !previousCellRect.isEmpty { - let previousCellRectInRootSuperview = tableView.convert(previousCellRect, to: rootController.view.superview) - - move = min(0, previousCellRectInRootSuperview.maxY - topLayoutGuide) - } - } - } else if let collectionView = scrollView.superviewOfClassType(UICollectionView.self) as? UICollectionView { - - shouldContinue = scrollView.contentOffset.y > 0 - - if shouldContinue, let collectionCell = textFieldView.superviewOfClassType(UICollectionViewCell.self) as? UICollectionViewCell, let indexPath = collectionView.indexPath(for: collectionCell), let previousIndexPath = collectionView.previousIndexPath(of: indexPath), let attributes = collectionView.layoutAttributesForItem(at: previousIndexPath) { - - let previousCellRect = attributes.frame - if !previousCellRect.isEmpty { - let previousCellRectInRootSuperview = collectionView.convert(previousCellRect, to: rootController.view.superview) - - move = min(0, previousCellRectInRootSuperview.maxY - topLayoutGuide) - } - } - } else { - - if isNonScrollableTextView { - shouldContinue = textFieldViewRectInWindow.maxY < visibleHeight + bottomLayoutGuide - - if shouldContinue { - move = min(0, textFieldViewRectInWindow.maxY - visibleHeight + bottomLayoutGuide) - } - } else { - shouldContinue = textFieldViewRectInRootSuperview.minY < topLayoutGuide - - if shouldContinue { - move = min(0, textFieldViewRectInRootSuperview.minY - topLayoutGuide) - } - } - } - - //Looping in upper hierarchy until we don't found any scrollView in it's upper hirarchy till UIWindow object. - if shouldContinue { - - var tempScrollView = scrollView.superviewOfClassType(UIScrollView.self) as? UIScrollView - var nextScrollView: UIScrollView? - while let view = tempScrollView { - - if view.isScrollEnabled, !view.shouldIgnoreScrollingAdjustment { - nextScrollView = view - break - } else { - tempScrollView = view.superviewOfClassType(UIScrollView.self) as? UIScrollView - } - } - - //Getting lastViewRect. - if let lastViewRect = lastView.superview?.convert(lastView.frame, to: scrollView) { - - //Calculating the expected Y offset from move and scrollView's contentOffset. - var shouldOffsetY = scrollView.contentOffset.y - min(scrollView.contentOffset.y, -move) - - //Rearranging the expected Y offset according to the view. - - if isNonScrollableTextView { - shouldOffsetY = min(shouldOffsetY, lastViewRect.maxY - visibleHeight + bottomLayoutGuide) - } else { - shouldOffsetY = min(shouldOffsetY, lastViewRect.minY) - } - - //[_textFieldView isKindOfClass:[UITextView class]] If is a UITextView type - //nextScrollView == nil If processing scrollView is last scrollView in upper hierarchy (there is no other scrollView upper hierrchy.) - //[_textFieldView isKindOfClass:[UITextView class]] If is a UITextView type - //shouldOffsetY >= 0 shouldOffsetY must be greater than in order to keep distance from navigationBar (Bug ID: #92) - if isTextView, !isNonScrollableTextView, - nextScrollView == nil, - shouldOffsetY >= 0 { - - // Converting Rectangle according to window bounds. - if let currentTextFieldViewRect = textFieldView.superview?.convert(textFieldView.frame, to: window) { - - //Calculating expected fix distance which needs to be managed from navigation bar - let expectedFixDistance: CGFloat = currentTextFieldViewRect.minY - topLayoutGuide - - //Now if expectedOffsetY (superScrollView.contentOffset.y + expectedFixDistance) is lower than current shouldOffsetY, which means we're in a position where navigationBar up and hide, then reducing shouldOffsetY with expectedOffsetY (superScrollView.contentOffset.y + expectedFixDistance) - shouldOffsetY = min(shouldOffsetY, scrollView.contentOffset.y + expectedFixDistance) - - //Setting move to 0 because now we don't want to move any view anymore (All will be managed by our contentInset logic. - move = 0 - } else { - //Subtracting the Y offset from the move variable, because we are going to change scrollView's contentOffset.y to shouldOffsetY. - move -= (shouldOffsetY-scrollView.contentOffset.y) - } - } else { - //Subtracting the Y offset from the move variable, because we are going to change scrollView's contentOffset.y to shouldOffsetY. - move -= (shouldOffsetY-scrollView.contentOffset.y) - } - - let newContentOffset = CGPoint(x: scrollView.contentOffset.x, y: shouldOffsetY) - - if scrollView.contentOffset.equalTo(newContentOffset) == false { - - showLog("old contentOffset: \(scrollView.contentOffset) new contentOffset: \(newContentOffset)") - self.showLog("Remaining Move: \(move)") - - //Getting problem while using `setContentOffset:animated:`, So I used animation API. - UIView.animate(withDuration: animationDuration, delay: 0, options: animationCurve, animations: { () -> Void in - - let animatedContentOffset = textFieldView.superviewOfClassType(UIStackView.self, belowView: scrollView) != nil // (Bug ID: #1365, #1508, #1541) - - if animatedContentOffset { - scrollView.setContentOffset(newContentOffset, animated: UIView.areAnimationsEnabled) - } else { - scrollView.contentOffset = newContentOffset - } - }, completion: { _ in - - if scrollView is UITableView || scrollView is UICollectionView { - //This will update the next/previous states - self.addToolbarIfRequired() - } - }) - } - } - - // Getting next lastView & superScrollView. - lastView = scrollView - superScrollView = nextScrollView - } else { - move = 0 - break - } - } - - //Updating contentInset - if let lastScrollViewRect = lastScrollView.superview?.convert(lastScrollView.frame, to: window), - lastScrollView.shouldIgnoreContentInsetAdjustment == false { - - var bottomInset: CGFloat = (kbSize.height)-(window.frame.height-lastScrollViewRect.maxY) - var bottomScrollIndicatorInset = bottomInset - newKeyboardDistanceFromTextField - - // Update the insets so that the scroll vew doesn't shift incorrectly when the offset is near the bottom of the scroll view. - bottomInset = max(startingContentInsets.bottom, bottomInset) - bottomScrollIndicatorInset = max(startingScrollIndicatorInsets.bottom, bottomScrollIndicatorInset) - - if #available(iOS 11, *) { - bottomInset -= lastScrollView.safeAreaInsets.bottom - bottomScrollIndicatorInset -= lastScrollView.safeAreaInsets.bottom - } - - var movedInsets = lastScrollView.contentInset - movedInsets.bottom = bottomInset - - if lastScrollView.contentInset != movedInsets { - showLog("old ContentInset: \(lastScrollView.contentInset) new ContentInset: \(movedInsets)") - - UIView.animate(withDuration: animationDuration, delay: 0, options: animationCurve, animations: { () -> Void in - lastScrollView.contentInset = movedInsets - - var newScrollIndicatorInset: UIEdgeInsets - - #if swift(>=5.1) - if #available(iOS 11.1, *) { - newScrollIndicatorInset = lastScrollView.verticalScrollIndicatorInsets - } else { - newScrollIndicatorInset = lastScrollView.scrollIndicatorInsets - } - #else - newScrollIndicatorInset = lastScrollView.scrollIndicatorInsets - #endif - - newScrollIndicatorInset.bottom = bottomScrollIndicatorInset - lastScrollView.scrollIndicatorInsets = newScrollIndicatorInset - }) - } - } - } - //Going ahead. No else if. - - //Special case for UITextView(Readjusting textView.contentInset when textView hight is too big to fit on screen) - //_lastScrollView If not having inside any scrollView, (now contentInset manages the full screen textView. - //[_textFieldView isKindOfClass:[UITextView class]] If is a UITextView type - if let textView = textFieldView as? UIScrollView, textView.isScrollEnabled, textFieldView.responds(to: #selector(getter: UITextView.isEditable)) { - - // CGRect rootSuperViewFrameInWindow = [_rootViewController.view.superview convertRect:_rootViewController.view.superview.bounds toView:keyWindow]; - // - // CGFloat keyboardOverlapping = CGRectGetMaxY(rootSuperViewFrameInWindow) - keyboardYPosition; - // - // CGFloat textViewHeight = MIN(CGRectGetHeight(_textFieldView.frame), (CGRectGetHeight(rootSuperViewFrameInWindow)-topLayoutGuide-keyboardOverlapping)); - - let keyboardYPosition = window.frame.height - (kbSize.height-newKeyboardDistanceFromTextField) - var rootSuperViewFrameInWindow = window.frame - if let rootSuperview = rootController.view.superview { - rootSuperViewFrameInWindow = rootSuperview.convert(rootSuperview.bounds, to: window) - } - - let keyboardOverlapping = rootSuperViewFrameInWindow.maxY - keyboardYPosition - - let textViewHeight = min(textView.frame.height, rootSuperViewFrameInWindow.height-topLayoutGuide-keyboardOverlapping) - - if textView.frame.size.height-textView.contentInset.bottom>textViewHeight { - //_isTextViewContentInsetChanged, If frame is not change by library in past, then saving user textView properties (Bug ID: #92) - if !self.isTextViewContentInsetChanged { - self.startingTextViewContentInsets = textView.contentInset - - #if swift(>=5.1) - if #available(iOS 11.1, *) { - self.startingTextViewScrollIndicatorInsets = textView.verticalScrollIndicatorInsets - } else { - self.startingTextViewScrollIndicatorInsets = textView.scrollIndicatorInsets - } - #else - self.startingTextViewScrollIndicatorInsets = textView.scrollIndicatorInsets - #endif - } - - self.isTextViewContentInsetChanged = true - - var newContentInset = textView.contentInset - newContentInset.bottom = textView.frame.size.height-textViewHeight - - if #available(iOS 11, *) { - newContentInset.bottom -= textView.safeAreaInsets.bottom - } - - if textView.contentInset != newContentInset { - self.showLog("\(textFieldView) Old UITextView.contentInset: \(textView.contentInset) New UITextView.contentInset: \(newContentInset)") - - UIView.animate(withDuration: animationDuration, delay: 0, options: animationCurve, animations: { () -> Void in - - textView.contentInset = newContentInset - textView.scrollIndicatorInsets = newContentInset - }, completion: { (_) -> Void in }) - } - } - } - - // +Positive or zero. - if move >= 0 { - - rootViewOrigin.y = max(rootViewOrigin.y - move, min(0, -(kbSize.height-newKeyboardDistanceFromTextField))) - - if rootController.view.frame.origin.equalTo(rootViewOrigin) == false { - showLog("Moving Upward") - - UIView.animate(withDuration: animationDuration, delay: 0, options: animationCurve, animations: { () -> Void in - - var rect = rootController.view.frame - rect.origin = rootViewOrigin - rootController.view.frame = rect - - //Animating content if needed (Bug ID: #204) - if self.layoutIfNeededOnUpdate { - //Animating content (Bug ID: #160) - rootController.view.setNeedsLayout() - rootController.view.layoutIfNeeded() - } - - self.showLog("Set \(rootController) origin to: \(rootViewOrigin)") - }) - } - - movedDistance = (topViewBeginOrigin.y-rootViewOrigin.y) - } else { // -Negative - let disturbDistance: CGFloat = rootViewOrigin.y-topViewBeginOrigin.y - - // disturbDistance Negative = frame disturbed. - // disturbDistance positive = frame not disturbed. - if disturbDistance <= 0 { - - rootViewOrigin.y -= max(move, disturbDistance) - - if rootController.view.frame.origin.equalTo(rootViewOrigin) == false { - showLog("Moving Downward") - // Setting adjusted rootViewRect - // Setting adjusted rootViewRect - - UIView.animate(withDuration: animationDuration, delay: 0, options: animationCurve, animations: { () -> Void in - - var rect = rootController.view.frame - rect.origin = rootViewOrigin - rootController.view.frame = rect - - //Animating content if needed (Bug ID: #204) - if self.layoutIfNeededOnUpdate { - //Animating content (Bug ID: #160) - rootController.view.setNeedsLayout() - rootController.view.layoutIfNeeded() - } - - self.showLog("Set \(rootController) origin to: \(rootViewOrigin)") - }) - } - - movedDistance = (topViewBeginOrigin.y-rootViewOrigin.y) - } - } - - let elapsedTime = CACurrentMediaTime() - startTime - showLog("<<<<< \(#function) ended: \(elapsedTime) seconds <<<<<", indentation: -1) - } - - internal func restorePosition() { - - hasPendingAdjustRequest = false - - // Setting rootViewController frame to it's original position. // (Bug ID: #18) - guard topViewBeginOrigin.equalTo(IQKeyboardManager.kIQCGPointInvalid) == false, let rootViewController = rootViewController else { - return - } - - if rootViewController.view.frame.origin.equalTo(self.topViewBeginOrigin) == false { - //Used UIViewAnimationOptionBeginFromCurrentState to minimize strange animations. - UIView.animate(withDuration: animationDuration, delay: 0, options: animationCurve, animations: { () -> Void in - - self.showLog("Restoring \(rootViewController) origin to: \(self.topViewBeginOrigin)") - - // Setting it's new frame - var rect = rootViewController.view.frame - rect.origin = self.topViewBeginOrigin - rootViewController.view.frame = rect - - //Animating content if needed (Bug ID: #204) - if self.layoutIfNeededOnUpdate { - //Animating content (Bug ID: #160) - rootViewController.view.setNeedsLayout() - rootViewController.view.layoutIfNeeded() - } - }) - } - - self.movedDistance = 0 - - if rootViewController.navigationController?.interactivePopGestureRecognizer?.state == .began { - self.rootViewControllerWhilePopGestureRecognizerActive = rootViewController - self.topViewBeginOriginWhilePopGestureRecognizerActive = self.topViewBeginOrigin - } - - self.rootViewController = nil - } -} diff --git a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+Toolbar.swift b/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+Toolbar.swift deleted file mode 100644 index c7b5835..0000000 --- a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+Toolbar.swift +++ /dev/null @@ -1,368 +0,0 @@ -// -// IQKeyboardManager+Toolbar.swift -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-20 Iftekhar Qurashi. -// -// 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 - UIKit contains Foundation -import UIKit - -@available(iOSApplicationExtension, unavailable) -public extension IQKeyboardManager { - - /** - Default tag for toolbar with Done button -1002. - */ - private static let kIQDoneButtonToolbarTag = -1002 - - /** - Default tag for toolbar with Previous/Next buttons -1005. - */ - private static let kIQPreviousNextButtonToolbarTag = -1005 - - /** Add toolbar if it is required to add on textFields and it's siblings. */ - internal func addToolbarIfRequired() { - - //Either there is no inputAccessoryView or if accessoryView is not appropriate for current situation(There is Previous/Next/Done toolbar). - guard let siblings = responderViews(), !siblings.isEmpty, - let textField = textFieldView, textField.responds(to: #selector(setter: UITextField.inputAccessoryView)), - (textField.inputAccessoryView == nil || - textField.inputAccessoryView?.tag == IQKeyboardManager.kIQPreviousNextButtonToolbarTag || - textField.inputAccessoryView?.tag == IQKeyboardManager.kIQDoneButtonToolbarTag) else { - return - } - - let startTime = CACurrentMediaTime() - showLog(">>>>> \(#function) started >>>>>", indentation: 1) - - showLog("Found \(siblings.count) responder sibling(s)") - - let rightConfiguration: IQBarButtonItemConfiguration - - if let doneBarButtonItemImage = toolbarDoneBarButtonItemImage { - rightConfiguration = IQBarButtonItemConfiguration(image: doneBarButtonItemImage, action: #selector(self.doneAction(_:))) - } else if let doneBarButtonItemText = toolbarDoneBarButtonItemText { - rightConfiguration = IQBarButtonItemConfiguration(title: doneBarButtonItemText, action: #selector(self.doneAction(_:))) - } else { - rightConfiguration = IQBarButtonItemConfiguration(barButtonSystemItem: .done, action: #selector(self.doneAction(_:))) - } - rightConfiguration.accessibilityLabel = toolbarDoneBarButtonItemAccessibilityLabel ?? "Done" - - // If only one object is found, then adding only Done button. - if (siblings.count <= 1 && previousNextDisplayMode == .default) || previousNextDisplayMode == .alwaysHide { - - textField.addKeyboardToolbarWithTarget(target: self, titleText: (shouldShowToolbarPlaceholder ? textField.drawingToolbarPlaceholder: nil), rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: nil, nextBarButtonConfiguration: nil) - - textField.inputAccessoryView?.tag = IQKeyboardManager.kIQDoneButtonToolbarTag // (Bug ID: #78) - - } else if previousNextDisplayMode == .default || previousNextDisplayMode == .alwaysShow { - - let prevConfiguration: IQBarButtonItemConfiguration - - if let doneBarButtonItemImage = toolbarPreviousBarButtonItemImage { - prevConfiguration = IQBarButtonItemConfiguration(image: doneBarButtonItemImage, action: #selector(self.previousAction(_:))) - } else if let doneBarButtonItemText = toolbarPreviousBarButtonItemText { - prevConfiguration = IQBarButtonItemConfiguration(title: doneBarButtonItemText, action: #selector(self.previousAction(_:))) - } else { - prevConfiguration = IQBarButtonItemConfiguration(image: (UIImage.keyboardPreviousImage() ?? UIImage()), action: #selector(self.previousAction(_:))) - } - prevConfiguration.accessibilityLabel = toolbarPreviousBarButtonItemAccessibilityLabel ?? "Previous" - - let nextConfiguration: IQBarButtonItemConfiguration - - if let doneBarButtonItemImage = toolbarNextBarButtonItemImage { - nextConfiguration = IQBarButtonItemConfiguration(image: doneBarButtonItemImage, action: #selector(self.nextAction(_:))) - } else if let doneBarButtonItemText = toolbarNextBarButtonItemText { - nextConfiguration = IQBarButtonItemConfiguration(title: doneBarButtonItemText, action: #selector(self.nextAction(_:))) - } else { - nextConfiguration = IQBarButtonItemConfiguration(image: (UIImage.keyboardNextImage() ?? UIImage()), action: #selector(self.nextAction(_:))) - } - nextConfiguration.accessibilityLabel = toolbarNextBarButtonItemAccessibilityLabel ?? "Next" - - textField.addKeyboardToolbarWithTarget(target: self, titleText: (shouldShowToolbarPlaceholder ? textField.drawingToolbarPlaceholder: nil), rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: prevConfiguration, nextBarButtonConfiguration: nextConfiguration) - - textField.inputAccessoryView?.tag = IQKeyboardManager.kIQPreviousNextButtonToolbarTag // (Bug ID: #78) - } - - let toolbar = textField.keyboardToolbar - - //Setting toolbar tintColor // (Enhancement ID: #30) - toolbar.tintColor = shouldToolbarUsesTextFieldTintColor ? textField.tintColor : toolbarTintColor - - // Setting toolbar to keyboard. - if let textFieldView = textField as? UITextInput { - - //Bar style according to keyboard appearance - switch textFieldView.keyboardAppearance { - - case .dark?: - toolbar.barStyle = .black - toolbar.barTintColor = nil - default: - toolbar.barStyle = .default - toolbar.barTintColor = toolbarBarTintColor - } - } - - //Setting toolbar title font. // (Enhancement ID: #30) - if shouldShowToolbarPlaceholder, !textField.shouldHideToolbarPlaceholder { - - //Updating placeholder font to toolbar. //(Bug ID: #148, #272) - if toolbar.titleBarButton.title == nil || - toolbar.titleBarButton.title != textField.drawingToolbarPlaceholder { - toolbar.titleBarButton.title = textField.drawingToolbarPlaceholder - } - - //Setting toolbar title font. // (Enhancement ID: #30) - toolbar.titleBarButton.titleFont = placeholderFont - - //Setting toolbar title color. // (Enhancement ID: #880) - toolbar.titleBarButton.titleColor = placeholderColor - - //Setting toolbar button title color. // (Enhancement ID: #880) - toolbar.titleBarButton.selectableTitleColor = placeholderButtonColor - - } else { - toolbar.titleBarButton.title = nil - } - - //In case of UITableView (Special), the next/previous buttons has to be refreshed everytime. (Bug ID: #56) - - textField.keyboardToolbar.previousBarButton.isEnabled = (siblings.first != textField) // If firstTextField, then previous should not be enabled. - textField.keyboardToolbar.nextBarButton.isEnabled = (siblings.last != textField) // If lastTextField then next should not be enaled. - - let elapsedTime = CACurrentMediaTime() - startTime - showLog("<<<<< \(#function) ended: \(elapsedTime) seconds <<<<<", indentation: -1) - } - - /** Remove any toolbar if it is IQToolbar. */ - internal func removeToolbarIfRequired() { // (Bug ID: #18) - - guard let siblings = responderViews(), !siblings.isEmpty, - let textField = textFieldView, textField.responds(to: #selector(setter: UITextField.inputAccessoryView)), - (textField.inputAccessoryView == nil || - textField.inputAccessoryView?.tag == IQKeyboardManager.kIQPreviousNextButtonToolbarTag || - textField.inputAccessoryView?.tag == IQKeyboardManager.kIQDoneButtonToolbarTag) else { - return - } - - let startTime = CACurrentMediaTime() - showLog(">>>>> \(#function) started >>>>>", indentation: 1) - - showLog("Found \(siblings.count) responder sibling(s)") - - for view in siblings { - if let toolbar = view.inputAccessoryView as? IQToolbar { - - //setInputAccessoryView: check (Bug ID: #307) - if view.responds(to: #selector(setter: UITextField.inputAccessoryView)), - (toolbar.tag == IQKeyboardManager.kIQDoneButtonToolbarTag || toolbar.tag == IQKeyboardManager.kIQPreviousNextButtonToolbarTag) { - - if let textField = view as? UITextField { - textField.inputAccessoryView = nil - } else if let textView = view as? UITextView { - textView.inputAccessoryView = nil - } - - view.reloadInputViews() - } - } - } - - let elapsedTime = CACurrentMediaTime() - startTime - showLog("<<<<< \(#function) ended: \(elapsedTime) seconds <<<<<", indentation: -1) - } - - /** reloadInputViews to reload toolbar buttons enable/disable state on the fly Enhancement ID #434. */ - @objc func reloadInputViews() { - - //If enabled then adding toolbar. - if privateIsEnableAutoToolbar() { - self.addToolbarIfRequired() - } else { - self.removeToolbarIfRequired() - } - } -} - -// MARK: Previous next button actions -@available(iOSApplicationExtension, unavailable) -public extension IQKeyboardManager { - - /** - Returns YES if can navigate to previous responder textField/textView, otherwise NO. - */ - @objc var canGoPrevious: Bool { - //If it is not first textField. then it's previous object canBecomeFirstResponder. - guard let textFields = responderViews(), let textFieldRetain = textFieldView, let index = textFields.firstIndex(of: textFieldRetain), index > 0 else { - return false - } - return true - } - - /** - Returns YES if can navigate to next responder textField/textView, otherwise NO. - */ - @objc var canGoNext: Bool { - //If it is not first textField. then it's previous object canBecomeFirstResponder. - guard let textFields = responderViews(), let textFieldRetain = textFieldView, let index = textFields.firstIndex(of: textFieldRetain), index < textFields.count-1 else { - return false - } - return true - } - - /** - Navigate to previous responder textField/textView. - */ - @objc @discardableResult func goPrevious() -> Bool { - - //If it is not first textField. then it's previous object becomeFirstResponder. - guard let textFields = responderViews(), let textFieldRetain = textFieldView, let index = textFields.firstIndex(of: textFieldRetain), index > 0 else { - return false - } - - let nextTextField = textFields[index-1] - - let isAcceptAsFirstResponder = nextTextField.becomeFirstResponder() - - // If it refuses then becoming previous textFieldView as first responder again. (Bug ID: #96) - if isAcceptAsFirstResponder == false { - showLog("Refuses to become first responder: \(nextTextField)") - } - - return isAcceptAsFirstResponder - } - - /** - Navigate to next responder textField/textView. - */ - @objc @discardableResult func goNext() -> Bool { - - //If it is not first textField. then it's previous object becomeFirstResponder. - guard let textFields = responderViews(), let textFieldRetain = textFieldView, let index = textFields.firstIndex(of: textFieldRetain), index < textFields.count-1 else { - return false - } - - let nextTextField = textFields[index+1] - - let isAcceptAsFirstResponder = nextTextField.becomeFirstResponder() - - // If it refuses then becoming previous textFieldView as first responder again. (Bug ID: #96) - if isAcceptAsFirstResponder == false { - showLog("Refuses to become first responder: \(nextTextField)") - } - - return isAcceptAsFirstResponder - } - - /** previousAction. */ - @objc internal func previousAction (_ barButton: IQBarButtonItem) { - - //If user wants to play input Click sound. - if shouldPlayInputClicks { - //Play Input Click Sound. - UIDevice.current.playInputClick() - } - - guard canGoPrevious, let textFieldRetain = textFieldView else { - return - } - - let isAcceptAsFirstResponder = goPrevious() - - var invocation = barButton.invocation - var sender = textFieldRetain - - //Handling search bar special case - do { - if let searchBar = textFieldRetain.textFieldSearchBar() { - invocation = searchBar.keyboardToolbar.previousBarButton.invocation - sender = searchBar - } - } - - if isAcceptAsFirstResponder { - invocation?.invoke(from: sender) - } - } - - /** nextAction. */ - @objc internal func nextAction (_ barButton: IQBarButtonItem) { - - //If user wants to play input Click sound. - if shouldPlayInputClicks { - //Play Input Click Sound. - UIDevice.current.playInputClick() - } - - guard canGoNext, let textFieldRetain = textFieldView else { - return - } - - let isAcceptAsFirstResponder = goNext() - - var invocation = barButton.invocation - var sender = textFieldRetain - - //Handling search bar special case - do { - if let searchBar = textFieldRetain.textFieldSearchBar() { - invocation = searchBar.keyboardToolbar.nextBarButton.invocation - sender = searchBar - } - } - - if isAcceptAsFirstResponder { - invocation?.invoke(from: sender) - } - } - - /** doneAction. Resigning current textField. */ - @objc internal func doneAction (_ barButton: IQBarButtonItem) { - - //If user wants to play input Click sound. - if shouldPlayInputClicks { - //Play Input Click Sound. - UIDevice.current.playInputClick() - } - - guard let textFieldRetain = textFieldView else { - return - } - - //Resign textFieldView. - let isResignedFirstResponder = resignFirstResponder() - - var invocation = barButton.invocation - var sender = textFieldRetain - - //Handling search bar special case - do { - if let searchBar = textFieldRetain.textFieldSearchBar() { - invocation = searchBar.keyboardToolbar.doneBarButton.invocation - sender = searchBar - } - } - - if isResignedFirstResponder { - invocation?.invoke(from: sender) - } - } -} diff --git a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+UIKeyboardNotification.swift b/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+UIKeyboardNotification.swift deleted file mode 100644 index f32b84b..0000000 --- a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+UIKeyboardNotification.swift +++ /dev/null @@ -1,365 +0,0 @@ -// -// IQKeyboardManager+UIKeyboardNotification.swift -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-20 Iftekhar Qurashi. -// -// 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 - UIKit contains Foundation -import UIKit - -// MARK: UIKeyboard Notifications -@available(iOSApplicationExtension, unavailable) -public extension IQKeyboardManager { - - typealias SizeBlock = (_ size: CGSize) -> Void - - private final class KeyboardSizeObserver: NSObject { - weak var observer: NSObject? - var sizeHandler: (_ size: CGSize) -> Void - - init(observer: NSObject?, sizeHandler: @escaping (_ size: CGSize) -> Void) { - self.observer = observer - self.sizeHandler = sizeHandler - } - } - - private struct AssociatedKeys { - static var keyboardSizeObservers = "keyboardSizeObservers" - static var keyboardLastNotifySize = "keyboardLastNotifySize" - static var keyboardShowing = "keyboardShowing" - static var keyboardShowNotification = "keyboardShowNotification" - static var keyboardFrame = "keyboardFrame" - static var animationDuration = "animationDuration" - static var animationCurve = "animationCurve" - } - - private var keyboardLastNotifySize: CGSize { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.keyboardLastNotifySize) as? CGSize ?? .zero - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.keyboardLastNotifySize, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - private var keyboardSizeObservers: [AnyHashable: SizeBlock] { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.keyboardSizeObservers) as? [AnyHashable: SizeBlock] ?? [:] - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.keyboardSizeObservers, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - @objc func registerKeyboardSizeChange(identifier: AnyHashable, sizeHandler: @escaping SizeBlock) { - keyboardSizeObservers[identifier] = sizeHandler - } - - @objc func unregisterKeyboardSizeChange(identifier: AnyHashable) { - keyboardSizeObservers[identifier] = nil - } - - internal func notifyKeyboardSize(size: CGSize) { - - guard !size.equalTo(keyboardLastNotifySize) else { - return - } - - keyboardLastNotifySize = size - - for block in keyboardSizeObservers.values { - block(size) - } - } - - /** - Boolean to know if keyboard is showing. - */ - @objc private(set) var keyboardShowing: Bool { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.keyboardShowing) as? Bool ?? false - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.keyboardShowing, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - /** To save keyboardWillShowNotification. Needed for enable keyboard functionality. */ - internal var keyboardShowNotification: Notification? { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.keyboardShowNotification) as? Notification - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.keyboardShowNotification, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - /** To save keyboard rame. */ - @objc private(set) var keyboardFrame: CGRect { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.keyboardFrame) as? CGRect ?? .zero - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.keyboardFrame, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - /** To save keyboard animation duration. */ - internal var animationDuration: TimeInterval { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.animationDuration) as? TimeInterval ?? 0.25 - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.animationDuration, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - /** To mimic the keyboard animation */ - internal var animationCurve: UIView.AnimationOptions { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.animationCurve) as? UIView.AnimationOptions ?? .curveEaseOut - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.animationCurve, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - /* UIKeyboardWillShowNotification. */ - @objc internal func keyboardWillShow(_ notification: Notification) { - - keyboardShowNotification = notification - - // Boolean to know keyboard is showing/hiding - keyboardShowing = true - - let oldKBFrame = keyboardFrame - - if let info = notification.userInfo { - - // Getting keyboard animation. - if let curve = info[UIResponder.keyboardAnimationCurveUserInfoKey] as? UInt { - animationCurve = UIView.AnimationOptions(rawValue: curve).union(.beginFromCurrentState) - } else { - animationCurve = UIView.AnimationOptions.curveEaseOut.union(.beginFromCurrentState) - } - - // Getting keyboard animation duration - animationDuration = info[UIResponder.keyboardAnimationDurationUserInfoKey] as? TimeInterval ?? 0.25 - - // Getting UIKeyboardSize. - if let kbFrame = info[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect { - - keyboardFrame = kbFrame - notifyKeyboardSize(size: keyboardFrame.size) - showLog("UIKeyboard Frame: \(keyboardFrame)") - } - } - - guard privateIsEnabled() else { - restorePosition() - topViewBeginOrigin = IQKeyboardManager.kIQCGPointInvalid - return - } - - let startTime = CACurrentMediaTime() - showLog("⌨️>>>>> \(#function) started >>>>>", indentation: 1) - - showLog("Notification Object:\(notification.object ?? "NULL")") - - // (Bug ID: #5) - if let textFieldView = textFieldView, topViewBeginOrigin.equalTo(IQKeyboardManager.kIQCGPointInvalid) { - - // keyboard is not showing(At the beginning only). We should save rootViewRect. - rootViewController = textFieldView.parentContainerViewController() - if let controller = rootViewController { - - if rootViewControllerWhilePopGestureRecognizerActive == controller { - topViewBeginOrigin = topViewBeginOriginWhilePopGestureRecognizerActive - } else { - topViewBeginOrigin = controller.view.frame.origin - } - - rootViewControllerWhilePopGestureRecognizerActive = nil - topViewBeginOriginWhilePopGestureRecognizerActive = IQKeyboardManager.kIQCGPointInvalid - - self.showLog("Saving \(controller) beginning origin: \(self.topViewBeginOrigin)") - } - } - - //If last restored keyboard size is different(any orientation accure), then refresh. otherwise not. - if keyboardFrame.equalTo(oldKBFrame) == false { - - //If textFieldView is inside UITableViewController then let UITableViewController to handle it (Bug ID: #37) (Bug ID: #76) See note:- https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html If it is UIAlertView textField then do not affect anything (Bug ID: #70). - - if keyboardShowing, - let textFieldView = textFieldView, - textFieldView.isAlertViewTextField() == false { - - // keyboard is already showing. adjust position. - optimizedAdjustPosition() - } - } - - let elapsedTime = CACurrentMediaTime() - startTime - showLog("⌨️<<<<< \(#function) ended: \(elapsedTime) seconds <<<<<", indentation: -1) - } - - /* UIKeyboardDidShowNotification. */ - @objc internal func keyboardDidShow(_ notification: Notification) { - - guard privateIsEnabled(), - let textFieldView = textFieldView, - let parentController = textFieldView.parentContainerViewController(), (parentController.modalPresentationStyle == UIModalPresentationStyle.formSheet || parentController.modalPresentationStyle == UIModalPresentationStyle.pageSheet), - textFieldView.isAlertViewTextField() == false else { - return - } - - let startTime = CACurrentMediaTime() - showLog("⌨️>>>>> \(#function) started >>>>>", indentation: 1) - showLog("Notification Object:\(notification.object ?? "NULL")") - - self.optimizedAdjustPosition() - - let elapsedTime = CACurrentMediaTime() - startTime - showLog("⌨️<<<<< \(#function) ended: \(elapsedTime) seconds <<<<<", indentation: -1) - } - - /* UIKeyboardWillHideNotification. So setting rootViewController to it's default frame. */ - @objc internal func keyboardWillHide(_ notification: Notification?) { - - //If it's not a fake notification generated by [self setEnable:NO]. - if notification != nil { - keyboardShowNotification = nil - } - - // Boolean to know keyboard is showing/hiding - keyboardShowing = false - - if let info = notification?.userInfo { - - // Getting keyboard animation. - if let curve = info[UIResponder.keyboardAnimationCurveUserInfoKey] as? UInt { - animationCurve = UIView.AnimationOptions(rawValue: curve).union(.beginFromCurrentState) - } else { - animationCurve = UIView.AnimationOptions.curveEaseOut.union(.beginFromCurrentState) - } - - // Getting keyboard animation duration - animationDuration = info[UIResponder.keyboardAnimationDurationUserInfoKey] as? TimeInterval ?? 0.25 - } - - //If not enabled then do nothing. - guard privateIsEnabled() else { - return - } - - let startTime = CACurrentMediaTime() - showLog("⌨️>>>>> \(#function) started >>>>>", indentation: 1) - showLog("Notification Object:\(notification?.object ?? "NULL")") - - //Commented due to #56. Added all the conditions below to handle WKWebView's textFields. (Bug ID: #56) - // We are unable to get textField object while keyboard showing on WKWebView's textField. (Bug ID: #11) - // if (_textFieldView == nil) return - - //Restoring the contentOffset of the lastScrollView - if let lastScrollView = lastScrollView { - - UIView.animate(withDuration: animationDuration, delay: 0, options: animationCurve, animations: { () -> Void in - - if lastScrollView.contentInset != self.startingContentInsets { - self.showLog("Restoring contentInset to: \(self.startingContentInsets)") - lastScrollView.contentInset = self.startingContentInsets - lastScrollView.scrollIndicatorInsets = self.startingScrollIndicatorInsets - } - - if lastScrollView.shouldRestoreScrollViewContentOffset, !lastScrollView.contentOffset.equalTo(self.startingContentOffset) { - self.showLog("Restoring contentOffset to: \(self.startingContentOffset)") - - let animatedContentOffset = self.textFieldView?.superviewOfClassType(UIStackView.self, belowView: lastScrollView) != nil // (Bug ID: #1365, #1508, #1541) - - if animatedContentOffset { - lastScrollView.setContentOffset(self.startingContentOffset, animated: UIView.areAnimationsEnabled) - } else { - lastScrollView.contentOffset = self.startingContentOffset - } - } - - // TODO: restore scrollView state - // This is temporary solution. Have to implement the save and restore scrollView state - var superScrollView: UIScrollView? = lastScrollView - - while let scrollView = superScrollView { - - let contentSize = CGSize(width: max(scrollView.contentSize.width, scrollView.frame.width), height: max(scrollView.contentSize.height, scrollView.frame.height)) - - let minimumY = contentSize.height - scrollView.frame.height - - if minimumY < scrollView.contentOffset.y { - - let newContentOffset = CGPoint(x: scrollView.contentOffset.x, y: minimumY) - if scrollView.contentOffset.equalTo(newContentOffset) == false { - - let animatedContentOffset = self.textFieldView?.superviewOfClassType(UIStackView.self, belowView: scrollView) != nil // (Bug ID: #1365, #1508, #1541) - - if animatedContentOffset { - scrollView.setContentOffset(newContentOffset, animated: UIView.areAnimationsEnabled) - } else { - scrollView.contentOffset = newContentOffset - } - - self.showLog("Restoring contentOffset to: \(self.startingContentOffset)") - } - } - - superScrollView = scrollView.superviewOfClassType(UIScrollView.self) as? UIScrollView - } - }) - } - - restorePosition() - - //Reset all values - lastScrollView = nil - keyboardFrame = CGRect.zero - notifyKeyboardSize(size: keyboardFrame.size) - startingContentInsets = UIEdgeInsets() - startingScrollIndicatorInsets = UIEdgeInsets() - startingContentOffset = CGPoint.zero - // topViewBeginRect = CGRectZero //Commented due to #82 - - let elapsedTime = CACurrentMediaTime() - startTime - showLog("⌨️<<<<< \(#function) ended: \(elapsedTime) seconds <<<<<", indentation: -1) - } - - @objc internal func keyboardDidHide(_ notification: Notification) { - - let startTime = CACurrentMediaTime() - showLog("⌨️>>>>> \(#function) started >>>>>", indentation: 1) - showLog("Notification Object:\(notification.object ?? "NULL")") - - topViewBeginOrigin = IQKeyboardManager.kIQCGPointInvalid - - keyboardFrame = CGRect.zero - notifyKeyboardSize(size: keyboardFrame.size) - - let elapsedTime = CACurrentMediaTime() - startTime - showLog("⌨️<<<<< \(#function) ended: \(elapsedTime) seconds <<<<<", indentation: -1) - } -} diff --git a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+UITextFieldViewNotification.swift b/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+UITextFieldViewNotification.swift deleted file mode 100644 index 1821bf3..0000000 --- a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager+UITextFieldViewNotification.swift +++ /dev/null @@ -1,227 +0,0 @@ -// -// IQKeyboardManager+UITextFieldViewNotification.swift -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-20 Iftekhar Qurashi. -// -// 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 - UIKit contains Foundation -import UIKit - -// MARK: UITextField/UITextView Notifications -@available(iOSApplicationExtension, unavailable) -internal extension IQKeyboardManager { - - private struct AssociatedKeys { - static var textFieldView = "textFieldView" - static var topViewBeginOrigin = "topViewBeginOrigin" - static var rootViewController = "rootViewController" - static var rootViewControllerWhilePopGestureRecognizerActive = "rootViewControllerWhilePopGestureRecognizerActive" - static var topViewBeginOriginWhilePopGestureRecognizerActive = "topViewBeginOriginWhilePopGestureRecognizerActive" - } - - /** To save UITextField/UITextView object voa textField/textView notifications. */ - weak var textFieldView: UIView? { - get { - return (objc_getAssociatedObject(self, &AssociatedKeys.textFieldView) as? WeakObjectContainer)?.object as? UIView - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.textFieldView, WeakObjectContainer(object: newValue), .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - var topViewBeginOrigin: CGPoint { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.topViewBeginOrigin) as? CGPoint ?? IQKeyboardManager.kIQCGPointInvalid - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.topViewBeginOrigin, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - /** To save rootViewController */ - weak var rootViewController: UIViewController? { - get { - return (objc_getAssociatedObject(self, &AssociatedKeys.rootViewController) as? WeakObjectContainer)?.object as? UIViewController - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.rootViewController, WeakObjectContainer(object: newValue), .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - /** To overcome with popGestureRecognizer issue Bug ID: #1361 */ - weak var rootViewControllerWhilePopGestureRecognizerActive: UIViewController? { - get { - return (objc_getAssociatedObject(self, &AssociatedKeys.rootViewControllerWhilePopGestureRecognizerActive) as? WeakObjectContainer)?.object as? UIViewController - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.rootViewControllerWhilePopGestureRecognizerActive, WeakObjectContainer(object: newValue), .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - var topViewBeginOriginWhilePopGestureRecognizerActive: CGPoint { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.topViewBeginOriginWhilePopGestureRecognizerActive) as? CGPoint ?? IQKeyboardManager.kIQCGPointInvalid - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.topViewBeginOriginWhilePopGestureRecognizerActive, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - /** UITextFieldTextDidBeginEditingNotification, UITextViewTextDidBeginEditingNotification. Fetching UITextFieldView object. */ - @objc func textFieldViewDidBeginEditing(_ notification: Notification) { - - guard let object = notification.object as? UIView, let isKeyWindow = object.window?.isKeyWindow, isKeyWindow else { - return - } - - let startTime = CACurrentMediaTime() - showLog("📝>>>>> \(#function) started >>>>>", indentation: 1) - showLog("Notification Object:\(notification.object ?? "NULL")") - - // Getting object - textFieldView = notification.object as? UIView - - if overrideKeyboardAppearance, let textInput = textFieldView as? UITextInput, textInput.keyboardAppearance != keyboardAppearance { - //Setting textField keyboard appearance and reloading inputViews. - if let textFieldView = textFieldView as? UITextField { - textFieldView.keyboardAppearance = keyboardAppearance - } else if let textFieldView = textFieldView as? UITextView { - textFieldView.keyboardAppearance = keyboardAppearance - } - textFieldView?.reloadInputViews() - } - - //If autoToolbar enable, then add toolbar on all the UITextField/UITextView's if required. - if privateIsEnableAutoToolbar() { - - //UITextView special case. Keyboard Notification is firing before textView notification so we need to resign it first and then again set it as first responder to add toolbar on it. - if let textView = textFieldView as? UIScrollView, textView.responds(to: #selector(getter: UITextView.isEditable)), - textView.inputAccessoryView == nil { - - UIView.animate(withDuration: 0.00001, delay: 0, options: animationCurve, animations: { () -> Void in - - self.addToolbarIfRequired() - - }, completion: { (_) -> Void in - - //On textView toolbar didn't appear on first time, so forcing textView to reload it's inputViews. - textView.reloadInputViews() - }) - } else { - //Adding toolbar - addToolbarIfRequired() - } - } else { - removeToolbarIfRequired() - } - - resignFirstResponderGesture.isEnabled = privateShouldResignOnTouchOutside() - textFieldView?.window?.addGestureRecognizer(resignFirstResponderGesture) // (Enhancement ID: #14) - - if privateIsEnabled() == false { - restorePosition() - topViewBeginOrigin = IQKeyboardManager.kIQCGPointInvalid - } else { - if topViewBeginOrigin.equalTo(IQKeyboardManager.kIQCGPointInvalid) { // (Bug ID: #5) - - rootViewController = textFieldView?.parentContainerViewController() - - if let controller = rootViewController { - - if rootViewControllerWhilePopGestureRecognizerActive == controller { - topViewBeginOrigin = topViewBeginOriginWhilePopGestureRecognizerActive - } else { - topViewBeginOrigin = controller.view.frame.origin - } - - rootViewControllerWhilePopGestureRecognizerActive = nil - topViewBeginOriginWhilePopGestureRecognizerActive = IQKeyboardManager.kIQCGPointInvalid - - self.showLog("Saving \(controller) beginning origin: \(self.topViewBeginOrigin)") - } - } - - //If textFieldView is inside ignored responder then do nothing. (Bug ID: #37, #74, #76) - //See notes:- https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html If it is UIAlertView textField then do not affect anything (Bug ID: #70). - if keyboardShowing, - let textFieldView = textFieldView, - textFieldView.isAlertViewTextField() == false { - - // keyboard is already showing. adjust position. - optimizedAdjustPosition() - } - } - - let elapsedTime = CACurrentMediaTime() - startTime - showLog("📝<<<<< \(#function) ended: \(elapsedTime) seconds <<<<<", indentation: -1) - } - - /** UITextFieldTextDidEndEditingNotification, UITextViewTextDidEndEditingNotification. Removing fetched object. */ - @objc func textFieldViewDidEndEditing(_ notification: Notification) { - - guard let object = notification.object as? UIView, let isKeyWindow = object.window?.isKeyWindow, isKeyWindow else { - return - } - - let startTime = CACurrentMediaTime() - showLog("📝>>>>> \(#function) started >>>>>", indentation: 1) - showLog("Notification Object:\(notification.object ?? "NULL")") - - //Removing gesture recognizer (Enhancement ID: #14) - textFieldView?.window?.removeGestureRecognizer(resignFirstResponderGesture) - - // We check if there's a change in original frame or not. - - if let textView = textFieldView as? UIScrollView, textView.responds(to: #selector(getter: UITextView.isEditable)) { - - if isTextViewContentInsetChanged { - self.isTextViewContentInsetChanged = false - - if textView.contentInset != self.startingTextViewContentInsets { - self.showLog("Restoring textView.contentInset to: \(self.startingTextViewContentInsets)") - - UIView.animate(withDuration: animationDuration, delay: 0, options: animationCurve, animations: { () -> Void in - - //Setting textField to it's initial contentInset - textView.contentInset = self.startingTextViewContentInsets - textView.scrollIndicatorInsets = self.startingTextViewScrollIndicatorInsets - - }, completion: { (_) -> Void in }) - } - } - } - - //Setting object to nil -#if swift(>=5.7) - if #available(iOS 16.0, *), let textView = object as? UITextView, textView.isFindInteractionEnabled { - //Not setting it nil, because it may be doing find interaction. - //As of now, here textView.findInteraction?.isFindNavigatorVisible returns false - //So there is no way to detect if this is dismissed due to findInteraction - } else { - textFieldView = nil - } - #else - textFieldView = nil -#endif - - let elapsedTime = CACurrentMediaTime() - startTime - showLog("📝<<<<< \(#function) ended: \(elapsedTime) seconds <<<<<", indentation: -1) - } -} diff --git a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager.swift b/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager.swift deleted file mode 100644 index 58b7ea7..0000000 --- a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardManager.swift +++ /dev/null @@ -1,424 +0,0 @@ -// -// IQKeyboardManager.swift -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-20 Iftekhar Qurashi. -// -// 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 - UIKit contains Foundation -import UIKit -import CoreGraphics -import QuartzCore - -// MARK: IQToolbar tags - -/** -Codeless drop-in universal library allows to prevent issues of keyboard sliding up and cover UITextField/UITextView. Neither need to write any code nor any setup required and much more. A generic version of KeyboardManagement. https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html -*/ - -@available(iOSApplicationExtension, unavailable) -@objc public final class IQKeyboardManager: NSObject { - - /** - Returns the default singleton instance. - */ - @objc public static let shared = IQKeyboardManager() - - /** - Invalid point value. - */ - internal static let kIQCGPointInvalid = CGPoint.init(x: CGFloat.greatestFiniteMagnitude, y: CGFloat.greatestFiniteMagnitude) - - // MARK: UIKeyboard handling - - /** - Enable/disable managing distance between keyboard and textField. Default is YES(Enabled when class loads in `+(void)load` method). - */ - @objc public var enable = false { - - didSet { - //If not enable, enable it. - if enable, !oldValue { - //If keyboard is currently showing. Sending a fake notification for keyboardWillHide to retain view's original position. - if let notification = keyboardShowNotification { - keyboardWillShow(notification) - } - showLog("Enabled") - } else if !enable, oldValue { //If not disable, desable it. - keyboardWillHide(nil) - showLog("Disabled") - } - } - } - - /** - To set keyboard distance from textField. can't be less than zero. Default is 10.0. - */ - @objc public var keyboardDistanceFromTextField: CGFloat = 10.0 - - // MARK: IQToolbar handling - - /** - Automatic add the IQToolbar functionality. Default is YES. - */ - @objc public var enableAutoToolbar = true { - didSet { - privateIsEnableAutoToolbar() ? addToolbarIfRequired() : removeToolbarIfRequired() - - let enableToolbar = enableAutoToolbar ? "Yes" : "NO" - - showLog("enableAutoToolbar: \(enableToolbar)") - } - } - - /** - /** - IQAutoToolbarBySubviews: Creates Toolbar according to subview's hirarchy of Textfield's in view. - IQAutoToolbarByTag: Creates Toolbar according to tag property of TextField's. - IQAutoToolbarByPosition: Creates Toolbar according to the y,x position of textField in it's superview coordinate. - - Default is IQAutoToolbarBySubviews. - */ - AutoToolbar managing behaviour. Default is IQAutoToolbarBySubviews. - */ - @objc public var toolbarManageBehaviour = IQAutoToolbarManageBehaviour.bySubviews - - /** - If YES, then uses textField's tintColor property for IQToolbar, otherwise tint color is default. Default is NO. - */ - @objc public var shouldToolbarUsesTextFieldTintColor = false - - /** - This is used for toolbar.tintColor when textfield.keyboardAppearance is UIKeyboardAppearanceDefault. If shouldToolbarUsesTextFieldTintColor is YES then this property is ignored. Default is nil and uses black color. - */ - @objc public var toolbarTintColor: UIColor? - - /** - This is used for toolbar.barTintColor. Default is nil. - */ - @objc public var toolbarBarTintColor: UIColor? - - /** - IQPreviousNextDisplayModeDefault: Show NextPrevious when there are more than 1 textField otherwise hide. - IQPreviousNextDisplayModeAlwaysHide: Do not show NextPrevious buttons in any case. - IQPreviousNextDisplayModeAlwaysShow: Always show nextPrevious buttons, if there are more than 1 textField then both buttons will be visible but will be shown as disabled. - */ - @objc public var previousNextDisplayMode = IQPreviousNextDisplayMode.default - - /** - Toolbar previous/next/done button icon, If nothing is provided then check toolbarDoneBarButtonItemText to draw done button. - */ - @objc public var toolbarPreviousBarButtonItemImage: UIImage? - @objc public var toolbarNextBarButtonItemImage: UIImage? - @objc public var toolbarDoneBarButtonItemImage: UIImage? - - /** - Toolbar previous/next/done button text, If nothing is provided then system default 'UIBarButtonSystemItemDone' will be used. - */ - @objc public var toolbarPreviousBarButtonItemText: String? - @objc public var toolbarPreviousBarButtonItemAccessibilityLabel: String? - @objc public var toolbarNextBarButtonItemText: String? - @objc public var toolbarNextBarButtonItemAccessibilityLabel: String? - @objc public var toolbarDoneBarButtonItemText: String? - @objc public var toolbarDoneBarButtonItemAccessibilityLabel: String? - - /** - If YES, then it add the textField's placeholder text on IQToolbar. Default is YES. - */ - @objc public var shouldShowToolbarPlaceholder = true - - /** - Placeholder Font. Default is nil. - */ - @objc public var placeholderFont: UIFont? - - /** - Placeholder Color. Default is nil. Which means lightGray - */ - @objc public var placeholderColor: UIColor? - - /** - Placeholder Button Color when it's treated as button. Default is nil. - */ - @objc public var placeholderButtonColor: UIColor? - - // MARK: UIKeyboard appearance overriding - - /** - Override the keyboardAppearance for all textField/textView. Default is NO. - */ - @objc public var overrideKeyboardAppearance = false - - /** - If overrideKeyboardAppearance is YES, then all the textField keyboardAppearance is set using this property. - */ - @objc public var keyboardAppearance = UIKeyboardAppearance.default - - // MARK: UITextField/UITextView Next/Previous/Resign handling - - /** - Resigns Keyboard on touching outside of UITextField/View. Default is NO. - */ - @objc public var shouldResignOnTouchOutside = false { - - didSet { - resignFirstResponderGesture.isEnabled = privateShouldResignOnTouchOutside() - - let shouldResign = shouldResignOnTouchOutside ? "Yes" : "NO" - - showLog("shouldResignOnTouchOutside: \(shouldResign)") - } - } - - /** TapGesture to resign keyboard on view's touch. It's a readonly property and exposed only for adding/removing dependencies if your added gesture does have collision with this one */ - @objc lazy public var resignFirstResponderGesture: UITapGestureRecognizer = { - - let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tapRecognized(_:))) - tapGesture.cancelsTouchesInView = false - tapGesture.delegate = self - - return tapGesture - }() - - /*******************************************/ - - /** - Resigns currently first responder field. - */ - @objc @discardableResult public func resignFirstResponder() -> Bool { - - guard let textFieldRetain = textFieldView else { - return false - } - - //Resigning first responder - guard textFieldRetain.resignFirstResponder() else { - showLog("Refuses to resign first responder: \(textFieldRetain)") - // If it refuses then becoming it as first responder again. (Bug ID: #96) - //If it refuses to resign then becoming it first responder again for getting notifications callback. - textFieldRetain.becomeFirstResponder() - return false - } - return true - } - - // MARK: UISound handling - - /** - If YES, then it plays inputClick sound on next/previous/done click. - */ - @objc public var shouldPlayInputClicks = true - - // MARK: UIAnimation handling - - /** - If YES, then calls 'setNeedsLayout' and 'layoutIfNeeded' on any frame update of to viewController's view. - */ - @objc public var layoutIfNeededOnUpdate = false - - // MARK: Class Level disabling methods - - /** - Disable distance handling within the scope of disabled distance handling viewControllers classes. Within this scope, 'enabled' property is ignored. Class should be kind of UIViewController. - */ - @objc public var disabledDistanceHandlingClasses = [UIViewController.Type]() - - /** - Enable distance handling within the scope of enabled distance handling viewControllers classes. Within this scope, 'enabled' property is ignored. Class should be kind of UIViewController. If same Class is added in disabledDistanceHandlingClasses list, then enabledDistanceHandlingClasses will be ignored. - */ - @objc public var enabledDistanceHandlingClasses = [UIViewController.Type]() - - /** - Disable automatic toolbar creation within the scope of disabled toolbar viewControllers classes. Within this scope, 'enableAutoToolbar' property is ignored. Class should be kind of UIViewController. - */ - @objc public var disabledToolbarClasses = [UIViewController.Type]() - - /** - Enable automatic toolbar creation within the scope of enabled toolbar viewControllers classes. Within this scope, 'enableAutoToolbar' property is ignored. Class should be kind of UIViewController. If same Class is added in disabledToolbarClasses list, then enabledToolbarClasses will be ignore. - */ - @objc public var enabledToolbarClasses = [UIViewController.Type]() - - /** - Allowed subclasses of UIView to add all inner textField, this will allow to navigate between textField contains in different superview. Class should be kind of UIView. - */ - @objc public var toolbarPreviousNextAllowedClasses = [UIView.Type]() - - /** - Disabled classes to ignore 'shouldResignOnTouchOutside' property, Class should be kind of UIViewController. - */ - @objc public var disabledTouchResignedClasses = [UIViewController.Type]() - - /** - Enabled classes to forcefully enable 'shouldResignOnTouchOutsite' property. Class should be kind of UIViewController. If same Class is added in disabledTouchResignedClasses list, then enabledTouchResignedClasses will be ignored. - */ - @objc public var enabledTouchResignedClasses = [UIViewController.Type]() - - /** - if shouldResignOnTouchOutside is enabled then you can customise the behaviour to not recognise gesture touches on some specific view subclasses. Class should be kind of UIView. Default is [UIControl, UINavigationBar] - */ - @objc public var touchResignedGestureIgnoreClasses = [UIView.Type]() - - // MARK: Third Party Library support - /// Add TextField/TextView Notifications customised Notifications. For example while using YYTextView https://github.com/ibireme/YYText - - /** - Add/Remove customised Notification for third party customised TextField/TextView. Please be aware that the Notification object must be idential to UITextField/UITextView Notification objects and customised TextField/TextView support must be idential to UITextField/UITextView. - @param didBeginEditingNotificationName This should be identical to UITextViewTextDidBeginEditingNotification - @param didEndEditingNotificationName This should be identical to UITextViewTextDidEndEditingNotification - */ - - @objc public func registerTextFieldViewClass(_ aClass: UIView.Type, didBeginEditingNotificationName: String, didEndEditingNotificationName: String) { - - NotificationCenter.default.addObserver(self, selector: #selector(self.textFieldViewDidBeginEditing(_:)), name: Notification.Name(rawValue: didBeginEditingNotificationName), object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(self.textFieldViewDidEndEditing(_:)), name: Notification.Name(rawValue: didEndEditingNotificationName), object: nil) - } - - @objc public func unregisterTextFieldViewClass(_ aClass: UIView.Type, didBeginEditingNotificationName: String, didEndEditingNotificationName: String) { - - NotificationCenter.default.removeObserver(self, name: Notification.Name(rawValue: didBeginEditingNotificationName), object: nil) - NotificationCenter.default.removeObserver(self, name: Notification.Name(rawValue: didEndEditingNotificationName), object: nil) - } - - /**************************************************************************************/ - internal struct WeakObjectContainer { - weak var object: AnyObject? - } - - /**************************************************************************************/ - - // MARK: Initialization/Deinitialization - - /* Singleton Object Initialization. */ - override init() { - - super.init() - - self.registerAllNotifications() - - //Creating gesture for @shouldResignOnTouchOutside. (Enhancement ID: #14) - resignFirstResponderGesture.isEnabled = shouldResignOnTouchOutside - - //Loading IQToolbar, IQTitleBarButtonItem, IQBarButtonItem to fix first time keyboard appearance delay (Bug ID: #550) - //If you experience exception breakpoint issue at below line then try these solutions https://stackoverflow.com/questions/27375640/all-exception-break-point-is-stopping-for-no-reason-on-simulator - let textField = UITextField() - textField.addDoneOnKeyboardWithTarget(nil, action: #selector(self.doneAction(_:))) - textField.addPreviousNextDoneOnKeyboardWithTarget(nil, previousAction: #selector(self.previousAction(_:)), nextAction: #selector(self.nextAction(_:)), doneAction: #selector(self.doneAction(_:))) - - disabledDistanceHandlingClasses.append(UITableViewController.self) - disabledDistanceHandlingClasses.append(UIAlertController.self) - disabledToolbarClasses.append(UIAlertController.self) - disabledTouchResignedClasses.append(UIAlertController.self) - toolbarPreviousNextAllowedClasses.append(UITableView.self) - toolbarPreviousNextAllowedClasses.append(UICollectionView.self) - toolbarPreviousNextAllowedClasses.append(IQPreviousNextView.self) - touchResignedGestureIgnoreClasses.append(UIControl.self) - touchResignedGestureIgnoreClasses.append(UINavigationBar.self) - } - - deinit { - // Disable the keyboard manager. - enable = false - } - - /** Getting keyWindow. */ - internal func keyWindow() -> UIWindow? { - - if let keyWindow = textFieldView?.window { - return keyWindow - } else { - - struct Static { - /** @abstract Save keyWindow object for reuse. - @discussion Sometimes [[UIApplication sharedApplication] keyWindow] is returning nil between the app. */ - static weak var keyWindow: UIWindow? - } - - var originalKeyWindow: UIWindow? - - #if swift(>=5.1) - if #available(iOS 13, *) { - originalKeyWindow = UIApplication.shared.connectedScenes - .compactMap { $0 as? UIWindowScene } - .flatMap { $0.windows } - .first(where: { $0.isKeyWindow }) - } else { - originalKeyWindow = UIApplication.shared.keyWindow - } - #else - originalKeyWindow = UIApplication.shared.keyWindow - #endif - - //If original key window is not nil and the cached keywindow is also not original keywindow then changing keywindow. - if let originalKeyWindow = originalKeyWindow { - Static.keyWindow = originalKeyWindow - } - - //Return KeyWindow - return Static.keyWindow - } - } - - // MARK: Public Methods - - /* Refreshes textField/textView position if any external changes is explicitly made by user. */ - @objc public func reloadLayoutIfNeeded() { - - guard privateIsEnabled(), - keyboardShowing, - topViewBeginOrigin.equalTo(IQKeyboardManager.kIQCGPointInvalid) == false, let textFieldView = textFieldView, - textFieldView.isAlertViewTextField() == false else { - return - } - optimizedAdjustPosition() - } -} - -@available(iOSApplicationExtension, unavailable) -extension IQKeyboardManager: UIGestureRecognizerDelegate { - - /** Resigning on tap gesture. (Enhancement ID: #14)*/ - @objc internal func tapRecognized(_ gesture: UITapGestureRecognizer) { - - if gesture.state == .ended { - - //Resigning currently responder textField. - resignFirstResponder() - } - } - - /** Note: returning YES is guaranteed to allow simultaneous recognition. returning NO is not guaranteed to prevent simultaneous recognition, as the other gesture's delegate may return YES. */ - @objc public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { - return false - } - - /** To not detect touch events in a subclass of UIControl, these may have added their own selector for specific work */ - @objc public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { - // Should not recognize gesture if the clicked view is either UIControl or UINavigationBar( IQTextFieldViewInfoModal? { - - for modal in textFieldInfoCache { - - if let view = modal.textFieldView { - - if view == textField { - return modal - } - } - } - - return nil - } - - private func updateReturnKeyTypeOnTextField(_ view: UIView) { - var superConsideredView: UIView? - - //If find any consider responderView in it's upper hierarchy then will get deepResponderView. (Bug ID: #347) - for disabledClass in IQKeyboardManager.shared.toolbarPreviousNextAllowedClasses { - - superConsideredView = view.superviewOfClassType(disabledClass) - - if superConsideredView != nil { - break - } - } - - var textFields = [UIView]() - - //If there is a tableView in view's hierarchy, then fetching all it's subview that responds. - if let unwrappedTableView = superConsideredView { // (Enhancement ID: #22) - textFields = unwrappedTableView.deepResponderViews() - } else { //Otherwise fetching all the siblings - - textFields = view.responderSiblings() - - //Sorting textFields according to behaviour - switch IQKeyboardManager.shared.toolbarManageBehaviour { - //If needs to sort it by tag - case .byTag: textFields = textFields.sortedArrayByTag() - //If needs to sort it by Position - case .byPosition: textFields = textFields.sortedArrayByPosition() - default: break - } - } - - if let lastView = textFields.last { - - if let textField = view as? UITextField { - - //If it's the last textField in responder view, else next - textField.returnKeyType = (view == lastView) ? lastTextFieldReturnKeyType: UIReturnKeyType.next - } else if let textView = view as? UITextView { - - //If it's the last textField in responder view, else next - textView.returnKeyType = (view == lastView) ? lastTextFieldReturnKeyType: UIReturnKeyType.next - } - } - } - - // MARK: Registering/Unregistering textFieldView - - /** - Should pass UITextField/UITextView intance. Assign textFieldView delegate to self, change it's returnKeyType. - - @param view UITextField/UITextView object to register. - */ - @objc public func addTextFieldView(_ view: UIView) { - - let modal = IQTextFieldViewInfoModal(textFieldView: view, textFieldDelegate: nil, textViewDelegate: nil) - - if let textField = view as? UITextField { - - modal.originalReturnKeyType = textField.returnKeyType - modal.textFieldDelegate = textField.delegate - textField.delegate = self - - } else if let textView = view as? UITextView { - - modal.originalReturnKeyType = textView.returnKeyType - modal.textViewDelegate = textView.delegate - textView.delegate = self - } - - textFieldInfoCache.append(modal) - } - - /** - Should pass UITextField/UITextView intance. Restore it's textFieldView delegate and it's returnKeyType. - - @param view UITextField/UITextView object to unregister. - */ - @objc public func removeTextFieldView(_ view: UIView) { - - if let modal = textFieldViewCachedInfo(view) { - - if let textField = view as? UITextField { - - textField.returnKeyType = modal.originalReturnKeyType - textField.delegate = modal.textFieldDelegate - } else if let textView = view as? UITextView { - - textView.returnKeyType = modal.originalReturnKeyType - textView.delegate = modal.textViewDelegate - } - - if let index = textFieldInfoCache.firstIndex(where: { $0.textFieldView == view}) { - - textFieldInfoCache.remove(at: index) - } - } - } - - /** - Add all the UITextField/UITextView responderView's. - - @param view UIView object to register all it's responder subviews. - */ - @objc public func addResponderFromView(_ view: UIView) { - - let textFields = view.deepResponderViews() - - for textField in textFields { - - addTextFieldView(textField) - } - } - - /** - Remove all the UITextField/UITextView responderView's. - - @param view UIView object to unregister all it's responder subviews. - */ - @objc public func removeResponderFromView(_ view: UIView) { - - let textFields = view.deepResponderViews() - - for textField in textFields { - - removeTextFieldView(textField) - } - } - - @discardableResult private func goToNextResponderOrResign(_ view: UIView) -> Bool { - - var superConsideredView: UIView? - - //If find any consider responderView in it's upper hierarchy then will get deepResponderView. (Bug ID: #347) - for disabledClass in IQKeyboardManager.shared.toolbarPreviousNextAllowedClasses { - - superConsideredView = view.superviewOfClassType(disabledClass) - - if superConsideredView != nil { - break - } - } - - var textFields = [UIView]() - - //If there is a tableView in view's hierarchy, then fetching all it's subview that responds. - if let unwrappedTableView = superConsideredView { // (Enhancement ID: #22) - textFields = unwrappedTableView.deepResponderViews() - } else { //Otherwise fetching all the siblings - - textFields = view.responderSiblings() - - //Sorting textFields according to behaviour - switch IQKeyboardManager.shared.toolbarManageBehaviour { - //If needs to sort it by tag - case .byTag: textFields = textFields.sortedArrayByTag() - //If needs to sort it by Position - case .byPosition: textFields = textFields.sortedArrayByPosition() - default: - break - } - } - - //Getting index of current textField. - if let index = textFields.firstIndex(of: view) { - //If it is not last textField. then it's next object becomeFirstResponder. - if index < (textFields.count - 1) { - - let nextTextField = textFields[index+1] - nextTextField.becomeFirstResponder() - return false - } else { - - view.resignFirstResponder() - return true - } - } else { - return true - } - } -} - -// MARK: UITextFieldDelegate -@available(iOSApplicationExtension, unavailable) -extension IQKeyboardReturnKeyHandler: UITextFieldDelegate { - - @objc public func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { - - if delegate == nil { - - if let unwrapDelegate = textFieldViewCachedInfo(textField)?.textFieldDelegate { - if unwrapDelegate.responds(to: #selector(UITextFieldDelegate.textFieldShouldBeginEditing(_:))) { - return unwrapDelegate.textFieldShouldBeginEditing?(textField) ?? false - } - } - } - - return true - } - - @objc public func textFieldShouldEndEditing(_ textField: UITextField) -> Bool { - - if delegate == nil { - - if let unwrapDelegate = textFieldViewCachedInfo(textField)?.textFieldDelegate { - if unwrapDelegate.responds(to: #selector(UITextFieldDelegate.textFieldShouldEndEditing(_:))) { - return unwrapDelegate.textFieldShouldEndEditing?(textField) ?? false - } - } - } - - return true - } - - @objc public func textFieldDidBeginEditing(_ textField: UITextField) { - updateReturnKeyTypeOnTextField(textField) - - var aDelegate: UITextFieldDelegate? = delegate - - if aDelegate == nil { - - if let modal = textFieldViewCachedInfo(textField) { - aDelegate = modal.textFieldDelegate - } - } - - aDelegate?.textFieldDidBeginEditing?(textField) - } - - @objc public func textFieldDidEndEditing(_ textField: UITextField) { - - var aDelegate: UITextFieldDelegate? = delegate - - if aDelegate == nil { - - if let modal = textFieldViewCachedInfo(textField) { - aDelegate = modal.textFieldDelegate - } - } - - aDelegate?.textFieldDidEndEditing?(textField) - } - - @available(iOS 10.0, *) - @objc public func textFieldDidEndEditing(_ textField: UITextField, reason: UITextField.DidEndEditingReason) { - - var aDelegate: UITextFieldDelegate? = delegate - - if aDelegate == nil { - - if let modal = textFieldViewCachedInfo(textField) { - aDelegate = modal.textFieldDelegate - } - } - - aDelegate?.textFieldDidEndEditing?(textField, reason: reason) - } - - @objc public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { - - if delegate == nil { - - if let unwrapDelegate = textFieldViewCachedInfo(textField)?.textFieldDelegate { - if unwrapDelegate.responds(to: #selector(UITextFieldDelegate.textField(_:shouldChangeCharactersIn:replacementString:))) { - return unwrapDelegate.textField?(textField, shouldChangeCharactersIn: range, replacementString: string) ?? false - } - } - } - return true - } - - @objc public func textFieldShouldClear(_ textField: UITextField) -> Bool { - - if delegate == nil { - - if let unwrapDelegate = textFieldViewCachedInfo(textField)?.textFieldDelegate { - if unwrapDelegate.responds(to: #selector(UITextFieldDelegate.textFieldShouldClear(_:))) { - return unwrapDelegate.textFieldShouldClear?(textField) ?? false - } - } - } - - return true - } - - @objc public func textFieldShouldReturn(_ textField: UITextField) -> Bool { - - var shouldReturn = true - - if delegate == nil { - - if let unwrapDelegate = textFieldViewCachedInfo(textField)?.textFieldDelegate { - if unwrapDelegate.responds(to: #selector(UITextFieldDelegate.textFieldShouldReturn(_:))) { - shouldReturn = unwrapDelegate.textFieldShouldReturn?(textField) ?? false - } - } - } - - if shouldReturn { - goToNextResponderOrResign(textField) - return true - } else { - return goToNextResponderOrResign(textField) - } - } -} - -// MARK: UITextViewDelegate -@available(iOSApplicationExtension, unavailable) -extension IQKeyboardReturnKeyHandler: UITextViewDelegate { - - @objc public func textViewShouldBeginEditing(_ textView: UITextView) -> Bool { - - if delegate == nil { - - if let unwrapDelegate = textFieldViewCachedInfo(textView)?.textViewDelegate { - if unwrapDelegate.responds(to: #selector(UITextViewDelegate.textViewShouldBeginEditing(_:))) { - return unwrapDelegate.textViewShouldBeginEditing?(textView) ?? false - } - } - } - - return true - } - - @objc public func textViewShouldEndEditing(_ textView: UITextView) -> Bool { - - if delegate == nil { - - if let unwrapDelegate = textFieldViewCachedInfo(textView)?.textViewDelegate { - if unwrapDelegate.responds(to: #selector(UITextViewDelegate.textViewShouldEndEditing(_:))) { - return unwrapDelegate.textViewShouldEndEditing?(textView) ?? false - } - } - } - - return true - } - - @objc public func textViewDidBeginEditing(_ textView: UITextView) { - updateReturnKeyTypeOnTextField(textView) - - var aDelegate: UITextViewDelegate? = delegate - - if aDelegate == nil { - - if let modal = textFieldViewCachedInfo(textView) { - aDelegate = modal.textViewDelegate - } - } - - aDelegate?.textViewDidBeginEditing?(textView) - } - - @objc public func textViewDidEndEditing(_ textView: UITextView) { - - var aDelegate: UITextViewDelegate? = delegate - - if aDelegate == nil { - - if let modal = textFieldViewCachedInfo(textView) { - aDelegate = modal.textViewDelegate - } - } - - aDelegate?.textViewDidEndEditing?(textView) - } - - @objc public func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { - - var shouldReturn = true - - if delegate == nil { - - if let unwrapDelegate = textFieldViewCachedInfo(textView)?.textViewDelegate { - if unwrapDelegate.responds(to: #selector(UITextViewDelegate.textView(_:shouldChangeTextIn:replacementText:))) { - shouldReturn = (unwrapDelegate.textView?(textView, shouldChangeTextIn: range, replacementText: text)) ?? false - } - } - } - - if shouldReturn, text == "\n" { - shouldReturn = goToNextResponderOrResign(textView) - } - - return shouldReturn - } - - @objc public func textViewDidChange(_ textView: UITextView) { - - var aDelegate: UITextViewDelegate? = delegate - - if aDelegate == nil { - - if let modal = textFieldViewCachedInfo(textView) { - aDelegate = modal.textViewDelegate - } - } - - aDelegate?.textViewDidChange?(textView) - } - - @objc public func textViewDidChangeSelection(_ textView: UITextView) { - - var aDelegate: UITextViewDelegate? = delegate - - if aDelegate == nil { - - if let modal = textFieldViewCachedInfo(textView) { - aDelegate = modal.textViewDelegate - } - } - - aDelegate?.textViewDidChangeSelection?(textView) - } - - @available(iOS 10.0, *) - @objc public func textView(_ aTextView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool { - - if delegate == nil { - - if let unwrapDelegate = textFieldViewCachedInfo(aTextView)?.textViewDelegate { - if unwrapDelegate.responds(to: #selector(textView as (UITextView, URL, NSRange, UITextItemInteraction) -> Bool)) { - return unwrapDelegate.textView?(aTextView, shouldInteractWith: URL, in: characterRange, interaction: interaction) ?? false - } - } - } - - return true - } - - @available(iOS 10.0, *) - @objc public func textView(_ aTextView: UITextView, shouldInteractWith textAttachment: NSTextAttachment, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool { - - if delegate == nil { - - if let unwrapDelegate = textFieldViewCachedInfo(aTextView)?.textViewDelegate { - if unwrapDelegate.responds(to: #selector(textView as (UITextView, NSTextAttachment, NSRange, UITextItemInteraction) -> Bool)) { - return unwrapDelegate.textView?(aTextView, shouldInteractWith: textAttachment, in: characterRange, interaction: interaction) ?? false - } - } - } - - return true - } - - @available(iOS, deprecated: 10.0) - @objc public func textView(_ aTextView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool { - - if delegate == nil { - - if let unwrapDelegate = textFieldViewCachedInfo(aTextView)?.textViewDelegate { - if unwrapDelegate.responds(to: #selector(textView as (UITextView, URL, NSRange) -> Bool)) { - return unwrapDelegate.textView?(aTextView, shouldInteractWith: URL, in: characterRange) ?? false - } - } - } - - return true - } - - @available(iOS, deprecated: 10.0) - @objc public func textView(_ aTextView: UITextView, shouldInteractWith textAttachment: NSTextAttachment, in characterRange: NSRange) -> Bool { - - if delegate == nil { - - if let unwrapDelegate = textFieldViewCachedInfo(aTextView)?.textViewDelegate { - if unwrapDelegate.responds(to: #selector(textView as (UITextView, NSTextAttachment, NSRange) -> Bool)) { - return unwrapDelegate.textView?(aTextView, shouldInteractWith: textAttachment, in: characterRange) ?? false - } - } - } - - return true - } - -#if swift(>=5.7) - @available(iOS 16.0, *) - public func textView(_ aTextView: UITextView, editMenuForTextIn range: NSRange, suggestedActions: [UIMenuElement]) -> UIMenu? { - if delegate == nil { - - if let unwrapDelegate = textFieldViewCachedInfo(aTextView)?.textViewDelegate { - if unwrapDelegate.responds(to: #selector(textView as (UITextView, NSRange, [UIMenuElement]) -> UIMenu?)) { - return unwrapDelegate.textView?(aTextView, editMenuForTextIn: range, suggestedActions: suggestedActions) - } - } - } - - return nil - } - - @available(iOS 16.0, *) - public func textView(_ aTextView: UITextView, willPresentEditMenuWith animator: UIEditMenuInteractionAnimating) { - var aDelegate: UITextViewDelegate? = delegate - - if aDelegate == nil { - - if let modal = textFieldViewCachedInfo(aTextView) { - aDelegate = modal.textViewDelegate - } - } - - aDelegate?.textView?(aTextView, willPresentEditMenuWith: animator) - } - - @available(iOS 16.0, *) - public func textView(_ aTextView: UITextView, willDismissEditMenuWith animator: UIEditMenuInteractionAnimating) { - var aDelegate: UITextViewDelegate? = delegate - - if aDelegate == nil { - - if let modal = textFieldViewCachedInfo(aTextView) { - aDelegate = modal.textViewDelegate - } - } - - aDelegate?.textView?(aTextView, willDismissEditMenuWith: animator) - } -#endif -} diff --git a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQTextView/IQTextView.swift b/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQTextView/IQTextView.swift deleted file mode 100644 index 1437c85..0000000 --- a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQTextView/IQTextView.swift +++ /dev/null @@ -1,189 +0,0 @@ -// -// IQTextView.swift -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-20 Iftekhar Qurashi. -// -// 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 - -/** @abstract UITextView with placeholder support */ -@available(iOSApplicationExtension, unavailable) -@objc open class IQTextView: UITextView { - - @objc required public init?(coder aDecoder: NSCoder) { - super.init(coder: aDecoder) - NotificationCenter.default.addObserver(self, selector: #selector(self.refreshPlaceholder), name: UITextView.textDidChangeNotification, object: self) - } - - @objc override public init(frame: CGRect, textContainer: NSTextContainer?) { - super.init(frame: frame, textContainer: textContainer) - NotificationCenter.default.addObserver(self, selector: #selector(self.refreshPlaceholder), name: UITextView.textDidChangeNotification, object: self) - } - - @objc override open func awakeFromNib() { - super.awakeFromNib() - NotificationCenter.default.addObserver(self, selector: #selector(self.refreshPlaceholder), name: UITextView.textDidChangeNotification, object: self) - } - - deinit { - IQ_PlaceholderLabel.removeFromSuperview() - } - - private var placeholderInsets: UIEdgeInsets { - return UIEdgeInsets(top: self.textContainerInset.top, left: self.textContainerInset.left + self.textContainer.lineFragmentPadding, bottom: self.textContainerInset.bottom, right: self.textContainerInset.right + self.textContainer.lineFragmentPadding) - } - - private var placeholderExpectedFrame: CGRect { - let placeholderInsets = self.placeholderInsets - let maxWidth = self.frame.width-placeholderInsets.left-placeholderInsets.right - let expectedSize = IQ_PlaceholderLabel.sizeThatFits(CGSize(width: maxWidth, height: self.frame.height-placeholderInsets.top-placeholderInsets.bottom)) - - return CGRect(x: placeholderInsets.left, y: placeholderInsets.top, width: maxWidth, height: expectedSize.height) - } - - lazy var IQ_PlaceholderLabel: UILabel = { - let label = UILabel() - - label.autoresizingMask = [.flexibleWidth, .flexibleHeight] - label.lineBreakMode = .byWordWrapping - label.numberOfLines = 0 - label.font = self.font - label.textAlignment = self.textAlignment - label.backgroundColor = UIColor.clear - label.isAccessibilityElement = false - #if swift(>=5.1) - label.textColor = UIColor.systemGray - #else - label.textColor = UIColor.lightText - #endif - label.alpha = 0 - self.addSubview(label) - - return label - }() - - /** @abstract To set textView's placeholder text color. */ - @IBInspectable open var placeholderTextColor: UIColor? { - - get { - return IQ_PlaceholderLabel.textColor - } - - set { - IQ_PlaceholderLabel.textColor = newValue - } - } - - /** @abstract To set textView's placeholder text. Default is nil. */ - @IBInspectable open var placeholder: String? { - - get { - return IQ_PlaceholderLabel.text - } - - set { - IQ_PlaceholderLabel.text = newValue - refreshPlaceholder() - } - } - - /** @abstract To set textView's placeholder attributed text. Default is nil. */ - open var attributedPlaceholder: NSAttributedString? { - get { - return IQ_PlaceholderLabel.attributedText - } - - set { - IQ_PlaceholderLabel.attributedText = newValue - refreshPlaceholder() - } - } - - @objc override open func layoutSubviews() { - super.layoutSubviews() - - IQ_PlaceholderLabel.frame = placeholderExpectedFrame - } - - @objc internal func refreshPlaceholder() { - - if !text.isEmpty || !attributedText.string.isEmpty { - IQ_PlaceholderLabel.alpha = 0 - } else { - IQ_PlaceholderLabel.alpha = 1 - } - } - - @objc override open var text: String! { - - didSet { - refreshPlaceholder() - } - } - - open override var attributedText: NSAttributedString! { - - didSet { - refreshPlaceholder() - } - } - - @objc override open var font: UIFont? { - - didSet { - - if let unwrappedFont = font { - IQ_PlaceholderLabel.font = unwrappedFont - } else { - IQ_PlaceholderLabel.font = UIFont.systemFont(ofSize: 12) - } - } - } - - @objc override open var textAlignment: NSTextAlignment { - didSet { - IQ_PlaceholderLabel.textAlignment = textAlignment - } - } - - @objc override weak open var delegate: UITextViewDelegate? { - - get { - refreshPlaceholder() - return super.delegate - } - - set { - super.delegate = newValue - } - } - - @objc override open var intrinsicContentSize: CGSize { - guard !hasText else { - return super.intrinsicContentSize - } - - var newSize = super.intrinsicContentSize - let placeholderInsets = self.placeholderInsets - newSize.height = placeholderExpectedFrame.height + placeholderInsets.top + placeholderInsets.bottom - - return newSize - } -} diff --git a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQBarButtonItem.swift b/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQBarButtonItem.swift deleted file mode 100644 index ce7f30d..0000000 --- a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQBarButtonItem.swift +++ /dev/null @@ -1,99 +0,0 @@ -// -// IQBarButtonItem.swift -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-20 Iftekhar Qurashi. -// -// 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 - UIKit contains Foundation -import UIKit - -@available(iOSApplicationExtension, unavailable) -@objc open class IQBarButtonItem: UIBarButtonItem { - - @objc public override init() { - super.init() - initialize() - } - - @objc public required init?(coder aDecoder: NSCoder) { - super.init(coder: aDecoder) - initialize() - } - - private func initialize() { - - let states: [UIControl.State] = [.normal, .highlighted, .disabled, .focused] - - for state in states { - - setBackgroundImage(nil, for: state, barMetrics: .default) - setBackgroundImage(nil, for: state, style: .plain, barMetrics: .default) - setBackButtonBackgroundImage(nil, for: state, barMetrics: .default) - } - - setTitlePositionAdjustment(UIOffset(), for: .default) - setBackgroundVerticalPositionAdjustment(0, for: .default) - setBackButtonBackgroundVerticalPositionAdjustment(0, for: .default) - } - - @objc override open var tintColor: UIColor? { - didSet { - - var textAttributes = [NSAttributedString.Key: Any]() - textAttributes[.foregroundColor] = tintColor - - if let attributes = titleTextAttributes(for: .normal) { - for (key, value) in attributes { - textAttributes[key] = value - } - } - - setTitleTextAttributes(textAttributes, for: .normal) - } - } - - /** - Boolean to know if it's a system item or custom item, we are having a limitation that we cannot override a designated initializer, so we are manually setting this property once in initialization - */ - @objc internal var isSystemItem = false - - /** - Additional target & action to do get callback action. Note that setting custom target & selector doesn't affect native functionality, this is just an additional target to get a callback. - - @param target Target object. - @param action Target Selector. - */ - @objc open func setTarget(_ target: AnyObject?, action: Selector?) { - if let target = target, let action = action { - invocation = IQInvocation(target, action) - } else { - invocation = nil - } - } - - /** - Customized Invocation to be called when button is pressed. invocation is internally created using setTarget:action: method. - */ - @objc open var invocation: IQInvocation? - - deinit { - target = nil - } -} diff --git a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQInvocation.swift b/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQInvocation.swift deleted file mode 100644 index f43cd6e..0000000 --- a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQInvocation.swift +++ /dev/null @@ -1,45 +0,0 @@ -// -// IQInvocation.swift -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-20 Iftekhar Qurashi. -// -// 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 - -@available(iOSApplicationExtension, unavailable) -@objc public final class IQInvocation: NSObject { - @objc public weak var target: AnyObject? - @objc public var action: Selector - - @objc public init(_ target: AnyObject, _ action: Selector) { - self.target = target - self.action = action - } - - @objc public func invoke(from: Any) { - if let target = target { - UIApplication.shared.sendAction(action, to: target, from: from, for: UIEvent()) - } - } - - deinit { - target = nil - } -} diff --git a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQPreviousNextView.swift b/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQPreviousNextView.swift deleted file mode 100644 index f2add12..0000000 --- a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQPreviousNextView.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// IQPreviousNextView.swift -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-20 Iftekhar Qurashi. -// -// 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 - -@available(iOSApplicationExtension, unavailable) -@objc open class IQPreviousNextView: UIView { - -} diff --git a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQTitleBarButtonItem.swift b/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQTitleBarButtonItem.swift deleted file mode 100644 index 341d463..0000000 --- a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQTitleBarButtonItem.swift +++ /dev/null @@ -1,167 +0,0 @@ -// -// IQTitleBarButtonItem.swift -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-20 Iftekhar Qurashi. -// -// 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 - -@available(iOSApplicationExtension, unavailable) -@objc open class IQTitleBarButtonItem: IQBarButtonItem { - - @objc open var titleFont: UIFont? { - - didSet { - if let unwrappedFont = titleFont { - titleButton?.titleLabel?.font = unwrappedFont - } else { - titleButton?.titleLabel?.font = UIFont.systemFont(ofSize: 13) - } - } - } - - @objc override open var title: String? { - didSet { - titleButton?.setTitle(title, for: .normal) - } - } - - /** - titleColor to be used for displaying button text when displaying title (disabled state). - */ - @objc open var titleColor: UIColor? { - - didSet { - - if let color = titleColor { - titleButton?.setTitleColor(color, for: .disabled) - } else { - titleButton?.setTitleColor(UIColor.lightGray, for: .disabled) - } - } - } - - /** - selectableTitleColor to be used for displaying button text when button is enabled. - */ - @objc open var selectableTitleColor: UIColor? { - - didSet { - - if let color = selectableTitleColor { - titleButton?.setTitleColor(color, for: .normal) - } else { - #if swift(>=5.1) - titleButton?.setTitleColor(UIColor.systemBlue, for: .normal) - #else - titleButton?.setTitleColor(UIColor(red: 0.0, green: 0.5, blue: 1.0, alpha: 1), for: .normal) - #endif - } - } - } - - /** - Customized Invocation to be called on title button action. titleInvocation is internally created using setTitleTarget:action: method. - */ - @objc override open var invocation: IQInvocation? { - - didSet { - - if let target = invocation?.target, let action = invocation?.action { - self.isEnabled = true - titleButton?.isEnabled = true - titleButton?.addTarget(target, action: action, for: .touchUpInside) - } else { - self.isEnabled = false - titleButton?.isEnabled = false - titleButton?.removeTarget(nil, action: nil, for: .touchUpInside) - } - } - } - - internal var titleButton: UIButton? - private var _titleView: UIView? - - override init() { - super.init() - } - - @objc public convenience init(title: String?) { - - self.init(title: nil, style: .plain, target: nil, action: nil) - - _titleView = UIView() - _titleView?.backgroundColor = UIColor.clear - - titleButton = UIButton(type: .system) - titleButton?.isEnabled = false - titleButton?.titleLabel?.numberOfLines = 3 - titleButton?.setTitleColor(UIColor.lightGray, for: .disabled) - #if swift(>=5.1) - titleButton?.setTitleColor(UIColor.systemBlue, for: .normal) - #else - titleButton?.setTitleColor(UIColor(red: 0.0, green: 0.5, blue: 1.0, alpha: 1), for: .normal) - #endif - titleButton?.backgroundColor = UIColor.clear - titleButton?.titleLabel?.textAlignment = .center - titleButton?.setTitle(title, for: .normal) - titleFont = UIFont.systemFont(ofSize: 13.0) - titleButton?.titleLabel?.font = self.titleFont - _titleView?.addSubview(titleButton!) - - if #available(iOS 11, *) { - - let layoutDefaultLowPriority = UILayoutPriority(rawValue: UILayoutPriority.defaultLow.rawValue-1) - let layoutDefaultHighPriority = UILayoutPriority(rawValue: UILayoutPriority.defaultHigh.rawValue-1) - - _titleView?.translatesAutoresizingMaskIntoConstraints = false - _titleView?.setContentHuggingPriority(layoutDefaultLowPriority, for: .vertical) - _titleView?.setContentHuggingPriority(layoutDefaultLowPriority, for: .horizontal) - _titleView?.setContentCompressionResistancePriority(layoutDefaultHighPriority, for: .vertical) - _titleView?.setContentCompressionResistancePriority(layoutDefaultHighPriority, for: .horizontal) - - titleButton?.translatesAutoresizingMaskIntoConstraints = false - titleButton?.setContentHuggingPriority(layoutDefaultLowPriority, for: .vertical) - titleButton?.setContentHuggingPriority(layoutDefaultLowPriority, for: .horizontal) - titleButton?.setContentCompressionResistancePriority(layoutDefaultHighPriority, for: .vertical) - titleButton?.setContentCompressionResistancePriority(layoutDefaultHighPriority, for: .horizontal) - - let top = NSLayoutConstraint.init(item: titleButton!, attribute: .top, relatedBy: .equal, toItem: _titleView, attribute: .top, multiplier: 1, constant: 0) - let bottom = NSLayoutConstraint.init(item: titleButton!, attribute: .bottom, relatedBy: .equal, toItem: _titleView, attribute: .bottom, multiplier: 1, constant: 0) - let leading = NSLayoutConstraint.init(item: titleButton!, attribute: .leading, relatedBy: .equal, toItem: _titleView, attribute: .leading, multiplier: 1, constant: 0) - let trailing = NSLayoutConstraint.init(item: titleButton!, attribute: .trailing, relatedBy: .equal, toItem: _titleView, attribute: .trailing, multiplier: 1, constant: 0) - - _titleView?.addConstraints([top, bottom, leading, trailing]) - } else { - _titleView?.autoresizingMask = [.flexibleWidth, .flexibleHeight] - titleButton?.autoresizingMask = [.flexibleWidth, .flexibleHeight] - } - - customView = _titleView - } - - @objc required public init?(coder aDecoder: NSCoder) { - super.init(coder: aDecoder) - } - - deinit { - customView = nil - } -} diff --git a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQToolbar.swift b/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQToolbar.swift deleted file mode 100644 index f5a541d..0000000 --- a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQToolbar.swift +++ /dev/null @@ -1,252 +0,0 @@ -// -// IQToolbar.swift -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-20 Iftekhar Qurashi. -// -// 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 - -/** @abstract IQToolbar for IQKeyboardManager. */ -@available(iOSApplicationExtension, unavailable) -@objc open class IQToolbar: UIToolbar, UIInputViewAudioFeedback { - - override init(frame: CGRect) { - super.init(frame: frame) - - initialize() - } - - @objc required public init?(coder aDecoder: NSCoder) { - super.init(coder: aDecoder) - - initialize() - } - - private func initialize() { - - sizeToFit() - - autoresizingMask = .flexibleWidth - self.isTranslucent = true - self.barTintColor = nil - - let positions: [UIBarPosition] = [.any, .bottom, .top, .topAttached] - - for position in positions { - - self.setBackgroundImage(nil, forToolbarPosition: position, barMetrics: .default) - self.setShadowImage(nil, forToolbarPosition: .any) - } - - //Background color - self.backgroundColor = nil - } - - /** - Previous bar button of toolbar. - */ - private var privatePreviousBarButton: IQBarButtonItem? - @objc open var previousBarButton: IQBarButtonItem { - get { - if privatePreviousBarButton == nil { - privatePreviousBarButton = IQBarButtonItem(image: nil, style: .plain, target: nil, action: nil) - } - return privatePreviousBarButton! - } - - set (newValue) { - privatePreviousBarButton = newValue - } - } - - /** - Next bar button of toolbar. - */ - private var privateNextBarButton: IQBarButtonItem? - @objc open var nextBarButton: IQBarButtonItem { - get { - if privateNextBarButton == nil { - privateNextBarButton = IQBarButtonItem(image: nil, style: .plain, target: nil, action: nil) - } - return privateNextBarButton! - } - - set (newValue) { - privateNextBarButton = newValue - } - } - - /** - Title bar button of toolbar. - */ - private var privateTitleBarButton: IQTitleBarButtonItem? - @objc open var titleBarButton: IQTitleBarButtonItem { - get { - if privateTitleBarButton == nil { - privateTitleBarButton = IQTitleBarButtonItem(title: nil) - privateTitleBarButton?.accessibilityLabel = "Title" - privateTitleBarButton?.accessibilityIdentifier = privateTitleBarButton?.accessibilityLabel - } - return privateTitleBarButton! - } - - set (newValue) { - privateTitleBarButton = newValue - } - } - - /** - Done bar button of toolbar. - */ - private var privateDoneBarButton: IQBarButtonItem? - @objc open var doneBarButton: IQBarButtonItem { - get { - if privateDoneBarButton == nil { - privateDoneBarButton = IQBarButtonItem(title: nil, style: .done, target: nil, action: nil) - } - return privateDoneBarButton! - } - - set (newValue) { - privateDoneBarButton = newValue - } - } - - /** - Fixed space bar button of toolbar. - */ - private var privateFixedSpaceBarButton: IQBarButtonItem? - @objc open var fixedSpaceBarButton: IQBarButtonItem { - get { - if privateFixedSpaceBarButton == nil { - privateFixedSpaceBarButton = IQBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil) - } - privateFixedSpaceBarButton!.isSystemItem = true - - if #available(iOS 10, *) { - privateFixedSpaceBarButton!.width = 6 - } else { - privateFixedSpaceBarButton!.width = 20 - } - - return privateFixedSpaceBarButton! - } - - set (newValue) { - privateFixedSpaceBarButton = newValue - } - } - - @objc override open func sizeThatFits(_ size: CGSize) -> CGSize { - var sizeThatFit = super.sizeThatFits(size) - sizeThatFit.height = 44 - return sizeThatFit - } - - @objc override open var tintColor: UIColor! { - - didSet { - if let unwrappedItems = items { - for item in unwrappedItems { - item.tintColor = tintColor - } - } - } - } - - @objc override open func layoutSubviews() { - - super.layoutSubviews() - - if #available(iOS 11, *) { - return - } else if let customTitleView = titleBarButton.customView { - var leftRect = CGRect.null - var rightRect = CGRect.null - var isTitleBarButtonFound = false - - let sortedSubviews = self.subviews.sorted(by: { (view1: UIView, view2: UIView) -> Bool in - if view1.frame.minX != view2.frame.minX { - return view1.frame.minX < view2.frame.minX - } else { - return view1.frame.minY < view2.frame.minY - } - }) - - for barButtonItemView in sortedSubviews { - - if isTitleBarButtonFound { - rightRect = barButtonItemView.frame - break - } else if barButtonItemView === customTitleView { - isTitleBarButtonFound = true - //If it's UIToolbarButton or UIToolbarTextButton (which actually UIBarButtonItem) - } else if barButtonItemView.isKind(of: UIControl.self) { - leftRect = barButtonItemView.frame - } - } - - let titleMargin: CGFloat = 16 - - let maxWidth: CGFloat = self.frame.width - titleMargin*2 - (leftRect.isNull ? 0 : leftRect.maxX) - (rightRect.isNull ? 0 : self.frame.width - rightRect.minX) - let maxHeight = self.frame.height - - let sizeThatFits = customTitleView.sizeThatFits(CGSize(width: maxWidth, height: maxHeight)) - - var titleRect: CGRect - - if sizeThatFits.width > 0, sizeThatFits.height > 0 { - let width = min(sizeThatFits.width, maxWidth) - let height = min(sizeThatFits.height, maxHeight) - - var xPosition: CGFloat - - if !leftRect.isNull { - xPosition = titleMargin + leftRect.maxX + ((maxWidth - width)/2) - } else { - xPosition = titleMargin - } - - let yPosition = (maxHeight - height)/2 - - titleRect = CGRect(x: xPosition, y: yPosition, width: width, height: height) - } else { - - var xPosition: CGFloat - - if !leftRect.isNull { - xPosition = titleMargin + leftRect.maxX - } else { - xPosition = titleMargin - } - - let width: CGFloat = self.frame.width - titleMargin*2 - (leftRect.isNull ? 0 : leftRect.maxX) - (rightRect.isNull ? 0 : self.frame.width - rightRect.minX) - - titleRect = CGRect(x: xPosition, y: 0, width: width, height: maxHeight) - } - - customTitleView.frame = titleRect - } - } - - @objc open var enableInputClicksWhenVisible: Bool { - return true - } -} diff --git a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift b/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift deleted file mode 100644 index 0b7c1fd..0000000 --- a/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift +++ /dev/null @@ -1,552 +0,0 @@ -// -// IQUIView+IQKeyboardToolbar.swift -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-20 Iftekhar Qurashi. -// -// 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 - -/** - IQBarButtonItemConfiguration for creating toolbar with bar button items - */ -@available(iOSApplicationExtension, unavailable) -@objc public final class IQBarButtonItemConfiguration: NSObject { - - @objc public init(barButtonSystemItem: UIBarButtonItem.SystemItem, action: Selector) { - self.barButtonSystemItem = barButtonSystemItem - self.image = nil - self.title = nil - self.action = action - super.init() - } - - @objc public init(image: UIImage, action: Selector) { - self.barButtonSystemItem = nil - self.image = image - self.title = nil - self.action = action - super.init() - } - - @objc public init(title: String, action: Selector) { - self.barButtonSystemItem = nil - self.image = nil - self.title = title - self.action = action - super.init() - } - - public let barButtonSystemItem: UIBarButtonItem.SystemItem? //System Item to be used to instantiate bar button. - - @objc public let image: UIImage? //Image to show on bar button item if it's not a system item. - - @objc public let title: String? //Title to show on bar button item if it's not a system item. - - @objc public let action: Selector? //action for bar button item. Usually 'doneAction:(IQBarButtonItem*)item'. -} - -/** - UIImage category methods to get next/prev images - */ -// swiftlint:disable nesting -// swiftlint:disable line_length -@available(iOSApplicationExtension, unavailable) -@objc public extension UIImage { - - static func keyboardLeftImage() -> UIImage? { - - struct Static { - static var keyboardLeftImage: UIImage? - } - - if Static.keyboardLeftImage == nil { - - let base64Data = "iVBORw0KGgoAAAANSUhEUgAAACQAAAA/CAYAAACIEWrAAAAAAXNSR0IArs4c6QAABtFJREFUaAXFmV1oHFUUx++d3SSbj/0k6Uc2u7Ob7QeVSqBSP7AUm1JpS0tb+6nFYhELxfahDxVU9KmgD0UU7ENRLLRQodRqNbVJY5IGXwRBEPHBh2x2ZpPQaDC7W2qSzc5c/3ebDTN3d5Pd7Gw6L3PPOcM5vzn33I+5Q8gTvJqbm52RYPAdIEg5DFuusdz3dq/X7XA6ewiVTvrcnvBkMvE9GNgTAQoGg16pztFLKX02mwhKOrwe99rJZPL2sgO1tbX5aiWpDzDPGHuFEvq01+2ZpEZltdutra3NjpranxC0Q4zFCLsVVZRjdtFQLTmycuUKZq/pA8zGvBiM3IiqynHoM8sCFGoJrSIO1o9u2SDCIDPXAXMCeo3bqg4UCARaJYkMEELXiTCEkauAOQm9nrPNj/+cwso7aiZQS6VBdFMeDDLz1ZAaM8Hw2FXLUHj1apnaawYIpWHxJRkjl5GZ09Az0VYVIFmWw6iXAWRGFgMynV2KxpWzhWD4s5Z3GeaZNXZGeTflwzDyGWDOFIPhQJZmqN3vX0clG7qJtHLnpktnFwFz3qQrIFgGJK+WN+D1+jGaVolxGNM/jsbVd0V9IdkSoEggsJFJlE96K8Qgus4uDMfVD0R9MbniGgr7/R1YsXkB58FgEH04HFdKhuGQFWUIo2kTZaQXQ9snvjGG9nsY2h+J+sXkJQO1BwKbMYv0YNX2ikF0ws4Pq8pFUV+KvCSgkD/0PCaMbnSTWwyCzJwDzKeivlS5bCBsOV/EsL6LAE5jEMYvSs4C5pJRX267LKBwILAVw/oOgjQZAz1mYaejinrZqF9Ku+QdY0SWOzkMaqbRGAgwOjJzKqqqXxj1S22jDBa/wsHgDqxNtwFTb3w6C0PYyWFVvWrUV9JetMsibfIuRuktkDuMgQCjYRdzYnhEvW7UV9peEKg9GNyDOeYmYOpMgRjLYD9zHDA3THoLhKIzdSgQ2k+p9A1imGEImUXNHEM3WQ7D36dghlAzhyRKeFfU8IcMV1rTtSOxePy2QWdpMw8oEggdwxp0DVFE2wy66SBg+LCv2mUa9mFZfhORrmA0mWCwz5zWdW0/uolPiFW95msIMGckQr8EjAkSo2mKMH0vMtNTVZI559lMtAdC5zCSPhEDAuaRppG9yqg6INqqJVNk5m1k5nMxAGAYYLYro8qywXAGiWYyvYSxUREIXUdtdnIKelM9ic9ZLWeXDnxdRmppdnMeEAMgUTex0XoN+lnRVg05C8Qd828pW5FvKUwD3w0pylE8lq4GhNHnPBBX+v3+tjpbTT+lZK3xId5GprqQqUNozog2K2UTEHfMDwdqJBtOKsh6MRAmxru6Ql+Jkdi0aLNKzgPijvnxia2e9WFhfUoMhC1qb1rP7BsZGZkSbVbI8xOj0Vnsn9gDMjO9DcH/MOp5G925o1aydeFko0G0WSEXBOKOh8bH/57OpDuxbPwuBsKM0Omw195taWkxbWXF55YiFwXizsbGxibSWqYTFf2b6ByZ2uqsb+jmZ82irRK5YA2JDkOekEdykXuA2CzaMP5+YanUzujkZDLfVr6mJCDu1ufzubxOZzeq6AUxDGrtVz1FXo4lYgnRVq5cMhB3zLvH1dD4I2poS14gdOuMru3A6Ps3z1aGYsEaEv1MTEw8fDQzvRP6QdGG4bep1mbv52fRebYyFGUBcb/j4+OPpmbTuzFz4yzIfCHdHQ6cK/IzabOldKlsIO4ao++/tK7tQe3cE0OhOzcSh+N+9mxaNJYgl1VDBfzVtcsyvtnobtGG+euvWV3rjMfjY6JtIXlJGTI4nMH/iQPI1A8GXbaJN13Pz6j5gi3aFpIrBeK+01E1dhAL77d5gShd47DZB/mZdZ6tiKLSLjO6tUeCoes4qjlsVPI2uk/RCNumKMqwaBNlKzKU85nBr4JXkamvc4rcHW8t87NrvjPN6YrdrQTiMTTU1OtY+67lBaQk+9+Dn2Xn2QwKq4G4a21IVd5Apq4Y4jxuUuonNvv97Jl2nnHukSJ6K9Q0EpQvYwZ/S3SGmhrPMH27qqp/ijbTV6porFTGT90u/NxdgXnKtEtATTXZKD3scTb1JFKpcWOcqgLxQIC643F7fNi6PGcMjHYjZvUjrkZPb/Jh8kHOVnUgHiiRTHQjUy5kyrx1obSBSuSI1+Xqm0ylsjP6sgBxKGTqHn6D1yNTpq0LslSPXxNH3c6mAXTfqJUTI4+76IXT3AvY5L1f4MFUhrBdy5ahHAAy1e91uzD46Es53dydYv7qWnYgHhxQgx6XexZQ2+dgZojGDuCf2p0nAsQhEqnkzz63awpz0hacve+LjqjZA7H/AWSbJ/TPf3CuAAAAAElFTkSuQmCC" - - if let data = Data(base64Encoded: base64Data, options: .ignoreUnknownCharacters) { - Static.keyboardLeftImage = UIImage(data: data, scale: 3) - } - - //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448) - Static.keyboardLeftImage = Static.keyboardLeftImage?.imageFlippedForRightToLeftLayoutDirection() - } - - return Static.keyboardLeftImage - } - - static func keyboardRightImage() -> UIImage? { - - struct Static { - static var keyboardRightImage: UIImage? - } - - if Static.keyboardRightImage == nil { - - let base64Data = "iVBORw0KGgoAAAANSUhEUgAAACQAAAA/CAYAAACIEWrAAAAAAXNSR0IArs4c6QAABu5JREFUaAXFmXtsFEUcx2f3rj0Kvd29k9LHtXfXqyjGV2J8EF/hIQgp4VnahPgIxviH0ZgYNSbGmBg1McaYGGOM+o8k+EINMQjIo6UoBAVEEBGQXnvbS1ttw91epUDbu/E7lb3bm22Pu97uOQnszO+3ne/nvjM7sw9CMsXRFAi83jhnTnUmVPqacEXSGfIHPhMEoYUSejpJyKJIJNJfehxCRIiWwZktDIYBCESY56BCZ319ve9/AQr5/c8CY7VRXBDIXJfo6Kyrq2swxktRZ0NWFgoEPocza3lBDF9P6rKwsGegp4fP2dVmQzYWjkTaCCVf8iKADIou0un3+0N8zq42A2JlvEvt2QBHPv2vmfkfFvrLiNAZqq+fm4naV9OBmEISTj0MpzaZ5AShXhAd+xrr6q435SwO6Je9sVsRc+ojDNdjxiCrw8GBcUoXq6p6is9Z1TY6pPeZglOPQ/1DPaAfAVnjFMQODN/Neszqo2OqDmNa/DuPJM/G+nSn8RxYOgux9Upl5a748PBfxpwV9SmBWOexhLbdIyserEvzs8QEYSYRxFZJUfZommbpip4TaAJKi+/0SnIlEYS7jVBwqQJutXkkqT2WSPQZc8XUrwo0AZXQdntkaQYg7jWKYU4hJrZJlXKnNqxFjbnp1vMCmoDStL2KJDsBdT8n5hJFoRXAP8Q0TeVyBTfzBmI9xxNah1eRU9j7FnJKLrTbZLf7QDyRiHC5gpoFAbGe4cJ+TPRRTPTFRiU4V45/rV5FOYRzuo25QuoFA7HOsST8qCjyBcyhpUYxAJVRSloVSToMp7qMuXzr0wJincc17SCc0uDUMqMYg8JEb/W65aNYNs4Zc/nUpw3EOodTh+DUEFb15QDBKpAuTiJi8ZSl4wA/m47mUSkKiPUPwcNeWR6ghDRzUA60W+DUSTh1Og+WiVOKBmK9YBIfVRQlCqdW8FC4J16nyPJpgOe1IVsCxKAgeAxOReDUyiwoTCik13olz9lYIn6SnZurWAbERODUcY+idMGpVYBK30mwOm5d1sCpMMBPlAzoCtRvsiSdEdmDAweF/Go4pcKpX6eCstQhXQRr0O9w6hTWqTWIpTXYUMKpVXCqD079op9vPKZPNgatqGP4/pAl9wlRENnTTFqHQaG9wiN5/oZTR3it9Il8woo2nDrjUeRjcGod+nPqfTIoYDVjnToPp37W4+xoKxATgFN/ym7lCKZ4C6xJQ7EcqJZjsx7BOQdZmxXbgZhIPBE/h9uTn1BdD4gyFssUYQmgkoDaz2IlAWJCEAxLlcpBDFULoMpZLFOERdgXBWxF+4z7TyZvYy1YH1wginQvoNLrlC6XIvT5rDHVEzYeRYdINhrXJ10LK7yapPSbUgI58AC6CQAbdAj9SCntpmOjC9X+/kipgJxN/uBmALTqEOkjpecujY8t6uvv72WxUgBNvO6B1iSve8jxkdHLSwYGBgZ1QLuByuHMFoit1AUzR3psNJl8ADDnMzF7HXLhveXXuB9qNgqyOubMkXFCl0aj0Rifs8WhIAnOcPjJVsA8yAsC5xAZTixTYzHNnLPBIbwsrcA68y0u7Qd4QThzIDFyYflQLDbM5/S2pQ5VV1fPcjkc27BLLdAF9CMej/YPXxxpHhoa+kePTXa0DKiqqqpylqtiO0TuMwvRDlzaKwYHB0fMueyIJUBer1eSKmbuwJzJekPCpODM7tFUclVfX9/FbOnJW0UDhTwembil79H9XWYJujOlCmuiJHrJnJs8UhQQXhd7MF92YYe+ne8eE3hbWI20IH6Zz+Vqm3bcXCcbcz6f7xo8M7Nd2wSDgdoKGHaXWBAM639aDtXU1FS5nGV78Pe3sE6MBc58BRi2gY4Z4/nWCwZin6/EctdeCNxoEqHkC8A8hPi4KZdnoCCgQCBQi/nSjnkzj+8fzmwGzKOIJ/lcIe285xD7XOUgwj48QZhgUpR8AphHioVh4HkBsc9U7HMV3LnO9Gsp/bhb7dmIOF71FV+uOmSNtbUBwVnWgb2pkZejNPVBWFWfRBx3oNaUnEDssxTuxdvhTMAkl6LvhXvVp03xIgNTDhnmzLXss9RkMHg+f6erN2I5DPstkzrEPkOJoqMdw1TH/+AUpW91q5EX+LhVbRNQoDZwA54t2aVdYxahbwDmJXPcukgWUFNDw01UxHZAyBxeArv2q7i0X+HjVrfTQI0+3634wrMHMLPNIvRlwLxmjlsfmQDCCnwb3iTtxpzx8hK4tF/Epf0mH7er7Qw1NNyBzndh11Z4kVSKPtfdq77Nx+1sO7GiVeCNpBN3e9mFpp4BzLvZQftbExhNfv89mD87IOfGJollhjwV7o28b798DoWgLzgfD3bnAfdEjtNsT/0LGvgrBSkuN9gAAAAASUVORK5CYII=" - - if let data = Data(base64Encoded: base64Data, options: .ignoreUnknownCharacters) { - Static.keyboardRightImage = UIImage(data: data, scale: 3) - } - - //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448) - Static.keyboardRightImage = Static.keyboardRightImage?.imageFlippedForRightToLeftLayoutDirection() - } - - return Static.keyboardRightImage - } - - static func keyboardUpImage() -> UIImage? { - - struct Static { - static var keyboardUpImage: UIImage? - } - - if Static.keyboardUpImage == nil { - - let base64Data = "iVBORw0KGgoAAAANSUhEUgAAAD8AAAAkCAYAAAA+TuKHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAAGmklEQVRoBd1ZWWwbRRie2bVz27s2adPGxzqxqAQCIRA3CDVJGxpKaEtRoSAVISQQggdeQIIHeIAHkOCBFyQeKlARhaYHvUJa0ksVoIgKUKFqKWqdeG2nR1Lsdeo0h73D54iku7NO6ySOk3alyPN//+zM/81/7MyEkDl66j2eJXWK8vocTT82rTgXk/t8vqBNEI9QSp9zOeVkPJnomgs7ik5eUZQ6OxGOEEq9WcKUksdlWbqU0LRfi70ARSXv8Xi8dkE8CsJ+I1FK6BNYgCgW4A8jPtvtopFHqNeWCLbDIF6fkxQjK91O1z9IgRM59bMAFoV8YEFgka1EyBJfMhkH5L9ACFstS9IpRMDJyfoVEp918sGamoVCme0QyN3GG87wAKcTOBYA4hrJKf+VSCb+nsBnqYHVnr2ntra2mpWWH0BVu52fhRH2XSZDmsA/xensokC21Pv9T3J4wcWrq17gob1er7tEhMcJuYsfGoS3hdTweuBpxaM0iCJph8fLuX7DJMPWnI2GOzi8YOKseD4gB+RSQezMRRx5vRPEn88Sz7IIx8KHgT3FCBniWJUyke6o8/uXc3jBxIKTd7vdTsFJfkSo38NbCY/vPRsOPwt81KgLqeoBXc+sBjZsxLF4ZfgM7goqSqMRL1S7oOSrq6sdLodjH0rYfbyByPEOePwZ4CO8Liv3RCL70Wctr8+mA2NkT53P91iu92aCFYx8TU1NpbOi8gfs2R7iDYLxnXqYPg3c5Fm+Xygcbs/omXXATZGBBagQqNAe9Psf4d+ZiVwQ8qjqFVVl5dmi9ShvDEL90IieXtVDevic5ruOyYiAXYiA9YSxsZow0YnSKkKFjoAn8OAENsPGjKs9qnp5iSDuBXFLXsLjR4fSIy29vb2DU7UThW4d8n0zxjXtRVAYNaJnlocikWNTHZPvP1PPl2LLujM3cfbzwJXUyukQzxrZraptRCcbEDm60Wh4S0IE7McByVJQjf3yac+EfEm9ouxAcWu2TsS6koOplr6+vstWXf5IKBrejBR4ybIAlLpE1JE6j8eyh8h/dEKmS95e7w9sy57G+MkQ6sdYMrmiv79/gNdNR0YEbGKUvIIFQMRffRBtbkG0HQj6fHdcRafWmg55Gzy+BR5vtUzF2O96kjSH4nHNopsB0B0Ob6SEvcYvAPYS1UwQDyqLFcu5IZ/pTMUkjxfEoD/wLVY9+z02PXDL8RE9s0y9qMZNigIJcU37TZblfj7aUAMqURLXuqqq9sQHBi5NZbqpkBfh8a9BPLtDMz3wyImh9GhTLBab0uSmQfIQcNQ95pJkDVG3wtgdC1KFA+HaSodjdzKZ/Neou1Y7X/JC0K98BeIvWAdjp+jwUKN6/nyfVVd4JK4lunDrkwJhc6Gl1GGjwhqnLO3UNC2Rz8z5kKfw+EYQf5EfEKF+Wh+kDd0XYxd43WzKiIBfEAEjiIAm0zyUSFiU1XJF+feJy5evW3euR57C41+A+MumSbICY2dGmd6gnlPPWXRFABABP7llCXsA2mCcDjVAJoK4qryycsfAwEDSqOPb1yQPj38O4q/yL4F4aCiTXhqNRmMWXREBFMGjslOywUbToQeyyy4IrVVO53bUgEk/uZOSr/MHPsOd0hs8F4R6mI2ONKi9vRFeNxdyIqkddknOMhA2nyuy+wAqtEol8rbEYCLnZisneXj8UxB/00KGkUiGsqU90WiPRTeHACLgoNsp4eBDHzaagRS4RbCzle6ysq3xVIq/LiMW8ti5fYRVfMs4yFibsdgI05eqqhqy6OYBEE9qnSiCLhRB7tRHFzDR1oIasBU1wHTAMpHHjcmHIP4OzwXf8XMkk24IR6NneN18klEE97mc0gJwuN9oF+SFNlF8vNJR1YYacGVcN0Eet6XvY6Pw3rhi/Bc5fiEzShp7eiOnx7H5/IsI6EAELEIE3Gu0EymwyCbQZocktWEfMHa3MEa+zqe8KwjCB8bO/7f70kxvVGPqyRy6eQshAtpdsuTDN/9us5F0MQ4zTS5BaIsPDQ3jO+5/G+fjj82dIDF2CZeKjd3R6J8W3Y0BYFca+JJQssFqLuvSUqlmESHSiZywGzsgx+OZNFnWE4scN+I3WJshAnYjAm5FBNxptp16y+y2hICLEtOVMXJcI0xvDveGi/ofU7NxBZN0XIpuIIy0mUZkZNNZVf1kDAt6lZagEhjGnxbweh8wdbw5hOwdxHbwY/j9BpTM9xi4MGzFvZhpk3Bz8J5gkb19ym7cJr5w/wEmUjzJqoNVhwAAAABJRU5ErkJggg==" - - if let data = Data(base64Encoded: base64Data, options: .ignoreUnknownCharacters) { - Static.keyboardUpImage = UIImage(data: data, scale: 3) - } - - //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448) - Static.keyboardUpImage = Static.keyboardUpImage?.imageFlippedForRightToLeftLayoutDirection() - } - - return Static.keyboardUpImage - } - - static func keyboardDownImage() -> UIImage? { - - struct Static { - static var keyboardDownImage: UIImage? - } - - if Static.keyboardDownImage == nil { - - let base64Data = "iVBORw0KGgoAAAANSUhEUgAAAD8AAAAkCAYAAAA+TuKHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAAGp0lEQVRoBd1ZCWhcRRiemff25WrydmOtuXbfZlMo4lEpKkppm6TpZUovC4UqKlQoUhURqQcUBcWDIkhVUCuI9SpJa+2h0VZjUawUEUUUirLNXqmxSnc32WaT7O4bv0nd5R1bc+2maR8s7z9m5v+/+f/5Z94sIf89jW73Yp/bfUuWvwLfDp/H8zhwObLYmCCaPJ6FjLJPCWNHNU1bkFVeQW/Zp2l7KWUvNmlaB3DJAhvz1ntvI5R1EUpnUUKdEifHGuvr519BwKUmj/cDYNtwARNd5/NoH4GWKIhzlFKXCSzn/xCut/jD4V9N8suPYYj4ewC+2e46f55Rwp/geExKSmdzJn2l1WrXmuSXF8MQ8XfyAeeEn9KTyV3MHwq9RTh50IqLEjJHUkh3Y13dPKvuMuApIr6bUHKP1VeE+Y8MIa09Z8/+JQlltD/+Q7VaFcW6X2VsjFmbRRnbUFFZeai/v/+cUTeDaYqIv4GlfL/NR879I3qmORwOnxG6UfCCiMbjJ51VagKdlgs+91BaKVO6oVJVD8bj8WhOPkMJn1t7jTL6gNU9pHpgKJ1q7u3tjWR1OfBCEOuPf+9Sq4YwAW3ZBqNvSqsYpeuc5WUHYolE3KSbQYzP430FwB+yuoSCFtKHaXP4z3DIqDOBFwpkwHfVThXLgrYaG6IGOAmT1pZVVHw8MDDQb9TNBLrJre0E8EdtvnAeSRPeHOwN9lh1NvCiASbgG5fqRLDJEmMHsSU6GFuDGrAfNWDAqLuUNE5uL6A2bbf5wPkZrmdaAuGw36aDIC940TAajx1HBijIgEWmjpRWS4ytrnKq+1EDEibdJWAa3dqzjLGnrKaxxvt4OtXS09v7u1WX5S8KXjRABnQ7VbUCEV+Y7SDeWAJX4dfuLCnZFzt//rxRN500jqo74NvTVptY42fTnLcGI5FTVp2R/1/womEsHj/mwgxg27vd2BH8bCrLq0rKyjoTicSgUTcdNIrbkwD+nM2WOJ3qmaVI9d9sOotgTPCiPTLgi+oqdTbOAbea+lM6xyHLK8pnVXSiCCZNuiIyjZr2GArSS1YTOKie45n0UqT6L1ZdPn5c4EVHHIS6sA3WYLZvNg6E9L9GZmwZzgEdqAFDRl0xaET8EQB/2To21ngsQ0kbIv6zVXcxftzgxQDIgM+qVbUeGbDAPCCtxbfxUhdjHdGhoWGzrnAcIr4NwHflGbGf6PqyQCj0Yx7dRUUTAi9GwQQccapOL7bBm4yjIiPqSElpC5VYRzKZLPgE4M5hK0rt67CDZDM9A+k0XxmIhE6apONgJgxejBmLxw65VHUu/LjRaANeNZQpyhJZUToGBwdHjLqp0Ij4FgB/0wocaxw7DV8F4CcmM/6kwMMQRwYcrFad87DvXW8yTKlbkZVFSmlJB3bBlEk3CQYRvxfA3wbw0Vun7BAAPqjrmfaecPjbrGyib2sKTbS/LG5F4NhGe0d+fDiTuSMSiUx6F8Bn6V343N6TB3gSyb/aHwx22+2OX2KazfF3y7VMnw4FcUvCP8lJcgRtVph0yEu8pTnRBAiv270JwN+1AscQw5zr66YKXLgyVfBijBQc2YQ0PCIY4wPH2yQPERNTYpSPRSPid0qUvY/+1mU5QjJ8PVL96FhjjEdfCPDCzggyAKnPP7cZpWQFlsZ+yPGdMPaDiK/F6fEjbKeypXVK5/pGfyTYZZFPmi0UeOHAcCZI1+Oa6JjVG0SwHbcrnZDn7sytbQSPiLdLTBJXy+Z2nKcR8U09odDhfP0mKyskeBIggaERPb0WGfC1zSFK1gDcXsitER1t6m3wrkTEbRmC5ZTRCd+MiB+wjTlFwVSrfV7zdXV15aWy0oWKvNjWgJMOfyiAIklwYXLhwfd4G/47OAxnTMVRAKec3u0PB8SkFfyxFpSCGMBHTkpWHPsU2bEEKe8xDUrJdfhKnItzgiiEXKvXWhijR9CuzNgOwHWc1+87HQ5+aJQXki4KeOGgOOFJDkdnqeJowSGlweg00vsGHJAa1UpnTJKIAF5u1AM4R8S3APgeo7zQdFHS3uikz+VSSWXVlwBo+hoUbUR0ITfVHQEcEd+K4rbbOE4xaJPhYhg4HY3GcYG4HFB/so5vBT6q53TbdAAXtooe+SzghoaGakWSu2FwflZmfWMffxjAX7XKi8VPG3gBoKam5uoKpeQEDjBz7YD4dpwUd9rlxZMUPe2Nrvf19f2dTKdasap7jHIsiR3TDdxsfxq5xtpazad5g02al+Na6plpND0zTHk8Hp+4iLyU3vwLp0orLWXqrZQAAAAASUVORK5CYII=" - - if let data = Data(base64Encoded: base64Data, options: .ignoreUnknownCharacters) { - Static.keyboardDownImage = UIImage(data: data, scale: 3) - } - - //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448) - Static.keyboardDownImage = Static.keyboardDownImage?.imageFlippedForRightToLeftLayoutDirection() - } - - return Static.keyboardDownImage - } - - static func keyboardPreviousImage() -> UIImage? { - - if #available(iOS 10, *) { - return keyboardUpImage() - } else { - return keyboardLeftImage() - } - } - - static func keyboardNextImage() -> UIImage? { - - if #available(iOS 10, *) { - return keyboardDownImage() - } else { - return keyboardRightImage() - } - } -} - -/** -UIView category methods to add IQToolbar on UIKeyboard. -*/ -@available(iOSApplicationExtension, unavailable) -@objc public extension UIView { - - private struct AssociatedKeys { - static var keyboardToolbar = "keyboardToolbar" - static var shouldHideToolbarPlaceholder = "shouldHideToolbarPlaceholder" - static var toolbarPlaceholder = "toolbarPlaceholder" - } - - // MARK: Toolbar - - /** - IQToolbar references for better customization control. - */ - var keyboardToolbar: IQToolbar { - var toolbar = inputAccessoryView as? IQToolbar - - if toolbar == nil { - toolbar = objc_getAssociatedObject(self, &AssociatedKeys.keyboardToolbar) as? IQToolbar - } - - if let unwrappedToolbar = toolbar { - return unwrappedToolbar - } else { - - let frame = CGRect(origin: .zero, size: .init(width: UIScreen.main.bounds.width, height: 44)) - let newToolbar = IQToolbar(frame: frame) - - objc_setAssociatedObject(self, &AssociatedKeys.keyboardToolbar, newToolbar, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - - return newToolbar - } - } - - // MARK: Toolbar title - - /** - If `shouldHideToolbarPlaceholder` is YES, then title will not be added to the toolbar. Default to NO. - */ - var shouldHideToolbarPlaceholder: Bool { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.shouldHideToolbarPlaceholder) as? Bool ?? false - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.shouldHideToolbarPlaceholder, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - self.keyboardToolbar.titleBarButton.title = self.drawingToolbarPlaceholder - } - } - - /** - `toolbarPlaceholder` to override default `placeholder` text when drawing text on toolbar. - */ - var toolbarPlaceholder: String? { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.toolbarPlaceholder) as? String - } - set(newValue) { - objc_setAssociatedObject(self, &AssociatedKeys.toolbarPlaceholder, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - self.keyboardToolbar.titleBarButton.title = self.drawingToolbarPlaceholder - } - } - - /** - `drawingToolbarPlaceholder` will be actual text used to draw on toolbar. This would either `placeholder` or `toolbarPlaceholder`. - */ - var drawingToolbarPlaceholder: String? { - - if self.shouldHideToolbarPlaceholder { - return nil - } else if self.toolbarPlaceholder?.isEmpty == false { - return self.toolbarPlaceholder - } else if self.responds(to: #selector(getter: UITextField.placeholder)) { - - if let textField = self as? UITextField { - return textField.placeholder - } else if let textView = self as? IQTextView { - return textView.placeholder - } else { - return nil - } - } else { - return nil - } - } - - // MARK: Private helper - - // swiftlint:disable nesting - private static func flexibleBarButtonItem () -> IQBarButtonItem { - - struct Static { - - static let nilButton = IQBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) - } - - Static.nilButton.isSystemItem = true - return Static.nilButton - } - - // MARK: Common - - func addKeyboardToolbarWithTarget(target: AnyObject?, titleText: String?, rightBarButtonConfiguration: IQBarButtonItemConfiguration?, previousBarButtonConfiguration: IQBarButtonItemConfiguration? = nil, nextBarButtonConfiguration: IQBarButtonItemConfiguration? = nil) { - - //If can't set InputAccessoryView. Then return - if self.responds(to: #selector(setter: UITextField.inputAccessoryView)) { - - // Creating a toolBar for phoneNumber keyboard - let toolbar = self.keyboardToolbar - - var items: [IQBarButtonItem] = [] - - if let prevConfig = previousBarButtonConfiguration { - - var prev = toolbar.previousBarButton - - if prevConfig.barButtonSystemItem == nil, !prev.isSystemItem { - prev.title = prevConfig.title - prev.accessibilityLabel = prevConfig.accessibilityLabel - prev.accessibilityIdentifier = prev.accessibilityLabel - prev.image = prevConfig.image - prev.target = target - prev.action = prevConfig.action - } else { - if let systemItem = prevConfig.barButtonSystemItem { - prev = IQBarButtonItem(barButtonSystemItem: systemItem, target: target, action: prevConfig.action) - prev.isSystemItem = true - } else if let image = prevConfig.image { - prev = IQBarButtonItem(image: image, style: .plain, target: target, action: prevConfig.action) - } else { - prev = IQBarButtonItem(title: prevConfig.title, style: .plain, target: target, action: prevConfig.action) - } - - prev.invocation = toolbar.previousBarButton.invocation - prev.accessibilityLabel = prevConfig.accessibilityLabel - prev.accessibilityIdentifier = prev.accessibilityLabel - prev.isEnabled = toolbar.previousBarButton.isEnabled - prev.tag = toolbar.previousBarButton.tag - toolbar.previousBarButton = prev - } - - items.append(prev) - } - - if previousBarButtonConfiguration != nil, nextBarButtonConfiguration != nil { - - items.append(toolbar.fixedSpaceBarButton) - } - - if let nextConfig = nextBarButtonConfiguration { - - var next = toolbar.nextBarButton - - if nextConfig.barButtonSystemItem == nil, !next.isSystemItem { - next.title = nextConfig.title - next.accessibilityLabel = nextConfig.accessibilityLabel - next.accessibilityIdentifier = next.accessibilityLabel - next.image = nextConfig.image - next.target = target - next.action = nextConfig.action - } else { - if let systemItem = nextConfig.barButtonSystemItem { - next = IQBarButtonItem(barButtonSystemItem: systemItem, target: target, action: nextConfig.action) - next.isSystemItem = true - } else if let image = nextConfig.image { - next = IQBarButtonItem(image: image, style: .plain, target: target, action: nextConfig.action) - } else { - next = IQBarButtonItem(title: nextConfig.title, style: .plain, target: target, action: nextConfig.action) - } - - next.invocation = toolbar.nextBarButton.invocation - next.accessibilityLabel = nextConfig.accessibilityLabel - next.accessibilityIdentifier = next.accessibilityLabel - next.isEnabled = toolbar.nextBarButton.isEnabled - next.tag = toolbar.nextBarButton.tag - toolbar.nextBarButton = next - } - - items.append(next) - } - - //Title bar button item - do { - //Flexible space - items.append(UIView.flexibleBarButtonItem()) - - //Title button - toolbar.titleBarButton.title = titleText - - if #available(iOS 11, *) {} else { - toolbar.titleBarButton.customView?.frame = CGRect.zero - } - - items.append(toolbar.titleBarButton) - - //Flexible space - items.append(UIView.flexibleBarButtonItem()) - } - - if let rightConfig = rightBarButtonConfiguration { - - var done = toolbar.doneBarButton - - if rightConfig.barButtonSystemItem == nil, !done.isSystemItem { - done.title = rightConfig.title - done.accessibilityLabel = rightConfig.accessibilityLabel - done.accessibilityIdentifier = done.accessibilityLabel - done.image = rightConfig.image - done.target = target - done.action = rightConfig.action - } else { - if let systemItem = rightConfig.barButtonSystemItem { - done = IQBarButtonItem(barButtonSystemItem: systemItem, target: target, action: rightConfig.action) - done.isSystemItem = true - } else if let image = rightConfig.image { - done = IQBarButtonItem(image: image, style: .plain, target: target, action: rightConfig.action) - } else { - done = IQBarButtonItem(title: rightConfig.title, style: .plain, target: target, action: rightConfig.action) - } - - done.invocation = toolbar.doneBarButton.invocation - done.accessibilityLabel = rightConfig.accessibilityLabel - done.accessibilityIdentifier = done.accessibilityLabel - done.isEnabled = toolbar.doneBarButton.isEnabled - done.tag = toolbar.doneBarButton.tag - toolbar.doneBarButton = done - } - - items.append(done) - } - - // Adding button to toolBar. - toolbar.items = items - - if let textInput = self as? UITextInput { - switch textInput.keyboardAppearance { - case .dark?: - toolbar.barStyle = .black - default: - toolbar.barStyle = .default - } - } - - // Setting toolbar to keyboard. - if let textField = self as? UITextField { - textField.inputAccessoryView = toolbar - } else if let textView = self as? UITextView { - textView.inputAccessoryView = toolbar - } - } - } - - // MARK: Right - - func addDoneOnKeyboardWithTarget(_ target: AnyObject?, action: Selector, shouldShowPlaceholder: Bool = false) { - - addDoneOnKeyboardWithTarget(target, action: action, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil)) - } - - func addDoneOnKeyboardWithTarget(_ target: AnyObject?, action: Selector, titleText: String?) { - - let rightConfiguration = IQBarButtonItemConfiguration(barButtonSystemItem: .done, action: action) - - addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration) - } - - func addRightButtonOnKeyboardWithImage(_ image: UIImage, target: AnyObject?, action: Selector, shouldShowPlaceholder: Bool = false) { - - addRightButtonOnKeyboardWithImage(image, target: target, action: action, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil)) - } - - func addRightButtonOnKeyboardWithImage(_ image: UIImage, target: AnyObject?, action: Selector, titleText: String?) { - - let rightConfiguration = IQBarButtonItemConfiguration(image: image, action: action) - - addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration) - } - - func addRightButtonOnKeyboardWithText(_ text: String, target: AnyObject?, action: Selector, shouldShowPlaceholder: Bool = false) { - - addRightButtonOnKeyboardWithText(text, target: target, action: action, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil)) - } - - func addRightButtonOnKeyboardWithText(_ text: String, target: AnyObject?, action: Selector, titleText: String?) { - - let rightConfiguration = IQBarButtonItemConfiguration(title: text, action: action) - - addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration) - } - - // MARK: Right/Left - - func addCancelDoneOnKeyboardWithTarget(_ target: AnyObject?, cancelAction: Selector, doneAction: Selector, shouldShowPlaceholder: Bool = false) { - - addCancelDoneOnKeyboardWithTarget(target, cancelAction: cancelAction, doneAction: doneAction, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil)) - } - - func addRightLeftOnKeyboardWithTarget(_ target: AnyObject?, leftButtonTitle: String, rightButtonTitle: String, leftButtonAction: Selector, rightButtonAction: Selector, shouldShowPlaceholder: Bool = false) { - - addRightLeftOnKeyboardWithTarget(target, leftButtonTitle: leftButtonTitle, rightButtonTitle: rightButtonTitle, leftButtonAction: leftButtonAction, rightButtonAction: rightButtonAction, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil)) - } - - func addRightLeftOnKeyboardWithTarget(_ target: AnyObject?, leftButtonImage: UIImage, rightButtonImage: UIImage, leftButtonAction: Selector, rightButtonAction: Selector, shouldShowPlaceholder: Bool = false) { - - addRightLeftOnKeyboardWithTarget(target, leftButtonImage: leftButtonImage, rightButtonImage: rightButtonImage, leftButtonAction: leftButtonAction, rightButtonAction: rightButtonAction, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil)) - } - - func addCancelDoneOnKeyboardWithTarget(_ target: AnyObject?, cancelAction: Selector, doneAction: Selector, titleText: String?) { - - let leftConfiguration = IQBarButtonItemConfiguration(barButtonSystemItem: .cancel, action: cancelAction) - let rightConfiguration = IQBarButtonItemConfiguration(barButtonSystemItem: .done, action: doneAction) - - addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: leftConfiguration) - } - - func addRightLeftOnKeyboardWithTarget(_ target: AnyObject?, leftButtonTitle: String, rightButtonTitle: String, leftButtonAction: Selector, rightButtonAction: Selector, titleText: String?) { - - let leftConfiguration = IQBarButtonItemConfiguration(title: leftButtonTitle, action: leftButtonAction) - let rightConfiguration = IQBarButtonItemConfiguration(title: rightButtonTitle, action: rightButtonAction) - - addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: leftConfiguration) - } - - func addRightLeftOnKeyboardWithTarget(_ target: AnyObject?, leftButtonImage: UIImage, rightButtonImage: UIImage, leftButtonAction: Selector, rightButtonAction: Selector, titleText: String?) { - - let leftConfiguration = IQBarButtonItemConfiguration(image: leftButtonImage, action: leftButtonAction) - let rightConfiguration = IQBarButtonItemConfiguration(image: rightButtonImage, action: rightButtonAction) - - addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: leftConfiguration) - } - - // MARK: Previous/Next/Right - - func addPreviousNextDoneOnKeyboardWithTarget (_ target: AnyObject?, previousAction: Selector, nextAction: Selector, doneAction: Selector, shouldShowPlaceholder: Bool = false) { - - addPreviousNextDoneOnKeyboardWithTarget(target, previousAction: previousAction, nextAction: nextAction, doneAction: doneAction, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil)) - } - - func addPreviousNextRightOnKeyboardWithTarget(_ target: AnyObject?, rightButtonImage: UIImage, previousAction: Selector, nextAction: Selector, rightButtonAction: Selector, shouldShowPlaceholder: Bool = false) { - - addPreviousNextRightOnKeyboardWithTarget(target, rightButtonImage: rightButtonImage, previousAction: previousAction, nextAction: nextAction, rightButtonAction: rightButtonAction, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil)) - } - - func addPreviousNextRightOnKeyboardWithTarget(_ target: AnyObject?, rightButtonTitle: String, previousAction: Selector, nextAction: Selector, rightButtonAction: Selector, shouldShowPlaceholder: Bool = false) { - - addPreviousNextRightOnKeyboardWithTarget(target, rightButtonTitle: rightButtonTitle, previousAction: previousAction, nextAction: nextAction, rightButtonAction: rightButtonAction, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil)) - } - - func addPreviousNextDoneOnKeyboardWithTarget (_ target: AnyObject?, previousAction: Selector, nextAction: Selector, doneAction: Selector, titleText: String?) { - - let rightConfiguration = IQBarButtonItemConfiguration(barButtonSystemItem: .done, action: doneAction) - let nextConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardNextImage() ?? UIImage(), action: nextAction) - let prevConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardPreviousImage() ?? UIImage(), action: previousAction) - - addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: prevConfiguration, nextBarButtonConfiguration: nextConfiguration) - } - - func addPreviousNextRightOnKeyboardWithTarget(_ target: AnyObject?, rightButtonImage: UIImage, previousAction: Selector, nextAction: Selector, rightButtonAction: Selector, titleText: String?) { - - let rightConfiguration = IQBarButtonItemConfiguration(image: rightButtonImage, action: rightButtonAction) - let nextConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardNextImage() ?? UIImage(), action: nextAction) - let prevConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardPreviousImage() ?? UIImage(), action: previousAction) - - addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: prevConfiguration, nextBarButtonConfiguration: nextConfiguration) - } - - func addPreviousNextRightOnKeyboardWithTarget(_ target: AnyObject?, rightButtonTitle: String, previousAction: Selector, nextAction: Selector, rightButtonAction: Selector, titleText: String?) { - - let rightConfiguration = IQBarButtonItemConfiguration(title: rightButtonTitle, action: rightButtonAction) - let nextConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardNextImage() ?? UIImage(), action: nextAction) - let prevConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardPreviousImage() ?? UIImage(), action: previousAction) - - addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: prevConfiguration, nextBarButtonConfiguration: nextConfiguration) - } -} diff --git a/Pods/IQKeyboardManagerSwift/LICENSE.md b/Pods/IQKeyboardManagerSwift/LICENSE.md deleted file mode 100644 index c17c107..0000000 --- a/Pods/IQKeyboardManagerSwift/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2013-2017 Iftekhar Qurashi - -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. diff --git a/Pods/IQKeyboardManagerSwift/README.md b/Pods/IQKeyboardManagerSwift/README.md deleted file mode 100644 index 86ed653..0000000 --- a/Pods/IQKeyboardManagerSwift/README.md +++ /dev/null @@ -1,223 +0,0 @@ -

- Icon -

-

IQKeyboardManager

-

- GitHub license - - -[![Build Status](https://travis-ci.org/hackiftekhar/IQKeyboardManager.svg)](https://travis-ci.org/hackiftekhar/IQKeyboardManager) - - -While developing iOS apps, we often run into issues where the iPhone keyboard slides up and covers the `UITextField/UITextView`. `IQKeyboardManager` allows you to prevent this issue of keyboard sliding up and covering `UITextField/UITextView` without needing you to write any code or make any additional setup. To use `IQKeyboardManager` you simply need to add source files to your project. - - -#### Key Features - -1) `**CODELESS**, Zero Lines of Code` - -2) `Works Automatically` - -3) `No More UIScrollView` - -4) `No More Subclasses` - -5) `No More Manual Work` - -6) `No More #imports` - -`IQKeyboardManager` works on all orientations, and with the toolbar. It also has nice optional features allowing you to customize the distance from the text field, behaviour of previous, next and done buttons in the keyboard toolbar, play sound when the user navigates through the form and more. - - -## Screenshot -[![IQKeyboardManager](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/v3.3.0/Screenshot/IQKeyboardManagerScreenshot.png)](http://youtu.be/6nhLw6hju2A) -[![Settings](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/v3.3.0/Screenshot/IQKeyboardManagerSettings.png)](http://youtu.be/6nhLw6hju2A) - -## GIF animation -[![IQKeyboardManager](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/v3.3.0/Screenshot/IQKeyboardManager.gif)](http://youtu.be/6nhLw6hju2A) - -## Video - - - -## Tutorial video by @rebeloper ([#1135](https://github.com/hackiftekhar/IQKeyboardManager/issues/1135)) - -@rebeloper demonstrated two videos on how to implement **IQKeyboardManager** at it's core: - - - -https://www.youtube.com/playlist?list=PL_csAAO9PQ8aTL87XnueOXi3RpWE2m_8v - -## Warning - -- **If you're planning to build SDK/library/framework and want to handle UITextField/UITextView with IQKeyboardManager then you're totally going the wrong way.** I would never suggest to add **IQKeyboardManager** as **dependency/adding/shipping** with any third-party library. Instead of adding **IQKeyboardManager** you should implement your own solution to achieve same kind of results. **IQKeyboardManager** is totally designed for projects to help developers for their convenience, it's not designed for **adding/dependency/shipping** with any **third-party library**, because **doing this could block adoption by other developers for their projects as well (who are not using IQKeyboardManager and have implemented their custom solution to handle UITextField/UITextView in the project).** -- If **IQKeyboardManager** conflicts with other **third-party library**, then it's **developer responsibility** to **enable/disable IQKeyboardManager** when **presenting/dismissing** third-party library UI. Third-party libraries are not responsible to handle IQKeyboardManager. - -## Requirements -[![Platform iOS](https://img.shields.io/badge/Platform-iOS-blue.svg?style=fla)]() - -| | Language | Minimum iOS Target | Minimum Xcode Version | -|------------------------|----------|--------------------|-----------------------| -| IQKeyboardManager | Obj-C | iOS 8.0 | Xcode 9 | -| IQKeyboardManagerSwift | Swift | iOS 8.0 | Xcode 9 | -| Demo Project | | | Xcode 11 | - -#### Swift versions support - -| Swift | Xcode | IQKeyboardManagerSwift | -|-------------------|-------|------------------------| -| 5.1, 5.0, 4.2, 4.0, 3.2, 3.0| 11 | >= 6.5.0 | -| 5.0,4.2, 4.0, 3.2, 3.0| 10.2 | >= 6.2.1 | -| 4.2, 4.0, 3.2, 3.0| 10.0 | >= 6.0.4 | -| 4.0, 3.2, 3.0 | 9.0 | 5.0.0 | - -Installation -========================== - -#### Installation with CocoaPods - -[![CocoaPods](https://img.shields.io/cocoapods/v/IQKeyboardManager.svg)](http://cocoadocs.org/docsets/IQKeyboardManager) - -***IQKeyboardManager (Objective-C):*** IQKeyboardManager is available through [CocoaPods](http://cocoapods.org). To install -it, simply add the following line to your Podfile: ([#9](https://github.com/hackiftekhar/IQKeyboardManager/issues/9)) - -```ruby -pod 'IQKeyboardManager' #iOS8 and later -``` - -***IQKeyboardManager (Swift):*** IQKeyboardManagerSwift is available through [CocoaPods](http://cocoapods.org). To install -it, simply add the following line to your Podfile: ([#236](https://github.com/hackiftekhar/IQKeyboardManager/issues/236)) - -*Swift 5.1, 5.0, 4.2, 4.0, 3.2, 3.0 (Xcode 11)* - -```ruby -pod 'IQKeyboardManagerSwift' -``` - -*Or you can choose the version you need based on Swift support table from [Requirements](README.md#requirements)* - -```ruby -pod 'IQKeyboardManagerSwift', '6.3.0' -``` - -In AppDelegate.swift, just import IQKeyboardManagerSwift framework and enable IQKeyboardManager. - -```swift -import IQKeyboardManagerSwift - -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - - var window: UIWindow? - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { - - IQKeyboardManager.shared.enable = true - - return true - } -} -``` - -#### Installation with 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 `IQKeyboardManger` or `IQKeyboardManagerSwift` into your Xcode project using Carthage, add the following line to your `Cartfile`: - -```ogdl -github "hackiftekhar/IQKeyboardManager" -``` - -Run `carthage` to build the frameworks and drag the appropriate framework (`IQKeyboardManager.framework` or `IQKeyboardManagerSwift.framework`) into your Xcode project based on your need. Make sure to add only one framework and not both. - - -#### Installation with Source Code - -[![Github tag](https://img.shields.io/github/tag/hackiftekhar/iqkeyboardmanager.svg)]() - - - -***IQKeyboardManager (Objective-C):*** Just ***drag and drop*** `IQKeyboardManager` directory from demo project to your project. That's it. - -***IQKeyboardManager (Swift):*** ***Drag and drop*** `IQKeyboardManagerSwift` directory from demo project to your project - -In AppDelegate.swift, just enable IQKeyboardManager. - -```swift -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - - var window: UIWindow? - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { - - IQKeyboardManager.shared.enable = true - - return true - } -} -``` - -#### Installation with Swift Package Manager - -[Swift Package Manager(SPM)](https://swift.org/package-manager/) is Apple's dependency manager tool. It is now supported in Xcode 11. So it can be used in all appleOS types of projects. It can be used alongside other tools like CocoaPods and Carthage as well. - -To install IQKeyboardManager package into your packages, add a reference to IQKeyboardManager and a targeting release version in the dependencies section in `Package.swift` file: - -```swift -import PackageDescription - -let package = Package( - name: "YOUR_PROJECT_NAME", - products: [], - dependencies: [ - .package(url: "https://github.com/hackiftekhar/IQKeyboardManager.git", from: "6.5.0") - ] -) -``` - -To install IQKeyboardManager package via Xcode - - * Go to File -> Swift Packages -> Add Package Dependency... - * Then search for https://github.com/hackiftekhar/IQKeyboardManager.git - * And choose the version you want - -Migration Guide -========================== -- [IQKeyboardManager 6.0.0 Migration Guide](https://github.com/hackiftekhar/IQKeyboardManager/wiki/IQKeyboardManager-6.0.0-Migration-Guide) - -Other Links -========================== - -- [Known Issues](https://github.com/hackiftekhar/IQKeyboardManager/wiki/Known-Issues) -- [Manual Management Tweaks](https://github.com/hackiftekhar/IQKeyboardManager/wiki/Manual-Management) -- [Properties and functions usage](https://github.com/hackiftekhar/IQKeyboardManager/wiki/Properties-&-Functions) - -## Flow Diagram -[![IQKeyboardManager CFD](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/master/Screenshot/IQKeyboardManagerFlowDiagram.jpg)](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/master/Screenshot/IQKeyboardManagerFlowDiagram.jpg) - -If you would like to see detailed Flow diagram then check [Detailed Flow Diagram](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/v3.3.0/Screenshot/IQKeyboardManagerCFD.jpg). - - -LICENSE ---- -Distributed under the MIT License. - -Contributions ---- -Any contribution is more than welcome! You can contribute through pull requests and issues on GitHub. - -Author ---- -If you wish to contact me, email at: hack.iftekhar@gmail.com diff --git a/Pods/JCore/jcore-ios-4.2.1.xcframework/Info.plist b/Pods/JCore/jcore-ios-4.2.1.xcframework/Info.plist deleted file mode 100644 index 228a43b..0000000 --- a/Pods/JCore/jcore-ios-4.2.1.xcframework/Info.plist +++ /dev/null @@ -1,44 +0,0 @@ - - - - - AvailableLibraries - - - HeadersPath - Headers - LibraryIdentifier - ios-arm64_x86_64-simulator - LibraryPath - libJCore.a - SupportedArchitectures - - arm64 - x86_64 - - SupportedPlatform - ios - SupportedPlatformVariant - simulator - - - HeadersPath - Headers - LibraryIdentifier - ios-arm64 - LibraryPath - libJCore.a - SupportedArchitectures - - arm64 - - SupportedPlatform - ios - - - CFBundlePackageType - XFWK - XCFrameworkFormatVersion - 1.0 - - diff --git a/Pods/JCore/jcore-ios-4.2.1.xcframework/ios-arm64/Headers/JGInforCollectionAuth.h b/Pods/JCore/jcore-ios-4.2.1.xcframework/ios-arm64/Headers/JGInforCollectionAuth.h deleted file mode 100644 index 1a378b8..0000000 --- a/Pods/JCore/jcore-ios-4.2.1.xcframework/ios-arm64/Headers/JGInforCollectionAuth.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// JGInforCollectionAuth.h -// JCore -// -// Created by 豆瓣 on 2021/10/27. -// Copyright © 2021 jiguang. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/// 合规接口,是否授权极光采集一定的设备信息 -@interface JGInforCollectionAuthItems : NSObject -/// 是否授权,默认YES -@property(nonatomic,assign)BOOL isAuth; -@end - -@interface JGInforCollectionAuth : NSObject - -/// 设备信息采集授权接口(合规接口) -/// 请务必在调用初始化、功能性接口前调用此接口进行合规授权 -/// @param authBlock auth:YES 则极光认为您同意极光采集一定的设备信息 -+(void)JCollectionAuth:(void(^_Nullable)(JGInforCollectionAuthItems *authInfo))authBlock; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/JCore/jcore-ios-4.2.1.xcframework/ios-arm64/libJCore.a b/Pods/JCore/jcore-ios-4.2.1.xcframework/ios-arm64/libJCore.a deleted file mode 100644 index 936ae15..0000000 Binary files a/Pods/JCore/jcore-ios-4.2.1.xcframework/ios-arm64/libJCore.a and /dev/null differ diff --git a/Pods/JCore/jcore-ios-4.2.1.xcframework/ios-arm64_x86_64-simulator/Headers/JGInforCollectionAuth.h b/Pods/JCore/jcore-ios-4.2.1.xcframework/ios-arm64_x86_64-simulator/Headers/JGInforCollectionAuth.h deleted file mode 100644 index 1a378b8..0000000 --- a/Pods/JCore/jcore-ios-4.2.1.xcframework/ios-arm64_x86_64-simulator/Headers/JGInforCollectionAuth.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// JGInforCollectionAuth.h -// JCore -// -// Created by 豆瓣 on 2021/10/27. -// Copyright © 2021 jiguang. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/// 合规接口,是否授权极光采集一定的设备信息 -@interface JGInforCollectionAuthItems : NSObject -/// 是否授权,默认YES -@property(nonatomic,assign)BOOL isAuth; -@end - -@interface JGInforCollectionAuth : NSObject - -/// 设备信息采集授权接口(合规接口) -/// 请务必在调用初始化、功能性接口前调用此接口进行合规授权 -/// @param authBlock auth:YES 则极光认为您同意极光采集一定的设备信息 -+(void)JCollectionAuth:(void(^_Nullable)(JGInforCollectionAuthItems *authInfo))authBlock; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/JCore/jcore-ios-4.2.1.xcframework/ios-arm64_x86_64-simulator/libJCore.a b/Pods/JCore/jcore-ios-4.2.1.xcframework/ios-arm64_x86_64-simulator/libJCore.a deleted file mode 100644 index cbd8a3d..0000000 Binary files a/Pods/JCore/jcore-ios-4.2.1.xcframework/ios-arm64_x86_64-simulator/libJCore.a and /dev/null differ diff --git a/Pods/JPush/jpush-ios-5.0.1.xcframework/Info.plist b/Pods/JPush/jpush-ios-5.0.1.xcframework/Info.plist deleted file mode 100644 index 531cf95..0000000 --- a/Pods/JPush/jpush-ios-5.0.1.xcframework/Info.plist +++ /dev/null @@ -1,44 +0,0 @@ - - - - - AvailableLibraries - - - HeadersPath - Headers - LibraryIdentifier - ios-arm64_x86_64-simulator - LibraryPath - libJPush.a - SupportedArchitectures - - arm64 - x86_64 - - SupportedPlatform - ios - SupportedPlatformVariant - simulator - - - HeadersPath - Headers - LibraryIdentifier - ios-arm64 - LibraryPath - libJPush.a - SupportedArchitectures - - arm64 - - SupportedPlatform - ios - - - CFBundlePackageType - XFWK - XCFrameworkFormatVersion - 1.0 - - diff --git a/Pods/JPush/jpush-ios-5.0.1.xcframework/ios-arm64/Headers/JPUSHService.h b/Pods/JPush/jpush-ios-5.0.1.xcframework/ios-arm64/Headers/JPUSHService.h deleted file mode 100644 index 35e3d1f..0000000 --- a/Pods/JPush/jpush-ios-5.0.1.xcframework/ios-arm64/Headers/JPUSHService.h +++ /dev/null @@ -1,942 +0,0 @@ -/* - * | | | | \ \ / / | | | | / _______| - * | |____| | \ \/ / | |____| | / / - * | |____| | \ / | |____| | | | _____ - * | | | | / \ | | | | | | |____ | - * | | | | / /\ \ | | | | \ \______| | - * | | | | /_/ \_\ | | | | \_________| - * - * Copyright (c) 2011 ~ 2017 Shenzhen HXHG. All rights reserved. - */ - -#define JPUSH_VERSION_NUMBER 5.0.1 - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class CLRegion; -@class UILocalNotification; -@class CLLocation; -@class UNNotificationCategory; -@class UNNotificationSettings; -@class UNNotificationRequest; -@class UNNotification; -@class UIView; -@protocol JPUSHRegisterDelegate; -@protocol JPUSHGeofenceDelegate; -@protocol JPUSHNotiInMessageDelegate; -@protocol JPUSHInAppMessageDelegate; - -typedef void (^JPUSHTagsOperationCompletion)(NSInteger iResCode, NSSet *_Nullable iTags, NSInteger seq); -typedef void (^JPUSHTagValidOperationCompletion)(NSInteger iResCode, NSSet *_Nullable iTags, NSInteger seq, BOOL isBind); -typedef void (^JPUSHAliasOperationCompletion)(NSInteger iResCode, NSString *_Nullable iAlias, NSInteger seq); -typedef void (^JPUSHPropertiesOperationCompletion)(NSInteger iResCode, NSDictionary *_Nullable properties, NSInteger seq); -typedef void (^JPUSHLiveActivityTokenCompletion)(NSInteger iResCode, NSString *_Nullable iLiveActivityId, NSData * _Nullable pushToken, NSInteger seq); - -extern NSString *const kJPFNetworkIsConnectingNotification; // 正在连接中 -extern NSString *const kJPFNetworkDidSetupNotification; // 建立连接 -extern NSString *const kJPFNetworkDidCloseNotification; // 关闭连接 -extern NSString *const kJPFNetworkDidRegisterNotification; // 注册成功 -extern NSString *const kJPFNetworkFailedRegisterNotification; //注册失败 -extern NSString *const kJPFNetworkDidLoginNotification; // 登录成功 -extern NSString *const kJPFNetworkDidReceiveMessageNotification; // 收到消息(非APNS) -extern NSString *const kJPFServiceErrorNotification; // 错误提示 - -typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) { - JPAuthorizationOptionNone = 0, // the application may not present any UI upon a notification being received - JPAuthorizationOptionBadge = (1 << 0), // the application may badge its icon upon a notification being received - JPAuthorizationOptionSound = (1 << 1), // the application may play a sound upon a notification being received - JPAuthorizationOptionAlert = (1 << 2), // the application may display an alert upon a notification being received - JPAuthorizationOptionCarPlay = (1 << 3), // The ability to display notifications in a CarPlay environment. - JPAuthorizationOptionCriticalAlert NS_AVAILABLE_IOS(12.0) = (1 << 4) , //The ability to play sounds for critical alerts. - JPAuthorizationOptionProvidesAppNotificationSettings NS_AVAILABLE_IOS(12.0) = (1 << 5) , //An option indicating the system should display a button for in-app notification settings. - JPAuthorizationOptionProvisional NS_AVAILABLE_IOS(12.0) = (1 << 6) , //The ability to post noninterrupting notifications provisionally to the Notification Center. - JPAuthorizationOptionAnnouncement NS_AVAILABLE_IOS(13.0) = (1 << 7) , //The ability for Siri to automatically read out messages over AirPods. -}; - -typedef NS_ENUM(NSUInteger, JPAuthorizationStatus) { - JPAuthorizationNotDetermined = 0, // The user has not yet made a choice regarding whether the application may post user notifications. - JPAuthorizationStatusDenied, // The application is not authorized to post user notifications. - JPAuthorizationStatusAuthorized, // The application is authorized to post user notifications. - JPAuthorizationStatusProvisional NS_AVAILABLE_IOS(12.0), // The application is authorized to post non-interruptive user notifications. -}; - -/*! - * 通知注册实体类 - */ -@interface JPUSHRegisterEntity : NSObject - -/*! - * 支持的类型 - * badge,sound,alert - */ -@property (nonatomic, assign) NSInteger types; -/*! - * 注入的类别 - * iOS10 UNNotificationCategory - * iOS8-iOS9 UIUserNotificationCategory - */ -@property (nonatomic, strong, nullable) NSSet *categories; -@end - -/*! - * 进行删除、查找推送实体类 - */ -@interface JPushNotificationIdentifier : NSObject - -@property (nonatomic, copy, nullable) NSArray * identifiers; // 推送的标识数组 -@property (nonatomic, copy, nullable) UILocalNotification * notificationObj NS_DEPRECATED_IOS(4_0, 10_0); // iOS10以下可以传UILocalNotification对象数据,iOS10以上无效 -@property (nonatomic, assign) BOOL delivered NS_AVAILABLE_IOS(10_0); // 在通知中心显示的或待推送的标志,默认为NO,YES表示在通知中心显示的,NO表示待推送的 -@property (nonatomic, copy, nullable) void (^findCompletionHandler)(NSArray * _Nullable results); // 用于查询回调,调用[findNotification:]方法前必须设置,results为返回相应对象数组,iOS10以下返回UILocalNotification对象数组;iOS10以上根据delivered传入值返回UNNotification或UNNotificationRequest对象数组(delivered传入YES,则返回UNNotification对象数组,否则返回UNNotificationRequest对象数组) - -@end - -/*! - * 推送通知声音实体类 - * iOS10以上有效 - */ -@interface JPushNotificationSound : NSObject -@property (nonatomic, copy, nullable) NSString *soundName; //普通通知铃声 -@property (nonatomic, copy, nullable) NSString *criticalSoundName NS_AVAILABLE_IOS(12.0); //警告通知铃声 -@property (nonatomic, assign) float criticalSoundVolume NS_AVAILABLE_IOS(12.0); //警告通知铃声音量,有效值在0~1之间,默认为1 -@end - - -/*! - * 推送内容实体类 - */ -@interface JPushNotificationContent : NSObject - -@property (nonatomic, copy) NSString *title; // 推送标题 -@property (nonatomic, copy) NSString *subtitle; // 推送副标题 -@property (nonatomic, copy) NSString *body; // 推送内容 -@property (nonatomic, copy, nullable) NSNumber *badge; // 角标的数字。如果不需要改变角标传@(-1) -@property (nonatomic, copy) NSString *action NS_DEPRECATED_IOS(8_0, 10_0); // 弹框的按钮显示的内容(IOS 8默认为"打开", 其他默认为"启动",iOS10以上无效) -@property (nonatomic, copy) NSString *categoryIdentifier; // 行为分类标识 -@property (nonatomic, copy) NSDictionary *userInfo; // 本地推送时可以设置userInfo来增加附加信息,远程推送时设置的payload推送内容作为此userInfo -@property (nonatomic, copy, nullable) NSString *sound; // 声音名称,不设置则为默认声音 -@property (nonatomic, copy, nullable) JPushNotificationSound *soundSetting NS_AVAILABLE_IOS(10.0); //推送声音实体 -@property (nonatomic, copy) NSArray *attachments NS_AVAILABLE_IOS(10_0); // 附件,iOS10以上有效,需要传入UNNotificationAttachment对象数组类型 -@property (nonatomic, copy) NSString *threadIdentifier NS_AVAILABLE_IOS(10_0); // 线程或与推送请求相关对话的标识,iOS10以上有效,可用来对推送进行分组 -@property (nonatomic, copy) NSString *launchImageName NS_AVAILABLE_IOS(10_0); // 启动图片名,iOS10以上有效,从推送启动时将会用到 -@property (nonatomic, copy) NSString *summaryArgument NS_AVAILABLE_IOS(12.0); //插入到通知摘要中的部分参数。iOS12以上有效。 -@property (nonatomic, assign) NSUInteger summaryArgumentCount NS_AVAILABLE_IOS(12.0); //插入到通知摘要中的项目数。iOS12以上有效。 -@property (nonatomic, copy, nullable) NSString *targetContentIdentifier NS_AVAILABLE_IOS(13.0); // An identifier for the content of the notification used by the system to customize the scene to be activated when tapping on a notification. -//iOS15以上的新增属性 interruptionLevel为枚举UNNotificationInterruptionLevel -// The interruption level determines the degree of interruption associated with the notification -@property (nonatomic, assign) NSUInteger interruptionLevel NS_AVAILABLE_IOS(15.0); -// Relevance score determines the sorting for the notification across app notifications. The expected range is between 0.0f and 1.0f. -@property (nonatomic, assign) double relevanceScore NS_AVAILABLE_IOS(15.0); -// iOS16以上的新增属性 -@property (nonatomic, copy, nullable) NSString * filterCriteria NS_AVAILABLE_IOS(16.0); // default nil - -@end - - -/*! - * 推送触发方式实体类 - * 注:dateComponents、timeInterval、region在iOS10以上可选择其中一个参数传入有效值,如果同时传入值会根据优先级I、II、III使其中一种触发方式生效,fireDate为iOS10以下根据时间触发时须传入的参数 - */ -@interface JPushNotificationTrigger : NSObject - -@property (nonatomic, assign) BOOL repeat; // 设置是否重复,默认为NO -@property (nonatomic, copy) NSDate *fireDate NS_DEPRECATED_IOS(2_0, 10_0); // 用来设置触发推送的时间,iOS10以上无效 -@property (nonatomic, copy) CLRegion *region NS_AVAILABLE_IOS(8_0); // 用来设置触发推送的位置,iOS8以上有效,iOS10以上优先级为I,应用需要有允许使用定位的授权 -@property (nonatomic, copy) NSDateComponents *dateComponents NS_AVAILABLE_IOS(10_0); // 用来设置触发推送的日期时间,iOS10以上有效,优先级为II -@property (nonatomic, assign) NSTimeInterval timeInterval NS_AVAILABLE_IOS(10_0); // 用来设置触发推送的时间,iOS10以上有效,优先级为III - -@end - -/*! - * 注册或更新推送实体类 - */ -@interface JPushNotificationRequest : NSObject - -@property (nonatomic, copy) NSString *requestIdentifier; // 推送请求标识 -@property (nonatomic, copy) JPushNotificationContent *content; // 设置推送的具体内容 -@property (nonatomic, copy) JPushNotificationTrigger *trigger; // 设置推送的触发方式 -@property (nonatomic, copy, nullable) void (^completionHandler)(id result); // 注册或更新推送成功回调,iOS10以上成功则result为UNNotificationRequest对象,失败则result为nil;iOS10以下成功result为UILocalNotification对象,失败则result为nil - -@end - - -/*! - * 应用内消息内容实体 - */ -@interface JPushInAppMessage : NSObject - -@property (nonatomic, copy) NSString *mesageId; // 消息id -@property (nonatomic, copy) NSString *title; // 标题 -@property (nonatomic, copy) NSString *content; // 内容 -@property (nonatomic, strong) NSArray *target; // 目标页面 -@property (nonatomic, copy) NSString *clickAction; // 跳转地址 -@property (nonatomic, strong) NSDictionary *extras; // 附加字段 - -@end - -/*! - * JPush 核心头文件 - */ -@interface JPUSHService : NSObject - - -///---------------------------------------------------- -/// @name Setup 启动相关 -///---------------------------------------------------- - - -/*! - * @abstract 启动SDK - * - * @param launchingOption 启动参数. - * @param appKey 一个JPush 应用必须的,唯一的标识. 请参考 JPush 相关说明文档来获取这个标识. - * @param channel 发布渠道. 可选. - * @param isProduction 是否生产环境. 如果为开发状态,设置为 NO; 如果为生产状态,应改为 YES. - * App 证书环境取决于profile provision的配置,此处建议与证书环境保持一致. - * - * @discussion 提供SDK启动必须的参数, 来启动 SDK. - * 此接口必须在 App 启动时调用, 否则 JPush SDK 将无法正常工作. - */ -+ (void)setupWithOption:(nullable NSDictionary *)launchingOption - appKey:(NSString *)appKey - channel:(nullable NSString *)channel - apsForProduction:(BOOL)isProduction; - -/*! - * @abstract 启动SDK - * - * @param launchingOption 启动参数. - * @param appKey 一个JPush 应用必须的,唯一的标识. 请参考 JPush 相关说明文档来获取这个标识. - * @param channel 发布渠道. 可选. - * @param isProduction 是否生产环境. 如果为开发状态,设置为 NO; 如果为生产状态,应改为 YES. - * App 证书环境取决于profile provision的配置,此处建议与证书环境保持一致. - * @param advertisingId 广告标识符(IDFA) 如果不需要使用IDFA,传nil. - * - * @discussion 提供SDK启动必须的参数, 来启动 SDK. - * 此接口必须在 App 启动时调用, 否则 JPush SDK 将无法正常工作. - */ -+ (void)setupWithOption:(nullable NSDictionary *)launchingOption - appKey:(NSString *)appKey - channel:(nullable NSString *)channel - apsForProduction:(BOOL)isProduction - advertisingIdentifier:(nullable NSString *)advertisingId; - - -///---------------------------------------------------- -/// @name APNs about 通知相关 -///---------------------------------------------------- - -/*! - * @abstract 注册要处理的远程通知类型 - * - * @param types 通知类型 - * @param categories 类别组 - * - */ -+ (void)registerForRemoteNotificationTypes:(NSUInteger)types - categories:(nullable NSSet *)categories; -/*! - * @abstract 新版本的注册方法(兼容iOS10) - * - * @param config 注册通知配置 - * @param delegate 代理 - * - */ -+ (void)registerForRemoteNotificationConfig:(JPUSHRegisterEntity *)config delegate:(nullable id)delegate; - - -+ (void)registerDeviceToken:(NSData *)deviceToken; - -/*! - * @abstract 注册liveActivity并上报其pushToken - * 在pushToken有变化的时候同步调用该接口。 - * 在liveActivity结束的时候,请同步调用该接口,pushToken传nil - * - * @param liveActivityId 标识某一个liveActivity - * @param pushToken 对应该liveActivity的pushToken,如有更新,请及时调用该方法更新pushToken - * @param completion 响应回调 - * @param seq 请求序列号 - */ -+ (void)registerLiveActivity:(NSString *)liveActivityId - pushToken:(nullable NSData *)pushToken - completion:(nullable JPUSHLiveActivityTokenCompletion)completion - seq:(NSInteger)seq; - -/*! - * @abstract 处理收到的 APNs 消息 - */ -+ (void)handleRemoteNotification:(NSDictionary *)remoteInfo; - -/*! - * @abstract 向极光服务器提交Token - * - * @param voipToken 推送使用的Voip Token - */ -+ (void)registerVoipToken:(NSData *)voipToken; - - -/*! - * @abstract 处理收到的 Voip 消息 - * - * @param remoteInfo 下发的 Voip 内容 - */ -+ (void)handleVoipNotification:(NSDictionary *)remoteInfo; - - -/*! -* @abstract 检测通知授权状态 -* @param completion 授权结果通过status值返回,详见JPAuthorizationStatus -*/ -+ (void)requestNotificationAuthorization:(nullable void (^)(JPAuthorizationStatus status))completion; - -/*! -* @abstract 跳转至系统设置页面,iOS8及以上有效 -*/ -+ (void)openSettingsForNotification:(nullable void (^)(BOOL success))completionHandler NS_AVAILABLE_IOS(8_0); - -/*! - * Tags操作接口 - * 支持增加/覆盖/删除/清空/查询操作 - * 详情请参考文档:https://docs.jiguang.cn/jpush/client/iOS/ios_api/) - */ - -/** - 增加tags - - @param tags 需要增加的tags集合 - @param completion 响应回调 - @param seq 请求序列号 - */ -+ (void)addTags:(NSSet *)tags - completion:(nullable JPUSHTagsOperationCompletion)completion - seq:(NSInteger)seq; - -/** - 覆盖tags - 调用该接口会覆盖用户所有的tags - - @param tags 需要设置的tags集合 - @param completion 响应回调 - @param seq 请求序列号 - */ -+ (void)setTags:(NSSet *)tags - completion:(nullable JPUSHTagsOperationCompletion)completion - seq:(NSInteger)seq; - -/** - 删除指定tags - - @param tags 需要删除的tags集合 - @param completion 响应回调 - @param seq 请求序列号 - */ -+ (void)deleteTags:(NSSet *)tags - completion:(nullable JPUSHTagsOperationCompletion)completion - seq:(NSInteger)seq; - -/** - 清空所有tags - @param completion 响应回调 - @param seq 请求序列号 - */ -+ (void)cleanTags:(nullable JPUSHTagsOperationCompletion)completion - seq:(NSInteger)seq; - -/** - 查询全部tags - - @param completion 响应回调,请在回调中获取查询结果 - @param seq 请求序列号 - */ -+ (void)getAllTags:(nullable JPUSHTagsOperationCompletion)completion - seq:(NSInteger)seq; - -/** - 验证tag是否绑定 - - @param completion 响应回调,回调中查看是否绑定 - @param seq 请求序列号 - */ -+ (void)validTag:(NSString *)tag - completion:(nullable JPUSHTagValidOperationCompletion)completion - seq:(NSInteger)seq; - -/** - 设置Alias - - @param alias 需要设置的alias - @param completion 响应回调 - @param seq 请求序列号 - */ -+ (void)setAlias:(NSString *)alias - completion:(nullable JPUSHAliasOperationCompletion)completion - seq:(NSInteger)seq; - -/** - 删除alias - - @param completion 响应回调 - @param seq 请求序列号 - */ -+ (void)deleteAlias:(nullable JPUSHAliasOperationCompletion)completion - seq:(NSInteger)seq; - -/** - 查询当前alias - - @param completion 响应回调 - @param seq 请求序列号 - */ -+ (void)getAlias:(nullable JPUSHAliasOperationCompletion)completion - seq:(NSInteger)seq; - - -/*! - * @abstract 过滤掉无效的 tags - * - * @discussion 如果 tags 数量超过限制数量, 则返回靠前的有效的 tags. - * 建议设置 tags 前用此接口校验. SDK 内部也会基于此接口来做过滤. - */ -+ (NSSet *)filterValidTags:(NSSet *)tags; - - -/*! - * Property操作接口 - * 支持增加/删除/清空操作 - * 详情请参考文档:https://docs.jiguang.cn/jpush/client/iOS/ios_api/) - */ - -/** - 新增/更新用户属性 - - 如果某个用户属性之前已经存在了,则会更新;不存在,则会新增 - - @param properties 需要新增或者更新的的用户属性内容,类型为NSDictionary; - Key 为用户属性名称,类型必须是 NSString 类型;Value为用户属性值,只支持 NSString、NSNumber、NSDate类型,如果属性为BOOL类型,传值时请转成NSNumber类型 - @param completion 响应回调 - @param seq 请求序列号 - */ -+ (void)setProperties:(NSDictionary *)properties - completion:(nullable JPUSHPropertiesOperationCompletion)completion - seq:(NSInteger)seq; - - -/** - 删除指定属性 - - @param keys 需要删除的属性名称集合 - @param completion 响应回调 - @param seq 请求序列号 - */ -+ (void)deleteProperties:(NSSet *)keys - completion:(nullable JPUSHPropertiesOperationCompletion)completion - seq:(NSInteger)seq; - - -/** - 清空所有属性 - @param completion 响应回调 - @param seq 请求序列号 - */ -+ (void)cleanProperties:(nullable JPUSHPropertiesOperationCompletion)completion - seq:(NSInteger)seq; - - -/*! - * 应用内消息接口 - * 使用应用内消息需要配置以下两个接口。请在进入页面和离开页面的时候相应地配置。以下两个接口请配套调用。 - */ - -/** - 进入页面 - - 请与 + (void)pageLeave:(NSString *)pageName; 方法配套使用 - - @param pageName 页面名 - @discussion 使用应用内消息功能,需要配置pageEnterTo:和pageLeave:函数。 - */ -+ (void)pageEnterTo:(NSString *)pageName; - - -/** - 离开页面 - - 请与 + (void)pageEnterTo:(NSString *)pageName;方法配套使用 - - @param pageName 页面名 - @discussion 使用应用内消息功能,需要配置pageEnterTo:和pageLeave:函数。 - */ -+ (void)pageLeave:(NSString *)pageName; - - -/*! -* @abstract 设置应用内消息的代理 -* -* @discussion 遵守JPUSHInAppMessageDelegate的代理对象 -* -*/ -+ (void)setInAppMessageDelegate:(id)inAppMessageDelegate; - - -///---------------------------------------------------- -/// @name Stats 统计功能 -///---------------------------------------------------- - -/*! - * @abstract 开始记录页面停留 - * - * @param pageName 页面名称 - * @discussion JCore 1.1.8 版本后,如需统计页面流,请使用 JAnalytics - */ -+ (void)startLogPageView:(NSString *)pageName __attribute__((deprecated("JCore 1.1.8 版本已过期"))); - -/*! - * @abstract 停止记录页面停留 - * - * @param pageName 页面 - * @discussion JCore 1.1.8 版本后,如需统计页面流,请使用 JAnalytics - */ -+ (void)stopLogPageView:(NSString *)pageName __attribute__((deprecated("JCore 1.1.8 版本已过期"))); - -/*! - * @abstract 直接上报在页面的停留时间 - * - * @param pageName 页面 - * @param seconds 停留的秒数 - * @discussion JCore 1.1.8 版本后,如需统计页面流,请使用 JAnalytics - */ -+ (void)beginLogPageView:(NSString *)pageName duration:(int)seconds __attribute__((deprecated("JCore 1.1.8 版本已过期"))); - -/*! - * @abstract 开启Crash日志收集 - * - * @discussion 默认是关闭状态. - */ -+ (void)crashLogON; - -/*! - * @abstract 地理位置上报 - * - * @param latitude 纬度. - * @param longitude 经度. - * - */ -+ (void)setLatitude:(double)latitude longitude:(double)longitude; - -/*! - * @abstract 地理位置上报 - * - * @param location 直接传递 CLLocation * 型的地理信息 - * - * @discussion 需要链接 CoreLocation.framework 并且 #import - */ -+ (void)setLocation:(CLLocation *)location; - -/** - 设置地理围栏的最大个数 - 默认值为 10 ,iOS系统默认地理围栏最大个数为20 - @param count 个数 count - */ -+ (void)setGeofeneceMaxCount:(NSInteger)count; - -/** - 设置地理围栏'圈内'类型的检测周期 - 默认15分钟检测一次 - */ -+ (void)setGeofenecePeriodForInside:(NSInteger)seconds; - -/** - 注册地理围栏的代理 - - @param delegate 代理 - @param launchOptions app启动完成是收到的字段参数 - */ -+ (void)registerLbsGeofenceDelegate:(id)delegate withLaunchOptions:(nullable NSDictionary *)launchOptions; - -/** - 删除地理围栏 - - @param geofenceId 地理围栏id - */ -+ (void)removeGeofenceWithIdentifier:(NSString *)geofenceId; - -///---------------------------------------------------- -/// @name Local Notification 本地通知 -///---------------------------------------------------- -/*! - * @abstract 注册或更新推送 (支持iOS10,并兼容iOS10以下版本) - * - * JPush 2.1.9新接口 - * @param request JPushNotificationRequest类型,设置推送的属性,设置已有推送的request.requestIdentifier即更新已有的推送,否则为注册新推送,更新推送仅仅在iOS10以上有效,结果通过request.completionHandler返回 - * @discussion 旧的注册本地推送接口被废弃,使用此接口可以替换 - * - */ -+ (void)addNotification:(JPushNotificationRequest *)request; - -/*! - * @abstract 移除推送 (支持iOS10,并兼容iOS10以下版本) - * - * JPush 2.1.9新接口 - * @param identifier JPushNotificationIdentifier类型,iOS10以上identifier设置为nil,则移除所有在通知中心显示推送和待推送请求,也可以通过设置identifier.delivered和identifier.identifiers来移除相应在通知中心显示推送或待推送请求,identifier.identifiers如果设置为nil或空数组则移除相应标志下所有在通知中心显示推送或待推送请求;iOS10以下identifier设置为nil,则移除所有推送,identifier.delivered属性无效,另外可以通过identifier.notificationObj传入特定推送对象来移除此推送。 - * @discussion 旧的所有删除推送接口被废弃,使用此接口可以替换 - * - */ -+ (void)removeNotification:(nullable JPushNotificationIdentifier *)identifier; - -/*! - * @abstract 查找推送 (支持iOS10,并兼容iOS10以下版本) - * - * JPush 2.1.9新接口 - * @param identifier JPushNotificationIdentifier类型,iOS10以上可以通过设置identifier.delivered和identifier.identifiers来查找相应在通知中心显示推送或待推送请求,identifier.identifiers如果设置为nil或空数组则返回相应标志下所有在通知中心显示推送或待推送请求;iOS10以下identifier.delivered属性无效,identifier.identifiers如果设置nil或空数组则返回所有未触发的推送。须要设置identifier.findCompletionHandler回调才能得到查找结果,通过(NSArray *results)返回相应对象数组。 - * @discussion 旧的查找推送接口被废弃,使用此接口可以替换 - * - */ -+ (void)findNotification:(JPushNotificationIdentifier *)identifier; - -/*! - * @abstract 本地推送,最多支持64个 - * - * @param fireDate 本地推送触发的时间 - * @param alertBody 本地推送需要显示的内容 - * @param badge 角标的数字。如果不需要改变角标传-1 - * @param alertAction 弹框的按钮显示的内容(IOS 8默认为"打开", 其他默认为"启动") - * @param notificationKey 本地推送标示符 - * @param userInfo 自定义参数,可以用来标识推送和增加附加信息 - * @param soundName 自定义通知声音,设置为nil为默认声音 - * - * @discussion 最多支持 64 个定义,此方法被[addNotification:]方法取代 - */ -+ (UILocalNotification *)setLocalNotification:(NSDate *)fireDate - alertBody:(NSString *)alertBody - badge:(int)badge - alertAction:(NSString *)alertAction - identifierKey:(NSString *)notificationKey - userInfo:(NSDictionary *)userInfo - soundName:(NSString *)soundName __attribute__((deprecated("JPush 2.1.9 版本已过期"))); - -/*! - * @abstract 本地推送 (支持 iOS8 新参数) - * - * IOS8新参数 - * @param region 自定义参数 - * @param regionTriggersOnce 自定义参数 - * @param category 自定义参数 - * @discussion 此方法被[addNotification:]方法取代 - */ -+ (UILocalNotification *)setLocalNotification:(NSDate *)fireDate - alertBody:(NSString *)alertBody - badge:(int)badge - alertAction:(NSString *)alertAction - identifierKey:(NSString *)notificationKey - userInfo:(NSDictionary *)userInfo - soundName:(NSString *)soundName - region:(CLRegion *)region - regionTriggersOnce:(BOOL)regionTriggersOnce - category:(NSString *)category NS_AVAILABLE_IOS(8_0) __attribute__((deprecated("JPush 2.1.9 版本已过期"))); - -/*! - * @abstract 前台展示本地推送 - * - * @param notification 本地推送对象 - * @param notificationKey 需要前台显示的本地推送通知的标示符 - * - * @discussion 默认App在前台运行时不会进行弹窗,在程序接收通知调用此接口可实现指定的推送弹窗。--iOS10以下还可继续使用,iOS10以上在[UNUserNotificationCenterDelegate willPresentNotification:withCompletionHandler:]方法中调用completionHandler(UNNotificationPresentationOptionSound | UNNotificationPresentationOptionAlert);即可 - */ -+ (void)showLocalNotificationAtFront:(UILocalNotification *)notification - identifierKey:(NSString *)notificationKey __attribute__((deprecated("JPush 2.1.9 版本已过期"))); -/*! - * @abstract 删除本地推送定义 - * - * @param notificationKey 本地推送标示符 - * @discussion 此方法被[removeNotification:]方法取代 - */ -+ (void)deleteLocalNotificationWithIdentifierKey:(NSString *)notificationKey __attribute__((deprecated("JPush 2.1.9 版本已过期"))); - -/*! - * @abstract 删除本地推送定义 - * @discussion 此方法被[removeNotification:]方法取代 - */ -+ (void)deleteLocalNotification:(UILocalNotification *)localNotification __attribute__((deprecated("JPush 2.1.9 版本已过期"))); - -/*! - * @abstract 获取指定通知 - * - * @param notificationKey 本地推送标示符 - * @return 本地推送对象数组, [array count]为0时表示没找到 - * @discussion 此方法被[findNotification:]方法取代 - */ -+ (NSArray *)findLocalNotificationWithIdentifier:(NSString *)notificationKey __attribute__((deprecated("JPush 2.1.9 版本已过期"))); - -/*! - * @abstract 清除所有本地推送对象 - * @discussion 此方法被[removeNotification:]方法取代 - */ -+ (void)clearAllLocalNotifications __attribute__((deprecated("JPush 2.1.9 版本已过期"))); - - -///---------------------------------------------------- -/// @name Server badge 服务器端 badge 功能 -///---------------------------------------------------- - -/*! - * @abstract 设置角标(到服务器) - * - * @param value 新的值. 会覆盖服务器上保存的值(这个用户) - * - * @discussion 本接口不会改变应用本地的角标值. - * 本地仍须调用 UIApplication:setApplicationIconBadgeNumber 函数来设置脚标. - * - * 本接口用于配合 JPush 提供的服务器端角标功能. - * 该功能解决的问题是, 服务器端推送 APNs 时, 并不知道客户端原来已经存在的角标是多少, 指定一个固定的数字不太合理. - * - * JPush 服务器端脚标功能提供: - * - * - 通过本 API 把当前客户端(当前这个用户的) 的实际 badge 设置到服务器端保存起来; - * - 调用服务器端 API 发 APNs 时(通常这个调用是批量针对大量用户), - * 使用 "+1" 的语义, 来表达需要基于目标用户实际的 badge 值(保存的) +1 来下发通知时带上新的 badge 值; - */ -+ (BOOL)setBadge:(NSInteger)value; - -/*! - * @abstract 重置脚标(为0) - * - * @discussion 相当于 [setBadge:0] 的效果. - * 参考 [JPUSHService setBadge:] 说明来理解其作用. - */ -+ (void)resetBadge; - -///---------------------------------------------------- -/// @name Other Feature 其他功能 -///---------------------------------------------------- - -/*! - * @abstract 设置手机号码(到服务器) - * - * @param mobileNumber 手机号码. 会与用户信息一一对应。可为空,为空则清除号码 - * @param completion 响应回调。成功则error为空,失败则error带有错误码及错误信息 - * - * @discussion 设置手机号码后,可实现“推送不到短信到”的通知方式,提高推送达到率。结果信息通过completion异步返回,也可将completion设置为nil不处理结果信息。 - * - */ -+ (void)setMobileNumber:(NSString *)mobileNumber completion:(nullable void (^)(NSError *error))completion; - -///---------------------------------------------------- -/// @name Logs and others 日志与其他 -///---------------------------------------------------- - -/*! - * @abstract JPush标识此设备的 registrationID - * - * @discussion SDK注册成功后, 调用此接口获取到 registrationID 才能够获取到. - * - * JPush 支持根据 registrationID 来进行推送. - * 如果你需要此功能, 应该通过此接口获取到 registrationID 后, 上报到你自己的服务器端, 并保存下来. - * registrationIDCompletionHandler:是新增的获取registrationID的方法,需要在block中获取registrationID,resCode为返回码,模拟器调用此接口resCode返回1011,registrationID返回nil. - * 更多的理解请参考 JPush 的文档网站. - */ -+ (NSString *)registrationID; - -+ (void)registrationIDCompletionHandler:(void(^)(int resCode,NSString * _Nullable registrationID))completionHandler; - -/*! - * @abstract 打开日志级别到 Debug - * - * @discussion JMessage iOS 的日志系统参考 Android 设计了级别. - * 从低到高是: Verbose, Debug, Info, Warning, Error. - * 对日志级别的进一步理解, 请参考 Android 相关的说明. - * - * SDK 默认开启的日志级别为: Info. 只显示必要的信息, 不打印调试日志. - * - * 请在SDK启动后调用本接口,调用本接口可打开日志级别为: Debug, 打印调试日志. - */ -+ (void)setDebugMode; - -/*! - * @abstract 关闭日志 - * - * @discussion 关于日志级别的说明, 参考 [JPUSHService setDebugMode] - * - * 虽说是关闭日志, 但还是会打印 Warning, Error 日志. 这二种日志级别, 在程序运行正常时, 不应有打印输出. - * - * 建议在发布的版本里, 调用此接口, 关闭掉日志打印. - */ -+ (void)setLogOFF; - -/*! - * @abstract 设置SDK地理位置权限开关 - * - * @discussion 关闭地理位置之后,SDK地理围栏的相关功能将受到影响,默认是开启。 - * - */ -+ (void)setLocationEanable:(BOOL)isEanble; - -/*! - * @abstract 设置PUSH开关 - * - * @discussion 关闭PUSH之后,将接收不到极光通知推送、自定义消息推送、liveActivity消息推送,默认是开启。 - * - */ -+ (void)setPushEnable:(BOOL)isEnable completion:(nullable void (^)(NSInteger iResCode))completion; - - -/*! -* @abstract 设置应用内提醒消息的代理 -* -* @discussion 遵守JPushNotiInMessageDelegate的代理对象 -* -*/ -+ (void)setNotiInMessageDelegate:(id)notiInMessageDelegate; - - - -///---------------------------------------------------- -///********************下列方法已过期******************** -///**************请使用新版tag/alias操作接口************** -///---------------------------------------------------- -/// @name Tag alias setting 设置别名与标签 -///---------------------------------------------------- - -/*! - * 下面的接口是可选的 - * 设置标签和(或)别名(若参数为nil,则忽略;若是空对象,则清空;详情请参考文档:https://docs.jiguang.cn/jpush/client/iOS/ios_api/) - * setTags:alias:fetchCompletionHandle:是新的设置标签别名的方法,不再需要显示声明回调函数,只需要在block里面处理设置结果即可. - * WARN: 使用block时需要注意循环引用问题 - */ -+ (void) setTags:(NSSet *)tags - alias:(NSString *)alias -callbackSelector:(SEL)cbSelector - target:(id)theTarget __attribute__((deprecated("JPush 2.1.1 版本已过期"))); -+ (void) setTags:(NSSet *)tags - alias:(NSString *)alias -callbackSelector:(SEL)cbSelector - object:(id)theTarget __attribute__((deprecated("JPush 3.0.6 版本已过期"))); -+ (void) setTags:(NSSet *)tags -callbackSelector:(SEL)cbSelector - object:(id)theTarget __attribute__((deprecated("JPush 3.0.6 版本已过期"))); -+ (void)setTags:(NSSet *)tags - alias:(NSString *)alias -fetchCompletionHandle:(void (^)(int iResCode, NSSet *iTags, NSString *iAlias))completionHandler __attribute__((deprecated("JPush 3.0.6 版本已过期"))); -+ (void) setTags:(NSSet *)tags -aliasInbackground:(NSString *)alias __attribute__((deprecated("JPush 3.0.6 版本已过期"))); -+ (void)setAlias:(NSString *)alias -callbackSelector:(SEL)cbSelector - object:(id)theTarget __attribute__((deprecated("JPush 3.0.6 版本已过期"))); - -@end - -@class UNUserNotificationCenter; -@class UNNotificationResponse; - -@protocol JPUSHRegisterDelegate - -/* - * @brief handle UserNotifications.framework [willPresentNotification:withCompletionHandler:] - * @param center [UNUserNotificationCenter currentNotificationCenter] 新特性用户通知中心 - * @param notification 前台得到的的通知对象 - * @param completionHandler 该callback中的options 请使用UNNotificationPresentationOptions - */ -- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger options))completionHandler; -/* - * @brief handle UserNotifications.framework [didReceiveNotificationResponse:withCompletionHandler:] - * @param center [UNUserNotificationCenter currentNotificationCenter] 新特性用户通知中心 - * @param response 通知响应对象 - * @param completionHandler - */ -- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler; - -/* - * @brief handle UserNotifications.framework [openSettingsForNotification:] - * @param center [UNUserNotificationCenter currentNotificationCenter] 新特性用户通知中心 - * @param notification 当前管理的通知对象 - */ -- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center openSettingsForNotification:(UNNotification *)notification NS_AVAILABLE_IOS(12.0); - -/** - * 监测通知授权状态返回的结果 - * @param status 授权通知状态,详见JPAuthorizationStatus - * @param info 更多信息,预留参数 - */ -- (void)jpushNotificationAuthorization:(JPAuthorizationStatus)status withInfo:(nullable NSDictionary *)info; - -@end - -@protocol JPUSHGeofenceDelegate -/** - 触发地理围栏 - @param geofence 地理围栏触发时返回的信息 - @param error 错误信息 - */ -- (void)jpushGeofenceRegion:(nullable NSDictionary *)geofence - error:(nullable NSError *)error; - -/** - 拉取地理围栏列表的回调 - - @param geofenceList 地理围栏列表 - */ -- (void)jpushCallbackGeofenceReceived:(nullable NSArray *)geofenceList; - -/** - 进入地理围栏区域 - - @param geofenceId 地理围栏id - @param userInfo 地理围栏触发时返回的信息 - @param error 错误信息 - */ -- (void)jpushGeofenceIdentifer:(NSString *)geofenceId didEnterRegion:(NSDictionary *_Nullable)userInfo error:(NSError *_Nullable)error __attribute__((deprecated("JPush 3.6.0 版本已过期"))); - -/** - 离开地理围栏区域 - - @param geofenceId 地理围栏id - @param userInfo 地理围栏触发时返回的信息 - @param error 错误信息 - */ -- (void)jpushGeofenceIdentifer:(NSString *)geofenceId didExitRegion:(NSDictionary *_Nullable)userInfo error:(NSError *_Nullable)error __attribute__((deprecated("JPush 3.6.0 版本已过期"))); - -@end - - -@protocol JPUSHNotiInMessageDelegate - -/** - 应用内提醒消息展示的回调 - - @param content 应用内提醒消息的内容 - - */ -- (void)jPushNotiInMessageDidShowWithContent:(NSDictionary *)content; - -/** - 应用内提醒消息点击的回调 - - @param content 应用内提醒消息的内容 - - */ -- (void)jPushNotiInMessageDidClickWithContent:(NSDictionary *)content; - -@end - - -@protocol JPUSHInAppMessageDelegate - -/** - 应用内消息展示的回调 - - @param inAppMessage 应用内消息的内容 - - */ -- (void)jPushInAppMessageDidShow:(JPushInAppMessage *)inAppMessage; - -/** - 应用内消息点击的回调 - - @param inAppMessage 应用内消息的内容 - - */ -- (void)jPushInAppMessageDidClick:(JPushInAppMessage *)inAppMessage; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/JPush/jpush-ios-5.0.1.xcframework/ios-arm64/libJPush.a b/Pods/JPush/jpush-ios-5.0.1.xcframework/ios-arm64/libJPush.a deleted file mode 100644 index 168df62..0000000 Binary files a/Pods/JPush/jpush-ios-5.0.1.xcframework/ios-arm64/libJPush.a and /dev/null differ diff --git a/Pods/JPush/jpush-ios-5.0.1.xcframework/ios-arm64_x86_64-simulator/Headers/JPUSHService.h b/Pods/JPush/jpush-ios-5.0.1.xcframework/ios-arm64_x86_64-simulator/Headers/JPUSHService.h deleted file mode 100644 index 35e3d1f..0000000 --- a/Pods/JPush/jpush-ios-5.0.1.xcframework/ios-arm64_x86_64-simulator/Headers/JPUSHService.h +++ /dev/null @@ -1,942 +0,0 @@ -/* - * | | | | \ \ / / | | | | / _______| - * | |____| | \ \/ / | |____| | / / - * | |____| | \ / | |____| | | | _____ - * | | | | / \ | | | | | | |____ | - * | | | | / /\ \ | | | | \ \______| | - * | | | | /_/ \_\ | | | | \_________| - * - * Copyright (c) 2011 ~ 2017 Shenzhen HXHG. All rights reserved. - */ - -#define JPUSH_VERSION_NUMBER 5.0.1 - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class CLRegion; -@class UILocalNotification; -@class CLLocation; -@class UNNotificationCategory; -@class UNNotificationSettings; -@class UNNotificationRequest; -@class UNNotification; -@class UIView; -@protocol JPUSHRegisterDelegate; -@protocol JPUSHGeofenceDelegate; -@protocol JPUSHNotiInMessageDelegate; -@protocol JPUSHInAppMessageDelegate; - -typedef void (^JPUSHTagsOperationCompletion)(NSInteger iResCode, NSSet *_Nullable iTags, NSInteger seq); -typedef void (^JPUSHTagValidOperationCompletion)(NSInteger iResCode, NSSet *_Nullable iTags, NSInteger seq, BOOL isBind); -typedef void (^JPUSHAliasOperationCompletion)(NSInteger iResCode, NSString *_Nullable iAlias, NSInteger seq); -typedef void (^JPUSHPropertiesOperationCompletion)(NSInteger iResCode, NSDictionary *_Nullable properties, NSInteger seq); -typedef void (^JPUSHLiveActivityTokenCompletion)(NSInteger iResCode, NSString *_Nullable iLiveActivityId, NSData * _Nullable pushToken, NSInteger seq); - -extern NSString *const kJPFNetworkIsConnectingNotification; // 正在连接中 -extern NSString *const kJPFNetworkDidSetupNotification; // 建立连接 -extern NSString *const kJPFNetworkDidCloseNotification; // 关闭连接 -extern NSString *const kJPFNetworkDidRegisterNotification; // 注册成功 -extern NSString *const kJPFNetworkFailedRegisterNotification; //注册失败 -extern NSString *const kJPFNetworkDidLoginNotification; // 登录成功 -extern NSString *const kJPFNetworkDidReceiveMessageNotification; // 收到消息(非APNS) -extern NSString *const kJPFServiceErrorNotification; // 错误提示 - -typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) { - JPAuthorizationOptionNone = 0, // the application may not present any UI upon a notification being received - JPAuthorizationOptionBadge = (1 << 0), // the application may badge its icon upon a notification being received - JPAuthorizationOptionSound = (1 << 1), // the application may play a sound upon a notification being received - JPAuthorizationOptionAlert = (1 << 2), // the application may display an alert upon a notification being received - JPAuthorizationOptionCarPlay = (1 << 3), // The ability to display notifications in a CarPlay environment. - JPAuthorizationOptionCriticalAlert NS_AVAILABLE_IOS(12.0) = (1 << 4) , //The ability to play sounds for critical alerts. - JPAuthorizationOptionProvidesAppNotificationSettings NS_AVAILABLE_IOS(12.0) = (1 << 5) , //An option indicating the system should display a button for in-app notification settings. - JPAuthorizationOptionProvisional NS_AVAILABLE_IOS(12.0) = (1 << 6) , //The ability to post noninterrupting notifications provisionally to the Notification Center. - JPAuthorizationOptionAnnouncement NS_AVAILABLE_IOS(13.0) = (1 << 7) , //The ability for Siri to automatically read out messages over AirPods. -}; - -typedef NS_ENUM(NSUInteger, JPAuthorizationStatus) { - JPAuthorizationNotDetermined = 0, // The user has not yet made a choice regarding whether the application may post user notifications. - JPAuthorizationStatusDenied, // The application is not authorized to post user notifications. - JPAuthorizationStatusAuthorized, // The application is authorized to post user notifications. - JPAuthorizationStatusProvisional NS_AVAILABLE_IOS(12.0), // The application is authorized to post non-interruptive user notifications. -}; - -/*! - * 通知注册实体类 - */ -@interface JPUSHRegisterEntity : NSObject - -/*! - * 支持的类型 - * badge,sound,alert - */ -@property (nonatomic, assign) NSInteger types; -/*! - * 注入的类别 - * iOS10 UNNotificationCategory - * iOS8-iOS9 UIUserNotificationCategory - */ -@property (nonatomic, strong, nullable) NSSet *categories; -@end - -/*! - * 进行删除、查找推送实体类 - */ -@interface JPushNotificationIdentifier : NSObject - -@property (nonatomic, copy, nullable) NSArray * identifiers; // 推送的标识数组 -@property (nonatomic, copy, nullable) UILocalNotification * notificationObj NS_DEPRECATED_IOS(4_0, 10_0); // iOS10以下可以传UILocalNotification对象数据,iOS10以上无效 -@property (nonatomic, assign) BOOL delivered NS_AVAILABLE_IOS(10_0); // 在通知中心显示的或待推送的标志,默认为NO,YES表示在通知中心显示的,NO表示待推送的 -@property (nonatomic, copy, nullable) void (^findCompletionHandler)(NSArray * _Nullable results); // 用于查询回调,调用[findNotification:]方法前必须设置,results为返回相应对象数组,iOS10以下返回UILocalNotification对象数组;iOS10以上根据delivered传入值返回UNNotification或UNNotificationRequest对象数组(delivered传入YES,则返回UNNotification对象数组,否则返回UNNotificationRequest对象数组) - -@end - -/*! - * 推送通知声音实体类 - * iOS10以上有效 - */ -@interface JPushNotificationSound : NSObject -@property (nonatomic, copy, nullable) NSString *soundName; //普通通知铃声 -@property (nonatomic, copy, nullable) NSString *criticalSoundName NS_AVAILABLE_IOS(12.0); //警告通知铃声 -@property (nonatomic, assign) float criticalSoundVolume NS_AVAILABLE_IOS(12.0); //警告通知铃声音量,有效值在0~1之间,默认为1 -@end - - -/*! - * 推送内容实体类 - */ -@interface JPushNotificationContent : NSObject - -@property (nonatomic, copy) NSString *title; // 推送标题 -@property (nonatomic, copy) NSString *subtitle; // 推送副标题 -@property (nonatomic, copy) NSString *body; // 推送内容 -@property (nonatomic, copy, nullable) NSNumber *badge; // 角标的数字。如果不需要改变角标传@(-1) -@property (nonatomic, copy) NSString *action NS_DEPRECATED_IOS(8_0, 10_0); // 弹框的按钮显示的内容(IOS 8默认为"打开", 其他默认为"启动",iOS10以上无效) -@property (nonatomic, copy) NSString *categoryIdentifier; // 行为分类标识 -@property (nonatomic, copy) NSDictionary *userInfo; // 本地推送时可以设置userInfo来增加附加信息,远程推送时设置的payload推送内容作为此userInfo -@property (nonatomic, copy, nullable) NSString *sound; // 声音名称,不设置则为默认声音 -@property (nonatomic, copy, nullable) JPushNotificationSound *soundSetting NS_AVAILABLE_IOS(10.0); //推送声音实体 -@property (nonatomic, copy) NSArray *attachments NS_AVAILABLE_IOS(10_0); // 附件,iOS10以上有效,需要传入UNNotificationAttachment对象数组类型 -@property (nonatomic, copy) NSString *threadIdentifier NS_AVAILABLE_IOS(10_0); // 线程或与推送请求相关对话的标识,iOS10以上有效,可用来对推送进行分组 -@property (nonatomic, copy) NSString *launchImageName NS_AVAILABLE_IOS(10_0); // 启动图片名,iOS10以上有效,从推送启动时将会用到 -@property (nonatomic, copy) NSString *summaryArgument NS_AVAILABLE_IOS(12.0); //插入到通知摘要中的部分参数。iOS12以上有效。 -@property (nonatomic, assign) NSUInteger summaryArgumentCount NS_AVAILABLE_IOS(12.0); //插入到通知摘要中的项目数。iOS12以上有效。 -@property (nonatomic, copy, nullable) NSString *targetContentIdentifier NS_AVAILABLE_IOS(13.0); // An identifier for the content of the notification used by the system to customize the scene to be activated when tapping on a notification. -//iOS15以上的新增属性 interruptionLevel为枚举UNNotificationInterruptionLevel -// The interruption level determines the degree of interruption associated with the notification -@property (nonatomic, assign) NSUInteger interruptionLevel NS_AVAILABLE_IOS(15.0); -// Relevance score determines the sorting for the notification across app notifications. The expected range is between 0.0f and 1.0f. -@property (nonatomic, assign) double relevanceScore NS_AVAILABLE_IOS(15.0); -// iOS16以上的新增属性 -@property (nonatomic, copy, nullable) NSString * filterCriteria NS_AVAILABLE_IOS(16.0); // default nil - -@end - - -/*! - * 推送触发方式实体类 - * 注:dateComponents、timeInterval、region在iOS10以上可选择其中一个参数传入有效值,如果同时传入值会根据优先级I、II、III使其中一种触发方式生效,fireDate为iOS10以下根据时间触发时须传入的参数 - */ -@interface JPushNotificationTrigger : NSObject - -@property (nonatomic, assign) BOOL repeat; // 设置是否重复,默认为NO -@property (nonatomic, copy) NSDate *fireDate NS_DEPRECATED_IOS(2_0, 10_0); // 用来设置触发推送的时间,iOS10以上无效 -@property (nonatomic, copy) CLRegion *region NS_AVAILABLE_IOS(8_0); // 用来设置触发推送的位置,iOS8以上有效,iOS10以上优先级为I,应用需要有允许使用定位的授权 -@property (nonatomic, copy) NSDateComponents *dateComponents NS_AVAILABLE_IOS(10_0); // 用来设置触发推送的日期时间,iOS10以上有效,优先级为II -@property (nonatomic, assign) NSTimeInterval timeInterval NS_AVAILABLE_IOS(10_0); // 用来设置触发推送的时间,iOS10以上有效,优先级为III - -@end - -/*! - * 注册或更新推送实体类 - */ -@interface JPushNotificationRequest : NSObject - -@property (nonatomic, copy) NSString *requestIdentifier; // 推送请求标识 -@property (nonatomic, copy) JPushNotificationContent *content; // 设置推送的具体内容 -@property (nonatomic, copy) JPushNotificationTrigger *trigger; // 设置推送的触发方式 -@property (nonatomic, copy, nullable) void (^completionHandler)(id result); // 注册或更新推送成功回调,iOS10以上成功则result为UNNotificationRequest对象,失败则result为nil;iOS10以下成功result为UILocalNotification对象,失败则result为nil - -@end - - -/*! - * 应用内消息内容实体 - */ -@interface JPushInAppMessage : NSObject - -@property (nonatomic, copy) NSString *mesageId; // 消息id -@property (nonatomic, copy) NSString *title; // 标题 -@property (nonatomic, copy) NSString *content; // 内容 -@property (nonatomic, strong) NSArray *target; // 目标页面 -@property (nonatomic, copy) NSString *clickAction; // 跳转地址 -@property (nonatomic, strong) NSDictionary *extras; // 附加字段 - -@end - -/*! - * JPush 核心头文件 - */ -@interface JPUSHService : NSObject - - -///---------------------------------------------------- -/// @name Setup 启动相关 -///---------------------------------------------------- - - -/*! - * @abstract 启动SDK - * - * @param launchingOption 启动参数. - * @param appKey 一个JPush 应用必须的,唯一的标识. 请参考 JPush 相关说明文档来获取这个标识. - * @param channel 发布渠道. 可选. - * @param isProduction 是否生产环境. 如果为开发状态,设置为 NO; 如果为生产状态,应改为 YES. - * App 证书环境取决于profile provision的配置,此处建议与证书环境保持一致. - * - * @discussion 提供SDK启动必须的参数, 来启动 SDK. - * 此接口必须在 App 启动时调用, 否则 JPush SDK 将无法正常工作. - */ -+ (void)setupWithOption:(nullable NSDictionary *)launchingOption - appKey:(NSString *)appKey - channel:(nullable NSString *)channel - apsForProduction:(BOOL)isProduction; - -/*! - * @abstract 启动SDK - * - * @param launchingOption 启动参数. - * @param appKey 一个JPush 应用必须的,唯一的标识. 请参考 JPush 相关说明文档来获取这个标识. - * @param channel 发布渠道. 可选. - * @param isProduction 是否生产环境. 如果为开发状态,设置为 NO; 如果为生产状态,应改为 YES. - * App 证书环境取决于profile provision的配置,此处建议与证书环境保持一致. - * @param advertisingId 广告标识符(IDFA) 如果不需要使用IDFA,传nil. - * - * @discussion 提供SDK启动必须的参数, 来启动 SDK. - * 此接口必须在 App 启动时调用, 否则 JPush SDK 将无法正常工作. - */ -+ (void)setupWithOption:(nullable NSDictionary *)launchingOption - appKey:(NSString *)appKey - channel:(nullable NSString *)channel - apsForProduction:(BOOL)isProduction - advertisingIdentifier:(nullable NSString *)advertisingId; - - -///---------------------------------------------------- -/// @name APNs about 通知相关 -///---------------------------------------------------- - -/*! - * @abstract 注册要处理的远程通知类型 - * - * @param types 通知类型 - * @param categories 类别组 - * - */ -+ (void)registerForRemoteNotificationTypes:(NSUInteger)types - categories:(nullable NSSet *)categories; -/*! - * @abstract 新版本的注册方法(兼容iOS10) - * - * @param config 注册通知配置 - * @param delegate 代理 - * - */ -+ (void)registerForRemoteNotificationConfig:(JPUSHRegisterEntity *)config delegate:(nullable id)delegate; - - -+ (void)registerDeviceToken:(NSData *)deviceToken; - -/*! - * @abstract 注册liveActivity并上报其pushToken - * 在pushToken有变化的时候同步调用该接口。 - * 在liveActivity结束的时候,请同步调用该接口,pushToken传nil - * - * @param liveActivityId 标识某一个liveActivity - * @param pushToken 对应该liveActivity的pushToken,如有更新,请及时调用该方法更新pushToken - * @param completion 响应回调 - * @param seq 请求序列号 - */ -+ (void)registerLiveActivity:(NSString *)liveActivityId - pushToken:(nullable NSData *)pushToken - completion:(nullable JPUSHLiveActivityTokenCompletion)completion - seq:(NSInteger)seq; - -/*! - * @abstract 处理收到的 APNs 消息 - */ -+ (void)handleRemoteNotification:(NSDictionary *)remoteInfo; - -/*! - * @abstract 向极光服务器提交Token - * - * @param voipToken 推送使用的Voip Token - */ -+ (void)registerVoipToken:(NSData *)voipToken; - - -/*! - * @abstract 处理收到的 Voip 消息 - * - * @param remoteInfo 下发的 Voip 内容 - */ -+ (void)handleVoipNotification:(NSDictionary *)remoteInfo; - - -/*! -* @abstract 检测通知授权状态 -* @param completion 授权结果通过status值返回,详见JPAuthorizationStatus -*/ -+ (void)requestNotificationAuthorization:(nullable void (^)(JPAuthorizationStatus status))completion; - -/*! -* @abstract 跳转至系统设置页面,iOS8及以上有效 -*/ -+ (void)openSettingsForNotification:(nullable void (^)(BOOL success))completionHandler NS_AVAILABLE_IOS(8_0); - -/*! - * Tags操作接口 - * 支持增加/覆盖/删除/清空/查询操作 - * 详情请参考文档:https://docs.jiguang.cn/jpush/client/iOS/ios_api/) - */ - -/** - 增加tags - - @param tags 需要增加的tags集合 - @param completion 响应回调 - @param seq 请求序列号 - */ -+ (void)addTags:(NSSet *)tags - completion:(nullable JPUSHTagsOperationCompletion)completion - seq:(NSInteger)seq; - -/** - 覆盖tags - 调用该接口会覆盖用户所有的tags - - @param tags 需要设置的tags集合 - @param completion 响应回调 - @param seq 请求序列号 - */ -+ (void)setTags:(NSSet *)tags - completion:(nullable JPUSHTagsOperationCompletion)completion - seq:(NSInteger)seq; - -/** - 删除指定tags - - @param tags 需要删除的tags集合 - @param completion 响应回调 - @param seq 请求序列号 - */ -+ (void)deleteTags:(NSSet *)tags - completion:(nullable JPUSHTagsOperationCompletion)completion - seq:(NSInteger)seq; - -/** - 清空所有tags - @param completion 响应回调 - @param seq 请求序列号 - */ -+ (void)cleanTags:(nullable JPUSHTagsOperationCompletion)completion - seq:(NSInteger)seq; - -/** - 查询全部tags - - @param completion 响应回调,请在回调中获取查询结果 - @param seq 请求序列号 - */ -+ (void)getAllTags:(nullable JPUSHTagsOperationCompletion)completion - seq:(NSInteger)seq; - -/** - 验证tag是否绑定 - - @param completion 响应回调,回调中查看是否绑定 - @param seq 请求序列号 - */ -+ (void)validTag:(NSString *)tag - completion:(nullable JPUSHTagValidOperationCompletion)completion - seq:(NSInteger)seq; - -/** - 设置Alias - - @param alias 需要设置的alias - @param completion 响应回调 - @param seq 请求序列号 - */ -+ (void)setAlias:(NSString *)alias - completion:(nullable JPUSHAliasOperationCompletion)completion - seq:(NSInteger)seq; - -/** - 删除alias - - @param completion 响应回调 - @param seq 请求序列号 - */ -+ (void)deleteAlias:(nullable JPUSHAliasOperationCompletion)completion - seq:(NSInteger)seq; - -/** - 查询当前alias - - @param completion 响应回调 - @param seq 请求序列号 - */ -+ (void)getAlias:(nullable JPUSHAliasOperationCompletion)completion - seq:(NSInteger)seq; - - -/*! - * @abstract 过滤掉无效的 tags - * - * @discussion 如果 tags 数量超过限制数量, 则返回靠前的有效的 tags. - * 建议设置 tags 前用此接口校验. SDK 内部也会基于此接口来做过滤. - */ -+ (NSSet *)filterValidTags:(NSSet *)tags; - - -/*! - * Property操作接口 - * 支持增加/删除/清空操作 - * 详情请参考文档:https://docs.jiguang.cn/jpush/client/iOS/ios_api/) - */ - -/** - 新增/更新用户属性 - - 如果某个用户属性之前已经存在了,则会更新;不存在,则会新增 - - @param properties 需要新增或者更新的的用户属性内容,类型为NSDictionary; - Key 为用户属性名称,类型必须是 NSString 类型;Value为用户属性值,只支持 NSString、NSNumber、NSDate类型,如果属性为BOOL类型,传值时请转成NSNumber类型 - @param completion 响应回调 - @param seq 请求序列号 - */ -+ (void)setProperties:(NSDictionary *)properties - completion:(nullable JPUSHPropertiesOperationCompletion)completion - seq:(NSInteger)seq; - - -/** - 删除指定属性 - - @param keys 需要删除的属性名称集合 - @param completion 响应回调 - @param seq 请求序列号 - */ -+ (void)deleteProperties:(NSSet *)keys - completion:(nullable JPUSHPropertiesOperationCompletion)completion - seq:(NSInteger)seq; - - -/** - 清空所有属性 - @param completion 响应回调 - @param seq 请求序列号 - */ -+ (void)cleanProperties:(nullable JPUSHPropertiesOperationCompletion)completion - seq:(NSInteger)seq; - - -/*! - * 应用内消息接口 - * 使用应用内消息需要配置以下两个接口。请在进入页面和离开页面的时候相应地配置。以下两个接口请配套调用。 - */ - -/** - 进入页面 - - 请与 + (void)pageLeave:(NSString *)pageName; 方法配套使用 - - @param pageName 页面名 - @discussion 使用应用内消息功能,需要配置pageEnterTo:和pageLeave:函数。 - */ -+ (void)pageEnterTo:(NSString *)pageName; - - -/** - 离开页面 - - 请与 + (void)pageEnterTo:(NSString *)pageName;方法配套使用 - - @param pageName 页面名 - @discussion 使用应用内消息功能,需要配置pageEnterTo:和pageLeave:函数。 - */ -+ (void)pageLeave:(NSString *)pageName; - - -/*! -* @abstract 设置应用内消息的代理 -* -* @discussion 遵守JPUSHInAppMessageDelegate的代理对象 -* -*/ -+ (void)setInAppMessageDelegate:(id)inAppMessageDelegate; - - -///---------------------------------------------------- -/// @name Stats 统计功能 -///---------------------------------------------------- - -/*! - * @abstract 开始记录页面停留 - * - * @param pageName 页面名称 - * @discussion JCore 1.1.8 版本后,如需统计页面流,请使用 JAnalytics - */ -+ (void)startLogPageView:(NSString *)pageName __attribute__((deprecated("JCore 1.1.8 版本已过期"))); - -/*! - * @abstract 停止记录页面停留 - * - * @param pageName 页面 - * @discussion JCore 1.1.8 版本后,如需统计页面流,请使用 JAnalytics - */ -+ (void)stopLogPageView:(NSString *)pageName __attribute__((deprecated("JCore 1.1.8 版本已过期"))); - -/*! - * @abstract 直接上报在页面的停留时间 - * - * @param pageName 页面 - * @param seconds 停留的秒数 - * @discussion JCore 1.1.8 版本后,如需统计页面流,请使用 JAnalytics - */ -+ (void)beginLogPageView:(NSString *)pageName duration:(int)seconds __attribute__((deprecated("JCore 1.1.8 版本已过期"))); - -/*! - * @abstract 开启Crash日志收集 - * - * @discussion 默认是关闭状态. - */ -+ (void)crashLogON; - -/*! - * @abstract 地理位置上报 - * - * @param latitude 纬度. - * @param longitude 经度. - * - */ -+ (void)setLatitude:(double)latitude longitude:(double)longitude; - -/*! - * @abstract 地理位置上报 - * - * @param location 直接传递 CLLocation * 型的地理信息 - * - * @discussion 需要链接 CoreLocation.framework 并且 #import - */ -+ (void)setLocation:(CLLocation *)location; - -/** - 设置地理围栏的最大个数 - 默认值为 10 ,iOS系统默认地理围栏最大个数为20 - @param count 个数 count - */ -+ (void)setGeofeneceMaxCount:(NSInteger)count; - -/** - 设置地理围栏'圈内'类型的检测周期 - 默认15分钟检测一次 - */ -+ (void)setGeofenecePeriodForInside:(NSInteger)seconds; - -/** - 注册地理围栏的代理 - - @param delegate 代理 - @param launchOptions app启动完成是收到的字段参数 - */ -+ (void)registerLbsGeofenceDelegate:(id)delegate withLaunchOptions:(nullable NSDictionary *)launchOptions; - -/** - 删除地理围栏 - - @param geofenceId 地理围栏id - */ -+ (void)removeGeofenceWithIdentifier:(NSString *)geofenceId; - -///---------------------------------------------------- -/// @name Local Notification 本地通知 -///---------------------------------------------------- -/*! - * @abstract 注册或更新推送 (支持iOS10,并兼容iOS10以下版本) - * - * JPush 2.1.9新接口 - * @param request JPushNotificationRequest类型,设置推送的属性,设置已有推送的request.requestIdentifier即更新已有的推送,否则为注册新推送,更新推送仅仅在iOS10以上有效,结果通过request.completionHandler返回 - * @discussion 旧的注册本地推送接口被废弃,使用此接口可以替换 - * - */ -+ (void)addNotification:(JPushNotificationRequest *)request; - -/*! - * @abstract 移除推送 (支持iOS10,并兼容iOS10以下版本) - * - * JPush 2.1.9新接口 - * @param identifier JPushNotificationIdentifier类型,iOS10以上identifier设置为nil,则移除所有在通知中心显示推送和待推送请求,也可以通过设置identifier.delivered和identifier.identifiers来移除相应在通知中心显示推送或待推送请求,identifier.identifiers如果设置为nil或空数组则移除相应标志下所有在通知中心显示推送或待推送请求;iOS10以下identifier设置为nil,则移除所有推送,identifier.delivered属性无效,另外可以通过identifier.notificationObj传入特定推送对象来移除此推送。 - * @discussion 旧的所有删除推送接口被废弃,使用此接口可以替换 - * - */ -+ (void)removeNotification:(nullable JPushNotificationIdentifier *)identifier; - -/*! - * @abstract 查找推送 (支持iOS10,并兼容iOS10以下版本) - * - * JPush 2.1.9新接口 - * @param identifier JPushNotificationIdentifier类型,iOS10以上可以通过设置identifier.delivered和identifier.identifiers来查找相应在通知中心显示推送或待推送请求,identifier.identifiers如果设置为nil或空数组则返回相应标志下所有在通知中心显示推送或待推送请求;iOS10以下identifier.delivered属性无效,identifier.identifiers如果设置nil或空数组则返回所有未触发的推送。须要设置identifier.findCompletionHandler回调才能得到查找结果,通过(NSArray *results)返回相应对象数组。 - * @discussion 旧的查找推送接口被废弃,使用此接口可以替换 - * - */ -+ (void)findNotification:(JPushNotificationIdentifier *)identifier; - -/*! - * @abstract 本地推送,最多支持64个 - * - * @param fireDate 本地推送触发的时间 - * @param alertBody 本地推送需要显示的内容 - * @param badge 角标的数字。如果不需要改变角标传-1 - * @param alertAction 弹框的按钮显示的内容(IOS 8默认为"打开", 其他默认为"启动") - * @param notificationKey 本地推送标示符 - * @param userInfo 自定义参数,可以用来标识推送和增加附加信息 - * @param soundName 自定义通知声音,设置为nil为默认声音 - * - * @discussion 最多支持 64 个定义,此方法被[addNotification:]方法取代 - */ -+ (UILocalNotification *)setLocalNotification:(NSDate *)fireDate - alertBody:(NSString *)alertBody - badge:(int)badge - alertAction:(NSString *)alertAction - identifierKey:(NSString *)notificationKey - userInfo:(NSDictionary *)userInfo - soundName:(NSString *)soundName __attribute__((deprecated("JPush 2.1.9 版本已过期"))); - -/*! - * @abstract 本地推送 (支持 iOS8 新参数) - * - * IOS8新参数 - * @param region 自定义参数 - * @param regionTriggersOnce 自定义参数 - * @param category 自定义参数 - * @discussion 此方法被[addNotification:]方法取代 - */ -+ (UILocalNotification *)setLocalNotification:(NSDate *)fireDate - alertBody:(NSString *)alertBody - badge:(int)badge - alertAction:(NSString *)alertAction - identifierKey:(NSString *)notificationKey - userInfo:(NSDictionary *)userInfo - soundName:(NSString *)soundName - region:(CLRegion *)region - regionTriggersOnce:(BOOL)regionTriggersOnce - category:(NSString *)category NS_AVAILABLE_IOS(8_0) __attribute__((deprecated("JPush 2.1.9 版本已过期"))); - -/*! - * @abstract 前台展示本地推送 - * - * @param notification 本地推送对象 - * @param notificationKey 需要前台显示的本地推送通知的标示符 - * - * @discussion 默认App在前台运行时不会进行弹窗,在程序接收通知调用此接口可实现指定的推送弹窗。--iOS10以下还可继续使用,iOS10以上在[UNUserNotificationCenterDelegate willPresentNotification:withCompletionHandler:]方法中调用completionHandler(UNNotificationPresentationOptionSound | UNNotificationPresentationOptionAlert);即可 - */ -+ (void)showLocalNotificationAtFront:(UILocalNotification *)notification - identifierKey:(NSString *)notificationKey __attribute__((deprecated("JPush 2.1.9 版本已过期"))); -/*! - * @abstract 删除本地推送定义 - * - * @param notificationKey 本地推送标示符 - * @discussion 此方法被[removeNotification:]方法取代 - */ -+ (void)deleteLocalNotificationWithIdentifierKey:(NSString *)notificationKey __attribute__((deprecated("JPush 2.1.9 版本已过期"))); - -/*! - * @abstract 删除本地推送定义 - * @discussion 此方法被[removeNotification:]方法取代 - */ -+ (void)deleteLocalNotification:(UILocalNotification *)localNotification __attribute__((deprecated("JPush 2.1.9 版本已过期"))); - -/*! - * @abstract 获取指定通知 - * - * @param notificationKey 本地推送标示符 - * @return 本地推送对象数组, [array count]为0时表示没找到 - * @discussion 此方法被[findNotification:]方法取代 - */ -+ (NSArray *)findLocalNotificationWithIdentifier:(NSString *)notificationKey __attribute__((deprecated("JPush 2.1.9 版本已过期"))); - -/*! - * @abstract 清除所有本地推送对象 - * @discussion 此方法被[removeNotification:]方法取代 - */ -+ (void)clearAllLocalNotifications __attribute__((deprecated("JPush 2.1.9 版本已过期"))); - - -///---------------------------------------------------- -/// @name Server badge 服务器端 badge 功能 -///---------------------------------------------------- - -/*! - * @abstract 设置角标(到服务器) - * - * @param value 新的值. 会覆盖服务器上保存的值(这个用户) - * - * @discussion 本接口不会改变应用本地的角标值. - * 本地仍须调用 UIApplication:setApplicationIconBadgeNumber 函数来设置脚标. - * - * 本接口用于配合 JPush 提供的服务器端角标功能. - * 该功能解决的问题是, 服务器端推送 APNs 时, 并不知道客户端原来已经存在的角标是多少, 指定一个固定的数字不太合理. - * - * JPush 服务器端脚标功能提供: - * - * - 通过本 API 把当前客户端(当前这个用户的) 的实际 badge 设置到服务器端保存起来; - * - 调用服务器端 API 发 APNs 时(通常这个调用是批量针对大量用户), - * 使用 "+1" 的语义, 来表达需要基于目标用户实际的 badge 值(保存的) +1 来下发通知时带上新的 badge 值; - */ -+ (BOOL)setBadge:(NSInteger)value; - -/*! - * @abstract 重置脚标(为0) - * - * @discussion 相当于 [setBadge:0] 的效果. - * 参考 [JPUSHService setBadge:] 说明来理解其作用. - */ -+ (void)resetBadge; - -///---------------------------------------------------- -/// @name Other Feature 其他功能 -///---------------------------------------------------- - -/*! - * @abstract 设置手机号码(到服务器) - * - * @param mobileNumber 手机号码. 会与用户信息一一对应。可为空,为空则清除号码 - * @param completion 响应回调。成功则error为空,失败则error带有错误码及错误信息 - * - * @discussion 设置手机号码后,可实现“推送不到短信到”的通知方式,提高推送达到率。结果信息通过completion异步返回,也可将completion设置为nil不处理结果信息。 - * - */ -+ (void)setMobileNumber:(NSString *)mobileNumber completion:(nullable void (^)(NSError *error))completion; - -///---------------------------------------------------- -/// @name Logs and others 日志与其他 -///---------------------------------------------------- - -/*! - * @abstract JPush标识此设备的 registrationID - * - * @discussion SDK注册成功后, 调用此接口获取到 registrationID 才能够获取到. - * - * JPush 支持根据 registrationID 来进行推送. - * 如果你需要此功能, 应该通过此接口获取到 registrationID 后, 上报到你自己的服务器端, 并保存下来. - * registrationIDCompletionHandler:是新增的获取registrationID的方法,需要在block中获取registrationID,resCode为返回码,模拟器调用此接口resCode返回1011,registrationID返回nil. - * 更多的理解请参考 JPush 的文档网站. - */ -+ (NSString *)registrationID; - -+ (void)registrationIDCompletionHandler:(void(^)(int resCode,NSString * _Nullable registrationID))completionHandler; - -/*! - * @abstract 打开日志级别到 Debug - * - * @discussion JMessage iOS 的日志系统参考 Android 设计了级别. - * 从低到高是: Verbose, Debug, Info, Warning, Error. - * 对日志级别的进一步理解, 请参考 Android 相关的说明. - * - * SDK 默认开启的日志级别为: Info. 只显示必要的信息, 不打印调试日志. - * - * 请在SDK启动后调用本接口,调用本接口可打开日志级别为: Debug, 打印调试日志. - */ -+ (void)setDebugMode; - -/*! - * @abstract 关闭日志 - * - * @discussion 关于日志级别的说明, 参考 [JPUSHService setDebugMode] - * - * 虽说是关闭日志, 但还是会打印 Warning, Error 日志. 这二种日志级别, 在程序运行正常时, 不应有打印输出. - * - * 建议在发布的版本里, 调用此接口, 关闭掉日志打印. - */ -+ (void)setLogOFF; - -/*! - * @abstract 设置SDK地理位置权限开关 - * - * @discussion 关闭地理位置之后,SDK地理围栏的相关功能将受到影响,默认是开启。 - * - */ -+ (void)setLocationEanable:(BOOL)isEanble; - -/*! - * @abstract 设置PUSH开关 - * - * @discussion 关闭PUSH之后,将接收不到极光通知推送、自定义消息推送、liveActivity消息推送,默认是开启。 - * - */ -+ (void)setPushEnable:(BOOL)isEnable completion:(nullable void (^)(NSInteger iResCode))completion; - - -/*! -* @abstract 设置应用内提醒消息的代理 -* -* @discussion 遵守JPushNotiInMessageDelegate的代理对象 -* -*/ -+ (void)setNotiInMessageDelegate:(id)notiInMessageDelegate; - - - -///---------------------------------------------------- -///********************下列方法已过期******************** -///**************请使用新版tag/alias操作接口************** -///---------------------------------------------------- -/// @name Tag alias setting 设置别名与标签 -///---------------------------------------------------- - -/*! - * 下面的接口是可选的 - * 设置标签和(或)别名(若参数为nil,则忽略;若是空对象,则清空;详情请参考文档:https://docs.jiguang.cn/jpush/client/iOS/ios_api/) - * setTags:alias:fetchCompletionHandle:是新的设置标签别名的方法,不再需要显示声明回调函数,只需要在block里面处理设置结果即可. - * WARN: 使用block时需要注意循环引用问题 - */ -+ (void) setTags:(NSSet *)tags - alias:(NSString *)alias -callbackSelector:(SEL)cbSelector - target:(id)theTarget __attribute__((deprecated("JPush 2.1.1 版本已过期"))); -+ (void) setTags:(NSSet *)tags - alias:(NSString *)alias -callbackSelector:(SEL)cbSelector - object:(id)theTarget __attribute__((deprecated("JPush 3.0.6 版本已过期"))); -+ (void) setTags:(NSSet *)tags -callbackSelector:(SEL)cbSelector - object:(id)theTarget __attribute__((deprecated("JPush 3.0.6 版本已过期"))); -+ (void)setTags:(NSSet *)tags - alias:(NSString *)alias -fetchCompletionHandle:(void (^)(int iResCode, NSSet *iTags, NSString *iAlias))completionHandler __attribute__((deprecated("JPush 3.0.6 版本已过期"))); -+ (void) setTags:(NSSet *)tags -aliasInbackground:(NSString *)alias __attribute__((deprecated("JPush 3.0.6 版本已过期"))); -+ (void)setAlias:(NSString *)alias -callbackSelector:(SEL)cbSelector - object:(id)theTarget __attribute__((deprecated("JPush 3.0.6 版本已过期"))); - -@end - -@class UNUserNotificationCenter; -@class UNNotificationResponse; - -@protocol JPUSHRegisterDelegate - -/* - * @brief handle UserNotifications.framework [willPresentNotification:withCompletionHandler:] - * @param center [UNUserNotificationCenter currentNotificationCenter] 新特性用户通知中心 - * @param notification 前台得到的的通知对象 - * @param completionHandler 该callback中的options 请使用UNNotificationPresentationOptions - */ -- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger options))completionHandler; -/* - * @brief handle UserNotifications.framework [didReceiveNotificationResponse:withCompletionHandler:] - * @param center [UNUserNotificationCenter currentNotificationCenter] 新特性用户通知中心 - * @param response 通知响应对象 - * @param completionHandler - */ -- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler; - -/* - * @brief handle UserNotifications.framework [openSettingsForNotification:] - * @param center [UNUserNotificationCenter currentNotificationCenter] 新特性用户通知中心 - * @param notification 当前管理的通知对象 - */ -- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center openSettingsForNotification:(UNNotification *)notification NS_AVAILABLE_IOS(12.0); - -/** - * 监测通知授权状态返回的结果 - * @param status 授权通知状态,详见JPAuthorizationStatus - * @param info 更多信息,预留参数 - */ -- (void)jpushNotificationAuthorization:(JPAuthorizationStatus)status withInfo:(nullable NSDictionary *)info; - -@end - -@protocol JPUSHGeofenceDelegate -/** - 触发地理围栏 - @param geofence 地理围栏触发时返回的信息 - @param error 错误信息 - */ -- (void)jpushGeofenceRegion:(nullable NSDictionary *)geofence - error:(nullable NSError *)error; - -/** - 拉取地理围栏列表的回调 - - @param geofenceList 地理围栏列表 - */ -- (void)jpushCallbackGeofenceReceived:(nullable NSArray *)geofenceList; - -/** - 进入地理围栏区域 - - @param geofenceId 地理围栏id - @param userInfo 地理围栏触发时返回的信息 - @param error 错误信息 - */ -- (void)jpushGeofenceIdentifer:(NSString *)geofenceId didEnterRegion:(NSDictionary *_Nullable)userInfo error:(NSError *_Nullable)error __attribute__((deprecated("JPush 3.6.0 版本已过期"))); - -/** - 离开地理围栏区域 - - @param geofenceId 地理围栏id - @param userInfo 地理围栏触发时返回的信息 - @param error 错误信息 - */ -- (void)jpushGeofenceIdentifer:(NSString *)geofenceId didExitRegion:(NSDictionary *_Nullable)userInfo error:(NSError *_Nullable)error __attribute__((deprecated("JPush 3.6.0 版本已过期"))); - -@end - - -@protocol JPUSHNotiInMessageDelegate - -/** - 应用内提醒消息展示的回调 - - @param content 应用内提醒消息的内容 - - */ -- (void)jPushNotiInMessageDidShowWithContent:(NSDictionary *)content; - -/** - 应用内提醒消息点击的回调 - - @param content 应用内提醒消息的内容 - - */ -- (void)jPushNotiInMessageDidClickWithContent:(NSDictionary *)content; - -@end - - -@protocol JPUSHInAppMessageDelegate - -/** - 应用内消息展示的回调 - - @param inAppMessage 应用内消息的内容 - - */ -- (void)jPushInAppMessageDidShow:(JPushInAppMessage *)inAppMessage; - -/** - 应用内消息点击的回调 - - @param inAppMessage 应用内消息的内容 - - */ -- (void)jPushInAppMessageDidClick:(JPushInAppMessage *)inAppMessage; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/JPush/jpush-ios-5.0.1.xcframework/ios-arm64_x86_64-simulator/libJPush.a b/Pods/JPush/jpush-ios-5.0.1.xcframework/ios-arm64_x86_64-simulator/libJPush.a deleted file mode 100644 index 5afdf0e..0000000 Binary files a/Pods/JPush/jpush-ios-5.0.1.xcframework/ios-arm64_x86_64-simulator/libJPush.a and /dev/null differ diff --git a/Pods/JPushExtension/jpush-extension-ios-2.0.1.xcframework/Info.plist b/Pods/JPushExtension/jpush-extension-ios-2.0.1.xcframework/Info.plist deleted file mode 100644 index c1c5500..0000000 --- a/Pods/JPushExtension/jpush-extension-ios-2.0.1.xcframework/Info.plist +++ /dev/null @@ -1,44 +0,0 @@ - - - - - AvailableLibraries - - - HeadersPath - Headers - LibraryIdentifier - ios-arm64 - LibraryPath - libJPushExtension.a - SupportedArchitectures - - arm64 - - SupportedPlatform - ios - - - HeadersPath - Headers - LibraryIdentifier - ios-arm64_x86_64-simulator - LibraryPath - libJPushExtension.a - SupportedArchitectures - - arm64 - x86_64 - - SupportedPlatform - ios - SupportedPlatformVariant - simulator - - - CFBundlePackageType - XFWK - XCFrameworkFormatVersion - 1.0 - - diff --git a/Pods/JPushExtension/jpush-extension-ios-2.0.1.xcframework/ios-arm64/Headers/JPushNotificationExtensionService.h b/Pods/JPushExtension/jpush-extension-ios-2.0.1.xcframework/ios-arm64/Headers/JPushNotificationExtensionService.h deleted file mode 100644 index e3c53cb..0000000 --- a/Pods/JPushExtension/jpush-extension-ios-2.0.1.xcframework/ios-arm64/Headers/JPushNotificationExtensionService.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * | | | | \ \ / / | | | | / _______| - * | |____| | \ \/ / | |____| | / / - * | |____| | \ / | |____| | | | _____ - * | | | | / \ | | | | | | |____ | - * | | | | / /\ \ | | | | \ \______| | - * | | | | /_/ \_\ | | | | \_________| - * - * Copyright (c) 2017 Shenzhen HXHG. All rights reserved. - */ - -#import - -#define JPUSH_EXTENSION_VERSION_NUMBER 2.0.1 - -@class UNNotificationRequest; - -@interface JPushNotificationExtensionService : NSObject - - -/** - 设置appkey(需要与main target中的appkey相同) - */ -+ (void)jpushSetAppkey:(NSString *)appkey; - -/** - apns送达 - @param request apns请求 - @param completion 回调 - */ -+ (void)jpushReceiveNotificationRequest:(UNNotificationRequest *)request with:(void (^)(void))completion; - -/** - 关闭日志 - 默认为开启 - 建议发布时关闭以减少不必要的IO - */ -+ (void)setLogOff; - - -@end diff --git a/Pods/JPushExtension/jpush-extension-ios-2.0.1.xcframework/ios-arm64/libJPushExtension.a b/Pods/JPushExtension/jpush-extension-ios-2.0.1.xcframework/ios-arm64/libJPushExtension.a deleted file mode 100644 index d41a48f..0000000 Binary files a/Pods/JPushExtension/jpush-extension-ios-2.0.1.xcframework/ios-arm64/libJPushExtension.a and /dev/null differ diff --git a/Pods/JPushExtension/jpush-extension-ios-2.0.1.xcframework/ios-arm64_x86_64-simulator/Headers/JPushNotificationExtensionService.h b/Pods/JPushExtension/jpush-extension-ios-2.0.1.xcframework/ios-arm64_x86_64-simulator/Headers/JPushNotificationExtensionService.h deleted file mode 100644 index e3c53cb..0000000 --- a/Pods/JPushExtension/jpush-extension-ios-2.0.1.xcframework/ios-arm64_x86_64-simulator/Headers/JPushNotificationExtensionService.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * | | | | \ \ / / | | | | / _______| - * | |____| | \ \/ / | |____| | / / - * | |____| | \ / | |____| | | | _____ - * | | | | / \ | | | | | | |____ | - * | | | | / /\ \ | | | | \ \______| | - * | | | | /_/ \_\ | | | | \_________| - * - * Copyright (c) 2017 Shenzhen HXHG. All rights reserved. - */ - -#import - -#define JPUSH_EXTENSION_VERSION_NUMBER 2.0.1 - -@class UNNotificationRequest; - -@interface JPushNotificationExtensionService : NSObject - - -/** - 设置appkey(需要与main target中的appkey相同) - */ -+ (void)jpushSetAppkey:(NSString *)appkey; - -/** - apns送达 - @param request apns请求 - @param completion 回调 - */ -+ (void)jpushReceiveNotificationRequest:(UNNotificationRequest *)request with:(void (^)(void))completion; - -/** - 关闭日志 - 默认为开启 - 建议发布时关闭以减少不必要的IO - */ -+ (void)setLogOff; - - -@end diff --git a/Pods/JPushExtension/jpush-extension-ios-2.0.1.xcframework/ios-arm64_x86_64-simulator/libJPushExtension.a b/Pods/JPushExtension/jpush-extension-ios-2.0.1.xcframework/ios-arm64_x86_64-simulator/libJPushExtension.a deleted file mode 100644 index c470d49..0000000 Binary files a/Pods/JPushExtension/jpush-extension-ios-2.0.1.xcframework/ios-arm64_x86_64-simulator/libJPushExtension.a and /dev/null differ diff --git a/Pods/JXCategoryView/LICENSE b/Pods/JXCategoryView/LICENSE deleted file mode 100644 index 0fdb1e7..0000000 --- a/Pods/JXCategoryView/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2018 暴走的鑫鑫 - -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. diff --git a/Pods/JXCategoryView/README.md b/Pods/JXCategoryView/README.md deleted file mode 100644 index 2fae2c3..0000000 --- a/Pods/JXCategoryView/README.md +++ /dev/null @@ -1,296 +0,0 @@ -

- -[![platform](https://img.shields.io/badge/platform-iOS-blue.svg?style=plastic)](#) -[![languages](https://img.shields.io/badge/language-objective--c-blue.svg)](#) -[![cocoapods](https://img.shields.io/badge/cocoapods-supported-4BC51D.svg?style=plastic)](https://cocoapods.org/pods/JXCategoryView) -[![support](https://img.shields.io/badge/support-ios%208%2B-orange.svg)](#) - -A powerful and easy to use category view (segmentedcontrol, segmentview, pagingview, pagerview, pagecontrol) (腾讯新闻、今日头条、QQ 音乐、网易云音乐、京东、爱奇艺、腾讯视频、淘宝、天猫、简书、微博等所有主流 APP 分类切换滚动视图) - -与其他的同类三方库对比的优点: -- 使用协议封装指示器逻辑,可以随心所欲地自定义指示器效果; -- 提供更加全面丰富、高度自定义的效果; -- 使用子类化管理 cell 样式,逻辑更清晰,扩展更简单; -- 高度封装列表容器,使用便捷,完美支持列表的生命周期调用; - -## Swift版本 - -如果你在找 Swift 版本,请点击查看 [JXSegmentedView](https://github.com/pujiaxin33/JXSegmentedView)。 - -## 效果预览 - -### 指示器效果预览 - -说明 | Gif | -----|------| -LineView | | -LineView延长 | | -LineView延长+偏移 | | -LineView🌈彩虹风格 | | -DotLineView点线效果 | | -BallView QQ黏性红点 | | -TriangleView 三角形底部 | | -TriangleView 三角形顶部 | | -BackgroundView椭圆形 | | -BackgroundView椭圆形+阴影 | | -BackgroundView长方形 | | -BackgroundView遮罩有背景 | | -BackgroundView遮罩无背景 | | -BackgroundView渐变色 | | -ImageView底部(小船) | | -ImageView背景(最佳男歌手) | | -ImageView滚动效果(足球) | | -混合使用 | | - -以下均支持上下位置切换: -`JXCategoryIndicatorLineView`、`JXCategoryIndicatorImageView`、`JXCategoryIndicatorBallView`、`JXCategoryIndicatorTriangleView` - -### Cell样式效果预览 - -说明 | Gif | -----|------| -颜色渐变 | | -大小缩放 | | -大小缩放+底部锚点 | | -大小缩放+顶部锚点 | | -大小缩放+字体粗细 | | -大小缩放+点击动画 | | -大小缩放+cell宽度缩放 | | -TitleImage_Top | | -TitleImage_Left | | -TitleImage_Bottom | | -TitleImage_Right | | -cell图文混用 | | -Image | | -数字 | | -红点 | | -多行文本 | | -多行富文本 | | -Cell背景色渐变 | | -分割线 | | - -### 特殊效果预览 - -说明 | Gif | -----|------| -数据源过少
averageCellSpacingEnabled默认为YES | | -数据源过少
averageCellSpacingEnabled为NO | | -SegmentedControl
参考[`SegmentedControlViewController`](https://github.com/pujiaxin33/JXCategoryView/tree/master/Example/Example/Examples/SegmentedControl/SegmentedControlViewController.m)类 | | -导航栏使用
参考[`NaviSegmentedControlViewController`](https://github.com/pujiaxin33/JXCategoryView/tree/master/Example/Example/Examples/SegmentedControl/NaviSegmentedControlViewController.m)类 | | -嵌套使用
参考[`NestViewController`](https://github.com/pujiaxin33/JXCategoryView/tree/master/Example/Example/Examples/Nest/NestViewController.m)类 | | -个人主页(上下左右滚动、header悬浮)
参考[`PagingViewController`](https://github.com/pujiaxin33/JXCategoryView/tree/master/Example/Example/Examples/PagingView/Example/PagingViewController.m)类
更多样式请点击查看[JXPagingView库](https://github.com/pujiaxin33/JXPagingView) | | -垂直列表滚动
参考[`VerticalListViewController`](https://github.com/pujiaxin33/JXCategoryView/tree/master/Example/Example/Examples/VerticalListView/VerticalListViewController.m)类
高仿腾讯视频
支持UITableView,参考[`VerticalListTableViewController`](https://github.com/pujiaxin33/JXCategoryView/tree/master/Example/Example/Examples/VerticalListView/VerticalListTableViewController.m)
(背景色异常是录屏软件bug) | | -| 垂直缩放(仿网易圈圈、脉脉首页)
参考[`ScrollZoomViewController`](https://github.com/pujiaxin33/JXCategoryView/tree/master/Example/Example/Examples/ScrollZoom/ScrollZoomViewController.m)类 | | -数据源刷新&列表数据加载
参考[`LoadDataListContainerViewController`](https://github.com/pujiaxin33/JXCategoryView/tree/master/Example/Example/Examples/LoadData/LoadDataListContainerViewController.m)类 | | -上下滚动隐藏导航栏 | | -京东首页-滚动渐变变小 | | - -### 自定义效果预览 - -收录来自其他使用者的自定义示例,这些自定义类只在 Demo 项目里面,Pod 库并没有这些文件。所以,如果你需要使用这些自定义效果,请通过文件导入的方式。 - -目的: -- 参考学习如何自定义; -- 直接修改自定义示例类以快速实现自己的需求。 - -欢迎提 PullRequest 进行收录你的自定义效果。 - -| 说明 | Gif | -| ----|------| -| Spring动画指示器 | | -| 富文本数量cell | | -| 左右对齐指示器 | | -| 秒杀时间线cell | | -| 京东商品排序cell | | -| title背景块cell | | - -## 要求 - -- iOS 9.0+ -- Xcode 9+ -- Objective-C - -## 安装 - -### 手动 - -Clone 代码,把 Sources 文件夹拖入项目,`#import "JXCategoryView.h"` 就可以使用了。 - -### CocoaPods - -```ruby -target '' do - pod 'JXCategoryView' -end -``` -先执行 `pod repo update`,再执行 `pod install`。 - -## 结构图 - - - -## 使用 - -### JXCategoryTitleView 使用示例 - -1. 初始化 `JXCategoryTitleView`: -```Objective-C -self.categoryView = [[JXCategoryTitleView alloc] initWithFrame:CGRectMake(0, 0, WindowsSize.width, 50)]; -self.categoryView.delegate = self; -[self.view addSubview:self.categoryView]; -``` - -2. 配置 `JXCategoryTitleView` 的属性: -```Objective-C -self.categoryView.titles = @[@"螃蟹", @"麻辣小龙虾", @"苹果"...]; -self.categoryView.titleColorGradientEnabled = YES; -``` - -3. 添加指示器: -```Objective-C -JXCategoryIndicatorLineView *lineView = [[JXCategoryIndicatorLineView alloc] init]; -lineView.indicatorColor = [UIColor redColor]; -lineView.indicatorWidth = JXCategoryViewAutomaticDimension; -self.categoryView.indicators = @[lineView]; -``` - -4. 实现 `JXCategoryViewDelegate` 代理(可选) -```Objective-C -// 点击选中或者滚动选中都会调用该方法。适用于只关心选中事件,不关心具体是点击还是滚动选中的。 -- (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index; - -// 点击选中的情况才会调用该方法 -- (void)categoryView:(JXCategoryBaseView *)categoryView didClickSelectedItemAtIndex:(NSInteger)index; - -// 滚动选中的情况才会调用该方法 -- (void)categoryView:(JXCategoryBaseView *)categoryView didScrollSelectedItemAtIndex:(NSInteger)index; - -// 正在滚动中的回调 -- (void)categoryView:(JXCategoryBaseView *)categoryView scrollingFromLeftIndex:(NSInteger)leftIndex toRightIndex:(NSInteger)rightIndex ratio:(CGFloat)ratio; -``` - -### 列表容器使用示例 - -#### `JXCategoryListContainerView` 封装类使用示例 - -`JXCategoryListContainerView` 是对列表视图高度封装的类,具有以下优点: - -- 相对于直接使用 `UIScrollView` 自定义,封装度高、代码集中、使用简单; -- 列表懒加载:当显示某个列表的时候,才进行列表初始化。而不是一次性加载全部列表,性能更优; -- 支持列表的 `willAppear`、`didAppear`、`willDisappear`、`didDisappear` 生命周期方法调用; - -1. 初始化 `JXCategoryListContainerView` 并关联到 `categoryView`: -```Objective-C -self.listContainerView = [[JXCategoryListContainerView alloc] initWithType:JXCategoryListContainerType_ScrollView delegate:self]; -[self.view addSubview:self.listContainerView]; -// 关联到 categoryView -self.categoryView.listContainer = self.listContainerView; -``` - -2. 实现 `JXCategoryListContainerViewDelegate` 代理方法: -```Objective-C -// 返回列表的数量 -- (NSInteger)numberOfListsInlistContainerView:(JXCategoryListContainerView *)listContainerView { - return self.titles.count; -} -// 根据下标 index 返回对应遵守并实现 `JXCategoryListContentViewDelegate` 协议的列表实例 -- (id)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index { - return [[ListViewController alloc] init]; -} -``` - -3. 列表实现 `JXCategoryListContentViewDelegate` 代理方法 -不管列表是 `UIView` 还是 `UIViewController` 都可以,提高使用灵活性,更便于现有的业务接入。 -```Objective-C -// 返回列表视图 -// 如果列表是 VC,就返回 VC.view -// 如果列表是 View,就返回 View 自己 -- (UIView *)listView { - return self.view; -} -``` - - -具体点击 [LoadDataListContainerViewController](https://github.com/pujiaxin33/JXCategoryView/tree/master/Example/Example/Examples/LoadData/LoadDataListContainerViewController.m) 查看源代码了解 - -#### 直接使用 UIScrollView 自定义 - -因为代码量较多且分散,所有不推荐使用该方法。要正确使用需要注意的地方比较多,尤其对于刚接触 iOS 的同学来说不太友好。 - -不直接贴代码了,具体点击 [LoadDataListCustomViewController](https://github.com/pujiaxin33/JXCategoryView/tree/master/Example/Example/Examples/LoadData/LoadDataListCustomViewController.m) 查看源代码了解。 - - -## 常见问题和答案 - -❗️❗️❗️这里面包含了许多常见问题和答案,使用之前请务必浏览此文档,或者遇到问题先看此文档❗️❗️❗️ - -[常见问题和答案总文档](https://github.com/pujiaxin33/JXCategoryView/blob/master/Document/%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.md) - -- [个人主页效果更丰富的示例:JXPagingView](https://github.com/pujiaxin33/JXPagingView) -- [侧滑手势处理](https://github.com/pujiaxin33/JXCategoryView/blob/master/Document/%E4%BE%A7%E6%BB%91%E6%89%8B%E5%8A%BF%E5%A4%84%E7%90%86.md) -- [列表的生命周期方法处理](https://github.com/pujiaxin33/JXCategoryView/blob/master/Document/%E5%88%97%E8%A1%A8%E7%9A%84%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E6%96%B9%E6%B3%95%E5%A4%84%E7%90%86.md) -- [`JXCategoryListContainerType`的`scrollView`和`collectionView`对比](https://github.com/pujiaxin33/JXCategoryView/blob/master/Document/%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.md#jxcategorylistcontainertype%E7%9A%84scrollview%E5%92%8Ccollectionview%E5%AF%B9%E6%AF%94) -- [cell左滑删除](https://github.com/pujiaxin33/JXCategoryView/blob/master/Document/%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.md#cell%E5%B7%A6%E6%BB%91%E5%88%A0%E9%99%A4) -- [`FDFullscreenPopGesture`等全屏手势处理](https://github.com/pujiaxin33/JXCategoryView/blob/master/Document/%E5%85%A8%E5%B1%8F%E6%89%8B%E5%8A%BF%E5%A4%84%E7%90%86.md) -- [JXCategoryView数据源刷新](https://github.com/pujiaxin33/JXCategoryView/blob/master/Document/%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.md#jxcategoryview%E6%95%B0%E6%8D%AE%E6%BA%90%E5%88%B7%E6%96%B0) -- [`reloadDataWithoutListContainer`方法使用说明](https://github.com/pujiaxin33/JXCategoryView/blob/master/Document/%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.md#reloaddatawithoutlistcontainer%E6%96%B9%E6%B3%95%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E) -- [listContainer或contentScrollView关联说明](https://github.com/pujiaxin33/JXCategoryView/blob/master/Document/%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.md#listcontainer%E6%88%96contentscrollview%E5%85%B3%E8%81%94%E8%AF%B4%E6%98%8E) -- [点击切换列表的动画控制](https://github.com/pujiaxin33/JXCategoryView/blob/master/Document/%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.md#%E7%82%B9%E5%87%BB%E5%88%87%E6%8D%A2%E5%88%97%E8%A1%A8%E7%9A%84%E5%8A%A8%E7%94%BB%E6%8E%A7%E5%88%B6) -- [列表cell点击跳转示例](https://github.com/pujiaxin33/JXCategoryView/blob/master/Document/%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.md#%E5%88%97%E8%A1%A8cell%E7%82%B9%E5%87%BB%E8%B7%B3%E8%BD%AC%E7%A4%BA%E4%BE%8B) -- [列表调用`presentViewController`方法](https://github.com/pujiaxin33/JXCategoryView/blob/master/Document/%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.md#%E5%88%97%E8%A1%A8%E8%B0%83%E7%94%A8presentviewcontroller%E6%96%B9%E6%B3%95) -- [代码选中指定index](https://github.com/pujiaxin33/JXCategoryView/blob/master/Document/%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.md#%E4%BB%A3%E7%A0%81%E9%80%89%E4%B8%AD%E6%8C%87%E5%AE%9Aindex) -- [JXCategoryView.collectionView高度取整说明](https://github.com/pujiaxin33/JXCategoryView/blob/master/Document/%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.md#jxcategoryviewcollectionview%E9%AB%98%E5%BA%A6%E5%8F%96%E6%95%B4%E8%AF%B4%E6%98%8E) -- [对父VC的automaticallyAdjustsScrollViewInsets属性设置为NO](https://github.com/pujiaxin33/JXCategoryView/blob/master/Document/%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.md#%E5%AF%B9%E7%88%B6vc%E7%9A%84automaticallyadjustsscrollviewinsets%E5%B1%9E%E6%80%A7%E8%AE%BE%E7%BD%AE%E4%B8%BAno) -- [`JXCategoryListContainerView`内部使用`UIViewController`当做列表容器使用说明](https://github.com/pujiaxin33/JXCategoryView/blob/master/Document/%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.md#jxcategorylistcontainerview%E5%86%85%E9%83%A8%E4%BD%BF%E7%94%A8uiviewcontroller%E5%BD%93%E5%81%9A%E5%88%97%E8%A1%A8%E5%AE%B9%E5%99%A8%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E) -- [使用多行文本](https://github.com/pujiaxin33/JXCategoryView/blob/master/Document/%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.md#%E4%BD%BF%E7%94%A8%E5%A4%9A%E8%A1%8C%E6%96%87%E6%9C%AC) -- [列表容器禁止左右滑动](https://github.com/pujiaxin33/JXCategoryView/blob/master/Document/%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.md#%E5%88%97%E8%A1%A8%E5%AE%B9%E5%99%A8%E7%A6%81%E6%AD%A2%E5%B7%A6%E5%8F%B3%E6%BB%91%E5%8A%A8) -- [单个cell刷新 ](https://github.com/pujiaxin33/JXCategoryView/blob/master/Document/%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.md#%E5%8D%95%E4%B8%AAcell%E5%88%B7%E6%96%B0) -- [点击item时指示器和列表滚动时效果一致](https://github.com/pujiaxin33/JXCategoryView/blob/master/Document/%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.md#%E7%82%B9%E5%87%BBitem%E6%97%B6%E6%8C%87%E7%A4%BA%E5%99%A8%E5%92%8C%E5%88%97%E8%A1%A8%E6%BB%9A%E5%8A%A8%E6%97%B6%E6%95%88%E6%9E%9C%E4%B8%80%E8%87%B4) -- [自定义建议](https://github.com/pujiaxin33/JXCategoryView/blob/master/Document/%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.md#%E8%87%AA%E5%AE%9A%E4%B9%89%E5%BB%BA%E8%AE%AE) - -## 指示器样式自定义 - -- 需要继承 `JXCategoryIndicatorProtocol` 协议,点击参看 [JXCategoryIndicatorProtocol](https://github.com/pujiaxin33/JXCategoryView/blob/master/Sources/Common/JXCategoryIndicatorProtocol.h); -- 提供了继承 `JXCategoryIndicatorProtocol` 协议的基类 `JXCategoryIndicatorComponentView`,里面提供了许多基础属性。点击参看 [JXCategoryIndicatorComponentView](https://github.com/pujiaxin33/JXCategoryView/blob/master/Sources/Indicator/IndicatorViews/JXCategoryIndicatorComponentView.m); -- 自定义指示器,请参考已实现的指示器视图,多尝试、多思考,再有问题请提 Issue 或加入反馈 QQ 群。 - -## Cell 自定义 - -- 任何子类化需求,view、cell、cellModel 三个都要子类化,即使某个子类 cell 什么事情都不做。用于维护继承链,以免以后子类化都不知道要继承谁了; -- 如果你想完全自定义 cell 里面的内容,那就继承 `JXCategoryIndicatorView`、`JXCategoryIndicatorCell、`JXCategoryIndicatorCellModel`,就像`JXCategoryTitleView`、`JXCategoryTitleCell、`JXCategoryTitleCellModel`那样去做; -- 如果你只是在父类进行一些微调,那就继承目标 view、cell、cellModel,对 cell 原有控件微调、或者加入新的控件皆可。就像 `JXCategoryTitleImageView` 系列、`JXCategoryTitleAttributeView` 系列那样去做; -- Cell 自定义,请参考已实现的 cell 样式,多尝试、多思考,再有问题请提 Issue 或加入反馈 QQ 群 - -## 常用属性说明 - -[常用属性说明文档地址](https://github.com/pujiaxin33/JXCategoryView/blob/master/Document/%E5%B8%B8%E7%94%A8%E5%B1%9E%E6%80%A7%E8%AF%B4%E6%98%8E.md) - -## 更新记录 - -- 2018.8.21 发布1.0.0版本,更新内容:使用POP(面向协议编程)重构指示器视图;[迁移指南](https://github.com/pujiaxin33/JXCategoryView/blob/master/Migration/1.0.0.md) -- 2018.8.22 发布1.0.1版本,更新内容:删除zoomEnabled,新增titleLabelZoomEnabled、imageZoomEnabled; -- 2018.8.23 发布1.0.2版本,更新内容:添加cellWidthZoomEnabled实现腾讯视频效果; -- 2018.8.24 发布1.0.3版本,更新内容:添加垂直列表滚动效果、指示器添加verticalMargin属性、JXCategoryViewDelegate代理方法优化; -- 2018.9.4 发布1.0.4版本,更新内容:修复bug、添加cell图文混用示例; -- 2018.12.19 发布1.1.7版本,更新内容:添加`JXCategoryListContainerView`,高度封装列表逻辑,支持懒加载列表,提升初始化性能; -- 2019.1.24 发布1.2.2版本,更新内容:非兼容更新接口`- (BOOL)selectCellAtIndex:(NSInteger)index selectedType:(JXCategoryCellSelectedType)selectedType`,自定义有用到该接口的请及时更新。 -- 2019.6.21 发布1.3.13版本,更新内容:将`JXCategoryListCollectionContainerView.dataSource`移动到m实现文件,添加`- (instancetype)initWithDataSource:(id)dataSource`初始化方法。 -- 2019.7.20 发布1.3.16版本,删除代理方法`- (void)categoryView:(JXCategoryBaseView *)categoryView didClickedItemContentScrollViewTransitionToIndex:(NSInteger)index;`,请使用`contentScrollViewClickTransitionAnimationEnabled`属性。`JXCategoryTitleVerticalZoomView`进行了重构,内容左边距只需要使用`contentEdgeLeft`属性即可。 -- 2019.9.11 发布1.4.0版本,删除一波被标记为弃用的属性和方法;完善列表的生命周期方法的调用;`JXCategoryListCollectionContainerView`类新增和必须要调用`- (void)scrollingFromLeftIndex:(NSInteger)leftIndex toRightIndex:(NSInteger)rightIndex ratio:(CGFloat)ratio selectedIndex:(NSInteger)selectedIndex`和`- (void)didClickSelectedItemAtIndex:(NSInteger)index`两个方法。 -- 2019.9.19 发布1.5.0版本,重构列表容器,具体修改请参考[1.5.0版本迁移指南](https://github.com/pujiaxin33/JXCategoryView/blob/master/Migration/1.5.0%E7%89%88%E6%9C%AC%E8%BF%81%E7%A7%BB%E6%8C%87%E5%8D%97.md) - -## 补充 - -如果刚开始使用`JXCategoryView`,当开发过程中需要支持某种特性时,请务必先搜索使用文档或者源代码。确认是否已经实现支持了想要的特性。请别不要文档和源代码都没有看,就直接提问,这对于大家都是一种时间浪费。如果没有支持想要的特性,欢迎提Issue讨论,或者自己实现提一个PullRequest。 - -该仓库保持随时更新,对于主流新的分类选择效果会第一时间支持。使用过程中,有任何建议或问题,可以通过以下方式联系我:
-邮箱:317437084@qq.com
-QQ群: 112440473 - - - -喜欢就star❤️一下吧 - -## License - -JXCategoryView is released under the MIT license. diff --git a/Pods/JXCategoryView/Sources/Base/JXCategoryBaseCell.h b/Pods/JXCategoryView/Sources/Base/JXCategoryBaseCell.h deleted file mode 100644 index ba630f3..0000000 --- a/Pods/JXCategoryView/Sources/Base/JXCategoryBaseCell.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// JXCategoryBaseCell.h -// UI系列测试 -// -// Created by jiaxin on 2018/3/15. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import -#import "JXCategoryBaseCellModel.h" -#import "JXCategoryViewAnimator.h" -#import "JXCategoryViewDefines.h" - -@interface JXCategoryBaseCell : UICollectionViewCell - -@property (nonatomic, strong, readonly) JXCategoryBaseCellModel *cellModel; -@property (nonatomic, strong, readonly) JXCategoryViewAnimator *animator; - -- (void)initializeViews NS_REQUIRES_SUPER; - -- (void)reloadData:(JXCategoryBaseCellModel *)cellModel NS_REQUIRES_SUPER; - -- (BOOL)checkCanStartSelectedAnimation:(JXCategoryBaseCellModel *)cellModel; - -- (void)addSelectedAnimationBlock:(JXCategoryCellSelectedAnimationBlock)block; - -- (void)startSelectedAnimationIfNeeded:(JXCategoryBaseCellModel *)cellModel; - -@end diff --git a/Pods/JXCategoryView/Sources/Base/JXCategoryBaseCell.m b/Pods/JXCategoryView/Sources/Base/JXCategoryBaseCell.m deleted file mode 100644 index ea63aac..0000000 --- a/Pods/JXCategoryView/Sources/Base/JXCategoryBaseCell.m +++ /dev/null @@ -1,98 +0,0 @@ -// -// JXCategoryBaseCell.m -// UI系列测试 -// -// Created by jiaxin on 2018/3/15. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryBaseCell.h" -#import "RTLManager.h" - -@interface JXCategoryBaseCell () -@property (nonatomic, strong) JXCategoryBaseCellModel *cellModel; -@property (nonatomic, strong) JXCategoryViewAnimator *animator; -@property (nonatomic, strong) NSMutableArray *animationBlockArray; -@end - -@implementation JXCategoryBaseCell - -#pragma mark - Initialize - -- (void)dealloc { - [self.animator stop]; -} - -- (void)prepareForReuse { - [super prepareForReuse]; - - [self.animator stop]; -} - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self initializeViews]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)coder { - self = [super initWithCoder:coder]; - if (self) { - [self initializeViews]; - } - return self; -} - -#pragma mark - Public - -- (void)initializeViews { - _animationBlockArray = [NSMutableArray array]; - - [RTLManager horizontalFlipViewIfNeeded:self]; - [RTLManager horizontalFlipViewIfNeeded:self.contentView]; -} - -- (void)reloadData:(JXCategoryBaseCellModel *)cellModel { - self.cellModel = cellModel; - - if (cellModel.isSelectedAnimationEnabled) { - [self.animationBlockArray removeLastObject]; - if ([self checkCanStartSelectedAnimation:cellModel]) { - self.animator = [[JXCategoryViewAnimator alloc] init]; - self.animator.duration = cellModel.selectedAnimationDuration; - } else { - [self.animator stop]; - } - } -} - -- (BOOL)checkCanStartSelectedAnimation:(JXCategoryBaseCellModel *)cellModel { - BOOL canStartSelectedAnimation = ((cellModel.selectedType == JXCategoryCellSelectedTypeCode) || (cellModel.selectedType == JXCategoryCellSelectedTypeClick)); - return canStartSelectedAnimation; -} - -- (void)addSelectedAnimationBlock:(JXCategoryCellSelectedAnimationBlock)block { - [self.animationBlockArray addObject:block]; -} - -- (void)startSelectedAnimationIfNeeded:(JXCategoryBaseCellModel *)cellModel { - if (cellModel.isSelectedAnimationEnabled && [self checkCanStartSelectedAnimation:cellModel]) { - // 需要更新 isTransitionAnimating,用于处理在过滤时,禁止响应点击,避免界面异常。 - cellModel.transitionAnimating = YES; - __weak typeof(self)weakSelf = self; - self.animator.progressCallback = ^(CGFloat percent) { - for (JXCategoryCellSelectedAnimationBlock block in weakSelf.animationBlockArray) { - block(percent); - } - }; - self.animator.completeCallback = ^{ - cellModel.transitionAnimating = NO; - [weakSelf.animationBlockArray removeAllObjects]; - }; - [self.animator start]; - } -} - -@end diff --git a/Pods/JXCategoryView/Sources/Base/JXCategoryBaseCellModel.h b/Pods/JXCategoryView/Sources/Base/JXCategoryBaseCellModel.h deleted file mode 100644 index af82301..0000000 --- a/Pods/JXCategoryView/Sources/Base/JXCategoryBaseCellModel.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// JXCategoryBaseCellModel.h -// UI系列测试 -// -// Created by jiaxin on 2018/3/15. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import -#import -#import "JXCategoryViewDefines.h" - -@interface JXCategoryBaseCellModel : NSObject - -@property (nonatomic, assign) NSUInteger index; -@property (nonatomic, assign) CGFloat cellWidth; -@property (nonatomic, assign) CGFloat cellSpacing; -@property (nonatomic, assign, getter=isSelected) BOOL selected; - -@property (nonatomic, assign, getter=isCellWidthZoomEnabled) BOOL cellWidthZoomEnabled; -@property (nonatomic, assign) CGFloat cellWidthNormalZoomScale; -@property (nonatomic, assign) CGFloat cellWidthCurrentZoomScale; -@property (nonatomic, assign) CGFloat cellWidthSelectedZoomScale; - -@property (nonatomic, assign, getter=isSelectedAnimationEnabled) BOOL selectedAnimationEnabled; -@property (nonatomic, assign) NSTimeInterval selectedAnimationDuration; -@property (nonatomic, assign) JXCategoryCellSelectedType selectedType; - -@property (nonatomic, assign, getter=isTransitionAnimating) BOOL transitionAnimating; - -@end diff --git a/Pods/JXCategoryView/Sources/Base/JXCategoryBaseCellModel.m b/Pods/JXCategoryView/Sources/Base/JXCategoryBaseCellModel.m deleted file mode 100644 index 9b6e520..0000000 --- a/Pods/JXCategoryView/Sources/Base/JXCategoryBaseCellModel.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// JXCategoryBaseCellModel.m -// UI系列测试 -// -// Created by jiaxin on 2018/3/15. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryBaseCellModel.h" - -@implementation JXCategoryBaseCellModel - -@end diff --git a/Pods/JXCategoryView/Sources/Base/JXCategoryBaseView.h b/Pods/JXCategoryView/Sources/Base/JXCategoryBaseView.h deleted file mode 100644 index 27a54fe..0000000 --- a/Pods/JXCategoryView/Sources/Base/JXCategoryBaseView.h +++ /dev/null @@ -1,222 +0,0 @@ -// -// JXCategoryView.h -// UI系列测试 -// -// Created by jiaxin on 2018/3/15. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import -#import "JXCategoryBaseCell.h" -#import "JXCategoryBaseCellModel.h" -#import "JXCategoryCollectionView.h" -#import "JXCategoryViewDefines.h" - -@class JXCategoryBaseView; - -@protocol JXCategoryViewListContainer -- (void)setDefaultSelectedIndex:(NSInteger)index; -- (UIScrollView *)contentScrollView; -- (void)reloadData; -- (void)didClickSelectedItemAtIndex:(NSInteger)index; -@end - -@protocol JXCategoryViewDelegate - -@optional - -//为什么会把选中代理分为三个,因为有时候只关心点击选中的,有时候只关心滚动选中的,有时候只关心选中。所以具体情况,使用对应方法。 -/** - 点击选中或者滚动选中都会调用该方法。适用于只关心选中事件,不关心具体是点击还是滚动选中的。 - - @param categoryView categoryView对象 - @param index 选中的index - */ -- (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index; - -/** - 点击选中的情况才会调用该方法 - - @param categoryView categoryView对象 - @param index 选中的index - */ -- (void)categoryView:(JXCategoryBaseView *)categoryView didClickSelectedItemAtIndex:(NSInteger)index; - -/** - 滚动选中的情况才会调用该方法 - - @param categoryView categoryView对象 - @param index 选中的index - */ -- (void)categoryView:(JXCategoryBaseView *)categoryView didScrollSelectedItemAtIndex:(NSInteger)index; - -/** - 控制能否点击Item - - @param categoryView categoryView对象 - @param index 准备点击的index - @return 能否点击 - */ -- (BOOL)categoryView:(JXCategoryBaseView *)categoryView canClickItemAtIndex:(NSInteger)index; - -/** - 正在滚动中的回调 - - @param categoryView categoryView对象 - @param leftIndex 正在滚动中,相对位置处于左边的index - @param rightIndex 正在滚动中,相对位置处于右边的index - @param ratio 从左往右计算的百分比 - */ -- (void)categoryView:(JXCategoryBaseView *)categoryView scrollingFromLeftIndex:(NSInteger)leftIndex toRightIndex:(NSInteger)rightIndex ratio:(CGFloat)ratio; - -@end - -@interface JXCategoryBaseView : UIView - -@property (nonatomic, strong, readonly) JXCategoryCollectionView *collectionView; - -@property (nonatomic, strong) NSArray *dataSource; - -@property (nonatomic, weak) id delegate; - -/** - 高封装度的列表容器,使用该类可以让列表拥有完成的生命周期、自动同步defaultSelectedIndex、自动调用reloadData。 - */ -@property (nonatomic, weak) id listContainer; - -/** - 推荐使用封装度更高的listContainer属性。如果使用contentScrollView请参考`LoadDataListCustomViewController`使用示例。 - */ -@property (nonatomic, strong) UIScrollView *contentScrollView; - -@property (nonatomic, assign) NSInteger defaultSelectedIndex; //修改初始化的时候默认选择的index - -@property (nonatomic, assign, readonly) NSInteger selectedIndex; - -@property (nonatomic, assign, getter=isContentScrollViewClickTransitionAnimationEnabled) BOOL contentScrollViewClickTransitionAnimationEnabled; //点击cell进行contentScrollView切换时是否需要动画。默认为YES - -@property (nonatomic, assign) CGFloat contentEdgeInsetLeft; //整体内容的左边距,默认JXCategoryViewAutomaticDimension(等于cellSpacing) - -@property (nonatomic, assign) CGFloat contentEdgeInsetRight; //整体内容的右边距,默认JXCategoryViewAutomaticDimension(等于cellSpacing) - -@property (nonatomic, assign) CGFloat cellWidth; //默认JXCategoryViewAutomaticDimension - -@property (nonatomic, assign) CGFloat cellWidthIncrement; //cell宽度补偿。默认:0 - -@property (nonatomic, assign) CGFloat cellSpacing; //cell之间的间距,默认20 - -@property (nonatomic, assign, getter=isAverageCellSpacingEnabled) BOOL averageCellSpacingEnabled; //当collectionView.contentSize.width小于JXCategoryBaseView的宽度,是否将cellSpacing均分。默认为YES。 - -//cell宽度是否缩放 -@property (nonatomic, assign, getter=isCellWidthZoomEnabled) BOOL cellWidthZoomEnabled; //默认为NO - -@property (nonatomic, assign, getter=isCellWidthZoomScrollGradientEnabled) BOOL cellWidthZoomScrollGradientEnabled; //手势滚动过程中,是否需要更新cell的宽度。默认为YES - -@property (nonatomic, assign) CGFloat cellWidthZoomScale; //默认1.2,cellWidthZoomEnabled为YES才生效 - -@property (nonatomic, assign, getter=isSelectedAnimationEnabled) BOOL selectedAnimationEnabled; //是否开启点击或代码选中动画。默认为NO。自定义的cell选中动画需要自己实现。(仅点击或调用selectItemAtIndex选中才有效,滚动选中无效) - -@property (nonatomic, assign) NSTimeInterval selectedAnimationDuration; //cell选中动画的时间。默认0.25 - -/** - 选中目标index的item - - @param index 目标index - */ -- (void)selectItemAtIndex:(NSInteger)index; - -/** - 初始化的时候无需调用。比如页面初始化之后,根据网络接口异步回调回来数据,重新配置categoryView,需要调用该方法进行刷新。 - */ -- (void)reloadData; - -/** - 重新配置categoryView但是不需要reload listContainer。特殊情况是该方法。 - */ -- (void)reloadDataWithoutListContainer; - -/** - 刷新指定的index的cell - 内部会触发`- (void)refreshCellModel:(JXCategoryBaseCellModel *)cellModel index:(NSInteger)index`方法进行cellModel刷新 - - @param index 指定cell的index - */ -- (void)reloadCellAtIndex:(NSInteger)index; - -@end - - - -@interface JXCategoryBaseView (UISubclassingBaseHooks) - -/** - 获取目标cell当前的frame,反应当前真实的frame受到cellWidthSelectedZoomScale的影响。 - */ -- (CGRect)getTargetCellFrame:(NSInteger)targetIndex; - -/** - 获取目标cell的选中时的frame,其他cell的状态都当做普通状态处理。 - */ -- (CGRect)getTargetSelectedCellFrame:(NSInteger)targetIndex selectedType:(JXCategoryCellSelectedType)selectedType; -- (void)initializeData NS_REQUIRES_SUPER; -- (void)initializeViews NS_REQUIRES_SUPER; - -/** - reloadData方法调用,重新生成数据源赋值到self.dataSource - */ -- (void)refreshDataSource; - -/** - reloadData方法调用,根据数据源重新刷新状态; - */ -- (void)refreshState NS_REQUIRES_SUPER; - -/** - 选中某个item时,刷新将要选中与取消选中的cellModel - - @param selectedCellModel 将要选中的cellModel - @param unselectedCellModel 取消选中的cellModel - */ -- (void)refreshSelectedCellModel:(JXCategoryBaseCellModel *)selectedCellModel unselectedCellModel:(JXCategoryBaseCellModel *)unselectedCellModel NS_REQUIRES_SUPER; - -/** - 关联的contentScrollView的contentOffset发生了改变 - - @param contentOffset 偏移量 - */ -- (void)contentOffsetOfContentScrollViewDidChanged:(CGPoint)contentOffset NS_REQUIRES_SUPER; - -/** - 选中某一个item的时候调用,该方法用于子类重载。 - 如果外部要选中某个index,请使用`- (void)selectItemAtIndex:(NSUInteger)index;` - - @param index 选中的index - @param selectedType JXCategoryCellSelectedType - @return 返回值为NO,表示触发内部某些判断(点击了同一个cell),子类无需后续操作。 - */ -- (BOOL)selectCellAtIndex:(NSInteger)index selectedType:(JXCategoryCellSelectedType)selectedType NS_REQUIRES_SUPER; - -/** - reloadData时,返回每个cell的宽度 - - @param index 目标index - @return cellWidth - */ -- (CGFloat)preferredCellWidthAtIndex:(NSInteger)index; - -/** - 返回自定义cell的class - - @return cell class - */ -- (Class)preferredCellClass; - -/** - refreshState时调用,重置cellModel的状态 - - @param cellModel 待重置的cellModel - @param index cellModel在数组中的index - */ -- (void)refreshCellModel:(JXCategoryBaseCellModel *)cellModel index:(NSInteger)index NS_REQUIRES_SUPER; - -@end diff --git a/Pods/JXCategoryView/Sources/Base/JXCategoryBaseView.m b/Pods/JXCategoryView/Sources/Base/JXCategoryBaseView.m deleted file mode 100644 index bd420a6..0000000 --- a/Pods/JXCategoryView/Sources/Base/JXCategoryBaseView.m +++ /dev/null @@ -1,687 +0,0 @@ -// -// JXCategoryBaseView.m -// UI系列测试 -// -// Created by jiaxin on 2018/3/15. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryBaseView.h" -#import "JXCategoryFactory.h" -#import "JXCategoryViewAnimator.h" -#import "RTLManager.h" - -struct DelegateFlags { - unsigned int didSelectedItemAtIndexFlag : 1; - unsigned int didClickSelectedItemAtIndexFlag : 1; - unsigned int didScrollSelectedItemAtIndexFlag : 1; - unsigned int canClickItemAtIndexFlag : 1; - unsigned int scrollingFromLeftIndexToRightIndexFlag : 1; -}; - -@interface JXCategoryBaseView () - -@property (nonatomic, strong) JXCategoryCollectionView *collectionView; -@property (nonatomic, assign) struct DelegateFlags delegateFlags; -@property (nonatomic, assign) NSInteger selectedIndex; -@property (nonatomic, assign) CGFloat innerCellSpacing; -@property (nonatomic, assign) CGPoint lastContentViewContentOffset; -@property (nonatomic, strong) JXCategoryViewAnimator *animator; -// 正在滚动中的目标index。用于处理正在滚动列表的时候,立即点击item,会导致界面显示异常。 -@property (nonatomic, assign) NSInteger scrollingTargetIndex; -@property (nonatomic, assign, getter=isNeedReloadByBecomeActive) BOOL needReloadByBecomeActive; -@property (nonatomic, assign, getter=isFirstLayoutSubviews) BOOL firstLayoutSubviews; -@property (nonatomic, assign, getter=isNeedConfigAutomaticallyAdjustsScrollViewInsets) BOOL needConfigAutomaticallyAdjustsScrollViewInsets; - -@end - -@implementation JXCategoryBaseView - -- (void)dealloc { - if (self.contentScrollView) { - [self.contentScrollView removeObserver:self forKeyPath:@"contentOffset"]; - } - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil]; - [self.animator stop]; -} - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self initializeData]; - [self initializeViews]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)coder { - self = [super initWithCoder:coder]; - if (self) { - [self initializeData]; - [self initializeViews]; - } - return self; -} - -- (void)willMoveToSuperview:(UIView *)newSuperview { - [super willMoveToSuperview:newSuperview]; - - [self configAutomaticallyAdjustsScrollViewInsets:newSuperview]; -} - -- (void)reloadData { - [self reloadDataWithoutListContainer]; - [self.listContainer reloadData]; -} - -- (void)reloadDataWithoutListContainer { - [self refreshDataSource]; - [self refreshState]; - [self.collectionView.collectionViewLayout invalidateLayout]; - [self.collectionView reloadData]; -} - -- (void)reloadCellAtIndex:(NSInteger)index { - if (index < 0 || index >= self.dataSource.count) { - return; - } - JXCategoryBaseCellModel *cellModel = self.dataSource[index]; - cellModel.selectedType = JXCategoryCellSelectedTypeUnknown; - [self refreshCellModel:cellModel index:index]; - JXCategoryBaseCell *cell = (JXCategoryBaseCell *)[self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]]; - [cell reloadData:cellModel]; -} - -- (void)selectItemAtIndex:(NSInteger)index { - [self selectCellAtIndex:index selectedType:JXCategoryCellSelectedTypeCode]; -} - -- (void)layoutSubviews { - [super layoutSubviews]; - - //部分使用者为了适配不同的手机屏幕尺寸,JXCategoryView的宽高比要求保持一样,所以它的高度就会因为不同宽度的屏幕而不一样。计算出来的高度,有时候会是位数很长的浮点数,如果把这个高度设置给UICollectionView就会触发内部的一个错误。所以,为了规避这个问题,在这里对高度统一向下取整。 - //如果向下取整导致了你的页面异常,请自己重新设置JXCategoryView的高度,保证为整数即可。 - CGRect targetFrame = CGRectMake(0, 0, self.bounds.size.width, floor(self.bounds.size.height)); - if (self.isFirstLayoutSubviews) { - if (self.bounds.size.width == 0 || self.bounds.size.height == 0) { - return; - } - if (self.isNeedConfigAutomaticallyAdjustsScrollViewInsets) { - [self configAutomaticallyAdjustsScrollViewInsets:self.superview]; - } - self.firstLayoutSubviews = NO; - self.collectionView.frame = targetFrame; - [self reloadDataWithoutListContainer]; - }else { - if (!CGRectEqualToRect(self.collectionView.frame, targetFrame)) { - self.collectionView.frame = targetFrame; - [self refreshState]; - [self.collectionView.collectionViewLayout invalidateLayout]; - [self.collectionView reloadData]; - } - } -} - -#pragma mark - Setter - -- (void)setDelegate:(id)delegate { - _delegate = delegate; - - _delegateFlags.didSelectedItemAtIndexFlag = [delegate respondsToSelector:@selector(categoryView:didSelectedItemAtIndex:)]; - _delegateFlags.didClickSelectedItemAtIndexFlag = [delegate respondsToSelector:@selector(categoryView:didClickSelectedItemAtIndex:)]; - _delegateFlags.didScrollSelectedItemAtIndexFlag = [delegate respondsToSelector:@selector(categoryView:didScrollSelectedItemAtIndex:)]; - _delegateFlags.canClickItemAtIndexFlag = [delegate respondsToSelector:@selector(categoryView:canClickItemAtIndex:)]; - _delegateFlags.scrollingFromLeftIndexToRightIndexFlag = [delegate respondsToSelector:@selector(categoryView:scrollingFromLeftIndex:toRightIndex:ratio:)]; -} - -- (void)setDefaultSelectedIndex:(NSInteger)defaultSelectedIndex { - _defaultSelectedIndex = defaultSelectedIndex; - - self.selectedIndex = defaultSelectedIndex; - [self.listContainer setDefaultSelectedIndex:defaultSelectedIndex]; -} - -- (void)setContentScrollView:(UIScrollView *)contentScrollView { - if (_contentScrollView != nil) { - [_contentScrollView removeObserver:self forKeyPath:@"contentOffset"]; - } - _contentScrollView = contentScrollView; - - self.contentScrollView.scrollsToTop = NO; - [self.contentScrollView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:nil]; -} - -- (void)setListContainer:(id)listContainer { - _listContainer = listContainer; - [listContainer setDefaultSelectedIndex:self.defaultSelectedIndex]; - self.contentScrollView = [listContainer contentScrollView]; -} - -#pragma mark - - -- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { - return 1; -} - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return self.dataSource.count; -} - -- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - return [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([self preferredCellClass]) forIndexPath:indexPath]; -} - -- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath { - JXCategoryBaseCellModel *cellModel = self.dataSource[indexPath.item]; - cellModel.selectedType = JXCategoryCellSelectedTypeUnknown; - [(JXCategoryBaseCell *)cell reloadData:cellModel]; -} - -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - BOOL isTransitionAnimating = NO; - for (JXCategoryBaseCellModel *cellModel in self.dataSource) { - if (cellModel.isTransitionAnimating) { - isTransitionAnimating = YES; - break; - } - } - if (!isTransitionAnimating) { - //当前没有正在过渡的item,才允许点击选中 - [self clickSelectItemAtIndex:indexPath.row]; - } -} - -#pragma mark - - -- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { - return UIEdgeInsetsMake(0, [self getContentEdgeInsetLeft], 0, [self getContentEdgeInsetRight]); -} - -- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { - return CGSizeMake(self.dataSource[indexPath.item].cellWidth, self.collectionView.bounds.size.height); -} - -- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section { - return self.innerCellSpacing; -} - -- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section { - return self.innerCellSpacing; -} - -#pragma mark - KVO - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { - if ([keyPath isEqualToString:@"contentOffset"]) { - CGPoint contentOffset = [change[NSKeyValueChangeNewKey] CGPointValue]; - if ((self.contentScrollView.isTracking || self.contentScrollView.isDecelerating)) { - //只处理用户滚动的情况 - [self contentOffsetOfContentScrollViewDidChanged:contentOffset]; - } - self.lastContentViewContentOffset = contentOffset; - } -} - -#pragma mark - Private - -- (void)configAutomaticallyAdjustsScrollViewInsets:(UIView *)view { - UIResponder *next = view; - while (next != nil) { - if ([next isKindOfClass:[UIViewController class]]) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - ((UIViewController *)next).automaticallyAdjustsScrollViewInsets = NO; -#pragma clang diagnostic pop - self.needConfigAutomaticallyAdjustsScrollViewInsets = NO; - break; - } - next = next.nextResponder; - } -} - -- (CGFloat)getContentEdgeInsetLeft { - if (self.contentEdgeInsetLeft == JXCategoryViewAutomaticDimension) { - return self.innerCellSpacing; - } - return self.contentEdgeInsetLeft; -} - -- (CGFloat)getContentEdgeInsetRight { - if (self.contentEdgeInsetRight == JXCategoryViewAutomaticDimension) { - return self.innerCellSpacing; - } - return self.contentEdgeInsetRight; -} - -- (CGFloat)getCellWidthAtIndex:(NSInteger)index { - return [self preferredCellWidthAtIndex:index] + self.cellWidthIncrement; -} - -- (void)clickSelectItemAtIndex:(NSInteger)index { - if (self.delegateFlags.canClickItemAtIndexFlag && ![self.delegate categoryView:self canClickItemAtIndex:index]) { - return; - } - - [self selectCellAtIndex:index selectedType:JXCategoryCellSelectedTypeClick]; -} - -- (void)scrollSelectItemAtIndex:(NSInteger)index { - [self selectCellAtIndex:index selectedType:JXCategoryCellSelectedTypeScroll]; -} - -- (void)applicationDidBecomeActive:(NSNotification *)notification { - if (self.isNeedReloadByBecomeActive) { - self.needReloadByBecomeActive = NO; - [self reloadData]; - } -} - -@end - -@implementation JXCategoryBaseView (UISubclassingBaseHooks) - -- (CGRect)getTargetCellFrame:(NSInteger)targetIndex { - CGFloat x = [self getContentEdgeInsetLeft]; - for (int i = 0; i < targetIndex; i ++) { - JXCategoryBaseCellModel *cellModel = self.dataSource[i]; - CGFloat cellWidth; - if (cellModel.isTransitionAnimating && cellModel.isCellWidthZoomEnabled) { - //正在进行动画的时候,cellWidthCurrentZoomScale是随着动画渐变的,而没有立即更新到目标值 - if (cellModel.isSelected) { - cellWidth = [self getCellWidthAtIndex:cellModel.index]*cellModel.cellWidthSelectedZoomScale; - }else { - cellWidth = [self getCellWidthAtIndex:cellModel.index]*cellModel.cellWidthNormalZoomScale; - } - }else { - cellWidth = cellModel.cellWidth; - } - x += cellWidth + self.innerCellSpacing; - } - CGFloat width; - JXCategoryBaseCellModel *selectedCellModel = self.dataSource[targetIndex]; - if (selectedCellModel.isTransitionAnimating && selectedCellModel.isCellWidthZoomEnabled) { - width = [self getCellWidthAtIndex:selectedCellModel.index]*selectedCellModel.cellWidthSelectedZoomScale; - }else { - width = selectedCellModel.cellWidth; - } - return CGRectMake(x, 0, width, self.bounds.size.height); -} - -- (CGRect)getTargetSelectedCellFrame:(NSInteger)targetIndex selectedType:(JXCategoryCellSelectedType)selectedType { - CGFloat x = [self getContentEdgeInsetLeft]; - for (int i = 0; i < targetIndex; i ++) { - JXCategoryBaseCellModel *cellModel = self.dataSource[i]; - x += [self getCellWidthAtIndex:cellModel.index] + self.innerCellSpacing; - } - CGFloat cellWidth = 0; - JXCategoryBaseCellModel *selectedCellModel = self.dataSource[targetIndex]; - if (selectedCellModel.cellWidthZoomEnabled) { - cellWidth = [self getCellWidthAtIndex:targetIndex]*selectedCellModel.cellWidthSelectedZoomScale; - }else { - cellWidth = [self getCellWidthAtIndex:targetIndex]; - } - return CGRectMake(x, 0, cellWidth, self.bounds.size.height); -} - -- (void)initializeData { - _firstLayoutSubviews = YES; - _dataSource = [NSMutableArray array]; - _selectedIndex = 0; - _cellWidth = JXCategoryViewAutomaticDimension; - _cellWidthIncrement = 0; - _cellSpacing = 20; - _averageCellSpacingEnabled = YES; - _cellWidthZoomEnabled = NO; - _cellWidthZoomScale = 1.2; - _cellWidthZoomScrollGradientEnabled = YES; - _contentEdgeInsetLeft = JXCategoryViewAutomaticDimension; - _contentEdgeInsetRight = JXCategoryViewAutomaticDimension; - _lastContentViewContentOffset = CGPointZero; - _selectedAnimationEnabled = NO; - _selectedAnimationDuration = 0.25; - _scrollingTargetIndex = -1; - _contentScrollViewClickTransitionAnimationEnabled = YES; - _needReloadByBecomeActive = NO; -} - -- (void)initializeViews { - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; - _collectionView = [[JXCategoryCollectionView alloc] initWithFrame:self.bounds collectionViewLayout:layout]; - self.collectionView.backgroundColor = [UIColor clearColor]; - self.collectionView.showsHorizontalScrollIndicator = NO; - self.collectionView.showsVerticalScrollIndicator = NO; - self.collectionView.scrollsToTop = NO; - self.collectionView.dataSource = self; - self.collectionView.delegate = self; - [self.collectionView registerClass:[self preferredCellClass] forCellWithReuseIdentifier:NSStringFromClass([self preferredCellClass])]; - if (@available(iOS 10.0, *)) { - self.collectionView.prefetchingEnabled = NO; - } - if (@available(iOS 11.0, *)) { - if ([self.collectionView respondsToSelector:@selector(setContentInsetAdjustmentBehavior:)]) { - self.collectionView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; - } - } - if ([RTLManager supportRTL]) { - self.collectionView.semanticContentAttribute = UISemanticContentAttributeForceLeftToRight; - [RTLManager horizontalFlipView:self.collectionView]; - } - [self addSubview:self.collectionView]; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil]; -} - -- (void)refreshDataSource {} - -- (void)refreshState { - if (self.selectedIndex < 0 || self.selectedIndex >= self.dataSource.count) { - self.defaultSelectedIndex = 0; - } - - self.innerCellSpacing = self.cellSpacing; - //总的内容宽度(左边距+cell总宽度+总cellSpacing+右边距) - __block CGFloat totalItemWidth = [self getContentEdgeInsetLeft]; - //总的cell宽度 - CGFloat totalCellWidth = 0; - for (int i = 0; i < self.dataSource.count; i++) { - JXCategoryBaseCellModel *cellModel = self.dataSource[i]; - cellModel.index = i; - cellModel.cellWidthZoomEnabled = self.cellWidthZoomEnabled; - cellModel.cellWidthNormalZoomScale = 1; - cellModel.cellWidthSelectedZoomScale = self.cellWidthZoomScale; - cellModel.selectedAnimationEnabled = self.selectedAnimationEnabled; - cellModel.selectedAnimationDuration = self.selectedAnimationDuration; - cellModel.cellSpacing = self.innerCellSpacing; - if (i == self.selectedIndex) { - cellModel.selected = YES; - cellModel.cellWidthCurrentZoomScale = cellModel.cellWidthSelectedZoomScale; - }else { - cellModel.selected = NO; - cellModel.cellWidthCurrentZoomScale = cellModel.cellWidthNormalZoomScale; - } - if (self.isCellWidthZoomEnabled) { - cellModel.cellWidth = [self getCellWidthAtIndex:i]*cellModel.cellWidthCurrentZoomScale; - }else { - cellModel.cellWidth = [self getCellWidthAtIndex:i]; - } - totalCellWidth += cellModel.cellWidth; - if (i == self.dataSource.count - 1) { - totalItemWidth += cellModel.cellWidth + [self getContentEdgeInsetRight]; - }else { - totalItemWidth += cellModel.cellWidth + self.innerCellSpacing; - } - [self refreshCellModel:cellModel index:i]; - } - - if (self.isAverageCellSpacingEnabled && totalItemWidth < self.bounds.size.width) { - //如果总的内容宽度都没有超过视图宽度,就将cellSpacing等分 - NSInteger cellSpacingItemCount = self.dataSource.count - 1; - CGFloat totalCellSpacingWidth = self.bounds.size.width - totalCellWidth; - //如果内容左边距是Automatic,就加1 - if (self.contentEdgeInsetLeft == JXCategoryViewAutomaticDimension) { - cellSpacingItemCount += 1; - }else { - totalCellSpacingWidth -= self.contentEdgeInsetLeft; - } - //如果内容右边距是Automatic,就加1 - if (self.contentEdgeInsetRight == JXCategoryViewAutomaticDimension) { - cellSpacingItemCount += 1; - }else { - totalCellSpacingWidth -= self.contentEdgeInsetRight; - } - - CGFloat cellSpacing = 0; - if (cellSpacingItemCount > 0) { - cellSpacing = totalCellSpacingWidth/cellSpacingItemCount; - } - self.innerCellSpacing = cellSpacing; - [self.dataSource enumerateObjectsUsingBlock:^(JXCategoryBaseCellModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - obj.cellSpacing = self.innerCellSpacing; - }]; - } - - //---------------------定位collectionView到当前选中的位置---------------------- - //因为初始化的时候,collectionView并没有初始化完,cell都没有被加载出来。只有自己手动计算当前选中的index的位置,然后更新到contentOffset - __block CGFloat frameXOfSelectedCell = [self getContentEdgeInsetLeft]; - __block CGFloat selectedCellWidth = 0; - totalItemWidth = [self getContentEdgeInsetLeft]; - [self.dataSource enumerateObjectsUsingBlock:^(JXCategoryBaseCellModel * cellModel, NSUInteger idx, BOOL * _Nonnull stop) { - if (idx < self.selectedIndex) { - frameXOfSelectedCell += cellModel.cellWidth + self.innerCellSpacing; - }else if (idx == self.selectedIndex) { - selectedCellWidth = cellModel.cellWidth; - } - if (idx == self.dataSource.count - 1) { - totalItemWidth += cellModel.cellWidth + [self getContentEdgeInsetRight]; - }else { - totalItemWidth += cellModel.cellWidth + self.innerCellSpacing; - } - }]; - - CGFloat minX = 0; - CGFloat maxX = totalItemWidth - self.bounds.size.width; - CGFloat targetX = frameXOfSelectedCell - self.bounds.size.width/2.0 + selectedCellWidth/2.0; - [self.collectionView setContentOffset:CGPointMake(MAX(MIN(maxX, targetX), minX), 0) animated:NO]; - //---------------------定位collectionView到当前选中的位置---------------------- - - if (CGRectEqualToRect(self.contentScrollView.frame, CGRectZero) && self.contentScrollView.superview != nil) { - //某些情况系统会出现JXCategoryView先布局,contentScrollView后布局。就会导致下面指定defaultSelectedIndex失效,所以发现contentScrollView的frame为zero时,强行触发其父视图链里面已经有frame的一个父视图的layoutSubviews方法。 - //比如JXSegmentedListContainerView会将contentScrollView包裹起来使用,该情况需要JXSegmentedListContainerView.superView触发布局更新 - UIView *parentView = self.contentScrollView.superview; - while (parentView != nil && CGRectEqualToRect(parentView.frame, CGRectZero)) { - parentView = parentView.superview; - } - [parentView setNeedsLayout]; - [parentView layoutIfNeeded]; - } - //将contentScrollView的contentOffset定位到当前选中index的位置 - [self.contentScrollView setContentOffset:CGPointMake(self.selectedIndex*self.contentScrollView.bounds.size.width, 0) animated:NO]; -} - -- (BOOL)selectCellAtIndex:(NSInteger)targetIndex selectedType:(JXCategoryCellSelectedType)selectedType { - if (targetIndex < 0 || targetIndex >= self.dataSource.count) { - return NO; - } - - self.needReloadByBecomeActive = NO; - if (self.selectedIndex == targetIndex) { - //目标index和当前选中的index相等,就不需要处理后续的选中更新逻辑,只需要回调代理方法即可。 - if (selectedType == JXCategoryCellSelectedTypeCode) { - [self.listContainer didClickSelectedItemAtIndex:targetIndex]; - }else if (selectedType == JXCategoryCellSelectedTypeClick) { - [self.listContainer didClickSelectedItemAtIndex:targetIndex]; - if (self.delegateFlags.didClickSelectedItemAtIndexFlag) { - [self.delegate categoryView:self didClickSelectedItemAtIndex:targetIndex]; - } - }else if (selectedType == JXCategoryCellSelectedTypeScroll) { - if (self.delegateFlags.didScrollSelectedItemAtIndexFlag) { - [self.delegate categoryView:self didScrollSelectedItemAtIndex:targetIndex]; - } - } - if (self.delegateFlags.didSelectedItemAtIndexFlag) { - [self.delegate categoryView:self didSelectedItemAtIndex:targetIndex]; - } - self.scrollingTargetIndex = -1; - return NO; - } - - //通知子类刷新当前选中的和将要选中的cellModel - JXCategoryBaseCellModel *lastCellModel = self.dataSource[self.selectedIndex]; - lastCellModel.selectedType = selectedType; - JXCategoryBaseCellModel *selectedCellModel = self.dataSource[targetIndex]; - selectedCellModel.selectedType = selectedType; - [self refreshSelectedCellModel:selectedCellModel unselectedCellModel:lastCellModel]; - - //刷新当前选中的和将要选中的cell - JXCategoryBaseCell *lastCell = (JXCategoryBaseCell *)[self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:self.selectedIndex inSection:0]]; - [lastCell reloadData:lastCellModel]; - JXCategoryBaseCell *selectedCell = (JXCategoryBaseCell *)[self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:targetIndex inSection:0]]; - [selectedCell reloadData:selectedCellModel]; - - if (self.scrollingTargetIndex != -1 && self.scrollingTargetIndex != targetIndex) { - JXCategoryBaseCellModel *scrollingTargetCellModel = self.dataSource[self.scrollingTargetIndex]; - scrollingTargetCellModel.selected = NO; - scrollingTargetCellModel.selectedType = selectedType; - [self refreshSelectedCellModel:selectedCellModel unselectedCellModel:scrollingTargetCellModel]; - JXCategoryBaseCell *scrollingTargetCell = (JXCategoryBaseCell *)[self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:self.scrollingTargetIndex inSection:0]]; - [scrollingTargetCell reloadData:scrollingTargetCellModel]; - } - - if (self.isCellWidthZoomEnabled) { - [self.collectionView.collectionViewLayout invalidateLayout]; - //延时为了解决cellwidth变化,点击最后几个cell,scrollToItem会出现位置偏移bu。需要等cellWidth动画渐变结束后再滚动到index的cell位置。 - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(self.selectedAnimationDuration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:targetIndex inSection:0] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES]; - }); - } else { - [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:targetIndex inSection:0] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES]; - } - - if (selectedType == JXCategoryCellSelectedTypeClick || - selectedType == JXCategoryCellSelectedTypeCode) { - [self.contentScrollView setContentOffset:CGPointMake(targetIndex*self.contentScrollView.bounds.size.width, 0) animated:self.isContentScrollViewClickTransitionAnimationEnabled]; - } - - self.selectedIndex = targetIndex; - if (selectedType == JXCategoryCellSelectedTypeCode) { - [self.listContainer didClickSelectedItemAtIndex:targetIndex]; - } else if (selectedType == JXCategoryCellSelectedTypeClick) { - [self.listContainer didClickSelectedItemAtIndex:targetIndex]; - if (self.delegateFlags.didClickSelectedItemAtIndexFlag) { - [self.delegate categoryView:self didClickSelectedItemAtIndex:targetIndex]; - } - } else if(selectedType == JXCategoryCellSelectedTypeScroll) { - if (self.delegateFlags.didScrollSelectedItemAtIndexFlag) { - [self.delegate categoryView:self didScrollSelectedItemAtIndex:targetIndex]; - } - } - if (self.delegateFlags.didSelectedItemAtIndexFlag) { - [self.delegate categoryView:self didSelectedItemAtIndex:targetIndex]; - } - self.scrollingTargetIndex = -1; - - return YES; -} - - -- (void)refreshSelectedCellModel:(JXCategoryBaseCellModel *)selectedCellModel unselectedCellModel:(JXCategoryBaseCellModel *)unselectedCellModel { - selectedCellModel.selected = YES; - unselectedCellModel.selected = NO; - - if (self.isCellWidthZoomEnabled) { - if (selectedCellModel.selectedType == JXCategoryCellSelectedTypeCode || - selectedCellModel.selectedType == JXCategoryCellSelectedTypeClick) { - self.animator = [[JXCategoryViewAnimator alloc] init]; - self.animator.duration = self.selectedAnimationDuration; - __weak typeof(self) weakSelf = self; - self.animator.progressCallback = ^(CGFloat percent) { - selectedCellModel.transitionAnimating = YES; - unselectedCellModel.transitionAnimating = YES; - selectedCellModel.cellWidthCurrentZoomScale = [JXCategoryFactory interpolationFrom:selectedCellModel.cellWidthNormalZoomScale to:selectedCellModel.cellWidthSelectedZoomScale percent:percent]; - selectedCellModel.cellWidth = [weakSelf getCellWidthAtIndex:selectedCellModel.index] * selectedCellModel.cellWidthCurrentZoomScale; - unselectedCellModel.cellWidthCurrentZoomScale = [JXCategoryFactory interpolationFrom:unselectedCellModel.cellWidthSelectedZoomScale to:unselectedCellModel.cellWidthNormalZoomScale percent:percent]; - unselectedCellModel.cellWidth = [weakSelf getCellWidthAtIndex:unselectedCellModel.index] * unselectedCellModel.cellWidthCurrentZoomScale; - [weakSelf.collectionView.collectionViewLayout invalidateLayout]; - }; - self.animator.completeCallback = ^{ - selectedCellModel.transitionAnimating = NO; - unselectedCellModel.transitionAnimating = NO; - }; - [self.animator start]; - } else { - selectedCellModel.cellWidthCurrentZoomScale = selectedCellModel.cellWidthSelectedZoomScale; - selectedCellModel.cellWidth = [self getCellWidthAtIndex:selectedCellModel.index] * selectedCellModel.cellWidthCurrentZoomScale; - unselectedCellModel.cellWidthCurrentZoomScale = unselectedCellModel.cellWidthNormalZoomScale; - unselectedCellModel.cellWidth = [self getCellWidthAtIndex:unselectedCellModel.index] * unselectedCellModel.cellWidthCurrentZoomScale; - } - } -} - -- (void)contentOffsetOfContentScrollViewDidChanged:(CGPoint)contentOffset { - if (self.dataSource.count == 0) { - return; - } - CGFloat ratio = contentOffset.x/self.contentScrollView.bounds.size.width; - if (ratio > self.dataSource.count - 1 || ratio < 0) { - //超过了边界,不需要处理 - return; - } - if (contentOffset.x == 0 && self.selectedIndex == 0 && self.lastContentViewContentOffset.x == 0) { - //滚动到了最左边,且已经选中了第一个,且之前的contentOffset.x为0 - return; - } - CGFloat maxContentOffsetX = self.contentScrollView.contentSize.width - self.contentScrollView.bounds.size.width; - if (contentOffset.x == maxContentOffsetX && self.selectedIndex == self.dataSource.count - 1 && self.lastContentViewContentOffset.x == maxContentOffsetX) { - //滚动到了最右边,且已经选中了最后一个,且之前的contentOffset.x为maxContentOffsetX - return; - } - ratio = MAX(0, MIN(self.dataSource.count - 1, ratio)); - NSInteger baseIndex = floorf(ratio); - CGFloat remainderRatio = ratio - baseIndex; - - if (remainderRatio == 0) { - //快速滑动翻页,用户一直在拖拽contentScrollView,需要更新选中状态 - //滑动一小段距离,然后放开回到原位,contentOffset同样的值会回调多次。例如在index为1的情况,滑动放开回到原位,contentOffset会多次回调CGPoint(width, 0) - if (!(self.lastContentViewContentOffset.x == contentOffset.x && self.selectedIndex == baseIndex)) { - [self scrollSelectItemAtIndex:baseIndex]; - } - } else { - self.needReloadByBecomeActive = YES; - if (self.animator.isExecuting) { - [self.animator invalid]; - //需要重置之前animator.progessCallback为处理完的状态 - for (JXCategoryBaseCellModel *model in self.dataSource) { - if (model.isSelected) { - model.cellWidthCurrentZoomScale = model.cellWidthSelectedZoomScale; - model.cellWidth = [self getCellWidthAtIndex:model.index] * model.cellWidthCurrentZoomScale; - }else { - model.cellWidthCurrentZoomScale = model.cellWidthNormalZoomScale; - model.cellWidth = [self getCellWidthAtIndex:model.index] * model.cellWidthCurrentZoomScale; - } - } - } - //快速滑动翻页,当remainderRatio没有变成0,但是已经翻页了,需要通过下面的判断,触发选中 - if (fabs(ratio - self.selectedIndex) > 1) { - NSInteger targetIndex = baseIndex; - if (ratio < self.selectedIndex) { - targetIndex = baseIndex + 1; - } - [self scrollSelectItemAtIndex:targetIndex]; - } - - if (self.selectedIndex == baseIndex) { - self.scrollingTargetIndex = baseIndex + 1; - } else { - self.scrollingTargetIndex = baseIndex; - } - - if (self.isCellWidthZoomEnabled && self.isCellWidthZoomScrollGradientEnabled) { - JXCategoryBaseCellModel *leftCellModel = (JXCategoryBaseCellModel *)self.dataSource[baseIndex]; - JXCategoryBaseCellModel *rightCellModel = (JXCategoryBaseCellModel *)self.dataSource[baseIndex + 1]; - leftCellModel.cellWidthCurrentZoomScale = [JXCategoryFactory interpolationFrom:leftCellModel.cellWidthSelectedZoomScale to:leftCellModel.cellWidthNormalZoomScale percent:remainderRatio]; - leftCellModel.cellWidth = [self getCellWidthAtIndex:leftCellModel.index] * leftCellModel.cellWidthCurrentZoomScale; - rightCellModel.cellWidthCurrentZoomScale = [JXCategoryFactory interpolationFrom:rightCellModel.cellWidthNormalZoomScale to:rightCellModel.cellWidthSelectedZoomScale percent:remainderRatio]; - rightCellModel.cellWidth = [self getCellWidthAtIndex:rightCellModel.index] * rightCellModel.cellWidthCurrentZoomScale; - [self.collectionView.collectionViewLayout invalidateLayout]; - } - - if (self.delegateFlags.scrollingFromLeftIndexToRightIndexFlag) { - [self.delegate categoryView:self scrollingFromLeftIndex:baseIndex toRightIndex:baseIndex + 1 ratio:remainderRatio]; - } - } -} - -- (CGFloat)preferredCellWidthAtIndex:(NSInteger)index { - return 0; -} - -- (Class)preferredCellClass { - return JXCategoryBaseCell.class; -} - -- (void)refreshCellModel:(JXCategoryBaseCellModel *)cellModel index:(NSInteger)index { - -} - -@end diff --git a/Pods/JXCategoryView/Sources/Common/JXCategoryCollectionView.h b/Pods/JXCategoryView/Sources/Common/JXCategoryCollectionView.h deleted file mode 100644 index dcf1ccb..0000000 --- a/Pods/JXCategoryView/Sources/Common/JXCategoryCollectionView.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// JXCategoryCollectionView.h -// UI系列测试 -// -// Created by jiaxin on 2018/3/21. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import -#import "JXCategoryIndicatorProtocol.h" -@class JXCategoryCollectionView; - -@protocol JXCategoryCollectionViewGestureDelegate -@optional -- (BOOL)categoryCollectionView:(JXCategoryCollectionView *)collectionView gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer; -- (BOOL)categoryCollectionView:(JXCategoryCollectionView *)collectionView gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer; -@end - -@interface JXCategoryCollectionView : UICollectionView - -@property (nonatomic, strong) NSArray *> *indicators; -@property (nonatomic, weak) id gestureDelegate; - -@end diff --git a/Pods/JXCategoryView/Sources/Common/JXCategoryCollectionView.m b/Pods/JXCategoryView/Sources/Common/JXCategoryCollectionView.m deleted file mode 100644 index e8d4829..0000000 --- a/Pods/JXCategoryView/Sources/Common/JXCategoryCollectionView.m +++ /dev/null @@ -1,52 +0,0 @@ -// -// JXCategoryCollectionView.m -// UI系列测试 -// -// Created by jiaxin on 2018/3/21. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryCollectionView.h" - -@interface JXCategoryCollectionView () -@end - -@implementation JXCategoryCollectionView - -- (void)setIndicators:(NSArray *> *)indicators { - for (UIView *indicator in _indicators) { - //先移除之前的indicator - [indicator removeFromSuperview]; - } - - _indicators = indicators; - - for (UIView *indicator in indicators) { - [self addSubview:indicator]; - } -} - -- (void)layoutSubviews -{ - [super layoutSubviews]; - - for (UIView *view in self.indicators) { - [self sendSubviewToBack:view]; - } -} - -- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { - if (self.gestureDelegate && [self.gestureDelegate respondsToSelector:@selector(categoryCollectionView:gestureRecognizerShouldBegin:)]) { - return [self.gestureDelegate categoryCollectionView:self gestureRecognizerShouldBegin:gestureRecognizer]; - } - return YES; -} - -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { - if (self.gestureDelegate && [self.gestureDelegate respondsToSelector:@selector(categoryCollectionView:gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:)]) { - return [self.gestureDelegate categoryCollectionView:self gestureRecognizer:gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:otherGestureRecognizer]; - } - return NO; -} - -@end diff --git a/Pods/JXCategoryView/Sources/Common/JXCategoryFactory.h b/Pods/JXCategoryView/Sources/Common/JXCategoryFactory.h deleted file mode 100644 index ef28f7e..0000000 --- a/Pods/JXCategoryView/Sources/Common/JXCategoryFactory.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// JXCategoryFactory.h -// JXCategoryView -// -// Created by jiaxin on 2018/8/17. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import -#import - -@interface JXCategoryFactory : NSObject - -+ (CGFloat)interpolationFrom:(CGFloat)from to:(CGFloat)to percent:(CGFloat)percent; - -+ (UIColor *)interpolationColorFrom:(UIColor *)fromColor to:(UIColor *)toColor percent:(CGFloat)percent; - -@end diff --git a/Pods/JXCategoryView/Sources/Common/JXCategoryFactory.m b/Pods/JXCategoryView/Sources/Common/JXCategoryFactory.m deleted file mode 100644 index c71451e..0000000 --- a/Pods/JXCategoryView/Sources/Common/JXCategoryFactory.m +++ /dev/null @@ -1,29 +0,0 @@ -// -// JXCategoryFactory.m -// JXCategoryView -// -// Created by jiaxin on 2018/8/17. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryFactory.h" -#import "UIColor+JXAdd.h" - -@implementation JXCategoryFactory - -+ (CGFloat)interpolationFrom:(CGFloat)from to:(CGFloat)to percent:(CGFloat)percent -{ - percent = MAX(0, MIN(1, percent)); - return from + (to - from)*percent; -} - -+ (UIColor *)interpolationColorFrom:(UIColor *)fromColor to:(UIColor *)toColor percent:(CGFloat)percent -{ - CGFloat red = [self interpolationFrom:fromColor.jx_red to:toColor.jx_red percent:percent]; - CGFloat green = [self interpolationFrom:fromColor.jx_green to:toColor.jx_green percent:percent]; - CGFloat blue = [self interpolationFrom:fromColor.jx_blue to:toColor.jx_blue percent:percent]; - CGFloat alpha = [self interpolationFrom:fromColor.jx_alpha to:toColor.jx_alpha percent:percent]; - return [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; -} - -@end diff --git a/Pods/JXCategoryView/Sources/Common/JXCategoryIndicatorParamsModel.h b/Pods/JXCategoryView/Sources/Common/JXCategoryIndicatorParamsModel.h deleted file mode 100644 index 00da754..0000000 --- a/Pods/JXCategoryView/Sources/Common/JXCategoryIndicatorParamsModel.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// JXCategoryIndicatorParamsModel.h -// JXCategoryView -// -// Created by jiaxin on 2018/12/13. -// Copyright © 2018 jiaxin. All rights reserved. -// - -#import -#import -#import "JXCategoryViewDefines.h" - -/** - 指示器不同情况处理时传递的数据模型,不同情况会对不同的属性赋值,根据不同情况的 api 说明确认。 - - FAQ: 为什么会通过 model 传递数据? - 因为指示器处理逻辑以后会扩展不同的使用场景,会新增参数,如果不通过 model 传递,就会在 api 新增参数,一旦修改 api 改的地方就特别多了,而且会影响到之前自定义实现的开发者。 - */ -@interface JXCategoryIndicatorParamsModel : NSObject - -@property (nonatomic, assign) NSInteger selectedIndex; // 当前选中的 index -@property (nonatomic, assign) CGRect selectedCellFrame; // 当前选中的 cellFrame -@property (nonatomic, assign) NSInteger leftIndex; // 正在过渡中的两个 cell,相对位置在左边的 cell 的 index -@property (nonatomic, assign) CGRect leftCellFrame; // 正在过渡中的两个 cell,相对位置在左边的 cell 的 frame -@property (nonatomic, assign) NSInteger rightIndex; // 正在过渡中的两个 cell,相对位置在右边的 cell 的 index -@property (nonatomic, assign) CGRect rightCellFrame; // 正在过渡中的两个 cell,相对位置在右边的 cell 的 frame -@property (nonatomic, assign) CGFloat percent; // 正在过渡中的两个 cell,从左到右的百分比 -@property (nonatomic, assign) NSInteger lastSelectedIndex; // 之前选中的 index -@property (nonatomic, assign) JXCategoryCellSelectedType selectedType; //cell 被选中类型 - -@end diff --git a/Pods/JXCategoryView/Sources/Common/JXCategoryIndicatorParamsModel.m b/Pods/JXCategoryView/Sources/Common/JXCategoryIndicatorParamsModel.m deleted file mode 100644 index 8a0eff0..0000000 --- a/Pods/JXCategoryView/Sources/Common/JXCategoryIndicatorParamsModel.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// JXCategoryIndicatorParamsModel.m -// JXCategoryView -// -// Created by jiaxin on 2018/12/13. -// Copyright © 2018 jiaxin. All rights reserved. -// - -#import "JXCategoryIndicatorParamsModel.h" - -@implementation JXCategoryIndicatorParamsModel - -@end diff --git a/Pods/JXCategoryView/Sources/Common/JXCategoryIndicatorProtocol.h b/Pods/JXCategoryView/Sources/Common/JXCategoryIndicatorProtocol.h deleted file mode 100644 index b4f9ff0..0000000 --- a/Pods/JXCategoryView/Sources/Common/JXCategoryIndicatorProtocol.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// JXCategoryIndicatorProtocol.h -// JXCategoryView -// -// Created by jiaxin on 2018/8/17. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import -#import -#import "JXCategoryViewDefines.h" -#import "JXCategoryIndicatorParamsModel.h" - -@protocol JXCategoryIndicatorProtocol - -/** - categoryView 重置状态时调用 - - param selectedIndex 当前选中的 index - param selectedCellFrame 当前选中的 cellFrame - @param model 数据模型 - */ -- (void)jx_refreshState:(JXCategoryIndicatorParamsModel *)model; - -/** - contentScrollView在进行手势滑动时,处理指示器跟随手势变化UI逻辑; - - param selectedIndex 当前选中的index - param leftIndex 正在过渡中的两个cell,相对位置在左边的cell的index - param leftCellFrame 正在过渡中的两个cell,相对位置在左边的cell的frame - param rightIndex 正在过渡中的两个cell,相对位置在右边的cell的index - param rightCellFrame 正在过渡中的两个cell,相对位置在右边的cell的frame - param percent 过渡百分比 - @param model 数据模型 - */ -- (void)jx_contentScrollViewDidScroll:(JXCategoryIndicatorParamsModel *)model; - -/** - 选中了某一个cell - - param lastSelectedIndex 之前选中的index - param selectedIndex 选中的index - param selectedCellFrame 选中的cellFrame - param selectedType cell被选中类型 - @param model 数据模型 - */ -- (void)jx_selectedCell:(JXCategoryIndicatorParamsModel *)model; - -@end diff --git a/Pods/JXCategoryView/Sources/Common/JXCategoryListContainerRTLCell.h b/Pods/JXCategoryView/Sources/Common/JXCategoryListContainerRTLCell.h deleted file mode 100644 index 75243b4..0000000 --- a/Pods/JXCategoryView/Sources/Common/JXCategoryListContainerRTLCell.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// JXCategoryListContainerRTLCell.h -// JXCategoryView -// -// Created by jiaxin on 2020/7/3. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface JXCategoryListContainerRTLCell : UICollectionViewCell - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/JXCategoryView/Sources/Common/JXCategoryListContainerRTLCell.m b/Pods/JXCategoryView/Sources/Common/JXCategoryListContainerRTLCell.m deleted file mode 100644 index 403efa9..0000000 --- a/Pods/JXCategoryView/Sources/Common/JXCategoryListContainerRTLCell.m +++ /dev/null @@ -1,23 +0,0 @@ -// -// JXCategoryListContainerRTLCell.m -// JXCategoryView -// -// Created by jiaxin on 2020/7/3. -// - -#import "JXCategoryListContainerRTLCell.h" -#import "RTLManager.h" - -@implementation JXCategoryListContainerRTLCell - -- (instancetype)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) { - [RTLManager horizontalFlipViewIfNeeded:self]; - [RTLManager horizontalFlipViewIfNeeded:self.contentView]; - } - return self; -} - -@end diff --git a/Pods/JXCategoryView/Sources/Common/JXCategoryListContainerView.h b/Pods/JXCategoryView/Sources/Common/JXCategoryListContainerView.h deleted file mode 100644 index 215b3a9..0000000 --- a/Pods/JXCategoryView/Sources/Common/JXCategoryListContainerView.h +++ /dev/null @@ -1,122 +0,0 @@ -// -// JXCategoryListScrollView.h -// JXCategoryView -// -// Created by jiaxin on 2018/9/12. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import -#import "JXCategoryViewDefines.h" -#import "JXCategoryBaseView.h" -@class JXCategoryListContainerView; - -/** - 列表容器视图的类型 - - - ScrollView: UIScrollView。优势:没有其他副作用。劣势:视图内存占用相对大一点。 - - CollectionView: 使用UICollectionView。优势:因为列表被添加到cell上,视图的内存占用更少,适合内存要求特别高的场景。劣势:因为cell重用机制的问题,导致列表下拉刷新视图,会因为被removeFromSuperview而被隐藏。需要参考`LoadDataListCollectionListViewController`类做特殊处理。 - */ -typedef NS_ENUM(NSUInteger, JXCategoryListContainerType) { - JXCategoryListContainerType_ScrollView, - JXCategoryListContainerType_CollectionView, -}; - -@protocol JXCategoryListContentViewDelegate - -/** - 如果列表是VC,就返回VC.view - 如果列表是View,就返回View自己 - - @return 返回列表视图 - */ -- (UIView *)listView; - -@optional - -/** - 可选实现,列表将要显示的时候调用 - */ -- (void)listWillAppear; - -/** - 可选实现,列表显示的时候调用 - */ -- (void)listDidAppear; - -/** - 可选实现,列表将要消失的时候调用 - */ -- (void)listWillDisappear; - -/** - 可选实现,列表消失的时候调用 - */ -- (void)listDidDisappear; - -@end - -@protocol JXCategoryListContainerViewDelegate -/** - 返回list的数量 - - @param listContainerView 列表的容器视图 - @return list的数量 - */ -- (NSInteger)numberOfListsInlistContainerView:(JXCategoryListContainerView *)listContainerView; - -/** - 根据index返回一个对应列表实例,需要是遵从`JXCategoryListContentViewDelegate`协议的对象。 - 你可以代理方法调用的时候初始化对应列表,达到懒加载的效果。这也是默认推荐的初始化列表方法。你也可以提前创建好列表,等该代理方法回调的时候再返回也可以,达到预加载的效果。 - 如果列表是用自定义UIView封装的,就让自定义UIView遵从`JXCategoryListContentViewDelegate`协议,该方法返回自定义UIView即可。 - 如果列表是用自定义UIViewController封装的,就让自定义UIViewController遵从`JXCategoryListContentViewDelegate`协议,该方法返回自定义UIViewController即可。 - - @param listContainerView 列表的容器视图 - @param index 目标下标 - @return 遵从JXCategoryListContentViewDelegate协议的list实例 - */ -- (id)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index; - -@optional -/** - 返回自定义UIScrollView或UICollectionView的Class - 某些特殊情况需要自己处理UIScrollView内部逻辑。比如项目用了FDFullscreenPopGesture,需要处理手势相关代理。 - - @param listContainerView JXCategoryListContainerView - @return 自定义UIScrollView实例 - */ -- (Class)scrollViewClassInlistContainerView:(JXCategoryListContainerView *)listContainerView; - -/** - 控制能否初始化对应index的列表。有些业务需求,需要在某些情况才允许初始化某些列表,通过通过该代理实现控制。 - */ -- (BOOL)listContainerView:(JXCategoryListContainerView *)listContainerView canInitListAtIndex:(NSInteger)index; - -- (void)listContainerViewDidScroll:(UIScrollView *)scrollView; -- (void)listContainerViewWillBeginDragging:(UIScrollView *)scrollView; -- (void)listContainerViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate; -- (void)listContainerViewWillBeginDecelerating:(UIScrollView *)scrollView; -- (void)listContainerViewDidEndDecelerating:(UIScrollView *)scrollView; - -@end - - -@interface JXCategoryListContainerView : UIView - -@property (nonatomic, assign, readonly) JXCategoryListContainerType containerType; -@property (nonatomic, strong, readonly) UIScrollView *scrollView; -@property (nonatomic, strong, readonly) NSDictionary > *validListDict; //已经加载过的列表字典。key是index,value是对应的列表 -@property (nonatomic, strong) UIColor *listCellBackgroundColor; //默认:[UIColor whiteColor] -/** - 滚动切换的时候,滚动距离超过一页的多少百分比,就触发列表的初始化。默认0.01(即列表显示了一点就触发加载)。范围0~1,开区间不包括0和1 - */ -@property (nonatomic, assign) CGFloat initListPercent; -@property (nonatomic, assign) BOOL bounces; //默认NO - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE; -- (instancetype)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE; -- (instancetype)initWithType:(JXCategoryListContainerType)type delegate:(id)delegate NS_DESIGNATED_INITIALIZER; - -@end - diff --git a/Pods/JXCategoryView/Sources/Common/JXCategoryListContainerView.m b/Pods/JXCategoryView/Sources/Common/JXCategoryListContainerView.m deleted file mode 100644 index cae05cf..0000000 --- a/Pods/JXCategoryView/Sources/Common/JXCategoryListContainerView.m +++ /dev/null @@ -1,536 +0,0 @@ -// -// JXCategoryListContainerView.m -// JXCategoryView -// -// Created by jiaxin on 2018/9/12. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryListContainerView.h" -#import -#import "RTLManager.h" - -@interface JXCategoryListContainerViewController : UIViewController -@property (copy) void(^viewWillAppearBlock)(void); -@property (copy) void(^viewDidAppearBlock)(void); -@property (copy) void(^viewWillDisappearBlock)(void); -@property (copy) void(^viewDidDisappearBlock)(void); -@end - -@implementation JXCategoryListContainerViewController -- (void)dealloc -{ - self.viewWillAppearBlock = nil; - self.viewDidAppearBlock = nil; - self.viewWillDisappearBlock = nil; - self.viewDidDisappearBlock = nil; -} -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - self.viewWillAppearBlock(); -} -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - self.viewDidAppearBlock(); -} -- (void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - self.viewWillDisappearBlock(); -} -- (void)viewDidDisappear:(BOOL)animated { - [super viewDidDisappear:animated]; - self.viewDidDisappearBlock(); -} -- (BOOL)shouldAutomaticallyForwardAppearanceMethods { return NO; } -@end - -@interface JXCategoryListContainerView () -@property (nonatomic, weak) id delegate; -@property (nonatomic, strong) UIScrollView *scrollView; -@property (nonatomic, assign) NSInteger currentIndex; -@property (nonatomic, strong) NSMutableDictionary > *validListDict; -@property (nonatomic, assign) NSInteger willAppearIndex; -@property (nonatomic, assign) NSInteger willDisappearIndex; -@property (nonatomic, strong) UICollectionView *collectionView; -@property (nonatomic, strong) JXCategoryListContainerViewController *containerVC; -@end - -@implementation JXCategoryListContainerView - -- (instancetype)initWithType:(JXCategoryListContainerType)type delegate:(id)delegate{ - self = [super initWithFrame:CGRectZero]; - if (self) { - _containerType = type; - _delegate = delegate; - _validListDict = [NSMutableDictionary dictionary]; - _willAppearIndex = -1; - _willDisappearIndex = -1; - _initListPercent = 0.01; - [self initializeViews]; - } - return self; -} - -- (void)initializeViews { - _listCellBackgroundColor = [UIColor whiteColor]; - _containerVC = [[JXCategoryListContainerViewController alloc] init]; - self.containerVC.view.backgroundColor = [UIColor clearColor]; - [self addSubview:self.containerVC.view]; - __weak typeof(self) weakSelf = self; - self.containerVC.viewWillAppearBlock = ^{ - [weakSelf listWillAppear:weakSelf.currentIndex]; - }; - self.containerVC.viewDidAppearBlock = ^{ - [weakSelf listDidAppear:weakSelf.currentIndex]; - }; - self.containerVC.viewWillDisappearBlock = ^{ - [weakSelf listWillDisappear:weakSelf.currentIndex]; - }; - self.containerVC.viewDidDisappearBlock = ^{ - [weakSelf listDidDisappear:weakSelf.currentIndex]; - }; - if (self.containerType == JXCategoryListContainerType_ScrollView) { - if (self.delegate && - [self.delegate respondsToSelector:@selector(scrollViewClassInlistContainerView:)] && - [[self.delegate scrollViewClassInlistContainerView:self] isKindOfClass:object_getClass([UIScrollView class])]) { - _scrollView = (UIScrollView *)[[[self.delegate scrollViewClassInlistContainerView:self] alloc] init]; - }else { - _scrollView = [[UIScrollView alloc] init]; - } - self.scrollView.delegate = self; - self.scrollView.pagingEnabled = YES; - self.scrollView.showsHorizontalScrollIndicator = NO; - self.scrollView.showsVerticalScrollIndicator = NO; - self.scrollView.scrollsToTop = NO; - self.scrollView.bounces = NO; - if (@available(iOS 11.0, *)) { - if ([self.scrollView respondsToSelector:@selector(setContentInsetAdjustmentBehavior:)]) { - self.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; - } - } - [RTLManager horizontalFlipViewIfNeeded:self.scrollView]; - [self.containerVC.view addSubview:self.scrollView]; - }else { - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; - layout.minimumLineSpacing = 0; - layout.minimumInteritemSpacing = 0; - if (self.delegate && - [self.delegate respondsToSelector:@selector(scrollViewClassInlistContainerView:)] && - [[self.delegate scrollViewClassInlistContainerView:self] isKindOfClass:object_getClass([UICollectionView class])]) { - _collectionView = (UICollectionView *)[[[self.delegate scrollViewClassInlistContainerView:self] alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; - }else { - _collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; - } - self.collectionView.pagingEnabled = YES; - self.collectionView.showsHorizontalScrollIndicator = NO; - self.collectionView.showsVerticalScrollIndicator = NO; - self.collectionView.scrollsToTop = NO; - self.collectionView.bounces = NO; - self.collectionView.dataSource = self; - self.collectionView.delegate = self; - [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cell"]; - if (@available(iOS 10.0, *)) { - self.collectionView.prefetchingEnabled = NO; - } - if (@available(iOS 11.0, *)) { - if ([self.collectionView respondsToSelector:@selector(setContentInsetAdjustmentBehavior:)]) { - self.collectionView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; - } - } - if ([RTLManager supportRTL]) { - self.collectionView.semanticContentAttribute = UISemanticContentAttributeForceLeftToRight; - [RTLManager horizontalFlipView:self.collectionView]; - } - [self.containerVC.view addSubview:self.collectionView]; - //让外部统一访问scrollView - _scrollView = _collectionView; - } -} - -- (void)willMoveToSuperview:(UIView *)newSuperview { - [super willMoveToSuperview:newSuperview]; - - UIResponder *next = newSuperview; - while (next != nil) { - if ([next isKindOfClass:[UIViewController class]]) { - [((UIViewController *)next) addChildViewController:self.containerVC]; - break; - } - next = next.nextResponder; - } -} - -- (void)layoutSubviews { - [super layoutSubviews]; - - self.containerVC.view.frame = self.bounds; - if (self.containerType == JXCategoryListContainerType_ScrollView) { - if (CGRectEqualToRect(self.scrollView.frame, CGRectZero) || !CGSizeEqualToSize(self.scrollView.bounds.size, self.bounds.size)) { - self.scrollView.frame = self.bounds; - self.scrollView.contentSize = CGSizeMake(self.scrollView.bounds.size.width*[self.delegate numberOfListsInlistContainerView:self], self.scrollView.bounds.size.height); - [_validListDict enumerateKeysAndObjectsUsingBlock:^(NSNumber * _Nonnull index, id _Nonnull list, BOOL * _Nonnull stop) { - [list listView].frame = CGRectMake(index.intValue*self.scrollView.bounds.size.width, 0, self.scrollView.bounds.size.width, self.scrollView.bounds.size.height); - }]; - self.scrollView.contentOffset = CGPointMake(self.currentIndex*self.scrollView.bounds.size.width, 0); - }else { - self.scrollView.frame = self.bounds; - self.scrollView.contentSize = CGSizeMake(self.scrollView.bounds.size.width*[self.delegate numberOfListsInlistContainerView:self], self.scrollView.bounds.size.height); - } - }else { - if (CGRectEqualToRect(self.collectionView.frame, CGRectZero) || !CGSizeEqualToSize(self.collectionView.bounds.size, self.bounds.size)) { - [self.collectionView.collectionViewLayout invalidateLayout]; - self.collectionView.frame = self.bounds; - [self.collectionView reloadData]; - [self.collectionView setContentOffset:CGPointMake(self.collectionView.bounds.size.width*self.currentIndex, 0) animated:NO]; - }else { - self.collectionView.frame = self.bounds; - } - } -} - - -- (void)setinitListPercent:(CGFloat)initListPercent { - _initListPercent = initListPercent; - if (initListPercent <= 0 || initListPercent >= 1) { - NSAssert(NO, @"initListPercent值范围为开区间(0,1),即不包括0和1"); - } -} - -- (void)setBounces:(BOOL)bounces { - _bounces = bounces; - self.scrollView.bounces = bounces; -} - -#pragma mark - UICollectionViewDelegate, UICollectionViewDataSource - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return [self.delegate numberOfListsInlistContainerView:self]; -} - -- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath]; - cell.contentView.backgroundColor = self.listCellBackgroundColor; - - UIView* listView = nil; - id list = _validListDict[@(indexPath.item)]; - if (list != nil) { - //fixme:如果list是UIViewController,如果这里的frame修改是`[list listView].frame = cell.bounds;`。那么就必须给list vc添加如下代码: - //- (void)loadView { - // self.view = [[UIView alloc] init]; - //} - //所以,总感觉是把UIViewController当做普通view使用,导致了系统内部的bug。所以,缓兵之计就是用下面的方法,暂时解决问题。 - listView = [list listView]; - if ([list isKindOfClass:[UIViewController class]]) { - listView.frame = cell.contentView.bounds; - } else { - listView.frame = cell.bounds; - } - } - - BOOL isAdded = NO; - for (UIView *subview in cell.contentView.subviews) { - if( listView != subview ) { - [subview removeFromSuperview]; - } else { - isAdded = YES; - } - } - - if( !isAdded && listView ) { - [cell.contentView addSubview:listView]; - } - - return cell; -} - -- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { - return self.bounds.size; -} - -#pragma mark - UIScrollViewDelegate - -- (void)scrollViewDidScroll:(UIScrollView *)scrollView { - if (self.delegate && [self.delegate respondsToSelector:@selector(listContainerViewDidScroll:)]) { - [self.delegate listContainerViewDidScroll:scrollView]; - } - - if (!scrollView.isDragging && !scrollView.isTracking && !scrollView.isDecelerating) { - return; - } - CGFloat ratio = scrollView.contentOffset.x/scrollView.bounds.size.width; - NSInteger maxCount = round(scrollView.contentSize.width/scrollView.bounds.size.width); - NSInteger leftIndex = floorf(ratio); - leftIndex = MAX(0, MIN(maxCount - 1, leftIndex)); - NSInteger rightIndex = leftIndex + 1; - if (ratio < 0 || rightIndex >= maxCount) { - [self listDidAppearOrDisappear:scrollView]; - return; - } - CGFloat remainderRatio = ratio - leftIndex; - if (rightIndex == self.currentIndex) { - //当前选中的在右边,用户正在从右边往左边滑动 - if (self.validListDict[@(leftIndex)] == nil && remainderRatio < (1 - self.initListPercent)) { - [self initListIfNeededAtIndex:leftIndex]; - }else if (self.validListDict[@(leftIndex)] != nil) { - if (self.willAppearIndex == -1) { - self.willAppearIndex = leftIndex; - [self listWillAppear:self.willAppearIndex]; - } - } - if (self.willDisappearIndex == -1) { - self.willDisappearIndex = rightIndex; - [self listWillDisappear:self.willDisappearIndex]; - } - }else { - //当前选中的在左边,用户正在从左边往右边滑动 - if (self.validListDict[@(rightIndex)] == nil && remainderRatio > self.initListPercent) { - [self initListIfNeededAtIndex:rightIndex]; - }else if (self.validListDict[@(rightIndex)] != nil) { - if (self.willAppearIndex == -1) { - self.willAppearIndex = rightIndex; - [self listWillAppear:self.willAppearIndex]; - } - } - if (self.willDisappearIndex == -1) { - self.willDisappearIndex = leftIndex; - [self listWillDisappear:self.willDisappearIndex]; - } - } - [self listDidAppearOrDisappear:scrollView]; -} - -- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { - //滑动到一半又取消滑动处理 - if (self.willDisappearIndex != -1) { - [self listWillAppear:self.willDisappearIndex]; - [self listWillDisappear:self.willAppearIndex]; - [self listDidAppear:self.willDisappearIndex]; - [self listDidDisappear:self.willAppearIndex]; - self.willDisappearIndex = -1; - self.willAppearIndex = -1; - } - - if (self.delegate && [self.delegate respondsToSelector:@selector(listContainerViewDidEndDecelerating:)]) { - [self.delegate listContainerViewDidEndDecelerating:scrollView]; - } -} - -- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView -{ - if (self.delegate && [self.delegate respondsToSelector:@selector(listContainerViewWillBeginDragging:)]) { - [self.delegate listContainerViewWillBeginDragging:scrollView]; - } -} - -- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate -{ - if (self.delegate && [self.delegate respondsToSelector:@selector(listContainerViewDidEndDragging:willDecelerate:)]) { - [self.delegate listContainerViewDidEndDragging:scrollView willDecelerate:decelerate]; - } -} - -- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView -{ - if (self.delegate && [self.delegate respondsToSelector:@selector(listContainerViewWillBeginDecelerating:)]) { - [self.delegate listContainerViewWillBeginDecelerating:scrollView]; - } -} - -#pragma mark - JXCategoryViewListContainer - -- (UIScrollView *)contentScrollView { - return self.scrollView; -} - -- (void)setDefaultSelectedIndex:(NSInteger)index { - self.currentIndex = index; -} - -- (void)didClickSelectedItemAtIndex:(NSInteger)index { - if (![self checkIndexValid:index]) { - return; - } - self.willAppearIndex = -1; - self.willDisappearIndex = -1; - if (self.currentIndex != index) { - [self listWillDisappear:self.currentIndex]; - [self listDidDisappear:self.currentIndex]; - [self listWillAppear:index]; - [self listDidAppear:index]; - } -} - -- (void)reloadData { - for (id list in _validListDict.allValues) { - [[list listView] removeFromSuperview]; - if ([list isKindOfClass:[UIViewController class]]) { - [(UIViewController *)list removeFromParentViewController]; - } - } - [_validListDict removeAllObjects]; - - if (self.containerType == JXCategoryListContainerType_ScrollView) { - self.scrollView.contentSize = CGSizeMake(self.scrollView.bounds.size.width*[self.delegate numberOfListsInlistContainerView:self], self.scrollView.bounds.size.height); - }else { - [self.collectionView reloadData]; - } - [self listWillAppear:self.currentIndex]; - [self listDidAppear:self.currentIndex]; -} - -#pragma mark - Private - -- (void)initListIfNeededAtIndex:(NSInteger)index { - if (self.delegate && [self.delegate respondsToSelector:@selector(listContainerView:canInitListAtIndex:)]) { - BOOL canInitList = [self.delegate listContainerView:self canInitListAtIndex:index]; - if (!canInitList) { - return; - } - } - id list = _validListDict[@(index)]; - if (list != nil) { - //列表已经创建好了 - return; - } - list = [self.delegate listContainerView:self initListForIndex:index]; - if ([list isKindOfClass:[UIViewController class]]) { - [self.containerVC addChildViewController:(UIViewController *)list]; - } - _validListDict[@(index)] = list; - - if (self.containerType == JXCategoryListContainerType_ScrollView) { - [list listView].frame = CGRectMake(index*self.scrollView.bounds.size.width, 0, self.scrollView.bounds.size.width, self.scrollView.bounds.size.height); - [self.scrollView addSubview:[list listView]]; - [RTLManager horizontalFlipViewIfNeeded:[list listView]]; - }else { - UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]]; - for (UIView *subview in cell.contentView.subviews) { - [subview removeFromSuperview]; - } - [list listView].frame = cell.contentView.bounds; - [cell.contentView addSubview:[list listView]]; - } -} - -- (void)listWillAppear:(NSInteger)index { - if (![self checkIndexValid:index]) { - return; - } - id list = _validListDict[@(index)]; - if (list == nil) { - //当前列表未被创建(页面初始化或通过点击触发的listWillAppear) - BOOL canInitList = YES; - if (self.delegate && [self.delegate respondsToSelector:@selector(listContainerView:canInitListAtIndex:)]) { - canInitList = [self.delegate listContainerView:self canInitListAtIndex:index]; - } - if (!canInitList) { - return; - } - list = [self.delegate listContainerView:self initListForIndex:index]; - if ([list isKindOfClass:[UIViewController class]]) { - [self.containerVC addChildViewController:(UIViewController *)list]; - } - _validListDict[@(index)] = list; - if (self.containerType == JXCategoryListContainerType_ScrollView) { - if ([list listView].superview == nil) { - [list listView].frame = CGRectMake(index*self.scrollView.bounds.size.width, 0, self.scrollView.bounds.size.width, self.scrollView.bounds.size.height); - [self.scrollView addSubview:[list listView]]; - [RTLManager horizontalFlipViewIfNeeded:[list listView]]; - } - }else { - UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]]; - for (UIView *subview in cell.contentView.subviews) { - [subview removeFromSuperview]; - } - [list listView].frame = cell.contentView.bounds; - [cell.contentView addSubview:[list listView]]; - } - } - - if (list && [list respondsToSelector:@selector(listWillAppear)]) { - [list listWillAppear]; - } - if ([list isKindOfClass:[UIViewController class]]) { - UIViewController *listVC = (UIViewController *)list; - [listVC beginAppearanceTransition:YES animated:NO]; - } -} - -- (void)listDidAppear:(NSInteger)index { - if (![self checkIndexValid:index]) { - return; - } - self.currentIndex = index; - id list = _validListDict[@(index)]; - if (list && [list respondsToSelector:@selector(listDidAppear)]) { - [list listDidAppear]; - } - if ([list isKindOfClass:[UIViewController class]]) { - UIViewController *listVC = (UIViewController *)list; - [listVC endAppearanceTransition]; - } -} - -- (void)listWillDisappear:(NSInteger)index { - if (![self checkIndexValid:index]) { - return; - } - id list = _validListDict[@(index)]; - if (list && [list respondsToSelector:@selector(listWillDisappear)]) { - [list listWillDisappear]; - } - if ([list isKindOfClass:[UIViewController class]]) { - UIViewController *listVC = (UIViewController *)list; - [listVC beginAppearanceTransition:NO animated:NO]; - } -} - -- (void)listDidDisappear:(NSInteger)index { - if (![self checkIndexValid:index]) { - return; - } - id list = _validListDict[@(index)]; - if (list && [list respondsToSelector:@selector(listDidDisappear)]) { - [list listDidDisappear]; - } - if ([list isKindOfClass:[UIViewController class]]) { - UIViewController *listVC = (UIViewController *)list; - [listVC endAppearanceTransition]; - } -} - -- (BOOL)checkIndexValid:(NSInteger)index { - NSUInteger count = [self.delegate numberOfListsInlistContainerView:self]; - if (count <= 0 || index >= count) { - return NO; - } - return YES; -} - -- (void)listDidAppearOrDisappear:(UIScrollView *)scrollView { - CGFloat currentIndexPercent = scrollView.contentOffset.x/scrollView.bounds.size.width; - if (self.willAppearIndex != -1 || self.willDisappearIndex != -1) { - NSInteger disappearIndex = self.willDisappearIndex; - NSInteger appearIndex = self.willAppearIndex; - if (self.willAppearIndex > self.willDisappearIndex) { - //将要出现的列表在右边 - if (currentIndexPercent >= self.willAppearIndex) { - self.willDisappearIndex = -1; - self.willAppearIndex = -1; - [self listDidDisappear:disappearIndex]; - [self listDidAppear:appearIndex]; - } - }else { - //将要出现的列表在左边 - if (currentIndexPercent <= self.willAppearIndex) { - self.willDisappearIndex = -1; - self.willAppearIndex = -1; - [self listDidDisappear:disappearIndex]; - [self listDidAppear:appearIndex]; - } - } - } -} - -@end diff --git a/Pods/JXCategoryView/Sources/Common/JXCategoryViewAnimator.h b/Pods/JXCategoryView/Sources/Common/JXCategoryViewAnimator.h deleted file mode 100644 index 2c7acae..0000000 --- a/Pods/JXCategoryView/Sources/Common/JXCategoryViewAnimator.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// JXCategoryViewAnimator.h -// JXCategoryView -// -// Created by jiaxin on 2019/1/24. -// Copyright © 2019 jiaxin. All rights reserved. -// - -#import -#import - -@interface JXCategoryViewAnimator : NSObject - -@property (nonatomic, assign) NSTimeInterval duration; -@property (nonatomic, copy) void(^progressCallback)(CGFloat percent); -@property (nonatomic, copy) void(^completeCallback)(void); -@property (readonly, getter=isExecuting) BOOL executing; - -- (void)start; -- (void)stop; -- (void)invalid; - -@end - diff --git a/Pods/JXCategoryView/Sources/Common/JXCategoryViewAnimator.m b/Pods/JXCategoryView/Sources/Common/JXCategoryViewAnimator.m deleted file mode 100644 index fc26144..0000000 --- a/Pods/JXCategoryView/Sources/Common/JXCategoryViewAnimator.m +++ /dev/null @@ -1,75 +0,0 @@ -// -// JXCategoryViewAnimator.m -// JXCategoryView -// -// Created by jiaxin on 2019/1/24. -// Copyright © 2019 jiaxin. All rights reserved. -// - -#import "JXCategoryViewAnimator.h" - -@interface JXCategoryViewAnimator () -@property (nonatomic, strong) CADisplayLink *displayLink; -@property (nonatomic, assign) CFTimeInterval firstTimestamp; -@property (readwrite, getter=isExecuting) BOOL executing; -@end - -@implementation JXCategoryViewAnimator - -#pragma mark - Initialize - -- (void)dealloc { - self.progressCallback = nil; - self.completeCallback = nil; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _executing = NO; - _duration = 0.25; - _displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(processDisplayLink:)]; - } - return self; -} - -#pragma mark - Public - -- (void)start { - [self.displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes]; - self.executing = YES; -} - -- (void)stop { - !self.progressCallback ?: self.progressCallback(1); - [self.displayLink invalidate]; - !self.completeCallback ?: self.completeCallback(); - self.executing = NO; -} - -- (void)invalid { - [self.displayLink invalidate]; - !self.completeCallback ?: self.completeCallback(); - self.executing = NO; -} - -#pragma mark - Actions - -- (void)processDisplayLink:(CADisplayLink *)sender { - if (self.firstTimestamp == 0) { - self.firstTimestamp = sender.timestamp; - return; - } - CGFloat percent = (sender.timestamp - self.firstTimestamp)/self.duration; - if (percent >= 1) { - !self.progressCallback ?: self.progressCallback(percent); - [self.displayLink invalidate]; - !self.completeCallback ?: self.completeCallback(); - self.executing = NO; - }else { - !self.progressCallback ?: self.progressCallback(percent); - self.executing = YES; - } -} - -@end diff --git a/Pods/JXCategoryView/Sources/Common/JXCategoryViewDefines.h b/Pods/JXCategoryView/Sources/Common/JXCategoryViewDefines.h deleted file mode 100644 index ec3a60c..0000000 --- a/Pods/JXCategoryView/Sources/Common/JXCategoryViewDefines.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// JXCategoryViewDefines.h -// JXCategoryView -// -// Created by jiaxin on 2018/8/17. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import -#import - -static const CGFloat JXCategoryViewAutomaticDimension = -1; - -typedef void(^JXCategoryCellSelectedAnimationBlock)(CGFloat percent); - -// 指示器的位置 -typedef NS_ENUM(NSUInteger, JXCategoryComponentPosition) { - JXCategoryComponentPosition_Bottom, - JXCategoryComponentPosition_Top -}; - -// cell 被选中的类型 -typedef NS_ENUM(NSUInteger, JXCategoryCellSelectedType) { - JXCategoryCellSelectedTypeUnknown, // 未知,不是选中(cellForRow方法里面、两个cell过渡时) - JXCategoryCellSelectedTypeClick, // 点击选中 - JXCategoryCellSelectedTypeCode, // 调用方法 selectItemAtIndex: 选中 - JXCategoryCellSelectedTypeScroll // 通过滚动到某个 cell 选中 -}; - -// cell 标题锚点位置 -typedef NS_ENUM(NSUInteger, JXCategoryTitleLabelAnchorPointStyle) { - JXCategoryTitleLabelAnchorPointStyleCenter, - JXCategoryTitleLabelAnchorPointStyleTop, - JXCategoryTitleLabelAnchorPointStyleBottom -}; - -// 指示器滚动样式 -typedef NS_ENUM(NSUInteger, JXCategoryIndicatorScrollStyle) { - JXCategoryIndicatorScrollStyleSimple, // 简单滚动,即从当前位置过渡到目标位置 - JXCategoryIndicatorScrollStyleSameAsUserScroll // 和用户左右滚动列表时的效果一样 -}; - -#define JXCategoryViewDeprecated(instead) NS_DEPRECATED(2_0, 2_0, 2_0, 2_0, instead) diff --git a/Pods/JXCategoryView/Sources/Common/UIColor+JXAdd.h b/Pods/JXCategoryView/Sources/Common/UIColor+JXAdd.h deleted file mode 100644 index 06e1c14..0000000 --- a/Pods/JXCategoryView/Sources/Common/UIColor+JXAdd.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// UIColor+JXAdd.h -// UI系列测试 -// -// Created by jiaxin on 2018/3/21. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import - -@interface UIColor (JXAdd) - -@property (nonatomic, assign, readonly) CGFloat jx_red; -@property (nonatomic, assign, readonly) CGFloat jx_green; -@property (nonatomic, assign, readonly) CGFloat jx_blue; -@property (nonatomic, assign, readonly) CGFloat jx_alpha; - -@end diff --git a/Pods/JXCategoryView/Sources/Common/UIColor+JXAdd.m b/Pods/JXCategoryView/Sources/Common/UIColor+JXAdd.m deleted file mode 100644 index f76c11b..0000000 --- a/Pods/JXCategoryView/Sources/Common/UIColor+JXAdd.m +++ /dev/null @@ -1,35 +0,0 @@ -// -// UIColor+JXAdd.m -// UI系列测试 -// -// Created by jiaxin on 2018/3/21. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "UIColor+JXAdd.h" - -@implementation UIColor (JXAdd) - -- (CGFloat)jx_red { - CGFloat r = 0, g, b, a; - [self getRed:&r green:&g blue:&b alpha:&a]; - return r; -} - -- (CGFloat)jx_green { - CGFloat r, g = 0, b, a; - [self getRed:&r green:&g blue:&b alpha:&a]; - return g; -} - -- (CGFloat)jx_blue { - CGFloat r, g, b = 0, a; - [self getRed:&r green:&g blue:&b alpha:&a]; - return b; -} - -- (CGFloat)jx_alpha { - return CGColorGetAlpha(self.CGColor); -} - -@end diff --git a/Pods/JXCategoryView/Sources/Dot/JXCategoryDotCell.h b/Pods/JXCategoryView/Sources/Dot/JXCategoryDotCell.h deleted file mode 100644 index 14d3019..0000000 --- a/Pods/JXCategoryView/Sources/Dot/JXCategoryDotCell.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// JXCategoryDotCell.h -// JXCategoryView -// -// Created by jiaxin on 2018/8/20. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryTitleCell.h" - -@interface JXCategoryDotCell : JXCategoryTitleCell - -@end diff --git a/Pods/JXCategoryView/Sources/Dot/JXCategoryDotCell.m b/Pods/JXCategoryView/Sources/Dot/JXCategoryDotCell.m deleted file mode 100644 index 2022acd..0000000 --- a/Pods/JXCategoryView/Sources/Dot/JXCategoryDotCell.m +++ /dev/null @@ -1,64 +0,0 @@ -// -// JXCategoryDotCell.m -// JXCategoryView -// -// Created by jiaxin on 2018/8/20. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryDotCell.h" -#import "JXCategoryDotCellModel.h" - -@interface JXCategoryDotCell () -@property (nonatomic, strong) UIView *dot; -@end - -@implementation JXCategoryDotCell - -- (void)initializeViews { - [super initializeViews]; - - _dot = [[UIView alloc] init]; - [self.contentView addSubview:self.dot]; - self.dot.translatesAutoresizingMaskIntoConstraints = NO; -} - -- (void)reloadData:(JXCategoryBaseCellModel *)cellModel { - [super reloadData:cellModel]; - - JXCategoryDotCellModel *myCellModel = (JXCategoryDotCellModel *)cellModel; - self.dot.hidden = !myCellModel.dotHidden; - self.dot.backgroundColor = myCellModel.dotColor; - self.dot.layer.cornerRadius = myCellModel.dotCornerRadius; - [NSLayoutConstraint deactivateConstraints:self.dot.constraints]; - [self.dot.widthAnchor constraintEqualToConstant:myCellModel.dotSize.width].active = YES; - [self.dot.heightAnchor constraintEqualToConstant:myCellModel.dotSize.height].active = YES; - switch (myCellModel.relativePosition) { - case JXCategoryDotRelativePosition_TopLeft: - { - [self.dot.centerXAnchor constraintEqualToAnchor:self.titleLabel.leadingAnchor constant:myCellModel.dotOffset.x].active = YES; - [self.dot.centerYAnchor constraintEqualToAnchor:self.titleLabel.topAnchor constant:myCellModel.dotOffset.y].active = YES; - } - break; - case JXCategoryDotRelativePosition_TopRight: - { - [self.dot.centerXAnchor constraintEqualToAnchor:self.titleLabel.trailingAnchor constant:myCellModel.dotOffset.x].active = YES; - [self.dot.centerYAnchor constraintEqualToAnchor:self.titleLabel.topAnchor constant:myCellModel.dotOffset.y].active = YES; - } - break; - case JXCategoryDotRelativePosition_BottomLeft: - { - [self.dot.centerXAnchor constraintEqualToAnchor:self.titleLabel.leadingAnchor constant:myCellModel.dotOffset.x].active = YES; - [self.dot.centerYAnchor constraintEqualToAnchor:self.titleLabel.bottomAnchor constant:myCellModel.dotOffset.y].active = YES; - } - break; - case JXCategoryDotRelativePosition_BottomRight: - { - [self.dot.centerXAnchor constraintEqualToAnchor:self.titleLabel.trailingAnchor constant:myCellModel.dotOffset.x].active = YES; - [self.dot.centerYAnchor constraintEqualToAnchor:self.titleLabel.bottomAnchor constant:myCellModel.dotOffset.y].active = YES; - } - break; - } -} - -@end diff --git a/Pods/JXCategoryView/Sources/Dot/JXCategoryDotCellModel.h b/Pods/JXCategoryView/Sources/Dot/JXCategoryDotCellModel.h deleted file mode 100644 index b0531a9..0000000 --- a/Pods/JXCategoryView/Sources/Dot/JXCategoryDotCellModel.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// JXCategoryDotCellModel.h -// JXCategoryView -// -// Created by jiaxin on 2018/8/20. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryTitleCellModel.h" - -typedef NS_ENUM(NSUInteger, JXCategoryDotRelativePosition) { - JXCategoryDotRelativePosition_TopLeft = 0, - JXCategoryDotRelativePosition_TopRight, - JXCategoryDotRelativePosition_BottomLeft, - JXCategoryDotRelativePosition_BottomRight, -}; - -@interface JXCategoryDotCellModel : JXCategoryTitleCellModel - -@property (nonatomic, assign) BOOL dotHidden; -@property (nonatomic, assign) JXCategoryDotRelativePosition relativePosition; -@property (nonatomic, assign) CGSize dotSize; -@property (nonatomic, assign) CGFloat dotCornerRadius; -@property (nonatomic, strong) UIColor *dotColor; -@property (nonatomic, assign) CGPoint dotOffset; - -@end diff --git a/Pods/JXCategoryView/Sources/Dot/JXCategoryDotCellModel.m b/Pods/JXCategoryView/Sources/Dot/JXCategoryDotCellModel.m deleted file mode 100644 index 054cbfc..0000000 --- a/Pods/JXCategoryView/Sources/Dot/JXCategoryDotCellModel.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// JXCategoryDotCellModel.m -// JXCategoryView -// -// Created by jiaxin on 2018/8/20. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryDotCellModel.h" - -@implementation JXCategoryDotCellModel - -@end diff --git a/Pods/JXCategoryView/Sources/Dot/JXCategoryDotView.h b/Pods/JXCategoryView/Sources/Dot/JXCategoryDotView.h deleted file mode 100644 index 1cc9ad9..0000000 --- a/Pods/JXCategoryView/Sources/Dot/JXCategoryDotView.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// JXCategoryDotView.h -// JXCategoryView -// -// Created by jiaxin on 2018/8/20. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryTitleView.h" -#import "JXCategoryDotCell.h" -#import "JXCategoryDotCellModel.h" - -@interface JXCategoryDotView : JXCategoryTitleView - -//相对于titleLabel的位置,默认:JXCategoryDotRelativePosition_TopRight -@property (nonatomic, assign) JXCategoryDotRelativePosition relativePosition; -//@[@(布尔值)]数组,控制红点是否显示 -@property (nonatomic, strong) NSArray *dotStates; -//红点的尺寸。默认:CGSizeMake(10, 10) -@property (nonatomic, assign) CGSize dotSize; -//红点的圆角值。默认:JXCategoryViewAutomaticDimension(self.dotSize.height/2) -@property (nonatomic, assign) CGFloat dotCornerRadius; -//红点的颜色。默认:[UIColor redColor] -@property (nonatomic, strong) UIColor *dotColor; -/** - 红点 x,y方向的偏移 (+值:水平方向向右,竖直方向向下) - */ -@property (nonatomic, assign) CGPoint dotOffset; - -@end diff --git a/Pods/JXCategoryView/Sources/Dot/JXCategoryDotView.m b/Pods/JXCategoryView/Sources/Dot/JXCategoryDotView.m deleted file mode 100644 index 847aadb..0000000 --- a/Pods/JXCategoryView/Sources/Dot/JXCategoryDotView.m +++ /dev/null @@ -1,52 +0,0 @@ -// -// JXCategoryDotView.m -// JXCategoryView -// -// Created by jiaxin on 2018/8/20. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryDotView.h" - -@implementation JXCategoryDotView - -- (void)initializeData { - [super initializeData]; - - _relativePosition = JXCategoryDotRelativePosition_TopRight; - _dotSize = CGSizeMake(10, 10); - _dotCornerRadius = JXCategoryViewAutomaticDimension; - _dotColor = [UIColor redColor]; - _dotOffset = CGPointZero; -} - -- (Class)preferredCellClass { - return [JXCategoryDotCell class]; -} - -- (void)refreshDataSource { - NSMutableArray *tempArray = [NSMutableArray arrayWithCapacity:self.titles.count]; - for (int i = 0; i < self.titles.count; i++) { - JXCategoryDotCellModel *cellModel = [[JXCategoryDotCellModel alloc] init]; - [tempArray addObject:cellModel]; - } - self.dataSource = [NSArray arrayWithArray:tempArray]; -} - -- (void)refreshCellModel:(JXCategoryBaseCellModel *)cellModel index:(NSInteger)index { - [super refreshCellModel:cellModel index:index]; - - JXCategoryDotCellModel *myCellModel = (JXCategoryDotCellModel *)cellModel; - myCellModel.dotHidden = [self.dotStates[index] boolValue]; - myCellModel.relativePosition = self.relativePosition; - myCellModel.dotSize = self.dotSize; - myCellModel.dotColor = self.dotColor; - myCellModel.dotOffset = self.dotOffset; - if (self.dotCornerRadius == JXCategoryViewAutomaticDimension) { - myCellModel.dotCornerRadius = self.dotSize.height/2; - }else { - myCellModel.dotCornerRadius = self.dotCornerRadius; - } -} - -@end diff --git a/Pods/JXCategoryView/Sources/Image/JXCategoryImageCell.h b/Pods/JXCategoryView/Sources/Image/JXCategoryImageCell.h deleted file mode 100644 index f0dc162..0000000 --- a/Pods/JXCategoryView/Sources/Image/JXCategoryImageCell.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// JXCategoryImageCell.h -// JXCategoryView -// -// Created by jiaxin on 2018/8/20. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryIndicatorCell.h" - -@interface JXCategoryImageCell : JXCategoryIndicatorCell - -@property (nonatomic, strong) UIImageView *imageView; - -@end diff --git a/Pods/JXCategoryView/Sources/Image/JXCategoryImageCell.m b/Pods/JXCategoryView/Sources/Image/JXCategoryImageCell.m deleted file mode 100644 index 7384759..0000000 --- a/Pods/JXCategoryView/Sources/Image/JXCategoryImageCell.m +++ /dev/null @@ -1,97 +0,0 @@ -// -// JXCategoryImageCell.m -// JXCategoryView -// -// Created by jiaxin on 2018/8/20. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryImageCell.h" -#import "JXCategoryImageCellModel.h" - -@interface JXCategoryImageCell() -@property (nonatomic, strong) id currentImageInfo; -@property (nonatomic, strong) NSString *currentImageName; -@property (nonatomic, strong) NSURL *currentImageURL; -@end - -@implementation JXCategoryImageCell - -- (void)prepareForReuse { - [super prepareForReuse]; - - self.currentImageInfo = nil; - self.currentImageName = nil; - self.currentImageURL = nil; -} - -- (void)initializeViews { - [super initializeViews]; - - _imageView = [[UIImageView alloc] init]; - _imageView.contentMode = UIViewContentModeScaleAspectFit; - [self.contentView addSubview:_imageView]; -} - -- (void)layoutSubviews { - [super layoutSubviews]; - - JXCategoryImageCellModel *myCellModel = (JXCategoryImageCellModel *)self.cellModel; - self.imageView.bounds = CGRectMake(0, 0, myCellModel.imageSize.width, myCellModel.imageSize.height); - self.imageView.center = self.contentView.center; - if (myCellModel.imageCornerRadius && (myCellModel.imageCornerRadius != 0)) { - self.imageView.layer.cornerRadius = myCellModel.imageCornerRadius; - self.imageView.layer.masksToBounds = YES; - } -} - -- (void)reloadData:(JXCategoryBaseCellModel *)cellModel { - [super reloadData:cellModel]; - - JXCategoryImageCellModel *myCellModel = (JXCategoryImageCellModel *)cellModel; - //因为`- (void)reloadData:(JXCategoryBaseCellModel *)cellModel`方法会回调多次,尤其是左右滚动的时候会调用无数次,如果每次都触发图片加载,会非常消耗性能。所以只会在图片发生了变化的时候,才进行图片加载。 - if (myCellModel.loadImageBlock != nil) { - id currentImageInfo = myCellModel.imageInfo; - if (myCellModel.isSelected) { - currentImageInfo = myCellModel.selectedImageInfo; - } - if (currentImageInfo && ![currentImageInfo isEqual:self.currentImageInfo]) { - self.currentImageInfo = currentImageInfo; - if (myCellModel.loadImageBlock) { - myCellModel.loadImageBlock(self.imageView, currentImageInfo); - } - } - } else { - NSString *currentImageName; - NSURL *currentImageURL; - if (myCellModel.imageName) { - currentImageName = myCellModel.imageName; - } else if (myCellModel.imageURL) { - currentImageURL = myCellModel.imageURL; - } - if (myCellModel.isSelected) { - if (myCellModel.selectedImageName) { - currentImageName = myCellModel.selectedImageName; - } else if (myCellModel.selectedImageURL) { - currentImageURL = myCellModel.selectedImageURL; - } - } - if (currentImageName && ![currentImageName isEqualToString:self.currentImageName]) { - self.currentImageName = currentImageName; - self.imageView.image = [UIImage imageNamed:currentImageName]; - } else if (currentImageURL && ![currentImageURL.absoluteString isEqualToString:self.currentImageURL.absoluteString]) { - self.currentImageURL = currentImageURL; - if (myCellModel.loadImageCallback) { - myCellModel.loadImageCallback(self.imageView, currentImageURL); - } - } - } - - if (myCellModel.isImageZoomEnabled) { - self.imageView.transform = CGAffineTransformMakeScale(myCellModel.imageZoomScale, myCellModel.imageZoomScale); - }else { - self.imageView.transform = CGAffineTransformIdentity; - } -} - -@end diff --git a/Pods/JXCategoryView/Sources/Image/JXCategoryImageCellModel.h b/Pods/JXCategoryView/Sources/Image/JXCategoryImageCellModel.h deleted file mode 100644 index 0d79fdf..0000000 --- a/Pods/JXCategoryView/Sources/Image/JXCategoryImageCellModel.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// JXCategoryImageCellModel.h -// JXCategoryView -// -// Created by jiaxin on 2018/8/20. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryIndicatorCellModel.h" - -@interface JXCategoryImageCellModel : JXCategoryIndicatorCellModel - -@property (nonatomic, strong) id imageInfo; -@property (nonatomic, strong) id selectedImageInfo; -@property (nonatomic, copy) void(^loadImageBlock)(UIImageView *imageView, id info); - -@property (nonatomic, assign) CGSize imageSize; - -@property (nonatomic, assign) CGFloat imageCornerRadius; - -@property (nonatomic, assign, getter=isImageZoomEnabled) BOOL imageZoomEnabled; - -@property (nonatomic, assign) CGFloat imageZoomScale; - -/// 以下属性将会被弃用 -@property (nonatomic, copy) NSString *imageName; //加载bundle内的图片 -@property (nonatomic, strong) NSURL *imageURL; //图片URL -@property (nonatomic, copy) NSString *selectedImageName; -@property (nonatomic, strong) NSURL *selectedImageURL; -@property (nonatomic, copy) void(^loadImageCallback)(UIImageView *imageView, NSURL *imageURL); - -@end diff --git a/Pods/JXCategoryView/Sources/Image/JXCategoryImageCellModel.m b/Pods/JXCategoryView/Sources/Image/JXCategoryImageCellModel.m deleted file mode 100644 index a7dbec7..0000000 --- a/Pods/JXCategoryView/Sources/Image/JXCategoryImageCellModel.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// JXCategoryImageCellModel.m -// JXCategoryView -// -// Created by jiaxin on 2018/8/20. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryImageCellModel.h" - -@implementation JXCategoryImageCellModel - -@end diff --git a/Pods/JXCategoryView/Sources/Image/JXCategoryImageView.h b/Pods/JXCategoryView/Sources/Image/JXCategoryImageView.h deleted file mode 100644 index a4324d6..0000000 --- a/Pods/JXCategoryView/Sources/Image/JXCategoryImageView.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// JXCategoryImageView.h -// JXCategoryView -// -// Created by jiaxin on 2018/8/20. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryIndicatorView.h" -#import "JXCategoryImageCell.h" -#import "JXCategoryImageCellModel.h" - -@interface JXCategoryImageView : JXCategoryIndicatorView - -//imageInfo数组可以传入imageName字符串或者image的URL地址等,然后会通过loadImageBlock透传回来,把imageView对于图片的加载过程完全交给使用者决定。 -@property (nonatomic, strong) NSArray *imageInfoArray; -@property (nonatomic, strong) NSArray *selectedImageInfoArray; -@property (nonatomic, copy) void(^loadImageBlock)(UIImageView *imageView, id info); - -@property (nonatomic, assign) CGSize imageSize; //默认值为 CGSizeMake(20, 20) -@property (nonatomic, assign) CGFloat imageCornerRadius; //图片圆角 -@property (nonatomic, assign, getter=isImageZoomEnabled) BOOL imageZoomEnabled; //默认值为 NO -@property (nonatomic, assign) CGFloat imageZoomScale; //默认值为 1.2,imageZoomEnabled 为 YES 时才生效 - -//下面的属性将会被弃用,请使用`imageInfoArray`、`selectedImageInfoArray`、`loadImageBlock`属性完成需求。 -@property (nonatomic, strong) NSArray *imageNames; -@property (nonatomic, strong) NSArray *imageURLs; -@property (nonatomic, strong) NSArray *selectedImageNames; -@property (nonatomic, strong) NSArray *selectedImageURLs; -@property (nonatomic, copy) void(^loadImageCallback)(UIImageView *imageView, NSURL *imageURL); //使用imageURL从远端下载图片进行加载,建议使用SDWebImage等第三方库进行下载。 - -@end diff --git a/Pods/JXCategoryView/Sources/Image/JXCategoryImageView.m b/Pods/JXCategoryView/Sources/Image/JXCategoryImageView.m deleted file mode 100644 index 9c39b02..0000000 --- a/Pods/JXCategoryView/Sources/Image/JXCategoryImageView.m +++ /dev/null @@ -1,104 +0,0 @@ -// -// JXCategoryImageView.m -// JXCategoryView -// -// Created by jiaxin on 2018/8/20. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryImageView.h" -#import "JXCategoryFactory.h" - -@implementation JXCategoryImageView - -- (void)dealloc { - self.loadImageBlock = nil; - self.loadImageCallback = nil; -} - -- (void)initializeData { - [super initializeData]; - - _imageSize = CGSizeMake(20, 20); - _imageZoomEnabled = NO; - _imageZoomScale = 1.2; - _imageCornerRadius = 0; -} - -- (Class)preferredCellClass { - return [JXCategoryImageCell class]; -} - -- (void)refreshDataSource { - NSUInteger count = 0; - if (self.imageInfoArray.count > 0) { - count = self.imageInfoArray.count; - }else if (self.imageNames.count > 0) { - count = self.imageNames.count; - }else { - count = self.imageURLs.count; - } - NSMutableArray *tempArray = [NSMutableArray arrayWithCapacity:count]; - for (int i = 0; i < count; i++) { - JXCategoryImageCellModel *cellModel = [[JXCategoryImageCellModel alloc] init]; - [tempArray addObject:cellModel]; - } - self.dataSource = [NSArray arrayWithArray:tempArray]; -} - -- (void)refreshSelectedCellModel:(JXCategoryBaseCellModel *)selectedCellModel unselectedCellModel:(JXCategoryBaseCellModel *)unselectedCellModel { - [super refreshSelectedCellModel:selectedCellModel unselectedCellModel:unselectedCellModel]; - - JXCategoryImageCellModel *myUnselectedCellModel = (JXCategoryImageCellModel *)unselectedCellModel; - myUnselectedCellModel.imageZoomScale = 1.0; - - JXCategoryImageCellModel *myselectedCellModel = (JXCategoryImageCellModel *)selectedCellModel; - myselectedCellModel.imageZoomScale = self.imageZoomScale; -} - -- (void)refreshCellModel:(JXCategoryBaseCellModel *)cellModel index:(NSInteger)index { - [super refreshCellModel:cellModel index:index]; - - JXCategoryImageCellModel *myCellModel = (JXCategoryImageCellModel *)cellModel; - myCellModel.loadImageBlock = self.loadImageBlock; - myCellModel.loadImageCallback = self.loadImageCallback; - myCellModel.imageSize = self.imageSize; - myCellModel.imageCornerRadius = self.imageCornerRadius; - if (self.imageInfoArray && self.imageInfoArray.count != 0) { - myCellModel.imageInfo = self.imageInfoArray[index]; - }else if (self.imageNames && self.imageNames.count != 0) { - myCellModel.imageName = self.imageNames[index]; - }else if (self.imageURLs && self.imageURLs.count != 0) { - myCellModel.imageURL = self.imageURLs[index]; - } - if (self.selectedImageInfoArray && self.selectedImageInfoArray.count != 0) { - myCellModel.selectedImageInfo = self.selectedImageInfoArray[index]; - }else if (self.selectedImageNames && self.selectedImageNames.count != 0) { - myCellModel.selectedImageName = self.selectedImageNames[index]; - }else if (self.selectedImageURLs && self.selectedImageURLs.count != 0) { - myCellModel.selectedImageURL = self.selectedImageURLs[index]; - } - myCellModel.imageZoomEnabled = self.imageZoomEnabled; - myCellModel.imageZoomScale = ((index == self.selectedIndex) ? self.imageZoomScale : 1.0); -} - -- (void)refreshLeftCellModel:(JXCategoryBaseCellModel *)leftCellModel rightCellModel:(JXCategoryBaseCellModel *)rightCellModel ratio:(CGFloat)ratio { - [super refreshLeftCellModel:leftCellModel rightCellModel:rightCellModel ratio:ratio]; - - JXCategoryImageCellModel *leftModel = (JXCategoryImageCellModel *)leftCellModel; - JXCategoryImageCellModel *rightModel = (JXCategoryImageCellModel *)rightCellModel; - - if (self.isImageZoomEnabled) { - leftModel.imageZoomScale = [JXCategoryFactory interpolationFrom:self.imageZoomScale to:1.0 percent:ratio]; - rightModel.imageZoomScale = [JXCategoryFactory interpolationFrom:1.0 to:self.imageZoomScale percent:ratio]; - } -} - -- (CGFloat)preferredCellWidthAtIndex:(NSInteger)index { - if (self.cellWidth == JXCategoryViewAutomaticDimension) { - return self.imageSize.width; - } - return self.cellWidth; -} - -@end diff --git a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorBackgroundView.h b/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorBackgroundView.h deleted file mode 100644 index e423efb..0000000 --- a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorBackgroundView.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// JXCategoryIndicatorBackgroundView.h -// JXCategoryView -// -// Created by jiaxin on 2018/8/17. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryIndicatorComponentView.h" - -/// BackgroundView 样式的指示器 -@interface JXCategoryIndicatorBackgroundView : JXCategoryIndicatorComponentView - -@end diff --git a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorBackgroundView.m b/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorBackgroundView.m deleted file mode 100644 index 4f4942f..0000000 --- a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorBackgroundView.m +++ /dev/null @@ -1,101 +0,0 @@ -// -// JXCategoryIndicatorBackgroundView.m -// JXCategoryView -// -// Created by jiaxin on 2018/8/17. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryIndicatorBackgroundView.h" -#import "JXCategoryFactory.h" - -@implementation JXCategoryIndicatorBackgroundView - -#pragma mark - Initialize - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self configureDefaulteValue]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)coder { - self = [super initWithCoder:coder]; - if (self) { - [self configureDefaulteValue]; - } - return self; -} - -- (void)configureDefaulteValue { - self.indicatorWidth = JXCategoryViewAutomaticDimension; - self.indicatorHeight = JXCategoryViewAutomaticDimension; - self.indicatorCornerRadius = JXCategoryViewAutomaticDimension; - self.indicatorColor = [UIColor lightGrayColor]; - self.indicatorWidthIncrement = 10; -} - -#pragma mark - JXCategoryIndicatorProtocol - -- (void)jx_refreshState:(JXCategoryIndicatorParamsModel *)model { - self.layer.cornerRadius = [self indicatorCornerRadiusValue:model.selectedCellFrame]; - self.backgroundColor = self.indicatorColor; - - CGFloat width = [self indicatorWidthValue:model.selectedCellFrame]; - CGFloat height = [self indicatorHeightValue:model.selectedCellFrame]; - CGFloat x = model.selectedCellFrame.origin.x + (model.selectedCellFrame.size.width - width)/2; - CGFloat y = (model.selectedCellFrame.size.height - height)/2 - self.verticalMargin; - self.frame = CGRectMake(x, y, width, height); -} - -- (void)jx_contentScrollViewDidScroll:(JXCategoryIndicatorParamsModel *)model { - CGRect rightCellFrame = model.rightCellFrame; - CGRect leftCellFrame = model.leftCellFrame; - CGFloat percent = model.percent; - CGFloat targetX = 0; - CGFloat targetWidth = [self indicatorWidthValue:leftCellFrame]; - - if (percent == 0) { - targetX = leftCellFrame.origin.x + (leftCellFrame.size.width - targetWidth)/2.0; - }else { - CGFloat leftWidth = targetWidth; - CGFloat rightWidth = [self indicatorWidthValue:rightCellFrame]; - - CGFloat leftX = leftCellFrame.origin.x + (leftCellFrame.size.width - leftWidth)/2; - CGFloat rightX = rightCellFrame.origin.x + (rightCellFrame.size.width - rightWidth)/2; - - targetX = [JXCategoryFactory interpolationFrom:leftX to:rightX percent:percent]; - - if (self.indicatorWidth == JXCategoryViewAutomaticDimension) { - targetWidth = [JXCategoryFactory interpolationFrom:leftWidth to:rightWidth percent:percent]; - } - } - - //允许变动frame的情况:1、允许滚动;2、不允许滚动,但是已经通过手势滚动切换一页内容了; - if (self.isScrollEnabled == YES || (self.isScrollEnabled == NO && percent == 0)) { - CGRect toFrame = self.frame; - toFrame.origin.x = targetX; - toFrame.size.width = targetWidth; - self.frame = toFrame; - } -} - -- (void)jx_selectedCell:(JXCategoryIndicatorParamsModel *)model { - CGFloat width = [self indicatorWidthValue:model.selectedCellFrame]; - CGRect toFrame = self.frame; - toFrame.origin.x = model.selectedCellFrame.origin.x + (model.selectedCellFrame.size.width - width)/2; - toFrame.size.width = width; - - if (self.isScrollEnabled) { - [UIView animateWithDuration:self.scrollAnimationDuration delay:0 options:UIViewAnimationOptionCurveLinear animations:^{ - self.frame = toFrame; - } completion:^(BOOL finished) { - }]; - }else { - self.frame = toFrame; - } -} - -@end diff --git a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorBallView.h b/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorBallView.h deleted file mode 100644 index 777d8a3..0000000 --- a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorBallView.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// JXCategoryIndicatorBallView.h -// JXCategoryView -// -// Created by jiaxin on 2018/8/21. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryIndicatorComponentView.h" - -/// QQ 小红点样式的指示器 -@interface JXCategoryIndicatorBallView : JXCategoryIndicatorComponentView - -// 球沿的 X 轴方向上的偏移量。默认值为 20 -@property (nonatomic, assign) CGFloat ballScrollOffsetX; - -@end diff --git a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorBallView.m b/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorBallView.m deleted file mode 100644 index afaeff0..0000000 --- a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorBallView.m +++ /dev/null @@ -1,199 +0,0 @@ -// -// JXCategoryIndicatorBallView.m -// JXCategoryView -// -// Created by jiaxin on 2018/8/21. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryIndicatorBallView.h" -#import "JXCategoryFactory.h" - -@interface JXCategoryIndicatorBallView () -@property (nonatomic, strong) UIView *smallBall; -@property (nonatomic, strong) UIView *bigBall; -@property (nonatomic, strong) CAShapeLayer *shapeLayer; -@end - -@implementation JXCategoryIndicatorBallView - -#pragma mark - Initialize - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self configureIndicatorBall]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)coder { - self = [super initWithCoder:coder]; - if (self) { - [self configureIndicatorBall]; - } - return self; -} - -- (void)configureIndicatorBall { - self.indicatorWidth = 15; - self.indicatorHeight = 15; - _ballScrollOffsetX = 20; - - _smallBall = [[UIView alloc] init]; - [self addSubview:self.smallBall]; - - _bigBall = [[UIView alloc] init]; - [self addSubview:self.bigBall]; - - _shapeLayer = [CAShapeLayer layer]; - [self.layer addSublayer:self.shapeLayer]; -} - -#pragma mark - JXCategoryIndicatorProtocol - -- (void)jx_refreshState:(JXCategoryIndicatorParamsModel *)model { - CGFloat ballWidth = [self indicatorWidthValue:model.selectedCellFrame]; - CGFloat ballHeight = [self indicatorHeightValue:model.selectedCellFrame]; - - [CATransaction begin]; - [CATransaction setDisableActions:YES]; - self.shapeLayer.fillColor = self.indicatorColor.CGColor; - [CATransaction commit]; - - self.smallBall.backgroundColor = self.indicatorColor; - self.smallBall.layer.cornerRadius = ballHeight/2; - self.bigBall.backgroundColor = self.indicatorColor; - self.bigBall.layer.cornerRadius = ballHeight/2; - - CGFloat x = model.selectedCellFrame.origin.x + (model.selectedCellFrame.size.width - ballWidth)/2; - CGFloat y = self.superview.bounds.size.height - ballHeight - self.verticalMargin; - if (self.componentPosition == JXCategoryComponentPosition_Top) { - y = self.verticalMargin; - } - self.smallBall.frame = CGRectMake(x, y, ballWidth, ballHeight); - self.bigBall.frame = CGRectMake(x, y, ballWidth, ballHeight); -} - -- (void)jx_contentScrollViewDidScroll:(JXCategoryIndicatorParamsModel *)model { - CGFloat ballWidth = [self indicatorWidthValue:model.leftCellFrame]; - CGFloat ballHeight = [self indicatorHeightValue:model.leftCellFrame]; - CGRect rightCellFrame = model.rightCellFrame; - CGRect leftCellFrame = model.leftCellFrame; - CGFloat percent = model.percent; - CGFloat targetXOfBigBall = 0; - CGFloat targetXOfSmallBall = leftCellFrame.origin.x + (leftCellFrame.size.width - ballWidth)/2; - CGFloat targetWidthOfSmallBall = ballWidth; - - if (percent == 0) { - targetXOfBigBall = leftCellFrame.origin.x + (leftCellFrame.size.width - ballWidth)/2.0; - targetXOfSmallBall = leftCellFrame.origin.x + (leftCellFrame.size.width - targetWidthOfSmallBall)/2.0; - }else { - CGFloat leftX = leftCellFrame.origin.x + (leftCellFrame.size.width - ballWidth)/2; - CGFloat rightX = rightCellFrame.origin.x + (rightCellFrame.size.width - ballWidth)/2; - - //前50%,移动bigBall的x,缩小smallBall;后50%,移动bigBall的x,缩小smallBall,移动smallBall的x - if (percent <= 0.5) { - targetXOfBigBall = [JXCategoryFactory interpolationFrom:leftX to:(rightX - self.ballScrollOffsetX) percent:percent*2]; - targetWidthOfSmallBall = [JXCategoryFactory interpolationFrom:ballWidth to:ballWidth/2 percent:percent*2]; - }else { - targetXOfBigBall = [JXCategoryFactory interpolationFrom:(rightX - self.ballScrollOffsetX) to:rightX percent:(percent - 0.5)*2]; - targetWidthOfSmallBall = [JXCategoryFactory interpolationFrom:ballWidth/2 to:0 percent:(percent - 0.5)*2]; - targetXOfSmallBall = [JXCategoryFactory interpolationFrom:leftX to:rightX percent:(percent - 0.5)*2]; - } - } - - //允许变动frame的情况:1、允许滚动;2、不允许滚动,但是已经通过手势滚动切换一页内容了; - if (self.isScrollEnabled == YES || (self.isScrollEnabled == NO && percent == 0)) { - CGRect bigBallFrame = self.bigBall.frame; - bigBallFrame.origin.x = targetXOfBigBall; - self.bigBall.frame = bigBallFrame; - self.bigBall.layer.cornerRadius = bigBallFrame.size.height/2; - - CGFloat targetYOfSmallBall = self.superview.bounds.size.height - ballHeight/2 - targetWidthOfSmallBall/2 - self.verticalMargin; - if (self.componentPosition == JXCategoryComponentPosition_Top) { - targetYOfSmallBall = ballHeight/2 - targetWidthOfSmallBall/2 + self.verticalMargin; - } - self.smallBall.frame = CGRectMake(targetXOfSmallBall, targetYOfSmallBall, targetWidthOfSmallBall, targetWidthOfSmallBall); - self.smallBall.layer.cornerRadius = targetWidthOfSmallBall/2; - - [CATransaction begin]; - [CATransaction setDisableActions:YES]; - self.shapeLayer.path = [self getBezierPathWithSmallCir:self.smallBall andBigCir:self.bigBall].CGPath; - [CATransaction commit]; - } -} - -- (void)jx_selectedCell:(JXCategoryIndicatorParamsModel *)model { - CGFloat ballWidth = [self indicatorWidthValue:model.selectedCellFrame]; - CGFloat ballHeight = [self indicatorHeightValue:model.selectedCellFrame]; - CGFloat x = model.selectedCellFrame.origin.x + (model.selectedCellFrame.size.width - ballWidth)/2; - CGFloat y = self.superview.bounds.size.height - ballHeight - self.verticalMargin; - if (self.componentPosition == JXCategoryComponentPosition_Top) { - y = self.verticalMargin; - } - CGRect toFrame = CGRectMake(x, y, ballWidth, ballHeight); - - if (self.isScrollEnabled) { - [UIView animateWithDuration:self.scrollAnimationDuration delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ - self.smallBall.frame = toFrame; - self.bigBall.frame = toFrame; - self.smallBall.layer.cornerRadius = ballHeight/2; - self.bigBall.layer.cornerRadius = ballHeight/2; - } completion:^(BOOL finished) { - - }]; - }else { - self.smallBall.frame = toFrame; - self.bigBall.frame = toFrame; - self.smallBall.layer.cornerRadius = ballHeight/2; - self.bigBall.layer.cornerRadius = ballHeight/2; - } -} - -- (UIBezierPath *)getBezierPathWithSmallCir:(UIView *)smallCir andBigCir:(UIView *)bigCir{ - // 获取最小的圆 - if (bigCir.frame.size.width < smallCir.frame.size.width) { - UIView *view = bigCir; - bigCir = smallCir; - smallCir = view; - } - // 获取小圆的信息 - CGFloat d = self.bigBall.center.x - self.smallBall.center.x; - if (d == 0) { - return nil; - } - CGFloat x1 = smallCir.center.x; - CGFloat y1 = smallCir.center.y; - CGFloat r1 = smallCir.bounds.size.width/2; - - // 获取大圆的信息 - CGFloat x2 = bigCir.center.x; - CGFloat y2 = bigCir.center.y; - CGFloat r2 = bigCir.bounds.size.width/2; - - // 获取三角函数 - CGFloat sinA = (y2 - y1)/d; - CGFloat cosA = (x2 - x1)/d; - - // 获取矩形四个点 - CGPoint pointA = CGPointMake(x1 - sinA*r1, y1 + cosA * r1); - CGPoint pointB = CGPointMake(x1 + sinA*r1, y1 - cosA * r1); - CGPoint pointC = CGPointMake(x2 + sinA*r2, y2 - cosA * r2); - CGPoint pointD = CGPointMake(x2 - sinA*r2, y2 + cosA * r2); - - // 获取控制点,以便画出曲线 - CGPoint pointO = CGPointMake(pointA.x + d / 2 * cosA , pointA.y + d / 2 * sinA); - CGPoint pointP = CGPointMake(pointB.x + d / 2 * cosA , pointB.y + d / 2 * sinA); - - // 创建路径 - UIBezierPath *path =[UIBezierPath bezierPath]; - [path moveToPoint:pointA]; - [path addLineToPoint:pointB]; - [path addQuadCurveToPoint:pointC controlPoint:pointP]; - [path addLineToPoint:pointD]; - [path addQuadCurveToPoint:pointA controlPoint:pointO]; - return path; -} - -@end diff --git a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorComponentView.h b/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorComponentView.h deleted file mode 100644 index 6b2906e..0000000 --- a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorComponentView.h +++ /dev/null @@ -1,113 +0,0 @@ -// -// JXCategoryComponentBaseView.h -// JXCategoryView -// -// Created by jiaxin on 2018/8/17. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import -#import "JXCategoryIndicatorProtocol.h" -#import "JXCategoryViewDefines.h" - -@interface JXCategoryIndicatorComponentView : UIView - -/** - 指示器的位置 - - 可设置的枚举类型: - - 底部:JXCategoryComponentPosition_Bottom - - 顶部:JXCategoryComponentPosition_Top - */ -@property (nonatomic, assign) JXCategoryComponentPosition componentPosition; - -/** - 指示器的宽度 - - 默认值为 JXCategoryViewAutomaticDimension(表示与 cell 的宽度相等)。 - 内部通过 `- (CGFloat)indicatorWidthValue:(CGRect)cellFrame` 方法获取实际的值。 - */ -@property (nonatomic, assign) CGFloat indicatorWidth; - -/** - 指示器的宽度增量 - - 例如:需求是指示器宽度比 cell 宽度多 10pt。就可以将该属性赋值为 10。 - 最终指示器的宽度 = indicatorWidth + indicatorWidthIncrement。 - */ -@property (nonatomic, assign) CGFloat indicatorWidthIncrement; - -/** - 指示器的高度 - - 默认值为 3。 - 内部通过 `- (CGFloat)indicatorHeightValue:(CGRect)cellFrame` 方法获取实际的值。 - */ -@property (nonatomic, assign) CGFloat indicatorHeight; - -/** - 指示器的 CornerRadius 圆角半径 - - 默认值为 JXCategoryViewAutomaticDimension (等于 indicatorHeight/2)。 - 内部通过 `- (CGFloat)indicatorCornerRadiusValue:(CGRect)cellFrame` 方法获取实际的值。 - */ -@property (nonatomic, assign) CGFloat indicatorCornerRadius; - -/** - 指示器的颜色 - */ -@property (nonatomic, strong) UIColor *indicatorColor; - -/** - 指示器在垂直方向上的偏移量 - - 数值越大越靠近中心。默认值为 0。 - */ -@property (nonatomic, assign) CGFloat verticalMargin; - -/** - 是否允许手势滚动 - - 点击切换的时候,是否允许滚动,默认值为 YES。 - */ -@property (nonatomic, assign, getter=isScrollEnabled) BOOL scrollEnabled; - -/** - 指示器滚动样式 - - 点击切换的时候,如果允许滚动,分为简单滚动和复杂滚动。 - 默认值为 JXCategoryIndicatorScrollStyleSimple - 目前仅JXCategoryIndicatorLineView、JXCategoryIndicatorDotLineView支持,其他子类暂不支持。 - */ -@property (nonatomic, assign) JXCategoryIndicatorScrollStyle scrollStyle; - -/** - 滚动动画的时间,默认值为 0.25s - */ -@property (nonatomic, assign) NSTimeInterval scrollAnimationDuration; - -/** - 传入 cellFrame 获取指示器的最终宽度 - - @param cellFrame cellFrame - @return 指示器的最终宽度 - */ -- (CGFloat)indicatorWidthValue:(CGRect)cellFrame; - -/** - 传入 cellFrame 获取指示器的最终高度 - - @param cellFrame cellFrame - @return 指示器的最终高度 - */ -- (CGFloat)indicatorHeightValue:(CGRect)cellFrame; - -/** - 传入 cellFrame 获取指示器的最终圆角 - - @param cellFrame cellFrame - @return 指示器的最终圆角 - */ -- (CGFloat)indicatorCornerRadiusValue:(CGRect)cellFrame; - -@end diff --git a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorComponentView.m b/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorComponentView.m deleted file mode 100644 index f9111d3..0000000 --- a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorComponentView.m +++ /dev/null @@ -1,81 +0,0 @@ -// -// JXCategoryComponentBaseView.m -// JXCategoryView -// -// Created by jiaxin on 2018/8/17. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryIndicatorComponentView.h" - -@implementation JXCategoryIndicatorComponentView - -#pragma mark - Initialize - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self configureDefaultValue]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)coder { - self = [super initWithCoder:coder]; - if (self) { - [self configureDefaultValue]; - } - return self; -} - -- (void)configureDefaultValue { - _componentPosition = JXCategoryComponentPosition_Bottom; - _scrollEnabled = YES; - _verticalMargin = 0; - _scrollAnimationDuration = 0.25; - _indicatorWidth = JXCategoryViewAutomaticDimension; - _indicatorWidthIncrement = 0; - _indicatorHeight = 3; - _indicatorCornerRadius = JXCategoryViewAutomaticDimension; - _indicatorColor = [UIColor redColor]; - _scrollStyle = JXCategoryIndicatorScrollStyleSimple; -} - -#pragma mark - Public - -- (CGFloat)indicatorWidthValue:(CGRect)cellFrame { - if (self.indicatorWidth == JXCategoryViewAutomaticDimension) { - return cellFrame.size.width + self.indicatorWidthIncrement; - } - return self.indicatorWidth + self.indicatorWidthIncrement; -} - -- (CGFloat)indicatorHeightValue:(CGRect)cellFrame { - if (self.indicatorHeight == JXCategoryViewAutomaticDimension) { - return cellFrame.size.height; - } - return self.indicatorHeight; -} - -- (CGFloat)indicatorCornerRadiusValue:(CGRect)cellFrame { - if (self.indicatorCornerRadius == JXCategoryViewAutomaticDimension) { - return [self indicatorHeightValue:cellFrame]/2; - } - return self.indicatorCornerRadius; -} - -#pragma mark - JXCategoryIndicatorProtocol - -- (void)jx_refreshState:(JXCategoryIndicatorParamsModel *)model { - -} - -- (void)jx_contentScrollViewDidScroll:(JXCategoryIndicatorParamsModel *)model { - -} - -- (void)jx_selectedCell:(JXCategoryIndicatorParamsModel *)model { - -} - -@end diff --git a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorDotLineView.h b/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorDotLineView.h deleted file mode 100644 index e58bbdb..0000000 --- a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorDotLineView.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// JXCategoryIndicatorDotLineView.h -// JXCategoryView -// -// Created by jiaxin on 2018/8/22. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryIndicatorComponentView.h" - -/// 点线效果的指示器 -@interface JXCategoryIndicatorDotLineView : JXCategoryIndicatorComponentView - -// 线状态的最大宽度,默认值为 50 -@property (nonatomic, assign) CGFloat lineWidth; - -@end diff --git a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorDotLineView.m b/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorDotLineView.m deleted file mode 100644 index 3a680e4..0000000 --- a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorDotLineView.m +++ /dev/null @@ -1,148 +0,0 @@ -// -// JXCategoryIndicatorDotLineView.m -// JXCategoryView -// -// Created by jiaxin on 2018/8/22. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryIndicatorDotLineView.h" -#import "JXCategoryFactory.h" -#import "JXCategoryViewAnimator.h" - -@interface JXCategoryIndicatorDotLineView () -@property (nonatomic, strong) JXCategoryViewAnimator *animator; -@end - -@implementation JXCategoryIndicatorDotLineView - -#pragma mark - Initialize - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self configureDefaulteValue]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)coder { - self = [super initWithCoder:coder]; - if (self) { - [self configureDefaulteValue]; - } - return self; -} - -- (void)configureDefaulteValue { - self.indicatorWidth = 10; - self.indicatorHeight = 10; - _lineWidth = 50; -} - -#pragma mark - JXCategoryIndicatorProtocol - -- (void)jx_refreshState:(JXCategoryIndicatorParamsModel *)model { - CGFloat dotWidth = [self indicatorWidthValue:model.selectedCellFrame]; - CGFloat dotHeight = [self indicatorHeightValue:model.selectedCellFrame]; - self.backgroundColor = self.indicatorColor; - self.layer.cornerRadius = [self indicatorHeightValue:model.selectedCellFrame]/2; - - CGFloat x = model.selectedCellFrame.origin.x + (model.selectedCellFrame.size.width - dotWidth)/2; - CGFloat y = self.superview.bounds.size.height - dotHeight - self.verticalMargin; - if (self.componentPosition == JXCategoryComponentPosition_Top) { - y = self.verticalMargin; - } - self.frame = CGRectMake(x, y, dotWidth, dotHeight); -} - -- (void)jx_contentScrollViewDidScroll:(JXCategoryIndicatorParamsModel *)model { - if (self.animator.isExecuting) { - [self.animator invalid]; - self.animator = nil; - } - CGFloat dotWidth = [self indicatorWidthValue:model.selectedCellFrame]; - CGRect rightCellFrame = model.rightCellFrame; - CGRect leftCellFrame = model.leftCellFrame; - CGFloat percent = model.percent; - CGFloat targetX = 0; - CGFloat targetWidth = dotWidth; - CGFloat leftWidth = dotWidth; - CGFloat rightWidth = dotWidth; - CGFloat leftX = leftCellFrame.origin.x + (leftCellFrame.size.width - leftWidth)/2; - CGFloat rightX = rightCellFrame.origin.x + (rightCellFrame.size.width - rightWidth)/2; - CGFloat centerX = leftX + (rightX - leftX - self.lineWidth)/2; - - //前50%,移动x,增加宽度;后50%,移动x并减小width - if (percent <= 0.5) { - targetX = [JXCategoryFactory interpolationFrom:leftX to:centerX percent:percent*2]; - targetWidth = [JXCategoryFactory interpolationFrom:dotWidth to:self.lineWidth percent:percent*2]; - }else { - targetX = [JXCategoryFactory interpolationFrom:centerX to:rightX percent:(percent - 0.5)*2]; - targetWidth = [JXCategoryFactory interpolationFrom:self.lineWidth to:dotWidth percent:(percent - 0.5)*2]; - } - - //允许变动frame的情况:1、允许滚动;2、不允许滚动,但是已经通过手势滚动切换一页内容了; - if (self.isScrollEnabled == YES || (self.isScrollEnabled == NO && percent == 0)) { - CGRect frame = self.frame; - frame.origin.x = targetX; - frame.size.width = targetWidth; - self.frame = frame; - } -} - -- (void)jx_selectedCell:(JXCategoryIndicatorParamsModel *)model { - CGFloat dotWidth = [self indicatorWidthValue:model.selectedCellFrame]; - CGFloat x = model.selectedCellFrame.origin.x + (model.selectedCellFrame.size.width - dotWidth)/2; - CGRect targetIndicatorFrame = self.frame; - targetIndicatorFrame.origin.x = x; - if (self.isScrollEnabled) { - if (self.scrollStyle == JXCategoryIndicatorScrollStyleSameAsUserScroll && (model.selectedType == JXCategoryCellSelectedTypeClick | model.selectedType == JXCategoryCellSelectedTypeCode)) { - if (self.animator.isExecuting) { - [self.animator invalid]; - self.animator = nil; - } - CGFloat leftX = 0; - CGFloat rightX = 0; - BOOL isNeedReversePercent = NO; - if (self.frame.origin.x > model.selectedCellFrame.origin.x) { - leftX = model.selectedCellFrame.origin.x + (model.selectedCellFrame.size.width - dotWidth)/2;; - rightX = self.frame.origin.x; - isNeedReversePercent = YES; - }else { - leftX = self.frame.origin.x; - rightX = model.selectedCellFrame.origin.x + (model.selectedCellFrame.size.width - dotWidth)/2; - } - CGFloat centerX = leftX + (rightX - leftX - self.lineWidth)/2; - __weak typeof(self) weakSelf = self; - self.animator = [[JXCategoryViewAnimator alloc] init]; - self.animator.progressCallback = ^(CGFloat percent) { - if (isNeedReversePercent) { - percent = 1 - percent; - } - CGFloat targetX = 0; - CGFloat targetWidth = 0; - if (percent <= 0.5) { - targetX = [JXCategoryFactory interpolationFrom:leftX to:centerX percent:percent*2]; - targetWidth = [JXCategoryFactory interpolationFrom:dotWidth to:self.lineWidth percent:percent*2]; - }else { - targetX = [JXCategoryFactory interpolationFrom:centerX to:rightX percent:(percent - 0.5)*2]; - targetWidth = [JXCategoryFactory interpolationFrom:self.lineWidth to:dotWidth percent:(percent - 0.5)*2]; - } - CGRect toFrame = weakSelf.frame; - toFrame.origin.x = targetX; - toFrame.size.width = targetWidth; - weakSelf.frame = toFrame; - }; - [self.animator start]; - }else if (self.scrollStyle == JXCategoryIndicatorScrollStyleSimple) { - [UIView animateWithDuration:self.scrollAnimationDuration delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ - self.frame = targetIndicatorFrame; - } completion: nil]; - } - }else { - self.frame = targetIndicatorFrame; - } -} - -@end diff --git a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorImageView.h b/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorImageView.h deleted file mode 100644 index 04a1738..0000000 --- a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorImageView.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// JXCategoryIndicatorImageView.h -// JXCategoryView -// -// Created by jiaxin on 2018/8/17. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryIndicatorComponentView.h" - -@interface JXCategoryIndicatorImageView : JXCategoryIndicatorComponentView - -// 指示器图片 -@property (nonatomic, strong, readonly) UIImageView *indicatorImageView; -// 图片是否开启滚动,默认值为 NO -@property (nonatomic, assign) BOOL indicatorImageViewRollEnabled; -// 图片的尺寸,默认值为 CGSizeMake(30, 20) -@property (nonatomic, assign) CGSize indicatorImageViewSize; - -@end diff --git a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorImageView.m b/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorImageView.m deleted file mode 100644 index 02dc891..0000000 --- a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorImageView.m +++ /dev/null @@ -1,117 +0,0 @@ -// -// JXCategoryIndicatorImageView.m -// JXCategoryView -// -// Created by jiaxin on 2018/8/17. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryIndicatorImageView.h" -#import "JXCategoryFactory.h" - -@implementation JXCategoryIndicatorImageView - -#pragma mark - Initialize - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self setupIndicatorImageView]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)coder { - self = [super initWithCoder:coder]; - if (self) { - [self setupIndicatorImageView]; - } - return self; -} - -- (void)setupIndicatorImageView { - _indicatorImageViewSize = CGSizeMake(30, 20); - _indicatorImageViewRollEnabled = NO; - - _indicatorImageView = [[UIImageView alloc] init]; - self.indicatorImageView.frame = CGRectMake(0, 0, self.indicatorImageViewSize.width, self.indicatorImageViewSize.height); - self.indicatorImageView.contentMode = UIViewContentModeScaleAspectFit; - [self addSubview:self.indicatorImageView]; -} - -#pragma mark - Custom Accessors - -- (void)setIndicatorImageViewSize:(CGSize)indicatorImageViewSize { - _indicatorImageViewSize = indicatorImageViewSize; - - self.indicatorImageView.frame = CGRectMake(0, 0, self.indicatorImageViewSize.width, self.indicatorImageViewSize.height); -} - -#pragma mark - JXCategoryIndicatorProtocol - -- (void)jx_refreshState:(JXCategoryIndicatorParamsModel *)model { - CGFloat x = model.selectedCellFrame.origin.x + (model.selectedCellFrame.size.width - self.indicatorImageViewSize.width)/2; - CGFloat y = self.superview.bounds.size.height - self.indicatorImageViewSize.height - self.verticalMargin; - if (self.componentPosition == JXCategoryComponentPosition_Top) { - y = self.verticalMargin; - } - self.frame = CGRectMake(x, y, self.indicatorImageViewSize.width, self.indicatorImageViewSize.height); -} - -- (void)jx_contentScrollViewDidScroll:(JXCategoryIndicatorParamsModel *)model { - CGRect rightCellFrame = model.rightCellFrame; - CGRect leftCellFrame = model.leftCellFrame; - CGFloat percent = model.percent; - CGFloat targetWidth = self.indicatorImageViewSize.width; - CGFloat targetX = 0; - - if (percent == 0) { - targetX = leftCellFrame.origin.x + (leftCellFrame.size.width - targetWidth)/2.0; - }else { - CGFloat leftX = leftCellFrame.origin.x + (leftCellFrame.size.width - targetWidth)/2; - CGFloat rightX = rightCellFrame.origin.x + (rightCellFrame.size.width - targetWidth)/2; - targetX = [JXCategoryFactory interpolationFrom:leftX to:rightX percent:percent]; - } - - //允许变动frame的情况:1、允许滚动;2、不允许滚动,但是已经通过手势滚动切换一页内容了; - if (self.isScrollEnabled == YES || (self.isScrollEnabled == NO && percent == 0)) { - CGRect frame = self.frame; - frame.origin.x = targetX; - self.frame = frame; - - if (self.indicatorImageViewRollEnabled) { - self.indicatorImageView.transform = CGAffineTransformMakeRotation(M_PI*2*percent); - } - } -} - -- (void)jx_selectedCell:(JXCategoryIndicatorParamsModel *)model { - CGRect toFrame = self.frame; - toFrame.origin.x = model.selectedCellFrame.origin.x + (model.selectedCellFrame.size.width - self.indicatorImageViewSize.width)/2; - if (self.isScrollEnabled) { - [UIView animateWithDuration:self.scrollAnimationDuration delay:0 options:UIViewAnimationOptionCurveLinear animations:^{ - self.frame = toFrame; - } completion:^(BOOL finished) { - }]; - if (self.indicatorImageViewRollEnabled && (model.selectedType == JXCategoryCellSelectedTypeCode || model.selectedType == JXCategoryCellSelectedTypeClick)) { - [self.indicatorImageView.layer removeAnimationForKey:@"rotate"]; - CABasicAnimation *rotateAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; - if (model.selectedIndex > model.lastSelectedIndex) { - rotateAnimation.fromValue = @(0); - rotateAnimation.toValue = @(M_PI*2); - }else { - rotateAnimation.fromValue = @(M_PI*2); - rotateAnimation.toValue = @(0); - } - rotateAnimation.fillMode = kCAFillModeBackwards; - rotateAnimation.removedOnCompletion = YES; - rotateAnimation.duration = 0.25; - [self.indicatorImageView.layer addAnimation:rotateAnimation forKey:@"rotate"]; - } - }else { - self.frame = toFrame; - } -} - - -@end diff --git a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorLineView.h b/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorLineView.h deleted file mode 100644 index 54c784a..0000000 --- a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorLineView.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// JXCategoryIndicatorLineView.h -// JXCategoryView -// -// Created by jiaxin on 2018/8/17. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryIndicatorComponentView.h" - -typedef NS_ENUM(NSUInteger, JXCategoryIndicatorLineStyle) { - JXCategoryIndicatorLineStyle_Normal = 0, - JXCategoryIndicatorLineStyle_Lengthen = 1, - JXCategoryIndicatorLineStyle_LengthenOffset = 2, -}; - -@interface JXCategoryIndicatorLineView : JXCategoryIndicatorComponentView - -@property (nonatomic, assign) JXCategoryIndicatorLineStyle lineStyle; - -/** - line 滚动时沿 x 轴方向上的偏移量,默认值为 10。 - - lineStyle 为 JXCategoryIndicatorLineStyle_LengthenOffset 有用。 - */ -@property (nonatomic, assign) CGFloat lineScrollOffsetX; - -@end diff --git a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorLineView.m b/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorLineView.m deleted file mode 100644 index 87ffbe6..0000000 --- a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorLineView.m +++ /dev/null @@ -1,202 +0,0 @@ -// -// JXCategoryIndicatorLineView.m -// JXCategoryView -// -// Created by jiaxin on 2018/8/17. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryIndicatorLineView.h" -#import "JXCategoryFactory.h" -#import "JXCategoryViewDefines.h" -#import "JXCategoryViewAnimator.h" - -@interface JXCategoryIndicatorLineView () -@property (nonatomic, strong) JXCategoryViewAnimator *animator; -@end - -@implementation JXCategoryIndicatorLineView - -#pragma mark - Initialize - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self configureDefaulteValue]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)coder { - self = [super initWithCoder:coder]; - if (self) { - [self configureDefaulteValue]; - } - return self; -} - -- (void)configureDefaulteValue { - _lineStyle = JXCategoryIndicatorLineStyle_Normal; - _lineScrollOffsetX = 10; - self.indicatorHeight = 3; -} - -#pragma mark - JXCategoryIndicatorProtocol - -- (void)jx_refreshState:(JXCategoryIndicatorParamsModel *)model { - self.backgroundColor = self.indicatorColor; - self.layer.cornerRadius = [self indicatorCornerRadiusValue:model.selectedCellFrame]; - - CGFloat selectedLineWidth = [self indicatorWidthValue:model.selectedCellFrame]; - CGFloat x = model.selectedCellFrame.origin.x + (model.selectedCellFrame.size.width - selectedLineWidth)/2; - CGFloat y = self.superview.bounds.size.height - [self indicatorHeightValue:model.selectedCellFrame] - self.verticalMargin; - if (self.componentPosition == JXCategoryComponentPosition_Top) { - y = self.verticalMargin; - } - self.frame = CGRectMake(x, y, selectedLineWidth, [self indicatorHeightValue:model.selectedCellFrame]); -} - -- (void)jx_contentScrollViewDidScroll:(JXCategoryIndicatorParamsModel *)model { - if (self.animator.isExecuting) { - [self.animator invalid]; - self.animator = nil; - } - CGRect rightCellFrame = model.rightCellFrame; - CGRect leftCellFrame = model.leftCellFrame; - CGFloat percent = model.percent; - CGFloat targetX = leftCellFrame.origin.x; - CGFloat targetWidth = [self indicatorWidthValue:leftCellFrame]; - - CGFloat leftWidth = targetWidth; - CGFloat rightWidth = [self indicatorWidthValue:rightCellFrame]; - CGFloat leftX = leftCellFrame.origin.x + (leftCellFrame.size.width - leftWidth)/2; - CGFloat rightX = rightCellFrame.origin.x + (rightCellFrame.size.width - rightWidth)/2; - - if (self.lineStyle == JXCategoryIndicatorLineStyle_Normal) { - targetX = [JXCategoryFactory interpolationFrom:leftX to:rightX percent:percent]; - if (self.indicatorWidth == JXCategoryViewAutomaticDimension) { - targetWidth = [JXCategoryFactory interpolationFrom:leftWidth to:rightWidth percent:percent]; - } - }else if (self.lineStyle == JXCategoryIndicatorLineStyle_Lengthen) { - CGFloat maxWidth = rightX - leftX + rightWidth; - //前50%,只增加width;后50%,移动x并减小width - if (percent <= 0.5) { - targetX = leftX; - targetWidth = [JXCategoryFactory interpolationFrom:leftWidth to:maxWidth percent:percent*2]; - }else { - targetX = [JXCategoryFactory interpolationFrom:leftX to:rightX percent:(percent - 0.5)*2]; - targetWidth = [JXCategoryFactory interpolationFrom:maxWidth to:rightWidth percent:(percent - 0.5)*2]; - } - }else if (self.lineStyle == JXCategoryIndicatorLineStyle_LengthenOffset) { - //前50%,增加width,并少量移动x;后50%,少量移动x并减小width - CGFloat offsetX = self.lineScrollOffsetX;//x的少量偏移量 - CGFloat maxWidth = rightX - leftX + rightWidth - offsetX*2; - if (percent <= 0.5) { - targetX = [JXCategoryFactory interpolationFrom:leftX to:leftX + offsetX percent:percent*2];; - targetWidth = [JXCategoryFactory interpolationFrom:leftWidth to:maxWidth percent:percent*2]; - }else { - targetX = [JXCategoryFactory interpolationFrom:(leftX + offsetX) to:rightX percent:(percent - 0.5)*2]; - targetWidth = [JXCategoryFactory interpolationFrom:maxWidth to:rightWidth percent:(percent - 0.5)*2]; - } - } - //允许变动frame的情况:1、允许滚动;2、不允许滚动,但是已经通过手势滚动切换一页内容了; - if (self.isScrollEnabled == YES || (self.isScrollEnabled == NO && percent == 0)) { - CGRect frame = self.frame; - frame.origin.x = targetX; - frame.size.width = targetWidth; - self.frame = frame; - } -} - -- (void)jx_selectedCell:(JXCategoryIndicatorParamsModel *)model { - CGRect targetIndicatorFrame = self.frame; - CGFloat targetIndicatorWidth = [self indicatorWidthValue:model.selectedCellFrame]; - targetIndicatorFrame.origin.x = model.selectedCellFrame.origin.x + (model.selectedCellFrame.size.width - targetIndicatorWidth)/2.0; - targetIndicatorFrame.size.width = targetIndicatorWidth; - if (self.isScrollEnabled) { - if (self.scrollStyle == JXCategoryIndicatorScrollStyleSameAsUserScroll && (model.selectedType == JXCategoryCellSelectedTypeClick | model.selectedType == JXCategoryCellSelectedTypeCode)) { - if (self.animator.isExecuting) { - [self.animator invalid]; - self.animator = nil; - } - CGFloat leftX = 0; - CGFloat rightX = 0; - CGFloat leftWidth = 0; - CGFloat rightWidth = 0; - BOOL isNeedReversePercent = NO; - if (self.frame.origin.x > model.selectedCellFrame.origin.x) { - leftWidth = [self indicatorWidthValue:model.selectedCellFrame]; - rightWidth = self.frame.size.width; - leftX = model.selectedCellFrame.origin.x + (model.selectedCellFrame.size.width - leftWidth)/2;; - rightX = self.frame.origin.x; - isNeedReversePercent = YES; - }else { - leftWidth = self.frame.size.width; - rightWidth = [self indicatorWidthValue:model.selectedCellFrame]; - leftX = self.frame.origin.x; - rightX = model.selectedCellFrame.origin.x + (model.selectedCellFrame.size.width - rightWidth)/2; - } - __weak typeof(self) weakSelf = self; - if (self.lineStyle == JXCategoryIndicatorLineStyle_Normal) { - [UIView animateWithDuration:self.scrollAnimationDuration delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ - self.frame = targetIndicatorFrame; - } completion: nil]; - }else if (self.lineStyle == JXCategoryIndicatorLineStyle_Lengthen) { - CGFloat maxWidth = rightX - leftX + rightWidth; - //前50%,只增加width;后50%,移动x并减小width - self.animator = [[JXCategoryViewAnimator alloc] init]; - self.animator.progressCallback = ^(CGFloat percent) { - if (isNeedReversePercent) { - percent = 1 - percent; - } - CGFloat targetX = 0; - CGFloat targetWidth = 0; - if (percent <= 0.5) { - targetX = leftX; - targetWidth = [JXCategoryFactory interpolationFrom:leftWidth to:maxWidth percent:percent*2]; - }else { - targetX = [JXCategoryFactory interpolationFrom:leftX to:rightX percent:(percent - 0.5)*2]; - targetWidth = [JXCategoryFactory interpolationFrom:maxWidth to:rightWidth percent:(percent - 0.5)*2]; - } - CGRect toFrame = weakSelf.frame; - toFrame.origin.x = targetX; - toFrame.size.width = targetWidth; - weakSelf.frame = toFrame; - }; - [self.animator start]; - }else if (self.lineStyle == JXCategoryIndicatorLineStyle_LengthenOffset) { - //前50%,增加width,并少量移动x;后50%,少量移动x并减小width - CGFloat offsetX = self.lineScrollOffsetX;//x的少量偏移量 - CGFloat maxWidth = rightX - leftX + rightWidth - offsetX*2; - self.animator = [[JXCategoryViewAnimator alloc] init]; - self.animator.progressCallback = ^(CGFloat percent) { - if (isNeedReversePercent) { - percent = 1 - percent; - } - CGFloat targetX = 0; - CGFloat targetWidth = 0; - if (percent <= 0.5) { - targetX = [JXCategoryFactory interpolationFrom:leftX to:leftX + offsetX percent:percent*2];; - targetWidth = [JXCategoryFactory interpolationFrom:leftWidth to:maxWidth percent:percent*2]; - }else { - targetX = [JXCategoryFactory interpolationFrom:(leftX + offsetX) to:rightX percent:(percent - 0.5)*2]; - targetWidth = [JXCategoryFactory interpolationFrom:maxWidth to:rightWidth percent:(percent - 0.5)*2]; - } - CGRect toFrame = weakSelf.frame; - toFrame.origin.x = targetX; - toFrame.size.width = targetWidth; - weakSelf.frame = toFrame; - }; - [self.animator start]; - } - }else if (self.scrollStyle == JXCategoryIndicatorScrollStyleSimple) { - [UIView animateWithDuration:self.scrollAnimationDuration delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ - self.frame = targetIndicatorFrame; - } completion: nil]; - } - }else { - self.frame = targetIndicatorFrame; - } -} - -@end diff --git a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorRainbowLineView.h b/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorRainbowLineView.h deleted file mode 100644 index 5fe134e..0000000 --- a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorRainbowLineView.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// JXCategoryIndicatorRainbowLineView.h -// JXCategoryView -// -// Created by jiaxin on 2018/12/13. -// Copyright © 2018 jiaxin. All rights reserved. -// - -#import "JXCategoryIndicatorLineView.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - 彩虹效果的指示器 - - !!!: 会无视 JXCategoryIndicatorLineView 的 indicatorColor 属性,以 indicatorColors 为准。 - */ -@interface JXCategoryIndicatorRainbowLineView : JXCategoryIndicatorLineView - -/** - 指示器颜色数组 - - 数量需要与 cell 的数量相等。没有提供默认值,必须要赋值该属性。 - categoryView 在 reloadData 的时候,也要一并更新该属性,不然会出现数组越界。 - */ -@property (nonatomic, strong) NSArray *indicatorColors; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorRainbowLineView.m b/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorRainbowLineView.m deleted file mode 100644 index 9978c8c..0000000 --- a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorRainbowLineView.m +++ /dev/null @@ -1,38 +0,0 @@ -// -// JXCategoryIndicatorRainbowLineView.m -// JXCategoryView -// -// Created by jiaxin on 2018/12/13. -// Copyright © 2018 jiaxin. All rights reserved. -// - -#import "JXCategoryIndicatorRainbowLineView.h" -#import "JXCategoryFactory.h" - -@implementation JXCategoryIndicatorRainbowLineView - -- (void)jx_refreshState:(JXCategoryIndicatorParamsModel *)model { - [super jx_refreshState:model]; - - UIColor *color = self.indicatorColors[model.selectedIndex]; - self.backgroundColor = color; -} - -- (void)jx_contentScrollViewDidScroll:(JXCategoryIndicatorParamsModel *)model { - [super jx_contentScrollViewDidScroll:model]; - - UIColor *leftColor = self.indicatorColors[model.leftIndex]; - UIColor *rightColor = self.indicatorColors[model.rightIndex]; - UIColor *color = [JXCategoryFactory interpolationColorFrom:leftColor to:rightColor percent:model.percent]; - self.backgroundColor = color; -} - -- (void)jx_selectedCell:(JXCategoryIndicatorParamsModel *)model { - [super jx_selectedCell:model]; - - UIColor *color = self.indicatorColors[model.selectedIndex]; - self.backgroundColor = color; -} - - -@end diff --git a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorTriangleView.h b/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorTriangleView.h deleted file mode 100644 index e4dfdb2..0000000 --- a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorTriangleView.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// JXCategoryIndicatorTriangleView.h -// JXCategoryView -// -// Created by jiaxin on 2018/8/17. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryIndicatorComponentView.h" - -/// 三角形样式的指示器 -@interface JXCategoryIndicatorTriangleView : JXCategoryIndicatorComponentView - -@end diff --git a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorTriangleView.m b/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorTriangleView.m deleted file mode 100644 index 96f5ab0..0000000 --- a/Pods/JXCategoryView/Sources/Indicator/IndicatorViews/JXCategoryIndicatorTriangleView.m +++ /dev/null @@ -1,109 +0,0 @@ -// -// JXCategoryIndicatorTriangleView.m -// JXCategoryView -// -// Created by jiaxin on 2018/8/17. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryIndicatorTriangleView.h" -#import "JXCategoryFactory.h" - -@interface JXCategoryIndicatorTriangleView () -@property (nonatomic, strong) CAShapeLayer *triangleLayer; -@end - -@implementation JXCategoryIndicatorTriangleView - -#pragma mark - Initialize - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self configureDefaulteValue]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)coder { - self = [super initWithCoder:coder]; - if (self) { - [self configureDefaulteValue]; - } - return self; -} - -- (void)configureDefaulteValue { - self.indicatorWidth = 14; - self.indicatorHeight = 10; - - _triangleLayer = [CAShapeLayer layer]; - [self.layer addSublayer:self.triangleLayer]; -} - -#pragma mark - JXCategoryIndicatorProtocol - -- (void)jx_refreshState:(JXCategoryIndicatorParamsModel *)model { - CGFloat x = model.selectedCellFrame.origin.x + (model.selectedCellFrame.size.width - [self indicatorWidthValue:model.selectedCellFrame])/2; - CGFloat y = self.superview.bounds.size.height - [self indicatorHeightValue:model.selectedCellFrame] - self.verticalMargin; - if (self.componentPosition == JXCategoryComponentPosition_Top) { - y = self.verticalMargin; - } - self.frame = CGRectMake(x, y, [self indicatorWidthValue:model.selectedCellFrame], [self indicatorHeightValue:model.selectedCellFrame]); - - [CATransaction begin]; - [CATransaction setDisableActions:NO]; - self.triangleLayer.fillColor = self.indicatorColor.CGColor; - self.triangleLayer.frame = self.bounds; - UIBezierPath *path = [UIBezierPath bezierPath]; - if (self.componentPosition == JXCategoryComponentPosition_Bottom) { - [path moveToPoint:CGPointMake(self.bounds.size.width/2, 0)]; - [path addLineToPoint:CGPointMake(0, self.bounds.size.height)]; - [path addLineToPoint:CGPointMake(self.bounds.size.width, self.bounds.size.height)]; - } else { - [path moveToPoint:CGPointMake(0, 0)]; - [path addLineToPoint:CGPointMake(self.bounds.size.width, 0)]; - [path addLineToPoint:CGPointMake(self.bounds.size.width/2, self.bounds.size.height)]; - } - [path closePath]; - self.triangleLayer.path = path.CGPath; - [CATransaction commit]; -} - -- (void)jx_contentScrollViewDidScroll:(JXCategoryIndicatorParamsModel *)model { - CGRect rightCellFrame = model.rightCellFrame; - CGRect leftCellFrame = model.leftCellFrame; - CGFloat percent = model.percent; - CGFloat targetWidth = [self indicatorWidthValue:model.leftCellFrame]; - CGFloat targetX = 0; - - if (percent == 0) { - targetX = leftCellFrame.origin.x + (leftCellFrame.size.width - targetWidth)/2.0; - } else { - CGFloat leftX = leftCellFrame.origin.x + (leftCellFrame.size.width - targetWidth)/2; - CGFloat rightX = rightCellFrame.origin.x + (rightCellFrame.size.width - targetWidth)/2; - targetX = [JXCategoryFactory interpolationFrom:leftX to:rightX percent:percent]; - } - - //允许变动frame的情况:1、允许滚动;2、不允许滚动,但是已经通过手势滚动切换一页内容了; - if (self.isScrollEnabled == YES || (self.isScrollEnabled == NO && percent == 0)) { - CGRect frame = self.frame; - frame.origin.x = targetX; - self.frame = frame; - } -} - -- (void)jx_selectedCell:(JXCategoryIndicatorParamsModel *)model { - CGRect toFrame = self.frame; - toFrame.origin.x = model.selectedCellFrame.origin.x + (model.selectedCellFrame.size.width - [self indicatorWidthValue:model.selectedCellFrame])/2; - if (self.isScrollEnabled) { - [UIView animateWithDuration:self.scrollAnimationDuration delay:0 options:UIViewAnimationOptionCurveLinear animations:^{ - self.frame = toFrame; - } completion:^(BOOL finished) { - }]; - } else { - self.frame = toFrame; - } -} - -@end diff --git a/Pods/JXCategoryView/Sources/Indicator/JXCategoryIndicatorCell.h b/Pods/JXCategoryView/Sources/Indicator/JXCategoryIndicatorCell.h deleted file mode 100644 index 27796d5..0000000 --- a/Pods/JXCategoryView/Sources/Indicator/JXCategoryIndicatorCell.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// JXCategoryComponetCell.h -// DQGuess -// -// Created by jiaxin on 2018/7/25. -// Copyright © 2018年 jingbo. All rights reserved. -// - -#import "JXCategoryBaseCell.h" - -@interface JXCategoryIndicatorCell : JXCategoryBaseCell - -@end diff --git a/Pods/JXCategoryView/Sources/Indicator/JXCategoryIndicatorCell.m b/Pods/JXCategoryView/Sources/Indicator/JXCategoryIndicatorCell.m deleted file mode 100644 index 390701f..0000000 --- a/Pods/JXCategoryView/Sources/Indicator/JXCategoryIndicatorCell.m +++ /dev/null @@ -1,52 +0,0 @@ -// -// JXCategoryComponetCell.m -// DQGuess -// -// Created by jiaxin on 2018/7/25. -// Copyright © 2018年 jingbo. All rights reserved. -// - -#import "JXCategoryIndicatorCell.h" -#import "JXCategoryIndicatorCellModel.h" - -@interface JXCategoryIndicatorCell () -@property (nonatomic, strong) UIView *separatorLine; -@end - -@implementation JXCategoryIndicatorCell - -- (void)initializeViews { - [super initializeViews]; - - self.separatorLine = [[UIView alloc] init]; - self.separatorLine.hidden = YES; - [self.contentView addSubview:self.separatorLine]; -} - -- (void)layoutSubviews { - [super layoutSubviews]; - - JXCategoryIndicatorCellModel *model = (JXCategoryIndicatorCellModel *)self.cellModel; - CGFloat lineWidth = model.separatorLineSize.width; - CGFloat lineHeight = model.separatorLineSize.height; - - self.separatorLine.frame = CGRectMake(self.bounds.size.width - lineWidth + self.cellModel.cellSpacing/2, (self.bounds.size.height - lineHeight)/2.0, lineWidth, lineHeight); -} - -- (void)reloadData:(JXCategoryBaseCellModel *)cellModel { - [super reloadData:cellModel]; - - JXCategoryIndicatorCellModel *model = (JXCategoryIndicatorCellModel *)cellModel; - self.separatorLine.backgroundColor = model.separatorLineColor; - self.separatorLine.hidden = !model.isSepratorLineShowEnabled; - - if (model.isCellBackgroundColorGradientEnabled) { - if (model.isSelected) { - self.contentView.backgroundColor = model.cellBackgroundSelectedColor; - }else { - self.contentView.backgroundColor = model.cellBackgroundUnselectedColor; - } - } -} - -@end diff --git a/Pods/JXCategoryView/Sources/Indicator/JXCategoryIndicatorCellModel.h b/Pods/JXCategoryView/Sources/Indicator/JXCategoryIndicatorCellModel.h deleted file mode 100644 index 21effb0..0000000 --- a/Pods/JXCategoryView/Sources/Indicator/JXCategoryIndicatorCellModel.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// JXCategoryComponentCellModel.h -// DQGuess -// -// Created by jiaxin on 2018/7/25. -// Copyright © 2018年 jingbo. All rights reserved. -// - -#import -#import "JXCategoryBaseCellModel.h" - -@interface JXCategoryIndicatorCellModel : JXCategoryBaseCellModel - -@property (nonatomic, assign, getter=isSepratorLineShowEnabled) BOOL sepratorLineShowEnabled; -@property (nonatomic, strong) UIColor *separatorLineColor; -@property (nonatomic, assign) CGSize separatorLineSize; - -@property (nonatomic, assign) CGRect backgroundViewMaskFrame; // 底部指示器的 frame 转换到 cell 的 frame - -@property (nonatomic, assign, getter=isCellBackgroundColorGradientEnabled) BOOL cellBackgroundColorGradientEnabled; -@property (nonatomic, strong) UIColor *cellBackgroundSelectedColor; -@property (nonatomic, strong) UIColor *cellBackgroundUnselectedColor; - -@end diff --git a/Pods/JXCategoryView/Sources/Indicator/JXCategoryIndicatorCellModel.m b/Pods/JXCategoryView/Sources/Indicator/JXCategoryIndicatorCellModel.m deleted file mode 100644 index d79d6f4..0000000 --- a/Pods/JXCategoryView/Sources/Indicator/JXCategoryIndicatorCellModel.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// JXCategoryComponentCellModel.m -// DQGuess -// -// Created by jiaxin on 2018/7/25. -// Copyright © 2018年 jingbo. All rights reserved. -// - -#import "JXCategoryIndicatorCellModel.h" - -@implementation JXCategoryIndicatorCellModel - -@end diff --git a/Pods/JXCategoryView/Sources/Indicator/JXCategoryIndicatorView.h b/Pods/JXCategoryView/Sources/Indicator/JXCategoryIndicatorView.h deleted file mode 100644 index a172268..0000000 --- a/Pods/JXCategoryView/Sources/Indicator/JXCategoryIndicatorView.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// JXCategoryComponentView.h -// DQGuess -// -// Created by jiaxin on 2018/7/25. -// Copyright © 2018年 jingbo. All rights reserved. -// - -#import "JXCategoryBaseView.h" -#import "JXCategoryIndicatorCell.h" -#import "JXCategoryIndicatorCellModel.h" -#import "JXCategoryIndicatorProtocol.h" - -@interface JXCategoryIndicatorView : JXCategoryBaseView - -@property (nonatomic, strong) NSArray *> *indicators; - -//----------------------ellBackgroundColor-----------------------// -//cell的背景色是否渐变。默认:NO -@property (nonatomic, assign, getter=isCellBackgroundColorGradientEnabled) BOOL cellBackgroundColorGradientEnabled; -//cell普通状态的背景色。默认:[UIColor clearColor] -@property (nonatomic, strong) UIColor *cellBackgroundUnselectedColor; -//cell选中状态的背景色。默认:[UIColor grayColor] -@property (nonatomic, strong) UIColor *cellBackgroundSelectedColor; - -//----------------------separatorLine-----------------------// -//是否显示分割线。默认为NO -@property (nonatomic, assign, getter=isSeparatorLineShowEnabled) BOOL separatorLineShowEnabled; -//分割线颜色。默认为[UIColor lightGrayColor] -@property (nonatomic, strong) UIColor *separatorLineColor; -//分割线的size。默认为CGSizeMake(1/[UIScreen mainScreen].scale, 20) -@property (nonatomic, assign) CGSize separatorLineSize; - -@end - -@interface JXCategoryIndicatorView (UISubclassingIndicatorHooks) - -/** - 当contentScrollView滚动时候,处理跟随手势的过渡效果。 - 根据cellModel的左右位置、是否选中、ratio进行过滤数据计算。 - - @param leftCellModel 左边的cellModel - @param rightCellModel 右边的cellModel - @param ratio 从左往右方向计算的百分比 - */ -- (void)refreshLeftCellModel:(JXCategoryBaseCellModel *)leftCellModel rightCellModel:(JXCategoryBaseCellModel *)rightCellModel ratio:(CGFloat)ratio NS_REQUIRES_SUPER; - -@end diff --git a/Pods/JXCategoryView/Sources/Indicator/JXCategoryIndicatorView.m b/Pods/JXCategoryView/Sources/Indicator/JXCategoryIndicatorView.m deleted file mode 100644 index 861ccde..0000000 --- a/Pods/JXCategoryView/Sources/Indicator/JXCategoryIndicatorView.m +++ /dev/null @@ -1,209 +0,0 @@ -// -// JXCategoryIndicatorView.m -// DQGuess -// -// Created by jiaxin on 2018/7/25. -// Copyright © 2018年 jingbo. All rights reserved. -// - -#import "JXCategoryIndicatorView.h" -#import "JXCategoryIndicatorBackgroundView.h" -#import "JXCategoryFactory.h" - -@interface JXCategoryIndicatorView() - -@end - -@implementation JXCategoryIndicatorView - -- (void)initializeData { - [super initializeData]; - - _separatorLineShowEnabled = NO; - _separatorLineColor = [UIColor lightGrayColor]; - _separatorLineSize = CGSizeMake(1/[UIScreen mainScreen].scale, 20); - _cellBackgroundColorGradientEnabled = NO; - _cellBackgroundUnselectedColor = [UIColor whiteColor]; - _cellBackgroundSelectedColor = [UIColor lightGrayColor]; -} - -- (void)initializeViews { - [super initializeViews]; -} - -- (void)setIndicators:(NSArray *> *)indicators { - _indicators = indicators; - - self.collectionView.indicators = indicators; -} - -- (void)refreshState { - [super refreshState]; - - CGRect selectedCellFrame = CGRectZero; - JXCategoryIndicatorCellModel *selectedCellModel; - for (int i = 0; i < self.dataSource.count; i++) { - JXCategoryIndicatorCellModel *cellModel = (JXCategoryIndicatorCellModel *)self.dataSource[i]; - cellModel.sepratorLineShowEnabled = self.isSeparatorLineShowEnabled; - cellModel.separatorLineColor = self.separatorLineColor; - cellModel.separatorLineSize = self.separatorLineSize; - cellModel.backgroundViewMaskFrame = CGRectZero; - cellModel.cellBackgroundColorGradientEnabled = self.isCellBackgroundColorGradientEnabled; - cellModel.cellBackgroundSelectedColor = self.cellBackgroundSelectedColor; - cellModel.cellBackgroundUnselectedColor = self.cellBackgroundUnselectedColor; - if (i == self.dataSource.count - 1) { - cellModel.sepratorLineShowEnabled = NO; - } - if (i == self.selectedIndex) { - selectedCellModel = cellModel; - selectedCellFrame = [self getTargetCellFrame:i]; - } - } - - for (UIView *indicator in self.indicators) { - if (self.dataSource.count <= 0) { - indicator.hidden = YES; - } else { - indicator.hidden = NO; - JXCategoryIndicatorParamsModel *indicatorParamsModel = [[JXCategoryIndicatorParamsModel alloc] init]; - indicatorParamsModel.selectedIndex = self.selectedIndex; - indicatorParamsModel.selectedCellFrame = selectedCellFrame; - [indicator jx_refreshState:indicatorParamsModel]; - - if ([indicator isKindOfClass:[JXCategoryIndicatorBackgroundView class]]) { - CGRect maskFrame = indicator.frame; - maskFrame.origin.x = maskFrame.origin.x - selectedCellFrame.origin.x; - selectedCellModel.backgroundViewMaskFrame = maskFrame; - } - } - } -} - -- (void)refreshSelectedCellModel:(JXCategoryBaseCellModel *)selectedCellModel unselectedCellModel:(JXCategoryBaseCellModel *)unselectedCellModel { - [super refreshSelectedCellModel:selectedCellModel unselectedCellModel:unselectedCellModel]; - - JXCategoryIndicatorCellModel *myUnselectedCellModel = (JXCategoryIndicatorCellModel *)unselectedCellModel; - myUnselectedCellModel.backgroundViewMaskFrame = CGRectZero; - myUnselectedCellModel.cellBackgroundUnselectedColor = self.cellBackgroundUnselectedColor; - myUnselectedCellModel.cellBackgroundSelectedColor = self.cellBackgroundSelectedColor; - - JXCategoryIndicatorCellModel *myselectedCellModel = (JXCategoryIndicatorCellModel *)selectedCellModel; - myselectedCellModel.cellBackgroundUnselectedColor = self.cellBackgroundUnselectedColor; - myselectedCellModel.cellBackgroundSelectedColor = self.cellBackgroundSelectedColor; -} - -- (void)contentOffsetOfContentScrollViewDidChanged:(CGPoint)contentOffset { - [super contentOffsetOfContentScrollViewDidChanged:contentOffset]; - - CGFloat ratio = contentOffset.x/self.contentScrollView.bounds.size.width; - if (ratio > self.dataSource.count - 1 || ratio < 0) { - //超过了边界,不需要处理 - return; - } - ratio = MAX(0, MIN(self.dataSource.count - 1, ratio)); - NSInteger baseIndex = floorf(ratio); - if (baseIndex + 1 >= self.dataSource.count) { - //右边越界了,不需要处理 - return; - } - CGFloat remainderRatio = ratio - baseIndex; - - CGRect leftCellFrame = [self getTargetCellFrame:baseIndex]; - CGRect rightCellFrame = [self getTargetCellFrame:baseIndex + 1]; - - JXCategoryIndicatorParamsModel *indicatorParamsModel = [[JXCategoryIndicatorParamsModel alloc] init]; - indicatorParamsModel.selectedIndex = self.selectedIndex; - indicatorParamsModel.leftIndex = baseIndex; - indicatorParamsModel.leftCellFrame = leftCellFrame; - indicatorParamsModel.rightIndex = baseIndex + 1; - indicatorParamsModel.rightCellFrame = rightCellFrame; - indicatorParamsModel.percent = remainderRatio; - if (remainderRatio == 0) { - for (UIView *indicator in self.indicators) { - [indicator jx_contentScrollViewDidScroll:indicatorParamsModel]; - } - } else { - JXCategoryIndicatorCellModel *leftCellModel = (JXCategoryIndicatorCellModel *)self.dataSource[baseIndex]; - leftCellModel.selectedType = JXCategoryCellSelectedTypeUnknown; - JXCategoryIndicatorCellModel *rightCellModel = (JXCategoryIndicatorCellModel *)self.dataSource[baseIndex + 1]; - rightCellModel.selectedType = JXCategoryCellSelectedTypeUnknown; - [self refreshLeftCellModel:leftCellModel rightCellModel:rightCellModel ratio:remainderRatio]; - - for (UIView *indicator in self.indicators) { - [indicator jx_contentScrollViewDidScroll:indicatorParamsModel]; - if ([indicator isKindOfClass:[JXCategoryIndicatorBackgroundView class]]) { - CGRect leftMaskFrame = indicator.frame; - leftMaskFrame.origin.x = leftMaskFrame.origin.x - leftCellFrame.origin.x; - leftCellModel.backgroundViewMaskFrame = leftMaskFrame; - - CGRect rightMaskFrame = indicator.frame; - rightMaskFrame.origin.x = rightMaskFrame.origin.x - rightCellFrame.origin.x; - rightCellModel.backgroundViewMaskFrame = rightMaskFrame; - } - } - - JXCategoryBaseCell *leftCell = (JXCategoryBaseCell *)[self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:baseIndex inSection:0]]; - [leftCell reloadData:leftCellModel]; - JXCategoryBaseCell *rightCell = (JXCategoryBaseCell *)[self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:baseIndex + 1 inSection:0]]; - [rightCell reloadData:rightCellModel]; - } -} - -- (BOOL)selectCellAtIndex:(NSInteger)index selectedType:(JXCategoryCellSelectedType)selectedType { - NSInteger lastSelectedIndex = self.selectedIndex; - BOOL result = [super selectCellAtIndex:index selectedType:selectedType]; - if (!result) { - return NO; - } - - CGRect clickedCellFrame = [self getTargetSelectedCellFrame:index selectedType:selectedType]; - - JXCategoryIndicatorCellModel *selectedCellModel = (JXCategoryIndicatorCellModel *)self.dataSource[index]; - selectedCellModel.selectedType = selectedType; - for (UIView *indicator in self.indicators) { - JXCategoryIndicatorParamsModel *indicatorParamsModel = [[JXCategoryIndicatorParamsModel alloc] init]; - indicatorParamsModel.lastSelectedIndex = lastSelectedIndex; - indicatorParamsModel.selectedIndex = index; - indicatorParamsModel.selectedCellFrame = clickedCellFrame; - indicatorParamsModel.selectedType = selectedType; - [indicator jx_selectedCell:indicatorParamsModel]; - if ([indicator isKindOfClass:[JXCategoryIndicatorBackgroundView class]]) { - CGRect maskFrame = indicator.frame; - maskFrame.origin.x = maskFrame.origin.x - clickedCellFrame.origin.x; - selectedCellModel.backgroundViewMaskFrame = maskFrame; - } - } - - JXCategoryIndicatorCell *selectedCell = (JXCategoryIndicatorCell *)[self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]]; - [selectedCell reloadData:selectedCellModel]; - - return YES; -} - -@end - -@implementation JXCategoryIndicatorView (UISubclassingIndicatorHooks) - -- (void)refreshLeftCellModel:(JXCategoryBaseCellModel *)leftCellModel rightCellModel:(JXCategoryBaseCellModel *)rightCellModel ratio:(CGFloat)ratio { - if (self.isCellBackgroundColorGradientEnabled) { - //处理cell背景色渐变 - JXCategoryIndicatorCellModel *leftModel = (JXCategoryIndicatorCellModel *)leftCellModel; - JXCategoryIndicatorCellModel *rightModel = (JXCategoryIndicatorCellModel *)rightCellModel; - if (leftModel.isSelected) { - leftModel.cellBackgroundSelectedColor = [JXCategoryFactory interpolationColorFrom:self.cellBackgroundSelectedColor to:self.cellBackgroundUnselectedColor percent:ratio]; - leftModel.cellBackgroundUnselectedColor = self.cellBackgroundUnselectedColor; - }else { - leftModel.cellBackgroundUnselectedColor = [JXCategoryFactory interpolationColorFrom:self.cellBackgroundSelectedColor to:self.cellBackgroundUnselectedColor percent:ratio]; - leftModel.cellBackgroundSelectedColor = self.cellBackgroundSelectedColor; - } - if (rightModel.isSelected) { - rightModel.cellBackgroundSelectedColor = [JXCategoryFactory interpolationColorFrom:self.cellBackgroundUnselectedColor to:self.cellBackgroundSelectedColor percent:ratio]; - rightModel.cellBackgroundUnselectedColor = self.cellBackgroundUnselectedColor; - }else { - rightModel.cellBackgroundUnselectedColor = [JXCategoryFactory interpolationColorFrom:self.cellBackgroundUnselectedColor to:self.cellBackgroundSelectedColor percent:ratio]; - rightModel.cellBackgroundSelectedColor = self.cellBackgroundSelectedColor; - } - } -} - -@end diff --git a/Pods/JXCategoryView/Sources/JXCategoryView.h b/Pods/JXCategoryView/Sources/JXCategoryView.h deleted file mode 100644 index d90c0cc..0000000 --- a/Pods/JXCategoryView/Sources/JXCategoryView.h +++ /dev/null @@ -1,23 +0,0 @@ - - -#import "JXCategoryBaseView.h" -#import "JXCategoryIndicatorView.h" -#import "JXCategoryTitleView.h" -#import "JXCategoryImageView.h" -#import "JXCategoryTitleImageView.h" -#import "JXCategoryNumberView.h" -#import "JXCategoryDotView.h" - -#import "JXCategoryFactory.h" -#import "JXCategoryIndicatorProtocol.h" -#import "JXCategoryViewDefines.h" -#import "JXCategoryListContainerView.h" - -#import "JXCategoryIndicatorComponentView.h" -#import "JXCategoryIndicatorLineView.h" -#import "JXCategoryIndicatorTriangleView.h" -#import "JXCategoryIndicatorImageView.h" -#import "JXCategoryIndicatorBackgroundView.h" -#import "JXCategoryIndicatorBallView.h" -#import "JXCategoryIndicatorRainbowLineView.h" - diff --git a/Pods/JXCategoryView/Sources/Number/JXCategoryNumberCell.h b/Pods/JXCategoryView/Sources/Number/JXCategoryNumberCell.h deleted file mode 100644 index acbc2db..0000000 --- a/Pods/JXCategoryView/Sources/Number/JXCategoryNumberCell.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// JXCategoryNumberCell.h -// DQGuess -// -// Created by jiaxin on 2018/4/9. -// Copyright © 2018年 jingbo. All rights reserved. -// - -#import "JXCategoryTitleCell.h" - -@interface JXCategoryNumberCell : JXCategoryTitleCell -@property (nonatomic, strong) UILabel *numberLabel; -@end diff --git a/Pods/JXCategoryView/Sources/Number/JXCategoryNumberCell.m b/Pods/JXCategoryView/Sources/Number/JXCategoryNumberCell.m deleted file mode 100644 index e9bcbd4..0000000 --- a/Pods/JXCategoryView/Sources/Number/JXCategoryNumberCell.m +++ /dev/null @@ -1,62 +0,0 @@ -// -// JXCategoryNumberCell.m -// DQGuess -// -// Created by jiaxin on 2018/4/9. -// Copyright © 2018年 jingbo. All rights reserved. -// - -#import "JXCategoryNumberCell.h" -#import "JXCategoryNumberCellModel.h" - -@interface JXCategoryNumberCell () -@property (nonatomic, strong) NSLayoutConstraint *numberCenterXConstraint; -@property (nonatomic, strong) NSLayoutConstraint *numberCenterYConstraint; -@property (nonatomic, strong) NSLayoutConstraint *numberHeightConstraint; -@property (nonatomic, strong) NSLayoutConstraint *numberWidthConstraint; -@end - -@implementation JXCategoryNumberCell - -- (void)prepareForReuse { - [super prepareForReuse]; - - self.numberLabel.text = nil; -} - -- (void)initializeViews { - [super initializeViews]; - - self.numberLabel = [[UILabel alloc] init]; - self.numberLabel.textAlignment = NSTextAlignmentCenter; - self.numberLabel.layer.masksToBounds = YES; - [self.contentView addSubview:self.numberLabel]; - self.numberLabel.translatesAutoresizingMaskIntoConstraints = NO; - self.numberCenterXConstraint = [self.numberLabel.centerXAnchor constraintEqualToAnchor:self.titleLabel.trailingAnchor]; - self.numberCenterYConstraint = [self.numberLabel.centerYAnchor constraintEqualToAnchor:self.titleLabel.topAnchor]; - self.numberHeightConstraint = [self.numberLabel.heightAnchor constraintEqualToConstant:0]; - self.numberWidthConstraint = [self.numberLabel.widthAnchor constraintEqualToConstant:0]; - [NSLayoutConstraint activateConstraints:@[self.numberCenterXConstraint, self.numberCenterYConstraint, self.numberWidthConstraint, self.numberHeightConstraint]]; -} - -- (void)reloadData:(JXCategoryBaseCellModel *)cellModel { - [super reloadData:cellModel]; - - JXCategoryNumberCellModel *myCellModel = (JXCategoryNumberCellModel *)cellModel; - self.numberLabel.hidden = (myCellModel.count == 0); - self.numberLabel.backgroundColor = myCellModel.numberBackgroundColor; - self.numberLabel.font = myCellModel.numberLabelFont; - self.numberLabel.textColor = myCellModel.numberTitleColor; - self.numberLabel.text = myCellModel.numberString; - self.numberLabel.layer.cornerRadius = myCellModel.numberLabelHeight/2.0; - self.numberHeightConstraint.constant = myCellModel.numberLabelHeight; - self.numberCenterXConstraint.constant = myCellModel.numberLabelOffset.x; - self.numberCenterYConstraint.constant = myCellModel.numberLabelOffset.y; - if (myCellModel.count < 10 && myCellModel.shouldMakeRoundWhenSingleNumber) { - self.numberWidthConstraint.constant = myCellModel.numberLabelHeight; - }else { - self.numberWidthConstraint.constant = myCellModel.numberStringWidth + myCellModel.numberLabelWidthIncrement; - } -} - -@end diff --git a/Pods/JXCategoryView/Sources/Number/JXCategoryNumberCellModel.h b/Pods/JXCategoryView/Sources/Number/JXCategoryNumberCellModel.h deleted file mode 100644 index 0622a64..0000000 --- a/Pods/JXCategoryView/Sources/Number/JXCategoryNumberCellModel.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// JXCategoryNumberCellModel.h -// DQGuess -// -// Created by jiaxin on 2018/4/24. -// Copyright © 2018年 jingbo. All rights reserved. -// - -#import "JXCategoryTitleCellModel.h" - -@interface JXCategoryNumberCellModel : JXCategoryTitleCellModel - -@property (nonatomic, assign) NSInteger count; -@property (nonatomic, copy) NSString *numberString; -@property (nonatomic, assign, readonly) CGFloat numberStringWidth; -@property (nonatomic, copy) void(^numberStringFormatterBlock)(NSInteger number); -@property (nonatomic, strong) UIColor *numberBackgroundColor; -@property (nonatomic, strong) UIColor *numberTitleColor; -@property (nonatomic, assign) CGFloat numberLabelWidthIncrement; -@property (nonatomic, assign) CGFloat numberLabelHeight; -@property (nonatomic, strong) UIFont *numberLabelFont; -@property (nonatomic, assign) CGPoint numberLabelOffset; -@property (nonatomic, assign) BOOL shouldMakeRoundWhenSingleNumber; - -@end diff --git a/Pods/JXCategoryView/Sources/Number/JXCategoryNumberCellModel.m b/Pods/JXCategoryView/Sources/Number/JXCategoryNumberCellModel.m deleted file mode 100644 index 43a940a..0000000 --- a/Pods/JXCategoryView/Sources/Number/JXCategoryNumberCellModel.m +++ /dev/null @@ -1,37 +0,0 @@ -// -// JXCategoryNumberCellModel.m -// DQGuess -// -// Created by jiaxin on 2018/4/24. -// Copyright © 2018年 jingbo. All rights reserved. -// - -#import "JXCategoryNumberCellModel.h" - -@implementation JXCategoryNumberCellModel - -- (void)setNumberString:(NSString *)numberString { - _numberString = numberString; - - [self updateNumberSizeWidthIfNeeded]; -} - -- (void)setNumberLabelHeight:(CGFloat)numberLabelHeight { - _numberLabelHeight = numberLabelHeight; - - [self updateNumberSizeWidthIfNeeded]; -} - -- (void)setNumberLabelFont:(UIFont *)numberLabelFont { - _numberLabelFont = numberLabelFont; - - [self updateNumberSizeWidthIfNeeded]; -} - -- (void)updateNumberSizeWidthIfNeeded { - if (self.numberLabelFont != nil) { - _numberStringWidth = [self.numberString boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, self.numberLabelHeight) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : self.numberLabelFont} context:nil].size.width; - } -} - -@end diff --git a/Pods/JXCategoryView/Sources/Number/JXCategoryNumberView.h b/Pods/JXCategoryView/Sources/Number/JXCategoryNumberView.h deleted file mode 100644 index af033a4..0000000 --- a/Pods/JXCategoryView/Sources/Number/JXCategoryNumberView.h +++ /dev/null @@ -1,60 +0,0 @@ -// -// JXCategoryNumberView.h -// DQGuess -// -// Created by jiaxin on 2018/4/9. -// Copyright © 2018年 jingbo. All rights reserved. -// - -#import "JXCategoryTitleView.h" -#import "JXCategoryNumberCell.h" -#import "JXCategoryNumberCellModel.h" - -@interface JXCategoryNumberView : JXCategoryTitleView - -/** - 需要与titles的count对应 - */ -@property (nonatomic, strong) NSArray *counts; - -/** - 内部默认不会格式化数字,直接转成字符串显示。比如业务需要数字超过999显示999+,可以通过该block实现。 - */ -@property (nonatomic, copy) NSString *(^numberStringFormatterBlock)(NSInteger number); - -/** - numberLabel的font,默认:[UIFont systemFontOfSize:11] - */ -@property (nonatomic, strong) UIFont *numberLabelFont; - -/** - 数字的背景色,默认:[UIColor colorWithRed:241/255.0 green:147/255.0 blue:95/255.0 alpha:1] - */ -@property (nonatomic, strong) UIColor *numberBackgroundColor; - -/** - 数字的title颜色,默认:[UIColor whiteColor] - */ -@property (nonatomic, strong) UIColor *numberTitleColor; - -/** - numberLabel的宽度补偿,label真实的宽度是文字内容的宽度加上补偿的宽度,默认:10 - */ -@property (nonatomic, assign) CGFloat numberLabelWidthIncrement; - -/** - numberLabel的高度,默认:14 - */ -@property (nonatomic, assign) CGFloat numberLabelHeight; - -/** - numberLabel x,y方向的偏移 (+值:水平方向向右,竖直方向向下) - */ -@property (nonatomic, assign) CGPoint numberLabelOffset; - -/** -当是单一数字时,是否让numberLabel变成圆。即numberLabel的宽度等于高度,cornerRadius等于高度/2。当为true,单一数字时会忽略numberLabelWidthIncrement属性。默认为NO; -*/ -@property (nonatomic, assign) BOOL shouldMakeRoundWhenSingleNumber; - -@end diff --git a/Pods/JXCategoryView/Sources/Number/JXCategoryNumberView.m b/Pods/JXCategoryView/Sources/Number/JXCategoryNumberView.m deleted file mode 100644 index c7a7b40..0000000 --- a/Pods/JXCategoryView/Sources/Number/JXCategoryNumberView.m +++ /dev/null @@ -1,61 +0,0 @@ -// -// JXCategoryNumberView.m -// DQGuess -// -// Created by jiaxin on 2018/4/9. -// Copyright © 2018年 jingbo. All rights reserved. -// - -#import "JXCategoryNumberView.h" - -@implementation JXCategoryNumberView - -- (void)dealloc { - self.numberStringFormatterBlock = nil; -} - -- (void)initializeData { - [super initializeData]; - - self.cellSpacing = 25; - _numberTitleColor = [UIColor whiteColor]; - _numberBackgroundColor = [UIColor colorWithRed:241/255.0 green:147/255.0 blue:95/255.0 alpha:1]; - _numberLabelHeight = 14; - _numberLabelWidthIncrement = 10; - _numberLabelFont = [UIFont systemFontOfSize:11]; - _shouldMakeRoundWhenSingleNumber = NO; -} - -- (Class)preferredCellClass { - return [JXCategoryNumberCell class]; -} - -- (void)refreshDataSource { - NSMutableArray *tempArray = [NSMutableArray arrayWithCapacity:self.titles.count]; - for (int i = 0; i < self.titles.count; i++) { - JXCategoryNumberCellModel *cellModel = [[JXCategoryNumberCellModel alloc] init]; - [tempArray addObject:cellModel]; - } - self.dataSource = [NSArray arrayWithArray:tempArray]; -} - -- (void)refreshCellModel:(JXCategoryBaseCellModel *)cellModel index:(NSInteger)index { - [super refreshCellModel:cellModel index:index]; - - JXCategoryNumberCellModel *myCellModel = (JXCategoryNumberCellModel *)cellModel; - myCellModel.count = [self.counts[index] integerValue]; - if (self.numberStringFormatterBlock != nil) { - myCellModel.numberString = self.numberStringFormatterBlock(myCellModel.count); - }else { - myCellModel.numberString = [NSString stringWithFormat:@"%ld", (long)myCellModel.count]; - } - myCellModel.numberBackgroundColor = self.numberBackgroundColor; - myCellModel.numberTitleColor = self.numberTitleColor; - myCellModel.numberLabelHeight = self.numberLabelHeight; - myCellModel.numberLabelOffset = self.numberLabelOffset; - myCellModel.numberLabelWidthIncrement = self.numberLabelWidthIncrement; - myCellModel.numberLabelFont = self.numberLabelFont; - myCellModel.shouldMakeRoundWhenSingleNumber = self.shouldMakeRoundWhenSingleNumber; -} - -@end diff --git a/Pods/JXCategoryView/Sources/RLTManager/RTLManager.h b/Pods/JXCategoryView/Sources/RLTManager/RTLManager.h deleted file mode 100644 index 7728ffe..0000000 --- a/Pods/JXCategoryView/Sources/RLTManager/RTLManager.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// RTLManager.h -// JXCategoryView -// -// Created by jiaxin on 2020/7/3. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface RTLManager : NSObject - -+ (BOOL)supportRTL; -+ (void)horizontalFlipView:(UIView *)view; -+ (void)horizontalFlipViewIfNeeded:(UIView *)view; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/JXCategoryView/Sources/RLTManager/RTLManager.m b/Pods/JXCategoryView/Sources/RLTManager/RTLManager.m deleted file mode 100644 index 9ce9eab..0000000 --- a/Pods/JXCategoryView/Sources/RLTManager/RTLManager.m +++ /dev/null @@ -1,26 +0,0 @@ -// -// RTLManager.m -// JXCategoryView -// -// Created by jiaxin on 2020/7/3. -// - -#import "RTLManager.h" - -@implementation RTLManager - -+ (BOOL)supportRTL { - return [UIView userInterfaceLayoutDirectionForSemanticContentAttribute:UIView.appearance.semanticContentAttribute] == UIUserInterfaceLayoutDirectionRightToLeft; -} - -+ (void)horizontalFlipView:(UIView *)view { - view.transform = CGAffineTransformMakeScale(-1, 1); -} - -+ (void)horizontalFlipViewIfNeeded:(UIView *)view { - if ([self supportRTL]) { - [self horizontalFlipView:view]; - } -} - -@end diff --git a/Pods/JXCategoryView/Sources/Title/JXCategoryTitleCell.h b/Pods/JXCategoryView/Sources/Title/JXCategoryTitleCell.h deleted file mode 100644 index 8ab54d6..0000000 --- a/Pods/JXCategoryView/Sources/Title/JXCategoryTitleCell.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// JXCategoryTitleCell.h -// UI系列测试 -// -// Created by jiaxin on 2018/3/15. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryIndicatorCell.h" -#import "JXCategoryViewDefines.h" -@class JXCategoryTitleCellModel; - -@interface JXCategoryTitleCell : JXCategoryIndicatorCell - -@property (nonatomic, strong) UILabel *titleLabel; -@property (nonatomic, strong) UILabel *maskTitleLabel; -@property (nonatomic, strong) NSLayoutConstraint *titleLabelCenterX; -@property (nonatomic, strong) NSLayoutConstraint *titleLabelCenterY; -@property (nonatomic, strong) NSLayoutConstraint *maskTitleLabelCenterX; - -- (JXCategoryCellSelectedAnimationBlock)preferredTitleZoomAnimationBlock:(JXCategoryTitleCellModel *)cellModel baseScale:(CGFloat)baseScale; - -- (JXCategoryCellSelectedAnimationBlock)preferredTitleStrokeWidthAnimationBlock:(JXCategoryTitleCellModel *)cellModel attributedString:(NSMutableAttributedString *)attributedString; - -- (JXCategoryCellSelectedAnimationBlock)preferredTitleColorAnimationBlock:(JXCategoryTitleCellModel *)cellModel; - -@end diff --git a/Pods/JXCategoryView/Sources/Title/JXCategoryTitleCell.m b/Pods/JXCategoryView/Sources/Title/JXCategoryTitleCell.m deleted file mode 100644 index 2f5edfb..0000000 --- a/Pods/JXCategoryView/Sources/Title/JXCategoryTitleCell.m +++ /dev/null @@ -1,233 +0,0 @@ -// -// JXCategoryTitleCell.m -// UI系列测试 -// -// Created by jiaxin on 2018/3/15. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryTitleCell.h" -#import "JXCategoryTitleCellModel.h" -#import "JXCategoryFactory.h" - -@interface JXCategoryTitleCell () -@property (nonatomic, strong) CALayer *titleMaskLayer; -@property (nonatomic, strong) CALayer *maskTitleMaskLayer; -@property (nonatomic, strong) NSLayoutConstraint *maskTitleLabelCenterY; -@end - -@implementation JXCategoryTitleCell - -- (void)initializeViews { - [super initializeViews]; - - self.isAccessibilityElement = true; - self.accessibilityTraits = UIAccessibilityTraitButton; - _titleLabel = [[UILabel alloc] init]; - self.titleLabel.clipsToBounds = YES; - self.titleLabel.textAlignment = NSTextAlignmentCenter; - self.titleLabel.translatesAutoresizingMaskIntoConstraints = NO; - [self.contentView addSubview:self.titleLabel]; - - self.titleLabelCenterX = [self.titleLabel.centerXAnchor constraintEqualToAnchor:self.contentView.centerXAnchor constant:0]; - self.titleLabelCenterY = [self.titleLabel.centerYAnchor constraintEqualToAnchor:self.contentView.centerYAnchor constant:0]; - - _titleMaskLayer = [CALayer layer]; - self.titleMaskLayer.backgroundColor = [UIColor redColor].CGColor; - - _maskTitleLabel = [[UILabel alloc] init]; - self.maskTitleLabel.hidden = YES; - self.maskTitleLabel.translatesAutoresizingMaskIntoConstraints = NO; - self.maskTitleLabel.textAlignment = NSTextAlignmentCenter; - [self.contentView addSubview:self.maskTitleLabel]; - - self.maskTitleLabelCenterX = [self.maskTitleLabel.centerXAnchor constraintEqualToAnchor:self.contentView.centerXAnchor]; - self.maskTitleLabelCenterY = [self.maskTitleLabel.centerYAnchor constraintEqualToAnchor:self.contentView.centerYAnchor]; - - _maskTitleMaskLayer = [CALayer layer]; - self.maskTitleMaskLayer.backgroundColor = [UIColor redColor].CGColor; - self.maskTitleLabel.layer.mask = self.maskTitleMaskLayer; - - [NSLayoutConstraint activateConstraints:@[self.titleLabelCenterX, self.titleLabelCenterY, self.maskTitleLabelCenterX, self.maskTitleLabelCenterY]]; -} - -- (void)layoutSubviews { - [super layoutSubviews]; - - JXCategoryTitleCellModel *myCellModel = (JXCategoryTitleCellModel *)self.cellModel; - switch (myCellModel.titleLabelAnchorPointStyle) { - case JXCategoryTitleLabelAnchorPointStyleCenter: { - self.titleLabel.layer.anchorPoint = CGPointMake(0.5, 0.5); - self.maskTitleLabel.layer.anchorPoint = CGPointMake(0.5, 0.5); - self.titleLabelCenterY.constant = 0 + myCellModel.titleLabelVerticalOffset; - break; - } - case JXCategoryTitleLabelAnchorPointStyleTop: { - self.titleLabel.layer.anchorPoint = CGPointMake(0.5, 0); - self.maskTitleLabel.layer.anchorPoint = CGPointMake(0.5, 0); - CGFloat percent = (myCellModel.titleLabelCurrentZoomScale - myCellModel.titleLabelNormalZoomScale)/(myCellModel.titleLabelSelectedZoomScale - myCellModel.titleLabelNormalZoomScale); - self.titleLabelCenterY.constant = -myCellModel.titleHeight/2 - myCellModel.titleLabelVerticalOffset - myCellModel.titleLabelZoomSelectedVerticalOffset*percent; - break; - } - case JXCategoryTitleLabelAnchorPointStyleBottom: { - self.titleLabel.layer.anchorPoint = CGPointMake(0.5, 1); - self.maskTitleLabel.layer.anchorPoint = CGPointMake(0.5, 1); - CGFloat percent = (myCellModel.titleLabelCurrentZoomScale - myCellModel.titleLabelNormalZoomScale)/(myCellModel.titleLabelSelectedZoomScale - myCellModel.titleLabelNormalZoomScale); - self.titleLabelCenterY.constant = myCellModel.titleHeight/2 + myCellModel.titleLabelVerticalOffset + myCellModel.titleLabelZoomSelectedVerticalOffset*percent; - break; - } - } -} - - -- (void)reloadData:(JXCategoryBaseCellModel *)cellModel { - [super reloadData:cellModel]; - - JXCategoryTitleCellModel *myCellModel = (JXCategoryTitleCellModel *)cellModel; - self.accessibilityLabel = myCellModel.title; - self.titleLabel.numberOfLines = myCellModel.titleNumberOfLines; - self.maskTitleLabel.numberOfLines = myCellModel.titleNumberOfLines; - - if (myCellModel.isTitleLabelZoomEnabled) { - //先把font设置为缩放的最大值,再缩小到最小值,最后根据当前的titleLabelZoomScale值,进行缩放更新。这样就能避免transform从小到大时字体模糊 - UIFont *maxScaleFont = [UIFont fontWithDescriptor:myCellModel.titleFont.fontDescriptor size:myCellModel.titleFont.pointSize*myCellModel.titleLabelSelectedZoomScale]; - CGFloat baseScale = myCellModel.titleFont.lineHeight/maxScaleFont.lineHeight; - if (myCellModel.isSelectedAnimationEnabled && [self checkCanStartSelectedAnimation:myCellModel]) { - JXCategoryCellSelectedAnimationBlock block = [self preferredTitleZoomAnimationBlock:myCellModel baseScale:baseScale]; - [self addSelectedAnimationBlock:block]; - } else { - self.titleLabel.font = maxScaleFont; - self.maskTitleLabel.font = maxScaleFont; - CGAffineTransform currentTransform = CGAffineTransformMakeScale(baseScale*myCellModel.titleLabelCurrentZoomScale, baseScale*myCellModel.titleLabelCurrentZoomScale); - self.titleLabel.transform = currentTransform; - self.maskTitleLabel.transform = currentTransform; - } - } else { - if (myCellModel.isSelected) { - self.titleLabel.font = myCellModel.titleSelectedFont; - self.maskTitleLabel.font = myCellModel.titleSelectedFont; - } else { - self.titleLabel.font = myCellModel.titleFont; - self.maskTitleLabel.font = myCellModel.titleFont; - } - } - - NSString *titleString = myCellModel.title ? myCellModel.title : @""; - NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:titleString]; - if (myCellModel.isTitleLabelStrokeWidthEnabled) { - if (myCellModel.isSelectedAnimationEnabled && [self checkCanStartSelectedAnimation:myCellModel]) { - JXCategoryCellSelectedAnimationBlock block = [self preferredTitleStrokeWidthAnimationBlock:myCellModel attributedString:attributedString]; - [self addSelectedAnimationBlock:block]; - } else { - [attributedString addAttribute:NSStrokeWidthAttributeName value:@(myCellModel.titleLabelCurrentStrokeWidth) range:NSMakeRange(0, titleString.length)]; - self.titleLabel.attributedText = attributedString; - self.maskTitleLabel.attributedText = attributedString; - } - } else { - self.titleLabel.attributedText = attributedString; - self.maskTitleLabel.attributedText = attributedString; - } - - if (myCellModel.isTitleLabelMaskEnabled) { - self.maskTitleLabel.hidden = NO; - self.titleLabel.textColor = myCellModel.titleNormalColor; - self.maskTitleLabel.textColor = myCellModel.titleSelectedColor; - [self.contentView setNeedsLayout]; - [self.contentView layoutIfNeeded]; - - CGRect topMaskframe = myCellModel.backgroundViewMaskFrame; - //将相对于cell的backgroundViewMaskFrame转换为相对于maskTitleLabel - //使用self.bounds.size.width而不是self.contentView.bounds.size.width。因为某些情况下,会出现self.bounds是正确的,而self.contentView.bounds还是重用前的状态。 - topMaskframe.origin.y = 0; - CGRect bottomMaskFrame = topMaskframe; - CGFloat maskStartX = 0; - if (self.maskTitleLabel.bounds.size.width >= self.bounds.size.width) { - topMaskframe.origin.x -= (self.maskTitleLabel.bounds.size.width -self.bounds.size.width)/2; - bottomMaskFrame.size.width = self.maskTitleLabel.bounds.size.width; - maskStartX = -(self.maskTitleLabel.bounds.size.width -self.bounds.size.width)/2; - } else { - bottomMaskFrame.size.width = self.bounds.size.width; - topMaskframe.origin.x -= (self.bounds.size.width -self.maskTitleLabel.bounds.size.width)/2; - maskStartX = 0; - } - bottomMaskFrame.origin.x = topMaskframe.origin.x; - if (topMaskframe.origin.x > maskStartX) { - bottomMaskFrame.origin.x = topMaskframe.origin.x - bottomMaskFrame.size.width; - } else { - bottomMaskFrame.origin.x = CGRectGetMaxX(topMaskframe); - } - - [CATransaction begin]; - [CATransaction setDisableActions:YES]; - if (topMaskframe.size.width > 0 && CGRectIntersectsRect(topMaskframe, self.maskTitleLabel.frame)) { - self.titleLabel.layer.mask = self.titleMaskLayer; - self.maskTitleMaskLayer.frame = topMaskframe; - self.titleMaskLayer.frame = bottomMaskFrame; - } else { - self.maskTitleMaskLayer.frame = topMaskframe; - self.titleLabel.layer.mask = nil; - } - [CATransaction commit]; - } else { - self.maskTitleLabel.hidden = YES; - self.titleLabel.layer.mask = nil; - if (myCellModel.isSelectedAnimationEnabled && [self checkCanStartSelectedAnimation:myCellModel]) { - JXCategoryCellSelectedAnimationBlock block = [self preferredTitleColorAnimationBlock:myCellModel]; - [self addSelectedAnimationBlock:block]; - } else { - self.titleLabel.textColor = myCellModel.titleCurrentColor; - } - } - - [self startSelectedAnimationIfNeeded:myCellModel]; -} - -#pragma mark - Public - -- (JXCategoryCellSelectedAnimationBlock)preferredTitleZoomAnimationBlock:(JXCategoryTitleCellModel *)cellModel baseScale:(CGFloat)baseScale { - __weak typeof(self) weakSelf = self; - return ^(CGFloat percent) { - if (cellModel.isSelected) { - //将要选中,scale从小到大插值渐变 - cellModel.titleLabelCurrentZoomScale = [JXCategoryFactory interpolationFrom:cellModel.titleLabelNormalZoomScale to:cellModel.titleLabelSelectedZoomScale percent:percent]; - } else { - //将要取消选中,scale从大到小插值渐变 - cellModel.titleLabelCurrentZoomScale = [JXCategoryFactory interpolationFrom:cellModel.titleLabelSelectedZoomScale to:cellModel.titleLabelNormalZoomScale percent:percent]; - } - CGAffineTransform currentTransform = CGAffineTransformMakeScale(baseScale*cellModel.titleLabelCurrentZoomScale, baseScale*cellModel.titleLabelCurrentZoomScale); - weakSelf.titleLabel.transform = currentTransform; - weakSelf.maskTitleLabel.transform = currentTransform; - }; -} - -- (JXCategoryCellSelectedAnimationBlock)preferredTitleStrokeWidthAnimationBlock:(JXCategoryTitleCellModel *)cellModel attributedString:(NSMutableAttributedString *)attributedString { - __weak typeof(self) weakSelf = self; - return ^(CGFloat percent) { - if (cellModel.isSelected) { - //将要选中,StrokeWidth从小到大插值渐变 - cellModel.titleLabelCurrentStrokeWidth = [JXCategoryFactory interpolationFrom:cellModel.titleLabelNormalStrokeWidth to:cellModel.titleLabelSelectedStrokeWidth percent:percent]; - } else { - //将要取消选中,StrokeWidth从大到小插值渐变 - cellModel.titleLabelCurrentStrokeWidth = [JXCategoryFactory interpolationFrom:cellModel.titleLabelSelectedStrokeWidth to:cellModel.titleLabelNormalStrokeWidth percent:percent]; - } - [attributedString addAttribute:NSStrokeWidthAttributeName value:@(cellModel.titleLabelCurrentStrokeWidth) range:NSMakeRange(0, attributedString.string.length)]; - weakSelf.titleLabel.attributedText = attributedString; - weakSelf.maskTitleLabel.attributedText = attributedString; - }; -} - -- (JXCategoryCellSelectedAnimationBlock)preferredTitleColorAnimationBlock:(JXCategoryTitleCellModel *)cellModel { - __weak typeof(self) weakSelf = self; - return ^(CGFloat percent) { - if (cellModel.isSelected) { - //将要选中,textColor从titleNormalColor到titleSelectedColor插值渐变 - cellModel.titleCurrentColor = [JXCategoryFactory interpolationColorFrom:cellModel.titleNormalColor to:cellModel.titleSelectedColor percent:percent]; - } else { - //将要取消选中,textColor从titleSelectedColor到titleNormalColor插值渐变 - cellModel.titleCurrentColor = [JXCategoryFactory interpolationColorFrom:cellModel.titleSelectedColor to:cellModel.titleNormalColor percent:percent]; - } - weakSelf.titleLabel.textColor = cellModel.titleCurrentColor; - }; -} - -@end diff --git a/Pods/JXCategoryView/Sources/Title/JXCategoryTitleCellModel.h b/Pods/JXCategoryView/Sources/Title/JXCategoryTitleCellModel.h deleted file mode 100644 index ea7a298..0000000 --- a/Pods/JXCategoryView/Sources/Title/JXCategoryTitleCellModel.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// JXCategoryTitleCellModel.h -// UI系列测试 -// -// Created by jiaxin on 2018/3/15. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryIndicatorCellModel.h" -#import -#import "JXCategoryViewDefines.h" - -@interface JXCategoryTitleCellModel : JXCategoryIndicatorCellModel - -@property (nonatomic, copy) NSString *title; - -@property (nonatomic, assign, readonly) CGFloat titleHeight; - -@property (nonatomic, assign) NSInteger titleNumberOfLines; -@property (nonatomic, assign) CGFloat titleLabelVerticalOffset; - -@property (nonatomic, strong) UIColor *titleNormalColor; -@property (nonatomic, strong) UIColor *titleCurrentColor; -@property (nonatomic, strong) UIColor *titleSelectedColor; - -@property (nonatomic, strong) UIFont *titleFont; -@property (nonatomic, strong) UIFont *titleSelectedFont; - -@property (nonatomic, assign, getter=isTitleLabelMaskEnabled) BOOL titleLabelMaskEnabled; -@property (nonatomic, assign, getter=isTitleLabelZoomEnabled) BOOL titleLabelZoomEnabled; - -@property (nonatomic, assign) CGFloat titleLabelNormalZoomScale; -@property (nonatomic, assign) CGFloat titleLabelCurrentZoomScale; -@property (nonatomic, assign) CGFloat titleLabelSelectedZoomScale; -@property (nonatomic, assign) CGFloat titleLabelZoomSelectedVerticalOffset; - -@property (nonatomic, assign, getter=isTitleLabelStrokeWidthEnabled) BOOL titleLabelStrokeWidthEnabled; -@property (nonatomic, assign) CGFloat titleLabelNormalStrokeWidth; -@property (nonatomic, assign) CGFloat titleLabelCurrentStrokeWidth; -@property (nonatomic, assign) CGFloat titleLabelSelectedStrokeWidth; - -@property (nonatomic, assign) JXCategoryTitleLabelAnchorPointStyle titleLabelAnchorPointStyle; - -@end diff --git a/Pods/JXCategoryView/Sources/Title/JXCategoryTitleCellModel.m b/Pods/JXCategoryView/Sources/Title/JXCategoryTitleCellModel.m deleted file mode 100644 index bf0a27c..0000000 --- a/Pods/JXCategoryView/Sources/Title/JXCategoryTitleCellModel.m +++ /dev/null @@ -1,31 +0,0 @@ -// -// JXCategoryTitleCellModel.m -// UI系列测试 -// -// Created by jiaxin on 2018/3/15. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryTitleCellModel.h" - -@implementation JXCategoryTitleCellModel - -- (void)setTitle:(NSString *)title { - _title = title; - - [self updateNumberSizeWidthIfNeeded]; -} - -- (void)setTitleFont:(UIFont *)titleFont { - _titleFont = titleFont; - - [self updateNumberSizeWidthIfNeeded]; -} - -- (void)updateNumberSizeWidthIfNeeded { - if (self.titleFont) { - _titleHeight = [self.title boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : self.titleFont} context:nil].size.height; - } -} - -@end diff --git a/Pods/JXCategoryView/Sources/Title/JXCategoryTitleView.h b/Pods/JXCategoryView/Sources/Title/JXCategoryTitleView.h deleted file mode 100644 index 33af07b..0000000 --- a/Pods/JXCategoryView/Sources/Title/JXCategoryTitleView.h +++ /dev/null @@ -1,63 +0,0 @@ -// -// JXCategoryView.h -// UI系列测试 -// -// Created by jiaxin on 2018/3/15. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryIndicatorView.h" -#import "JXCategoryTitleCell.h" -#import "JXCategoryTitleCellModel.h" -#import "JXCategoryViewDefines.h" - -@class JXCategoryTitleView; - -@protocol JXCategoryTitleViewDataSource -@optional -// 如果将JXCategoryTitleView嵌套进UITableView的cell,每次重用的时候,JXCategoryTitleView进行reloadData时,会重新计算所有的title宽度。所以该应用场景,需要UITableView的cellModel缓存titles的文字宽度,再通过该代理方法返回给JXCategoryTitleView。 -// 如果实现了该方法就以该方法返回的宽度为准,不触发内部默认的文字宽度计算。 -- (CGFloat)categoryTitleView:(JXCategoryTitleView *)titleView widthForTitle:(NSString *)title; -@end - - -@interface JXCategoryTitleView : JXCategoryIndicatorView - -@property (nonatomic, weak) id titleDataSource; - -@property (nonatomic, strong) NSArray *titles; - -@property (nonatomic, assign) NSInteger titleNumberOfLines; //默认:1 - -@property (nonatomic, strong) UIColor *titleColor; //默认:[UIColor blackColor] - -@property (nonatomic, strong) UIColor *titleSelectedColor; //默认:[UIColor redColor] - -@property (nonatomic, strong) UIFont *titleFont; //默认:[UIFont systemFontOfSize:15] - -@property (nonatomic, strong) UIFont *titleSelectedFont; //文字被选中的字体。默认:与titleFont一样 - -@property (nonatomic, assign, getter=isTitleColorGradientEnabled) BOOL titleColorGradientEnabled; //默认:NO,title的颜色是否渐变过渡 - -@property (nonatomic, assign, getter=isTitleLabelMaskEnabled) BOOL titleLabelMaskEnabled; //默认:NO,titleLabel是否遮罩过滤。 - -//----------------------titleLabelZoomEnabled-----------------------// -@property (nonatomic, assign, getter=isTitleLabelZoomEnabled) BOOL titleLabelZoomEnabled; //默认为NO。为YES时titleSelectedFont失效,以titleFont为准。 - -@property (nonatomic, assign, getter=isTitleLabelZoomScrollGradientEnabled) BOOL titleLabelZoomScrollGradientEnabled; //手势滚动中,是否需要更新状态。默认为YES - -@property (nonatomic, assign) CGFloat titleLabelZoomScale; //默认1.2,titleLabelZoomEnabled为YES才生效。是对字号的缩放,比如titleFont的pointSize为10,放大之后字号就是10*1.2=12。 - -@property (nonatomic, assign) CGFloat titleLabelZoomSelectedVerticalOffset; //titleLabelZoomEnabled设置为YES,会对titleLabel进行transform缩放,当titleLabelZoomScale过大时(比如设置为2),选中的文本被放大之后底部会有很大的空白,从视觉上看就跟其他未选中的文本不在一个水平线上。这个时候就可以用这个值进行调整。 - -//----------------------titleLabelStrokeWidth-----------------------// -@property (nonatomic, assign, getter=isTitleLabelStrokeWidthEnabled) BOOL titleLabelStrokeWidthEnabled; //默认:NO - -@property (nonatomic, assign) CGFloat titleLabelSelectedStrokeWidth; //默认:-3,用于控制字体的粗细(底层通过NSStrokeWidthAttributeName实现)。使用该属性,务必让titleFont和titleSelectedFont设置为一样的!!! - -//----------------------titleLabel缩放中心位置-----------------------// -@property (nonatomic, assign) CGFloat titleLabelVerticalOffset; //titleLabel锚点垂直方向的位置偏移,数值越大越偏离中心,默认为:0 - -@property (nonatomic, assign) JXCategoryTitleLabelAnchorPointStyle titleLabelAnchorPointStyle; //titleLabel锚点位置,用于调整titleLabel缩放时的基准位置。默认为:JXCategoryTitleLabelAnchorPointStyleCenter - -@end diff --git a/Pods/JXCategoryView/Sources/Title/JXCategoryTitleView.m b/Pods/JXCategoryView/Sources/Title/JXCategoryTitleView.m deleted file mode 100644 index ac2d5a0..0000000 --- a/Pods/JXCategoryView/Sources/Title/JXCategoryTitleView.m +++ /dev/null @@ -1,164 +0,0 @@ -// -// JXCategoryView.m -// UI系列测试 -// -// Created by jiaxin on 2018/3/15. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryTitleView.h" -#import "JXCategoryFactory.h" - -@implementation JXCategoryTitleView - -- (void)initializeData { - [super initializeData]; - - _titleNumberOfLines = 1; - _titleLabelZoomEnabled = NO; - _titleLabelZoomScale = 1.2; - _titleColor = [UIColor blackColor]; - _titleSelectedColor = [UIColor redColor]; - _titleFont = [UIFont systemFontOfSize:15]; - _titleColorGradientEnabled = NO; - _titleLabelMaskEnabled = NO; - _titleLabelZoomScrollGradientEnabled = YES; - _titleLabelStrokeWidthEnabled = NO; - _titleLabelSelectedStrokeWidth = -3; - _titleLabelVerticalOffset = 0; - _titleLabelAnchorPointStyle = JXCategoryTitleLabelAnchorPointStyleCenter; -} - -- (UIFont *)titleSelectedFont { - if (_titleSelectedFont) { - return _titleSelectedFont; - } - return self.titleFont; -} - -#pragma mark - Override - -- (Class)preferredCellClass { - return [JXCategoryTitleCell class]; -} - -- (void)refreshDataSource { - NSMutableArray *tempArray = [NSMutableArray arrayWithCapacity:self.titles.count]; - for (int i = 0; i < self.titles.count; i++) { - JXCategoryTitleCellModel *cellModel = [[JXCategoryTitleCellModel alloc] init]; - [tempArray addObject:cellModel]; - } - self.dataSource = [NSArray arrayWithArray:tempArray]; -} - -- (void)refreshSelectedCellModel:(JXCategoryBaseCellModel *)selectedCellModel unselectedCellModel:(JXCategoryBaseCellModel *)unselectedCellModel { - [super refreshSelectedCellModel:selectedCellModel unselectedCellModel:unselectedCellModel]; - - JXCategoryTitleCellModel *myUnselectedCellModel = (JXCategoryTitleCellModel *)unselectedCellModel; - JXCategoryTitleCellModel *myselectedCellModel = (JXCategoryTitleCellModel *)selectedCellModel; - if (self.isSelectedAnimationEnabled && (selectedCellModel.selectedType == JXCategoryCellSelectedTypeClick || selectedCellModel.selectedType == JXCategoryCellSelectedTypeCode)) { - //开启了动画过渡,且cell在屏幕内,current的属性值会在cell里面进行动画插值更新 - //1、当unselectedCell在屏幕外的时候,还是需要在这里更新值 - //2、当selectedCell在屏幕外的时候,还是需要在这里更新值(比如调用selectItemAtIndex方法选中的时候) - BOOL isUnselectedCellVisible = NO; - BOOL isSelectedCellVisible = NO; - NSArray *indexPaths = [self.collectionView indexPathsForVisibleItems]; - for (NSIndexPath *indexPath in indexPaths) { - if (indexPath.item == myUnselectedCellModel.index) { - isUnselectedCellVisible = YES; - continue; - } else if (indexPath.item == myselectedCellModel.index) { - isSelectedCellVisible = YES; - continue; - } - } - if (!isUnselectedCellVisible) { - //但是当unselectedCell在屏幕外时,不会在cell里面通过动画插值更新,在这里直接更新 - myUnselectedCellModel.titleCurrentColor = myUnselectedCellModel.titleNormalColor; - myUnselectedCellModel.titleLabelCurrentZoomScale = myUnselectedCellModel.titleLabelNormalZoomScale; - myUnselectedCellModel.titleLabelCurrentStrokeWidth = myUnselectedCellModel.titleLabelNormalStrokeWidth; - } - if (!isSelectedCellVisible) { - //但是当selectedCell在屏幕外时,不会在cell里面通过动画插值更新,在这里直接更新 - myselectedCellModel.titleCurrentColor = myselectedCellModel.titleSelectedColor; - myselectedCellModel.titleLabelCurrentZoomScale = myselectedCellModel.titleLabelSelectedZoomScale; - myselectedCellModel.titleLabelCurrentStrokeWidth = myselectedCellModel.titleLabelSelectedStrokeWidth; - } - } else { - //没有开启动画,可以直接更新属性 - myselectedCellModel.titleCurrentColor = myselectedCellModel.titleSelectedColor; - myselectedCellModel.titleLabelCurrentZoomScale = myselectedCellModel.titleLabelSelectedZoomScale; - myselectedCellModel.titleLabelCurrentStrokeWidth = myselectedCellModel.titleLabelSelectedStrokeWidth; - - myUnselectedCellModel.titleCurrentColor = myUnselectedCellModel.titleNormalColor; - myUnselectedCellModel.titleLabelCurrentZoomScale = myUnselectedCellModel.titleLabelNormalZoomScale; - myUnselectedCellModel.titleLabelCurrentStrokeWidth = myUnselectedCellModel.titleLabelNormalStrokeWidth; - } -} - -- (void)refreshLeftCellModel:(JXCategoryBaseCellModel *)leftCellModel rightCellModel:(JXCategoryBaseCellModel *)rightCellModel ratio:(CGFloat)ratio { - [super refreshLeftCellModel:leftCellModel rightCellModel:rightCellModel ratio:ratio]; - - JXCategoryTitleCellModel *leftModel = (JXCategoryTitleCellModel *)leftCellModel; - JXCategoryTitleCellModel *rightModel = (JXCategoryTitleCellModel *)rightCellModel; - - if (self.isTitleLabelZoomEnabled && self.isTitleLabelZoomScrollGradientEnabled) { - leftModel.titleLabelCurrentZoomScale = [JXCategoryFactory interpolationFrom:self.titleLabelZoomScale to:1.0 percent:ratio]; - rightModel.titleLabelCurrentZoomScale = [JXCategoryFactory interpolationFrom:1.0 to:self.titleLabelZoomScale percent:ratio]; - } - - if (self.isTitleLabelStrokeWidthEnabled) { - leftModel.titleLabelCurrentStrokeWidth = [JXCategoryFactory interpolationFrom:leftModel.titleLabelSelectedStrokeWidth to:leftModel.titleLabelNormalStrokeWidth percent:ratio]; - rightModel.titleLabelCurrentStrokeWidth = [JXCategoryFactory interpolationFrom:rightModel.titleLabelNormalStrokeWidth to:rightModel.titleLabelSelectedStrokeWidth percent:ratio]; - } - - if (self.isTitleColorGradientEnabled) { - leftModel.titleCurrentColor = [JXCategoryFactory interpolationColorFrom:self.titleSelectedColor to:self.titleColor percent:ratio]; - rightModel.titleCurrentColor = [JXCategoryFactory interpolationColorFrom:self.titleColor to:self.titleSelectedColor percent:ratio]; - } -} - -- (CGFloat)preferredCellWidthAtIndex:(NSInteger)index { - if (self.cellWidth == JXCategoryViewAutomaticDimension) { - if (self.titleDataSource && [self.titleDataSource respondsToSelector:@selector(categoryTitleView:widthForTitle:)]) { - return [self.titleDataSource categoryTitleView:self widthForTitle:self.titles[index]]; - } else { - return ceilf([self.titles[index] boundingRectWithSize:CGSizeMake(MAXFLOAT, self.bounds.size.height) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : self.titleFont} context:nil].size.width); - } - } else { - return self.cellWidth; - } -} - -- (void)refreshCellModel:(JXCategoryBaseCellModel *)cellModel index:(NSInteger)index { - [super refreshCellModel:cellModel index:index]; - - JXCategoryTitleCellModel *model = (JXCategoryTitleCellModel *)cellModel; - model.title = self.titles[index]; - model.titleNumberOfLines = self.titleNumberOfLines; - model.titleFont = self.titleFont; - model.titleSelectedFont = self.titleSelectedFont; - model.titleNormalColor = self.titleColor; - model.titleSelectedColor = self.titleSelectedColor; - model.titleLabelMaskEnabled = self.isTitleLabelMaskEnabled; - model.titleLabelZoomEnabled = self.isTitleLabelZoomEnabled; - model.titleLabelNormalZoomScale = 1; - model.titleLabelZoomSelectedVerticalOffset = self.titleLabelZoomSelectedVerticalOffset; - model.titleLabelSelectedZoomScale = self.titleLabelZoomScale; - model.titleLabelStrokeWidthEnabled = self.isTitleLabelStrokeWidthEnabled; - model.titleLabelNormalStrokeWidth = 0; - model.titleLabelSelectedStrokeWidth = self.titleLabelSelectedStrokeWidth; - model.titleLabelVerticalOffset = self.titleLabelVerticalOffset; - model.titleLabelAnchorPointStyle = self.titleLabelAnchorPointStyle; - if (index == self.selectedIndex) { - model.titleCurrentColor = model.titleSelectedColor; - model.titleLabelCurrentZoomScale = model.titleLabelSelectedZoomScale; - model.titleLabelCurrentStrokeWidth= model.titleLabelSelectedStrokeWidth; - }else { - model.titleCurrentColor = model.titleNormalColor; - model.titleLabelCurrentZoomScale = model.titleLabelNormalZoomScale; - model.titleLabelCurrentStrokeWidth = model.titleLabelNormalStrokeWidth; - } -} - -@end diff --git a/Pods/JXCategoryView/Sources/TitleImage/JXCategoryTitleImageCell.h b/Pods/JXCategoryView/Sources/TitleImage/JXCategoryTitleImageCell.h deleted file mode 100644 index e430a67..0000000 --- a/Pods/JXCategoryView/Sources/TitleImage/JXCategoryTitleImageCell.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// JXCategoryImageCell.h -// JXCategoryView -// -// Created by jiaxin on 2018/8/8. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryTitleCell.h" - -@interface JXCategoryTitleImageCell : JXCategoryTitleCell - -@property (nonatomic, strong) UIImageView *imageView; - -@end diff --git a/Pods/JXCategoryView/Sources/TitleImage/JXCategoryTitleImageCell.m b/Pods/JXCategoryView/Sources/TitleImage/JXCategoryTitleImageCell.m deleted file mode 100644 index ae6c39d..0000000 --- a/Pods/JXCategoryView/Sources/TitleImage/JXCategoryTitleImageCell.m +++ /dev/null @@ -1,148 +0,0 @@ -// -// JXCategoryImageCell.m -// JXCategoryView -// -// Created by jiaxin on 2018/8/8. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryTitleImageCell.h" -#import "JXCategoryTitleImageCellModel.h" - -@interface JXCategoryTitleImageCell() -@property (nonatomic, strong) id currentImageInfo; -@property (nonatomic, strong) NSString *currentImageName; -@property (nonatomic, strong) NSURL *currentImageURL; -@property (nonatomic, strong) UIStackView *stackView; -@property (nonatomic, strong) NSLayoutConstraint *imageViewWidthConstraint; -@property (nonatomic, strong) NSLayoutConstraint *imageViewHeightConstraint; -@end - -@implementation JXCategoryTitleImageCell - -- (void)prepareForReuse { - [super prepareForReuse]; - - self.currentImageInfo = nil; - self.currentImageName = nil; - self.currentImageURL = nil; -} - -- (void)initializeViews { - [super initializeViews]; - - [self.titleLabel removeFromSuperview]; - - _imageView = [[UIImageView alloc] init]; - self.imageView.translatesAutoresizingMaskIntoConstraints = NO; - self.imageView.contentMode = UIViewContentModeScaleAspectFit; - self.imageViewWidthConstraint = [self.imageView.widthAnchor constraintEqualToConstant:0]; - self.imageViewWidthConstraint.active = YES; - self.imageViewHeightConstraint = [self.imageView.heightAnchor constraintEqualToConstant:0]; - self.imageViewHeightConstraint.active = YES; - - _stackView = [[UIStackView alloc] init]; - self.stackView.alignment = UIStackViewAlignmentCenter; - [self.contentView addSubview:self.stackView]; - self.stackView.translatesAutoresizingMaskIntoConstraints = NO; - [self.stackView.centerXAnchor constraintEqualToAnchor:self.contentView.centerXAnchor].active = YES; - [self.stackView.centerYAnchor constraintEqualToAnchor:self.contentView.centerYAnchor].active = YES; -} - -- (void)reloadData:(JXCategoryBaseCellModel *)cellModel { - [super reloadData:cellModel]; - - JXCategoryTitleImageCellModel *myCellModel = (JXCategoryTitleImageCellModel *)cellModel; - - self.titleLabel.hidden = NO; - self.imageView.hidden = NO; - [self.stackView removeArrangedSubview:self.titleLabel]; - [self.stackView removeArrangedSubview:self.imageView]; - CGSize imageSize = myCellModel.imageSize; - self.imageViewWidthConstraint.constant = imageSize.width; - self.imageViewHeightConstraint.constant = imageSize.height; - self.stackView.spacing = myCellModel.titleImageSpacing; - - switch (myCellModel.imageType) { - case JXCategoryTitleImageType_TopImage: { - self.stackView.axis = UILayoutConstraintAxisVertical; - [self.stackView addArrangedSubview:self.imageView]; - [self.stackView addArrangedSubview:self.titleLabel]; - break; - } - case JXCategoryTitleImageType_LeftImage: { - self.stackView.axis = UILayoutConstraintAxisHorizontal; - [self.stackView addArrangedSubview:self.imageView]; - [self.stackView addArrangedSubview:self.titleLabel]; - break; - } - case JXCategoryTitleImageType_BottomImage: { - self.stackView.axis = UILayoutConstraintAxisVertical; - [self.stackView addArrangedSubview:self.titleLabel]; - [self.stackView addArrangedSubview:self.imageView]; - break; - } - case JXCategoryTitleImageType_RightImage: { - self.stackView.axis = UILayoutConstraintAxisHorizontal; - [self.stackView addArrangedSubview:self.titleLabel]; - [self.stackView addArrangedSubview:self.imageView]; - break; - } - case JXCategoryTitleImageType_OnlyImage: { - self.titleLabel.hidden = YES; - [self.stackView addArrangedSubview:self.imageView]; - break; - } - case JXCategoryTitleImageType_OnlyTitle: { - self.imageView.hidden = YES; - [self.stackView addArrangedSubview:self.titleLabel]; - break; - } - } - - //因为`- (void)reloadData:(JXCategoryBaseCellModel *)cellModel`方法会回调多次,尤其是左右滚动的时候会调用无数次,如果每次都触发图片加载,会非常消耗性能。所以只会在图片发生了变化的时候,才进行图片加载。 - if (myCellModel.loadImageBlock != nil) { - id currentImageInfo = myCellModel.imageInfo; - if (myCellModel.isSelected) { - currentImageInfo = myCellModel.selectedImageInfo; - } - if (currentImageInfo && ![currentImageInfo isEqual:self.currentImageInfo]) { - self.currentImageInfo = currentImageInfo; - if (myCellModel.loadImageBlock) { - myCellModel.loadImageBlock(self.imageView, currentImageInfo); - } - } - }else { - NSString *currentImageName; - NSURL *currentImageURL; - if (myCellModel.imageName) { - currentImageName = myCellModel.imageName; - } else if (myCellModel.imageURL) { - currentImageURL = myCellModel.imageURL; - } - if (myCellModel.isSelected) { - if (myCellModel.selectedImageName) { - currentImageName = myCellModel.selectedImageName; - } else if (myCellModel.selectedImageURL) { - currentImageURL = myCellModel.selectedImageURL; - } - } - if (currentImageName && ![currentImageName isEqualToString:self.currentImageName]) { - self.currentImageName = currentImageName; - self.imageView.image = [UIImage imageNamed:currentImageName]; - } else if (currentImageURL && ![currentImageURL.absoluteString isEqualToString:self.currentImageURL.absoluteString]) { - self.currentImageURL = currentImageURL; - if (myCellModel.loadImageCallback) { - myCellModel.loadImageCallback(self.imageView, currentImageURL); - } - } - } - - if (myCellModel.isImageZoomEnabled) { - self.imageView.transform = CGAffineTransformMakeScale(myCellModel.imageZoomScale, myCellModel.imageZoomScale); - } else { - self.imageView.transform = CGAffineTransformIdentity; - } -} - -@end diff --git a/Pods/JXCategoryView/Sources/TitleImage/JXCategoryTitleImageCellModel.h b/Pods/JXCategoryView/Sources/TitleImage/JXCategoryTitleImageCellModel.h deleted file mode 100644 index bd0111a..0000000 --- a/Pods/JXCategoryView/Sources/TitleImage/JXCategoryTitleImageCellModel.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// JXCategoryTitleImageCellModel.h -// JXCategoryView -// -// Created by jiaxin on 2018/8/8. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryTitleCellModel.h" - -typedef NS_ENUM(NSUInteger, JXCategoryTitleImageType) { - JXCategoryTitleImageType_TopImage = 0, - JXCategoryTitleImageType_LeftImage, - JXCategoryTitleImageType_BottomImage, - JXCategoryTitleImageType_RightImage, - JXCategoryTitleImageType_OnlyImage, - JXCategoryTitleImageType_OnlyTitle, -}; - -@interface JXCategoryTitleImageCellModel : JXCategoryTitleCellModel - -@property (nonatomic, assign) JXCategoryTitleImageType imageType; - -@property (nonatomic, strong) id imageInfo; -@property (nonatomic, strong) id selectedImageInfo; -@property (nonatomic, copy) void(^loadImageBlock)(UIImageView *imageView, id info); - -@property (nonatomic, assign) CGSize imageSize; //默认CGSizeMake(20, 20) - -@property (nonatomic, assign) CGFloat titleImageSpacing; //titleLabel和ImageView的间距,默认5 - -@property (nonatomic, assign, getter=isImageZoomEnabled) BOOL imageZoomEnabled; - -@property (nonatomic, assign) CGFloat imageZoomScale; - -/// 以下属性将会被弃用 -@property (nonatomic, copy) NSString *imageName; //加载bundle内的图片 -@property (nonatomic, strong) NSURL *imageURL; //图片URL -@property (nonatomic, copy) NSString *selectedImageName; -@property (nonatomic, strong) NSURL *selectedImageURL; -@property (nonatomic, copy) void(^loadImageCallback)(UIImageView *imageView, NSURL *imageURL); - -@end diff --git a/Pods/JXCategoryView/Sources/TitleImage/JXCategoryTitleImageCellModel.m b/Pods/JXCategoryView/Sources/TitleImage/JXCategoryTitleImageCellModel.m deleted file mode 100644 index ecf3539..0000000 --- a/Pods/JXCategoryView/Sources/TitleImage/JXCategoryTitleImageCellModel.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// JXCategoryTitleImageCellModel.m -// JXCategoryView -// -// Created by jiaxin on 2018/8/8. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryTitleImageCellModel.h" - -@implementation JXCategoryTitleImageCellModel - -@end diff --git a/Pods/JXCategoryView/Sources/TitleImage/JXCategoryTitleImageView.h b/Pods/JXCategoryView/Sources/TitleImage/JXCategoryTitleImageView.h deleted file mode 100644 index 9a48f43..0000000 --- a/Pods/JXCategoryView/Sources/TitleImage/JXCategoryTitleImageView.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// JXCategoryTitleImageView.h -// JXCategoryView -// -// Created by jiaxin on 2018/8/8. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryTitleView.h" -#import "JXCategoryTitleImageCell.h" -#import "JXCategoryTitleImageCellModel.h" - -@interface JXCategoryTitleImageView : JXCategoryTitleView - -//imageInfo数组可以传入imageName字符串或者image的URL地址等,然后会通过loadImageBlock透传回来,把imageView对于图片的加载过程完全交给使用者决定。 -@property (nonatomic, strong) NSArray *imageInfoArray; -@property (nonatomic, strong) NSArray *selectedImageInfoArray; -@property (nonatomic, copy) void(^loadImageBlock)(UIImageView *imageView, id info); -//图片尺寸。默认CGSizeMake(20, 20) -@property (nonatomic, assign) CGSize imageSize; -//titleLabel和ImageView的间距,默认5 -@property (nonatomic, assign) CGFloat titleImageSpacing; -//图片是否缩放。默认为NO -@property (nonatomic, assign, getter=isImageZoomEnabled) BOOL imageZoomEnabled; -//图片缩放的最大scale。默认1.2,imageZoomEnabled为YES才生效 -@property (nonatomic, assign) CGFloat imageZoomScale; -//默认@[JXCategoryTitleImageType_LeftImage...] -@property (nonatomic, strong) NSArray *imageTypes; - -//下面的属性将会被弃用,请使用`imageInfoArray`、`selectedImageInfoArray`、`loadImageBlock`属性完成需求。 -//普通状态下的imageNames,通过[UIImage imageNamed:]方法加载 -@property (nonatomic, strong) NSArray *imageNames; -//选中状态下的imageNames,通过[UIImage imageNamed:]方法加载。可选 -@property (nonatomic, strong) NSArray *selectedImageNames; -//普通状态下的imageURLs,通过loadImageCallback回调加载 -@property (nonatomic, strong) NSArray *imageURLs; -//选中状态下的selectedImageURLs,通过loadImageCallback回调加载 -@property (nonatomic, strong) NSArray *selectedImageURLs; -//使用imageURL从远端下载图片进行加载,建议使用SDWebImage等第三方库进行下载。 -@property (nonatomic, copy) void(^loadImageCallback)(UIImageView *imageView, NSURL *imageURL); - -@end diff --git a/Pods/JXCategoryView/Sources/TitleImage/JXCategoryTitleImageView.m b/Pods/JXCategoryView/Sources/TitleImage/JXCategoryTitleImageView.m deleted file mode 100644 index ad2f560..0000000 --- a/Pods/JXCategoryView/Sources/TitleImage/JXCategoryTitleImageView.m +++ /dev/null @@ -1,126 +0,0 @@ -// -// JXCategoryTitleImageView.m -// JXCategoryView -// -// Created by jiaxin on 2018/8/8. -// Copyright © 2018年 jiaxin. All rights reserved. -// - -#import "JXCategoryTitleImageView.h" -#import "JXCategoryTitleImageCell.h" -#import "JXCategoryTitleImageCellModel.h" -#import "JXCategoryFactory.h" - -@implementation JXCategoryTitleImageView - -- (void)dealloc { - self.loadImageBlock = nil; - self.loadImageCallback = nil; -} - -- (void)initializeData { - [super initializeData]; - - _imageSize = CGSizeMake(20, 20); - _titleImageSpacing = 5; - _imageZoomEnabled = NO; - _imageZoomScale = 1.2; -} - -- (Class)preferredCellClass { - return [JXCategoryTitleImageCell class]; -} - -- (void)refreshDataSource { - NSMutableArray *tempArray = [NSMutableArray arrayWithCapacity:self.titles.count]; - for (int i = 0; i < self.titles.count; i++) { - JXCategoryTitleImageCellModel *cellModel = [[JXCategoryTitleImageCellModel alloc] init]; - [tempArray addObject:cellModel]; - } - self.dataSource = [NSArray arrayWithArray:tempArray]; - - if (!self.imageTypes || (self.imageTypes.count == 0)) { - NSMutableArray *types = [NSMutableArray arrayWithCapacity:self.titles.count]; - for (int i = 0; i< self.titles.count; i++) { - [types addObject:@(JXCategoryTitleImageType_LeftImage)]; - } - self.imageTypes = [NSArray arrayWithArray:types]; - } -} - -- (void)refreshCellModel:(JXCategoryBaseCellModel *)cellModel index:(NSInteger)index { - [super refreshCellModel:cellModel index:index]; - - JXCategoryTitleImageCellModel *myCellModel = (JXCategoryTitleImageCellModel *)cellModel; - myCellModel.loadImageBlock = self.loadImageBlock; - myCellModel.loadImageCallback = self.loadImageCallback; - myCellModel.imageType = [self.imageTypes[index] integerValue]; - myCellModel.imageSize = self.imageSize; - myCellModel.titleImageSpacing = self.titleImageSpacing; - if (self.imageInfoArray && self.imageInfoArray.count != 0) { - myCellModel.imageInfo = self.imageInfoArray[index]; - }else if (self.imageNames && self.imageNames.count != 0) { - myCellModel.imageName = self.imageNames[index]; - }else if (self.imageURLs && self.imageURLs.count != 0) { - myCellModel.imageURL = self.imageURLs[index]; - } - if (self.selectedImageInfoArray && self.selectedImageInfoArray.count != 0) { - myCellModel.selectedImageInfo = self.selectedImageInfoArray[index]; - }else if (self.selectedImageNames && self.selectedImageNames.count != 0) { - myCellModel.selectedImageName = self.selectedImageNames[index]; - }else if (self.selectedImageURLs && self.selectedImageURLs.count != 0) { - myCellModel.selectedImageURL = self.selectedImageURLs[index]; - } - myCellModel.imageZoomEnabled = self.imageZoomEnabled; - myCellModel.imageZoomScale = ((index == self.selectedIndex) ? self.imageZoomScale : 1.0); -} - -- (void)refreshSelectedCellModel:(JXCategoryBaseCellModel *)selectedCellModel unselectedCellModel:(JXCategoryBaseCellModel *)unselectedCellModel { - [super refreshSelectedCellModel:selectedCellModel unselectedCellModel:unselectedCellModel]; - - JXCategoryTitleImageCellModel *myUnselectedCellModel = (JXCategoryTitleImageCellModel *)unselectedCellModel; - myUnselectedCellModel.imageZoomScale = 1.0; - - JXCategoryTitleImageCellModel *myselectedCellModel = (JXCategoryTitleImageCellModel *)selectedCellModel; - myselectedCellModel.imageZoomScale = self.imageZoomScale; -} - -- (void)refreshLeftCellModel:(JXCategoryBaseCellModel *)leftCellModel rightCellModel:(JXCategoryBaseCellModel *)rightCellModel ratio:(CGFloat)ratio { - [super refreshLeftCellModel:leftCellModel rightCellModel:rightCellModel ratio:ratio]; - - JXCategoryTitleImageCellModel *leftModel = (JXCategoryTitleImageCellModel *)leftCellModel; - JXCategoryTitleImageCellModel *rightModel = (JXCategoryTitleImageCellModel *)rightCellModel; - - if (self.isImageZoomEnabled) { - leftModel.imageZoomScale = [JXCategoryFactory interpolationFrom:self.imageZoomScale to:1.0 percent:ratio]; - rightModel.imageZoomScale = [JXCategoryFactory interpolationFrom:1.0 to:self.imageZoomScale percent:ratio]; - } -} - -- (CGFloat)preferredCellWidthAtIndex:(NSInteger)index { - if (self.cellWidth == JXCategoryViewAutomaticDimension) { - CGFloat titleWidth = [super preferredCellWidthAtIndex:index]; - JXCategoryTitleImageType type = [self.imageTypes[index] integerValue]; - CGFloat cellWidth = 0; - switch (type) { - case JXCategoryTitleImageType_OnlyTitle: - cellWidth = titleWidth; - break; - case JXCategoryTitleImageType_OnlyImage: - cellWidth = self.imageSize.width; - break; - case JXCategoryTitleImageType_LeftImage: - case JXCategoryTitleImageType_RightImage: - cellWidth = titleWidth + self.titleImageSpacing + self.imageSize.width; - break; - case JXCategoryTitleImageType_TopImage: - case JXCategoryTitleImageType_BottomImage: - cellWidth = MAX(titleWidth, self.imageSize.width); - break; - } - return cellWidth; - } - return self.cellWidth; -} - -@end diff --git a/Pods/JXCategoryView/Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomCell.h b/Pods/JXCategoryView/Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomCell.h deleted file mode 100644 index 804a6fb..0000000 --- a/Pods/JXCategoryView/Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomCell.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// JXCategoryTitleVerticalZoomCell.h -// JXCategoryView -// -// Created by jiaxin on 2019/2/14. -// Copyright © 2019 jiaxin. All rights reserved. -// - -#import "JXCategoryTitleCell.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface JXCategoryTitleVerticalZoomCell : JXCategoryTitleCell - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/JXCategoryView/Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomCell.m b/Pods/JXCategoryView/Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomCell.m deleted file mode 100644 index 3d13438..0000000 --- a/Pods/JXCategoryView/Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomCell.m +++ /dev/null @@ -1,45 +0,0 @@ -// -// JXCategoryTitleVerticalZoomCell.m -// JXCategoryView -// -// Created by jiaxin on 2019/2/14. -// Copyright © 2019 jiaxin. All rights reserved. -// - -#import "JXCategoryTitleVerticalZoomCell.h" -#import "JXCategoryTitleVerticalZoomCellModel.h" - -@implementation JXCategoryTitleVerticalZoomCell - -- (void)reloadData:(JXCategoryBaseCellModel *)cellModel { - [super reloadData:cellModel]; - - JXCategoryTitleVerticalZoomCellModel *myCellModel = (JXCategoryTitleVerticalZoomCellModel *)cellModel; - - if (myCellModel.isTitleLabelZoomEnabled) { - //先把font设置为缩放的最大值,再缩小到最小值,最后根据当前的titleLabelZoomScale值,进行缩放更新。这样就能避免transform从小到大时字体模糊 - UIFont *maxScaleFont = [UIFont fontWithDescriptor:myCellModel.titleFont.fontDescriptor size:myCellModel.titleFont.pointSize*myCellModel.maxVerticalFontScale]; - CGFloat baseScale = myCellModel.titleFont.lineHeight/maxScaleFont.lineHeight; - if (myCellModel.isSelectedAnimationEnabled && [self checkCanStartSelectedAnimation:myCellModel]) { - JXCategoryCellSelectedAnimationBlock block = [self preferredTitleZoomAnimationBlock:myCellModel baseScale:baseScale]; - [self addSelectedAnimationBlock:block]; - } else { - self.titleLabel.font = maxScaleFont; - self.maskTitleLabel.font = maxScaleFont; - CGAffineTransform currentTransform = CGAffineTransformMakeScale(baseScale*myCellModel.titleLabelCurrentZoomScale, baseScale*myCellModel.titleLabelCurrentZoomScale); - self.titleLabel.transform = currentTransform; - self.maskTitleLabel.transform = currentTransform; - } - } else { - if (myCellModel.isSelected) { - self.titleLabel.font = myCellModel.titleSelectedFont; - self.maskTitleLabel.font = myCellModel.titleSelectedFont; - }else { - self.titleLabel.font = myCellModel.titleFont; - self.maskTitleLabel.font = myCellModel.titleFont; - } - } - - [self.titleLabel sizeToFit]; -} -@end diff --git a/Pods/JXCategoryView/Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomCellModel.h b/Pods/JXCategoryView/Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomCellModel.h deleted file mode 100644 index 3c7ea4b..0000000 --- a/Pods/JXCategoryView/Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomCellModel.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// JXCategoryTitleVerticalZoomCellModel.h -// JXCategoryView -// -// Created by jiaxin on 2019/2/14. -// Copyright © 2019 jiaxin. All rights reserved. -// - -#import "JXCategoryTitleCellModel.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface JXCategoryTitleVerticalZoomCellModel : JXCategoryTitleCellModel - -@property (nonatomic, assign) CGFloat maxVerticalFontScale; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/JXCategoryView/Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomCellModel.m b/Pods/JXCategoryView/Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomCellModel.m deleted file mode 100644 index 3bf0ba0..0000000 --- a/Pods/JXCategoryView/Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomCellModel.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// JXCategoryTitleVerticalZoomCellModel.m -// JXCategoryView -// -// Created by jiaxin on 2019/2/14. -// Copyright © 2019 jiaxin. All rights reserved. -// - -#import "JXCategoryTitleVerticalZoomCellModel.h" - -@implementation JXCategoryTitleVerticalZoomCellModel - -@end diff --git a/Pods/JXCategoryView/Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomView.h b/Pods/JXCategoryView/Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomView.h deleted file mode 100644 index e3eb813..0000000 --- a/Pods/JXCategoryView/Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomView.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// JXCategoryTitleVerticalZoomView.h -// JXCategoryView -// -// Created by jiaxin on 2019/2/14. -// Copyright © 2019 jiaxin. All rights reserved. -// - -#import "JXCategoryTitleView.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - 垂直方向的缩放值范围:minVerticalFontScale~maxVerticalFontScale; - 垂直方向cellSpacing范围:minVerticalCellSpacing~maxVerticalCellSpacing,用于达到缩小时cell更加紧凑 - 根据UI设计师给你的参数,去多次尝试设置上面的值来达到同样的效果。多尝试几次就知道每个属性设置之后的效果。 - */ -@interface JXCategoryTitleVerticalZoomView : JXCategoryTitleView - -@property (nonatomic, assign) CGFloat maxVerticalFontScale; //垂直方向最大的缩放值 -@property (nonatomic, assign) CGFloat minVerticalFontScale; //垂直方向最小的缩放值 -@property (nonatomic, assign) CGFloat maxVerticalCellSpacing; //垂直方向最大的cellSpacing -@property (nonatomic, assign) CGFloat minVerticalCellSpacing; //垂直方向最小的cellSpacing - -/** - 当前列表滚动时,根据当前垂直方向categoryView高度变化的百分比,刷新布局 - - @param percent 当前垂直方向categoryView高度变化百分比 - */ -- (void)listDidScrollWithVerticalHeightPercent:(CGFloat)percent; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/JXCategoryView/Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomView.m b/Pods/JXCategoryView/Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomView.m deleted file mode 100644 index b8fe745..0000000 --- a/Pods/JXCategoryView/Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomView.m +++ /dev/null @@ -1,94 +0,0 @@ -// -// JXCategoryTitleVerticalZoomView.m -// JXCategoryView -// -// Created by jiaxin on 2019/2/14. -// Copyright © 2019 jiaxin. All rights reserved. -// - -#import "JXCategoryTitleVerticalZoomView.h" -#import "JXCategoryTitleVerticalZoomCellModel.h" -#import "JXCategoryTitleVerticalZoomCell.h" -#import "JXCategoryFactory.h" - -@interface JXCategoryTitleVerticalZoomView () -@property (nonatomic, assign) CGFloat currentVerticalScale; //当前垂直方向的缩放基准值 -@end - -@implementation JXCategoryTitleVerticalZoomView - -- (void)initializeData { - [super initializeData]; - - _maxVerticalFontScale = 2; - _minVerticalFontScale = 1.3; - _currentVerticalScale = _maxVerticalFontScale; - self.cellWidthZoomEnabled = YES; - self.cellWidthZoomScale = _maxVerticalFontScale; - self.contentEdgeInsetLeft = 15; - self.titleLabelZoomScale = _currentVerticalScale; - self.titleLabelZoomEnabled = YES; - self.selectedAnimationEnabled = YES; - _maxVerticalCellSpacing = 20; - _minVerticalCellSpacing = 10; - self.cellSpacing = _maxVerticalCellSpacing; -} - -- (void)listDidScrollWithVerticalHeightPercent:(CGFloat)percent { - CGFloat currentScale = [JXCategoryFactory interpolationFrom:self.minVerticalFontScale to:self.maxVerticalFontScale percent:percent]; - BOOL shouldReloadData = NO; - if (self.currentVerticalScale != currentScale) { - //有变化才允许reloadData - shouldReloadData = YES; - } - self.currentVerticalScale = currentScale; - self.cellWidthZoomScale = currentScale; - self.cellSpacing = [JXCategoryFactory interpolationFrom:self.minVerticalCellSpacing to:self.maxVerticalCellSpacing percent:percent]; - if (shouldReloadData) { - [self refreshDataSource]; - [self refreshState]; - [self.collectionView.collectionViewLayout invalidateLayout]; - [self.collectionView reloadData]; - } -} - -- (void)setCurrentVerticalScale:(CGFloat)currentVerticalScale { - _currentVerticalScale = currentVerticalScale; - - self.titleLabelZoomScale = currentVerticalScale; -} - -- (void)setMaxVerticalCellSpacing:(CGFloat)maxVerticalCellSpacing { - _maxVerticalCellSpacing = maxVerticalCellSpacing; - - self.cellSpacing = maxVerticalCellSpacing; -} - -- (void)setMaxVerticalFontScale:(CGFloat)maxVerticalFontScale { - _maxVerticalFontScale = maxVerticalFontScale; - - self.titleLabelZoomScale = maxVerticalFontScale; - self.cellWidthZoomScale = maxVerticalFontScale; -} - -- (Class)preferredCellClass { - return [JXCategoryTitleVerticalZoomCell class]; -} - -- (void)refreshDataSource { - NSMutableArray *tempArray = [NSMutableArray array]; - for (int i = 0; i < self.titles.count; i++) { - JXCategoryTitleVerticalZoomCellModel *cellModel = [[JXCategoryTitleVerticalZoomCellModel alloc] init]; - [tempArray addObject:cellModel]; - } - self.dataSource = tempArray; -} - -- (void)refreshCellModel:(JXCategoryBaseCellModel *)cellModel index:(NSInteger)index { - [super refreshCellModel:cellModel index:index]; - - JXCategoryTitleVerticalZoomCellModel *model = (JXCategoryTitleVerticalZoomCellModel *)cellModel; - model.maxVerticalFontScale = self.maxVerticalFontScale; -} - -@end diff --git a/Pods/Kingfisher/LICENSE b/Pods/Kingfisher/LICENSE deleted file mode 100644 index 80888ba..0000000 --- a/Pods/Kingfisher/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2019 Wei Wang - -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. - diff --git a/Pods/Kingfisher/README.md b/Pods/Kingfisher/README.md deleted file mode 100644 index fcddcb5..0000000 --- a/Pods/Kingfisher/README.md +++ /dev/null @@ -1,259 +0,0 @@ -

-Kingfisher -

- -

- - - - - -

- -Kingfisher is a powerful, pure-Swift library for downloading and caching images from the web. It provides you a chance to use a pure-Swift way to work with remote images in your next app. - -## Features - -- [x] Asynchronous image downloading and caching. -- [x] Loading image from either `URLSession`-based networking or local provided data. -- [x] Useful image processors and filters provided. -- [x] Multiple-layer hybrid cache for both memory and disk. -- [x] Fine control on cache behavior. Customizable expiration date and size limit. -- [x] Cancelable downloading and auto-reusing previous downloaded content to improve performance. -- [x] Independent components. Use the downloader, caching system, and image processors separately as you need. -- [x] Prefetching images and showing them from the cache to boost your app. -- [x] Extensions for `UIImageView`, `NSImageView`, `NSButton`, `UIButton`, `NSTextAttachment`, `WKInterfaceImage`, `TVMonogramView` and `CPListItem` to directly set an image from a URL. -- [x] Built-in transition animation when setting images. -- [x] Customizable placeholder and indicator while loading images. -- [x] Extensible image processing and image format easily. -- [x] Low Data Mode support. -- [x] SwiftUI support. - -### Kingfisher 101 - -The simplest use-case is setting an image to an image view with the `UIImageView` extension: - -```swift -import Kingfisher - -let url = URL(string: "https://example.com/image.png") -imageView.kf.setImage(with: url) -``` - -Kingfisher will download the image from `url`, send it to both memory cache and disk cache, and display it in `imageView`. -When you set it with the same URL later, the image will be retrieved from the cache and shown immediately. - -It also works if you use SwiftUI: - -```swift -var body: some View { - KFImage(URL(string: "https://example.com/image.png")!) -} -``` - -### A More Advanced Example - -With the powerful options, you can do hard tasks with Kingfisher in a simple way. For example, the code below: - -1. Downloads a high-resolution image. -2. Downsamples it to match the image view size. -3. Makes it round cornered with a given radius. -4. Shows a system indicator and a placeholder image while downloading. -5. When prepared, it animates the small thumbnail image with a "fade in" effect. -6. The original large image is also cached to disk for later use, to get rid of downloading it again in a detail view. -7. A console log is printed when the task finishes, either for success or failure. - -```swift -let url = URL(string: "https://example.com/high_resolution_image.png") -let processor = DownsamplingImageProcessor(size: imageView.bounds.size) - |> RoundCornerImageProcessor(cornerRadius: 20) -imageView.kf.indicatorType = .activity -imageView.kf.setImage( - with: url, - placeholder: UIImage(named: "placeholderImage"), - options: [ - .processor(processor), - .scaleFactor(UIScreen.main.scale), - .transition(.fade(1)), - .cacheOriginalImage - ]) -{ - result in - switch result { - case .success(let value): - print("Task done for: \(value.source.url?.absoluteString ?? "")") - case .failure(let error): - print("Job failed: \(error.localizedDescription)") - } -} -``` - -It is a common situation I can meet in my daily work. Think about how many lines you need to write without -Kingfisher! - -### Method Chaining - -If you are not a fan of the `kf` extension, you can also prefer to use the `KF` builder and chained the method -invocations. The code below is doing the same thing: - -```swift -// Use `kf` extension -imageView.kf.setImage( - with: url, - placeholder: placeholderImage, - options: [ - .processor(processor), - .loadDiskFileSynchronously, - .cacheOriginalImage, - .transition(.fade(0.25)), - .lowDataMode(.network(lowResolutionURL)) - ], - progressBlock: { receivedSize, totalSize in - // Progress updated - }, - completionHandler: { result in - // Done - } -) - -// Use `KF` builder -KF.url(url) - .placeholder(placeholderImage) - .setProcessor(processor) - .loadDiskFileSynchronously() - .cacheMemoryOnly() - .fade(duration: 0.25) - .lowDataModeSource(.network(lowResolutionURL)) - .onProgress { receivedSize, totalSize in } - .onSuccess { result in } - .onFailure { error in } - .set(to: imageView) -``` - -And even better, if later you want to switch to SwiftUI, just change the `KF` above to `KFImage`, and you've done: - -```swift -struct ContentView: View { - var body: some View { - KFImage.url(url) - .placeholder(placeholderImage) - .setProcessor(processor) - .loadDiskFileSynchronously() - .cacheMemoryOnly() - .fade(duration: 0.25) - .lowDataModeSource(.network(lowResolutionURL)) - .onProgress { receivedSize, totalSize in } - .onSuccess { result in } - .onFailure { error in } - } -} -``` - -### Learn More - -To learn the use of Kingfisher by more examples, take a look at the well-prepared [Cheat Sheet](https://github.com/onevcat/Kingfisher/wiki/Cheat-Sheet). -There we summarized the most common tasks in Kingfisher, you can get a better idea of what this framework can do. -There are also some performance tips, remember to check them too. - -## Requirements - -- iOS 12.0+ / macOS 10.14+ / tvOS 12.0+ / watchOS 5.0+ (if you use only UIKit/AppKit) -- iOS 14.0+ / macOS 11.0+ / tvOS 14.0+ / watchOS 7.0+ (if you use it in SwiftUI) -- Swift 5.0+ - -> If you need support from iOS 10 (UIKit/AppKit) or iOS 13 (SwiftUI), use Kingfisher version 6.x. But it won't work -> with Xcode 13.0 and Xcode 13.1 [#1802](https://github.com/onevcat/Kingfisher/issues/1802). -> -> If you need to use Xcode 13.0 and 13.1 but cannot upgrade to v7, use the `version6-xcode13` branch. However, you have to drop -> iOS 10 support due to another Xcode 13 bug. -> -> | UIKit | SwiftUI | Xcode | Kingfisher | -> |---|---|---|---| -> | iOS 10+ | iOS 13+ | 12 | ~> 6.3.1 | -> | iOS 11+ | iOS 13+ | 13 | `version6-xcode13` | -> | iOS 12+ | iOS 14+ | 13 | ~> 7.0 | - -### Installation - -A detailed guide for installation can be found in [Installation Guide](https://github.com/onevcat/Kingfisher/wiki/Installation-Guide). - -#### Swift Package Manager - -- File > Swift Packages > Add Package Dependency -- Add `https://github.com/onevcat/Kingfisher.git` -- Select "Up to Next Major" with "7.0.0" - -#### CocoaPods - -```ruby -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '12.0' -use_frameworks! - -target 'MyApp' do - pod 'Kingfisher', '~> 7.0' -end -``` - -#### Carthage - -``` -github "onevcat/Kingfisher" ~> 7.0 -``` - - -### Migrating - -[Kingfisher 7.0 Migration](https://github.com/onevcat/Kingfisher/wiki/Kingfisher-7.0-Migration-Guide) - Kingfisher 7.x is NOT fully compatible with the previous version. However, changes should be trivial or not required at all. Please follow the [migration guide](https://github.com/onevcat/Kingfisher/wiki/Kingfisher-7.0-Migration-Guide) when you prepare to upgrade Kingfisher in your project. - -If you are using an even earlier version, see the guides below to know the steps for migrating. - -> - [Kingfisher 6.0 Migration](https://github.com/onevcat/Kingfisher/wiki/Kingfisher-6.0-Migration-Guide) - Kingfisher 6.x is NOT fully compatible with the previous version. However, migration is not difficult. Depending on your use cases, it may take no effect or several minutes to modify your existing code for the new version. Please follow the [migration guide](https://github.com/onevcat/Kingfisher/wiki/Kingfisher-6.0-Migration-Guide) when you prepare to upgrade Kingfisher in your project. -> - [Kingfisher 5.0 Migration](https://github.com/onevcat/Kingfisher/wiki/Kingfisher-5.0-Migration-Guide) - If you are upgrading to Kingfisher 5.x from 4.x, please read this for more information. -> - Kingfisher 4.0 Migration - Kingfisher 3.x should be source compatible to Kingfisher 4. The reason for a major update is that we need to specify the Swift version explicitly for Xcode. All deprecated methods in Kingfisher 3 were removed, so please ensure you have no warning left before you migrate from Kingfisher 3 with Kingfisher 4. If you have any trouble when migrating, please open an issue to discuss. -> - [Kingfisher 3.0 Migration](https://github.com/onevcat/Kingfisher/wiki/Kingfisher-3.0-Migration-Guide) - If you are upgrading to Kingfisher 3.x from an earlier version, please read this for more information. - -## Next Steps - -We prepared a [wiki page](https://github.com/onevcat/Kingfisher/wiki). You can find tons of useful things there. - -* [Installation Guide](https://github.com/onevcat/Kingfisher/wiki/Installation-Guide) - Follow it to integrate Kingfisher into your project. -* [Cheat Sheet](https://github.com/onevcat/Kingfisher/wiki/Cheat-Sheet)- Curious about what Kingfisher could do and how would it look like when used in your project? See this page for useful code snippets. If you are already familiar with Kingfisher, you could also learn new tricks to improve the way you use Kingfisher! -* [API Reference](https://swiftpackageindex.com/onevcat/Kingfisher/master/documentation/kingfisher) - Lastly, please remember to read the full API reference whenever you need more detailed documentation. - -## Other - -### Future of Kingfisher - -I want to keep Kingfisher lightweight. This framework focuses on providing a simple solution for downloading and caching images. This doesn’t mean the framework can’t be improved. Kingfisher is far from perfect, so necessary and useful updates will be made to make it better. - -### Developments and Tests - -Any contributing and pull requests are warmly welcome. However, before you plan to implement some features or try to fix an uncertain issue, it is recommended to open a discussion first. It would be appreciated if your pull requests could build with all tests green. :) - -### About the logo - -The logo of Kingfisher is inspired by [Tangram (七巧板)](http://en.wikipedia.org/wiki/Tangram), a dissection puzzle consisting of seven flat shapes from China. I believe she's a kingfisher bird instead of a swift, but someone insists that she is a pigeon. I guess I should give her a name. Hi, guys, do you have any suggestions? - -### Contact - -Follow and contact me on [Twitter](http://twitter.com/onevcat) or [Sina Weibo](http://weibo.com/onevcat). If you find an issue, [open a ticket](https://github.com/onevcat/Kingfisher/issues/new). Pull requests are warmly welcome as well. - -## Backers & Sponsors - -Open-source projects cannot live long without your help. If you find Kingfisher to be useful, please consider supporting this -project by becoming a sponsor. Your user icon or company logo shows up [on my blog](https://onevcat.com/tabs/about/) with a link to your home page. - -Become a sponsor through [GitHub Sponsors](https://github.com/sponsors/onevcat). :heart: - -Special thanks to: - -[![imgly](https://user-images.githubusercontent.com/1812216/106253726-271ed000-6218-11eb-98e0-c9c681925770.png)](https://img.ly/) - -[![emergetools](https://github-production-user-asset-6210df.s3.amazonaws.com/1019875/254794187-d44f6f50-993f-42e3-b79c-960f69c4adc1.png)](https://www.emergetools.com) - - - -### License - -Kingfisher is released under the MIT license. See LICENSE for details. diff --git a/Pods/Kingfisher/Sources/Cache/CacheSerializer.swift b/Pods/Kingfisher/Sources/Cache/CacheSerializer.swift deleted file mode 100644 index f3a94bd..0000000 --- a/Pods/Kingfisher/Sources/Cache/CacheSerializer.swift +++ /dev/null @@ -1,132 +0,0 @@ -// -// CacheSerializer.swift -// Kingfisher -// -// Created by Wei Wang on 2016/09/02. -// -// Copyright (c) 2019 Wei Wang -// -// 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 -import CoreGraphics - -/// An `CacheSerializer` is used to convert some data to an image object after -/// retrieving it from disk storage, and vice versa, to convert an image to data object -/// for storing to the disk storage. -public protocol CacheSerializer { - - /// Gets the serialized data from a provided image - /// and optional original data for caching to disk. - /// - /// - Parameters: - /// - image: The image needed to be serialized. - /// - original: The original data which is just downloaded. - /// If the image is retrieved from cache instead of - /// downloaded, it will be `nil`. - /// - Returns: The data object for storing to disk, or `nil` when no valid - /// data could be serialized. - func data(with image: KFCrossPlatformImage, original: Data?) -> Data? - - /// Gets an image from provided serialized data. - /// - /// - Parameters: - /// - data: The data from which an image should be deserialized. - /// - options: The parsed options for deserialization. - /// - Returns: An image deserialized or `nil` when no valid image - /// could be deserialized. - func image(with data: Data, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? - - /// Whether this serializer prefers to cache the original data in its implementation. - /// If `true`, after creating the image from the disk data, Kingfisher will continue to apply the processor to get - /// the final image. - /// - /// By default, it is `false` and the actual processed image is assumed to be serialized to the disk. - var originalDataUsed: Bool { get } -} - -public extension CacheSerializer { - var originalDataUsed: Bool { false } -} - -/// Represents a basic and default `CacheSerializer` used in Kingfisher disk cache system. -/// It could serialize and deserialize images in PNG, JPEG and GIF format. For -/// image other than these formats, a normalized `pngRepresentation` will be used. -public struct DefaultCacheSerializer: CacheSerializer { - - /// The default general cache serializer used across Kingfisher's cache. - public static let `default` = DefaultCacheSerializer() - - /// The compression quality when converting image to a lossy format data. Default is 1.0. - public var compressionQuality: CGFloat = 1.0 - - /// Whether the original data should be preferred when serializing the image. - /// If `true`, the input original data will be checked first and used unless the data is `nil`. - /// In that case, the serialization will fall back to creating data from image. - public var preferCacheOriginalData: Bool = false - - /// Returnes the `preferCacheOriginalData` value. When the original data is used, Kingfisher needs to re-apply the - /// processors to get the desired final image. - public var originalDataUsed: Bool { preferCacheOriginalData } - - /// Creates a cache serializer that serialize and deserialize images in PNG, JPEG and GIF format. - /// - /// - Note: - /// Use `DefaultCacheSerializer.default` unless you need to specify your own properties. - /// - public init() { } - - /// - Parameters: - /// - image: The image needed to be serialized. - /// - original: The original data which is just downloaded. - /// If the image is retrieved from cache instead of - /// downloaded, it will be `nil`. - /// - Returns: The data object for storing to disk, or `nil` when no valid - /// data could be serialized. - /// - /// - Note: - /// Only when `original` contains valid PNG, JPEG and GIF format data, the `image` will be - /// converted to the corresponding data type. Otherwise, if the `original` is provided but it is not - /// If `original` is `nil`, the input `image` will be encoded as PNG data. - public func data(with image: KFCrossPlatformImage, original: Data?) -> Data? { - if preferCacheOriginalData { - return original ?? - image.kf.data( - format: original?.kf.imageFormat ?? .unknown, - compressionQuality: compressionQuality - ) - } else { - return image.kf.data( - format: original?.kf.imageFormat ?? .unknown, - compressionQuality: compressionQuality - ) - } - } - - /// Gets an image deserialized from provided data. - /// - /// - Parameters: - /// - data: The data from which an image should be deserialized. - /// - options: Options for deserialization. - /// - Returns: An image deserialized or `nil` when no valid image - /// could be deserialized. - public func image(with data: Data, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? { - return KingfisherWrapper.image(data: data, options: options.imageCreatingOptions) - } -} diff --git a/Pods/Kingfisher/Sources/Cache/DiskStorage.swift b/Pods/Kingfisher/Sources/Cache/DiskStorage.swift deleted file mode 100644 index 89853ce..0000000 --- a/Pods/Kingfisher/Sources/Cache/DiskStorage.swift +++ /dev/null @@ -1,588 +0,0 @@ -// -// DiskStorage.swift -// Kingfisher -// -// Created by Wei Wang on 2018/10/15. -// -// Copyright (c) 2019 Wei Wang -// -// 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 - - -/// Represents a set of conception related to storage which stores a certain type of value in disk. -/// This is a namespace for the disk storage types. A `Backend` with a certain `Config` will be used to describe the -/// storage. See these composed types for more information. -public enum DiskStorage { - - /// Represents a storage back-end for the `DiskStorage`. The value is serialized to data - /// and stored as file in the file system under a specified location. - /// - /// You can config a `DiskStorage.Backend` in its initializer by passing a `DiskStorage.Config` value. - /// or modifying the `config` property after it being created. `DiskStorage` will use file's attributes to keep - /// track of a file for its expiration or size limitation. - public class Backend { - /// The config used for this disk storage. - public var config: Config - - // The final storage URL on disk, with `name` and `cachePathBlock` considered. - public let directoryURL: URL - - let metaChangingQueue: DispatchQueue - - var maybeCached : Set? - let maybeCachedCheckingQueue = DispatchQueue(label: "com.onevcat.Kingfisher.maybeCachedCheckingQueue") - - // `false` if the storage initialized with an error. This prevents unexpected forcibly crash when creating - // storage in the default cache. - private var storageReady: Bool = true - - /// Creates a disk storage with the given `DiskStorage.Config`. - /// - /// - Parameter config: The config used for this disk storage. - /// - Throws: An error if the folder for storage cannot be got or created. - public convenience init(config: Config) throws { - self.init(noThrowConfig: config, creatingDirectory: false) - try prepareDirectory() - } - - // If `creatingDirectory` is `false`, the directory preparation will be skipped. - // We need to call `prepareDirectory` manually after this returns. - init(noThrowConfig config: Config, creatingDirectory: Bool) { - var config = config - - let creation = Creation(config) - self.directoryURL = creation.directoryURL - - // Break any possible retain cycle set by outside. - config.cachePathBlock = nil - self.config = config - - metaChangingQueue = DispatchQueue(label: creation.cacheName) - setupCacheChecking() - - if creatingDirectory { - try? prepareDirectory() - } - } - - private func setupCacheChecking() { - maybeCachedCheckingQueue.async { - do { - self.maybeCached = Set() - try self.config.fileManager.contentsOfDirectory(atPath: self.directoryURL.path).forEach { fileName in - self.maybeCached?.insert(fileName) - } - } catch { - // Just disable the functionality if we fail to initialize it properly. This will just revert to - // the behavior which is to check file existence on disk directly. - self.maybeCached = nil - } - } - } - - // Creates the storage folder. - private func prepareDirectory() throws { - let fileManager = config.fileManager - let path = directoryURL.path - - guard !fileManager.fileExists(atPath: path) else { return } - - do { - try fileManager.createDirectory( - atPath: path, - withIntermediateDirectories: true, - attributes: nil) - } catch { - self.storageReady = false - throw KingfisherError.cacheError(reason: .cannotCreateDirectory(path: path, error: error)) - } - } - - /// Stores a value to the storage under the specified key and expiration policy. - /// - Parameters: - /// - value: The value to be stored. - /// - key: The key to which the `value` will be stored. If there is already a value under the key, - /// the old value will be overwritten by `value`. - /// - expiration: The expiration policy used by this store action. - /// - writeOptions: Data writing options used the new files. - /// - Throws: An error during converting the value to a data format or during writing it to disk. - public func store( - value: T, - forKey key: String, - expiration: StorageExpiration? = nil, - writeOptions: Data.WritingOptions = []) throws - { - guard storageReady else { - throw KingfisherError.cacheError(reason: .diskStorageIsNotReady(cacheURL: directoryURL)) - } - - let expiration = expiration ?? config.expiration - // The expiration indicates that already expired, no need to store. - guard !expiration.isExpired else { return } - - let data: Data - do { - data = try value.toData() - } catch { - throw KingfisherError.cacheError(reason: .cannotConvertToData(object: value, error: error)) - } - - let fileURL = cacheFileURL(forKey: key) - do { - try data.write(to: fileURL, options: writeOptions) - } catch { - throw KingfisherError.cacheError( - reason: .cannotCreateCacheFile(fileURL: fileURL, key: key, data: data, error: error) - ) - } - - let now = Date() - let attributes: [FileAttributeKey : Any] = [ - // The last access date. - .creationDate: now.fileAttributeDate, - // The estimated expiration date. - .modificationDate: expiration.estimatedExpirationSinceNow.fileAttributeDate - ] - do { - try config.fileManager.setAttributes(attributes, ofItemAtPath: fileURL.path) - } catch { - try? config.fileManager.removeItem(at: fileURL) - throw KingfisherError.cacheError( - reason: .cannotSetCacheFileAttribute( - filePath: fileURL.path, - attributes: attributes, - error: error - ) - ) - } - - maybeCachedCheckingQueue.async { - self.maybeCached?.insert(fileURL.lastPathComponent) - } - } - - /// Gets a value from the storage. - /// - Parameters: - /// - key: The cache key of value. - /// - extendingExpiration: The expiration policy used by this getting action. - /// - Throws: An error during converting the data to a value or during operation of disk files. - /// - Returns: The value under `key` if it is valid and found in the storage. Otherwise, `nil`. - public func value(forKey key: String, extendingExpiration: ExpirationExtending = .cacheTime) throws -> T? { - return try value(forKey: key, referenceDate: Date(), actuallyLoad: true, extendingExpiration: extendingExpiration) - } - - func value( - forKey key: String, - referenceDate: Date, - actuallyLoad: Bool, - extendingExpiration: ExpirationExtending) throws -> T? - { - guard storageReady else { - throw KingfisherError.cacheError(reason: .diskStorageIsNotReady(cacheURL: directoryURL)) - } - - let fileManager = config.fileManager - let fileURL = cacheFileURL(forKey: key) - let filePath = fileURL.path - - let fileMaybeCached = maybeCachedCheckingQueue.sync { - return maybeCached?.contains(fileURL.lastPathComponent) ?? true - } - guard fileMaybeCached else { - return nil - } - guard fileManager.fileExists(atPath: filePath) else { - return nil - } - - let meta: FileMeta - do { - let resourceKeys: Set = [.contentModificationDateKey, .creationDateKey] - meta = try FileMeta(fileURL: fileURL, resourceKeys: resourceKeys) - } catch { - throw KingfisherError.cacheError( - reason: .invalidURLResource(error: error, key: key, url: fileURL)) - } - - if meta.expired(referenceDate: referenceDate) { - return nil - } - if !actuallyLoad { return T.empty } - - do { - let data = try Data(contentsOf: fileURL) - let obj = try T.fromData(data) - metaChangingQueue.async { - meta.extendExpiration(with: fileManager, extendingExpiration: extendingExpiration) - } - return obj - } catch { - throw KingfisherError.cacheError(reason: .cannotLoadDataFromDisk(url: fileURL, error: error)) - } - } - - /// Whether there is valid cached data under a given key. - /// - Parameter key: The cache key of value. - /// - Returns: If there is valid data under the key, `true`. Otherwise, `false`. - /// - /// - Note: - /// This method does not actually load the data from disk, so it is faster than directly loading the cached value - /// by checking the nullability of `value(forKey:extendingExpiration:)` method. - /// - public func isCached(forKey key: String) -> Bool { - return isCached(forKey: key, referenceDate: Date()) - } - - /// Whether there is valid cached data under a given key and a reference date. - /// - Parameters: - /// - key: The cache key of value. - /// - referenceDate: A reference date to check whether the cache is still valid. - /// - Returns: If there is valid data under the key, `true`. Otherwise, `false`. - /// - /// - Note: - /// If you pass `Date()` to `referenceDate`, this method is identical to `isCached(forKey:)`. Use the - /// `referenceDate` to determine whether the cache is still valid for a future date. - public func isCached(forKey key: String, referenceDate: Date) -> Bool { - do { - let result = try value( - forKey: key, - referenceDate: referenceDate, - actuallyLoad: false, - extendingExpiration: .none - ) - return result != nil - } catch { - return false - } - } - - /// Removes a value from a specified key. - /// - Parameter key: The cache key of value. - /// - Throws: An error during removing the value. - public func remove(forKey key: String) throws { - let fileURL = cacheFileURL(forKey: key) - try removeFile(at: fileURL) - } - - func removeFile(at url: URL) throws { - try config.fileManager.removeItem(at: url) - } - - /// Removes all values in this storage. - /// - Throws: An error during removing the values. - public func removeAll() throws { - try removeAll(skipCreatingDirectory: false) - } - - func removeAll(skipCreatingDirectory: Bool) throws { - try config.fileManager.removeItem(at: directoryURL) - if !skipCreatingDirectory { - try prepareDirectory() - } - } - - /// The URL of the cached file with a given computed `key`. - /// - /// - Parameter key: The final computed key used when caching the image. Please note that usually this is not - /// the `cacheKey` of an image `Source`. It is the computed key with processor identifier considered. - /// - /// - Note: - /// This method does not guarantee there is an image already cached in the returned URL. It just gives your - /// the URL that the image should be if it exists in disk storage, with the give key. - /// - public func cacheFileURL(forKey key: String) -> URL { - let fileName = cacheFileName(forKey: key) - return directoryURL.appendingPathComponent(fileName, isDirectory: false) - } - - func cacheFileName(forKey key: String) -> String { - if config.usesHashedFileName { - let hashedKey = key.kf.md5 - if let ext = config.pathExtension { - return "\(hashedKey).\(ext)" - } else if config.autoExtAfterHashedFileName, - let ext = key.kf.ext { - return "\(hashedKey).\(ext)" - } - return hashedKey - } else { - if let ext = config.pathExtension { - return "\(key).\(ext)" - } - return key - } - } - - func allFileURLs(for propertyKeys: [URLResourceKey]) throws -> [URL] { - let fileManager = config.fileManager - - guard let directoryEnumerator = fileManager.enumerator( - at: directoryURL, includingPropertiesForKeys: propertyKeys, options: .skipsHiddenFiles) else - { - throw KingfisherError.cacheError(reason: .fileEnumeratorCreationFailed(url: directoryURL)) - } - - guard let urls = directoryEnumerator.allObjects as? [URL] else { - throw KingfisherError.cacheError(reason: .invalidFileEnumeratorContent(url: directoryURL)) - } - return urls - } - - /// Removes all expired values from this storage. - /// - Throws: A file manager error during removing the file. - /// - Returns: The URLs for removed files. - public func removeExpiredValues() throws -> [URL] { - return try removeExpiredValues(referenceDate: Date()) - } - - func removeExpiredValues(referenceDate: Date) throws -> [URL] { - let propertyKeys: [URLResourceKey] = [ - .isDirectoryKey, - .contentModificationDateKey - ] - - let urls = try allFileURLs(for: propertyKeys) - let keys = Set(propertyKeys) - let expiredFiles = urls.filter { fileURL in - do { - let meta = try FileMeta(fileURL: fileURL, resourceKeys: keys) - if meta.isDirectory { - return false - } - return meta.expired(referenceDate: referenceDate) - } catch { - return true - } - } - try expiredFiles.forEach { url in - try removeFile(at: url) - } - return expiredFiles - } - - /// Removes all size exceeded values from this storage. - /// - Throws: A file manager error during removing the file. - /// - Returns: The URLs for removed files. - /// - /// - Note: This method checks `config.sizeLimit` and remove cached files in an LRU (Least Recently Used) way. - func removeSizeExceededValues() throws -> [URL] { - - if config.sizeLimit == 0 { return [] } // Back compatible. 0 means no limit. - - var size = try totalSize() - if size < config.sizeLimit { return [] } - - let propertyKeys: [URLResourceKey] = [ - .isDirectoryKey, - .creationDateKey, - .fileSizeKey - ] - let keys = Set(propertyKeys) - - let urls = try allFileURLs(for: propertyKeys) - var pendings: [FileMeta] = urls.compactMap { fileURL in - guard let meta = try? FileMeta(fileURL: fileURL, resourceKeys: keys) else { - return nil - } - return meta - } - // Sort by last access date. Most recent file first. - pendings.sort(by: FileMeta.lastAccessDate) - - var removed: [URL] = [] - let target = config.sizeLimit / 2 - while size > target, let meta = pendings.popLast() { - size -= UInt(meta.fileSize) - try removeFile(at: meta.url) - removed.append(meta.url) - } - return removed - } - - /// Gets the total file size of the folder in bytes. - public func totalSize() throws -> UInt { - let propertyKeys: [URLResourceKey] = [.fileSizeKey] - let urls = try allFileURLs(for: propertyKeys) - let keys = Set(propertyKeys) - let totalSize: UInt = urls.reduce(0) { size, fileURL in - do { - let meta = try FileMeta(fileURL: fileURL, resourceKeys: keys) - return size + UInt(meta.fileSize) - } catch { - return size - } - } - return totalSize - } - } -} - -extension DiskStorage { - /// Represents the config used in a `DiskStorage`. - public struct Config { - - /// The file size limit on disk of the storage in bytes. 0 means no limit. - public var sizeLimit: UInt - - /// The `StorageExpiration` used in this disk storage. Default is `.days(7)`, - /// means that the disk cache would expire in one week. - public var expiration: StorageExpiration = .days(7) - - /// The preferred extension of cache item. It will be appended to the file name as its extension. - /// Default is `nil`, means that the cache file does not contain a file extension. - public var pathExtension: String? = nil - - /// Default is `true`, means that the cache file name will be hashed before storing. - public var usesHashedFileName = true - - /// Default is `false` - /// If set to `true`, image extension will be extracted from original file name and append to - /// the hased file name and used as the cache key on disk. - public var autoExtAfterHashedFileName = false - - /// Closure that takes in initial directory path and generates - /// the final disk cache path. You can use it to fully customize your cache path. - public var cachePathBlock: ((_ directory: URL, _ cacheName: String) -> URL)! = { - (directory, cacheName) in - return directory.appendingPathComponent(cacheName, isDirectory: true) - } - - let name: String - let fileManager: FileManager - let directory: URL? - - /// Creates a config value based on given parameters. - /// - /// - Parameters: - /// - name: The name of cache. It is used as a part of storage folder. It is used to identify the disk - /// storage. Two storages with the same `name` would share the same folder in disk, and it should - /// be prevented. - /// - sizeLimit: The size limit in bytes for all existing files in the disk storage. - /// - fileManager: The `FileManager` used to manipulate files on disk. Default is `FileManager.default`. - /// - directory: The URL where the disk storage should live. The storage will use this as the root folder, - /// and append a path which is constructed by input `name`. Default is `nil`, indicates that - /// the cache directory under user domain mask will be used. - public init( - name: String, - sizeLimit: UInt, - fileManager: FileManager = .default, - directory: URL? = nil) - { - self.name = name - self.fileManager = fileManager - self.directory = directory - self.sizeLimit = sizeLimit - } - } -} - -extension DiskStorage { - struct FileMeta { - - let url: URL - - let lastAccessDate: Date? - let estimatedExpirationDate: Date? - let isDirectory: Bool - let fileSize: Int - - static func lastAccessDate(lhs: FileMeta, rhs: FileMeta) -> Bool { - return lhs.lastAccessDate ?? .distantPast > rhs.lastAccessDate ?? .distantPast - } - - init(fileURL: URL, resourceKeys: Set) throws { - let meta = try fileURL.resourceValues(forKeys: resourceKeys) - self.init( - fileURL: fileURL, - lastAccessDate: meta.creationDate, - estimatedExpirationDate: meta.contentModificationDate, - isDirectory: meta.isDirectory ?? false, - fileSize: meta.fileSize ?? 0) - } - - init( - fileURL: URL, - lastAccessDate: Date?, - estimatedExpirationDate: Date?, - isDirectory: Bool, - fileSize: Int) - { - self.url = fileURL - self.lastAccessDate = lastAccessDate - self.estimatedExpirationDate = estimatedExpirationDate - self.isDirectory = isDirectory - self.fileSize = fileSize - } - - func expired(referenceDate: Date) -> Bool { - return estimatedExpirationDate?.isPast(referenceDate: referenceDate) ?? true - } - - func extendExpiration(with fileManager: FileManager, extendingExpiration: ExpirationExtending) { - guard let lastAccessDate = lastAccessDate, - let lastEstimatedExpiration = estimatedExpirationDate else - { - return - } - - let attributes: [FileAttributeKey : Any] - - switch extendingExpiration { - case .none: - // not extending expiration time here - return - case .cacheTime: - let originalExpiration: StorageExpiration = - .seconds(lastEstimatedExpiration.timeIntervalSince(lastAccessDate)) - attributes = [ - .creationDate: Date().fileAttributeDate, - .modificationDate: originalExpiration.estimatedExpirationSinceNow.fileAttributeDate - ] - case .expirationTime(let expirationTime): - attributes = [ - .creationDate: Date().fileAttributeDate, - .modificationDate: expirationTime.estimatedExpirationSinceNow.fileAttributeDate - ] - } - - try? fileManager.setAttributes(attributes, ofItemAtPath: url.path) - } - } -} - -extension DiskStorage { - struct Creation { - let directoryURL: URL - let cacheName: String - - init(_ config: Config) { - let url: URL - if let directory = config.directory { - url = directory - } else { - url = config.fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] - } - - cacheName = "com.onevcat.Kingfisher.ImageCache.\(config.name)" - directoryURL = config.cachePathBlock(url, cacheName) - } - } -} diff --git a/Pods/Kingfisher/Sources/Cache/FormatIndicatedCacheSerializer.swift b/Pods/Kingfisher/Sources/Cache/FormatIndicatedCacheSerializer.swift deleted file mode 100644 index cdfb7c3..0000000 --- a/Pods/Kingfisher/Sources/Cache/FormatIndicatedCacheSerializer.swift +++ /dev/null @@ -1,118 +0,0 @@ -// -// RequestModifier.swift -// Kingfisher -// -// Created by Junyu Kuang on 5/28/17. -// -// Copyright (c) 2019 Wei Wang -// -// 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 -import CoreGraphics - -/// `FormatIndicatedCacheSerializer` lets you indicate an image format for serialized caches. -/// -/// It could serialize and deserialize PNG, JPEG and GIF images. For -/// image other than these formats, a normalized `pngRepresentation` will be used. -/// -/// Example: -/// ```` -/// let profileImageSize = CGSize(width: 44, height: 44) -/// -/// // A round corner image. -/// let imageProcessor = RoundCornerImageProcessor( -/// cornerRadius: profileImageSize.width / 2, targetSize: profileImageSize) -/// -/// let optionsInfo: KingfisherOptionsInfo = [ -/// .cacheSerializer(FormatIndicatedCacheSerializer.png), -/// .processor(imageProcessor)] -/// -/// A URL pointing to a JPEG image. -/// let url = URL(string: "https://example.com/image.jpg")! -/// -/// // Image will be always cached as PNG format to preserve alpha channel for round rectangle. -/// // So when you load it from cache again later, it will be still round cornered. -/// // Otherwise, the corner part would be filled by white color (since JPEG does not contain an alpha channel). -/// imageView.kf.setImage(with: url, options: optionsInfo) -/// ```` -public struct FormatIndicatedCacheSerializer: CacheSerializer { - - /// A `FormatIndicatedCacheSerializer` which converts image from and to PNG format. If the image cannot be - /// represented by PNG format, it will fallback to its real format which is determined by `original` data. - public static let png = FormatIndicatedCacheSerializer(imageFormat: .PNG, jpegCompressionQuality: nil) - - /// A `FormatIndicatedCacheSerializer` which converts image from and to JPEG format. If the image cannot be - /// represented by JPEG format, it will fallback to its real format which is determined by `original` data. - /// The compression quality is 1.0 when using this serializer. If you need to set a customized compression quality, - /// use `jpeg(compressionQuality:)`. - public static let jpeg = FormatIndicatedCacheSerializer(imageFormat: .JPEG, jpegCompressionQuality: 1.0) - - /// A `FormatIndicatedCacheSerializer` which converts image from and to JPEG format with a settable compression - /// quality. If the image cannot be represented by JPEG format, it will fallback to its real format which is - /// determined by `original` data. - /// - Parameter compressionQuality: The compression quality when converting image to JPEG data. - public static func jpeg(compressionQuality: CGFloat) -> FormatIndicatedCacheSerializer { - return FormatIndicatedCacheSerializer(imageFormat: .JPEG, jpegCompressionQuality: compressionQuality) - } - - /// A `FormatIndicatedCacheSerializer` which converts image from and to GIF format. If the image cannot be - /// represented by GIF format, it will fallback to its real format which is determined by `original` data. - public static let gif = FormatIndicatedCacheSerializer(imageFormat: .GIF, jpegCompressionQuality: nil) - - /// The indicated image format. - private let imageFormat: ImageFormat - - /// The compression quality used for loss image format (like JPEG). - private let jpegCompressionQuality: CGFloat? - - /// Creates data which represents the given `image` under a format. - public func data(with image: KFCrossPlatformImage, original: Data?) -> Data? { - - func imageData(withFormat imageFormat: ImageFormat) -> Data? { - return autoreleasepool { () -> Data? in - switch imageFormat { - case .PNG: return image.kf.pngRepresentation() - case .JPEG: return image.kf.jpegRepresentation(compressionQuality: jpegCompressionQuality ?? 1.0) - case .GIF: return image.kf.gifRepresentation() - case .unknown: return nil - } - } - } - - // generate data with indicated image format - if let data = imageData(withFormat: imageFormat) { - return data - } - - let originalFormat = original?.kf.imageFormat ?? .unknown - - // generate data with original image's format - if originalFormat != imageFormat, let data = imageData(withFormat: originalFormat) { - return data - } - - return original ?? image.kf.normalized.kf.pngRepresentation() - } - - /// Same implementation as `DefaultCacheSerializer`. - public func image(with data: Data, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? { - return KingfisherWrapper.image(data: data, options: options.imageCreatingOptions) - } -} diff --git a/Pods/Kingfisher/Sources/Cache/ImageCache.swift b/Pods/Kingfisher/Sources/Cache/ImageCache.swift deleted file mode 100644 index 508c79a..0000000 --- a/Pods/Kingfisher/Sources/Cache/ImageCache.swift +++ /dev/null @@ -1,882 +0,0 @@ -// -// ImageCache.swift -// Kingfisher -// -// Created by Wei Wang on 15/4/6. -// -// Copyright (c) 2019 Wei Wang -// -// 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 os(macOS) -import AppKit -#else -import UIKit -#endif - -extension Notification.Name { - /// This notification will be sent when the disk cache got cleaned either there are cached files expired or the - /// total size exceeding the max allowed size. The manually invoking of `clearDiskCache` method will not trigger - /// this notification. - /// - /// The `object` of this notification is the `ImageCache` object which sends the notification. - /// A list of removed hashes (files) could be retrieved by accessing the array under - /// `KingfisherDiskCacheCleanedHashKey` key in `userInfo` of the notification object you received. - /// By checking the array, you could know the hash codes of files are removed. - public static let KingfisherDidCleanDiskCache = - Notification.Name("com.onevcat.Kingfisher.KingfisherDidCleanDiskCache") -} - -/// Key for array of cleaned hashes in `userInfo` of `KingfisherDidCleanDiskCacheNotification`. -public let KingfisherDiskCacheCleanedHashKey = "com.onevcat.Kingfisher.cleanedHash" - -/// Cache type of a cached image. -/// - none: The image is not cached yet when retrieving it. -/// - memory: The image is cached in memory. -/// - disk: The image is cached in disk. -public enum CacheType { - /// The image is not cached yet when retrieving it. - case none - /// The image is cached in memory. - case memory - /// The image is cached in disk. - case disk - - /// Whether the cache type represents the image is already cached or not. - public var cached: Bool { - switch self { - case .memory, .disk: return true - case .none: return false - } - } -} - -/// Represents the caching operation result. -public struct CacheStoreResult { - - /// The cache result for memory cache. Caching an image to memory will never fail. - public let memoryCacheResult: Result<(), Never> - - /// The cache result for disk cache. If an error happens during caching operation, - /// you can get it from `.failure` case of this `diskCacheResult`. - public let diskCacheResult: Result<(), KingfisherError> -} - -extension KFCrossPlatformImage: CacheCostCalculable { - /// Cost of an image - public var cacheCost: Int { return kf.cost } -} - -extension Data: DataTransformable { - public func toData() throws -> Data { - return self - } - - public static func fromData(_ data: Data) throws -> Data { - return data - } - - public static let empty = Data() -} - - -/// Represents the getting image operation from the cache. -/// -/// - disk: The image can be retrieved from disk cache. -/// - memory: The image can be retrieved memory cache. -/// - none: The image does not exist in the cache. -public enum ImageCacheResult { - - /// The image can be retrieved from disk cache. - case disk(KFCrossPlatformImage) - - /// The image can be retrieved memory cache. - case memory(KFCrossPlatformImage) - - /// The image does not exist in the cache. - case none - - /// Extracts the image from cache result. It returns the associated `Image` value for - /// `.disk` and `.memory` case. For `.none` case, `nil` is returned. - public var image: KFCrossPlatformImage? { - switch self { - case .disk(let image): return image - case .memory(let image): return image - case .none: return nil - } - } - - /// Returns the corresponding `CacheType` value based on the result type of `self`. - public var cacheType: CacheType { - switch self { - case .disk: return .disk - case .memory: return .memory - case .none: return .none - } - } -} - -/// Represents a hybrid caching system which is composed by a `MemoryStorage.Backend` and a `DiskStorage.Backend`. -/// `ImageCache` is a high level abstract for storing an image as well as its data to memory and disk, and -/// retrieving them back. -/// -/// While a default image cache object will be used if you prefer the extension methods of Kingfisher, you can create -/// your own cache object and configure its storages as your need. This class also provide an interface for you to set -/// the memory and disk storage config. -open class ImageCache { - - // MARK: Singleton - /// The default `ImageCache` object. Kingfisher will use this cache for its related methods if there is no - /// other cache specified. The `name` of this default cache is "default", and you should not use this name - /// for any of your customize cache. - public static let `default` = ImageCache(name: "default") - - - // MARK: Public Properties - /// The `MemoryStorage.Backend` object used in this cache. This storage holds loaded images in memory with a - /// reasonable expire duration and a maximum memory usage. To modify the configuration of a storage, just set - /// the storage `config` and its properties. - public let memoryStorage: MemoryStorage.Backend - - /// The `DiskStorage.Backend` object used in this cache. This storage stores loaded images in disk with a - /// reasonable expire duration and a maximum disk usage. To modify the configuration of a storage, just set - /// the storage `config` and its properties. - public let diskStorage: DiskStorage.Backend - - private let ioQueue: DispatchQueue - - /// Closure that defines the disk cache path from a given path and cacheName. - public typealias DiskCachePathClosure = (URL, String) -> URL - - // MARK: Initializers - - /// Creates an `ImageCache` from a customized `MemoryStorage` and `DiskStorage`. - /// - /// - Parameters: - /// - memoryStorage: The `MemoryStorage.Backend` object to use in the image cache. - /// - diskStorage: The `DiskStorage.Backend` object to use in the image cache. - public init( - memoryStorage: MemoryStorage.Backend, - diskStorage: DiskStorage.Backend) - { - self.memoryStorage = memoryStorage - self.diskStorage = diskStorage - let ioQueueName = "com.onevcat.Kingfisher.ImageCache.ioQueue.\(UUID().uuidString)" - ioQueue = DispatchQueue(label: ioQueueName) - - let notifications: [(Notification.Name, Selector)] - #if !os(macOS) && !os(watchOS) - notifications = [ - (UIApplication.didReceiveMemoryWarningNotification, #selector(clearMemoryCache)), - (UIApplication.willTerminateNotification, #selector(cleanExpiredDiskCache)), - (UIApplication.didEnterBackgroundNotification, #selector(backgroundCleanExpiredDiskCache)) - ] - #elseif os(macOS) - notifications = [ - (NSApplication.willResignActiveNotification, #selector(cleanExpiredDiskCache)), - ] - #else - notifications = [] - #endif - notifications.forEach { - NotificationCenter.default.addObserver(self, selector: $0.1, name: $0.0, object: nil) - } - } - - /// Creates an `ImageCache` with a given `name`. Both `MemoryStorage` and `DiskStorage` will be created - /// with a default config based on the `name`. - /// - /// - Parameter name: The name of cache object. It is used to setup disk cache directories and IO queue. - /// You should not use the same `name` for different caches, otherwise, the disk storage would - /// be conflicting to each other. The `name` should not be an empty string. - public convenience init(name: String) { - self.init(noThrowName: name, cacheDirectoryURL: nil, diskCachePathClosure: nil) - } - - /// Creates an `ImageCache` with a given `name`, cache directory `path` - /// and a closure to modify the cache directory. - /// - /// - Parameters: - /// - name: The name of cache object. It is used to setup disk cache directories and IO queue. - /// You should not use the same `name` for different caches, otherwise, the disk storage would - /// be conflicting to each other. - /// - cacheDirectoryURL: Location of cache directory URL on disk. It will be internally pass to the - /// initializer of `DiskStorage` as the disk cache directory. If `nil`, the cache - /// directory under user domain mask will be used. - /// - diskCachePathClosure: Closure that takes in an optional initial path string and generates - /// the final disk cache path. You could use it to fully customize your cache path. - /// - Throws: An error that happens during image cache creating, such as unable to create a directory at the given - /// path. - public convenience init( - name: String, - cacheDirectoryURL: URL?, - diskCachePathClosure: DiskCachePathClosure? = nil - ) throws - { - if name.isEmpty { - fatalError("[Kingfisher] You should specify a name for the cache. A cache with empty name is not permitted.") - } - - let memoryStorage = ImageCache.createMemoryStorage() - - let config = ImageCache.createConfig( - name: name, cacheDirectoryURL: cacheDirectoryURL, diskCachePathClosure: diskCachePathClosure - ) - let diskStorage = try DiskStorage.Backend(config: config) - self.init(memoryStorage: memoryStorage, diskStorage: diskStorage) - } - - convenience init( - noThrowName name: String, - cacheDirectoryURL: URL?, - diskCachePathClosure: DiskCachePathClosure? - ) - { - if name.isEmpty { - fatalError("[Kingfisher] You should specify a name for the cache. A cache with empty name is not permitted.") - } - - let memoryStorage = ImageCache.createMemoryStorage() - - let config = ImageCache.createConfig( - name: name, cacheDirectoryURL: cacheDirectoryURL, diskCachePathClosure: diskCachePathClosure - ) - let diskStorage = DiskStorage.Backend(noThrowConfig: config, creatingDirectory: true) - self.init(memoryStorage: memoryStorage, diskStorage: diskStorage) - } - - private static func createMemoryStorage() -> MemoryStorage.Backend { - let totalMemory = ProcessInfo.processInfo.physicalMemory - let costLimit = totalMemory / 4 - let memoryStorage = MemoryStorage.Backend(config: - .init(totalCostLimit: (costLimit > Int.max) ? Int.max : Int(costLimit))) - return memoryStorage - } - - private static func createConfig( - name: String, - cacheDirectoryURL: URL?, - diskCachePathClosure: DiskCachePathClosure? = nil - ) -> DiskStorage.Config - { - var diskConfig = DiskStorage.Config( - name: name, - sizeLimit: 0, - directory: cacheDirectoryURL - ) - if let closure = diskCachePathClosure { - diskConfig.cachePathBlock = closure - } - return diskConfig - } - - deinit { - NotificationCenter.default.removeObserver(self) - } - - // MARK: Storing Images - - open func store(_ image: KFCrossPlatformImage, - original: Data? = nil, - forKey key: String, - options: KingfisherParsedOptionsInfo, - toDisk: Bool = true, - completionHandler: ((CacheStoreResult) -> Void)? = nil) - { - let identifier = options.processor.identifier - let callbackQueue = options.callbackQueue - - let computedKey = key.computedKey(with: identifier) - // Memory storage should not throw. - memoryStorage.storeNoThrow(value: image, forKey: computedKey, expiration: options.memoryCacheExpiration) - - guard toDisk else { - if let completionHandler = completionHandler { - let result = CacheStoreResult(memoryCacheResult: .success(()), diskCacheResult: .success(())) - callbackQueue.execute { completionHandler(result) } - } - return - } - - ioQueue.async { - let serializer = options.cacheSerializer - if let data = serializer.data(with: image, original: original) { - self.syncStoreToDisk( - data, - forKey: key, - processorIdentifier: identifier, - callbackQueue: callbackQueue, - expiration: options.diskCacheExpiration, - writeOptions: options.diskStoreWriteOptions, - completionHandler: completionHandler) - } else { - guard let completionHandler = completionHandler else { return } - - let diskError = KingfisherError.cacheError( - reason: .cannotSerializeImage(image: image, original: original, serializer: serializer)) - let result = CacheStoreResult( - memoryCacheResult: .success(()), - diskCacheResult: .failure(diskError)) - callbackQueue.execute { completionHandler(result) } - } - } - } - - /// Stores an image to the cache. - /// - /// - Parameters: - /// - image: The image to be stored. - /// - original: The original data of the image. This value will be forwarded to the provided `serializer` for - /// further use. By default, Kingfisher uses a `DefaultCacheSerializer` to serialize the image to - /// data for caching in disk, it checks the image format based on `original` data to determine in - /// which image format should be used. For other types of `serializer`, it depends on their - /// implementation detail on how to use this original data. - /// - key: The key used for caching the image. - /// - identifier: The identifier of processor being used for caching. If you are using a processor for the - /// image, pass the identifier of processor to this parameter. - /// - serializer: The `CacheSerializer` - /// - toDisk: Whether this image should be cached to disk or not. If `false`, the image is only cached in memory. - /// Otherwise, it is cached in both memory storage and disk storage. Default is `true`. - /// - callbackQueue: The callback queue on which `completionHandler` is invoked. Default is `.untouch`. For case - /// that `toDisk` is `false`, a `.untouch` queue means `callbackQueue` will be invoked from the - /// caller queue of this method. If `toDisk` is `true`, the `completionHandler` will be called - /// from an internal file IO queue. To change this behavior, specify another `CallbackQueue` - /// value. - /// - completionHandler: A closure which is invoked when the cache operation finishes. - open func store(_ image: KFCrossPlatformImage, - original: Data? = nil, - forKey key: String, - processorIdentifier identifier: String = "", - cacheSerializer serializer: CacheSerializer = DefaultCacheSerializer.default, - toDisk: Bool = true, - callbackQueue: CallbackQueue = .untouch, - completionHandler: ((CacheStoreResult) -> Void)? = nil) - { - struct TempProcessor: ImageProcessor { - let identifier: String - func process(item: ImageProcessItem, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? { - return nil - } - } - - let options = KingfisherParsedOptionsInfo([ - .processor(TempProcessor(identifier: identifier)), - .cacheSerializer(serializer), - .callbackQueue(callbackQueue) - ]) - store(image, original: original, forKey: key, options: options, - toDisk: toDisk, completionHandler: completionHandler) - } - - open func storeToDisk( - _ data: Data, - forKey key: String, - processorIdentifier identifier: String = "", - expiration: StorageExpiration? = nil, - callbackQueue: CallbackQueue = .untouch, - completionHandler: ((CacheStoreResult) -> Void)? = nil) - { - ioQueue.async { - self.syncStoreToDisk( - data, - forKey: key, - processorIdentifier: identifier, - callbackQueue: callbackQueue, - expiration: expiration, - completionHandler: completionHandler) - } - } - - private func syncStoreToDisk( - _ data: Data, - forKey key: String, - processorIdentifier identifier: String = "", - callbackQueue: CallbackQueue = .untouch, - expiration: StorageExpiration? = nil, - writeOptions: Data.WritingOptions = [], - completionHandler: ((CacheStoreResult) -> Void)? = nil) - { - let computedKey = key.computedKey(with: identifier) - let result: CacheStoreResult - do { - try self.diskStorage.store(value: data, forKey: computedKey, expiration: expiration, writeOptions: writeOptions) - result = CacheStoreResult(memoryCacheResult: .success(()), diskCacheResult: .success(())) - } catch { - let diskError: KingfisherError - if let error = error as? KingfisherError { - diskError = error - } else { - diskError = .cacheError(reason: .cannotConvertToData(object: data, error: error)) - } - - result = CacheStoreResult( - memoryCacheResult: .success(()), - diskCacheResult: .failure(diskError) - ) - } - if let completionHandler = completionHandler { - callbackQueue.execute { completionHandler(result) } - } - } - - // MARK: Removing Images - - /// Removes the image for the given key from the cache. - /// - /// - Parameters: - /// - key: The key used for caching the image. - /// - identifier: The identifier of processor being used for caching. If you are using a processor for the - /// image, pass the identifier of processor to this parameter. - /// - fromMemory: Whether this image should be removed from memory storage or not. - /// If `false`, the image won't be removed from the memory storage. Default is `true`. - /// - fromDisk: Whether this image should be removed from disk storage or not. - /// If `false`, the image won't be removed from the disk storage. Default is `true`. - /// - callbackQueue: The callback queue on which `completionHandler` is invoked. Default is `.untouch`. - /// - completionHandler: A closure which is invoked when the cache removing operation finishes. - open func removeImage(forKey key: String, - processorIdentifier identifier: String = "", - fromMemory: Bool = true, - fromDisk: Bool = true, - callbackQueue: CallbackQueue = .untouch, - completionHandler: (() -> Void)? = nil) - { - let computedKey = key.computedKey(with: identifier) - - if fromMemory { - memoryStorage.remove(forKey: computedKey) - } - - if fromDisk { - ioQueue.async{ - try? self.diskStorage.remove(forKey: computedKey) - if let completionHandler = completionHandler { - callbackQueue.execute { completionHandler() } - } - } - } else { - if let completionHandler = completionHandler { - callbackQueue.execute { completionHandler() } - } - } - } - - // MARK: Getting Images - - /// Gets an image for a given key from the cache, either from memory storage or disk storage. - /// - /// - Parameters: - /// - key: The key used for caching the image. - /// - options: The `KingfisherParsedOptionsInfo` options setting used for retrieving the image. - /// - callbackQueue: The callback queue on which `completionHandler` is invoked. Default is `.mainCurrentOrAsync`. - /// - completionHandler: A closure which is invoked when the image getting operation finishes. If the - /// image retrieving operation finishes without problem, an `ImageCacheResult` value - /// will be sent to this closure as result. Otherwise, a `KingfisherError` result - /// with detail failing reason will be sent. - open func retrieveImage( - forKey key: String, - options: KingfisherParsedOptionsInfo, - callbackQueue: CallbackQueue = .mainCurrentOrAsync, - completionHandler: ((Result) -> Void)?) - { - // No completion handler. No need to start working and early return. - guard let completionHandler = completionHandler else { return } - - // Try to check the image from memory cache first. - if let image = retrieveImageInMemoryCache(forKey: key, options: options) { - callbackQueue.execute { completionHandler(.success(.memory(image))) } - } else if options.fromMemoryCacheOrRefresh { - callbackQueue.execute { completionHandler(.success(.none)) } - } else { - - // Begin to disk search. - self.retrieveImageInDiskCache(forKey: key, options: options, callbackQueue: callbackQueue) { - result in - switch result { - case .success(let image): - - guard let image = image else { - // No image found in disk storage. - callbackQueue.execute { completionHandler(.success(.none)) } - return - } - - // Cache the disk image to memory. - // We are passing `false` to `toDisk`, the memory cache does not change - // callback queue, we can call `completionHandler` without another dispatch. - var cacheOptions = options - cacheOptions.callbackQueue = .untouch - self.store( - image, - forKey: key, - options: cacheOptions, - toDisk: false) - { - _ in - callbackQueue.execute { completionHandler(.success(.disk(image))) } - } - case .failure(let error): - callbackQueue.execute { completionHandler(.failure(error)) } - } - } - } - } - - /// Gets an image for a given key from the cache, either from memory storage or disk storage. - /// - /// - Parameters: - /// - key: The key used for caching the image. - /// - options: The `KingfisherOptionsInfo` options setting used for retrieving the image. - /// - callbackQueue: The callback queue on which `completionHandler` is invoked. Default is `.mainCurrentOrAsync`. - /// - completionHandler: A closure which is invoked when the image getting operation finishes. If the - /// image retrieving operation finishes without problem, an `ImageCacheResult` value - /// will be sent to this closure as result. Otherwise, a `KingfisherError` result - /// with detail failing reason will be sent. - /// - /// Note: This method is marked as `open` for only compatible purpose. Do not overide this method. Instead, override - /// the version receives `KingfisherParsedOptionsInfo` instead. - open func retrieveImage(forKey key: String, - options: KingfisherOptionsInfo? = nil, - callbackQueue: CallbackQueue = .mainCurrentOrAsync, - completionHandler: ((Result) -> Void)?) - { - retrieveImage( - forKey: key, - options: KingfisherParsedOptionsInfo(options), - callbackQueue: callbackQueue, - completionHandler: completionHandler) - } - - /// Gets an image for a given key from the memory storage. - /// - /// - Parameters: - /// - key: The key used for caching the image. - /// - options: The `KingfisherParsedOptionsInfo` options setting used for retrieving the image. - /// - Returns: The image stored in memory cache, if exists and valid. Otherwise, if the image does not exist or - /// has already expired, `nil` is returned. - open func retrieveImageInMemoryCache( - forKey key: String, - options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? - { - let computedKey = key.computedKey(with: options.processor.identifier) - return memoryStorage.value(forKey: computedKey, extendingExpiration: options.memoryCacheAccessExtendingExpiration) - } - - /// Gets an image for a given key from the memory storage. - /// - /// - Parameters: - /// - key: The key used for caching the image. - /// - options: The `KingfisherOptionsInfo` options setting used for retrieving the image. - /// - Returns: The image stored in memory cache, if exists and valid. Otherwise, if the image does not exist or - /// has already expired, `nil` is returned. - /// - /// Note: This method is marked as `open` for only compatible purpose. Do not overide this method. Instead, override - /// the version receives `KingfisherParsedOptionsInfo` instead. - open func retrieveImageInMemoryCache( - forKey key: String, - options: KingfisherOptionsInfo? = nil) -> KFCrossPlatformImage? - { - return retrieveImageInMemoryCache(forKey: key, options: KingfisherParsedOptionsInfo(options)) - } - - func retrieveImageInDiskCache( - forKey key: String, - options: KingfisherParsedOptionsInfo, - callbackQueue: CallbackQueue = .untouch, - completionHandler: @escaping (Result) -> Void) - { - let computedKey = key.computedKey(with: options.processor.identifier) - let loadingQueue: CallbackQueue = options.loadDiskFileSynchronously ? .untouch : .dispatch(ioQueue) - loadingQueue.execute { - do { - var image: KFCrossPlatformImage? = nil - if let data = try self.diskStorage.value(forKey: computedKey, extendingExpiration: options.diskCacheAccessExtendingExpiration) { - image = options.cacheSerializer.image(with: data, options: options) - } - if options.backgroundDecode { - image = image?.kf.decoded(scale: options.scaleFactor) - } - callbackQueue.execute { completionHandler(.success(image)) } - } catch let error as KingfisherError { - callbackQueue.execute { completionHandler(.failure(error)) } - } catch { - assertionFailure("The internal thrown error should be a `KingfisherError`.") - } - } - } - - /// Gets an image for a given key from the disk storage. - /// - /// - Parameters: - /// - key: The key used for caching the image. - /// - options: The `KingfisherOptionsInfo` options setting used for retrieving the image. - /// - callbackQueue: The callback queue on which `completionHandler` is invoked. Default is `.untouch`. - /// - completionHandler: A closure which is invoked when the operation finishes. - open func retrieveImageInDiskCache( - forKey key: String, - options: KingfisherOptionsInfo? = nil, - callbackQueue: CallbackQueue = .untouch, - completionHandler: @escaping (Result) -> Void) - { - retrieveImageInDiskCache( - forKey: key, - options: KingfisherParsedOptionsInfo(options), - callbackQueue: callbackQueue, - completionHandler: completionHandler) - } - - // MARK: Cleaning - /// Clears the memory & disk storage of this cache. This is an async operation. - /// - /// - Parameter handler: A closure which is invoked when the cache clearing operation finishes. - /// This `handler` will be called from the main queue. - public func clearCache(completion handler: (() -> Void)? = nil) { - clearMemoryCache() - clearDiskCache(completion: handler) - } - - /// Clears the memory storage of this cache. - @objc public func clearMemoryCache() { - memoryStorage.removeAll() - } - - /// Clears the disk storage of this cache. This is an async operation. - /// - /// - Parameter handler: A closure which is invoked when the cache clearing operation finishes. - /// This `handler` will be called from the main queue. - open func clearDiskCache(completion handler: (() -> Void)? = nil) { - ioQueue.async { - do { - try self.diskStorage.removeAll() - } catch _ { } - if let handler = handler { - DispatchQueue.main.async { handler() } - } - } - } - - /// Clears the expired images from memory & disk storage. This is an async operation. - open func cleanExpiredCache(completion handler: (() -> Void)? = nil) { - cleanExpiredMemoryCache() - cleanExpiredDiskCache(completion: handler) - } - - /// Clears the expired images from disk storage. - open func cleanExpiredMemoryCache() { - memoryStorage.removeExpired() - } - - /// Clears the expired images from disk storage. This is an async operation. - @objc func cleanExpiredDiskCache() { - cleanExpiredDiskCache(completion: nil) - } - - /// Clears the expired images from disk storage. This is an async operation. - /// - /// - Parameter handler: A closure which is invoked when the cache clearing operation finishes. - /// This `handler` will be called from the main queue. - open func cleanExpiredDiskCache(completion handler: (() -> Void)? = nil) { - ioQueue.async { - do { - var removed: [URL] = [] - let removedExpired = try self.diskStorage.removeExpiredValues() - removed.append(contentsOf: removedExpired) - - let removedSizeExceeded = try self.diskStorage.removeSizeExceededValues() - removed.append(contentsOf: removedSizeExceeded) - - if !removed.isEmpty { - DispatchQueue.main.async { - let cleanedHashes = removed.map { $0.lastPathComponent } - NotificationCenter.default.post( - name: .KingfisherDidCleanDiskCache, - object: self, - userInfo: [KingfisherDiskCacheCleanedHashKey: cleanedHashes]) - } - } - - if let handler = handler { - DispatchQueue.main.async { handler() } - } - } catch {} - } - } - -#if !os(macOS) && !os(watchOS) - /// Clears the expired images from disk storage when app is in background. This is an async operation. - /// In most cases, you should not call this method explicitly. - /// It will be called automatically when `UIApplicationDidEnterBackgroundNotification` received. - @objc public func backgroundCleanExpiredDiskCache() { - // if 'sharedApplication()' is unavailable, then return - guard let sharedApplication = KingfisherWrapper.shared else { return } - - func endBackgroundTask(_ task: inout UIBackgroundTaskIdentifier) { - sharedApplication.endBackgroundTask(task) - task = UIBackgroundTaskIdentifier.invalid - } - - var backgroundTask: UIBackgroundTaskIdentifier! - backgroundTask = sharedApplication.beginBackgroundTask { - endBackgroundTask(&backgroundTask!) - } - - cleanExpiredDiskCache { - endBackgroundTask(&backgroundTask!) - } - } -#endif - - // MARK: Image Cache State - - /// Returns the cache type for a given `key` and `identifier` combination. - /// This method is used for checking whether an image is cached in current cache. - /// It also provides information on which kind of cache can it be found in the return value. - /// - /// - Parameters: - /// - key: The key used for caching the image. - /// - identifier: Processor identifier which used for this image. Default is the `identifier` of - /// `DefaultImageProcessor.default`. - /// - Returns: A `CacheType` instance which indicates the cache status. - /// `.none` means the image is not in cache or it is already expired. - open func imageCachedType( - forKey key: String, - processorIdentifier identifier: String = DefaultImageProcessor.default.identifier) -> CacheType - { - let computedKey = key.computedKey(with: identifier) - if memoryStorage.isCached(forKey: computedKey) { return .memory } - if diskStorage.isCached(forKey: computedKey) { return .disk } - return .none - } - - /// Returns whether the file exists in cache for a given `key` and `identifier` combination. - /// - /// - Parameters: - /// - key: The key used for caching the image. - /// - identifier: Processor identifier which used for this image. Default is the `identifier` of - /// `DefaultImageProcessor.default`. - /// - Returns: A `Bool` which indicates whether a cache could match the given `key` and `identifier` combination. - /// - /// - Note: - /// The return value does not contain information about from which kind of storage the cache matches. - /// To get the information about cache type according `CacheType`, - /// use `imageCachedType(forKey:processorIdentifier:)` instead. - public func isCached( - forKey key: String, - processorIdentifier identifier: String = DefaultImageProcessor.default.identifier) -> Bool - { - return imageCachedType(forKey: key, processorIdentifier: identifier).cached - } - - /// Gets the hash used as cache file name for the key. - /// - /// - Parameters: - /// - key: The key used for caching the image. - /// - identifier: Processor identifier which used for this image. Default is the `identifier` of - /// `DefaultImageProcessor.default`. - /// - Returns: The hash which is used as the cache file name. - /// - /// - Note: - /// By default, for a given combination of `key` and `identifier`, `ImageCache` will use the value - /// returned by this method as the cache file name. You can use this value to check and match cache file - /// if you need. - open func hash( - forKey key: String, - processorIdentifier identifier: String = DefaultImageProcessor.default.identifier) -> String - { - let computedKey = key.computedKey(with: identifier) - return diskStorage.cacheFileName(forKey: computedKey) - } - - /// Calculates the size taken by the disk storage. - /// It is the total file size of all cached files in the `diskStorage` on disk in bytes. - /// - /// - Parameter handler: Called with the size calculating finishes. This closure is invoked from the main queue. - open func calculateDiskStorageSize(completion handler: @escaping ((Result) -> Void)) { - ioQueue.async { - do { - let size = try self.diskStorage.totalSize() - DispatchQueue.main.async { handler(.success(size)) } - } catch let error as KingfisherError { - DispatchQueue.main.async { handler(.failure(error)) } - } catch { - assertionFailure("The internal thrown error should be a `KingfisherError`.") - } - } - } - - #if swift(>=5.5) - #if canImport(_Concurrency) - @available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *) - open var diskStorageSize: UInt { - get async throws { - try await withCheckedThrowingContinuation { continuation in - calculateDiskStorageSize { result in - continuation.resume(with: result) - } - } - } - } - #endif - #endif - - /// Gets the cache path for the key. - /// It is useful for projects with web view or anyone that needs access to the local file path. - /// - /// i.e. Replacing the `` tag in your HTML. - /// - /// - Parameters: - /// - key: The key used for caching the image. - /// - identifier: Processor identifier which used for this image. Default is the `identifier` of - /// `DefaultImageProcessor.default`. - /// - Returns: The disk path of cached image under the given `key` and `identifier`. - /// - /// - Note: - /// This method does not guarantee there is an image already cached in the returned path. It just gives your - /// the path that the image should be, if it exists in disk storage. - /// - /// You could use `isCached(forKey:)` method to check whether the image is cached under that key in disk. - open func cachePath( - forKey key: String, - processorIdentifier identifier: String = DefaultImageProcessor.default.identifier) -> String - { - let computedKey = key.computedKey(with: identifier) - return diskStorage.cacheFileURL(forKey: computedKey).path - } -} - -#if !os(macOS) && !os(watchOS) -// MARK: - For App Extensions -extension UIApplication: KingfisherCompatible { } -extension KingfisherWrapper where Base: UIApplication { - public static var shared: UIApplication? { - let selector = NSSelectorFromString("sharedApplication") - guard Base.responds(to: selector) else { return nil } - return Base.perform(selector).takeUnretainedValue() as? UIApplication - } -} -#endif - -extension String { - func computedKey(with identifier: String) -> String { - if identifier.isEmpty { - return self - } else { - return appending("@\(identifier)") - } - } -} diff --git a/Pods/Kingfisher/Sources/Cache/MemoryStorage.swift b/Pods/Kingfisher/Sources/Cache/MemoryStorage.swift deleted file mode 100644 index 10d92b1..0000000 --- a/Pods/Kingfisher/Sources/Cache/MemoryStorage.swift +++ /dev/null @@ -1,283 +0,0 @@ -// -// MemoryStorage.swift -// Kingfisher -// -// Created by Wei Wang on 2018/10/15. -// -// Copyright (c) 2019 Wei Wang -// -// 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 - -/// Represents a set of conception related to storage which stores a certain type of value in memory. -/// This is a namespace for the memory storage types. A `Backend` with a certain `Config` will be used to describe the -/// storage. See these composed types for more information. -public enum MemoryStorage { - - /// Represents a storage which stores a certain type of value in memory. It provides fast access, - /// but limited storing size. The stored value type needs to conform to `CacheCostCalculable`, - /// and its `cacheCost` will be used to determine the cost of size for the cache item. - /// - /// You can config a `MemoryStorage.Backend` in its initializer by passing a `MemoryStorage.Config` value. - /// or modifying the `config` property after it being created. The backend of `MemoryStorage` has - /// upper limitation on cost size in memory and item count. All items in the storage has an expiration - /// date. When retrieved, if the target item is already expired, it will be recognized as it does not - /// exist in the storage. The `MemoryStorage` also contains a scheduled self clean task, to evict expired - /// items from memory. - public class Backend { - let storage = NSCache>() - - // Keys trackes the objects once inside the storage. For object removing triggered by user, the corresponding - // key would be also removed. However, for the object removing triggered by cache rule/policy of system, the - // key will be remained there until next `removeExpired` happens. - // - // Breaking the strict tracking could save additional locking behaviors. - // See https://github.com/onevcat/Kingfisher/issues/1233 - var keys = Set() - - private var cleanTimer: Timer? = nil - private let lock = NSLock() - - /// The config used in this storage. It is a value you can set and - /// use to config the storage in air. - public var config: Config { - didSet { - storage.totalCostLimit = config.totalCostLimit - storage.countLimit = config.countLimit - } - } - - /// Creates a `MemoryStorage` with a given `config`. - /// - /// - Parameter config: The config used to create the storage. It determines the max size limitation, - /// default expiration setting and more. - public init(config: Config) { - self.config = config - storage.totalCostLimit = config.totalCostLimit - storage.countLimit = config.countLimit - - cleanTimer = .scheduledTimer(withTimeInterval: config.cleanInterval, repeats: true) { [weak self] _ in - guard let self = self else { return } - self.removeExpired() - } - } - - /// Removes the expired values from the storage. - public func removeExpired() { - lock.lock() - defer { lock.unlock() } - for key in keys { - let nsKey = key as NSString - guard let object = storage.object(forKey: nsKey) else { - // This could happen if the object is moved by cache `totalCostLimit` or `countLimit` rule. - // We didn't remove the key yet until now, since we do not want to introduce additional lock. - // See https://github.com/onevcat/Kingfisher/issues/1233 - keys.remove(key) - continue - } - if object.isExpired { - storage.removeObject(forKey: nsKey) - keys.remove(key) - } - } - } - - /// Stores a value to the storage under the specified key and expiration policy. - /// - Parameters: - /// - value: The value to be stored. - /// - key: The key to which the `value` will be stored. - /// - expiration: The expiration policy used by this store action. - /// - Throws: No error will - public func store( - value: T, - forKey key: String, - expiration: StorageExpiration? = nil) - { - storeNoThrow(value: value, forKey: key, expiration: expiration) - } - - // The no throw version for storing value in cache. Kingfisher knows the detail so it - // could use this version to make syntax simpler internally. - func storeNoThrow( - value: T, - forKey key: String, - expiration: StorageExpiration? = nil) - { - lock.lock() - defer { lock.unlock() } - let expiration = expiration ?? config.expiration - // The expiration indicates that already expired, no need to store. - guard !expiration.isExpired else { return } - - let object: StorageObject - if config.keepWhenEnteringBackground { - object = BackgroundKeepingStorageObject(value, expiration: expiration) - } else { - object = StorageObject(value, expiration: expiration) - } - storage.setObject(object, forKey: key as NSString, cost: value.cacheCost) - keys.insert(key) - } - - /// Gets a value from the storage. - /// - /// - Parameters: - /// - key: The cache key of value. - /// - extendingExpiration: The expiration policy used by this getting action. - /// - Returns: The value under `key` if it is valid and found in the storage. Otherwise, `nil`. - public func value(forKey key: String, extendingExpiration: ExpirationExtending = .cacheTime) -> T? { - guard let object = storage.object(forKey: key as NSString) else { - return nil - } - if object.isExpired { - return nil - } - object.extendExpiration(extendingExpiration) - return object.value - } - - /// Whether there is valid cached data under a given key. - /// - Parameter key: The cache key of value. - /// - Returns: If there is valid data under the key, `true`. Otherwise, `false`. - public func isCached(forKey key: String) -> Bool { - guard let _ = value(forKey: key, extendingExpiration: .none) else { - return false - } - return true - } - - /// Removes a value from a specified key. - /// - Parameter key: The cache key of value. - public func remove(forKey key: String) { - lock.lock() - defer { lock.unlock() } - storage.removeObject(forKey: key as NSString) - keys.remove(key) - } - - /// Removes all values in this storage. - public func removeAll() { - lock.lock() - defer { lock.unlock() } - storage.removeAllObjects() - keys.removeAll() - } - } -} - -extension MemoryStorage { - /// Represents the config used in a `MemoryStorage`. - public struct Config { - - /// Total cost limit of the storage in bytes. - public var totalCostLimit: Int - - /// The item count limit of the memory storage. - public var countLimit: Int = .max - - /// The `StorageExpiration` used in this memory storage. Default is `.seconds(300)`, - /// means that the memory cache would expire in 5 minutes. - public var expiration: StorageExpiration = .seconds(300) - - /// The time interval between the storage do clean work for swiping expired items. - public var cleanInterval: TimeInterval - - /// Whether the newly added items to memory cache should be purged when the app goes to background. - /// - /// By default, the cached items in memory will be purged as soon as the app goes to background to ensure - /// least memory footprint. Enabling this would prevent this behavior and keep the items alive in cache even - /// when your app is not in foreground anymore. - /// - /// Default is `false`. After setting `true`, only the newly added cache objects are affected. Existing - /// objects which are already in the cache while this value was `false` will be still be purged when entering - /// background. - public var keepWhenEnteringBackground: Bool = false - - /// Creates a config from a given `totalCostLimit` value. - /// - /// - Parameters: - /// - totalCostLimit: Total cost limit of the storage in bytes. - /// - cleanInterval: The time interval between the storage do clean work for swiping expired items. - /// Default is 120, means the auto eviction happens once per two minutes. - /// - /// - Note: - /// Other members of `MemoryStorage.Config` will use their default values when created. - public init(totalCostLimit: Int, cleanInterval: TimeInterval = 120) { - self.totalCostLimit = totalCostLimit - self.cleanInterval = cleanInterval - } - } -} - -extension MemoryStorage { - - class BackgroundKeepingStorageObject: StorageObject, NSDiscardableContent { - var accessing = true - func beginContentAccess() -> Bool { - if value != nil { - accessing = true - } else { - accessing = false - } - return accessing - } - - func endContentAccess() { - accessing = false - } - - func discardContentIfPossible() { - value = nil - } - - func isContentDiscarded() -> Bool { - return value == nil - } - } - - class StorageObject { - var value: T? - let expiration: StorageExpiration - - private(set) var estimatedExpiration: Date - - init(_ value: T, expiration: StorageExpiration) { - self.value = value - self.expiration = expiration - - self.estimatedExpiration = expiration.estimatedExpirationSinceNow - } - - func extendExpiration(_ extendingExpiration: ExpirationExtending = .cacheTime) { - switch extendingExpiration { - case .none: - return - case .cacheTime: - self.estimatedExpiration = expiration.estimatedExpirationSinceNow - case .expirationTime(let expirationTime): - self.estimatedExpiration = expirationTime.estimatedExpirationSinceNow - } - } - - var isExpired: Bool { - return estimatedExpiration.isPast - } - } -} diff --git a/Pods/Kingfisher/Sources/Cache/Storage.swift b/Pods/Kingfisher/Sources/Cache/Storage.swift deleted file mode 100644 index ad9d326..0000000 --- a/Pods/Kingfisher/Sources/Cache/Storage.swift +++ /dev/null @@ -1,110 +0,0 @@ -// -// Storage.swift -// Kingfisher -// -// Created by Wei Wang on 2018/10/15. -// -// Copyright (c) 2019 Wei Wang -// -// 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 - -/// Constants for some time intervals -struct TimeConstants { - static let secondsInOneDay = 86_400 -} - -/// Represents the expiration strategy used in storage. -/// -/// - never: The item never expires. -/// - seconds: The item expires after a time duration of given seconds from now. -/// - days: The item expires after a time duration of given days from now. -/// - date: The item expires after a given date. -public enum StorageExpiration { - /// The item never expires. - case never - /// The item expires after a time duration of given seconds from now. - case seconds(TimeInterval) - /// The item expires after a time duration of given days from now. - case days(Int) - /// The item expires after a given date. - case date(Date) - /// Indicates the item is already expired. Use this to skip cache. - case expired - - func estimatedExpirationSince(_ date: Date) -> Date { - switch self { - case .never: return .distantFuture - case .seconds(let seconds): - return date.addingTimeInterval(seconds) - case .days(let days): - let duration: TimeInterval = TimeInterval(TimeConstants.secondsInOneDay) * TimeInterval(days) - return date.addingTimeInterval(duration) - case .date(let ref): - return ref - case .expired: - return .distantPast - } - } - - var estimatedExpirationSinceNow: Date { - return estimatedExpirationSince(Date()) - } - - var isExpired: Bool { - return timeInterval <= 0 - } - - var timeInterval: TimeInterval { - switch self { - case .never: return .infinity - case .seconds(let seconds): return seconds - case .days(let days): return TimeInterval(TimeConstants.secondsInOneDay) * TimeInterval(days) - case .date(let ref): return ref.timeIntervalSinceNow - case .expired: return -(.infinity) - } - } -} - -/// Represents the expiration extending strategy used in storage to after access. -/// -/// - none: The item expires after the original time, without extending after access. -/// - cacheTime: The item expiration extends by the original cache time after each access. -/// - expirationTime: The item expiration extends by the provided time after each access. -public enum ExpirationExtending { - /// The item expires after the original time, without extending after access. - case none - /// The item expiration extends by the original cache time after each access. - case cacheTime - /// The item expiration extends by the provided time after each access. - case expirationTime(_ expiration: StorageExpiration) -} - -/// Represents types which cost in memory can be calculated. -public protocol CacheCostCalculable { - var cacheCost: Int { get } -} - -/// Represents types which can be converted to and from data. -public protocol DataTransformable { - func toData() throws -> Data - static func fromData(_ data: Data) throws -> Self - static var empty: Self { get } -} diff --git a/Pods/Kingfisher/Sources/Extensions/CPListItem+Kingfisher.swift b/Pods/Kingfisher/Sources/Extensions/CPListItem+Kingfisher.swift deleted file mode 100644 index 085bead..0000000 --- a/Pods/Kingfisher/Sources/Extensions/CPListItem+Kingfisher.swift +++ /dev/null @@ -1,245 +0,0 @@ - -// -// CPListItem+Kingfisher.swift -// Kingfisher -// -// Created by Wayne Hartman on 2021-08-29. -// -// Copyright (c) 2019 Wei Wang -// -// 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(CarPlay) && !targetEnvironment(macCatalyst) -import CarPlay - -@available(iOS 14.0, *) -extension KingfisherWrapper where Base: CPListItem { - - // MARK: Setting Image - - /// Sets an image to the image view with a source. - /// - /// - Parameters: - /// - source: The `Source` object contains information about the image. - /// - placeholder: A placeholder to show while retrieving the image from the given `resource`. - /// - options: An options set to define image setting behaviors. See `KingfisherOptionsInfo` for more. - /// - progressBlock: Called when the image downloading progress gets updated. If the response does not contain an - /// `expectedContentLength`, this block will not be called. - /// - completionHandler: Called when the image retrieved and set finished. - /// - Returns: A task represents the image downloading. - /// - /// - Note: - /// - /// Internally, this method will use `KingfisherManager` to get the requested source - /// Since this method will perform UI changes, you must call it from the main thread. - /// Both `progressBlock` and `completionHandler` will be also executed in the main thread. - /// - @discardableResult - public func setImage( - with source: Source?, - placeholder: KFCrossPlatformImage? = nil, - options: KingfisherOptionsInfo? = nil, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - let options = KingfisherParsedOptionsInfo(KingfisherManager.shared.defaultOptions + (options ?? [])) - return setImage( - with: source, - placeholder: placeholder, - parsedOptions: options, - progressBlock: progressBlock, - completionHandler: completionHandler - ) - } - - /// Sets an image to the image view with a requested resource. - /// - /// - Parameters: - /// - resource: The `Resource` object contains information about the image. - /// - placeholder: A placeholder to show while retrieving the image from the given `resource`. - /// - options: An options set to define image setting behaviors. See `KingfisherOptionsInfo` for more. - /// - progressBlock: Called when the image downloading progress gets updated. If the response does not contain an - /// `expectedContentLength`, this block will not be called. - /// - completionHandler: Called when the image retrieved and set finished. - /// - Returns: A task represents the image downloading. - /// - /// - Note: - /// - /// Internally, this method will use `KingfisherManager` to get the requested resource, from either cache - /// or network. Since this method will perform UI changes, you must call it from the main thread. - /// Both `progressBlock` and `completionHandler` will be also executed in the main thread. - /// - @discardableResult - public func setImage( - with resource: Resource?, - placeholder: KFCrossPlatformImage? = nil, - options: KingfisherOptionsInfo? = nil, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - return setImage( - with: resource?.convertToSource(), - placeholder: placeholder, - options: options, - progressBlock: progressBlock, - completionHandler: completionHandler) - } - - func setImage( - with source: Source?, - placeholder: KFCrossPlatformImage? = nil, - parsedOptions: KingfisherParsedOptionsInfo, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - var mutatingSelf = self - guard let source = source else { - /** - * In iOS SDK 14.0-14.4 the image param was non-`nil`. The SDK changed in 14.5 - * to allow `nil`. The compiler version 5.4 was introduced in this same SDK, - * which allows >=14.5 SDK to set a `nil` image. This compile check allows - * newer SDK users to set the image to `nil`, while still allowing older SDK - * users to compile the framework. - */ - #if compiler(>=5.4) - self.base.setImage(placeholder) - #else - if let placeholder = placeholder { - self.base.setImage(placeholder) - } - #endif - - mutatingSelf.taskIdentifier = nil - completionHandler?(.failure(KingfisherError.imageSettingError(reason: .emptySource))) - return nil - } - - var options = parsedOptions - if !options.keepCurrentImageWhileLoading { - /** - * In iOS SDK 14.0-14.4 the image param was non-`nil`. The SDK changed in 14.5 - * to allow `nil`. The compiler version 5.4 was introduced in this same SDK, - * which allows >=14.5 SDK to set a `nil` image. This compile check allows - * newer SDK users to set the image to `nil`, while still allowing older SDK - * users to compile the framework. - */ - #if compiler(>=5.4) - self.base.setImage(placeholder) - #else // Let older SDK users deal with the older behavior. - if let placeholder = placeholder { - self.base.setImage(placeholder) - } - #endif - } - - let issuedIdentifier = Source.Identifier.next() - mutatingSelf.taskIdentifier = issuedIdentifier - - if let block = progressBlock { - options.onDataReceived = (options.onDataReceived ?? []) + [ImageLoadingProgressSideEffect(block)] - } - - let task = KingfisherManager.shared.retrieveImage( - with: source, - options: options, - downloadTaskUpdated: { mutatingSelf.imageTask = $0 }, - progressiveImageSetter: { self.base.setImage($0) }, - referenceTaskIdentifierChecker: { issuedIdentifier == self.taskIdentifier }, - completionHandler: { result in - CallbackQueue.mainCurrentOrAsync.execute { - guard issuedIdentifier == self.taskIdentifier else { - let reason: KingfisherError.ImageSettingErrorReason - do { - let value = try result.get() - reason = .notCurrentSourceTask(result: value, error: nil, source: source) - } catch { - reason = .notCurrentSourceTask(result: nil, error: error, source: source) - } - let error = KingfisherError.imageSettingError(reason: reason) - completionHandler?(.failure(error)) - return - } - - mutatingSelf.imageTask = nil - mutatingSelf.taskIdentifier = nil - - switch result { - case .success(let value): - self.base.setImage(value.image) - completionHandler?(result) - - case .failure: - if let image = options.onFailureImage { - /** - * In iOS SDK 14.0-14.4 the image param was non-`nil`. The SDK changed in 14.5 - * to allow `nil`. The compiler version 5.4 was introduced in this same SDK, - * which allows >=14.5 SDK to set a `nil` image. This compile check allows - * newer SDK users to set the image to `nil`, while still allowing older SDK - * users to compile the framework. - */ - #if compiler(>=5.4) - self.base.setImage(image) - #else // Let older SDK users deal with the older behavior. - if let unwrapped = image { - self.base.setImage(unwrapped) - } - #endif - } - completionHandler?(result) - } - } - } - ) - - mutatingSelf.imageTask = task - return task - } - - // MARK: Cancelling Image - - /// Cancel the image download task bounded to the image view if it is running. - /// Nothing will happen if the downloading has already finished. - public func cancelDownloadTask() { - imageTask?.cancel() - } -} - -private var taskIdentifierKey: Void? -private var imageTaskKey: Void? - -// MARK: Properties -extension KingfisherWrapper where Base: CPListItem { - - public private(set) var taskIdentifier: Source.Identifier.Value? { - get { - let box: Box? = getAssociatedObject(base, &taskIdentifierKey) - return box?.value - } - set { - let box = newValue.map { Box($0) } - setRetainedAssociatedObject(base, &taskIdentifierKey, box) - } - } - - private var imageTask: DownloadTask? { - get { return getAssociatedObject(base, &imageTaskKey) } - set { setRetainedAssociatedObject(base, &imageTaskKey, newValue)} - } -} -#endif diff --git a/Pods/Kingfisher/Sources/Extensions/ImageView+Kingfisher.swift b/Pods/Kingfisher/Sources/Extensions/ImageView+Kingfisher.swift deleted file mode 100644 index 9378f19..0000000 --- a/Pods/Kingfisher/Sources/Extensions/ImageView+Kingfisher.swift +++ /dev/null @@ -1,537 +0,0 @@ -// -// ImageView+Kingfisher.swift -// Kingfisher -// -// Created by Wei Wang on 15/4/6. -// -// Copyright (c) 2019 Wei Wang -// -// 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 !os(watchOS) - -#if os(macOS) -import AppKit -#else -import UIKit -#endif - -extension KingfisherWrapper where Base: KFCrossPlatformImageView { - - // MARK: Setting Image - - /// Sets an image to the image view with a `Source`. - /// - /// - Parameters: - /// - source: The `Source` object defines data information from network or a data provider. - /// - placeholder: A placeholder to show while retrieving the image from the given `resource`. - /// - options: An options set to define image setting behaviors. See `KingfisherOptionsInfo` for more. - /// - progressBlock: Called when the image downloading progress gets updated. If the response does not contain an - /// `expectedContentLength`, this block will not be called. - /// - completionHandler: Called when the image retrieved and set finished. - /// - Returns: A task represents the image downloading. - /// - /// - Note: - /// This is the easiest way to use Kingfisher to boost the image setting process from a source. Since all parameters - /// have a default value except the `source`, you can set an image from a certain URL to an image view like this: - /// - /// ``` - /// // Set image from a network source. - /// let url = URL(string: "https://example.com/image.png")! - /// imageView.kf.setImage(with: .network(url)) - /// - /// // Or set image from a data provider. - /// let provider = LocalFileImageDataProvider(fileURL: fileURL) - /// imageView.kf.setImage(with: .provider(provider)) - /// ``` - /// - /// For both `.network` and `.provider` source, there are corresponding view extension methods. So the code - /// above is equivalent to: - /// - /// ``` - /// imageView.kf.setImage(with: url) - /// imageView.kf.setImage(with: provider) - /// ``` - /// - /// Internally, this method will use `KingfisherManager` to get the source. - /// Since this method will perform UI changes, you must call it from the main thread. - /// Both `progressBlock` and `completionHandler` will be also executed in the main thread. - /// - @discardableResult - public func setImage( - with source: Source?, - placeholder: Placeholder? = nil, - options: KingfisherOptionsInfo? = nil, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - let options = KingfisherParsedOptionsInfo(KingfisherManager.shared.defaultOptions + (options ?? .empty)) - return setImage(with: source, placeholder: placeholder, parsedOptions: options, progressBlock: progressBlock, completionHandler: completionHandler) - } - - /// Sets an image to the image view with a `Source`. - /// - /// - Parameters: - /// - source: The `Source` object defines data information from network or a data provider. - /// - placeholder: A placeholder to show while retrieving the image from the given `resource`. - /// - options: An options set to define image setting behaviors. See `KingfisherOptionsInfo` for more. - /// - completionHandler: Called when the image retrieved and set finished. - /// - Returns: A task represents the image downloading. - /// - /// - Note: - /// This is the easiest way to use Kingfisher to boost the image setting process from a source. Since all parameters - /// have a default value except the `source`, you can set an image from a certain URL to an image view like this: - /// - /// ``` - /// // Set image from a network source. - /// let url = URL(string: "https://example.com/image.png")! - /// imageView.kf.setImage(with: .network(url)) - /// - /// // Or set image from a data provider. - /// let provider = LocalFileImageDataProvider(fileURL: fileURL) - /// imageView.kf.setImage(with: .provider(provider)) - /// ``` - /// - /// For both `.network` and `.provider` source, there are corresponding view extension methods. So the code - /// above is equivalent to: - /// - /// ``` - /// imageView.kf.setImage(with: url) - /// imageView.kf.setImage(with: provider) - /// ``` - /// - /// Internally, this method will use `KingfisherManager` to get the source. - /// Since this method will perform UI changes, you must call it from the main thread. - /// The `completionHandler` will be also executed in the main thread. - /// - @discardableResult - public func setImage( - with source: Source?, - placeholder: Placeholder? = nil, - options: KingfisherOptionsInfo? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - return setImage( - with: source, - placeholder: placeholder, - options: options, - progressBlock: nil, - completionHandler: completionHandler - ) - } - - /// Sets an image to the image view with a requested resource. - /// - /// - Parameters: - /// - resource: The `Resource` object contains information about the resource. - /// - placeholder: A placeholder to show while retrieving the image from the given `resource`. - /// - options: An options set to define image setting behaviors. See `KingfisherOptionsInfo` for more. - /// - progressBlock: Called when the image downloading progress gets updated. If the response does not contain an - /// `expectedContentLength`, this block will not be called. - /// - completionHandler: Called when the image retrieved and set finished. - /// - Returns: A task represents the image downloading. - /// - /// - Note: - /// This is the easiest way to use Kingfisher to boost the image setting process from network. Since all parameters - /// have a default value except the `resource`, you can set an image from a certain URL to an image view like this: - /// - /// ``` - /// let url = URL(string: "https://example.com/image.png")! - /// imageView.kf.setImage(with: url) - /// ``` - /// - /// Internally, this method will use `KingfisherManager` to get the requested resource, from either cache - /// or network. Since this method will perform UI changes, you must call it from the main thread. - /// Both `progressBlock` and `completionHandler` will be also executed in the main thread. - /// - @discardableResult - public func setImage( - with resource: Resource?, - placeholder: Placeholder? = nil, - options: KingfisherOptionsInfo? = nil, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - return setImage( - with: resource?.convertToSource(), - placeholder: placeholder, - options: options, - progressBlock: progressBlock, - completionHandler: completionHandler) - } - - /// Sets an image to the image view with a requested resource. - /// - /// - Parameters: - /// - resource: The `Resource` object contains information about the resource. - /// - placeholder: A placeholder to show while retrieving the image from the given `resource`. - /// - options: An options set to define image setting behaviors. See `KingfisherOptionsInfo` for more. - /// - completionHandler: Called when the image retrieved and set finished. - /// - Returns: A task represents the image downloading. - /// - /// - Note: - /// This is the easiest way to use Kingfisher to boost the image setting process from network. Since all parameters - /// have a default value except the `resource`, you can set an image from a certain URL to an image view like this: - /// - /// ``` - /// let url = URL(string: "https://example.com/image.png")! - /// imageView.kf.setImage(with: url) - /// ``` - /// - /// Internally, this method will use `KingfisherManager` to get the requested resource, from either cache - /// or network. Since this method will perform UI changes, you must call it from the main thread. - /// The `completionHandler` will be also executed in the main thread. - /// - @discardableResult - public func setImage( - with resource: Resource?, - placeholder: Placeholder? = nil, - options: KingfisherOptionsInfo? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - return setImage( - with: resource, - placeholder: placeholder, - options: options, - progressBlock: nil, - completionHandler: completionHandler - ) - } - - /// Sets an image to the image view with a data provider. - /// - /// - Parameters: - /// - provider: The `ImageDataProvider` object contains information about the data. - /// - placeholder: A placeholder to show while retrieving the image from the given `resource`. - /// - options: An options set to define image setting behaviors. See `KingfisherOptionsInfo` for more. - /// - progressBlock: Called when the image downloading progress gets updated. If the response does not contain an - /// `expectedContentLength`, this block will not be called. - /// - completionHandler: Called when the image retrieved and set finished. - /// - Returns: A task represents the image downloading. - /// - /// Internally, this method will use `KingfisherManager` to get the image data, from either cache - /// or the data provider. Since this method will perform UI changes, you must call it from the main thread. - /// Both `progressBlock` and `completionHandler` will be also executed in the main thread. - /// - @discardableResult - public func setImage( - with provider: ImageDataProvider?, - placeholder: Placeholder? = nil, - options: KingfisherOptionsInfo? = nil, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - return setImage( - with: provider.map { .provider($0) }, - placeholder: placeholder, - options: options, - progressBlock: progressBlock, - completionHandler: completionHandler) - } - - /// Sets an image to the image view with a data provider. - /// - /// - Parameters: - /// - provider: The `ImageDataProvider` object contains information about the data. - /// - placeholder: A placeholder to show while retrieving the image from the given `resource`. - /// - options: An options set to define image setting behaviors. See `KingfisherOptionsInfo` for more. - /// - completionHandler: Called when the image retrieved and set finished. - /// - Returns: A task represents the image downloading. - /// - /// Internally, this method will use `KingfisherManager` to get the image data, from either cache - /// or the data provider. Since this method will perform UI changes, you must call it from the main thread. - /// The `completionHandler` will be also executed in the main thread. - /// - @discardableResult - public func setImage( - with provider: ImageDataProvider?, - placeholder: Placeholder? = nil, - options: KingfisherOptionsInfo? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - return setImage( - with: provider, - placeholder: placeholder, - options: options, - progressBlock: nil, - completionHandler: completionHandler - ) - } - - - func setImage( - with source: Source?, - placeholder: Placeholder? = nil, - parsedOptions: KingfisherParsedOptionsInfo, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - var mutatingSelf = self - guard let source = source else { - mutatingSelf.placeholder = placeholder - mutatingSelf.taskIdentifier = nil - completionHandler?(.failure(KingfisherError.imageSettingError(reason: .emptySource))) - return nil - } - - var options = parsedOptions - - let isEmptyImage = base.image == nil && self.placeholder == nil - if !options.keepCurrentImageWhileLoading || isEmptyImage { - // Always set placeholder while there is no image/placeholder yet. - mutatingSelf.placeholder = placeholder - } - - let maybeIndicator = indicator - maybeIndicator?.startAnimatingView() - - let issuedIdentifier = Source.Identifier.next() - mutatingSelf.taskIdentifier = issuedIdentifier - - if base.shouldPreloadAllAnimation() { - options.preloadAllAnimationData = true - } - - if let block = progressBlock { - options.onDataReceived = (options.onDataReceived ?? []) + [ImageLoadingProgressSideEffect(block)] - } - - let task = KingfisherManager.shared.retrieveImage( - with: source, - options: options, - downloadTaskUpdated: { mutatingSelf.imageTask = $0 }, - progressiveImageSetter: { self.base.image = $0 }, - referenceTaskIdentifierChecker: { issuedIdentifier == self.taskIdentifier }, - completionHandler: { result in - CallbackQueue.mainCurrentOrAsync.execute { - maybeIndicator?.stopAnimatingView() - guard issuedIdentifier == self.taskIdentifier else { - let reason: KingfisherError.ImageSettingErrorReason - do { - let value = try result.get() - reason = .notCurrentSourceTask(result: value, error: nil, source: source) - } catch { - reason = .notCurrentSourceTask(result: nil, error: error, source: source) - } - let error = KingfisherError.imageSettingError(reason: reason) - completionHandler?(.failure(error)) - return - } - - mutatingSelf.imageTask = nil - mutatingSelf.taskIdentifier = nil - - switch result { - case .success(let value): - guard self.needsTransition(options: options, cacheType: value.cacheType) else { - mutatingSelf.placeholder = nil - self.base.image = value.image - completionHandler?(result) - return - } - - self.makeTransition(image: value.image, transition: options.transition) { - completionHandler?(result) - } - - case .failure: - if let image = options.onFailureImage { - mutatingSelf.placeholder = nil - self.base.image = image - } - completionHandler?(result) - } - } - } - ) - mutatingSelf.imageTask = task - return task - } - - // MARK: Cancelling Downloading Task - - /// Cancels the image download task of the image view if it is running. - /// Nothing will happen if the downloading has already finished. - public func cancelDownloadTask() { - imageTask?.cancel() - } - - private func needsTransition(options: KingfisherParsedOptionsInfo, cacheType: CacheType) -> Bool { - switch options.transition { - case .none: - return false - #if os(macOS) - case .fade: // Fade is only a placeholder for SwiftUI on macOS. - return false - #else - default: - if options.forceTransition { return true } - if cacheType == .none { return true } - return false - #endif - } - } - - private func makeTransition(image: KFCrossPlatformImage, transition: ImageTransition, done: @escaping () -> Void) { - #if !os(macOS) - // Force hiding the indicator without transition first. - UIView.transition( - with: self.base, - duration: 0.0, - options: [], - animations: { self.indicator?.stopAnimatingView() }, - completion: { _ in - var mutatingSelf = self - mutatingSelf.placeholder = nil - UIView.transition( - with: self.base, - duration: transition.duration, - options: [transition.animationOptions, .allowUserInteraction], - animations: { transition.animations?(self.base, image) }, - completion: { finished in - transition.completion?(finished) - done() - } - ) - } - ) - #else - done() - #endif - } -} - -// MARK: - Associated Object -private var taskIdentifierKey: Void? -private var indicatorKey: Void? -private var indicatorTypeKey: Void? -private var placeholderKey: Void? -private var imageTaskKey: Void? - -extension KingfisherWrapper where Base: KFCrossPlatformImageView { - - // MARK: Properties - public private(set) var taskIdentifier: Source.Identifier.Value? { - get { - let box: Box? = getAssociatedObject(base, &taskIdentifierKey) - return box?.value - } - set { - let box = newValue.map { Box($0) } - setRetainedAssociatedObject(base, &taskIdentifierKey, box) - } - } - - /// Holds which indicator type is going to be used. - /// Default is `.none`, means no indicator will be shown while downloading. - public var indicatorType: IndicatorType { - get { - return getAssociatedObject(base, &indicatorTypeKey) ?? .none - } - - set { - switch newValue { - case .none: indicator = nil - case .activity: indicator = ActivityIndicator() - case .image(let data): indicator = ImageIndicator(imageData: data) - case .custom(let anIndicator): indicator = anIndicator - } - - setRetainedAssociatedObject(base, &indicatorTypeKey, newValue) - } - } - - /// Holds any type that conforms to the protocol `Indicator`. - /// The protocol `Indicator` has a `view` property that will be shown when loading an image. - /// It will be `nil` if `indicatorType` is `.none`. - public private(set) var indicator: Indicator? { - get { - let box: Box? = getAssociatedObject(base, &indicatorKey) - return box?.value - } - - set { - // Remove previous - if let previousIndicator = indicator { - previousIndicator.view.removeFromSuperview() - } - - // Add new - if let newIndicator = newValue { - // Set default indicator layout - let view = newIndicator.view - - base.addSubview(view) - view.translatesAutoresizingMaskIntoConstraints = false - view.centerXAnchor.constraint( - equalTo: base.centerXAnchor, constant: newIndicator.centerOffset.x).isActive = true - view.centerYAnchor.constraint( - equalTo: base.centerYAnchor, constant: newIndicator.centerOffset.y).isActive = true - - switch newIndicator.sizeStrategy(in: base) { - case .intrinsicSize: - break - case .full: - view.heightAnchor.constraint(equalTo: base.heightAnchor, constant: 0).isActive = true - view.widthAnchor.constraint(equalTo: base.widthAnchor, constant: 0).isActive = true - case .size(let size): - view.heightAnchor.constraint(equalToConstant: size.height).isActive = true - view.widthAnchor.constraint(equalToConstant: size.width).isActive = true - } - - newIndicator.view.isHidden = true - } - - // Save in associated object - // Wrap newValue with Box to workaround an issue that Swift does not recognize - // and casting protocol for associate object correctly. https://github.com/onevcat/Kingfisher/issues/872 - setRetainedAssociatedObject(base, &indicatorKey, newValue.map(Box.init)) - } - } - - private var imageTask: DownloadTask? { - get { return getAssociatedObject(base, &imageTaskKey) } - set { setRetainedAssociatedObject(base, &imageTaskKey, newValue)} - } - - /// Represents the `Placeholder` used for this image view. A `Placeholder` will be shown in the view while - /// it is downloading an image. - public private(set) var placeholder: Placeholder? { - get { return getAssociatedObject(base, &placeholderKey) } - set { - if let previousPlaceholder = placeholder { - previousPlaceholder.remove(from: base) - } - - if let newPlaceholder = newValue { - newPlaceholder.add(to: base) - } else { - base.image = nil - } - setRetainedAssociatedObject(base, &placeholderKey, newValue) - } - } -} - - -extension KFCrossPlatformImageView { - @objc func shouldPreloadAllAnimation() -> Bool { return true } -} - -#endif diff --git a/Pods/Kingfisher/Sources/Extensions/NSButton+Kingfisher.swift b/Pods/Kingfisher/Sources/Extensions/NSButton+Kingfisher.swift deleted file mode 100644 index d33d557..0000000 --- a/Pods/Kingfisher/Sources/Extensions/NSButton+Kingfisher.swift +++ /dev/null @@ -1,362 +0,0 @@ -// -// NSButton+Kingfisher.swift -// Kingfisher -// -// Created by Jie Zhang on 14/04/2016. -// -// Copyright (c) 2019 Wei Wang -// -// 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(AppKit) && !targetEnvironment(macCatalyst) - -import AppKit - -extension KingfisherWrapper where Base: NSButton { - - // MARK: Setting Image - - /// Sets an image to the button with a source. - /// - /// - Parameters: - /// - source: The `Source` object contains information about how to get the image. - /// - placeholder: A placeholder to show while retrieving the image from the given `resource`. - /// - options: An options set to define image setting behaviors. See `KingfisherOptionsInfo` for more. - /// - progressBlock: Called when the image downloading progress gets updated. If the response does not contain an - /// `expectedContentLength`, this block will not be called. - /// - completionHandler: Called when the image retrieved and set finished. - /// - Returns: A task represents the image downloading. - /// - /// - Note: - /// Internally, this method will use `KingfisherManager` to get the requested source. - /// Since this method will perform UI changes, you must call it from the main thread. - /// Both `progressBlock` and `completionHandler` will be also executed in the main thread. - /// - @discardableResult - public func setImage( - with source: Source?, - placeholder: KFCrossPlatformImage? = nil, - options: KingfisherOptionsInfo? = nil, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - let options = KingfisherParsedOptionsInfo(KingfisherManager.shared.defaultOptions + (options ?? .empty)) - return setImage( - with: source, - placeholder: placeholder, - parsedOptions: options, - progressBlock: progressBlock, - completionHandler: completionHandler - ) - } - - /// Sets an image to the button with a requested resource. - /// - /// - Parameters: - /// - resource: The `Resource` object contains information about the resource. - /// - placeholder: A placeholder to show while retrieving the image from the given `resource`. - /// - options: An options set to define image setting behaviors. See `KingfisherOptionsInfo` for more. - /// - progressBlock: Called when the image downloading progress gets updated. If the response does not contain an - /// `expectedContentLength`, this block will not be called. - /// - completionHandler: Called when the image retrieved and set finished. - /// - Returns: A task represents the image downloading. - /// - /// - Note: - /// Internally, this method will use `KingfisherManager` to get the requested resource, from either cache - /// or network. Since this method will perform UI changes, you must call it from the main thread. - /// Both `progressBlock` and `completionHandler` will be also executed in the main thread. - /// - @discardableResult - public func setImage( - with resource: Resource?, - placeholder: KFCrossPlatformImage? = nil, - options: KingfisherOptionsInfo? = nil, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - return setImage( - with: resource?.convertToSource(), - placeholder: placeholder, - options: options, - progressBlock: progressBlock, - completionHandler: completionHandler) - } - - func setImage( - with source: Source?, - placeholder: KFCrossPlatformImage? = nil, - parsedOptions: KingfisherParsedOptionsInfo, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - var mutatingSelf = self - guard let source = source else { - base.image = placeholder - mutatingSelf.taskIdentifier = nil - completionHandler?(.failure(KingfisherError.imageSettingError(reason: .emptySource))) - return nil - } - - var options = parsedOptions - if !options.keepCurrentImageWhileLoading { - base.image = placeholder - } - - let issuedIdentifier = Source.Identifier.next() - mutatingSelf.taskIdentifier = issuedIdentifier - - if let block = progressBlock { - options.onDataReceived = (options.onDataReceived ?? []) + [ImageLoadingProgressSideEffect(block)] - } - - let task = KingfisherManager.shared.retrieveImage( - with: source, - options: options, - downloadTaskUpdated: { mutatingSelf.imageTask = $0 }, - progressiveImageSetter: { self.base.image = $0 }, - referenceTaskIdentifierChecker: { issuedIdentifier == self.taskIdentifier }, - completionHandler: { result in - CallbackQueue.mainCurrentOrAsync.execute { - guard issuedIdentifier == self.taskIdentifier else { - let reason: KingfisherError.ImageSettingErrorReason - do { - let value = try result.get() - reason = .notCurrentSourceTask(result: value, error: nil, source: source) - } catch { - reason = .notCurrentSourceTask(result: nil, error: error, source: source) - } - let error = KingfisherError.imageSettingError(reason: reason) - completionHandler?(.failure(error)) - return - } - - mutatingSelf.imageTask = nil - mutatingSelf.taskIdentifier = nil - - switch result { - case .success(let value): - self.base.image = value.image - completionHandler?(result) - - case .failure: - if let image = options.onFailureImage { - self.base.image = image - } - completionHandler?(result) - } - } - } - ) - - mutatingSelf.imageTask = task - return task - } - - // MARK: Cancelling Downloading Task - - /// Cancels the image download task of the button if it is running. - /// Nothing will happen if the downloading has already finished. - public func cancelImageDownloadTask() { - imageTask?.cancel() - } - - // MARK: Setting Alternate Image - - @discardableResult - public func setAlternateImage( - with source: Source?, - placeholder: KFCrossPlatformImage? = nil, - options: KingfisherOptionsInfo? = nil, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - let options = KingfisherParsedOptionsInfo(KingfisherManager.shared.defaultOptions + (options ?? .empty)) - return setAlternateImage( - with: source, - placeholder: placeholder, - parsedOptions: options, - progressBlock: progressBlock, - completionHandler: completionHandler - ) - } - - /// Sets an alternate image to the button with a requested resource. - /// - /// - Parameters: - /// - resource: The `Resource` object contains information about the resource. - /// - placeholder: A placeholder to show while retrieving the image from the given `resource`. - /// - options: An options set to define image setting behaviors. See `KingfisherOptionsInfo` for more. - /// - progressBlock: Called when the image downloading progress gets updated. If the response does not contain an - /// `expectedContentLength`, this block will not be called. - /// - completionHandler: Called when the image retrieved and set finished. - /// - Returns: A task represents the image downloading. - /// - /// - Note: - /// Internally, this method will use `KingfisherManager` to get the requested resource, from either cache - /// or network. Since this method will perform UI changes, you must call it from the main thread. - /// Both `progressBlock` and `completionHandler` will be also executed in the main thread. - /// - @discardableResult - public func setAlternateImage( - with resource: Resource?, - placeholder: KFCrossPlatformImage? = nil, - options: KingfisherOptionsInfo? = nil, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - return setAlternateImage( - with: resource?.convertToSource(), - placeholder: placeholder, - options: options, - progressBlock: progressBlock, - completionHandler: completionHandler) - } - - func setAlternateImage( - with source: Source?, - placeholder: KFCrossPlatformImage? = nil, - parsedOptions: KingfisherParsedOptionsInfo, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - var mutatingSelf = self - guard let source = source else { - base.alternateImage = placeholder - mutatingSelf.alternateTaskIdentifier = nil - completionHandler?(.failure(KingfisherError.imageSettingError(reason: .emptySource))) - return nil - } - - var options = parsedOptions - if !options.keepCurrentImageWhileLoading { - base.alternateImage = placeholder - } - - let issuedIdentifier = Source.Identifier.next() - mutatingSelf.alternateTaskIdentifier = issuedIdentifier - - if let block = progressBlock { - options.onDataReceived = (options.onDataReceived ?? []) + [ImageLoadingProgressSideEffect(block)] - } - - if let provider = ImageProgressiveProvider(options, refresh: { image in - self.base.alternateImage = image - }) { - options.onDataReceived = (options.onDataReceived ?? []) + [provider] - } - - options.onDataReceived?.forEach { - $0.onShouldApply = { issuedIdentifier == self.alternateTaskIdentifier } - } - - let task = KingfisherManager.shared.retrieveImage( - with: source, - options: options, - downloadTaskUpdated: { mutatingSelf.alternateImageTask = $0 }, - completionHandler: { result in - CallbackQueue.mainCurrentOrAsync.execute { - guard issuedIdentifier == self.alternateTaskIdentifier else { - let reason: KingfisherError.ImageSettingErrorReason - do { - let value = try result.get() - reason = .notCurrentSourceTask(result: value, error: nil, source: source) - } catch { - reason = .notCurrentSourceTask(result: nil, error: error, source: source) - } - let error = KingfisherError.imageSettingError(reason: reason) - completionHandler?(.failure(error)) - return - } - - mutatingSelf.alternateImageTask = nil - mutatingSelf.alternateTaskIdentifier = nil - - switch result { - case .success(let value): - self.base.alternateImage = value.image - completionHandler?(result) - - case .failure: - if let image = options.onFailureImage { - self.base.alternateImage = image - } - completionHandler?(result) - } - } - } - ) - - mutatingSelf.alternateImageTask = task - return task - } - - // MARK: Cancelling Alternate Image Downloading Task - - /// Cancels the alternate image download task of the button if it is running. - /// Nothing will happen if the downloading has already finished. - public func cancelAlternateImageDownloadTask() { - alternateImageTask?.cancel() - } -} - - -// MARK: - Associated Object -private var taskIdentifierKey: Void? -private var imageTaskKey: Void? - -private var alternateTaskIdentifierKey: Void? -private var alternateImageTaskKey: Void? - -extension KingfisherWrapper where Base: NSButton { - - // MARK: Properties - - public private(set) var taskIdentifier: Source.Identifier.Value? { - get { - let box: Box? = getAssociatedObject(base, &taskIdentifierKey) - return box?.value - } - set { - let box = newValue.map { Box($0) } - setRetainedAssociatedObject(base, &taskIdentifierKey, box) - } - } - - private var imageTask: DownloadTask? { - get { return getAssociatedObject(base, &imageTaskKey) } - set { setRetainedAssociatedObject(base, &imageTaskKey, newValue)} - } - - public private(set) var alternateTaskIdentifier: Source.Identifier.Value? { - get { - let box: Box? = getAssociatedObject(base, &alternateTaskIdentifierKey) - return box?.value - } - set { - let box = newValue.map { Box($0) } - setRetainedAssociatedObject(base, &alternateTaskIdentifierKey, box) - } - } - - private var alternateImageTask: DownloadTask? { - get { return getAssociatedObject(base, &alternateImageTaskKey) } - set { setRetainedAssociatedObject(base, &alternateImageTaskKey, newValue)} - } -} -#endif diff --git a/Pods/Kingfisher/Sources/Extensions/NSTextAttachment+Kingfisher.swift b/Pods/Kingfisher/Sources/Extensions/NSTextAttachment+Kingfisher.swift deleted file mode 100644 index 23f627e..0000000 --- a/Pods/Kingfisher/Sources/Extensions/NSTextAttachment+Kingfisher.swift +++ /dev/null @@ -1,271 +0,0 @@ -// -// NSTextAttachment+Kingfisher.swift -// Kingfisher -// -// Created by Benjamin Briggs on 22/07/2019. -// -// Copyright (c) 2019 Wei Wang -// -// 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 !os(watchOS) - -#if os(macOS) -import AppKit -#else -import UIKit -#endif - -extension KingfisherWrapper where Base: NSTextAttachment { - - // MARK: Setting Image - - /// Sets an image to the text attachment with a source. - /// - /// - Parameters: - /// - source: The `Source` object defines data information from network or a data provider. - /// - attributedView: The owner of the attributed string which this `NSTextAttachment` is added. - /// - placeholder: A placeholder to show while retrieving the image from the given `resource`. - /// - options: An options set to define image setting behaviors. See `KingfisherOptionsInfo` for more. - /// - progressBlock: Called when the image downloading progress gets updated. If the response does not contain an - /// `expectedContentLength`, this block will not be called. - /// - completionHandler: Called when the image retrieved and set finished. - /// - Returns: A task represents the image downloading. - /// - /// - Note: - /// - /// Internally, this method will use `KingfisherManager` to get the requested source - /// Since this method will perform UI changes, you must call it from the main thread. - /// - /// The retrieved image will be set to `NSTextAttachment.image` property. Because it is not an image view based - /// rendering, options related to view, such as `.transition`, are not supported. - /// - /// Kingfisher will call `setNeedsDisplay` on the `attributedView` when the image task done. It gives the view a - /// chance to render the attributed string again for displaying the downloaded image. For example, if you set an - /// attributed with this `NSTextAttachment` to a `UILabel` object, pass it as the `attributedView` parameter. - /// - /// Here is a typical use case: - /// - /// ```swift - /// let attributedText = NSMutableAttributedString(string: "Hello World") - /// let textAttachment = NSTextAttachment() - /// - /// textAttachment.kf.setImage( - /// with: URL(string: "https://onevcat.com/assets/images/avatar.jpg")!, - /// attributedView: label, - /// options: [ - /// .processor( - /// ResizingImageProcessor(referenceSize: .init(width: 30, height: 30)) - /// |> RoundCornerImageProcessor(cornerRadius: 15)) - /// ] - /// ) - /// attributedText.replaceCharacters(in: NSRange(), with: NSAttributedString(attachment: textAttachment)) - /// label.attributedText = attributedText - /// ``` - /// - @discardableResult - public func setImage( - with source: Source?, - attributedView: @autoclosure @escaping () -> KFCrossPlatformView, - placeholder: KFCrossPlatformImage? = nil, - options: KingfisherOptionsInfo? = nil, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - let options = KingfisherParsedOptionsInfo(KingfisherManager.shared.defaultOptions + (options ?? .empty)) - return setImage( - with: source, - attributedView: attributedView, - placeholder: placeholder, - parsedOptions: options, - progressBlock: progressBlock, - completionHandler: completionHandler - ) - } - - /// Sets an image to the text attachment with a source. - /// - /// - Parameters: - /// - resource: The `Resource` object contains information about the resource. - /// - attributedView: The owner of the attributed string which this `NSTextAttachment` is added. - /// - placeholder: A placeholder to show while retrieving the image from the given `resource`. - /// - options: An options set to define image setting behaviors. See `KingfisherOptionsInfo` for more. - /// - progressBlock: Called when the image downloading progress gets updated. If the response does not contain an - /// `expectedContentLength`, this block will not be called. - /// - completionHandler: Called when the image retrieved and set finished. - /// - Returns: A task represents the image downloading. - /// - /// - Note: - /// - /// Internally, this method will use `KingfisherManager` to get the requested source - /// Since this method will perform UI changes, you must call it from the main thread. - /// - /// The retrieved image will be set to `NSTextAttachment.image` property. Because it is not an image view based - /// rendering, options related to view, such as `.transition`, are not supported. - /// - /// Kingfisher will call `setNeedsDisplay` on the `attributedView` when the image task done. It gives the view a - /// chance to render the attributed string again for displaying the downloaded image. For example, if you set an - /// attributed with this `NSTextAttachment` to a `UILabel` object, pass it as the `attributedView` parameter. - /// - /// Here is a typical use case: - /// - /// ```swift - /// let attributedText = NSMutableAttributedString(string: "Hello World") - /// let textAttachment = NSTextAttachment() - /// - /// textAttachment.kf.setImage( - /// with: URL(string: "https://onevcat.com/assets/images/avatar.jpg")!, - /// attributedView: label, - /// options: [ - /// .processor( - /// ResizingImageProcessor(referenceSize: .init(width: 30, height: 30)) - /// |> RoundCornerImageProcessor(cornerRadius: 15)) - /// ] - /// ) - /// attributedText.replaceCharacters(in: NSRange(), with: NSAttributedString(attachment: textAttachment)) - /// label.attributedText = attributedText - /// ``` - /// - @discardableResult - public func setImage( - with resource: Resource?, - attributedView: @autoclosure @escaping () -> KFCrossPlatformView, - placeholder: KFCrossPlatformImage? = nil, - options: KingfisherOptionsInfo? = nil, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - let options = KingfisherParsedOptionsInfo(KingfisherManager.shared.defaultOptions + (options ?? .empty)) - return setImage( - with: resource.map { .network($0) }, - attributedView: attributedView, - placeholder: placeholder, - parsedOptions: options, - progressBlock: progressBlock, - completionHandler: completionHandler - ) - } - - func setImage( - with source: Source?, - attributedView: @escaping () -> KFCrossPlatformView, - placeholder: KFCrossPlatformImage? = nil, - parsedOptions: KingfisherParsedOptionsInfo, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - var mutatingSelf = self - guard let source = source else { - base.image = placeholder - mutatingSelf.taskIdentifier = nil - completionHandler?(.failure(KingfisherError.imageSettingError(reason: .emptySource))) - return nil - } - - var options = parsedOptions - if !options.keepCurrentImageWhileLoading { - base.image = placeholder - } - - let issuedIdentifier = Source.Identifier.next() - mutatingSelf.taskIdentifier = issuedIdentifier - - if let block = progressBlock { - options.onDataReceived = (options.onDataReceived ?? []) + [ImageLoadingProgressSideEffect(block)] - } - - let task = KingfisherManager.shared.retrieveImage( - with: source, - options: options, - progressiveImageSetter: { self.base.image = $0 }, - referenceTaskIdentifierChecker: { issuedIdentifier == self.taskIdentifier }, - completionHandler: { result in - CallbackQueue.mainCurrentOrAsync.execute { - guard issuedIdentifier == self.taskIdentifier else { - let reason: KingfisherError.ImageSettingErrorReason - do { - let value = try result.get() - reason = .notCurrentSourceTask(result: value, error: nil, source: source) - } catch { - reason = .notCurrentSourceTask(result: nil, error: error, source: source) - } - let error = KingfisherError.imageSettingError(reason: reason) - completionHandler?(.failure(error)) - return - } - - mutatingSelf.imageTask = nil - mutatingSelf.taskIdentifier = nil - - switch result { - case .success(let value): - self.base.image = value.image - let view = attributedView() - #if canImport(UIKit) - view.setNeedsDisplay() - #else - view.setNeedsDisplay(view.bounds) - #endif - case .failure: - if let image = options.onFailureImage { - self.base.image = image - } - } - completionHandler?(result) - } - } - ) - - mutatingSelf.imageTask = task - return task - } - - // MARK: Cancelling Image - - /// Cancel the image download task bounded to the text attachment if it is running. - /// Nothing will happen if the downloading has already finished. - public func cancelDownloadTask() { - imageTask?.cancel() - } -} - -private var taskIdentifierKey: Void? -private var imageTaskKey: Void? - -// MARK: Properties -extension KingfisherWrapper where Base: NSTextAttachment { - - public private(set) var taskIdentifier: Source.Identifier.Value? { - get { - let box: Box? = getAssociatedObject(base, &taskIdentifierKey) - return box?.value - } - set { - let box = newValue.map { Box($0) } - setRetainedAssociatedObject(base, &taskIdentifierKey, box) - } - } - - private var imageTask: DownloadTask? { - get { return getAssociatedObject(base, &imageTaskKey) } - set { setRetainedAssociatedObject(base, &imageTaskKey, newValue)} - } -} - -#endif diff --git a/Pods/Kingfisher/Sources/Extensions/TVMonogramView+Kingfisher.swift b/Pods/Kingfisher/Sources/Extensions/TVMonogramView+Kingfisher.swift deleted file mode 100644 index c0993cd..0000000 --- a/Pods/Kingfisher/Sources/Extensions/TVMonogramView+Kingfisher.swift +++ /dev/null @@ -1,209 +0,0 @@ -// -// TVMonogramView+Kingfisher.swift -// Kingfisher -// -// Created by Marvin Nazari on 2020-12-07. -// -// Copyright (c) 2020 Wei Wang -// -// 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(TVUIKit) - -import TVUIKit - -@available(tvOS 12.0, *) -extension KingfisherWrapper where Base: TVMonogramView { - - // MARK: Setting Image - - /// Sets an image to the image view with a source. - /// - /// - Parameters: - /// - source: The `Source` object contains information about the image. - /// - placeholder: A placeholder to show while retrieving the image from the given `resource`. - /// - options: An options set to define image setting behaviors. See `KingfisherOptionsInfo` for more. - /// - progressBlock: Called when the image downloading progress gets updated. If the response does not contain an - /// `expectedContentLength`, this block will not be called. - /// - completionHandler: Called when the image retrieved and set finished. - /// - Returns: A task represents the image downloading. - /// - /// - Note: - /// - /// Internally, this method will use `KingfisherManager` to get the requested source - /// Since this method will perform UI changes, you must call it from the main thread. - /// Both `progressBlock` and `completionHandler` will be also executed in the main thread. - /// - @discardableResult - public func setImage( - with source: Source?, - placeholder: KFCrossPlatformImage? = nil, - options: KingfisherOptionsInfo? = nil, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - let options = KingfisherParsedOptionsInfo(KingfisherManager.shared.defaultOptions + (options ?? .empty)) - return setImage( - with: source, - placeholder: placeholder, - parsedOptions: options, - progressBlock: progressBlock, - completionHandler: completionHandler - ) - } - - func setImage( - with source: Source?, - placeholder: KFCrossPlatformImage? = nil, - parsedOptions: KingfisherParsedOptionsInfo, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - var mutatingSelf = self - guard let source = source else { - base.image = placeholder - mutatingSelf.taskIdentifier = nil - completionHandler?(.failure(KingfisherError.imageSettingError(reason: .emptySource))) - return nil - } - - var options = parsedOptions - if !options.keepCurrentImageWhileLoading { - base.image = placeholder - } - - let issuedIdentifier = Source.Identifier.next() - mutatingSelf.taskIdentifier = issuedIdentifier - - if let block = progressBlock { - options.onDataReceived = (options.onDataReceived ?? []) + [ImageLoadingProgressSideEffect(block)] - } - - let task = KingfisherManager.shared.retrieveImage( - with: source, - options: options, - downloadTaskUpdated: { mutatingSelf.imageTask = $0 }, - progressiveImageSetter: { self.base.image = $0 }, - referenceTaskIdentifierChecker: { issuedIdentifier == self.taskIdentifier }, - completionHandler: { result in - CallbackQueue.mainCurrentOrAsync.execute { - guard issuedIdentifier == self.taskIdentifier else { - let reason: KingfisherError.ImageSettingErrorReason - do { - let value = try result.get() - reason = .notCurrentSourceTask(result: value, error: nil, source: source) - } catch { - reason = .notCurrentSourceTask(result: nil, error: error, source: source) - } - let error = KingfisherError.imageSettingError(reason: reason) - completionHandler?(.failure(error)) - return - } - - mutatingSelf.imageTask = nil - mutatingSelf.taskIdentifier = nil - - switch result { - case .success(let value): - self.base.image = value.image - completionHandler?(result) - - case .failure: - if let image = options.onFailureImage { - self.base.image = image - } - completionHandler?(result) - } - } - } - ) - - mutatingSelf.imageTask = task - return task - } - - /// Sets an image to the image view with a requested resource. - /// - /// - Parameters: - /// - resource: The `Resource` object contains information about the image. - /// - placeholder: A placeholder to show while retrieving the image from the given `resource`. - /// - options: An options set to define image setting behaviors. See `KingfisherOptionsInfo` for more. - /// - progressBlock: Called when the image downloading progress gets updated. If the response does not contain an - /// `expectedContentLength`, this block will not be called. - /// - completionHandler: Called when the image retrieved and set finished. - /// - Returns: A task represents the image downloading. - /// - /// - Note: - /// - /// Internally, this method will use `KingfisherManager` to get the requested resource, from either cache - /// or network. Since this method will perform UI changes, you must call it from the main thread. - /// Both `progressBlock` and `completionHandler` will be also executed in the main thread. - /// - @discardableResult - public func setImage( - with resource: Resource?, - placeholder: KFCrossPlatformImage? = nil, - options: KingfisherOptionsInfo? = nil, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - return setImage( - with: resource?.convertToSource(), - placeholder: placeholder, - options: options, - progressBlock: progressBlock, - completionHandler: completionHandler) - } - - // MARK: Cancelling Image - - /// Cancel the image download task bounded to the image view if it is running. - /// Nothing will happen if the downloading has already finished. - public func cancelDownloadTask() { - imageTask?.cancel() - } -} - -private var taskIdentifierKey: Void? -private var imageTaskKey: Void? - -// MARK: Properties -@available(tvOS 12.0, *) -extension KingfisherWrapper where Base: TVMonogramView { - - public private(set) var taskIdentifier: Source.Identifier.Value? { - get { - let box: Box? = getAssociatedObject(base, &taskIdentifierKey) - return box?.value - } - set { - let box = newValue.map { Box($0) } - setRetainedAssociatedObject(base, &taskIdentifierKey, box) - } - } - - private var imageTask: DownloadTask? { - get { return getAssociatedObject(base, &imageTaskKey) } - set { setRetainedAssociatedObject(base, &imageTaskKey, newValue)} - } -} - -#endif diff --git a/Pods/Kingfisher/Sources/Extensions/UIButton+Kingfisher.swift b/Pods/Kingfisher/Sources/Extensions/UIButton+Kingfisher.swift deleted file mode 100644 index d1e2dcb..0000000 --- a/Pods/Kingfisher/Sources/Extensions/UIButton+Kingfisher.swift +++ /dev/null @@ -1,400 +0,0 @@ -// -// UIButton+Kingfisher.swift -// Kingfisher -// -// Created by Wei Wang on 15/4/13. -// -// Copyright (c) 2019 Wei Wang -// -// 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 !os(watchOS) - -#if canImport(UIKit) -import UIKit - -extension KingfisherWrapper where Base: UIButton { - - // MARK: Setting Image - /// Sets an image to the button for a specified state with a source. - /// - /// - Parameters: - /// - source: The `Source` object contains information about the image. - /// - state: The button state to which the image should be set. - /// - placeholder: A placeholder to show while retrieving the image from the given `resource`. - /// - options: An options set to define image setting behaviors. See `KingfisherOptionsInfo` for more. - /// - progressBlock: Called when the image downloading progress gets updated. If the response does not contain an - /// `expectedContentLength`, this block will not be called. - /// - completionHandler: Called when the image retrieved and set finished. - /// - Returns: A task represents the image downloading. - /// - /// - Note: - /// Internally, this method will use `KingfisherManager` to get the requested source, from either cache - /// or network. Since this method will perform UI changes, you must call it from the main thread. - /// Both `progressBlock` and `completionHandler` will be also executed in the main thread. - /// - @discardableResult - public func setImage( - with source: Source?, - for state: UIControl.State, - placeholder: UIImage? = nil, - options: KingfisherOptionsInfo? = nil, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - let options = KingfisherParsedOptionsInfo(KingfisherManager.shared.defaultOptions + (options ?? .empty)) - return setImage( - with: source, - for: state, - placeholder: placeholder, - parsedOptions: options, - progressBlock: progressBlock, - completionHandler: completionHandler - ) - } - - /// Sets an image to the button for a specified state with a requested resource. - /// - /// - Parameters: - /// - resource: The `Resource` object contains information about the resource. - /// - state: The button state to which the image should be set. - /// - placeholder: A placeholder to show while retrieving the image from the given `resource`. - /// - options: An options set to define image setting behaviors. See `KingfisherOptionsInfo` for more. - /// - progressBlock: Called when the image downloading progress gets updated. If the response does not contain an - /// `expectedContentLength`, this block will not be called. - /// - completionHandler: Called when the image retrieved and set finished. - /// - Returns: A task represents the image downloading. - /// - /// - Note: - /// Internally, this method will use `KingfisherManager` to get the requested resource, from either cache - /// or network. Since this method will perform UI changes, you must call it from the main thread. - /// Both `progressBlock` and `completionHandler` will be also executed in the main thread. - /// - @discardableResult - public func setImage( - with resource: Resource?, - for state: UIControl.State, - placeholder: UIImage? = nil, - options: KingfisherOptionsInfo? = nil, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - return setImage( - with: resource?.convertToSource(), - for: state, - placeholder: placeholder, - options: options, - progressBlock: progressBlock, - completionHandler: completionHandler) - } - - @discardableResult - public func setImage( - with source: Source?, - for state: UIControl.State, - placeholder: UIImage? = nil, - parsedOptions: KingfisherParsedOptionsInfo, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - guard let source = source else { - base.setImage(placeholder, for: state) - setTaskIdentifier(nil, for: state) - completionHandler?(.failure(KingfisherError.imageSettingError(reason: .emptySource))) - return nil - } - - var options = parsedOptions - if !options.keepCurrentImageWhileLoading { - base.setImage(placeholder, for: state) - } - - var mutatingSelf = self - let issuedIdentifier = Source.Identifier.next() - setTaskIdentifier(issuedIdentifier, for: state) - - if let block = progressBlock { - options.onDataReceived = (options.onDataReceived ?? []) + [ImageLoadingProgressSideEffect(block)] - } - - let task = KingfisherManager.shared.retrieveImage( - with: source, - options: options, - downloadTaskUpdated: { mutatingSelf.imageTask = $0 }, - progressiveImageSetter: { self.base.setImage($0, for: state) }, - referenceTaskIdentifierChecker: { issuedIdentifier == self.taskIdentifier(for: state) }, - completionHandler: { result in - CallbackQueue.mainCurrentOrAsync.execute { - guard issuedIdentifier == self.taskIdentifier(for: state) else { - let reason: KingfisherError.ImageSettingErrorReason - do { - let value = try result.get() - reason = .notCurrentSourceTask(result: value, error: nil, source: source) - } catch { - reason = .notCurrentSourceTask(result: nil, error: error, source: source) - } - let error = KingfisherError.imageSettingError(reason: reason) - completionHandler?(.failure(error)) - return - } - - mutatingSelf.imageTask = nil - mutatingSelf.setTaskIdentifier(nil, for: state) - - switch result { - case .success(let value): - self.base.setImage(value.image, for: state) - completionHandler?(result) - - case .failure: - if let image = options.onFailureImage { - self.base.setImage(image, for: state) - } - completionHandler?(result) - } - } - } - ) - - mutatingSelf.imageTask = task - return task - } - - // MARK: Cancelling Downloading Task - - /// Cancels the image download task of the button if it is running. - /// Nothing will happen if the downloading has already finished. - public func cancelImageDownloadTask() { - imageTask?.cancel() - } - - // MARK: Setting Background Image - - /// Sets a background image to the button for a specified state with a source. - /// - /// - Parameters: - /// - source: The `Source` object contains information about the image. - /// - state: The button state to which the image should be set. - /// - placeholder: A placeholder to show while retrieving the image from the given `resource`. - /// - options: An options set to define image setting behaviors. See `KingfisherOptionsInfo` for more. - /// - progressBlock: Called when the image downloading progress gets updated. If the response does not contain an - /// `expectedContentLength`, this block will not be called. - /// - completionHandler: Called when the image retrieved and set finished. - /// - Returns: A task represents the image downloading. - /// - /// - Note: - /// Internally, this method will use `KingfisherManager` to get the requested source - /// Since this method will perform UI changes, you must call it from the main thread. - /// Both `progressBlock` and `completionHandler` will be also executed in the main thread. - /// - @discardableResult - public func setBackgroundImage( - with source: Source?, - for state: UIControl.State, - placeholder: UIImage? = nil, - options: KingfisherOptionsInfo? = nil, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - let options = KingfisherParsedOptionsInfo(KingfisherManager.shared.defaultOptions + (options ?? .empty)) - return setBackgroundImage( - with: source, - for: state, - placeholder: placeholder, - parsedOptions: options, - progressBlock: progressBlock, - completionHandler: completionHandler - ) - } - - /// Sets a background image to the button for a specified state with a requested resource. - /// - /// - Parameters: - /// - resource: The `Resource` object contains information about the resource. - /// - state: The button state to which the image should be set. - /// - placeholder: A placeholder to show while retrieving the image from the given `resource`. - /// - options: An options set to define image setting behaviors. See `KingfisherOptionsInfo` for more. - /// - progressBlock: Called when the image downloading progress gets updated. If the response does not contain an - /// `expectedContentLength`, this block will not be called. - /// - completionHandler: Called when the image retrieved and set finished. - /// - Returns: A task represents the image downloading. - /// - /// - Note: - /// Internally, this method will use `KingfisherManager` to get the requested resource, from either cache - /// or network. Since this method will perform UI changes, you must call it from the main thread. - /// Both `progressBlock` and `completionHandler` will be also executed in the main thread. - /// - @discardableResult - public func setBackgroundImage( - with resource: Resource?, - for state: UIControl.State, - placeholder: UIImage? = nil, - options: KingfisherOptionsInfo? = nil, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - return setBackgroundImage( - with: resource?.convertToSource(), - for: state, - placeholder: placeholder, - options: options, - progressBlock: progressBlock, - completionHandler: completionHandler) - } - - func setBackgroundImage( - with source: Source?, - for state: UIControl.State, - placeholder: UIImage? = nil, - parsedOptions: KingfisherParsedOptionsInfo, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - guard let source = source else { - base.setBackgroundImage(placeholder, for: state) - setBackgroundTaskIdentifier(nil, for: state) - completionHandler?(.failure(KingfisherError.imageSettingError(reason: .emptySource))) - return nil - } - - var options = parsedOptions - if !options.keepCurrentImageWhileLoading { - base.setBackgroundImage(placeholder, for: state) - } - - var mutatingSelf = self - let issuedIdentifier = Source.Identifier.next() - setBackgroundTaskIdentifier(issuedIdentifier, for: state) - - if let block = progressBlock { - options.onDataReceived = (options.onDataReceived ?? []) + [ImageLoadingProgressSideEffect(block)] - } - - let task = KingfisherManager.shared.retrieveImage( - with: source, - options: options, - downloadTaskUpdated: { mutatingSelf.backgroundImageTask = $0 }, - progressiveImageSetter: { self.base.setBackgroundImage($0, for: state) }, - referenceTaskIdentifierChecker: { issuedIdentifier == self.backgroundTaskIdentifier(for: state) }, - completionHandler: { result in - CallbackQueue.mainCurrentOrAsync.execute { - guard issuedIdentifier == self.backgroundTaskIdentifier(for: state) else { - let reason: KingfisherError.ImageSettingErrorReason - do { - let value = try result.get() - reason = .notCurrentSourceTask(result: value, error: nil, source: source) - } catch { - reason = .notCurrentSourceTask(result: nil, error: error, source: source) - } - let error = KingfisherError.imageSettingError(reason: reason) - completionHandler?(.failure(error)) - return - } - - mutatingSelf.backgroundImageTask = nil - mutatingSelf.setBackgroundTaskIdentifier(nil, for: state) - - switch result { - case .success(let value): - self.base.setBackgroundImage(value.image, for: state) - completionHandler?(result) - - case .failure: - if let image = options.onFailureImage { - self.base.setBackgroundImage(image, for: state) - } - completionHandler?(result) - } - } - } - ) - - mutatingSelf.backgroundImageTask = task - return task - } - - // MARK: Cancelling Background Downloading Task - - /// Cancels the background image download task of the button if it is running. - /// Nothing will happen if the downloading has already finished. - public func cancelBackgroundImageDownloadTask() { - backgroundImageTask?.cancel() - } -} - -// MARK: - Associated Object -private var taskIdentifierKey: Void? -private var imageTaskKey: Void? - -// MARK: Properties -extension KingfisherWrapper where Base: UIButton { - - private typealias TaskIdentifier = Box<[UInt: Source.Identifier.Value]> - - public func taskIdentifier(for state: UIControl.State) -> Source.Identifier.Value? { - return taskIdentifierInfo.value[state.rawValue] - } - - private func setTaskIdentifier(_ identifier: Source.Identifier.Value?, for state: UIControl.State) { - taskIdentifierInfo.value[state.rawValue] = identifier - } - - private var taskIdentifierInfo: TaskIdentifier { - return getAssociatedObject(base, &taskIdentifierKey) ?? { - setRetainedAssociatedObject(base, &taskIdentifierKey, $0) - return $0 - } (TaskIdentifier([:])) - } - - private var imageTask: DownloadTask? { - get { return getAssociatedObject(base, &imageTaskKey) } - set { setRetainedAssociatedObject(base, &imageTaskKey, newValue)} - } -} - - -private var backgroundTaskIdentifierKey: Void? -private var backgroundImageTaskKey: Void? - -// MARK: Background Properties -extension KingfisherWrapper where Base: UIButton { - - public func backgroundTaskIdentifier(for state: UIControl.State) -> Source.Identifier.Value? { - return backgroundTaskIdentifierInfo.value[state.rawValue] - } - - private func setBackgroundTaskIdentifier(_ identifier: Source.Identifier.Value?, for state: UIControl.State) { - backgroundTaskIdentifierInfo.value[state.rawValue] = identifier - } - - private var backgroundTaskIdentifierInfo: TaskIdentifier { - return getAssociatedObject(base, &backgroundTaskIdentifierKey) ?? { - setRetainedAssociatedObject(base, &backgroundTaskIdentifierKey, $0) - return $0 - } (TaskIdentifier([:])) - } - - private var backgroundImageTask: DownloadTask? { - get { return getAssociatedObject(base, &backgroundImageTaskKey) } - mutating set { setRetainedAssociatedObject(base, &backgroundImageTaskKey, newValue) } - } -} -#endif - -#endif diff --git a/Pods/Kingfisher/Sources/Extensions/WKInterfaceImage+Kingfisher.swift b/Pods/Kingfisher/Sources/Extensions/WKInterfaceImage+Kingfisher.swift deleted file mode 100644 index a24feeb..0000000 --- a/Pods/Kingfisher/Sources/Extensions/WKInterfaceImage+Kingfisher.swift +++ /dev/null @@ -1,204 +0,0 @@ -// -// WKInterfaceImage+Kingfisher.swift -// Kingfisher -// -// Created by Rodrigo Borges Soares on 04/05/18. -// -// Copyright (c) 2019 Wei Wang -// -// 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(WatchKit) - -import WatchKit - -extension KingfisherWrapper where Base: WKInterfaceImage { - - // MARK: Setting Image - - /// Sets an image to the image view with a source. - /// - /// - Parameters: - /// - source: The `Source` object contains information about the image. - /// - placeholder: A placeholder to show while retrieving the image from the given `resource`. - /// - options: An options set to define image setting behaviors. See `KingfisherOptionsInfo` for more. - /// - progressBlock: Called when the image downloading progress gets updated. If the response does not contain an - /// `expectedContentLength`, this block will not be called. - /// - completionHandler: Called when the image retrieved and set finished. - /// - Returns: A task represents the image downloading. - /// - /// - Note: - /// - /// Internally, this method will use `KingfisherManager` to get the requested source - /// Since this method will perform UI changes, you must call it from the main thread. - /// Both `progressBlock` and `completionHandler` will be also executed in the main thread. - /// - @discardableResult - public func setImage( - with source: Source?, - placeholder: KFCrossPlatformImage? = nil, - options: KingfisherOptionsInfo? = nil, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - let options = KingfisherParsedOptionsInfo(KingfisherManager.shared.defaultOptions + (options ?? .empty)) - return setImage( - with: source, - placeholder: placeholder, - parsedOptions: options, - progressBlock: progressBlock, - completionHandler: completionHandler - ) - } - - /// Sets an image to the image view with a requested resource. - /// - /// - Parameters: - /// - resource: The `Resource` object contains information about the image. - /// - placeholder: A placeholder to show while retrieving the image from the given `resource`. - /// - options: An options set to define image setting behaviors. See `KingfisherOptionsInfo` for more. - /// - progressBlock: Called when the image downloading progress gets updated. If the response does not contain an - /// `expectedContentLength`, this block will not be called. - /// - completionHandler: Called when the image retrieved and set finished. - /// - Returns: A task represents the image downloading. - /// - /// - Note: - /// - /// Internally, this method will use `KingfisherManager` to get the requested resource, from either cache - /// or network. Since this method will perform UI changes, you must call it from the main thread. - /// Both `progressBlock` and `completionHandler` will be also executed in the main thread. - /// - @discardableResult - public func setImage( - with resource: Resource?, - placeholder: KFCrossPlatformImage? = nil, - options: KingfisherOptionsInfo? = nil, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - return setImage( - with: resource?.convertToSource(), - placeholder: placeholder, - options: options, - progressBlock: progressBlock, - completionHandler: completionHandler) - } - - func setImage( - with source: Source?, - placeholder: KFCrossPlatformImage? = nil, - parsedOptions: KingfisherParsedOptionsInfo, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - var mutatingSelf = self - guard let source = source else { - base.setImage(placeholder) - mutatingSelf.taskIdentifier = nil - completionHandler?(.failure(KingfisherError.imageSettingError(reason: .emptySource))) - return nil - } - - var options = parsedOptions - if !options.keepCurrentImageWhileLoading { - base.setImage(placeholder) - } - - let issuedIdentifier = Source.Identifier.next() - mutatingSelf.taskIdentifier = issuedIdentifier - - if let block = progressBlock { - options.onDataReceived = (options.onDataReceived ?? []) + [ImageLoadingProgressSideEffect(block)] - } - - let task = KingfisherManager.shared.retrieveImage( - with: source, - options: options, - downloadTaskUpdated: { mutatingSelf.imageTask = $0 }, - progressiveImageSetter: { self.base.setImage($0) }, - referenceTaskIdentifierChecker: { issuedIdentifier == self.taskIdentifier }, - completionHandler: { result in - CallbackQueue.mainCurrentOrAsync.execute { - guard issuedIdentifier == self.taskIdentifier else { - let reason: KingfisherError.ImageSettingErrorReason - do { - let value = try result.get() - reason = .notCurrentSourceTask(result: value, error: nil, source: source) - } catch { - reason = .notCurrentSourceTask(result: nil, error: error, source: source) - } - let error = KingfisherError.imageSettingError(reason: reason) - completionHandler?(.failure(error)) - return - } - - mutatingSelf.imageTask = nil - mutatingSelf.taskIdentifier = nil - - switch result { - case .success(let value): - self.base.setImage(value.image) - completionHandler?(result) - - case .failure: - if let image = options.onFailureImage { - self.base.setImage(image) - } - completionHandler?(result) - } - } - } - ) - - mutatingSelf.imageTask = task - return task - } - - // MARK: Cancelling Image - - /// Cancel the image download task bounded to the image view if it is running. - /// Nothing will happen if the downloading has already finished. - public func cancelDownloadTask() { - imageTask?.cancel() - } -} - -private var taskIdentifierKey: Void? -private var imageTaskKey: Void? - -// MARK: Properties -extension KingfisherWrapper where Base: WKInterfaceImage { - - public private(set) var taskIdentifier: Source.Identifier.Value? { - get { - let box: Box? = getAssociatedObject(base, &taskIdentifierKey) - return box?.value - } - set { - let box = newValue.map { Box($0) } - setRetainedAssociatedObject(base, &taskIdentifierKey, box) - } - } - - private var imageTask: DownloadTask? { - get { return getAssociatedObject(base, &imageTaskKey) } - set { setRetainedAssociatedObject(base, &imageTaskKey, newValue)} - } -} -#endif diff --git a/Pods/Kingfisher/Sources/General/ImageSource/AVAssetImageDataProvider.swift b/Pods/Kingfisher/Sources/General/ImageSource/AVAssetImageDataProvider.swift deleted file mode 100644 index e3795e5..0000000 --- a/Pods/Kingfisher/Sources/General/ImageSource/AVAssetImageDataProvider.swift +++ /dev/null @@ -1,148 +0,0 @@ -// -// AVAssetImageDataProvider.swift -// Kingfisher -// -// Created by onevcat on 2020/08/09. -// -// Copyright (c) 2020 Wei Wang -// -// 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 !os(watchOS) - -import Foundation -import AVKit - -#if canImport(MobileCoreServices) -import MobileCoreServices -#else -import CoreServices -#endif - -/// A data provider to provide thumbnail data from a given AVKit asset. -public struct AVAssetImageDataProvider: ImageDataProvider { - - /// The possible error might be caused by the `AVAssetImageDataProvider`. - /// - userCancelled: The data provider process is cancelled. - /// - invalidImage: The retrieved image is invalid. - public enum AVAssetImageDataProviderError: Error { - case userCancelled - case invalidImage(_ image: CGImage?) - } - - /// The asset image generator bound to `self`. - public let assetImageGenerator: AVAssetImageGenerator - - /// The time at which the image should be generate in the asset. - public let time: CMTime - - private var internalKey: String { - return (assetImageGenerator.asset as? AVURLAsset)?.url.absoluteString ?? UUID().uuidString - } - - /// The cache key used by `self`. - public var cacheKey: String { - return "\(internalKey)_\(time.seconds)" - } - - /// Creates an asset image data provider. - /// - Parameters: - /// - assetImageGenerator: The asset image generator controls data providing behaviors. - /// - time: At which time in the asset the image should be generated. - public init(assetImageGenerator: AVAssetImageGenerator, time: CMTime) { - self.assetImageGenerator = assetImageGenerator - self.time = time - } - - /// Creates an asset image data provider. - /// - Parameters: - /// - assetURL: The URL of asset for providing image data. - /// - time: At which time in the asset the image should be generated. - /// - /// This method uses `assetURL` to create an `AVAssetImageGenerator` object and calls - /// the `init(assetImageGenerator:time:)` initializer. - /// - public init(assetURL: URL, time: CMTime) { - let asset = AVAsset(url: assetURL) - let generator = AVAssetImageGenerator(asset: asset) - generator.appliesPreferredTrackTransform = true - self.init(assetImageGenerator: generator, time: time) - } - - /// Creates an asset image data provider. - /// - /// - Parameters: - /// - assetURL: The URL of asset for providing image data. - /// - seconds: At which time in seconds in the asset the image should be generated. - /// - /// This method uses `assetURL` to create an `AVAssetImageGenerator` object, uses `seconds` to create a `CMTime`, - /// and calls the `init(assetImageGenerator:time:)` initializer. - /// - public init(assetURL: URL, seconds: TimeInterval) { - let time = CMTime(seconds: seconds, preferredTimescale: 600) - self.init(assetURL: assetURL, time: time) - } - - public func data(handler: @escaping (Result) -> Void) { - assetImageGenerator.generateCGImagesAsynchronously(forTimes: [NSValue(time: time)]) { - (requestedTime, image, imageTime, result, error) in - if let error = error { - handler(.failure(error)) - return - } - - if result == .cancelled { - handler(.failure(AVAssetImageDataProviderError.userCancelled)) - return - } - - guard let cgImage = image, let data = cgImage.jpegData else { - handler(.failure(AVAssetImageDataProviderError.invalidImage(image))) - return - } - - handler(.success(data)) - } - } -} - -extension CGImage { - var jpegData: Data? { - guard let mutableData = CFDataCreateMutable(nil, 0) else { - return nil - } -#if os(xrOS) - guard let destination = CGImageDestinationCreateWithData( - mutableData, UTType.jpeg.identifier as CFString , 1, nil - ) else { - return nil - } -#else - guard let destination = CGImageDestinationCreateWithData(mutableData, kUTTypeJPEG, 1, nil) else { - return nil - } -#endif - - CGImageDestinationAddImage(destination, self, nil) - guard CGImageDestinationFinalize(destination) else { return nil } - return mutableData as Data - } -} - -#endif diff --git a/Pods/Kingfisher/Sources/General/ImageSource/ImageDataProvider.swift b/Pods/Kingfisher/Sources/General/ImageSource/ImageDataProvider.swift deleted file mode 100644 index dd34150..0000000 --- a/Pods/Kingfisher/Sources/General/ImageSource/ImageDataProvider.swift +++ /dev/null @@ -1,190 +0,0 @@ -// -// ImageDataProvider.swift -// Kingfisher -// -// Created by onevcat on 2018/11/13. -// -// Copyright (c) 2019 Wei Wang -// -// 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 - -/// Represents a data provider to provide image data to Kingfisher when setting with -/// `Source.provider` source. Compared to `Source.network` member, it gives a chance -/// to load some image data in your own way, as long as you can provide the data -/// representation for the image. -public protocol ImageDataProvider { - - /// The key used in cache. - var cacheKey: String { get } - - /// Provides the data which represents image. Kingfisher uses the data you pass in the - /// handler to process images and caches it for later use. - /// - /// - Parameter handler: The handler you should call when you prepared your data. - /// If the data is loaded successfully, call the handler with - /// a `.success` with the data associated. Otherwise, call it - /// with a `.failure` and pass the error. - /// - /// - Note: - /// If the `handler` is called with a `.failure` with error, a `dataProviderError` of - /// `ImageSettingErrorReason` will be finally thrown out to you as the `KingfisherError` - /// from the framework. - func data(handler: @escaping (Result) -> Void) - - /// The content URL represents this provider, if exists. - var contentURL: URL? { get } -} - -public extension ImageDataProvider { - var contentURL: URL? { return nil } - func convertToSource() -> Source { - .provider(self) - } -} - -/// Represents an image data provider for loading from a local file URL on disk. -/// Uses this type for adding a disk image to Kingfisher. Compared to loading it -/// directly, you can get benefit of using Kingfisher's extension methods, as well -/// as applying `ImageProcessor`s and storing the image to `ImageCache` of Kingfisher. -public struct LocalFileImageDataProvider: ImageDataProvider { - - // MARK: Public Properties - - /// The file URL from which the image be loaded. - public let fileURL: URL - private let loadingQueue: ExecutionQueue - - // MARK: Initializers - - /// Creates an image data provider by supplying the target local file URL. - /// - /// - Parameters: - /// - fileURL: The file URL from which the image be loaded. - /// - cacheKey: The key is used for caching the image data. By default, - /// the `absoluteString` of `fileURL` is used. - /// - loadingQueue: The queue where the file loading should happen. By default, the dispatch queue of - /// `.global(qos: .userInitiated)` will be used. - public init( - fileURL: URL, - cacheKey: String? = nil, - loadingQueue: ExecutionQueue = .dispatch(DispatchQueue.global(qos: .userInitiated)) - ) { - self.fileURL = fileURL - self.cacheKey = cacheKey ?? fileURL.localFileCacheKey - self.loadingQueue = loadingQueue - } - - // MARK: Protocol Conforming - - /// The key used in cache. - public var cacheKey: String - - public func data(handler:@escaping (Result) -> Void) { - loadingQueue.execute { - handler(Result(catching: { try Data(contentsOf: fileURL) })) - } - } - - #if swift(>=5.5) - #if canImport(_Concurrency) - @available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *) - public var data: Data { - get async throws { - try await withCheckedThrowingContinuation { continuation in - loadingQueue.execute { - do { - let data = try Data(contentsOf: fileURL) - continuation.resume(returning: data) - } catch { - continuation.resume(throwing: error) - } - } - } - } - } - #endif - #endif - - /// The URL of the local file on the disk. - public var contentURL: URL? { - return fileURL - } -} - -/// Represents an image data provider for loading image from a given Base64 encoded string. -public struct Base64ImageDataProvider: ImageDataProvider { - - // MARK: Public Properties - /// The encoded Base64 string for the image. - public let base64String: String - - // MARK: Initializers - - /// Creates an image data provider by supplying the Base64 encoded string. - /// - /// - Parameters: - /// - base64String: The Base64 encoded string for an image. - /// - cacheKey: The key is used for caching the image data. You need a different key for any different image. - public init(base64String: String, cacheKey: String) { - self.base64String = base64String - self.cacheKey = cacheKey - } - - // MARK: Protocol Conforming - - /// The key used in cache. - public var cacheKey: String - - public func data(handler: (Result) -> Void) { - let data = Data(base64Encoded: base64String)! - handler(.success(data)) - } -} - -/// Represents an image data provider for a raw data object. -public struct RawImageDataProvider: ImageDataProvider { - - // MARK: Public Properties - - /// The raw data object to provide to Kingfisher image loader. - public let data: Data - - // MARK: Initializers - - /// Creates an image data provider by the given raw `data` value and a `cacheKey` be used in Kingfisher cache. - /// - /// - Parameters: - /// - data: The raw data reprensents an image. - /// - cacheKey: The key is used for caching the image data. You need a different key for any different image. - public init(data: Data, cacheKey: String) { - self.data = data - self.cacheKey = cacheKey - } - - // MARK: Protocol Conforming - - /// The key used in cache. - public var cacheKey: String - - public func data(handler: @escaping (Result) -> Void) { - handler(.success(data)) - } -} diff --git a/Pods/Kingfisher/Sources/General/ImageSource/Resource.swift b/Pods/Kingfisher/Sources/General/ImageSource/Resource.swift deleted file mode 100644 index f6c1a57..0000000 --- a/Pods/Kingfisher/Sources/General/ImageSource/Resource.swift +++ /dev/null @@ -1,121 +0,0 @@ -// -// Resource.swift -// Kingfisher -// -// Created by Wei Wang on 15/4/6. -// -// Copyright (c) 2019 Wei Wang -// -// 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 - -/// Represents an image resource at a certain url and a given cache key. -/// Kingfisher will use a `Resource` to download a resource from network and cache it with the cache key when -/// using `Source.network` as its image setting source. -public protocol Resource { - - /// The key used in cache. - var cacheKey: String { get } - - /// The target image URL. - var downloadURL: URL { get } -} - -extension Resource { - - /// Converts `self` to a valid `Source` based on its `downloadURL` scheme. A `.provider` with - /// `LocalFileImageDataProvider` associated will be returned if the URL points to a local file. Otherwise, - /// `.network` is returned. - public func convertToSource(overrideCacheKey: String? = nil) -> Source { - let key = overrideCacheKey ?? cacheKey - return downloadURL.isFileURL ? - .provider(LocalFileImageDataProvider(fileURL: downloadURL, cacheKey: key)) : - .network(KF.ImageResource(downloadURL: downloadURL, cacheKey: key)) - } -} - -@available(*, deprecated, message: "This type conflicts with `GeneratedAssetSymbols.ImageResource` in Swift 5.9. Renamed to avoid issues in the future.", renamed: "KF.ImageResource") -public typealias ImageResource = KF.ImageResource - - -extension KF { - /// ImageResource is a simple combination of `downloadURL` and `cacheKey`. - /// When passed to image view set methods, Kingfisher will try to download the target - /// image from the `downloadURL`, and then store it with the `cacheKey` as the key in cache. - public struct ImageResource: Resource { - - // MARK: - Initializers - - /// Creates an image resource. - /// - /// - Parameters: - /// - downloadURL: The target image URL from where the image can be downloaded. - /// - cacheKey: The cache key. If `nil`, Kingfisher will use the `absoluteString` of `downloadURL` as the key. - /// Default is `nil`. - public init(downloadURL: URL, cacheKey: String? = nil) { - self.downloadURL = downloadURL - self.cacheKey = cacheKey ?? downloadURL.cacheKey - } - - // MARK: Protocol Conforming - - /// The key used in cache. - public let cacheKey: String - - /// The target image URL. - public let downloadURL: URL - } -} - -/// URL conforms to `Resource` in Kingfisher. -/// The `absoluteString` of this URL is used as `cacheKey`. And the URL itself will be used as `downloadURL`. -/// If you need customize the url and/or cache key, use `ImageResource` instead. -extension URL: Resource { - public var cacheKey: String { return isFileURL ? localFileCacheKey : absoluteString } - public var downloadURL: URL { return self } -} - -extension URL { - static let localFileCacheKeyPrefix = "kingfisher.local.cacheKey" - - // The special version of cache key for a local file on disk. Every time the app is reinstalled on the disk, - // the system assigns a new container folder to hold the .app (and the extensions, .appex) folder. So the URL for - // the same image in bundle might be different. - // - // This getter only uses the fixed part in the URL (until the bundle name folder) to provide a stable cache key - // for the image under the same path inside the bundle. - // - // See #1825 (https://github.com/onevcat/Kingfisher/issues/1825) - var localFileCacheKey: String { - var validComponents: [String] = [] - for part in pathComponents.reversed() { - validComponents.append(part) - if part.hasSuffix(".app") || part.hasSuffix(".appex") { - break - } - } - let fixedPath = "\(Self.localFileCacheKeyPrefix)/\(validComponents.reversed().joined(separator: "/"))" - if let q = query { - return "\(fixedPath)?\(q)" - } else { - return fixedPath - } - } -} diff --git a/Pods/Kingfisher/Sources/General/ImageSource/Source.swift b/Pods/Kingfisher/Sources/General/ImageSource/Source.swift deleted file mode 100644 index e0684fb..0000000 --- a/Pods/Kingfisher/Sources/General/ImageSource/Source.swift +++ /dev/null @@ -1,116 +0,0 @@ -// -// Source.swift -// Kingfisher -// -// Created by onevcat on 2018/11/17. -// -// Copyright (c) 2019 Wei Wang -// -// 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 - -/// Represents an image setting source for Kingfisher methods. -/// -/// A `Source` value indicates the way how the target image can be retrieved and cached. -/// -/// - network: The target image should be got from network remotely. The associated `Resource` -/// value defines detail information like image URL and cache key. -/// - provider: The target image should be provided in a data format. Normally, it can be an image -/// from local storage or in any other encoding format (like Base64). -public enum Source { - - /// Represents the source task identifier when setting an image to a view with extension methods. - public enum Identifier { - - /// The underlying value type of source identifier. - public typealias Value = UInt - static private(set) var current: Value = 0 - static func next() -> Value { - current += 1 - return current - } - } - - // MARK: Member Cases - - /// The target image should be got from network remotely. The associated `Resource` - /// value defines detail information like image URL and cache key. - case network(Resource) - - /// The target image should be provided in a data format. Normally, it can be an image - /// from local storage or in any other encoding format (like Base64). - case provider(ImageDataProvider) - - // MARK: Getting Properties - - /// The cache key defined for this source value. - public var cacheKey: String { - switch self { - case .network(let resource): return resource.cacheKey - case .provider(let provider): return provider.cacheKey - } - } - - /// The URL defined for this source value. - /// - /// For a `.network` source, it is the `downloadURL` of associated `Resource` instance. - /// For a `.provider` value, it is always `nil`. - public var url: URL? { - switch self { - case .network(let resource): return resource.downloadURL - case .provider(let provider): return provider.contentURL - } - } -} - -extension Source: Hashable { - public static func == (lhs: Source, rhs: Source) -> Bool { - switch (lhs, rhs) { - case (.network(let r1), .network(let r2)): - return r1.cacheKey == r2.cacheKey && r1.downloadURL == r2.downloadURL - case (.provider(let p1), .provider(let p2)): - return p1.cacheKey == p2.cacheKey && p1.contentURL == p2.contentURL - case (.provider(_), .network(_)): - return false - case (.network(_), .provider(_)): - return false - } - } - - public func hash(into hasher: inout Hasher) { - switch self { - case .network(let r): - hasher.combine(r.cacheKey) - hasher.combine(r.downloadURL) - case .provider(let p): - hasher.combine(p.cacheKey) - hasher.combine(p.contentURL) - } - } -} - -extension Source { - var asResource: Resource? { - guard case .network(let resource) = self else { - return nil - } - return resource - } -} diff --git a/Pods/Kingfisher/Sources/General/KF.swift b/Pods/Kingfisher/Sources/General/KF.swift deleted file mode 100644 index 8f3f028..0000000 --- a/Pods/Kingfisher/Sources/General/KF.swift +++ /dev/null @@ -1,442 +0,0 @@ -// -// KF.swift -// Kingfisher -// -// Created by onevcat on 2020/09/21. -// -// Copyright (c) 2020 Wei Wang -// -// 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 - -#if canImport(CarPlay) && !targetEnvironment(macCatalyst) -import CarPlay -#endif - -#if canImport(AppKit) && !targetEnvironment(macCatalyst) -import AppKit -#endif - -#if canImport(WatchKit) -import WatchKit -#endif - -#if canImport(TVUIKit) -import TVUIKit -#endif - -/// A helper type to create image setting tasks in a builder pattern. -/// Use methods in this type to create a `KF.Builder` instance and configure image tasks there. -public enum KF { - - /// Creates a builder for a given `Source`. - /// - Parameter source: The `Source` object defines data information from network or a data provider. - /// - Returns: A `KF.Builder` for future configuration. After configuring the builder, call `set(to:)` - /// to start the image loading. - public static func source(_ source: Source?) -> KF.Builder { - Builder(source: source) - } - - /// Creates a builder for a given `Resource`. - /// - Parameter resource: The `Resource` object defines data information like key or URL. - /// - Returns: A `KF.Builder` for future configuration. After configuring the builder, call `set(to:)` - /// to start the image loading. - public static func resource(_ resource: Resource?) -> KF.Builder { - source(resource?.convertToSource()) - } - - /// Creates a builder for a given `URL` and an optional cache key. - /// - Parameters: - /// - url: The URL where the image should be downloaded. - /// - cacheKey: The key used to store the downloaded image in cache. - /// If `nil`, the `absoluteString` of `url` is used as the cache key. - /// - Returns: A `KF.Builder` for future configuration. After configuring the builder, call `set(to:)` - /// to start the image loading. - public static func url(_ url: URL?, cacheKey: String? = nil) -> KF.Builder { - source(url?.convertToSource(overrideCacheKey: cacheKey)) - } - - /// Creates a builder for a given `ImageDataProvider`. - /// - Parameter provider: The `ImageDataProvider` object contains information about the data. - /// - Returns: A `KF.Builder` for future configuration. After configuring the builder, call `set(to:)` - /// to start the image loading. - public static func dataProvider(_ provider: ImageDataProvider?) -> KF.Builder { - source(provider?.convertToSource()) - } - - /// Creates a builder for some given raw data and a cache key. - /// - Parameters: - /// - data: The data object from which the image should be created. - /// - cacheKey: The key used to store the downloaded image in cache. - /// - Returns: A `KF.Builder` for future configuration. After configuring the builder, call `set(to:)` - /// to start the image loading. - public static func data(_ data: Data?, cacheKey: String) -> KF.Builder { - if let data = data { - return dataProvider(RawImageDataProvider(data: data, cacheKey: cacheKey)) - } else { - return dataProvider(nil) - } - } -} - - -extension KF { - - /// A builder class to configure an image retrieving task and set it to a holder view or component. - public class Builder { - private let source: Source? - - #if os(watchOS) - private var placeholder: KFCrossPlatformImage? - #else - private var placeholder: Placeholder? - #endif - - public var options = KingfisherParsedOptionsInfo(KingfisherManager.shared.defaultOptions) - - public let onFailureDelegate = Delegate() - public let onSuccessDelegate = Delegate() - public let onProgressDelegate = Delegate<(Int64, Int64), Void>() - - init(source: Source?) { - self.source = source - } - - private var resultHandler: ((Result) -> Void)? { - { - switch $0 { - case .success(let result): - self.onSuccessDelegate(result) - case .failure(let error): - self.onFailureDelegate(error) - } - } - } - - private var progressBlock: DownloadProgressBlock { - { self.onProgressDelegate(($0, $1)) } - } - } -} - -extension KF.Builder { - #if !os(watchOS) - - /// Builds the image task request and sets it to an image view. - /// - Parameter imageView: The image view which loads the task and should be set with the image. - /// - Returns: A task represents the image downloading, if initialized. - /// This value is `nil` if the image is being loaded from cache. - @discardableResult - public func set(to imageView: KFCrossPlatformImageView) -> DownloadTask? { - imageView.kf.setImage( - with: source, - placeholder: placeholder, - parsedOptions: options, - progressBlock: progressBlock, - completionHandler: resultHandler - ) - } - - /// Builds the image task request and sets it to an `NSTextAttachment` object. - /// - Parameters: - /// - attachment: The text attachment object which loads the task and should be set with the image. - /// - attributedView: The owner of the attributed string which this `NSTextAttachment` is added. - /// - Returns: A task represents the image downloading, if initialized. - /// This value is `nil` if the image is being loaded from cache. - @discardableResult - public func set(to attachment: NSTextAttachment, attributedView: @autoclosure @escaping () -> KFCrossPlatformView) -> DownloadTask? { - let placeholderImage = placeholder as? KFCrossPlatformImage ?? nil - return attachment.kf.setImage( - with: source, - attributedView: attributedView, - placeholder: placeholderImage, - parsedOptions: options, - progressBlock: progressBlock, - completionHandler: resultHandler - ) - } - - #if canImport(UIKit) - - /// Builds the image task request and sets it to a button. - /// - Parameters: - /// - button: The button which loads the task and should be set with the image. - /// - state: The button state to which the image should be set. - /// - Returns: A task represents the image downloading, if initialized. - /// This value is `nil` if the image is being loaded from cache. - @discardableResult - public func set(to button: UIButton, for state: UIControl.State) -> DownloadTask? { - let placeholderImage = placeholder as? KFCrossPlatformImage ?? nil - return button.kf.setImage( - with: source, - for: state, - placeholder: placeholderImage, - parsedOptions: options, - progressBlock: progressBlock, - completionHandler: resultHandler - ) - } - - /// Builds the image task request and sets it to the background image for a button. - /// - Parameters: - /// - button: The button which loads the task and should be set with the image. - /// - state: The button state to which the image should be set. - /// - Returns: A task represents the image downloading, if initialized. - /// This value is `nil` if the image is being loaded from cache. - @discardableResult - public func setBackground(to button: UIButton, for state: UIControl.State) -> DownloadTask? { - let placeholderImage = placeholder as? KFCrossPlatformImage ?? nil - return button.kf.setBackgroundImage( - with: source, - for: state, - placeholder: placeholderImage, - parsedOptions: options, - progressBlock: progressBlock, - completionHandler: resultHandler - ) - } - #endif // end of canImport(UIKit) - - #if canImport(CarPlay) && !targetEnvironment(macCatalyst) - - /// Builds the image task request and sets it to the image for a list item. - /// - Parameters: - /// - listItem: The list item which loads the task and should be set with the image. - /// - Returns: A task represents the image downloading, if initialized. - /// This value is `nil` if the image is being loaded from cache. - @available(iOS 14.0, *) - @discardableResult - public func set(to listItem: CPListItem) -> DownloadTask? { - let placeholderImage = placeholder as? KFCrossPlatformImage ?? nil - return listItem.kf.setImage( - with: source, - placeholder: placeholderImage, - parsedOptions: options, - progressBlock: progressBlock, - completionHandler: resultHandler - ) - - } - - #endif - - #if canImport(AppKit) && !targetEnvironment(macCatalyst) - /// Builds the image task request and sets it to a button. - /// - Parameter button: The button which loads the task and should be set with the image. - /// - Returns: A task represents the image downloading, if initialized. - /// This value is `nil` if the image is being loaded from cache. - @discardableResult - public func set(to button: NSButton) -> DownloadTask? { - let placeholderImage = placeholder as? KFCrossPlatformImage ?? nil - return button.kf.setImage( - with: source, - placeholder: placeholderImage, - parsedOptions: options, - progressBlock: progressBlock, - completionHandler: resultHandler - ) - } - - /// Builds the image task request and sets it to the alternative image for a button. - /// - Parameter button: The button which loads the task and should be set with the image. - /// - Returns: A task represents the image downloading, if initialized. - /// This value is `nil` if the image is being loaded from cache. - @discardableResult - public func setAlternative(to button: NSButton) -> DownloadTask? { - let placeholderImage = placeholder as? KFCrossPlatformImage ?? nil - return button.kf.setAlternateImage( - with: source, - placeholder: placeholderImage, - parsedOptions: options, - progressBlock: progressBlock, - completionHandler: resultHandler - ) - } - #endif // end of canImport(AppKit) - #endif // end of !os(watchOS) - - #if canImport(WatchKit) - /// Builds the image task request and sets it to a `WKInterfaceImage` object. - /// - Parameter interfaceImage: The watch interface image which loads the task and should be set with the image. - /// - Returns: A task represents the image downloading, if initialized. - /// This value is `nil` if the image is being loaded from cache. - @discardableResult - public func set(to interfaceImage: WKInterfaceImage) -> DownloadTask? { - return interfaceImage.kf.setImage( - with: source, - placeholder: placeholder, - parsedOptions: options, - progressBlock: progressBlock, - completionHandler: resultHandler - ) - } - #endif // end of canImport(WatchKit) - - #if canImport(TVUIKit) - /// Builds the image task request and sets it to a TV monogram view. - /// - Parameter monogramView: The monogram view which loads the task and should be set with the image. - /// - Returns: A task represents the image downloading, if initialized. - /// This value is `nil` if the image is being loaded from cache. - @available(tvOS 12.0, *) - @discardableResult - public func set(to monogramView: TVMonogramView) -> DownloadTask? { - let placeholderImage = placeholder as? KFCrossPlatformImage ?? nil - return monogramView.kf.setImage( - with: source, - placeholder: placeholderImage, - parsedOptions: options, - progressBlock: progressBlock, - completionHandler: resultHandler - ) - } - #endif // end of canImport(TVUIKit) -} - -#if !os(watchOS) -extension KF.Builder { - #if os(iOS) || os(tvOS) - - /// Sets a placeholder which is used while retrieving the image. - /// - Parameter placeholder: A placeholder to show while retrieving the image from its source. - /// - Returns: A `KF.Builder` with changes applied. - public func placeholder(_ placeholder: Placeholder?) -> Self { - self.placeholder = placeholder - return self - } - #endif - - /// Sets a placeholder image which is used while retrieving the image. - /// - Parameter placeholder: An image to show while retrieving the image from its source. - /// - Returns: A `KF.Builder` with changes applied. - public func placeholder(_ image: KFCrossPlatformImage?) -> Self { - self.placeholder = image - return self - } -} -#endif - -extension KF.Builder { - - #if os(iOS) || os(tvOS) - /// Sets the transition for the image task. - /// - Parameter transition: The desired transition effect when setting the image to image view. - /// - Returns: A `KF.Builder` with changes applied. - /// - /// Kingfisher will use the `transition` to animate the image in if it is downloaded from web. - /// The transition will not happen when the - /// image is retrieved from either memory or disk cache by default. If you need to do the transition even when - /// the image being retrieved from cache, also call `forceRefresh()` on the returned `KF.Builder`. - public func transition(_ transition: ImageTransition) -> Self { - options.transition = transition - return self - } - - /// Sets a fade transition for the image task. - /// - Parameter duration: The duration of the fade transition. - /// - Returns: A `KF.Builder` with changes applied. - /// - /// Kingfisher will use the fade transition to animate the image in if it is downloaded from web. - /// The transition will not happen when the - /// image is retrieved from either memory or disk cache by default. If you need to do the transition even when - /// the image being retrieved from cache, also call `forceRefresh()` on the returned `KF.Builder`. - public func fade(duration: TimeInterval) -> Self { - options.transition = .fade(duration) - return self - } - #endif - - /// Sets whether keeping the existing image of image view while setting another image to it. - /// - Parameter enabled: Whether the existing image should be kept. - /// - Returns: A `KF.Builder` with changes applied. - /// - /// By setting this option, the placeholder image parameter of image view extension method - /// will be ignored and the current image will be kept while loading or downloading the new image. - /// - public func keepCurrentImageWhileLoading(_ enabled: Bool = true) -> Self { - options.keepCurrentImageWhileLoading = enabled - return self - } - - /// Sets whether only the first frame from an animated image file should be loaded as a single image. - /// - Parameter enabled: Whether the only the first frame should be loaded. - /// - Returns: A `KF.Builder` with changes applied. - /// - /// Loading an animated images may take too much memory. It will be useful when you want to display a - /// static preview of the first frame from an animated image. - /// - /// This option will be ignored if the target image is not animated image data. - /// - public func onlyLoadFirstFrame(_ enabled: Bool = true) -> Self { - options.onlyLoadFirstFrame = enabled - return self - } - - /// Enables progressive image loading with a specified `ImageProgressive` setting to process the - /// progressive JPEG data and display it in a progressive way. - /// - Parameter progressive: The progressive settings which is used while loading. - /// - Returns: A `KF.Builder` with changes applied. - public func progressiveJPEG(_ progressive: ImageProgressive? = .init()) -> Self { - options.progressiveJPEG = progressive - return self - } -} - -// MARK: - Deprecated -extension KF.Builder { - /// Starts the loading process of `self` immediately. - /// - /// By default, a `KFImage` will not load its source until the `onAppear` is called. This is a lazily loading - /// behavior and provides better performance. However, when you refresh the view, the lazy loading also causes a - /// flickering since the loading does not happen immediately. Call this method if you want to start the load at once - /// could help avoiding the flickering, with some performance trade-off. - /// - /// - Deprecated: This is not necessary anymore since `@StateObject` is used for holding the image data. - /// It does nothing now and please just remove it. - /// - /// - Returns: The `Self` value with changes applied. - @available(*, deprecated, message: "This is not necessary anymore since `@StateObject` is used. It does nothing now and please just remove it.") - public func loadImmediately(_ start: Bool = true) -> Self { - return self - } -} - -// MARK: - Redirect Handler -extension KF { - - /// Represents the detail information when a task redirect happens. It is wrapping necessary information for a - /// `ImageDownloadRedirectHandler`. See that protocol for more information. - public struct RedirectPayload { - - /// The related session data task when the redirect happens. It is - /// the current `SessionDataTask` which triggers this redirect. - public let task: SessionDataTask - - /// The response received during redirection. - public let response: HTTPURLResponse - - /// The request for redirection which can be modified. - public let newRequest: URLRequest - - /// A closure for being called with modified request. - public let completionHandler: (URLRequest?) -> Void - } -} diff --git a/Pods/Kingfisher/Sources/General/KFOptionsSetter.swift b/Pods/Kingfisher/Sources/General/KFOptionsSetter.swift deleted file mode 100644 index 9a07753..0000000 --- a/Pods/Kingfisher/Sources/General/KFOptionsSetter.swift +++ /dev/null @@ -1,706 +0,0 @@ -// -// KFOptionsSetter.swift -// Kingfisher -// -// Created by onevcat on 2020/12/22. -// -// Copyright (c) 2020 Wei Wang -// -// 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 -import CoreGraphics - -public protocol KFOptionSetter { - var options: KingfisherParsedOptionsInfo { get nonmutating set } - - var onFailureDelegate: Delegate { get } - var onSuccessDelegate: Delegate { get } - var onProgressDelegate: Delegate<(Int64, Int64), Void> { get } - - var delegateObserver: AnyObject { get } -} - -extension KF.Builder: KFOptionSetter { - public var delegateObserver: AnyObject { self } -} - -// MARK: - Life cycles -extension KFOptionSetter { - /// Sets the progress block to current builder. - /// - Parameter block: Called when the image downloading progress gets updated. If the response does not contain an - /// `expectedContentLength`, this block will not be called. If `block` is `nil`, the callback - /// will be reset. - /// - Returns: A `Self` value with changes applied. - public func onProgress(_ block: DownloadProgressBlock?) -> Self { - onProgressDelegate.delegate(on: delegateObserver) { (observer, result) in - block?(result.0, result.1) - } - return self - } - - /// Sets the the done block to current builder. - /// - Parameter block: Called when the image task successfully completes and the the image set is done. If `block` - /// is `nil`, the callback will be reset. - /// - Returns: A `KF.Builder` with changes applied. - public func onSuccess(_ block: ((RetrieveImageResult) -> Void)?) -> Self { - onSuccessDelegate.delegate(on: delegateObserver) { (observer, result) in - block?(result) - } - return self - } - - /// Sets the catch block to current builder. - /// - Parameter block: Called when an error happens during the image task. If `block` - /// is `nil`, the callback will be reset. - /// - Returns: A `KF.Builder` with changes applied. - public func onFailure(_ block: ((KingfisherError) -> Void)?) -> Self { - onFailureDelegate.delegate(on: delegateObserver) { (observer, error) in - block?(error) - } - return self - } -} - -// MARK: - Basic options settings. -extension KFOptionSetter { - /// Sets the target image cache for this task. - /// - Parameter cache: The target cache is about to be used for the task. - /// - Returns: A `Self` value with changes applied. - /// - /// Kingfisher will use the associated `ImageCache` object when handling related operations, - /// including trying to retrieve the cached images and store the downloaded image to it. - /// - public func targetCache(_ cache: ImageCache) -> Self { - options.targetCache = cache - return self - } - - /// Sets the target image cache to store the original downloaded image for this task. - /// - Parameter cache: The target cache is about to be used for storing the original downloaded image from the task. - /// - Returns: A `Self` value with changes applied. - /// - /// The `ImageCache` for storing and retrieving original images. If `originalCache` is - /// contained in the options, it will be preferred for storing and retrieving original images. - /// If there is no `.originalCache` in the options, `.targetCache` will be used to store original images. - /// - /// When using KingfisherManager to download and store an image, if `cacheOriginalImage` is - /// applied in the option, the original image will be stored to this `originalCache`. At the - /// same time, if a requested final image (with processor applied) cannot be found in `targetCache`, - /// Kingfisher will try to search the original image to check whether it is already there. If found, - /// it will be used and applied with the given processor. It is an optimization for not downloading - /// the same image for multiple times. - /// - public func originalCache(_ cache: ImageCache) -> Self { - options.originalCache = cache - return self - } - - /// Sets the downloader used to perform the image download task. - /// - Parameter downloader: The downloader which is about to be used for downloading. - /// - Returns: A `Self` value with changes applied. - /// - /// Kingfisher will use the set `ImageDownloader` object to download the requested images. - public func downloader(_ downloader: ImageDownloader) -> Self { - options.downloader = downloader - return self - } - - /// Sets the download priority for the image task. - /// - Parameter priority: The download priority of image download task. - /// - Returns: A `Self` value with changes applied. - /// - /// The `priority` value will be set as the priority of the image download task. The value for it should be - /// between 0.0~1.0. You can choose a value between `URLSessionTask.defaultPriority`, `URLSessionTask.lowPriority` - /// or `URLSessionTask.highPriority`. If this option not set, the default value (`URLSessionTask.defaultPriority`) - /// will be used. - public func downloadPriority(_ priority: Float) -> Self { - options.downloadPriority = priority - return self - } - - /// Sets whether Kingfisher should ignore the cache and try to start a download task for the image source. - /// - Parameter enabled: Enable the force refresh or not. - /// - Returns: A `Self` value with changes applied. - public func forceRefresh(_ enabled: Bool = true) -> Self { - options.forceRefresh = enabled - return self - } - - /// Sets whether Kingfisher should try to retrieve the image from memory cache first. If not found, it ignores the - /// disk cache and starts a download task for the image source. - /// - Parameter enabled: Enable the memory-only cache searching or not. - /// - Returns: A `Self` value with changes applied. - /// - /// This is useful when you want to display a changeable image behind the same url at the same app session, while - /// avoiding download it for multiple times. - public func fromMemoryCacheOrRefresh(_ enabled: Bool = true) -> Self { - options.fromMemoryCacheOrRefresh = enabled - return self - } - - /// Sets whether the image should only be cached in memory but not in disk. - /// - Parameter enabled: Whether the image should be only cache in memory or not. - /// - Returns: A `Self` value with changes applied. - public func cacheMemoryOnly(_ enabled: Bool = true) -> Self { - options.cacheMemoryOnly = enabled - return self - } - - /// Sets whether Kingfisher should wait for caching operation to be completed before calling the - /// `onSuccess` or `onFailure` block. - /// - Parameter enabled: Whether Kingfisher should wait for caching operation. - /// - Returns: A `Self` value with changes applied. - public func waitForCache(_ enabled: Bool = true) -> Self { - options.waitForCache = enabled - return self - } - - /// Sets whether Kingfisher should only try to retrieve the image from cache, but not from network. - /// - Parameter enabled: Whether Kingfisher should only try to retrieve the image from cache. - /// - Returns: A `Self` value with changes applied. - /// - /// If the image is not in cache, the image retrieving will fail with the - /// `KingfisherError.cacheError` with `.imageNotExisting` as its reason. - public func onlyFromCache(_ enabled: Bool = true) -> Self { - options.onlyFromCache = enabled - return self - } - - /// Sets whether the image should be decoded in a background thread before using. - /// - Parameter enabled: Whether the image should be decoded in a background thread before using. - /// - Returns: A `Self` value with changes applied. - /// - /// Setting to `true` will decode the downloaded image data and do a off-screen rendering to extract pixel - /// information in background. This can speed up display, but will cost more time and memory to prepare the image - /// for using. - public func backgroundDecode(_ enabled: Bool = true) -> Self { - options.backgroundDecode = enabled - return self - } - - /// Sets the callback queue which is used as the target queue of dispatch callbacks when retrieving images from - /// cache. If not set, Kingfisher will use main queue for callbacks. - /// - Parameter queue: The target queue which the cache retrieving callback will be invoked on. - /// - Returns: A `Self` value with changes applied. - /// - /// - Note: - /// This option does not affect the callbacks for UI related extension methods or `KFImage` result handlers. - /// You will always get the callbacks called from main queue. - public func callbackQueue(_ queue: CallbackQueue) -> Self { - options.callbackQueue = queue - return self - } - - /// Sets the scale factor value when converting retrieved data to an image. - /// - Parameter factor: The scale factor value. - /// - Returns: A `Self` value with changes applied. - /// - /// Specify the image scale, instead of your screen scale. You may need to set the correct scale when you dealing - /// with 2x or 3x retina images. Otherwise, Kingfisher will convert the data to image object at `scale` 1.0. - /// - public func scaleFactor(_ factor: CGFloat) -> Self { - options.scaleFactor = factor - return self - } - - /// Sets whether the original image should be cached even when the original image has been processed by any other - /// `ImageProcessor`s. - /// - Parameter enabled: Whether the original image should be cached. - /// - Returns: A `Self` value with changes applied. - /// - /// If set and an `ImageProcessor` is used, Kingfisher will try to cache both the final result and original - /// image. Kingfisher will have a chance to use the original image when another processor is applied to the same - /// resource, instead of downloading it again. You can use `.originalCache` to specify a cache or the original - /// images if necessary. - /// - /// The original image will be only cached to disk storage. - /// - public func cacheOriginalImage(_ enabled: Bool = true) -> Self { - options.cacheOriginalImage = enabled - return self - } - - /// Sets writing options for an original image on a first write - /// - Parameter writingOptions: Options to control the writing of data to a disk storage. - /// - Returns: A `Self` value with changes applied. - /// If set, options will be passed the store operation for a new files. - /// - /// This is useful if you want to implement file enctyption on first write - eg [.completeFileProtection] - /// - public func diskStoreWriteOptions(_ writingOptions: Data.WritingOptions) -> Self { - options.diskStoreWriteOptions = writingOptions - return self - } - - /// Sets whether the disk storage loading should happen in the same calling queue. - /// - Parameter enabled: Whether the disk storage loading should happen in the same calling queue. - /// - Returns: A `Self` value with changes applied. - /// - /// By default, disk storage file loading - /// happens in its own queue with an asynchronous dispatch behavior. Although it provides better non-blocking disk - /// loading performance, it also causes a flickering when you reload an image from disk, if the image view already - /// has an image set. - /// - /// Set this options will stop that flickering by keeping all loading in the same queue (typically the UI queue - /// if you are using Kingfisher's extension methods to set an image), with a tradeoff of loading performance. - /// - public func loadDiskFileSynchronously(_ enabled: Bool = true) -> Self { - options.loadDiskFileSynchronously = enabled - return self - } - - /// Sets a queue on which the image processing should happen. - /// - Parameter queue: The queue on which the image processing should happen. - /// - Returns: A `Self` value with changes applied. - /// - /// By default, Kingfisher uses a pre-defined serial - /// queue to process images. Use this option to change this behavior. For example, specify a `.mainCurrentOrAsync` - /// to let the image be processed in main queue to prevent a possible flickering (but with a possibility of - /// blocking the UI, especially if the processor needs a lot of time to run). - public func processingQueue(_ queue: CallbackQueue?) -> Self { - options.processingQueue = queue - return self - } - - /// Sets the alternative sources that will be used when loading of the original input `Source` fails. - /// - Parameter sources: The alternative sources will be used. - /// - Returns: A `Self` value with changes applied. - /// - /// Values of the `sources` array will be used to start a new image loading task if the previous task - /// fails due to an error. The image source loading process will stop as soon as a source is loaded successfully. - /// If all `sources` are used but the loading is still failing, an `imageSettingError` with - /// `alternativeSourcesExhausted` as its reason will be given out in the `catch` block. - /// - /// This is useful if you want to implement a fallback solution for setting image. - /// - /// User cancellation will not trigger the alternative source loading. - public func alternativeSources(_ sources: [Source]?) -> Self { - options.alternativeSources = sources - return self - } - - /// Sets a retry strategy that will be used when something gets wrong during the image retrieving. - /// - Parameter strategy: The provided strategy to define how the retrying should happen. - /// - Returns: A `Self` value with changes applied. - public func retry(_ strategy: RetryStrategy?) -> Self { - options.retryStrategy = strategy - return self - } - - /// Sets a retry strategy with a max retry count and retrying interval. - /// - Parameters: - /// - maxCount: The maximum count before the retry stops. - /// - interval: The time interval between each retry attempt. - /// - Returns: A `Self` value with changes applied. - /// - /// This defines the simplest retry strategy, which retry a failing request for several times, with some certain - /// interval between each time. For example, `.retry(maxCount: 3, interval: .second(3))` means attempt for at most - /// three times, and wait for 3 seconds if a previous retry attempt fails, then start a new attempt. - public func retry(maxCount: Int, interval: DelayRetryStrategy.Interval = .seconds(3)) -> Self { - let strategy = DelayRetryStrategy(maxRetryCount: maxCount, retryInterval: interval) - options.retryStrategy = strategy - return self - } - - /// Sets the `Source` should be loaded when user enables Low Data Mode and the original source fails with an - /// `NSURLErrorNetworkUnavailableReason.constrained` error. - /// - Parameter source: The `Source` will be loaded under low data mode. - /// - Returns: A `Self` value with changes applied. - /// - /// When this option is set, the - /// `allowsConstrainedNetworkAccess` property of the request for the original source will be set to `false` and the - /// `Source` in associated value will be used to retrieve the image for low data mode. Usually, you can provide a - /// low-resolution version of your image or a local image provider to display a placeholder. - /// - /// If not set or the `source` is `nil`, the device Low Data Mode will be ignored and the original source will - /// be loaded following the system default behavior, in a normal way. - public func lowDataModeSource(_ source: Source?) -> Self { - options.lowDataModeSource = source - return self - } - - /// Sets whether the image setting for an image view should happen with transition even when retrieved from cache. - /// - Parameter enabled: Enable the force transition or not. - /// - Returns: A `Self` with changes applied. - public func forceTransition(_ enabled: Bool = true) -> Self { - options.forceTransition = enabled - return self - } - - /// Sets the image that will be used if an image retrieving task fails. - /// - Parameter image: The image that will be used when something goes wrong. - /// - Returns: A `Self` with changes applied. - /// - /// If set and an image retrieving error occurred Kingfisher will set provided image (or empty) - /// in place of requested one. It's useful when you don't want to show placeholder - /// during loading time but wants to use some default image when requests will be failed. - /// - public func onFailureImage(_ image: KFCrossPlatformImage?) -> Self { - options.onFailureImage = .some(image) - return self - } -} - -// MARK: - Request Modifier -extension KFOptionSetter { - /// Sets an `ImageDownloadRequestModifier` to change the image download request before it being sent. - /// - Parameter modifier: The modifier will be used to change the request before it being sent. - /// - Returns: A `Self` value with changes applied. - /// - /// This is the last chance you can modify the image download request. You can modify the request for some - /// customizing purpose, such as adding auth token to the header, do basic HTTP auth or something like url mapping. - /// - public func requestModifier(_ modifier: AsyncImageDownloadRequestModifier) -> Self { - options.requestModifier = modifier - return self - } - - /// Sets a block to change the image download request before it being sent. - /// - Parameter modifyBlock: The modifying block will be called to change the request before it being sent. - /// - Returns: A `Self` value with changes applied. - /// - /// This is the last chance you can modify the image download request. You can modify the request for some - /// customizing purpose, such as adding auth token to the header, do basic HTTP auth or something like url mapping. - /// - public func requestModifier(_ modifyBlock: @escaping (inout URLRequest) -> Void) -> Self { - options.requestModifier = AnyModifier { r -> URLRequest? in - var request = r - modifyBlock(&request) - return request - } - return self - } -} - -// MARK: - Redirect Handler -extension KFOptionSetter { - /// The `ImageDownloadRedirectHandler` argument will be used to change the request before redirection. - /// This is the possibility you can modify the image download request during redirect. You can modify the request for - /// some customizing purpose, such as adding auth token to the header, do basic HTTP auth or something like url - /// mapping. - /// The original redirection request will be sent without any modification by default. - /// - Parameter handler: The handler will be used for redirection. - /// - Returns: A `Self` value with changes applied. - public func redirectHandler(_ handler: ImageDownloadRedirectHandler) -> Self { - options.redirectHandler = handler - return self - } - - /// The `block` will be used to change the request before redirection. - /// This is the possibility you can modify the image download request during redirect. You can modify the request for - /// some customizing purpose, such as adding auth token to the header, do basic HTTP auth or something like url - /// mapping. - /// The original redirection request will be sent without any modification by default. - /// - Parameter block: The block will be used for redirection. - /// - Returns: A `Self` value with changes applied. - public func redirectHandler(_ block: @escaping (KF.RedirectPayload) -> Void) -> Self { - let redirectHandler = AnyRedirectHandler { (task, response, request, handler) in - let payload = KF.RedirectPayload( - task: task, response: response, newRequest: request, completionHandler: handler - ) - block(payload) - } - options.redirectHandler = redirectHandler - return self - } -} - -// MARK: - Processor -extension KFOptionSetter { - - /// Sets an image processor for the image task. It replaces the current image processor settings. - /// - /// - Parameter processor: The processor you want to use to process the image after it is downloaded. - /// - Returns: A `Self` value with changes applied. - /// - /// - Note: - /// To append a processor to current ones instead of replacing them all, use `appendProcessor(_:)`. - public func setProcessor(_ processor: ImageProcessor) -> Self { - options.processor = processor - return self - } - - /// Sets an array of image processors for the image task. It replaces the current image processor settings. - /// - Parameter processors: An array of processors. The processors inside this array will be concatenated one by one - /// to form a processor pipeline. - /// - Returns: A `Self` value with changes applied. - /// - /// - Note: To append processors to current ones instead of replacing them all, concatenate them by `|>`, then use - /// `appendProcessor(_:)`. - public func setProcessors(_ processors: [ImageProcessor]) -> Self { - switch processors.count { - case 0: - options.processor = DefaultImageProcessor.default - case 1...: - options.processor = processors.dropFirst().reduce(processors[0]) { $0 |> $1 } - default: - assertionFailure("Never happen") - } - return self - } - - /// Appends a processor to the current set processors. - /// - Parameter processor: The processor which will be appended to current processor settings. - /// - Returns: A `Self` value with changes applied. - public func appendProcessor(_ processor: ImageProcessor) -> Self { - options.processor = options.processor |> processor - return self - } - - /// Appends a `RoundCornerImageProcessor` to current processors. - /// - Parameters: - /// - radius: The radius will be applied in processing. Specify a certain point value with `.point`, or a fraction - /// of the target image with `.widthFraction`. or `.heightFraction`. For example, given a square image - /// with width and height equals, `.widthFraction(0.5)` means use half of the length of size and makes - /// the final image a round one. - /// - targetSize: Target size of output image should be. If `nil`, the image will keep its original size after processing. - /// - corners: The target corners which will be applied rounding. - /// - backgroundColor: Background color of the output image. If `nil`, it will use a transparent background. - /// - Returns: A `Self` value with changes applied. - public func roundCorner( - radius: Radius, - targetSize: CGSize? = nil, - roundingCorners corners: RectCorner = .all, - backgroundColor: KFCrossPlatformColor? = nil - ) -> Self - { - let processor = RoundCornerImageProcessor( - radius: radius, - targetSize: targetSize, - roundingCorners: corners, - backgroundColor: backgroundColor - ) - return appendProcessor(processor) - } - - /// Appends a `BlurImageProcessor` to current processors. - /// - Parameter radius: Blur radius for the simulated Gaussian blur. - /// - Returns: A `Self` value with changes applied. - public func blur(radius: CGFloat) -> Self { - appendProcessor( - BlurImageProcessor(blurRadius: radius) - ) - } - - /// Appends a `OverlayImageProcessor` to current processors. - /// - Parameters: - /// - color: Overlay color will be used to overlay the input image. - /// - fraction: Fraction will be used when overlay the color to image. - /// - Returns: A `Self` value with changes applied. - public func overlay(color: KFCrossPlatformColor, fraction: CGFloat = 0.5) -> Self { - appendProcessor( - OverlayImageProcessor(overlay: color, fraction: fraction) - ) - } - - /// Appends a `TintImageProcessor` to current processors. - /// - Parameter color: Tint color will be used to tint the input image. - /// - Returns: A `Self` value with changes applied. - public func tint(color: KFCrossPlatformColor) -> Self { - appendProcessor( - TintImageProcessor(tint: color) - ) - } - - /// Appends a `BlackWhiteProcessor` to current processors. - /// - Returns: A `Self` value with changes applied. - public func blackWhite() -> Self { - appendProcessor( - BlackWhiteProcessor() - ) - } - - /// Appends a `CroppingImageProcessor` to current processors. - /// - Parameters: - /// - size: Target size of output image should be. - /// - anchor: Anchor point from which the output size should be calculate. The anchor point is consisted by two - /// values between 0.0 and 1.0. It indicates a related point in current image. - /// See `CroppingImageProcessor.init(size:anchor:)` for more. - /// - Returns: A `Self` value with changes applied. - public func cropping(size: CGSize, anchor: CGPoint = .init(x: 0.5, y: 0.5)) -> Self { - appendProcessor( - CroppingImageProcessor(size: size, anchor: anchor) - ) - } - - /// Appends a `DownsamplingImageProcessor` to current processors. - /// - /// Compared to `ResizingImageProcessor`, the `DownsamplingImageProcessor` does not render the original images and - /// then resize it. Instead, it downsamples the input data directly to a thumbnail image. So it is a more efficient - /// than `ResizingImageProcessor`. Prefer to use `DownsamplingImageProcessor` as possible - /// as you can than the `ResizingImageProcessor`. - /// - /// Only CG-based images are supported. Animated images (like GIF) is not supported. - /// - /// - Parameter size: Target size of output image should be. It should be smaller than the size of input image. - /// If it is larger, the result image will be the same size of input data without downsampling. - /// - Returns: A `Self` value with changes applied. - public func downsampling(size: CGSize) -> Self { - let processor = DownsamplingImageProcessor(size: size) - if options.processor == DefaultImageProcessor.default { - return setProcessor(processor) - } else { - return appendProcessor(processor) - } - } - - - /// Appends a `ResizingImageProcessor` to current processors. - /// - /// If you need to resize a data represented image to a smaller size, use `DownsamplingImageProcessor` - /// instead, which is more efficient and uses less memory. - /// - /// - Parameters: - /// - referenceSize: The reference size for resizing operation in point. - /// - mode: Target content mode of output image should be. Default is `.none`. - /// - Returns: A `Self` value with changes applied. - public func resizing(referenceSize: CGSize, mode: ContentMode = .none) -> Self { - appendProcessor( - ResizingImageProcessor(referenceSize: referenceSize, mode: mode) - ) - } -} - -// MARK: - Cache Serializer -extension KFOptionSetter { - - /// Uses a given `CacheSerializer` to convert some data to an image object for retrieving from disk cache or vice - /// versa for storing to disk cache. - /// - Parameter cacheSerializer: The `CacheSerializer` which will be used. - /// - Returns: A `Self` value with changes applied. - public func serialize(by cacheSerializer: CacheSerializer) -> Self { - options.cacheSerializer = cacheSerializer - return self - } - - /// Uses a given format to serializer the image data to disk. It converts the image object to the give data format. - /// - Parameters: - /// - format: The desired data encoding format when store the image on disk. - /// - jpegCompressionQuality: If the format is `.JPEG`, it specify the compression quality when converting the - /// image to a JPEG data. Otherwise, it is ignored. - /// - Returns: A `Self` value with changes applied. - public func serialize(as format: ImageFormat, jpegCompressionQuality: CGFloat? = nil) -> Self { - let cacheSerializer: FormatIndicatedCacheSerializer - switch format { - case .JPEG: - cacheSerializer = .jpeg(compressionQuality: jpegCompressionQuality ?? 1.0) - case .PNG: - cacheSerializer = .png - case .GIF: - cacheSerializer = .gif - case .unknown: - cacheSerializer = .png - } - options.cacheSerializer = cacheSerializer - return self - } -} - -// MARK: - Image Modifier -extension KFOptionSetter { - - /// Sets an `ImageModifier` to the image task. Use this to modify the fetched image object properties if needed. - /// - /// If the image was fetched directly from the downloader, the modifier will run directly after the - /// `ImageProcessor`. If the image is being fetched from a cache, the modifier will run after the `CacheSerializer`. - /// - Parameter modifier: The `ImageModifier` which will be used to modify the image object. - /// - Returns: A `Self` value with changes applied. - public func imageModifier(_ modifier: ImageModifier?) -> Self { - options.imageModifier = modifier - return self - } - - /// Sets a block to modify the image object. Use this to modify the fetched image object properties if needed. - /// - /// If the image was fetched directly from the downloader, the modifier block will run directly after the - /// `ImageProcessor`. If the image is being fetched from a cache, the modifier will run after the `CacheSerializer`. - /// - /// - Parameter block: The block which is used to modify the image object. - /// - Returns: A `Self` value with changes applied. - public func imageModifier(_ block: @escaping (inout KFCrossPlatformImage) throws -> Void) -> Self { - let modifier = AnyImageModifier { image -> KFCrossPlatformImage in - var image = image - try block(&image) - return image - } - options.imageModifier = modifier - return self - } -} - - -// MARK: - Cache Expiration -extension KFOptionSetter { - - /// Sets the expiration setting for memory cache of this image task. - /// - /// By default, the underlying `MemoryStorage.Backend` uses the - /// expiration in its config for all items. If set, the `MemoryStorage.Backend` will use this value to overwrite - /// the config setting for this caching item. - /// - /// - Parameter expiration: The expiration setting used in cache storage. - /// - Returns: A `Self` value with changes applied. - public func memoryCacheExpiration(_ expiration: StorageExpiration?) -> Self { - options.memoryCacheExpiration = expiration - return self - } - - /// Sets the expiration extending setting for memory cache. The item expiration time will be incremented by this - /// value after access. - /// - /// By default, the underlying `MemoryStorage.Backend` uses the initial cache expiration as extending - /// value: .cacheTime. - /// - /// To disable extending option at all, sets `.none` to it. - /// - /// - Parameter extending: The expiration extending setting used in cache storage. - /// - Returns: A `Self` value with changes applied. - public func memoryCacheAccessExtending(_ extending: ExpirationExtending) -> Self { - options.memoryCacheAccessExtendingExpiration = extending - return self - } - - /// Sets the expiration setting for disk cache of this image task. - /// - /// By default, the underlying `DiskStorage.Backend` uses the expiration in its config for all items. If set, - /// the `DiskStorage.Backend` will use this value to overwrite the config setting for this caching item. - /// - /// - Parameter expiration: The expiration setting used in cache storage. - /// - Returns: A `Self` value with changes applied. - public func diskCacheExpiration(_ expiration: StorageExpiration?) -> Self { - options.diskCacheExpiration = expiration - return self - } - - /// Sets the expiration extending setting for disk cache. The item expiration time will be incremented by this - /// value after access. - /// - /// By default, the underlying `DiskStorage.Backend` uses the initial cache expiration as extending - /// value: .cacheTime. - /// - /// To disable extending option at all, sets `.none` to it. - /// - /// - Parameter extending: The expiration extending setting used in cache storage. - /// - Returns: A `Self` value with changes applied. - public func diskCacheAccessExtending(_ extending: ExpirationExtending) -> Self { - options.diskCacheAccessExtendingExpiration = extending - return self - } -} diff --git a/Pods/Kingfisher/Sources/General/Kingfisher.swift b/Pods/Kingfisher/Sources/General/Kingfisher.swift deleted file mode 100644 index f875e2a..0000000 --- a/Pods/Kingfisher/Sources/General/Kingfisher.swift +++ /dev/null @@ -1,106 +0,0 @@ -// -// Kingfisher.swift -// Kingfisher -// -// Created by Wei Wang on 16/9/14. -// -// Copyright (c) 2019 Wei Wang -// -// 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 -import ImageIO - -#if os(macOS) -import AppKit -public typealias KFCrossPlatformImage = NSImage -public typealias KFCrossPlatformView = NSView -public typealias KFCrossPlatformColor = NSColor -public typealias KFCrossPlatformImageView = NSImageView -public typealias KFCrossPlatformButton = NSButton -#else -import UIKit -public typealias KFCrossPlatformImage = UIImage -public typealias KFCrossPlatformColor = UIColor -#if !os(watchOS) -public typealias KFCrossPlatformImageView = UIImageView -public typealias KFCrossPlatformView = UIView -public typealias KFCrossPlatformButton = UIButton -#if canImport(TVUIKit) -import TVUIKit -#endif -#if canImport(CarPlay) && !targetEnvironment(macCatalyst) -import CarPlay -#endif -#else -import WatchKit -#endif -#endif - -/// Wrapper for Kingfisher compatible types. This type provides an extension point for -/// convenience methods in Kingfisher. -public struct KingfisherWrapper { - public let base: Base - public init(_ base: Base) { - self.base = base - } -} - -/// Represents an object type that is compatible with Kingfisher. You can use `kf` property to get a -/// value in the namespace of Kingfisher. -public protocol KingfisherCompatible: AnyObject { } - -/// Represents a value type that is compatible with Kingfisher. You can use `kf` property to get a -/// value in the namespace of Kingfisher. -public protocol KingfisherCompatibleValue {} - -extension KingfisherCompatible { - /// Gets a namespace holder for Kingfisher compatible types. - public var kf: KingfisherWrapper { - get { return KingfisherWrapper(self) } - set { } - } -} - -extension KingfisherCompatibleValue { - /// Gets a namespace holder for Kingfisher compatible types. - public var kf: KingfisherWrapper { - get { return KingfisherWrapper(self) } - set { } - } -} - -extension KFCrossPlatformImage: KingfisherCompatible { } -#if !os(watchOS) -extension KFCrossPlatformImageView: KingfisherCompatible { } -extension KFCrossPlatformButton: KingfisherCompatible { } -extension NSTextAttachment: KingfisherCompatible { } -#else -extension WKInterfaceImage: KingfisherCompatible { } -#endif - -#if os(tvOS) && canImport(TVUIKit) -@available(tvOS 12.0, *) -extension TVMonogramView: KingfisherCompatible { } -#endif - -#if canImport(CarPlay) && !targetEnvironment(macCatalyst) -@available(iOS 14.0, *) -extension CPListItem: KingfisherCompatible { } -#endif diff --git a/Pods/Kingfisher/Sources/General/KingfisherError.swift b/Pods/Kingfisher/Sources/General/KingfisherError.swift deleted file mode 100644 index 622f633..0000000 --- a/Pods/Kingfisher/Sources/General/KingfisherError.swift +++ /dev/null @@ -1,469 +0,0 @@ -// -// KingfisherError.swift -// Kingfisher -// -// Created by onevcat on 2018/09/26. -// -// Copyright (c) 2019 Wei Wang -// -// 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 - -extension Never {} - -/// Represents all the errors which can happen in Kingfisher framework. -/// Kingfisher related methods always throw a `KingfisherError` or invoke the callback with `KingfisherError` -/// as its error type. To handle errors from Kingfisher, you switch over the error to get a reason catalog, -/// then switch over the reason to know error detail. -public enum KingfisherError: Error { - - // MARK: Error Reason Types - - /// Represents the error reason during networking request phase. - /// - /// - emptyRequest: The request is empty. Code 1001. - /// - invalidURL: The URL of request is invalid. Code 1002. - /// - taskCancelled: The downloading task is cancelled by user. Code 1003. - public enum RequestErrorReason { - - /// The request is empty. Code 1001. - case emptyRequest - - /// The URL of request is invalid. Code 1002. - /// - request: The request is tend to be sent but its URL is invalid. - case invalidURL(request: URLRequest) - - /// The downloading task is cancelled by user. Code 1003. - /// - task: The session data task which is cancelled. - /// - token: The cancel token which is used for cancelling the task. - case taskCancelled(task: SessionDataTask, token: SessionDataTask.CancelToken) - } - - /// Represents the error reason during networking response phase. - /// - /// - invalidURLResponse: The response is not a valid URL response. Code 2001. - /// - invalidHTTPStatusCode: The response contains an invalid HTTP status code. Code 2002. - /// - URLSessionError: An error happens in the system URL session. Code 2003. - /// - dataModifyingFailed: Data modifying fails on returning a valid data. Code 2004. - /// - noURLResponse: The task is done but no URL response found. Code 2005. - public enum ResponseErrorReason { - - /// The response is not a valid URL response. Code 2001. - /// - response: The received invalid URL response. - /// The response is expected to be an HTTP response, but it is not. - case invalidURLResponse(response: URLResponse) - - /// The response contains an invalid HTTP status code. Code 2002. - /// - Note: - /// By default, status code 200..<400 is recognized as valid. You can override - /// this behavior by conforming to the `ImageDownloaderDelegate`. - /// - response: The received response. - case invalidHTTPStatusCode(response: HTTPURLResponse) - - /// An error happens in the system URL session. Code 2003. - /// - error: The underlying URLSession error object. - case URLSessionError(error: Error) - - /// Data modifying fails on returning a valid data. Code 2004. - /// - task: The failed task. - case dataModifyingFailed(task: SessionDataTask) - - /// The task is done but no URL response found. Code 2005. - /// - task: The failed task. - case noURLResponse(task: SessionDataTask) - - /// The task is cancelled by `ImageDownloaderDelegate` due to the `.cancel` response disposition is - /// specified by the delegate method. Code 2006. - case cancelledByDelegate(response: URLResponse) - } - - /// Represents the error reason during Kingfisher caching system. - /// - /// - fileEnumeratorCreationFailed: Cannot create a file enumerator for a certain disk URL. Code 3001. - /// - invalidFileEnumeratorContent: Cannot get correct file contents from a file enumerator. Code 3002. - /// - invalidURLResource: The file at target URL exists, but its URL resource is unavailable. Code 3003. - /// - cannotLoadDataFromDisk: The file at target URL exists, but the data cannot be loaded from it. Code 3004. - /// - cannotCreateDirectory: Cannot create a folder at a given path. Code 3005. - /// - imageNotExisting: The requested image does not exist in cache. Code 3006. - /// - cannotConvertToData: Cannot convert an object to data for storing. Code 3007. - /// - cannotSerializeImage: Cannot serialize an image to data for storing. Code 3008. - /// - cannotCreateCacheFile: Cannot create the cache file at a certain fileURL under a key. Code 3009. - /// - cannotSetCacheFileAttribute: Cannot set file attributes to a cached file. Code 3010. - public enum CacheErrorReason { - - /// Cannot create a file enumerator for a certain disk URL. Code 3001. - /// - url: The target disk URL from which the file enumerator should be created. - case fileEnumeratorCreationFailed(url: URL) - - /// Cannot get correct file contents from a file enumerator. Code 3002. - /// - url: The target disk URL from which the content of a file enumerator should be got. - case invalidFileEnumeratorContent(url: URL) - - /// The file at target URL exists, but its URL resource is unavailable. Code 3003. - /// - error: The underlying error thrown by file manager. - /// - key: The key used to getting the resource from cache. - /// - url: The disk URL where the target cached file exists. - case invalidURLResource(error: Error, key: String, url: URL) - - /// The file at target URL exists, but the data cannot be loaded from it. Code 3004. - /// - url: The disk URL where the target cached file exists. - /// - error: The underlying error which describes why this error happens. - case cannotLoadDataFromDisk(url: URL, error: Error) - - /// Cannot create a folder at a given path. Code 3005. - /// - path: The disk path where the directory creating operation fails. - /// - error: The underlying error which describes why this error happens. - case cannotCreateDirectory(path: String, error: Error) - - /// The requested image does not exist in cache. Code 3006. - /// - key: Key of the requested image in cache. - case imageNotExisting(key: String) - - /// Cannot convert an object to data for storing. Code 3007. - /// - object: The object which needs be convert to data. - case cannotConvertToData(object: Any, error: Error) - - /// Cannot serialize an image to data for storing. Code 3008. - /// - image: The input image needs to be serialized to cache. - /// - original: The original image data, if exists. - /// - serializer: The `CacheSerializer` used for the image serializing. - case cannotSerializeImage(image: KFCrossPlatformImage?, original: Data?, serializer: CacheSerializer) - - /// Cannot create the cache file at a certain fileURL under a key. Code 3009. - /// - fileURL: The url where the cache file should be created. - /// - key: The cache key used for the cache. When caching a file through `KingfisherManager` and Kingfisher's - /// extension method, it is the resolved cache key based on your input `Source` and the image processors. - /// - data: The data to be cached. - /// - error: The underlying error originally thrown by Foundation when writing the `data` to the disk file at - /// `fileURL`. - case cannotCreateCacheFile(fileURL: URL, key: String, data: Data, error: Error) - - /// Cannot set file attributes to a cached file. Code 3010. - /// - filePath: The path of target cache file. - /// - attributes: The file attribute to be set to the target file. - /// - error: The underlying error originally thrown by Foundation when setting the `attributes` to the disk - /// file at `filePath`. - case cannotSetCacheFileAttribute(filePath: String, attributes: [FileAttributeKey : Any], error: Error) - - /// The disk storage of cache is not ready. Code 3011. - /// - /// This is usually due to extremely lack of space on disk storage, and - /// Kingfisher failed even when creating the cache folder. The disk storage will be in unusable state. Normally, - /// ask user to free some spaces and restart the app to make the disk storage work again. - /// - cacheURL: The intended URL which should be the storage folder. - case diskStorageIsNotReady(cacheURL: URL) - } - - - /// Represents the error reason during image processing phase. - /// - /// - processingFailed: Image processing fails. There is no valid output image from the processor. Code 4001. - public enum ProcessorErrorReason { - /// Image processing fails. There is no valid output image from the processor. Code 4001. - /// - processor: The `ImageProcessor` used to process the image or its data in `item`. - /// - item: The image or its data content. - case processingFailed(processor: ImageProcessor, item: ImageProcessItem) - } - - /// Represents the error reason during image setting in a view related class. - /// - /// - emptySource: The input resource is empty or `nil`. Code 5001. - /// - notCurrentSourceTask: The source task is finished, but it is not the one expected now. Code 5002. - /// - dataProviderError: An error happens during getting data from an `ImageDataProvider`. Code 5003. - public enum ImageSettingErrorReason { - - /// The input resource is empty or `nil`. Code 5001. - case emptySource - - /// The resource task is finished, but it is not the one expected now. This usually happens when you set another - /// resource on the view without cancelling the current on-going one. The previous setting task will fail with - /// this `.notCurrentSourceTask` error when a result got, regardless of it being successful or not for that task. - /// The result of this original task is contained in the associated value. - /// Code 5002. - /// - result: The `RetrieveImageResult` if the source task is finished without problem. `nil` if an error - /// happens. - /// - error: The `Error` if an issue happens during image setting task. `nil` if the task finishes without - /// problem. - /// - source: The original source value of the task. - case notCurrentSourceTask(result: RetrieveImageResult?, error: Error?, source: Source) - - /// An error happens during getting data from an `ImageDataProvider`. Code 5003. - case dataProviderError(provider: ImageDataProvider, error: Error) - - /// No more alternative `Source` can be used in current loading process. It means that the - /// `.alternativeSources` are used and Kingfisher tried to recovery from the original error, but still - /// fails for all the given alternative sources. The associated value holds all the errors encountered during - /// the load process, including the original source loading error and all the alternative sources errors. - /// Code 5004. - case alternativeSourcesExhausted([PropagationError]) - } - - // MARK: Member Cases - - /// Represents the error reason during networking request phase. - case requestError(reason: RequestErrorReason) - /// Represents the error reason during networking response phase. - case responseError(reason: ResponseErrorReason) - /// Represents the error reason during Kingfisher caching system. - case cacheError(reason: CacheErrorReason) - /// Represents the error reason during image processing phase. - case processorError(reason: ProcessorErrorReason) - /// Represents the error reason during image setting in a view related class. - case imageSettingError(reason: ImageSettingErrorReason) - - // MARK: Helper Properties & Methods - - /// Helper property to check whether this error is a `RequestErrorReason.taskCancelled` or not. - public var isTaskCancelled: Bool { - if case .requestError(reason: .taskCancelled) = self { - return true - } - return false - } - - /// Helper method to check whether this error is a `ResponseErrorReason.invalidHTTPStatusCode` and the - /// associated value is a given status code. - /// - /// - Parameter code: The given status code. - /// - Returns: If `self` is a `ResponseErrorReason.invalidHTTPStatusCode` error - /// and its status code equals to `code`, `true` is returned. Otherwise, `false`. - public func isInvalidResponseStatusCode(_ code: Int) -> Bool { - if case .responseError(reason: .invalidHTTPStatusCode(let response)) = self { - return response.statusCode == code - } - return false - } - - public var isInvalidResponseStatusCode: Bool { - if case .responseError(reason: .invalidHTTPStatusCode) = self { - return true - } - return false - } - - /// Helper property to check whether this error is a `ImageSettingErrorReason.notCurrentSourceTask` or not. - /// When a new image setting task starts while the old one is still running, the new task identifier will be - /// set and the old one is overwritten. A `.notCurrentSourceTask` error will be raised when the old task finishes - /// to let you know the setting process finishes with a certain result, but the image view or button is not set. - public var isNotCurrentTask: Bool { - if case .imageSettingError(reason: .notCurrentSourceTask(_, _, _)) = self { - return true - } - return false - } - - var isLowDataModeConstrained: Bool { - if #available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *), - case .responseError(reason: .URLSessionError(let sessionError)) = self, - let urlError = sessionError as? URLError, - urlError.networkUnavailableReason == .constrained - { - return true - } - return false - } - -} - -// MARK: - LocalizedError Conforming -extension KingfisherError: LocalizedError { - - /// A localized message describing what error occurred. - public var errorDescription: String? { - switch self { - case .requestError(let reason): return reason.errorDescription - case .responseError(let reason): return reason.errorDescription - case .cacheError(let reason): return reason.errorDescription - case .processorError(let reason): return reason.errorDescription - case .imageSettingError(let reason): return reason.errorDescription - } - } -} - - -// MARK: - CustomNSError Conforming -extension KingfisherError: CustomNSError { - - /// The error domain of `KingfisherError`. All errors from Kingfisher is under this domain. - public static let domain = "com.onevcat.Kingfisher.Error" - - /// The error code within the given domain. - public var errorCode: Int { - switch self { - case .requestError(let reason): return reason.errorCode - case .responseError(let reason): return reason.errorCode - case .cacheError(let reason): return reason.errorCode - case .processorError(let reason): return reason.errorCode - case .imageSettingError(let reason): return reason.errorCode - } - } -} - -extension KingfisherError.RequestErrorReason { - var errorDescription: String? { - switch self { - case .emptyRequest: - return "The request is empty or `nil`." - case .invalidURL(let request): - return "The request contains an invalid or empty URL. Request: \(request)." - case .taskCancelled(let task, let token): - return "The session task was cancelled. Task: \(task), cancel token: \(token)." - } - } - - var errorCode: Int { - switch self { - case .emptyRequest: return 1001 - case .invalidURL: return 1002 - case .taskCancelled: return 1003 - } - } -} - -extension KingfisherError.ResponseErrorReason { - var errorDescription: String? { - switch self { - case .invalidURLResponse(let response): - return "The URL response is invalid: \(response)" - case .invalidHTTPStatusCode(let response): - return "The HTTP status code in response is invalid. Code: \(response.statusCode), response: \(response)." - case .URLSessionError(let error): - return "A URL session error happened. The underlying error: \(error)" - case .dataModifyingFailed(let task): - return "The data modifying delegate returned `nil` for the downloaded data. Task: \(task)." - case .noURLResponse(let task): - return "No URL response received. Task: \(task)." - case .cancelledByDelegate(let response): - return "The downloading task is cancelled by the downloader delegate. Response: \(response)." - - } - } - - var errorCode: Int { - switch self { - case .invalidURLResponse: return 2001 - case .invalidHTTPStatusCode: return 2002 - case .URLSessionError: return 2003 - case .dataModifyingFailed: return 2004 - case .noURLResponse: return 2005 - case .cancelledByDelegate: return 2006 - } - } -} - -extension KingfisherError.CacheErrorReason { - var errorDescription: String? { - switch self { - case .fileEnumeratorCreationFailed(let url): - return "Cannot create file enumerator for URL: \(url)." - case .invalidFileEnumeratorContent(let url): - return "Cannot get contents from the file enumerator at URL: \(url)." - case .invalidURLResource(let error, let key, let url): - return "Cannot get URL resource values or data for the given URL: \(url). " + - "Cache key: \(key). Underlying error: \(error)" - case .cannotLoadDataFromDisk(let url, let error): - return "Cannot load data from disk at URL: \(url). Underlying error: \(error)" - case .cannotCreateDirectory(let path, let error): - return "Cannot create directory at given path: Path: \(path). Underlying error: \(error)" - case .imageNotExisting(let key): - return "The image is not in cache, but you requires it should only be " + - "from cache by enabling the `.onlyFromCache` option. Key: \(key)." - case .cannotConvertToData(let object, let error): - return "Cannot convert the input object to a `Data` object when storing it to disk cache. " + - "Object: \(object). Underlying error: \(error)" - case .cannotSerializeImage(let image, let originalData, let serializer): - return "Cannot serialize an image due to the cache serializer returning `nil`. " + - "Image: \(String(describing:image)), original data: \(String(describing: originalData)), " + - "serializer: \(serializer)." - case .cannotCreateCacheFile(let fileURL, let key, let data, let error): - return "Cannot create cache file at url: \(fileURL), key: \(key), data length: \(data.count). " + - "Underlying foundation error: \(error)." - case .cannotSetCacheFileAttribute(let filePath, let attributes, let error): - return "Cannot set file attribute for the cache file at path: \(filePath), attributes: \(attributes)." + - "Underlying foundation error: \(error)." - case .diskStorageIsNotReady(let cacheURL): - return "The disk storage is not ready to use yet at URL: '\(cacheURL)'. " + - "This is usually caused by extremely lack of disk space. Ask users to free up some space and restart the app." - } - } - - var errorCode: Int { - switch self { - case .fileEnumeratorCreationFailed: return 3001 - case .invalidFileEnumeratorContent: return 3002 - case .invalidURLResource: return 3003 - case .cannotLoadDataFromDisk: return 3004 - case .cannotCreateDirectory: return 3005 - case .imageNotExisting: return 3006 - case .cannotConvertToData: return 3007 - case .cannotSerializeImage: return 3008 - case .cannotCreateCacheFile: return 3009 - case .cannotSetCacheFileAttribute: return 3010 - case .diskStorageIsNotReady: return 3011 - } - } -} - -extension KingfisherError.ProcessorErrorReason { - var errorDescription: String? { - switch self { - case .processingFailed(let processor, let item): - return "Processing image failed. Processor: \(processor). Processing item: \(item)." - } - } - - var errorCode: Int { - switch self { - case .processingFailed: return 4001 - } - } -} - -extension KingfisherError.ImageSettingErrorReason { - var errorDescription: String? { - switch self { - case .emptySource: - return "The input resource is empty." - case .notCurrentSourceTask(let result, let error, let resource): - if let result = result { - return "Retrieving resource succeeded, but this source is " + - "not the one currently expected. Result: \(result). Resource: \(resource)." - } else if let error = error { - return "Retrieving resource failed, and this resource is " + - "not the one currently expected. Error: \(error). Resource: \(resource)." - } else { - return nil - } - case .dataProviderError(let provider, let error): - return "Image data provider fails to provide data. Provider: \(provider), error: \(error)" - case .alternativeSourcesExhausted(let errors): - return "Image setting from alternaive sources failed: \(errors)" - } - } - - var errorCode: Int { - switch self { - case .emptySource: return 5001 - case .notCurrentSourceTask: return 5002 - case .dataProviderError: return 5003 - case .alternativeSourcesExhausted: return 5004 - } - } -} diff --git a/Pods/Kingfisher/Sources/General/KingfisherManager.swift b/Pods/Kingfisher/Sources/General/KingfisherManager.swift deleted file mode 100644 index 45e1668..0000000 --- a/Pods/Kingfisher/Sources/General/KingfisherManager.swift +++ /dev/null @@ -1,802 +0,0 @@ -// -// KingfisherManager.swift -// Kingfisher -// -// Created by Wei Wang on 15/4/6. -// -// Copyright (c) 2019 Wei Wang -// -// 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 - -/// The downloading progress block type. -/// The parameter value is the `receivedSize` of current response. -/// The second parameter is the total expected data length from response's "Content-Length" header. -/// If the expected length is not available, this block will not be called. -public typealias DownloadProgressBlock = ((_ receivedSize: Int64, _ totalSize: Int64) -> Void) - -/// Represents the result of a Kingfisher retrieving image task. -public struct RetrieveImageResult { - /// Gets the image object of this result. - public let image: KFCrossPlatformImage - - /// Gets the cache source of the image. It indicates from which layer of cache this image is retrieved. - /// If the image is just downloaded from network, `.none` will be returned. - public let cacheType: CacheType - - /// The `Source` which this result is related to. This indicated where the `image` of `self` is referring. - public let source: Source - - /// The original `Source` from which the retrieve task begins. It can be different from the `source` property. - /// When an alternative source loading happened, the `source` will be the replacing loading target, while the - /// `originalSource` will be kept as the initial `source` which issued the image loading process. - public let originalSource: Source - - /// Gets the data behind the result. - /// - /// If this result is from a network downloading (when `cacheType == .none`), calling this returns the downloaded - /// data. If the reuslt is from cache, it serializes the image with the given cache serializer in the loading option - /// and returns the result. - /// - /// - Note: - /// This can be a time-consuming action, so if you need to use the data for multiple times, it is suggested to hold - /// it and prevent keeping calling this too frequently. - public let data: () -> Data? -} - -/// A struct that stores some related information of an `KingfisherError`. It provides some context information for -/// a pure error so you can identify the error easier. -public struct PropagationError { - - /// The `Source` to which current `error` is bound. - public let source: Source - - /// The actual error happens in framework. - public let error: KingfisherError -} - - -/// The downloading task updated block type. The parameter `newTask` is the updated new task of image setting process. -/// It is a `nil` if the image loading does not require an image downloading process. If an image downloading is issued, -/// this value will contain the actual `DownloadTask` for you to keep and cancel it later if you need. -public typealias DownloadTaskUpdatedBlock = ((_ newTask: DownloadTask?) -> Void) - -/// Main manager class of Kingfisher. It connects Kingfisher downloader and cache, -/// to provide a set of convenience methods to use Kingfisher for tasks. -/// You can use this class to retrieve an image via a specified URL from web or cache. -public class KingfisherManager { - - /// Represents a shared manager used across Kingfisher. - /// Use this instance for getting or storing images with Kingfisher. - public static let shared = KingfisherManager() - - // Mark: Public Properties - /// The `ImageCache` used by this manager. It is `ImageCache.default` by default. - /// If a cache is specified in `KingfisherManager.defaultOptions`, the value in `defaultOptions` will be - /// used instead. - public var cache: ImageCache - - /// The `ImageDownloader` used by this manager. It is `ImageDownloader.default` by default. - /// If a downloader is specified in `KingfisherManager.defaultOptions`, the value in `defaultOptions` will be - /// used instead. - public var downloader: ImageDownloader - - /// Default options used by the manager. This option will be used in - /// Kingfisher manager related methods, as well as all view extension methods. - /// You can also passing other options for each image task by sending an `options` parameter - /// to Kingfisher's APIs. The per image options will overwrite the default ones, - /// if the option exists in both. - public var defaultOptions = KingfisherOptionsInfo.empty - - // Use `defaultOptions` to overwrite the `downloader` and `cache`. - private var currentDefaultOptions: KingfisherOptionsInfo { - return [.downloader(downloader), .targetCache(cache)] + defaultOptions - } - - private let processingQueue: CallbackQueue - - private convenience init() { - self.init(downloader: .default, cache: .default) - } - - /// Creates an image setting manager with specified downloader and cache. - /// - /// - Parameters: - /// - downloader: The image downloader used to download images. - /// - cache: The image cache which stores memory and disk images. - public init(downloader: ImageDownloader, cache: ImageCache) { - self.downloader = downloader - self.cache = cache - - let processQueueName = "com.onevcat.Kingfisher.KingfisherManager.processQueue.\(UUID().uuidString)" - processingQueue = .dispatch(DispatchQueue(label: processQueueName)) - } - - // MARK: - Getting Images - - /// Gets an image from a given resource. - /// - Parameters: - /// - resource: The `Resource` object defines data information like key or URL. - /// - options: Options to use when creating the image. - /// - progressBlock: Called when the image downloading progress gets updated. If the response does not contain an - /// `expectedContentLength`, this block will not be called. `progressBlock` is always called in - /// main queue. - /// - downloadTaskUpdated: Called when a new image downloading task is created for current image retrieving. This - /// usually happens when an alternative source is used to replace the original (failed) - /// task. You can update your reference of `DownloadTask` if you want to manually `cancel` - /// the new task. - /// - completionHandler: Called when the image retrieved and set finished. This completion handler will be invoked - /// from the `options.callbackQueue`. If not specified, the main queue will be used. - /// - Returns: A task represents the image downloading. If there is a download task starts for `.network` resource, - /// the started `DownloadTask` is returned. Otherwise, `nil` is returned. - /// - /// - Note: - /// This method will first check whether the requested `resource` is already in cache or not. If cached, - /// it returns `nil` and invoke the `completionHandler` after the cached image retrieved. Otherwise, it - /// will download the `resource`, store it in cache, then call `completionHandler`. - @discardableResult - public func retrieveImage( - with resource: Resource, - options: KingfisherOptionsInfo? = nil, - progressBlock: DownloadProgressBlock? = nil, - downloadTaskUpdated: DownloadTaskUpdatedBlock? = nil, - completionHandler: ((Result) -> Void)?) -> DownloadTask? - { - return retrieveImage( - with: resource.convertToSource(), - options: options, - progressBlock: progressBlock, - downloadTaskUpdated: downloadTaskUpdated, - completionHandler: completionHandler - ) - } - - /// Gets an image from a given resource. - /// - /// - Parameters: - /// - source: The `Source` object defines data information from network or a data provider. - /// - options: Options to use when creating the image. - /// - progressBlock: Called when the image downloading progress gets updated. If the response does not contain an - /// `expectedContentLength`, this block will not be called. `progressBlock` is always called in - /// main queue. - /// - downloadTaskUpdated: Called when a new image downloading task is created for current image retrieving. This - /// usually happens when an alternative source is used to replace the original (failed) - /// task. You can update your reference of `DownloadTask` if you want to manually `cancel` - /// the new task. - /// - completionHandler: Called when the image retrieved and set finished. This completion handler will be invoked - /// from the `options.callbackQueue`. If not specified, the main queue will be used. - /// - Returns: A task represents the image downloading. If there is a download task starts for `.network` resource, - /// the started `DownloadTask` is returned. Otherwise, `nil` is returned. - /// - /// - Note: - /// This method will first check whether the requested `source` is already in cache or not. If cached, - /// it returns `nil` and invoke the `completionHandler` after the cached image retrieved. Otherwise, it - /// will try to load the `source`, store it in cache, then call `completionHandler`. - /// - @discardableResult - public func retrieveImage( - with source: Source, - options: KingfisherOptionsInfo? = nil, - progressBlock: DownloadProgressBlock? = nil, - downloadTaskUpdated: DownloadTaskUpdatedBlock? = nil, - completionHandler: ((Result) -> Void)?) -> DownloadTask? - { - let options = currentDefaultOptions + (options ?? .empty) - let info = KingfisherParsedOptionsInfo(options) - return retrieveImage( - with: source, - options: info, - progressBlock: progressBlock, - downloadTaskUpdated: downloadTaskUpdated, - completionHandler: completionHandler) - } - - func retrieveImage( - with source: Source, - options: KingfisherParsedOptionsInfo, - progressBlock: DownloadProgressBlock? = nil, - downloadTaskUpdated: DownloadTaskUpdatedBlock? = nil, - completionHandler: ((Result) -> Void)?) -> DownloadTask? - { - var info = options - if let block = progressBlock { - info.onDataReceived = (info.onDataReceived ?? []) + [ImageLoadingProgressSideEffect(block)] - } - return retrieveImage( - with: source, - options: info, - downloadTaskUpdated: downloadTaskUpdated, - progressiveImageSetter: nil, - completionHandler: completionHandler) - } - - func retrieveImage( - with source: Source, - options: KingfisherParsedOptionsInfo, - downloadTaskUpdated: DownloadTaskUpdatedBlock? = nil, - progressiveImageSetter: ((KFCrossPlatformImage?) -> Void)? = nil, - referenceTaskIdentifierChecker: (() -> Bool)? = nil, - completionHandler: ((Result) -> Void)?) -> DownloadTask? - { - var options = options - if let provider = ImageProgressiveProvider(options, refresh: { image in - guard let setter = progressiveImageSetter else { - return - } - guard let strategy = options.progressiveJPEG?.onImageUpdated(image) else { - setter(image) - return - } - switch strategy { - case .default: setter(image) - case .keepCurrent: break - case .replace(let newImage): setter(newImage) - } - }) { - options.onDataReceived = (options.onDataReceived ?? []) + [provider] - } - if let checker = referenceTaskIdentifierChecker { - options.onDataReceived?.forEach { - $0.onShouldApply = checker - } - } - - let retrievingContext = RetrievingContext(options: options, originalSource: source) - var retryContext: RetryContext? - - func startNewRetrieveTask( - with source: Source, - downloadTaskUpdated: DownloadTaskUpdatedBlock? - ) { - let newTask = self.retrieveImage(with: source, context: retrievingContext) { result in - handler(currentSource: source, result: result) - } - downloadTaskUpdated?(newTask) - } - - func failCurrentSource(_ source: Source, with error: KingfisherError) { - // Skip alternative sources if the user cancelled it. - guard !error.isTaskCancelled else { - completionHandler?(.failure(error)) - return - } - // When low data mode constrained error, retry with the low data mode source instead of use alternative on fly. - guard !error.isLowDataModeConstrained else { - if let source = retrievingContext.options.lowDataModeSource { - retrievingContext.options.lowDataModeSource = nil - startNewRetrieveTask(with: source, downloadTaskUpdated: downloadTaskUpdated) - } else { - // This should not happen. - completionHandler?(.failure(error)) - } - return - } - if let nextSource = retrievingContext.popAlternativeSource() { - retrievingContext.appendError(error, to: source) - startNewRetrieveTask(with: nextSource, downloadTaskUpdated: downloadTaskUpdated) - } else { - // No other alternative source. Finish with error. - if retrievingContext.propagationErrors.isEmpty { - completionHandler?(.failure(error)) - } else { - retrievingContext.appendError(error, to: source) - let finalError = KingfisherError.imageSettingError( - reason: .alternativeSourcesExhausted(retrievingContext.propagationErrors) - ) - completionHandler?(.failure(finalError)) - } - } - } - - func handler(currentSource: Source, result: (Result)) -> Void { - switch result { - case .success: - completionHandler?(result) - case .failure(let error): - if let retryStrategy = options.retryStrategy { - let context = retryContext?.increaseRetryCount() ?? RetryContext(source: source, error: error) - retryContext = context - - retryStrategy.retry(context: context) { decision in - switch decision { - case .retry(let userInfo): - retryContext?.userInfo = userInfo - startNewRetrieveTask(with: source, downloadTaskUpdated: downloadTaskUpdated) - case .stop: - failCurrentSource(currentSource, with: error) - } - } - } else { - failCurrentSource(currentSource, with: error) - } - } - } - - return retrieveImage( - with: source, - context: retrievingContext) - { - result in - handler(currentSource: source, result: result) - } - - } - - private func retrieveImage( - with source: Source, - context: RetrievingContext, - completionHandler: ((Result) -> Void)?) -> DownloadTask? - { - let options = context.options - if options.forceRefresh { - return loadAndCacheImage( - source: source, - context: context, - completionHandler: completionHandler)?.value - - } else { - let loadedFromCache = retrieveImageFromCache( - source: source, - context: context, - completionHandler: completionHandler) - - if loadedFromCache { - return nil - } - - if options.onlyFromCache { - let error = KingfisherError.cacheError(reason: .imageNotExisting(key: source.cacheKey)) - completionHandler?(.failure(error)) - return nil - } - - return loadAndCacheImage( - source: source, - context: context, - completionHandler: completionHandler)?.value - } - } - - func provideImage( - provider: ImageDataProvider, - options: KingfisherParsedOptionsInfo, - completionHandler: ((Result) -> Void)?) - { - guard let completionHandler = completionHandler else { return } - provider.data { result in - switch result { - case .success(let data): - (options.processingQueue ?? self.processingQueue).execute { - let processor = options.processor - let processingItem = ImageProcessItem.data(data) - guard let image = processor.process(item: processingItem, options: options) else { - options.callbackQueue.execute { - let error = KingfisherError.processorError( - reason: .processingFailed(processor: processor, item: processingItem)) - completionHandler(.failure(error)) - } - return - } - - options.callbackQueue.execute { - let result = ImageLoadingResult(image: image, url: nil, originalData: data) - completionHandler(.success(result)) - } - } - case .failure(let error): - options.callbackQueue.execute { - let error = KingfisherError.imageSettingError( - reason: .dataProviderError(provider: provider, error: error)) - completionHandler(.failure(error)) - } - - } - } - } - - private func cacheImage( - source: Source, - options: KingfisherParsedOptionsInfo, - context: RetrievingContext, - result: Result, - completionHandler: ((Result) -> Void)? - ) - { - switch result { - case .success(let value): - let needToCacheOriginalImage = options.cacheOriginalImage && - options.processor != DefaultImageProcessor.default - let coordinator = CacheCallbackCoordinator( - shouldWaitForCache: options.waitForCache, shouldCacheOriginal: needToCacheOriginalImage) - let result = RetrieveImageResult( - image: options.imageModifier?.modify(value.image) ?? value.image, - cacheType: .none, - source: source, - originalSource: context.originalSource, - data: { value.originalData } - ) - // Add image to cache. - let targetCache = options.targetCache ?? self.cache - targetCache.store( - value.image, - original: value.originalData, - forKey: source.cacheKey, - options: options, - toDisk: !options.cacheMemoryOnly) - { - _ in - coordinator.apply(.cachingImage) { - completionHandler?(.success(result)) - } - } - - // Add original image to cache if necessary. - - if needToCacheOriginalImage { - let originalCache = options.originalCache ?? targetCache - originalCache.storeToDisk( - value.originalData, - forKey: source.cacheKey, - processorIdentifier: DefaultImageProcessor.default.identifier, - expiration: options.diskCacheExpiration) - { - _ in - coordinator.apply(.cachingOriginalImage) { - completionHandler?(.success(result)) - } - } - } - - coordinator.apply(.cacheInitiated) { - completionHandler?(.success(result)) - } - - case .failure(let error): - completionHandler?(.failure(error)) - } - } - - @discardableResult - func loadAndCacheImage( - source: Source, - context: RetrievingContext, - completionHandler: ((Result) -> Void)?) -> DownloadTask.WrappedTask? - { - let options = context.options - func _cacheImage(_ result: Result) { - cacheImage( - source: source, - options: options, - context: context, - result: result, - completionHandler: completionHandler - ) - } - - switch source { - case .network(let resource): - let downloader = options.downloader ?? self.downloader - let task = downloader.downloadImage( - with: resource.downloadURL, options: options, completionHandler: _cacheImage - ) - - - // The code below is neat, but it fails the Swift 5.2 compiler with a runtime crash when - // `BUILD_LIBRARY_FOR_DISTRIBUTION` is turned on. I believe it is a bug in the compiler. - // Let's fallback to a traditional style before it can be fixed in Swift. - // - // https://github.com/onevcat/Kingfisher/issues/1436 - // - // return task.map(DownloadTask.WrappedTask.download) - - if let task = task { - return .download(task) - } else { - return nil - } - - case .provider(let provider): - provideImage(provider: provider, options: options, completionHandler: _cacheImage) - return .dataProviding - } - } - - /// Retrieves image from memory or disk cache. - /// - /// - Parameters: - /// - source: The target source from which to get image. - /// - key: The key to use when caching the image. - /// - url: Image request URL. This is not used when retrieving image from cache. It is just used for - /// `RetrieveImageResult` callback compatibility. - /// - options: Options on how to get the image from image cache. - /// - completionHandler: Called when the image retrieving finishes, either with succeeded - /// `RetrieveImageResult` or an error. - /// - Returns: `true` if the requested image or the original image before being processed is existing in cache. - /// Otherwise, this method returns `false`. - /// - /// - Note: - /// The image retrieving could happen in either memory cache or disk cache. The `.processor` option in - /// `options` will be considered when searching in the cache. If no processed image is found, Kingfisher - /// will try to check whether an original version of that image is existing or not. If there is already an - /// original, Kingfisher retrieves it from cache and processes it. Then, the processed image will be store - /// back to cache for later use. - func retrieveImageFromCache( - source: Source, - context: RetrievingContext, - completionHandler: ((Result) -> Void)?) -> Bool - { - let options = context.options - // 1. Check whether the image was already in target cache. If so, just get it. - let targetCache = options.targetCache ?? cache - let key = source.cacheKey - let targetImageCached = targetCache.imageCachedType( - forKey: key, processorIdentifier: options.processor.identifier) - - let validCache = targetImageCached.cached && - (options.fromMemoryCacheOrRefresh == false || targetImageCached == .memory) - if validCache { - targetCache.retrieveImage(forKey: key, options: options) { result in - guard let completionHandler = completionHandler else { return } - - // TODO: Optimize it when we can use async across all the project. - func checkResultImageAndCallback(_ inputImage: KFCrossPlatformImage) { - var image = inputImage - if image.kf.imageFrameCount != nil && image.kf.imageFrameCount != 1, let data = image.kf.animatedImageData { - // Always recreate animated image representation since it is possible to be loaded in different options. - // https://github.com/onevcat/Kingfisher/issues/1923 - image = options.processor.process(item: .data(data), options: options) ?? .init() - } - if let modifier = options.imageModifier { - image = modifier.modify(image) - } - let value = result.map { - RetrieveImageResult( - image: image, - cacheType: $0.cacheType, - source: source, - originalSource: context.originalSource, - data: { options.cacheSerializer.data(with: image, original: nil) } - ) - } - completionHandler(value) - } - - result.match { cacheResult in - options.callbackQueue.execute { - guard let image = cacheResult.image else { - completionHandler(.failure(KingfisherError.cacheError(reason: .imageNotExisting(key: key)))) - return - } - - if options.cacheSerializer.originalDataUsed { - let processor = options.processor - (options.processingQueue ?? self.processingQueue).execute { - let item = ImageProcessItem.image(image) - guard let processedImage = processor.process(item: item, options: options) else { - let error = KingfisherError.processorError( - reason: .processingFailed(processor: processor, item: item)) - options.callbackQueue.execute { completionHandler(.failure(error)) } - return - } - options.callbackQueue.execute { - checkResultImageAndCallback(processedImage) - } - } - } else { - checkResultImageAndCallback(image) - } - } - } onFailure: { error in - options.callbackQueue.execute { - completionHandler(.failure(KingfisherError.cacheError(reason: .imageNotExisting(key: key)))) - } - } - } - return true - } - - // 2. Check whether the original image exists. If so, get it, process it, save to storage and return. - let originalCache = options.originalCache ?? targetCache - // No need to store the same file in the same cache again. - if originalCache === targetCache && options.processor == DefaultImageProcessor.default { - return false - } - - // Check whether the unprocessed image existing or not. - let originalImageCacheType = originalCache.imageCachedType( - forKey: key, processorIdentifier: DefaultImageProcessor.default.identifier) - let canAcceptDiskCache = !options.fromMemoryCacheOrRefresh - - let canUseOriginalImageCache = - (canAcceptDiskCache && originalImageCacheType.cached) || - (!canAcceptDiskCache && originalImageCacheType == .memory) - - if canUseOriginalImageCache { - // Now we are ready to get found the original image from cache. We need the unprocessed image, so remove - // any processor from options first. - var optionsWithoutProcessor = options - optionsWithoutProcessor.processor = DefaultImageProcessor.default - originalCache.retrieveImage(forKey: key, options: optionsWithoutProcessor) { result in - - result.match( - onSuccess: { cacheResult in - guard let image = cacheResult.image else { - assertionFailure("The image (under key: \(key) should be existing in the original cache.") - return - } - - let processor = options.processor - (options.processingQueue ?? self.processingQueue).execute { - let item = ImageProcessItem.image(image) - guard let processedImage = processor.process(item: item, options: options) else { - let error = KingfisherError.processorError( - reason: .processingFailed(processor: processor, item: item)) - options.callbackQueue.execute { completionHandler?(.failure(error)) } - return - } - - var cacheOptions = options - cacheOptions.callbackQueue = .untouch - - let coordinator = CacheCallbackCoordinator( - shouldWaitForCache: options.waitForCache, shouldCacheOriginal: false) - - let image = options.imageModifier?.modify(processedImage) ?? processedImage - let result = RetrieveImageResult( - image: image, - cacheType: .none, - source: source, - originalSource: context.originalSource, - data: { options.cacheSerializer.data(with: processedImage, original: nil) } - ) - - targetCache.store( - processedImage, - forKey: key, - options: cacheOptions, - toDisk: !options.cacheMemoryOnly) - { - _ in - coordinator.apply(.cachingImage) { - options.callbackQueue.execute { completionHandler?(.success(result)) } - } - } - - coordinator.apply(.cacheInitiated) { - options.callbackQueue.execute { completionHandler?(.success(result)) } - } - } - }, - onFailure: { _ in - // This should not happen actually, since we already confirmed `originalImageCached` is `true`. - // Just in case... - options.callbackQueue.execute { - completionHandler?( - .failure(KingfisherError.cacheError(reason: .imageNotExisting(key: key))) - ) - } - } - ) - } - return true - } - - return false - } -} - -class RetrievingContext { - - var options: KingfisherParsedOptionsInfo - - let originalSource: Source - var propagationErrors: [PropagationError] = [] - - init(options: KingfisherParsedOptionsInfo, originalSource: Source) { - self.originalSource = originalSource - self.options = options - } - - func popAlternativeSource() -> Source? { - guard var alternativeSources = options.alternativeSources, !alternativeSources.isEmpty else { - return nil - } - let nextSource = alternativeSources.removeFirst() - options.alternativeSources = alternativeSources - return nextSource - } - - @discardableResult - func appendError(_ error: KingfisherError, to source: Source) -> [PropagationError] { - let item = PropagationError(source: source, error: error) - propagationErrors.append(item) - return propagationErrors - } -} - -class CacheCallbackCoordinator { - - enum State { - case idle - case imageCached - case originalImageCached - case done - } - - enum Action { - case cacheInitiated - case cachingImage - case cachingOriginalImage - } - - private let shouldWaitForCache: Bool - private let shouldCacheOriginal: Bool - private let stateQueue: DispatchQueue - private var threadSafeState: State = .idle - - private (set) var state: State { - set { stateQueue.sync { threadSafeState = newValue } } - get { stateQueue.sync { threadSafeState } } - } - - init(shouldWaitForCache: Bool, shouldCacheOriginal: Bool) { - self.shouldWaitForCache = shouldWaitForCache - self.shouldCacheOriginal = shouldCacheOriginal - let stateQueueName = "com.onevcat.Kingfisher.CacheCallbackCoordinator.stateQueue.\(UUID().uuidString)" - self.stateQueue = DispatchQueue(label: stateQueueName) - } - - func apply(_ action: Action, trigger: () -> Void) { - switch (state, action) { - case (.done, _): - break - - // From .idle - case (.idle, .cacheInitiated): - if !shouldWaitForCache { - state = .done - trigger() - } - case (.idle, .cachingImage): - if shouldCacheOriginal { - state = .imageCached - } else { - state = .done - trigger() - } - case (.idle, .cachingOriginalImage): - state = .originalImageCached - - // From .imageCached - case (.imageCached, .cachingOriginalImage): - state = .done - trigger() - - // From .originalImageCached - case (.originalImageCached, .cachingImage): - state = .done - trigger() - - default: - assertionFailure("This case should not happen in CacheCallbackCoordinator: \(state) - \(action)") - } - } -} diff --git a/Pods/Kingfisher/Sources/General/KingfisherOptionsInfo.swift b/Pods/Kingfisher/Sources/General/KingfisherOptionsInfo.swift deleted file mode 100644 index 5f2aea6..0000000 --- a/Pods/Kingfisher/Sources/General/KingfisherOptionsInfo.swift +++ /dev/null @@ -1,400 +0,0 @@ -// -// KingfisherOptionsInfo.swift -// Kingfisher -// -// Created by Wei Wang on 15/4/23. -// -// Copyright (c) 2019 Wei Wang -// -// 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 os(macOS) -import AppKit -#else -import UIKit -#endif - - -/// KingfisherOptionsInfo is a typealias for [KingfisherOptionsInfoItem]. -/// You can use the enum of option item with value to control some behaviors of Kingfisher. -public typealias KingfisherOptionsInfo = [KingfisherOptionsInfoItem] - -extension Array where Element == KingfisherOptionsInfoItem { - static let empty: KingfisherOptionsInfo = [] -} - -/// Represents the available option items could be used in `KingfisherOptionsInfo`. -public enum KingfisherOptionsInfoItem { - - /// Kingfisher will use the associated `ImageCache` object when handling related operations, - /// including trying to retrieve the cached images and store the downloaded image to it. - case targetCache(ImageCache) - - /// The `ImageCache` for storing and retrieving original images. If `originalCache` is - /// contained in the options, it will be preferred for storing and retrieving original images. - /// If there is no `.originalCache` in the options, `.targetCache` will be used to store original images. - /// - /// When using KingfisherManager to download and store an image, if `cacheOriginalImage` is - /// applied in the option, the original image will be stored to this `originalCache`. At the - /// same time, if a requested final image (with processor applied) cannot be found in `targetCache`, - /// Kingfisher will try to search the original image to check whether it is already there. If found, - /// it will be used and applied with the given processor. It is an optimization for not downloading - /// the same image for multiple times. - case originalCache(ImageCache) - - /// Kingfisher will use the associated `ImageDownloader` object to download the requested images. - case downloader(ImageDownloader) - - /// Member for animation transition when using `UIImageView`. Kingfisher will use the `ImageTransition` of - /// this enum to animate the image in if it is downloaded from web. The transition will not happen when the - /// image is retrieved from either memory or disk cache by default. If you need to do the transition even when - /// the image being retrieved from cache, set `.forceRefresh` as well. - case transition(ImageTransition) - - /// Associated `Float` value will be set as the priority of image download task. The value for it should be - /// between 0.0~1.0. If this option not set, the default value (`URLSessionTask.defaultPriority`) will be used. - case downloadPriority(Float) - - /// If set, Kingfisher will ignore the cache and try to start a download task for the image source. - case forceRefresh - - /// If set, Kingfisher will try to retrieve the image from memory cache first. If the image is not in memory - /// cache, then it will ignore the disk cache but download the image again from network. This is useful when - /// you want to display a changeable image behind the same url at the same app session, while avoiding download - /// it for multiple times. - case fromMemoryCacheOrRefresh - - /// If set, setting the image to an image view will happen with transition even when retrieved from cache. - /// See `.transition` option for more. - case forceTransition - - /// If set, Kingfisher will only cache the value in memory but not in disk. - case cacheMemoryOnly - - /// If set, Kingfisher will wait for caching operation to be completed before calling the completion block. - case waitForCache - - /// If set, Kingfisher will only try to retrieve the image from cache, but not from network. If the image is not in - /// cache, the image retrieving will fail with the `KingfisherError.cacheError` with `.imageNotExisting` as its - /// reason. - case onlyFromCache - - /// Decode the image in background thread before using. It will decode the downloaded image data and do a off-screen - /// rendering to extract pixel information in background. This can speed up display, but will cost more time to - /// prepare the image for using. - case backgroundDecode - - /// The associated value will be used as the target queue of dispatch callbacks when retrieving images from - /// cache. If not set, Kingfisher will use `.mainCurrentOrAsync` for callbacks. - /// - /// - Note: - /// This option does not affect the callbacks for UI related extension methods. You will always get the - /// callbacks called from main queue. - case callbackQueue(CallbackQueue) - - /// The associated value will be used as the scale factor when converting retrieved data to an image. - /// Specify the image scale, instead of your screen scale. You may need to set the correct scale when you dealing - /// with 2x or 3x retina images. Otherwise, Kingfisher will convert the data to image object at `scale` 1.0. - case scaleFactor(CGFloat) - - /// Whether all the animated image data should be preloaded. Default is `false`, which means only following frames - /// will be loaded on need. If `true`, all the animated image data will be loaded and decoded into memory. - /// - /// This option is mainly used for back compatibility internally. You should not set it directly. Instead, - /// you should choose the image view class to control the GIF data loading. There are two classes in Kingfisher - /// support to display a GIF image. `AnimatedImageView` does not preload all data, it takes much less memory, but - /// uses more CPU when display. While a normal image view (`UIImageView` or `NSImageView`) loads all data at once, - /// which uses more memory but only decode image frames once. - case preloadAllAnimationData - - /// The `ImageDownloadRequestModifier` contained will be used to change the request before it being sent. - /// This is the last chance you can modify the image download request. You can modify the request for some - /// customizing purpose, such as adding auth token to the header, do basic HTTP auth or something like url mapping. - /// The original request will be sent without any modification by default. - case requestModifier(AsyncImageDownloadRequestModifier) - - /// The `ImageDownloadRedirectHandler` contained will be used to change the request before redirection. - /// This is the possibility you can modify the image download request during redirect. You can modify the request for - /// some customizing purpose, such as adding auth token to the header, do basic HTTP auth or something like url - /// mapping. - /// The original redirection request will be sent without any modification by default. - case redirectHandler(ImageDownloadRedirectHandler) - - /// Processor for processing when the downloading finishes, a processor will convert the downloaded data to an image - /// and/or apply some filter on it. If a cache is connected to the downloader (it happens when you are using - /// KingfisherManager or any of the view extension methods), the converted image will also be sent to cache as well. - /// If not set, the `DefaultImageProcessor.default` will be used. - case processor(ImageProcessor) - - /// Provides a `CacheSerializer` to convert some data to an image object for - /// retrieving from disk cache or vice versa for storing to disk cache. - /// If not set, the `DefaultCacheSerializer.default` will be used. - case cacheSerializer(CacheSerializer) - - /// An `ImageModifier` is for modifying an image as needed right before it is used. If the image was fetched - /// directly from the downloader, the modifier will run directly after the `ImageProcessor`. If the image is being - /// fetched from a cache, the modifier will run after the `CacheSerializer`. - /// - /// Use `ImageModifier` when you need to set properties that do not persist when caching the image on a concrete - /// type of `Image`, such as the `renderingMode` or the `alignmentInsets` of `UIImage`. - case imageModifier(ImageModifier) - - /// Keep the existing image of image view while setting another image to it. - /// By setting this option, the placeholder image parameter of image view extension method - /// will be ignored and the current image will be kept while loading or downloading the new image. - case keepCurrentImageWhileLoading - - /// If set, Kingfisher will only load the first frame from an animated image file as a single image. - /// Loading an animated images may take too much memory. It will be useful when you want to display a - /// static preview of the first frame from an animated image. - /// - /// This option will be ignored if the target image is not animated image data. - case onlyLoadFirstFrame - - /// If set and an `ImageProcessor` is used, Kingfisher will try to cache both the final result and original - /// image. Kingfisher will have a chance to use the original image when another processor is applied to the same - /// resource, instead of downloading it again. You can use `.originalCache` to specify a cache or the original - /// images if necessary. - /// - /// The original image will be only cached to disk storage. - case cacheOriginalImage - - /// If set and an image retrieving error occurred Kingfisher will set provided image (or empty) - /// in place of requested one. It's useful when you don't want to show placeholder - /// during loading time but wants to use some default image when requests will be failed. - case onFailureImage(KFCrossPlatformImage?) - - /// If set and used in `ImagePrefetcher`, the prefetching operation will load the images into memory storage - /// aggressively. By default this is not contained in the options, that means if the requested image is already - /// in disk cache, Kingfisher will not try to load it to memory. - case alsoPrefetchToMemory - - /// If set, the disk storage loading will happen in the same calling queue. By default, disk storage file loading - /// happens in its own queue with an asynchronous dispatch behavior. Although it provides better non-blocking disk - /// loading performance, it also causes a flickering when you reload an image from disk, if the image view already - /// has an image set. - /// - /// Set this options will stop that flickering by keeping all loading in the same queue (typically the UI queue - /// if you are using Kingfisher's extension methods to set an image), with a tradeoff of loading performance. - case loadDiskFileSynchronously - - /// Options to control the writing of data to disk storage - /// If set, options will be passed the store operation for a new files. - case diskStoreWriteOptions(Data.WritingOptions) - - /// The expiration setting for memory cache. By default, the underlying `MemoryStorage.Backend` uses the - /// expiration in its config for all items. If set, the `MemoryStorage.Backend` will use this associated - /// value to overwrite the config setting for this caching item. - case memoryCacheExpiration(StorageExpiration) - - /// The expiration extending setting for memory cache. The item expiration time will be incremented by this - /// value after access. - /// By default, the underlying `MemoryStorage.Backend` uses the initial cache expiration as extending - /// value: .cacheTime. - /// - /// To disable extending option at all add memoryCacheAccessExtendingExpiration(.none) to options. - case memoryCacheAccessExtendingExpiration(ExpirationExtending) - - /// The expiration setting for disk cache. By default, the underlying `DiskStorage.Backend` uses the - /// expiration in its config for all items. If set, the `DiskStorage.Backend` will use this associated - /// value to overwrite the config setting for this caching item. - case diskCacheExpiration(StorageExpiration) - - /// The expiration extending setting for disk cache. The item expiration time will be incremented by this value after access. - /// By default, the underlying `DiskStorage.Backend` uses the initial cache expiration as extending value: .cacheTime. - /// To disable extending option at all add diskCacheAccessExtendingExpiration(.none) to options. - case diskCacheAccessExtendingExpiration(ExpirationExtending) - - /// Decides on which queue the image processing should happen. By default, Kingfisher uses a pre-defined serial - /// queue to process images. Use this option to change this behavior. For example, specify a `.mainCurrentOrAsync` - /// to let the image be processed in main queue to prevent a possible flickering (but with a possibility of - /// blocking the UI, especially if the processor needs a lot of time to run). - case processingQueue(CallbackQueue) - - /// Enable progressive image loading, Kingfisher will use the associated `ImageProgressive` value to process the - /// progressive JPEG data and display it in a progressive way. - case progressiveJPEG(ImageProgressive) - - /// The alternative sources will be used when the original input `Source` fails. The `Source`s in the associated - /// array will be used to start a new image loading task if the previous task fails due to an error. The image - /// source loading process will stop as soon as a source is loaded successfully. If all `[Source]`s are used but - /// the loading is still failing, an `imageSettingError` with `alternativeSourcesExhausted` as its reason will be - /// thrown out. - /// - /// This option is useful if you want to implement a fallback solution for setting image. - /// - /// User cancellation will not trigger the alternative source loading. - case alternativeSources([Source]) - - /// Provide a retry strategy which will be used when something gets wrong during the image retrieving process from - /// `KingfisherManager`. You can define a strategy by create a type conforming to the `RetryStrategy` protocol. - /// - /// - Note: - /// - /// All extension methods of Kingfisher (`kf` extensions on `UIImageView` or `UIButton`) retrieve images through - /// `KingfisherManager`, so the retry strategy also applies when using them. However, this option does not apply - /// when pass to an `ImageDownloader` or `ImageCache`. - /// - case retryStrategy(RetryStrategy) - - /// The `Source` should be loaded when user enables Low Data Mode and the original source fails with an - /// `NSURLErrorNetworkUnavailableReason.constrained` error. When this option is set, the - /// `allowsConstrainedNetworkAccess` property of the request for the original source will be set to `false` and the - /// `Source` in associated value will be used to retrieve the image for low data mode. Usually, you can provide a - /// low-resolution version of your image or a local image provider to display a placeholder. - /// - /// If not set or the `source` is `nil`, the device Low Data Mode will be ignored and the original source will - /// be loaded following the system default behavior, in a normal way. - case lowDataMode(Source?) -} - -// Improve performance by parsing the input `KingfisherOptionsInfo` (self) first. -// So we can prevent the iterating over the options array again and again. -/// The parsed options info used across Kingfisher methods. Each property in this type corresponds a case member -/// in `KingfisherOptionsInfoItem`. When a `KingfisherOptionsInfo` sent to Kingfisher related methods, it will be -/// parsed and converted to a `KingfisherParsedOptionsInfo` first, and pass through the internal methods. -public struct KingfisherParsedOptionsInfo { - - public var targetCache: ImageCache? = nil - public var originalCache: ImageCache? = nil - public var downloader: ImageDownloader? = nil - public var transition: ImageTransition = .none - public var downloadPriority: Float = URLSessionTask.defaultPriority - public var forceRefresh = false - public var fromMemoryCacheOrRefresh = false - public var forceTransition = false - public var cacheMemoryOnly = false - public var waitForCache = false - public var onlyFromCache = false - public var backgroundDecode = false - public var preloadAllAnimationData = false - public var callbackQueue: CallbackQueue = .mainCurrentOrAsync - public var scaleFactor: CGFloat = 1.0 - public var requestModifier: AsyncImageDownloadRequestModifier? = nil - public var redirectHandler: ImageDownloadRedirectHandler? = nil - public var processor: ImageProcessor = DefaultImageProcessor.default - public var imageModifier: ImageModifier? = nil - public var cacheSerializer: CacheSerializer = DefaultCacheSerializer.default - public var keepCurrentImageWhileLoading = false - public var onlyLoadFirstFrame = false - public var cacheOriginalImage = false - public var onFailureImage: Optional = .none - public var alsoPrefetchToMemory = false - public var loadDiskFileSynchronously = false - public var diskStoreWriteOptions: Data.WritingOptions = [] - public var memoryCacheExpiration: StorageExpiration? = nil - public var memoryCacheAccessExtendingExpiration: ExpirationExtending = .cacheTime - public var diskCacheExpiration: StorageExpiration? = nil - public var diskCacheAccessExtendingExpiration: ExpirationExtending = .cacheTime - public var processingQueue: CallbackQueue? = nil - public var progressiveJPEG: ImageProgressive? = nil - public var alternativeSources: [Source]? = nil - public var retryStrategy: RetryStrategy? = nil - public var lowDataModeSource: Source? = nil - - var onDataReceived: [DataReceivingSideEffect]? = nil - - public init(_ info: KingfisherOptionsInfo?) { - guard let info = info else { return } - for option in info { - switch option { - case .targetCache(let value): targetCache = value - case .originalCache(let value): originalCache = value - case .downloader(let value): downloader = value - case .transition(let value): transition = value - case .downloadPriority(let value): downloadPriority = value - case .forceRefresh: forceRefresh = true - case .fromMemoryCacheOrRefresh: fromMemoryCacheOrRefresh = true - case .forceTransition: forceTransition = true - case .cacheMemoryOnly: cacheMemoryOnly = true - case .waitForCache: waitForCache = true - case .onlyFromCache: onlyFromCache = true - case .backgroundDecode: backgroundDecode = true - case .preloadAllAnimationData: preloadAllAnimationData = true - case .callbackQueue(let value): callbackQueue = value - case .scaleFactor(let value): scaleFactor = value - case .requestModifier(let value): requestModifier = value - case .redirectHandler(let value): redirectHandler = value - case .processor(let value): processor = value - case .imageModifier(let value): imageModifier = value - case .cacheSerializer(let value): cacheSerializer = value - case .keepCurrentImageWhileLoading: keepCurrentImageWhileLoading = true - case .onlyLoadFirstFrame: onlyLoadFirstFrame = true - case .cacheOriginalImage: cacheOriginalImage = true - case .onFailureImage(let value): onFailureImage = .some(value) - case .alsoPrefetchToMemory: alsoPrefetchToMemory = true - case .loadDiskFileSynchronously: loadDiskFileSynchronously = true - case .diskStoreWriteOptions(let options): diskStoreWriteOptions = options - case .memoryCacheExpiration(let expiration): memoryCacheExpiration = expiration - case .memoryCacheAccessExtendingExpiration(let expirationExtending): memoryCacheAccessExtendingExpiration = expirationExtending - case .diskCacheExpiration(let expiration): diskCacheExpiration = expiration - case .diskCacheAccessExtendingExpiration(let expirationExtending): diskCacheAccessExtendingExpiration = expirationExtending - case .processingQueue(let queue): processingQueue = queue - case .progressiveJPEG(let value): progressiveJPEG = value - case .alternativeSources(let sources): alternativeSources = sources - case .retryStrategy(let strategy): retryStrategy = strategy - case .lowDataMode(let source): lowDataModeSource = source - } - } - - if originalCache == nil { - originalCache = targetCache - } - } -} - -extension KingfisherParsedOptionsInfo { - var imageCreatingOptions: ImageCreatingOptions { - return ImageCreatingOptions( - scale: scaleFactor, - duration: 0.0, - preloadAll: preloadAllAnimationData, - onlyFirstFrame: onlyLoadFirstFrame) - } -} - -protocol DataReceivingSideEffect: AnyObject { - var onShouldApply: () -> Bool { get set } - func onDataReceived(_ session: URLSession, task: SessionDataTask, data: Data) -} - -class ImageLoadingProgressSideEffect: DataReceivingSideEffect { - - var onShouldApply: () -> Bool = { return true } - - let block: DownloadProgressBlock - - init(_ block: @escaping DownloadProgressBlock) { - self.block = block - } - - func onDataReceived(_ session: URLSession, task: SessionDataTask, data: Data) { - guard self.onShouldApply() else { return } - guard let expectedContentLength = task.task.response?.expectedContentLength, - expectedContentLength != -1 else - { - return - } - - let dataLength = Int64(task.mutableData.count) - DispatchQueue.main.async { - self.block(dataLength, expectedContentLength) - } - } -} diff --git a/Pods/Kingfisher/Sources/Image/Filter.swift b/Pods/Kingfisher/Sources/Image/Filter.swift deleted file mode 100644 index 6e4b386..0000000 --- a/Pods/Kingfisher/Sources/Image/Filter.swift +++ /dev/null @@ -1,146 +0,0 @@ -// -// Filter.swift -// Kingfisher -// -// Created by Wei Wang on 2016/08/31. -// -// Copyright (c) 2019 Wei Wang -// -// 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 !os(watchOS) - -import CoreImage - -// Reuse the same CI Context for all CI drawing. -private let ciContext = CIContext(options: nil) - -/// Represents the type of transformer method, which will be used in to provide a `Filter`. -public typealias Transformer = (CIImage) -> CIImage? - -/// Represents a processor based on a `CIImage` `Filter`. -/// It requires a filter to create an `ImageProcessor`. -public protocol CIImageProcessor: ImageProcessor { - var filter: Filter { get } -} - -extension CIImageProcessor { - - /// Processes the input `ImageProcessItem` with this processor. - /// - /// - Parameters: - /// - item: Input item which will be processed by `self`. - /// - options: Options when processing the item. - /// - Returns: The processed image. - /// - /// - Note: See documentation of `ImageProcessor` protocol for more. - public func process(item: ImageProcessItem, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? { - switch item { - case .image(let image): - return image.kf.apply(filter) - case .data: - return (DefaultImageProcessor.default |> self).process(item: item, options: options) - } - } -} - -/// A wrapper struct for a `Transformer` of CIImage filters. A `Filter` -/// value could be used to create a `CIImage` processor. -public struct Filter { - - let transform: Transformer - - public init(transform: @escaping Transformer) { - self.transform = transform - } - - /// Tint filter which will apply a tint color to images. - public static var tint: (KFCrossPlatformColor) -> Filter = { - color in - Filter { - input in - - let colorFilter = CIFilter(name: "CIConstantColorGenerator")! - colorFilter.setValue(CIColor(color: color), forKey: kCIInputColorKey) - - let filter = CIFilter(name: "CISourceOverCompositing")! - - let colorImage = colorFilter.outputImage - filter.setValue(colorImage, forKey: kCIInputImageKey) - filter.setValue(input, forKey: kCIInputBackgroundImageKey) - - return filter.outputImage?.cropped(to: input.extent) - } - } - - /// Represents color control elements. It is a tuple of - /// `(brightness, contrast, saturation, inputEV)` - public typealias ColorElement = (CGFloat, CGFloat, CGFloat, CGFloat) - - /// Color control filter which will apply color control change to images. - public static var colorControl: (ColorElement) -> Filter = { arg -> Filter in - let (brightness, contrast, saturation, inputEV) = arg - return Filter { input in - let paramsColor = [kCIInputBrightnessKey: brightness, - kCIInputContrastKey: contrast, - kCIInputSaturationKey: saturation] - let blackAndWhite = input.applyingFilter("CIColorControls", parameters: paramsColor) - let paramsExposure = [kCIInputEVKey: inputEV] - return blackAndWhite.applyingFilter("CIExposureAdjust", parameters: paramsExposure) - } - } -} - -extension KingfisherWrapper where Base: KFCrossPlatformImage { - - /// Applies a `Filter` containing `CIImage` transformer to `self`. - /// - /// - Parameter filter: The filter used to transform `self`. - /// - Returns: A transformed image by input `Filter`. - /// - /// - Note: - /// Only CG-based images are supported. If any error happens - /// during transforming, `self` will be returned. - public func apply(_ filter: Filter) -> KFCrossPlatformImage { - - guard let cgImage = cgImage else { - assertionFailure("[Kingfisher] Tint image only works for CG-based image.") - return base - } - - let inputImage = CIImage(cgImage: cgImage) - guard let outputImage = filter.transform(inputImage) else { - return base - } - - guard let result = ciContext.createCGImage(outputImage, from: outputImage.extent) else { - assertionFailure("[Kingfisher] Can not make an tint image within context.") - return base - } - - #if os(macOS) - return fixedForRetinaPixel(cgImage: result, to: size) - #else - return KFCrossPlatformImage(cgImage: result, scale: base.scale, orientation: base.imageOrientation) - #endif - } - -} - -#endif diff --git a/Pods/Kingfisher/Sources/Image/GIFAnimatedImage.swift b/Pods/Kingfisher/Sources/Image/GIFAnimatedImage.swift deleted file mode 100644 index 323fe42..0000000 --- a/Pods/Kingfisher/Sources/Image/GIFAnimatedImage.swift +++ /dev/null @@ -1,177 +0,0 @@ -// -// AnimatedImage.swift -// Kingfisher -// -// Created by onevcat on 2018/09/26. -// -// Copyright (c) 2019 Wei Wang -// -// 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 -import ImageIO - -/// Represents a set of image creating options used in Kingfisher. -public struct ImageCreatingOptions { - - /// The target scale of image needs to be created. - public let scale: CGFloat - - /// The expected animation duration if an animated image being created. - public let duration: TimeInterval - - /// For an animated image, whether or not all frames should be loaded before displaying. - public let preloadAll: Bool - - /// For an animated image, whether or not only the first image should be - /// loaded as a static image. It is useful for preview purpose of an animated image. - public let onlyFirstFrame: Bool - - /// Creates an `ImageCreatingOptions` object. - /// - /// - Parameters: - /// - scale: The target scale of image needs to be created. Default is `1.0`. - /// - duration: The expected animation duration if an animated image being created. - /// A value less or equal to `0.0` means the animated image duration will - /// be determined by the frame data. Default is `0.0`. - /// - preloadAll: For an animated image, whether or not all frames should be loaded before displaying. - /// Default is `false`. - /// - onlyFirstFrame: For an animated image, whether or not only the first image should be - /// loaded as a static image. It is useful for preview purpose of an animated image. - /// Default is `false`. - public init( - scale: CGFloat = 1.0, - duration: TimeInterval = 0.0, - preloadAll: Bool = false, - onlyFirstFrame: Bool = false) - { - self.scale = scale - self.duration = duration - self.preloadAll = preloadAll - self.onlyFirstFrame = onlyFirstFrame - } -} - -/// Represents the decoding for a GIF image. This class extracts frames from an `imageSource`, then -/// hold the images for later use. -public class GIFAnimatedImage { - let images: [KFCrossPlatformImage] - let duration: TimeInterval - - init?(from frameSource: ImageFrameSource, options: ImageCreatingOptions) { - let frameCount = frameSource.frameCount - var images = [KFCrossPlatformImage]() - var gifDuration = 0.0 - - for i in 0 ..< frameCount { - guard let imageRef = frameSource.frame(at: i) else { - return nil - } - - if frameCount == 1 { - gifDuration = .infinity - } else { - // Get current animated GIF frame duration - gifDuration += frameSource.duration(at: i) - } - images.append(KingfisherWrapper.image(cgImage: imageRef, scale: options.scale, refImage: nil)) - if options.onlyFirstFrame { break } - } - self.images = images - self.duration = gifDuration - } - - convenience init?(from imageSource: CGImageSource, for info: [String: Any], options: ImageCreatingOptions) { - let frameSource = CGImageFrameSource(data: nil, imageSource: imageSource, options: info) - self.init(from: frameSource, options: options) - } - - /// Calculates frame duration for a gif frame out of the kCGImagePropertyGIFDictionary dictionary. - public static func getFrameDuration(from gifInfo: [String: Any]?) -> TimeInterval { - let defaultFrameDuration = 0.1 - guard let gifInfo = gifInfo else { return defaultFrameDuration } - - let unclampedDelayTime = gifInfo[kCGImagePropertyGIFUnclampedDelayTime as String] as? NSNumber - let delayTime = gifInfo[kCGImagePropertyGIFDelayTime as String] as? NSNumber - let duration = unclampedDelayTime ?? delayTime - - guard let frameDuration = duration else { return defaultFrameDuration } - return frameDuration.doubleValue > 0.011 ? frameDuration.doubleValue : defaultFrameDuration - } - - /// Calculates frame duration at a specific index for a gif from an `imageSource`. - public static func getFrameDuration(from imageSource: CGImageSource, at index: Int) -> TimeInterval { - guard let properties = CGImageSourceCopyPropertiesAtIndex(imageSource, index, nil) - as? [String: Any] else { return 0.0 } - - let gifInfo = properties[kCGImagePropertyGIFDictionary as String] as? [String: Any] - return getFrameDuration(from: gifInfo) - } -} - -/// Represents a frame source for animated image -public protocol ImageFrameSource { - /// Source data associated with this frame source. - var data: Data? { get } - - /// Count of total frames in this frame source. - var frameCount: Int { get } - - /// Retrieves the frame at a specific index. The result image is expected to be - /// no larger than `maxSize`. If the index is invalid, implementors should return `nil`. - func frame(at index: Int, maxSize: CGSize?) -> CGImage? - - /// Retrieves the duration at a specific index. If the index is invalid, implementors should return `0.0`. - func duration(at index: Int) -> TimeInterval -} - -public extension ImageFrameSource { - /// Retrieves the frame at a specific index. If the index is invalid, implementors should return `nil`. - func frame(at index: Int) -> CGImage? { - return frame(at: index, maxSize: nil) - } -} - -struct CGImageFrameSource: ImageFrameSource { - let data: Data? - let imageSource: CGImageSource - let options: [String: Any]? - - var frameCount: Int { - return CGImageSourceGetCount(imageSource) - } - - func frame(at index: Int, maxSize: CGSize?) -> CGImage? { - var options = self.options as? [CFString: Any] - if let maxSize = maxSize, maxSize != .zero { - options = (options ?? [:]).merging([ - kCGImageSourceCreateThumbnailFromImageIfAbsent: true, - kCGImageSourceCreateThumbnailWithTransform: true, - kCGImageSourceShouldCacheImmediately: true, - kCGImageSourceThumbnailMaxPixelSize: max(maxSize.width, maxSize.height) - ], uniquingKeysWith: { $1 }) - } - return CGImageSourceCreateImageAtIndex(imageSource, index, options as CFDictionary?) - } - - func duration(at index: Int) -> TimeInterval { - return GIFAnimatedImage.getFrameDuration(from: imageSource, at: index) - } -} - diff --git a/Pods/Kingfisher/Sources/Image/GraphicsContext.swift b/Pods/Kingfisher/Sources/Image/GraphicsContext.swift deleted file mode 100644 index 6d8443c..0000000 --- a/Pods/Kingfisher/Sources/Image/GraphicsContext.swift +++ /dev/null @@ -1,88 +0,0 @@ -// -// GraphicsContext.swift -// Kingfisher -// -// Created by taras on 19/04/2021. -// -// Copyright (c) 2021 Wei Wang -// -// 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(AppKit) && !targetEnvironment(macCatalyst) -import AppKit -#endif -#if canImport(UIKit) -import UIKit -#endif - -enum GraphicsContext { - static func begin(size: CGSize, scale: CGFloat) { - #if os(macOS) - NSGraphicsContext.saveGraphicsState() - #else - UIGraphicsBeginImageContextWithOptions(size, false, scale) - #endif - } - - static func current(size: CGSize, scale: CGFloat, inverting: Bool, cgImage: CGImage?) -> CGContext? { - #if os(macOS) - guard let rep = NSBitmapImageRep( - bitmapDataPlanes: nil, - pixelsWide: Int(size.width), - pixelsHigh: Int(size.height), - bitsPerSample: cgImage?.bitsPerComponent ?? 8, - samplesPerPixel: 4, - hasAlpha: true, - isPlanar: false, - colorSpaceName: .calibratedRGB, - bytesPerRow: 0, - bitsPerPixel: 0) else - { - assertionFailure("[Kingfisher] Image representation cannot be created.") - return nil - } - rep.size = size - guard let context = NSGraphicsContext(bitmapImageRep: rep) else { - assertionFailure("[Kingfisher] Image context cannot be created.") - return nil - } - - NSGraphicsContext.current = context - return context.cgContext - #else - guard let context = UIGraphicsGetCurrentContext() else { - return nil - } - if inverting { // If drawing a CGImage, we need to make context flipped. - context.scaleBy(x: 1.0, y: -1.0) - context.translateBy(x: 0, y: -size.height) - } - return context - #endif - } - - static func end() { - #if os(macOS) - NSGraphicsContext.restoreGraphicsState() - #else - UIGraphicsEndImageContext() - #endif - } -} - diff --git a/Pods/Kingfisher/Sources/Image/Image.swift b/Pods/Kingfisher/Sources/Image/Image.swift deleted file mode 100644 index 57022cf..0000000 --- a/Pods/Kingfisher/Sources/Image/Image.swift +++ /dev/null @@ -1,426 +0,0 @@ -// -// Image.swift -// Kingfisher -// -// Created by Wei Wang on 16/1/6. -// -// Copyright (c) 2019 Wei Wang -// -// 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 os(macOS) -import AppKit -private var imagesKey: Void? -private var durationKey: Void? -#else -import UIKit -import MobileCoreServices -private var imageSourceKey: Void? -#endif - -#if !os(watchOS) -import CoreImage -#endif - -import CoreGraphics -import ImageIO - -#if canImport(UniformTypeIdentifiers) -import UniformTypeIdentifiers -#endif - -private var animatedImageDataKey: Void? -private var imageFrameCountKey: Void? - -// MARK: - Image Properties -extension KingfisherWrapper where Base: KFCrossPlatformImage { - private(set) var animatedImageData: Data? { - get { return getAssociatedObject(base, &animatedImageDataKey) } - set { setRetainedAssociatedObject(base, &animatedImageDataKey, newValue) } - } - - public var imageFrameCount: Int? { - get { return getAssociatedObject(base, &imageFrameCountKey) } - set { setRetainedAssociatedObject(base, &imageFrameCountKey, newValue) } - } - - #if os(macOS) - var cgImage: CGImage? { - return base.cgImage(forProposedRect: nil, context: nil, hints: nil) - } - - var scale: CGFloat { - return 1.0 - } - - private(set) var images: [KFCrossPlatformImage]? { - get { return getAssociatedObject(base, &imagesKey) } - set { setRetainedAssociatedObject(base, &imagesKey, newValue) } - } - - private(set) var duration: TimeInterval { - get { return getAssociatedObject(base, &durationKey) ?? 0.0 } - set { setRetainedAssociatedObject(base, &durationKey, newValue) } - } - - var size: CGSize { - return base.representations.reduce(.zero) { size, rep in - let width = max(size.width, CGFloat(rep.pixelsWide)) - let height = max(size.height, CGFloat(rep.pixelsHigh)) - return CGSize(width: width, height: height) - } - } - #else - var cgImage: CGImage? { return base.cgImage } - var scale: CGFloat { return base.scale } - var images: [KFCrossPlatformImage]? { return base.images } - var duration: TimeInterval { return base.duration } - var size: CGSize { return base.size } - - /// The image source reference of current image. - public var imageSource: CGImageSource? { - get { - guard let frameSource = frameSource as? CGImageFrameSource else { return nil } - return frameSource.imageSource - } - } - - /// The custom frame source of current image. - public private(set) var frameSource: ImageFrameSource? { - get { return getAssociatedObject(base, &imageSourceKey) } - set { setRetainedAssociatedObject(base, &imageSourceKey, newValue) } - } - #endif - - // Bitmap memory cost with bytes. - var cost: Int { - let pixel = Int(size.width * size.height * scale * scale) - guard let cgImage = cgImage else { - return pixel * 4 - } - let bytesPerPixel = cgImage.bitsPerPixel / 8 - guard let imageCount = images?.count else { - return pixel * bytesPerPixel - } - return pixel * bytesPerPixel * imageCount - } -} - -// MARK: - Image Conversion -extension KingfisherWrapper where Base: KFCrossPlatformImage { - #if os(macOS) - static func image(cgImage: CGImage, scale: CGFloat, refImage: KFCrossPlatformImage?) -> KFCrossPlatformImage { - return KFCrossPlatformImage(cgImage: cgImage, size: .zero) - } - - /// Normalize the image. This getter does nothing on macOS but return the image itself. - public var normalized: KFCrossPlatformImage { return base } - - #else - /// Creating an image from a give `CGImage` at scale and orientation for refImage. The method signature is for - /// compatibility of macOS version. - static func image(cgImage: CGImage, scale: CGFloat, refImage: KFCrossPlatformImage?) -> KFCrossPlatformImage { - return KFCrossPlatformImage(cgImage: cgImage, scale: scale, orientation: refImage?.imageOrientation ?? .up) - } - - /// Returns normalized image for current `base` image. - /// This method will try to redraw an image with orientation and scale considered. - public var normalized: KFCrossPlatformImage { - // prevent animated image (GIF) lose it's images - guard images == nil else { return base.copy() as! KFCrossPlatformImage } - // No need to do anything if already up - guard base.imageOrientation != .up else { return base.copy() as! KFCrossPlatformImage } - - return draw(to: size, inverting: true, refImage: KFCrossPlatformImage()) { - fixOrientation(in: $0) - return true - } - } - - func fixOrientation(in context: CGContext) { - - var transform = CGAffineTransform.identity - - let orientation = base.imageOrientation - - switch orientation { - case .down, .downMirrored: - transform = transform.translatedBy(x: size.width, y: size.height) - transform = transform.rotated(by: .pi) - case .left, .leftMirrored: - transform = transform.translatedBy(x: size.width, y: 0) - transform = transform.rotated(by: .pi / 2.0) - case .right, .rightMirrored: - transform = transform.translatedBy(x: 0, y: size.height) - transform = transform.rotated(by: .pi / -2.0) - case .up, .upMirrored: - break - #if compiler(>=5) - @unknown default: - break - #endif - } - - //Flip image one more time if needed to, this is to prevent flipped image - switch orientation { - case .upMirrored, .downMirrored: - transform = transform.translatedBy(x: size.width, y: 0) - transform = transform.scaledBy(x: -1, y: 1) - case .leftMirrored, .rightMirrored: - transform = transform.translatedBy(x: size.height, y: 0) - transform = transform.scaledBy(x: -1, y: 1) - case .up, .down, .left, .right: - break - #if compiler(>=5) - @unknown default: - break - #endif - } - - context.concatenate(transform) - switch orientation { - case .left, .leftMirrored, .right, .rightMirrored: - context.draw(cgImage!, in: CGRect(x: 0, y: 0, width: size.height, height: size.width)) - default: - context.draw(cgImage!, in: CGRect(x: 0, y: 0, width: size.width, height: size.height)) - } - } - #endif -} - -// MARK: - Image Representation -extension KingfisherWrapper where Base: KFCrossPlatformImage { - /// Returns PNG representation of `base` image. - /// - /// - Returns: PNG data of image. - public func pngRepresentation() -> Data? { - #if os(macOS) - guard let cgImage = cgImage else { - return nil - } - let rep = NSBitmapImageRep(cgImage: cgImage) - return rep.representation(using: .png, properties: [:]) - #else - return base.pngData() - #endif - } - - /// Returns JPEG representation of `base` image. - /// - /// - Parameter compressionQuality: The compression quality when converting image to JPEG data. - /// - Returns: JPEG data of image. - public func jpegRepresentation(compressionQuality: CGFloat) -> Data? { - #if os(macOS) - guard let cgImage = cgImage else { - return nil - } - let rep = NSBitmapImageRep(cgImage: cgImage) - return rep.representation(using:.jpeg, properties: [.compressionFactor: compressionQuality]) - #else - return base.jpegData(compressionQuality: compressionQuality) - #endif - } - - /// Returns GIF representation of `base` image. - /// - /// - Returns: Original GIF data of image. - public func gifRepresentation() -> Data? { - return animatedImageData - } - - /// Returns a data representation for `base` image, with the `format` as the format indicator. - /// - Parameters: - /// - format: The format in which the output data should be. If `unknown`, the `base` image will be - /// converted in the PNG representation. - /// - compressionQuality: The compression quality when converting image to a lossy format data. - /// - /// - Returns: The output data representing. - public func data(format: ImageFormat, compressionQuality: CGFloat = 1.0) -> Data? { - return autoreleasepool { () -> Data? in - let data: Data? - switch format { - case .PNG: data = pngRepresentation() - case .JPEG: data = jpegRepresentation(compressionQuality: compressionQuality) - case .GIF: data = gifRepresentation() - case .unknown: data = normalized.kf.pngRepresentation() - } - - return data - } - } -} - -// MARK: - Creating Images -extension KingfisherWrapper where Base: KFCrossPlatformImage { - - /// Creates an animated image from a given data and options. Currently only GIF data is supported. - /// - /// - Parameters: - /// - data: The animated image data. - /// - options: Options to use when creating the animated image. - /// - Returns: An `Image` object represents the animated image. It is in form of an array of image frames with a - /// certain duration. `nil` if anything wrong when creating animated image. - public static func animatedImage(data: Data, options: ImageCreatingOptions) -> KFCrossPlatformImage? { - #if os(xrOS) - let info: [String: Any] = [ - kCGImageSourceShouldCache as String: true, - kCGImageSourceTypeIdentifierHint as String: UTType.gif.identifier - ] - #else - let info: [String: Any] = [ - kCGImageSourceShouldCache as String: true, - kCGImageSourceTypeIdentifierHint as String: kUTTypeGIF - ] - #endif - - guard let imageSource = CGImageSourceCreateWithData(data as CFData, info as CFDictionary) else { - return nil - } - let frameSource = CGImageFrameSource(data: data, imageSource: imageSource, options: info) - #if os(macOS) - let baseImage = KFCrossPlatformImage(data: data) - #else - let baseImage = KFCrossPlatformImage(data: data, scale: options.scale) - #endif - return animatedImage(source: frameSource, options: options, baseImage: baseImage) - } - - /// Creates an animated image from a given frame source. - /// - /// - Parameters: - /// - source: The frame source to create animated image from. - /// - options: Options to use when creating the animated image. - /// - baseImage: An optional image object to be used as the key frame of the animated image. If `nil`, the first - /// frame of the `source` will be used. - /// - Returns: An `Image` object represents the animated image. It is in form of an array of image frames with a - /// certain duration. `nil` if anything wrong when creating animated image. - public static func animatedImage(source: ImageFrameSource, options: ImageCreatingOptions, baseImage: KFCrossPlatformImage? = nil) -> KFCrossPlatformImage? { - #if os(macOS) - guard let animatedImage = GIFAnimatedImage(from: source, options: options) else { - return nil - } - var image: KFCrossPlatformImage? - if options.onlyFirstFrame { - image = animatedImage.images.first - } else { - if let baseImage = baseImage { - image = baseImage - } else { - image = animatedImage.images.first - } - var kf = image?.kf - kf?.images = animatedImage.images - kf?.duration = animatedImage.duration - } - image?.kf.animatedImageData = source.data - image?.kf.imageFrameCount = source.frameCount - return image - #else - - var image: KFCrossPlatformImage? - if options.preloadAll || options.onlyFirstFrame { - // Use `images` image if you want to preload all animated data - guard let animatedImage = GIFAnimatedImage(from: source, options: options) else { - return nil - } - if options.onlyFirstFrame { - image = animatedImage.images.first - } else { - let duration = options.duration <= 0.0 ? animatedImage.duration : options.duration - image = .animatedImage(with: animatedImage.images, duration: duration) - } - image?.kf.animatedImageData = source.data - } else { - if let baseImage = baseImage { - image = baseImage - } else { - guard let firstFrame = source.frame(at: 0) else { - return nil - } - image = KFCrossPlatformImage(cgImage: firstFrame, scale: options.scale, orientation: .up) - } - var kf = image?.kf - kf?.frameSource = source - kf?.animatedImageData = source.data - } - - image?.kf.imageFrameCount = source.frameCount - return image - #endif - } - - /// Creates an image from a given data and options. `.JPEG`, `.PNG` or `.GIF` is supported. For other - /// image format, image initializer from system will be used. If no image object could be created from - /// the given `data`, `nil` will be returned. - /// - /// - Parameters: - /// - data: The image data representation. - /// - options: Options to use when creating the image. - /// - Returns: An `Image` object represents the image if created. If the `data` is invalid or not supported, `nil` - /// will be returned. - public static func image(data: Data, options: ImageCreatingOptions) -> KFCrossPlatformImage? { - var image: KFCrossPlatformImage? - switch data.kf.imageFormat { - case .JPEG: - image = KFCrossPlatformImage(data: data, scale: options.scale) - case .PNG: - image = KFCrossPlatformImage(data: data, scale: options.scale) - case .GIF: - image = KingfisherWrapper.animatedImage(data: data, options: options) - case .unknown: - image = KFCrossPlatformImage(data: data, scale: options.scale) - } - return image - } - - /// Creates a downsampled image from given data to a certain size and scale. - /// - /// - Parameters: - /// - data: The image data contains a JPEG or PNG image. - /// - pointSize: The target size in point to which the image should be downsampled. - /// - scale: The scale of result image. - /// - Returns: A downsampled `Image` object following the input conditions. - /// - /// - Note: - /// Different from image `resize` methods, downsampling will not render the original - /// input image in pixel format. It does downsampling from the image data, so it is much - /// more memory efficient and friendly. Choose to use downsampling as possible as you can. - /// - /// The pointsize should be smaller than the size of input image. If it is larger than the - /// original image size, the result image will be the same size of input without downsampling. - public static func downsampledImage(data: Data, to pointSize: CGSize, scale: CGFloat) -> KFCrossPlatformImage? { - let imageSourceOptions = [kCGImageSourceShouldCache: false] as CFDictionary - guard let imageSource = CGImageSourceCreateWithData(data as CFData, imageSourceOptions) else { - return nil - } - - let maxDimensionInPixels = max(pointSize.width, pointSize.height) * scale - let downsampleOptions: [CFString : Any] = [ - kCGImageSourceCreateThumbnailFromImageAlways: true, - kCGImageSourceShouldCacheImmediately: true, - kCGImageSourceCreateThumbnailWithTransform: true, - kCGImageSourceThumbnailMaxPixelSize: maxDimensionInPixels - ] - guard let downsampledImage = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, downsampleOptions as CFDictionary) else { - return nil - } - return KingfisherWrapper.image(cgImage: downsampledImage, scale: scale, refImage: nil) - } -} diff --git a/Pods/Kingfisher/Sources/Image/ImageDrawing.swift b/Pods/Kingfisher/Sources/Image/ImageDrawing.swift deleted file mode 100644 index 25e5313..0000000 --- a/Pods/Kingfisher/Sources/Image/ImageDrawing.swift +++ /dev/null @@ -1,636 +0,0 @@ -// -// ImageDrawing.swift -// Kingfisher -// -// Created by onevcat on 2018/09/28. -// -// Copyright (c) 2019 Wei Wang -// -// 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 Accelerate - -#if canImport(AppKit) && !targetEnvironment(macCatalyst) -import AppKit -#endif -#if canImport(UIKit) -import UIKit -#endif - -// MARK: - Image Transforming -extension KingfisherWrapper where Base: KFCrossPlatformImage { - // MARK: Blend Mode - /// Create image from `base` image and apply blend mode. - /// - /// - parameter blendMode: The blend mode of creating image. - /// - parameter alpha: The alpha should be used for image. - /// - parameter backgroundColor: The background color for the output image. - /// - /// - returns: An image with blend mode applied. - /// - /// - Note: This method only works for CG-based image. - #if !os(macOS) - public func image(withBlendMode blendMode: CGBlendMode, - alpha: CGFloat = 1.0, - backgroundColor: KFCrossPlatformColor? = nil) -> KFCrossPlatformImage - { - guard let _ = cgImage else { - assertionFailure("[Kingfisher] Blend mode image only works for CG-based image.") - return base - } - - let rect = CGRect(origin: .zero, size: size) - return draw(to: rect.size, inverting: false) { _ in - if let backgroundColor = backgroundColor { - backgroundColor.setFill() - UIRectFill(rect) - } - - base.draw(in: rect, blendMode: blendMode, alpha: alpha) - return false - } - } - #endif - - #if os(macOS) - // MARK: Compositing - /// Creates image from `base` image and apply compositing operation. - /// - /// - Parameters: - /// - compositingOperation: The compositing operation of creating image. - /// - alpha: The alpha should be used for image. - /// - backgroundColor: The background color for the output image. - /// - Returns: An image with compositing operation applied. - /// - /// - Note: This method only works for CG-based image. For any non-CG-based image, `base` itself is returned. - public func image(withCompositingOperation compositingOperation: NSCompositingOperation, - alpha: CGFloat = 1.0, - backgroundColor: KFCrossPlatformColor? = nil) -> KFCrossPlatformImage - { - guard let _ = cgImage else { - assertionFailure("[Kingfisher] Compositing Operation image only works for CG-based image.") - return base - } - - let rect = CGRect(origin: .zero, size: size) - return draw(to: rect.size, inverting: false) { _ in - if let backgroundColor = backgroundColor { - backgroundColor.setFill() - rect.fill() - } - base.draw(in: rect, from: .zero, operation: compositingOperation, fraction: alpha) - return false - } - } - #endif - - // MARK: Round Corner - - /// Creates a round corner image from on `base` image. - /// - /// - Parameters: - /// - radius: The round corner radius of creating image. - /// - size: The target size of creating image. - /// - corners: The target corners which will be applied rounding. - /// - backgroundColor: The background color for the output image - /// - Returns: An image with round corner of `self`. - /// - /// - Note: This method only works for CG-based image. The current image scale is kept. - /// For any non-CG-based image, `base` itself is returned. - public func image( - withRadius radius: Radius, - fit size: CGSize, - roundingCorners corners: RectCorner = .all, - backgroundColor: KFCrossPlatformColor? = nil - ) -> KFCrossPlatformImage - { - - guard let _ = cgImage else { - assertionFailure("[Kingfisher] Round corner image only works for CG-based image.") - return base - } - - let rect = CGRect(origin: CGPoint(x: 0, y: 0), size: size) - return draw(to: size, inverting: false) { _ in - #if os(macOS) - if let backgroundColor = backgroundColor { - let rectPath = NSBezierPath(rect: rect) - backgroundColor.setFill() - rectPath.fill() - } - - let path = pathForRoundCorner(rect: rect, radius: radius, corners: corners) - path.addClip() - base.draw(in: rect) - #else - guard let context = UIGraphicsGetCurrentContext() else { - assertionFailure("[Kingfisher] Failed to create CG context for image.") - return false - } - - if let backgroundColor = backgroundColor { - let rectPath = UIBezierPath(rect: rect) - backgroundColor.setFill() - rectPath.fill() - } - - let path = pathForRoundCorner(rect: rect, radius: radius, corners: corners) - context.addPath(path.cgPath) - context.clip() - base.draw(in: rect) - #endif - return false - } - } - - /// Creates a round corner image from on `base` image. - /// - /// - Parameters: - /// - radius: The round corner radius of creating image. - /// - size: The target size of creating image. - /// - corners: The target corners which will be applied rounding. - /// - backgroundColor: The background color for the output image - /// - Returns: An image with round corner of `self`. - /// - /// - Note: This method only works for CG-based image. The current image scale is kept. - /// For any non-CG-based image, `base` itself is returned. - public func image( - withRoundRadius radius: CGFloat, - fit size: CGSize, - roundingCorners corners: RectCorner = .all, - backgroundColor: KFCrossPlatformColor? = nil - ) -> KFCrossPlatformImage - { - image(withRadius: .point(radius), fit: size, roundingCorners: corners, backgroundColor: backgroundColor) - } - - #if os(macOS) - func pathForRoundCorner(rect: CGRect, radius: Radius, corners: RectCorner, offsetBase: CGFloat = 0) -> NSBezierPath { - let cornerRadius = radius.compute(with: rect.size) - let path = NSBezierPath(roundedRect: rect, byRoundingCorners: corners, radius: cornerRadius - offsetBase / 2) - path.windingRule = .evenOdd - return path - } - #else - func pathForRoundCorner(rect: CGRect, radius: Radius, corners: RectCorner, offsetBase: CGFloat = 0) -> UIBezierPath { - let cornerRadius = radius.compute(with: rect.size) - return UIBezierPath( - roundedRect: rect, - byRoundingCorners: corners.uiRectCorner, - cornerRadii: CGSize( - width: cornerRadius - offsetBase / 2, - height: cornerRadius - offsetBase / 2 - ) - ) - } - #endif - - #if os(iOS) || os(tvOS) - func resize(to size: CGSize, for contentMode: UIView.ContentMode) -> KFCrossPlatformImage { - switch contentMode { - case .scaleAspectFit: - return resize(to: size, for: .aspectFit) - case .scaleAspectFill: - return resize(to: size, for: .aspectFill) - default: - return resize(to: size) - } - } - #endif - - // MARK: Resizing - /// Resizes `base` image to an image with new size. - /// - /// - Parameter size: The target size in point. - /// - Returns: An image with new size. - /// - Note: This method only works for CG-based image. The current image scale is kept. - /// For any non-CG-based image, `base` itself is returned. - public func resize(to size: CGSize) -> KFCrossPlatformImage { - guard let _ = cgImage else { - assertionFailure("[Kingfisher] Resize only works for CG-based image.") - return base - } - - let rect = CGRect(origin: CGPoint(x: 0, y: 0), size: size) - return draw(to: size, inverting: false) { _ in - #if os(macOS) - base.draw(in: rect, from: .zero, operation: .copy, fraction: 1.0) - #else - base.draw(in: rect) - #endif - return false - } - } - - /// Resizes `base` image to an image of new size, respecting the given content mode. - /// - /// - Parameters: - /// - targetSize: The target size in point. - /// - contentMode: Content mode of output image should be. - /// - Returns: An image with new size. - /// - /// - Note: This method only works for CG-based image. The current image scale is kept. - /// For any non-CG-based image, `base` itself is returned. - public func resize(to targetSize: CGSize, for contentMode: ContentMode) -> KFCrossPlatformImage { - let newSize = size.kf.resize(to: targetSize, for: contentMode) - return resize(to: newSize) - } - - // MARK: Cropping - /// Crops `base` image to a new size with a given anchor. - /// - /// - Parameters: - /// - size: The target size. - /// - anchor: The anchor point from which the size should be calculated. - /// - Returns: An image with new size. - /// - /// - Note: This method only works for CG-based image. The current image scale is kept. - /// For any non-CG-based image, `base` itself is returned. - public func crop(to size: CGSize, anchorOn anchor: CGPoint) -> KFCrossPlatformImage { - guard let cgImage = cgImage else { - assertionFailure("[Kingfisher] Crop only works for CG-based image.") - return base - } - - let rect = self.size.kf.constrainedRect(for: size, anchor: anchor) - guard let image = cgImage.cropping(to: rect.scaled(scale)) else { - assertionFailure("[Kingfisher] Cropping image failed.") - return base - } - - return KingfisherWrapper.image(cgImage: image, scale: scale, refImage: base) - } - - // MARK: Blur - /// Creates an image with blur effect based on `base` image. - /// - /// - Parameter radius: The blur radius should be used when creating blur effect. - /// - Returns: An image with blur effect applied. - /// - /// - Note: This method only works for CG-based image. The current image scale is kept. - /// For any non-CG-based image, `base` itself is returned. - public func blurred(withRadius radius: CGFloat) -> KFCrossPlatformImage { - - guard let cgImage = cgImage else { - assertionFailure("[Kingfisher] Blur only works for CG-based image.") - return base - } - - // http://www.w3.org/TR/SVG/filters.html#feGaussianBlurElement - // let d = floor(s * 3*sqrt(2*pi)/4 + 0.5) - // if d is odd, use three box-blurs of size 'd', centered on the output pixel. - let s = max(radius, 2.0) - // We will do blur on a resized image (*0.5), so the blur radius could be half as well. - - // Fix the slow compiling time for Swift 3. - // See https://github.com/onevcat/Kingfisher/issues/611 - let pi2 = 2 * CGFloat.pi - let sqrtPi2 = sqrt(pi2) - var targetRadius = floor(s * 3.0 * sqrtPi2 / 4.0 + 0.5) - - if targetRadius.isEven { targetRadius += 1 } - - // Determine necessary iteration count by blur radius. - let iterations: Int - if radius < 0.5 { - iterations = 1 - } else if radius < 1.5 { - iterations = 2 - } else { - iterations = 3 - } - - let w = Int(size.width) - let h = Int(size.height) - - func createEffectBuffer(_ context: CGContext) -> vImage_Buffer { - let data = context.data - let width = vImagePixelCount(context.width) - let height = vImagePixelCount(context.height) - let rowBytes = context.bytesPerRow - - return vImage_Buffer(data: data, height: height, width: width, rowBytes: rowBytes) - } - GraphicsContext.begin(size: size, scale: scale) - guard let context = GraphicsContext.current(size: size, scale: scale, inverting: true, cgImage: cgImage) else { - assertionFailure("[Kingfisher] Failed to create CG context for blurring image.") - return base - } - context.draw(cgImage, in: CGRect(x: 0, y: 0, width: w, height: h)) - GraphicsContext.end() - - var inBuffer = createEffectBuffer(context) - - GraphicsContext.begin(size: size, scale: scale) - guard let outContext = GraphicsContext.current(size: size, scale: scale, inverting: true, cgImage: cgImage) else { - assertionFailure("[Kingfisher] Failed to create CG context for blurring image.") - return base - } - defer { GraphicsContext.end() } - var outBuffer = createEffectBuffer(outContext) - - for _ in 0 ..< iterations { - let flag = vImage_Flags(kvImageEdgeExtend) - vImageBoxConvolve_ARGB8888( - &inBuffer, &outBuffer, nil, 0, 0, UInt32(targetRadius), UInt32(targetRadius), nil, flag) - // Next inBuffer should be the outButter of current iteration - (inBuffer, outBuffer) = (outBuffer, inBuffer) - } - - #if os(macOS) - let result = outContext.makeImage().flatMap { - fixedForRetinaPixel(cgImage: $0, to: size) - } - #else - let result = outContext.makeImage().flatMap { - KFCrossPlatformImage(cgImage: $0, scale: base.scale, orientation: base.imageOrientation) - } - #endif - guard let blurredImage = result else { - assertionFailure("[Kingfisher] Can not make an blurred image within this context.") - return base - } - - return blurredImage - } - - public func addingBorder(_ border: Border) -> KFCrossPlatformImage - { - guard let _ = cgImage else { - assertionFailure("[Kingfisher] Blend mode image only works for CG-based image.") - return base - } - - let rect = CGRect(origin: .zero, size: size) - return draw(to: rect.size, inverting: false) { context in - - #if os(macOS) - base.draw(in: rect) - #else - base.draw(in: rect, blendMode: .normal, alpha: 1.0) - #endif - - - let strokeRect = rect.insetBy(dx: border.lineWidth / 2, dy: border.lineWidth / 2) - context.setStrokeColor(border.color.cgColor) - context.setAlpha(border.color.rgba.a) - - let line = pathForRoundCorner( - rect: strokeRect, - radius: border.radius, - corners: border.roundingCorners, - offsetBase: border.lineWidth - ) - line.lineCapStyle = .square - line.lineWidth = border.lineWidth - line.stroke() - - return false - } - } - - // MARK: Overlay - /// Creates an image from `base` image with a color overlay layer. - /// - /// - Parameters: - /// - color: The color should be use to overlay. - /// - fraction: Fraction of input color. From 0.0 to 1.0. 0.0 means solid color, - /// 1.0 means transparent overlay. - /// - Returns: An image with a color overlay applied. - /// - /// - Note: This method only works for CG-based image. The current image scale is kept. - /// For any non-CG-based image, `base` itself is returned. - public func overlaying(with color: KFCrossPlatformColor, fraction: CGFloat) -> KFCrossPlatformImage { - - guard let _ = cgImage else { - assertionFailure("[Kingfisher] Overlaying only works for CG-based image.") - return base - } - - let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height) - return draw(to: rect.size, inverting: false) { context in - #if os(macOS) - base.draw(in: rect) - if fraction > 0 { - color.withAlphaComponent(1 - fraction).set() - rect.fill(using: .sourceAtop) - } - #else - color.set() - UIRectFill(rect) - base.draw(in: rect, blendMode: .destinationIn, alpha: 1.0) - - if fraction > 0 { - base.draw(in: rect, blendMode: .sourceAtop, alpha: fraction) - } - #endif - return false - } - } - - // MARK: Tint - /// Creates an image from `base` image with a color tint. - /// - /// - Parameter color: The color should be used to tint `base` - /// - Returns: An image with a color tint applied. - public func tinted(with color: KFCrossPlatformColor) -> KFCrossPlatformImage { - #if os(watchOS) - return base - #else - return apply(.tint(color)) - #endif - } - - // MARK: Color Control - - /// Create an image from `self` with color control. - /// - /// - Parameters: - /// - brightness: Brightness changing to image. - /// - contrast: Contrast changing to image. - /// - saturation: Saturation changing to image. - /// - inputEV: InputEV changing to image. - /// - Returns: An image with color control applied. - public func adjusted(brightness: CGFloat, contrast: CGFloat, saturation: CGFloat, inputEV: CGFloat) -> KFCrossPlatformImage { - #if os(watchOS) - return base - #else - return apply(.colorControl((brightness, contrast, saturation, inputEV))) - #endif - } - - /// Return an image with given scale. - /// - /// - Parameter scale: Target scale factor the new image should have. - /// - Returns: The image with target scale. If the base image is already in the scale, `base` will be returned. - public func scaled(to scale: CGFloat) -> KFCrossPlatformImage { - guard scale != self.scale else { - return base - } - guard let cgImage = cgImage else { - assertionFailure("[Kingfisher] Scaling only works for CG-based image.") - return base - } - return KingfisherWrapper.image(cgImage: cgImage, scale: scale, refImage: base) - } -} - -// MARK: - Decoding Image -extension KingfisherWrapper where Base: KFCrossPlatformImage { - - /// Returns the decoded image of the `base` image. It will draw the image in a plain context and return the data - /// from it. This could improve the drawing performance when an image is just created from data but not yet - /// displayed for the first time. - /// - /// - Note: This method only works for CG-based image. The current image scale is kept. - /// For any non-CG-based image or animated image, `base` itself is returned. - public var decoded: KFCrossPlatformImage { return decoded(scale: scale) } - - /// Returns decoded image of the `base` image at a given scale. It will draw the image in a plain context and - /// return the data from it. This could improve the drawing performance when an image is just created from - /// data but not yet displayed for the first time. - /// - /// - Parameter scale: The given scale of target image should be. - /// - Returns: The decoded image ready to be displayed. - /// - /// - Note: This method only works for CG-based image. The current image scale is kept. - /// For any non-CG-based image or animated image, `base` itself is returned. - public func decoded(scale: CGFloat) -> KFCrossPlatformImage { - // Prevent animated image (GIF) losing it's images - #if os(iOS) - if frameSource != nil { return base } - #else - if images != nil { return base } - #endif - - guard let imageRef = cgImage else { - assertionFailure("[Kingfisher] Decoding only works for CG-based image.") - return base - } - - let size = CGSize(width: CGFloat(imageRef.width) / scale, height: CGFloat(imageRef.height) / scale) - return draw(to: size, inverting: true, scale: scale) { context in - context.draw(imageRef, in: CGRect(origin: .zero, size: size)) - return true - } - } - - /// Returns decoded image of the `base` image at a given scale. It will draw the image in a plain context and - /// return the data from it. This could improve the drawing performance when an image is just created from - /// data but not yet displayed for the first time. - /// - /// - Parameter context: The context for drawing. - /// - Returns: The decoded image ready to be displayed. - /// - /// - Note: This method only works for CG-based image. The current image scale is kept. - /// For any non-CG-based image or animated image, `base` itself is returned. - public func decoded(on context: CGContext) -> KFCrossPlatformImage { - // Prevent animated image (GIF) losing it's images - #if os(iOS) - if frameSource != nil { return base } - #else - if images != nil { return base } - #endif - - guard let refImage = cgImage, - let decodedRefImage = refImage.decoded(on: context, scale: scale) else - { - assertionFailure("[Kingfisher] Decoding only works for CG-based image.") - return base - } - return KingfisherWrapper.image(cgImage: decodedRefImage, scale: scale, refImage: base) - } -} - -extension CGImage { - func decoded(on context: CGContext, scale: CGFloat) -> CGImage? { - let size = CGSize(width: CGFloat(self.width) / scale, height: CGFloat(self.height) / scale) - context.draw(self, in: CGRect(origin: .zero, size: size)) - guard let decodedImageRef = context.makeImage() else { - return nil - } - return decodedImageRef - } -} - -extension KingfisherWrapper where Base: KFCrossPlatformImage { - func draw( - to size: CGSize, - inverting: Bool, - scale: CGFloat? = nil, - refImage: KFCrossPlatformImage? = nil, - draw: (CGContext) -> Bool // Whether use the refImage (`true`) or ignore image orientation (`false`) - ) -> KFCrossPlatformImage - { - #if os(macOS) || os(watchOS) - let targetScale = scale ?? self.scale - GraphicsContext.begin(size: size, scale: targetScale) - guard let context = GraphicsContext.current(size: size, scale: targetScale, inverting: inverting, cgImage: cgImage) else { - assertionFailure("[Kingfisher] Failed to create CG context for blurring image.") - return base - } - defer { GraphicsContext.end() } - let useRefImage = draw(context) - guard let cgImage = context.makeImage() else { - return base - } - let ref = useRefImage ? (refImage ?? base) : nil - return KingfisherWrapper.image(cgImage: cgImage, scale: targetScale, refImage: ref) - #else - - let format = UIGraphicsImageRendererFormat.preferred() - format.scale = scale ?? self.scale - let renderer = UIGraphicsImageRenderer(size: size, format: format) - - var useRefImage: Bool = false - let image = renderer.image { rendererContext in - - let context = rendererContext.cgContext - if inverting { // If drawing a CGImage, we need to make context flipped. - context.scaleBy(x: 1.0, y: -1.0) - context.translateBy(x: 0, y: -size.height) - } - - useRefImage = draw(context) - } - if useRefImage { - guard let cgImage = image.cgImage else { - return base - } - let ref = refImage ?? base - return KingfisherWrapper.image(cgImage: cgImage, scale: format.scale, refImage: ref) - } else { - return image - } - #endif - } - - #if os(macOS) - func fixedForRetinaPixel(cgImage: CGImage, to size: CGSize) -> KFCrossPlatformImage { - - let image = KFCrossPlatformImage(cgImage: cgImage, size: base.size) - let rect = CGRect(origin: CGPoint(x: 0, y: 0), size: size) - - return draw(to: self.size, inverting: false) { context in - image.draw(in: rect, from: .zero, operation: .copy, fraction: 1.0) - return false - } - } - #endif -} diff --git a/Pods/Kingfisher/Sources/Image/ImageFormat.swift b/Pods/Kingfisher/Sources/Image/ImageFormat.swift deleted file mode 100644 index 464a855..0000000 --- a/Pods/Kingfisher/Sources/Image/ImageFormat.swift +++ /dev/null @@ -1,130 +0,0 @@ -// -// ImageFormat.swift -// Kingfisher -// -// Created by onevcat on 2018/09/28. -// -// Copyright (c) 2019 Wei Wang -// -// 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 - -/// Represents image format. -/// -/// - unknown: The format cannot be recognized or not supported yet. -/// - PNG: PNG image format. -/// - JPEG: JPEG image format. -/// - GIF: GIF image format. -public enum ImageFormat { - /// The format cannot be recognized or not supported yet. - case unknown - /// PNG image format. - case PNG - /// JPEG image format. - case JPEG - /// GIF image format. - case GIF - - struct HeaderData { - static var PNG: [UInt8] = [0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A] - static var JPEG_SOI: [UInt8] = [0xFF, 0xD8] - static var JPEG_IF: [UInt8] = [0xFF] - static var GIF: [UInt8] = [0x47, 0x49, 0x46] - } - - /// https://en.wikipedia.org/wiki/JPEG - public enum JPEGMarker { - case SOF0 //baseline - case SOF2 //progressive - case DHT //Huffman Table - case DQT //Quantization Table - case DRI //Restart Interval - case SOS //Start Of Scan - case RSTn(UInt8) //Restart - case APPn //Application-specific - case COM //Comment - case EOI //End Of Image - - var bytes: [UInt8] { - switch self { - case .SOF0: return [0xFF, 0xC0] - case .SOF2: return [0xFF, 0xC2] - case .DHT: return [0xFF, 0xC4] - case .DQT: return [0xFF, 0xDB] - case .DRI: return [0xFF, 0xDD] - case .SOS: return [0xFF, 0xDA] - case .RSTn(let n): return [0xFF, 0xD0 + n] - case .APPn: return [0xFF, 0xE0] - case .COM: return [0xFF, 0xFE] - case .EOI: return [0xFF, 0xD9] - } - } - } -} - - -extension Data: KingfisherCompatibleValue {} - -// MARK: - Misc Helpers -extension KingfisherWrapper where Base == Data { - /// Gets the image format corresponding to the data. - public var imageFormat: ImageFormat { - guard base.count > 8 else { return .unknown } - - var buffer = [UInt8](repeating: 0, count: 8) - base.copyBytes(to: &buffer, count: 8) - - if buffer == ImageFormat.HeaderData.PNG { - return .PNG - - } else if buffer[0] == ImageFormat.HeaderData.JPEG_SOI[0], - buffer[1] == ImageFormat.HeaderData.JPEG_SOI[1], - buffer[2] == ImageFormat.HeaderData.JPEG_IF[0] - { - return .JPEG - - } else if buffer[0] == ImageFormat.HeaderData.GIF[0], - buffer[1] == ImageFormat.HeaderData.GIF[1], - buffer[2] == ImageFormat.HeaderData.GIF[2] - { - return .GIF - } - - return .unknown - } - - public func contains(jpeg marker: ImageFormat.JPEGMarker) -> Bool { - guard imageFormat == .JPEG else { - return false - } - - let bytes = [UInt8](base) - let markerBytes = marker.bytes - for (index, item) in bytes.enumerated() where bytes.count > index + 1 { - guard - item == markerBytes.first, - bytes[index + 1] == markerBytes[1] else { - continue - } - return true - } - return false - } -} diff --git a/Pods/Kingfisher/Sources/Image/ImageProcessor.swift b/Pods/Kingfisher/Sources/Image/ImageProcessor.swift deleted file mode 100644 index 0a5dc0b..0000000 --- a/Pods/Kingfisher/Sources/Image/ImageProcessor.swift +++ /dev/null @@ -1,922 +0,0 @@ -// -// ImageProcessor.swift -// Kingfisher -// -// Created by Wei Wang on 2016/08/26. -// -// Copyright (c) 2019 Wei Wang -// -// 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 -import CoreGraphics - -#if canImport(AppKit) && !targetEnvironment(macCatalyst) -import AppKit -#else -import UIKit -#endif - -/// Represents an item which could be processed by an `ImageProcessor`. -/// -/// - image: Input image. The processor should provide a way to apply -/// processing on this `image` and return the result image. -/// - data: Input data. The processor should provide a way to apply -/// processing on this `data` and return the result image. -public enum ImageProcessItem { - - /// Input image. The processor should provide a way to apply - /// processing on this `image` and return the result image. - case image(KFCrossPlatformImage) - - /// Input data. The processor should provide a way to apply - /// processing on this `data` and return the result image. - case data(Data) -} - -/// An `ImageProcessor` would be used to convert some downloaded data to an image. -public protocol ImageProcessor { - /// Identifier of the processor. It will be used to identify the processor when - /// caching and retrieving an image. You might want to make sure that processors with - /// same properties/functionality have the same identifiers, so correct processed images - /// could be retrieved with proper key. - /// - /// - Note: Do not supply an empty string for a customized processor, which is already reserved by - /// the `DefaultImageProcessor`. It is recommended to use a reverse domain name notation string of - /// your own for the identifier. - var identifier: String { get } - - /// Processes the input `ImageProcessItem` with this processor. - /// - /// - Parameters: - /// - item: Input item which will be processed by `self`. - /// - options: The parsed options when processing the item. - /// - Returns: The processed image. - /// - /// - Note: The return value should be `nil` if processing failed while converting an input item to image. - /// If `nil` received by the processing caller, an error will be reported and the process flow stops. - /// If the processing flow is not critical for your flow, then when the input item is already an image - /// (`.image` case) and there is any errors in the processing, you could return the input image itself - /// to keep the processing pipeline continuing. - /// - Note: Most processor only supports CG-based images. watchOS is not supported for processors containing - /// a filter, the input image will be returned directly on watchOS. - func process(item: ImageProcessItem, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? -} - -extension ImageProcessor { - - /// Appends an `ImageProcessor` to another. The identifier of the new `ImageProcessor` - /// will be "\(self.identifier)|>\(another.identifier)". - /// - /// - Parameter another: An `ImageProcessor` you want to append to `self`. - /// - Returns: The new `ImageProcessor` will process the image in the order - /// of the two processors concatenated. - public func append(another: ImageProcessor) -> ImageProcessor { - let newIdentifier = identifier.appending("|>\(another.identifier)") - return GeneralProcessor(identifier: newIdentifier) { - item, options in - if let image = self.process(item: item, options: options) { - return another.process(item: .image(image), options: options) - } else { - return nil - } - } - } -} - -func ==(left: ImageProcessor, right: ImageProcessor) -> Bool { - return left.identifier == right.identifier -} - -func !=(left: ImageProcessor, right: ImageProcessor) -> Bool { - return !(left == right) -} - -typealias ProcessorImp = ((ImageProcessItem, KingfisherParsedOptionsInfo) -> KFCrossPlatformImage?) -struct GeneralProcessor: ImageProcessor { - let identifier: String - let p: ProcessorImp - func process(item: ImageProcessItem, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? { - return p(item, options) - } -} - -/// The default processor. It converts the input data to a valid image. -/// Images of .PNG, .JPEG and .GIF format are supported. -/// If an image item is given as `.image` case, `DefaultImageProcessor` will -/// do nothing on it and return the associated image. -public struct DefaultImageProcessor: ImageProcessor { - - /// A default `DefaultImageProcessor` could be used across. - public static let `default` = DefaultImageProcessor() - - /// Identifier of the processor. - /// - Note: See documentation of `ImageProcessor` protocol for more. - public let identifier = "" - - /// Creates a `DefaultImageProcessor`. Use `DefaultImageProcessor.default` to get an instance, - /// if you do not have a good reason to create your own `DefaultImageProcessor`. - public init() {} - - /// Processes the input `ImageProcessItem` with this processor. - /// - /// - Parameters: - /// - item: Input item which will be processed by `self`. - /// - options: Options when processing the item. - /// - Returns: The processed image. - /// - /// - Note: See documentation of `ImageProcessor` protocol for more. - public func process(item: ImageProcessItem, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? { - switch item { - case .image(let image): - return image.kf.scaled(to: options.scaleFactor) - case .data(let data): - return KingfisherWrapper.image(data: data, options: options.imageCreatingOptions) - } - } -} - -/// Represents the rect corner setting when processing a round corner image. -public struct RectCorner: OptionSet { - - /// Raw value of the rect corner. - public let rawValue: Int - - /// Represents the top left corner. - public static let topLeft = RectCorner(rawValue: 1 << 0) - - /// Represents the top right corner. - public static let topRight = RectCorner(rawValue: 1 << 1) - - /// Represents the bottom left corner. - public static let bottomLeft = RectCorner(rawValue: 1 << 2) - - /// Represents the bottom right corner. - public static let bottomRight = RectCorner(rawValue: 1 << 3) - - /// Represents all corners. - public static let all: RectCorner = [.topLeft, .topRight, .bottomLeft, .bottomRight] - - /// Creates a `RectCorner` option set with a given value. - /// - /// - Parameter rawValue: The value represents a certain corner option. - public init(rawValue: Int) { - self.rawValue = rawValue - } - - var cornerIdentifier: String { - if self == .all { - return "" - } - return "_corner(\(rawValue))" - } -} - -#if !os(macOS) -/// Processor for adding an blend mode to images. Only CG-based images are supported. -public struct BlendImageProcessor: ImageProcessor { - - /// Identifier of the processor. - /// - Note: See documentation of `ImageProcessor` protocol for more. - public let identifier: String - - /// Blend Mode will be used to blend the input image. - public let blendMode: CGBlendMode - - /// Alpha will be used when blend image. - public let alpha: CGFloat - - /// Background color of the output image. If `nil`, it will stay transparent. - public let backgroundColor: KFCrossPlatformColor? - - /// Creates a `BlendImageProcessor`. - /// - /// - Parameters: - /// - blendMode: Blend Mode will be used to blend the input image. - /// - alpha: Alpha will be used when blend image. From 0.0 to 1.0. 1.0 means solid image, - /// 0.0 means transparent image (not visible at all). Default is 1.0. - /// - backgroundColor: Background color to apply for the output image. Default is `nil`. - public init(blendMode: CGBlendMode, alpha: CGFloat = 1.0, backgroundColor: KFCrossPlatformColor? = nil) { - self.blendMode = blendMode - self.alpha = alpha - self.backgroundColor = backgroundColor - var identifier = "com.onevcat.Kingfisher.BlendImageProcessor(\(blendMode.rawValue),\(alpha))" - if let color = backgroundColor { - identifier.append("_\(color.rgbaDescription)") - } - self.identifier = identifier - } - - /// Processes the input `ImageProcessItem` with this processor. - /// - /// - Parameters: - /// - item: Input item which will be processed by `self`. - /// - options: Options when processing the item. - /// - Returns: The processed image. - /// - /// - Note: See documentation of `ImageProcessor` protocol for more. - public func process(item: ImageProcessItem, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? { - switch item { - case .image(let image): - return image.kf.scaled(to: options.scaleFactor) - .kf.image(withBlendMode: blendMode, alpha: alpha, backgroundColor: backgroundColor) - case .data: - return (DefaultImageProcessor.default |> self).process(item: item, options: options) - } - } -} -#endif - -#if os(macOS) -/// Processor for adding an compositing operation to images. Only CG-based images are supported in macOS. -public struct CompositingImageProcessor: ImageProcessor { - - /// Identifier of the processor. - /// - Note: See documentation of `ImageProcessor` protocol for more. - public let identifier: String - - /// Compositing operation will be used to the input image. - public let compositingOperation: NSCompositingOperation - - /// Alpha will be used when compositing image. - public let alpha: CGFloat - - /// Background color of the output image. If `nil`, it will stay transparent. - public let backgroundColor: KFCrossPlatformColor? - - /// Creates a `CompositingImageProcessor` - /// - /// - Parameters: - /// - compositingOperation: Compositing operation will be used to the input image. - /// - alpha: Alpha will be used when compositing image. - /// From 0.0 to 1.0. 1.0 means solid image, 0.0 means transparent image. - /// Default is 1.0. - /// - backgroundColor: Background color to apply for the output image. Default is `nil`. - public init(compositingOperation: NSCompositingOperation, - alpha: CGFloat = 1.0, - backgroundColor: KFCrossPlatformColor? = nil) - { - self.compositingOperation = compositingOperation - self.alpha = alpha - self.backgroundColor = backgroundColor - var identifier = "com.onevcat.Kingfisher.CompositingImageProcessor(\(compositingOperation.rawValue),\(alpha))" - if let color = backgroundColor { - identifier.append("_\(color.rgbaDescription)") - } - self.identifier = identifier - } - - /// Processes the input `ImageProcessItem` with this processor. - /// - /// - Parameters: - /// - item: Input item which will be processed by `self`. - /// - options: Options when processing the item. - /// - Returns: The processed image. - /// - /// - Note: See documentation of `ImageProcessor` protocol for more. - public func process(item: ImageProcessItem, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? { - switch item { - case .image(let image): - return image.kf.scaled(to: options.scaleFactor) - .kf.image( - withCompositingOperation: compositingOperation, - alpha: alpha, - backgroundColor: backgroundColor) - case .data: - return (DefaultImageProcessor.default |> self).process(item: item, options: options) - } - } -} -#endif - -/// Represents a radius specified in a `RoundCornerImageProcessor`. -public enum Radius { - /// The radius should be calculated as a fraction of the image width. Typically the associated value should be - /// between 0 and 0.5, where 0 represents no radius and 0.5 represents using half of the image width. - case widthFraction(CGFloat) - /// The radius should be calculated as a fraction of the image height. Typically the associated value should be - /// between 0 and 0.5, where 0 represents no radius and 0.5 represents using half of the image height. - case heightFraction(CGFloat) - /// Use a fixed point value as the round corner radius. - case point(CGFloat) - - var radiusIdentifier: String { - switch self { - case .widthFraction(let f): - return "w_frac_\(f)" - case .heightFraction(let f): - return "h_frac_\(f)" - case .point(let p): - return p.description - } - } - - public func compute(with size: CGSize) -> CGFloat { - let cornerRadius: CGFloat - switch self { - case .point(let point): - cornerRadius = point - case .widthFraction(let widthFraction): - cornerRadius = size.width * widthFraction - case .heightFraction(let heightFraction): - cornerRadius = size.height * heightFraction - } - return cornerRadius - } -} - -/// Processor for making round corner images. Only CG-based images are supported in macOS, -/// if a non-CG image passed in, the processor will do nothing. -/// -/// - Note: The input image will be rendered with round corner pixels removed. If the image itself does not contain -/// alpha channel (for example, a JPEG image), the processed image will contain an alpha channel in memory in order -/// to show correctly. However, when cached to disk, Kingfisher respects the original image format by default. That -/// means the alpha channel will be removed for these images. When you load the processed image from cache again, you -/// will lose transparent corner. -/// -/// You could use `FormatIndicatedCacheSerializer.png` to force Kingfisher to serialize the image to PNG format in this -/// case. -/// -public struct RoundCornerImageProcessor: ImageProcessor { - - /// Identifier of the processor. - /// - Note: See documentation of `ImageProcessor` protocol for more. - public let identifier: String - - /// The radius will be applied in processing. Specify a certain point value with `.point`, or a fraction of the - /// target image with `.widthFraction`. or `.heightFraction`. For example, given a square image with width and - /// height equals, `.widthFraction(0.5)` means use half of the length of size and makes the final image a round one. - public let radius: Radius - - /// The target corners which will be applied rounding. - public let roundingCorners: RectCorner - - /// Target size of output image should be. If `nil`, the image will keep its original size after processing. - public let targetSize: CGSize? - - /// Background color of the output image. If `nil`, it will use a transparent background. - public let backgroundColor: KFCrossPlatformColor? - - /// Creates a `RoundCornerImageProcessor`. - /// - /// - Parameters: - /// - cornerRadius: Corner radius in point will be applied in processing. - /// - targetSize: Target size of output image should be. If `nil`, - /// the image will keep its original size after processing. - /// Default is `nil`. - /// - corners: The target corners which will be applied rounding. Default is `.all`. - /// - backgroundColor: Background color to apply for the output image. Default is `nil`. - /// - /// - Note: - /// - /// This initializer accepts a concrete point value for `cornerRadius`. If you do not know the image size, but still - /// want to apply a full round-corner (making the final image a round one), or specify the corner radius as a - /// fraction of one dimension of the target image, use the `Radius` version instead. - /// - public init( - cornerRadius: CGFloat, - targetSize: CGSize? = nil, - roundingCorners corners: RectCorner = .all, - backgroundColor: KFCrossPlatformColor? = nil - ) - { - let radius = Radius.point(cornerRadius) - self.init(radius: radius, targetSize: targetSize, roundingCorners: corners, backgroundColor: backgroundColor) - } - - /// Creates a `RoundCornerImageProcessor`. - /// - /// - Parameters: - /// - radius: The radius will be applied in processing. - /// - targetSize: Target size of output image should be. If `nil`, - /// the image will keep its original size after processing. - /// Default is `nil`. - /// - corners: The target corners which will be applied rounding. Default is `.all`. - /// - backgroundColor: Background color to apply for the output image. Default is `nil`. - public init( - radius: Radius, - targetSize: CGSize? = nil, - roundingCorners corners: RectCorner = .all, - backgroundColor: KFCrossPlatformColor? = nil - ) - { - self.radius = radius - self.targetSize = targetSize - self.roundingCorners = corners - self.backgroundColor = backgroundColor - - self.identifier = { - var identifier = "" - - if let size = targetSize { - identifier = "com.onevcat.Kingfisher.RoundCornerImageProcessor" + - "(\(radius.radiusIdentifier)_\(size)\(corners.cornerIdentifier))" - } else { - identifier = "com.onevcat.Kingfisher.RoundCornerImageProcessor" + - "(\(radius.radiusIdentifier)\(corners.cornerIdentifier))" - } - if let backgroundColor = backgroundColor { - identifier += "_\(backgroundColor)" - } - - return identifier - }() - } - - /// Processes the input `ImageProcessItem` with this processor. - /// - /// - Parameters: - /// - item: Input item which will be processed by `self`. - /// - options: Options when processing the item. - /// - Returns: The processed image. - /// - /// - Note: See documentation of `ImageProcessor` protocol for more. - public func process(item: ImageProcessItem, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? { - switch item { - case .image(let image): - let size = targetSize ?? image.kf.size - return image.kf.scaled(to: options.scaleFactor) - .kf.image( - withRadius: radius, - fit: size, - roundingCorners: roundingCorners, - backgroundColor: backgroundColor) - case .data: - return (DefaultImageProcessor.default |> self).process(item: item, options: options) - } - } -} - -public struct Border { - public var color: KFCrossPlatformColor - public var lineWidth: CGFloat - - /// The radius will be applied in processing. Specify a certain point value with `.point`, or a fraction of the - /// target image with `.widthFraction`. or `.heightFraction`. For example, given a square image with width and - /// height equals, `.widthFraction(0.5)` means use half of the length of size and makes the final image a round one. - public var radius: Radius - - /// The target corners which will be applied rounding. - public var roundingCorners: RectCorner - - public init( - color: KFCrossPlatformColor = .black, - lineWidth: CGFloat = 4, - radius: Radius = .point(0), - roundingCorners: RectCorner = .all - ) { - self.color = color - self.lineWidth = lineWidth - self.radius = radius - self.roundingCorners = roundingCorners - } - - var identifier: String { - "\(color.rgbaDescription)_\(lineWidth)_\(radius.radiusIdentifier)_\(roundingCorners.cornerIdentifier)" - } -} - -public struct BorderImageProcessor: ImageProcessor { - public var identifier: String { "com.onevcat.Kingfisher.RoundCornerImageProcessor(\(border)" } - public let border: Border - - public init(border: Border) { - self.border = border - } - - public func process(item: ImageProcessItem, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? { - switch item { - case .image(let image): - return image.kf.addingBorder(border) - case .data: - return (DefaultImageProcessor.default |> self).process(item: item, options: options) - } - } -} - -/// Represents how a size adjusts itself to fit a target size. -/// -/// - none: Not scale the content. -/// - aspectFit: Scales the content to fit the size of the view by maintaining the aspect ratio. -/// - aspectFill: Scales the content to fill the size of the view. -public enum ContentMode { - /// Not scale the content. - case none - /// Scales the content to fit the size of the view by maintaining the aspect ratio. - case aspectFit - /// Scales the content to fill the size of the view. - case aspectFill -} - -/// Processor for resizing images. -/// If you need to resize a data represented image to a smaller size, use `DownsamplingImageProcessor` -/// instead, which is more efficient and uses less memory. -public struct ResizingImageProcessor: ImageProcessor { - - /// Identifier of the processor. - /// - Note: See documentation of `ImageProcessor` protocol for more. - public let identifier: String - - /// The reference size for resizing operation in point. - public let referenceSize: CGSize - - /// Target content mode of output image should be. - /// Default is `.none`. - public let targetContentMode: ContentMode - - /// Creates a `ResizingImageProcessor`. - /// - /// - Parameters: - /// - referenceSize: The reference size for resizing operation in point. - /// - mode: Target content mode of output image should be. - /// - /// - Note: - /// The instance of `ResizingImageProcessor` will follow its `mode` property - /// and try to resizing the input images to fit or fill the `referenceSize`. - /// That means if you are using a `mode` besides of `.none`, you may get an - /// image with its size not be the same as the `referenceSize`. - /// - /// **Example**: With input image size: {100, 200}, - /// `referenceSize`: {100, 100}, `mode`: `.aspectFit`, - /// you will get an output image with size of {50, 100}, which "fit"s - /// the `referenceSize`. - /// - /// If you need an output image exactly to be a specified size, append or use - /// a `CroppingImageProcessor`. - public init(referenceSize: CGSize, mode: ContentMode = .none) { - self.referenceSize = referenceSize - self.targetContentMode = mode - - if mode == .none { - self.identifier = "com.onevcat.Kingfisher.ResizingImageProcessor(\(referenceSize))" - } else { - self.identifier = "com.onevcat.Kingfisher.ResizingImageProcessor(\(referenceSize), \(mode))" - } - } - - /// Processes the input `ImageProcessItem` with this processor. - /// - /// - Parameters: - /// - item: Input item which will be processed by `self`. - /// - options: Options when processing the item. - /// - Returns: The processed image. - /// - /// - Note: See documentation of `ImageProcessor` protocol for more. - public func process(item: ImageProcessItem, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? { - switch item { - case .image(let image): - return image.kf.scaled(to: options.scaleFactor) - .kf.resize(to: referenceSize, for: targetContentMode) - case .data: - return (DefaultImageProcessor.default |> self).process(item: item, options: options) - } - } -} - -/// Processor for adding blur effect to images. `Accelerate.framework` is used underhood for -/// a better performance. A simulated Gaussian blur with specified blur radius will be applied. -public struct BlurImageProcessor: ImageProcessor { - - /// Identifier of the processor. - /// - Note: See documentation of `ImageProcessor` protocol for more. - public let identifier: String - - /// Blur radius for the simulated Gaussian blur. - public let blurRadius: CGFloat - - /// Creates a `BlurImageProcessor` - /// - /// - parameter blurRadius: Blur radius for the simulated Gaussian blur. - public init(blurRadius: CGFloat) { - self.blurRadius = blurRadius - self.identifier = "com.onevcat.Kingfisher.BlurImageProcessor(\(blurRadius))" - } - - /// Processes the input `ImageProcessItem` with this processor. - /// - /// - Parameters: - /// - item: Input item which will be processed by `self`. - /// - options: Options when processing the item. - /// - Returns: The processed image. - /// - /// - Note: See documentation of `ImageProcessor` protocol for more. - public func process(item: ImageProcessItem, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? { - switch item { - case .image(let image): - let radius = blurRadius * options.scaleFactor - return image.kf.scaled(to: options.scaleFactor) - .kf.blurred(withRadius: radius) - case .data: - return (DefaultImageProcessor.default |> self).process(item: item, options: options) - } - } -} - -/// Processor for adding an overlay to images. Only CG-based images are supported in macOS. -public struct OverlayImageProcessor: ImageProcessor { - - /// Identifier of the processor. - /// - Note: See documentation of `ImageProcessor` protocol for more. - public let identifier: String - - /// Overlay color will be used to overlay the input image. - public let overlay: KFCrossPlatformColor - - /// Fraction will be used when overlay the color to image. - public let fraction: CGFloat - - /// Creates an `OverlayImageProcessor` - /// - /// - parameter overlay: Overlay color will be used to overlay the input image. - /// - parameter fraction: Fraction will be used when overlay the color to image. - /// From 0.0 to 1.0. 0.0 means solid color, 1.0 means transparent overlay. - public init(overlay: KFCrossPlatformColor, fraction: CGFloat = 0.5) { - self.overlay = overlay - self.fraction = fraction - self.identifier = "com.onevcat.Kingfisher.OverlayImageProcessor(\(overlay.rgbaDescription)_\(fraction))" - } - - /// Processes the input `ImageProcessItem` with this processor. - /// - /// - Parameters: - /// - item: Input item which will be processed by `self`. - /// - options: Options when processing the item. - /// - Returns: The processed image. - /// - /// - Note: See documentation of `ImageProcessor` protocol for more. - public func process(item: ImageProcessItem, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? { - switch item { - case .image(let image): - return image.kf.scaled(to: options.scaleFactor) - .kf.overlaying(with: overlay, fraction: fraction) - case .data: - return (DefaultImageProcessor.default |> self).process(item: item, options: options) - } - } -} - -/// Processor for tint images with color. Only CG-based images are supported. -public struct TintImageProcessor: ImageProcessor { - - /// Identifier of the processor. - /// - Note: See documentation of `ImageProcessor` protocol for more. - public let identifier: String - - /// Tint color will be used to tint the input image. - public let tint: KFCrossPlatformColor - - /// Creates a `TintImageProcessor` - /// - /// - parameter tint: Tint color will be used to tint the input image. - public init(tint: KFCrossPlatformColor) { - self.tint = tint - self.identifier = "com.onevcat.Kingfisher.TintImageProcessor(\(tint.rgbaDescription))" - } - - /// Processes the input `ImageProcessItem` with this processor. - /// - /// - Parameters: - /// - item: Input item which will be processed by `self`. - /// - options: Options when processing the item. - /// - Returns: The processed image. - /// - /// - Note: See documentation of `ImageProcessor` protocol for more. - public func process(item: ImageProcessItem, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? { - switch item { - case .image(let image): - return image.kf.scaled(to: options.scaleFactor) - .kf.tinted(with: tint) - case .data: - return (DefaultImageProcessor.default |> self).process(item: item, options: options) - } - } -} - -/// Processor for applying some color control to images. Only CG-based images are supported. -/// watchOS is not supported. -public struct ColorControlsProcessor: ImageProcessor { - - /// Identifier of the processor. - /// - Note: See documentation of `ImageProcessor` protocol for more. - public let identifier: String - - /// Brightness changing to image. - public let brightness: CGFloat - - /// Contrast changing to image. - public let contrast: CGFloat - - /// Saturation changing to image. - public let saturation: CGFloat - - /// InputEV changing to image. - public let inputEV: CGFloat - - /// Creates a `ColorControlsProcessor` - /// - /// - Parameters: - /// - brightness: Brightness changing to image. - /// - contrast: Contrast changing to image. - /// - saturation: Saturation changing to image. - /// - inputEV: InputEV changing to image. - public init(brightness: CGFloat, contrast: CGFloat, saturation: CGFloat, inputEV: CGFloat) { - self.brightness = brightness - self.contrast = contrast - self.saturation = saturation - self.inputEV = inputEV - self.identifier = "com.onevcat.Kingfisher.ColorControlsProcessor(\(brightness)_\(contrast)_\(saturation)_\(inputEV))" - } - - /// Processes the input `ImageProcessItem` with this processor. - /// - /// - Parameters: - /// - item: Input item which will be processed by `self`. - /// - options: Options when processing the item. - /// - Returns: The processed image. - /// - /// - Note: See documentation of `ImageProcessor` protocol for more. - public func process(item: ImageProcessItem, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? { - switch item { - case .image(let image): - return image.kf.scaled(to: options.scaleFactor) - .kf.adjusted(brightness: brightness, contrast: contrast, saturation: saturation, inputEV: inputEV) - case .data: - return (DefaultImageProcessor.default |> self).process(item: item, options: options) - } - } -} - -/// Processor for applying black and white effect to images. Only CG-based images are supported. -/// watchOS is not supported. -public struct BlackWhiteProcessor: ImageProcessor { - - /// Identifier of the processor. - /// - Note: See documentation of `ImageProcessor` protocol for more. - public let identifier = "com.onevcat.Kingfisher.BlackWhiteProcessor" - - /// Creates a `BlackWhiteProcessor` - public init() {} - - /// Processes the input `ImageProcessItem` with this processor. - /// - /// - Parameters: - /// - item: Input item which will be processed by `self`. - /// - options: Options when processing the item. - /// - Returns: The processed image. - /// - /// - Note: See documentation of `ImageProcessor` protocol for more. - public func process(item: ImageProcessItem, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? { - return ColorControlsProcessor(brightness: 0.0, contrast: 1.0, saturation: 0.0, inputEV: 0.7) - .process(item: item, options: options) - } -} - -/// Processor for cropping an image. Only CG-based images are supported. -/// watchOS is not supported. -public struct CroppingImageProcessor: ImageProcessor { - - /// Identifier of the processor. - /// - Note: See documentation of `ImageProcessor` protocol for more. - public let identifier: String - - /// Target size of output image should be. - public let size: CGSize - - /// Anchor point from which the output size should be calculate. - /// The anchor point is consisted by two values between 0.0 and 1.0. - /// It indicates a related point in current image. - /// See `CroppingImageProcessor.init(size:anchor:)` for more. - public let anchor: CGPoint - - /// Creates a `CroppingImageProcessor`. - /// - /// - Parameters: - /// - size: Target size of output image should be. - /// - anchor: The anchor point from which the size should be calculated. - /// Default is `CGPoint(x: 0.5, y: 0.5)`, which means the center of input image. - /// - Note: - /// The anchor point is consisted by two values between 0.0 and 1.0. - /// It indicates a related point in current image, eg: (0.0, 0.0) for top-left - /// corner, (0.5, 0.5) for center and (1.0, 1.0) for bottom-right corner. - /// The `size` property of `CroppingImageProcessor` will be used along with - /// `anchor` to calculate a target rectangle in the size of image. - /// - /// The target size will be automatically calculated with a reasonable behavior. - /// For example, when you have an image size of `CGSize(width: 100, height: 100)`, - /// and a target size of `CGSize(width: 20, height: 20)`: - /// - with a (0.0, 0.0) anchor (top-left), the crop rect will be `{0, 0, 20, 20}`; - /// - with a (0.5, 0.5) anchor (center), it will be `{40, 40, 20, 20}` - /// - while with a (1.0, 1.0) anchor (bottom-right), it will be `{80, 80, 20, 20}` - public init(size: CGSize, anchor: CGPoint = CGPoint(x: 0.5, y: 0.5)) { - self.size = size - self.anchor = anchor - self.identifier = "com.onevcat.Kingfisher.CroppingImageProcessor(\(size)_\(anchor))" - } - - /// Processes the input `ImageProcessItem` with this processor. - /// - /// - Parameters: - /// - item: Input item which will be processed by `self`. - /// - options: Options when processing the item. - /// - Returns: The processed image. - /// - /// - Note: See documentation of `ImageProcessor` protocol for more. - public func process(item: ImageProcessItem, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? { - switch item { - case .image(let image): - return image.kf.scaled(to: options.scaleFactor) - .kf.crop(to: size, anchorOn: anchor) - case .data: return (DefaultImageProcessor.default |> self).process(item: item, options: options) - } - } -} - -/// Processor for downsampling an image. Compared to `ResizingImageProcessor`, this processor -/// does not render the images to resize. Instead, it downsamples the input data directly to an -/// image. It is a more efficient than `ResizingImageProcessor`. Prefer to use `DownsamplingImageProcessor` as possible -/// as you can than the `ResizingImageProcessor`. -/// -/// Only CG-based images are supported. Animated images (like GIF) is not supported. -public struct DownsamplingImageProcessor: ImageProcessor { - - /// Target size of output image should be. It should be smaller than the size of - /// input image. If it is larger, the result image will be the same size of input - /// data without downsampling. - public let size: CGSize - - /// Identifier of the processor. - /// - Note: See documentation of `ImageProcessor` protocol for more. - public let identifier: String - - /// Creates a `DownsamplingImageProcessor`. - /// - /// - Parameter size: The target size of the downsample operation. - public init(size: CGSize) { - self.size = size - self.identifier = "com.onevcat.Kingfisher.DownsamplingImageProcessor(\(size))" - } - - /// Processes the input `ImageProcessItem` with this processor. - /// - /// - Parameters: - /// - item: Input item which will be processed by `self`. - /// - options: Options when processing the item. - /// - Returns: The processed image. - /// - /// - Note: See documentation of `ImageProcessor` protocol for more. - public func process(item: ImageProcessItem, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? { - switch item { - case .image(let image): - guard let data = image.kf.data(format: .unknown) else { - return nil - } - return KingfisherWrapper.downsampledImage(data: data, to: size, scale: options.scaleFactor) - case .data(let data): - return KingfisherWrapper.downsampledImage(data: data, to: size, scale: options.scaleFactor) - } - } -} - -infix operator |>: AdditionPrecedence -public func |>(left: ImageProcessor, right: ImageProcessor) -> ImageProcessor { - return left.append(another: right) -} - -extension KFCrossPlatformColor { - - var rgba: (r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat) { - var r: CGFloat = 0 - var g: CGFloat = 0 - var b: CGFloat = 0 - var a: CGFloat = 0 - - #if os(macOS) - (usingColorSpace(.extendedSRGB) ?? self).getRed(&r, green: &g, blue: &b, alpha: &a) - #else - getRed(&r, green: &g, blue: &b, alpha: &a) - #endif - - return (r, g, b, a) - } - - var rgbaDescription: String { - let components = self.rgba - return String(format: "(%.2f,%.2f,%.2f,%.2f)", components.r, components.g, components.b, components.a) - } -} diff --git a/Pods/Kingfisher/Sources/Image/ImageProgressive.swift b/Pods/Kingfisher/Sources/Image/ImageProgressive.swift deleted file mode 100644 index a916300..0000000 --- a/Pods/Kingfisher/Sources/Image/ImageProgressive.swift +++ /dev/null @@ -1,348 +0,0 @@ -// -// ImageProgressive.swift -// Kingfisher -// -// Created by lixiang on 2019/5/10. -// -// Copyright (c) 2019 Wei Wang -// -// 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 -import CoreGraphics - -private let sharedProcessingQueue: CallbackQueue = - .dispatch(DispatchQueue(label: "com.onevcat.Kingfisher.ImageDownloader.Process")) - -public struct ImageProgressive { - - /// The updating strategy when an intermediate progressive image is generated and about to be set to the hosting view. - /// - /// - default: Use the progressive image as it is. It is the standard behavior when handling the progressive image. - /// - keepCurrent: Discard this progressive image and keep the current displayed one. - /// - replace: Replace the image to a new one. If the progressive loading is initialized by a view extension in - /// Kingfisher, the replacing image will be used to update the view. - public enum UpdatingStrategy { - case `default` - case keepCurrent - case replace(KFCrossPlatformImage?) - } - - /// A default `ImageProgressive` could be used across. It blurs the progressive loading with the fastest - /// scan enabled and scan interval as 0. - @available(*, deprecated, message: "Getting a default `ImageProgressive` is deprecated due to its syntax symatic is not clear. Use `ImageProgressive.init` instead.", renamed: "init()") - public static let `default` = ImageProgressive( - isBlur: true, - isFastestScan: true, - scanInterval: 0 - ) - - /// Whether to enable blur effect processing - let isBlur: Bool - /// Whether to enable the fastest scan - let isFastestScan: Bool - /// Minimum time interval for each scan - let scanInterval: TimeInterval - - /// Called when an intermediate image is prepared and about to be set to the image view. The return value of this - /// delegate will be used to update the hosting view, if any. Otherwise, if there is no hosting view (a.k.a the - /// image retrieving is not happening from a view extension method), the returned `UpdatingStrategy` is ignored. - public let onImageUpdated = Delegate() - - /// Creates an `ImageProgressive` value with default sets. It blurs the progressive loading with the fastest - /// scan enabled and scan interval as 0. - public init() { - self.init(isBlur: true, isFastestScan: true, scanInterval: 0) - } - - /// Creates an `ImageProgressive` value the given values. - /// - Parameters: - /// - isBlur: Whether to enable blur effect processing. - /// - isFastestScan: Whether to enable the fastest scan. - /// - scanInterval: Minimum time interval for each scan. - public init(isBlur: Bool, - isFastestScan: Bool, - scanInterval: TimeInterval - ) - { - self.isBlur = isBlur - self.isFastestScan = isFastestScan - self.scanInterval = scanInterval - } -} - -final class ImageProgressiveProvider: DataReceivingSideEffect { - - var onShouldApply: () -> Bool = { return true } - - func onDataReceived(_ session: URLSession, task: SessionDataTask, data: Data) { - - DispatchQueue.main.async { - guard self.onShouldApply() else { return } - self.update(data: task.mutableData, with: task.callbacks) - } - } - - private let option: ImageProgressive - private let refresh: (KFCrossPlatformImage) -> Void - - private let decoder: ImageProgressiveDecoder - private let queue = ImageProgressiveSerialQueue() - - init?(_ options: KingfisherParsedOptionsInfo, - refresh: @escaping (KFCrossPlatformImage) -> Void) { - guard let option = options.progressiveJPEG else { return nil } - - self.option = option - self.refresh = refresh - self.decoder = ImageProgressiveDecoder( - option, - processingQueue: options.processingQueue ?? sharedProcessingQueue, - creatingOptions: options.imageCreatingOptions - ) - } - - func update(data: Data, with callbacks: [SessionDataTask.TaskCallback]) { - guard !data.isEmpty else { return } - - queue.add(minimum: option.scanInterval) { completion in - - func decode(_ data: Data) { - self.decoder.decode(data, with: callbacks) { image in - defer { completion() } - guard self.onShouldApply() else { return } - guard let image = image else { return } - self.refresh(image) - } - } - - let semaphore = DispatchSemaphore(value: 0) - var onShouldApply: Bool = false - - CallbackQueue.mainAsync.execute { - onShouldApply = self.onShouldApply() - semaphore.signal() - } - semaphore.wait() - guard onShouldApply else { - self.queue.clean() - completion() - return - } - - if self.option.isFastestScan { - decode(self.decoder.scanning(data) ?? Data()) - } else { - self.decoder.scanning(data).forEach { decode($0) } - } - } - } -} - -private final class ImageProgressiveDecoder { - - private let option: ImageProgressive - private let processingQueue: CallbackQueue - private let creatingOptions: ImageCreatingOptions - private(set) var scannedCount = 0 - private(set) var scannedIndex = -1 - - init(_ option: ImageProgressive, - processingQueue: CallbackQueue, - creatingOptions: ImageCreatingOptions) { - self.option = option - self.processingQueue = processingQueue - self.creatingOptions = creatingOptions - } - - func scanning(_ data: Data) -> [Data] { - guard data.kf.contains(jpeg: .SOF2) else { - return [] - } - guard scannedIndex + 1 < data.count else { - return [] - } - - var datas: [Data] = [] - var index = scannedIndex + 1 - var count = scannedCount - - while index < data.count - 1 { - scannedIndex = index - // 0xFF, 0xDA - Start Of Scan - let SOS = ImageFormat.JPEGMarker.SOS.bytes - if data[index] == SOS[0], data[index + 1] == SOS[1] { - if count > 0 { - datas.append(data[0 ..< index]) - } - count += 1 - } - index += 1 - } - - // Found more scans this the previous time - guard count > scannedCount else { return [] } - scannedCount = count - - // `> 1` checks that we've received a first scan (SOS) and then received - // and also received a second scan (SOS). This way we know that we have - // at least one full scan available. - guard count > 1 else { return [] } - return datas - } - - func scanning(_ data: Data) -> Data? { - guard data.kf.contains(jpeg: .SOF2) else { - return nil - } - guard scannedIndex + 1 < data.count else { - return nil - } - - var index = scannedIndex + 1 - var count = scannedCount - var lastSOSIndex = 0 - - while index < data.count - 1 { - scannedIndex = index - // 0xFF, 0xDA - Start Of Scan - let SOS = ImageFormat.JPEGMarker.SOS.bytes - if data[index] == SOS[0], data[index + 1] == SOS[1] { - lastSOSIndex = index - count += 1 - } - index += 1 - } - - // Found more scans this the previous time - guard count > scannedCount else { return nil } - scannedCount = count - - // `> 1` checks that we've received a first scan (SOS) and then received - // and also received a second scan (SOS). This way we know that we have - // at least one full scan available. - guard count > 1 && lastSOSIndex > 0 else { return nil } - return data[0 ..< lastSOSIndex] - } - - func decode(_ data: Data, - with callbacks: [SessionDataTask.TaskCallback], - completion: @escaping (KFCrossPlatformImage?) -> Void) { - guard data.kf.contains(jpeg: .SOF2) else { - CallbackQueue.mainCurrentOrAsync.execute { completion(nil) } - return - } - - func processing(_ data: Data) { - let processor = ImageDataProcessor( - data: data, - callbacks: callbacks, - processingQueue: processingQueue - ) - processor.onImageProcessed.delegate(on: self) { (self, result) in - guard let image = try? result.0.get() else { - CallbackQueue.mainCurrentOrAsync.execute { completion(nil) } - return - } - - CallbackQueue.mainCurrentOrAsync.execute { completion(image) } - } - processor.process() - } - - // Blur partial images. - let count = scannedCount - - if option.isBlur, count < 6 { - processingQueue.execute { - // Progressively reduce blur as we load more scans. - let image = KingfisherWrapper.image( - data: data, - options: self.creatingOptions - ) - let radius = max(2, 14 - count * 4) - let temp = image?.kf.blurred(withRadius: CGFloat(radius)) - processing(temp?.kf.data(format: .JPEG) ?? data) - } - - } else { - processing(data) - } - } -} - -private final class ImageProgressiveSerialQueue { - typealias ClosureCallback = ((@escaping () -> Void)) -> Void - - private let queue: DispatchQueue - private var items: [DispatchWorkItem] = [] - private var notify: (() -> Void)? - private var lastTime: TimeInterval? - - init() { - self.queue = DispatchQueue(label: "com.onevcat.Kingfisher.ImageProgressive.SerialQueue") - } - - func add(minimum interval: TimeInterval, closure: @escaping ClosureCallback) { - let completion = { [weak self] in - guard let self = self else { return } - - self.queue.async { [weak self] in - guard let self = self else { return } - guard !self.items.isEmpty else { return } - - self.items.removeFirst() - - if let next = self.items.first { - self.queue.asyncAfter( - deadline: .now() + interval, - execute: next - ) - - } else { - self.lastTime = Date().timeIntervalSince1970 - self.notify?() - self.notify = nil - } - } - } - - queue.async { [weak self] in - guard let self = self else { return } - - let item = DispatchWorkItem { - closure(completion) - } - if self.items.isEmpty { - let difference = Date().timeIntervalSince1970 - (self.lastTime ?? 0) - let delay = difference < interval ? interval - difference : 0 - self.queue.asyncAfter(deadline: .now() + delay, execute: item) - } - self.items.append(item) - } - } - - func clean() { - queue.async { [weak self] in - guard let self = self else { return } - self.items.forEach { $0.cancel() } - self.items.removeAll() - } - } -} diff --git a/Pods/Kingfisher/Sources/Image/ImageTransition.swift b/Pods/Kingfisher/Sources/Image/ImageTransition.swift deleted file mode 100644 index 4d042df..0000000 --- a/Pods/Kingfisher/Sources/Image/ImageTransition.swift +++ /dev/null @@ -1,118 +0,0 @@ -// -// ImageTransition.swift -// Kingfisher -// -// Created by Wei Wang on 15/9/18. -// -// Copyright (c) 2019 Wei Wang -// -// 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 os(iOS) || os(tvOS) -import UIKit - -/// Transition effect which will be used when an image downloaded and set by `UIImageView` -/// extension API in Kingfisher. You can assign an enum value with transition duration as -/// an item in `KingfisherOptionsInfo` to enable the animation transition. -/// -/// Apple's UIViewAnimationOptions is used under the hood. -/// For custom transition, you should specified your own transition options, animations and -/// completion handler as well. -/// -/// - none: No animation transition. -/// - fade: Fade in the loaded image in a given duration. -/// - flipFromLeft: Flip from left transition. -/// - flipFromRight: Flip from right transition. -/// - flipFromTop: Flip from top transition. -/// - flipFromBottom: Flip from bottom transition. -/// - custom: Custom transition. -public enum ImageTransition { - /// No animation transition. - case none - /// Fade in the loaded image in a given duration. - case fade(TimeInterval) - /// Flip from left transition. - case flipFromLeft(TimeInterval) - /// Flip from right transition. - case flipFromRight(TimeInterval) - /// Flip from top transition. - case flipFromTop(TimeInterval) - /// Flip from bottom transition. - case flipFromBottom(TimeInterval) - /// Custom transition defined by a general animation block. - /// - duration: The time duration of this custom transition. - /// - options: `UIView.AnimationOptions` should be used in the transition. - /// - animations: The animation block will be applied when setting image. - /// - completion: A block called when the transition animation finishes. - case custom(duration: TimeInterval, - options: UIView.AnimationOptions, - animations: ((UIImageView, UIImage) -> Void)?, - completion: ((Bool) -> Void)?) - - var duration: TimeInterval { - switch self { - case .none: return 0 - case .fade(let duration): return duration - - case .flipFromLeft(let duration): return duration - case .flipFromRight(let duration): return duration - case .flipFromTop(let duration): return duration - case .flipFromBottom(let duration): return duration - - case .custom(let duration, _, _, _): return duration - } - } - - var animationOptions: UIView.AnimationOptions { - switch self { - case .none: return [] - case .fade: return .transitionCrossDissolve - - case .flipFromLeft: return .transitionFlipFromLeft - case .flipFromRight: return .transitionFlipFromRight - case .flipFromTop: return .transitionFlipFromTop - case .flipFromBottom: return .transitionFlipFromBottom - - case .custom(_, let options, _, _): return options - } - } - - var animations: ((UIImageView, UIImage) -> Void)? { - switch self { - case .custom(_, _, let animations, _): return animations - default: return { $0.image = $1 } - } - } - - var completion: ((Bool) -> Void)? { - switch self { - case .custom(_, _, _, let completion): return completion - default: return nil - } - } -} -#else -// Just a placeholder for compiling on macOS. -public enum ImageTransition { - case none - /// This is a placeholder on macOS now. It is for SwiftUI (KFImage) to identify the fade option only. - case fade(TimeInterval) -} -#endif diff --git a/Pods/Kingfisher/Sources/Image/Placeholder.swift b/Pods/Kingfisher/Sources/Image/Placeholder.swift deleted file mode 100644 index 94d9e3a..0000000 --- a/Pods/Kingfisher/Sources/Image/Placeholder.swift +++ /dev/null @@ -1,82 +0,0 @@ -// -// Placeholder.swift -// Kingfisher -// -// Created by Tieme van Veen on 28/08/2017. -// -// Copyright (c) 2019 Wei Wang -// -// 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 !os(watchOS) - -#if canImport(AppKit) && !targetEnvironment(macCatalyst) -import AppKit -#endif - -#if canImport(UIKit) -import UIKit -#endif - -/// Represents a placeholder type which could be set while loading as well as -/// loading finished without getting an image. -public protocol Placeholder { - - /// How the placeholder should be added to a given image view. - func add(to imageView: KFCrossPlatformImageView) - - /// How the placeholder should be removed from a given image view. - func remove(from imageView: KFCrossPlatformImageView) -} - -/// Default implementation of an image placeholder. The image will be set or -/// reset directly for `image` property of the image view. -extension KFCrossPlatformImage: Placeholder { - /// How the placeholder should be added to a given image view. - public func add(to imageView: KFCrossPlatformImageView) { imageView.image = self } - - /// How the placeholder should be removed from a given image view. - public func remove(from imageView: KFCrossPlatformImageView) { imageView.image = nil } -} - -/// Default implementation of an arbitrary view as placeholder. The view will be -/// added as a subview when adding and be removed from its super view when removing. -/// -/// To use your customize View type as placeholder, simply let it conforming to -/// `Placeholder` by `extension MyView: Placeholder {}`. -extension Placeholder where Self: KFCrossPlatformView { - - /// How the placeholder should be added to a given image view. - public func add(to imageView: KFCrossPlatformImageView) { - imageView.addSubview(self) - translatesAutoresizingMaskIntoConstraints = false - - centerXAnchor.constraint(equalTo: imageView.centerXAnchor).isActive = true - centerYAnchor.constraint(equalTo: imageView.centerYAnchor).isActive = true - heightAnchor.constraint(equalTo: imageView.heightAnchor).isActive = true - widthAnchor.constraint(equalTo: imageView.widthAnchor).isActive = true - } - - /// How the placeholder should be removed from a given image view. - public func remove(from imageView: KFCrossPlatformImageView) { - removeFromSuperview() - } -} - -#endif diff --git a/Pods/Kingfisher/Sources/Networking/AuthenticationChallengeResponsable.swift b/Pods/Kingfisher/Sources/Networking/AuthenticationChallengeResponsable.swift deleted file mode 100644 index d3b3ea1..0000000 --- a/Pods/Kingfisher/Sources/Networking/AuthenticationChallengeResponsable.swift +++ /dev/null @@ -1,94 +0,0 @@ -// -// AuthenticationChallengeResponsable.swift -// Kingfisher -// -// Created by Wei Wang on 2018/10/11. -// -// Copyright (c) 2019 Wei Wang -// -// 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 - -@available(*, deprecated, message: "Typo. Use `AuthenticationChallengeResponsible` instead", renamed: "AuthenticationChallengeResponsible") -public typealias AuthenticationChallengeResponsable = AuthenticationChallengeResponsible - -/// Protocol indicates that an authentication challenge could be handled. -public protocol AuthenticationChallengeResponsible: AnyObject { - - /// Called when a session level authentication challenge is received. - /// This method provide a chance to handle and response to the authentication - /// challenge before downloading could start. - /// - /// - Parameters: - /// - downloader: The downloader which receives this challenge. - /// - challenge: An object that contains the request for authentication. - /// - completionHandler: A handler that your delegate method must call. - /// - /// - Note: This method is a forward from `URLSessionDelegate.urlSession(:didReceiveChallenge:completionHandler:)`. - /// Please refer to the document of it in `URLSessionDelegate`. - func downloader( - _ downloader: ImageDownloader, - didReceive challenge: URLAuthenticationChallenge, - completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) - - /// Called when a task level authentication challenge is received. - /// This method provide a chance to handle and response to the authentication - /// challenge before downloading could start. - /// - /// - Parameters: - /// - downloader: The downloader which receives this challenge. - /// - task: The task whose request requires authentication. - /// - challenge: An object that contains the request for authentication. - /// - completionHandler: A handler that your delegate method must call. - func downloader( - _ downloader: ImageDownloader, - task: URLSessionTask, - didReceive challenge: URLAuthenticationChallenge, - completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) -} - -extension AuthenticationChallengeResponsible { - - public func downloader( - _ downloader: ImageDownloader, - didReceive challenge: URLAuthenticationChallenge, - completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) - { - if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { - if let trustedHosts = downloader.trustedHosts, trustedHosts.contains(challenge.protectionSpace.host) { - let credential = URLCredential(trust: challenge.protectionSpace.serverTrust!) - completionHandler(.useCredential, credential) - return - } - } - - completionHandler(.performDefaultHandling, nil) - } - - public func downloader( - _ downloader: ImageDownloader, - task: URLSessionTask, - didReceive challenge: URLAuthenticationChallenge, - completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) - { - completionHandler(.performDefaultHandling, nil) - } - -} diff --git a/Pods/Kingfisher/Sources/Networking/ImageDataProcessor.swift b/Pods/Kingfisher/Sources/Networking/ImageDataProcessor.swift deleted file mode 100644 index b368972..0000000 --- a/Pods/Kingfisher/Sources/Networking/ImageDataProcessor.swift +++ /dev/null @@ -1,74 +0,0 @@ -// -// ImageDataProcessor.swift -// Kingfisher -// -// Created by Wei Wang on 2018/10/11. -// -// Copyright (c) 2019 Wei Wang -// -// 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 - -private let sharedProcessingQueue: CallbackQueue = - .dispatch(DispatchQueue(label: "com.onevcat.Kingfisher.ImageDownloader.Process")) - -// Handles image processing work on an own process queue. -class ImageDataProcessor { - let data: Data - let callbacks: [SessionDataTask.TaskCallback] - let queue: CallbackQueue - - // Note: We have an optimization choice there, to reduce queue dispatch by checking callback - // queue settings in each option... - let onImageProcessed = Delegate<(Result, SessionDataTask.TaskCallback), Void>() - - init(data: Data, callbacks: [SessionDataTask.TaskCallback], processingQueue: CallbackQueue?) { - self.data = data - self.callbacks = callbacks - self.queue = processingQueue ?? sharedProcessingQueue - } - - func process() { - queue.execute(doProcess) - } - - private func doProcess() { - var processedImages = [String: KFCrossPlatformImage]() - for callback in callbacks { - let processor = callback.options.processor - var image = processedImages[processor.identifier] - if image == nil { - image = processor.process(item: .data(data), options: callback.options) - processedImages[processor.identifier] = image - } - - let result: Result - if let image = image { - let finalImage = callback.options.backgroundDecode ? image.kf.decoded : image - result = .success(finalImage) - } else { - let error = KingfisherError.processorError( - reason: .processingFailed(processor: processor, item: .data(data))) - result = .failure(error) - } - onImageProcessed.call((result, callback)) - } - } -} diff --git a/Pods/Kingfisher/Sources/Networking/ImageDownloader.swift b/Pods/Kingfisher/Sources/Networking/ImageDownloader.swift deleted file mode 100644 index 7078d88..0000000 --- a/Pods/Kingfisher/Sources/Networking/ImageDownloader.swift +++ /dev/null @@ -1,502 +0,0 @@ -// -// ImageDownloader.swift -// Kingfisher -// -// Created by Wei Wang on 15/4/6. -// -// Copyright (c) 2019 Wei Wang -// -// 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 os(macOS) -import AppKit -#else -import UIKit -#endif - -typealias DownloadResult = Result - -/// Represents a success result of an image downloading progress. -public struct ImageLoadingResult { - - /// The downloaded image. - public let image: KFCrossPlatformImage - - /// Original URL of the image request. - public let url: URL? - - /// The raw data received from downloader. - public let originalData: Data - - /// Creates an `ImageDownloadResult` - /// - /// - parameter image: Image of the download result - /// - parameter url: URL from where the image was downloaded from - /// - parameter originalData: The image's binary data - public init(image: KFCrossPlatformImage, url: URL? = nil, originalData: Data) { - self.image = image - self.url = url - self.originalData = originalData - } -} - -/// Represents a task of an image downloading process. -public struct DownloadTask { - - /// The `SessionDataTask` object bounded to this download task. Multiple `DownloadTask`s could refer - /// to a same `sessionTask`. This is an optimization in Kingfisher to prevent multiple downloading task - /// for the same URL resource at the same time. - /// - /// When you `cancel` a `DownloadTask`, this `SessionDataTask` and its cancel token will be pass through. - /// You can use them to identify the cancelled task. - public let sessionTask: SessionDataTask - - /// The cancel token which is used to cancel the task. This is only for identify the task when it is cancelled. - /// To cancel a `DownloadTask`, use `cancel` instead. - public let cancelToken: SessionDataTask.CancelToken - - /// Cancel this task if it is running. It will do nothing if this task is not running. - /// - /// - Note: - /// In Kingfisher, there is an optimization to prevent starting another download task if the target URL is being - /// downloading. However, even when internally no new session task created, a `DownloadTask` will be still created - /// and returned when you call related methods, but it will share the session downloading task with a previous task. - /// In this case, if multiple `DownloadTask`s share a single session download task, cancelling a `DownloadTask` - /// does not affect other `DownloadTask`s. - /// - /// If you need to cancel all `DownloadTask`s of a url, use `ImageDownloader.cancel(url:)`. If you need to cancel - /// all downloading tasks of an `ImageDownloader`, use `ImageDownloader.cancelAll()`. - public func cancel() { - sessionTask.cancel(token: cancelToken) - } -} - -extension DownloadTask { - enum WrappedTask { - case download(DownloadTask) - case dataProviding - - func cancel() { - switch self { - case .download(let task): task.cancel() - case .dataProviding: break - } - } - - var value: DownloadTask? { - switch self { - case .download(let task): return task - case .dataProviding: return nil - } - } - } -} - -/// Represents a downloading manager for requesting the image with a URL from server. -open class ImageDownloader { - - // MARK: Singleton - /// The default downloader. - public static let `default` = ImageDownloader(name: "default") - - // MARK: Public Properties - /// The duration before the downloading is timeout. Default is 15 seconds. - open var downloadTimeout: TimeInterval = 15.0 - - /// A set of trusted hosts when receiving server trust challenges. A challenge with host name contained in this - /// set will be ignored. You can use this set to specify the self-signed site. It only will be used if you don't - /// specify the `authenticationChallengeResponder`. - /// - /// If `authenticationChallengeResponder` is set, this property will be ignored and the implementation of - /// `authenticationChallengeResponder` will be used instead. - open var trustedHosts: Set? - - /// Use this to set supply a configuration for the downloader. By default, - /// NSURLSessionConfiguration.ephemeralSessionConfiguration() will be used. - /// - /// You could change the configuration before a downloading task starts. - /// A configuration without persistent storage for caches is requested for downloader working correctly. - open var sessionConfiguration = URLSessionConfiguration.ephemeral { - didSet { - session.invalidateAndCancel() - session = URLSession(configuration: sessionConfiguration, delegate: sessionDelegate, delegateQueue: nil) - } - } - open var sessionDelegate: SessionDelegate { - didSet { - session.invalidateAndCancel() - session = URLSession(configuration: sessionConfiguration, delegate: sessionDelegate, delegateQueue: nil) - setupSessionHandler() - } - } - - /// Whether the download requests should use pipeline or not. Default is false. - open var requestsUsePipelining = false - - /// Delegate of this `ImageDownloader` object. See `ImageDownloaderDelegate` protocol for more. - open weak var delegate: ImageDownloaderDelegate? - - /// A responder for authentication challenge. - /// Downloader will forward the received authentication challenge for the downloading session to this responder. - open weak var authenticationChallengeResponder: AuthenticationChallengeResponsible? - - private let name: String - private var session: URLSession - - // MARK: Initializers - - /// Creates a downloader with name. - /// - /// - Parameter name: The name for the downloader. It should not be empty. - public init(name: String) { - if name.isEmpty { - fatalError("[Kingfisher] You should specify a name for the downloader. " - + "A downloader with empty name is not permitted.") - } - - self.name = name - - sessionDelegate = SessionDelegate() - session = URLSession( - configuration: sessionConfiguration, - delegate: sessionDelegate, - delegateQueue: nil) - - authenticationChallengeResponder = self - setupSessionHandler() - } - - deinit { session.invalidateAndCancel() } - - private func setupSessionHandler() { - sessionDelegate.onReceiveSessionChallenge.delegate(on: self) { (self, invoke) in - self.authenticationChallengeResponder?.downloader(self, didReceive: invoke.1, completionHandler: invoke.2) - } - sessionDelegate.onReceiveSessionTaskChallenge.delegate(on: self) { (self, invoke) in - self.authenticationChallengeResponder?.downloader( - self, task: invoke.1, didReceive: invoke.2, completionHandler: invoke.3) - } - sessionDelegate.onValidStatusCode.delegate(on: self) { (self, code) in - return (self.delegate ?? self).isValidStatusCode(code, for: self) - } - sessionDelegate.onResponseReceived.delegate(on: self) { (self, invoke) in - (self.delegate ?? self).imageDownloader(self, didReceive: invoke.0, completionHandler: invoke.1) - } - sessionDelegate.onDownloadingFinished.delegate(on: self) { (self, value) in - let (url, result) = value - do { - let value = try result.get() - self.delegate?.imageDownloader(self, didFinishDownloadingImageForURL: url, with: value, error: nil) - } catch { - self.delegate?.imageDownloader(self, didFinishDownloadingImageForURL: url, with: nil, error: error) - } - } - sessionDelegate.onDidDownloadData.delegate(on: self) { (self, task) in - return (self.delegate ?? self).imageDownloader(self, didDownload: task.mutableData, with: task) - } - } - - // Wraps `completionHandler` to `onCompleted` respectively. - private func createCompletionCallBack(_ completionHandler: ((DownloadResult) -> Void)?) -> Delegate? { - return completionHandler.map { block -> Delegate in - - let delegate = Delegate, Void>() - delegate.delegate(on: self) { (self, callback) in - block(callback) - } - return delegate - } - } - - private func createTaskCallback( - _ completionHandler: ((DownloadResult) -> Void)?, - options: KingfisherParsedOptionsInfo - ) -> SessionDataTask.TaskCallback - { - return SessionDataTask.TaskCallback( - onCompleted: createCompletionCallBack(completionHandler), - options: options - ) - } - - private func createDownloadContext( - with url: URL, - options: KingfisherParsedOptionsInfo, - done: @escaping ((Result) -> Void) - ) - { - func checkRequestAndDone(r: URLRequest) { - - // There is a possibility that request modifier changed the url to `nil` or empty. - // In this case, throw an error. - guard let url = r.url, !url.absoluteString.isEmpty else { - done(.failure(KingfisherError.requestError(reason: .invalidURL(request: r)))) - return - } - - done(.success(DownloadingContext(url: url, request: r, options: options))) - } - - // Creates default request. - var request = URLRequest(url: url, cachePolicy: .reloadIgnoringLocalCacheData, timeoutInterval: downloadTimeout) - request.httpShouldUsePipelining = requestsUsePipelining - if #available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) , options.lowDataModeSource != nil { - request.allowsConstrainedNetworkAccess = false - } - - if let requestModifier = options.requestModifier { - // Modifies request before sending. - requestModifier.modified(for: request) { result in - guard let finalRequest = result else { - done(.failure(KingfisherError.requestError(reason: .emptyRequest))) - return - } - checkRequestAndDone(r: finalRequest) - } - } else { - checkRequestAndDone(r: request) - } - } - - private func addDownloadTask( - context: DownloadingContext, - callback: SessionDataTask.TaskCallback - ) -> DownloadTask - { - // Ready to start download. Add it to session task manager (`sessionHandler`) - let downloadTask: DownloadTask - if let existingTask = sessionDelegate.task(for: context.url) { - downloadTask = sessionDelegate.append(existingTask, callback: callback) - } else { - let sessionDataTask = session.dataTask(with: context.request) - sessionDataTask.priority = context.options.downloadPriority - downloadTask = sessionDelegate.add(sessionDataTask, url: context.url, callback: callback) - } - return downloadTask - } - - - private func reportWillDownloadImage(url: URL, request: URLRequest) { - delegate?.imageDownloader(self, willDownloadImageForURL: url, with: request) - } - - private func reportDidDownloadImageData(result: Result<(Data, URLResponse?), KingfisherError>, url: URL) { - var response: URLResponse? - var err: Error? - do { - response = try result.get().1 - } catch { - err = error - } - self.delegate?.imageDownloader( - self, - didFinishDownloadingImageForURL: url, - with: response, - error: err - ) - } - - private func reportDidProcessImage( - result: Result, url: URL, response: URLResponse? - ) - { - if let image = try? result.get() { - self.delegate?.imageDownloader(self, didDownload: image, for: url, with: response) - } - - } - - private func startDownloadTask( - context: DownloadingContext, - callback: SessionDataTask.TaskCallback - ) -> DownloadTask - { - - let downloadTask = addDownloadTask(context: context, callback: callback) - - let sessionTask = downloadTask.sessionTask - guard !sessionTask.started else { - return downloadTask - } - - sessionTask.onTaskDone.delegate(on: self) { (self, done) in - // Underlying downloading finishes. - // result: Result<(Data, URLResponse?)>, callbacks: [TaskCallback] - let (result, callbacks) = done - - // Before processing the downloaded data. - self.reportDidDownloadImageData(result: result, url: context.url) - - switch result { - // Download finished. Now process the data to an image. - case .success(let (data, response)): - let processor = ImageDataProcessor( - data: data, callbacks: callbacks, processingQueue: context.options.processingQueue - ) - processor.onImageProcessed.delegate(on: self) { (self, done) in - // `onImageProcessed` will be called for `callbacks.count` times, with each - // `SessionDataTask.TaskCallback` as the input parameter. - // result: Result, callback: SessionDataTask.TaskCallback - let (result, callback) = done - - self.reportDidProcessImage(result: result, url: context.url, response: response) - - let imageResult = result.map { ImageLoadingResult(image: $0, url: context.url, originalData: data) } - let queue = callback.options.callbackQueue - queue.execute { callback.onCompleted?.call(imageResult) } - } - processor.process() - - case .failure(let error): - callbacks.forEach { callback in - let queue = callback.options.callbackQueue - queue.execute { callback.onCompleted?.call(.failure(error)) } - } - } - } - - reportWillDownloadImage(url: context.url, request: context.request) - sessionTask.resume() - return downloadTask - } - - // MARK: Downloading Task - /// Downloads an image with a URL and option. Invoked internally by Kingfisher. Subclasses must invoke super. - /// - /// - Parameters: - /// - url: Target URL. - /// - options: The options could control download behavior. See `KingfisherOptionsInfo`. - /// - completionHandler: Called when the download progress finishes. This block will be called in the queue - /// defined in `.callbackQueue` in `options` parameter. - /// - Returns: A downloading task. You could call `cancel` on it to stop the download task. - @discardableResult - open func downloadImage( - with url: URL, - options: KingfisherParsedOptionsInfo, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - var downloadTask: DownloadTask? - createDownloadContext(with: url, options: options) { result in - switch result { - case .success(let context): - // `downloadTask` will be set if the downloading started immediately. This is the case when no request - // modifier or a sync modifier (`ImageDownloadRequestModifier`) is used. Otherwise, when an - // `AsyncImageDownloadRequestModifier` is used the returned `downloadTask` of this method will be `nil` - // and the actual "delayed" task is given in `AsyncImageDownloadRequestModifier.onDownloadTaskStarted` - // callback. - downloadTask = self.startDownloadTask( - context: context, - callback: self.createTaskCallback(completionHandler, options: options) - ) - if let modifier = options.requestModifier { - modifier.onDownloadTaskStarted?(downloadTask) - } - case .failure(let error): - options.callbackQueue.execute { - completionHandler?(.failure(error)) - } - } - } - - return downloadTask - } - - /// Downloads an image with a URL and option. - /// - /// - Parameters: - /// - url: Target URL. - /// - options: The options could control download behavior. See `KingfisherOptionsInfo`. - /// - progressBlock: Called when the download progress updated. This block will be always be called in main queue. - /// - completionHandler: Called when the download progress finishes. This block will be called in the queue - /// defined in `.callbackQueue` in `options` parameter. - /// - Returns: A downloading task. You could call `cancel` on it to stop the download task. - @discardableResult - open func downloadImage( - with url: URL, - options: KingfisherOptionsInfo? = nil, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - var info = KingfisherParsedOptionsInfo(options) - if let block = progressBlock { - info.onDataReceived = (info.onDataReceived ?? []) + [ImageLoadingProgressSideEffect(block)] - } - return downloadImage( - with: url, - options: info, - completionHandler: completionHandler) - } - - /// Downloads an image with a URL and option. - /// - /// - Parameters: - /// - url: Target URL. - /// - options: The options could control download behavior. See `KingfisherOptionsInfo`. - /// - completionHandler: Called when the download progress finishes. This block will be called in the queue - /// defined in `.callbackQueue` in `options` parameter. - /// - Returns: A downloading task. You could call `cancel` on it to stop the download task. - @discardableResult - open func downloadImage( - with url: URL, - options: KingfisherOptionsInfo? = nil, - completionHandler: ((Result) -> Void)? = nil) -> DownloadTask? - { - downloadImage( - with: url, - options: KingfisherParsedOptionsInfo(options), - completionHandler: completionHandler - ) - } -} - -// MARK: Cancelling Task -extension ImageDownloader { - - /// Cancel all downloading tasks for this `ImageDownloader`. It will trigger the completion handlers - /// for all not-yet-finished downloading tasks. - /// - /// If you need to only cancel a certain task, call `cancel()` on the `DownloadTask` - /// returned by the downloading methods. If you need to cancel all `DownloadTask`s of a certain url, - /// use `ImageDownloader.cancel(url:)`. - public func cancelAll() { - sessionDelegate.cancelAll() - } - - /// Cancel all downloading tasks for a given URL. It will trigger the completion handlers for - /// all not-yet-finished downloading tasks for the URL. - /// - /// - Parameter url: The URL which you want to cancel downloading. - public func cancel(url: URL) { - sessionDelegate.cancel(url: url) - } -} - -// Use the default implementation from extension of `AuthenticationChallengeResponsible`. -extension ImageDownloader: AuthenticationChallengeResponsible {} - -// Use the default implementation from extension of `ImageDownloaderDelegate`. -extension ImageDownloader: ImageDownloaderDelegate {} - -extension ImageDownloader { - struct DownloadingContext { - let url: URL - let request: URLRequest - let options: KingfisherParsedOptionsInfo - } -} diff --git a/Pods/Kingfisher/Sources/Networking/ImageDownloaderDelegate.swift b/Pods/Kingfisher/Sources/Networking/ImageDownloaderDelegate.swift deleted file mode 100644 index f844ddf..0000000 --- a/Pods/Kingfisher/Sources/Networking/ImageDownloaderDelegate.swift +++ /dev/null @@ -1,184 +0,0 @@ -// -// ImageDownloaderDelegate.swift -// Kingfisher -// -// Created by Wei Wang on 2018/10/11. -// -// Copyright (c) 2019 Wei Wang -// -// 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 - -/// Protocol of `ImageDownloader`. This protocol provides a set of methods which are related to image downloader -/// working stages and rules. -public protocol ImageDownloaderDelegate: AnyObject { - - /// Called when the `ImageDownloader` object will start downloading an image from a specified URL. - /// - /// - Parameters: - /// - downloader: The `ImageDownloader` object which is used for the downloading operation. - /// - url: URL of the starting request. - /// - request: The request object for the download process. - /// - func imageDownloader(_ downloader: ImageDownloader, willDownloadImageForURL url: URL, with request: URLRequest?) - - /// Called when the `ImageDownloader` completes a downloading request with success or failure. - /// - /// - Parameters: - /// - downloader: The `ImageDownloader` object which is used for the downloading operation. - /// - url: URL of the original request URL. - /// - response: The response object of the downloading process. - /// - error: The error in case of failure. - /// - func imageDownloader( - _ downloader: ImageDownloader, - didFinishDownloadingImageForURL url: URL, - with response: URLResponse?, - error: Error?) - - /// Called when the `ImageDownloader` object successfully downloaded image data from specified URL. This is - /// your last chance to verify or modify the downloaded data before Kingfisher tries to perform addition - /// processing on the image data. - /// - /// - Parameters: - /// - downloader: The `ImageDownloader` object which is used for the downloading operation. - /// - data: The original downloaded data. - /// - dataTask: The data task contains request and response information of the download. - /// - Note: - /// This can be used to pre-process raw image data before creation of `Image` instance (i.e. - /// decrypting or verification). If `nil` returned, the processing is interrupted and a `KingfisherError` with - /// `ResponseErrorReason.dataModifyingFailed` will be raised. You could use this fact to stop the image - /// processing flow if you find the data is corrupted or malformed. - /// - /// If this method is implemented, `imageDownloader(_:didDownload:for:)` will not be called anymore. - func imageDownloader(_ downloader: ImageDownloader, didDownload data: Data, with dataTask: SessionDataTask) -> Data? - - /// Called when the `ImageDownloader` object successfully downloaded image data from specified URL. This is - /// your last chance to verify or modify the downloaded data before Kingfisher tries to perform addition - /// processing on the image data. - /// - /// - Parameters: - /// - downloader: The `ImageDownloader` object which is used for the downloading operation. - /// - data: The original downloaded data. - /// - url: The URL of the original request URL. - /// - Returns: The data from which Kingfisher should use to create an image. You need to provide valid data - /// which content is one of the supported image file format. Kingfisher will perform process on this - /// data and try to convert it to an image object. - /// - Note: - /// This can be used to pre-process raw image data before creation of `Image` instance (i.e. - /// decrypting or verification). If `nil` returned, the processing is interrupted and a `KingfisherError` with - /// `ResponseErrorReason.dataModifyingFailed` will be raised. You could use this fact to stop the image - /// processing flow if you find the data is corrupted or malformed. - /// - /// If `imageDownloader(_:didDownload:with:)` is implemented, this method will not be called anymore. - func imageDownloader(_ downloader: ImageDownloader, didDownload data: Data, for url: URL) -> Data? - - /// Called when the `ImageDownloader` object successfully downloads and processes an image from specified URL. - /// - /// - Parameters: - /// - downloader: The `ImageDownloader` object which is used for the downloading operation. - /// - image: The downloaded and processed image. - /// - url: URL of the original request URL. - /// - response: The original response object of the downloading process. - /// - func imageDownloader( - _ downloader: ImageDownloader, - didDownload image: KFCrossPlatformImage, - for url: URL, - with response: URLResponse?) - - /// Checks if a received HTTP status code is valid or not. - /// By default, a status code in range 200..<400 is considered as valid. - /// If an invalid code is received, the downloader will raise an `KingfisherError` with - /// `ResponseErrorReason.invalidHTTPStatusCode` as its reason. - /// - /// - Parameters: - /// - code: The received HTTP status code. - /// - downloader: The `ImageDownloader` object asks for validate status code. - /// - Returns: Returns a value to indicate whether this HTTP status code is valid or not. - /// - Note: If the default 200 to 400 valid code does not suit your need, - /// you can implement this method to change that behavior. - func isValidStatusCode(_ code: Int, for downloader: ImageDownloader) -> Bool - - /// Called when the task has received a valid HTTP response after it passes other checks such as the status code. - /// You can perform additional checks or verification on the response to determine if the download should be allowed. - /// - /// For example, it is useful if you want to verify some header values in the response before actually starting the - /// download. - /// - /// If implemented, it is your responsibility to call the `completionHandler` with a proper response disposition, - /// such as `.allow` to start the actual downloading or `.cancel` to cancel the task. If `.cancel` is used as the - /// disposition, the downloader will raise an `KingfisherError` with - /// `ResponseErrorReason.cancelledByDelegate` as its reason. If not implemented, any response which passes other - /// checked will be allowed and the download starts. - /// - /// - Parameters: - /// - downloader: The `ImageDownloader` object which is used for the downloading operation. - /// - response: The original response object of the downloading process. - /// - completionHandler: A completion handler that receives the disposition for the download task. You must call - /// this handler with either `.allow` or `.cancel`. - func imageDownloader( - _ downloader: ImageDownloader, - didReceive response: URLResponse, - completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) -} - -// Default implementation for `ImageDownloaderDelegate`. -extension ImageDownloaderDelegate { - public func imageDownloader( - _ downloader: ImageDownloader, - willDownloadImageForURL url: URL, - with request: URLRequest?) {} - - public func imageDownloader( - _ downloader: ImageDownloader, - didFinishDownloadingImageForURL url: URL, - with response: URLResponse?, - error: Error?) {} - - public func imageDownloader( - _ downloader: ImageDownloader, - didDownload image: KFCrossPlatformImage, - for url: URL, - with response: URLResponse?) {} - - public func isValidStatusCode(_ code: Int, for downloader: ImageDownloader) -> Bool { - return (200..<400).contains(code) - } - - public func imageDownloader(_ downloader: ImageDownloader, didDownload data: Data, with task: SessionDataTask) -> Data? { - guard let url = task.originalURL else { - return data - } - return imageDownloader(downloader, didDownload: data, for: url) - } - - public func imageDownloader(_ downloader: ImageDownloader, didDownload data: Data, for url: URL) -> Data? { - return data - } - - public func imageDownloader( - _ downloader: ImageDownloader, - didReceive response: URLResponse, - completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) { - completionHandler(.allow) - } - -} diff --git a/Pods/Kingfisher/Sources/Networking/ImageModifier.swift b/Pods/Kingfisher/Sources/Networking/ImageModifier.swift deleted file mode 100644 index 0acd0e8..0000000 --- a/Pods/Kingfisher/Sources/Networking/ImageModifier.swift +++ /dev/null @@ -1,116 +0,0 @@ -// -// ImageModifier.swift -// Kingfisher -// -// Created by Ethan Gill on 2017/11/28. -// -// Copyright (c) 2019 Ethan Gill -// -// 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 - -/// An `ImageModifier` can be used to change properties on an image between cache serialization and the actual use of -/// the image. The `modify(_:)` method will be called after the image retrieved from its source and before it returned -/// to the caller. This modified image is expected to be only used for rendering purpose, any changes applied by the -/// `ImageModifier` will not be serialized or cached. -public protocol ImageModifier { - /// Modify an input `Image`. - /// - /// - parameter image: Image which will be modified by `self` - /// - /// - returns: The modified image. - /// - /// - Note: The return value will be unmodified if modifying is not possible on - /// the current platform. - /// - Note: Most modifiers support UIImage or NSImage, but not CGImage. - func modify(_ image: KFCrossPlatformImage) -> KFCrossPlatformImage -} - -/// A wrapper for creating an `ImageModifier` easier. -/// This type conforms to `ImageModifier` and wraps an image modify block. -/// If the `block` throws an error, the original image will be used. -public struct AnyImageModifier: ImageModifier { - - /// A block which modifies images, or returns the original image - /// if modification cannot be performed with an error. - let block: (KFCrossPlatformImage) throws -> KFCrossPlatformImage - - /// Creates an `AnyImageModifier` with a given `modify` block. - public init(modify: @escaping (KFCrossPlatformImage) throws -> KFCrossPlatformImage) { - block = modify - } - - /// Modify an input `Image`. See `ImageModifier` protocol for more. - public func modify(_ image: KFCrossPlatformImage) -> KFCrossPlatformImage { - return (try? block(image)) ?? image - } -} - -#if os(iOS) || os(tvOS) || os(watchOS) -import UIKit - -/// Modifier for setting the rendering mode of images. -public struct RenderingModeImageModifier: ImageModifier { - - /// The rendering mode to apply to the image. - public let renderingMode: UIImage.RenderingMode - - /// Creates a `RenderingModeImageModifier`. - /// - /// - Parameter renderingMode: The rendering mode to apply to the image. Default is `.automatic`. - public init(renderingMode: UIImage.RenderingMode = .automatic) { - self.renderingMode = renderingMode - } - - /// Modify an input `Image`. See `ImageModifier` protocol for more. - public func modify(_ image: KFCrossPlatformImage) -> KFCrossPlatformImage { - return image.withRenderingMode(renderingMode) - } -} - -/// Modifier for setting the `flipsForRightToLeftLayoutDirection` property of images. -public struct FlipsForRightToLeftLayoutDirectionImageModifier: ImageModifier { - - /// Creates a `FlipsForRightToLeftLayoutDirectionImageModifier`. - public init() {} - - /// Modify an input `Image`. See `ImageModifier` protocol for more. - public func modify(_ image: KFCrossPlatformImage) -> KFCrossPlatformImage { - return image.imageFlippedForRightToLeftLayoutDirection() - } -} - -/// Modifier for setting the `alignmentRectInsets` property of images. -public struct AlignmentRectInsetsImageModifier: ImageModifier { - - /// The alignment insets to apply to the image - public let alignmentInsets: UIEdgeInsets - - /// Creates an `AlignmentRectInsetsImageModifier`. - public init(alignmentInsets: UIEdgeInsets) { - self.alignmentInsets = alignmentInsets - } - - /// Modify an input `Image`. See `ImageModifier` protocol for more. - public func modify(_ image: KFCrossPlatformImage) -> KFCrossPlatformImage { - return image.withAlignmentRectInsets(alignmentInsets) - } -} -#endif diff --git a/Pods/Kingfisher/Sources/Networking/ImagePrefetcher.swift b/Pods/Kingfisher/Sources/Networking/ImagePrefetcher.swift deleted file mode 100644 index 3fce14c..0000000 --- a/Pods/Kingfisher/Sources/Networking/ImagePrefetcher.swift +++ /dev/null @@ -1,442 +0,0 @@ -// -// ImagePrefetcher.swift -// Kingfisher -// -// Created by Claire Knight on 24/02/2016 -// -// Copyright (c) 2019 Wei Wang -// -// 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 os(macOS) -import AppKit -#else -import UIKit -#endif - -/// Progress update block of prefetcher when initialized with a list of resources. -/// -/// - `skippedResources`: An array of resources that are already cached before the prefetching starting. -/// - `failedResources`: An array of resources that fail to be downloaded. It could because of being cancelled while -/// downloading, encountered an error when downloading or the download not being started at all. -/// - `completedResources`: An array of resources that are downloaded and cached successfully. -public typealias PrefetcherProgressBlock = - ((_ skippedResources: [Resource], _ failedResources: [Resource], _ completedResources: [Resource]) -> Void) - -/// Progress update block of prefetcher when initialized with a list of resources. -/// -/// - `skippedSources`: An array of sources that are already cached before the prefetching starting. -/// - `failedSources`: An array of sources that fail to be fetched. -/// - `completedResources`: An array of sources that are fetched and cached successfully. -public typealias PrefetcherSourceProgressBlock = - ((_ skippedSources: [Source], _ failedSources: [Source], _ completedSources: [Source]) -> Void) - -/// Completion block of prefetcher when initialized with a list of sources. -/// -/// - `skippedResources`: An array of resources that are already cached before the prefetching starting. -/// - `failedResources`: An array of resources that fail to be downloaded. It could because of being cancelled while -/// downloading, encountered an error when downloading or the download not being started at all. -/// - `completedResources`: An array of resources that are downloaded and cached successfully. -public typealias PrefetcherCompletionHandler = - ((_ skippedResources: [Resource], _ failedResources: [Resource], _ completedResources: [Resource]) -> Void) - -/// Completion block of prefetcher when initialized with a list of sources. -/// -/// - `skippedSources`: An array of sources that are already cached before the prefetching starting. -/// - `failedSources`: An array of sources that fail to be fetched. -/// - `completedSources`: An array of sources that are fetched and cached successfully. -public typealias PrefetcherSourceCompletionHandler = - ((_ skippedSources: [Source], _ failedSources: [Source], _ completedSources: [Source]) -> Void) - -/// `ImagePrefetcher` represents a downloading manager for requesting many images via URLs, then caching them. -/// This is useful when you know a list of image resources and want to download them before showing. It also works with -/// some Cocoa prefetching mechanism like table view or collection view `prefetchDataSource`, to start image downloading -/// and caching before they display on screen. -public class ImagePrefetcher: CustomStringConvertible { - - public var description: String { - return "\(Unmanaged.passUnretained(self).toOpaque())" - } - - /// The maximum concurrent downloads to use when prefetching images. Default is 5. - public var maxConcurrentDownloads = 5 - - private let prefetchSources: [Source] - private let optionsInfo: KingfisherParsedOptionsInfo - - private var progressBlock: PrefetcherProgressBlock? - private var completionHandler: PrefetcherCompletionHandler? - - private var progressSourceBlock: PrefetcherSourceProgressBlock? - private var completionSourceHandler: PrefetcherSourceCompletionHandler? - - private var tasks = [String: DownloadTask.WrappedTask]() - - private var pendingSources: ArraySlice - private var skippedSources = [Source]() - private var completedSources = [Source]() - private var failedSources = [Source]() - - private var stopped = false - - // A manager used for prefetching. We will use the helper methods in manager. - private let manager: KingfisherManager - - private let pretchQueue = DispatchQueue(label: "com.onevcat.Kingfisher.ImagePrefetcher.pretchQueue") - private static let requestingQueue = DispatchQueue(label: "com.onevcat.Kingfisher.ImagePrefetcher.requestingQueue") - - private var finished: Bool { - let totalFinished: Int = failedSources.count + skippedSources.count + completedSources.count - return totalFinished == prefetchSources.count && tasks.isEmpty - } - - /// Creates an image prefetcher with an array of URLs. - /// - /// The prefetcher should be initiated with a list of prefetching targets. The URLs list is immutable. - /// After you get a valid `ImagePrefetcher` object, you call `start()` on it to begin the prefetching process. - /// The images which are already cached will be skipped without downloading again. - /// - /// - Parameters: - /// - urls: The URLs which should be prefetched. - /// - options: Options could control some behaviors. See `KingfisherOptionsInfo` for more. - /// - progressBlock: Called every time an resource is downloaded, skipped or cancelled. - /// - completionHandler: Called when the whole prefetching process finished. - /// - /// - Note: - /// By default, the `ImageDownloader.defaultDownloader` and `ImageCache.defaultCache` will be used as - /// the downloader and cache target respectively. You can specify another downloader or cache by using - /// a customized `KingfisherOptionsInfo`. Both the progress and completion block will be invoked in - /// main thread. The `.callbackQueue` value in `optionsInfo` will be ignored in this method. - public convenience init( - urls: [URL], - options: KingfisherOptionsInfo? = nil, - progressBlock: PrefetcherProgressBlock? = nil, - completionHandler: PrefetcherCompletionHandler? = nil) - { - let resources: [Resource] = urls.map { $0 } - self.init( - resources: resources, - options: options, - progressBlock: progressBlock, - completionHandler: completionHandler) - } - - /// Creates an image prefetcher with an array of URLs. - /// - /// The prefetcher should be initiated with a list of prefetching targets. The URLs list is immutable. - /// After you get a valid `ImagePrefetcher` object, you call `start()` on it to begin the prefetching process. - /// The images which are already cached will be skipped without downloading again. - /// - /// - Parameters: - /// - urls: The URLs which should be prefetched. - /// - options: Options could control some behaviors. See `KingfisherOptionsInfo` for more. - /// - completionHandler: Called when the whole prefetching process finished. - /// - /// - Note: - /// By default, the `ImageDownloader.defaultDownloader` and `ImageCache.defaultCache` will be used as - /// the downloader and cache target respectively. You can specify another downloader or cache by using - /// a customized `KingfisherOptionsInfo`. Both the progress and completion block will be invoked in - /// main thread. The `.callbackQueue` value in `optionsInfo` will be ignored in this method. - public convenience init( - urls: [URL], - options: KingfisherOptionsInfo? = nil, - completionHandler: PrefetcherCompletionHandler? = nil) - { - let resources: [Resource] = urls.map { $0 } - self.init( - resources: resources, - options: options, - progressBlock: nil, - completionHandler: completionHandler) - } - - /// Creates an image prefetcher with an array of resources. - /// - /// - Parameters: - /// - resources: The resources which should be prefetched. See `Resource` type for more. - /// - options: Options could control some behaviors. See `KingfisherOptionsInfo` for more. - /// - progressBlock: Called every time an resource is downloaded, skipped or cancelled. - /// - completionHandler: Called when the whole prefetching process finished. - /// - /// - Note: - /// By default, the `ImageDownloader.defaultDownloader` and `ImageCache.defaultCache` will be used as - /// the downloader and cache target respectively. You can specify another downloader or cache by using - /// a customized `KingfisherOptionsInfo`. Both the progress and completion block will be invoked in - /// main thread. The `.callbackQueue` value in `optionsInfo` will be ignored in this method. - public convenience init( - resources: [Resource], - options: KingfisherOptionsInfo? = nil, - progressBlock: PrefetcherProgressBlock? = nil, - completionHandler: PrefetcherCompletionHandler? = nil) - { - self.init(sources: resources.map { $0.convertToSource() }, options: options) - self.progressBlock = progressBlock - self.completionHandler = completionHandler - } - - /// Creates an image prefetcher with an array of resources. - /// - /// - Parameters: - /// - resources: The resources which should be prefetched. See `Resource` type for more. - /// - options: Options could control some behaviors. See `KingfisherOptionsInfo` for more. - /// - completionHandler: Called when the whole prefetching process finished. - /// - /// - Note: - /// By default, the `ImageDownloader.defaultDownloader` and `ImageCache.defaultCache` will be used as - /// the downloader and cache target respectively. You can specify another downloader or cache by using - /// a customized `KingfisherOptionsInfo`. Both the progress and completion block will be invoked in - /// main thread. The `.callbackQueue` value in `optionsInfo` will be ignored in this method. - public convenience init( - resources: [Resource], - options: KingfisherOptionsInfo? = nil, - completionHandler: PrefetcherCompletionHandler? = nil) - { - self.init(sources: resources.map { $0.convertToSource() }, options: options) - self.completionHandler = completionHandler - } - - /// Creates an image prefetcher with an array of sources. - /// - /// - Parameters: - /// - sources: The sources which should be prefetched. See `Source` type for more. - /// - options: Options could control some behaviors. See `KingfisherOptionsInfo` for more. - /// - progressBlock: Called every time an source fetching successes, fails, is skipped. - /// - completionHandler: Called when the whole prefetching process finished. - /// - /// - Note: - /// By default, the `ImageDownloader.defaultDownloader` and `ImageCache.defaultCache` will be used as - /// the downloader and cache target respectively. You can specify another downloader or cache by using - /// a customized `KingfisherOptionsInfo`. Both the progress and completion block will be invoked in - /// main thread. The `.callbackQueue` value in `optionsInfo` will be ignored in this method. - public convenience init(sources: [Source], - options: KingfisherOptionsInfo? = nil, - progressBlock: PrefetcherSourceProgressBlock? = nil, - completionHandler: PrefetcherSourceCompletionHandler? = nil) - { - self.init(sources: sources, options: options) - self.progressSourceBlock = progressBlock - self.completionSourceHandler = completionHandler - } - - /// Creates an image prefetcher with an array of sources. - /// - /// - Parameters: - /// - sources: The sources which should be prefetched. See `Source` type for more. - /// - options: Options could control some behaviors. See `KingfisherOptionsInfo` for more. - /// - completionHandler: Called when the whole prefetching process finished. - /// - /// - Note: - /// By default, the `ImageDownloader.defaultDownloader` and `ImageCache.defaultCache` will be used as - /// the downloader and cache target respectively. You can specify another downloader or cache by using - /// a customized `KingfisherOptionsInfo`. Both the progress and completion block will be invoked in - /// main thread. The `.callbackQueue` value in `optionsInfo` will be ignored in this method. - public convenience init(sources: [Source], - options: KingfisherOptionsInfo? = nil, - completionHandler: PrefetcherSourceCompletionHandler? = nil) - { - self.init(sources: sources, options: options) - self.completionSourceHandler = completionHandler - } - - init(sources: [Source], options: KingfisherOptionsInfo?) { - var options = KingfisherParsedOptionsInfo(options) - prefetchSources = sources - pendingSources = ArraySlice(sources) - - // We want all callbacks from our prefetch queue, so we should ignore the callback queue in options. - // Add our own callback dispatch queue to make sure all internal callbacks are - // coming back in our expected queue. - options.callbackQueue = .dispatch(pretchQueue) - optionsInfo = options - - let cache = optionsInfo.targetCache ?? .default - let downloader = optionsInfo.downloader ?? .default - manager = KingfisherManager(downloader: downloader, cache: cache) - } - - /// Starts to download the resources and cache them. This can be useful for background downloading - /// of assets that are required for later use in an app. This code will not try and update any UI - /// with the results of the process. - public func start() { - pretchQueue.async { - guard !self.stopped else { - assertionFailure("You can not restart the same prefetcher. Try to create a new prefetcher.") - self.handleComplete() - return - } - - guard self.maxConcurrentDownloads > 0 else { - assertionFailure("There should be concurrent downloads value should be at least 1.") - self.handleComplete() - return - } - - // Empty case. - guard self.prefetchSources.count > 0 else { - self.handleComplete() - return - } - - let initialConcurrentDownloads = min(self.prefetchSources.count, self.maxConcurrentDownloads) - for _ in 0 ..< initialConcurrentDownloads { - if let resource = self.pendingSources.popFirst() { - self.startPrefetching(resource) - } - } - } - } - - /// Stops current downloading progress, and cancel any future prefetching activity that might be occuring. - public func stop() { - pretchQueue.async { - if self.finished { return } - self.stopped = true - self.tasks.values.forEach { $0.cancel() } - } - } - - private func downloadAndCache(_ source: Source) { - - let downloadTaskCompletionHandler: ((Result) -> Void) = { result in - self.tasks.removeValue(forKey: source.cacheKey) - do { - let _ = try result.get() - self.completedSources.append(source) - } catch { - self.failedSources.append(source) - } - - self.reportProgress() - if self.stopped { - if self.tasks.isEmpty { - self.failedSources.append(contentsOf: self.pendingSources) - self.handleComplete() - } - } else { - self.reportCompletionOrStartNext() - } - } - - var downloadTask: DownloadTask.WrappedTask? - ImagePrefetcher.requestingQueue.sync { - let context = RetrievingContext( - options: optionsInfo, originalSource: source - ) - downloadTask = manager.loadAndCacheImage( - source: source, - context: context, - completionHandler: downloadTaskCompletionHandler) - } - - if let downloadTask = downloadTask { - tasks[source.cacheKey] = downloadTask - } - } - - private func append(cached source: Source) { - skippedSources.append(source) - - reportProgress() - reportCompletionOrStartNext() - } - - private func startPrefetching(_ source: Source) - { - if optionsInfo.forceRefresh { - downloadAndCache(source) - return - } - - let cacheType = manager.cache.imageCachedType( - forKey: source.cacheKey, - processorIdentifier: optionsInfo.processor.identifier) - switch cacheType { - case .memory: - append(cached: source) - case .disk: - if optionsInfo.alsoPrefetchToMemory { - let context = RetrievingContext(options: optionsInfo, originalSource: source) - _ = manager.retrieveImageFromCache( - source: source, - context: context) - { - _ in - self.append(cached: source) - } - } else { - append(cached: source) - } - case .none: - downloadAndCache(source) - } - } - - private func reportProgress() { - - if progressBlock == nil && progressSourceBlock == nil { - return - } - - let skipped = self.skippedSources - let failed = self.failedSources - let completed = self.completedSources - CallbackQueue.mainCurrentOrAsync.execute { - self.progressSourceBlock?(skipped, failed, completed) - self.progressBlock?( - skipped.compactMap { $0.asResource }, - failed.compactMap { $0.asResource }, - completed.compactMap { $0.asResource } - ) - } - } - - private func reportCompletionOrStartNext() { - if let resource = self.pendingSources.popFirst() { - // Loose call stack for huge ammount of sources. - pretchQueue.async { self.startPrefetching(resource) } - } else { - guard allFinished else { return } - self.handleComplete() - } - } - - var allFinished: Bool { - return skippedSources.count + failedSources.count + completedSources.count == prefetchSources.count - } - - private func handleComplete() { - - if completionHandler == nil && completionSourceHandler == nil { - return - } - - // The completion handler should be called on the main thread - CallbackQueue.mainCurrentOrAsync.execute { - self.completionSourceHandler?(self.skippedSources, self.failedSources, self.completedSources) - self.completionHandler?( - self.skippedSources.compactMap { $0.asResource }, - self.failedSources.compactMap { $0.asResource }, - self.completedSources.compactMap { $0.asResource } - ) - self.completionHandler = nil - self.progressBlock = nil - } - } -} diff --git a/Pods/Kingfisher/Sources/Networking/RedirectHandler.swift b/Pods/Kingfisher/Sources/Networking/RedirectHandler.swift deleted file mode 100644 index 0d13cbe..0000000 --- a/Pods/Kingfisher/Sources/Networking/RedirectHandler.swift +++ /dev/null @@ -1,76 +0,0 @@ -// -// RedirectHandler.swift -// Kingfisher -// -// Created by Roman Maidanovych on 2018/12/10. -// -// Copyright (c) 2019 Wei Wang -// -// 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 - -/// Represents and wraps a method for modifying request during an image download request redirection. -public protocol ImageDownloadRedirectHandler { - - /// The `ImageDownloadRedirectHandler` contained will be used to change the request before redirection. - /// This is the posibility you can modify the image download request during redirection. You can modify the - /// request for some customizing purpose, such as adding auth token to the header, do basic HTTP auth or - /// something like url mapping. - /// - /// Usually, you pass an `ImageDownloadRedirectHandler` as the associated value of - /// `KingfisherOptionsInfoItem.redirectHandler` and use it as the `options` parameter in related methods. - /// - /// If you do nothing with the input `request` and return it as is, a downloading process will redirect with it. - /// - /// - Parameters: - /// - task: The current `SessionDataTask` which triggers this redirect. - /// - response: The response received during redirection. - /// - newRequest: The request for redirection which can be modified. - /// - completionHandler: A closure for being called with modified request. - func handleHTTPRedirection( - for task: SessionDataTask, - response: HTTPURLResponse, - newRequest: URLRequest, - completionHandler: @escaping (URLRequest?) -> Void) -} - -/// A wrapper for creating an `ImageDownloadRedirectHandler` easier. -/// This type conforms to `ImageDownloadRedirectHandler` and wraps a redirect request modify block. -public struct AnyRedirectHandler: ImageDownloadRedirectHandler { - - let block: (SessionDataTask, HTTPURLResponse, URLRequest, @escaping (URLRequest?) -> Void) -> Void - - public func handleHTTPRedirection( - for task: SessionDataTask, - response: HTTPURLResponse, - newRequest: URLRequest, - completionHandler: @escaping (URLRequest?) -> Void) - { - block(task, response, newRequest, completionHandler) - } - - /// Creates a value of `ImageDownloadRedirectHandler` which runs `modify` block. - /// - /// - Parameter modify: The request modifying block runs when a request modifying task comes. - /// - public init(handle: @escaping (SessionDataTask, HTTPURLResponse, URLRequest, @escaping (URLRequest?) -> Void) -> Void) { - block = handle - } -} diff --git a/Pods/Kingfisher/Sources/Networking/RequestModifier.swift b/Pods/Kingfisher/Sources/Networking/RequestModifier.swift deleted file mode 100644 index a1d972d..0000000 --- a/Pods/Kingfisher/Sources/Networking/RequestModifier.swift +++ /dev/null @@ -1,108 +0,0 @@ -// -// RequestModifier.swift -// Kingfisher -// -// Created by Wei Wang on 2016/09/05. -// -// Copyright (c) 2019 Wei Wang -// -// 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 - -/// Represents and wraps a method for modifying request before an image download request starts in an asynchronous way. -public protocol AsyncImageDownloadRequestModifier { - - /// This method will be called just before the `request` being sent. - /// This is the last chance you can modify the image download request. You can modify the request for some - /// customizing purpose, such as adding auth token to the header, do basic HTTP auth or something like url mapping. - /// When you have done with the modification, call the `reportModified` block with the modified request and the data - /// download will happen with this request. - /// - /// Usually, you pass an `AsyncImageDownloadRequestModifier` as the associated value of - /// `KingfisherOptionsInfoItem.requestModifier` and use it as the `options` parameter in related methods. - /// - /// If you do nothing with the input `request` and return it as is, a downloading process will start with it. - /// - /// - Parameters: - /// - request: The input request contains necessary information like `url`. This request is generated - /// according to your resource url as a GET request. - /// - reportModified: The callback block you need to call after the asynchronous modifying done. - /// - func modified(for request: URLRequest, reportModified: @escaping (URLRequest?) -> Void) - - /// A block will be called when the download task started. - /// - /// If an `AsyncImageDownloadRequestModifier` and the asynchronous modification happens before the download, the - /// related download method will not return a valid `DownloadTask` value. Instead, you can get one from this method. - var onDownloadTaskStarted: ((DownloadTask?) -> Void)? { get } -} - -/// Represents and wraps a method for modifying request before an image download request starts. -public protocol ImageDownloadRequestModifier: AsyncImageDownloadRequestModifier { - - /// This method will be called just before the `request` being sent. - /// This is the last chance you can modify the image download request. You can modify the request for some - /// customizing purpose, such as adding auth token to the header, do basic HTTP auth or something like url mapping. - /// - /// Usually, you pass an `ImageDownloadRequestModifier` as the associated value of - /// `KingfisherOptionsInfoItem.requestModifier` and use it as the `options` parameter in related methods. - /// - /// If you do nothing with the input `request` and return it as is, a downloading process will start with it. - /// - /// - Parameter request: The input request contains necessary information like `url`. This request is generated - /// according to your resource url as a GET request. - /// - Returns: A modified version of request, which you wish to use for downloading an image. If `nil` returned, - /// a `KingfisherError.requestError` with `.emptyRequest` as its reason will occur. - /// - func modified(for request: URLRequest) -> URLRequest? -} - -extension ImageDownloadRequestModifier { - public func modified(for request: URLRequest, reportModified: @escaping (URLRequest?) -> Void) { - let request = modified(for: request) - reportModified(request) - } - - /// This is `nil` for a sync `ImageDownloadRequestModifier` by default. You can get the `DownloadTask` from the - /// return value of downloader method. - public var onDownloadTaskStarted: ((DownloadTask?) -> Void)? { return nil } -} - -/// A wrapper for creating an `ImageDownloadRequestModifier` easier. -/// This type conforms to `ImageDownloadRequestModifier` and wraps an image modify block. -public struct AnyModifier: ImageDownloadRequestModifier { - - let block: (URLRequest) -> URLRequest? - - /// For `ImageDownloadRequestModifier` conformation. - public func modified(for request: URLRequest) -> URLRequest? { - return block(request) - } - - /// Creates a value of `ImageDownloadRequestModifier` which runs `modify` block. - /// - /// - Parameter modify: The request modifying block runs when a request modifying task comes. - /// The return `URLRequest?` value of this block will be used as the image download request. - /// If `nil` returned, a `KingfisherError.requestError` with `.emptyRequest` as its - /// reason will occur. - public init(modify: @escaping (URLRequest) -> URLRequest?) { - block = modify - } -} diff --git a/Pods/Kingfisher/Sources/Networking/RetryStrategy.swift b/Pods/Kingfisher/Sources/Networking/RetryStrategy.swift deleted file mode 100644 index 1ab5a2e..0000000 --- a/Pods/Kingfisher/Sources/Networking/RetryStrategy.swift +++ /dev/null @@ -1,153 +0,0 @@ -// -// RetryStrategy.swift -// Kingfisher -// -// Created by onevcat on 2020/05/04. -// -// Copyright (c) 2020 Wei Wang -// -// 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 - -/// Represents a retry context which could be used to determine the current retry status. -public class RetryContext { - - /// The source from which the target image should be retrieved. - public let source: Source - - /// The last error which caused current retry behavior. - public let error: KingfisherError - - /// The retried count before current retry happens. This value is `0` if the current retry is for the first time. - public var retriedCount: Int - - /// A user set value for passing any other information during the retry. If you choose to use `RetryDecision.retry` - /// as the retry decision for `RetryStrategy.retry(context:retryHandler:)`, the associated value of - /// `RetryDecision.retry` will be delivered to you in the next retry. - public internal(set) var userInfo: Any? = nil - - init(source: Source, error: KingfisherError) { - self.source = source - self.error = error - self.retriedCount = 0 - } - - @discardableResult - func increaseRetryCount() -> RetryContext { - retriedCount += 1 - return self - } -} - -/// Represents decision of behavior on the current retry. -public enum RetryDecision { - /// A retry should happen. The associated `userInfo` will be pass to the next retry in the `RetryContext` parameter. - case retry(userInfo: Any?) - /// There should be no more retry attempt. The image retrieving process will fail with an error. - case stop -} - -/// Defines a retry strategy can be applied to a `.retryStrategy` option. -public protocol RetryStrategy { - - /// Kingfisher calls this method if an error happens during the image retrieving process from a `KingfisherManager`. - /// You implement this method to provide necessary logic based on the `context` parameter. Then you need to call - /// `retryHandler` to pass the retry decision back to Kingfisher. - /// - /// - Parameters: - /// - context: The retry context containing information of current retry attempt. - /// - retryHandler: A block you need to call with a decision of whether the retry should happen or not. - func retry(context: RetryContext, retryHandler: @escaping (RetryDecision) -> Void) -} - -/// A retry strategy that guides Kingfisher to retry when a `.responseError` happens, with a specified max retry count -/// and a certain interval mechanism. -public struct DelayRetryStrategy: RetryStrategy { - - /// Represents the interval mechanism which used in a `DelayRetryStrategy`. - public enum Interval { - /// The next retry attempt should happen in fixed seconds. For example, if the associated value is 3, the - /// attempts happens after 3 seconds after the previous decision is made. - case seconds(TimeInterval) - /// The next retry attempt should happen in an accumulated duration. For example, if the associated value is 3, - /// the attempts happens with interval of 3, 6, 9, 12, ... seconds. - case accumulated(TimeInterval) - /// Uses a block to determine the next interval. The current retry count is given as a parameter. - case custom(block: (_ retriedCount: Int) -> TimeInterval) - - func timeInterval(for retriedCount: Int) -> TimeInterval { - let retryAfter: TimeInterval - switch self { - case .seconds(let interval): - retryAfter = interval - case .accumulated(let interval): - retryAfter = Double(retriedCount + 1) * interval - case .custom(let block): - retryAfter = block(retriedCount) - } - return retryAfter - } - } - - /// The max retry count defined for the retry strategy - public let maxRetryCount: Int - - /// The retry interval mechanism defined for the retry strategy. - public let retryInterval: Interval - - /// Creates a delay retry strategy. - /// - Parameters: - /// - maxRetryCount: The max retry count. - /// - retryInterval: The retry interval mechanism. By default, `.seconds(3)` is used to provide a constant retry - /// interval. - public init(maxRetryCount: Int, retryInterval: Interval = .seconds(3)) { - self.maxRetryCount = maxRetryCount - self.retryInterval = retryInterval - } - - public func retry(context: RetryContext, retryHandler: @escaping (RetryDecision) -> Void) { - // Retry count exceeded. - guard context.retriedCount < maxRetryCount else { - retryHandler(.stop) - return - } - - // User cancel the task. No retry. - guard !context.error.isTaskCancelled else { - retryHandler(.stop) - return - } - - // Only retry for a response error. - guard case KingfisherError.responseError = context.error else { - retryHandler(.stop) - return - } - - let interval = retryInterval.timeInterval(for: context.retriedCount) - if interval == 0 { - retryHandler(.retry(userInfo: nil)) - } else { - DispatchQueue.main.asyncAfter(deadline: .now() + interval) { - retryHandler(.retry(userInfo: nil)) - } - } - } -} diff --git a/Pods/Kingfisher/Sources/Networking/SessionDataTask.swift b/Pods/Kingfisher/Sources/Networking/SessionDataTask.swift deleted file mode 100644 index 8932bd5..0000000 --- a/Pods/Kingfisher/Sources/Networking/SessionDataTask.swift +++ /dev/null @@ -1,127 +0,0 @@ -// -// SessionDataTask.swift -// Kingfisher -// -// Created by Wei Wang on 2018/11/1. -// -// Copyright (c) 2019 Wei Wang -// -// 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 - -/// Represents a session data task in `ImageDownloader`. It consists of an underlying `URLSessionDataTask` and -/// an array of `TaskCallback`. Multiple `TaskCallback`s could be added for a single downloading data task. -public class SessionDataTask { - - /// Represents the type of token which used for cancelling a task. - public typealias CancelToken = Int - - struct TaskCallback { - let onCompleted: Delegate, Void>? - let options: KingfisherParsedOptionsInfo - } - - /// Downloaded raw data of current task. - public private(set) var mutableData: Data - - // This is a copy of `task.originalRequest?.url`. It is for getting a race-safe behavior for a pitfall on iOS 13. - // Ref: https://github.com/onevcat/Kingfisher/issues/1511 - public let originalURL: URL? - - /// The underlying download task. It is only for debugging purpose when you encountered an error. You should not - /// modify the content of this task or start it yourself. - public let task: URLSessionDataTask - private var callbacksStore = [CancelToken: TaskCallback]() - - var callbacks: [SessionDataTask.TaskCallback] { - lock.lock() - defer { lock.unlock() } - return Array(callbacksStore.values) - } - - private var currentToken = 0 - private let lock = NSLock() - - let onTaskDone = Delegate<(Result<(Data, URLResponse?), KingfisherError>, [TaskCallback]), Void>() - let onCallbackCancelled = Delegate<(CancelToken, TaskCallback), Void>() - - var started = false - var containsCallbacks: Bool { - // We should be able to use `task.state != .running` to check it. - // However, in some rare cases, cancelling the task does not change - // task state to `.cancelling` immediately, but still in `.running`. - // So we need to check callbacks count to for sure that it is safe to remove the - // task in delegate. - return !callbacks.isEmpty - } - - init(task: URLSessionDataTask) { - self.task = task - self.originalURL = task.originalRequest?.url - mutableData = Data() - } - - func addCallback(_ callback: TaskCallback) -> CancelToken { - lock.lock() - defer { lock.unlock() } - callbacksStore[currentToken] = callback - defer { currentToken += 1 } - return currentToken - } - - func removeCallback(_ token: CancelToken) -> TaskCallback? { - lock.lock() - defer { lock.unlock() } - if let callback = callbacksStore[token] { - callbacksStore[token] = nil - return callback - } - return nil - } - - func removeAllCallbacks() -> Void { - lock.lock() - defer { lock.unlock() } - callbacksStore.removeAll() - } - - func resume() { - guard !started else { return } - started = true - task.resume() - } - - func cancel(token: CancelToken) { - guard let callback = removeCallback(token) else { - return - } - onCallbackCancelled.call((token, callback)) - } - - func forceCancel() { - for token in callbacksStore.keys { - cancel(token: token) - } - } - - func didReceiveData(_ data: Data) { - mutableData.append(data) - } -} diff --git a/Pods/Kingfisher/Sources/Networking/SessionDelegate.swift b/Pods/Kingfisher/Sources/Networking/SessionDelegate.swift deleted file mode 100644 index a4f6bf4..0000000 --- a/Pods/Kingfisher/Sources/Networking/SessionDelegate.swift +++ /dev/null @@ -1,271 +0,0 @@ -// -// SessionDelegate.swift -// Kingfisher -// -// Created by Wei Wang on 2018/11/1. -// -// Copyright (c) 2019 Wei Wang -// -// 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 - -// Represents the delegate object of downloader session. It also behave like a task manager for downloading. -@objc(KFSessionDelegate) // Fix for ObjC header name conflicting. https://github.com/onevcat/Kingfisher/issues/1530 -open class SessionDelegate: NSObject { - - typealias SessionChallengeFunc = ( - URLSession, - URLAuthenticationChallenge, - (URLSession.AuthChallengeDisposition, URLCredential?) -> Void - ) - - typealias SessionTaskChallengeFunc = ( - URLSession, - URLSessionTask, - URLAuthenticationChallenge, - (URLSession.AuthChallengeDisposition, URLCredential?) -> Void - ) - - private var tasks: [URL: SessionDataTask] = [:] - private let lock = NSLock() - - let onValidStatusCode = Delegate() - let onResponseReceived = Delegate<(URLResponse, (URLSession.ResponseDisposition) -> Void), Void>() - let onDownloadingFinished = Delegate<(URL, Result), Void>() - let onDidDownloadData = Delegate() - - let onReceiveSessionChallenge = Delegate() - let onReceiveSessionTaskChallenge = Delegate() - - func add( - _ dataTask: URLSessionDataTask, - url: URL, - callback: SessionDataTask.TaskCallback) -> DownloadTask - { - lock.lock() - defer { lock.unlock() } - - // Create a new task if necessary. - let task = SessionDataTask(task: dataTask) - task.onCallbackCancelled.delegate(on: self) { [weak task] (self, value) in - guard let task = task else { return } - - let (token, callback) = value - - let error = KingfisherError.requestError(reason: .taskCancelled(task: task, token: token)) - task.onTaskDone.call((.failure(error), [callback])) - // No other callbacks waiting, we can clear the task now. - if !task.containsCallbacks { - let dataTask = task.task - - self.cancelTask(dataTask) - self.remove(task) - } - } - let token = task.addCallback(callback) - tasks[url] = task - return DownloadTask(sessionTask: task, cancelToken: token) - } - - private func cancelTask(_ dataTask: URLSessionDataTask) { - lock.lock() - defer { lock.unlock() } - dataTask.cancel() - } - - func append( - _ task: SessionDataTask, - callback: SessionDataTask.TaskCallback) -> DownloadTask - { - let token = task.addCallback(callback) - return DownloadTask(sessionTask: task, cancelToken: token) - } - - private func remove(_ task: SessionDataTask) { - lock.lock() - defer { lock.unlock() } - - guard let url = task.originalURL else { - return - } - task.removeAllCallbacks() - tasks[url] = nil - } - - private func task(for task: URLSessionTask) -> SessionDataTask? { - lock.lock() - defer { lock.unlock() } - - guard let url = task.originalRequest?.url else { - return nil - } - guard let sessionTask = tasks[url] else { - return nil - } - guard sessionTask.task.taskIdentifier == task.taskIdentifier else { - return nil - } - return sessionTask - } - - func task(for url: URL) -> SessionDataTask? { - lock.lock() - defer { lock.unlock() } - return tasks[url] - } - - func cancelAll() { - lock.lock() - let taskValues = tasks.values - lock.unlock() - for task in taskValues { - task.forceCancel() - } - } - - func cancel(url: URL) { - lock.lock() - let task = tasks[url] - lock.unlock() - task?.forceCancel() - } -} - -extension SessionDelegate: URLSessionDataDelegate { - - open func urlSession( - _ session: URLSession, - dataTask: URLSessionDataTask, - didReceive response: URLResponse, - completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) - { - guard let httpResponse = response as? HTTPURLResponse else { - let error = KingfisherError.responseError(reason: .invalidURLResponse(response: response)) - onCompleted(task: dataTask, result: .failure(error)) - completionHandler(.cancel) - return - } - - let httpStatusCode = httpResponse.statusCode - guard onValidStatusCode.call(httpStatusCode) == true else { - let error = KingfisherError.responseError(reason: .invalidHTTPStatusCode(response: httpResponse)) - onCompleted(task: dataTask, result: .failure(error)) - completionHandler(.cancel) - return - } - - let inspectedHandler: (URLSession.ResponseDisposition) -> Void = { disposition in - if disposition == .cancel { - let error = KingfisherError.responseError(reason: .cancelledByDelegate(response: response)) - self.onCompleted(task: dataTask, result: .failure(error)) - } - completionHandler(disposition) - } - onResponseReceived.call((response, inspectedHandler)) - } - - open func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) { - guard let task = self.task(for: dataTask) else { - return - } - - task.didReceiveData(data) - - task.callbacks.forEach { callback in - callback.options.onDataReceived?.forEach { sideEffect in - sideEffect.onDataReceived(session, task: task, data: data) - } - } - } - - open func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { - guard let sessionTask = self.task(for: task) else { return } - - if let url = sessionTask.originalURL { - let result: Result - if let error = error { - result = .failure(KingfisherError.responseError(reason: .URLSessionError(error: error))) - } else if let response = task.response { - result = .success(response) - } else { - result = .failure(KingfisherError.responseError(reason: .noURLResponse(task: sessionTask))) - } - onDownloadingFinished.call((url, result)) - } - - let result: Result<(Data, URLResponse?), KingfisherError> - if let error = error { - result = .failure(KingfisherError.responseError(reason: .URLSessionError(error: error))) - } else { - if let data = onDidDownloadData.call(sessionTask) { - result = .success((data, task.response)) - } else { - result = .failure(KingfisherError.responseError(reason: .dataModifyingFailed(task: sessionTask))) - } - } - onCompleted(task: task, result: result) - } - - open func urlSession( - _ session: URLSession, - didReceive challenge: URLAuthenticationChallenge, - completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) - { - onReceiveSessionChallenge.call((session, challenge, completionHandler)) - } - - open func urlSession( - _ session: URLSession, - task: URLSessionTask, - didReceive challenge: URLAuthenticationChallenge, - completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) - { - onReceiveSessionTaskChallenge.call((session, task, challenge, completionHandler)) - } - - open func urlSession( - _ session: URLSession, - task: URLSessionTask, - willPerformHTTPRedirection response: HTTPURLResponse, - newRequest request: URLRequest, - completionHandler: @escaping (URLRequest?) -> Void) - { - guard let sessionDataTask = self.task(for: task), - let redirectHandler = Array(sessionDataTask.callbacks).last?.options.redirectHandler else - { - completionHandler(request) - return - } - - redirectHandler.handleHTTPRedirection( - for: sessionDataTask, - response: response, - newRequest: request, - completionHandler: completionHandler) - } - - private func onCompleted(task: URLSessionTask, result: Result<(Data, URLResponse?), KingfisherError>) { - guard let sessionTask = self.task(for: task) else { - return - } - sessionTask.onTaskDone.call((result, sessionTask.callbacks)) - remove(sessionTask) - } -} diff --git a/Pods/Kingfisher/Sources/SwiftUI/ImageBinder.swift b/Pods/Kingfisher/Sources/SwiftUI/ImageBinder.swift deleted file mode 100644 index 6114479..0000000 --- a/Pods/Kingfisher/Sources/SwiftUI/ImageBinder.swift +++ /dev/null @@ -1,149 +0,0 @@ -// -// ImageBinder.swift -// Kingfisher -// -// Created by onevcat on 2019/06/27. -// -// Copyright (c) 2019 Wei Wang -// -// 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(SwiftUI) && canImport(Combine) -import SwiftUI -import Combine - -@available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) -extension KFImage { - - /// Represents a binder for `KFImage`. It takes responsibility as an `ObjectBinding` and performs - /// image downloading and progress reporting based on `KingfisherManager`. - class ImageBinder: ObservableObject { - - init() {} - - var downloadTask: DownloadTask? - private var loading = false - - var loadingOrSucceeded: Bool { - return loading || loadedImage != nil - } - - // Do not use @Published due to https://github.com/onevcat/Kingfisher/issues/1717. Revert to @Published once - // we can drop iOS 12. - private(set) var loaded = false - - private(set) var animating = false - - var loadedImage: KFCrossPlatformImage? = nil { willSet { objectWillChange.send() } } - var progress: Progress = .init() - - func markLoading() { - loading = true - } - - func markLoaded(sendChangeEvent: Bool) { - loaded = true - if sendChangeEvent { - objectWillChange.send() - } - } - - func start(context: Context) { - guard let source = context.source else { - CallbackQueue.mainCurrentOrAsync.execute { - context.onFailureDelegate.call(KingfisherError.imageSettingError(reason: .emptySource)) - if let image = context.options.onFailureImage { - self.loadedImage = image - } - self.loading = false - self.markLoaded(sendChangeEvent: false) - } - return - } - - loading = true - - progress = .init() - downloadTask = KingfisherManager.shared - .retrieveImage( - with: source, - options: context.options, - progressBlock: { size, total in - self.updateProgress(downloaded: size, total: total) - context.onProgressDelegate.call((size, total)) - }, - completionHandler: { [weak self] result in - - guard let self = self else { return } - - CallbackQueue.mainCurrentOrAsync.execute { - self.downloadTask = nil - self.loading = false - } - - switch result { - case .success(let value): - CallbackQueue.mainCurrentOrAsync.execute { - if let fadeDuration = context.fadeTransitionDuration(cacheType: value.cacheType) { - self.animating = true - let animation = Animation.linear(duration: fadeDuration) - withAnimation(animation) { - // Trigger the view render to apply the animation. - self.markLoaded(sendChangeEvent: true) - } - } else { - self.markLoaded(sendChangeEvent: false) - } - self.loadedImage = value.image - self.animating = false - } - - CallbackQueue.mainAsync.execute { - context.onSuccessDelegate.call(value) - } - case .failure(let error): - CallbackQueue.mainCurrentOrAsync.execute { - if let image = context.options.onFailureImage { - self.loadedImage = image - } - self.markLoaded(sendChangeEvent: true) - } - - CallbackQueue.mainAsync.execute { - context.onFailureDelegate.call(error) - } - } - }) - } - - private func updateProgress(downloaded: Int64, total: Int64) { - progress.totalUnitCount = total - progress.completedUnitCount = downloaded - objectWillChange.send() - } - - /// Cancels the download task if it is in progress. - func cancel() { - downloadTask?.cancel() - downloadTask = nil - loading = false - } - } -} -#endif diff --git a/Pods/Kingfisher/Sources/SwiftUI/ImageContext.swift b/Pods/Kingfisher/Sources/SwiftUI/ImageContext.swift deleted file mode 100644 index 730477b..0000000 --- a/Pods/Kingfisher/Sources/SwiftUI/ImageContext.swift +++ /dev/null @@ -1,102 +0,0 @@ -// -// ImageContext.swift -// Kingfisher -// -// Created by onevcat on 2021/05/08. -// -// Copyright (c) 2021 Wei Wang -// -// 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(SwiftUI) && canImport(Combine) -import SwiftUI -import Combine - -@available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) -extension KFImage { - public class Context { - let source: Source? - var options = KingfisherParsedOptionsInfo( - KingfisherManager.shared.defaultOptions + [.loadDiskFileSynchronously] - ) - - var configurations: [(HoldingView) -> HoldingView] = [] - var renderConfigurations: [(HoldingView.RenderingView) -> Void] = [] - var contentConfiguration: ((HoldingView) -> AnyView)? = nil - - var cancelOnDisappear: Bool = false - var placeholder: ((Progress) -> AnyView)? = nil - - let onFailureDelegate = Delegate() - let onSuccessDelegate = Delegate() - let onProgressDelegate = Delegate<(Int64, Int64), Void>() - - var startLoadingBeforeViewAppear: Bool = false - - init(source: Source?) { - self.source = source - } - - func shouldApplyFade(cacheType: CacheType) -> Bool { - options.forceTransition || cacheType == .none - } - - func fadeTransitionDuration(cacheType: CacheType) -> TimeInterval? { - shouldApplyFade(cacheType: cacheType) - ? options.transition.fadeDuration - : nil - } - } -} - -extension ImageTransition { - // Only for fade effect in SwiftUI. - fileprivate var fadeDuration: TimeInterval? { - switch self { - case .fade(let duration): - return duration - default: - return nil - } - } -} - - -@available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) -extension KFImage.Context: Hashable { - public static func == (lhs: KFImage.Context, rhs: KFImage.Context) -> Bool { - lhs.source == rhs.source && - lhs.options.processor.identifier == rhs.options.processor.identifier - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(source) - hasher.combine(options.processor.identifier) - } -} - -#if canImport(UIKit) && !os(watchOS) -@available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) -extension KFAnimatedImage { - public typealias Context = KFImage.Context - typealias ImageBinder = KFImage.ImageBinder -} -#endif - -#endif diff --git a/Pods/Kingfisher/Sources/SwiftUI/KFAnimatedImage.swift b/Pods/Kingfisher/Sources/SwiftUI/KFAnimatedImage.swift deleted file mode 100644 index ad25eb2..0000000 --- a/Pods/Kingfisher/Sources/SwiftUI/KFAnimatedImage.swift +++ /dev/null @@ -1,96 +0,0 @@ -// -// KFAnimatedImage.swift -// Kingfisher -// -// Created by wangxingbin on 2021/4/29. -// -// Copyright (c) 2021 Wei Wang -// -// 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(SwiftUI) && canImport(Combine) && canImport(UIKit) && !os(watchOS) -import SwiftUI -import Combine - -@available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) -public struct KFAnimatedImage: KFImageProtocol { - public typealias HoldingView = KFAnimatedImageViewRepresenter - public var context: Context - public init(context: KFImage.Context) { - self.context = context - } - - /// Configures current rendering view with a `block`. This block will be applied when the under-hood - /// `AnimatedImageView` is created in `UIViewRepresentable.makeUIView(context:)` - /// - /// - Parameter block: The block applies to the animated image view. - /// - Returns: A `KFAnimatedImage` view that being configured by the `block`. - public func configure(_ block: @escaping (HoldingView.RenderingView) -> Void) -> Self { - context.renderConfigurations.append(block) - return self - } -} - -/// A wrapped `UIViewRepresentable` of `AnimatedImageView` -@available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) -public struct KFAnimatedImageViewRepresenter: UIViewRepresentable, KFImageHoldingView { - public typealias RenderingView = AnimatedImageView - public static func created(from image: KFCrossPlatformImage?, context: KFImage.Context) -> KFAnimatedImageViewRepresenter { - KFAnimatedImageViewRepresenter(image: image, context: context) - } - - var image: KFCrossPlatformImage? - let context: KFImage.Context - - public func makeUIView(context: Context) -> AnimatedImageView { - let view = AnimatedImageView() - - self.context.renderConfigurations.forEach { $0(view) } - - view.image = image - - // Allow SwiftUI scale (fit/fill) working fine. - view.setContentCompressionResistancePriority(.defaultLow, for: .horizontal) - view.setContentCompressionResistancePriority(.defaultLow, for: .vertical) - return view - } - - public func updateUIView(_ uiView: AnimatedImageView, context: Context) { - uiView.image = image - } -} - -#if DEBUG -@available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) -struct KFAnimatedImage_Previews: PreviewProvider { - static var previews: some View { - Group { - KFAnimatedImage(source: .network(URL(string: "https://raw.githubusercontent.com/onevcat/Kingfisher-TestImages/master/DemoAppImage/GIF/1.gif")!)) - .onSuccess { r in - print(r) - } - .placeholder { - ProgressView() - } - .padding() - } - } -} -#endif -#endif diff --git a/Pods/Kingfisher/Sources/SwiftUI/KFImage.swift b/Pods/Kingfisher/Sources/SwiftUI/KFImage.swift deleted file mode 100644 index 67f1c19..0000000 --- a/Pods/Kingfisher/Sources/SwiftUI/KFImage.swift +++ /dev/null @@ -1,106 +0,0 @@ -// -// KFImage.swift -// Kingfisher -// -// Created by onevcat on 2019/06/26. -// -// Copyright (c) 2019 Wei Wang -// -// 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(SwiftUI) && canImport(Combine) -import SwiftUI -import Combine - -@available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) -public struct KFImage: KFImageProtocol { - public var context: Context - public init(context: Context) { - self.context = context - } -} - -@available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) -extension Image: KFImageHoldingView { - public typealias RenderingView = Image - public static func created(from image: KFCrossPlatformImage?, context: KFImage.Context) -> Image { - Image(crossPlatformImage: image) - } -} - -// MARK: - Image compatibility. -@available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) -extension KFImage { - - public func resizable( - capInsets: EdgeInsets = EdgeInsets(), - resizingMode: Image.ResizingMode = .stretch) -> KFImage - { - configure { $0.resizable(capInsets: capInsets, resizingMode: resizingMode) } - } - - public func renderingMode(_ renderingMode: Image.TemplateRenderingMode?) -> KFImage { - configure { $0.renderingMode(renderingMode) } - } - - public func interpolation(_ interpolation: Image.Interpolation) -> KFImage { - configure { $0.interpolation(interpolation) } - } - - public func antialiased(_ isAntialiased: Bool) -> KFImage { - configure { $0.antialiased(isAntialiased) } - } - - /// Starts the loading process of `self` immediately. - /// - /// By default, a `KFImage` will not load its source until the `onAppear` is called. This is a lazily loading - /// behavior and provides better performance. However, when you refresh the view, the lazy loading also causes a - /// flickering since the loading does not happen immediately. Call this method if you want to start the load at once - /// could help avoiding the flickering, with some performance trade-off. - /// - /// - Deprecated: This is not necessary anymore since `@StateObject` is used for holding the image data. - /// It does nothing now and please just remove it. - /// - /// - Returns: The `Self` value with changes applied. - @available(*, deprecated, message: "This is not necessary anymore since `@StateObject` is used. It does nothing now and please just remove it.") - public func loadImmediately(_ start: Bool = true) -> KFImage { - return self - } -} - -#if DEBUG -@available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) -struct KFImage_Previews: PreviewProvider { - static var previews: some View { - Group { - KFImage.url(URL(string: "https://raw.githubusercontent.com/onevcat/Kingfisher/master/images/logo.png")!) - .onSuccess { r in - print(r) - } - .placeholder { p in - ProgressView(p) - } - .resizable() - .aspectRatio(contentMode: .fit) - .padding() - } - } -} -#endif -#endif diff --git a/Pods/Kingfisher/Sources/SwiftUI/KFImageOptions.swift b/Pods/Kingfisher/Sources/SwiftUI/KFImageOptions.swift deleted file mode 100644 index a63d909..0000000 --- a/Pods/Kingfisher/Sources/SwiftUI/KFImageOptions.swift +++ /dev/null @@ -1,158 +0,0 @@ -// -// KFImageOptions.swift -// Kingfisher -// -// Created by onevcat on 2020/12/20. -// -// Copyright (c) 2020 Wei Wang -// -// 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(SwiftUI) && canImport(Combine) -import SwiftUI -import Combine - -// MARK: - KFImage creating. -@available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) -extension KFImageProtocol { - - /// Creates a `KFImage` for a given `Source`. - /// - Parameters: - /// - source: The `Source` object defines data information from network or a data provider. - /// - Returns: A `KFImage` for future configuration or embedding to a `SwiftUI.View`. - public static func source( - _ source: Source? - ) -> Self - { - Self.init(source: source) - } - - /// Creates a `KFImage` for a given `Resource`. - /// - Parameters: - /// - source: The `Resource` object defines data information like key or URL. - /// - Returns: A `KFImage` for future configuration or embedding to a `SwiftUI.View`. - public static func resource( - _ resource: Resource? - ) -> Self - { - source(resource?.convertToSource()) - } - - /// Creates a `KFImage` for a given `URL`. - /// - Parameters: - /// - url: The URL where the image should be downloaded. - /// - cacheKey: The key used to store the downloaded image in cache. - /// If `nil`, the `absoluteString` of `url` is used as the cache key. - /// - Returns: A `KFImage` for future configuration or embedding to a `SwiftUI.View`. - public static func url( - _ url: URL?, cacheKey: String? = nil - ) -> Self - { - source(url?.convertToSource(overrideCacheKey: cacheKey)) - } - - /// Creates a `KFImage` for a given `ImageDataProvider`. - /// - Parameters: - /// - provider: The `ImageDataProvider` object contains information about the data. - /// - Returns: A `KFImage` for future configuration or embedding to a `SwiftUI.View`. - public static func dataProvider( - _ provider: ImageDataProvider? - ) -> Self - { - source(provider?.convertToSource()) - } - - /// Creates a builder for some given raw data and a cache key. - /// - Parameters: - /// - data: The data object from which the image should be created. - /// - cacheKey: The key used to store the downloaded image in cache. - /// - Returns: A `KFImage` for future configuration or embedding to a `SwiftUI.View`. - public static func data( - _ data: Data?, cacheKey: String - ) -> Self - { - if let data = data { - return dataProvider(RawImageDataProvider(data: data, cacheKey: cacheKey)) - } else { - return dataProvider(nil) - } - } -} - -@available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) -extension KFImageProtocol { - /// Sets a placeholder `View` which shows when loading the image, with a progress parameter as input. - /// - Parameter content: A view that describes the placeholder. - /// - Returns: A `KFImage` view that contains `content` as its placeholder. - public func placeholder(@ViewBuilder _ content: @escaping (Progress) -> P) -> Self { - context.placeholder = { progress in - return AnyView(content(progress)) - } - return self - } - - /// Sets a placeholder `View` which shows when loading the image. - /// - Parameter content: A view that describes the placeholder. - /// - Returns: A `KFImage` view that contains `content` as its placeholder. - public func placeholder(@ViewBuilder _ content: @escaping () -> P) -> Self { - placeholder { _ in content() } - } - - /// Sets cancelling the download task bound to `self` when the view disappearing. - /// - Parameter flag: Whether cancel the task or not. - /// - Returns: A `KFImage` view that cancels downloading task when disappears. - public func cancelOnDisappear(_ flag: Bool) -> Self { - context.cancelOnDisappear = flag - return self - } - - /// Sets a fade transition for the image task. - /// - Parameter duration: The duration of the fade transition. - /// - Returns: A `KFImage` with changes applied. - /// - /// Kingfisher will use the fade transition to animate the image in if it is downloaded from web. - /// The transition will not happen when the - /// image is retrieved from either memory or disk cache by default. If you need to do the transition even when - /// the image being retrieved from cache, also call `forceRefresh()` on the returned `KFImage`. - public func fade(duration: TimeInterval) -> Self { - context.options.transition = .fade(duration) - return self - } - - /// Sets whether to start the image loading before the view actually appears. - /// - /// By default, Kingfisher performs a lazy loading for `KFImage`. The image loading won't start until the view's - /// `onAppear` is called. However, sometimes you may want to trigger an aggressive loading for the view. By enabling - /// this, the `KFImage` will try to load the view when its `body` is evaluated when the image loading is not yet - /// started or a previous loading did fail. - /// - /// - Parameter flag: Whether the image loading should happen before view appear. Default is `true`. - /// - Returns: A `KFImage` with changes applied. - /// - /// - Note: This is a temporary workaround for an issue from iOS 16, where the SwiftUI view's `onAppear` is not - /// called when it is deeply embedded inside a `List` or `ForEach`. - /// See [#1988](https://github.com/onevcat/Kingfisher/issues/1988). It may cause performance regression, especially - /// if you have a lot of images to load in the view. Use it as your own risk. - /// - public func startLoadingBeforeViewAppear(_ flag: Bool = true) -> Self { - context.startLoadingBeforeViewAppear = flag - return self - } -} -#endif diff --git a/Pods/Kingfisher/Sources/SwiftUI/KFImageProtocol.swift b/Pods/Kingfisher/Sources/SwiftUI/KFImageProtocol.swift deleted file mode 100644 index 5a5ad4b..0000000 --- a/Pods/Kingfisher/Sources/SwiftUI/KFImageProtocol.swift +++ /dev/null @@ -1,112 +0,0 @@ -// -// KFImageProtocol.swift -// Kingfisher -// -// Created by onevcat on 2021/05/08. -// -// Copyright (c) 2021 Wei Wang -// -// 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(SwiftUI) && canImport(Combine) -import SwiftUI -import Combine - -@available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) -public protocol KFImageProtocol: View, KFOptionSetter { - associatedtype HoldingView: KFImageHoldingView - var context: KFImage.Context { get set } - init(context: KFImage.Context) -} - -@available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) -extension KFImageProtocol { - public var body: some View { - ZStack { - KFImageRenderer( - context: context - ).id(context) - } - } - - /// Creates a Kingfisher compatible image view to load image from the given `Source`. - /// - Parameters: - /// - source: The image `Source` defining where to load the target image. - public init(source: Source?) { - let context = KFImage.Context(source: source) - self.init(context: context) - } - - /// Creates a Kingfisher compatible image view to load image from the given `URL`. - /// - Parameters: - /// - source: The image `Source` defining where to load the target image. - public init(_ url: URL?) { - self.init(source: url?.convertToSource()) - } - - /// Configures current image with a `block` and return another `Image` to use as the final content. - /// - /// This block will be lazily applied when creating the final `Image`. - /// - /// If multiple `configure` modifiers are added to the image, they will be evaluated by order. If you want to - /// configure the input image (which is usually an `Image` value) to a non-`Image` value, use `contentConfigure`. - /// - /// - Parameter block: The block applies to loaded image. The block should return an `Image` that is configured. - /// - Returns: A `KFImage` view that configures internal `Image` with `block`. - public func configure(_ block: @escaping (HoldingView) -> HoldingView) -> Self { - context.configurations.append(block) - return self - } - - /// Configures current image with a `block` and return a `View` to use as the final content. - /// - /// This block will be lazily applied when creating the final `Image`. - /// - /// If multiple `contentConfigure` modifiers are added to the image, only the last one will be stored and used. - /// - /// - Parameter block: The block applies to the loaded image. The block should return a `View` that is configured. - /// - Returns: A `KFImage` view that configures internal `Image` with `block`. - public func contentConfigure(_ block: @escaping (HoldingView) -> V) -> Self { - context.contentConfiguration = { AnyView(block($0)) } - return self - } -} - -@available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) -public protocol KFImageHoldingView: View { - associatedtype RenderingView - static func created(from image: KFCrossPlatformImage?, context: KFImage.Context) -> Self -} - -@available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) -extension KFImageProtocol { - public var options: KingfisherParsedOptionsInfo { - get { context.options } - nonmutating set { context.options = newValue } - } - - public var onFailureDelegate: Delegate { context.onFailureDelegate } - public var onSuccessDelegate: Delegate { context.onSuccessDelegate } - public var onProgressDelegate: Delegate<(Int64, Int64), Void> { context.onProgressDelegate } - - public var delegateObserver: AnyObject { context } -} - - -#endif diff --git a/Pods/Kingfisher/Sources/SwiftUI/KFImageRenderer.swift b/Pods/Kingfisher/Sources/SwiftUI/KFImageRenderer.swift deleted file mode 100644 index 5203b4e..0000000 --- a/Pods/Kingfisher/Sources/SwiftUI/KFImageRenderer.swift +++ /dev/null @@ -1,129 +0,0 @@ -// -// KFImageRenderer.swift -// Kingfisher -// -// Created by onevcat on 2021/05/08. -// -// Copyright (c) 2021 Wei Wang -// -// 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(SwiftUI) && canImport(Combine) -import SwiftUI -import Combine - -/// A Kingfisher compatible SwiftUI `View` to load an image from a `Source`. -/// Declaring a `KFImage` in a `View`'s body to trigger loading from the given `Source`. -@available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) -struct KFImageRenderer : View where HoldingView: KFImageHoldingView { - - @StateObject var binder: KFImage.ImageBinder = .init() - let context: KFImage.Context - - var body: some View { - if context.startLoadingBeforeViewAppear && !binder.loadingOrSucceeded && !binder.animating { - binder.markLoading() - DispatchQueue.main.async { binder.start(context: context) } - } - - return ZStack { - renderedImage().opacity(binder.loaded ? 1.0 : 0.0) - if binder.loadedImage == nil { - ZStack { - if let placeholder = context.placeholder { - placeholder(binder.progress) - } else { - Color.clear - } - } - .onAppear { [weak binder = self.binder] in - guard let binder = binder else { - return - } - if !binder.loadingOrSucceeded { - binder.start(context: context) - } - } - .onDisappear { [weak binder = self.binder] in - guard let binder = binder else { - return - } - if context.cancelOnDisappear { - binder.cancel() - } - } - } - } - // Workaround for https://github.com/onevcat/Kingfisher/issues/1988 - // on iOS 16 there seems to be a bug that when in a List, the `onAppear` of the `ZStack` above in the - // `binder.loadedImage == nil` not get called. Adding this empty `onAppear` fixes it and the life cycle can - // work again. - // - // There is another "fix": adding an `else` clause and put a `Color.clear` there. But I believe this `onAppear` - // should work better. - // - // It should be a bug in iOS 16, I guess it is some kinds of over-optimization in list cell loading caused it. - .onAppear() - } - - @ViewBuilder - private func renderedImage() -> some View { - let configuredImage = context.configurations - .reduce(HoldingView.created(from: binder.loadedImage, context: context)) { - current, config in config(current) - } - if let contentConfiguration = context.contentConfiguration { - contentConfiguration(configuredImage) - } else { - configuredImage - } - } -} - -@available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) -extension Image { - // Creates an Image with either UIImage or NSImage. - init(crossPlatformImage: KFCrossPlatformImage?) { - #if canImport(UIKit) - self.init(uiImage: crossPlatformImage ?? KFCrossPlatformImage()) - #elseif canImport(AppKit) - self.init(nsImage: crossPlatformImage ?? KFCrossPlatformImage()) - #endif - } -} - -#if canImport(UIKit) -@available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) -extension UIImage.Orientation { - func toSwiftUI() -> Image.Orientation { - switch self { - case .down: return .down - case .up: return .up - case .left: return .left - case .right: return .right - case .upMirrored: return .upMirrored - case .downMirrored: return .downMirrored - case .leftMirrored: return .leftMirrored - case .rightMirrored: return .rightMirrored - @unknown default: return .up - } - } -} -#endif -#endif diff --git a/Pods/Kingfisher/Sources/Utility/Box.swift b/Pods/Kingfisher/Sources/Utility/Box.swift deleted file mode 100644 index 0303a6e..0000000 --- a/Pods/Kingfisher/Sources/Utility/Box.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// Box.swift -// Kingfisher -// -// Created by Wei Wang on 2018/3/17. -// Copyright (c) 2019 Wei Wang -// -// 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 - -class Box { - var value: T - - init(_ value: T) { - self.value = value - } -} diff --git a/Pods/Kingfisher/Sources/Utility/CallbackQueue.swift b/Pods/Kingfisher/Sources/Utility/CallbackQueue.swift deleted file mode 100644 index 822af28..0000000 --- a/Pods/Kingfisher/Sources/Utility/CallbackQueue.swift +++ /dev/null @@ -1,83 +0,0 @@ -// -// CallbackQueue.swift -// Kingfisher -// -// Created by onevcat on 2018/10/15. -// -// Copyright (c) 2019 Wei Wang -// -// 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 - -public typealias ExecutionQueue = CallbackQueue - -/// Represents callback queue behaviors when an calling of closure be dispatched. -/// -/// - asyncMain: Dispatch the calling to `DispatchQueue.main` with an `async` behavior. -/// - currentMainOrAsync: Dispatch the calling to `DispatchQueue.main` with an `async` behavior if current queue is not -/// `.main`. Otherwise, call the closure immediately in current main queue. -/// - untouch: Do not change the calling queue for closure. -/// - dispatch: Dispatches to a specified `DispatchQueue`. -public enum CallbackQueue { - /// Dispatch the calling to `DispatchQueue.main` with an `async` behavior. - case mainAsync - /// Dispatch the calling to `DispatchQueue.main` with an `async` behavior if current queue is not - /// `.main`. Otherwise, call the closure immediately in current main queue. - case mainCurrentOrAsync - /// Do not change the calling queue for closure. - case untouch - /// Dispatches to a specified `DispatchQueue`. - case dispatch(DispatchQueue) - - public func execute(_ block: @escaping () -> Void) { - switch self { - case .mainAsync: - DispatchQueue.main.async { block() } - case .mainCurrentOrAsync: - DispatchQueue.main.safeAsync { block() } - case .untouch: - block() - case .dispatch(let queue): - queue.async { block() } - } - } - - var queue: DispatchQueue { - switch self { - case .mainAsync: return .main - case .mainCurrentOrAsync: return .main - case .untouch: return OperationQueue.current?.underlyingQueue ?? .main - case .dispatch(let queue): return queue - } - } -} - -extension DispatchQueue { - // This method will dispatch the `block` to self. - // If `self` is the main queue, and current thread is main thread, the block - // will be invoked immediately instead of being dispatched. - func safeAsync(_ block: @escaping () -> Void) { - if self === DispatchQueue.main && Thread.isMainThread { - block() - } else { - async { block() } - } - } -} diff --git a/Pods/Kingfisher/Sources/Utility/Delegate.swift b/Pods/Kingfisher/Sources/Utility/Delegate.swift deleted file mode 100644 index 9caa1a6..0000000 --- a/Pods/Kingfisher/Sources/Utility/Delegate.swift +++ /dev/null @@ -1,132 +0,0 @@ -// -// Delegate.swift -// Kingfisher -// -// Created by onevcat on 2018/10/10. -// -// Copyright (c) 2019 Wei Wang -// -// 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 -/// A class that keeps a weakly reference for `self` when implementing `onXXX` behaviors. -/// Instead of remembering to keep `self` as weak in a stored closure: -/// -/// ```swift -/// // MyClass.swift -/// var onDone: (() -> Void)? -/// func done() { -/// onDone?() -/// } -/// -/// // ViewController.swift -/// var obj: MyClass? -/// -/// func doSomething() { -/// obj = MyClass() -/// obj!.onDone = { [weak self] in -/// self?.reportDone() -/// } -/// } -/// ``` -/// -/// You can create a `Delegate` and observe on `self`. Now, there is no retain cycle inside: -/// -/// ```swift -/// // MyClass.swift -/// let onDone = Delegate<(), Void>() -/// func done() { -/// onDone.call() -/// } -/// -/// // ViewController.swift -/// var obj: MyClass? -/// -/// func doSomething() { -/// obj = MyClass() -/// obj!.onDone.delegate(on: self) { (self, _) -/// // `self` here is shadowed and does not keep a strong ref. -/// // So you can release both `MyClass` instance and `ViewController` instance. -/// self.reportDone() -/// } -/// } -/// ``` -/// -public class Delegate { - public init() {} - - private var block: ((Input) -> Output?)? - public func delegate(on target: T, block: ((T, Input) -> Output)?) { - self.block = { [weak target] input in - guard let target = target else { return nil } - return block?(target, input) - } - } - - public func call(_ input: Input) -> Output? { - return block?(input) - } - - public func callAsFunction(_ input: Input) -> Output? { - return call(input) - } -} - -extension Delegate where Input == Void { - public func call() -> Output? { - return call(()) - } - - public func callAsFunction() -> Output? { - return call() - } -} - -extension Delegate where Input == Void, Output: OptionalProtocol { - public func call() -> Output { - return call(()) - } - - public func callAsFunction() -> Output { - return call() - } -} - -extension Delegate where Output: OptionalProtocol { - public func call(_ input: Input) -> Output { - if let result = block?(input) { - return result - } else { - return Output._createNil - } - } - - public func callAsFunction(_ input: Input) -> Output { - return call(input) - } -} - -public protocol OptionalProtocol { - static var _createNil: Self { get } -} -extension Optional : OptionalProtocol { - public static var _createNil: Optional { - return nil - } -} diff --git a/Pods/Kingfisher/Sources/Utility/ExtensionHelpers.swift b/Pods/Kingfisher/Sources/Utility/ExtensionHelpers.swift deleted file mode 100644 index 22b2063..0000000 --- a/Pods/Kingfisher/Sources/Utility/ExtensionHelpers.swift +++ /dev/null @@ -1,117 +0,0 @@ -// -// ExtensionHelpers.swift -// Kingfisher -// -// Created by onevcat on 2018/09/28. -// -// Copyright (c) 2019 Wei Wang -// -// 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 - -extension CGFloat { - var isEven: Bool { - return truncatingRemainder(dividingBy: 2.0) == 0 - } -} - -#if canImport(AppKit) && !targetEnvironment(macCatalyst) -import AppKit -extension NSBezierPath { - convenience init(roundedRect rect: NSRect, topLeftRadius: CGFloat, topRightRadius: CGFloat, - bottomLeftRadius: CGFloat, bottomRightRadius: CGFloat) - { - self.init() - - let maxCorner = min(rect.width, rect.height) / 2 - - let radiusTopLeft = min(maxCorner, max(0, topLeftRadius)) - let radiusTopRight = min(maxCorner, max(0, topRightRadius)) - let radiusBottomLeft = min(maxCorner, max(0, bottomLeftRadius)) - let radiusBottomRight = min(maxCorner, max(0, bottomRightRadius)) - - guard !rect.isEmpty else { - return - } - - let topLeft = NSPoint(x: rect.minX, y: rect.maxY) - let topRight = NSPoint(x: rect.maxX, y: rect.maxY) - let bottomRight = NSPoint(x: rect.maxX, y: rect.minY) - - move(to: NSPoint(x: rect.midX, y: rect.maxY)) - appendArc(from: topLeft, to: rect.origin, radius: radiusTopLeft) - appendArc(from: rect.origin, to: bottomRight, radius: radiusBottomLeft) - appendArc(from: bottomRight, to: topRight, radius: radiusBottomRight) - appendArc(from: topRight, to: topLeft, radius: radiusTopRight) - close() - } - - convenience init(roundedRect rect: NSRect, byRoundingCorners corners: RectCorner, radius: CGFloat) { - let radiusTopLeft = corners.contains(.topLeft) ? radius : 0 - let radiusTopRight = corners.contains(.topRight) ? radius : 0 - let radiusBottomLeft = corners.contains(.bottomLeft) ? radius : 0 - let radiusBottomRight = corners.contains(.bottomRight) ? radius : 0 - - self.init(roundedRect: rect, topLeftRadius: radiusTopLeft, topRightRadius: radiusTopRight, - bottomLeftRadius: radiusBottomLeft, bottomRightRadius: radiusBottomRight) - } -} - -extension KFCrossPlatformImage { - // macOS does not support scale. This is just for code compatibility across platforms. - convenience init?(data: Data, scale: CGFloat) { - self.init(data: data) - } -} -#endif - -#if canImport(UIKit) -import UIKit -extension RectCorner { - var uiRectCorner: UIRectCorner { - - var result: UIRectCorner = [] - - if contains(.topLeft) { result.insert(.topLeft) } - if contains(.topRight) { result.insert(.topRight) } - if contains(.bottomLeft) { result.insert(.bottomLeft) } - if contains(.bottomRight) { result.insert(.bottomRight) } - - return result - } -} -#endif - -extension Date { - var isPast: Bool { - return isPast(referenceDate: Date()) - } - - func isPast(referenceDate: Date) -> Bool { - return timeIntervalSince(referenceDate) <= 0 - } - - // `Date` in memory is a wrap for `TimeInterval`. But in file attribute it can only accept `Int` number. - // By default the system will `round` it. But it is not friendly for testing purpose. - // So we always `ceil` the value when used for file attributes. - var fileAttributeDate: Date { - return Date(timeIntervalSince1970: ceil(timeIntervalSince1970)) - } -} diff --git a/Pods/Kingfisher/Sources/Utility/Result.swift b/Pods/Kingfisher/Sources/Utility/Result.swift deleted file mode 100644 index dcdb08b..0000000 --- a/Pods/Kingfisher/Sources/Utility/Result.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// Result.swift -// Kingfisher -// -// Created by onevcat on 2018/09/22. -// -// Copyright (c) 2019 Wei Wang -// -// 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 - -// These helper methods are not public since we do not want them to be exposed or cause any conflicting. -// However, they are just wrapper of `ResultUtil` static methods. -extension Result where Failure: Error { - - /// Evaluates the given transform closures to create a single output value. - /// - /// - Parameters: - /// - onSuccess: A closure that transforms the success value. - /// - onFailure: A closure that transforms the error value. - /// - Returns: A single `Output` value. - func match( - onSuccess: (Success) -> Output, - onFailure: (Failure) -> Output) -> Output - { - switch self { - case let .success(value): - return onSuccess(value) - case let .failure(error): - return onFailure(error) - } - } -} diff --git a/Pods/Kingfisher/Sources/Utility/Runtime.swift b/Pods/Kingfisher/Sources/Utility/Runtime.swift deleted file mode 100644 index d5818e2..0000000 --- a/Pods/Kingfisher/Sources/Utility/Runtime.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// Runtime.swift -// Kingfisher -// -// Created by Wei Wang on 2018/10/12. -// -// Copyright (c) 2019 Wei Wang -// -// 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 - -func getAssociatedObject(_ object: Any, _ key: UnsafeRawPointer) -> T? { - return objc_getAssociatedObject(object, key) as? T -} - -func setRetainedAssociatedObject(_ object: Any, _ key: UnsafeRawPointer, _ value: T) { - objc_setAssociatedObject(object, key, value, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) -} diff --git a/Pods/Kingfisher/Sources/Utility/SizeExtensions.swift b/Pods/Kingfisher/Sources/Utility/SizeExtensions.swift deleted file mode 100644 index 19d05d6..0000000 --- a/Pods/Kingfisher/Sources/Utility/SizeExtensions.swift +++ /dev/null @@ -1,110 +0,0 @@ -// -// SizeExtensions.swift -// Kingfisher -// -// Created by onevcat on 2018/09/28. -// -// Copyright (c) 2019 Wei Wang -// -// 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 CoreGraphics - -extension CGSize: KingfisherCompatibleValue {} -extension KingfisherWrapper where Base == CGSize { - - /// Returns a size by resizing the `base` size to a target size under a given content mode. - /// - /// - Parameters: - /// - size: The target size to resize to. - /// - contentMode: Content mode of the target size should be when resizing. - /// - Returns: The resized size under the given `ContentMode`. - public func resize(to size: CGSize, for contentMode: ContentMode) -> CGSize { - switch contentMode { - case .aspectFit: - return constrained(size) - case .aspectFill: - return filling(size) - case .none: - return size - } - } - - /// Returns a size by resizing the `base` size by making it aspect fitting the given `size`. - /// - /// - Parameter size: The size in which the `base` should fit in. - /// - Returns: The size fitted in by the input `size`, while keeps `base` aspect. - public func constrained(_ size: CGSize) -> CGSize { - let aspectWidth = round(aspectRatio * size.height) - let aspectHeight = round(size.width / aspectRatio) - - return aspectWidth > size.width ? - CGSize(width: size.width, height: aspectHeight) : - CGSize(width: aspectWidth, height: size.height) - } - - /// Returns a size by resizing the `base` size by making it aspect filling the given `size`. - /// - /// - Parameter size: The size in which the `base` should fill. - /// - Returns: The size be filled by the input `size`, while keeps `base` aspect. - public func filling(_ size: CGSize) -> CGSize { - let aspectWidth = round(aspectRatio * size.height) - let aspectHeight = round(size.width / aspectRatio) - - return aspectWidth < size.width ? - CGSize(width: size.width, height: aspectHeight) : - CGSize(width: aspectWidth, height: size.height) - } - - /// Returns a `CGRect` for which the `base` size is constrained to an input `size` at a given `anchor` point. - /// - /// - Parameters: - /// - size: The size in which the `base` should be constrained to. - /// - anchor: An anchor point in which the size constraint should happen. - /// - Returns: The result `CGRect` for the constraint operation. - public func constrainedRect(for size: CGSize, anchor: CGPoint) -> CGRect { - - let unifiedAnchor = CGPoint(x: anchor.x.clamped(to: 0.0...1.0), - y: anchor.y.clamped(to: 0.0...1.0)) - - let x = unifiedAnchor.x * base.width - unifiedAnchor.x * size.width - let y = unifiedAnchor.y * base.height - unifiedAnchor.y * size.height - let r = CGRect(x: x, y: y, width: size.width, height: size.height) - - let ori = CGRect(origin: .zero, size: base) - return ori.intersection(r) - } - - private var aspectRatio: CGFloat { - return base.height == 0.0 ? 1.0 : base.width / base.height - } -} - -extension CGRect { - func scaled(_ scale: CGFloat) -> CGRect { - return CGRect(x: origin.x * scale, y: origin.y * scale, - width: size.width * scale, height: size.height * scale) - } -} - -extension Comparable { - func clamped(to limits: ClosedRange) -> Self { - return min(max(self, limits.lowerBound), limits.upperBound) - } -} diff --git a/Pods/Kingfisher/Sources/Utility/String+MD5.swift b/Pods/Kingfisher/Sources/Utility/String+MD5.swift deleted file mode 100644 index 59586b5..0000000 --- a/Pods/Kingfisher/Sources/Utility/String+MD5.swift +++ /dev/null @@ -1,278 +0,0 @@ -// -// String+MD5.swift -// Kingfisher -// -// Created by Wei Wang on 18/09/25. -// -// Copyright (c) 2019 Wei Wang -// -// 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 -import CommonCrypto - -extension String: KingfisherCompatibleValue { } -extension KingfisherWrapper where Base == String { - var md5: String { - guard let data = base.data(using: .utf8) else { - return base - } - - let message = data.withUnsafeBytes { (bytes: UnsafeRawBufferPointer) in - return [UInt8](bytes) - } - - let MD5Calculator = MD5(message) - let MD5Data = MD5Calculator.calculate() - - var MD5String = String() - for c in MD5Data { - MD5String += String(format: "%02x", c) - } - return MD5String - } - - var ext: String? { - var ext = "" - if let index = base.lastIndex(of: ".") { - let extRange = base.index(index, offsetBy: 1).. 0 ? String(firstSeg) : nil - } -} - -// array of bytes, little-endian representation -func arrayOfBytes(_ value: T, length: Int? = nil) -> [UInt8] { - let totalBytes = length ?? (MemoryLayout.size * 8) - - let valuePointer = UnsafeMutablePointer.allocate(capacity: 1) - valuePointer.pointee = value - - let bytes = valuePointer.withMemoryRebound(to: UInt8.self, capacity: totalBytes) { (bytesPointer) -> [UInt8] in - var bytes = [UInt8](repeating: 0, count: totalBytes) - for j in 0...size, totalBytes) { - bytes[totalBytes - 1 - j] = (bytesPointer + j).pointee - } - return bytes - } - - valuePointer.deinitialize(count: 1) - valuePointer.deallocate() - - return bytes -} - -extension Int { - // Array of bytes with optional padding (little-endian) - func bytes(_ totalBytes: Int = MemoryLayout.size) -> [UInt8] { - return arrayOfBytes(self, length: totalBytes) - } - -} - -protocol HashProtocol { - var message: [UInt8] { get } - // Common part for hash calculation. Prepare header data. - func prepare(_ len: Int) -> [UInt8] -} - -extension HashProtocol { - - func prepare(_ len: Int) -> [UInt8] { - var tmpMessage = message - - // Step 1. Append Padding Bits - tmpMessage.append(0x80) // append one bit (UInt8 with one bit) to message - - // append "0" bit until message length in bits ≡ 448 (mod 512) - var msgLength = tmpMessage.count - var counter = 0 - - while msgLength % len != (len - 8) { - counter += 1 - msgLength += 1 - } - - tmpMessage += [UInt8](repeating: 0, count: counter) - return tmpMessage - } -} - -func toUInt32Array(_ slice: ArraySlice) -> [UInt32] { - var result = [UInt32]() - result.reserveCapacity(16) - - for idx in stride(from: slice.startIndex, to: slice.endIndex, by: MemoryLayout.size) { - let d0 = UInt32(slice[idx.advanced(by: 3)]) << 24 - let d1 = UInt32(slice[idx.advanced(by: 2)]) << 16 - let d2 = UInt32(slice[idx.advanced(by: 1)]) << 8 - let d3 = UInt32(slice[idx]) - let val: UInt32 = d0 | d1 | d2 | d3 - - result.append(val) - } - return result -} - -struct BytesIterator: IteratorProtocol { - - let chunkSize: Int - let data: [UInt8] - - init(chunkSize: Int, data: [UInt8]) { - self.chunkSize = chunkSize - self.data = data - } - - var offset = 0 - - mutating func next() -> ArraySlice? { - let end = min(chunkSize, data.count - offset) - let result = data[offset.. 0 ? result : nil - } -} - -struct BytesSequence: Sequence { - let chunkSize: Int - let data: [UInt8] - - func makeIterator() -> BytesIterator { - return BytesIterator(chunkSize: chunkSize, data: data) - } -} - -func rotateLeft(_ value: UInt32, bits: UInt32) -> UInt32 { - return ((value << bits) & 0xFFFFFFFF) | (value >> (32 - bits)) -} - -class MD5: HashProtocol { - - let message: [UInt8] - - init (_ message: [UInt8]) { - self.message = message - } - - // specifies the per-round shift amounts - private let shifts: [UInt32] = [7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, - 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, - 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, - 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21] - - // binary integer part of the sines of integers (Radians) - private let sines: [UInt32] = [0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, - 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501, - 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be, - 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821, - 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa, - 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8, - 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed, - 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a, - 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c, - 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70, - 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x4881d05, - 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665, - 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, - 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1, - 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, - 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391] - - private let hashes: [UInt32] = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476] - - func calculate() -> [UInt8] { - var tmpMessage = prepare(64) - tmpMessage.reserveCapacity(tmpMessage.count + 4) - - // hash values - var hh = hashes - - // Step 2. Append Length a 64-bit representation of lengthInBits - let lengthInBits = (message.count * 8) - let lengthBytes = lengthInBits.bytes(64 / 8) - tmpMessage += lengthBytes.reversed() - - // Process the message in successive 512-bit chunks: - let chunkSizeBytes = 512 / 8 // 64 - - for chunk in BytesSequence(chunkSize: chunkSizeBytes, data: tmpMessage) { - // break chunk into sixteen 32-bit words M[j], 0 ≤ j ≤ 15 - let M = toUInt32Array(chunk) - assert(M.count == 16, "Invalid array") - - // Initialize hash value for this chunk: - var A: UInt32 = hh[0] - var B: UInt32 = hh[1] - var C: UInt32 = hh[2] - var D: UInt32 = hh[3] - - var dTemp: UInt32 = 0 - - // Main loop - for j in 0 ..< sines.count { - var g = 0 - var F: UInt32 = 0 - - switch j { - case 0...15: - F = (B & C) | ((~B) & D) - g = j - case 16...31: - F = (D & B) | (~D & C) - g = (5 * j + 1) % 16 - case 32...47: - F = B ^ C ^ D - g = (3 * j + 5) % 16 - case 48...63: - F = C ^ (B | (~D)) - g = (7 * j) % 16 - default: - break - } - dTemp = D - D = C - C = B - B = B &+ rotateLeft((A &+ F &+ sines[j] &+ M[g]), bits: shifts[j]) - A = dTemp - } - - hh[0] = hh[0] &+ A - hh[1] = hh[1] &+ B - hh[2] = hh[2] &+ C - hh[3] = hh[3] &+ D - } - var result = [UInt8]() - result.reserveCapacity(hh.count / 4) - - hh.forEach { - let itemLE = $0.littleEndian - let r1 = UInt8(itemLE & 0xff) - let r2 = UInt8((itemLE >> 8) & 0xff) - let r3 = UInt8((itemLE >> 16) & 0xff) - let r4 = UInt8((itemLE >> 24) & 0xff) - result += [r1, r2, r3, r4] - } - return result - } -} diff --git a/Pods/Kingfisher/Sources/Views/AnimatedImageView.swift b/Pods/Kingfisher/Sources/Views/AnimatedImageView.swift deleted file mode 100644 index 486f450..0000000 --- a/Pods/Kingfisher/Sources/Views/AnimatedImageView.swift +++ /dev/null @@ -1,725 +0,0 @@ -// -// AnimatableImageView.swift -// Kingfisher -// -// Created by bl4ckra1sond3tre on 4/22/16. -// -// The AnimatableImageView, AnimatedFrame and Animator is a modified version of -// some classes from kaishin's Gifu project (https://github.com/kaishin/Gifu) -// -// The MIT License (MIT) -// -// Copyright (c) 2019 Reda Lemeden. -// -// 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. -// -// The name and characters used in the demo of this software are property of their -// respective owners. - -#if !os(watchOS) -#if canImport(UIKit) -import UIKit -import ImageIO - -/// Protocol of `AnimatedImageView`. -public protocol AnimatedImageViewDelegate: AnyObject { - - /// Called after the animatedImageView has finished each animation loop. - /// - /// - Parameters: - /// - imageView: The `AnimatedImageView` that is being animated. - /// - count: The looped count. - func animatedImageView(_ imageView: AnimatedImageView, didPlayAnimationLoops count: UInt) - - /// Called after the `AnimatedImageView` has reached the max repeat count. - /// - /// - Parameter imageView: The `AnimatedImageView` that is being animated. - func animatedImageViewDidFinishAnimating(_ imageView: AnimatedImageView) -} - -extension AnimatedImageViewDelegate { - public func animatedImageView(_ imageView: AnimatedImageView, didPlayAnimationLoops count: UInt) {} - public func animatedImageViewDidFinishAnimating(_ imageView: AnimatedImageView) {} -} - -let KFRunLoopModeCommon = RunLoop.Mode.common - -/// Represents a subclass of `UIImageView` for displaying animated image. -/// Different from showing animated image in a normal `UIImageView` (which load all frames at one time), -/// `AnimatedImageView` only tries to load several frames (defined by `framePreloadCount`) to reduce memory usage. -/// It provides a tradeoff between memory usage and CPU time. If you have a memory issue when using a normal image -/// view to load GIF data, you could give this class a try. -/// -/// Kingfisher supports setting GIF animated data to either `UIImageView` and `AnimatedImageView` out of box. So -/// it would be fairly easy to switch between them. -open class AnimatedImageView: UIImageView { - /// Proxy object for preventing a reference cycle between the `CADDisplayLink` and `AnimatedImageView`. - class TargetProxy { - private weak var target: AnimatedImageView? - - init(target: AnimatedImageView) { - self.target = target - } - - @objc func onScreenUpdate() { - target?.updateFrameIfNeeded() - } - } - - /// Enumeration that specifies repeat count of GIF - public enum RepeatCount: Equatable { - case once - case finite(count: UInt) - case infinite - - public static func ==(lhs: RepeatCount, rhs: RepeatCount) -> Bool { - switch (lhs, rhs) { - case let (.finite(l), .finite(r)): - return l == r - case (.once, .once), - (.infinite, .infinite): - return true - case (.once, .finite(let count)), - (.finite(let count), .once): - return count == 1 - case (.once, _), - (.infinite, _), - (.finite, _): - return false - } - } - } - - // MARK: - Public property - /// Whether automatically play the animation when the view become visible. Default is `true`. - public var autoPlayAnimatedImage = true - - /// The count of the frames should be preloaded before shown. - public var framePreloadCount = 10 - - /// Specifies whether the GIF frames should be pre-scaled to the image view's size or not. - /// If the downloaded image is larger than the image view's size, it will help to reduce some memory use. - /// Default is `true`. - public var needsPrescaling = true - - /// Decode the GIF frames in background thread before using. It will decode frames data and do a off-screen - /// rendering to extract pixel information in background. This can reduce the main thread CPU usage. - public var backgroundDecode = true - - /// The animation timer's run loop mode. Default is `RunLoop.Mode.common`. - /// Set this property to `RunLoop.Mode.default` will make the animation pause during UIScrollView scrolling. - public var runLoopMode = KFRunLoopModeCommon { - willSet { - guard runLoopMode != newValue else { return } - stopAnimating() - displayLink.remove(from: .main, forMode: runLoopMode) - displayLink.add(to: .main, forMode: newValue) - startAnimating() - } - } - - /// The repeat count. The animated image will keep animate until it the loop count reaches this value. - /// Setting this value to another one will reset current animation. - /// - /// Default is `.infinite`, which means the animation will last forever. - public var repeatCount = RepeatCount.infinite { - didSet { - if oldValue != repeatCount { - reset() - setNeedsDisplay() - layer.setNeedsDisplay() - } - } - } - - /// Delegate of this `AnimatedImageView` object. See `AnimatedImageViewDelegate` protocol for more. - public weak var delegate: AnimatedImageViewDelegate? - - /// The `Animator` instance that holds the frames of a specific image in memory. - public private(set) var animator: Animator? - - // MARK: - Private property - // Dispatch queue used for preloading images. - private lazy var preloadQueue: DispatchQueue = { - return DispatchQueue(label: "com.onevcat.Kingfisher.Animator.preloadQueue") - }() - - // A flag to avoid invalidating the displayLink on deinit if it was never created, because displayLink is so lazy. - private var isDisplayLinkInitialized: Bool = false - - // A display link that keeps calling the `updateFrame` method on every screen refresh. - private lazy var displayLink: CADisplayLink = { - isDisplayLinkInitialized = true - let displayLink = CADisplayLink(target: TargetProxy(target: self), selector: #selector(TargetProxy.onScreenUpdate)) - displayLink.add(to: .main, forMode: runLoopMode) - displayLink.isPaused = true - return displayLink - }() - - // MARK: - Override - override open var image: KFCrossPlatformImage? { - didSet { - if image != oldValue { - reset() - } - setNeedsDisplay() - layer.setNeedsDisplay() - } - } - - open override var isHighlighted: Bool { - get { - super.isHighlighted - } - set { - // Highlighted image is unsupported for animated images. - // See https://github.com/onevcat/Kingfisher/issues/1679 - if displayLink.isPaused { - super.isHighlighted = newValue - } - } - } - -// Workaround for Apple xcframework creating issue on Apple TV in Swift 5.8. -// https://github.com/apple/swift/issues/66015 -#if os(tvOS) - public override init(image: UIImage?, highlightedImage: UIImage?) { - super.init(image: image, highlightedImage: highlightedImage) - } - - required public init?(coder: NSCoder) { - super.init(coder: coder) - } - - init() { - super.init(frame: .zero) - } -#endif - - deinit { - if isDisplayLinkInitialized { - displayLink.invalidate() - } - } - - override open var isAnimating: Bool { - if isDisplayLinkInitialized { - return !displayLink.isPaused - } else { - return super.isAnimating - } - } - - /// Starts the animation. - override open func startAnimating() { - guard !isAnimating else { return } - guard let animator = animator else { return } - guard !animator.isReachMaxRepeatCount else { return } - - displayLink.isPaused = false - } - - /// Stops the animation. - override open func stopAnimating() { - super.stopAnimating() - if isDisplayLinkInitialized { - displayLink.isPaused = true - } - } - - override open func display(_ layer: CALayer) { - layer.contents = animator?.currentFrameImage?.cgImage ?? image?.cgImage - } - - override open func didMoveToWindow() { - super.didMoveToWindow() - didMove() - } - - override open func didMoveToSuperview() { - super.didMoveToSuperview() - didMove() - } - - // This is for back compatibility that using regular `UIImageView` to show animated image. - override func shouldPreloadAllAnimation() -> Bool { - return false - } - - // Reset the animator. - private func reset() { - animator = nil - if let image = image, let frameSource = image.kf.frameSource { - #if os(xrOS) - let targetSize = bounds.scaled(UITraitCollection.current.displayScale).size - #else - let targetSize = bounds.scaled(UIScreen.main.scale).size - #endif - let animator = Animator( - frameSource: frameSource, - contentMode: contentMode, - size: targetSize, - imageSize: image.kf.size, - imageScale: image.kf.scale, - framePreloadCount: framePreloadCount, - repeatCount: repeatCount, - preloadQueue: preloadQueue) - animator.delegate = self - animator.needsPrescaling = needsPrescaling - animator.backgroundDecode = backgroundDecode - animator.prepareFramesAsynchronously() - self.animator = animator - } - didMove() - } - - private func didMove() { - if autoPlayAnimatedImage && animator != nil { - if let _ = superview, let _ = window { - startAnimating() - } else { - stopAnimating() - } - } - } - - /// Update the current frame with the displayLink duration. - private func updateFrameIfNeeded() { - guard let animator = animator else { - return - } - - guard !animator.isFinished else { - stopAnimating() - delegate?.animatedImageViewDidFinishAnimating(self) - return - } - - let duration: CFTimeInterval - - // CA based display link is opt-out from ProMotion by default. - // So the duration and its FPS might not match. - // See [#718](https://github.com/onevcat/Kingfisher/issues/718) - // By setting CADisableMinimumFrameDuration to YES in Info.plist may - // cause the preferredFramesPerSecond being 0 - let preferredFramesPerSecond = displayLink.preferredFramesPerSecond - if preferredFramesPerSecond == 0 { - duration = displayLink.duration - } else { - // Some devices (like iPad Pro 10.5) will have a different FPS. - duration = 1.0 / TimeInterval(preferredFramesPerSecond) - } - - animator.shouldChangeFrame(with: duration) { [weak self] hasNewFrame in - if hasNewFrame { - self?.layer.setNeedsDisplay() - } - } - } -} - -protocol AnimatorDelegate: AnyObject { - func animator(_ animator: AnimatedImageView.Animator, didPlayAnimationLoops count: UInt) -} - -extension AnimatedImageView: AnimatorDelegate { - func animator(_ animator: Animator, didPlayAnimationLoops count: UInt) { - delegate?.animatedImageView(self, didPlayAnimationLoops: count) - } -} - -extension AnimatedImageView { - - // Represents a single frame in a GIF. - struct AnimatedFrame { - - // The image to display for this frame. Its value is nil when the frame is removed from the buffer. - let image: UIImage? - - // The duration that this frame should remain active. - let duration: TimeInterval - - // A placeholder frame with no image assigned. - // Used to replace frames that are no longer needed in the animation. - var placeholderFrame: AnimatedFrame { - return AnimatedFrame(image: nil, duration: duration) - } - - // Whether this frame instance contains an image or not. - var isPlaceholder: Bool { - return image == nil - } - - // Returns a new instance from an optional image. - // - // - parameter image: An optional `UIImage` instance to be assigned to the new frame. - // - returns: An `AnimatedFrame` instance. - func makeAnimatedFrame(image: UIImage?) -> AnimatedFrame { - return AnimatedFrame(image: image, duration: duration) - } - } -} - -extension AnimatedImageView { - - // MARK: - Animator - - /// An animator which used to drive the data behind `AnimatedImageView`. - public class Animator { - private let size: CGSize - - private let imageSize: CGSize - private let imageScale: CGFloat - - /// The maximum count of image frames that needs preload. - public let maxFrameCount: Int - - private let frameSource: ImageFrameSource - private let maxRepeatCount: RepeatCount - - private let maxTimeStep: TimeInterval = 1.0 - private let animatedFrames = SafeArray() - private var frameCount = 0 - private var timeSinceLastFrameChange: TimeInterval = 0.0 - private var currentRepeatCount: UInt = 0 - - var isFinished: Bool = false - - var needsPrescaling = true - - var backgroundDecode = true - - weak var delegate: AnimatorDelegate? - - // Total duration of one animation loop - var loopDuration: TimeInterval = 0 - - /// The image of the current frame. - public var currentFrameImage: UIImage? { - return frame(at: currentFrameIndex) - } - - /// The duration of the current active frame duration. - public var currentFrameDuration: TimeInterval { - return duration(at: currentFrameIndex) - } - - /// The index of the current animation frame. - public internal(set) var currentFrameIndex = 0 { - didSet { - previousFrameIndex = oldValue - } - } - - var previousFrameIndex = 0 { - didSet { - preloadQueue.async { - self.updatePreloadedFrames() - } - } - } - - var isReachMaxRepeatCount: Bool { - switch maxRepeatCount { - case .once: - return currentRepeatCount >= 1 - case .finite(let maxCount): - return currentRepeatCount >= maxCount - case .infinite: - return false - } - } - - /// Whether the current frame is the last frame or not in the animation sequence. - public var isLastFrame: Bool { - return currentFrameIndex == frameCount - 1 - } - - var preloadingIsNeeded: Bool { - return maxFrameCount < frameCount - 1 - } - - var contentMode = UIView.ContentMode.scaleToFill - - private lazy var preloadQueue: DispatchQueue = { - return DispatchQueue(label: "com.onevcat.Kingfisher.Animator.preloadQueue") - }() - - /// Creates an animator with image source reference. - /// - /// - Parameters: - /// - source: The reference of animated image. - /// - mode: Content mode of the `AnimatedImageView`. - /// - size: Size of the `AnimatedImageView`. - /// - imageSize: Size of the `KingfisherWrapper`. - /// - imageScale: Scale of the `KingfisherWrapper`. - /// - count: Count of frames needed to be preloaded. - /// - repeatCount: The repeat count should this animator uses. - /// - preloadQueue: Dispatch queue used for preloading images. - convenience init(imageSource source: CGImageSource, - contentMode mode: UIView.ContentMode, - size: CGSize, - imageSize: CGSize, - imageScale: CGFloat, - framePreloadCount count: Int, - repeatCount: RepeatCount, - preloadQueue: DispatchQueue) { - let frameSource = CGImageFrameSource(data: nil, imageSource: source, options: nil) - self.init(frameSource: frameSource, - contentMode: mode, - size: size, - imageSize: imageSize, - imageScale: imageScale, - framePreloadCount: count, - repeatCount: repeatCount, - preloadQueue: preloadQueue) - } - - /// Creates an animator with a custom image frame source. - /// - /// - Parameters: - /// - frameSource: The reference of animated image. - /// - mode: Content mode of the `AnimatedImageView`. - /// - size: Size of the `AnimatedImageView`. - /// - imageSize: Size of the `KingfisherWrapper`. - /// - imageScale: Scale of the `KingfisherWrapper`. - /// - count: Count of frames needed to be preloaded. - /// - repeatCount: The repeat count should this animator uses. - /// - preloadQueue: Dispatch queue used for preloading images. - init(frameSource source: ImageFrameSource, - contentMode mode: UIView.ContentMode, - size: CGSize, - imageSize: CGSize, - imageScale: CGFloat, - framePreloadCount count: Int, - repeatCount: RepeatCount, - preloadQueue: DispatchQueue) { - self.frameSource = source - self.contentMode = mode - self.size = size - self.imageSize = imageSize - self.imageScale = imageScale - self.maxFrameCount = count - self.maxRepeatCount = repeatCount - self.preloadQueue = preloadQueue - - GraphicsContext.begin(size: imageSize, scale: imageScale) - } - - deinit { - resetAnimatedFrames() - GraphicsContext.end() - } - - /// Gets the image frame of a given index. - /// - Parameter index: The index of desired image. - /// - Returns: The decoded image at the frame. `nil` if the index is out of bound or the image is not yet loaded. - public func frame(at index: Int) -> KFCrossPlatformImage? { - return animatedFrames[index]?.image - } - - public func duration(at index: Int) -> TimeInterval { - return animatedFrames[index]?.duration ?? .infinity - } - - func prepareFramesAsynchronously() { - frameCount = frameSource.frameCount - animatedFrames.reserveCapacity(frameCount) - preloadQueue.async { [weak self] in - self?.setupAnimatedFrames() - } - } - - func shouldChangeFrame(with duration: CFTimeInterval, handler: (Bool) -> Void) { - incrementTimeSinceLastFrameChange(with: duration) - - if currentFrameDuration > timeSinceLastFrameChange { - handler(false) - } else { - resetTimeSinceLastFrameChange() - incrementCurrentFrameIndex() - handler(true) - } - } - - private func setupAnimatedFrames() { - resetAnimatedFrames() - - var duration: TimeInterval = 0 - - (0.. maxFrameCount { return } - animatedFrames[index] = animatedFrames[index]?.makeAnimatedFrame(image: loadFrame(at: index)) - } - - self.loopDuration = duration - } - - private func resetAnimatedFrames() { - animatedFrames.removeAll() - } - - private func loadFrame(at index: Int) -> UIImage? { - let resize = needsPrescaling && size != .zero - let maxSize = resize ? size : nil - guard let cgImage = frameSource.frame(at: index, maxSize: maxSize) else { - return nil - } - - if #available(iOS 15, tvOS 15, *) { - // From iOS 15, a plain image loading causes iOS calling `-[_UIImageCGImageContent initWithCGImage:scale:]` - // in ImageIO, which holds the image ref on the creating thread. - // To get a workaround, create another image ref and use that to create the final image. This leads to - // some performance loss, but there is little we can do. - // https://github.com/onevcat/Kingfisher/issues/1844 - guard let context = GraphicsContext.current(size: imageSize, scale: imageScale, inverting: true, cgImage: cgImage), - let decodedImageRef = cgImage.decoded(on: context, scale: imageScale) - else { - return KFCrossPlatformImage(cgImage: cgImage) - } - - return KFCrossPlatformImage(cgImage: decodedImageRef) - } else { - let image = KFCrossPlatformImage(cgImage: cgImage) - if backgroundDecode { - guard let context = GraphicsContext.current(size: imageSize, scale: imageScale, inverting: true, cgImage: cgImage) else { - return image - } - return image.kf.decoded(on: context) - } else { - return image - } - } - } - - private func updatePreloadedFrames() { - guard preloadingIsNeeded else { - return - } - - let previousFrame = animatedFrames[previousFrameIndex] - animatedFrames[previousFrameIndex] = previousFrame?.placeholderFrame - // ensure the image dealloc in main thread - defer { - if let image = previousFrame?.image { - DispatchQueue.main.async { - _ = image - } - } - } - - preloadIndexes(start: currentFrameIndex).forEach { index in - guard let currentAnimatedFrame = animatedFrames[index] else { return } - if !currentAnimatedFrame.isPlaceholder { return } - animatedFrames[index] = currentAnimatedFrame.makeAnimatedFrame(image: loadFrame(at: index)) - } - } - - private func incrementCurrentFrameIndex() { - let wasLastFrame = isLastFrame - currentFrameIndex = increment(frameIndex: currentFrameIndex) - if isLastFrame { - currentRepeatCount += 1 - if isReachMaxRepeatCount { - isFinished = true - - // Notify the delegate here because the animation is stopping. - delegate?.animator(self, didPlayAnimationLoops: currentRepeatCount) - } - } else if wasLastFrame { - - // Notify the delegate that the loop completed - delegate?.animator(self, didPlayAnimationLoops: currentRepeatCount) - } - } - - private func incrementTimeSinceLastFrameChange(with duration: TimeInterval) { - timeSinceLastFrameChange += min(maxTimeStep, duration) - } - - private func resetTimeSinceLastFrameChange() { - timeSinceLastFrameChange -= currentFrameDuration - } - - private func increment(frameIndex: Int, by value: Int = 1) -> Int { - return (frameIndex + value) % frameCount - } - - private func preloadIndexes(start index: Int) -> [Int] { - let nextIndex = increment(frameIndex: index) - let lastIndex = increment(frameIndex: index, by: maxFrameCount) - - if lastIndex >= nextIndex { - return [Int](nextIndex...lastIndex) - } else { - return [Int](nextIndex.. { - private var array: Array = [] - private let lock = NSLock() - - subscript(index: Int) -> Element? { - get { - lock.lock() - defer { lock.unlock() } - return array.indices ~= index ? array[index] : nil - } - - set { - lock.lock() - defer { lock.unlock() } - if let newValue = newValue, array.indices ~= index { - array[index] = newValue - } - } - } - - var count : Int { - lock.lock() - defer { lock.unlock() } - return array.count - } - - func reserveCapacity(_ count: Int) { - lock.lock() - defer { lock.unlock() } - array.reserveCapacity(count) - } - - func append(_ element: Element) { - lock.lock() - defer { lock.unlock() } - array += [element] - } - - func removeAll() { - lock.lock() - defer { lock.unlock() } - array = [] - } -} -#endif -#endif diff --git a/Pods/Kingfisher/Sources/Views/Indicator.swift b/Pods/Kingfisher/Sources/Views/Indicator.swift deleted file mode 100644 index dc9bb6e..0000000 --- a/Pods/Kingfisher/Sources/Views/Indicator.swift +++ /dev/null @@ -1,233 +0,0 @@ -// -// Indicator.swift -// Kingfisher -// -// Created by João D. Moreira on 30/08/16. -// -// Copyright (c) 2019 Wei Wang -// -// 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 !os(watchOS) - -#if canImport(AppKit) && !targetEnvironment(macCatalyst) -import AppKit -public typealias IndicatorView = NSView -#else -import UIKit -public typealias IndicatorView = UIView -#endif - -/// Represents the activity indicator type which should be added to -/// an image view when an image is being downloaded. -/// -/// - none: No indicator. -/// - activity: Uses the system activity indicator. -/// - image: Uses an image as indicator. GIF is supported. -/// - custom: Uses a custom indicator. The type of associated value should conform to the `Indicator` protocol. -public enum IndicatorType { - /// No indicator. - case none - /// Uses the system activity indicator. - case activity - /// Uses an image as indicator. GIF is supported. - case image(imageData: Data) - /// Uses a custom indicator. The type of associated value should conform to the `Indicator` protocol. - case custom(indicator: Indicator) -} - -/// An indicator type which can be used to show the download task is in progress. -public protocol Indicator { - - /// Called when the indicator should start animating. - func startAnimatingView() - - /// Called when the indicator should stop animating. - func stopAnimatingView() - - /// Center offset of the indicator. Kingfisher will use this value to determine the position of - /// indicator in the super view. - var centerOffset: CGPoint { get } - - /// The indicator view which would be added to the super view. - var view: IndicatorView { get } - - /// The size strategy used when adding the indicator to image view. - /// - Parameter imageView: The super view of indicator. - func sizeStrategy(in imageView: KFCrossPlatformImageView) -> IndicatorSizeStrategy -} - -public enum IndicatorSizeStrategy { - case intrinsicSize - case full - case size(CGSize) -} - -extension Indicator { - - /// Default implementation of `centerOffset` of `Indicator`. The default value is `.zero`, means that there is - /// no offset for the indicator view. - public var centerOffset: CGPoint { return .zero } - - /// Default implementation of `centerOffset` of `Indicator`. The default value is `.full`, means that the indicator - /// will pin to the same height and width as the image view. - public func sizeStrategy(in imageView: KFCrossPlatformImageView) -> IndicatorSizeStrategy { - return .full - } -} - -// Displays a NSProgressIndicator / UIActivityIndicatorView -final class ActivityIndicator: Indicator { - - #if os(macOS) - private let activityIndicatorView: NSProgressIndicator - #else - private let activityIndicatorView: UIActivityIndicatorView - #endif - private var animatingCount = 0 - - var view: IndicatorView { - return activityIndicatorView - } - - func startAnimatingView() { - if animatingCount == 0 { - #if os(macOS) - activityIndicatorView.startAnimation(nil) - #else - activityIndicatorView.startAnimating() - #endif - activityIndicatorView.isHidden = false - } - animatingCount += 1 - } - - func stopAnimatingView() { - animatingCount = max(animatingCount - 1, 0) - if animatingCount == 0 { - #if os(macOS) - activityIndicatorView.stopAnimation(nil) - #else - activityIndicatorView.stopAnimating() - #endif - activityIndicatorView.isHidden = true - } - } - - func sizeStrategy(in imageView: KFCrossPlatformImageView) -> IndicatorSizeStrategy { - return .intrinsicSize - } - - init() { - #if os(macOS) - activityIndicatorView = NSProgressIndicator(frame: CGRect(x: 0, y: 0, width: 16, height: 16)) - activityIndicatorView.controlSize = .small - activityIndicatorView.style = .spinning - #else - let indicatorStyle: UIActivityIndicatorView.Style - - #if os(tvOS) - if #available(tvOS 13.0, *) { - indicatorStyle = UIActivityIndicatorView.Style.large - } else { - indicatorStyle = UIActivityIndicatorView.Style.white - } - #elseif os(xrOS) - indicatorStyle = UIActivityIndicatorView.Style.medium - #else - if #available(iOS 13.0, * ) { - indicatorStyle = UIActivityIndicatorView.Style.medium - } else { - indicatorStyle = UIActivityIndicatorView.Style.gray - } - #endif - - activityIndicatorView = UIActivityIndicatorView(style: indicatorStyle) - #endif - } -} - -#if canImport(UIKit) -extension UIActivityIndicatorView.Style { - #if compiler(>=5.1) - #else - static let large = UIActivityIndicatorView.Style.white - #if !os(tvOS) - static let medium = UIActivityIndicatorView.Style.gray - #endif - #endif -} -#endif - -// MARK: - ImageIndicator -// Displays an ImageView. Supports gif -final class ImageIndicator: Indicator { - private let animatedImageIndicatorView: KFCrossPlatformImageView - - var view: IndicatorView { - return animatedImageIndicatorView - } - - init?( - imageData data: Data, - processor: ImageProcessor = DefaultImageProcessor.default, - options: KingfisherParsedOptionsInfo? = nil) - { - var options = options ?? KingfisherParsedOptionsInfo(nil) - // Use normal image view to show animations, so we need to preload all animation data. - if !options.preloadAllAnimationData { - options.preloadAllAnimationData = true - } - - guard let image = processor.process(item: .data(data), options: options) else { - return nil - } - - animatedImageIndicatorView = KFCrossPlatformImageView() - animatedImageIndicatorView.image = image - - #if os(macOS) - // Need for gif to animate on macOS - animatedImageIndicatorView.imageScaling = .scaleNone - animatedImageIndicatorView.canDrawSubviewsIntoLayer = true - #else - animatedImageIndicatorView.contentMode = .center - #endif - } - - func startAnimatingView() { - #if os(macOS) - animatedImageIndicatorView.animates = true - #else - animatedImageIndicatorView.startAnimating() - #endif - animatedImageIndicatorView.isHidden = false - } - - func stopAnimatingView() { - #if os(macOS) - animatedImageIndicatorView.animates = false - #else - animatedImageIndicatorView.stopAnimating() - #endif - animatedImageIndicatorView.isHidden = true - } -} - -#endif diff --git a/Pods/Local Podspecs/DDMSCKit_Private.podspec.json b/Pods/Local Podspecs/DDMSCKit_Private.podspec.json deleted file mode 100644 index 37c85b6..0000000 --- a/Pods/Local Podspecs/DDMSCKit_Private.podspec.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "name": "DDMSCKit_Private", - "version": "0.1.2", - "summary": "A short description of DDMSCKit_Private.", - "description": "TODO: Add long description of the pod here.", - "homepage": "https://DDIsFriend@bitbucket.org/ddisfriendly/ddmsckit_private.git", - "license": { - "type": "MIT", - "file": "LICENSE" - }, - "authors": { - "DDIsFriend": "DDIsFriend@163.com" - }, - "source": { - "git": "git@bitbucket.org:ddisfriendly/ddmsckit_private.git", - "tag": "0.1.2" - }, - "platforms": { - "ios": "11.0" - }, - "pod_target_xcconfig": { - "VALID_ARCHS": "x86_64 armv7 arm64", - "EXCLUDED_ARCHS[sdk=iphonesimulator*]": "arm64", - "OTHER_LINKER_FLAGS": "$(inherited)", - "ENABLE_BITCODE": "NO", - "GCC_INPUT_FILETYPE": "sourcecode.cpp.objcpp" - }, - "subspecs": [ - { - "name": "DDSpeechSynOnline", - "source_files": [ - "DDMSCKit_Private/Classes/DDSpeechSynOnline/DDSpeechSynOnlineManager.{h,m}", - "DDMSCKit_Private/Classes/DDSpeechSynOnline/DDMSCVoiceConst.{h,m}" - ], - "vendored_frameworks": "DDMSCKit_Private/Classes/DDSpeechSynOnline/iflyMSC.framework", - "libraries": [ - "z", - "c++" - ], - "frameworks": [ - "AVFoundation", - "SystemConfiguration", - "Foundation", - "CoreTelephony", - "AudioToolbox", - "UIKit", - "CoreLocation", - "Contacts", - "AddressBook", - "QuartzCore", - "CoreGraphics" - ], - "dependencies": { - "DDLogKit_Private": [ - - ], - "DDFFmpegKit_Private": [ - - ] - } - } - ] -} diff --git a/Pods/MJRefresh/LICENSE b/Pods/MJRefresh/LICENSE deleted file mode 100644 index 11bf234..0000000 --- a/Pods/MJRefresh/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2013-2015 MJRefresh (https://github.com/CoderMJLee/MJRefresh) - -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. diff --git a/Pods/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h b/Pods/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h deleted file mode 100644 index e4eb872..0000000 --- a/Pods/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// MJRefreshAutoFooter.h -// MJRefresh -// -// Created by MJ Lee on 15/4/24. -// Copyright (c) 2015年 小码哥. All rights reserved. -// - -#if __has_include() -#import -#else -#import "MJRefreshFooter.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - -@interface MJRefreshAutoFooter : MJRefreshFooter -/** 是否自动刷新(默认为YES) */ -@property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh; - -/** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */ -@property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh MJRefreshDeprecated("请使用triggerAutomaticallyRefreshPercent属性"); - -/** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */ -@property (assign, nonatomic) CGFloat triggerAutomaticallyRefreshPercent; - -/** 自动触发次数, 默认为 1, 仅在拖拽 ScrollView 时才生效, - - 如果为 -1, 则为无限触发 - */ -@property (nonatomic) NSInteger autoTriggerTimes; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.m b/Pods/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.m deleted file mode 100644 index b1b93fb..0000000 --- a/Pods/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.m +++ /dev/null @@ -1,216 +0,0 @@ -// -// MJRefreshAutoFooter.m -// MJRefresh -// -// Created by MJ Lee on 15/4/24. -// Copyright (c) 2015年 小码哥. All rights reserved. -// - -#import "MJRefreshAutoFooter.h" -#import "NSBundle+MJRefresh.h" -#import "UIView+MJExtension.h" -#import "UIScrollView+MJExtension.h" -#import "UIScrollView+MJRefresh.h" - -@interface MJRefreshAutoFooter() -/** 一个新的拖拽 */ -@property (nonatomic) BOOL triggerByDrag; -@property (nonatomic) NSInteger leftTriggerTimes; -@end - -@implementation MJRefreshAutoFooter - -#pragma mark - 初始化 -- (void)willMoveToSuperview:(UIView *)newSuperview -{ - [super willMoveToSuperview:newSuperview]; - - if (newSuperview) { // 新的父控件 - if (self.hidden == NO) { - self.scrollView.mj_insetB += self.mj_h; - } - - // 设置位置 - self.mj_y = _scrollView.mj_contentH; - } else { // 被移除了 - if (self.hidden == NO) { - self.scrollView.mj_insetB -= self.mj_h; - } - } -} - -#pragma mark - 过期方法 -- (void)setAppearencePercentTriggerAutoRefresh:(CGFloat)appearencePercentTriggerAutoRefresh -{ - self.triggerAutomaticallyRefreshPercent = appearencePercentTriggerAutoRefresh; -} - -- (CGFloat)appearencePercentTriggerAutoRefresh -{ - return self.triggerAutomaticallyRefreshPercent; -} - -#pragma mark - 实现父类的方法 -- (void)prepare -{ - [super prepare]; - - // 默认底部控件100%出现时才会自动刷新 - self.triggerAutomaticallyRefreshPercent = 1.0; - - // 设置为默认状态 - self.automaticallyRefresh = YES; - - self.autoTriggerTimes = 1; -} - -- (void)scrollViewContentSizeDidChange:(NSDictionary *)change -{ - [super scrollViewContentSizeDidChange:change]; - - CGSize size = [change[NSKeyValueChangeNewKey] CGSizeValue]; - CGFloat contentHeight = size.height == 0 ? self.scrollView.mj_contentH : size.height; - // 设置位置 - CGFloat y = contentHeight + self.ignoredScrollViewContentInsetBottom; - if (self.mj_y != y) { - self.mj_y = y; - } -} - -- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change -{ - [super scrollViewContentOffsetDidChange:change]; - - if (self.state != MJRefreshStateIdle || !self.automaticallyRefresh || self.mj_y == 0) return; - - if (_scrollView.mj_insetT + _scrollView.mj_contentH > _scrollView.mj_h) { // 内容超过一个屏幕 - // 这里的_scrollView.mj_contentH替换掉self.mj_y更为合理 - if (_scrollView.mj_offsetY >= _scrollView.mj_contentH - _scrollView.mj_h + self.mj_h * self.triggerAutomaticallyRefreshPercent + _scrollView.mj_insetB - self.mj_h) { - // 防止手松开时连续调用 - CGPoint old = [change[@"old"] CGPointValue]; - CGPoint new = [change[@"new"] CGPointValue]; - if (new.y <= old.y) return; - - if (_scrollView.isDragging) { - self.triggerByDrag = YES; - } - // 当底部刷新控件完全出现时,才刷新 - [self beginRefreshing]; - } - } -} - -- (void)scrollViewPanStateDidChange:(NSDictionary *)change -{ - [super scrollViewPanStateDidChange:change]; - - if (self.state != MJRefreshStateIdle) return; - - UIGestureRecognizerState panState = _scrollView.panGestureRecognizer.state; - - switch (panState) { - // 手松开 - case UIGestureRecognizerStateEnded: { - if (_scrollView.mj_insetT + _scrollView.mj_contentH <= _scrollView.mj_h) { // 不够一个屏幕 - if (_scrollView.mj_offsetY >= - _scrollView.mj_insetT) { // 向上拽 - self.triggerByDrag = YES; - [self beginRefreshing]; - } - } else { // 超出一个屏幕 - if (_scrollView.mj_offsetY >= _scrollView.mj_contentH + _scrollView.mj_insetB - _scrollView.mj_h) { - self.triggerByDrag = YES; - [self beginRefreshing]; - } - } - } - break; - - case UIGestureRecognizerStateBegan: { - [self resetTriggerTimes]; - } - break; - - default: - break; - } -} - -- (BOOL)unlimitedTrigger { - return self.leftTriggerTimes == -1; -} - -- (void)beginRefreshing -{ - if (self.triggerByDrag && self.leftTriggerTimes <= 0 && !self.unlimitedTrigger) { - return; - } - - [super beginRefreshing]; -} - -- (void)setState:(MJRefreshState)state -{ - MJRefreshCheckState - - if (state == MJRefreshStateRefreshing) { - [self executeRefreshingCallback]; - } else if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) { - if (self.triggerByDrag) { - if (!self.unlimitedTrigger) { - self.leftTriggerTimes -= 1; - } - self.triggerByDrag = NO; - } - - if (MJRefreshStateRefreshing == oldState) { - if (self.scrollView.pagingEnabled) { - CGPoint offset = self.scrollView.contentOffset; - offset.y -= self.scrollView.mj_insetB; - [UIView animateWithDuration:self.slowAnimationDuration animations:^{ - self.scrollView.contentOffset = offset; - - if (self.endRefreshingAnimationBeginAction) { - self.endRefreshingAnimationBeginAction(); - } - } completion:^(BOOL finished) { - if (self.endRefreshingCompletionBlock) { - self.endRefreshingCompletionBlock(); - } - }]; - return; - } - - if (self.endRefreshingCompletionBlock) { - self.endRefreshingCompletionBlock(); - } - } - } -} - -- (void)resetTriggerTimes { - self.leftTriggerTimes = self.autoTriggerTimes; -} - -- (void)setHidden:(BOOL)hidden -{ - BOOL lastHidden = self.isHidden; - - [super setHidden:hidden]; - - if (!lastHidden && hidden) { - self.state = MJRefreshStateIdle; - - self.scrollView.mj_insetB -= self.mj_h; - } else if (lastHidden && !hidden) { - self.scrollView.mj_insetB += self.mj_h; - - // 设置位置 - self.mj_y = _scrollView.mj_contentH; - } -} - -- (void)setAutoTriggerTimes:(NSInteger)autoTriggerTimes { - _autoTriggerTimes = autoTriggerTimes; - self.leftTriggerTimes = autoTriggerTimes; -} -@end diff --git a/Pods/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h b/Pods/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h deleted file mode 100644 index 8484372..0000000 --- a/Pods/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// MJRefreshBackFooter.h -// MJRefresh -// -// Created by MJ Lee on 15/4/24. -// Copyright (c) 2015年 小码哥. All rights reserved. -// - -#if __has_include() -#import -#else -#import "MJRefreshFooter.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - -@interface MJRefreshBackFooter : MJRefreshFooter - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.m b/Pods/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.m deleted file mode 100644 index 4990ca5..0000000 --- a/Pods/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.m +++ /dev/null @@ -1,158 +0,0 @@ -// -// MJRefreshBackFooter.m -// MJRefresh -// -// Created by MJ Lee on 15/4/24. -// Copyright (c) 2015年 小码哥. All rights reserved. -// - -#import "MJRefreshBackFooter.h" -#import "NSBundle+MJRefresh.h" -#import "UIView+MJExtension.h" -#import "UIScrollView+MJExtension.h" -#import "UIScrollView+MJRefresh.h" - -@interface MJRefreshBackFooter() -@property (assign, nonatomic) NSInteger lastRefreshCount; -@property (assign, nonatomic) CGFloat lastBottomDelta; -@end - -@implementation MJRefreshBackFooter - -#pragma mark - 初始化 -- (void)willMoveToSuperview:(UIView *)newSuperview -{ - [super willMoveToSuperview:newSuperview]; - - [self scrollViewContentSizeDidChange:nil]; -} - -#pragma mark - 实现父类的方法 -- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change -{ - [super scrollViewContentOffsetDidChange:change]; - - // 如果正在刷新,直接返回 - if (self.state == MJRefreshStateRefreshing) return; - - _scrollViewOriginalInset = self.scrollView.mj_inset; - - // 当前的contentOffset - CGFloat currentOffsetY = self.scrollView.mj_offsetY; - // 尾部控件刚好出现的offsetY - CGFloat happenOffsetY = [self happenOffsetY]; - // 如果是向下滚动到看不见尾部控件,直接返回 - if (currentOffsetY <= happenOffsetY) return; - - CGFloat pullingPercent = (currentOffsetY - happenOffsetY) / self.mj_h; - - // 如果已全部加载,仅设置pullingPercent,然后返回 - if (self.state == MJRefreshStateNoMoreData) { - self.pullingPercent = pullingPercent; - return; - } - - if (self.scrollView.isDragging) { - self.pullingPercent = pullingPercent; - // 普通 和 即将刷新 的临界点 - CGFloat normal2pullingOffsetY = happenOffsetY + self.mj_h; - - if (self.state == MJRefreshStateIdle && currentOffsetY > normal2pullingOffsetY) { - // 转为即将刷新状态 - self.state = MJRefreshStatePulling; - } else if (self.state == MJRefreshStatePulling && currentOffsetY <= normal2pullingOffsetY) { - // 转为普通状态 - self.state = MJRefreshStateIdle; - } - } else if (self.state == MJRefreshStatePulling) {// 即将刷新 && 手松开 - // 开始刷新 - [self beginRefreshing]; - } else if (pullingPercent < 1) { - self.pullingPercent = pullingPercent; - } -} - -- (void)scrollViewContentSizeDidChange:(NSDictionary *)change -{ - [super scrollViewContentSizeDidChange:change]; - - CGSize size = [change[NSKeyValueChangeNewKey] CGSizeValue]; - CGFloat contentHeight = size.height == 0 ? self.scrollView.mj_contentH : size.height; - // 内容的高度 - contentHeight += self.ignoredScrollViewContentInsetBottom; - // 表格的高度 - CGFloat scrollHeight = self.scrollView.mj_h - self.scrollViewOriginalInset.top - self.scrollViewOriginalInset.bottom + self.ignoredScrollViewContentInsetBottom; - // 设置位置 - CGFloat y = MAX(contentHeight, scrollHeight); - if (self.mj_y != y) { - self.mj_y = y; - } -} - -- (void)setState:(MJRefreshState)state -{ - MJRefreshCheckState - - // 根据状态来设置属性 - if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) { - // 刷新完毕 - if (MJRefreshStateRefreshing == oldState) { - [UIView animateWithDuration:self.slowAnimationDuration animations:^{ - if (self.endRefreshingAnimationBeginAction) { - self.endRefreshingAnimationBeginAction(); - } - - self.scrollView.mj_insetB -= self.lastBottomDelta; - // 自动调整透明度 - if (self.isAutomaticallyChangeAlpha) self.alpha = 0.0; - } completion:^(BOOL finished) { - self.pullingPercent = 0.0; - - if (self.endRefreshingCompletionBlock) { - self.endRefreshingCompletionBlock(); - } - }]; - } - - CGFloat deltaH = [self heightForContentBreakView]; - // 刚刷新完毕 - if (MJRefreshStateRefreshing == oldState && deltaH > 0 && self.scrollView.mj_totalDataCount != self.lastRefreshCount) { - self.scrollView.mj_offsetY = self.scrollView.mj_offsetY; - } - } else if (state == MJRefreshStateRefreshing) { - // 记录刷新前的数量 - self.lastRefreshCount = self.scrollView.mj_totalDataCount; - - [UIView animateWithDuration:self.fastAnimationDuration animations:^{ - CGFloat bottom = self.mj_h + self.scrollViewOriginalInset.bottom; - CGFloat deltaH = [self heightForContentBreakView]; - if (deltaH < 0) { // 如果内容高度小于view的高度 - bottom -= deltaH; - } - self.lastBottomDelta = bottom - self.scrollView.mj_insetB; - self.scrollView.mj_insetB = bottom; - self.scrollView.mj_offsetY = [self happenOffsetY] + self.mj_h; - } completion:^(BOOL finished) { - [self executeRefreshingCallback]; - }]; - } -} -#pragma mark - 私有方法 -#pragma mark 获得scrollView的内容 超出 view 的高度 -- (CGFloat)heightForContentBreakView -{ - CGFloat h = self.scrollView.frame.size.height - self.scrollViewOriginalInset.bottom - self.scrollViewOriginalInset.top; - return self.scrollView.contentSize.height - h; -} - -#pragma mark 刚好看到上拉刷新控件时的contentOffset.y -- (CGFloat)happenOffsetY -{ - CGFloat deltaH = [self heightForContentBreakView]; - if (deltaH > 0) { - return deltaH - self.scrollViewOriginalInset.top; - } else { - return - self.scrollViewOriginalInset.top; - } -} -@end diff --git a/Pods/MJRefresh/MJRefresh/Base/MJRefreshComponent.h b/Pods/MJRefresh/MJRefresh/Base/MJRefreshComponent.h deleted file mode 100644 index f098101..0000000 --- a/Pods/MJRefresh/MJRefresh/Base/MJRefreshComponent.h +++ /dev/null @@ -1,151 +0,0 @@ -// 代码地址: https://github.com/CoderMJLee/MJRefresh -// MJRefreshComponent.h -// MJRefresh -// -// Created by MJ Lee on 15/3/4. -// Copyright (c) 2015年 小码哥. All rights reserved. -// 刷新控件的基类 - -#import -#if __has_include() -#import -#else -#import "MJRefreshConst.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - -/** 刷新控件的状态 */ -typedef NS_ENUM(NSInteger, MJRefreshState) { - /** 普通闲置状态 */ - MJRefreshStateIdle = 1, - /** 松开就可以进行刷新的状态 */ - MJRefreshStatePulling, - /** 正在刷新中的状态 */ - MJRefreshStateRefreshing, - /** 即将刷新的状态 */ - MJRefreshStateWillRefresh, - /** 所有数据加载完毕,没有更多的数据了 */ - MJRefreshStateNoMoreData -}; - -/** 进入刷新状态的回调 */ -typedef void (^MJRefreshComponentRefreshingBlock)(void) MJRefreshDeprecated("first deprecated in 3.3.0 - Use `MJRefreshComponentAction` instead"); -/** 开始刷新后的回调(进入刷新状态后的回调) */ -typedef void (^MJRefreshComponentBeginRefreshingCompletionBlock)(void) MJRefreshDeprecated("first deprecated in 3.3.0 - Use `MJRefreshComponentAction` instead"); -/** 结束刷新后的回调 */ -typedef void (^MJRefreshComponentEndRefreshingCompletionBlock)(void) MJRefreshDeprecated("first deprecated in 3.3.0 - Use `MJRefreshComponentAction` instead"); - -/** 刷新用到的回调类型 */ -typedef void (^MJRefreshComponentAction)(void); - -/** 刷新控件的基类 */ -@interface MJRefreshComponent : UIView -{ - /** 记录scrollView刚开始的inset */ - UIEdgeInsets _scrollViewOriginalInset; - /** 父控件 */ - __weak UIScrollView *_scrollView; -} - -#pragma mark - 刷新动画时间控制 -/** 快速动画时间(一般用在刷新开始的回弹动画), 默认 0.25 */ -@property (nonatomic) NSTimeInterval fastAnimationDuration; -/** 慢速动画时间(一般用在刷新结束后的回弹动画), 默认 0.4*/ -@property (nonatomic) NSTimeInterval slowAnimationDuration; -/** 关闭全部默认动画效果, 可以简单粗暴地解决 CollectionView 的回弹动画 bug */ -- (instancetype)setAnimationDisabled; - -#pragma mark - 刷新回调 -/** 正在刷新的回调 */ -@property (copy, nonatomic, nullable) MJRefreshComponentAction refreshingBlock; -/** 设置回调对象和回调方法 */ -- (void)setRefreshingTarget:(id)target refreshingAction:(SEL)action; - -/** 回调对象 */ -@property (weak, nonatomic) id refreshingTarget; -/** 回调方法 */ -@property (assign, nonatomic) SEL refreshingAction; -/** 触发回调(交给子类去调用) */ -- (void)executeRefreshingCallback; - -#pragma mark - 刷新状态控制 -/** 进入刷新状态 */ -- (void)beginRefreshing; -- (void)beginRefreshingWithCompletionBlock:(void (^)(void))completionBlock; -/** 开始刷新后的回调(进入刷新状态后的回调) */ -@property (copy, nonatomic, nullable) MJRefreshComponentAction beginRefreshingCompletionBlock; -/** 带动画的结束刷新的回调 */ -@property (copy, nonatomic, nullable) MJRefreshComponentAction endRefreshingAnimateCompletionBlock MJRefreshDeprecated("first deprecated in 3.3.0 - Use `endRefreshingAnimationBeginAction` instead"); -@property (copy, nonatomic, nullable) MJRefreshComponentAction endRefreshingAnimationBeginAction; -/** 结束刷新的回调 */ -@property (copy, nonatomic, nullable) MJRefreshComponentAction endRefreshingCompletionBlock; -/** 结束刷新状态 */ -- (void)endRefreshing; -- (void)endRefreshingWithCompletionBlock:(void (^)(void))completionBlock; -/** 是否正在刷新 */ -@property (assign, nonatomic, readonly, getter=isRefreshing) BOOL refreshing; - -/** 刷新状态 一般交给子类内部实现 */ -@property (assign, nonatomic) MJRefreshState state; - -#pragma mark - 交给子类去访问 -/** 记录scrollView刚开始的inset */ -@property (assign, nonatomic, readonly) UIEdgeInsets scrollViewOriginalInset; -/** 父控件 */ -@property (weak, nonatomic, readonly) UIScrollView *scrollView; - -#pragma mark - 交给子类们去实现 -/** 初始化 */ -- (void)prepare NS_REQUIRES_SUPER; -/** 摆放子控件frame */ -- (void)placeSubviews NS_REQUIRES_SUPER; -/** 当scrollView的contentOffset发生改变的时候调用 */ -- (void)scrollViewContentOffsetDidChange:(nullable NSDictionary *)change NS_REQUIRES_SUPER; -/** 当scrollView的contentSize发生改变的时候调用 */ -- (void)scrollViewContentSizeDidChange:(nullable NSDictionary *)change NS_REQUIRES_SUPER; -/** 当scrollView的拖拽状态发生改变的时候调用 */ -- (void)scrollViewPanStateDidChange:(nullable NSDictionary *)change NS_REQUIRES_SUPER; - -/** 多语言配置 language 发生变化时调用 - - `MJRefreshConfig.defaultConfig.language` 发生改变时调用. - - ⚠️ 父类会调用 `placeSubviews` 方法, 请勿在 placeSubviews 中调用本方法, 造成死循环. 子类在需要重新布局时, 在配置完修改后, 最后再调用 super 方法, 否则可能导致配置修改后, 定位先于修改执行. - */ -- (void)i18nDidChange NS_REQUIRES_SUPER; - -#pragma mark - 其他 -/** 拉拽的百分比(交给子类重写) */ -@property (assign, nonatomic) CGFloat pullingPercent; -/** 根据拖拽比例自动切换透明度 */ -@property (assign, nonatomic, getter=isAutoChangeAlpha) BOOL autoChangeAlpha MJRefreshDeprecated("请使用automaticallyChangeAlpha属性"); -/** 根据拖拽比例自动切换透明度 */ -@property (assign, nonatomic, getter=isAutomaticallyChangeAlpha) BOOL automaticallyChangeAlpha; -@end - -@interface UILabel(MJRefresh) -+ (instancetype)mj_label; -- (CGFloat)mj_textWidth; -@end - -@interface MJRefreshComponent (ChainingGrammar) - -#pragma mark - <<< 为 Swift 扩展链式语法 >>> - -/// 自动变化透明度 -- (instancetype)autoChangeTransparency:(BOOL)isAutoChange; -/// 刷新开始后立即调用的回调 -- (instancetype)afterBeginningAction:(MJRefreshComponentAction)action; -/// 刷新动画开始后立即调用的回调 -- (instancetype)endingAnimationBeginningAction:(MJRefreshComponentAction)action; -/// 刷新结束后立即调用的回调 -- (instancetype)afterEndingAction:(MJRefreshComponentAction)action; - - -/// 需要子类必须实现 -/// @param scrollView 赋值给的 ScrollView 的 Header/Footer/Trailer -- (instancetype)linkTo:(UIScrollView *)scrollView; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/MJRefresh/MJRefresh/Base/MJRefreshComponent.m b/Pods/MJRefresh/MJRefresh/Base/MJRefreshComponent.m deleted file mode 100644 index 785df18..0000000 --- a/Pods/MJRefresh/MJRefresh/Base/MJRefreshComponent.m +++ /dev/null @@ -1,323 +0,0 @@ -// 代码地址: https://github.com/CoderMJLee/MJRefresh -// MJRefreshComponent.m -// MJRefresh -// -// Created by MJ Lee on 15/3/4. -// Copyright (c) 2015年 小码哥. All rights reserved. -// - -#import "MJRefreshComponent.h" -#import "MJRefreshConst.h" -#import "MJRefreshConfig.h" -#import "UIView+MJExtension.h" -#import "UIScrollView+MJExtension.h" -#import "UIScrollView+MJRefresh.h" -#import "NSBundle+MJRefresh.h" - -@interface MJRefreshComponent() -@property (strong, nonatomic) UIPanGestureRecognizer *pan; -@end - -@implementation MJRefreshComponent -#pragma mark - 初始化 -- (instancetype)initWithFrame:(CGRect)frame -{ - if (self = [super initWithFrame:frame]) { - // 准备工作 - [self prepare]; - - // 默认是普通状态 - self.state = MJRefreshStateIdle; - self.fastAnimationDuration = 0.25; - self.slowAnimationDuration = 0.4; - } - return self; -} - -- (void)prepare -{ - // 基本属性 - self.autoresizingMask = UIViewAutoresizingFlexibleWidth; - self.backgroundColor = [UIColor clearColor]; -} - -- (void)layoutSubviews -{ - [self placeSubviews]; - - [super layoutSubviews]; -} - -- (void)placeSubviews{} - -- (void)willMoveToSuperview:(UIView *)newSuperview -{ - [super willMoveToSuperview:newSuperview]; - - // 如果不是UIScrollView,不做任何事情 - if (newSuperview && ![newSuperview isKindOfClass:[UIScrollView class]]) return; - - // 旧的父控件移除监听 - [self removeObservers]; - - if (newSuperview) { // 新的父控件 - // 记录UIScrollView - _scrollView = (UIScrollView *)newSuperview; - - // 设置宽度 - self.mj_w = _scrollView.mj_w; - // 设置位置 - self.mj_x = -_scrollView.mj_insetL; - - // 设置永远支持垂直弹簧效果 - _scrollView.alwaysBounceVertical = YES; - // 记录UIScrollView最开始的contentInset - _scrollViewOriginalInset = _scrollView.mj_inset; - - // 添加监听 - [self addObservers]; - } -} - -- (void)drawRect:(CGRect)rect -{ - [super drawRect:rect]; - - if (self.state == MJRefreshStateWillRefresh) { - // 预防view还没显示出来就调用了beginRefreshing - self.state = MJRefreshStateRefreshing; - } -} - -#pragma mark - KVO监听 -- (void)addObservers -{ - NSKeyValueObservingOptions options = NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld; - [self.scrollView addObserver:self forKeyPath:MJRefreshKeyPathContentOffset options:options context:nil]; - [self.scrollView addObserver:self forKeyPath:MJRefreshKeyPathContentSize options:options context:nil]; - self.pan = self.scrollView.panGestureRecognizer; - [self.pan addObserver:self forKeyPath:MJRefreshKeyPathPanState options:options context:nil]; - - [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(i18nDidChange) name:MJRefreshDidChangeLanguageNotification object:MJRefreshConfig.defaultConfig]; -} - -- (void)removeObservers -{ - [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentOffset]; - [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentSize]; - [self.pan removeObserver:self forKeyPath:MJRefreshKeyPathPanState]; - self.pan = nil; -} - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context -{ - // 遇到这些情况就直接返回 - if (!self.userInteractionEnabled) return; - - // 这个就算看不见也需要处理 - if ([keyPath isEqualToString:MJRefreshKeyPathContentSize]) { - [self scrollViewContentSizeDidChange:change]; - } - - // 看不见 - if (self.hidden) return; - if ([keyPath isEqualToString:MJRefreshKeyPathContentOffset]) { - [self scrollViewContentOffsetDidChange:change]; - } else if ([keyPath isEqualToString:MJRefreshKeyPathPanState]) { - [self scrollViewPanStateDidChange:change]; - } -} - -- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change{} -- (void)scrollViewContentSizeDidChange:(NSDictionary *)change{} -- (void)scrollViewPanStateDidChange:(NSDictionary *)change{} - -- (void)i18nDidChange { - [self placeSubviews]; -} - -#pragma mark - 公共方法 -#pragma mark 设置回调对象和回调方法 -- (void)setRefreshingTarget:(id)target refreshingAction:(SEL)action -{ - self.refreshingTarget = target; - self.refreshingAction = action; -} - -- (void)setState:(MJRefreshState)state -{ - _state = state; - - // 加入主队列的目的是等setState:方法调用完毕、设置完文字后再去布局子控件 - MJRefreshDispatchAsyncOnMainQueue([self setNeedsLayout];) -} - -#pragma mark 进入刷新状态 -- (void)beginRefreshing -{ - [UIView animateWithDuration:self.fastAnimationDuration animations:^{ - self.alpha = 1.0; - }]; - self.pullingPercent = 1.0; - // 只要正在刷新,就完全显示 - if (self.window) { - self.state = MJRefreshStateRefreshing; - } else { - // 预防正在刷新中时,调用本方法使得header inset回置失败 - if (self.state != MJRefreshStateRefreshing) { - self.state = MJRefreshStateWillRefresh; - // 刷新(预防从另一个控制器回到这个控制器的情况,回来要重新刷新一下) - [self setNeedsDisplay]; - } - } -} - -- (void)beginRefreshingWithCompletionBlock:(void (^)(void))completionBlock -{ - self.beginRefreshingCompletionBlock = completionBlock; - - [self beginRefreshing]; -} - -#pragma mark 结束刷新状态 -- (void)endRefreshing -{ - MJRefreshDispatchAsyncOnMainQueue(self.state = MJRefreshStateIdle;) -} - -- (void)endRefreshingWithCompletionBlock:(void (^)(void))completionBlock -{ - self.endRefreshingCompletionBlock = completionBlock; - - [self endRefreshing]; -} - -#pragma mark 是否正在刷新 -- (BOOL)isRefreshing -{ - return self.state == MJRefreshStateRefreshing || self.state == MJRefreshStateWillRefresh; -} - -#pragma mark 自动切换透明度 -- (void)setAutoChangeAlpha:(BOOL)autoChangeAlpha -{ - self.automaticallyChangeAlpha = autoChangeAlpha; -} - -- (BOOL)isAutoChangeAlpha -{ - return self.isAutomaticallyChangeAlpha; -} - -- (void)setAutomaticallyChangeAlpha:(BOOL)automaticallyChangeAlpha -{ - _automaticallyChangeAlpha = automaticallyChangeAlpha; - - if (self.isRefreshing) return; - - if (automaticallyChangeAlpha) { - self.alpha = self.pullingPercent; - } else { - self.alpha = 1.0; - } -} - -#pragma mark 根据拖拽进度设置透明度 -- (void)setPullingPercent:(CGFloat)pullingPercent -{ - _pullingPercent = pullingPercent; - - if (self.isRefreshing) return; - - if (self.isAutomaticallyChangeAlpha) { - self.alpha = pullingPercent; - } -} - -#pragma mark - 内部方法 -- (void)executeRefreshingCallback -{ - if (self.refreshingBlock) { - self.refreshingBlock(); - } - if ([self.refreshingTarget respondsToSelector:self.refreshingAction]) { - MJRefreshMsgSend(MJRefreshMsgTarget(self.refreshingTarget), self.refreshingAction, self); - } - if (self.beginRefreshingCompletionBlock) { - self.beginRefreshingCompletionBlock(); - } -} - -#pragma mark - 刷新动画时间控制 -- (instancetype)setAnimationDisabled { - self.fastAnimationDuration = 0; - self.slowAnimationDuration = 0; - - return self; -} - -#pragma mark - <<< Deprecation compatible function >>> - -- (void)setEndRefreshingAnimateCompletionBlock:(MJRefreshComponentEndRefreshingCompletionBlock)endRefreshingAnimateCompletionBlock { - _endRefreshingAnimationBeginAction = endRefreshingAnimateCompletionBlock; -} -@end - -@implementation UILabel(MJRefresh) -+ (instancetype)mj_label -{ - UILabel *label = [[self alloc] init]; - label.font = MJRefreshLabelFont; - label.textColor = MJRefreshLabelTextColor; - label.autoresizingMask = UIViewAutoresizingFlexibleWidth; - label.textAlignment = NSTextAlignmentCenter; - label.backgroundColor = [UIColor clearColor]; - return label; -} - -- (CGFloat)mj_textWidth { - CGFloat stringWidth = 0; - CGSize size = CGSizeMake(MAXFLOAT, MAXFLOAT); - - if (self.attributedText) { - if (self.attributedText.length == 0) { return 0; } - stringWidth = [self.attributedText boundingRectWithSize:size - options:NSStringDrawingUsesLineFragmentOrigin - context:nil].size.width; - } else { - if (self.text.length == 0) { return 0; } - NSAssert(self.font != nil, @"请检查 mj_label's `font` 是否设置正确"); - stringWidth = [self.text boundingRectWithSize:size - options:NSStringDrawingUsesLineFragmentOrigin - attributes:@{NSFontAttributeName:self.font} - context:nil].size.width; - } - return stringWidth; -} -@end - - -#pragma mark - <<< 为 Swift 扩展链式语法 >>> - -@implementation MJRefreshComponent (ChainingGrammar) - -- (instancetype)autoChangeTransparency:(BOOL)isAutoChange { - self.automaticallyChangeAlpha = isAutoChange; - return self; -} -- (instancetype)afterBeginningAction:(MJRefreshComponentAction)action { - self.beginRefreshingCompletionBlock = action; - return self; -} -- (instancetype)endingAnimationBeginningAction:(MJRefreshComponentAction)action { - self.endRefreshingAnimationBeginAction = action; - return self; -} -- (instancetype)afterEndingAction:(MJRefreshComponentAction)action { - self.endRefreshingCompletionBlock = action; - return self; -} - -- (instancetype)linkTo:(UIScrollView *)scrollView { - return self; -} - -@end diff --git a/Pods/MJRefresh/MJRefresh/Base/MJRefreshFooter.h b/Pods/MJRefresh/MJRefresh/Base/MJRefreshFooter.h deleted file mode 100644 index 7b7c7b6..0000000 --- a/Pods/MJRefresh/MJRefresh/Base/MJRefreshFooter.h +++ /dev/null @@ -1,37 +0,0 @@ -// 代码地址: https://github.com/CoderMJLee/MJRefresh -// MJRefreshFooter.h -// MJRefresh -// -// Created by MJ Lee on 15/3/5. -// Copyright (c) 2015年 小码哥. All rights reserved. -// 上拉刷新控件 - -#if __has_include() -#import -#else -#import "MJRefreshComponent.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - -@interface MJRefreshFooter : MJRefreshComponent -/** 创建footer */ -+ (instancetype)footerWithRefreshingBlock:(MJRefreshComponentAction)refreshingBlock; -/** 创建footer */ -+ (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action; - -/** 提示没有更多的数据 */ -- (void)endRefreshingWithNoMoreData; -- (void)noticeNoMoreData MJRefreshDeprecated("使用endRefreshingWithNoMoreData"); - -/** 重置没有更多的数据(消除没有更多数据的状态) */ -- (void)resetNoMoreData; - -/** 忽略多少scrollView的contentInset的bottom */ -@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetBottom; - -/** 自动根据有无数据来显示和隐藏(有数据就显示,没有数据隐藏。默认是NO) */ -@property (assign, nonatomic, getter=isAutomaticallyHidden) BOOL automaticallyHidden MJRefreshDeprecated("已废弃此属性,开发者请自行控制footer的显示和隐藏"); -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/MJRefresh/MJRefresh/Base/MJRefreshFooter.m b/Pods/MJRefresh/MJRefresh/Base/MJRefreshFooter.m deleted file mode 100644 index 8096fdb..0000000 --- a/Pods/MJRefresh/MJRefresh/Base/MJRefreshFooter.m +++ /dev/null @@ -1,71 +0,0 @@ -// 代码地址: https://github.com/CoderMJLee/MJRefresh -// MJRefreshFooter.m -// MJRefresh -// -// Created by MJ Lee on 15/3/5. -// Copyright (c) 2015年 小码哥. All rights reserved. -// - -#import "MJRefreshFooter.h" -#import "UIScrollView+MJRefresh.h" -#import "UIView+MJExtension.h" - -@interface MJRefreshFooter() - -@end - -@implementation MJRefreshFooter -#pragma mark - 构造方法 -+ (instancetype)footerWithRefreshingBlock:(MJRefreshComponentAction)refreshingBlock -{ - MJRefreshFooter *cmp = [[self alloc] init]; - cmp.refreshingBlock = refreshingBlock; - return cmp; -} -+ (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action -{ - MJRefreshFooter *cmp = [[self alloc] init]; - [cmp setRefreshingTarget:target refreshingAction:action]; - return cmp; -} - -#pragma mark - 重写父类的方法 -- (void)prepare -{ - [super prepare]; - - // 设置自己的高度 - self.mj_h = MJRefreshFooterHeight; - - // 默认不会自动隐藏 -// self.automaticallyHidden = NO; -} - -#pragma mark . 链式语法部分 . - -- (instancetype)linkTo:(UIScrollView *)scrollView { - scrollView.mj_footer = self; - return self; -} - -#pragma mark - 公共方法 -- (void)endRefreshingWithNoMoreData -{ - MJRefreshDispatchAsyncOnMainQueue(self.state = MJRefreshStateNoMoreData;) -} - -- (void)noticeNoMoreData -{ - [self endRefreshingWithNoMoreData]; -} - -- (void)resetNoMoreData -{ - MJRefreshDispatchAsyncOnMainQueue(self.state = MJRefreshStateIdle;) -} - -- (void)setAutomaticallyHidden:(BOOL)automaticallyHidden -{ - _automaticallyHidden = automaticallyHidden; -} -@end diff --git a/Pods/MJRefresh/MJRefresh/Base/MJRefreshHeader.h b/Pods/MJRefresh/MJRefresh/Base/MJRefreshHeader.h deleted file mode 100644 index 95d8cb2..0000000 --- a/Pods/MJRefresh/MJRefresh/Base/MJRefreshHeader.h +++ /dev/null @@ -1,35 +0,0 @@ -// 代码地址: https://github.com/CoderMJLee/MJRefresh -// MJRefreshHeader.h -// MJRefresh -// -// Created by MJ Lee on 15/3/4. -// Copyright (c) 2015年 小码哥. All rights reserved. -// 下拉刷新控件:负责监控用户下拉的状态 - -#if __has_include() -#import -#else -#import "MJRefreshComponent.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - -@interface MJRefreshHeader : MJRefreshComponent -/** 创建header */ -+ (instancetype)headerWithRefreshingBlock:(MJRefreshComponentAction)refreshingBlock; -/** 创建header */ -+ (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action; - -/** 这个key用来存储上一次下拉刷新成功的时间 */ -@property (copy, nonatomic) NSString *lastUpdatedTimeKey; -/** 上一次下拉刷新成功的时间 */ -@property (strong, nonatomic, readonly, nullable) NSDate *lastUpdatedTime; - -/** 忽略多少scrollView的contentInset的top */ -@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetTop; - -/** 默认是关闭状态, 如果遇到 CollectionView 的动画异常问题可以尝试打开 */ -@property (nonatomic) BOOL isCollectionViewAnimationBug; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/MJRefresh/MJRefresh/Base/MJRefreshHeader.m b/Pods/MJRefresh/MJRefresh/Base/MJRefreshHeader.m deleted file mode 100644 index 9baf17a..0000000 --- a/Pods/MJRefresh/MJRefresh/Base/MJRefreshHeader.m +++ /dev/null @@ -1,297 +0,0 @@ -// 代码地址: https://github.com/CoderMJLee/MJRefresh -// MJRefreshHeader.m -// MJRefresh -// -// Created by MJ Lee on 15/3/4. -// Copyright (c) 2015年 小码哥. All rights reserved. -// - -#import "MJRefreshHeader.h" -#import "UIView+MJExtension.h" -#import "UIScrollView+MJExtension.h" -#import "UIScrollView+MJRefresh.h" - -NSString * const MJRefreshHeaderRefreshing2IdleBoundsKey = @"MJRefreshHeaderRefreshing2IdleBounds"; -NSString * const MJRefreshHeaderRefreshingBoundsKey = @"MJRefreshHeaderRefreshingBounds"; - -@interface MJRefreshHeader() -@property (assign, nonatomic) CGFloat insetTDelta; -@end - -@implementation MJRefreshHeader -#pragma mark - 构造方法 -+ (instancetype)headerWithRefreshingBlock:(MJRefreshComponentAction)refreshingBlock -{ - MJRefreshHeader *cmp = [[self alloc] init]; - cmp.refreshingBlock = refreshingBlock; - return cmp; -} -+ (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action -{ - MJRefreshHeader *cmp = [[self alloc] init]; - [cmp setRefreshingTarget:target refreshingAction:action]; - return cmp; -} - -#pragma mark - 覆盖父类的方法 -- (void)prepare -{ - [super prepare]; - - // 设置key - self.lastUpdatedTimeKey = MJRefreshHeaderLastUpdatedTimeKey; - - // 设置高度 - self.mj_h = MJRefreshHeaderHeight; -} - -- (void)placeSubviews -{ - [super placeSubviews]; - - // 设置y值(当自己的高度发生改变了,肯定要重新调整Y值,所以放到placeSubviews方法中设置y值) - self.mj_y = - self.mj_h - self.ignoredScrollViewContentInsetTop; -} - -- (void)resetInset { - if (@available(iOS 11.0, *)) { - } else { - // 如果 iOS 10 及以下系统在刷新时, push 新的 VC, 等待刷新完成后回来, 会导致顶部 Insets.top 异常, 不能 resetInset, 检查一下这种特殊情况 - if (!self.window) { return; } - } - - // sectionheader停留解决 - CGFloat insetT = - self.scrollView.mj_offsetY > _scrollViewOriginalInset.top ? - self.scrollView.mj_offsetY : _scrollViewOriginalInset.top; - insetT = insetT > self.mj_h + _scrollViewOriginalInset.top ? self.mj_h + _scrollViewOriginalInset.top : insetT; - self.insetTDelta = _scrollViewOriginalInset.top - insetT; - // 避免 CollectionView 在使用根据 Autolayout 和 内容自动伸缩 Cell, 刷新时导致的 Layout 异常渲染问题 - if (self.scrollView.mj_insetT != insetT) { - self.scrollView.mj_insetT = insetT; - } -} - -- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change -{ - [super scrollViewContentOffsetDidChange:change]; - - // 在刷新的refreshing状态 - if (self.state == MJRefreshStateRefreshing) { - [self resetInset]; - return; - } - - // 跳转到下一个控制器时,contentInset可能会变 - _scrollViewOriginalInset = self.scrollView.mj_inset; - - // 当前的contentOffset - CGFloat offsetY = self.scrollView.mj_offsetY; - // 头部控件刚好出现的offsetY - CGFloat happenOffsetY = - self.scrollViewOriginalInset.top; - - // 如果是向上滚动到看不见头部控件,直接返回 - // >= -> > - if (offsetY > happenOffsetY) return; - - // 普通 和 即将刷新 的临界点 - CGFloat normal2pullingOffsetY = happenOffsetY - self.mj_h; - CGFloat pullingPercent = (happenOffsetY - offsetY) / self.mj_h; - - if (self.scrollView.isDragging) { // 如果正在拖拽 - self.pullingPercent = pullingPercent; - if (self.state == MJRefreshStateIdle && offsetY < normal2pullingOffsetY) { - // 转为即将刷新状态 - self.state = MJRefreshStatePulling; - } else if (self.state == MJRefreshStatePulling && offsetY >= normal2pullingOffsetY) { - // 转为普通状态 - self.state = MJRefreshStateIdle; - } - } else if (self.state == MJRefreshStatePulling) {// 即将刷新 && 手松开 - // 开始刷新 - [self beginRefreshing]; - } else if (pullingPercent < 1) { - self.pullingPercent = pullingPercent; - } -} - -- (void)setState:(MJRefreshState)state -{ - MJRefreshCheckState - - // 根据状态做事情 - if (state == MJRefreshStateIdle) { - if (oldState != MJRefreshStateRefreshing) return; - - [self headerEndingAction]; - } else if (state == MJRefreshStateRefreshing) { - [self headerRefreshingAction]; - } -} - -- (void)headerEndingAction { - // 保存刷新时间 - [[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:self.lastUpdatedTimeKey]; - [[NSUserDefaults standardUserDefaults] synchronize]; - - // 默认使用 UIViewAnimation 动画 - if (!self.isCollectionViewAnimationBug) { - // 恢复inset和offset - [UIView animateWithDuration:self.slowAnimationDuration animations:^{ - self.scrollView.mj_insetT += self.insetTDelta; - - if (self.endRefreshingAnimationBeginAction) { - self.endRefreshingAnimationBeginAction(); - } - // 自动调整透明度 - if (self.isAutomaticallyChangeAlpha) self.alpha = 0.0; - } completion:^(BOOL finished) { - self.pullingPercent = 0.0; - - if (self.endRefreshingCompletionBlock) { - self.endRefreshingCompletionBlock(); - } - }]; - - return; - } - - /** - 这个解决方法的思路出自 https://github.com/CoderMJLee/MJRefresh/pull/844 - 修改了用+ [UIView animateWithDuration: animations:]实现的修改contentInset的动画 - fix issue#225 https://github.com/CoderMJLee/MJRefresh/issues/225 - 另一种解法 pull#737 https://github.com/CoderMJLee/MJRefresh/pull/737 - - 同时, 处理了 Refreshing 中的动画替换. - */ - - // 由于修改 Inset 会导致 self.pullingPercent 联动设置 self.alpha, 故提前获取 alpha 值, 后续用于还原 alpha 动画 - CGFloat viewAlpha = self.alpha; - - self.scrollView.mj_insetT += self.insetTDelta; - // 禁用交互, 如果不禁用可能会引起渲染问题. - self.scrollView.userInteractionEnabled = NO; - - //CAAnimation keyPath 不支持 contentInset 用Bounds的动画代替 - CABasicAnimation *boundsAnimation = [CABasicAnimation animationWithKeyPath:@"bounds"]; - boundsAnimation.fromValue = [NSValue valueWithCGRect:CGRectOffset(self.scrollView.bounds, 0, self.insetTDelta)]; - boundsAnimation.duration = self.slowAnimationDuration; - //在delegate里移除 - boundsAnimation.removedOnCompletion = NO; - boundsAnimation.fillMode = kCAFillModeBoth; - boundsAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; - boundsAnimation.delegate = self; - [boundsAnimation setValue:MJRefreshHeaderRefreshing2IdleBoundsKey forKey:@"identity"]; - - [self.scrollView.layer addAnimation:boundsAnimation forKey:MJRefreshHeaderRefreshing2IdleBoundsKey]; - - if (self.endRefreshingAnimationBeginAction) { - self.endRefreshingAnimationBeginAction(); - } - // 自动调整透明度的动画 - if (self.isAutomaticallyChangeAlpha) { - CABasicAnimation *opacityAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"]; - opacityAnimation.fromValue = @(viewAlpha); - opacityAnimation.toValue = @(0.0); - opacityAnimation.duration = self.slowAnimationDuration; - opacityAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; - [self.layer addAnimation:opacityAnimation forKey:@"MJRefreshHeaderRefreshing2IdleOpacity"]; - - // 由于修改了 inset 导致, pullingPercent 被设置值, alpha 已经被提前修改为 0 了. 所以这里不用置 0, 但为了代码的严谨性, 不依赖其他的特殊实现方式, 这里还是置 0. - self.alpha = 0; - } -} - -- (void)headerRefreshingAction { - // 默认使用 UIViewAnimation 动画 - if (!self.isCollectionViewAnimationBug) { - [UIView animateWithDuration:self.fastAnimationDuration animations:^{ - if (self.scrollView.panGestureRecognizer.state != UIGestureRecognizerStateCancelled) { - CGFloat top = self.scrollViewOriginalInset.top + self.mj_h; - // 增加滚动区域top - self.scrollView.mj_insetT = top; - // 设置滚动位置 - CGPoint offset = self.scrollView.contentOffset; - offset.y = -top; - [self.scrollView setContentOffset:offset animated:NO]; - } - } completion:^(BOOL finished) { - [self executeRefreshingCallback]; - }]; - return; - } - - if (self.scrollView.panGestureRecognizer.state != UIGestureRecognizerStateCancelled) { - CGFloat top = self.scrollViewOriginalInset.top + self.mj_h; - // 禁用交互, 如果不禁用可能会引起渲染问题. - self.scrollView.userInteractionEnabled = NO; - - // CAAnimation keyPath不支持 contentOffset 用Bounds的动画代替 - CABasicAnimation *boundsAnimation = [CABasicAnimation animationWithKeyPath:@"bounds"]; - CGRect bounds = self.scrollView.bounds; - bounds.origin.y = -top; - boundsAnimation.fromValue = [NSValue valueWithCGRect:self.scrollView.bounds]; - boundsAnimation.toValue = [NSValue valueWithCGRect:bounds]; - boundsAnimation.duration = self.fastAnimationDuration; - //在delegate里移除 - boundsAnimation.removedOnCompletion = NO; - boundsAnimation.fillMode = kCAFillModeBoth; - boundsAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; - boundsAnimation.delegate = self; - [boundsAnimation setValue:MJRefreshHeaderRefreshingBoundsKey forKey:@"identity"]; - [self.scrollView.layer addAnimation:boundsAnimation forKey:MJRefreshHeaderRefreshingBoundsKey]; - } else { - [self executeRefreshingCallback]; - } -} - -#pragma mark . 链式语法部分 . - -- (instancetype)linkTo:(UIScrollView *)scrollView { - scrollView.mj_header = self; - return self; -} - -#pragma mark - CAAnimationDelegate -- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag { - NSString *identity = [anim valueForKey:@"identity"]; - if ([identity isEqualToString:MJRefreshHeaderRefreshing2IdleBoundsKey]) { - self.pullingPercent = 0.0; - self.scrollView.userInteractionEnabled = YES; - if (self.endRefreshingCompletionBlock) { - self.endRefreshingCompletionBlock(); - } - } else if ([identity isEqualToString:MJRefreshHeaderRefreshingBoundsKey]) { - // 避免出现 end 先于 Refreshing 状态 - if (self.state != MJRefreshStateIdle) { - CGFloat top = self.scrollViewOriginalInset.top + self.mj_h; - self.scrollView.mj_insetT = top; - // 设置最终滚动位置 - CGPoint offset = self.scrollView.contentOffset; - offset.y = -top; - [self.scrollView setContentOffset:offset animated:NO]; - } - self.scrollView.userInteractionEnabled = YES; - [self executeRefreshingCallback]; - } - - if ([self.scrollView.layer animationForKey:MJRefreshHeaderRefreshing2IdleBoundsKey]) { - [self.scrollView.layer removeAnimationForKey:MJRefreshHeaderRefreshing2IdleBoundsKey]; - } - - if ([self.scrollView.layer animationForKey:MJRefreshHeaderRefreshingBoundsKey]) { - [self.scrollView.layer removeAnimationForKey:MJRefreshHeaderRefreshingBoundsKey]; - } -} - -#pragma mark - 公共方法 -- (NSDate *)lastUpdatedTime -{ - return [[NSUserDefaults standardUserDefaults] objectForKey:self.lastUpdatedTimeKey]; -} - -- (void)setIgnoredScrollViewContentInsetTop:(CGFloat)ignoredScrollViewContentInsetTop { - _ignoredScrollViewContentInsetTop = ignoredScrollViewContentInsetTop; - - self.mj_y = - self.mj_h - _ignoredScrollViewContentInsetTop; -} - -@end diff --git a/Pods/MJRefresh/MJRefresh/Base/MJRefreshTrailer.h b/Pods/MJRefresh/MJRefresh/Base/MJRefreshTrailer.h deleted file mode 100644 index ca4c7ea..0000000 --- a/Pods/MJRefresh/MJRefresh/Base/MJRefreshTrailer.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// MJRefreshTrailer.h -// MJRefresh -// -// Created by kinarobin on 2020/5/3. -// Copyright © 2020 小码哥. All rights reserved. -// - -#if __has_include() -#import -#else -#import "MJRefreshComponent.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - -@interface MJRefreshTrailer : MJRefreshComponent - -/** 创建trailer*/ -+ (instancetype)trailerWithRefreshingBlock:(MJRefreshComponentAction)refreshingBlock; -/** 创建trailer */ -+ (instancetype)trailerWithRefreshingTarget:(id)target refreshingAction:(SEL)action; - -/** 忽略多少scrollView的contentInset的right */ -@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetRight; - - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/MJRefresh/MJRefresh/Base/MJRefreshTrailer.m b/Pods/MJRefresh/MJRefresh/Base/MJRefreshTrailer.m deleted file mode 100644 index da66f20..0000000 --- a/Pods/MJRefresh/MJRefresh/Base/MJRefreshTrailer.m +++ /dev/null @@ -1,179 +0,0 @@ -// -// MJRefreshTrailer.m -// MJRefresh -// -// Created by kinarobin on 2020/5/3. -// Copyright © 2020 小码哥. All rights reserved. -// - -#import "MJRefreshTrailer.h" -#import "UIView+MJExtension.h" -#import "UIScrollView+MJRefresh.h" -#import "UIScrollView+MJExtension.h" - -@interface MJRefreshTrailer() -@property (assign, nonatomic) NSInteger lastRefreshCount; -@property (assign, nonatomic) CGFloat lastRightDelta; -@end - -@implementation MJRefreshTrailer - -#pragma mark - 构造方法 -+ (instancetype)trailerWithRefreshingBlock:(MJRefreshComponentAction)refreshingBlock { - MJRefreshTrailer *cmp = [[self alloc] init]; - cmp.refreshingBlock = refreshingBlock; - return cmp; -} - -+ (instancetype)trailerWithRefreshingTarget:(id)target refreshingAction:(SEL)action { - MJRefreshTrailer *cmp = [[self alloc] init]; - [cmp setRefreshingTarget:target refreshingAction:action]; - return cmp; -} - -- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change { - [super scrollViewContentOffsetDidChange:change]; - - // 如果正在刷新,直接返回 - if (self.state == MJRefreshStateRefreshing) return; - - _scrollViewOriginalInset = self.scrollView.mj_inset; - - // 当前的contentOffset - CGFloat currentOffsetX = self.scrollView.mj_offsetX; - // 尾部控件刚好出现的offsetX - CGFloat happenOffsetX = [self happenOffsetX]; - // 如果是向右滚动到看不见右边控件,直接返回 - if (currentOffsetX <= happenOffsetX) return; - - CGFloat pullingPercent = (currentOffsetX - happenOffsetX) / self.mj_w; - - // 如果已全部加载,仅设置pullingPercent,然后返回 - if (self.state == MJRefreshStateNoMoreData) { - self.pullingPercent = pullingPercent; - return; - } - - if (self.scrollView.isDragging) { - self.pullingPercent = pullingPercent; - // 普通 和 即将刷新 的临界点 - CGFloat normal2pullingOffsetX = happenOffsetX + self.mj_w; - - if (self.state == MJRefreshStateIdle && currentOffsetX > normal2pullingOffsetX) { - self.state = MJRefreshStatePulling; - } else if (self.state == MJRefreshStatePulling && currentOffsetX <= normal2pullingOffsetX) { - // 转为普通状态 - self.state = MJRefreshStateIdle; - } - } else if (self.state == MJRefreshStatePulling) {// 即将刷新 && 手松开 - // 开始刷新 - [self beginRefreshing]; - } else if (pullingPercent < 1) { - self.pullingPercent = pullingPercent; - } -} - -- (void)setState:(MJRefreshState)state { - MJRefreshCheckState - // 根据状态来设置属性 - if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) { - // 刷新完毕 - if (MJRefreshStateRefreshing == oldState) { - [UIView animateWithDuration:self.slowAnimationDuration animations:^{ - if (self.endRefreshingAnimationBeginAction) { - self.endRefreshingAnimationBeginAction(); - } - - self.scrollView.mj_insetR -= self.lastRightDelta; - // 自动调整透明度 - if (self.isAutomaticallyChangeAlpha) self.alpha = 0.0; - } completion:^(BOOL finished) { - self.pullingPercent = 0.0; - - if (self.endRefreshingCompletionBlock) { - self.endRefreshingCompletionBlock(); - } - }]; - } - - CGFloat deltaW = [self widthForContentBreakView]; - // 刚刷新完毕 - if (MJRefreshStateRefreshing == oldState && deltaW > 0 && self.scrollView.mj_totalDataCount != self.lastRefreshCount) { - self.scrollView.mj_offsetX = self.scrollView.mj_offsetX; - } - } else if (state == MJRefreshStateRefreshing) { - // 记录刷新前的数量 - self.lastRefreshCount = self.scrollView.mj_totalDataCount; - - [UIView animateWithDuration:self.fastAnimationDuration animations:^{ - CGFloat right = self.mj_w + self.scrollViewOriginalInset.right; - CGFloat deltaW = [self widthForContentBreakView]; - if (deltaW < 0) { // 如果内容宽度小于view的宽度 - right -= deltaW; - } - self.lastRightDelta = right - self.scrollView.mj_insetR; - self.scrollView.mj_insetR = right; - - // 设置滚动位置 - CGPoint offset = self.scrollView.contentOffset; - offset.x = [self happenOffsetX] + self.mj_w; - [self.scrollView setContentOffset:offset animated:NO]; - } completion:^(BOOL finished) { - [self executeRefreshingCallback]; - }]; - } -} - -- (void)scrollViewContentSizeDidChange:(NSDictionary *)change { - [super scrollViewContentSizeDidChange:change]; - - // 内容的宽度 - CGFloat contentWidth = self.scrollView.mj_contentW + self.ignoredScrollViewContentInsetRight; - // 表格的宽度 - CGFloat scrollWidth = self.scrollView.mj_w - self.scrollViewOriginalInset.left - self.scrollViewOriginalInset.right + self.ignoredScrollViewContentInsetRight; - // 设置位置和尺寸 - self.mj_x = MAX(contentWidth, scrollWidth); -} - -- (void)placeSubviews { - [super placeSubviews]; - - self.mj_h = _scrollView.mj_h; - // 设置自己的宽度 - self.mj_w = MJRefreshTrailWidth; -} - -- (void)willMoveToSuperview:(UIView *)newSuperview { - [super willMoveToSuperview:newSuperview]; - - if (newSuperview) { - // 设置支持水平弹簧效果 - _scrollView.alwaysBounceHorizontal = YES; - _scrollView.alwaysBounceVertical = NO; - } -} - -#pragma mark . 链式语法部分 . - -- (instancetype)linkTo:(UIScrollView *)scrollView { - scrollView.mj_trailer = self; - return self; -} - -#pragma mark - 刚好看到上拉刷新控件时的contentOffset.x -- (CGFloat)happenOffsetX { - CGFloat deltaW = [self widthForContentBreakView]; - if (deltaW > 0) { - return deltaW - self.scrollViewOriginalInset.left; - } else { - return - self.scrollViewOriginalInset.left; - } -} - -#pragma mark 获得scrollView的内容 超出 view 的宽度 -- (CGFloat)widthForContentBreakView { - CGFloat w = self.scrollView.frame.size.width - self.scrollViewOriginalInset.right - self.scrollViewOriginalInset.left; - return self.scrollView.contentSize.width - w; -} - -@end diff --git a/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h b/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h deleted file mode 100644 index f346157..0000000 --- a/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// MJRefreshAutoGifFooter.h -// MJRefresh -// -// Created by MJ Lee on 15/4/24. -// Copyright (c) 2015年 小码哥. All rights reserved. -// - -#if __has_include() -#import -#else -#import "MJRefreshAutoStateFooter.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - -@interface MJRefreshAutoGifFooter : MJRefreshAutoStateFooter -@property (weak, nonatomic, readonly) UIImageView *gifView; - -/** 设置state状态下的动画图片images 动画持续时间duration*/ -- (instancetype)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state; -- (instancetype)setImages:(NSArray *)images forState:(MJRefreshState)state; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m b/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m deleted file mode 100644 index 213f69f..0000000 --- a/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m +++ /dev/null @@ -1,121 +0,0 @@ -// -// MJRefreshAutoGifFooter.m -// MJRefresh -// -// Created by MJ Lee on 15/4/24. -// Copyright (c) 2015年 小码哥. All rights reserved. -// - -#import "MJRefreshAutoGifFooter.h" -#import "NSBundle+MJRefresh.h" -#import "UIView+MJExtension.h" -#import "UIScrollView+MJExtension.h" -#import "UIScrollView+MJRefresh.h" - -@interface MJRefreshAutoGifFooter() -{ - __unsafe_unretained UIImageView *_gifView; -} -/** 所有状态对应的动画图片 */ -@property (strong, nonatomic) NSMutableDictionary *stateImages; -/** 所有状态对应的动画时间 */ -@property (strong, nonatomic) NSMutableDictionary *stateDurations; -@end - -@implementation MJRefreshAutoGifFooter -#pragma mark - 懒加载 -- (UIImageView *)gifView -{ - if (!_gifView) { - UIImageView *gifView = [[UIImageView alloc] init]; - [self addSubview:_gifView = gifView]; - } - return _gifView; -} - -- (NSMutableDictionary *)stateImages -{ - if (!_stateImages) { - self.stateImages = [NSMutableDictionary dictionary]; - } - return _stateImages; -} - -- (NSMutableDictionary *)stateDurations -{ - if (!_stateDurations) { - self.stateDurations = [NSMutableDictionary dictionary]; - } - return _stateDurations; -} - -#pragma mark - 公共方法 -- (instancetype)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state -{ - if (images == nil) return self; - - self.stateImages[@(state)] = images; - self.stateDurations[@(state)] = @(duration); - - /* 根据图片设置控件的高度 */ - UIImage *image = [images firstObject]; - if (image.size.height > self.mj_h) { - self.mj_h = image.size.height; - } - return self; -} - -- (instancetype)setImages:(NSArray *)images forState:(MJRefreshState)state -{ - return [self setImages:images duration:images.count * 0.1 forState:state]; -} - -#pragma mark - 实现父类的方法 -- (void)prepare -{ - [super prepare]; - - // 初始化间距 - self.labelLeftInset = 20; -} - -- (void)placeSubviews -{ - [super placeSubviews]; - - if (self.gifView.constraints.count) return; - - self.gifView.frame = self.bounds; - if (self.isRefreshingTitleHidden) { - self.gifView.contentMode = UIViewContentModeCenter; - } else { - self.gifView.contentMode = UIViewContentModeRight; - self.gifView.mj_w = self.mj_w * 0.5 - self.labelLeftInset - self.stateLabel.mj_textWidth * 0.5; - } -} - -- (void)setState:(MJRefreshState)state -{ - MJRefreshCheckState - - // 根据状态做事情 - if (state == MJRefreshStateRefreshing) { - NSArray *images = self.stateImages[@(state)]; - if (images.count == 0) return; - [self.gifView stopAnimating]; - - self.gifView.hidden = NO; - if (images.count == 1) { // 单张图片 - self.gifView.image = [images lastObject]; - } else { // 多张图片 - self.gifView.animationImages = images; - self.gifView.animationDuration = [self.stateDurations[@(state)] doubleValue]; - [self.gifView startAnimating]; - } - } else if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) { - [self.gifView stopAnimating]; - self.gifView.hidden = YES; - } -} -@end - diff --git a/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h b/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h deleted file mode 100644 index f8d1e04..0000000 --- a/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// MJRefreshAutoNormalFooter.h -// MJRefresh -// -// Created by MJ Lee on 15/4/24. -// Copyright (c) 2015年 小码哥. All rights reserved. -// - -#if __has_include() -#import -#else -#import "MJRefreshAutoStateFooter.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - -@interface MJRefreshAutoNormalFooter : MJRefreshAutoStateFooter -@property (weak, nonatomic, readonly) UIActivityIndicatorView *loadingView; - -/** 菊花的样式 */ -@property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle MJRefreshDeprecated("first deprecated in 3.2.2 - Use `loadingView` property"); -@end - - -NS_ASSUME_NONNULL_END diff --git a/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m b/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m deleted file mode 100644 index 9e6a03d..0000000 --- a/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m +++ /dev/null @@ -1,81 +0,0 @@ -// -// MJRefreshAutoNormalFooter.m -// MJRefresh -// -// Created by MJ Lee on 15/4/24. -// Copyright (c) 2015年 小码哥. All rights reserved. -// - -#import "MJRefreshAutoNormalFooter.h" -#import "NSBundle+MJRefresh.h" -#import "UIView+MJExtension.h" -#import "UIScrollView+MJExtension.h" -#import "UIScrollView+MJRefresh.h" - -@interface MJRefreshAutoNormalFooter() -@property (weak, nonatomic) UIActivityIndicatorView *loadingView; -@end - -@implementation MJRefreshAutoNormalFooter -#pragma mark - 懒加载子控件 -- (UIActivityIndicatorView *)loadingView -{ - if (!_loadingView) { - UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:_activityIndicatorViewStyle]; - loadingView.hidesWhenStopped = YES; - [self addSubview:_loadingView = loadingView]; - } - return _loadingView; -} - -- (void)setActivityIndicatorViewStyle:(UIActivityIndicatorViewStyle)activityIndicatorViewStyle -{ - _activityIndicatorViewStyle = activityIndicatorViewStyle; - - [self.loadingView removeFromSuperview]; - self.loadingView = nil; - [self setNeedsLayout]; -} -#pragma mark - 重写父类的方法 -- (void)prepare -{ - [super prepare]; - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 - if (@available(iOS 13.0, *)) { - _activityIndicatorViewStyle = UIActivityIndicatorViewStyleMedium; - return; - } -#endif - - _activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray; -} - -- (void)placeSubviews -{ - [super placeSubviews]; - - if (self.loadingView.constraints.count) return; - - // 圈圈 - CGFloat loadingCenterX = self.mj_w * 0.5; - if (!self.isRefreshingTitleHidden) { - loadingCenterX -= self.stateLabel.mj_textWidth * 0.5 + self.labelLeftInset; - } - CGFloat loadingCenterY = self.mj_h * 0.5; - self.loadingView.center = CGPointMake(loadingCenterX, loadingCenterY); -} - -- (void)setState:(MJRefreshState)state -{ - MJRefreshCheckState - - // 根据状态做事情 - if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) { - [self.loadingView stopAnimating]; - } else if (state == MJRefreshStateRefreshing) { - [self.loadingView startAnimating]; - } -} - -@end diff --git a/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h b/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h deleted file mode 100644 index c83622d..0000000 --- a/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// MJRefreshAutoStateFooter.h -// MJRefresh -// -// Created by MJ Lee on 15/6/13. -// Copyright © 2015年 小码哥. All rights reserved. -// - -#if __has_include() -#import -#else -#import "MJRefreshAutoFooter.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - -@interface MJRefreshAutoStateFooter : MJRefreshAutoFooter -/** 文字距离圈圈、箭头的距离 */ -@property (assign, nonatomic) CGFloat labelLeftInset; -/** 显示刷新状态的label */ -@property (weak, nonatomic, readonly) UILabel *stateLabel; - -/** 设置state状态下的文字 */ -- (instancetype)setTitle:(NSString *)title forState:(MJRefreshState)state; - -/** 隐藏刷新状态的文字 */ -@property (assign, nonatomic, getter=isRefreshingTitleHidden) BOOL refreshingTitleHidden; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m b/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m deleted file mode 100644 index e5ff652..0000000 --- a/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m +++ /dev/null @@ -1,119 +0,0 @@ -// -// MJRefreshAutoStateFooter.m -// MJRefresh -// -// Created by MJ Lee on 15/6/13. -// Copyright © 2015年 小码哥. All rights reserved. -// - -#import "MJRefreshAutoStateFooter.h" -#import "NSBundle+MJRefresh.h" - -@interface MJRefreshAutoFooter (TapTriggerFix) - -- (void)beginRefreshingWithoutValidation; -@end - - -@implementation MJRefreshAutoFooter (TapTriggerFix) - -- (void)beginRefreshingWithoutValidation { - [super beginRefreshing]; -} - -@end - -@interface MJRefreshAutoStateFooter() -{ - /** 显示刷新状态的label */ - __unsafe_unretained UILabel *_stateLabel; -} -/** 所有状态对应的文字 */ -@property (strong, nonatomic) NSMutableDictionary *stateTitles; -@end - -@implementation MJRefreshAutoStateFooter -#pragma mark - 懒加载 -- (NSMutableDictionary *)stateTitles -{ - if (!_stateTitles) { - self.stateTitles = [NSMutableDictionary dictionary]; - } - return _stateTitles; -} - -- (UILabel *)stateLabel -{ - if (!_stateLabel) { - [self addSubview:_stateLabel = [UILabel mj_label]]; - } - return _stateLabel; -} - -#pragma mark - 公共方法 -- (instancetype)setTitle:(NSString *)title forState:(MJRefreshState)state -{ - if (title == nil) return self; - self.stateTitles[@(state)] = title; - self.stateLabel.text = self.stateTitles[@(self.state)]; - return self; -} - -#pragma mark - 私有方法 -- (void)stateLabelClick -{ - if (self.state == MJRefreshStateIdle) { - [super beginRefreshingWithoutValidation]; - } -} - -- (void)textConfiguration { - // 初始化文字 - [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshAutoFooterIdleText] forState:MJRefreshStateIdle]; - [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshAutoFooterRefreshingText] forState:MJRefreshStateRefreshing]; - [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshAutoFooterNoMoreDataText] forState:MJRefreshStateNoMoreData]; -} - -#pragma mark - 重写父类的方法 -- (void)prepare -{ - [super prepare]; - - // 初始化间距 - self.labelLeftInset = MJRefreshLabelLeftInset; - - [self textConfiguration]; - - // 监听label - self.stateLabel.userInteractionEnabled = YES; - [self.stateLabel addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(stateLabelClick)]]; -} - -- (void)i18nDidChange { - [self textConfiguration]; - - [super i18nDidChange]; -} - - -- (void)placeSubviews -{ - [super placeSubviews]; - - if (self.stateLabel.constraints.count) return; - - // 状态标签 - self.stateLabel.frame = self.bounds; -} - -- (void)setState:(MJRefreshState)state -{ - MJRefreshCheckState - - if (self.isRefreshingTitleHidden && state == MJRefreshStateRefreshing) { - self.stateLabel.text = nil; - } else { - self.stateLabel.text = self.stateTitles[@(state)]; - } -} -@end diff --git a/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h b/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h deleted file mode 100644 index a7ba065..0000000 --- a/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// MJRefreshBackGifFooter.h -// MJRefresh -// -// Created by MJ Lee on 15/4/24. -// Copyright (c) 2015年 小码哥. All rights reserved. -// - -#if __has_include() -#import -#else -#import "MJRefreshBackStateFooter.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - -@interface MJRefreshBackGifFooter : MJRefreshBackStateFooter -@property (weak, nonatomic, readonly) UIImageView *gifView; - -/** 设置state状态下的动画图片images 动画持续时间duration*/ -- (instancetype)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state; -- (instancetype)setImages:(NSArray *)images forState:(MJRefreshState)state; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m b/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m deleted file mode 100644 index 23c626c..0000000 --- a/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m +++ /dev/null @@ -1,132 +0,0 @@ -// -// MJRefreshBackGifFooter.m -// MJRefresh -// -// Created by MJ Lee on 15/4/24. -// Copyright (c) 2015年 小码哥. All rights reserved. -// - -#import "MJRefreshBackGifFooter.h" -#import "NSBundle+MJRefresh.h" -#import "UIView+MJExtension.h" -#import "UIScrollView+MJExtension.h" -#import "UIScrollView+MJRefresh.h" - -@interface MJRefreshBackGifFooter() -{ - __unsafe_unretained UIImageView *_gifView; -} -/** 所有状态对应的动画图片 */ -@property (strong, nonatomic) NSMutableDictionary *stateImages; -/** 所有状态对应的动画时间 */ -@property (strong, nonatomic) NSMutableDictionary *stateDurations; -@end - -@implementation MJRefreshBackGifFooter -#pragma mark - 懒加载 -- (UIImageView *)gifView -{ - if (!_gifView) { - UIImageView *gifView = [[UIImageView alloc] init]; - [self addSubview:_gifView = gifView]; - } - return _gifView; -} - -- (NSMutableDictionary *)stateImages -{ - if (!_stateImages) { - self.stateImages = [NSMutableDictionary dictionary]; - } - return _stateImages; -} - -- (NSMutableDictionary *)stateDurations -{ - if (!_stateDurations) { - self.stateDurations = [NSMutableDictionary dictionary]; - } - return _stateDurations; -} - -#pragma mark - 公共方法 -- (instancetype)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state -{ - if (images == nil) return self; - - self.stateImages[@(state)] = images; - self.stateDurations[@(state)] = @(duration); - - /* 根据图片设置控件的高度 */ - UIImage *image = [images firstObject]; - if (image.size.height > self.mj_h) { - self.mj_h = image.size.height; - } - return self; -} - -- (instancetype)setImages:(NSArray *)images forState:(MJRefreshState)state -{ - return [self setImages:images duration:images.count * 0.1 forState:state]; -} - -#pragma mark - 实现父类的方法 -- (void)prepare -{ - [super prepare]; - - // 初始化间距 - self.labelLeftInset = 20; -} - -- (void)setPullingPercent:(CGFloat)pullingPercent -{ - [super setPullingPercent:pullingPercent]; - NSArray *images = self.stateImages[@(MJRefreshStateIdle)]; - if (self.state != MJRefreshStateIdle || images.count == 0) return; - [self.gifView stopAnimating]; - NSUInteger index = images.count * pullingPercent; - if (index >= images.count) index = images.count - 1; - self.gifView.image = images[index]; -} - -- (void)placeSubviews -{ - [super placeSubviews]; - - if (self.gifView.constraints.count) return; - - self.gifView.frame = self.bounds; - if (self.stateLabel.hidden) { - self.gifView.contentMode = UIViewContentModeCenter; - } else { - self.gifView.contentMode = UIViewContentModeRight; - self.gifView.mj_w = self.mj_w * 0.5 - self.labelLeftInset - self.stateLabel.mj_textWidth * 0.5; - } -} - -- (void)setState:(MJRefreshState)state -{ - MJRefreshCheckState - - // 根据状态做事情 - if (state == MJRefreshStatePulling || state == MJRefreshStateRefreshing) { - NSArray *images = self.stateImages[@(state)]; - if (images.count == 0) return; - - self.gifView.hidden = NO; - [self.gifView stopAnimating]; - if (images.count == 1) { // 单张图片 - self.gifView.image = [images lastObject]; - } else { // 多张图片 - self.gifView.animationImages = images; - self.gifView.animationDuration = [self.stateDurations[@(state)] doubleValue]; - [self.gifView startAnimating]; - } - } else if (state == MJRefreshStateIdle) { - self.gifView.hidden = NO; - } else if (state == MJRefreshStateNoMoreData) { - self.gifView.hidden = YES; - } -} -@end diff --git a/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h b/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h deleted file mode 100644 index d255807..0000000 --- a/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// MJRefreshBackNormalFooter.h -// MJRefresh -// -// Created by MJ Lee on 15/4/24. -// Copyright (c) 2015年 小码哥. All rights reserved. -// - -#if __has_include() -#import -#else -#import "MJRefreshBackStateFooter.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - -@interface MJRefreshBackNormalFooter : MJRefreshBackStateFooter -@property (weak, nonatomic, readonly) UIImageView *arrowView; -@property (weak, nonatomic, readonly) UIActivityIndicatorView *loadingView; - -/** 菊花的样式 */ -@property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle MJRefreshDeprecated("first deprecated in 3.2.2 - Use `loadingView` property"); -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m b/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m deleted file mode 100644 index 932af76..0000000 --- a/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m +++ /dev/null @@ -1,132 +0,0 @@ -// -// MJRefreshBackNormalFooter.m -// MJRefresh -// -// Created by MJ Lee on 15/4/24. -// Copyright (c) 2015年 小码哥. All rights reserved. -// - -#import "MJRefreshBackNormalFooter.h" -#import "NSBundle+MJRefresh.h" -#import "UIView+MJExtension.h" - -@interface MJRefreshBackNormalFooter() -{ - __unsafe_unretained UIImageView *_arrowView; -} -@property (weak, nonatomic) UIActivityIndicatorView *loadingView; -@end - -@implementation MJRefreshBackNormalFooter -#pragma mark - 懒加载子控件 -- (UIImageView *)arrowView -{ - if (!_arrowView) { - UIImageView *arrowView = [[UIImageView alloc] initWithImage:[NSBundle mj_arrowImage]]; - [self addSubview:_arrowView = arrowView]; - } - return _arrowView; -} - - -- (UIActivityIndicatorView *)loadingView -{ - if (!_loadingView) { - UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:_activityIndicatorViewStyle]; - loadingView.hidesWhenStopped = YES; - [self addSubview:_loadingView = loadingView]; - } - return _loadingView; -} - -- (void)setActivityIndicatorViewStyle:(UIActivityIndicatorViewStyle)activityIndicatorViewStyle -{ - _activityIndicatorViewStyle = activityIndicatorViewStyle; - - [self.loadingView removeFromSuperview]; - self.loadingView = nil; - [self setNeedsLayout]; -} -#pragma mark - 重写父类的方法 -- (void)prepare -{ - [super prepare]; - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 - if (@available(iOS 13.0, *)) { - _activityIndicatorViewStyle = UIActivityIndicatorViewStyleMedium; - return; - } -#endif - - _activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray; -} - -- (void)placeSubviews -{ - [super placeSubviews]; - - // 箭头的中心点 - CGFloat arrowCenterX = self.mj_w * 0.5; - if (!self.stateLabel.hidden) { - arrowCenterX -= self.labelLeftInset + self.stateLabel.mj_textWidth * 0.5; - } - CGFloat arrowCenterY = self.mj_h * 0.5; - CGPoint arrowCenter = CGPointMake(arrowCenterX, arrowCenterY); - - // 箭头 - if (self.arrowView.constraints.count == 0) { - self.arrowView.mj_size = self.arrowView.image.size; - self.arrowView.center = arrowCenter; - } - - // 圈圈 - if (self.loadingView.constraints.count == 0) { - self.loadingView.center = arrowCenter; - } - - self.arrowView.tintColor = self.stateLabel.textColor; -} - -- (void)setState:(MJRefreshState)state -{ - MJRefreshCheckState - - // 根据状态做事情 - if (state == MJRefreshStateIdle) { - if (oldState == MJRefreshStateRefreshing) { - self.arrowView.transform = CGAffineTransformMakeRotation(0.000001 - M_PI); - [UIView animateWithDuration:self.slowAnimationDuration animations:^{ - self.loadingView.alpha = 0.0; - } completion:^(BOOL finished) { - // 防止动画结束后,状态已经不是MJRefreshStateIdle - if (self.state != MJRefreshStateIdle) return; - - self.loadingView.alpha = 1.0; - [self.loadingView stopAnimating]; - - self.arrowView.hidden = NO; - }]; - } else { - self.arrowView.hidden = NO; - [self.loadingView stopAnimating]; - [UIView animateWithDuration:self.fastAnimationDuration animations:^{ - self.arrowView.transform = CGAffineTransformMakeRotation(0.000001 - M_PI); - }]; - } - } else if (state == MJRefreshStatePulling) { - self.arrowView.hidden = NO; - [self.loadingView stopAnimating]; - [UIView animateWithDuration:self.fastAnimationDuration animations:^{ - self.arrowView.transform = CGAffineTransformIdentity; - }]; - } else if (state == MJRefreshStateRefreshing) { - self.arrowView.hidden = YES; - [self.loadingView startAnimating]; - } else if (state == MJRefreshStateNoMoreData) { - self.arrowView.hidden = YES; - [self.loadingView stopAnimating]; - } -} - -@end diff --git a/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h b/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h deleted file mode 100644 index c6897f4..0000000 --- a/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// MJRefreshBackStateFooter.h -// MJRefresh -// -// Created by MJ Lee on 15/6/13. -// Copyright © 2015年 小码哥. All rights reserved. -// - -#if __has_include() -#import -#else -#import "MJRefreshBackFooter.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - -@interface MJRefreshBackStateFooter : MJRefreshBackFooter -/** 文字距离圈圈、箭头的距离 */ -@property (assign, nonatomic) CGFloat labelLeftInset; -/** 显示刷新状态的label */ -@property (weak, nonatomic, readonly) UILabel *stateLabel; -/** 设置state状态下的文字 */ -- (instancetype)setTitle:(NSString *)title forState:(MJRefreshState)state; - -/** 获取state状态下的title */ -- (NSString *)titleForState:(MJRefreshState)state; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m b/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m deleted file mode 100644 index 70f4024..0000000 --- a/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m +++ /dev/null @@ -1,93 +0,0 @@ -// -// MJRefreshBackStateFooter.m -// MJRefresh -// -// Created by MJ Lee on 15/6/13. -// Copyright © 2015年 小码哥. All rights reserved. -// - -#import "MJRefreshBackStateFooter.h" -#import "NSBundle+MJRefresh.h" - -@interface MJRefreshBackStateFooter() -{ - /** 显示刷新状态的label */ - __unsafe_unretained UILabel *_stateLabel; -} -/** 所有状态对应的文字 */ -@property (strong, nonatomic) NSMutableDictionary *stateTitles; -@end - -@implementation MJRefreshBackStateFooter -#pragma mark - 懒加载 -- (NSMutableDictionary *)stateTitles -{ - if (!_stateTitles) { - self.stateTitles = [NSMutableDictionary dictionary]; - } - return _stateTitles; -} - -- (UILabel *)stateLabel -{ - if (!_stateLabel) { - [self addSubview:_stateLabel = [UILabel mj_label]]; - } - return _stateLabel; -} - -#pragma mark - 公共方法 -- (instancetype)setTitle:(NSString *)title forState:(MJRefreshState)state -{ - if (title == nil) return self; - self.stateTitles[@(state)] = title; - self.stateLabel.text = self.stateTitles[@(self.state)]; - return self; -} - -- (NSString *)titleForState:(MJRefreshState)state { - return self.stateTitles[@(state)]; -} - -- (void)textConfiguration { - // 初始化文字 - [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterIdleText] forState:MJRefreshStateIdle]; - [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterPullingText] forState:MJRefreshStatePulling]; - [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterRefreshingText] forState:MJRefreshStateRefreshing]; - [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterNoMoreDataText] forState:MJRefreshStateNoMoreData]; -} - -#pragma mark - 重写父类的方法 -- (void)prepare -{ - [super prepare]; - - // 初始化间距 - self.labelLeftInset = MJRefreshLabelLeftInset; - [self textConfiguration]; -} - -- (void)i18nDidChange { - [self textConfiguration]; - - [super i18nDidChange]; -} - -- (void)placeSubviews -{ - [super placeSubviews]; - - if (self.stateLabel.constraints.count) return; - - // 状态标签 - self.stateLabel.frame = self.bounds; -} - -- (void)setState:(MJRefreshState)state -{ - MJRefreshCheckState - - // 设置状态文字 - self.stateLabel.text = self.stateTitles[@(state)]; -} -@end diff --git a/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h b/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h deleted file mode 100644 index afa4a13..0000000 --- a/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// MJRefreshGifHeader.h -// MJRefresh -// -// Created by MJ Lee on 15/4/24. -// Copyright (c) 2015年 小码哥. All rights reserved. -// - -#if __has_include() -#import -#else -#import "MJRefreshStateHeader.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - -@interface MJRefreshGifHeader : MJRefreshStateHeader -@property (weak, nonatomic, readonly) UIImageView *gifView; - -/** 设置state状态下的动画图片images 动画持续时间duration*/ -- (instancetype)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state; -- (instancetype)setImages:(NSArray *)images forState:(MJRefreshState)state; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.m b/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.m deleted file mode 100644 index 707e466..0000000 --- a/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.m +++ /dev/null @@ -1,135 +0,0 @@ -// -// MJRefreshGifHeader.m -// MJRefresh -// -// Created by MJ Lee on 15/4/24. -// Copyright (c) 2015年 小码哥. All rights reserved. -// - -#import "MJRefreshGifHeader.h" -#import "UIView+MJExtension.h" -#import "UIScrollView+MJExtension.h" - -@interface MJRefreshGifHeader() -{ - __unsafe_unretained UIImageView *_gifView; -} -/** 所有状态对应的动画图片 */ -@property (strong, nonatomic) NSMutableDictionary *stateImages; -/** 所有状态对应的动画时间 */ -@property (strong, nonatomic) NSMutableDictionary *stateDurations; -@end - -@implementation MJRefreshGifHeader -#pragma mark - 懒加载 -- (UIImageView *)gifView -{ - if (!_gifView) { - UIImageView *gifView = [[UIImageView alloc] init]; - [self addSubview:_gifView = gifView]; - } - return _gifView; -} - -- (NSMutableDictionary *)stateImages -{ - if (!_stateImages) { - self.stateImages = [NSMutableDictionary dictionary]; - } - return _stateImages; -} - -- (NSMutableDictionary *)stateDurations -{ - if (!_stateDurations) { - self.stateDurations = [NSMutableDictionary dictionary]; - } - return _stateDurations; -} - -#pragma mark - 公共方法 -- (instancetype)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state { - if (images == nil) return self; - - self.stateImages[@(state)] = images; - self.stateDurations[@(state)] = @(duration); - - /* 根据图片设置控件的高度 */ - UIImage *image = [images firstObject]; - if (image.size.height > self.mj_h) { - self.mj_h = image.size.height; - } - return self; -} - -- (instancetype)setImages:(NSArray *)images forState:(MJRefreshState)state -{ - return [self setImages:images duration:images.count * 0.1 forState:state]; -} - -#pragma mark - 实现父类的方法 -- (void)prepare -{ - [super prepare]; - - // 初始化间距 - self.labelLeftInset = 20; -} - -- (void)setPullingPercent:(CGFloat)pullingPercent -{ - [super setPullingPercent:pullingPercent]; - NSArray *images = self.stateImages[@(MJRefreshStateIdle)]; - if (self.state != MJRefreshStateIdle || images.count == 0) return; - // 停止动画 - [self.gifView stopAnimating]; - // 设置当前需要显示的图片 - NSUInteger index = images.count * pullingPercent; - if (index >= images.count) index = images.count - 1; - self.gifView.image = images[index]; -} - -- (void)placeSubviews -{ - [super placeSubviews]; - - if (self.gifView.constraints.count) return; - - self.gifView.frame = self.bounds; - if (self.stateLabel.hidden && self.lastUpdatedTimeLabel.hidden) { - self.gifView.contentMode = UIViewContentModeCenter; - } else { - self.gifView.contentMode = UIViewContentModeRight; - - CGFloat stateWidth = self.stateLabel.mj_textWidth; - CGFloat timeWidth = 0.0; - if (!self.lastUpdatedTimeLabel.hidden) { - timeWidth = self.lastUpdatedTimeLabel.mj_textWidth; - } - CGFloat textWidth = MAX(stateWidth, timeWidth); - self.gifView.mj_w = self.mj_w * 0.5 - textWidth * 0.5 - self.labelLeftInset; - } -} - -- (void)setState:(MJRefreshState)state -{ - MJRefreshCheckState - - // 根据状态做事情 - if (state == MJRefreshStatePulling || state == MJRefreshStateRefreshing) { - NSArray *images = self.stateImages[@(state)]; - if (images.count == 0) return; - - [self.gifView stopAnimating]; - if (images.count == 1) { // 单张图片 - self.gifView.image = [images lastObject]; - } else { // 多张图片 - self.gifView.animationImages = images; - self.gifView.animationDuration = [self.stateDurations[@(state)] doubleValue]; - [self.gifView startAnimating]; - } - } else if (state == MJRefreshStateIdle) { - [self.gifView stopAnimating]; - } -} -@end diff --git a/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h b/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h deleted file mode 100644 index 2bfef39..0000000 --- a/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// MJRefreshNormalHeader.h -// MJRefresh -// -// Created by MJ Lee on 15/4/24. -// Copyright (c) 2015年 小码哥. All rights reserved. -// - -#if __has_include() -#import -#else -#import "MJRefreshStateHeader.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - -@interface MJRefreshNormalHeader : MJRefreshStateHeader -@property (weak, nonatomic, readonly) UIImageView *arrowView; -@property (weak, nonatomic, readonly) UIActivityIndicatorView *loadingView; - - -/** 菊花的样式 */ -@property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle MJRefreshDeprecated("first deprecated in 3.2.2 - Use `loadingView` property"); -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.m b/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.m deleted file mode 100644 index 84a66cb..0000000 --- a/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.m +++ /dev/null @@ -1,137 +0,0 @@ -// -// MJRefreshNormalHeader.m -// MJRefresh -// -// Created by MJ Lee on 15/4/24. -// Copyright (c) 2015年 小码哥. All rights reserved. -// - -#import "MJRefreshNormalHeader.h" -#import "NSBundle+MJRefresh.h" -#import "UIScrollView+MJRefresh.h" -#import "UIView+MJExtension.h" - -@interface MJRefreshNormalHeader() -{ - __unsafe_unretained UIImageView *_arrowView; -} -@property (weak, nonatomic) UIActivityIndicatorView *loadingView; -@end - -@implementation MJRefreshNormalHeader -#pragma mark - 懒加载子控件 -- (UIImageView *)arrowView -{ - if (!_arrowView) { - UIImageView *arrowView = [[UIImageView alloc] initWithImage:[NSBundle mj_arrowImage]]; - [self addSubview:_arrowView = arrowView]; - } - return _arrowView; -} - -- (UIActivityIndicatorView *)loadingView -{ - if (!_loadingView) { - UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:_activityIndicatorViewStyle]; - loadingView.hidesWhenStopped = YES; - [self addSubview:_loadingView = loadingView]; - } - return _loadingView; -} - -#pragma mark - 公共方法 -- (void)setActivityIndicatorViewStyle:(UIActivityIndicatorViewStyle)activityIndicatorViewStyle -{ - _activityIndicatorViewStyle = activityIndicatorViewStyle; - - [self.loadingView removeFromSuperview]; - self.loadingView = nil; - [self setNeedsLayout]; -} - -#pragma mark - 重写父类的方法 -- (void)prepare -{ - [super prepare]; - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 - if (@available(iOS 13.0, *)) { - _activityIndicatorViewStyle = UIActivityIndicatorViewStyleMedium; - return; - } -#endif - - _activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray; -} - -- (void)placeSubviews -{ - [super placeSubviews]; - - // 箭头的中心点 - CGFloat arrowCenterX = self.mj_w * 0.5; - if (!self.stateLabel.hidden) { - CGFloat stateWidth = self.stateLabel.mj_textWidth; - CGFloat timeWidth = 0.0; - if (!self.lastUpdatedTimeLabel.hidden) { - timeWidth = self.lastUpdatedTimeLabel.mj_textWidth; - } - CGFloat textWidth = MAX(stateWidth, timeWidth); - arrowCenterX -= textWidth / 2 + self.labelLeftInset; - } - CGFloat arrowCenterY = self.mj_h * 0.5; - CGPoint arrowCenter = CGPointMake(arrowCenterX, arrowCenterY); - - // 箭头 - if (self.arrowView.constraints.count == 0) { - self.arrowView.mj_size = self.arrowView.image.size; - self.arrowView.center = arrowCenter; - } - - // 圈圈 - if (self.loadingView.constraints.count == 0) { - self.loadingView.center = arrowCenter; - } - - self.arrowView.tintColor = self.stateLabel.textColor; -} - -- (void)setState:(MJRefreshState)state -{ - MJRefreshCheckState - - // 根据状态做事情 - if (state == MJRefreshStateIdle) { - if (oldState == MJRefreshStateRefreshing) { - self.arrowView.transform = CGAffineTransformIdentity; - - [UIView animateWithDuration:self.slowAnimationDuration animations:^{ - self.loadingView.alpha = 0.0; - } completion:^(BOOL finished) { - // 如果执行完动画发现不是idle状态,就直接返回,进入其他状态 - if (self.state != MJRefreshStateIdle) return; - - self.loadingView.alpha = 1.0; - [self.loadingView stopAnimating]; - self.arrowView.hidden = NO; - }]; - } else { - [self.loadingView stopAnimating]; - self.arrowView.hidden = NO; - [UIView animateWithDuration:self.fastAnimationDuration animations:^{ - self.arrowView.transform = CGAffineTransformIdentity; - }]; - } - } else if (state == MJRefreshStatePulling) { - [self.loadingView stopAnimating]; - self.arrowView.hidden = NO; - [UIView animateWithDuration:self.fastAnimationDuration animations:^{ - self.arrowView.transform = CGAffineTransformMakeRotation(0.000001 - M_PI); - }]; - } else if (state == MJRefreshStateRefreshing) { - self.loadingView.alpha = 1.0; // 防止refreshing -> idle的动画完毕动作没有被执行 - [self.loadingView startAnimating]; - self.arrowView.hidden = YES; - } -} -@end diff --git a/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h b/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h deleted file mode 100644 index 8e1d108..0000000 --- a/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// MJRefreshStateHeader.h -// MJRefresh -// -// Created by MJ Lee on 15/4/24. -// Copyright (c) 2015年 小码哥. All rights reserved. -// - -#if __has_include() -#import -#else -#import "MJRefreshHeader.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - -@interface MJRefreshStateHeader : MJRefreshHeader -#pragma mark - 刷新时间相关 -/** 利用这个block来决定显示的更新时间文字 */ -@property (copy, nonatomic, nullable) NSString *(^lastUpdatedTimeText)(NSDate * _Nullable lastUpdatedTime); -/** 显示上一次刷新时间的label */ -@property (weak, nonatomic, readonly) UILabel *lastUpdatedTimeLabel; - -#pragma mark - 状态相关 -/** 文字距离圈圈、箭头的距离 */ -@property (assign, nonatomic) CGFloat labelLeftInset; -/** 显示刷新状态的label */ -@property (weak, nonatomic, readonly) UILabel *stateLabel; -/** 设置state状态下的文字 */ -- (instancetype)setTitle:(NSString *)title forState:(MJRefreshState)state; -@end - -@interface MJRefreshStateHeader (ChainingGrammar) - -- (instancetype)modifyLastUpdatedTimeText:(NSString * (^)(NSDate * _Nullable lastUpdatedTime))handler; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.m b/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.m deleted file mode 100644 index 62d1ddc..0000000 --- a/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.m +++ /dev/null @@ -1,191 +0,0 @@ -// -// MJRefreshStateHeader.m -// MJRefresh -// -// Created by MJ Lee on 15/4/24. -// Copyright (c) 2015年 小码哥. All rights reserved. -// - -#import "MJRefreshStateHeader.h" -#import "MJRefreshConst.h" -#import "NSBundle+MJRefresh.h" -#import "UIView+MJExtension.h" -#import "UIScrollView+MJExtension.h" - -@interface MJRefreshStateHeader() -{ - /** 显示上一次刷新时间的label */ - __unsafe_unretained UILabel *_lastUpdatedTimeLabel; - /** 显示刷新状态的label */ - __unsafe_unretained UILabel *_stateLabel; -} -/** 所有状态对应的文字 */ -@property (strong, nonatomic) NSMutableDictionary *stateTitles; -@end - -@implementation MJRefreshStateHeader -#pragma mark - 懒加载 -- (NSMutableDictionary *)stateTitles -{ - if (!_stateTitles) { - self.stateTitles = [NSMutableDictionary dictionary]; - } - return _stateTitles; -} - -- (UILabel *)stateLabel -{ - if (!_stateLabel) { - [self addSubview:_stateLabel = [UILabel mj_label]]; - } - return _stateLabel; -} - -- (UILabel *)lastUpdatedTimeLabel -{ - if (!_lastUpdatedTimeLabel) { - [self addSubview:_lastUpdatedTimeLabel = [UILabel mj_label]]; - } - return _lastUpdatedTimeLabel; -} - -- (void)setLastUpdatedTimeText:(NSString * _Nonnull (^)(NSDate * _Nullable))lastUpdatedTimeText{ - _lastUpdatedTimeText = lastUpdatedTimeText; - // 重新设置key(重新显示时间) - self.lastUpdatedTimeKey = self.lastUpdatedTimeKey; -} - -#pragma mark - 公共方法 -- (instancetype)setTitle:(NSString *)title forState:(MJRefreshState)state -{ - if (title == nil) return self; - self.stateTitles[@(state)] = title; - self.stateLabel.text = self.stateTitles[@(self.state)]; - return self; -} - -#pragma mark key的处理 -- (void)setLastUpdatedTimeKey:(NSString *)lastUpdatedTimeKey -{ - [super setLastUpdatedTimeKey:lastUpdatedTimeKey]; - - // 如果label隐藏了,就不用再处理 - if (self.lastUpdatedTimeLabel.hidden) return; - - NSDate *lastUpdatedTime = [[NSUserDefaults standardUserDefaults] objectForKey:lastUpdatedTimeKey]; - - // 如果有block - if (self.lastUpdatedTimeText) { - self.lastUpdatedTimeLabel.text = self.lastUpdatedTimeText(lastUpdatedTime); - return; - } - - if (lastUpdatedTime) { - // 1.获得年月日 - NSCalendar *calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian]; - NSUInteger unitFlags = NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute; - NSDateComponents *cmp1 = [calendar components:unitFlags fromDate:lastUpdatedTime]; - NSDateComponents *cmp2 = [calendar components:unitFlags fromDate:[NSDate date]]; - - // 2.格式化日期 - NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; - BOOL isToday = NO; - if ([cmp1 day] == [cmp2 day]) { // 今天 - formatter.dateFormat = @" HH:mm"; - isToday = YES; - } else if ([cmp1 year] == [cmp2 year]) { // 今年 - formatter.dateFormat = @"MM-dd HH:mm"; - } else { - formatter.dateFormat = @"yyyy-MM-dd HH:mm"; - } - NSString *time = [formatter stringFromDate:lastUpdatedTime]; - - // 3.显示日期 - self.lastUpdatedTimeLabel.text = [NSString stringWithFormat:@"%@%@%@", - [NSBundle mj_localizedStringForKey:MJRefreshHeaderLastTimeText], - isToday ? [NSBundle mj_localizedStringForKey:MJRefreshHeaderDateTodayText] : @"", - time]; - } else { - self.lastUpdatedTimeLabel.text = [NSString stringWithFormat:@"%@%@", - [NSBundle mj_localizedStringForKey:MJRefreshHeaderLastTimeText], - [NSBundle mj_localizedStringForKey:MJRefreshHeaderNoneLastDateText]]; - } -} - - -- (void)textConfiguration { - // 初始化文字 - [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshHeaderIdleText] forState:MJRefreshStateIdle]; - [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshHeaderPullingText] forState:MJRefreshStatePulling]; - [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshHeaderRefreshingText] forState:MJRefreshStateRefreshing]; - self.lastUpdatedTimeKey = MJRefreshHeaderLastUpdatedTimeKey; -} - -#pragma mark - 覆盖父类的方法 -- (void)prepare -{ - [super prepare]; - - // 初始化间距 - self.labelLeftInset = MJRefreshLabelLeftInset; - [self textConfiguration]; -} - -- (void)i18nDidChange { - [self textConfiguration]; - - [super i18nDidChange]; -} - -- (void)placeSubviews -{ - [super placeSubviews]; - - if (self.stateLabel.hidden) return; - - BOOL noConstrainsOnStatusLabel = self.stateLabel.constraints.count == 0; - - if (self.lastUpdatedTimeLabel.hidden) { - // 状态 - if (noConstrainsOnStatusLabel) self.stateLabel.frame = self.bounds; - } else { - CGFloat stateLabelH = self.mj_h * 0.5; - // 状态 - if (noConstrainsOnStatusLabel) { - self.stateLabel.mj_x = 0; - self.stateLabel.mj_y = 0; - self.stateLabel.mj_w = self.mj_w; - self.stateLabel.mj_h = stateLabelH; - } - - // 更新时间 - if (self.lastUpdatedTimeLabel.constraints.count == 0) { - self.lastUpdatedTimeLabel.mj_x = 0; - self.lastUpdatedTimeLabel.mj_y = stateLabelH; - self.lastUpdatedTimeLabel.mj_w = self.mj_w; - self.lastUpdatedTimeLabel.mj_h = self.mj_h - self.lastUpdatedTimeLabel.mj_y; - } - } -} - -- (void)setState:(MJRefreshState)state -{ - MJRefreshCheckState - - // 设置状态文字 - self.stateLabel.text = self.stateTitles[@(state)]; - - // 重新设置key(重新显示时间) - self.lastUpdatedTimeKey = self.lastUpdatedTimeKey; -} -@end - -#pragma mark - <<< 为 Swift 扩展链式语法 >>> - -@implementation MJRefreshStateHeader (ChainingGrammar) - -- (instancetype)modifyLastUpdatedTimeText:(NSString * _Nonnull (^)(NSDate * _Nullable))handler { - self.lastUpdatedTimeText = handler; - return self; -} - -@end diff --git a/Pods/MJRefresh/MJRefresh/Custom/Trailer/MJRefreshNormalTrailer.h b/Pods/MJRefresh/MJRefresh/Custom/Trailer/MJRefreshNormalTrailer.h deleted file mode 100644 index 97385d7..0000000 --- a/Pods/MJRefresh/MJRefresh/Custom/Trailer/MJRefreshNormalTrailer.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// MJRefreshNormalTrailer.h -// MJRefresh -// -// Created by kinarobin on 2020/5/3. -// Copyright © 2020 小码哥. All rights reserved. -// - -#if __has_include() -#import -#else -#import "MJRefreshStateTrailer.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - -@interface MJRefreshNormalTrailer : MJRefreshStateTrailer - -@property (weak, nonatomic, readonly) UIImageView *arrowView; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/MJRefresh/MJRefresh/Custom/Trailer/MJRefreshNormalTrailer.m b/Pods/MJRefresh/MJRefresh/Custom/Trailer/MJRefreshNormalTrailer.m deleted file mode 100644 index 4b269f2..0000000 --- a/Pods/MJRefresh/MJRefresh/Custom/Trailer/MJRefreshNormalTrailer.m +++ /dev/null @@ -1,80 +0,0 @@ -// -// MJRefreshNormalTrailer.m -// MJRefresh -// -// Created by kinarobin on 2020/5/3. -// Copyright © 2020 小码哥. All rights reserved. -// - -#import "MJRefreshNormalTrailer.h" -#import "NSBundle+MJRefresh.h" -#import "UIView+MJExtension.h" - -@interface MJRefreshNormalTrailer() { - __unsafe_unretained UIImageView *_arrowView; -} -@end - -@implementation MJRefreshNormalTrailer -#pragma mark - 懒加载子控件 -- (UIImageView *)arrowView { - if (!_arrowView) { - UIImageView *arrowView = [[UIImageView alloc] initWithImage:[NSBundle mj_trailArrowImage]]; - [self addSubview:_arrowView = arrowView]; - } - return _arrowView; -} - -- (void)placeSubviews { - [super placeSubviews]; - - CGSize arrowSize = self.arrowView.image.size; - // 箭头的中心点 - CGPoint selfCenter = CGPointMake(self.mj_w * 0.5, self.mj_h * 0.5); - CGPoint arrowCenter = CGPointMake(arrowSize.width * 0.5 + 5, self.mj_h * 0.5); - BOOL stateHidden = self.stateLabel.isHidden; - - if (self.arrowView.constraints.count == 0) { - self.arrowView.mj_size = self.arrowView.image.size; - self.arrowView.center = stateHidden ? selfCenter : arrowCenter ; - } - self.arrowView.tintColor = self.stateLabel.textColor; - - if (stateHidden) return; - - BOOL noConstrainsOnStatusLabel = self.stateLabel.constraints.count == 0; - CGFloat stateLabelW = ceil(self.stateLabel.font.pointSize); - // 状态 - if (noConstrainsOnStatusLabel) { - BOOL arrowHidden = self.arrowView.isHidden; - CGFloat stateCenterX = (self.mj_w + arrowSize.width) * 0.5; - self.stateLabel.center = arrowHidden ? selfCenter : CGPointMake(stateCenterX, self.mj_h * 0.5); - self.stateLabel.mj_size = CGSizeMake(stateLabelW, self.mj_h) ; - } -} - -- (void)setState:(MJRefreshState)state { - MJRefreshCheckState - // 根据状态做事情 - if (state == MJRefreshStateIdle) { - if (oldState == MJRefreshStateRefreshing) { - [UIView animateWithDuration:self.fastAnimationDuration animations:^{ - self.arrowView.transform = CGAffineTransformMakeRotation(M_PI); - } completion:^(BOOL finished) { - self.arrowView.transform = CGAffineTransformIdentity; - }]; - } else { - [UIView animateWithDuration:self.fastAnimationDuration animations:^{ - self.arrowView.transform = CGAffineTransformIdentity; - }]; - } - } else if (state == MJRefreshStatePulling) { - [UIView animateWithDuration:self.fastAnimationDuration animations:^{ - self.arrowView.transform = CGAffineTransformMakeRotation(M_PI); - }]; - } -} - - - -@end diff --git a/Pods/MJRefresh/MJRefresh/Custom/Trailer/MJRefreshStateTrailer.h b/Pods/MJRefresh/MJRefresh/Custom/Trailer/MJRefreshStateTrailer.h deleted file mode 100644 index 92ac203..0000000 --- a/Pods/MJRefresh/MJRefresh/Custom/Trailer/MJRefreshStateTrailer.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// MJRefreshStateTrailer.h -// MJRefresh -// -// Created by kinarobin on 2020/5/3. -// Copyright © 2020 小码哥. All rights reserved. -// - -#if __has_include() -#import -#else -#import "MJRefreshTrailer.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - - -@interface MJRefreshStateTrailer : MJRefreshTrailer - -#pragma mark - 状态相关 -/** 显示刷新状态的label */ -@property (weak, nonatomic, readonly) UILabel *stateLabel; -/** 设置state状态下的文字 */ -- (instancetype)setTitle:(NSString *)title forState:(MJRefreshState)state; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/MJRefresh/MJRefresh/Custom/Trailer/MJRefreshStateTrailer.m b/Pods/MJRefresh/MJRefresh/Custom/Trailer/MJRefreshStateTrailer.m deleted file mode 100644 index 3ce0ba6..0000000 --- a/Pods/MJRefresh/MJRefresh/Custom/Trailer/MJRefreshStateTrailer.m +++ /dev/null @@ -1,87 +0,0 @@ -// -// MJRefreshStateTrailer.m -// MJRefresh -// -// Created by kinarobin on 2020/5/3. -// Copyright © 2020 小码哥. All rights reserved. -// - -#import "MJRefreshStateTrailer.h" -#import "NSBundle+MJRefresh.h" -#import "UIView+MJExtension.h" - -@interface MJRefreshStateTrailer() { - /** 显示刷新状态的label */ - __unsafe_unretained UILabel *_stateLabel; -} -/** 所有状态对应的文字 */ -@property (strong, nonatomic) NSMutableDictionary *stateTitles; -@end - -@implementation MJRefreshStateTrailer -#pragma mark - 懒加载 -- (NSMutableDictionary *)stateTitles { - if (!_stateTitles) { - self.stateTitles = [NSMutableDictionary dictionary]; - } - return _stateTitles; -} - -- (UILabel *)stateLabel { - if (!_stateLabel) { - UILabel *stateLabel = [UILabel mj_label]; - stateLabel.numberOfLines = 0; - [self addSubview:_stateLabel = stateLabel]; - } - return _stateLabel; -} - -#pragma mark - 公共方法 -- (instancetype)setTitle:(NSString *)title forState:(MJRefreshState)state { - if (title == nil) return self; - self.stateTitles[@(state)] = title; - self.stateLabel.text = self.stateTitles[@(self.state)]; - return self; -} - -- (void)textConfiguration { - // 初始化文字 - [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshTrailerIdleText] forState:MJRefreshStateIdle]; - [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshTrailerPullingText] forState:MJRefreshStatePulling]; - [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshTrailerPullingText] forState:MJRefreshStateRefreshing]; -} - -#pragma mark - 覆盖父类的方法 -- (void)prepare { - [super prepare]; - - [self textConfiguration]; -} - -- (void)i18nDidChange { - [self textConfiguration]; - - [super i18nDidChange]; -} - -- (void)setState:(MJRefreshState)state { - MJRefreshCheckState - // 设置状态文字 - self.stateLabel.text = self.stateTitles[@(state)]; -} - -- (void)placeSubviews { - [super placeSubviews]; - - if (self.stateLabel.hidden) return; - - BOOL noConstrainsOnStatusLabel = self.stateLabel.constraints.count == 0; - CGFloat stateLabelW = ceil(self.stateLabel.font.pointSize); - // 状态 - if (noConstrainsOnStatusLabel) { - self.stateLabel.center = CGPointMake(self.mj_w * 0.5, self.mj_h * 0.5); - self.stateLabel.mj_size = CGSizeMake(stateLabelW, self.mj_h) ; - } -} - -@end diff --git a/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png b/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png deleted file mode 100755 index b1078de..0000000 Binary files a/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png and /dev/null differ diff --git a/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings b/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings deleted file mode 100644 index bf56786..0000000 Binary files a/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings and /dev/null differ diff --git a/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/ko.lproj/Localizable.strings b/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/ko.lproj/Localizable.strings deleted file mode 100644 index ac25579..0000000 --- a/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/ko.lproj/Localizable.strings +++ /dev/null @@ -1,16 +0,0 @@ -"MJRefreshHeaderIdleText" = "아래로 당겨 새로고침"; -"MJRefreshHeaderPullingText" = "놓으면 새로고침"; -"MJRefreshHeaderRefreshingText" = "로딩중..."; - -"MJRefreshAutoFooterIdleText" = "탭 또는 위로 당겨 로드함"; -"MJRefreshAutoFooterRefreshingText" = "로딩중..."; -"MJRefreshAutoFooterNoMoreDataText" = "더이상 데이터 없음"; - -"MJRefreshBackFooterIdleText" = "위로 당겨 더 로드 가능"; -"MJRefreshBackFooterPullingText" = "놓으면 더 로드됨."; -"MJRefreshBackFooterRefreshingText" = "로딩중..."; -"MJRefreshBackFooterNoMoreDataText" = "더이상 데이터 없음"; - -"MJRefreshHeaderLastTimeText" = "마지막 업데이트: "; -"MJRefreshHeaderDateTodayText" = "오늘"; -"MJRefreshHeaderNoneLastDateText" = "기록 없음"; diff --git a/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/ru.lproj/Localizable.strings b/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/ru.lproj/Localizable.strings deleted file mode 100644 index 7890e7b..0000000 Binary files a/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/ru.lproj/Localizable.strings and /dev/null differ diff --git a/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/trail_arrow@2x.png b/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/trail_arrow@2x.png deleted file mode 100644 index a45f933..0000000 Binary files a/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/trail_arrow@2x.png and /dev/null differ diff --git a/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/uk.lproj/Localizable.strings b/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/uk.lproj/Localizable.strings deleted file mode 100644 index 3557940..0000000 Binary files a/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/uk.lproj/Localizable.strings and /dev/null differ diff --git a/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings b/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings deleted file mode 100644 index 1066e3d..0000000 Binary files a/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings and /dev/null differ diff --git a/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings b/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings deleted file mode 100644 index 17417b5..0000000 --- a/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings +++ /dev/null @@ -1,19 +0,0 @@ -"MJRefreshHeaderIdleText" = "下拉可以刷新"; -"MJRefreshHeaderPullingText" = "鬆開立即刷新"; -"MJRefreshHeaderRefreshingText" = "正在刷新數據中..."; - -"MJRefreshTrailerIdleText" = "滑動查看圖文詳情"; -"MJRefreshTrailerPullingText" = "釋放查看圖文詳情"; - -"MJRefreshAutoFooterIdleText" = "點擊或上拉加載更多"; -"MJRefreshAutoFooterRefreshingText" = "正在加載更多的數據..."; -"MJRefreshAutoFooterNoMoreDataText" = "已經全部加載完畢"; - -"MJRefreshBackFooterIdleText" = "上拉可以加載更多"; -"MJRefreshBackFooterPullingText" = "鬆開立即加載更多"; -"MJRefreshBackFooterRefreshingText" = "正在加載更多的數據..."; -"MJRefreshBackFooterNoMoreDataText" = "已經全部加載完畢"; - -"MJRefreshHeaderLastTimeText" = "最後更新:"; -"MJRefreshHeaderDateTodayText" = "今天"; -"MJRefreshHeaderNoneLastDateText" = "無記錄"; diff --git a/Pods/MJRefresh/MJRefresh/MJRefresh.h b/Pods/MJRefresh/MJRefresh/MJRefresh.h deleted file mode 100644 index d878212..0000000 --- a/Pods/MJRefresh/MJRefresh/MJRefresh.h +++ /dev/null @@ -1,42 +0,0 @@ -// 代码地址: https://github.com/CoderMJLee/MJRefresh - -#import - -#if __has_include() -FOUNDATION_EXPORT double MJRefreshVersionNumber; -FOUNDATION_EXPORT const unsigned char MJRefreshVersionString[]; - -#import -#import -#import - -#import -#import - -#import -#import -#import -#import - -#import -#import -#import -#import -#else -#import "UIScrollView+MJRefresh.h" -#import "UIScrollView+MJExtension.h" -#import "UIView+MJExtension.h" - -#import "MJRefreshNormalHeader.h" -#import "MJRefreshGifHeader.h" - -#import "MJRefreshBackNormalFooter.h" -#import "MJRefreshBackGifFooter.h" -#import "MJRefreshAutoNormalFooter.h" -#import "MJRefreshAutoGifFooter.h" - -#import "MJRefreshNormalTrailer.h" -#import "MJRefreshConfig.h" -#import "NSBundle+MJRefresh.h" -#import "MJRefreshConst.h" -#endif diff --git a/Pods/MJRefresh/MJRefresh/MJRefreshConfig.h b/Pods/MJRefresh/MJRefresh/MJRefreshConfig.h deleted file mode 100644 index b2c808f..0000000 --- a/Pods/MJRefresh/MJRefresh/MJRefreshConfig.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// MJRefreshConfig.h -// -// Created by Frank on 2018/11/27. -// Copyright © 2018 小码哥. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface MJRefreshConfig : NSObject - -/** 默认使用的语言版本, 默认为 nil. 将随系统的语言自动改变 */ -@property (copy, nonatomic, nullable) NSString *languageCode; - -/** 默认使用的语言资源文件名, 默认为 nil, 即默认的 Localizable.strings. - - - Attention: 文件名不包含后缀.strings - */ -@property (copy, nonatomic, nullable) NSString *i18nFilename; -/** i18n 多语言资源加载自定义 Bundle. - - - Attention: 默认为 nil 采用内置逻辑. 这里设置后将忽略内置逻辑的多语言模式, 采用自定义的多语言 bundle - */ -@property (nonatomic, nullable) NSBundle *i18nBundle; - -/** Singleton Config instance */ -@property (class, nonatomic, readonly) MJRefreshConfig *defaultConfig; - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/MJRefresh/MJRefresh/MJRefreshConfig.m b/Pods/MJRefresh/MJRefresh/MJRefreshConfig.m deleted file mode 100644 index 680b95a..0000000 --- a/Pods/MJRefresh/MJRefresh/MJRefreshConfig.m +++ /dev/null @@ -1,42 +0,0 @@ -// -// MJRefreshConfig.m -// -// Created by Frank on 2018/11/27. -// Copyright © 2018 小码哥. All rights reserved. -// - -#import "MJRefreshConfig.h" -#import "MJRefreshConst.h" -#import "NSBundle+MJRefresh.h" - -@interface MJRefreshConfig (Bundle) - -+ (void)resetLanguageResourceCache; - -@end - -@implementation MJRefreshConfig - -static MJRefreshConfig *mj_RefreshConfig = nil; - -+ (instancetype)defaultConfig { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - mj_RefreshConfig = [[self alloc] init]; - }); - return mj_RefreshConfig; -} - -- (void)setLanguageCode:(NSString *)languageCode { - if ([languageCode isEqualToString:_languageCode]) { - return; - } - - _languageCode = languageCode; - // 重置语言资源 - [MJRefreshConfig resetLanguageResourceCache]; - [NSNotificationCenter.defaultCenter - postNotificationName:MJRefreshDidChangeLanguageNotification object:self]; -} - -@end diff --git a/Pods/MJRefresh/MJRefresh/MJRefreshConst.h b/Pods/MJRefresh/MJRefresh/MJRefreshConst.h deleted file mode 100644 index 6881115..0000000 --- a/Pods/MJRefresh/MJRefresh/MJRefreshConst.h +++ /dev/null @@ -1,115 +0,0 @@ -// 代码地址: https://github.com/CoderMJLee/MJRefresh -#import -#import -#import - -// 弱引用 -#define MJWeakSelf __weak typeof(self) weakSelf = self; - -// 日志输出 -#ifdef DEBUG -#define MJRefreshLog(...) NSLog(__VA_ARGS__) -#else -#define MJRefreshLog(...) -#endif - -// 过期提醒 -#define MJRefreshDeprecated(DESCRIPTION) __attribute__((deprecated(DESCRIPTION))) - -// 运行时objc_msgSend -#define MJRefreshMsgSend(...) ((void (*)(void *, SEL, UIView *))objc_msgSend)(__VA_ARGS__) -#define MJRefreshMsgTarget(target) (__bridge void *)(target) - -// RGB颜色 -#define MJRefreshColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0] - -// 文字颜色 -#define MJRefreshLabelTextColor MJRefreshColor(90, 90, 90) - -// 字体大小 -#define MJRefreshLabelFont [UIFont boldSystemFontOfSize:14] - -// 常量 -UIKIT_EXTERN const CGFloat MJRefreshLabelLeftInset; -UIKIT_EXTERN const CGFloat MJRefreshHeaderHeight; -UIKIT_EXTERN const CGFloat MJRefreshFooterHeight; -UIKIT_EXTERN const CGFloat MJRefreshTrailWidth; -UIKIT_EXTERN const CGFloat MJRefreshFastAnimationDuration; -UIKIT_EXTERN const CGFloat MJRefreshSlowAnimationDuration; - - -UIKIT_EXTERN NSString *const MJRefreshKeyPathContentOffset; -UIKIT_EXTERN NSString *const MJRefreshKeyPathContentSize; -UIKIT_EXTERN NSString *const MJRefreshKeyPathContentInset; -UIKIT_EXTERN NSString *const MJRefreshKeyPathPanState; - -UIKIT_EXTERN NSString *const MJRefreshHeaderLastUpdatedTimeKey; - -UIKIT_EXTERN NSString *const MJRefreshHeaderIdleText; -UIKIT_EXTERN NSString *const MJRefreshHeaderPullingText; -UIKIT_EXTERN NSString *const MJRefreshHeaderRefreshingText; - -UIKIT_EXTERN NSString *const MJRefreshTrailerIdleText; -UIKIT_EXTERN NSString *const MJRefreshTrailerPullingText; - -UIKIT_EXTERN NSString *const MJRefreshAutoFooterIdleText; -UIKIT_EXTERN NSString *const MJRefreshAutoFooterRefreshingText; -UIKIT_EXTERN NSString *const MJRefreshAutoFooterNoMoreDataText; - -UIKIT_EXTERN NSString *const MJRefreshBackFooterIdleText; -UIKIT_EXTERN NSString *const MJRefreshBackFooterPullingText; -UIKIT_EXTERN NSString *const MJRefreshBackFooterRefreshingText; -UIKIT_EXTERN NSString *const MJRefreshBackFooterNoMoreDataText; - -UIKIT_EXTERN NSString *const MJRefreshHeaderLastTimeText; -UIKIT_EXTERN NSString *const MJRefreshHeaderDateTodayText; -UIKIT_EXTERN NSString *const MJRefreshHeaderNoneLastDateText; - -UIKIT_EXTERN NSString *const MJRefreshDidChangeLanguageNotification; - -// 状态检查 -#define MJRefreshCheckState \ -MJRefreshState oldState = self.state; \ -if (state == oldState) return; \ -[super setState:state]; - -// 异步主线程执行,不强持有Self -#define MJRefreshDispatchAsyncOnMainQueue(x) \ -__weak typeof(self) weakSelf = self; \ -dispatch_async(dispatch_get_main_queue(), ^{ \ -typeof(weakSelf) self = weakSelf; \ -{x} \ -}); - -/// 替换方法实现 -/// @param _fromClass 源类 -/// @param _originSelector 源类的 Selector -/// @param _toClass 目标类 -/// @param _newSelector 目标类的 Selector -CG_INLINE BOOL MJRefreshExchangeImplementations( - Class _fromClass, SEL _originSelector, - Class _toClass, SEL _newSelector) { - if (!_fromClass || !_toClass) { - return NO; - } - - Method oriMethod = class_getInstanceMethod(_fromClass, _originSelector); - Method newMethod = class_getInstanceMethod(_toClass, _newSelector); - if (!newMethod) { - return NO; - } - - BOOL isAddedMethod = class_addMethod(_fromClass, _originSelector, - method_getImplementation(newMethod), - method_getTypeEncoding(newMethod)); - if (isAddedMethod) { - // 如果 class_addMethod 成功了,说明之前 fromClass 里并不存在 originSelector,所以要用一个空的方法代替它,以避免 class_replaceMethod 后,后续 toClass 的这个方法被调用时可能会 crash - IMP emptyIMP = imp_implementationWithBlock(^(id selfObject) {}); - IMP oriMethodIMP = method_getImplementation(oriMethod) ?: emptyIMP; - const char *oriMethodTypeEncoding = method_getTypeEncoding(oriMethod) ?: "v@:"; - class_replaceMethod(_toClass, _newSelector, oriMethodIMP, oriMethodTypeEncoding); - } else { - method_exchangeImplementations(oriMethod, newMethod); - } - return YES; -} diff --git a/Pods/MJRefresh/MJRefresh/MJRefreshConst.m b/Pods/MJRefresh/MJRefresh/MJRefreshConst.m deleted file mode 100644 index 704d4c7..0000000 --- a/Pods/MJRefresh/MJRefresh/MJRefreshConst.m +++ /dev/null @@ -1,39 +0,0 @@ -// 代码地址: https://github.com/CoderMJLee/MJRefresh -#import - -const CGFloat MJRefreshLabelLeftInset = 25; -const CGFloat MJRefreshHeaderHeight = 54.0; -const CGFloat MJRefreshFooterHeight = 44.0; -const CGFloat MJRefreshTrailWidth = 60.0; -const CGFloat MJRefreshFastAnimationDuration = 0.25; -const CGFloat MJRefreshSlowAnimationDuration = 0.4; - - -NSString *const MJRefreshKeyPathContentOffset = @"contentOffset"; -NSString *const MJRefreshKeyPathContentInset = @"contentInset"; -NSString *const MJRefreshKeyPathContentSize = @"contentSize"; -NSString *const MJRefreshKeyPathPanState = @"state"; - -NSString *const MJRefreshHeaderLastUpdatedTimeKey = @"MJRefreshHeaderLastUpdatedTimeKey"; - -NSString *const MJRefreshHeaderIdleText = @"MJRefreshHeaderIdleText"; -NSString *const MJRefreshHeaderPullingText = @"MJRefreshHeaderPullingText"; -NSString *const MJRefreshHeaderRefreshingText = @"MJRefreshHeaderRefreshingText"; - -NSString *const MJRefreshTrailerIdleText = @"MJRefreshTrailerIdleText"; -NSString *const MJRefreshTrailerPullingText = @"MJRefreshTrailerPullingText"; - -NSString *const MJRefreshAutoFooterIdleText = @"MJRefreshAutoFooterIdleText"; -NSString *const MJRefreshAutoFooterRefreshingText = @"MJRefreshAutoFooterRefreshingText"; -NSString *const MJRefreshAutoFooterNoMoreDataText = @"MJRefreshAutoFooterNoMoreDataText"; - -NSString *const MJRefreshBackFooterIdleText = @"MJRefreshBackFooterIdleText"; -NSString *const MJRefreshBackFooterPullingText = @"MJRefreshBackFooterPullingText"; -NSString *const MJRefreshBackFooterRefreshingText = @"MJRefreshBackFooterRefreshingText"; -NSString *const MJRefreshBackFooterNoMoreDataText = @"MJRefreshBackFooterNoMoreDataText"; - -NSString *const MJRefreshHeaderLastTimeText = @"MJRefreshHeaderLastTimeText"; -NSString *const MJRefreshHeaderDateTodayText = @"MJRefreshHeaderDateTodayText"; -NSString *const MJRefreshHeaderNoneLastDateText = @"MJRefreshHeaderNoneLastDateText"; - -NSString *const MJRefreshDidChangeLanguageNotification = @"MJRefreshDidChangeLanguageNotification"; diff --git a/Pods/MJRefresh/MJRefresh/NSBundle+MJRefresh.h b/Pods/MJRefresh/MJRefresh/NSBundle+MJRefresh.h deleted file mode 100644 index a1f56f4..0000000 --- a/Pods/MJRefresh/MJRefresh/NSBundle+MJRefresh.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// NSBundle+MJRefresh.h -// MJRefresh -// -// Created by MJ Lee on 16/6/13. -// Copyright © 2016年 小码哥. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface NSBundle (MJRefresh) -+ (instancetype)mj_refreshBundle; -+ (UIImage *)mj_arrowImage; -+ (UIImage *)mj_trailArrowImage; -+ (NSString *)mj_localizedStringForKey:(NSString *)key value:(nullable NSString *)value; -+ (NSString *)mj_localizedStringForKey:(NSString *)key; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/MJRefresh/MJRefresh/NSBundle+MJRefresh.m b/Pods/MJRefresh/MJRefresh/NSBundle+MJRefresh.m deleted file mode 100644 index c19cbe8..0000000 --- a/Pods/MJRefresh/MJRefresh/NSBundle+MJRefresh.m +++ /dev/null @@ -1,116 +0,0 @@ -// -// NSBundle+MJRefresh.m -// MJRefresh -// -// Created by MJ Lee on 16/6/13. -// Copyright © 2016年 小码哥. All rights reserved. -// - -#import "NSBundle+MJRefresh.h" -#import "MJRefreshComponent.h" -#import "MJRefreshConfig.h" - -static NSBundle *mj_defaultI18nBundle = nil; -static NSBundle *mj_systemI18nBundle = nil; - -@implementation NSBundle (MJRefresh) -+ (instancetype)mj_refreshBundle -{ - static NSBundle *refreshBundle = nil; - if (refreshBundle == nil) { -#ifdef SWIFT_PACKAGE - NSBundle *containnerBundle = SWIFTPM_MODULE_BUNDLE; -#else - NSBundle *containnerBundle = [NSBundle bundleForClass:[MJRefreshComponent class]]; -#endif - refreshBundle = [NSBundle bundleWithPath:[containnerBundle pathForResource:@"MJRefresh" ofType:@"bundle"]]; - } - return refreshBundle; -} - -+ (UIImage *)mj_arrowImage -{ - static UIImage *arrowImage = nil; - if (arrowImage == nil) { - arrowImage = [[UIImage imageWithContentsOfFile:[[self mj_refreshBundle] pathForResource:@"arrow@2x" ofType:@"png"]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; - } - return arrowImage; -} - -+ (UIImage *)mj_trailArrowImage { - static UIImage *arrowImage = nil; - if (arrowImage == nil) { - arrowImage = [[UIImage imageWithContentsOfFile:[[self mj_refreshBundle] pathForResource:@"trail_arrow@2x" ofType:@"png"]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; - } - return arrowImage; -} - -+ (NSString *)mj_localizedStringForKey:(NSString *)key -{ - return [self mj_localizedStringForKey:key value:nil]; -} - -+ (NSString *)mj_localizedStringForKey:(NSString *)key value:(NSString *)value -{ - NSString *table = MJRefreshConfig.defaultConfig.i18nFilename; - - // 如果没有缓存, 则走初始化逻辑 - if (mj_defaultI18nBundle == nil) { - NSString *language = MJRefreshConfig.defaultConfig.languageCode; - // 如果配置中没有配置语言 - if (!language) { - language = [NSLocale preferredLanguages].firstObject; - } - NSBundle *bundle = MJRefreshConfig.defaultConfig.i18nBundle; - // 首先优先使用公共配置中的 i18nBundle, 如果为空则使用 mainBundle - bundle = bundle ? bundle : NSBundle.mainBundle; - // 按语言选取语言包 - NSString *i18nFolderPath = [bundle pathForResource:language ofType:@"lproj"]; - mj_defaultI18nBundle = [NSBundle bundleWithPath:i18nFolderPath]; - // 检查语言包, 如果没有查找到, 则默认使用 mainBundle - mj_defaultI18nBundle = mj_defaultI18nBundle ? mj_defaultI18nBundle : NSBundle.mainBundle; - - // 获取 MJRefresh 自有的语言包 - if (mj_systemI18nBundle == nil) { - mj_systemI18nBundle = [self mj_defaultI18nBundleWithLanguage:language]; - } - } - // 首先在 MJRefresh 内置语言文件中寻找 - value = [mj_systemI18nBundle localizedStringForKey:key value:value table:nil]; - // 然后在 MainBundle 对应语言文件中寻找 - value = [mj_defaultI18nBundle localizedStringForKey:key value:value table:table]; - return value; -} - -+ (NSBundle *)mj_defaultI18nBundleWithLanguage:(NSString *)language { - if ([language hasPrefix:@"en"]) { - language = @"en"; - } else if ([language hasPrefix:@"zh"]) { - if ([language rangeOfString:@"Hans"].location != NSNotFound) { - language = @"zh-Hans"; // 简体中文 - } else { // zh-Hant\zh-HK\zh-TW - language = @"zh-Hant"; // 繁體中文 - } - } else if ([language hasPrefix:@"ko"]) { - language = @"ko"; - } else if ([language hasPrefix:@"ru"]) { - language = @"ru"; - } else if ([language hasPrefix:@"uk"]) { - language = @"uk"; - } else { - language = @"en"; - } - - // 从MJRefresh.bundle中查找资源 - return [NSBundle bundleWithPath:[[NSBundle mj_refreshBundle] pathForResource:language ofType:@"lproj"]]; -} -@end - -@implementation MJRefreshConfig (Bundle) - -+ (void)resetLanguageResourceCache { - mj_defaultI18nBundle = nil; - mj_systemI18nBundle = nil; -} - -@end diff --git a/Pods/MJRefresh/MJRefresh/UICollectionViewLayout+MJRefresh.h b/Pods/MJRefresh/MJRefresh/UICollectionViewLayout+MJRefresh.h deleted file mode 100644 index df0423d..0000000 --- a/Pods/MJRefresh/MJRefresh/UICollectionViewLayout+MJRefresh.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// UICollectionViewLayout+MJRefresh.h -// -// 该类是用来解决 Footer 在底端加载完成后, 仍停留在原处的 bug. -// 此问题出现在 iOS 14 及以下系统上. -// Reference: https://github.com/CoderMJLee/MJRefresh/issues/1552 -// -// Created by jiasong on 2021/11/15. -// Copyright © 2021 小码哥. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UICollectionViewLayout (MJRefresh) - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/MJRefresh/MJRefresh/UICollectionViewLayout+MJRefresh.m b/Pods/MJRefresh/MJRefresh/UICollectionViewLayout+MJRefresh.m deleted file mode 100644 index 00d030e..0000000 --- a/Pods/MJRefresh/MJRefresh/UICollectionViewLayout+MJRefresh.m +++ /dev/null @@ -1,45 +0,0 @@ -// -// UICollectionViewLayout+MJRefresh.m -// -// 该类是用来解决 Footer 在底端加载完成后, 仍停留在原处的 bug. -// 此问题出现在 iOS 14 及以下系统上. -// Reference: https://github.com/CoderMJLee/MJRefresh/issues/1552 -// -// Created by jiasong on 2021/11/15. -// Copyright © 2021 小码哥. All rights reserved. -// - -#import "UICollectionViewLayout+MJRefresh.h" -#import "MJRefreshConst.h" -#import "MJRefreshFooter.h" -#import "UIScrollView+MJRefresh.h" - -@implementation UICollectionViewLayout (MJRefresh) - -+ (void)load { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - MJRefreshExchangeImplementations(self.class, @selector(finalizeCollectionViewUpdates), - self.class, @selector(mj_finalizeCollectionViewUpdates)); - }); -} - -- (void)mj_finalizeCollectionViewUpdates { - [self mj_finalizeCollectionViewUpdates]; - - __kindof MJRefreshFooter *footer = self.collectionView.mj_footer; - CGSize newSize = self.collectionViewContentSize; - CGSize oldSize = self.collectionView.contentSize; - if (footer != nil && !CGSizeEqualToSize(newSize, oldSize)) { - NSDictionary *changed = @{ - NSKeyValueChangeNewKey: [NSValue valueWithCGSize:newSize], - NSKeyValueChangeOldKey: [NSValue valueWithCGSize:oldSize], - }; - [CATransaction begin]; - [CATransaction setDisableActions:YES]; - [footer scrollViewContentSizeDidChange:changed]; - [CATransaction commit]; - } -} - -@end diff --git a/Pods/MJRefresh/MJRefresh/UIScrollView+MJExtension.h b/Pods/MJRefresh/MJRefresh/UIScrollView+MJExtension.h deleted file mode 100644 index 1b46d59..0000000 --- a/Pods/MJRefresh/MJRefresh/UIScrollView+MJExtension.h +++ /dev/null @@ -1,28 +0,0 @@ -// 代码地址: https://github.com/CoderMJLee/MJRefresh -// UIScrollView+Extension.h -// MJRefresh -// -// Created by MJ Lee on 14-5-28. -// Copyright (c) 2014年 小码哥. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UIScrollView (MJExtension) -@property (readonly, nonatomic) UIEdgeInsets mj_inset; - -@property (assign, nonatomic) CGFloat mj_insetT; -@property (assign, nonatomic) CGFloat mj_insetB; -@property (assign, nonatomic) CGFloat mj_insetL; -@property (assign, nonatomic) CGFloat mj_insetR; - -@property (assign, nonatomic) CGFloat mj_offsetX; -@property (assign, nonatomic) CGFloat mj_offsetY; - -@property (assign, nonatomic) CGFloat mj_contentW; -@property (assign, nonatomic) CGFloat mj_contentH; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/MJRefresh/MJRefresh/UIScrollView+MJExtension.m b/Pods/MJRefresh/MJRefresh/UIScrollView+MJExtension.m deleted file mode 100644 index 1c43721..0000000 --- a/Pods/MJRefresh/MJRefresh/UIScrollView+MJExtension.m +++ /dev/null @@ -1,153 +0,0 @@ -// 代码地址: https://github.com/CoderMJLee/MJRefresh -// UIScrollView+Extension.m -// MJRefresh -// -// Created by MJ Lee on 14-5-28. -// Copyright (c) 2014年 小码哥. All rights reserved. -// - -#import "UIScrollView+MJExtension.h" -#import - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunguarded-availability-new" - -@implementation UIScrollView (MJExtension) - -static BOOL respondsToAdjustedContentInset_; - -+ (void)load -{ - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - respondsToAdjustedContentInset_ = [self instancesRespondToSelector:@selector(adjustedContentInset)]; - }); -} - -- (UIEdgeInsets)mj_inset -{ -#ifdef __IPHONE_11_0 - if (respondsToAdjustedContentInset_) { - return self.adjustedContentInset; - } -#endif - return self.contentInset; -} - -- (void)setMj_insetT:(CGFloat)mj_insetT -{ - UIEdgeInsets inset = self.contentInset; - inset.top = mj_insetT; -#ifdef __IPHONE_11_0 - if (respondsToAdjustedContentInset_) { - inset.top -= (self.adjustedContentInset.top - self.contentInset.top); - } -#endif - self.contentInset = inset; -} - -- (CGFloat)mj_insetT -{ - return self.mj_inset.top; -} - -- (void)setMj_insetB:(CGFloat)mj_insetB -{ - UIEdgeInsets inset = self.contentInset; - inset.bottom = mj_insetB; -#ifdef __IPHONE_11_0 - if (respondsToAdjustedContentInset_) { - inset.bottom -= (self.adjustedContentInset.bottom - self.contentInset.bottom); - } -#endif - self.contentInset = inset; -} - -- (CGFloat)mj_insetB -{ - return self.mj_inset.bottom; -} - -- (void)setMj_insetL:(CGFloat)mj_insetL -{ - UIEdgeInsets inset = self.contentInset; - inset.left = mj_insetL; -#ifdef __IPHONE_11_0 - if (respondsToAdjustedContentInset_) { - inset.left -= (self.adjustedContentInset.left - self.contentInset.left); - } -#endif - self.contentInset = inset; -} - -- (CGFloat)mj_insetL -{ - return self.mj_inset.left; -} - -- (void)setMj_insetR:(CGFloat)mj_insetR -{ - UIEdgeInsets inset = self.contentInset; - inset.right = mj_insetR; -#ifdef __IPHONE_11_0 - if (respondsToAdjustedContentInset_) { - inset.right -= (self.adjustedContentInset.right - self.contentInset.right); - } -#endif - self.contentInset = inset; -} - -- (CGFloat)mj_insetR -{ - return self.mj_inset.right; -} - -- (void)setMj_offsetX:(CGFloat)mj_offsetX -{ - CGPoint offset = self.contentOffset; - offset.x = mj_offsetX; - self.contentOffset = offset; -} - -- (CGFloat)mj_offsetX -{ - return self.contentOffset.x; -} - -- (void)setMj_offsetY:(CGFloat)mj_offsetY -{ - CGPoint offset = self.contentOffset; - offset.y = mj_offsetY; - self.contentOffset = offset; -} - -- (CGFloat)mj_offsetY -{ - return self.contentOffset.y; -} - -- (void)setMj_contentW:(CGFloat)mj_contentW -{ - CGSize size = self.contentSize; - size.width = mj_contentW; - self.contentSize = size; -} - -- (CGFloat)mj_contentW -{ - return self.contentSize.width; -} - -- (void)setMj_contentH:(CGFloat)mj_contentH -{ - CGSize size = self.contentSize; - size.height = mj_contentH; - self.contentSize = size; -} - -- (CGFloat)mj_contentH -{ - return self.contentSize.height; -} -@end -#pragma clang diagnostic pop diff --git a/Pods/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h b/Pods/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h deleted file mode 100644 index 8ce3282..0000000 --- a/Pods/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h +++ /dev/null @@ -1,36 +0,0 @@ -// 代码地址: https://github.com/CoderMJLee/MJRefresh -// UIScrollView+MJRefresh.h -// MJRefresh -// -// Created by MJ Lee on 15/3/4. -// Copyright (c) 2015年 小码哥. All rights reserved. -// 给ScrollView增加下拉刷新、上拉刷新、 左滑刷新的功能 - -#import -#if __has_include() -#import -#else -#import "MJRefreshConst.h" -#endif - -@class MJRefreshHeader, MJRefreshFooter, MJRefreshTrailer; - -NS_ASSUME_NONNULL_BEGIN - -@interface UIScrollView (MJRefresh) -/** 下拉刷新控件 */ -@property (strong, nonatomic, nullable) MJRefreshHeader *mj_header; -@property (strong, nonatomic, nullable) MJRefreshHeader *header MJRefreshDeprecated("使用mj_header"); -/** 上拉刷新控件 */ -@property (strong, nonatomic, nullable) MJRefreshFooter *mj_footer; -@property (strong, nonatomic, nullable) MJRefreshFooter *footer MJRefreshDeprecated("使用mj_footer"); - -/** 左滑刷新控件 */ -@property (strong, nonatomic, nullable) MJRefreshTrailer *mj_trailer; - -#pragma mark - other -- (NSInteger)mj_totalDataCount; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/MJRefresh/MJRefresh/UIScrollView+MJRefresh.m b/Pods/MJRefresh/MJRefresh/UIScrollView+MJRefresh.m deleted file mode 100644 index 3bb85da..0000000 --- a/Pods/MJRefresh/MJRefresh/UIScrollView+MJRefresh.m +++ /dev/null @@ -1,120 +0,0 @@ -// 代码地址: https://github.com/CoderMJLee/MJRefresh -// UIScrollView+MJRefresh.m -// MJRefresh -// -// Created by MJ Lee on 15/3/4. -// Copyright (c) 2015年 小码哥. All rights reserved. -// - -#import "UIScrollView+MJRefresh.h" -#import "MJRefreshHeader.h" -#import "MJRefreshFooter.h" -#import "MJRefreshTrailer.h" -#import - -@implementation UIScrollView (MJRefresh) - -#pragma mark - header -static const char MJRefreshHeaderKey = '\0'; -- (void)setMj_header:(MJRefreshHeader *)mj_header -{ - if (mj_header != self.mj_header) { - // 删除旧的,添加新的 - [self.mj_header removeFromSuperview]; - - if (mj_header) { - [self insertSubview:mj_header atIndex:0]; - } - // 存储新的 - objc_setAssociatedObject(self, &MJRefreshHeaderKey, - mj_header, OBJC_ASSOCIATION_RETAIN); - } -} - -- (MJRefreshHeader *)mj_header -{ - return objc_getAssociatedObject(self, &MJRefreshHeaderKey); -} - -#pragma mark - footer -static const char MJRefreshFooterKey = '\0'; -- (void)setMj_footer:(MJRefreshFooter *)mj_footer -{ - if (mj_footer != self.mj_footer) { - // 删除旧的,添加新的 - [self.mj_footer removeFromSuperview]; - if (mj_footer) { - [self insertSubview:mj_footer atIndex:0]; - } - // 存储新的 - objc_setAssociatedObject(self, &MJRefreshFooterKey, - mj_footer, OBJC_ASSOCIATION_RETAIN); - } -} - -- (MJRefreshFooter *)mj_footer -{ - return objc_getAssociatedObject(self, &MJRefreshFooterKey); -} - -#pragma mark - footer -static const char MJRefreshTrailerKey = '\0'; -- (void)setMj_trailer:(MJRefreshTrailer *)mj_trailer { - if (mj_trailer != self.mj_trailer) { - // 删除旧的,添加新的 - [self.mj_trailer removeFromSuperview]; - if (mj_trailer) { - [self insertSubview:mj_trailer atIndex:0]; - } - // 存储新的 - objc_setAssociatedObject(self, &MJRefreshTrailerKey, - mj_trailer, OBJC_ASSOCIATION_RETAIN); - } -} - -- (MJRefreshTrailer *)mj_trailer { - return objc_getAssociatedObject(self, &MJRefreshTrailerKey); -} - -#pragma mark - 过期 -- (void)setFooter:(MJRefreshFooter *)footer -{ - self.mj_footer = footer; -} - -- (MJRefreshFooter *)footer -{ - return self.mj_footer; -} - -- (void)setHeader:(MJRefreshHeader *)header -{ - self.mj_header = header; -} - -- (MJRefreshHeader *)header -{ - return self.mj_header; -} - -#pragma mark - other -- (NSInteger)mj_totalDataCount -{ - NSInteger totalCount = 0; - if ([self isKindOfClass:[UITableView class]]) { - UITableView *tableView = (UITableView *)self; - - for (NSInteger section = 0; section < tableView.numberOfSections; section++) { - totalCount += [tableView numberOfRowsInSection:section]; - } - } else if ([self isKindOfClass:[UICollectionView class]]) { - UICollectionView *collectionView = (UICollectionView *)self; - - for (NSInteger section = 0; section < collectionView.numberOfSections; section++) { - totalCount += [collectionView numberOfItemsInSection:section]; - } - } - return totalCount; -} - -@end diff --git a/Pods/MJRefresh/MJRefresh/UIView+MJExtension.h b/Pods/MJRefresh/MJRefresh/UIView+MJExtension.h deleted file mode 100644 index 0ac0968..0000000 --- a/Pods/MJRefresh/MJRefresh/UIView+MJExtension.h +++ /dev/null @@ -1,22 +0,0 @@ -// 代码地址: https://github.com/CoderMJLee/MJRefresh -// UIView+Extension.h -// MJRefresh -// -// Created by MJ Lee on 14-5-28. -// Copyright (c) 2014年 小码哥. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UIView (MJExtension) -@property (assign, nonatomic) CGFloat mj_x; -@property (assign, nonatomic) CGFloat mj_y; -@property (assign, nonatomic) CGFloat mj_w; -@property (assign, nonatomic) CGFloat mj_h; -@property (assign, nonatomic) CGSize mj_size; -@property (assign, nonatomic) CGPoint mj_origin; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/MJRefresh/MJRefresh/UIView+MJExtension.m b/Pods/MJRefresh/MJRefresh/UIView+MJExtension.m deleted file mode 100644 index f4dcf44..0000000 --- a/Pods/MJRefresh/MJRefresh/UIView+MJExtension.m +++ /dev/null @@ -1,83 +0,0 @@ -// 代码地址: https://github.com/CoderMJLee/MJRefresh -// UIView+Extension.m -// MJRefresh -// -// Created by MJ Lee on 14-5-28. -// Copyright (c) 2014年 小码哥. All rights reserved. -// - -#import "UIView+MJExtension.h" - -@implementation UIView (MJExtension) -- (void)setMj_x:(CGFloat)mj_x -{ - CGRect frame = self.frame; - frame.origin.x = mj_x; - self.frame = frame; -} - -- (CGFloat)mj_x -{ - return self.frame.origin.x; -} - -- (void)setMj_y:(CGFloat)mj_y -{ - CGRect frame = self.frame; - frame.origin.y = mj_y; - self.frame = frame; -} - -- (CGFloat)mj_y -{ - return self.frame.origin.y; -} - -- (void)setMj_w:(CGFloat)mj_w -{ - CGRect frame = self.frame; - frame.size.width = mj_w; - self.frame = frame; -} - -- (CGFloat)mj_w -{ - return self.frame.size.width; -} - -- (void)setMj_h:(CGFloat)mj_h -{ - CGRect frame = self.frame; - frame.size.height = mj_h; - self.frame = frame; -} - -- (CGFloat)mj_h -{ - return self.frame.size.height; -} - -- (void)setMj_size:(CGSize)mj_size -{ - CGRect frame = self.frame; - frame.size = mj_size; - self.frame = frame; -} - -- (CGSize)mj_size -{ - return self.frame.size; -} - -- (void)setMj_origin:(CGPoint)mj_origin -{ - CGRect frame = self.frame; - frame.origin = mj_origin; - self.frame = frame; -} - -- (CGPoint)mj_origin -{ - return self.frame.origin; -} -@end diff --git a/Pods/MJRefresh/README.md b/Pods/MJRefresh/README.md deleted file mode 100644 index 0746fbe..0000000 --- a/Pods/MJRefresh/README.md +++ /dev/null @@ -1,457 +0,0 @@ -## MJRefresh -[![SPM supported](https://img.shields.io/badge/SPM-supported-4BC51D.svg?style=flat)](https://github.com/apple/swift-package-manager) -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) -[![podversion](https://img.shields.io/cocoapods/v/MJRefresh.svg)](https://cocoapods.org/pods/MJRefresh) - -* An easy way to use pull-to-refresh - -[📜✍🏻**Release Notes**: more details](https://github.com/CoderMJLee/MJRefresh/releases) - -## Contents - -- New Features - - [Dynamic i18n Switching](#dynamic_i18n_switching) - - [SPM Supported](#spm_supported) - - [Swift Chaining Grammar Supported](#swift_chaining_grammar_supported) - -* Getting Started - * [Features【Support what kinds of controls to refresh】](#Support_what_kinds_of_controls_to_refresh) - * [Installation【How to use MJRefresh】](#How_to_use_MJRefresh) - * [Who's using【More than hundreds of Apps are using MJRefresh】](#More_than_hundreds_of_Apps_are_using_MJRefresh) - * [Classes【The Class Structure Chart of MJRefresh】](#The_Class_Structure_Chart_of_MJRefresh) -* Comment API - * [MJRefreshComponent.h](#MJRefreshComponent.h) - * [MJRefreshHeader.h](#MJRefreshHeader.h) - * [MJRefreshFooter.h](#MJRefreshFooter.h) - * [MJRefreshAutoFooter.h](#MJRefreshAutoFooter.h) - * [MJRefreshTrailer.h](#MJRefreshTrailer.h) -* Examples - * [Reference](#Reference) - * [The drop-down refresh 01-Default](#The_drop-down_refresh_01-Default) - * [The drop-down refresh 02-Animation image](#The_drop-down_refresh_02-Animation_image) - * [The drop-down refresh 03-Hide the time](#The_drop-down_refresh_03-Hide_the_time) - * [The drop-down refresh 04-Hide status and time](#The_drop-down_refresh_04-Hide_status_and_time) - * [The drop-down refresh 05-DIY title](#The_drop-down_refresh_05-DIY_title) - * [The drop-down refresh 06-DIY the control of refresh](#The_drop-down_refresh_06-DIY_the_control_of_refresh) - * [The pull to refresh 01-Default](#The_pull_to_refresh_01-Default) - * [The pull to refresh 02-Animation image](#The_pull_to_refresh_02-Animation_image) - * [The pull to refresh 03-Hide the title of refresh status](#The_pull_to_refresh_03-Hide_the_title_of_refresh_status) - * [The pull to refresh 04-All loaded](#The_pull_to_refresh_04-All_loaded) - * [The pull to refresh 05-DIY title](#The_pull_to_refresh_05-DIY_title) - * [The pull to refresh 06-Hidden After loaded](#The_pull_to_refresh_06-Hidden_After_loaded) - * [The pull to refresh 07-Automatic back of the pull01](#The_pull_to_refresh_07-Automatic_back_of_the_pull01) - * [The pull to refresh 08-Automatic back of the pull02](#The_pull_to_refresh_08-Automatic_back_of_the_pull02) - * [The pull to refresh 09-DIY the control of refresh(Automatic refresh)](#The_pull_to_refresh_09-DIY_the_control_of_refresh(Automatic_refresh)) - * [The pull to refresh 10-DIY the control of refresh(Automatic back)](#The_pull_to_refresh_10-DIY_the_control_of_refresh(Automatic_back)) - * [UICollectionView01-The pull and drop-down refresh](#UICollectionView01-The_pull_and_drop-down_refresh) - * [UICollectionView02-The trailer refresh](#UICollectionView02-The_trailer_refresh) - * [WKWebView01-The drop-down refresh](#WKWebView01-The_drop-down_refresh) -* [Hope](#Hope) - -## New Features -### Dynamic i18n Switching - -Now `MJRefresh components` will be rerendered automatically with `MJRefreshConfig.default.language` setting. - -#### Example - -Go `i18n` folder and see lots of cases. Simulator example is behind `i18n tab` in right-top corner. - -#### Setting language - -```swift -MJRefreshConfig.default.language = "zh-hans" -``` - -#### Setting i18n file name - -```swift -MJRefreshConfig.default.i18nFilename = "i18n File Name(not include type<.strings>)" -``` - -#### Setting i18n language bundle - -```swift -MJRefreshConfig.default.i18nBundle = -``` - -#### Adopting the feature in your DIY component - -1. Just override `i18nDidChange` function and reset texts. - -```swift -// must use this localization methods -Bundle.mj_localizedString(forKey: "") -// or -Bundle.mj_localizedString(forKey: "", value:"") - -override func i18nDidChange() { - // Reset texts function - setupTexts() - // Make sure to call super after resetting texts. It will call placeSubViews for applying new layout. - super.i18nDidChange() -} -``` - -2. Receiving `MJRefreshDidChangeLanguageNotification` notification. - -### SPM Supported - -Released from [`3.7.1`](https://github.com/CoderMJLee/MJRefresh/releases/tag/3.7.1) - -### Swift Chaining Grammar Supported - -```swift - // Example as MJRefreshNormalHeader - func addRefreshHeader() { - MJRefreshNormalHeader { [weak self] in - // load some data - }.autoChangeTransparency(true) - .link(to: tableView) - } -``` - -## Support what kinds of controls to refresh - -* `UIScrollView`、`UITableView`、`UICollectionView`、`WKWebView` - -## How to use MJRefresh -* Installation with CocoaPods:`pod 'MJRefresh'` -* Installation with [Carthage](https://github.com/Carthage/Carthage):`github "CoderMJLee/MJRefresh"` -* Manual import: - * Drag All files in the `MJRefresh` folder to project - * Import the main file:`#import "MJRefresh.h"` - -```objc -Base Custom -MJRefresh.bundle MJRefresh.h -MJRefreshConst.h MJRefreshConst.m -UIScrollView+MJExtension.h UIScrollView+MJExtension.m -UIScrollView+MJRefresh.h UIScrollView+MJRefresh.m -UIView+MJExtension.h UIView+MJExtension.m -``` - -## More than hundreds of Apps are using MJRefresh - -* More information of App can focus on:[M了个J-博客园](http://www.cnblogs.com/mjios/p/4409853.html) - -## The Class Structure Chart of MJRefresh -![](http://images0.cnblogs.com/blog2015/497279/201506/132232456139177.png) -- `The class of red text` in the chart:You can use them directly - - The drop-down refresh control types - - Normal:`MJRefreshNormalHeader` - - Gif:`MJRefreshGifHeader` - - The pull to refresh control types - - Auto refresh - - Normal:`MJRefreshAutoNormalFooter` - - Gif:`MJRefreshAutoGifFooter` - - Auto Back - - Normal:`MJRefreshBackNormalFooter` - - Gif:`MJRefreshBackGifFooter` - -- `The class of non-red text` in the chart:For inheritance,to use DIY the control of refresh - -- About how to DIY the control of refresh,You can refer the Class in below Chart
- - - -## MJRefreshComponent.h -```objc -/** The Base Class of refresh control */ -@interface MJRefreshComponent : UIView -#pragma mark - Control the state of Refresh - -/** BeginRefreshing */ -- (void)beginRefreshing; -/** EndRefreshing */ -- (void)endRefreshing; -/** IsRefreshing */ -- (BOOL)isRefreshing; - -#pragma mark - Other -/** According to the drag ratio to change alpha automatically */ -@property (assign, nonatomic, getter=isAutomaticallyChangeAlpha) BOOL automaticallyChangeAlpha; -@end -``` - -## MJRefreshHeader.h -```objc -@interface MJRefreshHeader : MJRefreshComponent -/** Creat header */ -+ (instancetype)headerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock; -/** Creat header */ -+ (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action; - -/** This key is used to storage the time that the last time of drown-down successfully */ -@property (copy, nonatomic) NSString *lastUpdatedTimeKey; -/** The last time of drown-down successfully */ -@property (strong, nonatomic, readonly) NSDate *lastUpdatedTime; - -/** Ignored scrollView contentInset top */ -@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetTop; -@end -``` - -## MJRefreshFooter.h -```objc -@interface MJRefreshFooter : MJRefreshComponent -/** Creat footer */ -+ (instancetype)footerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock; -/** Creat footer */ -+ (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action; - -/** NoticeNoMoreData */ -- (void)noticeNoMoreData; -/** ResetNoMoreData(Clear the status of NoMoreData ) */ -- (void)resetNoMoreData; - -/** Ignored scrollView contentInset bottom */ -@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetBottom; -@end -``` - -## MJRefreshAutoFooter.h -```objc -@interface MJRefreshAutoFooter : MJRefreshFooter -/** Is Automatically Refresh(Default is Yes) */ -@property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh; - -/** When there is much at the bottom of the control is automatically refresh(Default is 1.0,Is at the bottom of the control appears in full, will refresh automatically) */ -@property (assign, nonatomic) CGFloat triggerAutomaticallyRefreshPercent; -@end -``` - -## MJRefreshTrailer.h -```objc -@interface MJRefreshTrailer : MJRefreshComponent - -/** 创建trailer */ -+ (instancetype)trailerWithRefreshingBlock:(MJRefreshComponentAction)refreshingBlock; -/** 创建trailer */ -+ (instancetype)trailerWithRefreshingTarget:(id)target refreshingAction:(SEL)action; - -/** 忽略多少scrollView的contentInset的right */ -@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetRight; - -@end -``` - -## Reference -```objc -* Due to there are more functions of this framework,Don't write specific text describe its usage -* You can directly reference examples MJTableViewController、MJCollectionViewController、MJWebViewController,More intuitive and fast. -``` - - -## The drop-down refresh 01-Default - -```objc -self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ - //Call this Block When enter the refresh status automatically -}]; -或 -// Set the callback(Once you enter the refresh status,then call the action of target,that is call [self loadNewData]) -self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)]; - -// Enter the refresh status immediately -[self.tableView.mj_header beginRefreshing]; -``` -![(下拉刷新01-普通)](http://images0.cnblogs.com/blog2015/497279/201506/141204343486151.gif) - -## The drop-down refresh 02-Animation image -```objc -// Set the callback(一Once you enter the refresh status,then call the action of target,that is call [self loadNewData]) -MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)]; -// Set the ordinary state of animated images -[header setImages:idleImages forState:MJRefreshStateIdle]; -// Set the pulling state of animated images(Enter the status of refreshing as soon as loosen) -[header setImages:pullingImages forState:MJRefreshStatePulling]; -// Set the refreshing state of animated images -[header setImages:refreshingImages forState:MJRefreshStateRefreshing]; -// Set header -self.tableView.mj_header = header; -``` -![(下拉刷新02-动画图片)](http://images0.cnblogs.com/blog2015/497279/201506/141204402238389.gif) - -## The drop-down refresh 03-Hide the time -```objc -// Hide the time -header.lastUpdatedTimeLabel.hidden = YES; -``` -![(下拉刷新03-隐藏时间)](http://images0.cnblogs.com/blog2015/497279/201506/141204456132944.gif) - -## The drop-down refresh 04-Hide status and time -```objc -// Hide the time -header.lastUpdatedTimeLabel.hidden = YES; - -// Hide the status -header.stateLabel.hidden = YES; -``` -![(下拉刷新04-隐藏状态和时间0)](http://images0.cnblogs.com/blog2015/497279/201506/141204508639539.gif) - -## The drop-down refresh 05-DIY title -```objc -// Set title -[header setTitle:@"Pull down to refresh" forState:MJRefreshStateIdle]; -[header setTitle:@"Release to refresh" forState:MJRefreshStatePulling]; -[header setTitle:@"Loading ..." forState:MJRefreshStateRefreshing]; - -// Set font -header.stateLabel.font = [UIFont systemFontOfSize:15]; -header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:14]; - -// Set textColor -header.stateLabel.textColor = [UIColor redColor]; -header.lastUpdatedTimeLabel.textColor = [UIColor blueColor]; -``` -![(下拉刷新05-自定义文字)](http://images0.cnblogs.com/blog2015/497279/201506/141204563633593.gif) - -## The drop-down refresh 06-DIY the control of refresh -```objc -self.tableView.mj_header = [MJDIYHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)]; -// Implementation reference to MJDIYHeader.h和MJDIYHeader.m -``` -![(下拉刷新06-自定义刷新控件)](http://images0.cnblogs.com/blog2015/497279/201506/141205019261159.gif) - -## The pull to refresh 01-Default -```objc -self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{ - //Call this Block When enter the refresh status automatically -}]; -或 -// Set the callback(Once you enter the refresh status,then call the action of target,that is call [self loadMoreData]) -self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)]; -``` -![(上拉刷新01-默认)](http://images0.cnblogs.com/blog2015/497279/201506/141205090047696.gif) - -## The pull to refresh 02-Animation image -```objc -// Set the callback(Once you enter the refresh status,then call the action of target,that is call [self loadMoreData]) -MJRefreshAutoGifFooter *footer = [MJRefreshAutoGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)]; - -// Set the refresh image -[footer setImages:refreshingImages forState:MJRefreshStateRefreshing]; - -// Set footer -self.tableView.mj_footer = footer; -``` -![(上拉刷新02-动画图片)](http://images0.cnblogs.com/blog2015/497279/201506/141205141445793.gif) - -## The pull to refresh 03-Hide the title of refresh status -```objc -// Hide the title of refresh status -footer.refreshingTitleHidden = YES; -// If does have not above method,then use footer.stateLabel.hidden = YES; -``` -![(上拉刷新03-隐藏刷新状态的文字)](http://images0.cnblogs.com/blog2015/497279/201506/141205200985774.gif) - -## The pull to refresh 04-All loaded -```objc -//Become the status of NoMoreData -[footer noticeNoMoreData]; -``` -![(上拉刷新04-全部加载完毕)](http://images0.cnblogs.com/blog2015/497279/201506/141205248634686.gif) - -## The pull to refresh 05-DIY title -```objc -// Set title -[footer setTitle:@"Click or drag up to refresh" forState:MJRefreshStateIdle]; -[footer setTitle:@"Loading more ..." forState:MJRefreshStateRefreshing]; -[footer setTitle:@"No more data" forState:MJRefreshStateNoMoreData]; - -// Set font -footer.stateLabel.font = [UIFont systemFontOfSize:17]; - -// Set textColor -footer.stateLabel.textColor = [UIColor blueColor]; -``` -![(上拉刷新05-自定义文字)](http://images0.cnblogs.com/blog2015/497279/201506/141205295511153.gif) - -## The pull to refresh 06-Hidden After loaded -```objc -//Hidden current control of the pull to refresh -self.tableView.mj_footer.hidden = YES; -``` -![(上拉刷新06-加载后隐藏)](http://images0.cnblogs.com/blog2015/497279/201506/141205343481821.gif) - -## The pull to refresh 07-Automatic back of the pull01 -```objc -self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)]; -``` -![(上拉刷新07-自动回弹的上拉01)](http://images0.cnblogs.com/blog2015/497279/201506/141205392239231.gif) - -## The pull to refresh 08-Automatic back of the pull02 -```objc -MJRefreshBackGifFooter *footer = [MJRefreshBackGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)]; - -// Set the normal state of the animated image -[footer setImages:idleImages forState:MJRefreshStateIdle]; -// Set the pulling state of animated images(Enter the status of refreshing as soon as loosen) -[footer setImages:pullingImages forState:MJRefreshStatePulling]; -// Set the refreshing state of animated images -[footer setImages:refreshingImages forState:MJRefreshStateRefreshing]; - -// Set footer -self.tableView.mj_footer = footer; -``` -![(上拉刷新07-自动回弹的上拉02)](http://images0.cnblogs.com/blog2015/497279/201506/141205441443628.gif) - -## The pull to refresh 09-DIY the control of refresh(Automatic refresh) -```objc -self.tableView.mj_footer = [MJDIYAutoFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)]; -// Implementation reference to MJDIYAutoFooter.h和MJDIYAutoFooter.m -``` -![(上拉刷新09-自定义刷新控件(自动刷新))](http://images0.cnblogs.com/blog2015/497279/201506/141205500195866.gif) - -## The pull to refresh 10-DIY the control of refresh(Automatic back) -```objc -self.tableView.mj_footer = [MJDIYBackFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)]; -// Implementation reference to MJDIYBackFooter.h和MJDIYBackFooter.m -``` -![(上拉刷新10-自定义刷新控件(自动回弹))](http://images0.cnblogs.com/blog2015/497279/201506/141205560666819.gif) - -## UICollectionView01-The pull and drop-down refresh -```objc -// The drop-down refresh -self.collectionView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ - //Call this Block When enter the refresh status automatically -}]; - -// The pull to refresh -self.collectionView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{ - //Call this Block When enter the refresh status automatically -}]; -``` -![(UICollectionView01-上下拉刷新)](http://images0.cnblogs.com/blog2015/497279/201506/141206021603758.gif) - -## UICollectionView02-The trailer refresh -```objc -// The trailer refresh -self.collectionView.mj_trailer = [MJRefreshNormalTrailer trailerWithRefreshingBlock:^{ - //Call this Block When enter the refresh status automatically -}]; - -``` -![(UICollectionView02-左拉刷新)](Gif/trailer_refresh.gif) - -## WKWebView01-The drop-down refresh -```objc -//Add the control of The drop-down refresh -self.webView.scrollView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ - //Call this Block When enter the refresh status automatically -}]; -``` -![(UICollectionView01-上下拉刷新)](http://images0.cnblogs.com/blog2015/497279/201506/141206080514524.gif) - -## Remind -* ARC -* iOS>=9.0 -* iPhone \ iPad screen anyway - -## 寻求志同道合的小伙伴 - -- 因本人工作忙,没有太多时间去维护MJRefresh,在此向广大框架使用者说声:非常抱歉!😞 -- 现寻求志同道合的小伙伴一起维护此框架,有兴趣的小伙伴可以[发邮件](mailto:richermj123go@vip.qq.com)给我,非常感谢😊 -- 如果一切OK,我将开放框架维护权限(github、pod等) -- 目前已经找到3位小伙伴(^-^)V diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock deleted file mode 100644 index d00471e..0000000 --- a/Pods/Manifest.lock +++ /dev/null @@ -1,511 +0,0 @@ -PODS: - - Alamofire (5.8.1) - - AMapFoundation-NO-IDFA (1.8.2) - - AMapLocation-NO-IDFA (2.10.0): - - AMapFoundation-NO-IDFA (>= 1.8.0) - - AMapNavi-NO-IDFA (10.0.800): - - AMapFoundation-NO-IDFA (>= 1.8.2) - - AMapSearch-NO-IDFA (9.7.2): - - AMapFoundation-NO-IDFA (>= 1.8.0) - - AMapTrack-NO-IDFA (1.4.2): - - AMapFoundation-NO-IDFA (>= 1.6.4) - - AMapLocation-NO-IDFA (>= 2.6.7) - - BRPickerView (2.8.0): - - BRPickerView/AddressPickerView (= 2.8.0) - - BRPickerView/Base (= 2.8.0) - - BRPickerView/DatePickerView (= 2.8.0) - - BRPickerView/StringPickerView (= 2.8.0) - - BRPickerView/AddressPickerView (2.8.0): - - BRPickerView/Base - - BRPickerView/Base (2.8.0) - - BRPickerView/DatePickerView (2.8.0): - - BRPickerView/Base - - BRPickerView/StringPickerView (2.8.0): - - BRPickerView/Base - - Bugly (2.5.93) - - DDAudioPlayerKit_Private (0.1.6) - - DDAutoUIKit_Private (0.1.3) - - DDBasicControlsKit_Private (0.3.6): - - DDBasicControlsKit_Private/DDBaseAnimation (= 0.3.6) - - DDBasicControlsKit_Private/DDBaseAttributedString (= 0.3.6) - - DDBasicControlsKit_Private/DDBaseButton (= 0.3.6) - - DDBasicControlsKit_Private/DDBaseCollectionView (= 0.3.6) - - DDBasicControlsKit_Private/DDBaseCollectionViewCell (= 0.3.6) - - DDBasicControlsKit_Private/DDBaseImage (= 0.3.6) - - DDBasicControlsKit_Private/DDBaseImageView (= 0.3.6) - - DDBasicControlsKit_Private/DDBaseLabel (= 0.3.6) - - DDBasicControlsKit_Private/DDBaseModel (= 0.3.6) - - DDBasicControlsKit_Private/DDBaseNavigationController (= 0.3.6) - - DDBasicControlsKit_Private/DDBaseScrollView (= 0.3.6) - - DDBasicControlsKit_Private/DDBaseSwitch (= 0.3.6) - - DDBasicControlsKit_Private/DDBaseTabBarController (= 0.3.6) - - DDBasicControlsKit_Private/DDBaseTableView (= 0.3.6) - - DDBasicControlsKit_Private/DDBaseTableViewCell (= 0.3.6) - - DDBasicControlsKit_Private/DDBaseTextField (= 0.3.6) - - DDBasicControlsKit_Private/DDBaseTextView (= 0.3.6) - - DDBasicControlsKit_Private/DDBaseView (= 0.3.6) - - DDBasicControlsKit_Private/DDBaseViewController (= 0.3.6) - - DDBasicControlsKit_Private/DDBaseViewModel (= 0.3.6) - - DDBasicControlsKit_Private/DDBaseAnimation (0.3.6): - - DDBasicControlsKit_Private/DDBaseAnimation/DDTransitionAnimation (= 0.3.6) - - DDBasicControlsKit_Private/DDBaseAnimation/DDTransitionAnimation (0.3.6) - - DDBasicControlsKit_Private/DDBaseAttributedString (0.3.6): - - "DDCategoryKit_Private/NSAttributedString+DDCategory" - - DDBasicControlsKit_Private/DDBaseButton (0.3.6): - - "DDCategoryKit_Private/UIButton+DDCategory" - - DDBasicControlsKit_Private/DDBaseCollectionView (0.3.6): - - "DDCategoryKit_Private/UICollectionView+DDCategory" - - DDBasicControlsKit_Private/DDBaseCollectionViewCell (0.3.6): - - "DDCategoryKit_Private/UICollectionViewCell+DDCategory" - - DDBasicControlsKit_Private/DDBaseImage (0.3.6): - - "DDCategoryKit_Private/UIImage+DDCategory" - - DDBasicControlsKit_Private/DDBaseImageView (0.3.6): - - "DDCategoryKit_Private/UIImageView+DDCategory" - - DDBasicControlsKit_Private/DDBaseLabel (0.3.6): - - "DDCategoryKit_Private/UILabel+DDCategory" - - DDBasicControlsKit_Private/DDBaseModel (0.3.6) - - DDBasicControlsKit_Private/DDBaseNavigationController (0.3.6): - - DDBasicControlsKit_Private/DDBaseAnimation/DDTransitionAnimation - - "DDCategoryKit_Private/UINavigationController+DDCategory" - - DDBasicControlsKit_Private/DDBaseScrollView (0.3.6): - - "DDCategoryKit_Private/UIScrollView+DDCategory" - - DDBasicControlsKit_Private/DDBaseSwitch (0.3.6): - - "DDCategoryKit_Private/UISwitch+DDCategory" - - DDBasicControlsKit_Private/DDBaseTabBarController (0.3.6) - - DDBasicControlsKit_Private/DDBaseTableView (0.3.6): - - "DDCategoryKit_Private/UITableView+DDCategory" - - DDBasicControlsKit_Private/DDBaseTableViewCell (0.3.6): - - "DDCategoryKit_Private/UITableViewCell+DDCategory" - - DDBasicControlsKit_Private/DDBaseTextField (0.3.6): - - "DDCategoryKit_Private/UITextField+DDCategory" - - DDBasicControlsKit_Private/DDBaseTextView (0.3.6): - - "DDCategoryKit_Private/UITextView+DDCategory" - - DDBasicControlsKit_Private/DDBaseView (0.3.6): - - "DDCategoryKit_Private/UIView+DDCategory" - - DDBasicControlsKit_Private/DDBaseViewController (0.3.6): - - "DDCategoryKit_Private/UIImage+DDCategory" - - "DDCategoryKit_Private/UIViewController+DDCategory" - - DDBasicControlsKit_Private/DDBaseViewModel (0.3.6) - - DDCategoryKit_Private (0.5.4): - - "DDCategoryKit_Private/CALayer+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/NSAttributedString+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/NSBundle+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/NSObject+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/NSThread+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/NSURL+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/UIApplication+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/UIBarButtonItem+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/UIButton+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/UICollectionView+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/UICollectionViewCell+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/UIFont+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/UIImage+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/UIImageView+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/UILabel+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/UINavigationBar+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/UINavigationController+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/UINavigationItem+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/UIScreen+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/UIScrollView+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/UISwitch+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/UITabBarController+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/UITableView+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/UITableViewCell+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/UITextField+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/UITextView+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/UIView+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/UIViewController+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/UIWindow+DDCategory (= 0.5.4)" - - "DDCategoryKit_Private/CALayer+DDCategory (0.5.4)" - - "DDCategoryKit_Private/NSAttributedString+DDCategory (0.5.4)" - - "DDCategoryKit_Private/NSBundle+DDCategory (0.5.4)" - - "DDCategoryKit_Private/NSObject+DDCategory (0.5.4)" - - "DDCategoryKit_Private/NSThread+DDCategory (0.5.4)" - - "DDCategoryKit_Private/NSURL+DDCategory (0.5.4)" - - "DDCategoryKit_Private/UIApplication+DDCategory (0.5.4)" - - "DDCategoryKit_Private/UIBarButtonItem+DDCategory (0.5.4)" - - "DDCategoryKit_Private/UIButton+DDCategory (0.5.4)": - - "DDCategoryKit_Private/NSObject+DDCategory" - - "DDCategoryKit_Private/UICollectionView+DDCategory (0.5.4)" - - "DDCategoryKit_Private/UICollectionViewCell+DDCategory (0.5.4)" - - "DDCategoryKit_Private/UIFont+DDCategory (0.5.4)" - - "DDCategoryKit_Private/UIImage+DDCategory (0.5.4)" - - "DDCategoryKit_Private/UIImageView+DDCategory (0.5.4)" - - "DDCategoryKit_Private/UILabel+DDCategory (0.5.4)" - - "DDCategoryKit_Private/UINavigationBar+DDCategory (0.5.4)": - - "DDCategoryKit_Private/NSObject+DDCategory" - - "DDCategoryKit_Private/UIViewController+DDCategory" - - "DDCategoryKit_Private/UINavigationController+DDCategory (0.5.4)": - - "DDCategoryKit_Private/NSObject+DDCategory" - - "DDCategoryKit_Private/UINavigationItem+DDCategory (0.5.4)": - - "DDCategoryKit_Private/NSObject+DDCategory" - - "DDCategoryKit_Private/UIViewController+DDCategory" - - "DDCategoryKit_Private/UIScreen+DDCategory (0.5.4)" - - "DDCategoryKit_Private/UIScrollView+DDCategory (0.5.4)" - - "DDCategoryKit_Private/UISwitch+DDCategory (0.5.4)" - - "DDCategoryKit_Private/UITabBarController+DDCategory (0.5.4)": - - "DDCategoryKit_Private/NSObject+DDCategory" - - "DDCategoryKit_Private/UITableView+DDCategory (0.5.4)" - - "DDCategoryKit_Private/UITableViewCell+DDCategory (0.5.4)" - - "DDCategoryKit_Private/UITextField+DDCategory (0.5.4)" - - "DDCategoryKit_Private/UITextView+DDCategory (0.5.4)" - - "DDCategoryKit_Private/UIView+DDCategory (0.5.4)" - - "DDCategoryKit_Private/UIViewController+DDCategory (0.5.4)": - - "DDCategoryKit_Private/NSObject+DDCategory" - - "DDCategoryKit_Private/UIWindow+DDCategory (0.5.4)" - - DDColorKit_Private (0.1.0) - - DDControlsKit_Private (0.1.4): - - DDControlsKit_Private/DDAttributedString (= 0.1.4) - - DDControlsKit_Private/DDButton (= 0.1.4) - - DDControlsKit_Private/DDCollectionView (= 0.1.4) - - DDControlsKit_Private/DDCollectionViewCell (= 0.1.4) - - DDControlsKit_Private/DDImage (= 0.1.4) - - DDControlsKit_Private/DDImageView (= 0.1.4) - - DDControlsKit_Private/DDLabel (= 0.1.4) - - DDControlsKit_Private/DDNavigationController (= 0.1.4) - - DDControlsKit_Private/DDScrollView (= 0.1.4) - - DDControlsKit_Private/DDSwitch (= 0.1.4) - - DDControlsKit_Private/DDTableView (= 0.1.4) - - DDControlsKit_Private/DDTableViewCell (= 0.1.4) - - DDControlsKit_Private/DDTextField (= 0.1.4) - - DDControlsKit_Private/DDTextView (= 0.1.4) - - DDControlsKit_Private/DDView (= 0.1.4) - - DDControlsKit_Private/DDViewController (= 0.1.4) - - DDControlsKit_Private/DDAttributedString (0.1.4): - - DDBasicControlsKit_Private/DDBaseAttributedString - - DDControlsKit_Private/DDButton (0.1.4): - - DDBasicControlsKit_Private/DDBaseButton - - DDControlsKit_Private/DDCollectionView (0.1.4): - - DDBasicControlsKit_Private/DDBaseCollectionView - - DDControlsKit_Private/DDCollectionViewCell (0.1.4): - - DDBasicControlsKit_Private/DDBaseCollectionViewCell - - DDControlsKit_Private/DDImage (0.1.4): - - DDBasicControlsKit_Private/DDBaseImage - - DDControlsKit_Private/DDImageView (0.1.4): - - DDBasicControlsKit_Private/DDBaseImageView - - DDControlsKit_Private/DDLabel (0.1.4): - - DDBasicControlsKit_Private/DDBaseLabel - - DDControlsKit_Private/DDNavigationController (0.1.4): - - DDBasicControlsKit_Private/DDBaseNavigationController - - DDControlsKit_Private/DDScrollView (0.1.4): - - DDBasicControlsKit_Private/DDBaseScrollView - - DDControlsKit_Private/DDSwitch (0.1.4): - - DDBasicControlsKit_Private/DDBaseSwitch - - DDControlsKit_Private/DDTableView (0.1.4): - - DDBasicControlsKit_Private/DDBaseTableView - - DDControlsKit_Private/DDTableViewCell (0.1.4): - - DDBasicControlsKit_Private/DDBaseTableViewCell - - DDControlsKit_Private/DDTextField (0.1.4): - - DDBasicControlsKit_Private/DDBaseTextField - - DDControlsKit_Private/DDTextView (0.1.4): - - DDBasicControlsKit_Private/DDBaseTextView - - DDControlsKit_Private/DDView (0.1.4): - - DDBasicControlsKit_Private/DDBaseView - - DDControlsKit_Private/DDViewController (0.1.4): - - DDBasicControlsKit_Private/DDBaseViewController - - DDDateKit_Private (0.1.1) - - DDFontKit_Private (0.1.0) - - DDLogKit_Private (0.1.4): - - DDLogKit_Private/OCLog (= 0.1.4) - - DDLogKit_Private/SwiftLog (= 0.1.4) - - DDLogKit_Private/OCLog (0.1.4) - - DDLogKit_Private/SwiftLog (0.1.4) - - DDMAMapKit_Private (0.2.7): - - DDMAMapKit_Private/DDMALocation (= 0.2.7) - - DDMAMapKit_Private/DDMAMap (= 0.2.7) - - DDMAMapKit_Private/DDMANaviManager (= 0.2.7) - - DDMAMapKit_Private/DDMASearch (= 0.2.7) - - DDMAMapKit_Private/DDMATrackManager (= 0.2.7) - - DDMAMapKit_Private/DDMAUtil (= 0.2.7) - - DDMAMapKit_Private/DDMALocation (0.2.7): - - AMapLocation-NO-IDFA (= 2.10.0) - - DDMAMapKit_Private/DDMAMap (0.2.7): - - DDMAMapKit_Private/DDMAMap/Annotation (= 0.2.7) - - DDMAMapKit_Private/DDMAMap/AnnotationView (= 0.2.7) - - DDMAMapKit_Private/DDMAMap/MapView (= 0.2.7) - - DDMAMapKit_Private/DDMAMap/Overlay (= 0.2.7) - - DDMAMapKit_Private/DDMAMap/Sources (= 0.2.7) - - DDMAMapKit_Private/DDMAMap/Trace (= 0.2.7) - - DDMAMapKit_Private/DDMANaviManager - - DDMAMapKit_Private/DDMAMap/Annotation (0.2.7): - - DDMAMapKit_Private/DDMANaviManager - - DDMAMapKit_Private/DDMAMap/AnnotationView (0.2.7): - - DDMAMapKit_Private/DDMANaviManager - - DDMAMapKit_Private/DDMAMap/MapView (0.2.7): - - DDMAMapKit_Private/DDMAMap/Annotation - - DDMAMapKit_Private/DDMAMap/AnnotationView - - DDMAMapKit_Private/DDMAMap/Overlay - - DDMAMapKit_Private/DDMAMap/Sources - - DDMAMapKit_Private/DDMAMap/Trace - - DDMAMapKit_Private/DDMANaviManager - - DDMAMapKit_Private/DDMAMap/Overlay (0.2.7): - - DDMAMapKit_Private/DDMANaviManager - - DDMAMapKit_Private/DDMAMap/Sources (0.2.7): - - DDMAMapKit_Private/DDMANaviManager - - DDMAMapKit_Private/DDMAMap/Trace (0.2.7): - - DDMAMapKit_Private/DDMANaviManager - - DDMAMapKit_Private/DDMANaviManager (0.2.7): - - AMapFoundation-NO-IDFA (= 1.8.2) - - AMapNavi-NO-IDFA (= 10.0.800) - - DDMAMapKit_Private/DDMASearch (0.2.7): - - AMapSearch-NO-IDFA (= 9.7.2) - - DDMAMapKit_Private/DDMATrackManager (0.2.7): - - AMapTrack-NO-IDFA (= 1.4.2) - - DDMAMapKit_Private/DDMAUtil (0.2.7): - - DDMAMapKit_Private/DDMAMap - - DDNetworkingOfAlamofireKit_Private (0.2.1): - - Alamofire - - DDLogKit_Private - - RxSwift - - DDPersistenceKit_Private (0.1.0) - - DDProgressHUDKit_Private (0.1.2): - - "DDCategoryKit_Private/UIImage+DDCategory" - - Kingfisher - - SnapKit - - DDToastKit_Private (0.1.2) - - DDUIGestureRecognizer (0.1.6): - - DDUIGestureRecognizer/DDUIPanGestureRecognizer (= 0.1.6) - - DDUIGestureRecognizer/DDUIPanGestureRecognizer (0.1.6) - - DDUIKit (0.1.5): - - DDUIKit/UIApplication (= 0.1.5) - - DDUIKit/UIButton (= 0.1.5) - - DDUIKit/UICollectionView (= 0.1.5) - - DDUIKit/UICollectionViewCell (= 0.1.5) - - DDUIKit/UIColor (= 0.1.5) - - DDUIKit/UIFont (= 0.1.5) - - DDUIKit/UIGestureRecognizer (= 0.1.5) - - DDUIKit/UIImage (= 0.1.5) - - DDUIKit/UIImageView (= 0.1.5) - - DDUIKit/UILabel (= 0.1.5) - - DDUIKit/UINavigationBar (= 0.1.5) - - DDUIKit/UINavigationController (= 0.1.5) - - DDUIKit/UIResponder (= 0.1.5) - - DDUIKit/UIScrollView (= 0.1.5) - - DDUIKit/UISwitch (= 0.1.5) - - DDUIKit/UITableBarController (= 0.1.5) - - DDUIKit/UITableView (= 0.1.5) - - DDUIKit/UITableViewCell (= 0.1.5) - - DDUIKit/UITextField (= 0.1.5) - - DDUIKit/UITextView (= 0.1.5) - - DDUIKit/UIView (= 0.1.5) - - DDUIKit/UIViewController (= 0.1.5) - - DDUIKit/UIViewControllerAnimatedTransitioning (= 0.1.5) - - DDUIKit/UIApplication (0.1.5) - - DDUIKit/UIButton (0.1.5): - - DDUIKit/UIResponder - - DDUIKit/UICollectionView (0.1.5) - - DDUIKit/UICollectionViewCell (0.1.5) - - DDUIKit/UIColor (0.1.5) - - DDUIKit/UIFont (0.1.5) - - DDUIKit/UIGestureRecognizer (0.1.5) - - DDUIKit/UIImage (0.1.5) - - DDUIKit/UIImageView (0.1.5) - - DDUIKit/UILabel (0.1.5) - - DDUIKit/UINavigationBar (0.1.5): - - DDUIKit/UIResponder - - DDUIKit/UIViewController - - DDUIKit/UINavigationController (0.1.5): - - DDUIKit/UIResponder - - DDUIKit/UIViewControllerAnimatedTransitioning - - DDUIKit/UIResponder (0.1.5) - - DDUIKit/UIScrollView (0.1.5) - - DDUIKit/UISwitch (0.1.5) - - DDUIKit/UITableBarController (0.1.5) - - DDUIKit/UITableView (0.1.5) - - DDUIKit/UITableViewCell (0.1.5) - - DDUIKit/UITextField (0.1.5) - - DDUIKit/UITextView (0.1.5) - - DDUIKit/UIView (0.1.5) - - DDUIKit/UIViewController (0.1.5): - - DDUIKit/UIResponder - - DDUIKit/UIViewControllerAnimatedTransitioning (0.1.5) - - DDUtilsSwiftKit_Private (0.1.1): - - DDUtilsSwiftKit_Private/ApplicationInfo (= 0.1.1) - - DDUtilsSwiftKit_Private/DeviceInfo (= 0.1.1) - - DDUtilsSwiftKit_Private/FileManager (= 0.1.1) - - DDUtilsSwiftKit_Private/UrlLinks (= 0.1.1) - - DDUtilsSwiftKit_Private/ApplicationInfo (0.1.1) - - DDUtilsSwiftKit_Private/DeviceInfo (0.1.1) - - DDUtilsSwiftKit_Private/FileManager (0.1.1) - - DDUtilsSwiftKit_Private/UrlLinks (0.1.1) - - DDWebImageKit_Private (0.1.3): - - DDWebImageKit_Private/DDWebImage (= 0.1.3) - - DDWebImageKit_Private/SDWebImage (= 0.1.3) - - DDWebImageKit_Private/DDWebImage (0.1.3): - - DDWebImageKit_Private/SDWebImage/Core - - DDWebImageKit_Private/SDWebImage (0.1.3): - - DDWebImageKit_Private/SDWebImage/Core (= 0.1.3) - - DDWebImageKit_Private/SDWebImage/MapKit (= 0.1.3) - - DDWebImageKit_Private/SDWebImage/Core (0.1.3) - - DDWebImageKit_Private/SDWebImage/MapKit (0.1.3): - - DDWebImageKit_Private/SDWebImage/Core - - DDZFPlayerKit_Private/ControlView (0.1.1): - - DDZFPlayerKit_Private/Core - - DDZFPlayerKit_Private/Core (0.1.1) - - DDZFPlayerKit_Private/ijkplayer (0.1.1): - - DDZFPlayerKit_Private/Core - - DynamicBlurView (4.1.0) - - ESTabBarController-swift (2.8.0) - - IQKeyboardManagerSwift (6.5.12) - - JCore (4.2.1) - - JPush (5.0.1): - - JCore (>= 2.0.0) - - JPushExtension (2.0.1) - - JXCategoryView (1.6.1) - - Kingfisher (7.9.0) - - MJRefresh (3.7.5) - - PopupDialog (1.1.1): - - DynamicBlurView (~> 4.0) - - RxCocoa (6.5.0): - - RxRelay (= 6.5.0) - - RxSwift (= 6.5.0) - - RxRelay (6.5.0): - - RxSwift (= 6.5.0) - - RxSwift (6.5.0) - - SnapKit (5.6.0) - - SwiftEntryKit (2.0.0) - - SwiftyRSA (1.7.0): - - SwiftyRSA/ObjC (= 1.7.0) - - SwiftyRSA/ObjC (1.7.0) - - TYCyclePagerView (1.2.0) - - ZLPhotoBrowser (4.4.3.2): - - ZLPhotoBrowser/Core (= 4.4.3.2) - - ZLPhotoBrowser/Core (4.4.3.2) - -DEPENDENCIES: - - BRPickerView - - Bugly - - DDAudioPlayerKit_Private - - DDAutoUIKit_Private - - DDBasicControlsKit_Private (= 0.3.6) - - DDCategoryKit_Private - - DDColorKit_Private - - DDControlsKit_Private (= 0.1.4) - - DDDateKit_Private - - DDFontKit_Private - - DDMAMapKit_Private - - DDNetworkingOfAlamofireKit_Private - - DDPersistenceKit_Private - - DDProgressHUDKit_Private - - DDToastKit_Private - - DDUIGestureRecognizer (= 0.1.6) - - DDUIKit - - DDUtilsSwiftKit_Private - - DDWebImageKit_Private - - DDZFPlayerKit_Private/ControlView - - DDZFPlayerKit_Private/ijkplayer - - ESTabBarController-swift - - IQKeyboardManagerSwift - - JPush - - JPushExtension - - JXCategoryView - - MJRefresh - - PopupDialog (= 1.1.1) - - RxCocoa - - RxRelay - - RxSwift - - SnapKit - - SwiftEntryKit - - SwiftyRSA - - TYCyclePagerView - - ZLPhotoBrowser - -SPEC REPOS: - "git@github.com:DDIsFriend/DDSpecs.git": - - DDAudioPlayerKit_Private - - DDAutoUIKit_Private - - DDBasicControlsKit_Private - - DDCategoryKit_Private - - DDColorKit_Private - - DDControlsKit_Private - - DDDateKit_Private - - DDFontKit_Private - - DDLogKit_Private - - DDMAMapKit_Private - - DDNetworkingOfAlamofireKit_Private - - DDPersistenceKit_Private - - DDProgressHUDKit_Private - - DDToastKit_Private - - DDUIGestureRecognizer - - DDUIKit - - DDUtilsSwiftKit_Private - - DDWebImageKit_Private - - DDZFPlayerKit_Private - https://github.com/CocoaPods/Specs.git: - - Alamofire - - AMapFoundation-NO-IDFA - - AMapLocation-NO-IDFA - - AMapNavi-NO-IDFA - - AMapSearch-NO-IDFA - - AMapTrack-NO-IDFA - - BRPickerView - - Bugly - - DynamicBlurView - - ESTabBarController-swift - - IQKeyboardManagerSwift - - JCore - - JPush - - JPushExtension - - JXCategoryView - - Kingfisher - - MJRefresh - - PopupDialog - - RxCocoa - - RxRelay - - RxSwift - - SnapKit - - SwiftEntryKit - - SwiftyRSA - - TYCyclePagerView - - ZLPhotoBrowser - -SPEC CHECKSUMS: - Alamofire: 3ca42e259043ee0dc5c0cdd76c4bc568b8e42af7 - AMapFoundation-NO-IDFA: 6ce0ef596d4eb8d934ff498e56747b6de1247b05 - AMapLocation-NO-IDFA: 735791aeb1ba52dff666e4158b86caf4b68b5be7 - AMapNavi-NO-IDFA: 11afbfa606171e804f0b98c358a44413d5c0ce1b - AMapSearch-NO-IDFA: bb8c40ee370efdc2e55a83d4a334e6428f26b8a7 - AMapTrack-NO-IDFA: 7109cf1867f5d6c407c8191492b1f73101e1682e - BRPickerView: a0ff460bf092bc069db5a54153395b1f7e8f5300 - Bugly: b8715e6ec4004b7f7fbffab0643ba80545aee3da - DDAudioPlayerKit_Private: dbedcd465a0087d484309297e4dbcb91fc619eaf - DDAutoUIKit_Private: 188066b4d13c8096676ddd9efa15974238f6dca3 - DDBasicControlsKit_Private: 678a10e7b548e4ecb58e4e7720345320a3c8723f - DDCategoryKit_Private: 19d515c43d5e9c4ee80b8ccf3fb8ab40368b8668 - DDColorKit_Private: 77fddb62410a2d5e6fb003083d233c0d7ea0a08f - DDControlsKit_Private: 7336c3bb7dc0475e2c91931dd55b9d69e7e4f6ed - DDDateKit_Private: f8348d10cec77ccacd2f5ec27d587ea2898ae90a - DDFontKit_Private: 7b8f4ebf0f60622874036202734d8460dc7b3806 - DDLogKit_Private: 1ed442cc7be004bd05f27bfda9b525e113df54e0 - DDMAMapKit_Private: 5169a662319b4e1e8a2068d35c5f1d1b127fae3d - DDNetworkingOfAlamofireKit_Private: 652eb70a7d8bac81d77d036fabeb52f807120f6d - DDPersistenceKit_Private: c150822543ffa6ece3900178629812f64902ed90 - DDProgressHUDKit_Private: 1e219062ddeb7801a4bb13b367efa1f3fbf17f1e - DDToastKit_Private: b6ae3709d110cadca503a037419f3709d1755256 - DDUIGestureRecognizer: b7503ff61b471a7e394397a415a297b234929f71 - DDUIKit: 01c23eb83e95a6c918459a692d7466a6f1b699f4 - DDUtilsSwiftKit_Private: 03575cb3204cd43f3521049263f4b6cae3e64700 - DDWebImageKit_Private: b905111547e44626773b729bae9030403a9a0c76 - DDZFPlayerKit_Private: 5f63a8101e35ffd7b2568f551cbf33b8bedc48ba - DynamicBlurView: 58e18fae80bb614e34681a4486870e7d257b62e8 - ESTabBarController-swift: 05593a6ad64700b03c0eb60ff625916370aa4136 - IQKeyboardManagerSwift: 371b08cb39664fb56030f5345c815a4ffc74bbc0 - JCore: d994e32edb50add8a33135473acca799d882c5fa - JPush: bf8d6011eb80c776aa40a0c4f5c25fd10335af9c - JPushExtension: d9058b9bd3ef3ccc8f49edea0647595055f6a3c6 - JXCategoryView: 7b1ee69ede4843c581688afe84d0f047723262f2 - Kingfisher: 59f908b6d2f403b0a3e539debb0eec05cb27002c - MJRefresh: fdf5e979eb406a0341468932d1dfc8b7f9fce961 - PopupDialog: 720c92befd8bc23c13442254945213db5612f149 - RxCocoa: 94f817b71c07517321eb4f9ad299112ca8af743b - RxRelay: 1de1523e604c72b6c68feadedd1af3b1b4d0ecbd - RxSwift: 5710a9e6b17f3c3d6e40d6e559b9fa1e813b2ef8 - SnapKit: e01d52ebb8ddbc333eefe2132acf85c8227d9c25 - SwiftEntryKit: 61b5fa36f34a97dd8013e48a7345bc4c4720be9a - SwiftyRSA: 8c6dd1ea7db1b8dc4fb517a202f88bb1354bc2c6 - TYCyclePagerView: 2b051dade0615c70784aa34f40c646feeddb7344 - ZLPhotoBrowser: 0563c2bfc7b247b65d023d646012f46cba94101b - -PODFILE CHECKSUM: 3938d77c229def70dae943fe9feb2acf97f7a699 - -COCOAPODS: 1.15.2 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj deleted file mode 100644 index 36161ed..0000000 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ /dev/null @@ -1,15674 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 56; - objects = { - -/* Begin PBXAggregateTarget section */ - 2160840D78FCB958CABE1B88300E38C5 /* AMapTrack-NO-IDFA */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 32AC8C76A1CE8899EE309D593325A136 /* Build configuration list for PBXAggregateTarget "AMapTrack-NO-IDFA" */; - buildPhases = ( - ); - dependencies = ( - BE94734D0D90B097F7F83A5F1C8A541B /* PBXTargetDependency */, - 7A2E58EE5C4266C53891B75FA7787370 /* PBXTargetDependency */, - ); - name = "AMapTrack-NO-IDFA"; - }; - 4A68CFD979D413A619DF631BB121D98F /* Bugly */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 05B7CC068076863F33103323458DA634 /* Build configuration list for PBXAggregateTarget "Bugly" */; - buildPhases = ( - ); - dependencies = ( - ); - name = Bugly; - }; - 4BD4E22D3419D68A85BDD6119CB37C6C /* AMapLocation-NO-IDFA */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 42EC8F64C3654164552B3366BF3A3C6D /* Build configuration list for PBXAggregateTarget "AMapLocation-NO-IDFA" */; - buildPhases = ( - ); - dependencies = ( - 6E979D36038A6391DD587A1FDC29677E /* PBXTargetDependency */, - ); - name = "AMapLocation-NO-IDFA"; - }; - 4F1379598302C9160590B3650C10E1A5 /* AMapSearch-NO-IDFA */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 9548A22CCE439C8FB7025321E7EBC912 /* Build configuration list for PBXAggregateTarget "AMapSearch-NO-IDFA" */; - buildPhases = ( - ); - dependencies = ( - 3BA28A5F4E3FBC505F06C745E714AD41 /* PBXTargetDependency */, - ); - name = "AMapSearch-NO-IDFA"; - }; - 5FB6AB0A09E7A2F2BE11AD6BAEFD9AED /* JPush */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 42640293F3A3C60B57F8E8CB6A88B983 /* Build configuration list for PBXAggregateTarget "JPush" */; - buildPhases = ( - 329295F5A096E0819713CBB5799FA87B /* [CP] Copy XCFrameworks */, - ); - dependencies = ( - 556A389E0764D06E42D554E5A9BAC3CC /* PBXTargetDependency */, - ); - name = JPush; - }; - 609276B985CD7549B9F1DEE4969208FF /* JPushExtension */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 9112C4B5379A7A93828F210A5BCC34CC /* Build configuration list for PBXAggregateTarget "JPushExtension" */; - buildPhases = ( - BB7DC1876AF8A5A922FEE0061999D0AE /* [CP] Copy XCFrameworks */, - ); - dependencies = ( - ); - name = JPushExtension; - }; - 9B182CB4E1716E9070813D3C59736001 /* AMapFoundation-NO-IDFA */ = { - isa = PBXAggregateTarget; - buildConfigurationList = D88767459E8E16207822B6DEB496E73F /* Build configuration list for PBXAggregateTarget "AMapFoundation-NO-IDFA" */; - buildPhases = ( - ); - dependencies = ( - ); - name = "AMapFoundation-NO-IDFA"; - }; - D504B99928659EA67A1C3A9E981EB8FF /* JCore */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 2502DBFD94504E58AACFE09B0E8730C7 /* Build configuration list for PBXAggregateTarget "JCore" */; - buildPhases = ( - 9B1DCA94E2E74FDB6B8B2AF3004CC4BD /* [CP] Copy XCFrameworks */, - ); - dependencies = ( - ); - name = JCore; - }; - E94C558142469C11984D67CA883BAB1F /* AMapNavi-NO-IDFA */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 25CFE62468C25C17F232DB520C79BE68 /* Build configuration list for PBXAggregateTarget "AMapNavi-NO-IDFA" */; - buildPhases = ( - ); - dependencies = ( - C90D11EDFC42C3249105A58D22042597 /* PBXTargetDependency */, - ); - name = "AMapNavi-NO-IDFA"; - }; -/* End PBXAggregateTarget section */ - -/* Begin PBXBuildFile section */ - 00149C338A154F7A90372D9D111E890D /* UIScrollView+ZFPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 058DDB67AFB24A6BA613442B24669C5F /* UIScrollView+ZFPlayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 011A1EBE3B8FEAEC24BA46DA5217CA60 /* DDBaseButton.h in Headers */ = {isa = PBXBuildFile; fileRef = E5F691EEF4FDA09A3911F13E8A0BC1C6 /* DDBaseButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 012C3348FDB9BD307BC866EC0B5D23A3 /* SDImageCacheDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ABAA3E262A876DF8D6CF9B8AAB8DD84 /* SDImageCacheDefine.m */; }; - 012F8E75319C189D770D47D637B60E37 /* RxRelay-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0021B2B09CD8A999B6DCD111BA5AEF9E /* RxRelay-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 01A764D927F92014C4738A9914A00398 /* NSMutableParagraphStyle+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = FE678389DCD102CF8E9F47C4B8441257 /* NSMutableParagraphStyle+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 01B4678C48C79FE296E8D02086F945DF /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A856362BC2958F1E938FC76343C3C31D /* ConstraintMakerRelatable.swift */; }; - 01B815BD97E0BA94CF89C42FE41254A8 /* UIView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E1D1D28D7494F778CC60C149BC7097CE /* UIView+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 01C132EB3605024492C96C11F1094D0B /* InfiniteSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 195D2751CB51366D09A9B380BD68A086 /* InfiniteSequence.swift */; }; - 01D8AE321F1FA71F2D43127EAC90559D /* NSButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 498C4A8B3FD5447D5B6B910AF03FC6CE /* NSButton+WebCache.m */; }; - 020E854D5611C1FD2A92FD76E7B50E1D /* DDUITextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F808EF213CE7316979D69C89CFB2C8F4 /* DDUITextView.swift */; }; - 022BACAB001EA60E05F59D7F57C307F8 /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = A73B56EBEAC18C110C7A0BF41780D315 /* ConstraintRelation.swift */; }; - 02780D132E8AA44865FEF53E4D5155E6 /* MJRefreshNormalHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 90FE53E3607594EF3E86C0FE5911DD32 /* MJRefreshNormalHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 028BC2C9CCEA9FE2D0942F51E275731C /* UIBarButtonItem+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 68F87BA0B7815B60BDC685846135F390 /* UIBarButtonItem+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 02C5131798FF28B7D851F0DB13D67C00 /* UISlider+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 423F869E2B6E4696CC5C29A2BBDE7957 /* UISlider+Rx.swift */; }; - 02C89181C2C2F2F794BB150CA1DE59C5 /* WKInterfaceImage+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5500002793689198A0DFD0853D396DDA /* WKInterfaceImage+Kingfisher.swift */; }; - 02D531FA1E9A19A134ED8BD68C5E04C0 /* JXCategoryBaseCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 37EEBD41FC55A11C4AFAFCE2EFDA03E5 /* JXCategoryBaseCell.m */; }; - 02EDCC0E7DA24D63CD39E7D6326F5A56 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A78FC9AD8169AAD147465A241356279 /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0310232331D116E4E50D233928126D66 /* Observable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3B2233311370F500690044FC799B0D9 /* Observable.swift */; }; - 0319C6AB030514ABA3FDD2A242BD48E8 /* TransitionAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02922EBA62B995A2D40B08FE21B102BE /* TransitionAnimator.swift */; }; - 0325FC0D4CE47D33E675D5F9546D482C /* BRStringPickerView.h in Headers */ = {isa = PBXBuildFile; fileRef = C01E8850DEB7E48F4ED5BFAC3EEA97CD /* BRStringPickerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0328E2D27FBE6EE399FC37D913E2290F /* EKRatingMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = B12AA9D5A20BE900E2D18AB09D1B8E06 /* EKRatingMessage.swift */; }; - 037FD9140CC8FF08C2AE16915A81C7D8 /* SkipWhile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CA7AAB23E0EA60B213EB7E208530CE8 /* SkipWhile.swift */; }; - 03C49F5C79286BB52FA09BB9556BA0D0 /* SerialDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87D76BBB25FCCE3F47116A0CC60ED74A /* SerialDisposable.swift */; }; - 03FC127625970082E238B6996698846C /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 473A354F5BA4D935C037F5476DE7D75C /* Result.swift */; }; - 04131C0EECA33AD45AD1E07CF500E344 /* RTLManager.h in Headers */ = {isa = PBXBuildFile; fileRef = B45C7013FF09A7CA3B9F2D0C54DB8245 /* RTLManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0425126815863F5750612619CD1E32E9 /* CombineLatest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13FF1A8278613850FF62B0D49645157C /* CombineLatest.swift */; }; - 044C9F746F7E39BA1B482B553386CA48 /* UIImage+Metadata.h in Headers */ = {isa = PBXBuildFile; fileRef = D230AE2AB8C8AAA0420E8B652CCE29D2 /* UIImage+Metadata.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0451FF01902971B742037EC3A8954BD6 /* CallbackQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = C77BAED957266D20EFB289729FC39BED /* CallbackQueue.swift */; }; - 04C0033DE2A1FD3EB256E41523A8F0E0 /* ZLEditVideoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8487A37DAC8AC776C1874BB6B5053CB /* ZLEditVideoViewController.swift */; }; - 04C95DB4DD1BD71AAF5FD233628A6C6D /* NotificationCenter+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60EF3B80C615D5A990E3DF57C927E9CD /* NotificationCenter+Rx.swift */; }; - 05257DE99C24C0AFA84427AA91B7B300 /* UIFont.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDE92CB423005A97CCA96201448CB518 /* UIFont.swift */; }; - 054C5D3D52D113CC9A7AC9F7115A26A4 /* Platform.Darwin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 218DC6BF23D33E9C1057D41CB1995EC7 /* Platform.Darwin.swift */; }; - 055FD13CE509E194412FE8E424649053 /* ZLFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5293E8CF1312A0C6CFCB670FBCE385B /* ZLFilter.swift */; }; - 0591B0EE71308251E0E53C6D3EDB3D4C /* ESTabBarItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D1F46CFAEE91B9E24E4CB861FBC9E0 /* ESTabBarItem.swift */; }; - 059DE39D2D7414DD88A410B406D3AD8F /* SDImageTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AD064120AE0C72F43D3E534DD60772C /* SDImageTransformer.m */; }; - 0605E2513549327B19854B3FED759B44 /* ControlEvent+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1AA9B165270C0157D0F344861B8D6D1 /* ControlEvent+Driver.swift */; }; - 065E058B7EFAEF60F0FE94916FBF3CFF /* DDBaseModel.h in Headers */ = {isa = PBXBuildFile; fileRef = DBAD08126B9080C366F9E397191BBE57 /* DDBaseModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 069D3D96F28A4530C45940DDD664360C /* Zip+Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 348998058C7A2181E42DACBF50973982 /* Zip+Collection.swift */; }; - 06A20EF6BA10D63870C3AB7C0E1BA53E /* ZLPhotoModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5932DD43ACFBD2D8C793226E1F64FD3 /* ZLPhotoModel.swift */; }; - 06A70A35FC5D27014F93EA37402BC11B /* PrimitiveSequence+Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C17676C2C51A168A30ABFFF942281EF /* PrimitiveSequence+Concurrency.swift */; }; - 070AC1A560FD65090FD38168F6F8E8C4 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = AC347FB9F385025D134DC6ADB74E29B2 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 072037C9AD869FE022268B0EEA723CDE /* NopDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3051487E547347F0DCCB518F90317B8C /* NopDisposable.swift */; }; - 079AC611B84A6DF669CB8AA0BB3E4D11 /* Switch.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5B1A18F6D34D8D44A2956B3A7D2F7CF /* Switch.swift */; }; - 0811BB981A2EF4E3C78C193E8AE1A4BA /* DDCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6695ED3604B91A807D747E07473A606C /* DDCollectionViewCell.swift */; }; - 088B0AB69DB7F6EE83AAFF43A8DEEB96 /* DynamicBlurView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0574069E22601655BD9A55A965E4BC4C /* DynamicBlurView-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 08CB54ABE0EC0CF4DEEFCA6B0E17D995 /* PublishRelay.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1580239C591ED5E9E6C2B67C649CD22 /* PublishRelay.swift */; }; - 08CC4F2CF084EB4C21FD37F7D5C1728A /* ItemEvents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91567B25746861211EFCF26D50455EF5 /* ItemEvents.swift */; }; - 08E6D56E326D4E16E6A83E0DEA552670 /* Infallible+Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0FBFF0B8B14B1045EB2894EA2F1B363 /* Infallible+Concurrency.swift */; }; - 090FD4710FE267FEA37C51F5F2F0E2B8 /* UIScrollView+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 44FE22F59FF2596285278D5DCA157A06 /* UIScrollView+DDCategory.m */; }; - 09715D3A5DEE43ADAA3DA14CE2AB5F6F /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9A279C65F7CCAC189B64F5C731B0CCB /* ConstraintAttributes.swift */; }; - 09B9E5FB7E73F28A4E1F581917EF868A /* JXCategoryNumberCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = ECB77B5CB3F3CFE6CDF70C0DFB2AA0E1 /* JXCategoryNumberCellModel.m */; }; - 09CB072529CD8E230649CBA428E3550F /* MJRefreshConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A62154923D191AED767884A9A6697A5 /* MJRefreshConfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0A52100A925E2B7AEE0B2A1F282751C2 /* DisposeBag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B38AE3B3E25A0D8BCCFD46D1E143B8D /* DisposeBag.swift */; }; - 0A762FAE78A91ABC899CB431FE10B9FD /* ESTabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B96ACA8FDAAD9914754C41EC4070FCB8 /* ESTabBarController.swift */; }; - 0AA7DF04E09E0767F6E7615B4E431C0C /* SynchronizedUnsubscribeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEC4AC451F11FA32131EE78BB3FD9EF0 /* SynchronizedUnsubscribeType.swift */; }; - 0B4577864274CE4EB338A238A241AA0C /* EKAttributes+Precedence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21F1FCF1B9D88A58BD121690F90975BD /* EKAttributes+Precedence.swift */; }; - 0B52A423F3F9E6C5A42612A06BCEEEF8 /* SDImageCachesManagerOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C319A07391F1A2F55BEEE27E267540B7 /* SDImageCachesManagerOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0B5B8EB020F39AD312D8C7A32FAF741A /* EncryptedMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC5181D72AF2B025E04FD2CC28CBDD64 /* EncryptedMessage.swift */; }; - 0BCF8CB00A9A52600E24370C7144693F /* EKNoteMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2652145BBBEDD592507999E4EA544295 /* EKNoteMessageView.swift */; }; - 0C7A81B76F81FFAA7AFD437D61831C77 /* DelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 381408FAF18C91E6B087F673947BBAF9 /* DelegateProxy.swift */; }; - 0C833DB2294851CFBE098DF5BCEBADF3 /* _RXKVOObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 40D535D7C4DF68F2B5AFB977FCA58DB1 /* _RXKVOObserver.m */; }; - 0C83C845A20F4CDC656714E4DBABC116 /* ZFSpeedLoadingView.h in Headers */ = {isa = PBXBuildFile; fileRef = CB065740FE2583AF33580901156A78FA /* ZFSpeedLoadingView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0CF0A87B87DF71F838545FC4B0161A8B /* ZLResultModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F655379862B23651B80D3906B9B5F17 /* ZLResultModel.swift */; }; - 0D20CF83B8511B1CCB09EEF4A194613D /* Range.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1962803FD59FC42F10DEE2A33E08B008 /* Range.swift */; }; - 0D444C6AD7BA8B3307579F9FCA9F43FB /* EKAttributes+Shadow.swift in Sources */ = {isa = PBXBuildFile; fileRef = F429EA86FA44E33584A442245B1808AA /* EKAttributes+Shadow.swift */; }; - 0D536CBD733C8354E24D5753892BB371 /* DDBaseTextField.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F26454F2D256FC88F2B6AD5F1A3AB5B /* DDBaseTextField.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0D56C50DBF09FF385867AEDB34602727 /* AuthenticationChallengeResponsable.swift in Sources */ = {isa = PBXBuildFile; fileRef = E789064BE8F74BD0D5F7576611BA7428 /* AuthenticationChallengeResponsable.swift */; }; - 0D62E2BC891D0F73407FDBA5604FF465 /* DDUINavigationBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAE0D91F5796C560EF46CE9E25E32D25 /* DDUINavigationBar.swift */; }; - 0E84EA21B0858EDC04A53458A7F8DBDD /* HapticFeedbackGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AA0D2BFBE481E96E80A0604083AF907 /* HapticFeedbackGenerator.swift */; }; - 0EC5EC45F806F2DC7B68E6727227E49E /* ZFLandScapeControlView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FF978DF56D9926EA3788A68EDA759E2 /* ZFLandScapeControlView.m */; }; - 0F2AAE2334C409128ADD57B132E767F6 /* JXCategoryTitleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CAAFEA0B151D4C3826C15637652CBD4E /* JXCategoryTitleCell.m */; }; - 0F6D409DD37040FBD2F76BD9D1764022 /* Timeout.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5A7368941998232BE3AA8611B4EF6D5 /* Timeout.swift */; }; - 0F81FC4C865D75BD8DAC0AE4D0972FC5 /* KFImageRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3813A0B5BDAD1D477CF9F603F038C5D5 /* KFImageRenderer.swift */; }; - 0FD6F20710A8667F9AE78B5758DE276D /* ObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5708C6073CCFAC3E206B14A1CDAA6B1 /* ObservableType.swift */; }; - 10BDEF2047FF1F2C3E095BF8CDAF7558 /* DelaySubscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 446374F155A36CCF0CAEF6EA8620AAD7 /* DelaySubscription.swift */; }; - 1112AADD470DD6BB1410B7C32A0EA334 /* IQInvocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E7F73DE381B64D0C647E03BC90FB7CD /* IQInvocation.swift */; }; - 119A65AD7B8F6C7C39DD19128A7B2DA9 /* SDImageFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E96ABA47DCA2979529FDEE0238B2EC7 /* SDImageFrame.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 11CDFB1A43FE6D23D2F8463B142537CC /* NSControl+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5304BD2E04EDB1DF6954A3EA072C79F /* NSControl+Rx.swift */; }; - 11D40BBD081118EFECD6F3BECB3BCD94 /* NSMutableAttributedString+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = C78371C90C6B9059FF339E22C904025D /* NSMutableAttributedString+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 11EAAA60DB73219EFC8B0CF1722D9C1D /* UITableView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76BC3284CDE9DE11C4F9DADC0B541015 /* UITableView+Rx.swift */; }; - 127BB0831E7F383B0F7DE209003032B9 /* JXCategoryIndicatorRainbowLineView.m in Sources */ = {isa = PBXBuildFile; fileRef = 748D420ECBBF7920BB3C0AD0F9A753DA /* JXCategoryIndicatorRainbowLineView.m */; }; - 129C1964A364166530F529A390760D71 /* JXCategoryTitleVerticalZoomCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 1429C654602EE60F14E5C748E84A3EF7 /* JXCategoryTitleVerticalZoomCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 12D239EBF9D35B376A5912A89A8D2D5E /* ConstraintLayoutSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B62494A345FE3738E54D0B7BB72B876 /* ConstraintLayoutSupport.swift */; }; - 1379145EE1CE455EBC27791628DABACA /* JXCategoryBaseView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B6973844C1B479BA07C39481BCAE57B /* JXCategoryBaseView.m */; }; - 13B2ED45C9B0CE27BE4B8AF1D3C80775 /* KF.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A16BF64BD3DBCD4700931D9C252CD7 /* KF.swift */; }; - 13E71BF7B0D9A685C7FB89D273C1CFBB /* Date+Dispatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74B22967C51D4B324B6AF48BFFF24C9F /* Date+Dispatch.swift */; }; - 13EA7F2015E57D048FEE8E0ECD4E3871 /* SchedulerServices+Emulation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C934F4020D5B676CC43644FC6189DDE /* SchedulerServices+Emulation.swift */; }; - 14006084B55ECBF580E396E89C097D64 /* ZLEditToolCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = B83D362193818D740A16D2ECC5B9B822 /* ZLEditToolCells.swift */; }; - 1437BB3F5BFA3F0EEF784975F7CA2970 /* MJRefreshStateHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E20682491464A5052445B16ABD1C3D2 /* MJRefreshStateHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 144B55A9628A2AD6B54F8BBACAB7BCFD /* WKWebView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 511F3DDC481292E3027BACAB54473584 /* WKWebView+Rx.swift */; }; - 145BBF6F393882C968D5A99AC80004E1 /* ZLLanguageDefine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4066A0B3AD78D101E9E024908C89ABE1 /* ZLLanguageDefine.swift */; }; - 14C821B748B65A96E6D91708B70C0A93 /* SDWebImageTransitionInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = BDE45026A07554106E56EAB1DFCFB909 /* SDWebImageTransitionInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1572367981DAA2E0A4283D97FA701291 /* Platform.Darwin.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB5B9559B4A5F0D29C7FE2478C5F3781 /* Platform.Darwin.swift */; }; - 159BBC585A2C51D44D40DE88B5B18AAF /* NSBundle+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = 49FD7D21697F16B91B55A29E9611D5E0 /* NSBundle+MJRefresh.m */; }; - 15D38081B9302FBAF9A361BAD7E5B05F /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 5367231B2744CCA950E57A1C9EA48E34 /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 15E0847650E2432CA703DE562686D4A4 /* ObservableConvertibleType+Infallible.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A920C3DD33739DB43E502929992BB4 /* ObservableConvertibleType+Infallible.swift */; }; - 1660E2FBDA4323E7357179056B4B0E65 /* JXCategoryDotView.h in Headers */ = {isa = PBXBuildFile; fileRef = 377468D4851829E62B60E46BD1DE02EC /* JXCategoryDotView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 166CA595A0A31AC822DB1A41527ACFB7 /* UIApplication.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15A4510CDE0028CA4E1A50F424E8666B /* UIApplication.swift */; }; - 168F32A6ABFCE1B9110D5C266D36988A /* UIColor+Hue.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6D4A7AD665C701DD8C1151EE2392682 /* UIColor+Hue.swift */; }; - 170BF4251CF6C18857EE8DCE876FF4D5 /* UIWindow+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 8209FB0F008C90AE43B85B5AD7200BAA /* UIWindow+DDCategory.m */; }; - 1713CBE84A019518FACBAC5F96A60CA0 /* RxSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AB375BF8D1973E65DF4553ED882C0DDE /* RxSwift-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 171803E499E9C5E946F0FE061019936B /* TransitionAnimations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D79400C04611DCA0219CCC4FED5760A9 /* TransitionAnimations.swift */; }; - 17C901067A0CC336075ABAC7A279589B /* BRPickerStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 31DB6A78B50469B058812C0AB3DEF591 /* BRPickerStyle.m */; }; - 17DA0483F109F5BA66CF5DD7366E36FF /* UISearchController+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7FF3C8609834F23B27A6CF3C7B47411 /* UISearchController+Rx.swift */; }; - 180F0CC23C1B3AB52C80EF79A5B89158 /* UIImageView+Calculations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38C005235C5BD77A6A2BEB7BBCABC22C /* UIImageView+Calculations.swift */; }; - 1874DC3D934C7225FFDF0965A4EDC46E /* DDBaseImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 568BCEEEBC2986D1AADFB984FF7577BB /* DDBaseImageView.m */; }; - 18EBCC2A133B26DF8B5D5754492F3214 /* EKSimpleMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34E995B15C36462115ABFF8062A67418 /* EKSimpleMessageView.swift */; }; - 19481C533673C7B4B552A16BB4B267EF /* DiskStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5696DCC77FA56BF0AEC9DAFDB3406D9B /* DiskStorage.swift */; }; - 194D6F32A526649820D6B0AA03EEF12F /* RequestTaskMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = F56489D13811035AB3474A613A684B37 /* RequestTaskMap.swift */; }; - 1984D4549EEA55FB1812D99162C83E52 /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9B79AD8F9ECF1A550262D8AEF6C6FAB /* Alamofire.swift */; }; - 19B69267A13B522D47259CF72C882725 /* BRPickerView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 06238817EEBEE705945FA0A829CD003D /* BRPickerView-dummy.m */; }; - 1A370F104A326B06BB5A7A623DC96920 /* NSError+ZLPhotoBrowser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F6F4A1F3EF266F43BA3A721E0FB830D /* NSError+ZLPhotoBrowser.swift */; }; - 1A43C63DFF19F317EF5C924811638A34 /* MATraceReplayOverlay.h in Headers */ = {isa = PBXBuildFile; fileRef = DD76C6A8AF1AA8CB62DF43C3F769AE0C /* MATraceReplayOverlay.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1A564818CADAE845D348E6245B9637EA /* SubscriptionDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A366CA9FFFC286CE0E906A7996D41FBA /* SubscriptionDisposable.swift */; }; - 1A64F561597A70C28B3564007FF6D24C /* SDImageTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4471CA9489E40B759C857EA2C365EDE9 /* SDImageTransformer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1A7ADD63C2F158E10825F3FA38EC3639 /* BehaviorRelay+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDDBFCE276A131EBB993532F71DBB2E3 /* BehaviorRelay+Driver.swift */; }; - 1ACD8986D61166611918FD8F593AE55A /* Decode.swift in Sources */ = {isa = PBXBuildFile; fileRef = B46EB72D6315FBCBFE0C8AAF6A32E8AF /* Decode.swift */; }; - 1AD7C51CCF7E6204B37A504B68924F16 /* JXCategoryDotCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 82BFEE2BBD374BD0BBBCC2DDA2FB0373 /* JXCategoryDotCellModel.m */; }; - 1B0E9E785A36AB31562F17D0F5C39246 /* PopupDialog-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FA095F3E6860C75AB30F71DF7E77D7EF /* PopupDialog-dummy.m */; }; - 1B2A260FFFFCB3D9E0AC958E83C57F4B /* NSButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E9BB0949121DEB564F39CBB1F31331EC /* NSButton+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1B2AB722CA64C661DA6D668CC4A3CDF2 /* car_xingshi@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 161019006BC8262817EE81BC18718C05 /* car_xingshi@2x.png */; }; - 1B9535181C5455FF923D768AC06810C2 /* String+MD5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CD6F59E9A12BD3804C023A1B9C383D4 /* String+MD5.swift */; }; - 1B957CE26D7722E306F95886B5EDC013 /* RxTableViewDataSourcePrefetchingProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47D85998CA5296D349A4BE600E0EAF58 /* RxTableViewDataSourcePrefetchingProxy.swift */; }; - 1BA88BD6149449B0EB04E4E7F2822237 /* _RX.m in Sources */ = {isa = PBXBuildFile; fileRef = B500A6A869EB38D0D880E1BF8D49D6C8 /* _RX.m */; }; - 1BED5C40C873A14BD22FCC7A8BC11848 /* RxTableViewDataSourceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DD82308C60C73233AC78F46107CF4CA /* RxTableViewDataSourceType.swift */; }; - 1C0B22AA4E83F0C0C7E55FE842D3C1F9 /* NSDate+BRPickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = E73758C3486F0D78F7219FF634A7186A /* NSDate+BRPickerView.m */; }; - 1C33277D17F042B6BADC5BEFD04DC3E9 /* BRAddressPickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 27DE766D157FE0517E64E1E1DBF5B2FF /* BRAddressPickerView.m */; }; - 1C6B7EF5080126ACA9C2CAC9427FF0EB /* CombineLatest+Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B081C311F36B5381C8064B5A6CA8E74 /* CombineLatest+Collection.swift */; }; - 1C7BC91F3D267D0DDD1B41CE993D28D8 /* UICollectionViewCell+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = B94B2C940E7569CB6FB0AA4B74655F7A /* UICollectionViewCell+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1C9653CE5BA95B8280803BA82EC70A26 /* DDFontKit_Private-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FB4DBAD777C369DC82B55B8F1902E69B /* DDFontKit_Private-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1CAF7FCBD075678639BE65A029B4E56A /* JXCategoryBaseCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 593FE252AAA081F01E71C12842EE9558 /* JXCategoryBaseCellModel.m */; }; - 1CD029D4F48324168F0220D8213348D3 /* EKProcessingNoteMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2251394CF95CFBA2E990C43CD3FC76B1 /* EKProcessingNoteMessageView.swift */; }; - 1D6D63D61E41CDC8C9A95724CF0E75CC /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11A0D2EAF3988210C38EAB8A6A060240 /* Validation.swift */; }; - 1D7DA734E7B0D2F613E87464252340F3 /* UIImage+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = C1E91D67416254F974D49C96E760D91C /* UIImage+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1DAD1ABC0638C45123D6AA1E78167F56 /* StringEncoding+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCE267FD9B0518D7608CA5999D2963E6 /* StringEncoding+Alamofire.swift */; }; - 1DF58F80AC0A6C167AFCF76ABE39A9D2 /* DDBaseMutableAttributedString.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CC7C4C087BAF8CBEFC6978246850028 /* DDBaseMutableAttributedString.m */; }; - 1E04860F7D564AB6E07965B70A21532A /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C63CC9D0774D46FFAF866743A4AB191 /* ConstraintView+Extensions.swift */; }; - 1E350EF29DBE0EFA8CCAB91CA8E71AB3 /* ObserverBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 209DED469D48F3D7CC4B7636A432924F /* ObserverBase.swift */; }; - 1E4A2E4EB128ED973EFAD8D0A76ECCAF /* ZLPhotoBrowser-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 648827F2C00313932F4B093D5730885E /* ZLPhotoBrowser-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1F08C8A1BDA5493CCB4E836F26A9194B /* UIView+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = D0881CEE46D38FAADED1CFDCC77A3FEF /* UIView+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1F601A8A4AE7C27226B893F8C4611E0E /* SDWeakProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = A37822F05945180B0ADB67D7E061F3C6 /* SDWeakProxy.m */; }; - 1FC870398A64B8565B90B11479B88B68 /* IQKeyboardManager+Position.swift in Sources */ = {isa = PBXBuildFile; fileRef = 296E8642906500923FB63D86FC8AB460 /* IQKeyboardManager+Position.swift */; }; - 208A97584D845254E986E9C707635B67 /* MJRefreshBackStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 63D20FD065054E23EAAB7700F187118B /* MJRefreshBackStateFooter.m */; }; - 20DC5EFA536B064520E620C2ACAB766E /* CachedResponseHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54EA0FC58504DCD8B983E0F43A2D1CA8 /* CachedResponseHandler.swift */; }; - 218A594F4B538DBFF56BDDBFA62906B3 /* DDBaseAttributedString.m in Sources */ = {isa = PBXBuildFile; fileRef = C19A5FB1C0472EF8752D8DC60509F85C /* DDBaseAttributedString.m */; }; - 219624B2DB84EE52D0E4F6B1789954E1 /* ZFLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = B43A1F2F1E63720D830B370B7AAA5020 /* ZFLoadingView.m */; }; - 21AD65B6FADAAF0BE20DCB59FCB3AF37 /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = C395B8259CC6D308C5CA33BA4BF46349 /* ConstraintLayoutGuide.swift */; }; - 21D966E2F801F96E6E36D2C7BA73235B /* DDNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1B104D5CB3FB436481B45A71DFEA863 /* DDNavigationController.swift */; }; - 21FA952E49A0EB77EB7825A78FEF6AA5 /* BRResultModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CF30404E7A7080C5C22D74A199E651C /* BRResultModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 21FADAA36F19612801A23CD9FC35BA98 /* EKAttributes+StatusBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53DB07EC82DD9C1E75BE9779C461DDBD /* EKAttributes+StatusBar.swift */; }; - 2230F8D2C691E97B535D933B21CF1676 /* RxSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DCA95B6996F452F3EE171E19CE9AF58 /* RxSwift-dummy.m */; }; - 224D5F6BA39BADAD19041AF6AD880C80 /* Bool+ZLPhotoBrowser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1EF9A5FFC46A2D6019B884482CBB45 /* Bool+ZLPhotoBrowser.swift */; }; - 226AE9954640E71AA69AC12F268C4B58 /* RxPickerViewDataSourceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FFC7A16B1641BD6E007D549F831184F /* RxPickerViewDataSourceType.swift */; }; - 22A0EE3CF4D4D5DAF933A7871B6E47A9 /* SDWebImageDownloaderDecryptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 779AC19DCC5922311DBA34FAE13EAEFF /* SDWebImageDownloaderDecryptor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 22CE10056B2DC6A993C8E3CE966A45D4 /* NSButton+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7944D1C40A7D9A312109C07AD7D23DE /* NSButton+Rx.swift */; }; - 22F9542CF144A32FA791286228A88C04 /* WithUnretained.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA48B41755825B3A3C4335BB7AF7847E /* WithUnretained.swift */; }; - 23070072A95EC58547F751658BD10FB8 /* QLUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F49FBAA4DF5966CBB6BF8C388042265 /* QLUtils.swift */; }; - 2354A0786A1EBBC2298B9CB493F8C4FF /* URLRequest+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1623AE1629442AB8018887A49AD7E6DA /* URLRequest+Alamofire.swift */; }; - 235F5CA0FE85EC9C9BF77DDF796070C3 /* JXCategoryBaseCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 56018FF5D01D2F070C712EA706186D9B /* JXCategoryBaseCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 23B683FB3262FAB104127CD59D29E34A /* SDWebImageDownloaderResponseModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 25FA9D728A1914EACE0A73F28DF83C74 /* SDWebImageDownloaderResponseModifier.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 23DEC997EFDAB5839591BBBFABC6A2A8 /* NSBundle+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 78ECCF2A4FEC22ABFF5BAC19B8E5E14C /* NSBundle+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 23E7FD08C3DF07540AD2118EA057AECA /* DeviceInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B10FB417AD06B507E287C969BAD54A7 /* DeviceInfo.swift */; }; - 23EFAA45BE23C0F05AE3A5A892808639 /* UIView+Shadow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98D8CCB8D52B56C004790FC7FB9A1C84 /* UIView+Shadow.swift */; }; - 24488C0EC1CD3766AF3BA0C3361D2F05 /* KVORepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4ADC7A37A5B63903E0D95C418084602F /* KVORepresentable.swift */; }; - 245545785378684632B1A838648E423C /* car_xingshi.png in Resources */ = {isa = PBXBuildFile; fileRef = 26AEA41C8B14F7F0E9144CF1B5BAAAB5 /* car_xingshi.png */; }; - 245D0E313372FC4F2297E8CDC17BFDF4 /* ZFPlayerGestureControl.m in Sources */ = {isa = PBXBuildFile; fileRef = CFFC1E69456D7DCFAB6347A9E16EBAE4 /* ZFPlayerGestureControl.m */; }; - 24E92B843F6FA24594FB1963D297E1C1 /* DDViewControllerAnimatedTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = 457A80DEC0166FAC9C9555D3122A7B34 /* DDViewControllerAnimatedTransition.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 24E9C22091E66AD34A6F04C2AA5DCFA2 /* MABaseOverlay+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 54A206BC69EC53E7599908DB6CED9A62 /* MABaseOverlay+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2508C13A6D783495CAA9FEF848ED3408 /* DDBaseButton.m in Sources */ = {isa = PBXBuildFile; fileRef = D1BC1FE6F37047E71C9830283FDD5D1B /* DDBaseButton.m */; }; - 254DB7DF69C8F0DA8BAC684099B27944 /* ZLAlbumListModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 573A7497C7A50D94FB4A7F442C5702F7 /* ZLAlbumListModel.swift */; }; - 25970C989E301315E4B0E51B9265191C /* UINavigationController+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = AADA84EFFDEA23D1E85608A1726D9D7F /* UINavigationController+DDCategory.m */; }; - 259DD1BE69FB6C8030BCD5994B5E5B51 /* SwiftyRSA-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DA9A6E5B948AF8AED6CD1839F7CBDC4 /* SwiftyRSA-dummy.m */; }; - 25BF5D9FAE084BAE3824007EA8E0196C /* IQToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB22E2B0D3FB2154A58DA396F8D8FF7 /* IQToolbar.swift */; }; - 25C7EB9F72274DDDD8E0F343712DEE92 /* UINavigationItem+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 279045C7261070E227F016C7B3CDA49C /* UINavigationItem+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 25CC4020FC9FED9D12F42A6367A95F1A /* Infallible+Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = F59A80C7846EDAE9C2DB93A2BD7FA63B /* Infallible+Operators.swift */; }; - 262F6512506ED9745F84C00D7748E54A /* SubjectType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D58C980FB04DBDCB318A173DB5818C3B /* SubjectType.swift */; }; - 263E6DC0FCCF45948585AE8D649ADCE4 /* UICollectionView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = B96EFB3FE70427D8B4D751D1F0718179 /* UICollectionView+Rx.swift */; }; - 2655C03CDF30A7690E43D892DDC95AB5 /* ZFPlayerLogManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D2A9A8EF046B4DE273BD1DD1E5CCA659 /* ZFPlayerLogManager.m */; }; - 269E460B54758ACB6B351151604E0B1A /* Queue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 896E130CFF5AEF120690273A4D51A899 /* Queue.swift */; }; - 26D7B78DF030A20F012D3C770E6F469A /* UIFont+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B2C6C950C836FE62DD8A8414331EBF9 /* UIFont+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 27043FD4E15DBD03FD933A60109C3009 /* EKAttributes+HapticFeedback.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BAF5D75E4FB52D4E9196CE377997DE9 /* EKAttributes+HapticFeedback.swift */; }; - 270ED905740AD9FEFB9A346AC527D53A /* SDAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DD86580723992F780F2F830A13CBDF0 /* SDAnimatedImageView.m */; }; - 27393AF110439C3A37744A4040E1E9EE /* RetryStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED4B28777420DC719B44D67B307E6593 /* RetryStrategy.swift */; }; - 275381CAC910D22744FEFD2CA9C80297 /* AVAssetImageDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27D53C130081BF5B3BC6B422A21B1EF3 /* AVAssetImageDataProvider.swift */; }; - 2776B3355D535E5A68E18C4C77B2D595 /* ZLPhotoConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CE7E18CB266816367C13967C70F5F18 /* ZLPhotoConfiguration.swift */; }; - 27770DF47A61DEEB841F3E977A6BE99B /* SDmetamacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 869D5DFE9DD1A2268D9D13DA5B9EC726 /* SDmetamacros.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 279C4E09D6D4113942EB37DE5DD034B0 /* JXCategoryIndicatorBackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = 329F0735A9474AD3C4D2019D9A2EB9B7 /* JXCategoryIndicatorBackgroundView.m */; }; - 28096A037B656B6C13E1B62315EDBF25 /* ImageDownloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9F792EED4B9415B48F4A5955AD528B4 /* ImageDownloader.swift */; }; - 287C57DAAE89B78235098039F1AF3AF2 /* UISwitch+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = F3C59223E4ACAC4319150C29731AC850 /* UISwitch+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 28E3B45C51EB7B6711CC6AF6BBA4F32F /* SDAsyncBlockOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 426ACC0CB2BF1FC39A89311CF768EFF8 /* SDAsyncBlockOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 28E8453EBEAA5D3187A1FB686F807A07 /* SDWebImageTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = E4A4E116DE213028792AEB972C8C12D2 /* SDWebImageTransition.m */; }; - 290CC252DD7A79A8CD348210A4ECEF8F /* ZFPresentTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = 02CD09B23F363A0ED6829FABD931714A /* ZFPresentTransition.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 296AD743BAED5C596C4FC357CD4FC261 /* InvocableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C7F0FFA47C3049DC719D410F57047C6 /* InvocableType.swift */; }; - 29A2E2087AE8D794A6A57E3BC55EEAF2 /* Cancelable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE9E8C2F33A98716C8CB038355C1390B /* Cancelable.swift */; }; - 29A94387DA04DE3CA441D0244ED3B6E0 /* ZFPlayerConst.h in Headers */ = {isa = PBXBuildFile; fileRef = F45E2E4C287E99D187D4A1DB6F7BC294 /* ZFPlayerConst.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 29ADDEB7070613224B9510A61E41A745 /* EKAttributes+WindowLevel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA306782607E93BE5C83E20F856D1FB7 /* EKAttributes+WindowLevel.swift */; }; - 29BDE26902A035FAEBCB2DC35DEE16F2 /* ControlTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73C5D716985D6A9FC27099D22D4B49DC /* ControlTarget.swift */; }; - 29C7B5B61EDB9B6010093123C95146D0 /* ZLCameraConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11EA65D845C4FA3C0A6F40BB8E10CF5 /* ZLCameraConfiguration.swift */; }; - 29F4DFF55D0B18B9ACA5820B30481389 /* DDLogKit_Private-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 28CF74A30ADA16A65120E81055556B9A /* DDLogKit_Private-dummy.m */; }; - 2A3C45CBC3104636FF2ED8A1B3D2CAF7 /* UINavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11318CAE9188F3F3D96B377110B759AD /* UINavigationController.swift */; }; - 2A6423FCAB17960280B3035F79F4DD6F /* IQKeyboardManager+OrientationNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFECCD6DEE66A705C163467849DFDEF0 /* IQKeyboardManager+OrientationNotification.swift */; }; - 2A9587CB9E83DC818BC42AB6D3BA6C93 /* AlamofireExtended.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F0FA8BDB00146BF15D3BC096E93834B /* AlamofireExtended.swift */; }; - 2B6E7E401FECF3BA6B6856DAFE81E233 /* UIControl+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5BED8008BBEBAE0D0CDCAE16028F220 /* UIControl+Rx.swift */; }; - 2B799593BA9EF6DAF478B5551D7E7A6D /* SDImageCachesManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C3FFBB9632D75DDBE9FD5A649334EDAB /* SDImageCachesManager.m */; }; - 2BB1B5BC54D2ADDD6BF253B4FBB71E3A /* ImageFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9ED858A07E2C1676EDE73FD3773F9D8F /* ImageFormat.swift */; }; - 2BBD8EA6B3F3A8EA8F721498BE13D6C8 /* MJRefreshStateHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B8D7EA1853A8C26F80ECD85BC28919 /* MJRefreshStateHeader.m */; }; - 2BF1A8E6F302964E4EA7E6B004474BF6 /* RxCocoa-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 20AE7958E8A392E43477169D9EC04936 /* RxCocoa-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2BF6AD4F75D3FFC369CCB82DCA4C730E /* MJRefreshStateTrailer.m in Sources */ = {isa = PBXBuildFile; fileRef = D16254B55AAD3124DC99795F88D22EB4 /* MJRefreshStateTrailer.m */; }; - 2BF7BE1115AE5E63724A339701C1D7C3 /* ZFPortraitControlView.h in Headers */ = {isa = PBXBuildFile; fileRef = 14090DEF6DB4FAD172F8D3682ABAC65D /* ZFPortraitControlView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2C0D806E4CC111F69F6DA1589BF4DE81 /* PublicKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C3C814A14571470DAD18447CE470666 /* PublicKey.swift */; }; - 2C37F2D2D4CEAD643BD8D6212242A740 /* UIRefreshControl+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A74E07F599D069F94264E596799DF79 /* UIRefreshControl+Rx.swift */; }; - 2C52389E12667E0179DC612D112DBC64 /* RecursiveScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 547000FF35ABCCC797CB4B8681D8BB16 /* RecursiveScheduler.swift */; }; - 2CC3AD3D3398B56CF9B85CC4A7F9F439 /* QLCompatibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66B027B2A71C75DE5339595FFF112FB8 /* QLCompatibility.swift */; }; - 2CD914E4B91EBD8D2CA2DF77BC35BDB1 /* PresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23D9826CFF8ECCEF2E4D1AD0394274D3 /* PresentationController.swift */; }; - 2CE66298EB882DB104A440707386CB8E /* Merge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EA0223AFAEA527F51E060EC701FD9D5 /* Merge.swift */; }; - 2CFCF233E052F29452123E61CB274CFC /* UIImageView+ZFCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E25AFE2CC3899B6483DAECBCD6614163 /* UIImageView+ZFCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2D2CDCF93A57C458A459F5A968528E34 /* DDNavigationControllerDelegateReceiver.h in Headers */ = {isa = PBXBuildFile; fileRef = D9017B4A55E653BC69EF76F2038FA511 /* DDNavigationControllerDelegateReceiver.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2D498A82DAA39D56247F29BEE6EEB7ED /* UILabel+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = EEC77E95710C428FBBCEA3A19CC88933 /* UILabel+DDCategory.m */; }; - 2D6959FD049A370CC9591C62B0F7381A /* Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3285ECDE4EC7D2748C153D3697BE803A /* Map.swift */; }; - 2D83E793BB320606B62CFE1E10C2A490 /* MJRefreshHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FD8C3EB9E6B1E10EA43CE16BE3D8143 /* MJRefreshHeader.m */; }; - 2DEBD6FF56476D9DEF23F26A6B128E98 /* PublishSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBDCF2E2806442EAACA290D1B6CD1865 /* PublishSubject.swift */; }; - 2E3D2707E7E60BE010D3246CD02D6584 /* ESTabBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16726529D4925EFA5D61246DDF2520D6 /* ESTabBar.swift */; }; - 2E7F3CDAAF53377E46D82BA29C31E95C /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 023378F8A559DBD8D97CE6E8CCDF1EB2 /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2EDAF39A638BF0797DAC0C75226CE335 /* UIApplication+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAFBA996F8D0DB0779A067E6DF99FBAB /* UIApplication+Rx.swift */; }; - 2EE2043D4DD09C8AFEB9FDDA05E9AF6A /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCCB5B88E4403F92CC5C5B2D573509D0 /* ConstraintLayoutSupportDSL.swift */; }; - 2FE046DCADD181369DFC6A2685D565A1 /* RxMutableBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AA6565E54EE5A1694A2DAAD03BC23C5 /* RxMutableBox.swift */; }; - 302832D4B7652F756A29A925F087C822 /* Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 545AD3827243FBFA4610FD3D35FB0BE0 /* Concurrency.swift */; }; - 303B93CF0EE553490F73F76D9C534C44 /* EKNotificationMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB83826263A364A1DB23D827C1999862 /* EKNotificationMessageView.swift */; }; - 308503CCD3E28A3911BCC7004887D711 /* PriorityQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = F69E380054270F3E4ECD98A969AF19D5 /* PriorityQueue.swift */; }; - 3088663B2B31153DD3995BB53A10045A /* ZFSliderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C43572F515F76824B321D8A42D029D9 /* ZFSliderView.m */; }; - 30CD9E67B22802940BB72062DED254CE /* Repeat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BE2A0EF9D56819A61BC260CE4C8D225 /* Repeat.swift */; }; - 315E6E32711371D1E923D202C5BDF0D4 /* SDWebImageTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = 814EB8D913B261BD1FC90D0860E810E3 /* SDWebImageTransition.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 316ECCB1FEC71196E803E0DDCED7C651 /* DDBaseScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CBF23CB7783B7D5344C0C32C0D47775 /* DDBaseScrollView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 31C23CF66BBB1520FFD4D8C8AFB510DF /* IQUIScrollView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9AFBB8C9DAE35B22C4B19C5E5660706 /* IQUIScrollView+Additions.swift */; }; - 31CF6A9299E02044EA28735F99B19686 /* UIView+ZFFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = A783B4031979F6BBE19524A554BBCE84 /* UIView+ZFFrame.m */; }; - 32266A6F42922E50D21FF66C496DF1F0 /* Sequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = F72F8157F7793CF06450BEC7A5AFE014 /* Sequence.swift */; }; - 327738D4F79388DCE57DA6B462AD2936 /* NSThread+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 151C1822C9470A3F1C63D7E8698AEC70 /* NSThread+DDCategory.m */; }; - 32D2FA4F8AC6EBE83DDF786AF4629B28 /* DDAF.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9EB98248632D80E2CD041148A8E5C15 /* DDAF.swift */; }; - 32E95A874664AF103BB1075B97BCB00C /* DDBasicControlsKit_Private-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C3755E1970E45CA8E4427BFA0FBE2E4 /* DDBasicControlsKit_Private-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 32F4D098720BAB0CDADEB1740B23B290 /* DDMAMapView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FD638B5FD92B4BC6A9688438F9AFCF1 /* DDMAMapView.m */; }; - 32FDEF26E5A224A9DE72E09CE33BFDF0 /* VirtualTimeScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = B83E171BF333BCE6042F4790900A9FE2 /* VirtualTimeScheduler.swift */; }; - 33043B5E0E8C4E2805481E6D692949AB /* JXCategoryIndicatorLineView.m in Sources */ = {isa = PBXBuildFile; fileRef = AD90C1A30406D12664F5E1A77AE3C8A7 /* JXCategoryIndicatorLineView.m */; }; - 33206CE1C59D7666BDDE9E1465A610EE /* ZLEditImageConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = E31E82532012A9368CD278F1B64B4DB1 /* ZLEditImageConfiguration.swift */; }; - 334A994CC4B847C1B6262E13A65F9C3E /* AnonymousDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 457CDCAB18594BD4385D6CEBCB903674 /* AnonymousDisposable.swift */; }; - 33859D3CB90E4ABDB24C9227DFE85E4A /* RetryPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DA4E705B3EB4AE201794AD0E21212F3 /* RetryPolicy.swift */; }; - 33C5347E93C96AC65380B9B1CCF3B411 /* PopupDialogDefaultButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = 065B11C89371CC4255EE8CA78AB4D5D3 /* PopupDialogDefaultButtons.swift */; }; - 33E6C702602A0ABE4B9FF00731487E49 /* DDBaseTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 536796DC557774A8360BF83BA16F52AA /* DDBaseTextField.m */; }; - 344AC17E91D0F874C0E41AE3F6D7C9D7 /* ReplaySubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F77AE1A97D56A1FB1D75FA81AD0B323 /* ReplaySubject.swift */; }; - 348A2399833F70160F70ABBDCB980E2B /* SDWebImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 657DED17020554A52B02991B5355787E /* SDWebImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 34C07B18252160C63FBD16003E845CFF /* JXCategoryNumberCell.h in Headers */ = {isa = PBXBuildFile; fileRef = D9B41086832850A388ACB48FB147D90D /* JXCategoryNumberCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 34CBF28932334DC78F6E40B6FABECCB7 /* DistinctUntilChanged.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51F2ED7FD6260CFB78C34CE4FA7F7E67 /* DistinctUntilChanged.swift */; }; - 34EE7B15E96B44F2F505FF8B47CA47BA /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2707E7BEE80B079FE70890826E091175 /* Response.swift */; }; - 34F4C47DFD00CBF46312DFB03A6E8840 /* SDImageIOAnimatedCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FBD58529A4B13653F254FD8AF594991D /* SDImageIOAnimatedCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3530FB5ECF1B91F9E3243BF34F446980 /* SDAnimatedImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 9413E14BB8B290E97588E5432B23FE2D /* SDAnimatedImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3542BDC08CBCA8BB1951AB507AB42AA1 /* JXCategoryImageCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 77C393897F696244E9356EB4257EFCCF /* JXCategoryImageCellModel.m */; }; - 3563535F257C8923038E5C66A70CD288 /* BRPickerStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 7994FC0381B5E0274F1FB06C9232399C /* BRPickerStyle.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 357623AFCD422D2A1BF39E9A65530F53 /* NSURL+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 72285DE049F671DE51C1B400CB5F2405 /* NSURL+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 357C743823312159B0278D1810A8A481 /* EKWrapperView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29503832346B5ACA306B8351EFEF99F4 /* EKWrapperView.swift */; }; - 35B124D386A8A344DB4E378136803251 /* ZFSmallFloatControlView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2532AA7D799838AA046A78158ADA67C8 /* ZFSmallFloatControlView.m */; }; - 35ED1671F8FD3A5108E1B917130980EE /* EKRatingMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84327167CBBDD99B931D23F9AFF30DA5 /* EKRatingMessageView.swift */; }; - 35F5FA1C74B28C3080CA0005AE863FA8 /* Kingfisher-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9783AD99AE5AB88CF4B0EFEA8601D4E1 /* Kingfisher-dummy.m */; }; - 365DE3259C4106D8E3AC066DAEEB4720 /* DDBaseSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = 2FF554B90DB384AF86113D10561E1090 /* DDBaseSwitch.m */; }; - 36609831C82EC1E0D38EFF6ECDF53026 /* UIFont+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = F736FC35BDD67E5655FB0ED07F754CA1 /* UIFont+DDCategory.m */; }; - 36AB9414D82F70F6517E1948301B56E6 /* SDImageAWebPCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = C8A37E16ABF1F765BD2F306F276A9BFC /* SDImageAWebPCoder.m */; }; - 36B204B1822DC0BB1A37AADE7218B28C /* UIImage+ForceDecode.h in Headers */ = {isa = PBXBuildFile; fileRef = 98195C66125642D3183345871C8CA849 /* UIImage+ForceDecode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 36F40E8EBE86E294348DF7F319E98D8A /* AutoUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = E22F30851DDC7C549F663C5FEE847DCF /* AutoUI.swift */; }; - 36FEB6DD53D08DB2164BEE84F3653BE7 /* Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13369AB30EF547AC897102096804BD8F /* Driver.swift */; }; - 37115542AB588CD7E9A715EFCBD931B2 /* UIColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B8B9E1EAE4DB813CB3B48BA26A853EB /* UIColor.swift */; }; - 372DFC5E474E6F5988D709EE7BAD99E6 /* SDWeakProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 19285907593533A6AA9EB666187C70F5 /* SDWeakProxy.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 379EF14788368688008C6046091CBA72 /* ESTabBarItemContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C4F166A34106C167C1D61C5851F8AF0 /* ESTabBarItemContentView.swift */; }; - 37DA31E97761C9AD09DB9F3AD80AAA70 /* JXCategoryViewAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 691E8D0FC452DAAEC49C56AA02423214 /* JXCategoryViewAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3808291BFCAA43687CA6EEEBA0A23A78 /* RecursiveLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58E19414300B9B38EE7D7B98461DA21C /* RecursiveLock.swift */; }; - 38113EA83CFE5B14B6BCFC96772A2BDE /* IQKeyboardManager+UIKeyboardNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28E2578003E2F135F48FD8D61F37EB4B /* IQKeyboardManager+UIKeyboardNotification.swift */; }; - 3845205DF5D46F4839DB38A7F6AB90B4 /* UIImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86D5B58B2DC09E4FBC7347D6CD405BD3 /* UIImageView.swift */; }; - 388BBDF2D1096563AA5C9266E06AF151 /* NSImage+Compatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = 70D6E799EC458D6AC16F00B7EDB78A4B /* NSImage+Compatibility.m */; }; - 38B5C354CCEB18536DC8739368429DA9 /* UIGestureRecognizer+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C1C6FCE8B5DC525669FED53B182A2EB /* UIGestureRecognizer+Rx.swift */; }; - 38D3D319A463252D8357528ABC9B92C6 /* Timer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53C5218BC84CA6549F42E777DE2A80CE /* Timer.swift */; }; - 3A10B0AAD9F15B171EF41F035369BECB /* ZFNetworkSpeedMonitor.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AE27BD2887CD524A80F947F01B089FD /* ZFNetworkSpeedMonitor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3A7C66A33B73A848F44A1333ED59AA98 /* UINavigationController+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AF7527E60B3647B232A866C5951E416 /* UINavigationController+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3AAB1695C0F9AAE144A7E37E34966F45 /* IQTitleBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1C034DDF190FFFFEFDCBBE3BEED914A /* IQTitleBarButtonItem.swift */; }; - 3ACCD6DF1F9C7989B0BB3482AD01D786 /* SDImageCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FAD17EC8C7A83C70F900C8152745963 /* SDImageCoder.m */; }; - 3ACFBA19004CE54466BBD8C6BEF1D27B /* JXCategoryTitleImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = AE186CB22D2A6AA49DEBAD692309AE92 /* JXCategoryTitleImageView.m */; }; - 3B14941EB241AF1ED07CFF634860BE1E /* RedirectHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E14108DD2E07F3E82CEC9C5C48840A8 /* RedirectHandler.swift */; }; - 3BA07D26BA7B31AD481DCF513B101864 /* ZFPlayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = D7D356C9644A29E54C6CC720E7B1B848 /* ZFPlayerView.m */; }; - 3BC81C04B06FB5B079FDE9C95231AC97 /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 686DDB8A39D48159240E2AEA744CEF9F /* Bag.swift */; }; - 3BF1A3079B688B22EA3D2D87B3AD4DC4 /* Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566149008FC73438B00482887D0A93B1 /* Debug.swift */; }; - 3C11CB98AFEFBE7A201DA71292528A69 /* EKRatingSymbolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4218BFA03EECBC67513AD75A3D832AF1 /* EKRatingSymbolView.swift */; }; - 3C785FEF705A69574697F75A7255C9FC /* ConcurrentDispatchQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69DAEACD65BE2304D0A45728C3932162 /* ConcurrentDispatchQueueScheduler.swift */; }; - 3CA6371C85FE25DFE2889186676D041B /* PrivateKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = C01301176AEAC9809BD957B58457CBA2 /* PrivateKey.swift */; }; - 3D1DB9B06A570F6243016C3FB3692C4C /* ZFPlayerController.h in Headers */ = {isa = PBXBuildFile; fileRef = 632A81A7D5D503D4551B881A6D5E2D99 /* ZFPlayerController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3D99594286ED1D20D88E0A86886224BA /* SwiftyRSA+ObjC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BD1EE08814A7472706470B65F3D3639 /* SwiftyRSA+ObjC.swift */; }; - 3DB9872080D437F2A851158F1F8F2693 /* SDAnimatedImagePlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = F69849E1DCC3CB3810D7E5767BAB25C8 /* SDAnimatedImagePlayer.m */; }; - 3EBC1473805AE2975380A13C46E9394E /* RxCollectionViewDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CB853B3D3FA4C1BA43C53DD9949EF5B /* RxCollectionViewDelegateProxy.swift */; }; - 3ED2486A34EFAD23ACEA160695EEEAD9 /* NSBezierPath+SDRoundedCorners.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BE8BE147ADE304F6D8BDC1E3DE3E7E /* NSBezierPath+SDRoundedCorners.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3EE1F3D911A2EEFC8A9BC6503440FAA4 /* SDImageCacheDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C9F61CE6ED2DF8974E42B60C415199B /* SDImageCacheDefine.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3EE8DABA9C8DF87F6E10FEABF6F4F00A /* GroupedObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FB4BCD456A230F295D58FBDDE49D3CE /* GroupedObservable.swift */; }; - 3EEB15302467C142726D815653A92E15 /* SDImageGraphics.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B0AA00AC3C94D7CC89DAC7137913CAB /* SDImageGraphics.m */; }; - 3EFC804679D24748F1AE2B2ECC493751 /* ZFUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 9379D6401784F1AEFF9724756BAFA76C /* ZFUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3F04950F30488FB6AD475A0519B0B16F /* JXCategoryCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 42362AA9D45285F7082156A7838557A9 /* JXCategoryCollectionView.m */; }; - 3F4B847DC64A98AF7C577DBD92606ACC /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6DF2B3DF55513B9094D6EAA7BA10CC9 /* ConstraintPriorityTarget.swift */; }; - 3F56A52F3459E227CD0669EC4192F7C6 /* ReplayRelay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60D63D707E6F989BD38068854B67B0D3 /* ReplayRelay.swift */; }; - 3F7C7042BBE1B605BD0FA37056BB1D78 /* _RXKVOObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = DD9BCD7BD7083FAF3307D81DF81F7C46 /* _RXKVOObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3FC1DB05D712E48147247956545C6688 /* HistoricalSchedulerTimeConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 100591C0CA8BC02FA5698620BD98FA34 /* HistoricalSchedulerTimeConverter.swift */; }; - 3FE17AA44DD3A1A5179103D3798D079F /* JXCategoryDotCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F08F7C86ADB155DCA1C54C1982E77B1 /* JXCategoryDotCell.m */; }; - 3FEB57F82B4C5F6D6AAD855FFBAE7FD4 /* UIScreen+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FC9941491BF1FD35C4EBA32A311119E /* UIScreen+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 406B70834D7638A4706184831DA1BA56 /* DDPersistenceKit_Private-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 970613E589CD704BE5F22AFD8763B5E7 /* DDPersistenceKit_Private-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 408E77F6FB2A28181214F3571597C6E6 /* Signature.swift in Sources */ = {isa = PBXBuildFile; fileRef = D79736C3A55B7D6C5075C947B6694235 /* Signature.swift */; }; - 40F0EC1B6B9648E6668E369AB598A876 /* BRResultModel.m in Sources */ = {isa = PBXBuildFile; fileRef = D2C08CB7A46C8AE472089C3822E5E1FE /* BRResultModel.m */; }; - 4102520C79E465F93CCC555425B16A21 /* MATraceReplayOverlay.m in Sources */ = {isa = PBXBuildFile; fileRef = 17E2210B687B3412F03196B1C6A6D547 /* MATraceReplayOverlay.m */; }; - 4139B49E8556C97A3D8FE0AB885CA1FD /* JXCategoryListContainerRTLCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DAC4C046B99E2599D90B326B52B4E7E /* JXCategoryListContainerRTLCell.m */; }; - 417F88073D2B0203BC70C580CA9AACFF /* EKRootViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55C78DC3A2BF39C514F3164238BB70D0 /* EKRootViewController.swift */; }; - 41B097CA87620491B5A500124B922D58 /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 16AF0AA4A670CC0D68A66E6388506169 /* SnapKit-dummy.m */; }; - 4223E964C57E9A4588FA614FE769EBB1 /* Toast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19997B31DB091B9691A5431ADE9681FF /* Toast.swift */; }; - 423150CAA90F1925435371DAD5C7ECBC /* UIGestureRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D47057D54AC76837ECCF6C6096426E3 /* UIGestureRecognizer.swift */; }; - 426669FEBC6BACB365C6043CADAAA0CC /* Infallible+CombineLatest+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEEF6A42E1003FED5213630188F0BCF9 /* Infallible+CombineLatest+arity.swift */; }; - 42B1E4E7DD051B0FEF42A279062218A8 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FDE46C30B029812245A7834F1A97A1C /* Filter.swift */; }; - 430B8F18E9BEA750A8C84C4DC1BD9A99 /* UICollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C28BDCBAD94CF0EF86ACC5AEEE734D8 /* UICollectionViewCell.swift */; }; - 432F9B4E6023BA249378CAF9EDBB5CCA /* DDBaseAttributedString.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E3AD0A5A60B44AF298FEC9482CE432A /* DDBaseAttributedString.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 436ED0BEB10283F8E64348F38B2D09EC /* DDUIGestureRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2557183A2FE6CE05E0241839C2486DB5 /* DDUIGestureRecognizer.swift */; }; - 43E005872AB5B98625C1BCB4453ED0C0 /* DDUIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 039574ABCAE0F3DE38B92070B3D21AC6 /* DDUIView.swift */; }; - 4408CB04AFDA8CC998F4FD00910B4738 /* SDWebImageOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = BDB973BC6B942C9A7ACE838891512FAC /* SDWebImageOperation.m */; }; - 441793180F0D4EFB3B71D6117EDFA872 /* ESTabBarController-swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F024E118CC7C6DF824B3A44E3B5D35F /* ESTabBarController-swift-dummy.m */; }; - 4433D02EE9231F24E94E5FD44492907C /* UIViewController+ZLPhotoBrowser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D9CBE956591DBD063DF9A572E7359A0 /* UIViewController+ZLPhotoBrowser.swift */; }; - 4482C25FB41CA449FB31D498FBC4C50C /* GradientView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F264CFD0AE4632E0FD8EBAB9513B169C /* GradientView.swift */; }; - 4485A6CBAF4E316C0B58C1773F36D839 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8428E6886EF5735974D641689E6BEE74 /* Filter.swift */; }; - 4490B08CBFDFC7269B17068AA4CDA61F /* DDUIKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 95299BD6E3099A4ACBAA7311918BAD43 /* DDUIKit-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 449C0983E8393CA349A0801B4BDEAE12 /* BooleanDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69CAEE7784D12AD99520E3982E588075 /* BooleanDisposable.swift */; }; - 44BDECE8B10C6DFB4BBFB8621A636FB9 /* ControlEvent+Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 344F0F6866E65EB5164258A81E6F9613 /* ControlEvent+Signal.swift */; }; - 44C35B8EF128278FA7F9F22C82379DEC /* DDBaseTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = C756078088B7C77722EB7AE0CE6B21C7 /* DDBaseTextView.m */; }; - 453C775A0F9ACCD310681A1C49D051AF /* ZLCustomCamera.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FD050779C225444E531817AAF94E8D2 /* ZLCustomCamera.swift */; }; - 456C758D7BE4EDCF597AD04A3D095711 /* SDImageCacheConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = C29B82C1A35C3064AF29EED840507353 /* SDImageCacheConfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 45F2115D4EC21D89A899E9D969CA1810 /* NSTextView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 227385DFB9BD93899C65F2800AFA2C5B /* NSTextView+Rx.swift */; }; - 460CAF3FCDD140A11875B67D3124B8BC /* Combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFDCBA487329768A35BFF9DA39F33DB9 /* Combine.swift */; }; - 463859BF5F9D7AAD1F9216EA25687599 /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FF8D191231FD486E20443860552DDFD /* MBProgressHUD.m */; }; - 464C0BACBF2990B25DC1444413849288 /* Driver+Subscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6326621A7E3A533A7086C0D6193C1E8 /* Driver+Subscription.swift */; }; - 465DDC88E2B046AF9FBB74B1D3D3FECD /* DDAudioPlayerKit_Private-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6808A7171BC3C492B5BA2F54A65A05D8 /* DDAudioPlayerKit_Private-dummy.m */; }; - 466076161BAFA79E1EB9C034956DB0CB /* EKAccessoryNoteMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1041174B6008065A01D628E819B0F88B /* EKAccessoryNoteMessageView.swift */; }; - 468F7993E475998F74D45D577A1A8079 /* ZFLoadingView.h in Headers */ = {isa = PBXBuildFile; fileRef = C3A40198775F90A1AE767DCDC1BCE469 /* ZFLoadingView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 46C36454D8E82CEC47B95D6426063110 /* ZLPhotoBrowser.h in Headers */ = {isa = PBXBuildFile; fileRef = CCD9A6D58A4EE3EE6FCA29C9286D1E03 /* ZLPhotoBrowser.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4723320357D0EA504D83E69BBCF159D6 /* ZLPhotoConfiguration+Chaining.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72C123574F2C4696870CD2220CF65D41 /* ZLPhotoConfiguration+Chaining.swift */; }; - 474B94BF4B12B3168F0A330F9858BAD9 /* DDSwitch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DBB59FA98EC126FCE887FBFDEC9DEEA /* DDSwitch.swift */; }; - 475A2347C2C908A8DDEACC4C98C0C388 /* MJRefreshFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 93060351B3270F33EB38A6F750943D39 /* MJRefreshFooter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 477BADEE897F3C0AA214683C37B50980 /* DDFontKit_Private-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E02C3234AC4A04B5FAD9A2F0ECC740A /* DDFontKit_Private-dummy.m */; }; - 47ABDC62006F547E265B058A1D70E8BA /* RequestCompression.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD217346865E975A6F9491C83FFED705 /* RequestCompression.swift */; }; - 47CBBEBB4822A8F690563BFA73578324 /* MAPointAnnotation+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 0037012C72DCE4FCB577AB16DD9DEFAC /* MAPointAnnotation+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 480514F620746636B9FBE06238DFBC7D /* RefCountDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05CAA3162F254BAD2562D6C24FC25B43 /* RefCountDisposable.swift */; }; - 484940673D2B49420F4CA31D609A52F3 /* RxTabBarControllerDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = F79010A235833C1FD58A192FD49B55FB /* RxTabBarControllerDelegateProxy.swift */; }; - 485E36DF4F23C0A4D9B9556B23204C26 /* UIApplication+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FB11CF33FA9DC83DCAB3BD616563454 /* UIApplication+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 48C8179391555746A729FA6483B7EAB0 /* JXCategoryView.h in Headers */ = {isa = PBXBuildFile; fileRef = EB879BFE0858FF849CB21B097D093F05 /* JXCategoryView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4980DADD831068300F504E6010C54A08 /* DDAutoUIKit_Private-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 50CB07612A7637E2E0500A966BB67134 /* DDAutoUIKit_Private-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 49955951CE0578AA45BB0397E425E243 /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54ADBCF354548A1BA32238F2EDEDC39B /* Disposable.swift */; }; - 49B34E046084601F4A21F26D84FE832B /* _RXObjCRuntime.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D7AC1021F0A3A36970B9F4952ABB573 /* _RXObjCRuntime.m */; }; - 49B721C8B6C6DD55122848FE9E1B5527 /* KingfisherOptionsInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BEC256418FA5FC987A022D0065F2333 /* KingfisherOptionsInfo.swift */; }; - 49F7DAB07DB916955ABAA7248DD15E55 /* AsSingle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17AF82E5033417808ED4E3CB26CA7030 /* AsSingle.swift */; }; - 4A48E82F99ED27665CF929386AB1FFC6 /* ZFPortraitViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = B50A67F6E3A42FB4D8E1ABBCF32AA3D6 /* ZFPortraitViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4A557479ADC816F4988D9804DD8DB891 /* KFImageOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C50AA79FC6A504C48ECB57F30434619 /* KFImageOptions.swift */; }; - 4A5855A5E58F24A944BA6D1CEBDC5BBC /* SDWebImageError.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B50859502D1B19867D7EA919623A0CE /* SDWebImageError.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4A73E66A0348DE3EB7FACE0F8FD7DA61 /* ZLPhotoUIConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F56CE93FE0E31FCB7FD04AB533C8969 /* ZLPhotoUIConfiguration.swift */; }; - 4A8438BA1927768B5ABF3C58D9B8E25C /* DDToastKit_Private-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B69714D0D7BBF893C7D33E4E0F55581 /* DDToastKit_Private-dummy.m */; }; - 4AEEFC52D4F0E173563EF56901855257 /* ZLClipImageDismissAnimatedTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41BBD956A0964B5501BF55369789D7AC /* ZLClipImageDismissAnimatedTransition.swift */; }; - 4B49CE5C1DC026887F1AE1892639AB4B /* UITextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 298D50B471F0C279F9EC1641B115388A /* UITextField.swift */; }; - 4B541C41E90C260270E635F42EDC9B7F /* UIImage+ForceDecode.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F922C5772AFAFDAF4D4D9869570F846 /* UIImage+ForceDecode.m */; }; - 4B717036F93677425DDB9682C705B644 /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 91314E62A67C82ADC8510FA97AD85E98 /* Alamofire-dummy.m */; }; - 4B8ED5D956B3C820B03A1535782FB7D9 /* DDMATrackManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E51793301441FE9DF9C1E68A2C0548C /* DDMATrackManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4BA5566CD5E802D5B7297AA8BA9533EF /* AnyObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E8CB968364EE8AE8F32D4A3B8CE29FE /* AnyObserver.swift */; }; - 4BB281256AF4C43F5356440D9BCA56AA /* JXCategoryIndicatorCellModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 808B2598E2CCBC3664D834D4D7D9D114 /* JXCategoryIndicatorCellModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4C0F74240FF8C9D4E1C9FD82857A2EAD /* Reactive.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF46B015D6EE97CBAE40564A92482A61 /* Reactive.swift */; }; - 4C12DE85147AE7B743C1FBF85A6B4304 /* JXCategoryIndicatorRainbowLineView.h in Headers */ = {isa = PBXBuildFile; fileRef = 886F8CD6F764BD1E1292C4FEDF5E0048 /* JXCategoryIndicatorRainbowLineView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4C9E9BFE3A0518B96F9C2E64D857B212 /* Infallible+Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18372F0E39BA4CC4FC036FCD277A0656 /* Infallible+Zip+arity.swift */; }; - 4CFBCFBE0205E6688F8E47137BD45C15 /* DDBaseView.h in Headers */ = {isa = PBXBuildFile; fileRef = 734FF49A837C1D2DFC54ECD58688A5E0 /* DDBaseView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4D2F14F1767762AB4AE766D7516197CE /* Observable+Bind.swift in Sources */ = {isa = PBXBuildFile; fileRef = 488BEEF5FBD9A1384AC69B6BD17A49AD /* Observable+Bind.swift */; }; - 4D5DEF06B4F581C09ECD424AEF7D0BB3 /* UINavigationBar+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D0E3B0B299F515EBA3AA57CBD00627C /* UINavigationBar+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4D6B1F20A558A51499DF08D824AF1DD0 /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = 831B20D33413BC1CDBD0B53824B21FB9 /* Event.swift */; }; - 4DD86C40D4F594076831DF90DFAF5961 /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B6FD128E219CB7AC00E58EF65D2391D /* MultipartFormData.swift */; }; - 4DF304D36C33016666F6F057364BBCB9 /* CompositeDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B24C7137909F5E10723721E632E326D /* CompositeDisposable.swift */; }; - 4E1B724F70879610E56C69765A0E2938 /* UIScrollView+ZFPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = D8CB5B60C5127068B6918F908DE32948 /* UIScrollView+ZFPlayer.m */; }; - 4E2E95B4812870A973F2D0FCECF307AA /* NSData+SHA.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B17B65CD8929CA3A776837F60DAEBBB /* NSData+SHA.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4EAB3D85D6961144A09F0BA9D1A312A1 /* AnimatedImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BA17B720CE0D0878393E1E7FFA6742A /* AnimatedImageView.swift */; }; - 4EE30E33D02A0D59F317A9CFA0009B01 /* SDImageIOAnimatedCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 90C47C5148117C497AD2C834C048C21B /* SDImageIOAnimatedCoder.m */; }; - 4EEB05C55B66338EEC5261DDC2B1A341 /* ZLPhotoPreviewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35925EFC5A2D9B134E35FD5C91D44C6F /* ZLPhotoPreviewCell.swift */; }; - 4F338A6C52C35B05E8A873571A9815D7 /* IQKeyboardManager+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF7D6ACF48268BFF03CB452E3FABA2AC /* IQKeyboardManager+Internal.swift */; }; - 4F50E550117789F0699F8F37CFA9BA6E /* JXCategoryNumberCellModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 36BE6C0FA484D00F8769D414928C7FFC /* JXCategoryNumberCellModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4F59B6CC1D4B3EFAA25F42D96C22FF40 /* _RXDelegateProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = A5C1B76BD0CBB68330CE7E8EF4AD3313 /* _RXDelegateProxy.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4F96FDE3192A3D4E05EFBB752EE656E1 /* SynchronizedDisposeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BEFDAF0F735B6BACFAF63C0B9E3F1F0 /* SynchronizedDisposeType.swift */; }; - 4FA542506516B8922F8AADE85C136E1C /* JXCategoryIndicatorImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 04043FF7666CD2B69C1BF2F016A8C641 /* JXCategoryIndicatorImageView.m */; }; - 502EA6DB92E0383603F215C479FA7D67 /* UIImageView+DDWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = FAB3C1ED4D9D5D6192E16F83E28CD1F3 /* UIImageView+DDWebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5041212B7ECFB8678390AC149F12B0A4 /* RxRelay-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C5ED2057E6AFCBF4956A0048C71B1242 /* RxRelay-dummy.m */; }; - 50520A6CAB33DD6A5F11562B65CA78A3 /* JXCategoryTitleImageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DADE9080F80FDB7136837A59CE9C0CA /* JXCategoryTitleImageCell.m */; }; - 5091E0944D55EF504E05485E71616DDA /* BehaviorRelay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 479A09A88817B87778CE37DBFED9DAB6 /* BehaviorRelay.swift */; }; - 50DD8666AF1EAA8E711927A3EBC87508 /* MJRefreshConst.m in Sources */ = {isa = PBXBuildFile; fileRef = E9B4A66A0B2DEACD89817ACB5C1C2232 /* MJRefreshConst.m */; }; - 50F8DDD0A0560477DF0F19D80945E798 /* UIViewController+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E131492C4734358B75A1E007DF069D4 /* UIViewController+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 511B522F19916DD68AF4EFED285AF968 /* IQUIView+Hierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51A496931111C24D321E845AA62558C5 /* IQUIView+Hierarchy.swift */; }; - 512135578BA3F99913265843C0638642 /* DDBaseScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = F9C8B8D6AB1298128BC2D1FB830BC314 /* DDBaseScrollView.m */; }; - 513CADFB7F193445B353B7320A624FBD /* JXCategoryIndicatorCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CC8558B336BC45B6ACB3389AFF5BD8A7 /* JXCategoryIndicatorCell.m */; }; - 51460A037F3BD4D23EB161ED5D9F279F /* JXCategoryListContainerRTLCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F3BFABE11A71DB08CCAE2535FA7B07B /* JXCategoryListContainerRTLCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5147BF32CAD32DF305EEA0FED27FBA35 /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC4C3680FD2099E89158AF151AD3F178 /* Zip.swift */; }; - 5150F8B34780E4E3DD7CF2219EDCC4C2 /* DDKeychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8498143BCF31D1D2F1C61D52BE380805 /* DDKeychain.swift */; }; - 515AAE754CE0C0504AEF12054A24264E /* Pods-OrderScheduling-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A0031ECF94D34F1497602F4B0794DD58 /* Pods-OrderScheduling-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 516E3095B8774B6FA0FC6C672ABE4B57 /* UrlLinks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 960B877ECE016730DAADA8D1F864E36E /* UrlLinks.swift */; }; - 51734B077F9900737E1E59F4E5D6CAFE /* JXCategoryIndicatorParamsModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AA0C096E2B3D1663A3AEF9E4D752CCE /* JXCategoryIndicatorParamsModel.m */; }; - 519BC1C0446F6F9BF8E934A7B3FBB42E /* UIImageView+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = E140E38B445037E6F0E4FDB445C4A4B2 /* UIImageView+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 51C7DF23678C1593037C5F583E993210 /* Binder.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF38C907BA4363B405B06B2D5BCC7B3D /* Binder.swift */; }; - 523D1B0BB7DE56448B35661435267EC0 /* ZLInputTextViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AC12BC2C4E4FD3635A2E297A130D205 /* ZLInputTextViewController.swift */; }; - 523D1B7E3260356560241D0C2A66A49E /* JXCategoryIndicatorImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8998A3652B29AA8449919D32DA10F18C /* JXCategoryIndicatorImageView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 52533243FC2524EA3BCAEC5C85A5B598 /* GraphicsContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816B829CBE7F47EFB4BD6AB66C05EB4 /* GraphicsContext.swift */; }; - 52563FEE66AB6AC291788E02FEE56DFF /* SDImageAPNGCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = BD6B267BB1F4635FC5329AAC62A54EF4 /* SDImageAPNGCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 52AA99114795E96612515F4C16B3D033 /* Take.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B12CAB104DDABADA7B3FDCFB0B03F49 /* Take.swift */; }; - 52E0B9ED085280B6B8F67219F7EA366E /* DDBaseTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EF742F5D2372049B5C01F37A3A104D0 /* DDBaseTableView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 52E7EA351B5EA7DE9BD235418C0484E4 /* EKPopUpMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C03FB8C96325BC93F46E53E75B31B01 /* EKPopUpMessage.swift */; }; - 530C1E6E8D8210BD44D1C17B9A089BDF /* UIImageView+ZFCache.m in Sources */ = {isa = PBXBuildFile; fileRef = A7910195E2BA26BBDC64BC79D7365557 /* UIImageView+ZFCache.m */; }; - 53136C9E69D0BA58AD108FF73345FB79 /* RxPickerViewDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADDB4D0E7A405AF52EF8469AB5B04E9C /* RxPickerViewDelegateProxy.swift */; }; - 532183013AEC102A1C6A27C1B0967A3A /* AnonymousObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4473979D995416C875C583F2011D08 /* AnonymousObserver.swift */; }; - 53693C4A79EC833BC3BA47F4CAAC9E44 /* ClearMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DDD4360E28D83A8A2AAF2BEA9F751CD /* ClearMessage.swift */; }; - 53A8449A2AB1430B1001ED45223DCDCA /* DDBaseCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = BB06AB8C6AB720492CD7C07FB2FB1E93 /* DDBaseCollectionView.m */; }; - 5434354C379A1C85A849409F278C7BC0 /* DDMutableAttributedString.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68554C3CC98B485FD1D853F06B7641E9 /* DDMutableAttributedString.swift */; }; - 54440A2A0E9BEB8BA02D62F516C3373D /* CGImage+Accelerate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27E45414B8C8E3E7696F22281E6A9EB0 /* CGImage+Accelerate.swift */; }; - 545F35FD477093FAC4E65A6357113C53 /* DDUIViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1436DF22306A910DE634B3436397A6D /* DDUIViewController.swift */; }; - 5493F488DA8371A8D85F28372DF306CD /* StartWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 135A0A5D3367ABF20DAFEA47ECC806F9 /* StartWith.swift */; }; - 54BFDD82C3BBC603F1BA81AA8E103EAD /* ZFPlayerControlView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1187BCC044B894F6E3491ED9B5C26252 /* ZFPlayerControlView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 54C7634794172F98C306F0B3597D5F8B /* ZFPortraitControlView.m in Sources */ = {isa = PBXBuildFile; fileRef = 056A3AE606265514F6884996EA21C6C6 /* ZFPortraitControlView.m */; }; - 54E7ACA4C129B78296C039BFE5E61BC6 /* ZLGeneralDefine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91001D6B4E594E8E7A44FCE6646FBBA5 /* ZLGeneralDefine.swift */; }; - 550EF3A9F8FAB1F87221E9FA00C72B76 /* KingfisherManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26A1FD01AC8E602271BF3B13311D314A /* KingfisherManager.swift */; }; - 5551815A96AC2006ED7008C9DD3F8F56 /* UIImage+MemoryCacheCost.m in Sources */ = {isa = PBXBuildFile; fileRef = 41899BEF290A56E1759DF59E6A5F3AEC /* UIImage+MemoryCacheCost.m */; }; - 55709C176E85E0CC725A7F1CED037C8C /* Infallible+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = A18FB371493DB8CCF5ADBDF82544101A /* Infallible+Create.swift */; }; - 55736FD6531A0F1C3B1FDB92244D02EF /* Array+ZLPhotoBrowser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6431F850ACA34F73EF33CFE881026D97 /* Array+ZLPhotoBrowser.swift */; }; - 559C39AC9FE303F8E073EC5C205F3C58 /* DDAlamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD64314C379E7F3EB5BD31238B02809F /* DDAlamofire.swift */; }; - 5619747115BC45D8EF9E0AFBFB7754AC /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = A748A668D69708CD89D222EE43A3D1C5 /* Signal.swift */; }; - 564B8B68C28EEC9BC89FDBB79C917D40 /* ImageBinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43FC4A6E4088C25584AF3B2FBD99A659 /* ImageBinder.swift */; }; - 564F74F04646D901439FA92F30873B9E /* SharedSequence+Operators+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 184CCF347EDC114B567A87699F4C22F0 /* SharedSequence+Operators+arity.swift */; }; - 5664FEDF3A5F6FBD52B9B19B2EE7360C /* SDWebImageDownloaderConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D8F67E70271E3E66BC0DF5A51A979E7 /* SDWebImageDownloaderConfig.m */; }; - 568DF1ED8C470080C126EA9D00448949 /* DDAttributedString.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68A2ADFF5DD39F278ED312E5567831D9 /* DDAttributedString.swift */; }; - 56D33A6E86B978BD0A7C66442E2D8B52 /* IQKeyboardManagerConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A37E45618A0FBC62D6154B91D9F0499 /* IQKeyboardManagerConstants.swift */; }; - 56E6249ACC30A676C07E28C381EA77C0 /* ZFVolumeBrightnessView.h in Headers */ = {isa = PBXBuildFile; fileRef = 11E9E480C1E54BC90F57D2CCAB49A5FE /* ZFVolumeBrightnessView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 57096ADF117830FDA4E842AEFAD07BDD /* EKAlertMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A63310BFF4BCEE45A37FEDC5464D8C8 /* EKAlertMessageView.swift */; }; - 57246E353A1964D160A994B8197A9615 /* UIButton+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = A01548D6006AA25237AB32796B4A5291 /* UIButton+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 573E712B6BC3B0962DA57414A6225ED0 /* SchedulerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45C4E92B540566B16528071BAB185B4E /* SchedulerType.swift */; }; - 5792C39EA7AB9C9A3BD746887E4CDD36 /* TYCyclePagerView.h in Headers */ = {isa = PBXBuildFile; fileRef = C9E8038FB550A40B59487E96C2C014B8 /* TYCyclePagerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 57B80CE67B76B0DFBD48E90021B939B5 /* Infallible+Bind.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B77C3205DCCF10BC1C817714EC01462 /* Infallible+Bind.swift */; }; - 57DE5931B4D670D16C3FAC5726F7C5BF /* UIImage+Blur.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B1E6C9CDECAB733FF7FAEDC6288CE4A /* UIImage+Blur.swift */; }; - 58236AA8C078BA049D0224B773054304 /* JXCategoryTitleVerticalZoomCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F30E63CC60F0D2B3EE802DB7C288A3FB /* JXCategoryTitleVerticalZoomCell.m */; }; - 5894B57DDCD97FA97150174C4F8C9741 /* ConstraintDirectionalInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = D878B3E61759AFBA94E2AD2BA556C63B /* ConstraintDirectionalInsetTarget.swift */; }; - 58A9766AA4CAEEC214180B350E74FAC2 /* UITextView+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 369282BFFA17BE577950F2C29FB6A67E /* UITextView+DDCategory.m */; }; - 58FBC07F1AB57EE09E9E2283BAEC5C71 /* DDFileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EA5FCCEDCE228CB6796995E1D0BFDE /* DDFileManager.swift */; }; - 590659560832CE55F1066E36EE26F4BB /* UIView+Animations.swift in Sources */ = {isa = PBXBuildFile; fileRef = F36D81DEBFEB19B8FEFA60597AC42595 /* UIView+Animations.swift */; }; - 5939C34E4D2E9A26E09C2334A50D4D39 /* SDAnimatedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DA0F53808B8C0AA239AAAE7361A8539 /* SDAnimatedImageView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5943D1EA324ADEC89AA918C05AAF5FC2 /* ApplicationInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DFBA462E81FE469A3880642FDFF4ACA /* ApplicationInfo.swift */; }; - 597293228A7D2A435FBA04579B65C915 /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86B2A4FF9C2A0A6FE200F8903E17B272 /* Constraint.swift */; }; - 597D51FE18D7474F286ABA20D6B68E0C /* DynamicBlurView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7946D60EA3ECE62330D28B5A8015DB98 /* DynamicBlurView-dummy.m */; }; - 599A18B882F08DE626F2B4BC6FF8388C /* SwiftToast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29388440526D9ABF1075B841888D72C1 /* SwiftToast.swift */; }; - 59D42B6A518B9EA16194171DBE454F94 /* RxCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CFC02E1D254D0A828F4F0EC3F8A5E5B /* RxCocoa.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5A18E4F1E797987FD46675D6E1A9232E /* SDWebImageDownloaderConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = E13FF61B48E4C0D427DEE769C21B81F7 /* SDWebImageDownloaderConfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5A2C1631C66120F95575B215D09760DF /* DDMAGeometry.m in Sources */ = {isa = PBXBuildFile; fileRef = 7642B925B000700A66BF2CFEA93C27BB /* DDMAGeometry.m */; }; - 5A77C9FAE382A7344E03BFF956E92709 /* ConstraintDirectionalInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8519064FA6E642776DCAF0CE14AAB2EA /* ConstraintDirectionalInsets.swift */; }; - 5A8B90BF77A2238F3FB7A263DD06E6F8 /* SessionDataTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 579C1BFFA581C17D7770FAE3ECACA589 /* SessionDataTask.swift */; }; - 5B61B135DCE322C883A69872A356F596 /* DDBaseNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C36E70494C84153E00A9D5A545FBD11 /* DDBaseNavigationController.m */; }; - 5B9A7DA0B8A1CD1866EAD649573B956B /* UIViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A63C95CEE4DC15C06CFE92356CA3CB2 /* UIViewController.swift */; }; - 5B9B3869CE36800618F1D641E9B002F5 /* MJRefreshFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 653B130E92D57161E795B844601778F2 /* MJRefreshFooter.m */; }; - 5BB847676A6F2EC8B5A779AEBC5EEBD8 /* RxWKNavigationDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37AEFD8B4129F6504C117E16FCBE1286 /* RxWKNavigationDelegateProxy.swift */; }; - 5BE1573FD25A25AF030B0BF733677457 /* Cell+ZLPhotoBrowser.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC0709F953C6E1E00E1B48C994DCA742 /* Cell+ZLPhotoBrowser.swift */; }; - 5BE82F6C3C7AC29DE599B84D36577663 /* UILabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B9D719A08ECCEB67D4ED287E12478CE /* UILabel.swift */; }; - 5BEB2A988FCD05A226349FD9C4BC4619 /* JXCategoryView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 42A1A81F83BFB532AEB5DB4CAE2362E4 /* JXCategoryView-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5C885F0F46D1C0BBBAB4A0833F1B188F /* KFAnimatedImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8169709AECAFCBC66E7B0C5E1AFDE34F /* KFAnimatedImage.swift */; }; - 5C8D180662E74F979FE9FA3DC5BEC582 /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49C93A93996A98CBFD6D8CF498430BCE /* ParameterEncoding.swift */; }; - 5CFCDC35057A3E9FD4B24DD4CBB161AE /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C03DF56DF571ECFC414A1E4DB5148D7 /* UIImageView+WebCache.m */; }; - 5D2DAAA0BB64E431F68C78ECB131EB93 /* Completable+AndThen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3715174F3A8A21F2856A81720D2A4629 /* Completable+AndThen.swift */; }; - 5D3023A3FDDAEC5C7D316E3C88815548 /* RxTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8E0A7A013E79187646EA79385AEF98F /* RxTarget.swift */; }; - 5DA9D5D4FE27BA93CE470741D4A1D202 /* IQKeyboardManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 214E2061DBEB30C377E88C37A1745E4A /* IQKeyboardManager.swift */; }; - 5DC4E3C2A738F07C2943D5C49C79BDA4 /* EKImageNoteMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D5797C919C52BCF6845A7B532866584 /* EKImageNoteMessageView.swift */; }; - 5E228FEF4C8DAD374328D4560B129417 /* DDDateKit_Private-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = ED9A02E76946E33682F5D3514A1B2CA7 /* DDDateKit_Private-dummy.m */; }; - 5E4348F11992D4F087ED9E6650AA384B /* HistoricalScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFF2CDF0A1C46CCC62AAE0924ABF1C29 /* HistoricalScheduler.swift */; }; - 5E7DBA263B48BDB53880AD16170C9E99 /* PrimitiveSequence+Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEAE6478224C9C58CCED01B7D5EBD95B /* PrimitiveSequence+Zip+arity.swift */; }; - 5EFB9B488300A7396D40C60E2ABB5CEB /* SDWebImageOptionsProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 2817D92C2BEAFB54CF084528084DBBCC /* SDWebImageOptionsProcessor.m */; }; - 5F178DC2C4D71599481251FAC75742E2 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = D7D5AE346DB5672BA9E2CB1469B9C858 /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5F2ECA17D03BA273DCE3919C2968D778 /* Multicast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26BB5F61F8863E99DA27C4E09C51050B /* Multicast.swift */; }; - 5F41ADDEE1A3170476DADD035BFF8DAB /* ZFReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F74707FBFB8CE8AC92B29ABAE7450F7 /* ZFReachabilityManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5F73068079D791AB651DA5F0563C5EB9 /* IQBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 618B21D51E022FD548164F067A879588 /* IQBarButtonItem.swift */; }; - 5F8A56FB7C29C774B9B15A2EE33C3F2E /* ConstraintMakerRelatable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61F7EFB98DBCB896A8D8AC970EE5472C /* ConstraintMakerRelatable+Extensions.swift */; }; - 5FEB0A58659C60C0B299319EEB72E290 /* NSBundle+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = BCC8AE7A78DD94BA4E3B714AE007DCA6 /* NSBundle+MJRefresh.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 602CC4A58ED9B538AFD8A04290F44C75 /* BRPickerView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BC3172E9B17147866900EF13AD321BCE /* BRPickerView-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 608E5CD7CA96A3E486C33D9F312FC900 /* MJRefreshAutoNormalFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = AE77F298C5C64AD682EFE5F3A58D8E4A /* MJRefreshAutoNormalFooter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 60EF2DF520F1164BB293FB035B4F965E /* UIView+Responder.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5FBF58841F12B52E17EB40D93DDB5A7 /* UIView+Responder.swift */; }; - 614EE654E34F468C46CEE0B7A7871AD4 /* RetryWhen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F19601F920B1B3224D2D2242CA9FFB3 /* RetryWhen.swift */; }; - 616796AAE5C08649C603637718A1FB60 /* Runtime.swift in Sources */ = {isa = PBXBuildFile; fileRef = F975F80BEF4FB7FC7F8A9AF822B4F520 /* Runtime.swift */; }; - 619FF05D3ACB3E9D89C3798588D72EC2 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2FD649435E033A4BED2589387337466 /* SessionDelegate.swift */; }; - 61B5D7DACF71FABBA2A23BC96030639D /* DDPersistenceKit_Private-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E9CAFFC5C0A595A1E9F2428562242FE5 /* DDPersistenceKit_Private-dummy.m */; }; - 6210A5E8C94D9610DD9326F3F053E236 /* EKTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEBBB5D23034F1AC2583F3353DF70EB7 /* EKTextField.swift */; }; - 62643C2B0784DD59DA7827A6E98164E4 /* RxTextViewDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66950FDAEE4C42AA97440D86062A61A8 /* RxTextViewDelegateProxy.swift */; }; - 62645F034EC4123B63B4EF816CA13844 /* SDWebImageIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A8BE87DA95CA06EDD149CEC4DD022EC /* SDWebImageIndicator.m */; }; - 62E03A7C90AC5E5B1D0112A6CC78F131 /* NSBundle+BRPickerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 983C6C82824565D186F2DE43B686B581 /* NSBundle+BRPickerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 632C96E0B7AF101CD955F4311CDAF91C /* DDUIPanGestureRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 148C29FA0CE1ABC35CD096724D64A5E7 /* DDUIPanGestureRecognizer.swift */; }; - 639859131F5B6B971A6D5F13570E2E5D /* EKAttributes+Position.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BEA970F06657F2334B42BE2FFFDE5F5 /* EKAttributes+Position.swift */; }; - 63A77C21EFD53EA8A7E3B79ABF59E2F7 /* DDBaseView.m in Sources */ = {isa = PBXBuildFile; fileRef = 97CBA806FC564372E2C7B750AF8C0D8D /* DDBaseView.m */; }; - 63C2C57FB68436805B347EE05A1660FF /* Generate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3427CC32FA757BD5490C584C308E20B /* Generate.swift */; }; - 63FFF49598498CF8C2ED679A60632466 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFEB968189404DCD74B75448AC8B4080 /* Request.swift */; }; - 6405B88F00699FB27D556521FA391E9B /* ZLThumbnailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3850B517F9DE77FBDE62F3FC235B71F /* ZLThumbnailViewController.swift */; }; - 64B8DC5A305B04F3DABDCF8B0281715A /* UITabBarController+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 04D353801D36CAB10F1D432D2B00D371 /* UITabBarController+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 64C3041F08A2B870F8EE53C9DCF2A5AE /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D479A93404A798DA861ABBD79FD2E5A /* UIButton+WebCache.m */; }; - 64E217B3FE62EEA10B5EB992A7B2435D /* UIActivityIndicatorView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2E74D7F078E0466B11691D964E4AABB /* UIActivityIndicatorView+Rx.swift */; }; - 64E2F5A967CEFA0D86EB3C9D18B02248 /* DDUINavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E41C71C88721FCDB20ED598752F8C99 /* DDUINavigationController.swift */; }; - 6526EAD8B470F52119D2C453861C687D /* DDBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AFC088A48A1A3668B42821D9FAC80DD5 /* DDBaseViewController.m */; }; - 65393DFEDA642FBE76283D75C070E00B /* ColorUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = B00B59E18DAA7669CDAA6F2AD3C73FD1 /* ColorUtil.swift */; }; - 6556CAFF24D92AF5238AB1C304E908E7 /* ExtensionHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E8E1583D64690269DB3A220AB64E28B /* ExtensionHelpers.swift */; }; - 65678E17B7F7748CD01C16053354C6F8 /* MABaseOverlay+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 3916FA9DF3B273C25E7A7E90AFF8B94F /* MABaseOverlay+DDCategory.m */; }; - 659075391B642E87AA542B9F3EC30173 /* SharedSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = B10E4FEB83CCE9DE54FD1F4B7AE6ACAD /* SharedSequence.swift */; }; - 65C2BAFC8CDDCCCAD8B2DFABA4016D6F /* ImageDataProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C3109C8F1654822AD1777E7B0D9AB6A /* ImageDataProcessor.swift */; }; - 65ED6AB935E11F8E9A22060F171544DC /* DispatchQueueConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 418F9B96060DF5FBA16BDB1166B19F5F /* DispatchQueueConfiguration.swift */; }; - 65FBF2652959C0C03F5BEB1A97949DCF /* Protected.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABE6AF3A01C8A4AFB4218FE6F9F11853 /* Protected.swift */; }; - 6601F5C3344A2030290917F15C108641 /* Window.swift in Sources */ = {isa = PBXBuildFile; fileRef = 865E5F8F5226DEAD3F9354CEF97CC836 /* Window.swift */; }; - 6612615053F5D866B16713B28DEEC8DC /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6304FE730A0B040C2ADB8CB9C0DA30ED /* LayoutConstraintItem.swift */; }; - 662D8B722CE76FE956E05768FD3ED3B0 /* MJRefreshComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 177D86724B93E0FCF0D92988AB516F08 /* MJRefreshComponent.m */; }; - 665C707285723F3A68DEDF48EB6117F7 /* DDBaseTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B3CB74D09971841E30AB45461B702B6 /* DDBaseTableViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 669426523C46BED22DB96FFC90045F60 /* SDAnimatedImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 49BA399F21471B5CB36619A7E488EB11 /* SDAnimatedImage.m */; }; - 66A4D5DEBBA734D31FC0052BC438A63C /* EKAttributes+Animation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C408382CB10B497594A402E6EF66AFD7 /* EKAttributes+Animation.swift */; }; - 66A90DE49D5D62A6B8B93B1BEB6BB0E6 /* JXCategoryImageCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F77844061B4BC6CBECD030C500BBD06 /* JXCategoryImageCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 67361CCD8BA6B13F5AFA500684267561 /* JXCategoryViewAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = CACC29150612037ED48E79B9F8473318 /* JXCategoryViewAnimator.m */; }; - 6756625F8543CC1FB1E3CFB36ED27D46 /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 641AA47CF864C1D4AD901A529A77C4E4 /* ConstraintDescription.swift */; }; - 67613012FC19662F5A1A452C9DFD7AF3 /* EventMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF90DCE6C8DF4E822D13B2FD0A5552FC /* EventMonitor.swift */; }; - 678E3ECA55B06B72144E0F1FCB7792D7 /* IQKeyboardManager+UITextFieldViewNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FDEE7544DA6F949CFF94909E8F7BD5C /* IQKeyboardManager+UITextFieldViewNotification.swift */; }; - 67F2E90F42B5116F653D1FCC9C2E9D4A /* PHAsset+ZLPhotoBrowser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4627947125DF147BD8BB1B74E97E757B /* PHAsset+ZLPhotoBrowser.swift */; }; - 6819E936EDDC5F64E03965DDA16F6EA2 /* ZLProgressHUD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D2D6F1D0DC3F2B9368D6D1917F7215F /* ZLProgressHUD.swift */; }; - 685297AE4AE28A8EA07BECA639E313E9 /* DDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DEFBC6B3BC41B3EFEDF60E4155765E1 /* DDView.swift */; }; - 68B4FCC1E1A2735532B81982ECC9BE5B /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84812DD20135F08C808375B3A1D71106 /* SessionDelegate.swift */; }; - 68C20F65E3110735F394C2D1E0E60AC5 /* UIImage+MemoryCacheCost.h in Headers */ = {isa = PBXBuildFile; fileRef = 24CB2F3041D8659BA7302393256B9672 /* UIImage+MemoryCacheCost.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 68E3BB3C139447BA9A82E53CF485909F /* SDImageCachesManagerOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 27A084BC528FABAFAD9D6D01EA8A4143 /* SDImageCachesManagerOperation.m */; }; - 69628B06AF6EDF37ABECD410CCFF53D7 /* SwiftEntryKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67023A0C29F65A53F4C7542F092344D9 /* SwiftEntryKit.swift */; }; - 698D4BC94388BEEF0696C5F30A549DAB /* RTLManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F2A5B4E0766288D3F438D9D9C313CD5 /* RTLManager.m */; }; - 69C303549B8C8DC6586AC4D570FAD12C /* DDBaseImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CD68D27706669257C28A28DDD646C89 /* DDBaseImage.m */; }; - 69EC7466EB3C133CE0D82257EF336100 /* ServerTrustEvaluation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35B18F6196E9FDD3EE1EAD170B0BF2B7 /* ServerTrustEvaluation.swift */; }; - 6A3847647FCA85BD47543ED73E4E8B8C /* SingleAssignmentDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F83D993271FA1E68D39B8CE86244EAAE /* SingleAssignmentDisposable.swift */; }; - 6A476007EF6D08B47938FDB9EF35BCDA /* ObservableType+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 693E95377E489FBC2A570B8A5132231C /* ObservableType+Extensions.swift */; }; - 6A6F48CBEC40D32D1FED610A00C2CB8F /* ZFPresentTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 995060076AEF261DB00EA9F991ACA5B8 /* ZFPresentTransition.m */; }; - 6A96B599CEF23FE690A56C0D3CF277F1 /* Disposables.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBC6E4217A7A53C6E00E095A98CD7F60 /* Disposables.swift */; }; - 6B0790606C8DB29CABAC53C2DEB4982A /* Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDA833FD0597BF9701781FFC8BDA8715 /* Create.swift */; }; - 6B354D42839B601C9DEFD984415411EF /* DDControlsKit_Private-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EBB9D79C4126F95ED0CBA0F3A9170C7 /* DDControlsKit_Private-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6B47753CA282E9B3229C1D8089F00203 /* UIButton+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = D67E045E83C23CE19EE0D2D96B9E2AA8 /* UIButton+DDCategory.m */; }; - 6B553F2B3704D9BD7FF7FCE04E403CC1 /* UIFont+ZLPhotoBrowser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 341025A3E2F61620469E370B9D764225 /* UIFont+ZLPhotoBrowser.swift */; }; - 6B66FA28308AAD03CF48491A2156DBDE /* SDImageHEICCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B149A2E0D291A7392934B51EA8DD0A2 /* SDImageHEICCoder.m */; }; - 6B99BFFDC604E20213188FD1672F7692 /* Single.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3BD5D11B5CB6A2B0A6CB9C123780623 /* Single.swift */; }; - 6BBB8F72F2FC1455E6D2B80067068144 /* CPListItem+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 218E425ABD782C7C3E7EF8315D9CDC69 /* CPListItem+Kingfisher.swift */; }; - 6BBBC6A48B32F57D19A97FEB3FB866C9 /* NSURL+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = E2DEFD9CA0EEA8583343465F08D8408F /* NSURL+DDCategory.m */; }; - 6BC93A49B7722F929EB15D043F57ECDA /* NSMutableAttributedString+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = F1333F5272D4B2B7AABF8D2C55EDBE43 /* NSMutableAttributedString+DDCategory.m */; }; - 6BCEC0DE81E072E922CE82BF2C10D0D1 /* BRDatePickerView+BR.m in Sources */ = {isa = PBXBuildFile; fileRef = FD954795EADD3272564F4494F60F7EDC /* BRDatePickerView+BR.m */; }; - 6BD973EF2D9AEAAA897F19ABE6ADB442 /* ZFLandscapeWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B882DB504FC2BA9A0E42106EA10CAC8 /* ZFLandscapeWindow.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6C1B5121359AF488ECDF2AD63A006A3E /* UITableViewCell+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE0A350B873FC7035DC492AEA003654 /* UITableViewCell+DDCategory.m */; }; - 6C2983F92070D6109B2CA8DC03796251 /* Bag+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00FA6667229E991BB2E2C29A6538EF72 /* Bag+Rx.swift */; }; - 6C3B575651FF6BCDC6907608E2F89583 /* ZFLandScapeControlView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DED4383148456821E55F74B9856B80A /* ZFLandScapeControlView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6C5602F523BBEE19D51F8D69581E8915 /* KFOptionsSetter.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB2300310A7B772468D5F440815EC294 /* KFOptionsSetter.swift */; }; - 6C716A2374DA6660793F27214D130B24 /* RedirectHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 780F1BFE689231748499BC5383518102 /* RedirectHandler.swift */; }; - 6C850BF5602E027A876A27784A160519 /* EKRatingSymbolsContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41259F35F24F3B493E70473754F75265 /* EKRatingSymbolsContainerView.swift */; }; - 6CBB8A0459051E23B564D2D128E4B219 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = CC1A6EA952868E1B1F4A942353DBE9C6 /* UIImage+GIF.m */; }; - 6CCDD8BBD40821514AC48F42628D4D7A /* JXCategoryTitleCellModel.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D78289C9AE9EC534A12E30A5AD9A41 /* JXCategoryTitleCellModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6CEA6FC42B1EBFB8EB263DDD2295BA1B /* SDAnimatedImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 6857AF4427C07FEB59ACA92B6BDF2199 /* SDAnimatedImageView+WebCache.m */; }; - 6D04BB428ED55D57D68354552C043A49 /* JXCategoryViewDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = B97908D8442FB0F858BD709DB94C4C1E /* JXCategoryViewDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6D1295F002B144E1731C38BEDF62855E /* UIImage+Transform.h in Headers */ = {isa = PBXBuildFile; fileRef = 847E7C1B061013837E3A69D5B2318B7C /* UIImage+Transform.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6D2824486BCF64BF840FC1C436C1DA04 /* UITableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1513C684FAA95B8BDFE57A3DE58BA4AA /* UITableViewCell.swift */; }; - 6D8A1EAC97E1ABC816801F06E11AEF2A /* EKFormMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A724CE453656CC7AAF03C60FA8DC88A2 /* EKFormMessageView.swift */; }; - 6D9162F60E7975B61948B1E253941FB8 /* SDDeviceHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 632E258E93284619E078FEB3A2B6667A /* SDDeviceHelper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6DDB75CE35087BF5A4E5F24C173FB0B5 /* Pods-OrderScheduling-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 439EA354473F5B1B44C857E4C3A7D7D7 /* Pods-OrderScheduling-dummy.m */; }; - 6DF8E7C3E612645CB0F3523DAC8E1F33 /* DDBaseTabBarController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B71809F121FB856CCDB8E824B5CF7BC /* DDBaseTabBarController.m */; }; - 6E588555392C32D460B05C99853074D0 /* DDMATrackManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0230928B1996ADBD4E660FF7B1DA279E /* DDMATrackManager.m */; }; - 6E79B8E1DBB132B9953B5F37A743CB43 /* JXCategoryIndicatorComponentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 92482A0DCB51192C5E68505C33EF5745 /* JXCategoryIndicatorComponentView.m */; }; - 6E81876ACD21C5A277955C72CE0C5F80 /* MATraceReplayOverlayRender.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CC0FC134317D7C5174A921D18711453 /* MATraceReplayOverlayRender.m */; }; - 6EBD3EB2E29B8A2B136B34B89B730869 /* TailRecursiveSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = B134E99290E40135CBCB7EDBB5313561 /* TailRecursiveSink.swift */; }; - 6EE3CE5E6C7683F30D2D59D0ADAC6FDA /* SDWebImageOptionsProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = DF5053DCE0FC4754ABF3BFA5A6FD68F8 /* SDWebImageOptionsProcessor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6F0E06B59AD85AC18E40EE0B1D577ABF /* UITextField+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 52E0E699C8AFAFF016391939DD51C67C /* UITextField+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6F1697BC66902A6089A108DFE1E31B00 /* DDTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC1B952FDAF2B6A98BDABB7B08F4A16A /* DDTableViewCell.swift */; }; - 6F1EC7D7C6057783745CD6C5C41EE5EF /* ZLPhotoBrowser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295B67C739D3FA7CC1836B0AED59168A /* ZLPhotoBrowser.swift */; }; - 6F39C14D3EACE69517B3F102401E791A /* DDMALocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 46232E29C2154F43BFFFAE1520C32F10 /* DDMALocationManager.m */; }; - 6F46408B20EA653BE535660788D44444 /* ZFLandscapeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E9C32CEC0958CFDF3FB4362CBB18AEAC /* ZFLandscapeViewController.m */; }; - 6F51243AC4188956ECC4583E961FA5B0 /* ElementAt.swift in Sources */ = {isa = PBXBuildFile; fileRef = F731947ED4C2E3A9E12E4662FD5BA8EA /* ElementAt.swift */; }; - 6F6324778DAEAC9A6B9C1E5EFEBBA492 /* Signal+Subscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65C8C5A374A3AFBB2B0EF46F729868FD /* Signal+Subscription.swift */; }; - 6FA29C0A343CD009CAD5FBB50810D9D4 /* DDBaseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 84F5CA2285229E33C044F20BC1E02CC5 /* DDBaseTableViewCell.m */; }; - 6FD18EAB66A2867AD9BE2F4098227286 /* KingfisherError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BE998AD8146E7E85A7CCA22DE77821C /* KingfisherError.swift */; }; - 701681C35B325B45CD0E46CF0D5471F1 /* ZFKVOController.h in Headers */ = {isa = PBXBuildFile; fileRef = D6E34F8429C02CFE78D89CA93E4DC2CD /* ZFKVOController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 708122038CA6D6697142EB3BD7A03014 /* DDBaseMutableAttributedString.h in Headers */ = {isa = PBXBuildFile; fileRef = 03D3414E7E22613A83F0777CAD861584 /* DDBaseMutableAttributedString.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 709711B731CC35DA65084FE1C1A2F73C /* X509Certificate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE796FA7679BFCE0B82C986E0EC65503 /* X509Certificate.swift */; }; - 70AC10609FB1A12D49AAF643F6DB6799 /* UISwitch+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27B5E7C065B8E43D37E0739DA791264B /* UISwitch+Rx.swift */; }; - 70AED23C9E4B7C54A57E04BB493B1632 /* DDColorKit_Private-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C06ED124531C652E7A38443F115F77BD /* DDColorKit_Private-dummy.m */; }; - 70CB725EC2D3E4977E8C55CE9EAC4D0A /* ZFPlayerGestureControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3D5CC4826AB8E011A52B66A32ECA6B /* ZFPlayerGestureControl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 71097CFC69B73A09121CA1305A5139DC /* DDMANaviManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4C5A49DFCC82BEA24EA24DA32C7EE9 /* DDMANaviManager.m */; }; - 714B1CA2AD44049A52267BE368CD4C8E /* SwiftEntryKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 48EFDAF744EAA5FEBB6A500C24870491 /* SwiftEntryKit-dummy.m */; }; - 71BACD458EFE7CF21260654449513C75 /* MJRefreshGifHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = D9015D405821BA2A645D159035072F5F /* MJRefreshGifHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 71E369AC039524E2F13AC548B3B043EA /* DDColorKit_Private-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CC5F3FCC434662362EE890B27FB3B87 /* DDColorKit_Private-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 72165416D3629B4F9F969ADA727DBC6C /* Placeholder.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8247D5D8F93669C33937301C5B2A463 /* Placeholder.swift */; }; - 721A97ACFEC77E36D1023E41BB0AE1AC /* EKAttributes+BackgroundStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD591A80AEE063F209FAF2EE3021EC1D /* EKAttributes+BackgroundStyle.swift */; }; - 72B0A8793C1F38AA19A0CD865BEE8BE7 /* EKAttributes+Validations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F0846E80CCBB02E2D1DD78D7A719574 /* EKAttributes+Validations.swift */; }; - 730A1A889B49E6BFED461A87F2DA2961 /* PopupDialog+Keyboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 210A24BB10A3CA89D14A6F1A180FC065 /* PopupDialog+Keyboard.swift */; }; - 731BC8F0B05F16D9E44C9EA00B22F4C9 /* Session.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD404B51F03B97A6631E148DA050A732 /* Session.swift */; }; - 735C27E021B37367E4B05F53C23C333E /* DDBaseViewController.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 82C950A22BDBB5BABA64AF085F248807 /* DDBaseViewController.xcassets */; }; - 73A9E4170A91F0F715E9E7C1F069FA45 /* NSImage+Compatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = EC4D291E74407DFFB144C84526148B9C /* NSImage+Compatibility.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 73E288FCEA27F5DEB683B074F96D0846 /* SharedSequence+Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D8C67673267733A9E988C337A527D49 /* SharedSequence+Concurrency.swift */; }; - 73FFFD550E5D834616601E46F7468513 /* RxSearchBarDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = A872EC2845D2891B06608BF8F91561FF /* RxSearchBarDelegateProxy.swift */; }; - 7409FFC5269708E4F4606C21C9DF1B97 /* DDNetworkingOfAlamofireKit_Private-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EA1FDEBD940EAE99A65CB7F5179D1C4 /* DDNetworkingOfAlamofireKit_Private-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 745D1703E1D29FD12340402A7F6B71D5 /* SDFileAttributeHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3613A096608801D6FD1BF44C98FC2916 /* SDFileAttributeHelper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 74BB85D686209241F106C05A945AF56E /* UIButton+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D3765EC2CDE2680F078D70E209211F /* UIButton+Kingfisher.swift */; }; - 751BA451DA262CF94764D22EBC4F681A /* UICollectionView+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FB2CC1CEAF09C79CDCCF063B3552A65 /* UICollectionView+DDCategory.m */; }; - 7539BFBC46E1BB8AE022CB250A405582 /* HTTPHeaders.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE1FA7991B30749BBB0F7124F69A2B0B /* HTTPHeaders.swift */; }; - 754A0CBE952892135855191BC6265397 /* UIScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ED59B71873C943FEB7A1E883A0A09D8 /* UIScrollView.swift */; }; - 757DAD9E812317B7B8FECFBD78953286 /* DDOCLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 96EC391639BC38C74935AA3468FCEF06 /* DDOCLog.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7596AB8416A0BA074FEB4D4F0EF0B137 /* PresentationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4CBD8C0AE14DFB9CB34041070E4439D /* PresentationManager.swift */; }; - 75C045B811885FBDF3FCB78F77326FDF /* SDAnimatedImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 22942CBE8FDDA86BAFE7897238368F4F /* SDAnimatedImageView+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 75E0DE66BA53B97486D0CB0C0CC76278 /* SizeExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 510F382F6C3892B46E55D5DFB10D3A50 /* SizeExtensions.swift */; }; - 7615AD04C15B5C1E8A259A80825D68FC /* UIImage+ExtendedCacheData.h in Headers */ = {isa = PBXBuildFile; fileRef = 0406F09F5AE7A03A5CD0A573CD06C037 /* UIImage+ExtendedCacheData.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7667DFBCCDA76EA0209A108FB3E9E4A9 /* DDUILabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D440CB37BA34B299E9404C60DA8AA061 /* DDUILabel.swift */; }; - 76A190B0F869A4BA61AFA27C1EB92F4B /* ZFOrientationObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = D2EE928793DF72FDD723828035BA6AF5 /* ZFOrientationObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 76BCD01DEA5DFB76E7975B68591D4235 /* _RX.h in Headers */ = {isa = PBXBuildFile; fileRef = F95089D6AAE2F56A4AE183766CCBA2C7 /* _RX.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 76EBB2D3BF0A7774F59D0C3871364154 /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B2417A6C27552AF94CEB6A7B3F347AC /* ConstraintOffsetTarget.swift */; }; - 76FFD8BBEBFDA70717385A5C74DFDEA1 /* DDUtilsSwiftKit_Private-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 469FEE30B642194D50EECEF1B3350498 /* DDUtilsSwiftKit_Private-dummy.m */; }; - 774CFF5DF8BB0D8AF40C421AC4E7427C /* SwiftyRSA.h in Headers */ = {isa = PBXBuildFile; fileRef = E53F520764ACA8A4466548E0CCDA8872 /* SwiftyRSA.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 779DFAB16470286A2ED0216508F251C0 /* UITableView+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A285BA4E44C51CDB377F338817BDE37 /* UITableView+DDCategory.m */; }; - 780B82DCFDBD9C2D7E5C92DF80FF1630 /* JXCategoryFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 0933994A0349C22C4905F18E4DA1EF79 /* JXCategoryFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7867E2730114828625D52A47C43CCD2B /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D1725DDB3E1952143F821A86C658B11 /* SDImageCache.m */; }; - 788B7DE9EE9D0619CD3A2EC07BBB8BED /* ImageDrawing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C036FCBB24E7A04CA737EF41E1E560E /* ImageDrawing.swift */; }; - 78ACEC567DE643862E2D6222BD26255D /* ShareReplayScope.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EF5D086ECA8310E1AE23ABAE87E3D2A /* ShareReplayScope.swift */; }; - 78F19D9EAA15F4779D096963F790CF62 /* JXCategoryTitleCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 78C4BAD3B0B651A85659F92B5EC00A5B /* JXCategoryTitleCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 78F42347772C57AEB0CE35F118F14AD5 /* JXCategoryIndicatorTriangleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 763B7A00E7384585CC4DF9B09534F5E8 /* JXCategoryIndicatorTriangleView.m */; }; - 791629CECDE0D6A5445563A3E0025ACF /* ZFPlayerMediaPlayback.h in Headers */ = {isa = PBXBuildFile; fileRef = 05C73D463A953B45A2781623B7CFCB22 /* ZFPlayerMediaPlayback.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 793F19320DBE5EBACB9D67FA411F720A /* ObservableConvertibleType+SharedSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E3F694548695F4C19B672C151FBF7CB /* ObservableConvertibleType+SharedSequence.swift */; }; - 794C8686B1DFD5AA5216F9165ABD8EE3 /* JXCategoryListContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 80566DF70E74961202E3D638A60FEB2F /* JXCategoryListContainerView.m */; }; - 79D547FB7599B9D84A5F5697924BC58B /* JXCategoryTitleView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0173ECE75B8B8C93840EE2421FC61436 /* JXCategoryTitleView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 79F7344C573425769AF35D858AD4A67E /* UICollectionViewLayout+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = EC0ECADC146598702C545884614FFDC6 /* UICollectionViewLayout+MJRefresh.m */; }; - 7A063BE33C5927C37F9E673046FDA439 /* UICollectionView+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = B40CABDEE2A7797422ABE98CB08C0532 /* UICollectionView+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7A7A6301711D6E6DF31091B6C5CA4CD2 /* WithLatestFrom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 409DD780B50F40EFF5872988210030C6 /* WithLatestFrom.swift */; }; - 7A852F0AF1F3E1693579BFB0EE3DFEAA /* IQUIView+IQKeyboardToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = B45E5BF8F9A64B2C7F29374241812562 /* IQUIView+IQKeyboardToolbar.swift */; }; - 7AB8E1F03D7085D0F1CF9CA55F17E9FB /* DDNavigationControllerDelegateReceiver.m in Sources */ = {isa = PBXBuildFile; fileRef = 81856247CFA175B2AED83E69B67F95CB /* DDNavigationControllerDelegateReceiver.m */; }; - 7ABFC8DDB94ABE4C0687BC981E98A2BE /* ZLPhotoPreviewSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 251A8361A153A5D0901C0796201088B7 /* ZLPhotoPreviewSheet.swift */; }; - 7B0B8A575C497874E971408584743E02 /* SDWebImageDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = D9AD4F7389BBA58001D5A859EB85B585 /* SDWebImageDefine.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7B45550C7795D7B29E6E558F00864D1E /* UIImage+ZLPhotoBrowser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B9D361F4A7582DD8F461E698C862B45 /* UIImage+ZLPhotoBrowser.swift */; }; - 7BB44CB2C08CE4C0DAA91A68CD4ED371 /* NSAttributedString+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D41315ABF3EBC774F3D78F9C202071A /* NSAttributedString+DDCategory.m */; }; - 7C2788B48E430BB0EE2223A5544A32F7 /* DDUITableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF97FF1728BE083E7BA8D4321400C927 /* DDUITableView.swift */; }; - 7C4555B4F80F91CE5F03F39C2D64D86D /* IQKeyboardManager+Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5ECD22EB9050A97679DDF7C99A1EEE75 /* IQKeyboardManager+Debug.swift */; }; - 7CA457233780E79114A0CCEC631708D9 /* UINavigationBar+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 263B33488CBD1E3F4E3B1CF228563F67 /* UINavigationBar+DDCategory.m */; }; - 7CC298CB85BBB9C814F22B8AAEF94281 /* IQPreviousNextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B1A3EAF7E0A496D0A63AB929DC43012 /* IQPreviousNextView.swift */; }; - 7CDD4BF0209AA2F717C7546D5B6BF979 /* ZFPersentInteractiveTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 59B8930947FB340B6A8F52B651A5AB8C /* ZFPersentInteractiveTransition.m */; }; - 7D23A05408E0E17BB56E5909C983386D /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52C5A7DD0243E06616AFC6E7636DD43B /* Notifications.swift */; }; - 7D4A6E8BA0ACCCD9700EAA722BAC7512 /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2938A0EF02094C949227F15AEFEECD7 /* ConstraintMakerEditable.swift */; }; - 7D4EF029C2E661170E8487853AA7F318 /* Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBF9CBF41B43FCD2928EBD34745C1603 /* Rx.swift */; }; - 7D5AC16F195967267DAD36F198E0A5F0 /* SDImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BE521AD3CF2C53539D5D3AD834A7317 /* SDImageLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7DF26FE5A9AF886EEA362BD9C81678E7 /* SwiftyRSAError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69C45CC190A46771B6163C6F28C4148A /* SwiftyRSAError.swift */; }; - 7DFCA00B01A0FE5B3114D6D871534743 /* UITextField+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 057CDBDB37EEDC39DAD8B2899316EB5A /* UITextField+DDCategory.m */; }; - 7E77F7A02B348F2B136DC0548A0AADB1 /* RxPickerViewDataSourceProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CE034D1CE8AED1F64BCDECD244183F1 /* RxPickerViewDataSourceProxy.swift */; }; - 7E89E3B38E4ACBC2954D330AB4FF0293 /* ZLClipImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E9E0DD979DAA290E780DA3E18F9871B /* ZLClipImageViewController.swift */; }; - 7E9CB89FA3B14991D8C31254F7594BAF /* JXCategoryIndicatorComponentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 72F0DEC630C27BDA147895E587AF3334 /* JXCategoryIndicatorComponentView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7F1D1D9E76CC3BE34BFFF024E342DEB5 /* ConcurrentMainScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3BC900D01EF71EE85901B33DB533EE4 /* ConcurrentMainScheduler.swift */; }; - 7F4D570B7BC5EC083C0CAC1C223C208F /* BlurLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C510B75AAB2E4FDA9137E14999AFEEF /* BlurLayer.swift */; }; - 7F646201C11F75FEB2701844D49DF702 /* JXCategoryCollectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = 25499C609D3D9E0423BAC734679F23C3 /* JXCategoryCollectionView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7F7C17A10F83520B090996AE23ED917A /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99203C89C26B7C23E2C8EE71591F6A87 /* Error.swift */; }; - 7F7DBCD636EEF4EE02EAA9682BC4E795 /* Empty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 445BD886C8C18951DE33FDE7A05783F1 /* Empty.swift */; }; - 7F9C36B013D01F2188457E0D3A7AEF07 /* ZFLandscapeViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = A6E30A4D3AA46AF31525D1977A28346E /* ZFLandscapeViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7FD541C37F57A49DA86354FB0AC6CB72 /* HTTPMethod.swift in Sources */ = {isa = PBXBuildFile; fileRef = 135376C1FCEE07616C702EA1545C5DC6 /* HTTPMethod.swift */; }; - 803C6345EE6E2A5FDDE206AE70F23B70 /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A7784C8FB288E38B9CD0E6D5C56C3F4 /* ConstraintMultiplierTarget.swift */; }; - 80474D488D0DE9EEB589E4B5F9EE1256 /* DispatchQueue+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9759660E00B36943B3182DF3F4A8797F /* DispatchQueue+Extensions.swift */; }; - 80707A9E832C8EEAC361896B59A1DE19 /* IQUIViewController+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C15163010490CB25348D095B99704CEB /* IQUIViewController+Additions.swift */; }; - 8077ADA76E274A36EC5B42B92FC0FAB6 /* UINavigationBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00D78E1CE9CA81423228170D3F54530B /* UINavigationBar.swift */; }; - 809174478F55FCD93B0706148F6D9B72 /* SDDisplayLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B937AC2FB944C6FC562648D22195058 /* SDDisplayLink.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 80BC7581EDC7EF248D8E56A3AB986B53 /* RxTabBarDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = B06A89FE0E1CFE19CCA5E0444DFE8D56 /* RxTabBarDelegateProxy.swift */; }; - 80D210A4F34FD9BDA0ABFA71918550AC /* Scan.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2FA04DA35E9EA159876C62B7E64BE72 /* Scan.swift */; }; - 813567124B996AD29CCAF98621B4D917 /* DDUtilsSwiftKit_Private-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5530C1CDAF74A3A4390B0D4A4A5114BC /* DDUtilsSwiftKit_Private-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 81452427ADF1E98E642A1233E6B650B0 /* UIScrollView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D666C6013881110C1418D3BA746D1D /* UIScrollView+Rx.swift */; }; - 81480F42C04F75FE39E3D0BF33DF098C /* MATraceReplayOverlay+Addition.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0495E1F6D98A3DDE4F33580F71324D /* MATraceReplayOverlay+Addition.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 81495AC63688C3355033D5BA9CCFC035 /* BRAddressModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F31B8EB67CCAD1CEF53C0FC8DE3B001 /* BRAddressModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 814AA2BB51B51E467391D717BF24FAE5 /* SDWebImageDownloaderRequestModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A71975A18BF8BF8BD89D40365861D8E /* SDWebImageDownloaderRequestModifier.m */; }; - 8156214828F1F0FF073CE3E2B0010CAA /* Do.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F64FFF87CF53651BD305B21AF0D67B2 /* Do.swift */; }; - 81A3D9DB1BECA7DD9A94142824783DD8 /* ZLFetchImageOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6A62144C059A91625C1E74A8954ED64 /* ZLFetchImageOperation.swift */; }; - 821981D6FA5DC29F6EA7B7CFAF8465C0 /* ImageProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CA165EEA66299212C45787A9E8A4CFF /* ImageProcessor.swift */; }; - 82300175606EA43BE4BF57888C4A77E8 /* BRDatePickerView+BR.h in Headers */ = {isa = PBXBuildFile; fileRef = E62D7B56DD56EC78FEA7E07C9936B539 /* BRDatePickerView+BR.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8273F7BD41CEA739E2ED609A60ACAF01 /* InvocableScheduledItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC4387F3F51AEEFFFB729F90F32F16B7 /* InvocableScheduledItem.swift */; }; - 82F6C49CD5442529B117D4B77ECD8518 /* EKStyleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53A696AE56B4D87ACE694E3B5952C714 /* EKStyleView.swift */; }; - 835173C7877CC2512FC25FC6EBBA0350 /* RxCollectionViewDataSourcePrefetchingProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA7D93F4D43674BDC56D4B198D2ABEE8 /* RxCollectionViewDataSourcePrefetchingProxy.swift */; }; - 83888A11B0701E2D4EE236DFA1E56800 /* Result+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = F66F872117A74BAD54F1D783E5C1EBEB /* Result+Alamofire.swift */; }; - 83AE7729BA3BDB481140205DD5BABD95 /* Platform.Linux.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90FA751E3E2CDBE473C890A58D909C15 /* Platform.Linux.swift */; }; - 83F4318BF4095ECFC31DE8DA2E94CBFE /* Box.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06458FF46F17CC90652BA0E8437E6283 /* Box.swift */; }; - 841447C2E526E658EC8102873B77A9C9 /* DDTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A482D1B3C81BC4D429A24F77D4E10CDD /* DDTableView.swift */; }; - 84CBB8B38762FD16B0BF7B4BA778228E /* EntryCachingHeuristic.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3438C5869A327F52AF48414D67A7A69 /* EntryCachingHeuristic.swift */; }; - 84DC0626D65FE608EACE77EE19BCF92F /* SDMemoryCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DFF9FCCF3FC76F60F991DBF190E4CB4 /* SDMemoryCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 85A7214146CCC616A5A1147215F8F37D /* AsyncSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = A40B6D53F2C484BF4A1AF2AB7E13905E /* AsyncSubject.swift */; }; - 85A7D659806F859D9874C49E30708AAC /* UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F338E6DC579560992F3899DAE2EF1CB9 /* UIView.swift */; }; - 85C13D51F12A1B41DB7AC016038FA2BA /* TakeWithPredicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FAD6A4776B11C9AA107287E11B7C19D /* TakeWithPredicate.swift */; }; - 85D3F6F5B63497C2F4378413D2401F7E /* Indicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A2343A0C3D24D5DA61225E4B6F74F79 /* Indicator.swift */; }; - 8620470517C811FD4767A6DD0371D0D5 /* IQKeyboardManagerSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DAB598E6A39EA2D18270D5C97CE121FA /* IQKeyboardManagerSwift-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 866045BB12EBA3D69870F9D99D908C85 /* UITabBarController+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 276FE88FD5FF17448AB1F17EB324730F /* UITabBarController+DDCategory.m */; }; - 86997C2E83106153831376DF4CB88084 /* ZLWeakProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = A48BE9C888D40CEA67C31A8F6BCDBE6A /* ZLWeakProxy.swift */; }; - 86EFDCFB015C812E2695EA28F9F3B88F /* JXCategoryImageCellModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 58AEB14A120E28F2C5376B258CF7DB25 /* JXCategoryImageCellModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 87313140962DA79E017A5AC13FEBB529 /* DDMANaviManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 20B9AD5D0F5F4F68E74EBC1DB5C6F50C /* DDMANaviManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 87369DBBCC57DA7281AAE3BC6224BAFE /* ImageTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A0C072C6B2FA2BC1191E50928EAF9A8 /* ImageTransition.swift */; }; - 876F0A0ED17438D064D6255B031ED91B /* UIViewController+ZFPlayerRotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BDA18B33684622BC30BDBB778EB44F3 /* UIViewController+ZFPlayerRotation.m */; }; - 8772F32DE15FC5E2426A36349DE9E7C8 /* JXCategoryTitleVerticalZoomCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = F2007F3CB73FBA9964EAA5A89F892050 /* JXCategoryTitleVerticalZoomCellModel.m */; }; - 878B6B1A4C24B3D46773E79E0294CC89 /* PublishRelay+Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24C99B78F7B41E05CCBDD88A5BDB004E /* PublishRelay+Signal.swift */; }; - 878CCD15A728F07149720672E14337C2 /* Infallible.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2B3927425DE48B1B85CC9C75B89ED55 /* Infallible.swift */; }; - 87E790F289BC43498505B6D68AD37C12 /* UIColor+SDHexString.m in Sources */ = {isa = PBXBuildFile; fileRef = 36298AA4A4FE034762B42BE21FB2A826 /* UIColor+SDHexString.m */; }; - 87E876627F3BB158FD39966792B76B65 /* ZLVideoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE5C8E5CC89CDB014129C96BC18A76A /* ZLVideoManager.swift */; }; - 8839F137790BBE93BDAF4EE73FAB9781 /* Using.swift in Sources */ = {isa = PBXBuildFile; fileRef = B54B4AB77460FD0EF4E6301658A189DF /* Using.swift */; }; - 887595F20B78C5473EA5B93D699737A6 /* SDImageGraphics.h in Headers */ = {isa = PBXBuildFile; fileRef = 86AE5B4011EC57E43AD9C11DD53BEB76 /* SDImageGraphics.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 88AB044F1DB2804B0480A01527BC6B74 /* DDUIButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCCCC5EC07117618F4DAF00E27CFC556 /* DDUIButton.swift */; }; - 88E67755F51F1CA22343EAA1CFBD41E7 /* DDProgressHUD.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE8BE171D5B3ECB90B3FF43F1A9BE1DC /* DDProgressHUD.swift */; }; - 88E8C4E6532C1885DE243488021CF2D2 /* AuthenticationInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D0D64955E50C10756E979684C646842 /* AuthenticationInterceptor.swift */; }; - 8A3E8C9849B1E73D113589B8F007E566 /* JXCategoryTitleCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2676A5C87CCFF94CF013F9C0D060E6EE /* JXCategoryTitleCellModel.m */; }; - 8A5D7CFB78278C7861D3061D212B189D /* SDWebImageCacheKeyFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 9097278903BF01262442BB7B4F02FCCC /* SDWebImageCacheKeyFilter.m */; }; - 8A6158438F3B894DE7F91DE5FE93C795 /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75F36396C825082508059CD0ED4DB49 /* Message.swift */; }; - 8A64ED4C758DC20F9F638F956789182F /* UIView+QuickLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE3C51C548ACADCC415CC972B8AA138B /* UIView+QuickLayout.swift */; }; - 8A93BFC4ECE061648BEDA3A17DF34B7D /* JXCategoryImageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FD2A3D63A02D06CF00281FEE7DA6C722 /* JXCategoryImageCell.m */; }; - 8B1A402F74B6E4E6F42C395DDE64169C /* KVORepresentable+CoreGraphics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E62308DA6F5F5F56C4F7D2B33EBE279 /* KVORepresentable+CoreGraphics.swift */; }; - 8B3145567FD389F30FCBB34C08F60CB0 /* Platform.Linux.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552A8AA3F44EAAF5EAEC8F40E021C291 /* Platform.Linux.swift */; }; - 8B5C7472AB1189940F2C7A38AB4E5D57 /* MJRefresh-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EDE9C8200260F8FAC9E298F1AFE1CC8D /* MJRefresh-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8B753F9A4427257D3732F4AE2E2EDCCD /* SDWebImageDownloaderResponseModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 40A2E345E1BDEDC00DF59C9B2596A108 /* SDWebImageDownloaderResponseModifier.m */; }; - 8BD7243E27CAB2AE337CFA2AAC384640 /* SDImageIOCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 66DB2925D53290049D355D6B00A86FFD /* SDImageIOCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8BF878796834ECEA997A949F8D4E1EAE /* DDBaseTabBarController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B0696219D2784C0023ADE4D9301B34C /* DDBaseTabBarController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8C1123CFF840715FE9BD669C43D75E7D /* JXCategoryTitleVerticalZoomCellModel.h in Headers */ = {isa = PBXBuildFile; fileRef = AC67E4932C28AACF796B91EFDEA343F5 /* JXCategoryTitleVerticalZoomCellModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8C5AE031DA4F7E6C727B298D2CE5AAAC /* SDWebImageCacheKeyFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 06F19A1142B68925C3423F5D9118B4DC /* SDWebImageCacheKeyFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8C6F6029E7F458B72B22CB4EEB15BC12 /* Concat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20AF9E2DEA4C18BDEC2A77D3D329CFFF /* Concat.swift */; }; - 8C86163FB573BF8082BFA48147D80A64 /* DDUIGestureRecognizer-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D905E824E4D85F0856BB14DEFA3F2F4 /* DDUIGestureRecognizer-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8CFB68D77E49914A0DD60B939BA767C0 /* SDWebImageDownloaderDecryptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 6335BE501B92B10DA9E34548D99F2DC3 /* SDWebImageDownloaderDecryptor.m */; }; - 8D2C2E93E44DC32A322DC0F747FE8D7C /* MJRefreshAutoFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = D21954351CDAE70ABC850CAC620D988D /* MJRefreshAutoFooter.m */; }; - 8D42E6E44020386BF96406F0D3540D19 /* MJRefreshHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 27A0965B519004ED7B9B45748B6D4483 /* MJRefreshHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8D67E1E9F0E2F132D6A0D8EFB3C36974 /* SDImageAssetManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 46A2EEB0968D4F447F321284460CF594 /* SDImageAssetManager.m */; }; - 8D7B5F3D2457D1F8E54BF758F6F0388F /* DDLogKit_Private-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5781ACC4C3639A4B54467EB6B7B3DE11 /* DDLogKit_Private-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8DD38F3D371B152A614804C552C71F86 /* Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83FB9E787FFB5AC30992F955910C7F8F /* Image.swift */; }; - 8E20465B712075DD500DCFD662D07177 /* ConstraintMakerPrioritizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B10ABD8E2D4014D47119D67259DAAB /* ConstraintMakerPrioritizable.swift */; }; - 8E3011EF2559246BC3F4EF3CF479D7BA /* Completable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E6397A0CDA382C57C417058EA4DAE97 /* Completable.swift */; }; - 8E603D8736D65C38275F54BC50D3EB6A /* MAPointAnnotation+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 7613695A0F7A3B72F09922FCB96C11F2 /* MAPointAnnotation+DDCategory.m */; }; - 8EA71FCE62BCE72E1798AC86592F4747 /* JXCategoryDotView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E3C0D0BDC718923EE5504123F9C64F7 /* JXCategoryDotView.m */; }; - 8ED0EA8B64CA7C4860DC6D8B565F4448 /* RxCocoa.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC7D9409D303846FA1887BF2C9F6C9D0 /* RxCocoa.swift */; }; - 8EF8D0C1BE201C03A65D66C92BAD9206 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = CD325B340468FE5EF69FE4F3EB703AE5 /* SDWebImageDownloaderOperation.m */; }; - 8F12D586950726E67D16461D7D687C36 /* DefaultIfEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16E7B1F74180B8AD2D8B8445CE19FAFD /* DefaultIfEmpty.swift */; }; - 8F7C09C252C91A4C49C70B874D9AD4EF /* Pods-OrderSchedulingNotificationService-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 861E3EABF816A1CA179B292C434C7624 /* Pods-OrderSchedulingNotificationService-dummy.m */; }; - 8F94DE7C574F2E68FB7F4182FF4AA19A /* JXCategoryTitleImageCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 53469862C615B608CE2D8CD625CB8BD4 /* JXCategoryTitleImageCellModel.m */; }; - 8FBE778ABB873574910D9E9349DCCFF1 /* UISwitch+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = DC5B2825250FB48648B89626A7097EB1 /* UISwitch+DDCategory.m */; }; - 9069546BCE91958C23E24D6279C5E7C0 /* JXCategoryIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 62AD8B2C12AD556FD819FA11579D23C2 /* JXCategoryIndicatorView.m */; }; - 90747EAF8374FFC67934EEAD2592FB29 /* ZFPersentInteractiveTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = 264DAF11628C8A5413AA9E9C7E5D72C6 /* ZFPersentInteractiveTransition.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 90C1CA69717100719BCA2413895F4E30 /* DDBaseViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = FC2B8B1BA43DEED3EA2678AD43F4436C /* DDBaseViewModel.m */; }; - 90C2306666CD2C08EF76F2012825951C /* MJRefreshBackGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 81EBDB7DF7D598C194F59E779B2FD663 /* MJRefreshBackGifFooter.m */; }; - 90C350B739A3E899B1B53E52B15430EE /* SDImageAWebPCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = C9449CDD5B37F1FA78E8BAE5C9DE0546 /* SDImageAWebPCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9155B335C6AE3ED47CE756D8493F51ED /* DDCategoryKit_Private-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D361B211EAD33DA1B2A83B45487210D5 /* DDCategoryKit_Private-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 91A36B31EC90DB60DC9584F00E5D5643 /* SDImageGIFCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = F94B09B14159E9F93841B7999009E04F /* SDImageGIFCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 91B718E97E5B0E6C8E089096AC2DF4FD /* EKAttributes+DisplayMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A35003D0111822D8C96F21E91A1DDA6 /* EKAttributes+DisplayMode.swift */; }; - 91ED131F555A03F5905E86878BF38C69 /* MJRefresh-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F49BDDB4952C5AB6D71917A2B1A40633 /* MJRefresh-dummy.m */; }; - 923EE64F6CBFF20AD30002B633BC50BF /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 18E641006679281D6DC4518EF893F03A /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 927A9E34C2E88E982888A5D2F8A9B127 /* BRPickerViewMacro.h in Headers */ = {isa = PBXBuildFile; fileRef = 152188DBC7BA989BAFEC3E87588C15CF /* BRPickerViewMacro.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9293372592A2E6163FCD7389BFCA1D72 /* ToArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F0DB9B80DE544F1AAD189CBF3B3ED7A /* ToArray.swift */; }; - 9313F5863E61D51958D4954C876666DC /* DDControlsKit_Private-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CBA3C0559234D90ED825EC7DD5EC9D6 /* DDControlsKit_Private-dummy.m */; }; - 93207A865D205334FE48160E599E0FC7 /* MJRefreshComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = B21F8612F2807C099B884C64D49996A7 /* MJRefreshComponent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 93A6AF9B36DF2817E850F6A33114357C /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65FDD276990279745BA6CB81D369081D /* Debugging.swift */; }; - 93C25343A940D20BD21AE6C1EF582189 /* ZLThumbnailPhotoCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E359C5F7C7165D57D9A751DAEA7C1241 /* ZLThumbnailPhotoCell.swift */; }; - 93DF6D6B5E32104AFE985F15355F629A /* MJRefreshNormalTrailer.m in Sources */ = {isa = PBXBuildFile; fileRef = E01D15A927697FFBC21C2277A1BED082 /* MJRefreshNormalTrailer.m */; }; - 9413C7DB4B03B9C9178A64659F476AD0 /* IQKeyboardManagerSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 692CC13D213FAC30622EE61F9BE59763 /* IQKeyboardManagerSwift-dummy.m */; }; - 941DF4F9B9686E518F574A14A643D6F0 /* DDUITextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5815277FFB95917CF37B3586D9BCA52F /* DDUITextField.swift */; }; - 944D167D78E7367502ABE9458F874AB3 /* ImageProgressive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69A6720526DC388CA1469393943F21EE /* ImageProgressive.swift */; }; - 9497825ACEC7F42AFA494D810FDCD4EC /* ZFPlayerLogManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CED34885294771F45656EB2CB3B1CB7 /* ZFPlayerLogManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 949E8D2BB740EADFE39A5D66DF0612E8 /* DDBaseCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = ECDAC965AE07254C2BFDE5F87782CAAA /* DDBaseCollectionViewCell.m */; }; - 94B52F9D43DC46D45062BB39E53E9DE1 /* EKBackgroundView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA15DFDDCC8535D313EB0DD2D765E4FD /* EKBackgroundView.swift */; }; - 9517AFD055FCAC61888F63B46B1012CB /* ZLCollectionViewFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7AA25474A4160179473FF865A205D4A /* ZLCollectionViewFlowLayout.swift */; }; - 951858E9EEFBED5BEC0317E9D44987BC /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 289DCBB1FCB8AE9994D9CD156EDF5882 /* UILayoutSupport+Extensions.swift */; }; - 95277350C6DD3C3641CFF98AE0A12B12 /* OperationQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D09BA1722F8C68F7F93C759D012D933 /* OperationQueue+Alamofire.swift */; }; - 95AD0B08F159E5B4571FD8C7FCC3A78D /* UIView+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 43A38E0FF2F729CE15C65F122828BFC9 /* UIView+MJExtension.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 96199F1BEE04A029B3278BB1BED5F276 /* IQNSArray+Sort.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7DA28B79A5A6C2FCC8855981CC43356 /* IQNSArray+Sort.swift */; }; - 96351482FE93C85C20C75E992ACC4D3C /* RxCocoaObjCRuntimeError+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5143BA28095773A5FBD89ADFA3D511A1 /* RxCocoaObjCRuntimeError+Extensions.swift */; }; - 967AA6C79C02F4665EBBDD48A4E3F6B8 /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91BEADBC66054210F2E8D7D0FB1F40F9 /* ConstraintView.swift */; }; - 96A6378A09CD1F2FC5D2A159A065CD07 /* SingleAsync.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44348DB4F29E938E9FDF2F7E2CF490AB /* SingleAsync.swift */; }; - 97005485BCEC1979C768300CC520862C /* UICollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FE61B1653CA88CD313DD1993F1FB7C9 /* UICollectionView.swift */; }; - 97352932EA7908FEA0DB6210F4692034 /* MKAnnotationView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = FBD9915E8EE1AFCEC69B2B40F6151ADE /* MKAnnotationView+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 977F8070B2734739DD77174D591DC065 /* SDImageAPNGCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = AF86A73839D53B6325786B9E79F1A871 /* SDImageAPNGCoder.m */; }; - 97912E6F8356C809B27C1F474438FE4E /* DDMAMapView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7738A6AB801492AE05C5FDC1182FC2B5 /* DDMAMapView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 97ACD5F8ACFCD7B423375EB425F82287 /* JXCategoryIndicatorDotLineView.m in Sources */ = {isa = PBXBuildFile; fileRef = F861AD22ECEACE2BFC4591DBE936550B /* JXCategoryIndicatorDotLineView.m */; }; - 97B4A15E0218313B8CE3CDB2D3CC73D2 /* DDNetworkingOfAlamofireKit_Private-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A12523C19872904FE054C45BC2ABE97 /* DDNetworkingOfAlamofireKit_Private-dummy.m */; }; - 9817388F04E487B7ECB5C08DDE606F86 /* MJRefreshConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DE8AAA4F54127820E8B93C1348805A6 /* MJRefreshConfig.m */; }; - 981F1BFE14D989096611F7DB1D782B97 /* SDDeviceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 41EFD7CBB52D61B19151E2CAAD31A43E /* SDDeviceHelper.m */; }; - 98ABA13FB9B5A510025F67BB96656272 /* UITabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5502FBE9DFBCF4CF0F65DD0B65863251 /* UITabBarController.swift */; }; - 9905D4F90FFAAA9BD6CAA9AAC049F967 /* TYCyclePagerTransformLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CBCFBA84881A19B21A4E7BDCC9C877A /* TYCyclePagerTransformLayout.m */; }; - 9912583A0C3DCE5F8AC15A3FC34E6FE2 /* ControlProperty+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 862ABDF179BBEF97F8C92327EFA8274E /* ControlProperty+Driver.swift */; }; - 999B33DC38983D04AD690B4599F3C316 /* ZLTextStickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4968C01BFADC82312916BEF12CEADF0 /* ZLTextStickerView.swift */; }; - 99C743774FE46ABD47AB0B3588D4DA83 /* DriveRouteCustomAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 721152FA7D22BC0A6B433001D9BA4CD3 /* DriveRouteCustomAnnotation.m */; }; - 99D7BD631F5D4CC39B09885065481AE0 /* JXCategoryBaseCellModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A93FA71CAFA40C0939FDDBA2DAD1F61 /* JXCategoryBaseCellModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9A1DF88AB0E546AB51597714309B05C2 /* JXCategoryIndicatorBallView.m in Sources */ = {isa = PBXBuildFile; fileRef = AAA2E2360F6F3888B41945153D157767 /* JXCategoryIndicatorBallView.m */; }; - 9A2E199ED48D8EA4691580E1DC4DCF1A /* PriorityQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72EF513226CD4CAA4535790E046899B7 /* PriorityQueue.swift */; }; - 9A41FC2ABBF645CC7F01120A6BDB0A24 /* UITextField+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5A49B725EA9C5EC7506BC54EDF5130E /* UITextField+Rx.swift */; }; - 9AE63A71DB55322FFBB6EF1D979282BE /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EE069E2B488F1ECF47333C4E71C1FC5 /* UIView+WebCacheOperation.m */; }; - 9AF25DE3F59D7DFA42BD557BE616AEC8 /* DynamicBlurView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A5588977EBBE11DE9687DFE5669F63A /* DynamicBlurView.swift */; }; - 9AF82E3FE6B0FCA2D289149812D57304 /* ZLPhotoBrowser-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 058FEC3140761826C1DB3A0F0D55D920 /* ZLPhotoBrowser-dummy.m */; }; - 9B32CCFFA0C3806B0187E0ECBC35C0B7 /* DDBaseImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 404613DA5C40A3F551C7878410955590 /* DDBaseImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9BC1300E9DB508915604775E9F7A5889 /* AsyncLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 539440C9DEE5A25C2E270CEABEB1D214 /* AsyncLock.swift */; }; - 9BE899982FAEB47E89D2EE2FD9684CCA /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = B31E895147F0B222F9A8F45E1A2C876D /* SDImageCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9BF9E0DACEA26C0A297BA1FD09530F00 /* NSTextAttachment+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1230108A6DB4BFE27E08F9E4F406B60C /* NSTextAttachment+Kingfisher.swift */; }; - 9C3ACAA9BB7E4D19B32622BD32744A27 /* CompactMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 716DC897DBBFFCBB2E98C88BCE37BEB1 /* CompactMap.swift */; }; - 9CF1888AF79CD22EB414BFE758E5D36A /* UITextView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18E8F78A0E4FED3EEFBF8C45B9D4EC81 /* UITextView+Rx.swift */; }; - 9CFBE2A3F8BFF4BBDB6DA37F9CE7C266 /* SDImageGIFCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 462DC57EE11DEC5C7ADE4D9A37B51625 /* SDImageGIFCoder.m */; }; - 9D43333662E9A614D8F63052D7F1ABA7 /* UIApplication+EKAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = A426F3AF126F6DA8CA693D6F418135D3 /* UIApplication+EKAppearance.swift */; }; - 9D4EAF940F2C46778D1682E8127F003A /* ZFFloatView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CA9932A4FB3310EABE728105AA0E97D /* ZFFloatView.m */; }; - 9DAB2556D82974EE7905C156B4F3A07A /* MJRefreshAutoStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 6565306507F34475169D23A59D014B3C /* MJRefreshAutoStateFooter.m */; }; - 9DC2A94B2891D5F2B37FF69F48347EA7 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 6096B34CC809CFEEF4B6AB3C297A5E15 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9DEFB591D6DEBAAAF949BE635617A7A6 /* MJRefreshNormalTrailer.h in Headers */ = {isa = PBXBuildFile; fileRef = BA36DE59C0FDA4C18BB99710BA24EEA9 /* MJRefreshNormalTrailer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9E13BAA5897DBE84C6842BE86EED1CFC /* EntryAppearanceDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D509B560C3FD14DE99ED2E461F6F61FA /* EntryAppearanceDescriptor.swift */; }; - 9EA55F404A7BE4684E3299402A5B88AE /* MJRefreshBackNormalFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = A342026F5E868CF9F23A7BBFD7FD128E /* MJRefreshBackNormalFooter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9EC8F835ACF69A2724E2141D8C3FFEFE /* ImageDownloaderDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0704E4A36349FCEE9EA71A73D5B75C3 /* ImageDownloaderDelegate.swift */; }; - 9EE55E6E57DFF49D9CEB2493AD5B93A9 /* SharedSequence+Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = F53702FA92D3BE5E71762BADC1DE9D13 /* SharedSequence+Operators.swift */; }; - 9F26F0EB6575EEC06D48252EC38DDC46 /* EKXStatusBarMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81F689351372B4E9638C1CDBF2952EC3 /* EKXStatusBarMessageView.swift */; }; - 9F75DD325C460FFC7984DF4A9A42BC68 /* UIScrollView+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = 481B395EA4F8224CA51AE8E284B17B24 /* UIScrollView+MJRefresh.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9F90CCC3FC0CF5D2BF452D59CDDF8A7B /* SDGraphicsImageRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 926C7B2D9241F96EEAE4177053E800DD /* SDGraphicsImageRenderer.m */; }; - 9FA5380BF96537A0F41B105EDE040DA5 /* DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E09F0C30E2EF115B23D6DA6F45D3700 /* DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9FA55209BBEC5446B1699EFEAA8AE99C /* RxTableViewDataSourceProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CD093F7900FC1EE5C84AF7092F9B5E7 /* RxTableViewDataSourceProxy.swift */; }; - 9FE833A54A7D964D0D67BB8288C07D69 /* UIViewController+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = CE6AFA9915B5BE9AA03F5AFDA4F0C76D /* UIViewController+DDCategory.m */; }; - A011FE7F352E2DC4F52A72ACC985E865 /* ParameterEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 300CA45FD37A463B5FBFF59D25FE5E93 /* ParameterEncoder.swift */; }; - A0649D13B9C3CE011F3FEA618EA1724B /* JXCategoryIndicatorTriangleView.h in Headers */ = {isa = PBXBuildFile; fileRef = 00792215745E92F19B0B1C8D83DFEB5C /* JXCategoryIndicatorTriangleView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A0657A64DEA57E5606A79DF5FFA0C0C9 /* SDImageCodersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F3D49D2FD69EFBD78E4034C3AEC6577E /* SDImageCodersManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A0CAC16C811D166585ADC16AF08A6EBA /* JXCategoryIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = E4585747280D3DFC635BC74545A9FC72 /* JXCategoryIndicatorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A0E59DE1E829AB6653A41F549DEA9F3C /* ESTabBarController-swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E20E9477FD8A3662F55D39BDFAF2C4F /* ESTabBarController-swift-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A0F2E96F6ABFE662AE84553D7840D9DD /* Source.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4685CC601F3B47D2487C648F67C935C5 /* Source.swift */; }; - A1059E3A9E938EE8F540D5639AB4B4E5 /* EKPopUpMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219D2C7D4A1233A49409F253CCB06585 /* EKPopUpMessageView.swift */; }; - A13B4CC2584A03BF7414FE90F04C487D /* EKNotificationMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C69A0E7976A70A4E86A4E00C69874F9D /* EKNotificationMessage.swift */; }; - A17B88101B55AE2259598D30E3CDA92E /* SDAssociatedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 522C178DFAAE6C2D641B4251505FBA47 /* SDAssociatedObject.m */; }; - A21A3EDB30349656A7BF23004B6AF02B /* SwiftyRSA-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 370532CCD19CE547D32AF792C93EE248 /* SwiftyRSA-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A29CAE715EFFA6F90408C3B8345A1883 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = F0929DCCF9C01C013E77B5DB0678C5B3 /* UIImageView+HighlightedWebCache.m */; }; - A2B52B66E0891E57CFA6C3750BF7DBC7 /* ObservableConvertibleType+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8B4EC3CA42A6FBE9D724058541231B3 /* ObservableConvertibleType+Driver.swift */; }; - A2B9284895F22572FEF6613C7F74C037 /* TYCyclePagerTransformLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 080CAEB7CFAB746E5ACC13C1037E72D5 /* TYCyclePagerTransformLayout.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A314E58FA49392DFB77624520F1B0508 /* UIBarButtonItem+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 397ACB177BAF19E4CBD6E53B19670373 /* UIBarButtonItem+DDCategory.m */; }; - A328DD14BD9500BC78D1C7120DBC30E4 /* IQKeyboardManagerConstantsInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E70E73FE658FA06B6755BEC556704C0 /* IQKeyboardManagerConstantsInternal.swift */; }; - A3415197D016B366AAE1BC80C731AC3D /* TakeLast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CA09743333787DF3615586222AC3B7E /* TakeLast.swift */; }; - A358C72687DDFF484CAB4B0124CE34A8 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = EFD256182E9A17F827A1B6C7D32A35DD /* SDWebImageCompat.m */; }; - A3F68F7FD050BA0038F03314E92B7CFE /* JXCategoryListContainerView.h in Headers */ = {isa = PBXBuildFile; fileRef = B8784428820F3296428B578036544576 /* JXCategoryListContainerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A414F98B05BC44021847376B2C922897 /* UISwitch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8985AFEB1277743F0F561FA259EB9B5A /* UISwitch.swift */; }; - A426B3CC412353B4B3655644EF00F78D /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = B50F634451DD45773FE536016BBBEB29 /* Utils.swift */; }; - A45846C269357C355CDEBF8B8EF896CD /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF3C92827BD283E4A278321C4ACC3B0 /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A487575A0ABFF095346738854FEFA545 /* NSObject+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = D9DF61443696E25D119968FD864EB092 /* NSObject+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A4877D2BE9220BB9B366F86461105668 /* ImageCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0D5E066D8BE3508DB0D643DF3BB08DC /* ImageCache.swift */; }; - A4AE06BE1B4C107F33C291F8B1B10E22 /* JXCategoryTitleVerticalZoomView.h in Headers */ = {isa = PBXBuildFile; fileRef = 32189BA3A3CA88E003608BB397FF6181 /* JXCategoryTitleVerticalZoomView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A4D3C0FF0EC1462586B769D06F7A9A1C /* DDBaseTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = F1C0E8D46769E9C329D112D8ABD96732 /* DDBaseTextView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A555775BE8D4C3E51FB96A3A6875CD68 /* DDUIScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B31219001024F15894B441C638DC87D /* DDUIScrollView.swift */; }; - A576C4698BA14346E54EB6463022EAD9 /* JXCategoryIndicatorCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 54B8052223D66582723111C5AC6B1280 /* JXCategoryIndicatorCellModel.m */; }; - A5DCA31A4D36F66FFA278B81D8BEF027 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = BC465FF8CCC797DDD39F72CE05907ABA /* UIImage+MultiFormat.m */; }; - A5F8871912A1A3E8168E6DCF8EB4207D /* UISearchBar+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C74632D9B36FCD0A38EA87E40B883A /* UISearchBar+Rx.swift */; }; - A608BF8A042013F0E8E790941B4D8866 /* SDMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5184A22E35E8C6770D064988AFACAE4C /* SDMemoryCache.m */; }; - A66E511DE17FA95247044C0C2A40CFD2 /* UIApplication+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BA2FC10BF6B9B1101AA446A7C5118A1 /* UIApplication+DDCategory.m */; }; - A6842F40F5FB9AB6448371BF3B794DAB /* Throttle.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE64B0CAB84F57A86A736B0ECC34BE87 /* Throttle.swift */; }; - A69C94A0DD35B9524F7481113B574E33 /* SDWebImageMapKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 9412DD92DB149FA51E3EFDC819CF8C95 /* SDWebImageMapKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A6D371F7B8F0AE9A55EE402E33583504 /* EKButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EF19DED81F206CA7BE663143BBA6CE8 /* EKButtonView.swift */; }; - A6D743CD31F8BE6B743622F1EE837BE1 /* DDBaseLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FC7EA8397ECCC0A4035C805A341E66C /* DDBaseLabel.m */; }; - A7B75A1968198A4D77CC553FAAA42540 /* ImageDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51B5AAD6E35677C397FD89ABC8683255 /* ImageDataProvider.swift */; }; - A859C89F424EDCA9AFE07133A3CF3FC7 /* DDSpeechSynthesizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D8C99F56B74AE5CD4EA2D60C5825E87 /* DDSpeechSynthesizer.swift */; }; - A88D569C6D40F093E8AA5773B735147D /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84DB4A762C0D0C2F854D64D79D115052 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A8A0C288519E463DE5E9B307FAE797F3 /* EKAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = E073EEA268C0B3013B1B312FA549DEBF /* EKAttributes.swift */; }; - A8BA8FD24CC92B6B0EB05598FF2D1A74 /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94BC58F3425390D4FF8DFD06FFF3A3AB /* ConstraintMakerExtendable.swift */; }; - A8DC4B6CAA17BCE09B33F0CBD7B760AA /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = F56B63C279BD270DB88CF414880FCC24 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A91F69373347CD458D89B84B084E0640 /* ZLPhotoPreviewAnimatedTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2126BCB05F88A7E5C18499699DAC6107 /* ZLPhotoPreviewAnimatedTransition.swift */; }; - A928D17689392DAAC600620B1020505C /* ESTabBarItemBadgeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4E1CA0B57D4861AD65ECAD44D746C34 /* ESTabBarItemBadgeView.swift */; }; - A952741473205F790F725FA10B2C2667 /* MJRefreshAutoStateFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 657DDF65AE79FA5D9C7C891807282B62 /* MJRefreshAutoStateFooter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A97E69232EB284E6EF3127992F66C58D /* BRStringPickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = E8088ECD7982C20A3DD64663A92E62C9 /* BRStringPickerView.m */; }; - A99CF24F1B900AB7722D972FA4FED6BE /* SwiftyRSA.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD105EC99E1337DE2350EA8F5E086D67 /* SwiftyRSA.swift */; }; - A9A3DF66A7A34ADF5BA6300B6664C68A /* Producer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4676A6C331D2C8F6A4CDD7FF5DF533F7 /* Producer.swift */; }; - A9A5CC537275881320975BDC2EE7F62C /* SDWebImageCacheSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BAFEB0AC8934BC3B90191ECEA295D64 /* SDWebImageCacheSerializer.m */; }; - AA6502FA7B93298C6DCB3F45466D93E2 /* DDUIKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B2D944E7777A208BF0BE49900636983 /* DDUIKit-dummy.m */; }; - AA6ED7CFD770A61F126E49FDF8BD455F /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = E67CB224042ABA4AE746F698258A5BAF /* ConstraintInsets.swift */; }; - AA6F9F6A4405BB9AFDDAAFF967296ACD /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 26C221C17DDF5C5FC87D071352FD7CB2 /* SDWebImageManager.m */; }; - AA911B2E9CC0933BD24DE4E5486536A4 /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5A7774A11BB9917E8EE657319AE2549 /* ConstraintMakerFinalizable.swift */; }; - AABFBAB8D7E34B9FD6BD00BD475CF52F /* VirtualTimeConverterType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63964BF11EFEDD9CDC2E61E5FDA0F384 /* VirtualTimeConverterType.swift */; }; - AB1C148882E9316F6B2916F717FE6270 /* ObserverType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C819BB49B3601AD30B87D450F464CC4 /* ObserverType.swift */; }; - AB31BC88396C84D36D01D30B3089EE27 /* NSMutableParagraphStyle+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FD2A1B3A21DB33DBDBD70B92DE429DE /* NSMutableParagraphStyle+DDCategory.m */; }; - AB8707AC05E95D10D125F69C0F1F84CC /* ZLImageNavController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 690D8FF5E039A54CF80B26FA60362319 /* ZLImageNavController.swift */; }; - ABA3BE298F1B209B9A4F53D73F8EFAE7 /* ZLProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF81A156B03A324F27CCC20B03CE0A4C /* ZLProgressView.swift */; }; - ABA4EE05D4E24045F1E1919CFB3433B3 /* Sink.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE099C0BE1DF10B4E09029F0CAC6B586 /* Sink.swift */; }; - ABB15EAD40CF82A895F7FAC4184EE041 /* Storage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B32ABDA2E0E09E24C500316F4F6BD89 /* Storage.swift */; }; - AC5015ADDC603789F71786216F37E8B5 /* UIScrollView+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 577939DB40D698A43C32E2C6C96D8D54 /* UIScrollView+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AC816DAE095CF51A98ECF689E6158059 /* SDWebImageIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = A6252F1D08A7FF98BE7D2CCECA7BE45E /* SDWebImageIndicator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AC8C7E1422291BD597A507AE2FBE4CFB /* NSBundle+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A3270C48302B0944D5B2835EE79B425 /* NSBundle+DDCategory.m */; }; - AC8CB69399E67A7BF32EF8527076691A /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9153015AB6FD5ABB6F8B4472D393CEAB /* ConstraintDSL.swift */; }; - AC9D194628C4196609B1B98ABEF5A3B4 /* DDUIPanGestureRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E51D95118FA22F4FFEB066E2CF1A373 /* DDUIPanGestureRecognizer.swift */; }; - AC9E9E52D8BEA49ABF792CD042B6A16B /* AsMaybe.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA7C6374BBA0DE8238B8A6C24B7D5E34 /* AsMaybe.swift */; }; - ACF6E744FFBA77DB4FE3E42A917E5CAC /* DDWebImageKit_Private-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DD92C7EE1DDC3D90C62C8260A974413 /* DDWebImageKit_Private-dummy.m */; }; - AD8663D8100F84B56F975B4E50E1C5D9 /* Enumerated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DD5FA871FE864A94DD9BEF3F937B03A /* Enumerated.swift */; }; - ADB08B0E617EA7DE1CC16BD69FB38004 /* DDUICollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBAEB9EA44537B5C66C8C858EAA4FDC7 /* DDUICollectionView.swift */; }; - ADF031ED0468E75793D32E1609139984 /* RequestInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1DD08EB56C97E0FC095E90E665D8EFA /* RequestInterceptor.swift */; }; - ADFDF04B44D98030E7FB1F4A4196F155 /* ZFOrientationObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = A7F011B38D7AD5A6E9DF11557F805A9F /* ZFOrientationObserver.m */; }; - AE1015AC17118CA9A93681AAE7454DCD /* JXCategoryNumberCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4459BF2B76FE7B9D95339BE6E570C3DB /* JXCategoryNumberCell.m */; }; - AE2421B86D481DB24462BBB65580903A /* ZLPhotoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F43014761DBC88A481A43AB0D0C370FC /* ZLPhotoManager.swift */; }; - AE310A252E96F1A89125262C9293FB10 /* ZLImageStickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EAD6BD5B720939B07B237C3B918074E /* ZLImageStickerView.swift */; }; - AE3814FADC3432DB8F6B88D2102EBB0B /* NSTextField+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88E9D5C19171FD2F658F9EB3ECB18BA6 /* NSTextField+Rx.swift */; }; - AE81E26AA0581A9E7559FB6CCC5FDC36 /* SDImageAssetManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DA182BBEDF3EEB595A5631C82EDB5D7 /* SDImageAssetManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AEDAB119EA022C9AEF284E5230B29B80 /* Buffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3251F63234906BD5D69897A47D7DE228 /* Buffer.swift */; }; - AEE86A9326DC09055B5C28D98C50874A /* UIImageView+DDWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 0715B61A0864CFE40B3C7BFF28E161FD /* UIImageView+DDWebCache.m */; }; - AEF2533A0CA4708B8047A6F131F25107 /* TYCyclePagerView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E788DA5B3A40955A6CFD2CC69F83202E /* TYCyclePagerView-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AFA87EA35BBF8E4F0A2D41954069DD9C /* ZLEnlargeButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 034525FE20689D57E20E852BAE248B94 /* ZLEnlargeButton.swift */; }; - AFE7A6835DD89F0D3331538280787CEE /* IQKeyboardManager+Toolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = B863C66C3495BE974F5227189B1FE551 /* IQKeyboardManager+Toolbar.swift */; }; - B00E4DCB41133530E09A76C0E9F3D957 /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = 818D1A567BAFE4F5792B865DA9E9A500 /* ConstraintPriority.swift */; }; - B01AD0CF889816FA1985284F075CFBF7 /* NSView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = A33332BB8DE0C04C8C1445A7D3B6C879 /* NSView+Rx.swift */; }; - B026AD1C1E94F5FC78A1CE5A96DDEE89 /* NSObject+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A8E35CED9F0F349320B9036A24B4C8D /* NSObject+Rx.swift */; }; - B0470BF38DA7AECBDEC223D60C2A05D4 /* ZLBaseStickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E31B79E563E0A858064565166B4BB08A /* ZLBaseStickerView.swift */; }; - B04A1F654CEE373527D6A1FDE4706545 /* ZFIJKPlayerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = EB74D6A12317B8731336BC83C84C53FA /* ZFIJKPlayerManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B062397EBC3E007F3B3A05D7EEDE6ABD /* SDAsyncBlockOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E0CF4E36EBC551A1499DEDE5076AD3C3 /* SDAsyncBlockOperation.m */; }; - B063BA956EB9BCA0B53896A0E792A264 /* DDBaseSwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CE9CED92DFD164D0A7354F8CC55DC78 /* DDBaseSwitch.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B0C86B62900B2C3ED6A6CC0E578492D1 /* JXCategoryFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 753FDC5BE5FBB5061D1108BA18888FB7 /* JXCategoryFactory.m */; }; - B11769C6D0E6CA59FC36D1D77F642A78 /* NSData+SHA.m in Sources */ = {isa = PBXBuildFile; fileRef = CFCAA960B1920091AC115175863C7249 /* NSData+SHA.m */; }; - B12803F0E38CFAE8770FE476242895C3 /* EKProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B0CC58D2B57578DC41AC56CE29139C6 /* EKProperty.swift */; }; - B169869926BCF8894AD891F3261B8AF1 /* URLSessionConfiguration+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 689047FAC2FB89164EC2273005AAEDF2 /* URLSessionConfiguration+Alamofire.swift */; }; - B178E385806A85AE79762280815013B1 /* CaptureQuality.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A7060AA231C1C535E46258355ECF306 /* CaptureQuality.swift */; }; - B1CCDEB46FFBD5C857CEE2829F31D65F /* RxCollectionViewReactiveArrayDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2A7B06477B1D104EAEDE95A0A7E08EE /* RxCollectionViewReactiveArrayDataSource.swift */; }; - B27B495AC5C1672B794F62A046B37732 /* UIView+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 908AC48A993D433EBBA6339FD87B3CB8 /* UIView+DDCategory.m */; }; - B27F69341AA274200D4EC565EA51B477 /* NSObject+Rx+KVORepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D3CC0F4DE0762CC5418409448E4B854 /* NSObject+Rx+KVORepresentable.swift */; }; - B2B130B66CDC70BD01B66F4A2423FAEA /* DDMASearch.h in Headers */ = {isa = PBXBuildFile; fileRef = E536E290402532B1C466DC676C4B83A9 /* DDMASearch.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B2B998194CCD760C0095B9CD67B288CD /* UICollectionViewLayout+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = 68E7D802A2C4500DE77E6175ED8FEF7A /* UICollectionViewLayout+MJRefresh.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B2BB06514C0A38F894279DA3BFAAB03E /* RxPickerViewAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94D217CE091C04BDC0609047B3A81F03 /* RxPickerViewAdapter.swift */; }; - B2D7D749AE349EFEAD819B4D368B93F3 /* MemoryStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF8AEF1B45C629BBBC58611C20A3A1C5 /* MemoryStorage.swift */; }; - B2E3B006A6EBE8AAB7911F7F030B5568 /* DelegateProxyType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C7EBBE1CA496181F88338AA121192DB /* DelegateProxyType.swift */; }; - B39CB141B9670AEF45DD1C127E168D12 /* DDBaseCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 93787936F27F8AA07F71567C3AEA05D4 /* DDBaseCollectionViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B3E2E1B9AE15CC280B8957C339243BEB /* JXCategoryTitleImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 742666FFE4711020BFE103F95AE42CDE /* JXCategoryTitleImageView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B3E51F0E8AA1550E1B667D96C3BDD1A5 /* URLEncodedFormEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DC34DFC911705DDBD12D11C2C88CEF /* URLEncodedFormEncoder.swift */; }; - B406D1DAF6D1DD0D30CEBE3AD0ECB5EF /* UIWindow+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = E23E3E037A1472C2E79E487DE308A5F2 /* UIWindow+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B40E0790D6C9B7387B5FAB251E16B1C0 /* Bundle+ZLPhotoBrowser.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3925819052ECF20890A49C065A3E093 /* Bundle+ZLPhotoBrowser.swift */; }; - B41FD6E22B5A75FC2EAA129FF1B54B82 /* ZLCameraCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89065D469018D9E69D82FA9E80FB20E5 /* ZLCameraCell.swift */; }; - B4677B8626E61F6810C199F75F2B971C /* GIFAnimatedImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0629B72A7A9E52E3111C343CEE0BF886 /* GIFAnimatedImage.swift */; }; - B46D6E7861A1028BCE0FFC9AA26C9D12 /* UIResponder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0804916E58E0E3670AD97A3C08A30EEA /* UIResponder.swift */; }; - B4C0B46C21087CA310DE57D0B9FF1C17 /* AFError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 087F207694F2E3A1DA9E0ABA8B92112E /* AFError.swift */; }; - B4DA45D21312C13C1BD200335595798D /* NSTextStorage+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51AE42539088EFCA54ABA508DD8106DB /* NSTextStorage+Rx.swift */; }; - B502E9659BC94C3074C41F9294248930 /* ControlEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2B30E589629B61219540929CD7847C3 /* ControlEvent.swift */; }; - B5169B93C52F1FF030F7497A6FEF7E2E /* ZFIJKPlayerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 467A95BB7613E49D26DC16209E6D6761 /* ZFIJKPlayerManager.m */; }; - B529241B855030B376028D2F3989DBCB /* DDUISwitch.swift in Sources */ = {isa = PBXBuildFile; fileRef = B509D613CF3D47FE4B95ECA94FD5B68A /* DDUISwitch.swift */; }; - B572380E3B1153DB53BF872072AEB45D /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4F93F49467F0FB866E2CC8ADB4E6580 /* ConstraintViewDSL.swift */; }; - B58868E339463DBA3ECA1579ADDAD5CE /* PopupDialogDefaultView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFA04185301A5917ABDBDEC1D612FE8F /* PopupDialogDefaultView.swift */; }; - B5909D30D3D2544499F30CA21286AC58 /* SDWebImageCacheSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = 79B1E784B755D1AD12181BE9233EF004 /* SDWebImageCacheSerializer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B5E8226BCB600380F56DF4E98CAA2777 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CC1150024525BD9BEC30E9860D321B3 /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B5F003569FB9997A51E10C4E408FEA61 /* First.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDDA4038ABB30110E2D3271068B0EB69 /* First.swift */; }; - B5F5635CB0E895EAC58232DADF5FC3AE /* UIStepper+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A77ABD82FEA2CA84D8B35154E4D4F40 /* UIStepper+Rx.swift */; }; - B601FF45040CC3B4D882477DB46A8DFD /* ZFLandscapeWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 358CF138B0A845A1BF0BE48FCF35637A /* ZFLandscapeWindow.m */; }; - B6062CB645AB7C112A4963605E59E4AE /* UIRectCorner+Short.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95624B5D8F793D3FC5BE25AAECDF114B /* UIRectCorner+Short.swift */; }; - B6A5A9C096B866F53FC368AA2E9E94B7 /* JXCategoryIndicatorCell.h in Headers */ = {isa = PBXBuildFile; fileRef = E6348CDD50C7B181B8762F70DDD93B29 /* JXCategoryIndicatorCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B7083DE68F7564F0FEDCFD660926393B /* DynamicBlurView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EDD3AA8542CAF5C63E2C88397F7D700 /* DynamicBlurView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B70BB03F1D414155F2C5F9E34E659806 /* UIView+ZFFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 58FFBF9D8BEC6D0A877D11132717BF54 /* UIView+ZFFrame.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B734391A023E1397D7C4988865147809 /* SDImageCacheConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = CAAA47E3059B1B6A4EC16751C5895DD6 /* SDImageCacheConfig.m */; }; - B740BD965E9F4E86C2EF3B33616805A9 /* UITableViewCell+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = B9BD2F561593D661C8A6C7DD23A16169 /* UITableViewCell+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B7B9F94EF5A56E156C57147F5F302559 /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = D3D5F3EE72923785B5ACA03ADDCC6CCD /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B7F2FC2537F8A512F7969F37EEBABA19 /* SDImageHEICCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 89A7C174EBFD6AAA5B775D63BA1629DF /* SDImageHEICCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B84BED170956D2391246497EC4ACE3B3 /* SDDiskCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D8B7DD59EA4C92A93696E08FB03BDA7 /* SDDiskCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B850BC342D7976173853AA223DF66FDF /* SDImageLoadersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F314F35ABCEA3D13FF8F29D9D1A69159 /* SDImageLoadersManager.m */; }; - B87FA1A74AFFD85DC6676B5D9F777DA4 /* ZFPlayerControlView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A2CBCA91EB2EA8F206B354A6E598552 /* ZFPlayerControlView.m */; }; - B8ACFB27F7B7E309059AA265F2657634 /* SDInternalMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 33BCE71E5BE6A4D8F73BBC0EEF702D17 /* SDInternalMacros.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B8D73EA70C82FA9B0BCB42B04F3A8E5C /* UILabel+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = C2C00E9A59E2ACDCCCCBFA7AA1D8BC7C /* UILabel+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B8E1A0528A9695731A25A4F670339247 /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA20C89C85B58F4039D8DF2007A09985 /* ConstraintLayoutGuide+Extensions.swift */; }; - B912045CC6351F6B403B2BA16E0FA3CE /* DDViewControllerAnimatedTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 48824A0BF5D6B21C9142A13E3FEDA036 /* DDViewControllerAnimatedTransition.m */; }; - B929603A11A07A494CBE9E734195270E /* UIColor+ZLPhotoBrowser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 109D8C0F4B04607753A80D730FFD1F2D /* UIColor+ZLPhotoBrowser.swift */; }; - B963E078896CC9DF2C37C06A438908DA /* UIButton+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8E43DDF6D3250D7F48E5403915C7890 /* UIButton+Rx.swift */; }; - B9AE7983EB3E754C9E655B15C36143B1 /* ZFPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = F5BD9CE490CF87092BB8B234FCA349E4 /* ZFPlayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BA11AE6276ED0BCA627940CF2AA4A82A /* SectionedViewDataSourceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85F57474BB579320C48583C82F914C79 /* SectionedViewDataSourceType.swift */; }; - BA90BD15789C130422EC079A83EA388D /* DriveRouteCustomAnnotationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A058F68A609491EF0B8922E8D469DC9 /* DriveRouteCustomAnnotationView.m */; }; - BAB7A04FB6B2883C06D4EFB12CD4974F /* SDAssociatedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = B5496CD4E14B0472409CE2CD323640A3 /* SDAssociatedObject.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BACD7DFF47298324961BF36945739C4F /* AddRef.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9684E5208AF2080FA246A633E3635E48 /* AddRef.swift */; }; - BB1D61B7D957E411C5CE3E21DAD20C6D /* ZFFloatView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C723BBB371338FF563D44BF6B22F6F3 /* ZFFloatView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BB53D3B70456942057B1D13A5B59CA10 /* ESTabBarItemMoreContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B81C152E4A6B556CB69AD638A10954E8 /* ESTabBarItemMoreContentView.swift */; }; - BB714B9D7C8AECD5513CD2452AD8687E /* _RXDelegateProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = CF14298B31534E097A475D9C054AE38D /* _RXDelegateProxy.m */; }; - BB91F7BFE3AECA8494D5E2BFA3AE593E /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 027A9E5311A914D744DDAD84E24700DC /* SDWebImagePrefetcher.m */; }; - BB9CF389D15F65172C5D16936279DAAD /* FontUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD598F35AF355F8CCB8C1293E8E93F66 /* FontUtil.swift */; }; - BBA64CC3159B0055112684672E6C6D53 /* NSObject+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 31FC849E0CFEB42AB4850F23C1A00092 /* NSObject+DDCategory.m */; }; - BBC905AD0AF2928C275E48F731297B78 /* PopupDialogContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79E0D5C42037D6E6FB18C380AEC11396 /* PopupDialogContainerView.swift */; }; - BBEC1389AE859C1F53CB8588CA32A54B /* ZFPlayerMediaControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C58AF8CDBB957DEA3D2D9A7D27A7A87 /* ZFPlayerMediaControl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BC17BBE68BE2B0233A2B24429A134292 /* JXCategoryTitleImageCellModel.h in Headers */ = {isa = PBXBuildFile; fileRef = F869CFE581148CA743D129D15A275C6F /* JXCategoryTitleImageCellModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BC1FA3C1D43CCA25D6310A112D25E8E7 /* SkipUntil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99FA7AA4D3F316909C923D07213FF1E3 /* SkipUntil.swift */; }; - BC4248890A2765F68B3FCA279352ED4F /* BRAddressPickerView.h in Headers */ = {isa = PBXBuildFile; fileRef = D848D78F80A981643F18272D44A6E4ED /* BRAddressPickerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BC9DE732A9A9A3E6BA2DBE6C7ACB0427 /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5775410DC32C716E14D77A6112044605 /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BD361E4E0FE4613901338D791BD13A5D /* MBProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = 124F389547B3D21E25CC97EDD539A7F7 /* MBProgressHUD.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BD42414ADB05335CCF6162EED02EB0E0 /* SDImageCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 65B2DEE795D9C8799CE151F52AE9773E /* SDImageCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BD6BC8F83AEF023312480ACA7BFEDD1F /* PopupDialogDefaultViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FD023DC306D3D1E9C8B3A68B5BBAB60 /* PopupDialogDefaultViewController.swift */; }; - BD71DAAD9C863C0905780369F5942079 /* _RXObjCRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = 14ED7DE56301CCEBA5CD72994F13F7D6 /* _RXObjCRuntime.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BDD349F62595EE9FFB6FCEB9AEA108A4 /* PopupDialogOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD2645C8CEB2A5D2D9F6F734C385DA35 /* PopupDialogOverlayView.swift */; }; - BDEF2FB7D927B0B5EC012429474270DD /* RxCocoaRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DB7B496DD62ACC8A4B2214846AD6B63 /* RxCocoaRuntime.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BE1A80FF8E7EBE33844C18B9DE10DF9F /* EKButtonBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D63349A15F0AD260D727670549BB75 /* EKButtonBarView.swift */; }; - BE2018EFCF55CB7212A3F720375237CF /* CurrentThreadScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D9858F32402E3110E88707039ACCCA /* CurrentThreadScheduler.swift */; }; - BE5E45566FE7DF80AFCE321E3EB0FBCD /* URLConvertible+URLRequestConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8371E0143D366BA74178AD87E5EE44F /* URLConvertible+URLRequestConvertible.swift */; }; - BE6C77A7809ED5414A68D5B02A0FF6ED /* UICollectionViewCell+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DB99BD101D871A09EAF11638B21F065 /* UICollectionViewCell+DDCategory.m */; }; - BEDC9DBFBB0DC7DD1731D138A43247C8 /* ZFPortraitViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E4070527A194B9408C92FC6ACF6AB111 /* ZFPortraitViewController.m */; }; - BEE76258849282C7DB56B153572C3A85 /* Lock.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE8484A808EA47CF8801A366981A9DCB /* Lock.swift */; }; - BF218C5F8191D91FFD1E960B817BEF4F /* PopupDialog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21674AB534EC96E7927A0F7D146F0B81 /* PopupDialog.swift */; }; - BF2F9348A80AD292B37135521A29FA03 /* MJRefreshBackGifFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = D5EBFD158BED080A89452FC9A7C389C6 /* MJRefreshBackGifFooter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BF4B5199FBBD2138841B0FFE7D841114 /* RxTableViewDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C1E1CE3F760862DD43B023692E505ED /* RxTableViewDelegateProxy.swift */; }; - C01355012AE3DC761464C352BCFD4197 /* SDImageLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = A09335CA1C8179E9CEA8C80B4C4B6642 /* SDImageLoader.m */; }; - C043CD6F673D841BCC733689B68F717D /* DDMAMapKit_Private-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A32142F9C3ACAA35A914FC475558ED9D /* DDMAMapKit_Private-dummy.m */; }; - C06003DD05A5FB9050C6BCE1DD128511 /* DDScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E01259E1EBA2E46C02294D76E8696183 /* DDScrollView.swift */; }; - C06198FCBBF8CEF254BBBFA81EC292F8 /* JXCategoryImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = D710A3950D427273ED8F12C6AE1B243F /* JXCategoryImageView.m */; }; - C08497A34F7671FF094AA92DDB82CEE1 /* ZFPlayerNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = AC90F8EB3F87F865E1F4207E6838FF13 /* ZFPlayerNotification.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C0A16AD03D4F121B5F6D22E51F6FD69A /* String+ZLPhotoBrowser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7572029D42460F4EB02FD88BC9C58997 /* String+ZLPhotoBrowser.swift */; }; - C0C8B5A6D43875BA9B2C23CC0181071D /* DDLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B22324A35118323519D08BE490E6E8A /* DDLabel.swift */; }; - C115C15858CF1B67C2654831E2FA0CD6 /* DDSwiftLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53690792A070ED57C3C78781AE5FD16F /* DDSwiftLog.swift */; }; - C13CCD0F2979956BF520659BC2826A70 /* ZLImagePreviewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF5BFBF1CB21EAF66AAA114EB38C260C /* ZLImagePreviewController.swift */; }; - C1996DFE0601C837A2390FDFF5918A2C /* DDUIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 954BECCD57CC577E2B7C2B9E32C7694E /* DDUIImage.swift */; }; - C1AA0AC4B35580D329308B22D94EFB7A /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76E8749A43C5D7F0DA7AF30DB69F8996 /* ConstraintConstantTarget.swift */; }; - C21392ED3731180649ED72D922AC62E0 /* NSThread+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E02F7EC90E97AA69EC8DB78E0366C0A /* NSThread+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C2690FBB1AF6367DBEFA11F552A14ACD /* JXCategoryIndicatorBallView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D48D4670D4B9CE786D3F3046B64754A /* JXCategoryIndicatorBallView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C27DA232D42C0C1A1860904474D006CE /* MultipartUpload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5317D36007A002590BDDCEB4F3E14F2E /* MultipartUpload.swift */; }; - C2B53EB045512989EDDDE03B3592E068 /* ZLAddPhotoCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DA29D0712B220E74A2165F2404E6A4F /* ZLAddPhotoCell.swift */; }; - C2C39ADDBED33BA6BB6C1C65335BB560 /* PopupDialog-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4972DF1D69095AD65563B4AC673DE6F8 /* PopupDialog-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C313E645865798661616F4F3407D8BD1 /* ZLEmbedAlbumListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DADE6BA1A545B69782EC9D67409C2D0 /* ZLEmbedAlbumListView.swift */; }; - C317B43DB6D2482017A763892A53203F /* ZLAlbumListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83B784AE07FC1CB1854DFC8AEA139651 /* ZLAlbumListController.swift */; }; - C324D23492EC6AD067A7DC7E705DACD9 /* DDButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = B29D005A8A780B7203165EFE4F81CEE8 /* DDButton.swift */; }; - C3396F46162BECCC47A36826B0CA1070 /* SDImageIOAnimatedCoderInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9442CA2161D2AE5B59392E17CFD384B1 /* SDImageIOAnimatedCoderInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C3A8476756DCFE56F36FA4C0C0F005C4 /* CombineLatest+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A5434B5D7B7E8E6B1CD1AD4FC5985DB /* CombineLatest+arity.swift */; }; - C3CFA478FB802F5A6AD209E5E1B34F54 /* UITabBar+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = A954104A7CF64E32BCA6E4A4876AF3C3 /* UITabBar+Rx.swift */; }; - C3F1CFD58CCED57613DB1DDD25B6DF84 /* TYPageControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 41E1E31F6B85A14980B2BEAC9AF7EC28 /* TYPageControl.m */; }; - C40F08C50B0B6DDB15E4F1D6F18213A5 /* SDImageIOCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 952BD25D85E7F1D25827AB7BFC26B4E9 /* SDImageIOCoder.m */; }; - C41E477379FFE61691E0607BF65A4296 /* Maybe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7287EC60AA5E94AF51194C306E2508AC /* Maybe.swift */; }; - C44C4447FBB255B063FF9D6030B5B5DE /* DDMAMapKit_Private-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6195DD4BC0C21292B9CBA555E364D1CB /* DDMAMapKit_Private-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C45A8124E56E7E86995334FC88FAAB66 /* DriveRouteCustomAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D595B691C775C5988FC997E39429080 /* DriveRouteCustomAnnotation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C4A5990975751D34280AF05CC36E2268 /* DDUIImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 315A46D40C5C67E109FAB74191C975B3 /* DDUIImageView.swift */; }; - C4BF6BFB52FEE82B04DB8EA2AE9E5BBA /* UIDatePicker+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9322E153E318C2469BD3EC186192683D /* UIDatePicker+Rx.swift */; }; - C5311161FC021C5AE34AE87AB393E5B9 /* DispatchQueue+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD256580AAFD029F0A80CB33DC9878A7 /* DispatchQueue+Extensions.swift */; }; - C56AD838C0FF689FEA8E5AEA32E94175 /* MJRefreshAutoFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AF2E387421E828F9892DAE7C4A9B989 /* MJRefreshAutoFooter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C581FAFB2BE7E18B9FCA322BE28127A2 /* UIImage+Transform.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B5101DF3F3A75E32B40A1BBB8C07F95 /* UIImage+Transform.m */; }; - C5A65CAA184CBF2D7641A9EC731D4F5E /* JXCategoryIndicatorDotLineView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C7E605941B16D8E7A2CC2D9EDFDB4DC /* JXCategoryIndicatorDotLineView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C5F8C1BAC35773605FE119A52C0CC0DA /* UIViewController+Visibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 534F10DB9CA0B962E011471FA0C50EBD /* UIViewController+Visibility.swift */; }; - C65ED3D3286E2BFCEFB3291A3A776317 /* ZFSpeedLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A6FA7D7D1ECC53270E58F80B5EDE1E0 /* ZFSpeedLoadingView.m */; }; - C672DB50E93AC356BA2EEE98CDA7B9A5 /* DDMALocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = FEB709FBC8A1D887D7688D12BDDA4AC5 /* DDMALocationManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C67841324248C9CA5635AE5BD7C3784C /* DDDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AF29BE15096E94431865592E9D889EE /* DDDate.swift */; }; - C685B4E57FCFFF4FC132CC2C886CC561 /* DDWebImageKit_Private-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FA15597BB8A44C93444D47674F7B89B /* DDWebImageKit_Private-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C68C35A8E72BEE67B8BDE9E7FE89BE46 /* SDWebImageDownloaderRequestModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 085373687E7A083B3531ED2646B272EE /* SDWebImageDownloaderRequestModifier.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C6FB7F94CB7899B5D36DFC3BCC9124F5 /* SDImageCachesManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FA431B39B3D18FEF1C27A7AA65D0D7B /* SDImageCachesManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C70566B479FBFB82538A0E1C48E33C45 /* RxScrollViewDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A52E32B83D148E556C8F617FE1D6AE /* RxScrollViewDelegateProxy.swift */; }; - C71DB5513E761FCDA99D29CCE8EB2125 /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF1BFC1EC849AE1981681FFA8BC94515 /* UIImage.swift */; }; - C76E436525BA78E49B7646D419140C86 /* UIPickerView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE00811D9FC152CBF7585716DC0FD733 /* UIPickerView+Rx.swift */; }; - C7DB4FA42C8E94C52D3D41699874CF67 /* SwiftSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8C42D67609D88558E1450A18B6E59EC /* SwiftSupport.swift */; }; - C809900775721D5EEA2F892F5878FDD1 /* PrimitiveSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18EFC4D0850A7C6517CF4593826B1247 /* PrimitiveSequence.swift */; }; - C824936B87BAA0090A97BCF377ADD5AF /* SynchronizedOnType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6666B8BBA034226611E539BAAC222772 /* SynchronizedOnType.swift */; }; - C848D2C5E05796A51A2CEC91D99D186C /* MJRefreshBackFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = E74BE0175747C3FBC01B32C946F95953 /* MJRefreshBackFooter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C8522895B2B87B2C972E499ED4BCA683 /* JXCategoryNumberView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1099FA7EEADBEF967E93188CEB9E2759 /* JXCategoryNumberView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C8C3D679667C928DD4714C80CFF78FB7 /* DDUITabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 403E99D310867149283418011F5BDB09 /* DDUITabBarController.swift */; }; - C91C59A7EBFE30758FB1BE247A0C1368 /* UIScrollView+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = FB4F8B6DC94DD898D02B59D0ECE08F04 /* UIScrollView+MJExtension.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C975D55EF9DA37044907022D01EFC501 /* MJRefreshStateTrailer.h in Headers */ = {isa = PBXBuildFile; fileRef = C041D18F1C8DA8250A2E225062F890CC /* MJRefreshStateTrailer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C9A4CE5CAA3D142D609453B227BDF3CF /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = DDABBF11E1ABB03D2E87EDAC1FD0A620 /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C9FF0064F6C55CD4E49ED41B2EA17DE8 /* EKSimpleMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93C94BD6E56866844B511F120D496BDE /* EKSimpleMessage.swift */; }; - CA09255FDEA073F52E9B21618886EE8F /* MJRefreshNormalHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = DA2E3333B33EB4CDB413E35D03333FFF /* MJRefreshNormalHeader.m */; }; - CAB5A868A61CB97E7501C0E73726E34B /* DDProgressHUDKit_Private-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D88EF3D6333224E5B251DE09E7F4DE4 /* DDProgressHUDKit_Private-dummy.m */; }; - CAC364FF1EC3CF4CC7DE1AF5A48F6748 /* DDUITableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4F25F41C1101333FD424AA1FE2CBF4D /* DDUITableViewCell.swift */; }; - CB0615A6A31F103532C75B7517795946 /* Dematerialize.swift in Sources */ = {isa = PBXBuildFile; fileRef = C52A36F8A43054CA8133A15E0001C73E /* Dematerialize.swift */; }; - CB0DCDB203D1D4E3DBCF2931711D6A7C /* EKMessageContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31A01C7DB9ABC17AE1F999346AC6305E /* EKMessageContentView.swift */; }; - CBB261988616F006F3D14E6E3E1A1567 /* UIColor+SDHexString.h in Headers */ = {isa = PBXBuildFile; fileRef = 718A346C9ADD65005FF57FF347E2C573 /* UIColor+SDHexString.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CBC7F6CAD45F4BE6E058E1ABA62F83A4 /* DDZFPlayerKit_Private-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 81F71DBB04C399A622FE86723570D628 /* DDZFPlayerKit_Private-dummy.m */; }; - CBE5E198EAC977A29F3EAC4E9D1D56ED /* SubscribeOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF3CE6982BF810FD0EE3F1319498ABFF /* SubscribeOn.swift */; }; - CBEC084A900017F2E5219E7C514B1CA5 /* DDImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3ACEA525758D1E18127B9BCEE0C265C /* DDImage.swift */; }; - CC3AFC20CA13CFBB2D08814074009FDA /* UITextView+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EF6CA5C8605E89D5B95C7F02FBD7D4A /* UITextView+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CC3B11B118C846F367689523882D1B5B /* GroupBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5A9FB1441DD7A880D88E368B2138178 /* GroupBy.swift */; }; - CC55C5B908ADB58120CCC05520A0BFFD /* Key.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08E35A322211FEEB86CE4B42F9E74F5A /* Key.swift */; }; - CC75CF0F969F9E0669EBB3AFDCDAEBD1 /* DDMAGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D3790512280E5375A3BD1510F3FB837 /* DDMAGeometry.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CC84D24A147B6443C21384FED4BCC5DD /* RecursiveLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A615B3287B92F749920B6A3508323FA /* RecursiveLock.swift */; }; - CCE513817FE3AD9CEA59455CD1996249 /* DDFullScreenTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ABF59D401C215C4A851764E937B659C /* DDFullScreenTransition.swift */; }; - CD1FBD083AEB95AF2A233A5D251CC860 /* JXCategoryIndicatorBackgroundView.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EA67026DEA284C13DAA86C65E67D031 /* JXCategoryIndicatorBackgroundView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CD25427AEC067E2E672CD4FCD03E1C0C /* JXCategoryImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 562732E9246B72FCF6D93C026574D0CC /* JXCategoryImageView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CD28B9F3F0DF1EAAFBCCFD3FDFF7E877 /* SchedulerType+SharedSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = A326A4A902F299D94F85612E745775FC /* SchedulerType+SharedSequence.swift */; }; - CE4C9BD43001835DFA0CCA47681C8ACB /* DDBaseTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 436666AB315736653C64EDE0C05F0156 /* DDBaseTableView.m */; }; - CE53DDB87C864CE0B303DD4BB61087FD /* RxNavigationControllerDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2447B2BD2E445D4684FF17AB3FE3EAD /* RxNavigationControllerDelegateProxy.swift */; }; - CE8B98EAA4B4F955B0AC26C5AFC34FD8 /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A877D279EEFB879AFA9861EF2D44691 /* Typealiases.swift */; }; - CEAF6058D42F63FA245DAD43FE4981CD /* UIView+ZLPhotoBrowser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 774FE99FE5FDF8AC16521D3F9EFD69EE /* UIView+ZLPhotoBrowser.swift */; }; - CEF5ADCAD1251F127AC70054BB17179B /* MJRefreshTrailer.h in Headers */ = {isa = PBXBuildFile; fileRef = AC2354E45CCCD818CB871D2347C3BE1E /* MJRefreshTrailer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CF0542E7E27082F0AE761E78228DEB8F /* SDAnimatedImagePlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = E54CB0ECE56F3A274E8E613742729F76 /* SDAnimatedImagePlayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CF8D15E322415CC1628A88CB4935CF1A /* BRDatePickerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 606FC9383BF61B22370150A5B8CE3783 /* BRDatePickerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CFA4B5FE834BF6F5947C854ADC9C5A57 /* EKAlertMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B538746BC9F48CA0F0B3EEFBB523B66 /* EKAlertMessage.swift */; }; - CFCCC0B66A4858FC59896A0D0B4111B4 /* BRBaseView.m in Sources */ = {isa = PBXBuildFile; fileRef = D06E1A210D37002D4D9EDBA17FC74F82 /* BRBaseView.m */; }; - D01491958316B3D143C1F82521420141 /* DDBaseViewModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 795D28D4EAEFE189D8C322630AEBB944 /* DDBaseViewModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D02E869FBC7503DA41EA8292A40085F8 /* EKAttributes+LifecycleActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6EF5A90C013D84B2CB1DC37BABA9C4D /* EKAttributes+LifecycleActions.swift */; }; - D04ED0B157FFAD652458CA96D31C61BE /* DDBaseNavigationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 798474138D25DB49F370DB1108E75E84 /* DDBaseNavigationController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D10A97575FC17A740F4AD23FC87961E3 /* BRDatePickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = C6EE7242DB95F788956D974ED735093B /* BRDatePickerView.m */; }; - D12A6518AD01C22CBBD148C8FC550D6D /* TextInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = F40982896989E38B4742A81E7CC344B4 /* TextInput.swift */; }; - D1381434AA9A73F22A5686775B9BDD03 /* EKAttributes+FrameStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4B6B677BE9FFA7A01674E06994149A5 /* EKAttributes+FrameStyle.swift */; }; - D14356BF87F9E91736CB650348922BB1 /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA96118F51D2C5EFB0892AFF8C3EE26 /* NetworkReachabilityManager.swift */; }; - D1C81C32A93CCE7A35A72FC1D5FFBC75 /* DDImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C074B9CA36FB289B014D60736C04B7D9 /* DDImageView.swift */; }; - D1CA27FA62FDFD654437AFE802F0FDC1 /* EKWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 451EB781764886B195B6449777F7D9EC /* EKWindow.swift */; }; - D1D3FC269DB485011A5C792F187BD964 /* DDToastKit_Private-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BE81CF354513FFE3224BE1AAF856D4A3 /* DDToastKit_Private-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D1F58981CC9B866CA76BD812F0DF5E18 /* BRAddressModel.m in Sources */ = {isa = PBXBuildFile; fileRef = A3F289097EF2801A2430DDA17602D85B /* BRAddressModel.m */; }; - D2182DC0B451B548EFEF84CC8131C92E /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 251DEF303C9617640D84A7EA0306539F /* Optional.swift */; }; - D269044D982531C2EABA7BD3F34101D2 /* CGFloat+ZLPhotoBrowser.swift in Sources */ = {isa = PBXBuildFile; fileRef = A753F61823E68A691D7020B7DFC45383 /* CGFloat+ZLPhotoBrowser.swift */; }; - D2C54215CC9AC0E3263271582DF6F5B0 /* UIImage+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = BEF2E731E0967F055A4140D135562237 /* UIImage+DDCategory.m */; }; - D30295702271BA26222EC0E8D2829E63 /* EKAttributes+UserInteraction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C18A035A3551BF44932FA971E5ED5EE /* EKAttributes+UserInteraction.swift */; }; - D3A692A8D6778B0C530C667E0D2645F5 /* MJRefreshAutoNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = F7FAC3A404B58F4A9D91C818BE388D3B /* MJRefreshAutoNormalFooter.m */; }; - D3DAA79DECE865BDCE076290194B4033 /* SDDiskCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 87754DB8E6B2F3DEF68736B7B4CADCCD /* SDDiskCache.m */; }; - D3F6591486E5671C716779009415B650 /* Never.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6409751BC87B860116CD41641A4EEEB /* Never.swift */; }; - D41706C216134FC77605103354F07C42 /* ZLAlbumListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0803A53FC3AADB3C3FF8CF540D70628 /* ZLAlbumListCell.swift */; }; - D45471D1E2289BEDB132AE8868F21AAA /* MJRefreshGifHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 24ADBC076754485CD88040174BE822E6 /* MJRefreshGifHeader.m */; }; - D4DE36B575B65B54091CB7179DDE1242 /* EKAttributes+Duration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EDEEB9E0A8CDC712617883D540B4FA0 /* EKAttributes+Duration.swift */; }; - D4F67ACDCA6B952008E043750BAC4940 /* JXCategoryIndicatorProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 1700F928EA0CBDB932CFDF241BFE6327 /* JXCategoryIndicatorProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D526D9C8D89180F4256A88EE5D008D26 /* TVMonogramView+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDDC0F39144AAC8973E29871590F952 /* TVMonogramView+Kingfisher.swift */; }; - D54C1EB233C3DFF0AB1C78D665B7A5DF /* SDImageCoderHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = A04508225E6AEC8C92FEAF73DFD200D0 /* SDImageCoderHelper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D552F57595574A84A82587BF008F32BB /* DispatchQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7963ED1818D2E09A87008F84FD412B8F /* DispatchQueue+Alamofire.swift */; }; - D57BCC1A2B5001E4FC3AAB3D8A2A3759 /* BehaviorSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56B9E26358C9F2398DEEB048994BE93A /* BehaviorSubject.swift */; }; - D591717337E72C406E7C3F0BF9F4907B /* UITabBarController+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB5BDCC56546B80495D4FD3626AF7450 /* UITabBarController+Rx.swift */; }; - D5F0E537FCA14DAEBFD97E634B6955FE /* KFImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA6A20F53C1068FD62DDBAD78DC9CA28 /* KFImage.swift */; }; - D6696173A60A63EAC3F30D4BBC21C72E /* SDAnimatedImageRep.h in Headers */ = {isa = PBXBuildFile; fileRef = A6EF0DCA0CAA0174A8949A76D1CAE70D /* SDAnimatedImageRep.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D6E51D328530E74EBF3DFBA6709DE9D0 /* UIView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 153F0BEDCBFEB268003315167CB6A723 /* UIView+WebCache.m */; }; - D71C467819D0C24DA0612DD278C6DE04 /* Materialize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 382F3AA039A012560669E2786E5433D9 /* Materialize.swift */; }; - D76130AD70A7483771A8051BE486A761 /* MJRefreshAutoGifFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = AD5BACCB50178F49F6749843CEE08034 /* MJRefreshAutoGifFooter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D85E58106957DB73F0CC08DD6C979742 /* SwitchIfEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72433C83B59FB3A89A9AC9B74431D3BE /* SwitchIfEmpty.swift */; }; - D86F0D26E943BB73BBB29356FD203D18 /* ZLAdjustSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1809476E15987C3BE9B96C520F450AC2 /* ZLAdjustSlider.swift */; }; - D87C8DA2C35F94CD5157A6F37F9A9728 /* EKAttributes+PopBehavior.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6A3D4567910BCC6A6221DFC75E5D0E9 /* EKAttributes+PopBehavior.swift */; }; - D8A5713C93E38A1BE6A52CF5C91C0196 /* CALayer+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 9940CADCEF66492949D10215DD3AB118 /* CALayer+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D8DDE2D559F66BDDAFAEBD52C6E4176C /* NSBezierPath+SDRoundedCorners.m in Sources */ = {isa = PBXBuildFile; fileRef = 56CF8531B5D158BE68E0B1C29BE65264 /* NSBezierPath+SDRoundedCorners.m */; }; - D8FD93FBAC2166F333BA48C4D726B091 /* ZFUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 5553370591A8C083690A1FB20C27F538 /* ZFUtilities.m */; }; - D9608FB125F849D4B3C79BFC4B8023C3 /* BRPickerView.h in Headers */ = {isa = PBXBuildFile; fileRef = CA7A822181B9F7B98B45DE64CE0662BA /* BRPickerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D9AC52596EBDC826499603EC3A3A4DA0 /* DDUIGestureRecognizer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 806ECCC14D9B5F7156BF228820319E04 /* DDUIGestureRecognizer-dummy.m */; }; - D9B8B43830362EE0C77A55B6CE157ECA /* UIImage+Metadata.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BBDBB6FA348C40B5FA3462EC0B5A081 /* UIImage+Metadata.m */; }; - D9C6F585D90AB46FF392513FD0EE42CB /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61795DD4AAC00E4DE2DBFC88353480A3 /* ConstraintMaker.swift */; }; - D9DFB73AB4BE6CB973F6F316B2A6A765 /* UIViewArray+QuickLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA001FD732029591053793CD9266C318 /* UIViewArray+QuickLayout.swift */; }; - D9F15D8E6C554086A04A49DABB47A67C /* UITableView+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = D23764F0D3CAF944BDB1C9D6BBD2AD48 /* UITableView+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DA39F13925A217C94F8582009262EAA2 /* EKWindowProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17C6BB659A7CC437641CCB80B4A07F44 /* EKWindowProvider.swift */; }; - DAB323FD8A75DAF084E56CEA380D6838 /* Resource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06588AB9CE11B508EB5E70F5C408D372 /* Resource.swift */; }; - DABB71645C0A42245F89523428F94FC1 /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F5271387C32E0CEF044AA35FED48BE4 /* ConstraintLayoutGuideDSL.swift */; }; - DAEB613013D8DAA244588733E413BEBF /* ConnectableObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA722024DF90D36BDC855C49AA1E84E1 /* ConnectableObservableType.swift */; }; - DB15F0057F1CC17F374030B02456DBD6 /* ZFSmallFloatControlView.h in Headers */ = {isa = PBXBuildFile; fileRef = C33C1BB66CB81994191C0E4B8665F134 /* ZFSmallFloatControlView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DB534E0B9BCE28F670003044F0242932 /* NSBundle+BRPickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = DCBC10FF75DCF54BF4C8BE4226106158 /* NSBundle+BRPickerView.m */; }; - DB546CEBEB12A61D98A707A776672188 /* UIScrollView+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DAB922164B4F645E967BC55BBE1B645 /* UIScrollView+MJRefresh.m */; }; - DB5C9157EC5FBF29CAA2889AF521DEE4 /* Deferred.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2875A2E717CC17FABBE08271D33F0C80 /* Deferred.swift */; }; - DB8E1097EFEC248D83112C45B37D7B88 /* MKAnnotationView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = B4F4CECFE5F41E6594CCD5F0BD801E74 /* MKAnnotationView+WebCache.m */; }; - DC1C2216E66ECA445192FE61CBDEC2F5 /* OperationQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 942C14E695852E8D238490D2EE310686 /* OperationQueueScheduler.swift */; }; - DC2AD54F59773138F1461A45C2F19097 /* ZLPhotoPreviewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BD45C5B1EC5DCCD150E978F75625687 /* ZLPhotoPreviewController.swift */; }; - DD0D82EA0192E44DA541CEC3B4A673CA /* UIView+Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7E31D8C2FE8DC2AC72DC429CAF78F0B /* UIView+Utils.swift */; }; - DD0DFABC55424FB2AEE317F53FC64F1A /* Skip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 656B9F9344610D50C24BA187D7C06D36 /* Skip.swift */; }; - DD13D1582CFCE65C448C2B56AB55ADB1 /* DDAudioService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 643999E3C7751C8F2484B249A02199E4 /* DDAudioService.swift */; }; - DD693F44E362191D7A11E49AAA07D969 /* TYCyclePagerView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 384EB8BE83E3A97EEC0069B8558B9316 /* TYCyclePagerView-dummy.m */; }; - DD792E3784D6D144A65A189A78A58428 /* MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = 79F0BA79985E6280842283FB0DB3BE6F /* MJRefresh.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DD7FD9534175BB8CA05C83AA8BDCF23A /* DDAudioPlayerKit_Private-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A49F0C945751755977DBF49FA086011C /* DDAudioPlayerKit_Private-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DDF9F1CD51A0B6E3FAEEC690269482E6 /* NSSlider+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C0372FB495EE23AA7290F4969203BC4 /* NSSlider+Rx.swift */; }; - DDFE00C961BDCC08086F9939477303CD /* DDTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8DD82B349770CC15C6303FB2010C745 /* DDTextView.swift */; }; - DE3F89AA06EBBA984828544D70488A49 /* UINavigationItem+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = F41A87A84B122BF197E2AEDAF8C61252 /* UINavigationItem+DDCategory.m */; }; - DE4F489481A1E3AD69973B943DE2E414 /* DDBaseLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C26366BE5C66DF9BD4A444D8916F6AE /* DDBaseLabel.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DE63FE12234373986128740BCD872713 /* Observable+Bind.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26851AF6F5EBFADD0D752DEB55869AEB /* Observable+Bind.swift */; }; - DE7A6690710B58A11F691A7FCC558059 /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50F91B65F8D524CA6D893A62F527BC0B /* ConstraintConfig.swift */; }; - DEA9C3D6CE995A50A590F7844D364C53 /* ZLCustomAlertProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF26C5C758D8FA0F5CE7716DA649070E /* ZLCustomAlertProtocol.swift */; }; - DEAAA0FB6DAC4E8D6E9F37F3FFF7FAE9 /* DDBaseViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 07C7B77AC79010B011C9130BDAEFAE07 /* DDBaseViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DF217CDC17FBC6B0860732A9547F6805 /* ZFNetworkSpeedMonitor.m in Sources */ = {isa = PBXBuildFile; fileRef = 811F0240EAB8C42BEA3E9912D916BBAE /* ZFNetworkSpeedMonitor.m */; }; - DF958914EFE9E21C6C5E1BD242222E0B /* DisposeBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 712258C5A1A8F6094095053BD36BE3B1 /* DisposeBase.swift */; }; - DFA46412CF2FE571B31ECD6CC8EEB9BE /* SDImageLoadersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 80158840C248659DCB2FDA6F747B60BD /* SDImageLoadersManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DFCBE8F061AA424BFCF63CACDC73B4AD /* RequestModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7902230EB4AA5626B7A3B24F2E01A87 /* RequestModifier.swift */; }; - DFF1DB48DB0640CE62267571AB775F15 /* DDAutoUIKit_Private-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A0F62B3B0E6EF577D6728119CF869D1 /* DDAutoUIKit_Private-dummy.m */; }; - E00794F0E88E22C443BCE5BE66457249 /* car_xingshi@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 57620B74705E53124D9140938290B8C0 /* car_xingshi@3x.png */; }; - E017B4EF323A0EBD732F33B9C92FBD0D /* UIImage+ExtendedCacheData.m in Sources */ = {isa = PBXBuildFile; fileRef = 598CBDC2759DC5A39189E1145284EEC2 /* UIImage+ExtendedCacheData.m */; }; - E01CDA460DAFCC348AFF41C35B802C89 /* UIView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = B21FAEC9D38F6E10B6AFC8070D781676 /* UIView+MJExtension.m */; }; - E034031C40FE734AB1A4ACF321EEB12D /* RxCollectionViewDataSourceProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 118D92AA162B4B2BA4022172E3B3D2DA /* RxCollectionViewDataSourceProxy.swift */; }; - E0528E490DB59F03F3D21D2509CC36E9 /* EKContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B0B1A7BEABC653A6A77F139744977C9 /* EKContentView.swift */; }; - E0535C22C58CFE61C7FC72412989EE7E /* SDFileAttributeHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = C13A03B3256B854FBDD7EB286785A113 /* SDFileAttributeHelper.m */; }; - E07F5D56A6657C9297ACEF8B1E6047A3 /* ZFVolumeBrightnessView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9334E4901AFDADE6CC32987663B2DA25 /* ZFVolumeBrightnessView.m */; }; - E0A97352EFF47010A3449A81255CE5FD /* DDCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F127BF93108C5141D82F4B1DC73C17F /* DDCollectionView.swift */; }; - E12619A2F1D79867781EE5C6A5C4F3AD /* ObservableType+PrimitiveSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D2C8B8FCE4545423026D47FA0BAF93B /* ObservableType+PrimitiveSequence.swift */; }; - E16993B02DC28363DCEE3C0A6625288D /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 302389AF8270E7C9B43A9943E089E17A /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E1A06049FF5CB696BF410CBDC87EC7FC /* InteractiveTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2E9949BCE8F768888E03E679CECC7C7 /* InteractiveTransition.swift */; }; - E1FDB8D42137D8BF8709EE551862079B /* RxCollectionViewDataSourceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD65CB001A4CB7ADE94D956536C548D /* RxCollectionViewDataSourceType.swift */; }; - E2138FFF0F7680DD4FAC45615082CA2E /* BinaryDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9372CC07D51DA7B97C860B833A7CB648 /* BinaryDisposable.swift */; }; - E2398607939A65FDFF4982710B41A8D1 /* UIImageView+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 936932DE20A086927D0C0FEB2F50A814 /* UIImageView+DDCategory.m */; }; - E24B4E923380A82510C81933D8ADEBC0 /* Asn1Parser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06BB61351E424DCB705710853DDB00F0 /* Asn1Parser.swift */; }; - E27EFB8F48312FC0268C6B922BA3474E /* MJRefreshTrailer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E9CAE3E2A1886A7E5366B9EB02019BB /* MJRefreshTrailer.m */; }; - E29BAD8968297677EC4C9976C29D1860 /* Observable+Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9047AB16D96E34F038045641FCEE0CE /* Observable+Concurrency.swift */; }; - E2CBECE556D34D563C01A9D12D85EDEE /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 209FAB8364FAFA09461D2E3FEE43031A /* ConstraintItem.swift */; }; - E2D1C8236E08CA248E758FF3BDDD2BB1 /* JXCategoryTitleImageCell.h in Headers */ = {isa = PBXBuildFile; fileRef = E887C966FAC9BB3EA4A498001949642D /* JXCategoryTitleImageCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E2D3345435E9F597C1445F09F5BD5FF4 /* EKAttributes+Scroll.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5612297CB1E62B65F4C43D6CC1F895DF /* EKAttributes+Scroll.swift */; }; - E2EF5387D71F2D5DEC1F9C0FE6026C1A /* EKEntryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41CCAF8F8DBC6FB73F1598E27D048521 /* EKEntryView.swift */; }; - E2FF272E289323C7679973E60C0CD959 /* Amb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 885ED7885E4BCED9FE28C757B18EC39A /* Amb.swift */; }; - E30D053236494B7F13FCF9171D8EF69A /* UINavigationController+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6EF940D2FE866F6113D323A558A7820 /* UINavigationController+Rx.swift */; }; - E37C1ACEDAAFF4548DE69CEDF36036D7 /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFFA3748DBD1C58F25A0B59AFF5C5313 /* ConstraintInsetTarget.swift */; }; - E3DEDAE9D05FB9EE7F9EEC242BDF1BBA /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FE26F76E732DEF8C65ADED5FC1382A1 /* Errors.swift */; }; - E3EC4DC132466B25561D71A60EFCDF24 /* AtomicInt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06CB1C2A1EF28D471E1541ECC66BEAE7 /* AtomicInt.swift */; }; - E425B1792B00EFB153A9BCAC85B730F4 /* DDViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EA60EF7A1D34307AFF7A81D4E680E9E /* DDViewController.swift */; }; - E42BF0E600D0189F7F9AD5329D385334 /* DDTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4185E6DD953823F27950B2497D1A1FFE /* DDTextField.swift */; }; - E593C3895A05AA2F2E5B2469A9C3E95E /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1706A4772B2BBAD1B39CA90FD77B158B /* LayoutConstraint.swift */; }; - E5F6C631FE32C41FFA4610E64AFEBEF6 /* MJRefreshConst.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F972D067C7E719AB2AD30877DC5080 /* MJRefreshConst.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E60B45E5647579F76C24F8451C2EB8F7 /* RxTableViewReactiveArrayDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840E87C9C8939780C2AD28E56EB9CB52 /* RxTableViewReactiveArrayDataSource.swift */; }; - E62A2816F9FFAF952C0E47C31B28D461 /* ControlProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F1D62E18BCC5A0F453C5AA283BDD386 /* ControlProperty.swift */; }; - E62A3E33CD01B815039CCA9622117DC2 /* UIColor+JXAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 1264866D6B7A332393A6A0FAA7E8E4E6 /* UIColor+JXAdd.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E638D3FCD2120FD5A105AEA12DDA46BC /* DDCategoryKit_Private-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7ABEA293518578544038E29B85A346D2 /* DDCategoryKit_Private-dummy.m */; }; - E674B743DA97272AC8135AF21CF22F80 /* KVORepresentable+Swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9810D334802900F0950C50EC15F98587 /* KVORepresentable+Swift.swift */; }; - E6AAEB8C90F798D2176874B496FAED5B /* ZLPhotoUIConfiguration+Chaining.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEDD4D0FB94D73F7564C989B43F262CB /* ZLPhotoUIConfiguration+Chaining.swift */; }; - E70ED922DB0307C23F12F9C7B417BDAF /* ImageView+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E2FE2F7C3AE7D2BF2ECB8B23DAC4EC1 /* ImageView+Kingfisher.swift */; }; - E7D8977C3725A243870793FC8761451E /* Delay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44CE5DB2B5E2C512B1EABB9D218832F6 /* Delay.swift */; }; - E81FFF1ED445A3DE95215901193CAFDA /* PopupDialogButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7160A21DD11FB1310E0D52335060432 /* PopupDialogButton.swift */; }; - E826B398FF000673F909C8468DA77F14 /* MainScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E32B5B8F126CC4469DC4B28CA408AF4 /* MainScheduler.swift */; }; - E8400A943E9004BE6A770856DC99C082 /* NSButton+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6C2EF326DC11741D484EC5D8EDACEA0 /* NSButton+Kingfisher.swift */; }; - E89EA5216E074A8E2073062D8AF5EA40 /* JXCategoryIndicatorLineView.h in Headers */ = {isa = PBXBuildFile; fileRef = 11460665CF36BD5EA4CA0A99BEAE7AC8 /* JXCategoryIndicatorLineView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E8A2CDF5B1D642F2C3225619514140C4 /* EKAttributes+PositionConstraints.swift in Sources */ = {isa = PBXBuildFile; fileRef = F040B492EFDF0AFBD24823DBC534B320 /* EKAttributes+PositionConstraints.swift */; }; - E8F1355FE55953956F3239C1987AFE76 /* KFImageProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99F00559AF6546E5B86BD4CF3EA790F7 /* KFImageProtocol.swift */; }; - E8F5C10BEE66E0A8E67F786EE75C4DE3 /* UISegmentedControl+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = A647AE6CCB05EAC4D6B466367BA7C249 /* UISegmentedControl+Rx.swift */; }; - E90C791097260FF982B97A17351E9DE3 /* ScheduledItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C22936827447971972D59197C66EC0E /* ScheduledItem.swift */; }; - E935E55BDB37F2E9B02D54AE9EF58BA6 /* ImageModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 648BA3BBCC697CA4A2F235AACD7B07E7 /* ImageModifier.swift */; }; - E9466C49123B6DB38997B61FBE1A864C /* SDImageCodersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B7AB14FBCA5BC37BED3B5BCEBBF6E76F /* SDImageCodersManager.m */; }; - E94B3EE66EBD1003468410DFEEBCA688 /* ZLPhotoPreviewPopInteractiveTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCDDAE64E175BDF68A49846D5367AC78 /* ZLPhotoPreviewPopInteractiveTransition.swift */; }; - E95D335A7ED46DE041EA8A3A82E3FAE2 /* DriveRouteCustomAnnotationView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D15009FE79448A8D3C61B246F3E6637 /* DriveRouteCustomAnnotationView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E9D877C0FC7A2087F6B5FEC67FFD4CFE /* JXCategoryView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E03320A291BFDD5AA1545F5FF07DB996 /* JXCategoryView-dummy.m */; }; - EA20E7451CE67E411DAE038C6EE49472 /* SDImageCoderHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 15B41E543A86CDD8E132B8E735A02993 /* SDImageCoderHelper.m */; }; - EA8238C94EF2404183162571A60D4BBD /* ImagePrefetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D9510AF36E7EC45CD71E2C15F3863D5 /* ImagePrefetcher.swift */; }; - EABB7C47885DF8E1EF8E0E53F0E681C4 /* Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4761AC1D3EEC34D23B8AB8FB50CD94F5 /* Zip+arity.swift */; }; - EB34415A0817B6F0EA97C89773A6FB99 /* ZLEditImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9352DC0994F4DD2F118943205CCBB176 /* ZLEditImageViewController.swift */; }; - EBCEE8F5579114E5F617B63B87CF4B48 /* UIView+QLContentWrap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 704719AC18CD745B19709E9725EFB365 /* UIView+QLContentWrap.swift */; }; - EBD415C26D6A34A0BD3DC50D43856960 /* ZLAnimationUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08BA247FE753C21738F05CD4BCB9962 /* ZLAnimationUtils.swift */; }; - EBFB3E5BC755784C22270B8ED231D67B /* CacheSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9502367637953912902AAF7656758D40 /* CacheSerializer.swift */; }; - EC2B3804DBD7244270FE3CBB4076AE22 /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34168E57D403C1E21D2EA1ED334153C8 /* Bag.swift */; }; - EC30EA207AF0A4D5BC1842E7120948FD /* NSAttributedString+DDCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 963A0B57E90D50D470C62B6A03E4C374 /* NSAttributedString+DDCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ECA819DD954059EEB6A5A08A3A3341E5 /* Kingfisher-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BFA7392806DD28A68BCAC8E86946F153 /* Kingfisher-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ECB14F14E7999F982F82BA091BA297D5 /* Debounce.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED3395300C0C4DD1C5ED23CAD2620B09 /* Debounce.swift */; }; - ECB1F582CE1CE8FED0ED585CAAB64813 /* TYPageControl.h in Headers */ = {isa = PBXBuildFile; fileRef = D2FBC5D745AD1C4A03609880FFB133B9 /* TYPageControl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ECF8E423DA88D54D8D943575E54CD51E /* FormatIndicatedCacheSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35334AB4B90B42CBD33861B6540D33EA /* FormatIndicatedCacheSerializer.swift */; }; - ED3F8719AE0C4D9464C372D0CB5D2E14 /* SDInternalMacros.m in Sources */ = {isa = PBXBuildFile; fileRef = A7115A9F7CE8071343308945E6AE1C2F /* SDInternalMacros.m */; }; - ED9F225882E966D67FD120629EE2B926 /* SDDisplayLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A110122034BF53FD4C701DA219A0B44 /* SDDisplayLink.m */; }; - EDB63409EB6B2D945EB157D8A6CB1E4D /* MJRefreshBackFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = D9D9B2753D60AF012D5427AEBECB1D93 /* MJRefreshBackFooter.m */; }; - EDC4065EC27A50BCC6B13FC3ACD00185 /* JXCategoryTitleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 80EC8747B96ED82E29BA807FFDF3A1A6 /* JXCategoryTitleView.m */; }; - EE379B4848EDB17BE1C4D32E97B930A8 /* ZFPlayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = AC19804ED42A23C30B6831CAEC3BE55E /* ZFPlayerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EE4F330BFC8B694E49B714C8A93CC916 /* RxTextStorageDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85C82F2C72D480C27329E8DE6C874E4E /* RxTextStorageDelegateProxy.swift */; }; - EF36E84507DB598234E41BA12B9949A4 /* ImageContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1F313A4C922FA646400FB676210D8AC /* ImageContext.swift */; }; - EF5F3CF8BBFDE4BEA2A2380A503569E5 /* JXCategoryBaseView.h in Headers */ = {isa = PBXBuildFile; fileRef = 5207A181F2C86F2FDD4D0B24485EC145 /* JXCategoryBaseView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F001B72EF2941419AF8310B30D8FF42C /* IQTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63F1946A930CD2F8416A180A748C89B2 /* IQTextView.swift */; }; - F0133CE9DC3178B35F2AF1F29D535F7F /* URLSession+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB61BBB8A3E8C58DEBBBA388DE476E3C /* URLSession+Rx.swift */; }; - F02048C2A20F7616F84B024D49DA7218 /* TYCyclePagerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 85B13CE0968FF2CAC03FA1775FF4DE8F /* TYCyclePagerView.m */; }; - F03EEA22090304A49A88AC9A826A7571 /* MATraceReplayOverlayRender.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A6DE22C0FFCF813D3A7FF22FDA7AA0F /* MATraceReplayOverlayRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F07D944FB9EE7D69319AEA7DF8818876 /* JXCategoryNumberView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AB84CB658B71E80AB970C1BE896BCAC /* JXCategoryNumberView.m */; }; - F0B4282A102ACF883C5664EE6EFB2081 /* ZFSliderView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C73804AEDE7540DC69868ADD55D1AE3 /* ZFSliderView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F0B6B921967271EEBF6A446541AA1C92 /* Reduce.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40DBBFFF4A55B7E8AC42F0211E3F37FC /* Reduce.swift */; }; - F0BFF5608C4202CA0453E53F57D91514 /* DDProgressHUDKit_Private-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B6D6F7392E7F77CC615EF6B2A71F0211 /* DDProgressHUDKit_Private-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F0F38230060D730610F5815650288F1A /* DDZFPlayerKit_Private-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C13B0001206C640A62A5E2E04C6C9587 /* DDZFPlayerKit_Private-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F17BED9A66F08C6647EB4CCED0A8EA8C /* DDBasicControls.h in Headers */ = {isa = PBXBuildFile; fileRef = FA42C3E9A0BF15E687C4271CFC92E8D7 /* DDBasicControls.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F19174B6F08BC6807F7168938A624447 /* NSObject+Rx+RawRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA77BE7C3BCC65C4BD78B9CB0EAB4EAB /* NSObject+Rx+RawRepresentable.swift */; }; - F1B8D62196F1AEB3E7F0D9B1EFE4FD15 /* ZFPlayerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 295F96681C9FA1B63215C978EF3FE540 /* ZFPlayerController.m */; }; - F1C01B0235CA4C0D6DDA075BFAF15BEB /* UITableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 833946F37DE590CE2D3BD5D428F6E965 /* UITableView.swift */; }; - F1CD6661FAFABF16CD930C30A0566C47 /* JXCategoryDotCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C5625CB64CAD78405F5F917FB912075 /* JXCategoryDotCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F20D0C75BB1C6DF67CB0AEBA120EA029 /* ScheduledItemType.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCF62EAF60C5015AF8A883FEEE83907C /* ScheduledItemType.swift */; }; - F2B8385F9E67C1CF82BE8221FA419DF9 /* CALayer+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = AECEFBBB054915F457624F87E74D4449 /* CALayer+DDCategory.m */; }; - F3128567652CC62E62B1B8DBEEC5A304 /* UIEdgeInsets+Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2CA575A587A32E09AFE79C40FEC5169 /* UIEdgeInsets+Utils.swift */; }; - F3297C24B7F6D6AA6679633470AFD387 /* DDBasicControlsKit_Private-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 84A0BC8B18D1DA409E5D51C2A0AEDD56 /* DDBasicControlsKit_Private-dummy.m */; }; - F350A1D21C18D72777925C6B41AB3BB4 /* ImmediateSchedulerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E181C13ADB17FC57B6A09E78D0FAA07 /* ImmediateSchedulerType.swift */; }; - F36D2AA3EEE04F0B422504D6B9DDCCCA /* DDMASearch.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F95295E41697E40BCE6A61B148767E2 /* DDMASearch.m */; }; - F39F0FA7DEC7786370959E557810E16D /* SDAnimatedImageRep.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A800B2680C046933AA98E7BF241507A /* SDAnimatedImageRep.m */; }; - F430CB626CD4AC2EFDD5970D691BA9C1 /* LockOwnerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AEE3884E8EC8EEAAEFB67D17CC68D60 /* LockOwnerType.swift */; }; - F4B076723D3EEFEE244EE1009B3CCF28 /* MJRefreshBackNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = E18BECCC3AE278850CB90921D0269F8F /* MJRefreshBackNormalFooter.m */; }; - F4BA1100C7409E860A413BC0F2B3AEA4 /* DDBaseModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 039F00DC58F9C3A2C0A72729AF6B957A /* DDBaseModel.m */; }; - F509B1FBA17CE6C9D85434E17BA64618 /* CGContext+CGImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23ED62DFB1F578DEBE7EACFECEB5EC39 /* CGContext+CGImage.swift */; }; - F516F3D6A4D4372838C9043170D9D653 /* DDBaseImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 347979FE86A13B4C3ABA621A32CB62DE /* DDBaseImageView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F525906C5A016C296FF10CB143F624BD /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 416A70C7DC57E4465E15FAEAC9E1F89A /* SDWebImageDownloader.m */; }; - F595B5D9F76D3292E682DEC1E1DBA59A /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = E163311AD439D782918263286D181B9E /* ConstraintRelatableTarget.swift */; }; - F5BB2BEFDB9F1EA2A0A168F46096A065 /* JXCategoryTitleVerticalZoomView.m in Sources */ = {isa = PBXBuildFile; fileRef = 97E5521DDF6771E927CED75D77239015 /* JXCategoryTitleVerticalZoomView.m */; }; - F5D8728188EC93EA5FAF5CA84A2C3E3E /* SwiftEntryKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 226798F0F42A0B656112DFB464D2ED72 /* SwiftEntryKit-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F5E07701094C970A9458F8BFDAB4F3B1 /* BRBaseView.h in Headers */ = {isa = PBXBuildFile; fileRef = D88894EE3045F82FC515A0F14F7E4550 /* BRBaseView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F5F6F5A843B2EDC770A466CBA835F1B1 /* DDBaseCollectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = F76ACC56BA5AAD1D563E19E5841891D6 /* DDBaseCollectionView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F610D4583B86C6599C47292F1D1AC91D /* UIBarButtonItem+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9919F7353E8B43CA1CE542EF20E9748D /* UIBarButtonItem+Rx.swift */; }; - F6771DBD2D0EFBDC47030E698BA56780 /* JXCategoryDotCellModel.h in Headers */ = {isa = PBXBuildFile; fileRef = E31E5E80EAB44D96A2F4FFAF84AD65CC /* JXCategoryDotCellModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F70F7DABAD548AC26AA54EB60E25EC6E /* ObserveOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD31E03CA470FCAAC8ED316DEBF0318 /* ObserveOn.swift */; }; - F7320F1A3B3B6F57FCE6DD4506442B71 /* Sample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27709638D16E4E14D83FC485BDF23BB6 /* Sample.swift */; }; - F7869ECB08349199C0FCBC6ACA0DFA89 /* SDGraphicsImageRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F9954B4961F79AD2C528D67355158EF /* SDGraphicsImageRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F79338C3D732C666311E9A66D3611901 /* JXCategoryIndicatorParamsModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 67698D6E6F85BD99D96F13DF9726BC97 /* JXCategoryIndicatorParamsModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F7C751E3C8D7FB88659AC708054E0EA5 /* Just.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D2D0EAEFB4F5549BE50EC06FF3F85D9 /* Just.swift */; }; - F844A55CF6790D853D264312D6F883E0 /* UIColor+JXAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 67A6BB9584DD0743998EF83E9E6733DF /* UIColor+JXAdd.m */; }; - F85954F8ECD9E80718B093791EA95425 /* IQUITextFieldView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F21B23F9142424D9E0FEE0495DEA217 /* IQUITextFieldView+Additions.swift */; }; - F87C3F12FA754F2BF1068C663D2E8EDC /* SDWebImageError.m in Sources */ = {isa = PBXBuildFile; fileRef = 7085F55B8770E2A80C482C0260D650F5 /* SDWebImageError.m */; }; - F8A7F261739C12A8135E4A47FFA7772E /* SDWebImageDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 34938F9CC1D16CB3D3D73E959816D3E3 /* SDWebImageDefine.m */; }; - F8DDC9D4E7FFBE6F0911E2D7A4DC9F80 /* Queue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92E4EEEDDDB44A6C80BAFE943472DC5A /* Queue.swift */; }; - F8F722B95C950969CB8FCA2543BFE113 /* RxCocoa-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 883CA055738599B7362537690237CF24 /* RxCocoa-dummy.m */; }; - F9E6C48FEF11BDA55B335E1060721D74 /* EKColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 380AB04F49D86EFF23C80BA0B9985AD3 /* EKColor.swift */; }; - FA10EFE327CA4876CC065BB2244EB1B3 /* UITextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCBF6DEC90B74616999D2954B21EC702 /* UITextView.swift */; }; - FA145D73018E7D2FB142938415DB42E5 /* SDImageFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = D828469C73EA271E77A59D7E03735EA8 /* SDImageFrame.m */; }; - FA398422E4E9153C85204F33651B6414 /* UIColor+Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CE4C61D949DBCA1849BD1D3BB684F87 /* UIColor+Utils.swift */; }; - FA46D15B11235046C6234111666D3BBE /* DDDateKit_Private-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 581FA386B9CE43B28BA7F9F3D0A2A563 /* DDDateKit_Private-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FA66F11E4B7B60BB248A05F2F46AD00D /* Catch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FAFEF99EFBA6FF7F7E9C96337811270 /* Catch.swift */; }; - FAA6FD10E049D4D922B3D6F70DCBB926 /* Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54890BBE3275AB287FE321EBC05E1113 /* Kingfisher.swift */; }; - FB16503E903E5B60EE15B0DD4D8562D1 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 51A507B1A2D0CE3FD329A654EEB872E6 /* NSData+ImageContentType.m */; }; - FB543E6A5F8C2EC92FF45630C6D5F49E /* EKAttributes+Presets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39D0C74A85C6A8657704AD7AA6B953C4 /* EKAttributes+Presets.swift */; }; - FB63C11A4701790527577A12E5CB1681 /* UIScreen+DDCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 515837659844D168A62B87B0BDC7DA6D /* UIScreen+DDCategory.m */; }; - FB726649DB4AFB1EF71F4D6F6F4FA5B0 /* NSDate+BRPickerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 71D6374CE4CA55B10AA45F89C4B9F367 /* NSDate+BRPickerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FB81983B2C1D737FB57EC95493026EBB /* ScheduledDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8792A7A9537CE4E647DDE0061A9556A7 /* ScheduledDisposable.swift */; }; - FB9EFEF61EC1B810AC75ED83BF92A9D1 /* Delegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4228D86157E1C21EDE045BFFD3FB2681 /* Delegate.swift */; }; - FBC89193D9C95C427AEB8FAAA0184E43 /* ZFKVOController.m in Sources */ = {isa = PBXBuildFile; fileRef = 878580EFC20BDA5466D9EF9E44549D32 /* ZFKVOController.m */; }; - FC061D954352F832FBE08C01973F7DF7 /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A0459A7149A6F37C650DDD18A70F5DA /* ResponseSerialization.swift */; }; - FCED5EA34F470E1DE64CB9C632245922 /* ObservableConvertibleType+Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E279A08B259B797B34DCDC2CCDCB34B /* ObservableConvertibleType+Signal.swift */; }; - FD0574A25469F0713B34ED1B682755F2 /* ESTabBarItemContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23690B28D6FFD2554B2D3954ECB97E68 /* ESTabBarItemContainer.swift */; }; - FD70F673A044AAAE0C5AA9739516065A /* MJRefreshAutoGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = EDD6E597DB96016769077D11DCFEB743 /* MJRefreshAutoGifFooter.m */; }; - FD7228A6A8B2236D44BE57275510EEAC /* ZFReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CA67F170CF46792086DB53F69F5E540 /* ZFReachabilityManager.m */; }; - FDC4C980438A74360492FF2B22F13D2F /* InfiniteSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB255358604A2A3A9BE6B9B640EF332 /* InfiniteSequence.swift */; }; - FDE175AAA2CB3652B67AA421E7AF96AF /* IQKeyboardReturnKeyHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEBED50283779181BB11A4A881012EE7 /* IQKeyboardReturnKeyHandler.swift */; }; - FDE3C2C53226F29CAABE70CFFA208E4F /* TrackingMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E2CFC0E730DADCB0B911107045FC77B /* TrackingMode.swift */; }; - FE20744885FCBBEFACEA58867A812C6C /* MJRefreshBackStateFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A91CFDAA12C8CEB58541777463AAE88 /* MJRefreshBackStateFooter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FE465B7346138FE58C1A96F9D10FC0D1 /* DDUICollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B60CB40E2FC208134DDAC1A9F2A9D05 /* DDUICollectionViewCell.swift */; }; - FE7D14F3ECC035AA8B007C33B0E69D76 /* SerialDispatchQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCD0EEC530FB6824A9E422B23CDE22BD /* SerialDispatchQueueScheduler.swift */; }; - FEAC0E2206AA52258A995502BF0AA648 /* UIButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 825061B0BF81331A04CC6FC14B768356 /* UIButton.swift */; }; - FF2C0F2DD47DC250B918F529C235083A /* ObservableConvertibleType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C5E1F4832E5E802B3096201185D46F2 /* ObservableConvertibleType.swift */; }; - FFA171B211AC028D0A9375105738BDC1 /* ZFPlayerNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F6F97EC0C91BD3DE2098FAC9123569C /* ZFPlayerNotification.m */; }; - FFAA74F5A2EF6804BF1496B33FF45C9E /* UIScrollView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = E742A448651BC79CF375DA1E1B75C63A /* UIScrollView+MJExtension.m */; }; - FFB9E82FF0E210BFEB30F4D221DD476C /* RxSearchControllerDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E9828A6C3CE9264DD664ED212B4FCEA /* RxSearchControllerDelegateProxy.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 01AA4F26D08B0764F3FBC8575D219867 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 3F83465BA81F6E581B3A431642D2992E; - remoteInfo = "ESTabBarController-swift"; - }; - 04AFC8F5FDDE7CCF3DB28FE3481EE05B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 9B182CB4E1716E9070813D3C59736001; - remoteInfo = "AMapFoundation-NO-IDFA"; - }; - 0826467EB9010324D3F53EF1A10A8544 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B490E7485944099E16C9CBD79119D1D4; - remoteInfo = IQKeyboardManagerSwift; - }; - 0EC3896B72CE8C92278DC6E34610CE21 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5C23965029860967865B3429B5E29092; - remoteInfo = "DDBasicControlsKit_Private-DDBaseViewController"; - }; - 13C0CE74B101F36A685E250219DBAA18 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 035D1842293C4AA08F442FFD899F7F28; - remoteInfo = DDControlsKit_Private; - }; - 151817BE71EECD9428B86D5C24DD7895 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; - remoteInfo = Alamofire; - }; - 182A0D62DDA3C08A86C183086801D616 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = E8022D22FAA6690B5E1C379C1BCE1491; - remoteInfo = Kingfisher; - }; - 1CB056DA3F24B8298DF5559472941389 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 477926D6FB1DCEFB352517A19636405D; - remoteInfo = DDWebImageKit_Private; - }; - 1E6AA2776A0B689B38E43F4C077E6CC5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; - remoteInfo = SnapKit; - }; - 235D82538392E3F211C89822979EBEE2 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4BD4E22D3419D68A85BDD6119CB37C6C; - remoteInfo = "AMapLocation-NO-IDFA"; - }; - 254CC460E1A29B4726C334B61DEC6345 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 9B182CB4E1716E9070813D3C59736001; - remoteInfo = "AMapFoundation-NO-IDFA"; - }; - 255E065DB1160EF48571504202BC54BF /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D504B99928659EA67A1C3A9E981EB8FF; - remoteInfo = JCore; - }; - 25724F992F71DE1CB48ADE2985606D56 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7B8412F08BD27981DB53CE2C25C19F0A; - remoteInfo = DDCategoryKit_Private; - }; - 25F820E47FAB12365671C2CB6B6ACAC2 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = EA9EA43B3B503823EE36C60D9C8A865F; - remoteInfo = RxSwift; - }; - 262533A6221342A804CA9120F28E680D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = F8AE53003F66B148774CFC6EBDEB9425; - remoteInfo = DDPersistenceKit_Private; - }; - 280B185D01FD102ED2895D202288D6BF /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = E72BE4C94039A951B47CCC942F6B4B8F; - remoteInfo = DDAudioPlayerKit_Private; - }; - 2D4A6E088D751A3E55416285ACF4B109 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 2864923095274ACF5E5F99312F360AEB; - remoteInfo = DDZFPlayerKit_Private; - }; - 2F7963BA2821D47B2524AA761FC8A3B4 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D504B99928659EA67A1C3A9E981EB8FF; - remoteInfo = JCore; - }; - 31CC52496C85EEC66773A037CA5B67BA /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 9B182CB4E1716E9070813D3C59736001; - remoteInfo = "AMapFoundation-NO-IDFA"; - }; - 3E46E5FF0CEF961EF0C721AA5AE34975 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 609276B985CD7549B9F1DEE4969208FF; - remoteInfo = JPushExtension; - }; - 481DD8337D748C4A121F301AB894ED41 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = E94C558142469C11984D67CA883BAB1F; - remoteInfo = "AMapNavi-NO-IDFA"; - }; - 49660C747E2F03F8ACBB39C8798ED7F2 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = E8022D22FAA6690B5E1C379C1BCE1491; - remoteInfo = Kingfisher; - }; - 4BDF214ADDD87FAFCE776F7D068241BF /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 087B100C5691B6A3C04A45198E6C32F6; - remoteInfo = DDBasicControlsKit_Private; - }; - 53FFBE314C39D33D54AA41061A094F38 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4BD4E22D3419D68A85BDD6119CB37C6C; - remoteInfo = "AMapLocation-NO-IDFA"; - }; - 54CDA1925E10C4D34D565FBB3E9B1084 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7AD0C6DCDC9CEC8A3C7C10C7FEE07BE6; - remoteInfo = RxCocoa; - }; - 5556437E59B62361E3C1D8835BF55623 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 2160840D78FCB958CABE1B88300E38C5; - remoteInfo = "AMapTrack-NO-IDFA"; - }; - 56C4E16CCA94C8DF146D66BDDD3CE6AD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4F1379598302C9160590B3650C10E1A5; - remoteInfo = "AMapSearch-NO-IDFA"; - }; - 5DD5579D189C112A038571D848CC5621 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = A27F26E25C91875F304337D28F939BF9; - remoteInfo = DDUIKit; - }; - 64980B2020812EAC95EA2979D9E7E089 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B68A4B40517CF9B14050FA0A4A618B04; - remoteInfo = DDNetworkingOfAlamofireKit_Private; - }; - 6884C7B4D6CEAA68B4B627B0B9807AF0 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 6E71929B582F8CD57B3DC1FD6560F047; - remoteInfo = PopupDialog; - }; - 6AD72BA49E6745C6E40801A03143394B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 6868056D761E163D10FDAF8CF1C4D9B8; - remoteInfo = MJRefresh; - }; - 6BAC6FC977EAE280D44846F9CFDF4DBB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = EA9EA43B3B503823EE36C60D9C8A865F; - remoteInfo = RxSwift; - }; - 7994FDB79BC9D7D7E1CB5396CBC02B6B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7B8412F08BD27981DB53CE2C25C19F0A; - remoteInfo = DDCategoryKit_Private; - }; - 7A05A84CDA5DFFB86C3A0C2B7678D830 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = FA849029E6A899F45F613165943A6C68; - remoteInfo = DDDateKit_Private; - }; - 7B68E74D31D52EB5FF6737DBB9848A71 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4A68CFD979D413A619DF631BB121D98F; - remoteInfo = Bugly; - }; - 7F325864B7C03CA0172C42D418E8EA13 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 387C7767E705FE68450F97CBA4348CC0; - remoteInfo = DDProgressHUDKit_Private; - }; - 8111465CA375E244E6BA90C72C0A8922 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7D914FA2F03C860D5133BA2DB87C594A; - remoteInfo = DynamicBlurView; - }; - 813EF339A520F7F15CC3496F87CAF397 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7B8412F08BD27981DB53CE2C25C19F0A; - remoteInfo = DDCategoryKit_Private; - }; - 830112A31C2BB1EC2044490BF16A3A96 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4622BFEF3DC16E8BD15EEFC30D4D0084; - remoteInfo = RxRelay; - }; - 83C181CBE36F7CE08E9AD07588BF8534 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4622BFEF3DC16E8BD15EEFC30D4D0084; - remoteInfo = RxRelay; - }; - 8424281C16D08DD08E3BBAE68879E544 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = BFED7668E8D0960F3873C9C1329EB63F; - remoteInfo = DDColorKit_Private; - }; - 85F6EB0AE08560BB4614F067AEBD6C43 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = E94C558142469C11984D67CA883BAB1F; - remoteInfo = "AMapNavi-NO-IDFA"; - }; - 884CA9C14E88B8CCBA5991B4232FF1E9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = FEA6FF0588A91CCD972EDCD698B85647; - remoteInfo = SwiftEntryKit; - }; - 88D10CF8B99829E420B9D7841B55C98D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; - remoteInfo = SnapKit; - }; - 8E92984767FE8C1DB258B5F3B45502BA /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5FB6AB0A09E7A2F2BE11AD6BAEFD9AED; - remoteInfo = JPush; - }; - 8FE3BECC74D7005D63AC1DA73C715C5F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 9B182CB4E1716E9070813D3C59736001; - remoteInfo = "AMapFoundation-NO-IDFA"; - }; - 91F0D93793BAF0DA9E56B0F751486A83 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4BD4E22D3419D68A85BDD6119CB37C6C; - remoteInfo = "AMapLocation-NO-IDFA"; - }; - 932CE0ECC73B299F3E6B1F2B67FEEA42 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 53463808DD395EFE0C9E0CDCB79A6C0A; - remoteInfo = DDAutoUIKit_Private; - }; - 98C9FA7A05B196FAABCECF54914EFE29 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8F3F4D8426620E7E4A06FE4BCDB96FDE; - remoteInfo = DDFontKit_Private; - }; - 9C3C9E1187AA06D8EAA10CB25E1608F0 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 087B100C5691B6A3C04A45198E6C32F6; - remoteInfo = DDBasicControlsKit_Private; - }; - 9F17F4A3B4E90A8F9B2E1B0F3AD0C933 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = CFF5B7CDF57A32781D2AD4CC98E95B29; - remoteInfo = DDToastKit_Private; - }; - A19229CABA7774679B060B58B4F64F19 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 6056870867CC4728BCEF2E5EBDD1DCB3; - remoteInfo = "DDMAMapKit_Private-DDMAMapKit_Private"; - }; - A296C60700A54467A658868A3A54CAF5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 2160840D78FCB958CABE1B88300E38C5; - remoteInfo = "AMapTrack-NO-IDFA"; - }; - AC61E5775AFAB814996813E79ADDB2FE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = A8B712B20F60AB02004557B884A28FD4; - remoteInfo = DDUtilsSwiftKit_Private; - }; - B19DA5BEF1348CF57133D982110FA0E0 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 9B182CB4E1716E9070813D3C59736001; - remoteInfo = "AMapFoundation-NO-IDFA"; - }; - BA15EA16F0650162823F705B50FC638E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 67F8329E1ABF625D93A19CDE570535BB; - remoteInfo = DDUIGestureRecognizer; - }; - BFB3909ED1C95064974FA2DBB419DCA7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 416BCB647D16D0ED89A6729B14DD54D2; - remoteInfo = TYCyclePagerView; - }; - C1F32222CCBBF68CFA496F5064B63C0E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 9B182CB4E1716E9070813D3C59736001; - remoteInfo = "AMapFoundation-NO-IDFA"; - }; - C8540454A0640B646242911CAC624D55 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8BEAFAA726C1965864B79B4B441AA513; - remoteInfo = JXCategoryView; - }; - CBC0C11B69F489AAF9D4F6995E7A3E66 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B41F58F2856AB275B4CF75F359937653; - remoteInfo = DDMAMapKit_Private; - }; - CC8066C89FD98493E757CB636EC07CE2 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4F1379598302C9160590B3650C10E1A5; - remoteInfo = "AMapSearch-NO-IDFA"; - }; - CF38E273E831957CA74380731F0DD345 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7D914FA2F03C860D5133BA2DB87C594A; - remoteInfo = DynamicBlurView; - }; - D4357617B09C7613CBEDDC637884F399 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D505645C3F99EB1E8B6529D64D2C3E1C; - remoteInfo = BRPickerView; - }; - D653C2AB57C66C5FDB433FC98405CA53 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 92A1C13902E7ACDA3ABB5BA1FEACC86C; - remoteInfo = SwiftyRSA; - }; - D9EE7BBF2E384EFC149ECAF5FD023672 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = EA9EA43B3B503823EE36C60D9C8A865F; - remoteInfo = RxSwift; - }; - DD1C9C665271655ACE599A8E044B33B6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; - remoteInfo = Alamofire; - }; - F0BA0C35A2A8BC64B7F7F3772A17E4B7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = EA9EA43B3B503823EE36C60D9C8A865F; - remoteInfo = RxSwift; - }; - F221641570F50A11324F0D66F0D23CCE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 26BA8950EBF05410254D54F7EF76D5CE; - remoteInfo = DDLogKit_Private; - }; - FAC7CA6E6036239806E7B442F1BD6D2F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 2FAF03761A44702490259F857A848B42; - remoteInfo = ZLPhotoBrowser; - }; - FDCB8C76939EE86BE03DBF5EB1B6AD03 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 26BA8950EBF05410254D54F7EF76D5CE; - remoteInfo = DDLogKit_Private; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 00215A81703BD34FA6ED9D5801B47F8E /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = ""; }; - 0021B2B09CD8A999B6DCD111BA5AEF9E /* RxRelay-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxRelay-umbrella.h"; sourceTree = ""; }; - 0037012C72DCE4FCB577AB16DD9DEFAC /* MAPointAnnotation+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MAPointAnnotation+DDCategory.h"; path = "DDMAMapKit_Private/Classes/DDMAMap/Annotation/MAPointAnnotation+DDCategory.h"; sourceTree = ""; }; - 006B83DBD7EF9E9FED347BF4490BE076 /* DDCategoryKit_Private.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDCategoryKit_Private.release.xcconfig; sourceTree = ""; }; - 00792215745E92F19B0B1C8D83DFEB5C /* JXCategoryIndicatorTriangleView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryIndicatorTriangleView.h; path = Sources/Indicator/IndicatorViews/JXCategoryIndicatorTriangleView.h; sourceTree = ""; }; - 00D78E1CE9CA81423228170D3F54530B /* UINavigationBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UINavigationBar.swift; path = DDUIKit/Classes/UINavigationBar/UINavigationBar.swift; sourceTree = ""; }; - 00FA6667229E991BB2E2C29A6538EF72 /* Bag+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Bag+Rx.swift"; path = "RxSwift/Extensions/Bag+Rx.swift"; sourceTree = ""; }; - 0173ECE75B8B8C93840EE2421FC61436 /* JXCategoryTitleView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryTitleView.h; path = Sources/Title/JXCategoryTitleView.h; sourceTree = ""; }; - 0230928B1996ADBD4E660FF7B1DA279E /* DDMATrackManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDMATrackManager.m; path = DDMAMapKit_Private/Classes/DDMATrackManager/DDMATrackManager.m; sourceTree = ""; }; - 023378F8A559DBD8D97CE6E8CCDF1EB2 /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCompat.h; sourceTree = ""; }; - 027A9E5311A914D744DDAD84E24700DC /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImagePrefetcher.m; sourceTree = ""; }; - 02922EBA62B995A2D40B08FE21B102BE /* TransitionAnimator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransitionAnimator.swift; path = PopupDialog/Classes/TransitionAnimator.swift; sourceTree = ""; }; - 02CD09B23F363A0ED6829FABD931714A /* ZFPresentTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFPresentTransition.h; path = DDZFPlayerKit_Private/Classes/Core/ZFPresentTransition.h; sourceTree = ""; }; - 0303A4FE184E126A0C84A0570CA1500C /* DDUIKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDUIKit.debug.xcconfig; sourceTree = ""; }; - 034525FE20689D57E20E852BAE248B94 /* ZLEnlargeButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLEnlargeButton.swift; path = Sources/General/ZLEnlargeButton.swift; sourceTree = ""; }; - 0359D99D8CFBB7FD77C006DAA411E2AF /* AMapNaviCompositeUserConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviCompositeUserConfig.h; path = AMapNaviKit.framework/Headers/AMapNaviCompositeUserConfig.h; sourceTree = ""; }; - 039574ABCAE0F3DE38B92070B3D21AC6 /* DDUIView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDUIView.swift; path = DDUIKit/Classes/UIView/DDUIView.swift; sourceTree = ""; }; - 039F00DC58F9C3A2C0A72729AF6B957A /* DDBaseModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDBaseModel.m; path = DDBasicControlsKit_Private/Classes/DDBaseModel/DDBaseModel.m; sourceTree = ""; }; - 03D3414E7E22613A83F0777CAD861584 /* DDBaseMutableAttributedString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDBaseMutableAttributedString.h; path = DDBasicControlsKit_Private/Classes/DDBaseAttributedString/DDBaseMutableAttributedString.h; sourceTree = ""; }; - 04043FF7666CD2B69C1BF2F016A8C641 /* JXCategoryIndicatorImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryIndicatorImageView.m; path = Sources/Indicator/IndicatorViews/JXCategoryIndicatorImageView.m; sourceTree = ""; }; - 0406F09F5AE7A03A5CD0A573CD06C037 /* UIImage+ExtendedCacheData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ExtendedCacheData.h"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+ExtendedCacheData.h"; sourceTree = ""; }; - 04D353801D36CAB10F1D432D2B00D371 /* UITabBarController+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITabBarController+DDCategory.h"; path = "DDCategoryKit_Private/Classes/UITabBarController+DDCategory/UITabBarController+DDCategory.h"; sourceTree = ""; }; - 04F972D067C7E719AB2AD30877DC5080 /* MJRefreshConst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshConst.h; path = MJRefresh/MJRefreshConst.h; sourceTree = ""; }; - 056A3AE606265514F6884996EA21C6C6 /* ZFPortraitControlView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFPortraitControlView.m; path = DDZFPlayerKit_Private/Classes/ControlView/ZFPortraitControlView.m; sourceTree = ""; }; - 0574069E22601655BD9A55A965E4BC4C /* DynamicBlurView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DynamicBlurView-umbrella.h"; sourceTree = ""; }; - 057CDBDB37EEDC39DAD8B2899316EB5A /* UITextField+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITextField+DDCategory.m"; path = "DDCategoryKit_Private/Classes/UITextField+DDCategory/UITextField+DDCategory.m"; sourceTree = ""; }; - 058DDB67AFB24A6BA613442B24669C5F /* UIScrollView+ZFPlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+ZFPlayer.h"; path = "DDZFPlayerKit_Private/Classes/Core/UIScrollView+ZFPlayer.h"; sourceTree = ""; }; - 058FEC3140761826C1DB3A0F0D55D920 /* ZLPhotoBrowser-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ZLPhotoBrowser-dummy.m"; sourceTree = ""; }; - 05C73D463A953B45A2781623B7CFCB22 /* ZFPlayerMediaPlayback.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFPlayerMediaPlayback.h; path = DDZFPlayerKit_Private/Classes/Core/ZFPlayerMediaPlayback.h; sourceTree = ""; }; - 05C74632D9B36FCD0A38EA87E40B883A /* UISearchBar+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UISearchBar+Rx.swift"; path = "RxCocoa/iOS/UISearchBar+Rx.swift"; sourceTree = ""; }; - 05CAA3162F254BAD2562D6C24FC25B43 /* RefCountDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RefCountDisposable.swift; path = RxSwift/Disposables/RefCountDisposable.swift; sourceTree = ""; }; - 06238817EEBEE705945FA0A829CD003D /* BRPickerView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "BRPickerView-dummy.m"; sourceTree = ""; }; - 0629B72A7A9E52E3111C343CEE0BF886 /* GIFAnimatedImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GIFAnimatedImage.swift; path = Sources/Image/GIFAnimatedImage.swift; sourceTree = ""; }; - 06458FF46F17CC90652BA0E8437E6283 /* Box.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Box.swift; path = Sources/Utility/Box.swift; sourceTree = ""; }; - 06588AB9CE11B508EB5E70F5C408D372 /* Resource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Resource.swift; path = Sources/General/ImageSource/Resource.swift; sourceTree = ""; }; - 065B11C89371CC4255EE8CA78AB4D5D3 /* PopupDialogDefaultButtons.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PopupDialogDefaultButtons.swift; path = PopupDialog/Classes/PopupDialogDefaultButtons.swift; sourceTree = ""; }; - 06B46F69C1C8EDD36B1781CEFBC2A6C7 /* JCore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JCore.debug.xcconfig; sourceTree = ""; }; - 06BB61351E424DCB705710853DDB00F0 /* Asn1Parser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Asn1Parser.swift; path = Source/Asn1Parser.swift; sourceTree = ""; }; - 06CB1C2A1EF28D471E1541ECC66BEAE7 /* AtomicInt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AtomicInt.swift; path = Platform/AtomicInt.swift; sourceTree = ""; }; - 06D02539D3B0C017E502911F8C1B680A /* jpush-ios-5.0.1.xcframework */ = {isa = PBXFileReference; includeInIndex = 1; path = "jpush-ios-5.0.1.xcframework"; sourceTree = ""; }; - 06F19A1142B68925C3423F5D9118B4DC /* SDWebImageCacheKeyFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCacheKeyFilter.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCacheKeyFilter.h; sourceTree = ""; }; - 0715B61A0864CFE40B3C7BFF28E161FD /* UIImageView+DDWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+DDWebCache.m"; path = "DDWebImageKit_Private/Classes/DDWebImage/UIImageView+DDWebCache.m"; sourceTree = ""; }; - 076540906139345D94D6154860BC78BD /* Bugly.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bugly.debug.xcconfig; sourceTree = ""; }; - 07B96C65DB21C0B51A30D6E1CFAF84C9 /* AMapNavi.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = AMapNavi.bundle; path = AMapNaviKit.framework/AMapNavi.bundle; sourceTree = ""; }; - 07C7B77AC79010B011C9130BDAEFAE07 /* DDBaseViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDBaseViewController.h; path = DDBasicControlsKit_Private/Classes/DDBaseViewController/DDBaseViewController.h; sourceTree = ""; }; - 07D63349A15F0AD260D727670549BB75 /* EKButtonBarView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKButtonBarView.swift; path = Source/MessageViews/MessagesUtils/EKButtonBarView.swift; sourceTree = ""; }; - 0804916E58E0E3670AD97A3C08A30EEA /* UIResponder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIResponder.swift; path = DDUIKit/Classes/UIResponder/UIResponder.swift; sourceTree = ""; }; - 080CAEB7CFAB746E5ACC13C1037E72D5 /* TYCyclePagerTransformLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TYCyclePagerTransformLayout.h; path = TYCyclePagerViewDemo/TYCyclePagerView/TYCyclePagerTransformLayout.h; sourceTree = ""; }; - 085373687E7A083B3531ED2646B272EE /* SDWebImageDownloaderRequestModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderRequestModifier.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderRequestModifier.h; sourceTree = ""; }; - 087F207694F2E3A1DA9E0ABA8B92112E /* AFError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AFError.swift; path = Source/AFError.swift; sourceTree = ""; }; - 08B10ABD8E2D4014D47119D67259DAAB /* ConstraintMakerPrioritizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerPrioritizable.swift; path = Sources/ConstraintMakerPrioritizable.swift; sourceTree = ""; }; - 08E35A322211FEEB86CE4B42F9E74F5A /* Key.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Key.swift; path = Source/Key.swift; sourceTree = ""; }; - 0933994A0349C22C4905F18E4DA1EF79 /* JXCategoryFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryFactory.h; path = Sources/Common/JXCategoryFactory.h; sourceTree = ""; }; - 0940B6836DEBA63416A98E29D1B7E0C6 /* DDToastKit_Private.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DDToastKit_Private.modulemap; sourceTree = ""; }; - 0959863FC80CAA9E28A4DE5AF4622E66 /* DDColorKit_Private.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DDColorKit_Private.modulemap; sourceTree = ""; }; - 09B4C59FAB38D6054E5993BD78205023 /* DDAudioPlayerKit_Private */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = DDAudioPlayerKit_Private; path = libDDAudioPlayerKit_Private.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 0A435B9A05C7BB86FE26C523829C8D4A /* MAArc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAArc.h; path = AMapNaviKit.framework/Headers/MAArc.h; sourceTree = ""; }; - 0A603A56BF9F0D351F7F58597AE67397 /* JXCategoryView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = JXCategoryView.modulemap; sourceTree = ""; }; - 0A91CFDAA12C8CEB58541777463AAE88 /* MJRefreshBackStateFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackStateFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h; sourceTree = ""; }; - 0B0CC58D2B57578DC41AC56CE29139C6 /* EKProperty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKProperty.swift; path = Source/Model/EKProperty.swift; sourceTree = ""; }; - 0B1F0529EF82007EAECB091D0A4B3B95 /* MAAnimatedAnnotation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAAnimatedAnnotation.h; path = AMapNaviKit.framework/Headers/MAAnimatedAnnotation.h; sourceTree = ""; }; - 0B31219001024F15894B441C638DC87D /* DDUIScrollView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDUIScrollView.swift; path = DDUIKit/Classes/UIScrollView/DDUIScrollView.swift; sourceTree = ""; }; - 0B78ECB37F7E4BD6056633F7BBFCE13E /* AMapNearbySearchManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNearbySearchManager.h; path = AMapSearchKit.framework/Headers/AMapNearbySearchManager.h; sourceTree = ""; }; - 0B9D719A08ECCEB67D4ED287E12478CE /* UILabel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UILabel.swift; path = DDUIKit/Classes/UILabel/UILabel.swift; sourceTree = ""; }; - 0BA17B720CE0D0878393E1E7FFA6742A /* AnimatedImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedImageView.swift; path = Sources/Views/AnimatedImageView.swift; sourceTree = ""; }; - 0BD45C5B1EC5DCCD150E978F75625687 /* ZLPhotoPreviewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLPhotoPreviewController.swift; path = Sources/General/ZLPhotoPreviewController.swift; sourceTree = ""; }; - 0BE2A0EF9D56819A61BC260CE4C8D225 /* Repeat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Repeat.swift; path = RxSwift/Observables/Repeat.swift; sourceTree = ""; }; - 0BEA970F06657F2334B42BE2FFFDE5F5 /* EKAttributes+Position.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EKAttributes+Position.swift"; path = "Source/Model/EntryAttributes/EKAttributes+Position.swift"; sourceTree = ""; }; - 0C11D5828432F95DF140C0DA7B677C80 /* DDMAMapKit_Private-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDMAMapKit_Private-prefix.pch"; sourceTree = ""; }; - 0C17676C2C51A168A30ABFFF942281EF /* PrimitiveSequence+Concurrency.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PrimitiveSequence+Concurrency.swift"; path = "RxSwift/Traits/PrimitiveSequence/PrimitiveSequence+Concurrency.swift"; sourceTree = ""; }; - 0C510B75AAB2E4FDA9137E14999AFEEF /* BlurLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlurLayer.swift; path = Sources/DynamicBlurView/BlurLayer.swift; sourceTree = ""; }; - 0C5625CB64CAD78405F5F917FB912075 /* JXCategoryDotCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryDotCell.h; path = Sources/Dot/JXCategoryDotCell.h; sourceTree = ""; }; - 0C819BB49B3601AD30B87D450F464CC4 /* ObserverType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObserverType.swift; path = RxSwift/ObserverType.swift; sourceTree = ""; }; - 0CA09743333787DF3615586222AC3B7E /* TakeLast.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TakeLast.swift; path = RxSwift/Observables/TakeLast.swift; sourceTree = ""; }; - 0CF30404E7A7080C5C22D74A199E651C /* BRResultModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BRResultModel.h; path = BRPickerView/StringPickerView/BRResultModel.h; sourceTree = ""; }; - 0D2C8B8FCE4545423026D47FA0BAF93B /* ObservableType+PrimitiveSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableType+PrimitiveSequence.swift"; path = "RxSwift/Traits/PrimitiveSequence/ObservableType+PrimitiveSequence.swift"; sourceTree = ""; }; - 0DA4828908E30CE4A29CB9AD3A405635 /* SwiftyRSA */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = SwiftyRSA; path = libSwiftyRSA.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 0DFF9FCCF3FC76F60F991DBF190E4CB4 /* SDMemoryCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDMemoryCache.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDMemoryCache.h; sourceTree = ""; }; - 0E3AD0A5A60B44AF298FEC9482CE432A /* DDBaseAttributedString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDBaseAttributedString.h; path = DDBasicControlsKit_Private/Classes/DDBaseAttributedString/DDBaseAttributedString.h; sourceTree = ""; }; - 0E81B3F8F745DB6A9AAFB8CD40CB6EC8 /* DDProgressHUDKit_Private.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDProgressHUDKit_Private.release.xcconfig; sourceTree = ""; }; - 0E9E0DD979DAA290E780DA3E18F9871B /* ZLClipImageViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLClipImageViewController.swift; path = Sources/Edit/ZLClipImageViewController.swift; sourceTree = ""; }; - 0EA0223AFAEA527F51E060EC701FD9D5 /* Merge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Merge.swift; path = RxSwift/Observables/Merge.swift; sourceTree = ""; }; - 0EAD6BD5B720939B07B237C3B918074E /* ZLImageStickerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLImageStickerView.swift; path = Sources/Edit/ZLImageStickerView.swift; sourceTree = ""; }; - 0EB8C624EF7CB306DD272A6C7FD0984F /* AMapFoundation-NO-IDFA.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "AMapFoundation-NO-IDFA.debug.xcconfig"; sourceTree = ""; }; - 0EDD3AA8542CAF5C63E2C88397F7D700 /* DynamicBlurView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DynamicBlurView.h; path = Sources/DynamicBlurView/DynamicBlurView.h; sourceTree = ""; }; - 0EE2880C5818D2D6C4A79CFDF9892467 /* MAHeatMapVectorOverlayRender.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAHeatMapVectorOverlayRender.h; path = AMapNaviKit.framework/Headers/MAHeatMapVectorOverlayRender.h; sourceTree = ""; }; - 0F024E118CC7C6DF824B3A44E3B5D35F /* ESTabBarController-swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ESTabBarController-swift-dummy.m"; sourceTree = ""; }; - 0F1CEAE9F4FAB91A665AF2D428A3738E /* ESTabBarController-swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "ESTabBarController-swift.modulemap"; sourceTree = ""; }; - 100591C0CA8BC02FA5698620BD98FA34 /* HistoricalSchedulerTimeConverter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HistoricalSchedulerTimeConverter.swift; path = RxSwift/Schedulers/HistoricalSchedulerTimeConverter.swift; sourceTree = ""; }; - 1041174B6008065A01D628E819B0F88B /* EKAccessoryNoteMessageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKAccessoryNoteMessageView.swift; path = Source/MessageViews/Notes/EKAccessoryNoteMessageView.swift; sourceTree = ""; }; - 1099FA7EEADBEF967E93188CEB9E2759 /* JXCategoryNumberView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryNumberView.h; path = Sources/Number/JXCategoryNumberView.h; sourceTree = ""; }; - 109D8C0F4B04607753A80D730FFD1F2D /* UIColor+ZLPhotoBrowser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIColor+ZLPhotoBrowser.swift"; path = "Sources/Extensions/UIColor+ZLPhotoBrowser.swift"; sourceTree = ""; }; - 11318CAE9188F3F3D96B377110B759AD /* UINavigationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UINavigationController.swift; path = DDUIKit/Classes/UINavigationController/UINavigationController.swift; sourceTree = ""; }; - 11460665CF36BD5EA4CA0A99BEAE7AC8 /* JXCategoryIndicatorLineView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryIndicatorLineView.h; path = Sources/Indicator/IndicatorViews/JXCategoryIndicatorLineView.h; sourceTree = ""; }; - 116E1CC88901ED78E2077B4C12D853B0 /* DDLogKit_Private-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDLogKit_Private-prefix.pch"; sourceTree = ""; }; - 1187BCC044B894F6E3491ED9B5C26252 /* ZFPlayerControlView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFPlayerControlView.h; path = DDZFPlayerKit_Private/Classes/ControlView/ZFPlayerControlView.h; sourceTree = ""; }; - 118D92AA162B4B2BA4022172E3B3D2DA /* RxCollectionViewDataSourceProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewDataSourceProxy.swift; path = RxCocoa/iOS/Proxies/RxCollectionViewDataSourceProxy.swift; sourceTree = ""; }; - 11A0D2EAF3988210C38EAB8A6A060240 /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Validation.swift; sourceTree = ""; }; - 11AA9FF2BF0AB34A6ABCED55E2B3DFD2 /* DDUIKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDUIKit.release.xcconfig; sourceTree = ""; }; - 11D3765EC2CDE2680F078D70E209211F /* UIButton+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIButton+Kingfisher.swift"; path = "Sources/Extensions/UIButton+Kingfisher.swift"; sourceTree = ""; }; - 11E9E480C1E54BC90F57D2CCAB49A5FE /* ZFVolumeBrightnessView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFVolumeBrightnessView.h; path = DDZFPlayerKit_Private/Classes/ControlView/ZFVolumeBrightnessView.h; sourceTree = ""; }; - 1230108A6DB4BFE27E08F9E4F406B60C /* NSTextAttachment+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSTextAttachment+Kingfisher.swift"; path = "Sources/Extensions/NSTextAttachment+Kingfisher.swift"; sourceTree = ""; }; - 124F389547B3D21E25CC97EDD539A7F7 /* MBProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MBProgressHUD.h; path = DDProgressHUDKit_Private/Classes/MBProgressHUD.h; sourceTree = ""; }; - 1264866D6B7A332393A6A0FAA7E8E4E6 /* UIColor+JXAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+JXAdd.h"; path = "Sources/Common/UIColor+JXAdd.h"; sourceTree = ""; }; - 13369AB30EF547AC897102096804BD8F /* Driver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Driver.swift; path = RxCocoa/Traits/Driver/Driver.swift; sourceTree = ""; }; - 135376C1FCEE07616C702EA1545C5DC6 /* HTTPMethod.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPMethod.swift; path = Source/HTTPMethod.swift; sourceTree = ""; }; - 135A0A5D3367ABF20DAFEA47ECC806F9 /* StartWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StartWith.swift; path = RxSwift/Observables/StartWith.swift; sourceTree = ""; }; - 136ACAADF3183D1A604697C4AA361579 /* MAMapView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMapView.h; path = AMapNaviKit.framework/Headers/MAMapView.h; sourceTree = ""; }; - 136F991523CD2ED2AA0E278428FE879E /* MACustomBuildingOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MACustomBuildingOverlay.h; path = AMapNaviKit.framework/Headers/MACustomBuildingOverlay.h; sourceTree = ""; }; - 1393641ADAD12F0FB77EA7491880E439 /* DDNetworkingOfAlamofireKit_Private.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DDNetworkingOfAlamofireKit_Private.modulemap; sourceTree = ""; }; - 13FF1A8278613850FF62B0D49645157C /* CombineLatest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombineLatest.swift; path = RxSwift/Observables/CombineLatest.swift; sourceTree = ""; }; - 14090DEF6DB4FAD172F8D3682ABAC65D /* ZFPortraitControlView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFPortraitControlView.h; path = DDZFPlayerKit_Private/Classes/ControlView/ZFPortraitControlView.h; sourceTree = ""; }; - 1429C654602EE60F14E5C748E84A3EF7 /* JXCategoryTitleVerticalZoomCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryTitleVerticalZoomCell.h; path = Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomCell.h; sourceTree = ""; }; - 148C29FA0CE1ABC35CD096724D64A5E7 /* DDUIPanGestureRecognizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDUIPanGestureRecognizer.swift; path = DDUIGestureRecognizer/Classes/DDUIPanGestureRecognizer/DDUIPanGestureRecognizer.swift; sourceTree = ""; }; - 14E6DCED93863949755A398DB5C210B1 /* ResourceBundle-DDBaseViewController-DDBasicControlsKit_Private-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-DDBaseViewController-DDBasicControlsKit_Private-Info.plist"; sourceTree = ""; }; - 14ED7DE56301CCEBA5CD72994F13F7D6 /* _RXObjCRuntime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _RXObjCRuntime.h; path = RxCocoa/Runtime/include/_RXObjCRuntime.h; sourceTree = ""; }; - 1513C684FAA95B8BDFE57A3DE58BA4AA /* UITableViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UITableViewCell.swift; path = DDUIKit/Classes/UITableViewCell/UITableViewCell.swift; sourceTree = ""; }; - 151C1822C9470A3F1C63D7E8698AEC70 /* NSThread+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSThread+DDCategory.m"; path = "DDCategoryKit_Private/Classes/NSThread+DDCategory/NSThread+DDCategory.m"; sourceTree = ""; }; - 152188DBC7BA989BAFEC3E87588C15CF /* BRPickerViewMacro.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BRPickerViewMacro.h; path = BRPickerView/Base/BRPickerViewMacro.h; sourceTree = ""; }; - 153F0BEDCBFEB268003315167CB6A723 /* UIView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCache.m"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/UIView+WebCache.m"; sourceTree = ""; }; - 155E255306AC9CACD09CDA2B0D7DBBD1 /* MJRefresh.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = MJRefresh.bundle; path = MJRefresh/MJRefresh.bundle; sourceTree = ""; }; - 15A4510CDE0028CA4E1A50F424E8666B /* UIApplication.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIApplication.swift; path = DDUIKit/Classes/UIApplication/UIApplication.swift; sourceTree = ""; }; - 15A9C1745230ADF165659AD1BA0426DC /* DDNetworkingOfAlamofireKit_Private.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDNetworkingOfAlamofireKit_Private.debug.xcconfig; sourceTree = ""; }; - 15B41E543A86CDD8E132B8E735A02993 /* SDImageCoderHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCoderHelper.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCoderHelper.m; sourceTree = ""; }; - 161019006BC8262817EE81BC18718C05 /* car_xingshi@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "car_xingshi@2x.png"; path = "DDMAMapKit_Private/Assets/car_xingshi@2x.png"; sourceTree = ""; }; - 16226D1086E5F03FEA888160551B6AE0 /* AMapTrackManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapTrackManager.h; path = AMapTrackKit.framework/Headers/AMapTrackManager.h; sourceTree = ""; }; - 1623AE1629442AB8018887A49AD7E6DA /* URLRequest+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLRequest+Alamofire.swift"; path = "Source/URLRequest+Alamofire.swift"; sourceTree = ""; }; - 162A8904E032F3250DDA3F276E5E2033 /* DDColorKit_Private-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDColorKit_Private-prefix.pch"; sourceTree = ""; }; - 16726529D4925EFA5D61246DDF2520D6 /* ESTabBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ESTabBar.swift; path = Sources/ESTabBar.swift; sourceTree = ""; }; - 1678C96269E52BE05030BE4EB8774254 /* AMapNaviCompositeManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviCompositeManager.h; path = AMapNaviKit.framework/Headers/AMapNaviCompositeManager.h; sourceTree = ""; }; - 16ADD43AE08E88D6F7A3498152249608 /* DDAutoUIKit_Private */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = DDAutoUIKit_Private; path = libDDAutoUIKit_Private.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 16AF0AA4A670CC0D68A66E6388506169 /* SnapKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapKit-dummy.m"; sourceTree = ""; }; - 16E7B1F74180B8AD2D8B8445CE19FAFD /* DefaultIfEmpty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultIfEmpty.swift; path = RxSwift/Observables/DefaultIfEmpty.swift; sourceTree = ""; }; - 1700F928EA0CBDB932CFDF241BFE6327 /* JXCategoryIndicatorProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryIndicatorProtocol.h; path = Sources/Common/JXCategoryIndicatorProtocol.h; sourceTree = ""; }; - 1706A4772B2BBAD1B39CA90FD77B158B /* LayoutConstraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraint.swift; path = Sources/LayoutConstraint.swift; sourceTree = ""; }; - 174AB53E059BB9A8DE414DD19F96A58E /* DDProgressHUDKit_Private.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDProgressHUDKit_Private.debug.xcconfig; sourceTree = ""; }; - 177D86724B93E0FCF0D92988AB516F08 /* MJRefreshComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshComponent.m; path = MJRefresh/Base/MJRefreshComponent.m; sourceTree = ""; }; - 17888856B8B48807E8E714F1FA86DABD /* TYCyclePagerView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TYCyclePagerView.debug.xcconfig; sourceTree = ""; }; - 178D2669607D468DF7A1E2D2A2126993 /* RxRelay-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxRelay-prefix.pch"; sourceTree = ""; }; - 17AF82E5033417808ED4E3CB26CA7030 /* AsSingle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsSingle.swift; path = RxSwift/Observables/AsSingle.swift; sourceTree = ""; }; - 17C6BB659A7CC437641CCB80B4A07F44 /* EKWindowProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKWindowProvider.swift; path = Source/Infra/EKWindowProvider.swift; sourceTree = ""; }; - 17E2210B687B3412F03196B1C6A6D547 /* MATraceReplayOverlay.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MATraceReplayOverlay.m; path = DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlay.m; sourceTree = ""; }; - 1809476E15987C3BE9B96C520F450AC2 /* ZLAdjustSlider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLAdjustSlider.swift; path = Sources/Edit/ZLAdjustSlider.swift; sourceTree = ""; }; - 18372F0E39BA4CC4FC036FCD277A0656 /* Infallible+Zip+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+Zip+arity.swift"; path = "RxSwift/Traits/Infallible/Infallible+Zip+arity.swift"; sourceTree = ""; }; - 184CCF347EDC114B567A87699F4C22F0 /* SharedSequence+Operators+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SharedSequence+Operators+arity.swift"; path = "RxCocoa/Traits/SharedSequence/SharedSequence+Operators+arity.swift"; sourceTree = ""; }; - 18BCA08F5CEEE178EA4B5E4C7521ECB7 /* Pods-OrderSchedulingNotificationService.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-OrderSchedulingNotificationService.release.xcconfig"; sourceTree = ""; }; - 18E641006679281D6DC4518EF893F03A /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageManager.h; sourceTree = ""; }; - 18E8F78A0E4FED3EEFBF8C45B9D4EC81 /* UITextView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITextView+Rx.swift"; path = "RxCocoa/iOS/UITextView+Rx.swift"; sourceTree = ""; }; - 18EFC4D0850A7C6517CF4593826B1247 /* PrimitiveSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PrimitiveSequence.swift; path = RxSwift/Traits/PrimitiveSequence/PrimitiveSequence.swift; sourceTree = ""; }; - 19285907593533A6AA9EB666187C70F5 /* SDWeakProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWeakProxy.h; path = DDWebImageKit_Private/Classes/SDWebImage/Private/SDWeakProxy.h; sourceTree = ""; }; - 195D2751CB51366D09A9B380BD68A086 /* InfiniteSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InfiniteSequence.swift; path = Platform/DataStructures/InfiniteSequence.swift; sourceTree = ""; }; - 1962803FD59FC42F10DEE2A33E08B008 /* Range.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Range.swift; path = RxSwift/Observables/Range.swift; sourceTree = ""; }; - 19941DC64BB0D0525D65311FB1D44117 /* MATouchPoi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MATouchPoi.h; path = AMapNaviKit.framework/Headers/MATouchPoi.h; sourceTree = ""; }; - 19997B31DB091B9691A5431ADE9681FF /* Toast.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Toast.swift; path = DDToastKit_Private/Classes/Toast.swift; sourceTree = ""; }; - 1A37E45618A0FBC62D6154B91D9F0499 /* IQKeyboardManagerConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManagerConstants.swift; path = IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstants.swift; sourceTree = ""; }; - 1A3DF1E0C4CCABA356AF83F930F0C8A1 /* DDProgressHUDKit_Private.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DDProgressHUDKit_Private.modulemap; sourceTree = ""; }; - 1A800B2680C046933AA98E7BF241507A /* SDAnimatedImageRep.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageRep.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageRep.m; sourceTree = ""; }; - 1A8147D505262DC091E37F898CFB096C /* MJRefresh.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MJRefresh.modulemap; sourceTree = ""; }; - 1A93FA71CAFA40C0939FDDBA2DAD1F61 /* JXCategoryBaseCellModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryBaseCellModel.h; path = Sources/Base/JXCategoryBaseCellModel.h; sourceTree = ""; }; - 1AF2E387421E828F9892DAE7C4A9B989 /* MJRefreshAutoFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoFooter.h; path = MJRefresh/Base/MJRefreshAutoFooter.h; sourceTree = ""; }; - 1B10FB417AD06B507E287C969BAD54A7 /* DeviceInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DeviceInfo.swift; path = DDUtilsSwiftKit_Private/Classes/DeviceInfo/DeviceInfo.swift; sourceTree = ""; }; - 1B3CB74D09971841E30AB45461B702B6 /* DDBaseTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDBaseTableViewCell.h; path = DDBasicControlsKit_Private/Classes/DDBaseTableViewCell/DDBaseTableViewCell.h; sourceTree = ""; }; - 1B501E28E3FDFF405D393733C389A7BC /* DDWebImageKit_Private.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDWebImageKit_Private.release.xcconfig; sourceTree = ""; }; - 1B6FD128E219CB7AC00E58EF65D2391D /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Source/MultipartFormData.swift; sourceTree = ""; }; - 1B937AC2FB944C6FC562648D22195058 /* SDDisplayLink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDisplayLink.h; path = DDWebImageKit_Private/Classes/SDWebImage/Private/SDDisplayLink.h; sourceTree = ""; }; - 1BDA18B33684622BC30BDBB778EB44F3 /* UIViewController+ZFPlayerRotation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+ZFPlayerRotation.m"; path = "DDZFPlayerKit_Private/Classes/Core/UIViewController+ZFPlayerRotation.m"; sourceTree = ""; }; - 1BDD0DE426C4668E0ED9AE67C8C629C9 /* AMapLocationKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AMapLocationKit.framework; sourceTree = ""; }; - 1BE644B1249343805E50F86861F91F21 /* Kingfisher-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Kingfisher-prefix.pch"; sourceTree = ""; }; - 1C06341F09287851FFC3FD086A6124E8 /* DDUtilsSwiftKit_Private.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDUtilsSwiftKit_Private.release.xcconfig; sourceTree = ""; }; - 1C4F166A34106C167C1D61C5851F8AF0 /* ESTabBarItemContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ESTabBarItemContentView.swift; path = Sources/ESTabBarItemContentView.swift; sourceTree = ""; }; - 1C50AA79FC6A504C48ECB57F30434619 /* KFImageOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KFImageOptions.swift; path = Sources/SwiftUI/KFImageOptions.swift; sourceTree = ""; }; - 1C67ECB91C7A40D96665F6F4A427C49F /* DDZFPlayerKit_Private-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDZFPlayerKit_Private-prefix.pch"; sourceTree = ""; }; - 1CBA3C0559234D90ED825EC7DD5EC9D6 /* DDControlsKit_Private-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DDControlsKit_Private-dummy.m"; sourceTree = ""; }; - 1CBF23CB7783B7D5344C0C32C0D47775 /* DDBaseScrollView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDBaseScrollView.h; path = DDBasicControlsKit_Private/Classes/DDBaseScrollView/DDBaseScrollView.h; sourceTree = ""; }; - 1CC0FC134317D7C5174A921D18711453 /* MATraceReplayOverlayRender.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MATraceReplayOverlayRender.m; path = DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlayRender.m; sourceTree = ""; }; - 1CC5F3FCC434662362EE890B27FB3B87 /* DDColorKit_Private-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDColorKit_Private-umbrella.h"; sourceTree = ""; }; - 1CE9CED92DFD164D0A7354F8CC55DC78 /* DDBaseSwitch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDBaseSwitch.h; path = DDBasicControlsKit_Private/Classes/DDBaseSwitch/DDBaseSwitch.h; sourceTree = ""; }; - 1D3790512280E5375A3BD1510F3FB837 /* DDMAGeometry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDMAGeometry.h; path = DDMAMapKit_Private/Classes/DDMAUtil/DDMAGeometry.h; sourceTree = ""; }; - 1D46B6D7FC4D45B44DB68694E3E7A2B9 /* BRPickerView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BRPickerView-prefix.pch"; sourceTree = ""; }; - 1D8F67E70271E3E66BC0DF5A51A979E7 /* SDWebImageDownloaderConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderConfig.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderConfig.m; sourceTree = ""; }; - 1D9510AF36E7EC45CD71E2C15F3863D5 /* ImagePrefetcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImagePrefetcher.swift; path = Sources/Networking/ImagePrefetcher.swift; sourceTree = ""; }; - 1DDD4360E28D83A8A2AAF2BEA9F751CD /* ClearMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ClearMessage.swift; path = Source/ClearMessage.swift; sourceTree = ""; }; - 1DE8AAA4F54127820E8B93C1348805A6 /* MJRefreshConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshConfig.m; path = MJRefresh/MJRefreshConfig.m; sourceTree = ""; }; - 1E32B5B8F126CC4469DC4B28CA408AF4 /* MainScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MainScheduler.swift; path = RxSwift/Schedulers/MainScheduler.swift; sourceTree = ""; }; - 1E8E1583D64690269DB3A220AB64E28B /* ExtensionHelpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExtensionHelpers.swift; path = Sources/Utility/ExtensionHelpers.swift; sourceTree = ""; }; - 1EECE5C3878ECD2D907C22542FAF6CB0 /* BRPickerView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = BRPickerView.modulemap; sourceTree = ""; }; - 1F2351A2165091AD20D1FEC5C7EA60C7 /* AMapFoundationKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapFoundationKit.h; path = AMapFoundationKit.framework/Headers/AMapFoundationKit.h; sourceTree = ""; }; - 1F2A5B4E0766288D3F438D9D9C313CD5 /* RTLManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RTLManager.m; path = Sources/RLTManager/RTLManager.m; sourceTree = ""; }; - 1F74707FBFB8CE8AC92B29ABAE7450F7 /* ZFReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFReachabilityManager.h; path = DDZFPlayerKit_Private/Classes/Core/ZFReachabilityManager.h; sourceTree = ""; }; - 1FD65CB001A4CB7ADE94D956536C548D /* RxCollectionViewDataSourceType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewDataSourceType.swift; path = RxCocoa/iOS/Protocols/RxCollectionViewDataSourceType.swift; sourceTree = ""; }; - 1FEA06F110D30604A9FB015A9790A954 /* DDControlsKit_Private */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = DDControlsKit_Private; path = libDDControlsKit_Private.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 209DED469D48F3D7CC4B7636A432924F /* ObserverBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObserverBase.swift; path = RxSwift/Observers/ObserverBase.swift; sourceTree = ""; }; - 209FAB8364FAFA09461D2E3FEE43031A /* ConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintItem.swift; path = Sources/ConstraintItem.swift; sourceTree = ""; }; - 20AE7958E8A392E43477169D9EC04936 /* RxCocoa-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxCocoa-umbrella.h"; sourceTree = ""; }; - 20AF9E2DEA4C18BDEC2A77D3D329CFFF /* Concat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Concat.swift; path = RxSwift/Observables/Concat.swift; sourceTree = ""; }; - 20B9AD5D0F5F4F68E74EBC1DB5C6F50C /* DDMANaviManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDMANaviManager.h; path = DDMAMapKit_Private/Classes/DDMANaviManager/DDMANaviManager.h; sourceTree = ""; }; - 210A24BB10A3CA89D14A6F1A180FC065 /* PopupDialog+Keyboard.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PopupDialog+Keyboard.swift"; path = "PopupDialog/Classes/PopupDialog+Keyboard.swift"; sourceTree = ""; }; - 2126BCB05F88A7E5C18499699DAC6107 /* ZLPhotoPreviewAnimatedTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLPhotoPreviewAnimatedTransition.swift; path = Sources/Animation/ZLPhotoPreviewAnimatedTransition.swift; sourceTree = ""; }; - 214E2061DBEB30C377E88C37A1745E4A /* IQKeyboardManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManager.swift; path = IQKeyboardManagerSwift/IQKeyboardManager.swift; sourceTree = ""; }; - 21674AB534EC96E7927A0F7D146F0B81 /* PopupDialog.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PopupDialog.swift; path = PopupDialog/Classes/PopupDialog.swift; sourceTree = ""; }; - 218DC6BF23D33E9C1057D41CB1995EC7 /* Platform.Darwin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.Darwin.swift; path = Platform/Platform.Darwin.swift; sourceTree = ""; }; - 218E425ABD782C7C3E7EF8315D9CDC69 /* CPListItem+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CPListItem+Kingfisher.swift"; path = "Sources/Extensions/CPListItem+Kingfisher.swift"; sourceTree = ""; }; - 219D2C7D4A1233A49409F253CCB06585 /* EKPopUpMessageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKPopUpMessageView.swift; path = Source/MessageViews/EKPopUpMessageView.swift; sourceTree = ""; }; - 21F1FCF1B9D88A58BD121690F90975BD /* EKAttributes+Precedence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EKAttributes+Precedence.swift"; path = "Source/Model/EntryAttributes/EKAttributes+Precedence.swift"; sourceTree = ""; }; - 222E43D67A215B6E2197307C686CA75D /* MABaseOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MABaseOverlay.h; path = AMapNaviKit.framework/Headers/MABaseOverlay.h; sourceTree = ""; }; - 2245679B562A0A981E009C266C623CA3 /* MJRefresh.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJRefresh.debug.xcconfig; sourceTree = ""; }; - 2251394CF95CFBA2E990C43CD3FC76B1 /* EKProcessingNoteMessageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKProcessingNoteMessageView.swift; path = Source/MessageViews/Notes/EKProcessingNoteMessageView.swift; sourceTree = ""; }; - 226798F0F42A0B656112DFB464D2ED72 /* SwiftEntryKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftEntryKit-umbrella.h"; sourceTree = ""; }; - 227385DFB9BD93899C65F2800AFA2C5B /* NSTextView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSTextView+Rx.swift"; path = "RxCocoa/macOS/NSTextView+Rx.swift"; sourceTree = ""; }; - 22942CBE8FDDA86BAFE7897238368F4F /* SDAnimatedImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SDAnimatedImageView+WebCache.h"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageView+WebCache.h"; sourceTree = ""; }; - 23690B28D6FFD2554B2D3954ECB97E68 /* ESTabBarItemContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ESTabBarItemContainer.swift; path = Sources/ESTabBarItemContainer.swift; sourceTree = ""; }; - 23D9826CFF8ECCEF2E4D1AD0394274D3 /* PresentationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PresentationController.swift; path = PopupDialog/Classes/PresentationController.swift; sourceTree = ""; }; - 23ED62DFB1F578DEBE7EACFECEB5EC39 /* CGContext+CGImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CGContext+CGImage.swift"; path = "Sources/DynamicBlurView/CGContext+CGImage.swift"; sourceTree = ""; }; - 24ADBC076754485CD88040174BE822E6 /* MJRefreshGifHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshGifHeader.m; path = MJRefresh/Custom/Header/MJRefreshGifHeader.m; sourceTree = ""; }; - 24C99B78F7B41E05CCBDD88A5BDB004E /* PublishRelay+Signal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PublishRelay+Signal.swift"; path = "RxCocoa/Traits/Signal/PublishRelay+Signal.swift"; sourceTree = ""; }; - 24CB2F3041D8659BA7302393256B9672 /* UIImage+MemoryCacheCost.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MemoryCacheCost.h"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+MemoryCacheCost.h"; sourceTree = ""; }; - 251A8361A153A5D0901C0796201088B7 /* ZLPhotoPreviewSheet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLPhotoPreviewSheet.swift; path = Sources/General/ZLPhotoPreviewSheet.swift; sourceTree = ""; }; - 251DEF303C9617640D84A7EA0306539F /* Optional.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Optional.swift; path = RxSwift/Observables/Optional.swift; sourceTree = ""; }; - 251FF235CE955F28D337668577537D65 /* DDControlsKit_Private-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDControlsKit_Private-prefix.pch"; sourceTree = ""; }; - 2532AA7D799838AA046A78158ADA67C8 /* ZFSmallFloatControlView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFSmallFloatControlView.m; path = DDZFPlayerKit_Private/Classes/ControlView/ZFSmallFloatControlView.m; sourceTree = ""; }; - 25499C609D3D9E0423BAC734679F23C3 /* JXCategoryCollectionView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryCollectionView.h; path = Sources/Common/JXCategoryCollectionView.h; sourceTree = ""; }; - 2557183A2FE6CE05E0241839C2486DB5 /* DDUIGestureRecognizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDUIGestureRecognizer.swift; path = DDUIKit/Classes/UIGestureRecognizer/DDUIGestureRecognizer.swift; sourceTree = ""; }; - 25FA9D728A1914EACE0A73F28DF83C74 /* SDWebImageDownloaderResponseModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderResponseModifier.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderResponseModifier.h; sourceTree = ""; }; - 263B33488CBD1E3F4E3B1CF228563F67 /* UINavigationBar+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UINavigationBar+DDCategory.m"; path = "DDCategoryKit_Private/Classes/UINavigationBar+DDCategory/UINavigationBar+DDCategory.m"; sourceTree = ""; }; - 264DAF11628C8A5413AA9E9C7E5D72C6 /* ZFPersentInteractiveTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFPersentInteractiveTransition.h; path = DDZFPlayerKit_Private/Classes/Core/ZFPersentInteractiveTransition.h; sourceTree = ""; }; - 2652145BBBEDD592507999E4EA544295 /* EKNoteMessageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKNoteMessageView.swift; path = Source/MessageViews/Notes/EKNoteMessageView.swift; sourceTree = ""; }; - 265EEA9C2C0AAA2A66DB2E9157D15529 /* AMapNaviDriveView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviDriveView.h; path = AMapNaviKit.framework/Headers/AMapNaviDriveView.h; sourceTree = ""; }; - 2676A5C87CCFF94CF013F9C0D060E6EE /* JXCategoryTitleCellModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryTitleCellModel.m; path = Sources/Title/JXCategoryTitleCellModel.m; sourceTree = ""; }; - 26851AF6F5EBFADD0D752DEB55869AEB /* Observable+Bind.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Observable+Bind.swift"; path = "RxCocoa/Common/Observable+Bind.swift"; sourceTree = ""; }; - 26A1FD01AC8E602271BF3B13311D314A /* KingfisherManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KingfisherManager.swift; path = Sources/General/KingfisherManager.swift; sourceTree = ""; }; - 26AEA41C8B14F7F0E9144CF1B5BAAAB5 /* car_xingshi.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = car_xingshi.png; path = DDMAMapKit_Private/Assets/car_xingshi.png; sourceTree = ""; }; - 26B9E0AAED2300205EA0828648CBB3DE /* MACustomCalloutView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MACustomCalloutView.h; path = AMapNaviKit.framework/Headers/MACustomCalloutView.h; sourceTree = ""; }; - 26BB5F61F8863E99DA27C4E09C51050B /* Multicast.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Multicast.swift; path = RxSwift/Observables/Multicast.swift; sourceTree = ""; }; - 26C221C17DDF5C5FC87D071352FD7CB2 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageManager.m; sourceTree = ""; }; - 26DFAA23DA9213BB6AF36641FBE3A2F8 /* MATileOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MATileOverlayRenderer.h; path = AMapNaviKit.framework/Headers/MATileOverlayRenderer.h; sourceTree = ""; }; - 26E44BAFA303D9F296CB04EEE6A486E2 /* DDZFPlayerKit_Private.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDZFPlayerKit_Private.debug.xcconfig; sourceTree = ""; }; - 2707E7BEE80B079FE70890826E091175 /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Source/Response.swift; sourceTree = ""; }; - 276FE88FD5FF17448AB1F17EB324730F /* UITabBarController+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITabBarController+DDCategory.m"; path = "DDCategoryKit_Private/Classes/UITabBarController+DDCategory/UITabBarController+DDCategory.m"; sourceTree = ""; }; - 27709638D16E4E14D83FC485BDF23BB6 /* Sample.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sample.swift; path = RxSwift/Observables/Sample.swift; sourceTree = ""; }; - 279045C7261070E227F016C7B3CDA49C /* UINavigationItem+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UINavigationItem+DDCategory.h"; path = "DDCategoryKit_Private/Classes/UINavigationItem+DDCategory/UINavigationItem+DDCategory.h"; sourceTree = ""; }; - 27A084BC528FABAFAD9D6D01EA8A4143 /* SDImageCachesManagerOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCachesManagerOperation.m; path = DDWebImageKit_Private/Classes/SDWebImage/Private/SDImageCachesManagerOperation.m; sourceTree = ""; }; - 27A0965B519004ED7B9B45748B6D4483 /* MJRefreshHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshHeader.h; path = MJRefresh/Base/MJRefreshHeader.h; sourceTree = ""; }; - 27B5E7C065B8E43D37E0739DA791264B /* UISwitch+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UISwitch+Rx.swift"; path = "RxCocoa/iOS/UISwitch+Rx.swift"; sourceTree = ""; }; - 27D53C130081BF5B3BC6B422A21B1EF3 /* AVAssetImageDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AVAssetImageDataProvider.swift; path = Sources/General/ImageSource/AVAssetImageDataProvider.swift; sourceTree = ""; }; - 27DE766D157FE0517E64E1E1DBF5B2FF /* BRAddressPickerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BRAddressPickerView.m; path = BRPickerView/AddressPickerView/BRAddressPickerView.m; sourceTree = ""; }; - 27E45414B8C8E3E7696F22281E6A9EB0 /* CGImage+Accelerate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CGImage+Accelerate.swift"; path = "Sources/DynamicBlurView/CGImage+Accelerate.swift"; sourceTree = ""; }; - 27FB41B8C45B9D8A5FE620200DA8F6DD /* AMapNaviBaseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviBaseManager.h; path = AMapNaviKit.framework/Headers/AMapNaviBaseManager.h; sourceTree = ""; }; - 2817D92C2BEAFB54CF084528084DBBCC /* SDWebImageOptionsProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageOptionsProcessor.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageOptionsProcessor.m; sourceTree = ""; }; - 2875A2E717CC17FABBE08271D33F0C80 /* Deferred.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Deferred.swift; path = RxSwift/Observables/Deferred.swift; sourceTree = ""; }; - 289DCBB1FCB8AE9994D9CD156EDF5882 /* UILayoutSupport+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UILayoutSupport+Extensions.swift"; path = "Sources/UILayoutSupport+Extensions.swift"; sourceTree = ""; }; - 28CF74A30ADA16A65120E81055556B9A /* DDLogKit_Private-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DDLogKit_Private-dummy.m"; sourceTree = ""; }; - 28E2578003E2F135F48FD8D61F37EB4B /* IQKeyboardManager+UIKeyboardNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+UIKeyboardNotification.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+UIKeyboardNotification.swift"; sourceTree = ""; }; - 29388440526D9ABF1075B841888D72C1 /* SwiftToast.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftToast.swift; path = DDToastKit_Private/Classes/SwiftToast.swift; sourceTree = ""; }; - 29503832346B5ACA306B8351EFEF99F4 /* EKWrapperView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKWrapperView.swift; path = Source/Infra/EKWrapperView.swift; sourceTree = ""; }; - 295B67C739D3FA7CC1836B0AED59168A /* ZLPhotoBrowser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLPhotoBrowser.swift; path = Sources/General/ZLPhotoBrowser.swift; sourceTree = ""; }; - 295F96681C9FA1B63215C978EF3FE540 /* ZFPlayerController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFPlayerController.m; path = DDZFPlayerKit_Private/Classes/Core/ZFPlayerController.m; sourceTree = ""; }; - 296E8642906500923FB63D86FC8AB460 /* IQKeyboardManager+Position.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Position.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+Position.swift"; sourceTree = ""; }; - 298D50B471F0C279F9EC1641B115388A /* UITextField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UITextField.swift; path = DDUIKit/Classes/UITextField/UITextField.swift; sourceTree = ""; }; - 2AB85225A76FD605AAA4578E1A765164 /* Pods-OrderScheduling.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-OrderScheduling.release.xcconfig"; sourceTree = ""; }; - 2ABAA3E262A876DF8D6CF9B8AAB8DD84 /* SDImageCacheDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheDefine.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCacheDefine.m; sourceTree = ""; }; - 2AF1AC9E6DF00390E2664025CE991E10 /* MAGroundOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAGroundOverlay.h; path = AMapNaviKit.framework/Headers/MAGroundOverlay.h; sourceTree = ""; }; - 2B081C311F36B5381C8064B5A6CA8E74 /* CombineLatest+Collection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CombineLatest+Collection.swift"; path = "RxSwift/Observables/CombineLatest+Collection.swift"; sourceTree = ""; }; - 2B62494A345FE3738E54D0B7BB72B876 /* ConstraintLayoutSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupport.swift; path = Sources/ConstraintLayoutSupport.swift; sourceTree = ""; }; - 2B69714D0D7BBF893C7D33E4E0F55581 /* DDToastKit_Private-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DDToastKit_Private-dummy.m"; sourceTree = ""; }; - 2B6973844C1B479BA07C39481BCAE57B /* JXCategoryBaseView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryBaseView.m; path = Sources/Base/JXCategoryBaseView.m; sourceTree = ""; }; - 2B9D361F4A7582DD8F461E698C862B45 /* UIImage+ZLPhotoBrowser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImage+ZLPhotoBrowser.swift"; path = "Sources/Extensions/UIImage+ZLPhotoBrowser.swift"; sourceTree = ""; }; - 2BAF5D75E4FB52D4E9196CE377997DE9 /* EKAttributes+HapticFeedback.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EKAttributes+HapticFeedback.swift"; path = "Source/Model/EntryAttributes/EKAttributes+HapticFeedback.swift"; sourceTree = ""; }; - 2BAFEB0AC8934BC3B90191ECEA295D64 /* SDWebImageCacheSerializer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheSerializer.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCacheSerializer.m; sourceTree = ""; }; - 2C1E1CE3F760862DD43B023692E505ED /* RxTableViewDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTableViewDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxTableViewDelegateProxy.swift; sourceTree = ""; }; - 2C22936827447971972D59197C66EC0E /* ScheduledItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScheduledItem.swift; path = RxSwift/Schedulers/Internal/ScheduledItem.swift; sourceTree = ""; }; - 2C3DE9D6A02CD034594EA9F837835595 /* MAMapAccessibilityIdentifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMapAccessibilityIdentifier.h; path = AMapNaviKit.framework/Headers/MAMapAccessibilityIdentifier.h; sourceTree = ""; }; - 2C723BBB371338FF563D44BF6B22F6F3 /* ZFFloatView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFFloatView.h; path = DDZFPlayerKit_Private/Classes/Core/ZFFloatView.h; sourceTree = ""; }; - 2C9F61CE6ED2DF8974E42B60C415199B /* SDImageCacheDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheDefine.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCacheDefine.h; sourceTree = ""; }; - 2CA165EEA66299212C45787A9E8A4CFF /* ImageProcessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageProcessor.swift; path = Sources/Image/ImageProcessor.swift; sourceTree = ""; }; - 2CA67F170CF46792086DB53F69F5E540 /* ZFReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFReachabilityManager.m; path = DDZFPlayerKit_Private/Classes/Core/ZFReachabilityManager.m; sourceTree = ""; }; - 2CD6F59E9A12BD3804C023A1B9C383D4 /* String+MD5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+MD5.swift"; path = "Sources/Utility/String+MD5.swift"; sourceTree = ""; }; - 2D0E4F4560A0D28E301C1A2D090AE1BE /* IJKMediaFramework.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IJKMediaFramework.framework; path = DDZFPlayerKit_Private/Classes/ijkplayer/IJKMediaFramework.framework; sourceTree = ""; }; - 2D1725DDB3E1952143F821A86C658B11 /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCache.m; sourceTree = ""; }; - 2D3CC0F4DE0762CC5418409448E4B854 /* NSObject+Rx+KVORepresentable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSObject+Rx+KVORepresentable.swift"; path = "RxCocoa/Foundation/NSObject+Rx+KVORepresentable.swift"; sourceTree = ""; }; - 2D41315ABF3EBC774F3D78F9C202071A /* NSAttributedString+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+DDCategory.m"; path = "DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSAttributedString+DDCategory.m"; sourceTree = ""; }; - 2DA29D0712B220E74A2165F2404E6A4F /* ZLAddPhotoCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLAddPhotoCell.swift; path = Sources/General/ZLAddPhotoCell.swift; sourceTree = ""; }; - 2DD82308C60C73233AC78F46107CF4CA /* RxTableViewDataSourceType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTableViewDataSourceType.swift; path = RxCocoa/iOS/Protocols/RxTableViewDataSourceType.swift; sourceTree = ""; }; - 2DD86580723992F780F2F830A13CBDF0 /* SDAnimatedImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageView.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageView.m; sourceTree = ""; }; - 2DE47AF6516BB19369CA020EA7C48A4A /* DDNetworkingOfAlamofireKit_Private */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = DDNetworkingOfAlamofireKit_Private; path = libDDNetworkingOfAlamofireKit_Private.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 2E09F0C30E2EF115B23D6DA6F45D3700 /* DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDCategory.h; path = DDCategoryKit_Private/Classes/DDCategory.h; sourceTree = ""; }; - 2E51793301441FE9DF9C1E68A2C0548C /* DDMATrackManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDMATrackManager.h; path = DDMAMapKit_Private/Classes/DDMATrackManager/DDMATrackManager.h; sourceTree = ""; }; - 2F655379862B23651B80D3906B9B5F17 /* ZLResultModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLResultModel.swift; path = Sources/General/ZLResultModel.swift; sourceTree = ""; }; - 2F922C5772AFAFDAF4D4D9869570F846 /* UIImage+ForceDecode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ForceDecode.m"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+ForceDecode.m"; sourceTree = ""; }; - 2F9954B4961F79AD2C528D67355158EF /* SDGraphicsImageRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDGraphicsImageRenderer.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDGraphicsImageRenderer.h; sourceTree = ""; }; - 2FD58E2C8E393E793A336B51AB10F68E /* MAParticleOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAParticleOverlayRenderer.h; path = AMapNaviKit.framework/Headers/MAParticleOverlayRenderer.h; sourceTree = ""; }; - 2FF554B90DB384AF86113D10561E1090 /* DDBaseSwitch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDBaseSwitch.m; path = DDBasicControlsKit_Private/Classes/DDBaseSwitch/DDBaseSwitch.m; sourceTree = ""; }; - 300CA45FD37A463B5FBFF59D25FE5E93 /* ParameterEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoder.swift; path = Source/ParameterEncoder.swift; sourceTree = ""; }; - 302389AF8270E7C9B43A9943E089E17A /* SnapKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-umbrella.h"; sourceTree = ""; }; - 3038E91F27734CAA04586C36ACD63273 /* MAPolygonRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAPolygonRenderer.h; path = AMapNaviKit.framework/Headers/MAPolygonRenderer.h; sourceTree = ""; }; - 3051487E547347F0DCCB518F90317B8C /* NopDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NopDisposable.swift; path = RxSwift/Disposables/NopDisposable.swift; sourceTree = ""; }; - 3110DC0DF5D51DA87F3A6DC9FC874FB3 /* AMapNaviEleBikeDataRepresentable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviEleBikeDataRepresentable.h; path = AMapNaviKit.framework/Headers/AMapNaviEleBikeDataRepresentable.h; sourceTree = ""; }; - 315A46D40C5C67E109FAB74191C975B3 /* DDUIImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDUIImageView.swift; path = DDUIKit/Classes/UIImageView/DDUIImageView.swift; sourceTree = ""; }; - 31A01C7DB9ABC17AE1F999346AC6305E /* EKMessageContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKMessageContentView.swift; path = Source/MessageViews/EKMessageContentView.swift; sourceTree = ""; }; - 31DB6A78B50469B058812C0AB3DEF591 /* BRPickerStyle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BRPickerStyle.m; path = BRPickerView/Base/BRPickerStyle.m; sourceTree = ""; }; - 31FC849E0CFEB42AB4850F23C1A00092 /* NSObject+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+DDCategory.m"; path = "DDCategoryKit_Private/Classes/NSObject+DDCategory/NSObject+DDCategory.m"; sourceTree = ""; }; - 32189BA3A3CA88E003608BB397FF6181 /* JXCategoryTitleVerticalZoomView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryTitleVerticalZoomView.h; path = Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomView.h; sourceTree = ""; }; - 3251F63234906BD5D69897A47D7DE228 /* Buffer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Buffer.swift; path = RxSwift/Observables/Buffer.swift; sourceTree = ""; }; - 3285ECDE4EC7D2748C153D3697BE803A /* Map.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Map.swift; path = RxSwift/Observables/Map.swift; sourceTree = ""; }; - 329F0735A9474AD3C4D2019D9A2EB9B7 /* JXCategoryIndicatorBackgroundView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryIndicatorBackgroundView.m; path = Sources/Indicator/IndicatorViews/JXCategoryIndicatorBackgroundView.m; sourceTree = ""; }; - 33BCE71E5BE6A4D8F73BBC0EEF702D17 /* SDInternalMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDInternalMacros.h; path = DDWebImageKit_Private/Classes/SDWebImage/Private/SDInternalMacros.h; sourceTree = ""; }; - 341025A3E2F61620469E370B9D764225 /* UIFont+ZLPhotoBrowser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIFont+ZLPhotoBrowser.swift"; path = "Sources/Extensions/UIFont+ZLPhotoBrowser.swift"; sourceTree = ""; }; - 34168E57D403C1E21D2EA1ED334153C8 /* Bag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Bag.swift; path = Platform/DataStructures/Bag.swift; sourceTree = ""; }; - 3431A513DD5CF052B33F1798DE98E1E6 /* Pods-OrderScheduling-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-OrderScheduling-acknowledgements.markdown"; sourceTree = ""; }; - 344F0F6866E65EB5164258A81E6F9613 /* ControlEvent+Signal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ControlEvent+Signal.swift"; path = "RxCocoa/Traits/Signal/ControlEvent+Signal.swift"; sourceTree = ""; }; - 34713360F6BD4606798AA38EDAD714D8 /* RxSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxSwift.release.xcconfig; sourceTree = ""; }; - 347979FE86A13B4C3ABA621A32CB62DE /* DDBaseImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDBaseImageView.h; path = DDBasicControlsKit_Private/Classes/DDBaseImageView/DDBaseImageView.h; sourceTree = ""; }; - 348998058C7A2181E42DACBF50973982 /* Zip+Collection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Zip+Collection.swift"; path = "RxSwift/Observables/Zip+Collection.swift"; sourceTree = ""; }; - 34938F9CC1D16CB3D3D73E959816D3E3 /* SDWebImageDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDefine.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDefine.m; sourceTree = ""; }; - 34E995B15C36462115ABFF8062A67418 /* EKSimpleMessageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKSimpleMessageView.swift; path = Source/MessageViews/EKSimpleMessageView.swift; sourceTree = ""; }; - 34FB964502259D0FF233CE71CFDD2A71 /* PopupDialog */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = PopupDialog; path = libPopupDialog.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 34FFA729B64A20BD85C43E1E373ABD61 /* MAMultiPointOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMultiPointOverlayRenderer.h; path = AMapNaviKit.framework/Headers/MAMultiPointOverlayRenderer.h; sourceTree = ""; }; - 350AD74105E5CE89CD260670098C3370 /* DDUIGestureRecognizer-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDUIGestureRecognizer-prefix.pch"; sourceTree = ""; }; - 35334AB4B90B42CBD33861B6540D33EA /* FormatIndicatedCacheSerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FormatIndicatedCacheSerializer.swift; path = Sources/Cache/FormatIndicatedCacheSerializer.swift; sourceTree = ""; }; - 358CF138B0A845A1BF0BE48FCF35637A /* ZFLandscapeWindow.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFLandscapeWindow.m; path = DDZFPlayerKit_Private/Classes/Core/ZFLandscapeWindow.m; sourceTree = ""; }; - 35925EFC5A2D9B134E35FD5C91D44C6F /* ZLPhotoPreviewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLPhotoPreviewCell.swift; path = Sources/General/ZLPhotoPreviewCell.swift; sourceTree = ""; }; - 35B18F6196E9FDD3EE1EAD170B0BF2B7 /* ServerTrustEvaluation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerTrustEvaluation.swift; path = Source/ServerTrustEvaluation.swift; sourceTree = ""; }; - 35BC09180850FDD03C450D14BD310714 /* DDProgressHUDKit_Private */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = DDProgressHUDKit_Private; path = libDDProgressHUDKit_Private.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 35FF28F1C978832822343F89E554FAA6 /* IQKeyboardManagerSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-prefix.pch"; sourceTree = ""; }; - 3613A096608801D6FD1BF44C98FC2916 /* SDFileAttributeHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDFileAttributeHelper.h; path = DDWebImageKit_Private/Classes/SDWebImage/Private/SDFileAttributeHelper.h; sourceTree = ""; }; - 36298AA4A4FE034762B42BE21FB2A826 /* UIColor+SDHexString.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+SDHexString.m"; path = "DDWebImageKit_Private/Classes/SDWebImage/Private/UIColor+SDHexString.m"; sourceTree = ""; }; - 369282BFFA17BE577950F2C29FB6A67E /* UITextView+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITextView+DDCategory.m"; path = "DDCategoryKit_Private/Classes/UITextView+DDCategory/UITextView+DDCategory.m"; sourceTree = ""; }; - 36BE6C0FA484D00F8769D414928C7FFC /* JXCategoryNumberCellModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryNumberCellModel.h; path = Sources/Number/JXCategoryNumberCellModel.h; sourceTree = ""; }; - 370532CCD19CE547D32AF792C93EE248 /* SwiftyRSA-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyRSA-umbrella.h"; sourceTree = ""; }; - 3705A21F6D5C9B2BD3D689AF2E3AD83C /* SwiftEntryKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftEntryKit.debug.xcconfig; sourceTree = ""; }; - 3715174F3A8A21F2856A81720D2A4629 /* Completable+AndThen.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Completable+AndThen.swift"; path = "RxSwift/Traits/PrimitiveSequence/Completable+AndThen.swift"; sourceTree = ""; }; - 3736EE368632C5203C2C99098692F218 /* AMapNaviRideDataRepresentable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviRideDataRepresentable.h; path = AMapNaviKit.framework/Headers/AMapNaviRideDataRepresentable.h; sourceTree = ""; }; - 3743DCEBE7F1DF1C3A1F19E68A1BD44A /* DDAudioPlayerKit_Private.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDAudioPlayerKit_Private.release.xcconfig; sourceTree = ""; }; - 377468D4851829E62B60E46BD1DE02EC /* JXCategoryDotView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryDotView.h; path = Sources/Dot/JXCategoryDotView.h; sourceTree = ""; }; - 37AEFD8B4129F6504C117E16FCBE1286 /* RxWKNavigationDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxWKNavigationDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxWKNavigationDelegateProxy.swift; sourceTree = ""; }; - 37EEBD41FC55A11C4AFAFCE2EFDA03E5 /* JXCategoryBaseCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryBaseCell.m; path = Sources/Base/JXCategoryBaseCell.m; sourceTree = ""; }; - 3807B769008A2EE4CCD105890634EAFE /* DDZFPlayerKit_Private.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DDZFPlayerKit_Private.modulemap; sourceTree = ""; }; - 380AB04F49D86EFF23C80BA0B9985AD3 /* EKColor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKColor.swift; path = Source/Model/EKColor.swift; sourceTree = ""; }; - 3813A0B5BDAD1D477CF9F603F038C5D5 /* KFImageRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KFImageRenderer.swift; path = Sources/SwiftUI/KFImageRenderer.swift; sourceTree = ""; }; - 381408FAF18C91E6B087F673947BBAF9 /* DelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DelegateProxy.swift; path = RxCocoa/Common/DelegateProxy.swift; sourceTree = ""; }; - 382F3AA039A012560669E2786E5433D9 /* Materialize.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Materialize.swift; path = RxSwift/Observables/Materialize.swift; sourceTree = ""; }; - 383F13627705F8373D8E826977B42A47 /* DDColorKit_Private.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDColorKit_Private.debug.xcconfig; sourceTree = ""; }; - 384B1E0FEAD308DEDECCC084F503ED1F /* AMapNaviHUDView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviHUDView.h; path = AMapNaviKit.framework/Headers/AMapNaviHUDView.h; sourceTree = ""; }; - 384EB8BE83E3A97EEC0069B8558B9316 /* TYCyclePagerView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "TYCyclePagerView-dummy.m"; sourceTree = ""; }; - 388972DCDBB55BA9E652318E125C85E2 /* MAPolyline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAPolyline.h; path = AMapNaviKit.framework/Headers/MAPolyline.h; sourceTree = ""; }; - 38C005235C5BD77A6A2BEB7BBCABC22C /* UIImageView+Calculations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImageView+Calculations.swift"; path = "PopupDialog/Classes/UIImageView+Calculations.swift"; sourceTree = ""; }; - 3916FA9DF3B273C25E7A7E90AFF8B94F /* MABaseOverlay+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MABaseOverlay+DDCategory.m"; path = "DDMAMapKit_Private/Classes/DDMAMap/Overlay/MABaseOverlay+DDCategory.m"; sourceTree = ""; }; - 397ACB177BAF19E4CBD6E53B19670373 /* UIBarButtonItem+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIBarButtonItem+DDCategory.m"; path = "DDCategoryKit_Private/Classes/UIBarButtonItem+DDCategory/UIBarButtonItem+DDCategory.m"; sourceTree = ""; }; - 39C2ABB7EE85CD6B4D61998636DB33BB /* Pods-OrderSchedulingNotificationService-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-OrderSchedulingNotificationService-acknowledgements.plist"; sourceTree = ""; }; - 39D0C74A85C6A8657704AD7AA6B953C4 /* EKAttributes+Presets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EKAttributes+Presets.swift"; path = "Source/Model/EntryAttributes/EKAttributes+Presets.swift"; sourceTree = ""; }; - 3A12523C19872904FE054C45BC2ABE97 /* DDNetworkingOfAlamofireKit_Private-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DDNetworkingOfAlamofireKit_Private-dummy.m"; sourceTree = ""; }; - 3A2343A0C3D24D5DA61225E4B6F74F79 /* Indicator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Indicator.swift; path = Sources/Views/Indicator.swift; sourceTree = ""; }; - 3A615B3287B92F749920B6A3508323FA /* RecursiveLock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecursiveLock.swift; path = Platform/RecursiveLock.swift; sourceTree = ""; }; - 3A63310BFF4BCEE45A37FEDC5464D8C8 /* EKAlertMessageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKAlertMessageView.swift; path = Source/MessageViews/EKAlertMessageView.swift; sourceTree = ""; }; - 3A63C95CEE4DC15C06CFE92356CA3CB2 /* UIViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIViewController.swift; path = DDUIKit/Classes/UIViewController/UIViewController.swift; sourceTree = ""; }; - 3A6FA7D7D1ECC53270E58F80B5EDE1E0 /* ZFSpeedLoadingView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFSpeedLoadingView.m; path = DDZFPlayerKit_Private/Classes/ControlView/ZFSpeedLoadingView.m; sourceTree = ""; }; - 3A7060AA231C1C535E46258355ECF306 /* CaptureQuality.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CaptureQuality.swift; path = Sources/DynamicBlurView/CaptureQuality.swift; sourceTree = ""; }; - 3A7784C8FB288E38B9CD0E6D5C56C3F4 /* ConstraintMultiplierTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMultiplierTarget.swift; path = Sources/ConstraintMultiplierTarget.swift; sourceTree = ""; }; - 3A872DDCD481B023368C91606B9B418B /* MAMVTTileOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMVTTileOverlay.h; path = AMapNaviKit.framework/Headers/MAMVTTileOverlay.h; sourceTree = ""; }; - 3ABF59D401C215C4A851764E937B659C /* DDFullScreenTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDFullScreenTransition.swift; path = DDUIKit/Classes/UIViewControllerAnimatedTransitioning/DDFullScreenTransition.swift; sourceTree = ""; }; - 3B0696219D2784C0023ADE4D9301B34C /* DDBaseTabBarController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDBaseTabBarController.h; path = DDBasicControlsKit_Private/Classes/DDBaseTabBarController/DDBaseTabBarController.h; sourceTree = ""; }; - 3B149A2E0D291A7392934B51EA8DD0A2 /* SDImageHEICCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageHEICCoder.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageHEICCoder.m; sourceTree = ""; }; - 3B2D944E7777A208BF0BE49900636983 /* DDUIKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DDUIKit-dummy.m"; sourceTree = ""; }; - 3B5DCE773C523A9E1546546DA8397F90 /* MATileOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MATileOverlay.h; path = AMapNaviKit.framework/Headers/MATileOverlay.h; sourceTree = ""; }; - 3B8B9E1EAE4DB813CB3B48BA26A853EB /* UIColor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIColor.swift; path = DDUIKit/Classes/UIColor/UIColor.swift; sourceTree = ""; }; - 3BA2FC10BF6B9B1101AA446A7C5118A1 /* UIApplication+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIApplication+DDCategory.m"; path = "DDCategoryKit_Private/Classes/UIApplication+DDCategory/UIApplication+DDCategory.m"; sourceTree = ""; }; - 3C036FCBB24E7A04CA737EF41E1E560E /* ImageDrawing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDrawing.swift; path = Sources/Image/ImageDrawing.swift; sourceTree = ""; }; - 3C1C6FCE8B5DC525669FED53B182A2EB /* UIGestureRecognizer+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIGestureRecognizer+Rx.swift"; path = "RxCocoa/iOS/UIGestureRecognizer+Rx.swift"; sourceTree = ""; }; - 3C28BDCBAD94CF0EF86ACC5AEEE734D8 /* UICollectionViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UICollectionViewCell.swift; path = DDUIKit/Classes/UICollectionViewCell/UICollectionViewCell.swift; sourceTree = ""; }; - 3CBCFBA84881A19B21A4E7BDCC9C877A /* TYCyclePagerTransformLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = TYCyclePagerTransformLayout.m; path = TYCyclePagerViewDemo/TYCyclePagerView/TYCyclePagerTransformLayout.m; sourceTree = ""; }; - 3CD093F7900FC1EE5C84AF7092F9B5E7 /* RxTableViewDataSourceProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTableViewDataSourceProxy.swift; path = RxCocoa/iOS/Proxies/RxTableViewDataSourceProxy.swift; sourceTree = ""; }; - 3CE034D1CE8AED1F64BCDECD244183F1 /* RxPickerViewDataSourceProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxPickerViewDataSourceProxy.swift; path = RxCocoa/iOS/Proxies/RxPickerViewDataSourceProxy.swift; sourceTree = ""; }; - 3D2D6F1D0DC3F2B9368D6D1917F7215F /* ZLProgressHUD.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLProgressHUD.swift; path = Sources/General/ZLProgressHUD.swift; sourceTree = ""; }; - 3D5797C919C52BCF6845A7B532866584 /* EKImageNoteMessageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKImageNoteMessageView.swift; path = Source/MessageViews/Notes/EKImageNoteMessageView.swift; sourceTree = ""; }; - 3E3F694548695F4C19B672C151FBF7CB /* ObservableConvertibleType+SharedSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableConvertibleType+SharedSequence.swift"; path = "RxCocoa/Traits/SharedSequence/ObservableConvertibleType+SharedSequence.swift"; sourceTree = ""; }; - 3E51D95118FA22F4FFEB066E2CF1A373 /* DDUIPanGestureRecognizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDUIPanGestureRecognizer.swift; path = DDUIKit/Classes/UIGestureRecognizer/DDUIPanGestureRecognizer.swift; sourceTree = ""; }; - 3E62308DA6F5F5F56C4F7D2B33EBE279 /* KVORepresentable+CoreGraphics.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "KVORepresentable+CoreGraphics.swift"; path = "RxCocoa/Foundation/KVORepresentable+CoreGraphics.swift"; sourceTree = ""; }; - 3E7E04DEA4FFF9210284B5D20F80D906 /* DDBasicControlsKit_Private.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDBasicControlsKit_Private.release.xcconfig; sourceTree = ""; }; - 3E8CB968364EE8AE8F32D4A3B8CE29FE /* AnyObserver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyObserver.swift; path = RxSwift/AnyObserver.swift; sourceTree = ""; }; - 3ED59B71873C943FEB7A1E883A0A09D8 /* UIScrollView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIScrollView.swift; path = DDUIKit/Classes/UIScrollView/UIScrollView.swift; sourceTree = ""; }; - 3EF1A24EF12D2D981431935A575DF361 /* JPushExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JPushExtension.debug.xcconfig; sourceTree = ""; }; - 3F31B8EB67CCAD1CEF53C0FC8DE3B001 /* BRAddressModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BRAddressModel.h; path = BRPickerView/AddressPickerView/BRAddressModel.h; sourceTree = ""; }; - 3F56CE93FE0E31FCB7FD04AB533C8969 /* ZLPhotoUIConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLPhotoUIConfiguration.swift; path = Sources/General/ZLPhotoUIConfiguration.swift; sourceTree = ""; }; - 3F95295E41697E40BCE6A61B148767E2 /* DDMASearch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDMASearch.m; path = DDMAMapKit_Private/Classes/DDMASearch/DDMASearch.m; sourceTree = ""; }; - 3FA15597BB8A44C93444D47674F7B89B /* DDWebImageKit_Private-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDWebImageKit_Private-umbrella.h"; sourceTree = ""; }; - 3FC9941491BF1FD35C4EBA32A311119E /* UIScreen+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScreen+DDCategory.h"; path = "DDCategoryKit_Private/Classes/UIScreen+DDCategory/UIScreen+DDCategory.h"; sourceTree = ""; }; - 3FD023DC306D3D1E9C8B3A68B5BBAB60 /* PopupDialogDefaultViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PopupDialogDefaultViewController.swift; path = PopupDialog/Classes/PopupDialogDefaultViewController.swift; sourceTree = ""; }; - 3FD2A1B3A21DB33DBDBD70B92DE429DE /* NSMutableParagraphStyle+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableParagraphStyle+DDCategory.m"; path = "DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSMutableParagraphStyle+DDCategory.m"; sourceTree = ""; }; - 3FD638B5FD92B4BC6A9688438F9AFCF1 /* DDMAMapView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDMAMapView.m; path = DDMAMapKit_Private/Classes/DDMAMap/MapView/DDMAMapView.m; sourceTree = ""; }; - 3FDBEA08B47EAF4A3B168A2C2AA6225B /* RxCocoa-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxCocoa-prefix.pch"; sourceTree = ""; }; - 3FE61B1653CA88CD313DD1993F1FB7C9 /* UICollectionView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UICollectionView.swift; path = DDUIKit/Classes/UICollectionView/UICollectionView.swift; sourceTree = ""; }; - 401E96E41DDE177579F094678E45AA85 /* AMapTrackError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapTrackError.h; path = AMapTrackKit.framework/Headers/AMapTrackError.h; sourceTree = ""; }; - 403E99D310867149283418011F5BDB09 /* DDUITabBarController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDUITabBarController.swift; path = DDUIKit/Classes/UITableBarController/DDUITabBarController.swift; sourceTree = ""; }; - 404613DA5C40A3F551C7878410955590 /* DDBaseImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDBaseImage.h; path = DDBasicControlsKit_Private/Classes/DDBaseImage/DDBaseImage.h; sourceTree = ""; }; - 404742F23166DBF39C139FE4A5140FAD /* ESTabBarController-swift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "ESTabBarController-swift.debug.xcconfig"; sourceTree = ""; }; - 4066A0B3AD78D101E9E024908C89ABE1 /* ZLLanguageDefine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLLanguageDefine.swift; path = Sources/General/ZLLanguageDefine.swift; sourceTree = ""; }; - 40876F10DB0DAFC2BCF0D3D3FF006558 /* RxSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxSwift.debug.xcconfig; sourceTree = ""; }; - 4096897914F3034BAA58D3CE2344959E /* AMapTrack-NO-IDFA.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "AMapTrack-NO-IDFA.release.xcconfig"; sourceTree = ""; }; - 409DD780B50F40EFF5872988210030C6 /* WithLatestFrom.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WithLatestFrom.swift; path = RxSwift/Observables/WithLatestFrom.swift; sourceTree = ""; }; - 40A2E345E1BDEDC00DF59C9B2596A108 /* SDWebImageDownloaderResponseModifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderResponseModifier.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderResponseModifier.m; sourceTree = ""; }; - 40D535D7C4DF68F2B5AFB977FCA58DB1 /* _RXKVOObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _RXKVOObserver.m; path = RxCocoa/Runtime/_RXKVOObserver.m; sourceTree = ""; }; - 40DBBFFF4A55B7E8AC42F0211E3F37FC /* Reduce.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Reduce.swift; path = RxSwift/Observables/Reduce.swift; sourceTree = ""; }; - 41259F35F24F3B493E70473754F75265 /* EKRatingSymbolsContainerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKRatingSymbolsContainerView.swift; path = Source/MessageViews/MessagesUtils/EKRatingSymbolsContainerView.swift; sourceTree = ""; }; - 416A70C7DC57E4465E15FAEAC9E1F89A /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloader.m; sourceTree = ""; }; - 4185E6DD953823F27950B2497D1A1FFE /* DDTextField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDTextField.swift; path = DDControlsKit_Private/Classes/DDTextField/DDTextField.swift; sourceTree = ""; }; - 41899BEF290A56E1759DF59E6A5F3AEC /* UIImage+MemoryCacheCost.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MemoryCacheCost.m"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+MemoryCacheCost.m"; sourceTree = ""; }; - 418F9B96060DF5FBA16BDB1166B19F5F /* DispatchQueueConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DispatchQueueConfiguration.swift; path = RxSwift/Schedulers/Internal/DispatchQueueConfiguration.swift; sourceTree = ""; }; - 41BBD956A0964B5501BF55369789D7AC /* ZLClipImageDismissAnimatedTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLClipImageDismissAnimatedTransition.swift; path = Sources/Animation/ZLClipImageDismissAnimatedTransition.swift; sourceTree = ""; }; - 41CCAF8F8DBC6FB73F1598E27D048521 /* EKEntryView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKEntryView.swift; path = Source/Infra/EKEntryView.swift; sourceTree = ""; }; - 41E1E31F6B85A14980B2BEAC9AF7EC28 /* TYPageControl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = TYPageControl.m; path = TYCyclePagerViewDemo/TYCyclePagerView/TYPageControl.m; sourceTree = ""; }; - 41EFD7CBB52D61B19151E2CAAD31A43E /* SDDeviceHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDeviceHelper.m; path = DDWebImageKit_Private/Classes/SDWebImage/Private/SDDeviceHelper.m; sourceTree = ""; }; - 4218BFA03EECBC67513AD75A3D832AF1 /* EKRatingSymbolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKRatingSymbolView.swift; path = Source/MessageViews/MessagesUtils/EKRatingSymbolView.swift; sourceTree = ""; }; - 4228D86157E1C21EDE045BFFD3FB2681 /* Delegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Delegate.swift; path = Sources/Utility/Delegate.swift; sourceTree = ""; }; - 42362AA9D45285F7082156A7838557A9 /* JXCategoryCollectionView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryCollectionView.m; path = Sources/Common/JXCategoryCollectionView.m; sourceTree = ""; }; - 423D4BDC492139C4B90159AAC6C18FDB /* MAArcRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAArcRenderer.h; path = AMapNaviKit.framework/Headers/MAArcRenderer.h; sourceTree = ""; }; - 423F869E2B6E4696CC5C29A2BBDE7957 /* UISlider+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UISlider+Rx.swift"; path = "RxCocoa/iOS/UISlider+Rx.swift"; sourceTree = ""; }; - 423F9FD7E866DE5EE8F341B5CA25902E /* AMapURLSearch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapURLSearch.h; path = AMapFoundationKit.framework/Headers/AMapURLSearch.h; sourceTree = ""; }; - 426ACC0CB2BF1FC39A89311CF768EFF8 /* SDAsyncBlockOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAsyncBlockOperation.h; path = DDWebImageKit_Private/Classes/SDWebImage/Private/SDAsyncBlockOperation.h; sourceTree = ""; }; - 42A1A81F83BFB532AEB5DB4CAE2362E4 /* JXCategoryView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JXCategoryView-umbrella.h"; sourceTree = ""; }; - 42C5898BA6D381FC880FB37CAFC3FF06 /* DDCategoryKit_Private-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDCategoryKit_Private-prefix.pch"; sourceTree = ""; }; - 42D6D73DE10DE2C134C31111F3F65674 /* PopupDialog.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = PopupDialog.modulemap; sourceTree = ""; }; - 42DC5CED9D0326747B3E5FAF64DF97F5 /* MAHeatMapVectorGridOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAHeatMapVectorGridOverlay.h; path = AMapNaviKit.framework/Headers/MAHeatMapVectorGridOverlay.h; sourceTree = ""; }; - 42F10DB6CED6AC3E9AA446F86C16A0F5 /* DDBasicControlsKit_Private */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = DDBasicControlsKit_Private; path = libDDBasicControlsKit_Private.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 436666AB315736653C64EDE0C05F0156 /* DDBaseTableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDBaseTableView.m; path = DDBasicControlsKit_Private/Classes/DDBaseTableView/DDBaseTableView.m; sourceTree = ""; }; - 439EA354473F5B1B44C857E4C3A7D7D7 /* Pods-OrderScheduling-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-OrderScheduling-dummy.m"; sourceTree = ""; }; - 43A38E0FF2F729CE15C65F122828BFC9 /* UIView+MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+MJExtension.h"; path = "MJRefresh/UIView+MJExtension.h"; sourceTree = ""; }; - 43F4DAC646C434FF2C73B5370BC3D876 /* ZLPhotoBrowser.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ZLPhotoBrowser.modulemap; sourceTree = ""; }; - 43FC4A6E4088C25584AF3B2FBD99A659 /* ImageBinder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageBinder.swift; path = Sources/SwiftUI/ImageBinder.swift; sourceTree = ""; }; - 4419C90CA680EE5E11CA8DD471569452 /* DDControlsKit_Private.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DDControlsKit_Private.modulemap; sourceTree = ""; }; - 442E8707D4AEB66ADA3DE6E981681F69 /* AMapTrackKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AMapTrackKit.framework; sourceTree = ""; }; - 44348DB4F29E938E9FDF2F7E2CF490AB /* SingleAsync.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SingleAsync.swift; path = RxSwift/Observables/SingleAsync.swift; sourceTree = ""; }; - 4459BF2B76FE7B9D95339BE6E570C3DB /* JXCategoryNumberCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryNumberCell.m; path = Sources/Number/JXCategoryNumberCell.m; sourceTree = ""; }; - 445BD886C8C18951DE33FDE7A05783F1 /* Empty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Empty.swift; path = RxSwift/Observables/Empty.swift; sourceTree = ""; }; - 446374F155A36CCF0CAEF6EA8620AAD7 /* DelaySubscription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DelaySubscription.swift; path = RxSwift/Observables/DelaySubscription.swift; sourceTree = ""; }; - 4471CA9489E40B759C857EA2C365EDE9 /* SDImageTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageTransformer.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageTransformer.h; sourceTree = ""; }; - 44CE5DB2B5E2C512B1EABB9D218832F6 /* Delay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Delay.swift; path = RxSwift/Observables/Delay.swift; sourceTree = ""; }; - 44FCE236D60437E28BB0EAA0A54210FD /* AMapSearchKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AMapSearchKit.framework; sourceTree = ""; }; - 44FE22F59FF2596285278D5DCA157A06 /* UIScrollView+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+DDCategory.m"; path = "DDCategoryKit_Private/Classes/UIScrollView+DDCategory/UIScrollView+DDCategory.m"; sourceTree = ""; }; - 451EB781764886B195B6449777F7D9EC /* EKWindow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKWindow.swift; path = Source/Infra/EKWindow.swift; sourceTree = ""; }; - 455B0F0FCAFDC26E7ADEF95557114F83 /* AMapSearchObj.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapSearchObj.h; path = AMapSearchKit.framework/Headers/AMapSearchObj.h; sourceTree = ""; }; - 457A80DEC0166FAC9C9555D3122A7B34 /* DDViewControllerAnimatedTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDViewControllerAnimatedTransition.h; path = DDBasicControlsKit_Private/Classes/DDBaseAnimation/DDTransitionAnimation/DDViewControllerAnimatedTransition.h; sourceTree = ""; }; - 457CDCAB18594BD4385D6CEBCB903674 /* AnonymousDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnonymousDisposable.swift; path = RxSwift/Disposables/AnonymousDisposable.swift; sourceTree = ""; }; - 45C4E92B540566B16528071BAB185B4E /* SchedulerType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SchedulerType.swift; path = RxSwift/SchedulerType.swift; sourceTree = ""; }; - 46110F087B0823B8AE474E640D6E8D6C /* BRAddressPickerView.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = BRAddressPickerView.bundle; path = BRPickerView/AddressPickerView/BRAddressPickerView.bundle; sourceTree = ""; }; - 46232E29C2154F43BFFFAE1520C32F10 /* DDMALocationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDMALocationManager.m; path = DDMAMapKit_Private/Classes/DDMALocation/DDMALocationManager.m; sourceTree = ""; }; - 4627947125DF147BD8BB1B74E97E757B /* PHAsset+ZLPhotoBrowser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PHAsset+ZLPhotoBrowser.swift"; path = "Sources/Extensions/PHAsset+ZLPhotoBrowser.swift"; sourceTree = ""; }; - 462DC57EE11DEC5C7ADE4D9A37B51625 /* SDImageGIFCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageGIFCoder.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageGIFCoder.m; sourceTree = ""; }; - 4670DDFAF1755ACD108E1DBC72E66685 /* DDFontKit_Private.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDFontKit_Private.debug.xcconfig; sourceTree = ""; }; - 4676A6C331D2C8F6A4CDD7FF5DF533F7 /* Producer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Producer.swift; path = RxSwift/Observables/Producer.swift; sourceTree = ""; }; - 467A95BB7613E49D26DC16209E6D6761 /* ZFIJKPlayerManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFIJKPlayerManager.m; path = DDZFPlayerKit_Private/Classes/ijkplayer/ZFIJKPlayerManager.m; sourceTree = ""; }; - 4685CC601F3B47D2487C648F67C935C5 /* Source.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Source.swift; path = Sources/General/ImageSource/Source.swift; sourceTree = ""; }; - 469FEE30B642194D50EECEF1B3350498 /* DDUtilsSwiftKit_Private-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DDUtilsSwiftKit_Private-dummy.m"; sourceTree = ""; }; - 46A2EEB0968D4F447F321284460CF594 /* SDImageAssetManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAssetManager.m; path = DDWebImageKit_Private/Classes/SDWebImage/Private/SDImageAssetManager.m; sourceTree = ""; }; - 46DC5B7AF40EA47AF17B4766BE3C1B81 /* MAOfflineCity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOfflineCity.h; path = AMapNaviKit.framework/Headers/MAOfflineCity.h; sourceTree = ""; }; - 473A354F5BA4D935C037F5476DE7D75C /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = Sources/Utility/Result.swift; sourceTree = ""; }; - 4761AC1D3EEC34D23B8AB8FB50CD94F5 /* Zip+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Zip+arity.swift"; path = "RxSwift/Observables/Zip+arity.swift"; sourceTree = ""; }; - 479A09A88817B87778CE37DBFED9DAB6 /* BehaviorRelay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BehaviorRelay.swift; path = RxRelay/BehaviorRelay.swift; sourceTree = ""; }; - 47D85998CA5296D349A4BE600E0EAF58 /* RxTableViewDataSourcePrefetchingProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTableViewDataSourcePrefetchingProxy.swift; path = RxCocoa/iOS/Proxies/RxTableViewDataSourcePrefetchingProxy.swift; sourceTree = ""; }; - 481B395EA4F8224CA51AE8E284B17B24 /* UIScrollView+MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+MJRefresh.h"; path = "MJRefresh/UIScrollView+MJRefresh.h"; sourceTree = ""; }; - 48824A0BF5D6B21C9142A13E3FEDA036 /* DDViewControllerAnimatedTransition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDViewControllerAnimatedTransition.m; path = DDBasicControlsKit_Private/Classes/DDBaseAnimation/DDTransitionAnimation/DDViewControllerAnimatedTransition.m; sourceTree = ""; }; - 488BEEF5FBD9A1384AC69B6BD17A49AD /* Observable+Bind.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Observable+Bind.swift"; path = "RxRelay/Observable+Bind.swift"; sourceTree = ""; }; - 48EFDAF744EAA5FEBB6A500C24870491 /* SwiftEntryKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftEntryKit-dummy.m"; sourceTree = ""; }; - 4972DF1D69095AD65563B4AC673DE6F8 /* PopupDialog-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PopupDialog-umbrella.h"; sourceTree = ""; }; - 498C4A8B3FD5447D5B6B910AF03FC6CE /* NSButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSButton+WebCache.m"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/NSButton+WebCache.m"; sourceTree = ""; }; - 499389C31AC66E0D791D7F93E9ECDBBB /* TYCyclePagerView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TYCyclePagerView-prefix.pch"; sourceTree = ""; }; - 49BA399F21471B5CB36619A7E488EB11 /* SDAnimatedImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImage.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImage.m; sourceTree = ""; }; - 49C93A93996A98CBFD6D8CF498430BCE /* ParameterEncoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoding.swift; path = Source/ParameterEncoding.swift; sourceTree = ""; }; - 49FD7D21697F16B91B55A29E9611D5E0 /* NSBundle+MJRefresh.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBundle+MJRefresh.m"; path = "MJRefresh/NSBundle+MJRefresh.m"; sourceTree = ""; }; - 4A3270C48302B0944D5B2835EE79B425 /* NSBundle+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBundle+DDCategory.m"; path = "DDCategoryKit_Private/Classes/NSBundle+DDCategory/NSBundle+DDCategory.m"; sourceTree = ""; }; - 4A6DE22C0FFCF813D3A7FF22FDA7AA0F /* MATraceReplayOverlayRender.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MATraceReplayOverlayRender.h; path = DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlayRender.h; sourceTree = ""; }; - 4AA0D2BFBE481E96E80A0604083AF907 /* HapticFeedbackGenerator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HapticFeedbackGenerator.swift; path = Source/Utils/HapticFeedbackGenerator.swift; sourceTree = ""; }; - 4AB84CB658B71E80AB970C1BE896BCAC /* JXCategoryNumberView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryNumberView.m; path = Sources/Number/JXCategoryNumberView.m; sourceTree = ""; }; - 4ADC7A37A5B63903E0D95C418084602F /* KVORepresentable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KVORepresentable.swift; path = RxCocoa/Foundation/KVORepresentable.swift; sourceTree = ""; }; - 4AF7527E60B3647B232A866C5951E416 /* UINavigationController+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UINavigationController+DDCategory.h"; path = "DDCategoryKit_Private/Classes/UINavigationController+DDCategory/UINavigationController+DDCategory.h"; sourceTree = ""; }; - 4B2C6C950C836FE62DD8A8414331EBF9 /* UIFont+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIFont+DDCategory.h"; path = "DDCategoryKit_Private/Classes/UIFont+DDCategory/UIFont+DDCategory.h"; sourceTree = ""; }; - 4B60CB40E2FC208134DDAC1A9F2A9D05 /* DDUICollectionViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDUICollectionViewCell.swift; path = DDUIKit/Classes/UICollectionViewCell/DDUICollectionViewCell.swift; sourceTree = ""; }; - 4C18A035A3551BF44932FA971E5ED5EE /* EKAttributes+UserInteraction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EKAttributes+UserInteraction.swift"; path = "Source/Model/EntryAttributes/EKAttributes+UserInteraction.swift"; sourceTree = ""; }; - 4C24E7BEC7235EE36BFA2C3574CBA5BC /* AMapURLSearchType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapURLSearchType.h; path = AMapFoundationKit.framework/Headers/AMapURLSearchType.h; sourceTree = ""; }; - 4C3755E1970E45CA8E4427BFA0FBE2E4 /* DDBasicControlsKit_Private-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDBasicControlsKit_Private-umbrella.h"; sourceTree = ""; }; - 4C492610364A0957F757E5C0834CA5E2 /* DDControlsKit_Private.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDControlsKit_Private.debug.xcconfig; sourceTree = ""; }; - 4C4C5A49DFCC82BEA24EA24DA32C7EE9 /* DDMANaviManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDMANaviManager.m; path = DDMAMapKit_Private/Classes/DDMANaviManager/DDMANaviManager.m; sourceTree = ""; }; - 4CA96118F51D2C5EFB0892AFF8C3EE26 /* NetworkReachabilityManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkReachabilityManager.swift; path = Source/NetworkReachabilityManager.swift; sourceTree = ""; }; - 4CDDC0F39144AAC8973E29871590F952 /* TVMonogramView+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "TVMonogramView+Kingfisher.swift"; path = "Sources/Extensions/TVMonogramView+Kingfisher.swift"; sourceTree = ""; }; - 4D14F99E6FF6E2DBE74EF977A4557537 /* JCore.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JCore.release.xcconfig; sourceTree = ""; }; - 4D47057D54AC76837ECCF6C6096426E3 /* UIGestureRecognizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIGestureRecognizer.swift; path = DDUIKit/Classes/UIGestureRecognizer/UIGestureRecognizer.swift; sourceTree = ""; }; - 4D94106FCDFE013D9835C95208E1C1F8 /* DDCategoryKit_Private.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DDCategoryKit_Private.modulemap; sourceTree = ""; }; - 4DA182BBEDF3EEB595A5631C82EDB5D7 /* SDImageAssetManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAssetManager.h; path = DDWebImageKit_Private/Classes/SDWebImage/Private/SDImageAssetManager.h; sourceTree = ""; }; - 4DA9A6E5B948AF8AED6CD1839F7CBDC4 /* SwiftyRSA-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftyRSA-dummy.m"; sourceTree = ""; }; - 4DB99BD101D871A09EAF11638B21F065 /* UICollectionViewCell+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UICollectionViewCell+DDCategory.m"; path = "DDCategoryKit_Private/Classes/UICollectionViewCell+DDCategory/UICollectionViewCell+DDCategory.m"; sourceTree = ""; }; - 4DED4383148456821E55F74B9856B80A /* ZFLandScapeControlView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFLandScapeControlView.h; path = DDZFPlayerKit_Private/Classes/ControlView/ZFLandScapeControlView.h; sourceTree = ""; }; - 4E2FE2F7C3AE7D2BF2ECB8B23DAC4EC1 /* ImageView+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ImageView+Kingfisher.swift"; path = "Sources/Extensions/ImageView+Kingfisher.swift"; sourceTree = ""; }; - 4E7DBBD1E9EE712F6E1DF76B9781D310 /* MAAnnotationView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAAnnotationView.h; path = AMapNaviKit.framework/Headers/MAAnnotationView.h; sourceTree = ""; }; - 4F08F7C86ADB155DCA1C54C1982E77B1 /* JXCategoryDotCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryDotCell.m; path = Sources/Dot/JXCategoryDotCell.m; sourceTree = ""; }; - 4F1DC518D800734646354089B5B9F99C /* AMapLocationKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapLocationKit.h; path = AMapLocationKit.framework/Headers/AMapLocationKit.h; sourceTree = ""; }; - 4F3BFABE11A71DB08CCAE2535FA7B07B /* JXCategoryListContainerRTLCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryListContainerRTLCell.h; path = Sources/Common/JXCategoryListContainerRTLCell.h; sourceTree = ""; }; - 4F64FFF87CF53651BD305B21AF0D67B2 /* Do.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Do.swift; path = RxSwift/Observables/Do.swift; sourceTree = ""; }; - 4F7021D7FFFCF1690396142030C52BAC /* SwiftEntryKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftEntryKit.modulemap; sourceTree = ""; }; - 4F74C0F4CEAAB3192E20D60DB4165DF0 /* MAGltfOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAGltfOverlayRenderer.h; path = AMapNaviKit.framework/Headers/MAGltfOverlayRenderer.h; sourceTree = ""; }; - 4F77844061B4BC6CBECD030C500BBD06 /* JXCategoryImageCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryImageCell.h; path = Sources/Image/JXCategoryImageCell.h; sourceTree = ""; }; - 4FA431B39B3D18FEF1C27A7AA65D0D7B /* SDImageCachesManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCachesManager.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCachesManager.h; sourceTree = ""; }; - 4FAD17EC8C7A83C70F900C8152745963 /* SDImageCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCoder.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCoder.m; sourceTree = ""; }; - 4FC7EA8397ECCC0A4035C805A341E66C /* DDBaseLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDBaseLabel.m; path = DDBasicControlsKit_Private/Classes/DDBaseLabel/DDBaseLabel.m; sourceTree = ""; }; - 4FF8D191231FD486E20443860552DDFD /* MBProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MBProgressHUD.m; path = DDProgressHUDKit_Private/Classes/MBProgressHUD.m; sourceTree = ""; }; - 5085009761EFF9710D58D141CE4344FE /* BRPickerView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BRPickerView.release.xcconfig; sourceTree = ""; }; - 50C2E1096742BB2205654C122CF15A02 /* SwiftyRSA-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyRSA-prefix.pch"; sourceTree = ""; }; - 50CB07612A7637E2E0500A966BB67134 /* DDAutoUIKit_Private-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDAutoUIKit_Private-umbrella.h"; sourceTree = ""; }; - 50F91B65F8D524CA6D893A62F527BC0B /* ConstraintConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConfig.swift; path = Sources/ConstraintConfig.swift; sourceTree = ""; }; - 510F382F6C3892B46E55D5DFB10D3A50 /* SizeExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SizeExtensions.swift; path = Sources/Utility/SizeExtensions.swift; sourceTree = ""; }; - 511F3DDC481292E3027BACAB54473584 /* WKWebView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "WKWebView+Rx.swift"; path = "RxCocoa/iOS/WKWebView+Rx.swift"; sourceTree = ""; }; - 5143BA28095773A5FBD89ADFA3D511A1 /* RxCocoaObjCRuntimeError+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "RxCocoaObjCRuntimeError+Extensions.swift"; path = "RxCocoa/Common/RxCocoaObjCRuntimeError+Extensions.swift"; sourceTree = ""; }; - 515837659844D168A62B87B0BDC7DA6D /* UIScreen+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScreen+DDCategory.m"; path = "DDCategoryKit_Private/Classes/UIScreen+DDCategory/UIScreen+DDCategory.m"; sourceTree = ""; }; - 5184A22E35E8C6770D064988AFACAE4C /* SDMemoryCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDMemoryCache.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDMemoryCache.m; sourceTree = ""; }; - 51A496931111C24D321E845AA62558C5 /* IQUIView+Hierarchy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIView+Hierarchy.swift"; path = "IQKeyboardManagerSwift/Categories/IQUIView+Hierarchy.swift"; sourceTree = ""; }; - 51A507B1A2D0CE3FD329A654EEB872E6 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/NSData+ImageContentType.m"; sourceTree = ""; }; - 51AE42539088EFCA54ABA508DD8106DB /* NSTextStorage+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSTextStorage+Rx.swift"; path = "RxCocoa/iOS/NSTextStorage+Rx.swift"; sourceTree = ""; }; - 51B5AAD6E35677C397FD89ABC8683255 /* ImageDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDataProvider.swift; path = Sources/General/ImageSource/ImageDataProvider.swift; sourceTree = ""; }; - 51F2ED7FD6260CFB78C34CE4FA7F7E67 /* DistinctUntilChanged.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DistinctUntilChanged.swift; path = RxSwift/Observables/DistinctUntilChanged.swift; sourceTree = ""; }; - 5207A181F2C86F2FDD4D0B24485EC145 /* JXCategoryBaseView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryBaseView.h; path = Sources/Base/JXCategoryBaseView.h; sourceTree = ""; }; - 522C178DFAAE6C2D641B4251505FBA47 /* SDAssociatedObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAssociatedObject.m; path = DDWebImageKit_Private/Classes/SDWebImage/Private/SDAssociatedObject.m; sourceTree = ""; }; - 52B570D1BFFF775858C3A96626EEAB44 /* Alamofire.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.debug.xcconfig; sourceTree = ""; }; - 52C5A7DD0243E06616AFC6E7636DD43B /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Notifications.swift; sourceTree = ""; }; - 52E0E699C8AFAFF016391939DD51C67C /* UITextField+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITextField+DDCategory.h"; path = "DDCategoryKit_Private/Classes/UITextField+DDCategory/UITextField+DDCategory.h"; sourceTree = ""; }; - 5317D36007A002590BDDCEB4F3E14F2E /* MultipartUpload.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartUpload.swift; path = Source/MultipartUpload.swift; sourceTree = ""; }; - 5343C6A7395CC3CCB4525D689A3AA30C /* MAAnnotation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAAnnotation.h; path = AMapNaviKit.framework/Headers/MAAnnotation.h; sourceTree = ""; }; - 53469862C615B608CE2D8CD625CB8BD4 /* JXCategoryTitleImageCellModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryTitleImageCellModel.m; path = Sources/TitleImage/JXCategoryTitleImageCellModel.m; sourceTree = ""; }; - 534F10DB9CA0B962E011471FA0C50EBD /* UIViewController+Visibility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIViewController+Visibility.swift"; path = "PopupDialog/Classes/UIViewController+Visibility.swift"; sourceTree = ""; }; - 5367231B2744CCA950E57A1C9EA48E34 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+GIF.h"; sourceTree = ""; }; - 536796DC557774A8360BF83BA16F52AA /* DDBaseTextField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDBaseTextField.m; path = DDBasicControlsKit_Private/Classes/DDBaseTextField/DDBaseTextField.m; sourceTree = ""; }; - 53690792A070ED57C3C78781AE5FD16F /* DDSwiftLog.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDSwiftLog.swift; path = DDLogKit_Private/Classes/SwiftLog/DDSwiftLog.swift; sourceTree = ""; }; - 539440C9DEE5A25C2E270CEABEB1D214 /* AsyncLock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncLock.swift; path = RxSwift/Concurrency/AsyncLock.swift; sourceTree = ""; }; - 53A696AE56B4D87ACE694E3B5952C714 /* EKStyleView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKStyleView.swift; path = Source/Infra/EKStyleView.swift; sourceTree = ""; }; - 53C5218BC84CA6549F42E777DE2A80CE /* Timer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Timer.swift; path = RxSwift/Observables/Timer.swift; sourceTree = ""; }; - 53DB07EC82DD9C1E75BE9779C461DDBD /* EKAttributes+StatusBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EKAttributes+StatusBar.swift"; path = "Source/Model/EntryAttributes/EKAttributes+StatusBar.swift"; sourceTree = ""; }; - 542580CD4322A21B74A4ECC00C42E348 /* DDPersistenceKit_Private.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDPersistenceKit_Private.release.xcconfig; sourceTree = ""; }; - 545AD3827243FBFA4610FD3D35FB0BE0 /* Concurrency.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Concurrency.swift; path = Source/Concurrency.swift; sourceTree = ""; }; - 547000FF35ABCCC797CB4B8681D8BB16 /* RecursiveScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecursiveScheduler.swift; path = RxSwift/Schedulers/RecursiveScheduler.swift; sourceTree = ""; }; - 54890BBE3275AB287FE321EBC05E1113 /* Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Kingfisher.swift; path = Sources/General/Kingfisher.swift; sourceTree = ""; }; - 54A206BC69EC53E7599908DB6CED9A62 /* MABaseOverlay+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MABaseOverlay+DDCategory.h"; path = "DDMAMapKit_Private/Classes/DDMAMap/Overlay/MABaseOverlay+DDCategory.h"; sourceTree = ""; }; - 54ADBCF354548A1BA32238F2EDEDC39B /* Disposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Disposable.swift; path = RxSwift/Disposable.swift; sourceTree = ""; }; - 54B8052223D66582723111C5AC6B1280 /* JXCategoryIndicatorCellModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryIndicatorCellModel.m; path = Sources/Indicator/JXCategoryIndicatorCellModel.m; sourceTree = ""; }; - 54E9038F69C370579812BE6ADD5C4E72 /* AMapNaviDriveDataRepresentable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviDriveDataRepresentable.h; path = AMapNaviKit.framework/Headers/AMapNaviDriveDataRepresentable.h; sourceTree = ""; }; - 54EA0FC58504DCD8B983E0F43A2D1CA8 /* CachedResponseHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CachedResponseHandler.swift; path = Source/CachedResponseHandler.swift; sourceTree = ""; }; - 5500002793689198A0DFD0853D396DDA /* WKInterfaceImage+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "WKInterfaceImage+Kingfisher.swift"; path = "Sources/Extensions/WKInterfaceImage+Kingfisher.swift"; sourceTree = ""; }; - 5502FBE9DFBCF4CF0F65DD0B65863251 /* UITabBarController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UITabBarController.swift; path = DDUIKit/Classes/UITableBarController/UITabBarController.swift; sourceTree = ""; }; - 552A8AA3F44EAAF5EAEC8F40E021C291 /* Platform.Linux.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.Linux.swift; path = Platform/Platform.Linux.swift; sourceTree = ""; }; - 5530C1CDAF74A3A4390B0D4A4A5114BC /* DDUtilsSwiftKit_Private-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDUtilsSwiftKit_Private-umbrella.h"; sourceTree = ""; }; - 5553370591A8C083690A1FB20C27F538 /* ZFUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFUtilities.m; path = DDZFPlayerKit_Private/Classes/ControlView/ZFUtilities.m; sourceTree = ""; }; - 55C78DC3A2BF39C514F3164238BB70D0 /* EKRootViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKRootViewController.swift; path = Source/Infra/EKRootViewController.swift; sourceTree = ""; }; - 56018FF5D01D2F070C712EA706186D9B /* JXCategoryBaseCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryBaseCell.h; path = Sources/Base/JXCategoryBaseCell.h; sourceTree = ""; }; - 5612297CB1E62B65F4C43D6CC1F895DF /* EKAttributes+Scroll.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EKAttributes+Scroll.swift"; path = "Source/Model/EntryAttributes/EKAttributes+Scroll.swift"; sourceTree = ""; }; - 562732E9246B72FCF6D93C026574D0CC /* JXCategoryImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryImageView.h; path = Sources/Image/JXCategoryImageView.h; sourceTree = ""; }; - 56277E9016C1E1A607974F30846BE35B /* ESTabBarController-swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ESTabBarController-swift-prefix.pch"; sourceTree = ""; }; - 56479261D4BECB6ED900CEB1FE63EFA4 /* MARouteOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MARouteOverlay.h; path = AMapNaviKit.framework/Headers/MARouteOverlay.h; sourceTree = ""; }; - 566149008FC73438B00482887D0A93B1 /* Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debug.swift; path = RxSwift/Observables/Debug.swift; sourceTree = ""; }; - 568BCEEEBC2986D1AADFB984FF7577BB /* DDBaseImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDBaseImageView.m; path = DDBasicControlsKit_Private/Classes/DDBaseImageView/DDBaseImageView.m; sourceTree = ""; }; - 5696DCC77FA56BF0AEC9DAFDB3406D9B /* DiskStorage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiskStorage.swift; path = Sources/Cache/DiskStorage.swift; sourceTree = ""; }; - 56B9E26358C9F2398DEEB048994BE93A /* BehaviorSubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BehaviorSubject.swift; path = RxSwift/Subjects/BehaviorSubject.swift; sourceTree = ""; }; - 56CF8531B5D158BE68E0B1C29BE65264 /* NSBezierPath+SDRoundedCorners.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBezierPath+SDRoundedCorners.m"; path = "DDWebImageKit_Private/Classes/SDWebImage/Private/NSBezierPath+SDRoundedCorners.m"; sourceTree = ""; }; - 573A7497C7A50D94FB4A7F442C5702F7 /* ZLAlbumListModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLAlbumListModel.swift; path = Sources/General/ZLAlbumListModel.swift; sourceTree = ""; }; - 57620B74705E53124D9140938290B8C0 /* car_xingshi@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "car_xingshi@3x.png"; path = "DDMAMapKit_Private/Assets/car_xingshi@3x.png"; sourceTree = ""; }; - 5775410DC32C716E14D77A6112044605 /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = ""; }; - 577939DB40D698A43C32E2C6C96D8D54 /* UIScrollView+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+DDCategory.h"; path = "DDCategoryKit_Private/Classes/UIScrollView+DDCategory/UIScrollView+DDCategory.h"; sourceTree = ""; }; - 5781ACC4C3639A4B54467EB6B7B3DE11 /* DDLogKit_Private-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDLogKit_Private-umbrella.h"; sourceTree = ""; }; - 579C1BFFA581C17D7770FAE3ECACA589 /* SessionDataTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDataTask.swift; path = Sources/Networking/SessionDataTask.swift; sourceTree = ""; }; - 5815277FFB95917CF37B3586D9BCA52F /* DDUITextField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDUITextField.swift; path = DDUIKit/Classes/UITextField/DDUITextField.swift; sourceTree = ""; }; - 581FA386B9CE43B28BA7F9F3D0A2A563 /* DDDateKit_Private-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDDateKit_Private-umbrella.h"; sourceTree = ""; }; - 5827F1D0B0253B832ACD69AEEEAE6AE1 /* MAIndoorInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAIndoorInfo.h; path = AMapNaviKit.framework/Headers/MAIndoorInfo.h; sourceTree = ""; }; - 5831941C7C5C99DA159A80F1268363ED /* AMapNaviStatisticsInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviStatisticsInfo.h; path = AMapNaviKit.framework/Headers/AMapNaviStatisticsInfo.h; sourceTree = ""; }; - 58AEB14A120E28F2C5376B258CF7DB25 /* JXCategoryImageCellModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryImageCellModel.h; path = Sources/Image/JXCategoryImageCellModel.h; sourceTree = ""; }; - 58E19414300B9B38EE7D7B98461DA21C /* RecursiveLock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecursiveLock.swift; path = Platform/RecursiveLock.swift; sourceTree = ""; }; - 58FFBF9D8BEC6D0A877D11132717BF54 /* UIView+ZFFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+ZFFrame.h"; path = "DDZFPlayerKit_Private/Classes/ControlView/UIView+ZFFrame.h"; sourceTree = ""; }; - 5918B1075E12B3573D97D3D0A4F43DD9 /* SnapKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-prefix.pch"; sourceTree = ""; }; - 592F989A497B98D30116A3819D68387C /* AMapNaviTravelManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviTravelManager.h; path = AMapNaviKit.framework/Headers/AMapNaviTravelManager.h; sourceTree = ""; }; - 593FE252AAA081F01E71C12842EE9558 /* JXCategoryBaseCellModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryBaseCellModel.m; path = Sources/Base/JXCategoryBaseCellModel.m; sourceTree = ""; }; - 598CBDC2759DC5A39189E1145284EEC2 /* UIImage+ExtendedCacheData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ExtendedCacheData.m"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+ExtendedCacheData.m"; sourceTree = ""; }; - 599936F224D420CBE54D26146C8A58AD /* SwiftEntryKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftEntryKit-prefix.pch"; sourceTree = ""; }; - 59B8930947FB340B6A8F52B651A5AB8C /* ZFPersentInteractiveTransition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFPersentInteractiveTransition.m; path = DDZFPlayerKit_Private/Classes/Core/ZFPersentInteractiveTransition.m; sourceTree = ""; }; - 5A0C072C6B2FA2BC1191E50928EAF9A8 /* ImageTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageTransition.swift; path = Sources/Image/ImageTransition.swift; sourceTree = ""; }; - 5A5434B5D7B7E8E6B1CD1AD4FC5985DB /* CombineLatest+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CombineLatest+arity.swift"; path = "RxSwift/Observables/CombineLatest+arity.swift"; sourceTree = ""; }; - 5A5588977EBBE11DE9687DFE5669F63A /* DynamicBlurView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DynamicBlurView.swift; path = Sources/DynamicBlurView/DynamicBlurView.swift; sourceTree = ""; }; - 5A62154923D191AED767884A9A6697A5 /* MJRefreshConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshConfig.h; path = MJRefresh/MJRefreshConfig.h; sourceTree = ""; }; - 5A754FBD2ABEA9D9E3D700D480B33C2E /* MAPointAnnotation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAPointAnnotation.h; path = AMapNaviKit.framework/Headers/MAPointAnnotation.h; sourceTree = ""; }; - 5AA6565E54EE5A1694A2DAAD03BC23C5 /* RxMutableBox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxMutableBox.swift; path = RxSwift/RxMutableBox.swift; sourceTree = ""; }; - 5AC12BC2C4E4FD3635A2E297A130D205 /* ZLInputTextViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLInputTextViewController.swift; path = Sources/Edit/ZLInputTextViewController.swift; sourceTree = ""; }; - 5AE27BD2887CD524A80F947F01B089FD /* ZFNetworkSpeedMonitor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFNetworkSpeedMonitor.h; path = DDZFPlayerKit_Private/Classes/ControlView/ZFNetworkSpeedMonitor.h; sourceTree = ""; }; - 5B17B65CD8929CA3A776837F60DAEBBB /* NSData+SHA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+SHA.h"; path = "Source/NSData+SHA.h"; sourceTree = ""; }; - 5B2417A6C27552AF94CEB6A7B3F347AC /* ConstraintOffsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintOffsetTarget.swift; path = Sources/ConstraintOffsetTarget.swift; sourceTree = ""; }; - 5B40CD297658E2EBFA9A3AEB0E9F171E /* MAOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOverlay.h; path = AMapNaviKit.framework/Headers/MAOverlay.h; sourceTree = ""; }; - 5B50859502D1B19867D7EA919623A0CE /* SDWebImageError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageError.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageError.h; sourceTree = ""; }; - 5B71809F121FB856CCDB8E824B5CF7BC /* DDBaseTabBarController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDBaseTabBarController.m; path = DDBasicControlsKit_Private/Classes/DDBaseTabBarController/DDBaseTabBarController.m; sourceTree = ""; }; - 5B77C3205DCCF10BC1C817714EC01462 /* Infallible+Bind.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+Bind.swift"; path = "RxCocoa/Common/Infallible+Bind.swift"; sourceTree = ""; }; - 5BA6046B4C2674409C0D5625F45F8769 /* BRPickerView */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = BRPickerView; path = libBRPickerView.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 5C03DF56DF571ECFC414A1E4DB5148D7 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/UIImageView+WebCache.m"; sourceTree = ""; }; - 5C26366BE5C66DF9BD4A444D8916F6AE /* DDBaseLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDBaseLabel.h; path = DDBasicControlsKit_Private/Classes/DDBaseLabel/DDBaseLabel.h; sourceTree = ""; }; - 5C43572F515F76824B321D8A42D029D9 /* ZFSliderView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFSliderView.m; path = DDZFPlayerKit_Private/Classes/ControlView/ZFSliderView.m; sourceTree = ""; }; - 5C63CC9D0774D46FFAF866743A4AB191 /* ConstraintView+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintView+Extensions.swift"; path = "Sources/ConstraintView+Extensions.swift"; sourceTree = ""; }; - 5CB22E2B0D3FB2154A58DA396F8D8FF7 /* IQToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQToolbar.swift; path = IQKeyboardManagerSwift/IQToolbar/IQToolbar.swift; sourceTree = ""; }; - 5CB255358604A2A3A9BE6B9B640EF332 /* InfiniteSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InfiniteSequence.swift; path = Platform/DataStructures/InfiniteSequence.swift; sourceTree = ""; }; - 5CC1150024525BD9BEC30E9860D321B3 /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageOperation.h; sourceTree = ""; }; - 5CC4013C82704E2725B81D451DE06B1D /* SnapKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.release.xcconfig; sourceTree = ""; }; - 5CE4C61D949DBCA1849BD1D3BB684F87 /* UIColor+Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIColor+Utils.swift"; path = "Source/Extensions/UIColor+Utils.swift"; sourceTree = ""; }; - 5CE7E18CB266816367C13967C70F5F18 /* ZLPhotoConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLPhotoConfiguration.swift; path = Sources/General/ZLPhotoConfiguration.swift; sourceTree = ""; }; - 5CFC02E1D254D0A828F4F0EC3F8A5E5B /* RxCocoa.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RxCocoa.h; path = RxCocoa/RxCocoa.h; sourceTree = ""; }; - 5D0133E9AF4E6AA2F92D6B909E8DA5F5 /* ResourceBundle-DDMAMapKit_Private-DDMAMapKit_Private-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-DDMAMapKit_Private-DDMAMapKit_Private-Info.plist"; sourceTree = ""; }; - 5D09BA1722F8C68F7F93C759D012D933 /* OperationQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "OperationQueue+Alamofire.swift"; path = "Source/OperationQueue+Alamofire.swift"; sourceTree = ""; }; - 5D797E9A5C5782CE845840781FA1CC81 /* Alamofire */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = Alamofire; path = libAlamofire.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 5D8B7DD59EA4C92A93696E08FB03BDA7 /* SDDiskCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDiskCache.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDDiskCache.h; sourceTree = ""; }; - 5D8C99F56B74AE5CD4EA2D60C5825E87 /* DDSpeechSynthesizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDSpeechSynthesizer.swift; path = DDAudioPlayerKit_Private/Classes/DDSpeechSynthesizer.swift; sourceTree = ""; }; - 5DA4E705B3EB4AE201794AD0E21212F3 /* RetryPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryPolicy.swift; path = Source/RetryPolicy.swift; sourceTree = ""; }; - 5DB7B496DD62ACC8A4B2214846AD6B63 /* RxCocoaRuntime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RxCocoaRuntime.h; path = RxCocoa/Runtime/include/RxCocoaRuntime.h; sourceTree = ""; }; - 5DBB59FA98EC126FCE887FBFDEC9DEEA /* DDSwitch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDSwitch.swift; path = DDControlsKit_Private/Classes/DDSwitch/DDSwitch.swift; sourceTree = ""; }; - 5DD8AE4E92FC0D560F9669BC65BDFE8C /* AMapNearbyUploadInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNearbyUploadInfo.h; path = AMapSearchKit.framework/Headers/AMapNearbyUploadInfo.h; sourceTree = ""; }; - 5DD9874FD66AF971A9E685366451F25B /* RxSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxSwift-prefix.pch"; sourceTree = ""; }; - 5DF4698B1812C25B59E081C42956DF82 /* DDPersistenceKit_Private-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDPersistenceKit_Private-prefix.pch"; sourceTree = ""; }; - 5DFA779C310F284BA685ECCC95E0D70E /* AMapNaviCompositeAnnotation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviCompositeAnnotation.h; path = AMapNaviKit.framework/Headers/AMapNaviCompositeAnnotation.h; sourceTree = ""; }; - 5DFBA462E81FE469A3880642FDFF4ACA /* ApplicationInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ApplicationInfo.swift; path = DDUtilsSwiftKit_Private/Classes/ApplicationInfo/ApplicationInfo.swift; sourceTree = ""; }; - 5E20E9477FD8A3662F55D39BDFAF2C4F /* ESTabBarController-swift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ESTabBarController-swift-umbrella.h"; sourceTree = ""; }; - 5E6397A0CDA382C57C417058EA4DAE97 /* Completable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Completable.swift; path = RxSwift/Traits/PrimitiveSequence/Completable.swift; sourceTree = ""; }; - 5EA60EF7A1D34307AFF7A81D4E680E9E /* DDViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDViewController.swift; path = DDControlsKit_Private/Classes/DDViewController/DDViewController.swift; sourceTree = ""; }; - 5EA67026DEA284C13DAA86C65E67D031 /* JXCategoryIndicatorBackgroundView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryIndicatorBackgroundView.h; path = Sources/Indicator/IndicatorViews/JXCategoryIndicatorBackgroundView.h; sourceTree = ""; }; - 5ECD22EB9050A97679DDF7C99A1EEE75 /* IQKeyboardManager+Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Debug.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+Debug.swift"; sourceTree = ""; }; - 5EF19DED81F206CA7BE663143BBA6CE8 /* EKButtonView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKButtonView.swift; path = Source/MessageViews/MessagesUtils/EKButtonView.swift; sourceTree = ""; }; - 5F0DB9B80DE544F1AAD189CBF3B3ED7A /* ToArray.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ToArray.swift; path = RxSwift/Observables/ToArray.swift; sourceTree = ""; }; - 5F19601F920B1B3224D2D2242CA9FFB3 /* RetryWhen.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryWhen.swift; path = RxSwift/Observables/RetryWhen.swift; sourceTree = ""; }; - 5FB2CC1CEAF09C79CDCCF063B3552A65 /* UICollectionView+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UICollectionView+DDCategory.m"; path = "DDCategoryKit_Private/Classes/UICollectionView+DDCategory/UICollectionView+DDCategory.m"; sourceTree = ""; }; - 5FB4BCD456A230F295D58FBDDE49D3CE /* GroupedObservable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GroupedObservable.swift; path = RxSwift/GroupedObservable.swift; sourceTree = ""; }; - 5FD8C3EB9E6B1E10EA43CE16BE3D8143 /* MJRefreshHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshHeader.m; path = MJRefresh/Base/MJRefreshHeader.m; sourceTree = ""; }; - 606FC9383BF61B22370150A5B8CE3783 /* BRDatePickerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BRDatePickerView.h; path = BRPickerView/DatePickerView/BRDatePickerView.h; sourceTree = ""; }; - 60804C91E753B56E570498CF4F798CB2 /* TYCyclePagerView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TYCyclePagerView.release.xcconfig; sourceTree = ""; }; - 6096B34CC809CFEEF4B6AB3C297A5E15 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImagePrefetcher.h; sourceTree = ""; }; - 60D63D707E6F989BD38068854B67B0D3 /* ReplayRelay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReplayRelay.swift; path = RxRelay/ReplayRelay.swift; sourceTree = ""; }; - 60EF3B80C615D5A990E3DF57C927E9CD /* NotificationCenter+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NotificationCenter+Rx.swift"; path = "RxCocoa/Foundation/NotificationCenter+Rx.swift"; sourceTree = ""; }; - 61795DD4AAC00E4DE2DBFC88353480A3 /* ConstraintMaker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMaker.swift; path = Sources/ConstraintMaker.swift; sourceTree = ""; }; - 618B21D51E022FD548164F067A879588 /* IQBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQBarButtonItem.swift; path = IQKeyboardManagerSwift/IQToolbar/IQBarButtonItem.swift; sourceTree = ""; }; - 6195DD4BC0C21292B9CBA555E364D1CB /* DDMAMapKit_Private-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDMAMapKit_Private-umbrella.h"; sourceTree = ""; }; - 61F7EFB98DBCB896A8D8AC970EE5472C /* ConstraintMakerRelatable+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintMakerRelatable+Extensions.swift"; path = "Sources/ConstraintMakerRelatable+Extensions.swift"; sourceTree = ""; }; - 62AD8B2C12AD556FD819FA11579D23C2 /* JXCategoryIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryIndicatorView.m; path = Sources/Indicator/JXCategoryIndicatorView.m; sourceTree = ""; }; - 62D9858F32402E3110E88707039ACCCA /* CurrentThreadScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CurrentThreadScheduler.swift; path = RxSwift/Schedulers/CurrentThreadScheduler.swift; sourceTree = ""; }; - 6304FE730A0B040C2ADB8CB9C0DA30ED /* LayoutConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraintItem.swift; path = Sources/LayoutConstraintItem.swift; sourceTree = ""; }; - 632A81A7D5D503D4551B881A6D5E2D99 /* ZFPlayerController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFPlayerController.h; path = DDZFPlayerKit_Private/Classes/Core/ZFPlayerController.h; sourceTree = ""; }; - 632E258E93284619E078FEB3A2B6667A /* SDDeviceHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDeviceHelper.h; path = DDWebImageKit_Private/Classes/SDWebImage/Private/SDDeviceHelper.h; sourceTree = ""; }; - 6335BE501B92B10DA9E34548D99F2DC3 /* SDWebImageDownloaderDecryptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderDecryptor.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderDecryptor.m; sourceTree = ""; }; - 63964BF11EFEDD9CDC2E61E5FDA0F384 /* VirtualTimeConverterType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VirtualTimeConverterType.swift; path = RxSwift/Schedulers/VirtualTimeConverterType.swift; sourceTree = ""; }; - 63B15EBE31936C05E53C23743351E454 /* AMapNaviLocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviLocation.h; path = AMapNaviKit.framework/Headers/AMapNaviLocation.h; sourceTree = ""; }; - 63C1D5A21775A467A9D16AA2FACC8FA0 /* MARouteOverlayModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MARouteOverlayModel.h; path = AMapNaviKit.framework/Headers/MARouteOverlayModel.h; sourceTree = ""; }; - 63D20FD065054E23EAAB7700F187118B /* MJRefreshBackStateFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackStateFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m; sourceTree = ""; }; - 63F1946A930CD2F8416A180A748C89B2 /* IQTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextView.swift; path = IQKeyboardManagerSwift/IQTextView/IQTextView.swift; sourceTree = ""; }; - 641AA47CF864C1D4AD901A529A77C4E4 /* ConstraintDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDescription.swift; path = Sources/ConstraintDescription.swift; sourceTree = ""; }; - 6431F850ACA34F73EF33CFE881026D97 /* Array+ZLPhotoBrowser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Array+ZLPhotoBrowser.swift"; path = "Sources/Extensions/Array+ZLPhotoBrowser.swift"; sourceTree = ""; }; - 643999E3C7751C8F2484B249A02199E4 /* DDAudioService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDAudioService.swift; path = DDAudioPlayerKit_Private/Classes/DDAudioService.swift; sourceTree = ""; }; - 6453493B3325E34CA6515F883C3850B0 /* AMapNaviVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviVersion.h; path = AMapNaviKit.framework/Headers/AMapNaviVersion.h; sourceTree = ""; }; - 648827F2C00313932F4B093D5730885E /* ZLPhotoBrowser-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZLPhotoBrowser-umbrella.h"; sourceTree = ""; }; - 648BA3BBCC697CA4A2F235AACD7B07E7 /* ImageModifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageModifier.swift; path = Sources/Networking/ImageModifier.swift; sourceTree = ""; }; - 64D922F40BEFD39E4EDBAED09E42A253 /* JPushExtension-xcframeworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "JPushExtension-xcframeworks.sh"; sourceTree = ""; }; - 64F3616CCBC0C363E23D6C69A9569DD5 /* MAGltfOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAGltfOverlay.h; path = AMapNaviKit.framework/Headers/MAGltfOverlay.h; sourceTree = ""; }; - 653B130E92D57161E795B844601778F2 /* MJRefreshFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshFooter.m; path = MJRefresh/Base/MJRefreshFooter.m; sourceTree = ""; }; - 6565306507F34475169D23A59D014B3C /* MJRefreshAutoStateFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoStateFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m; sourceTree = ""; }; - 656B9F9344610D50C24BA187D7C06D36 /* Skip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Skip.swift; path = RxSwift/Observables/Skip.swift; sourceTree = ""; }; - 657DDF65AE79FA5D9C7C891807282B62 /* MJRefreshAutoStateFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoStateFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h; sourceTree = ""; }; - 657DED17020554A52B02991B5355787E /* SDWebImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImage.h; path = DDWebImageKit_Private/Classes/SDWebImage/SDWebImage.h; sourceTree = ""; }; - 65B2DEE795D9C8799CE151F52AE9773E /* SDImageCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCoder.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCoder.h; sourceTree = ""; }; - 65C8C5A374A3AFBB2B0EF46F729868FD /* Signal+Subscription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Signal+Subscription.swift"; path = "RxCocoa/Traits/Signal/Signal+Subscription.swift"; sourceTree = ""; }; - 65FDD276990279745BA6CB81D369081D /* Debugging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debugging.swift; path = Sources/Debugging.swift; sourceTree = ""; }; - 663000EB836CA0BDD78F5C170DDE83FA /* Bugly.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Bugly.framework; sourceTree = ""; }; - 6666B8BBA034226611E539BAAC222772 /* SynchronizedOnType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SynchronizedOnType.swift; path = RxSwift/Concurrency/SynchronizedOnType.swift; sourceTree = ""; }; - 668CF8DB4024BA204F7B12AD96D05B3A /* AMapNaviHeaderHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviHeaderHandler.h; path = AMapNaviKit.framework/Headers/AMapNaviHeaderHandler.h; sourceTree = ""; }; - 66950FDAEE4C42AA97440D86062A61A8 /* RxTextViewDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTextViewDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxTextViewDelegateProxy.swift; sourceTree = ""; }; - 6695ED3604B91A807D747E07473A606C /* DDCollectionViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDCollectionViewCell.swift; path = DDControlsKit_Private/Classes/DDCollectionViewCell/DDCollectionViewCell.swift; sourceTree = ""; }; - 66ABF4318361B445E49E5A27950104FF /* AMapURLSearchConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapURLSearchConfig.h; path = AMapFoundationKit.framework/Headers/AMapURLSearchConfig.h; sourceTree = ""; }; - 66B027B2A71C75DE5339595FFF112FB8 /* QLCompatibility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QLCompatibility.swift; path = Source/Extensions/QuickLayout/QLCompatibility.swift; sourceTree = ""; }; - 66DB2925D53290049D355D6B00A86FFD /* SDImageIOCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOCoder.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageIOCoder.h; sourceTree = ""; }; - 67023A0C29F65A53F4C7542F092344D9 /* SwiftEntryKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftEntryKit.swift; path = Source/SwiftEntryKit.swift; sourceTree = ""; }; - 67698D6E6F85BD99D96F13DF9726BC97 /* JXCategoryIndicatorParamsModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryIndicatorParamsModel.h; path = Sources/Common/JXCategoryIndicatorParamsModel.h; sourceTree = ""; }; - 67A6BB9584DD0743998EF83E9E6733DF /* UIColor+JXAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+JXAdd.m"; path = "Sources/Common/UIColor+JXAdd.m"; sourceTree = ""; }; - 6808A7171BC3C492B5BA2F54A65A05D8 /* DDAudioPlayerKit_Private-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DDAudioPlayerKit_Private-dummy.m"; sourceTree = ""; }; - 68554C3CC98B485FD1D853F06B7641E9 /* DDMutableAttributedString.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDMutableAttributedString.swift; path = DDControlsKit_Private/Classes/DDAttributedString/DDMutableAttributedString.swift; sourceTree = ""; }; - 6857AF4427C07FEB59ACA92B6BDF2199 /* SDAnimatedImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SDAnimatedImageView+WebCache.m"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageView+WebCache.m"; sourceTree = ""; }; - 686DDB8A39D48159240E2AEA744CEF9F /* Bag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Bag.swift; path = Platform/DataStructures/Bag.swift; sourceTree = ""; }; - 689047FAC2FB89164EC2273005AAEDF2 /* URLSessionConfiguration+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLSessionConfiguration+Alamofire.swift"; path = "Source/URLSessionConfiguration+Alamofire.swift"; sourceTree = ""; }; - 68A2ADFF5DD39F278ED312E5567831D9 /* DDAttributedString.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDAttributedString.swift; path = DDControlsKit_Private/Classes/DDAttributedString/DDAttributedString.swift; sourceTree = ""; }; - 68B1D6DDFAB4EE712F4F2D47B71C4595 /* DDUtilsSwiftKit_Private.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DDUtilsSwiftKit_Private.modulemap; sourceTree = ""; }; - 68E7D802A2C4500DE77E6175ED8FEF7A /* UICollectionViewLayout+MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UICollectionViewLayout+MJRefresh.h"; path = "MJRefresh/UICollectionViewLayout+MJRefresh.h"; sourceTree = ""; }; - 68F87BA0B7815B60BDC685846135F390 /* UIBarButtonItem+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIBarButtonItem+DDCategory.h"; path = "DDCategoryKit_Private/Classes/UIBarButtonItem+DDCategory/UIBarButtonItem+DDCategory.h"; sourceTree = ""; }; - 690D8FF5E039A54CF80B26FA60362319 /* ZLImageNavController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLImageNavController.swift; path = Sources/General/ZLImageNavController.swift; sourceTree = ""; }; - 691E8D0FC452DAAEC49C56AA02423214 /* JXCategoryViewAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryViewAnimator.h; path = Sources/Common/JXCategoryViewAnimator.h; sourceTree = ""; }; - 692CC13D213FAC30622EE61F9BE59763 /* IQKeyboardManagerSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardManagerSwift-dummy.m"; sourceTree = ""; }; - 693E95377E489FBC2A570B8A5132231C /* ObservableType+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableType+Extensions.swift"; path = "RxSwift/ObservableType+Extensions.swift"; sourceTree = ""; }; - 69752B5EBA9E3F3BBD32E4CE9DAEF33D /* DDUIKit */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = DDUIKit; path = libDDUIKit.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 69A6720526DC388CA1469393943F21EE /* ImageProgressive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageProgressive.swift; path = Sources/Image/ImageProgressive.swift; sourceTree = ""; }; - 69B9338E70C6EB5D50A6382A9EC4E56B /* MAMapStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMapStatus.h; path = AMapNaviKit.framework/Headers/MAMapStatus.h; sourceTree = ""; }; - 69C45CC190A46771B6163C6F28C4148A /* SwiftyRSAError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftyRSAError.swift; path = Source/SwiftyRSAError.swift; sourceTree = ""; }; - 69CAEE7784D12AD99520E3982E588075 /* BooleanDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BooleanDisposable.swift; path = RxSwift/Disposables/BooleanDisposable.swift; sourceTree = ""; }; - 69DAEACD65BE2304D0A45728C3932162 /* ConcurrentDispatchQueueScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConcurrentDispatchQueueScheduler.swift; path = RxSwift/Schedulers/ConcurrentDispatchQueueScheduler.swift; sourceTree = ""; }; - 69DC94595B344492E3E4B0AE179E2AFA /* DynamicBlurView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DynamicBlurView.modulemap; sourceTree = ""; }; - 6A058F68A609491EF0B8922E8D469DC9 /* DriveRouteCustomAnnotationView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DriveRouteCustomAnnotationView.m; path = DDMAMapKit_Private/Classes/DDMAMap/AnnotationView/DriveRouteCustomAnnotationView.m; sourceTree = ""; }; - 6A568027EADF4F4867EF0E054E8961BB /* DDUIKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDUIKit-prefix.pch"; sourceTree = ""; }; - 6A622A53D547AACE1D177EDFD1AA4776 /* AMapSearch-NO-IDFA.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "AMapSearch-NO-IDFA.debug.xcconfig"; sourceTree = ""; }; - 6A74E07F599D069F94264E596799DF79 /* UIRefreshControl+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIRefreshControl+Rx.swift"; path = "RxCocoa/iOS/UIRefreshControl+Rx.swift"; sourceTree = ""; }; - 6A877D279EEFB879AFA9861EF2D44691 /* Typealiases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Typealiases.swift; path = Sources/Typealiases.swift; sourceTree = ""; }; - 6A8BE87DA95CA06EDD149CEC4DD022EC /* SDWebImageIndicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageIndicator.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageIndicator.m; sourceTree = ""; }; - 6A8E35CED9F0F349320B9036A24B4C8D /* NSObject+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSObject+Rx.swift"; path = "RxCocoa/Foundation/NSObject+Rx.swift"; sourceTree = ""; }; - 6AEE3884E8EC8EEAAEFB67D17CC68D60 /* LockOwnerType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LockOwnerType.swift; path = RxSwift/Concurrency/LockOwnerType.swift; sourceTree = ""; }; - 6B0B1A7BEABC653A6A77F139744977C9 /* EKContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKContentView.swift; path = Source/Infra/EKContentView.swift; sourceTree = ""; }; - 6B1A21536A55542D19E4E3C7277DFFAC /* TYCyclePagerView */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = TYCyclePagerView; path = libTYCyclePagerView.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 6B96E60464539F6B03106969E21D02D7 /* AMapSearch-NO-IDFA.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "AMapSearch-NO-IDFA.release.xcconfig"; sourceTree = ""; }; - 6BE521AD3CF2C53539D5D3AD834A7317 /* SDImageLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageLoader.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageLoader.h; sourceTree = ""; }; - 6C03FB8C96325BC93F46E53E75B31B01 /* EKPopUpMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKPopUpMessage.swift; path = Source/Model/EKPopUpMessage.swift; sourceTree = ""; }; - 6C170138C959A6721B767AF44C3641C3 /* AMapNaviRideManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviRideManager.h; path = AMapNaviKit.framework/Headers/AMapNaviRideManager.h; sourceTree = ""; }; - 6C25300F80EF9023F75DC9A9250D1B5D /* AMapTrackTrackObj.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapTrackTrackObj.h; path = AMapTrackKit.framework/Headers/AMapTrackTrackObj.h; sourceTree = ""; }; - 6C3D5CC4826AB8E011A52B66A32ECA6B /* ZFPlayerGestureControl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFPlayerGestureControl.h; path = DDZFPlayerKit_Private/Classes/Core/ZFPlayerGestureControl.h; sourceTree = ""; }; - 6C58AF8CDBB957DEA3D2D9A7D27A7A87 /* ZFPlayerMediaControl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFPlayerMediaControl.h; path = DDZFPlayerKit_Private/Classes/Core/ZFPlayerMediaControl.h; sourceTree = ""; }; - 6C7E605941B16D8E7A2CC2D9EDFDB4DC /* JXCategoryIndicatorDotLineView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryIndicatorDotLineView.h; path = Sources/Indicator/IndicatorViews/JXCategoryIndicatorDotLineView.h; sourceTree = ""; }; - 6CD31BF871B506BDA21F7CA4AF131325 /* MAMapKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMapKit.h; path = AMapNaviKit.framework/Headers/MAMapKit.h; sourceTree = ""; }; - 6D0E3B0B299F515EBA3AA57CBD00627C /* UINavigationBar+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UINavigationBar+DDCategory.h"; path = "DDCategoryKit_Private/Classes/UINavigationBar+DDCategory/UINavigationBar+DDCategory.h"; sourceTree = ""; }; - 6D4473979D995416C875C583F2011D08 /* AnonymousObserver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnonymousObserver.swift; path = RxSwift/Observers/AnonymousObserver.swift; sourceTree = ""; }; - 6D7AC1021F0A3A36970B9F4952ABB573 /* _RXObjCRuntime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _RXObjCRuntime.m; path = RxCocoa/Runtime/_RXObjCRuntime.m; sourceTree = ""; }; - 6E131492C4734358B75A1E007DF069D4 /* UIViewController+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+DDCategory.h"; path = "DDCategoryKit_Private/Classes/UIViewController+DDCategory/UIViewController+DDCategory.h"; sourceTree = ""; }; - 6E41C71C88721FCDB20ED598752F8C99 /* DDUINavigationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDUINavigationController.swift; path = DDUIKit/Classes/UINavigationController/DDUINavigationController.swift; sourceTree = ""; }; - 6E70E73FE658FA06B6755BEC556704C0 /* IQKeyboardManagerConstantsInternal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManagerConstantsInternal.swift; path = IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstantsInternal.swift; sourceTree = ""; }; - 6E9828A6C3CE9264DD664ED212B4FCEA /* RxSearchControllerDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxSearchControllerDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxSearchControllerDelegateProxy.swift; sourceTree = ""; }; - 6EA1FDEBD940EAE99A65CB7F5179D1C4 /* DDNetworkingOfAlamofireKit_Private-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDNetworkingOfAlamofireKit_Private-umbrella.h"; sourceTree = ""; }; - 6EE069E2B488F1ECF47333C4E71C1FC5 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/UIView+WebCacheOperation.m"; sourceTree = ""; }; - 6EEB8B1CB2BF24B44DEEDC1B058B22E2 /* DDMAMapKit_Private */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = DDMAMapKit_Private; path = libDDMAMapKit_Private.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 6F0FA8BDB00146BF15D3BC096E93834B /* AlamofireExtended.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlamofireExtended.swift; path = Source/AlamofireExtended.swift; sourceTree = ""; }; - 6F21B23F9142424D9E0FEE0495DEA217 /* IQUITextFieldView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUITextFieldView+Additions.swift"; path = "IQKeyboardManagerSwift/Categories/IQUITextFieldView+Additions.swift"; sourceTree = ""; }; - 6F5271387C32E0CEF044AA35FED48BE4 /* ConstraintLayoutGuideDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuideDSL.swift; path = Sources/ConstraintLayoutGuideDSL.swift; sourceTree = ""; }; - 6F77AE1A97D56A1FB1D75FA81AD0B323 /* ReplaySubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReplaySubject.swift; path = RxSwift/Subjects/ReplaySubject.swift; sourceTree = ""; }; - 6FAFEF99EFBA6FF7F7E9C96337811270 /* Catch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Catch.swift; path = RxSwift/Observables/Catch.swift; sourceTree = ""; }; - 6FF978DF56D9926EA3788A68EDA759E2 /* ZFLandScapeControlView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFLandScapeControlView.m; path = DDZFPlayerKit_Private/Classes/ControlView/ZFLandScapeControlView.m; sourceTree = ""; }; - 704719AC18CD745B19709E9725EFB365 /* UIView+QLContentWrap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+QLContentWrap.swift"; path = "Source/Extensions/QuickLayout/UIView+QLContentWrap.swift"; sourceTree = ""; }; - 7085F55B8770E2A80C482C0260D650F5 /* SDWebImageError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageError.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageError.m; sourceTree = ""; }; - 70D6E799EC458D6AC16F00B7EDB78A4B /* NSImage+Compatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSImage+Compatibility.m"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/NSImage+Compatibility.m"; sourceTree = ""; }; - 71067D1F0754E977C6E009846B257042 /* DDBasicControlsKit_Private-DDBaseViewController */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "DDBasicControlsKit_Private-DDBaseViewController"; path = DDBaseViewController.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 712258C5A1A8F6094095053BD36BE3B1 /* DisposeBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DisposeBase.swift; path = RxSwift/Disposables/DisposeBase.swift; sourceTree = ""; }; - 716DC897DBBFFCBB2E98C88BCE37BEB1 /* CompactMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompactMap.swift; path = RxSwift/Observables/CompactMap.swift; sourceTree = ""; }; - 718A346C9ADD65005FF57FF347E2C573 /* UIColor+SDHexString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+SDHexString.h"; path = "DDWebImageKit_Private/Classes/SDWebImage/Private/UIColor+SDHexString.h"; sourceTree = ""; }; - 71D6374CE4CA55B10AA45F89C4B9F367 /* NSDate+BRPickerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDate+BRPickerView.h"; path = "BRPickerView/DatePickerView/NSDate+BRPickerView.h"; sourceTree = ""; }; - 721152FA7D22BC0A6B433001D9BA4CD3 /* DriveRouteCustomAnnotation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DriveRouteCustomAnnotation.m; path = DDMAMapKit_Private/Classes/DDMAMap/Annotation/DriveRouteCustomAnnotation.m; sourceTree = ""; }; - 72285DE049F671DE51C1B400CB5F2405 /* NSURL+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURL+DDCategory.h"; path = "DDCategoryKit_Private/Classes/NSUrl+DDCategory/NSURL+DDCategory.h"; sourceTree = ""; }; - 72433C83B59FB3A89A9AC9B74431D3BE /* SwitchIfEmpty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwitchIfEmpty.swift; path = RxSwift/Observables/SwitchIfEmpty.swift; sourceTree = ""; }; - 7287EC60AA5E94AF51194C306E2508AC /* Maybe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Maybe.swift; path = RxSwift/Traits/PrimitiveSequence/Maybe.swift; sourceTree = ""; }; - 72C123574F2C4696870CD2220CF65D41 /* ZLPhotoConfiguration+Chaining.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ZLPhotoConfiguration+Chaining.swift"; path = "Sources/General/ZLPhotoConfiguration+Chaining.swift"; sourceTree = ""; }; - 72EF513226CD4CAA4535790E046899B7 /* PriorityQueue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PriorityQueue.swift; path = Platform/DataStructures/PriorityQueue.swift; sourceTree = ""; }; - 72F0DEC630C27BDA147895E587AF3334 /* JXCategoryIndicatorComponentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryIndicatorComponentView.h; path = Sources/Indicator/IndicatorViews/JXCategoryIndicatorComponentView.h; sourceTree = ""; }; - 7302A599D8A8C33979FFF070740CFE34 /* DDColorKit_Private.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDColorKit_Private.release.xcconfig; sourceTree = ""; }; - 734FF49A837C1D2DFC54ECD58688A5E0 /* DDBaseView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDBaseView.h; path = DDBasicControlsKit_Private/Classes/DDBaseView/DDBaseView.h; sourceTree = ""; }; - 735304CE313B6E93886A317EC3F4FEF2 /* BRPickerView.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = BRPickerView.bundle; path = BRPickerView/Base/BRPickerView.bundle; sourceTree = ""; }; - 73C5D716985D6A9FC27099D22D4B49DC /* ControlTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ControlTarget.swift; path = RxCocoa/Common/ControlTarget.swift; sourceTree = ""; }; - 742666FFE4711020BFE103F95AE42CDE /* JXCategoryTitleImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryTitleImageView.h; path = Sources/TitleImage/JXCategoryTitleImageView.h; sourceTree = ""; }; - 748D420ECBBF7920BB3C0AD0F9A753DA /* JXCategoryIndicatorRainbowLineView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryIndicatorRainbowLineView.m; path = Sources/Indicator/IndicatorViews/JXCategoryIndicatorRainbowLineView.m; sourceTree = ""; }; - 74B22967C51D4B324B6AF48BFFF24C9F /* Date+Dispatch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+Dispatch.swift"; path = "RxSwift/Date+Dispatch.swift"; sourceTree = ""; }; - 753FDC5BE5FBB5061D1108BA18888FB7 /* JXCategoryFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryFactory.m; path = Sources/Common/JXCategoryFactory.m; sourceTree = ""; }; - 7572029D42460F4EB02FD88BC9C58997 /* String+ZLPhotoBrowser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+ZLPhotoBrowser.swift"; path = "Sources/Extensions/String+ZLPhotoBrowser.swift"; sourceTree = ""; }; - 7577CE3988A94830031C97156A439570 /* DDMAMapKit_Private.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDMAMapKit_Private.release.xcconfig; sourceTree = ""; }; - 75A16BF64BD3DBCD4700931D9C252CD7 /* KF.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KF.swift; path = Sources/General/KF.swift; sourceTree = ""; }; - 75A52E32B83D148E556C8F617FE1D6AE /* RxScrollViewDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxScrollViewDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxScrollViewDelegateProxy.swift; sourceTree = ""; }; - 75E1F727257262E34B3092E52704AC5B /* AMapFoundationKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AMapFoundationKit.framework; sourceTree = ""; }; - 75EA5FCCEDCE228CB6796995E1D0BFDE /* DDFileManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDFileManager.swift; path = DDUtilsSwiftKit_Private/Classes/FileManager/DDFileManager.swift; sourceTree = ""; }; - 7613695A0F7A3B72F09922FCB96C11F2 /* MAPointAnnotation+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MAPointAnnotation+DDCategory.m"; path = "DDMAMapKit_Private/Classes/DDMAMap/Annotation/MAPointAnnotation+DDCategory.m"; sourceTree = ""; }; - 763B7A00E7384585CC4DF9B09534F5E8 /* JXCategoryIndicatorTriangleView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryIndicatorTriangleView.m; path = Sources/Indicator/IndicatorViews/JXCategoryIndicatorTriangleView.m; sourceTree = ""; }; - 7642B925B000700A66BF2CFEA93C27BB /* DDMAGeometry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDMAGeometry.m; path = DDMAMapKit_Private/Classes/DDMAUtil/DDMAGeometry.m; sourceTree = ""; }; - 76A414EC9FFDCB085700A732B77925D7 /* MACircleRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MACircleRenderer.h; path = AMapNaviKit.framework/Headers/MACircleRenderer.h; sourceTree = ""; }; - 76BC3284CDE9DE11C4F9DADC0B541015 /* UITableView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITableView+Rx.swift"; path = "RxCocoa/iOS/UITableView+Rx.swift"; sourceTree = ""; }; - 76E8749A43C5D7F0DA7AF30DB69F8996 /* ConstraintConstantTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConstantTarget.swift; path = Sources/ConstraintConstantTarget.swift; sourceTree = ""; }; - 7738A6AB801492AE05C5FDC1182FC2B5 /* DDMAMapView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDMAMapView.h; path = DDMAMapKit_Private/Classes/DDMAMap/MapView/DDMAMapView.h; sourceTree = ""; }; - 774FE99FE5FDF8AC16521D3F9EFD69EE /* UIView+ZLPhotoBrowser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+ZLPhotoBrowser.swift"; path = "Sources/Extensions/UIView+ZLPhotoBrowser.swift"; sourceTree = ""; }; - 779AC19DCC5922311DBA34FAE13EAEFF /* SDWebImageDownloaderDecryptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderDecryptor.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderDecryptor.h; sourceTree = ""; }; - 779EDC7779B234CD9A467423080BE58F /* ZLPhotoBrowser.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZLPhotoBrowser.release.xcconfig; sourceTree = ""; }; - 77C393897F696244E9356EB4257EFCCF /* JXCategoryImageCellModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryImageCellModel.m; path = Sources/Image/JXCategoryImageCellModel.m; sourceTree = ""; }; - 780F1BFE689231748499BC5383518102 /* RedirectHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RedirectHandler.swift; path = Sources/Networking/RedirectHandler.swift; sourceTree = ""; }; - 781949EB3E25C9E2A8DD56C72FD05953 /* DynamicBlurView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DynamicBlurView.release.xcconfig; sourceTree = ""; }; - 78C4BAD3B0B651A85659F92B5EC00A5B /* JXCategoryTitleCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryTitleCell.h; path = Sources/Title/JXCategoryTitleCell.h; sourceTree = ""; }; - 78E7F03AF7705EB5A80F42B781CF14CD /* SwiftyRSA.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftyRSA.modulemap; sourceTree = ""; }; - 78ECCF2A4FEC22ABFF5BAC19B8E5E14C /* NSBundle+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBundle+DDCategory.h"; path = "DDCategoryKit_Private/Classes/NSBundle+DDCategory/NSBundle+DDCategory.h"; sourceTree = ""; }; - 7946D60EA3ECE62330D28B5A8015DB98 /* DynamicBlurView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DynamicBlurView-dummy.m"; sourceTree = ""; }; - 795D28D4EAEFE189D8C322630AEBB944 /* DDBaseViewModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDBaseViewModel.h; path = DDBasicControlsKit_Private/Classes/DDBaseViewModel/DDBaseViewModel.h; sourceTree = ""; }; - 7963ED1818D2E09A87008F84FD412B8F /* DispatchQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Alamofire.swift"; path = "Source/DispatchQueue+Alamofire.swift"; sourceTree = ""; }; - 798474138D25DB49F370DB1108E75E84 /* DDBaseNavigationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDBaseNavigationController.h; path = DDBasicControlsKit_Private/Classes/DDBaseNavigationController/DDBaseNavigationController.h; sourceTree = ""; }; - 7994FC0381B5E0274F1FB06C9232399C /* BRPickerStyle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BRPickerStyle.h; path = BRPickerView/Base/BRPickerStyle.h; sourceTree = ""; }; - 79ABCE9DA3B26E0ADC63985A9BFBC24E /* MALineDrawType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MALineDrawType.h; path = AMapNaviKit.framework/Headers/MALineDrawType.h; sourceTree = ""; }; - 79B1E784B755D1AD12181BE9233EF004 /* SDWebImageCacheSerializer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCacheSerializer.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCacheSerializer.h; sourceTree = ""; }; - 79E0D5C42037D6E6FB18C380AEC11396 /* PopupDialogContainerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PopupDialogContainerView.swift; path = PopupDialog/Classes/PopupDialogContainerView.swift; sourceTree = ""; }; - 79F0BA79985E6280842283FB0DB3BE6F /* MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefresh.h; path = MJRefresh/MJRefresh.h; sourceTree = ""; }; - 7A35003D0111822D8C96F21E91A1DDA6 /* EKAttributes+DisplayMode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EKAttributes+DisplayMode.swift"; path = "Source/Model/EntryAttributes/EKAttributes+DisplayMode.swift"; sourceTree = ""; }; - 7AA0C096E2B3D1663A3AEF9E4D752CCE /* JXCategoryIndicatorParamsModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryIndicatorParamsModel.m; path = Sources/Common/JXCategoryIndicatorParamsModel.m; sourceTree = ""; }; - 7ABEA293518578544038E29B85A346D2 /* DDCategoryKit_Private-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DDCategoryKit_Private-dummy.m"; sourceTree = ""; }; - 7AD064120AE0C72F43D3E534DD60772C /* SDImageTransformer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageTransformer.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageTransformer.m; sourceTree = ""; }; - 7AF29BE15096E94431865592E9D889EE /* DDDate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDDate.swift; path = DDDateKit_Private/Classes/DDDate.swift; sourceTree = ""; }; - 7B0AA00AC3C94D7CC89DAC7137913CAB /* SDImageGraphics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageGraphics.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageGraphics.m; sourceTree = ""; }; - 7B1E6C9CDECAB733FF7FAEDC6288CE4A /* UIImage+Blur.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImage+Blur.swift"; path = "Sources/DynamicBlurView/UIImage+Blur.swift"; sourceTree = ""; }; - 7B24C7137909F5E10723721E632E326D /* CompositeDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompositeDisposable.swift; path = RxSwift/Disposables/CompositeDisposable.swift; sourceTree = ""; }; - 7B5101DF3F3A75E32B40A1BBB8C07F95 /* UIImage+Transform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Transform.m"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+Transform.m"; sourceTree = ""; }; - 7BF437F1301E282D248141EA0E4FDED5 /* Pods-OrderSchedulingNotificationService.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-OrderSchedulingNotificationService.debug.xcconfig"; sourceTree = ""; }; - 7C5E1F4832E5E802B3096201185D46F2 /* ObservableConvertibleType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObservableConvertibleType.swift; path = RxSwift/ObservableConvertibleType.swift; sourceTree = ""; }; - 7C5E22AC08D1F5DE4EC547DAA2FF5FD1 /* RxCocoa.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RxCocoa.modulemap; sourceTree = ""; }; - 7C73804AEDE7540DC69868ADD55D1AE3 /* ZFSliderView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFSliderView.h; path = DDZFPlayerKit_Private/Classes/ControlView/ZFSliderView.h; sourceTree = ""; }; - 7C988EFCD405867B402DBAB7780E1982 /* MAParticleOverlayOptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAParticleOverlayOptions.h; path = AMapNaviKit.framework/Headers/MAParticleOverlayOptions.h; sourceTree = ""; }; - 7CA7AAB23E0EA60B213EB7E208530CE8 /* SkipWhile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkipWhile.swift; path = RxSwift/Observables/SkipWhile.swift; sourceTree = ""; }; - 7CA9932A4FB3310EABE728105AA0E97D /* ZFFloatView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFFloatView.m; path = DDZFPlayerKit_Private/Classes/Core/ZFFloatView.m; sourceTree = ""; }; - 7CB5913E7C3EEFA536149605E932C168 /* IQKeyboardManagerSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.debug.xcconfig; sourceTree = ""; }; - 7CC7C4C087BAF8CBEFC6978246850028 /* DDBaseMutableAttributedString.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDBaseMutableAttributedString.m; path = DDBasicControlsKit_Private/Classes/DDBaseAttributedString/DDBaseMutableAttributedString.m; sourceTree = ""; }; - 7CD68D27706669257C28A28DDD646C89 /* DDBaseImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDBaseImage.m; path = DDBasicControlsKit_Private/Classes/DDBaseImage/DDBaseImage.m; sourceTree = ""; }; - 7D10A2D9673F4FD68AAE3C4DA64CD72A /* DDWebImageKit_Private.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DDWebImageKit_Private.modulemap; sourceTree = ""; }; - 7D15009FE79448A8D3C61B246F3E6637 /* DriveRouteCustomAnnotationView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DriveRouteCustomAnnotationView.h; path = DDMAMapKit_Private/Classes/DDMAMap/AnnotationView/DriveRouteCustomAnnotationView.h; sourceTree = ""; }; - 7D479A93404A798DA861ABBD79FD2E5A /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/UIButton+WebCache.m"; sourceTree = ""; }; - 7D8C67673267733A9E988C337A527D49 /* SharedSequence+Concurrency.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SharedSequence+Concurrency.swift"; path = "RxCocoa/Traits/SharedSequence/SharedSequence+Concurrency.swift"; sourceTree = ""; }; - 7D905E824E4D85F0856BB14DEFA3F2F4 /* DDUIGestureRecognizer-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDUIGestureRecognizer-umbrella.h"; sourceTree = ""; }; - 7D9CBE956591DBD063DF9A572E7359A0 /* UIViewController+ZLPhotoBrowser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIViewController+ZLPhotoBrowser.swift"; path = "Sources/Extensions/UIViewController+ZLPhotoBrowser.swift"; sourceTree = ""; }; - 7DA0F53808B8C0AA239AAAE7361A8539 /* SDAnimatedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageView.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageView.h; sourceTree = ""; }; - 7DAC4C046B99E2599D90B326B52B4E7E /* JXCategoryListContainerRTLCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryListContainerRTLCell.m; path = Sources/Common/JXCategoryListContainerRTLCell.m; sourceTree = ""; }; - 7DADE6BA1A545B69782EC9D67409C2D0 /* ZLEmbedAlbumListView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLEmbedAlbumListView.swift; path = Sources/General/ZLEmbedAlbumListView.swift; sourceTree = ""; }; - 7DB8358B916400BD6BF681A1880C2FA1 /* AMapNaviWalkDataRepresentable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviWalkDataRepresentable.h; path = AMapNaviKit.framework/Headers/AMapNaviWalkDataRepresentable.h; sourceTree = ""; }; - 7DCA95B6996F452F3EE171E19CE9AF58 /* RxSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RxSwift-dummy.m"; sourceTree = ""; }; - 7DEFBC6B3BC41B3EFEDF60E4155765E1 /* DDView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDView.swift; path = DDControlsKit_Private/Classes/DDView/DDView.swift; sourceTree = ""; }; - 7E181C13ADB17FC57B6A09E78D0FAA07 /* ImmediateSchedulerType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImmediateSchedulerType.swift; path = RxSwift/ImmediateSchedulerType.swift; sourceTree = ""; }; - 7E20682491464A5052445B16ABD1C3D2 /* MJRefreshStateHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshStateHeader.h; path = MJRefresh/Custom/Header/MJRefreshStateHeader.h; sourceTree = ""; }; - 7E7E95B87C01936E8B2F7C7ED9A4EABF /* PopupDialog-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PopupDialog-prefix.pch"; sourceTree = ""; }; - 7EA102A765B12386FEB116DB655A322D /* MJRefresh-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJRefresh-prefix.pch"; sourceTree = ""; }; - 7EDEEB9E0A8CDC712617883D540B4FA0 /* EKAttributes+Duration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EKAttributes+Duration.swift"; path = "Source/Model/EntryAttributes/EKAttributes+Duration.swift"; sourceTree = ""; }; - 7F0214AA38F1CEAC5DA9E004A183DC80 /* DDZFPlayerKit_Private.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDZFPlayerKit_Private.release.xcconfig; sourceTree = ""; }; - 7F1EF9A5FFC46A2D6019B884482CBB45 /* Bool+ZLPhotoBrowser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Bool+ZLPhotoBrowser.swift"; path = "Sources/Extensions/Bool+ZLPhotoBrowser.swift"; sourceTree = ""; }; - 7F26454F2D256FC88F2B6AD5F1A3AB5B /* DDBaseTextField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDBaseTextField.h; path = DDBasicControlsKit_Private/Classes/DDBaseTextField/DDBaseTextField.h; sourceTree = ""; }; - 7F450B3BABD3DE2B1D50B02976C376F8 /* AMapFoundationVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapFoundationVersion.h; path = AMapFoundationKit.framework/Headers/AMapFoundationVersion.h; sourceTree = ""; }; - 7F6F4A1F3EF266F43BA3A721E0FB830D /* NSError+ZLPhotoBrowser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSError+ZLPhotoBrowser.swift"; path = "Sources/Extensions/NSError+ZLPhotoBrowser.swift"; sourceTree = ""; }; - 7F9B1CB5758B76AA0B1DD916EEB5470A /* RxCocoa.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxCocoa.debug.xcconfig; sourceTree = ""; }; - 7FB11CF33FA9DC83DCAB3BD616563454 /* UIApplication+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIApplication+DDCategory.h"; path = "DDCategoryKit_Private/Classes/UIApplication+DDCategory/UIApplication+DDCategory.h"; sourceTree = ""; }; - 7FDE46C30B029812245A7834F1A97A1C /* Filter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filter.swift; path = Sources/Image/Filter.swift; sourceTree = ""; }; - 7FDEE7544DA6F949CFF94909E8F7BD5C /* IQKeyboardManager+UITextFieldViewNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+UITextFieldViewNotification.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+UITextFieldViewNotification.swift"; sourceTree = ""; }; - 7FE26F76E732DEF8C65ADED5FC1382A1 /* Errors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Errors.swift; path = RxSwift/Errors.swift; sourceTree = ""; }; - 80158840C248659DCB2FDA6F747B60BD /* SDImageLoadersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageLoadersManager.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageLoadersManager.h; sourceTree = ""; }; - 803FEED6A19E9CC72E1466A8CB5A0F60 /* AMapGeoFenceRegionObj.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapGeoFenceRegionObj.h; path = AMapLocationKit.framework/Headers/AMapGeoFenceRegionObj.h; sourceTree = ""; }; - 80566DF70E74961202E3D638A60FEB2F /* JXCategoryListContainerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryListContainerView.m; path = Sources/Common/JXCategoryListContainerView.m; sourceTree = ""; }; - 806ECCC14D9B5F7156BF228820319E04 /* DDUIGestureRecognizer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DDUIGestureRecognizer-dummy.m"; sourceTree = ""; }; - 808B2598E2CCBC3664D834D4D7D9D114 /* JXCategoryIndicatorCellModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryIndicatorCellModel.h; path = Sources/Indicator/JXCategoryIndicatorCellModel.h; sourceTree = ""; }; - 809C5FAB588354C9BA37DC3EAB8CB45C /* RxSwift */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = RxSwift; path = libRxSwift.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 80B7297AC939B2B8559ED315012CAE3A /* AMapTrackHistoryObj.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapTrackHistoryObj.h; path = AMapTrackKit.framework/Headers/AMapTrackHistoryObj.h; sourceTree = ""; }; - 80D666C6013881110C1418D3BA746D1D /* UIScrollView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIScrollView+Rx.swift"; path = "RxCocoa/iOS/UIScrollView+Rx.swift"; sourceTree = ""; }; - 80EC8747B96ED82E29BA807FFDF3A1A6 /* JXCategoryTitleView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryTitleView.m; path = Sources/Title/JXCategoryTitleView.m; sourceTree = ""; }; - 811F0240EAB8C42BEA3E9912D916BBAE /* ZFNetworkSpeedMonitor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFNetworkSpeedMonitor.m; path = DDZFPlayerKit_Private/Classes/ControlView/ZFNetworkSpeedMonitor.m; sourceTree = ""; }; - 814EB8D913B261BD1FC90D0860E810E3 /* SDWebImageTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransition.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageTransition.h; sourceTree = ""; }; - 8169709AECAFCBC66E7B0C5E1AFDE34F /* KFAnimatedImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KFAnimatedImage.swift; path = Sources/SwiftUI/KFAnimatedImage.swift; sourceTree = ""; }; - 81856247CFA175B2AED83E69B67F95CB /* DDNavigationControllerDelegateReceiver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDNavigationControllerDelegateReceiver.m; path = DDBasicControlsKit_Private/Classes/DDBaseNavigationController/DDNavigationControllerDelegateReceiver.m; sourceTree = ""; }; - 818D1A567BAFE4F5792B865DA9E9A500 /* ConstraintPriority.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriority.swift; path = Sources/ConstraintPriority.swift; sourceTree = ""; }; - 81DBC71E1726D5BAFC9977E9E8DD9955 /* MAHeatMapVectorOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAHeatMapVectorOverlay.h; path = AMapNaviKit.framework/Headers/MAHeatMapVectorOverlay.h; sourceTree = ""; }; - 81EBDB7DF7D598C194F59E779B2FD663 /* MJRefreshBackGifFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackGifFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m; sourceTree = ""; }; - 81F689351372B4E9638C1CDBF2952EC3 /* EKXStatusBarMessageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKXStatusBarMessageView.swift; path = Source/MessageViews/Notes/EKXStatusBarMessageView.swift; sourceTree = ""; }; - 81F71DBB04C399A622FE86723570D628 /* DDZFPlayerKit_Private-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DDZFPlayerKit_Private-dummy.m"; sourceTree = ""; }; - 8209FB0F008C90AE43B85B5AD7200BAA /* UIWindow+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWindow+DDCategory.m"; path = "DDCategoryKit_Private/Classes/UIWindow+DDCategory/UIWindow+DDCategory.m"; sourceTree = ""; }; - 825061B0BF81331A04CC6FC14B768356 /* UIButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIButton.swift; path = DDUIKit/Classes/UIButton/UIButton.swift; sourceTree = ""; }; - 82BFEE2BBD374BD0BBBCC2DDA2FB0373 /* JXCategoryDotCellModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryDotCellModel.m; path = Sources/Dot/JXCategoryDotCellModel.m; sourceTree = ""; }; - 82C950A22BDBB5BABA64AF085F248807 /* DDBaseViewController.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; name = DDBaseViewController.xcassets; path = DDBasicControlsKit_Private/Assets/DDBaseViewController.xcassets; sourceTree = ""; }; - 831B20D33413BC1CDBD0B53824B21FB9 /* Event.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Event.swift; path = RxSwift/Event.swift; sourceTree = ""; }; - 833946F37DE590CE2D3BD5D428F6E965 /* UITableView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UITableView.swift; path = DDUIKit/Classes/UITableView/UITableView.swift; sourceTree = ""; }; - 83B784AE07FC1CB1854DFC8AEA139651 /* ZLAlbumListController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLAlbumListController.swift; path = Sources/General/ZLAlbumListController.swift; sourceTree = ""; }; - 83FB9E787FFB5AC30992F955910C7F8F /* Image.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Image.swift; path = Sources/Image/Image.swift; sourceTree = ""; }; - 840E87C9C8939780C2AD28E56EB9CB52 /* RxTableViewReactiveArrayDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTableViewReactiveArrayDataSource.swift; path = RxCocoa/iOS/DataSources/RxTableViewReactiveArrayDataSource.swift; sourceTree = ""; }; - 8428E6886EF5735974D641689E6BEE74 /* Filter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filter.swift; path = RxSwift/Observables/Filter.swift; sourceTree = ""; }; - 842F1D9784F900A5C6F70B9B70077960 /* DDPersistenceKit_Private.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDPersistenceKit_Private.debug.xcconfig; sourceTree = ""; }; - 84327167CBBDD99B931D23F9AFF30DA5 /* EKRatingMessageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKRatingMessageView.swift; path = Source/MessageViews/EKRatingMessageView.swift; sourceTree = ""; }; - 845EFC8F66DA9A0B0471EC67D9911CDB /* ZLPhotoBrowser-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZLPhotoBrowser-prefix.pch"; sourceTree = ""; }; - 847E7C1B061013837E3A69D5B2318B7C /* UIImage+Transform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Transform.h"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+Transform.h"; sourceTree = ""; }; - 84812DD20135F08C808375B3A1D71106 /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Source/SessionDelegate.swift; sourceTree = ""; }; - 8498143BCF31D1D2F1C61D52BE380805 /* DDKeychain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDKeychain.swift; path = DDPersistenceKit_Private/Classes/DDKeychain.swift; sourceTree = ""; }; - 84A0BC8B18D1DA409E5D51C2A0AEDD56 /* DDBasicControlsKit_Private-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DDBasicControlsKit_Private-dummy.m"; sourceTree = ""; }; - 84DB4A762C0D0C2F854D64D79D115052 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderOperation.h; sourceTree = ""; }; - 84F5CA2285229E33C044F20BC1E02CC5 /* DDBaseTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDBaseTableViewCell.m; path = DDBasicControlsKit_Private/Classes/DDBaseTableViewCell/DDBaseTableViewCell.m; sourceTree = ""; }; - 8519064FA6E642776DCAF0CE14AAB2EA /* ConstraintDirectionalInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsets.swift; path = Sources/ConstraintDirectionalInsets.swift; sourceTree = ""; }; - 85B13CE0968FF2CAC03FA1775FF4DE8F /* TYCyclePagerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = TYCyclePagerView.m; path = TYCyclePagerViewDemo/TYCyclePagerView/TYCyclePagerView.m; sourceTree = ""; }; - 85C82F2C72D480C27329E8DE6C874E4E /* RxTextStorageDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTextStorageDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxTextStorageDelegateProxy.swift; sourceTree = ""; }; - 85EFECFBDCAF5E8618FCAE6D785AD742 /* AMapLocationCommonObj.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapLocationCommonObj.h; path = AMapLocationKit.framework/Headers/AMapLocationCommonObj.h; sourceTree = ""; }; - 85F57474BB579320C48583C82F914C79 /* SectionedViewDataSourceType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SectionedViewDataSourceType.swift; path = RxCocoa/Common/SectionedViewDataSourceType.swift; sourceTree = ""; }; - 861E3EABF816A1CA179B292C434C7624 /* Pods-OrderSchedulingNotificationService-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-OrderSchedulingNotificationService-dummy.m"; sourceTree = ""; }; - 862ABDF179BBEF97F8C92327EFA8274E /* ControlProperty+Driver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ControlProperty+Driver.swift"; path = "RxCocoa/Traits/Driver/ControlProperty+Driver.swift"; sourceTree = ""; }; - 8640052F44727BE6700FE064637A7951 /* RxCocoa.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxCocoa.release.xcconfig; sourceTree = ""; }; - 865E5F8F5226DEAD3F9354CEF97CC836 /* Window.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Window.swift; path = RxSwift/Observables/Window.swift; sourceTree = ""; }; - 869D5DFE9DD1A2268D9D13DA5B9EC726 /* SDmetamacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDmetamacros.h; path = DDWebImageKit_Private/Classes/SDWebImage/Private/SDmetamacros.h; sourceTree = ""; }; - 86AE5B4011EC57E43AD9C11DD53BEB76 /* SDImageGraphics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageGraphics.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageGraphics.h; sourceTree = ""; }; - 86B2A4FF9C2A0A6FE200F8903E17B272 /* Constraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Constraint.swift; path = Sources/Constraint.swift; sourceTree = ""; }; - 86C4A2D817E6CFFF31BF75161625FD5D /* DynamicBlurView */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = DynamicBlurView; path = libDynamicBlurView.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 86D5B58B2DC09E4FBC7347D6CD405BD3 /* UIImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIImageView.swift; path = DDUIKit/Classes/UIImageView/UIImageView.swift; sourceTree = ""; }; - 87754DB8E6B2F3DEF68736B7B4CADCCD /* SDDiskCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDiskCache.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDDiskCache.m; sourceTree = ""; }; - 878580EFC20BDA5466D9EF9E44549D32 /* ZFKVOController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFKVOController.m; path = DDZFPlayerKit_Private/Classes/Core/ZFKVOController.m; sourceTree = ""; }; - 8792A7A9537CE4E647DDE0061A9556A7 /* ScheduledDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScheduledDisposable.swift; path = RxSwift/Disposables/ScheduledDisposable.swift; sourceTree = ""; }; - 87D76BBB25FCCE3F47116A0CC60ED74A /* SerialDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SerialDisposable.swift; path = RxSwift/Disposables/SerialDisposable.swift; sourceTree = ""; }; - 883CA055738599B7362537690237CF24 /* RxCocoa-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RxCocoa-dummy.m"; sourceTree = ""; }; - 885ED7885E4BCED9FE28C757B18EC39A /* Amb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Amb.swift; path = RxSwift/Observables/Amb.swift; sourceTree = ""; }; - 886F8CD6F764BD1E1292C4FEDF5E0048 /* JXCategoryIndicatorRainbowLineView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryIndicatorRainbowLineView.h; path = Sources/Indicator/IndicatorViews/JXCategoryIndicatorRainbowLineView.h; sourceTree = ""; }; - 8870581A94799BB5FDF649316BCAF585 /* MAMultiPolyline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMultiPolyline.h; path = AMapNaviKit.framework/Headers/MAMultiPolyline.h; sourceTree = ""; }; - 8876CD6696B4C9CC7FDBD176C9562B61 /* DDNetworkingOfAlamofireKit_Private.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDNetworkingOfAlamofireKit_Private.release.xcconfig; sourceTree = ""; }; - 88E9D5C19171FD2F658F9EB3ECB18BA6 /* NSTextField+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSTextField+Rx.swift"; path = "RxCocoa/macOS/NSTextField+Rx.swift"; sourceTree = ""; }; - 89065D469018D9E69D82FA9E80FB20E5 /* ZLCameraCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLCameraCell.swift; path = Sources/General/ZLCameraCell.swift; sourceTree = ""; }; - 896E130CFF5AEF120690273A4D51A899 /* Queue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Queue.swift; path = Platform/DataStructures/Queue.swift; sourceTree = ""; }; - 8985AFEB1277743F0F561FA259EB9B5A /* UISwitch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UISwitch.swift; path = DDUIKit/Classes/UISwitch/UISwitch.swift; sourceTree = ""; }; - 8998A3652B29AA8449919D32DA10F18C /* JXCategoryIndicatorImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryIndicatorImageView.h; path = Sources/Indicator/IndicatorViews/JXCategoryIndicatorImageView.h; sourceTree = ""; }; - 89A7C174EBFD6AAA5B775D63BA1629DF /* SDImageHEICCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageHEICCoder.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageHEICCoder.h; sourceTree = ""; }; - 8A0F62B3B0E6EF577D6728119CF869D1 /* DDAutoUIKit_Private-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DDAutoUIKit_Private-dummy.m"; sourceTree = ""; }; - 8A2CBCA91EB2EA8F206B354A6E598552 /* ZFPlayerControlView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFPlayerControlView.m; path = DDZFPlayerKit_Private/Classes/ControlView/ZFPlayerControlView.m; sourceTree = ""; }; - 8A71975A18BF8BF8BD89D40365861D8E /* SDWebImageDownloaderRequestModifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderRequestModifier.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderRequestModifier.m; sourceTree = ""; }; - 8AA91CB080605C62AC6F782F7F290A83 /* AMapLocationVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapLocationVersion.h; path = AMapLocationKit.framework/Headers/AMapLocationVersion.h; sourceTree = ""; }; - 8AD026CF2FA53C314E8C799B9A40528A /* DDZFPlayerKit_Private */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = DDZFPlayerKit_Private; path = libDDZFPlayerKit_Private.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 8B12CAB104DDABADA7B3FDCFB0B03F49 /* Take.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Take.swift; path = RxSwift/Observables/Take.swift; sourceTree = ""; }; - 8B38AE3B3E25A0D8BCCFD46D1E143B8D /* DisposeBag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DisposeBag.swift; path = RxSwift/Disposables/DisposeBag.swift; sourceTree = ""; }; - 8BD1EE08814A7472706470B65F3D3639 /* SwiftyRSA+ObjC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SwiftyRSA+ObjC.swift"; path = "Source/SwiftyRSA+ObjC.swift"; sourceTree = ""; }; - 8BEC256418FA5FC987A022D0065F2333 /* KingfisherOptionsInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KingfisherOptionsInfo.swift; path = Sources/General/KingfisherOptionsInfo.swift; sourceTree = ""; }; - 8BEFDAF0F735B6BACFAF63C0B9E3F1F0 /* SynchronizedDisposeType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SynchronizedDisposeType.swift; path = RxSwift/Concurrency/SynchronizedDisposeType.swift; sourceTree = ""; }; - 8BF3C92827BD283E4A278321C4ACC3B0 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; - 8C3C814A14571470DAD18447CE470666 /* PublicKey.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PublicKey.swift; path = Source/PublicKey.swift; sourceTree = ""; }; - 8C61E93DF7AB3B98C88827EDC6E05D4A /* jcore-ios-4.2.1.xcframework */ = {isa = PBXFileReference; includeInIndex = 1; path = "jcore-ios-4.2.1.xcframework"; sourceTree = ""; }; - 8C6BFBD1F9FBF2D28844494DBBB77D9D /* DDDateKit_Private.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DDDateKit_Private.modulemap; sourceTree = ""; }; - 8C7EBBE1CA496181F88338AA121192DB /* DelegateProxyType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DelegateProxyType.swift; path = RxCocoa/Common/DelegateProxyType.swift; sourceTree = ""; }; - 8C7F0FFA47C3049DC719D410F57047C6 /* InvocableType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InvocableType.swift; path = RxSwift/Schedulers/Internal/InvocableType.swift; sourceTree = ""; }; - 8C934F4020D5B676CC43644FC6189DDE /* SchedulerServices+Emulation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SchedulerServices+Emulation.swift"; path = "RxSwift/Schedulers/SchedulerServices+Emulation.swift"; sourceTree = ""; }; - 8CB853B3D3FA4C1BA43C53DD9949EF5B /* RxCollectionViewDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxCollectionViewDelegateProxy.swift; sourceTree = ""; }; - 8D0D64955E50C10756E979684C646842 /* AuthenticationInterceptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthenticationInterceptor.swift; path = Source/AuthenticationInterceptor.swift; sourceTree = ""; }; - 8D88EF3D6333224E5B251DE09E7F4DE4 /* DDProgressHUDKit_Private-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DDProgressHUDKit_Private-dummy.m"; sourceTree = ""; }; - 8DD5FA871FE864A94DD9BEF3F937B03A /* Enumerated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Enumerated.swift; path = RxSwift/Observables/Enumerated.swift; sourceTree = ""; }; - 8DD92C7EE1DDC3D90C62C8260A974413 /* DDWebImageKit_Private-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DDWebImageKit_Private-dummy.m"; sourceTree = ""; }; - 8E02C3234AC4A04B5FAD9A2F0ECC740A /* DDFontKit_Private-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DDFontKit_Private-dummy.m"; sourceTree = ""; }; - 8E14108DD2E07F3E82CEC9C5C48840A8 /* RedirectHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RedirectHandler.swift; path = Source/RedirectHandler.swift; sourceTree = ""; }; - 8E279A08B259B797B34DCDC2CCDCB34B /* ObservableConvertibleType+Signal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableConvertibleType+Signal.swift"; path = "RxCocoa/Traits/Signal/ObservableConvertibleType+Signal.swift"; sourceTree = ""; }; - 8E96ABA47DCA2979529FDEE0238B2EC7 /* SDImageFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageFrame.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageFrame.h; sourceTree = ""; }; - 8E9CAE3E2A1886A7E5366B9EB02019BB /* MJRefreshTrailer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshTrailer.m; path = MJRefresh/Base/MJRefreshTrailer.m; sourceTree = ""; }; - 8EBB9D79C4126F95ED0CBA0F3A9170C7 /* DDControlsKit_Private-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDControlsKit_Private-umbrella.h"; sourceTree = ""; }; - 8EF5D086ECA8310E1AE23ABAE87E3D2A /* ShareReplayScope.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShareReplayScope.swift; path = RxSwift/Observables/ShareReplayScope.swift; sourceTree = ""; }; - 8EF6CA5C8605E89D5B95C7F02FBD7D4A /* UITextView+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITextView+DDCategory.h"; path = "DDCategoryKit_Private/Classes/UITextView+DDCategory/UITextView+DDCategory.h"; sourceTree = ""; }; - 8F1AFC44ED08A99390C97E3260047E20 /* DDToastKit_Private.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDToastKit_Private.release.xcconfig; sourceTree = ""; }; - 8F49FBAA4DF5966CBB6BF8C388042265 /* QLUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QLUtils.swift; path = Source/Extensions/QuickLayout/QLUtils.swift; sourceTree = ""; }; - 8F631EA3637F9A1F0F57F9DCA7C3AB73 /* MAOverlayPathRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOverlayPathRenderer.h; path = AMapNaviKit.framework/Headers/MAOverlayPathRenderer.h; sourceTree = ""; }; - 90118CBBA6CFD233F5A54E0C34623B80 /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Alamofire.modulemap; sourceTree = ""; }; - 908AC48A993D433EBBA6339FD87B3CB8 /* UIView+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+DDCategory.m"; path = "DDCategoryKit_Private/Classes/UIView+DDCategory/UIView+DDCategory.m"; sourceTree = ""; }; - 9097278903BF01262442BB7B4F02FCCC /* SDWebImageCacheKeyFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheKeyFilter.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCacheKeyFilter.m; sourceTree = ""; }; - 90C47C5148117C497AD2C834C048C21B /* SDImageIOAnimatedCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageIOAnimatedCoder.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageIOAnimatedCoder.m; sourceTree = ""; }; - 90FA751E3E2CDBE473C890A58D909C15 /* Platform.Linux.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.Linux.swift; path = Platform/Platform.Linux.swift; sourceTree = ""; }; - 90FE53E3607594EF3E86C0FE5911DD32 /* MJRefreshNormalHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshNormalHeader.h; path = MJRefresh/Custom/Header/MJRefreshNormalHeader.h; sourceTree = ""; }; - 91001D6B4E594E8E7A44FCE6646FBBA5 /* ZLGeneralDefine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLGeneralDefine.swift; path = Sources/General/ZLGeneralDefine.swift; sourceTree = ""; }; - 91314E62A67C82ADC8510FA97AD85E98 /* Alamofire-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Alamofire-dummy.m"; sourceTree = ""; }; - 9153015AB6FD5ABB6F8B4472D393CEAB /* ConstraintDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDSL.swift; path = Sources/ConstraintDSL.swift; sourceTree = ""; }; - 91567B25746861211EFCF26D50455EF5 /* ItemEvents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ItemEvents.swift; path = RxCocoa/iOS/Events/ItemEvents.swift; sourceTree = ""; }; - 91BC76F25BC47C0AA6D103C14C68E827 /* AMapNavi-NO-IDFA.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "AMapNavi-NO-IDFA.debug.xcconfig"; sourceTree = ""; }; - 91BEADBC66054210F2E8D7D0FB1F40F9 /* ConstraintView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintView.swift; path = Sources/ConstraintView.swift; sourceTree = ""; }; - 91E77A811CC7B1A501293257C743ADC4 /* AMapNaviKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AMapNaviKit.framework; sourceTree = ""; }; - 92482A0DCB51192C5E68505C33EF5745 /* JXCategoryIndicatorComponentView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryIndicatorComponentView.m; path = Sources/Indicator/IndicatorViews/JXCategoryIndicatorComponentView.m; sourceTree = ""; }; - 926C7B2D9241F96EEAE4177053E800DD /* SDGraphicsImageRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDGraphicsImageRenderer.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDGraphicsImageRenderer.m; sourceTree = ""; }; - 92A8C75F27C7753AED1D69771277142C /* DDDateKit_Private.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDDateKit_Private.release.xcconfig; sourceTree = ""; }; - 92E4EEEDDDB44A6C80BAFE943472DC5A /* Queue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Queue.swift; path = Platform/DataStructures/Queue.swift; sourceTree = ""; }; - 93060351B3270F33EB38A6F750943D39 /* MJRefreshFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshFooter.h; path = MJRefresh/Base/MJRefreshFooter.h; sourceTree = ""; }; - 9322E153E318C2469BD3EC186192683D /* UIDatePicker+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIDatePicker+Rx.swift"; path = "RxCocoa/iOS/UIDatePicker+Rx.swift"; sourceTree = ""; }; - 9334E4901AFDADE6CC32987663B2DA25 /* ZFVolumeBrightnessView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFVolumeBrightnessView.m; path = DDZFPlayerKit_Private/Classes/ControlView/ZFVolumeBrightnessView.m; sourceTree = ""; }; - 9352DC0994F4DD2F118943205CCBB176 /* ZLEditImageViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLEditImageViewController.swift; path = Sources/Edit/ZLEditImageViewController.swift; sourceTree = ""; }; - 936932DE20A086927D0C0FEB2F50A814 /* UIImageView+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+DDCategory.m"; path = "DDCategoryKit_Private/Classes/UIImageView+DDCategory/UIImageView+DDCategory.m"; sourceTree = ""; }; - 9372CC07D51DA7B97C860B833A7CB648 /* BinaryDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BinaryDisposable.swift; path = RxSwift/Disposables/BinaryDisposable.swift; sourceTree = ""; }; - 93787936F27F8AA07F71567C3AEA05D4 /* DDBaseCollectionViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDBaseCollectionViewCell.h; path = DDBasicControlsKit_Private/Classes/DDBaseCollectionViewCell/DDBaseCollectionViewCell.h; sourceTree = ""; }; - 9379D6401784F1AEFF9724756BAFA76C /* ZFUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFUtilities.h; path = DDZFPlayerKit_Private/Classes/ControlView/ZFUtilities.h; sourceTree = ""; }; - 93C94BD6E56866844B511F120D496BDE /* EKSimpleMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKSimpleMessage.swift; path = Source/Model/EKSimpleMessage.swift; sourceTree = ""; }; - 9412DD92DB149FA51E3EFDC819CF8C95 /* SDWebImageMapKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageMapKit.h; path = DDWebImageKit_Private/Classes/SDWebImageMapKit/SDWebImageMapKit.h; sourceTree = ""; }; - 9413E14BB8B290E97588E5432B23FE2D /* SDAnimatedImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImage.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImage.h; sourceTree = ""; }; - 942C14E695852E8D238490D2EE310686 /* OperationQueueScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OperationQueueScheduler.swift; path = RxSwift/Schedulers/OperationQueueScheduler.swift; sourceTree = ""; }; - 9430F409676A1F49E37152D3BEB797C4 /* jpush-extension-ios-2.0.1.xcframework */ = {isa = PBXFileReference; includeInIndex = 1; path = "jpush-extension-ios-2.0.1.xcframework"; sourceTree = ""; }; - 9442CA2161D2AE5B59392E17CFD384B1 /* SDImageIOAnimatedCoderInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOAnimatedCoderInternal.h; path = DDWebImageKit_Private/Classes/SDWebImage/Private/SDImageIOAnimatedCoderInternal.h; sourceTree = ""; }; - 94BC58F3425390D4FF8DFD06FFF3A3AB /* ConstraintMakerExtendable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerExtendable.swift; path = Sources/ConstraintMakerExtendable.swift; sourceTree = ""; }; - 94D217CE091C04BDC0609047B3A81F03 /* RxPickerViewAdapter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxPickerViewAdapter.swift; path = RxCocoa/iOS/DataSources/RxPickerViewAdapter.swift; sourceTree = ""; }; - 9502367637953912902AAF7656758D40 /* CacheSerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CacheSerializer.swift; path = Sources/Cache/CacheSerializer.swift; sourceTree = ""; }; - 95075255709C4993BC039DE85C043DD0 /* AMapCommonObj.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapCommonObj.h; path = AMapSearchKit.framework/Headers/AMapCommonObj.h; sourceTree = ""; }; - 95299BD6E3099A4ACBAA7311918BAD43 /* DDUIKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDUIKit-umbrella.h"; sourceTree = ""; }; - 952BD25D85E7F1D25827AB7BFC26B4E9 /* SDImageIOCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageIOCoder.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageIOCoder.m; sourceTree = ""; }; - 954BECCD57CC577E2B7C2B9E32C7694E /* DDUIImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDUIImage.swift; path = DDUIKit/Classes/UIImage/DDUIImage.swift; sourceTree = ""; }; - 95624B5D8F793D3FC5BE25AAECDF114B /* UIRectCorner+Short.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIRectCorner+Short.swift"; path = "Source/Extensions/UIRectCorner+Short.swift"; sourceTree = ""; }; - 959596DF795FD1A11BDF5501F8A8553C /* DDAutoUIKit_Private-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDAutoUIKit_Private-prefix.pch"; sourceTree = ""; }; - 960B877ECE016730DAADA8D1F864E36E /* UrlLinks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UrlLinks.swift; path = DDUtilsSwiftKit_Private/Classes/UrlLinks/UrlLinks.swift; sourceTree = ""; }; - 963A0B57E90D50D470C62B6A03E4C374 /* NSAttributedString+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+DDCategory.h"; path = "DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSAttributedString+DDCategory.h"; sourceTree = ""; }; - 9684E5208AF2080FA246A633E3635E48 /* AddRef.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AddRef.swift; path = RxSwift/Observables/AddRef.swift; sourceTree = ""; }; - 96EC391639BC38C74935AA3468FCEF06 /* DDOCLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDOCLog.h; path = DDLogKit_Private/Classes/OCLog/DDOCLog.h; sourceTree = ""; }; - 970613E589CD704BE5F22AFD8763B5E7 /* DDPersistenceKit_Private-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDPersistenceKit_Private-umbrella.h"; sourceTree = ""; }; - 9759660E00B36943B3182DF3F4A8797F /* DispatchQueue+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Extensions.swift"; path = "Platform/DispatchQueue+Extensions.swift"; sourceTree = ""; }; - 9783AD99AE5AB88CF4B0EFEA8601D4E1 /* Kingfisher-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Kingfisher-dummy.m"; sourceTree = ""; }; - 9789BEB35287480824753D01248833A9 /* MAOfflineItemNationWide.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOfflineItemNationWide.h; path = AMapNaviKit.framework/Headers/MAOfflineItemNationWide.h; sourceTree = ""; }; - 979486118B3E90C08386079D57962701 /* SnapKit */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = SnapKit; path = libSnapKit.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 97CBA806FC564372E2C7B750AF8C0D8D /* DDBaseView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDBaseView.m; path = DDBasicControlsKit_Private/Classes/DDBaseView/DDBaseView.m; sourceTree = ""; }; - 97E5521DDF6771E927CED75D77239015 /* JXCategoryTitleVerticalZoomView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryTitleVerticalZoomView.m; path = Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomView.m; sourceTree = ""; }; - 9810D334802900F0950C50EC15F98587 /* KVORepresentable+Swift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "KVORepresentable+Swift.swift"; path = "RxCocoa/Foundation/KVORepresentable+Swift.swift"; sourceTree = ""; }; - 98195C66125642D3183345871C8CA849 /* UIImage+ForceDecode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ForceDecode.h"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+ForceDecode.h"; sourceTree = ""; }; - 983C6C82824565D186F2DE43B686B581 /* NSBundle+BRPickerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBundle+BRPickerView.h"; path = "BRPickerView/Base/NSBundle+BRPickerView.h"; sourceTree = ""; }; - 983D6F31115DEE896419CAF786042FBD /* DynamicBlurView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DynamicBlurView-prefix.pch"; sourceTree = ""; }; - 98D8CCB8D52B56C004790FC7FB9A1C84 /* UIView+Shadow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Shadow.swift"; path = "Source/Extensions/UIView+Shadow.swift"; sourceTree = ""; }; - 990D38C97D240AC6130954FC2243CD1D /* AMap.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = AMap.bundle; path = AMapNaviKit.framework/AMap.bundle; sourceTree = ""; }; - 9919F7353E8B43CA1CE542EF20E9748D /* UIBarButtonItem+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIBarButtonItem+Rx.swift"; path = "RxCocoa/iOS/UIBarButtonItem+Rx.swift"; sourceTree = ""; }; - 99203C89C26B7C23E2C8EE71591F6A87 /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = RxSwift/Observables/Error.swift; sourceTree = ""; }; - 9940CADCEF66492949D10215DD3AB118 /* CALayer+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CALayer+DDCategory.h"; path = "DDCategoryKit_Private/Classes/CALayer+DDCategory/CALayer+DDCategory.h"; sourceTree = ""; }; - 995060076AEF261DB00EA9F991ACA5B8 /* ZFPresentTransition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFPresentTransition.m; path = DDZFPlayerKit_Private/Classes/Core/ZFPresentTransition.m; sourceTree = ""; }; - 998DA7B38BC2237AEA6230DFF18B9B7F /* SwiftyRSA.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyRSA.debug.xcconfig; sourceTree = ""; }; - 99F00559AF6546E5B86BD4CF3EA790F7 /* KFImageProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KFImageProtocol.swift; path = Sources/SwiftUI/KFImageProtocol.swift; sourceTree = ""; }; - 99FA7AA4D3F316909C923D07213FF1E3 /* SkipUntil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkipUntil.swift; path = RxSwift/Observables/SkipUntil.swift; sourceTree = ""; }; - 9A0459A7149A6F37C650DDD18A70F5DA /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/ResponseSerialization.swift; sourceTree = ""; }; - 9A110122034BF53FD4C701DA219A0B44 /* SDDisplayLink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDisplayLink.m; path = DDWebImageKit_Private/Classes/SDWebImage/Private/SDDisplayLink.m; sourceTree = ""; }; - 9A285BA4E44C51CDB377F338817BDE37 /* UITableView+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableView+DDCategory.m"; path = "DDCategoryKit_Private/Classes/UITableView+DDCategory/UITableView+DDCategory.m"; sourceTree = ""; }; - 9A6E17B9C11FE2FFAF7F992C9E228FE9 /* AMapTrackVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapTrackVersion.h; path = AMapTrackKit.framework/Headers/AMapTrackVersion.h; sourceTree = ""; }; - 9A77ABD82FEA2CA84D8B35154E4D4F40 /* UIStepper+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIStepper+Rx.swift"; path = "RxCocoa/iOS/UIStepper+Rx.swift"; sourceTree = ""; }; - 9A78FC9AD8169AAD147465A241356279 /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/NSData+ImageContentType.h"; sourceTree = ""; }; - 9AF8BE5979CE4BA8B23DF9ACAAC3D0AE /* DDMAMapKit_Private.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DDMAMapKit_Private.modulemap; sourceTree = ""; }; - 9B0A893251D98A6126AC39028E8C7B51 /* MAHeatMapTileOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAHeatMapTileOverlay.h; path = AMapNaviKit.framework/Headers/MAHeatMapTileOverlay.h; sourceTree = ""; }; - 9B1A3EAF7E0A496D0A63AB929DC43012 /* IQPreviousNextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQPreviousNextView.swift; path = IQKeyboardManagerSwift/IQToolbar/IQPreviousNextView.swift; sourceTree = ""; }; - 9B22324A35118323519D08BE490E6E8A /* DDLabel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDLabel.swift; path = DDControlsKit_Private/Classes/DDLabel/DDLabel.swift; sourceTree = ""; }; - 9B32ABDA2E0E09E24C500316F4F6BD89 /* Storage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Storage.swift; path = Sources/Cache/Storage.swift; sourceTree = ""; }; - 9B355D1D250D7DFBEB4FC4D5CC6D52EF /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = en.lproj; path = Sources/en.lproj; sourceTree = ""; }; - 9B538746BC9F48CA0F0B3EEFBB523B66 /* EKAlertMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKAlertMessage.swift; path = Source/Model/EKAlertMessage.swift; sourceTree = ""; }; - 9B882DB504FC2BA9A0E42106EA10CAC8 /* ZFLandscapeWindow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFLandscapeWindow.h; path = DDZFPlayerKit_Private/Classes/Core/ZFLandscapeWindow.h; sourceTree = ""; }; - 9BBDBB6FA348C40B5FA3462EC0B5A081 /* UIImage+Metadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Metadata.m"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+Metadata.m"; sourceTree = ""; }; - 9BE998AD8146E7E85A7CCA22DE77821C /* KingfisherError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KingfisherError.swift; path = Sources/General/KingfisherError.swift; sourceTree = ""; }; - 9BFA753E9F1F12C6DE091DBA9BE284CA /* DDPersistenceKit_Private.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DDPersistenceKit_Private.modulemap; sourceTree = ""; }; - 9C0372FB495EE23AA7290F4969203BC4 /* NSSlider+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSSlider+Rx.swift"; path = "RxCocoa/macOS/NSSlider+Rx.swift"; sourceTree = ""; }; - 9C3109C8F1654822AD1777E7B0D9AB6A /* ImageDataProcessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDataProcessor.swift; path = Sources/Networking/ImageDataProcessor.swift; sourceTree = ""; }; - 9C36E70494C84153E00A9D5A545FBD11 /* DDBaseNavigationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDBaseNavigationController.m; path = DDBasicControlsKit_Private/Classes/DDBaseNavigationController/DDBaseNavigationController.m; sourceTree = ""; }; - 9CB241779EEAD809AC3180FD5B56FDF4 /* DDFontKit_Private */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = DDFontKit_Private; path = libDDFontKit_Private.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 9CB5BA613C7C9BDD94A870582467FAEB /* AMapNavi-NO-IDFA.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "AMapNavi-NO-IDFA.release.xcconfig"; sourceTree = ""; }; - 9CB98AA2FFBDAE3D4B2D8331C0F2275C /* DDWebImageKit_Private.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDWebImageKit_Private.debug.xcconfig; sourceTree = ""; }; - 9CED34885294771F45656EB2CB3B1CB7 /* ZFPlayerLogManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFPlayerLogManager.h; path = DDZFPlayerKit_Private/Classes/Core/ZFPlayerLogManager.h; sourceTree = ""; }; - 9D2D0EAEFB4F5549BE50EC06FF3F85D9 /* Just.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Just.swift; path = RxSwift/Observables/Just.swift; sourceTree = ""; }; - 9D48D4670D4B9CE786D3F3046B64754A /* JXCategoryIndicatorBallView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryIndicatorBallView.h; path = Sources/Indicator/IndicatorViews/JXCategoryIndicatorBallView.h; sourceTree = ""; }; - 9D4B74A4386EF8F53603612D83CA68C9 /* DDColorKit_Private */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = DDColorKit_Private; path = libDDColorKit_Private.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 9D595B691C775C5988FC997E39429080 /* DriveRouteCustomAnnotation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DriveRouteCustomAnnotation.h; path = DDMAMapKit_Private/Classes/DDMAMap/Annotation/DriveRouteCustomAnnotation.h; sourceTree = ""; }; - 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; }; - 9DAB922164B4F645E967BC55BBE1B645 /* UIScrollView+MJRefresh.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+MJRefresh.m"; path = "MJRefresh/UIScrollView+MJRefresh.m"; sourceTree = ""; }; - 9DADE9080F80FDB7136837A59CE9C0CA /* JXCategoryTitleImageCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryTitleImageCell.m; path = Sources/TitleImage/JXCategoryTitleImageCell.m; sourceTree = ""; }; - 9DEAC1DB7FAB5A38798E403ED90C1404 /* AMapTrack-NO-IDFA.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "AMapTrack-NO-IDFA.debug.xcconfig"; sourceTree = ""; }; - 9DF5503B5B0AB88750E48EB61E67F526 /* JXCategoryView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JXCategoryView.debug.xcconfig; sourceTree = ""; }; - 9E02F7EC90E97AA69EC8DB78E0366C0A /* NSThread+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSThread+DDCategory.h"; path = "DDCategoryKit_Private/Classes/NSThread+DDCategory/NSThread+DDCategory.h"; sourceTree = ""; }; - 9E2CFC0E730DADCB0B911107045FC77B /* TrackingMode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TrackingMode.swift; path = Sources/DynamicBlurView/TrackingMode.swift; sourceTree = ""; }; - 9E3C0D0BDC718923EE5504123F9C64F7 /* JXCategoryDotView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryDotView.m; path = Sources/Dot/JXCategoryDotView.m; sourceTree = ""; }; - 9E4DFAB8B416A2250E403EEEBD97218C /* DynamicBlurView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DynamicBlurView.debug.xcconfig; sourceTree = ""; }; - 9E7D696E284D78500EBC9D99913FDFFC /* MAGeometry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAGeometry.h; path = AMapNaviKit.framework/Headers/MAGeometry.h; sourceTree = ""; }; - 9E7F73DE381B64D0C647E03BC90FB7CD /* IQInvocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQInvocation.swift; path = IQKeyboardManagerSwift/IQToolbar/IQInvocation.swift; sourceTree = ""; }; - 9ED858A07E2C1676EDE73FD3773F9D8F /* ImageFormat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageFormat.swift; path = Sources/Image/ImageFormat.swift; sourceTree = ""; }; - 9EF742F5D2372049B5C01F37A3A104D0 /* DDBaseTableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDBaseTableView.h; path = DDBasicControlsKit_Private/Classes/DDBaseTableView/DDBaseTableView.h; sourceTree = ""; }; - 9F0846E80CCBB02E2D1DD78D7A719574 /* EKAttributes+Validations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EKAttributes+Validations.swift"; path = "Source/Model/EntryAttributes/EKAttributes+Validations.swift"; sourceTree = ""; }; - 9F127BF93108C5141D82F4B1DC73C17F /* DDCollectionView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDCollectionView.swift; path = DDControlsKit_Private/Classes/DDCollectionView/DDCollectionView.swift; sourceTree = ""; }; - 9F1D62E18BCC5A0F453C5AA283BDD386 /* ControlProperty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ControlProperty.swift; path = RxCocoa/Traits/ControlProperty.swift; sourceTree = ""; }; - 9F4EB5F9A17FC49A3F73F7A011F381F8 /* MAMultiPointOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMultiPointOverlay.h; path = AMapNaviKit.framework/Headers/MAMultiPointOverlay.h; sourceTree = ""; }; - 9F6F97EC0C91BD3DE2098FAC9123569C /* ZFPlayerNotification.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFPlayerNotification.m; path = DDZFPlayerKit_Private/Classes/Core/ZFPlayerNotification.m; sourceTree = ""; }; - 9F8F478CE1B7B93CA5B3559929FC11D9 /* AMapNaviRideView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviRideView.h; path = AMapNaviKit.framework/Headers/AMapNaviRideView.h; sourceTree = ""; }; - 9FAD6A4776B11C9AA107287E11B7C19D /* TakeWithPredicate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TakeWithPredicate.swift; path = RxSwift/Observables/TakeWithPredicate.swift; sourceTree = ""; }; - 9FD050779C225444E531817AAF94E8D2 /* ZLCustomCamera.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLCustomCamera.swift; path = Sources/Camera/ZLCustomCamera.swift; sourceTree = ""; }; - 9FFC7A16B1641BD6E007D549F831184F /* RxPickerViewDataSourceType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxPickerViewDataSourceType.swift; path = RxCocoa/iOS/Protocols/RxPickerViewDataSourceType.swift; sourceTree = ""; }; - A0031ECF94D34F1497602F4B0794DD58 /* Pods-OrderScheduling-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-OrderScheduling-umbrella.h"; sourceTree = ""; }; - A01548D6006AA25237AB32796B4A5291 /* UIButton+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+DDCategory.h"; path = "DDCategoryKit_Private/Classes/UIButton+DDCategory/UIButton+DDCategory.h"; sourceTree = ""; }; - A04508225E6AEC8C92FEAF73DFD200D0 /* SDImageCoderHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCoderHelper.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCoderHelper.h; sourceTree = ""; }; - A09335CA1C8179E9CEA8C80B4C4B6642 /* SDImageLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageLoader.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageLoader.m; sourceTree = ""; }; - A0FBFF0B8B14B1045EB2894EA2F1B363 /* Infallible+Concurrency.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+Concurrency.swift"; path = "RxSwift/Traits/Infallible/Infallible+Concurrency.swift"; sourceTree = ""; }; - A1343B18CD61CA9E028BFD908770A0F2 /* DDFontKit_Private.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDFontKit_Private.release.xcconfig; sourceTree = ""; }; - A18FB371493DB8CCF5ADBDF82544101A /* Infallible+Create.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+Create.swift"; path = "RxSwift/Traits/Infallible/Infallible+Create.swift"; sourceTree = ""; }; - A2931FAF8D81A0016500C9FD02A6CF1D /* MAMultiPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMultiPoint.h; path = AMapNaviKit.framework/Headers/MAMultiPoint.h; sourceTree = ""; }; - A2A7B06477B1D104EAEDE95A0A7E08EE /* RxCollectionViewReactiveArrayDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewReactiveArrayDataSource.swift; path = RxCocoa/iOS/DataSources/RxCollectionViewReactiveArrayDataSource.swift; sourceTree = ""; }; - A32142F9C3ACAA35A914FC475558ED9D /* DDMAMapKit_Private-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DDMAMapKit_Private-dummy.m"; sourceTree = ""; }; - A326A4A902F299D94F85612E745775FC /* SchedulerType+SharedSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SchedulerType+SharedSequence.swift"; path = "RxCocoa/Traits/SharedSequence/SchedulerType+SharedSequence.swift"; sourceTree = ""; }; - A33332BB8DE0C04C8C1445A7D3B6C879 /* NSView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSView+Rx.swift"; path = "RxCocoa/macOS/NSView+Rx.swift"; sourceTree = ""; }; - A342026F5E868CF9F23A7BBFD7FD128E /* MJRefreshBackNormalFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackNormalFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h; sourceTree = ""; }; - A366CA9FFFC286CE0E906A7996D41FBA /* SubscriptionDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubscriptionDisposable.swift; path = RxSwift/Disposables/SubscriptionDisposable.swift; sourceTree = ""; }; - A37822F05945180B0ADB67D7E061F3C6 /* SDWeakProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWeakProxy.m; path = DDWebImageKit_Private/Classes/SDWebImage/Private/SDWeakProxy.m; sourceTree = ""; }; - A37893B605CBB699A81EAEB072E25B6F /* MAMultiColoredPolylineRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMultiColoredPolylineRenderer.h; path = AMapNaviKit.framework/Headers/MAMultiColoredPolylineRenderer.h; sourceTree = ""; }; - A3BD5D11B5CB6A2B0A6CB9C123780623 /* Single.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Single.swift; path = RxSwift/Traits/PrimitiveSequence/Single.swift; sourceTree = ""; }; - A3F289097EF2801A2430DDA17602D85B /* BRAddressModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BRAddressModel.m; path = BRPickerView/AddressPickerView/BRAddressModel.m; sourceTree = ""; }; - A40B6D53F2C484BF4A1AF2AB7E13905E /* AsyncSubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncSubject.swift; path = RxSwift/Subjects/AsyncSubject.swift; sourceTree = ""; }; - A426F3AF126F6DA8CA693D6F418135D3 /* UIApplication+EKAppearance.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIApplication+EKAppearance.swift"; path = "Source/Extensions/UIApplication+EKAppearance.swift"; sourceTree = ""; }; - A446A0BE9E273A76A038A88CB362F707 /* DDWebImageKit_Private-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDWebImageKit_Private-prefix.pch"; sourceTree = ""; }; - A470876C2E55AD6D19B4E59E80BE11DA /* AMapNaviEleBikeManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviEleBikeManager.h; path = AMapNaviKit.framework/Headers/AMapNaviEleBikeManager.h; sourceTree = ""; }; - A482D1B3C81BC4D429A24F77D4E10CDD /* DDTableView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDTableView.swift; path = DDControlsKit_Private/Classes/DDTableView/DDTableView.swift; sourceTree = ""; }; - A486045D6F8A90B5B56117A30466C1D0 /* MAUserLocationRepresentation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAUserLocationRepresentation.h; path = AMapNaviKit.framework/Headers/MAUserLocationRepresentation.h; sourceTree = ""; }; - A48BE9C888D40CEA67C31A8F6BCDBE6A /* ZLWeakProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLWeakProxy.swift; path = Sources/General/ZLWeakProxy.swift; sourceTree = ""; }; - A49F0C945751755977DBF49FA086011C /* DDAudioPlayerKit_Private-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDAudioPlayerKit_Private-umbrella.h"; sourceTree = ""; }; - A50725BDE5A5DFAF20AED3672F8D832B /* DDNetworkingOfAlamofireKit_Private-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDNetworkingOfAlamofireKit_Private-prefix.pch"; sourceTree = ""; }; - A5293E8CF1312A0C6CFCB670FBCE385B /* ZLFilter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLFilter.swift; path = Sources/Edit/ZLFilter.swift; sourceTree = ""; }; - A5708C6073CCFAC3E206B14A1CDAA6B1 /* ObservableType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObservableType.swift; path = RxSwift/ObservableType.swift; sourceTree = ""; }; - A5932DD43ACFBD2D8C793226E1F64FD3 /* ZLPhotoModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLPhotoModel.swift; path = Sources/General/ZLPhotoModel.swift; sourceTree = ""; }; - A5A49B725EA9C5EC7506BC54EDF5130E /* UITextField+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITextField+Rx.swift"; path = "RxCocoa/iOS/UITextField+Rx.swift"; sourceTree = ""; }; - A5A7368941998232BE3AA8611B4EF6D5 /* Timeout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Timeout.swift; path = RxSwift/Observables/Timeout.swift; sourceTree = ""; }; - A5A9FB1441DD7A880D88E368B2138178 /* GroupBy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GroupBy.swift; path = RxSwift/Observables/GroupBy.swift; sourceTree = ""; }; - A5BED8008BBEBAE0D0CDCAE16028F220 /* UIControl+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIControl+Rx.swift"; path = "RxCocoa/iOS/UIControl+Rx.swift"; sourceTree = ""; }; - A5C1B76BD0CBB68330CE7E8EF4AD3313 /* _RXDelegateProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _RXDelegateProxy.h; path = RxCocoa/Runtime/include/_RXDelegateProxy.h; sourceTree = ""; }; - A5E520852C51FA062BDA4BE2FCE0F2AA /* AMapNaviManagerConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviManagerConfig.h; path = AMapNaviKit.framework/Headers/AMapNaviManagerConfig.h; sourceTree = ""; }; - A6252F1D08A7FF98BE7D2CCECA7BE45E /* SDWebImageIndicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageIndicator.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageIndicator.h; sourceTree = ""; }; - A647AE6CCB05EAC4D6B466367BA7C249 /* UISegmentedControl+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UISegmentedControl+Rx.swift"; path = "RxCocoa/iOS/UISegmentedControl+Rx.swift"; sourceTree = ""; }; - A6DCBE7BA32A6207103E3433A2D746EB /* AMapLocation-NO-IDFA.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "AMapLocation-NO-IDFA.release.xcconfig"; sourceTree = ""; }; - A6E30A4D3AA46AF31525D1977A28346E /* ZFLandscapeViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFLandscapeViewController.h; path = DDZFPlayerKit_Private/Classes/Core/ZFLandscapeViewController.h; sourceTree = ""; }; - A6EF0DCA0CAA0174A8949A76D1CAE70D /* SDAnimatedImageRep.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageRep.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImageRep.h; sourceTree = ""; }; - A6EF5A90C013D84B2CB1DC37BABA9C4D /* EKAttributes+LifecycleActions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EKAttributes+LifecycleActions.swift"; path = "Source/Model/EntryAttributes/EKAttributes+LifecycleActions.swift"; sourceTree = ""; }; - A7115A9F7CE8071343308945E6AE1C2F /* SDInternalMacros.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDInternalMacros.m; path = DDWebImageKit_Private/Classes/SDWebImage/Private/SDInternalMacros.m; sourceTree = ""; }; - A724CE453656CC7AAF03C60FA8DC88A2 /* EKFormMessageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKFormMessageView.swift; path = Source/MessageViews/EKFormMessageView.swift; sourceTree = ""; }; - A73B56EBEAC18C110C7A0BF41780D315 /* ConstraintRelation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelation.swift; path = Sources/ConstraintRelation.swift; sourceTree = ""; }; - A748A668D69708CD89D222EE43A3D1C5 /* Signal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Signal.swift; path = RxCocoa/Traits/Signal/Signal.swift; sourceTree = ""; }; - A753F61823E68A691D7020B7DFC45383 /* CGFloat+ZLPhotoBrowser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CGFloat+ZLPhotoBrowser.swift"; path = "Sources/Extensions/CGFloat+ZLPhotoBrowser.swift"; sourceTree = ""; }; - A783B4031979F6BBE19524A554BBCE84 /* UIView+ZFFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+ZFFrame.m"; path = "DDZFPlayerKit_Private/Classes/ControlView/UIView+ZFFrame.m"; sourceTree = ""; }; - A7910195E2BA26BBDC64BC79D7365557 /* UIImageView+ZFCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+ZFCache.m"; path = "DDZFPlayerKit_Private/Classes/ControlView/UIImageView+ZFCache.m"; sourceTree = ""; }; - A7944D1C40A7D9A312109C07AD7D23DE /* NSButton+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSButton+Rx.swift"; path = "RxCocoa/macOS/NSButton+Rx.swift"; sourceTree = ""; }; - A7AA25474A4160179473FF865A205D4A /* ZLCollectionViewFlowLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLCollectionViewFlowLayout.swift; path = Sources/General/ZLCollectionViewFlowLayout.swift; sourceTree = ""; }; - A7D78289C9AE9EC534A12E30A5AD9A41 /* JXCategoryTitleCellModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryTitleCellModel.h; path = Sources/Title/JXCategoryTitleCellModel.h; sourceTree = ""; }; - A7EC9B31B72E86761444A2C60DB92CC6 /* Pods-OrderSchedulingNotificationService.prerelease.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-OrderSchedulingNotificationService.prerelease.xcconfig"; sourceTree = ""; }; - A7F011B38D7AD5A6E9DF11557F805A9F /* ZFOrientationObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFOrientationObserver.m; path = DDZFPlayerKit_Private/Classes/Core/ZFOrientationObserver.m; sourceTree = ""; }; - A856362BC2958F1E938FC76343C3C31D /* ConstraintMakerRelatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerRelatable.swift; path = Sources/ConstraintMakerRelatable.swift; sourceTree = ""; }; - A872EC2845D2891B06608BF8F91561FF /* RxSearchBarDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxSearchBarDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxSearchBarDelegateProxy.swift; sourceTree = ""; }; - A8E950A16D00F649C54FFB30F81D7842 /* IQKeyboardManagerSwift */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = IQKeyboardManagerSwift; path = libIQKeyboardManagerSwift.a; sourceTree = BUILT_PRODUCTS_DIR; }; - A90CD00BAF1BD0C89C2EF33B7590DBDF /* MAHeatMapVectorGridOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAHeatMapVectorGridOverlayRenderer.h; path = AMapNaviKit.framework/Headers/MAHeatMapVectorGridOverlayRenderer.h; sourceTree = ""; }; - A9132D6AA90D7BC2B6C7A08B065F87A9 /* DDToastKit_Private */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = DDToastKit_Private; path = libDDToastKit_Private.a; sourceTree = BUILT_PRODUCTS_DIR; }; - A954104A7CF64E32BCA6E4A4876AF3C3 /* UITabBar+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITabBar+Rx.swift"; path = "RxCocoa/iOS/UITabBar+Rx.swift"; sourceTree = ""; }; - A99EA3D76995EC1E88169F617A2B8804 /* AMapTrackCommonObj.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapTrackCommonObj.h; path = AMapTrackKit.framework/Headers/AMapTrackCommonObj.h; sourceTree = ""; }; - A9B79AD8F9ECF1A550262D8AEF6C6FAB /* Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Alamofire.swift; path = Source/Alamofire.swift; sourceTree = ""; }; - AA0495E1F6D98A3DDE4F33580F71324D /* MATraceReplayOverlay+Addition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MATraceReplayOverlay+Addition.h"; path = "DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlay+Addition.h"; sourceTree = ""; }; - AA48B41755825B3A3C4335BB7AF7847E /* WithUnretained.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WithUnretained.swift; path = RxSwift/Observables/WithUnretained.swift; sourceTree = ""; }; - AA77BE7C3BCC65C4BD78B9CB0EAB4EAB /* NSObject+Rx+RawRepresentable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSObject+Rx+RawRepresentable.swift"; path = "RxCocoa/Foundation/NSObject+Rx+RawRepresentable.swift"; sourceTree = ""; }; - AA9A95CE2E427F6D271136668F01D57C /* RxRelay.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RxRelay.modulemap; sourceTree = ""; }; - AAA2E2360F6F3888B41945153D157767 /* JXCategoryIndicatorBallView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryIndicatorBallView.m; path = Sources/Indicator/IndicatorViews/JXCategoryIndicatorBallView.m; sourceTree = ""; }; - AADA84EFFDEA23D1E85608A1726D9D7F /* UINavigationController+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UINavigationController+DDCategory.m"; path = "DDCategoryKit_Private/Classes/UINavigationController+DDCategory/UINavigationController+DDCategory.m"; sourceTree = ""; }; - AB375BF8D1973E65DF4553ED882C0DDE /* RxSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxSwift-umbrella.h"; sourceTree = ""; }; - ABE6AF3A01C8A4AFB4218FE6F9F11853 /* Protected.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Protected.swift; path = Source/Protected.swift; sourceTree = ""; }; - AC19804ED42A23C30B6831CAEC3BE55E /* ZFPlayerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFPlayerView.h; path = DDZFPlayerKit_Private/Classes/Core/ZFPlayerView.h; sourceTree = ""; }; - AC2354E45CCCD818CB871D2347C3BE1E /* MJRefreshTrailer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshTrailer.h; path = MJRefresh/Base/MJRefreshTrailer.h; sourceTree = ""; }; - AC347FB9F385025D134DC6ADB74E29B2 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/UIImageView+WebCache.h"; sourceTree = ""; }; - AC67E4932C28AACF796B91EFDEA343F5 /* JXCategoryTitleVerticalZoomCellModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryTitleVerticalZoomCellModel.h; path = Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomCellModel.h; sourceTree = ""; }; - AC90F8EB3F87F865E1F4207E6838FF13 /* ZFPlayerNotification.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFPlayerNotification.h; path = DDZFPlayerKit_Private/Classes/Core/ZFPlayerNotification.h; sourceTree = ""; }; - ACC665948B2AD3A3BF2D0D64F8C27D66 /* AMapSearchAPI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapSearchAPI.h; path = AMapSearchKit.framework/Headers/AMapSearchAPI.h; sourceTree = ""; }; - AD5BACCB50178F49F6749843CEE08034 /* MJRefreshAutoGifFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoGifFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h; sourceTree = ""; }; - AD8FF1E8B0C9C12F070D79A5EC3BEE59 /* DDWebImageKit_Private */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = DDWebImageKit_Private; path = libDDWebImageKit_Private.a; sourceTree = BUILT_PRODUCTS_DIR; }; - AD90C1A30406D12664F5E1A77AE3C8A7 /* JXCategoryIndicatorLineView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryIndicatorLineView.m; path = Sources/Indicator/IndicatorViews/JXCategoryIndicatorLineView.m; sourceTree = ""; }; - ADD655FAF3ED8F62A6E0B94F261104E4 /* MAPolylineRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAPolylineRenderer.h; path = AMapNaviKit.framework/Headers/MAPolylineRenderer.h; sourceTree = ""; }; - ADDB4D0E7A405AF52EF8469AB5B04E9C /* RxPickerViewDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxPickerViewDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxPickerViewDelegateProxy.swift; sourceTree = ""; }; - ADE5C8E5CC89CDB014129C96BC18A76A /* ZLVideoManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLVideoManager.swift; path = Sources/General/ZLVideoManager.swift; sourceTree = ""; }; - AE186CB22D2A6AA49DEBAD692309AE92 /* JXCategoryTitleImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryTitleImageView.m; path = Sources/TitleImage/JXCategoryTitleImageView.m; sourceTree = ""; }; - AE24AA2159F9388977663BE60B9394A8 /* AMapSearchVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapSearchVersion.h; path = AMapSearchKit.framework/Headers/AMapSearchVersion.h; sourceTree = ""; }; - AE64B0CAB84F57A86A736B0ECC34BE87 /* Throttle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Throttle.swift; path = RxSwift/Observables/Throttle.swift; sourceTree = ""; }; - AE77F298C5C64AD682EFE5F3A58D8E4A /* MJRefreshAutoNormalFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoNormalFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h; sourceTree = ""; }; - AEBBB5D23034F1AC2583F3353DF70EB7 /* EKTextField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKTextField.swift; path = Source/MessageViews/MessagesUtils/EKTextField.swift; sourceTree = ""; }; - AECEFBBB054915F457624F87E74D4449 /* CALayer+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CALayer+DDCategory.m"; path = "DDCategoryKit_Private/Classes/CALayer+DDCategory/CALayer+DDCategory.m"; sourceTree = ""; }; - AF46B015D6EE97CBAE40564A92482A61 /* Reactive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Reactive.swift; path = RxSwift/Reactive.swift; sourceTree = ""; }; - AF5BFBF1CB21EAF66AAA114EB38C260C /* ZLImagePreviewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLImagePreviewController.swift; path = Sources/General/ZLImagePreviewController.swift; sourceTree = ""; }; - AF777E532E08E2C6872AAC86019BE4E8 /* IQKeyboardManagerSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardManagerSwift.modulemap; sourceTree = ""; }; - AF86A73839D53B6325786B9E79F1A871 /* SDImageAPNGCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAPNGCoder.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageAPNGCoder.m; sourceTree = ""; }; - AFAA5CFD633402E7C40743548272475F /* AMapLocationRegionObj.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapLocationRegionObj.h; path = AMapLocationKit.framework/Headers/AMapLocationRegionObj.h; sourceTree = ""; }; - AFC088A48A1A3668B42821D9FAC80DD5 /* DDBaseViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDBaseViewController.m; path = DDBasicControlsKit_Private/Classes/DDBaseViewController/DDBaseViewController.m; sourceTree = ""; }; - AFDCBA487329768A35BFF9DA39F33DB9 /* Combine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Combine.swift; path = Source/Combine.swift; sourceTree = ""; }; - AFEB968189404DCD74B75448AC8B4080 /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = Source/Request.swift; sourceTree = ""; }; - B00B59E18DAA7669CDAA6F2AD3C73FD1 /* ColorUtil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ColorUtil.swift; path = DDColorKit_Private/Classes/ColorUtil.swift; sourceTree = ""; }; - B06A89FE0E1CFE19CCA5E0444DFE8D56 /* RxTabBarDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTabBarDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxTabBarDelegateProxy.swift; sourceTree = ""; }; - B0803A53FC3AADB3C3FF8CF540D70628 /* ZLAlbumListCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLAlbumListCell.swift; path = Sources/General/ZLAlbumListCell.swift; sourceTree = ""; }; - B10BE75A37E306EDA52A1E38B89F97ED /* Pods-OrderScheduling-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-OrderScheduling-resources.sh"; sourceTree = ""; }; - B10E4FEB83CCE9DE54FD1F4B7AE6ACAD /* SharedSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SharedSequence.swift; path = RxCocoa/Traits/SharedSequence/SharedSequence.swift; sourceTree = ""; }; - B12AA9D5A20BE900E2D18AB09D1B8E06 /* EKRatingMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKRatingMessage.swift; path = Source/Model/EKRatingMessage.swift; sourceTree = ""; }; - B134E99290E40135CBCB7EDBB5313561 /* TailRecursiveSink.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TailRecursiveSink.swift; path = RxSwift/Observers/TailRecursiveSink.swift; sourceTree = ""; }; - B16F4B12205FAA9874555C3BBB86D884 /* MAPolygon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAPolygon.h; path = AMapNaviKit.framework/Headers/MAPolygon.h; sourceTree = ""; }; - B1AA9B165270C0157D0F344861B8D6D1 /* ControlEvent+Driver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ControlEvent+Driver.swift"; path = "RxCocoa/Traits/Driver/ControlEvent+Driver.swift"; sourceTree = ""; }; - B1B3B78C24D91972E01D60EF4EFF9D2C /* PopupDialog.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PopupDialog.release.xcconfig; sourceTree = ""; }; - B1DD08EB56C97E0FC095E90E665D8EFA /* RequestInterceptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestInterceptor.swift; path = Source/RequestInterceptor.swift; sourceTree = ""; }; - B1EC74F7F7500674D8FBB7E1429709CD /* AMapServices.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapServices.h; path = AMapFoundationKit.framework/Headers/AMapServices.h; sourceTree = ""; }; - B1F313A4C922FA646400FB676210D8AC /* ImageContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageContext.swift; path = Sources/SwiftUI/ImageContext.swift; sourceTree = ""; }; - B21F8612F2807C099B884C64D49996A7 /* MJRefreshComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshComponent.h; path = MJRefresh/Base/MJRefreshComponent.h; sourceTree = ""; }; - B21FAEC9D38F6E10B6AFC8070D781676 /* UIView+MJExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+MJExtension.m"; path = "MJRefresh/UIView+MJExtension.m"; sourceTree = ""; }; - B2938A0EF02094C949227F15AEFEECD7 /* ConstraintMakerEditable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerEditable.swift; path = Sources/ConstraintMakerEditable.swift; sourceTree = ""; }; - B29D005A8A780B7203165EFE4F81CEE8 /* DDButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDButton.swift; path = DDControlsKit_Private/Classes/DDButton/DDButton.swift; sourceTree = ""; }; - B2FD649435E033A4BED2589387337466 /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Sources/Networking/SessionDelegate.swift; sourceTree = ""; }; - B30C358AF2A5C1E6ABB5F69697182125 /* DDCategoryKit_Private.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDCategoryKit_Private.debug.xcconfig; sourceTree = ""; }; - B31E895147F0B222F9A8F45E1A2C876D /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCache.h; sourceTree = ""; }; - B3850B517F9DE77FBDE62F3FC235B71F /* ZLThumbnailViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLThumbnailViewController.swift; path = Sources/General/ZLThumbnailViewController.swift; sourceTree = ""; }; - B3B0956B7EBF66A8FD677D586C9C387A /* Pods-OrderScheduling */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "Pods-OrderScheduling"; path = "libPods-OrderScheduling.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - B3BC900D01EF71EE85901B33DB533EE4 /* ConcurrentMainScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConcurrentMainScheduler.swift; path = RxSwift/Schedulers/ConcurrentMainScheduler.swift; sourceTree = ""; }; - B3CD0776ABDED97153A49C6FFEF28611 /* SwiftyRSA.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyRSA.release.xcconfig; sourceTree = ""; }; - B40CABDEE2A7797422ABE98CB08C0532 /* UICollectionView+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UICollectionView+DDCategory.h"; path = "DDCategoryKit_Private/Classes/UICollectionView+DDCategory/UICollectionView+DDCategory.h"; sourceTree = ""; }; - B43A1F2F1E63720D830B370B7AAA5020 /* ZFLoadingView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFLoadingView.m; path = DDZFPlayerKit_Private/Classes/ControlView/ZFLoadingView.m; sourceTree = ""; }; - B45C7013FF09A7CA3B9F2D0C54DB8245 /* RTLManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RTLManager.h; path = Sources/RLTManager/RTLManager.h; sourceTree = ""; }; - B45E5BF8F9A64B2C7F29374241812562 /* IQUIView+IQKeyboardToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIView+IQKeyboardToolbar.swift"; path = "IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift"; sourceTree = ""; }; - B46EB72D6315FBCBFE0C8AAF6A32E8AF /* Decode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Decode.swift; path = RxSwift/Observables/Decode.swift; sourceTree = ""; }; - B4A4770CC67D0EA235C5E9149674D857 /* ZLPhotoBrowser.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZLPhotoBrowser.debug.xcconfig; sourceTree = ""; }; - B4B6B677BE9FFA7A01674E06994149A5 /* EKAttributes+FrameStyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EKAttributes+FrameStyle.swift"; path = "Source/Model/EntryAttributes/EKAttributes+FrameStyle.swift"; sourceTree = ""; }; - B4E1CA0B57D4861AD65ECAD44D746C34 /* ESTabBarItemBadgeView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ESTabBarItemBadgeView.swift; path = Sources/ESTabBarItemBadgeView.swift; sourceTree = ""; }; - B4F25F41C1101333FD424AA1FE2CBF4D /* DDUITableViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDUITableViewCell.swift; path = DDUIKit/Classes/UITableViewCell/DDUITableViewCell.swift; sourceTree = ""; }; - B4F4CECFE5F41E6594CCD5F0BD801E74 /* MKAnnotationView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MKAnnotationView+WebCache.m"; path = "DDWebImageKit_Private/Classes/SDWebImageMapKit/MapKit/MKAnnotationView+WebCache.m"; sourceTree = ""; }; - B500A6A869EB38D0D880E1BF8D49D6C8 /* _RX.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _RX.m; path = RxCocoa/Runtime/_RX.m; sourceTree = ""; }; - B509D613CF3D47FE4B95ECA94FD5B68A /* DDUISwitch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDUISwitch.swift; path = DDUIKit/Classes/UISwitch/DDUISwitch.swift; sourceTree = ""; }; - B50A67F6E3A42FB4D8E1ABBCF32AA3D6 /* ZFPortraitViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFPortraitViewController.h; path = DDZFPlayerKit_Private/Classes/Core/ZFPortraitViewController.h; sourceTree = ""; }; - B50F634451DD45773FE536016BBBEB29 /* Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Utils.swift; path = RxRelay/Utils.swift; sourceTree = ""; }; - B5496CD4E14B0472409CE2CD323640A3 /* SDAssociatedObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAssociatedObject.h; path = DDWebImageKit_Private/Classes/SDWebImage/Private/SDAssociatedObject.h; sourceTree = ""; }; - B54B4AB77460FD0EF4E6301658A189DF /* Using.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Using.swift; path = RxSwift/Observables/Using.swift; sourceTree = ""; }; - B59E4B99E08DFA1B3B4882AE6091395C /* AMapNaviInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviInfo.h; path = AMapNaviKit.framework/Headers/AMapNaviInfo.h; sourceTree = ""; }; - B5A920C3DD33739DB43E502929992BB4 /* ObservableConvertibleType+Infallible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableConvertibleType+Infallible.swift"; path = "RxSwift/Traits/Infallible/ObservableConvertibleType+Infallible.swift"; sourceTree = ""; }; - B6D6F7392E7F77CC615EF6B2A71F0211 /* DDProgressHUDKit_Private-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDProgressHUDKit_Private-umbrella.h"; sourceTree = ""; }; - B6EF940D2FE866F6113D323A558A7820 /* UINavigationController+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UINavigationController+Rx.swift"; path = "RxCocoa/iOS/UINavigationController+Rx.swift"; sourceTree = ""; }; - B7902230EB4AA5626B7A3B24F2E01A87 /* RequestModifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestModifier.swift; path = Sources/Networking/RequestModifier.swift; sourceTree = ""; }; - B7AB14FBCA5BC37BED3B5BCEBBF6E76F /* SDImageCodersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCodersManager.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCodersManager.m; sourceTree = ""; }; - B7D601839745A233D11AB357632658F3 /* MAOfflineItemCommonCity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOfflineItemCommonCity.h; path = AMapNaviKit.framework/Headers/MAOfflineItemCommonCity.h; sourceTree = ""; }; - B81C152E4A6B556CB69AD638A10954E8 /* ESTabBarItemMoreContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ESTabBarItemMoreContentView.swift; path = Sources/ESTabBarItemMoreContentView.swift; sourceTree = ""; }; - B81E6FB644DEFFD4669950FA4F809C45 /* Kingfisher.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Kingfisher.release.xcconfig; sourceTree = ""; }; - B83D362193818D740A16D2ECC5B9B822 /* ZLEditToolCells.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLEditToolCells.swift; path = Sources/Edit/ZLEditToolCells.swift; sourceTree = ""; }; - B83E171BF333BCE6042F4790900A9FE2 /* VirtualTimeScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VirtualTimeScheduler.swift; path = RxSwift/Schedulers/VirtualTimeScheduler.swift; sourceTree = ""; }; - B863C66C3495BE974F5227189B1FE551 /* IQKeyboardManager+Toolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Toolbar.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+Toolbar.swift"; sourceTree = ""; }; - B8784428820F3296428B578036544576 /* JXCategoryListContainerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryListContainerView.h; path = Sources/Common/JXCategoryListContainerView.h; sourceTree = ""; }; - B8A53289FAC7085293A39AE96E239567 /* DDDateKit_Private.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDDateKit_Private.debug.xcconfig; sourceTree = ""; }; - B8C5AEADB7B2578BCC3BCBFE40E54B9E /* AMapNaviCommonObj.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviCommonObj.h; path = AMapNaviKit.framework/Headers/AMapNaviCommonObj.h; sourceTree = ""; }; - B9047AB16D96E34F038045641FCEE0CE /* Observable+Concurrency.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Observable+Concurrency.swift"; path = "RxSwift/Observable+Concurrency.swift"; sourceTree = ""; }; - B94B2C940E7569CB6FB0AA4B74655F7A /* UICollectionViewCell+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UICollectionViewCell+DDCategory.h"; path = "DDCategoryKit_Private/Classes/UICollectionViewCell+DDCategory/UICollectionViewCell+DDCategory.h"; sourceTree = ""; }; - B96ACA8FDAAD9914754C41EC4070FCB8 /* ESTabBarController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ESTabBarController.swift; path = Sources/ESTabBarController.swift; sourceTree = ""; }; - B96EFB3FE70427D8B4D751D1F0718179 /* UICollectionView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UICollectionView+Rx.swift"; path = "RxCocoa/iOS/UICollectionView+Rx.swift"; sourceTree = ""; }; - B97908D8442FB0F858BD709DB94C4C1E /* JXCategoryViewDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryViewDefines.h; path = Sources/Common/JXCategoryViewDefines.h; sourceTree = ""; }; - B9BD2F561593D661C8A6C7DD23A16169 /* UITableViewCell+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableViewCell+DDCategory.h"; path = "DDCategoryKit_Private/Classes/UITableViewCell+DDCategory/UITableViewCell+DDCategory.h"; sourceTree = ""; }; - BA001FD732029591053793CD9266C318 /* UIViewArray+QuickLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIViewArray+QuickLayout.swift"; path = "Source/Extensions/QuickLayout/UIViewArray+QuickLayout.swift"; sourceTree = ""; }; - BA36DE59C0FDA4C18BB99710BA24EEA9 /* MJRefreshNormalTrailer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshNormalTrailer.h; path = MJRefresh/Custom/Trailer/MJRefreshNormalTrailer.h; sourceTree = ""; }; - BAFA58A605A91B262522CC7C1D77EF05 /* JXCategoryView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JXCategoryView.release.xcconfig; sourceTree = ""; }; - BB06AB8C6AB720492CD7C07FB2FB1E93 /* DDBaseCollectionView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDBaseCollectionView.m; path = DDBasicControlsKit_Private/Classes/DDBaseCollectionView/DDBaseCollectionView.m; sourceTree = ""; }; - BB28130B0F4C47DC99D2DB9C80F70152 /* ZLPhotoBrowser */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = ZLPhotoBrowser; path = libZLPhotoBrowser.a; sourceTree = BUILT_PRODUCTS_DIR; }; - BB875281CE395495948947FC73ADD1BF /* Alamofire.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.release.xcconfig; sourceTree = ""; }; - BBB96050E4F141E4DBDDB6BEF4F085BA /* AMapTrackManagerOptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapTrackManagerOptions.h; path = AMapTrackKit.framework/Headers/AMapTrackManagerOptions.h; sourceTree = ""; }; - BC3172E9B17147866900EF13AD321BCE /* BRPickerView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BRPickerView-umbrella.h"; sourceTree = ""; }; - BC432FD48A5932251F1CAFBC4BF74894 /* RxCocoa */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = RxCocoa; path = libRxCocoa.a; sourceTree = BUILT_PRODUCTS_DIR; }; - BC465FF8CCC797DDD39F72CE05907ABA /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+MultiFormat.m"; sourceTree = ""; }; - BCA4322CF19F0EF5B8D6F291D3C95A12 /* IQKeyboardManagerSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.release.xcconfig; sourceTree = ""; }; - BCC8AE7A78DD94BA4E3B714AE007DCA6 /* NSBundle+MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBundle+MJRefresh.h"; path = "MJRefresh/NSBundle+MJRefresh.h"; sourceTree = ""; }; - BCDDAE64E175BDF68A49846D5367AC78 /* ZLPhotoPreviewPopInteractiveTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLPhotoPreviewPopInteractiveTransition.swift; path = Sources/Animation/ZLPhotoPreviewPopInteractiveTransition.swift; sourceTree = ""; }; - BCE267FD9B0518D7608CA5999D2963E6 /* StringEncoding+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "StringEncoding+Alamofire.swift"; path = "Source/StringEncoding+Alamofire.swift"; sourceTree = ""; }; - BD256580AAFD029F0A80CB33DC9878A7 /* DispatchQueue+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Extensions.swift"; path = "Platform/DispatchQueue+Extensions.swift"; sourceTree = ""; }; - BD6B267BB1F4635FC5329AAC62A54EF4 /* SDImageAPNGCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAPNGCoder.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageAPNGCoder.h; sourceTree = ""; }; - BDA833FD0597BF9701781FFC8BDA8715 /* Create.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Create.swift; path = RxSwift/Observables/Create.swift; sourceTree = ""; }; - BDB973BC6B942C9A7ACE838891512FAC /* SDWebImageOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageOperation.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageOperation.m; sourceTree = ""; }; - BDDBFCE276A131EBB993532F71DBB2E3 /* BehaviorRelay+Driver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "BehaviorRelay+Driver.swift"; path = "RxCocoa/Traits/Driver/BehaviorRelay+Driver.swift"; sourceTree = ""; }; - BDE45026A07554106E56EAB1DFCFB909 /* SDWebImageTransitionInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransitionInternal.h; path = DDWebImageKit_Private/Classes/SDWebImage/Private/SDWebImageTransitionInternal.h; sourceTree = ""; }; - BDE92CB423005A97CCA96201448CB518 /* UIFont.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIFont.swift; path = DDUIKit/Classes/UIFont/UIFont.swift; sourceTree = ""; }; - BDFBA89DE326F0EFFD08C57490B7A03A /* DDLogKit_Private.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDLogKit_Private.release.xcconfig; sourceTree = ""; }; - BE796FA7679BFCE0B82C986E0EC65503 /* X509Certificate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = X509Certificate.swift; path = Source/X509Certificate.swift; sourceTree = ""; }; - BE81CF354513FFE3224BE1AAF856D4A3 /* DDToastKit_Private-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDToastKit_Private-umbrella.h"; sourceTree = ""; }; - BE9E8C2F33A98716C8CB038355C1390B /* Cancelable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cancelable.swift; path = RxSwift/Cancelable.swift; sourceTree = ""; }; - BE9EEFE3C1290547D139F2FDDE9A2A3F /* DDAutoUIKit_Private.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDAutoUIKit_Private.release.xcconfig; sourceTree = ""; }; - BEF2E731E0967F055A4140D135562237 /* UIImage+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+DDCategory.m"; path = "DDCategoryKit_Private/Classes/UIImage+DDCategory/UIImage+DDCategory.m"; sourceTree = ""; }; - BF1BFC1EC849AE1981681FFA8BC94515 /* UIImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIImage.swift; path = DDUIKit/Classes/UIImage/UIImage.swift; sourceTree = ""; }; - BFA7392806DD28A68BCAC8E86946F153 /* Kingfisher-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Kingfisher-umbrella.h"; sourceTree = ""; }; - BFECCD6DEE66A705C163467849DFDEF0 /* IQKeyboardManager+OrientationNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+OrientationNotification.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+OrientationNotification.swift"; sourceTree = ""; }; - BFFA3748DBD1C58F25A0B59AFF5C5313 /* ConstraintInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsetTarget.swift; path = Sources/ConstraintInsetTarget.swift; sourceTree = ""; }; - C0081722F86179F95D0ADAC8D016F42B /* AMapNaviDriveManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviDriveManager.h; path = AMapNaviKit.framework/Headers/AMapNaviDriveManager.h; sourceTree = ""; }; - C01301176AEAC9809BD957B58457CBA2 /* PrivateKey.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PrivateKey.swift; path = Source/PrivateKey.swift; sourceTree = ""; }; - C01A1FC30FEE6FEE5B040C6EA68C73AF /* JXCategoryView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JXCategoryView-prefix.pch"; sourceTree = ""; }; - C01E8850DEB7E48F4ED5BFAC3EEA97CD /* BRStringPickerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BRStringPickerView.h; path = BRPickerView/StringPickerView/BRStringPickerView.h; sourceTree = ""; }; - C041D18F1C8DA8250A2E225062F890CC /* MJRefreshStateTrailer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshStateTrailer.h; path = MJRefresh/Custom/Trailer/MJRefreshStateTrailer.h; sourceTree = ""; }; - C06ED124531C652E7A38443F115F77BD /* DDColorKit_Private-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DDColorKit_Private-dummy.m"; sourceTree = ""; }; - C0704E4A36349FCEE9EA71A73D5B75C3 /* ImageDownloaderDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDownloaderDelegate.swift; path = Sources/Networking/ImageDownloaderDelegate.swift; sourceTree = ""; }; - C074B9CA36FB289B014D60736C04B7D9 /* DDImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDImageView.swift; path = DDControlsKit_Private/Classes/DDImageView/DDImageView.swift; sourceTree = ""; }; - C13A03B3256B854FBDD7EB286785A113 /* SDFileAttributeHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDFileAttributeHelper.m; path = DDWebImageKit_Private/Classes/SDWebImage/Private/SDFileAttributeHelper.m; sourceTree = ""; }; - C13B0001206C640A62A5E2E04C6C9587 /* DDZFPlayerKit_Private-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDZFPlayerKit_Private-umbrella.h"; sourceTree = ""; }; - C15163010490CB25348D095B99704CEB /* IQUIViewController+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIViewController+Additions.swift"; path = "IQKeyboardManagerSwift/Categories/IQUIViewController+Additions.swift"; sourceTree = ""; }; - C1580239C591ED5E9E6C2B67C649CD22 /* PublishRelay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PublishRelay.swift; path = RxRelay/PublishRelay.swift; sourceTree = ""; }; - C19A5FB1C0472EF8752D8DC60509F85C /* DDBaseAttributedString.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDBaseAttributedString.m; path = DDBasicControlsKit_Private/Classes/DDBaseAttributedString/DDBaseAttributedString.m; sourceTree = ""; }; - C1C034DDF190FFFFEFDCBBE3BEED914A /* IQTitleBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTitleBarButtonItem.swift; path = IQKeyboardManagerSwift/IQToolbar/IQTitleBarButtonItem.swift; sourceTree = ""; }; - C1E1001084A1DE3C73F7A4CBB0207512 /* MJRefresh.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJRefresh.release.xcconfig; sourceTree = ""; }; - C1E91D67416254F974D49C96E760D91C /* UIImage+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+DDCategory.h"; path = "DDCategoryKit_Private/Classes/UIImage+DDCategory/UIImage+DDCategory.h"; sourceTree = ""; }; - C29B82C1A35C3064AF29EED840507353 /* SDImageCacheConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheConfig.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCacheConfig.h; sourceTree = ""; }; - C2B30E589629B61219540929CD7847C3 /* ControlEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ControlEvent.swift; path = RxCocoa/Traits/ControlEvent.swift; sourceTree = ""; }; - C2C00E9A59E2ACDCCCCBFA7AA1D8BC7C /* UILabel+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UILabel+DDCategory.h"; path = "DDCategoryKit_Private/Classes/UILabel+DDCategory/UILabel+DDCategory.h"; sourceTree = ""; }; - C2E9949BCE8F768888E03E679CECC7C7 /* InteractiveTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InteractiveTransition.swift; path = PopupDialog/Classes/InteractiveTransition.swift; sourceTree = ""; }; - C316711E28305E97B7E0A08F296FC514 /* MAParticleOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAParticleOverlay.h; path = AMapNaviKit.framework/Headers/MAParticleOverlay.h; sourceTree = ""; }; - C319A07391F1A2F55BEEE27E267540B7 /* SDImageCachesManagerOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCachesManagerOperation.h; path = DDWebImageKit_Private/Classes/SDWebImage/Private/SDImageCachesManagerOperation.h; sourceTree = ""; }; - C33C1BB66CB81994191C0E4B8665F134 /* ZFSmallFloatControlView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFSmallFloatControlView.h; path = DDZFPlayerKit_Private/Classes/ControlView/ZFSmallFloatControlView.h; sourceTree = ""; }; - C3427CC32FA757BD5490C584C308E20B /* Generate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Generate.swift; path = RxSwift/Observables/Generate.swift; sourceTree = ""; }; - C3438C5869A327F52AF48414D67A7A69 /* EntryCachingHeuristic.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EntryCachingHeuristic.swift; path = Source/Infra/EntryCachingHeuristic.swift; sourceTree = ""; }; - C343C02FE4A6350746A5D09A7082F8EA /* PopupDialog.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PopupDialog.debug.xcconfig; sourceTree = ""; }; - C38350A7021D51F8E99227F3D940494D /* ZFPlayer.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = ZFPlayer.bundle; path = DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle; sourceTree = ""; }; - C38AA9CE57FA661B64139A67B24A96EC /* MAShape.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAShape.h; path = AMapNaviKit.framework/Headers/MAShape.h; sourceTree = ""; }; - C395B8259CC6D308C5CA33BA4BF46349 /* ConstraintLayoutGuide.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuide.swift; path = Sources/ConstraintLayoutGuide.swift; sourceTree = ""; }; - C3A40198775F90A1AE767DCDC1BCE469 /* ZFLoadingView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFLoadingView.h; path = DDZFPlayerKit_Private/Classes/ControlView/ZFLoadingView.h; sourceTree = ""; }; - C3A46B03C308EEEB11F2A62BA5D2E8BE /* JXCategoryView */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = JXCategoryView; path = libJXCategoryView.a; sourceTree = BUILT_PRODUCTS_DIR; }; - C3B2233311370F500690044FC799B0D9 /* Observable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Observable.swift; path = RxSwift/Observable.swift; sourceTree = ""; }; - C3F44C782D64D7EB20B61CE3844EBFAD /* Kingfisher */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = Kingfisher; path = libKingfisher.a; sourceTree = BUILT_PRODUCTS_DIR; }; - C3FFBB9632D75DDBE9FD5A649334EDAB /* SDImageCachesManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCachesManager.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCachesManager.m; sourceTree = ""; }; - C408382CB10B497594A402E6EF66AFD7 /* EKAttributes+Animation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EKAttributes+Animation.swift"; path = "Source/Model/EntryAttributes/EKAttributes+Animation.swift"; sourceTree = ""; }; - C4968C01BFADC82312916BEF12CEADF0 /* ZLTextStickerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLTextStickerView.swift; path = Sources/Edit/ZLTextStickerView.swift; sourceTree = ""; }; - C4B16647558A9B771B3905CC83AF8E88 /* RxSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RxSwift.modulemap; sourceTree = ""; }; - C4D1F46CFAEE91B9E24E4CB861FBC9E0 /* ESTabBarItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ESTabBarItem.swift; path = Sources/ESTabBarItem.swift; sourceTree = ""; }; - C503F91C5A7F8C0526C05906C314FDD8 /* MABaseEngineOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MABaseEngineOverlay.h; path = AMapNaviKit.framework/Headers/MABaseEngineOverlay.h; sourceTree = ""; }; - C52A36F8A43054CA8133A15E0001C73E /* Dematerialize.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Dematerialize.swift; path = RxSwift/Observables/Dematerialize.swift; sourceTree = ""; }; - C58DEEC5BECFDBEF87F5EBF5BA2865AF /* MAOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOverlayRenderer.h; path = AMapNaviKit.framework/Headers/MAOverlayRenderer.h; sourceTree = ""; }; - C5A10322AB4A96E7AA39EB552DE0AB04 /* MAUserLocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAUserLocation.h; path = AMapNaviKit.framework/Headers/MAUserLocation.h; sourceTree = ""; }; - C5ED2057E6AFCBF4956A0048C71B1242 /* RxRelay-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RxRelay-dummy.m"; sourceTree = ""; }; - C69A0E7976A70A4E86A4E00C69874F9D /* EKNotificationMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKNotificationMessage.swift; path = Source/Model/EKNotificationMessage.swift; sourceTree = ""; }; - C6EE7242DB95F788956D974ED735093B /* BRDatePickerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BRDatePickerView.m; path = BRPickerView/DatePickerView/BRDatePickerView.m; sourceTree = ""; }; - C756078088B7C77722EB7AE0CE6B21C7 /* DDBaseTextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDBaseTextView.m; path = DDBasicControlsKit_Private/Classes/DDBaseTextView/DDBaseTextView.m; sourceTree = ""; }; - C77BAED957266D20EFB289729FC39BED /* CallbackQueue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CallbackQueue.swift; path = Sources/Utility/CallbackQueue.swift; sourceTree = ""; }; - C78371C90C6B9059FF339E22C904025D /* NSMutableAttributedString+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableAttributedString+DDCategory.h"; path = "DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSMutableAttributedString+DDCategory.h"; sourceTree = ""; }; - C7DA28B79A5A6C2FCC8855981CC43356 /* IQNSArray+Sort.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQNSArray+Sort.swift"; path = "IQKeyboardManagerSwift/Categories/IQNSArray+Sort.swift"; sourceTree = ""; }; - C7E31D8C2FE8DC2AC72DC429CAF78F0B /* UIView+Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Utils.swift"; path = "Source/Extensions/UIView+Utils.swift"; sourceTree = ""; }; - C8247D5D8F93669C33937301C5B2A463 /* Placeholder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Placeholder.swift; path = Sources/Image/Placeholder.swift; sourceTree = ""; }; - C8912C7EDE4E45FE094F25961D746D68 /* Bugly.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bugly.release.xcconfig; sourceTree = ""; }; - C8A37E16ABF1F765BD2F306F276A9BFC /* SDImageAWebPCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAWebPCoder.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageAWebPCoder.m; sourceTree = ""; }; - C8E4CE335A340C6A774310B86A5AE93B /* DDToastKit_Private.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDToastKit_Private.debug.xcconfig; sourceTree = ""; }; - C9449CDD5B37F1FA78E8BAE5C9DE0546 /* SDImageAWebPCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAWebPCoder.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageAWebPCoder.h; sourceTree = ""; }; - C95752AC4AE3A6A0AFE94E4BB528FF4D /* AMapGeoFenceManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapGeoFenceManager.h; path = AMapLocationKit.framework/Headers/AMapGeoFenceManager.h; sourceTree = ""; }; - C96AEB93B0FA97EFDC4E3B0439591217 /* AMapTrackTerminalObj.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapTrackTerminalObj.h; path = AMapTrackKit.framework/Headers/AMapTrackTerminalObj.h; sourceTree = ""; }; - C9AFBB8C9DAE35B22C4B19C5E5660706 /* IQUIScrollView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIScrollView+Additions.swift"; path = "IQKeyboardManagerSwift/Categories/IQUIScrollView+Additions.swift"; sourceTree = ""; }; - C9BA963A8C91E0A3F2A875E5F6FC8DA1 /* ZLPhotoBrowser.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = ZLPhotoBrowser.bundle; path = Sources/ZLPhotoBrowser.bundle; sourceTree = ""; }; - C9E8038FB550A40B59487E96C2C014B8 /* TYCyclePagerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TYCyclePagerView.h; path = TYCyclePagerViewDemo/TYCyclePagerView/TYCyclePagerView.h; sourceTree = ""; }; - CA15DFDDCC8535D313EB0DD2D765E4FD /* EKBackgroundView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKBackgroundView.swift; path = Source/Infra/EKBackgroundView.swift; sourceTree = ""; }; - CA20C89C85B58F4039D8DF2007A09985 /* ConstraintLayoutGuide+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintLayoutGuide+Extensions.swift"; path = "Sources/ConstraintLayoutGuide+Extensions.swift"; sourceTree = ""; }; - CA7A822181B9F7B98B45DE64CE0662BA /* BRPickerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BRPickerView.h; path = BRPickerView/BRPickerView.h; sourceTree = ""; }; - CAAA47E3059B1B6A4EC16751C5895DD6 /* SDImageCacheConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheConfig.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCacheConfig.m; sourceTree = ""; }; - CAAFEA0B151D4C3826C15637652CBD4E /* JXCategoryTitleCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryTitleCell.m; path = Sources/Title/JXCategoryTitleCell.m; sourceTree = ""; }; - CACC29150612037ED48E79B9F8473318 /* JXCategoryViewAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryViewAnimator.m; path = Sources/Common/JXCategoryViewAnimator.m; sourceTree = ""; }; - CAE0D91F5796C560EF46CE9E25E32D25 /* DDUINavigationBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDUINavigationBar.swift; path = DDUIKit/Classes/UINavigationBar/DDUINavigationBar.swift; sourceTree = ""; }; - CB065740FE2583AF33580901156A78FA /* ZFSpeedLoadingView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFSpeedLoadingView.h; path = DDZFPlayerKit_Private/Classes/ControlView/ZFSpeedLoadingView.h; sourceTree = ""; }; - CB5BDCC56546B80495D4FD3626AF7450 /* UITabBarController+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITabBarController+Rx.swift"; path = "RxCocoa/iOS/UITabBarController+Rx.swift"; sourceTree = ""; }; - CBBFF9A97B5F717700B948C65F069E86 /* DDUIKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DDUIKit.modulemap; sourceTree = ""; }; - CBDCF2E2806442EAACA290D1B6CD1865 /* PublishSubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PublishSubject.swift; path = RxSwift/Subjects/PublishSubject.swift; sourceTree = ""; }; - CC0D7C1A03B68DB302B661DFA918DB0C /* AMapNaviWalkManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviWalkManager.h; path = AMapNaviKit.framework/Headers/AMapNaviWalkManager.h; sourceTree = ""; }; - CC1A6EA952868E1B1F4A942353DBE9C6 /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+GIF.m"; sourceTree = ""; }; - CC4C3680FD2099E89158AF151AD3F178 /* Zip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Zip.swift; path = RxSwift/Observables/Zip.swift; sourceTree = ""; }; - CC8558B336BC45B6ACB3389AFF5BD8A7 /* JXCategoryIndicatorCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryIndicatorCell.m; path = Sources/Indicator/JXCategoryIndicatorCell.m; sourceTree = ""; }; - CCA25F5644BF0246ABFFF775553FEEAE /* Pods-OrderScheduling.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-OrderScheduling.debug.xcconfig"; sourceTree = ""; }; - CCBF6DEC90B74616999D2954B21EC702 /* UITextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UITextView.swift; path = DDUIKit/Classes/UITextView/UITextView.swift; sourceTree = ""; }; - CCD0EEC530FB6824A9E422B23CDE22BD /* SerialDispatchQueueScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SerialDispatchQueueScheduler.swift; path = RxSwift/Schedulers/SerialDispatchQueueScheduler.swift; sourceTree = ""; }; - CCD9A6D58A4EE3EE6FCA29C9286D1E03 /* ZLPhotoBrowser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZLPhotoBrowser.h; path = Sources/ZLPhotoBrowser.h; sourceTree = ""; }; - CCF5BE4A863570487343F695DA2B5F19 /* DDLogKit_Private.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDLogKit_Private.debug.xcconfig; sourceTree = ""; }; - CD325B340468FE5EF69FE4F3EB703AE5 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderOperation.m; sourceTree = ""; }; - CD598F35AF355F8CCB8C1293E8E93F66 /* FontUtil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FontUtil.swift; path = DDFontKit_Private/Classes/FontUtil.swift; sourceTree = ""; }; - CD8F12B9844C2496DDF15B7705462661 /* JPushExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JPushExtension.release.xcconfig; sourceTree = ""; }; - CD93EAF252FE9FC36CD21DC48271E1B3 /* DDUIGestureRecognizer.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDUIGestureRecognizer.debug.xcconfig; sourceTree = ""; }; - CE1593685AF734B81F3F07C111233514 /* MAGroundOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAGroundOverlayRenderer.h; path = AMapNaviKit.framework/Headers/MAGroundOverlayRenderer.h; sourceTree = ""; }; - CE6AFA9915B5BE9AA03F5AFDA4F0C76D /* UIViewController+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+DDCategory.m"; path = "DDCategoryKit_Private/Classes/UIViewController+DDCategory/UIViewController+DDCategory.m"; sourceTree = ""; }; - CEA080F77496CCA95C9BEADCFA59A20C /* MAMapVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMapVersion.h; path = AMapNaviKit.framework/Headers/MAMapVersion.h; sourceTree = ""; }; - CEAE6478224C9C58CCED01B7D5EBD95B /* PrimitiveSequence+Zip+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PrimitiveSequence+Zip+arity.swift"; path = "RxSwift/Traits/PrimitiveSequence/PrimitiveSequence+Zip+arity.swift"; sourceTree = ""; }; - CEB7830C5EECF9675B82456ED61DC054 /* Kingfisher.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Kingfisher.modulemap; sourceTree = ""; }; - CF14298B31534E097A475D9C054AE38D /* _RXDelegateProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _RXDelegateProxy.m; path = RxCocoa/Runtime/_RXDelegateProxy.m; sourceTree = ""; }; - CF26C5C758D8FA0F5CE7716DA649070E /* ZLCustomAlertProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLCustomAlertProtocol.swift; path = Sources/General/ZLCustomAlertProtocol.swift; sourceTree = ""; }; - CF38C907BA4363B405B06B2D5BCC7B3D /* Binder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Binder.swift; path = RxSwift/Binder.swift; sourceTree = ""; }; - CF7D6ACF48268BFF03CB452E3FABA2AC /* IQKeyboardManager+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Internal.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+Internal.swift"; sourceTree = ""; }; - CF97FF1728BE083E7BA8D4321400C927 /* DDUITableView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDUITableView.swift; path = DDUIKit/Classes/UITableView/DDUITableView.swift; sourceTree = ""; }; - CFA04185301A5917ABDBDEC1D612FE8F /* PopupDialogDefaultView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PopupDialogDefaultView.swift; path = PopupDialog/Classes/PopupDialogDefaultView.swift; sourceTree = ""; }; - CFCAA960B1920091AC115175863C7249 /* NSData+SHA.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+SHA.m"; path = "Source/NSData+SHA.m"; sourceTree = ""; }; - CFF2CDF0A1C46CCC62AAE0924ABF1C29 /* HistoricalScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HistoricalScheduler.swift; path = RxSwift/Schedulers/HistoricalScheduler.swift; sourceTree = ""; }; - CFFC1E69456D7DCFAB6347A9E16EBAE4 /* ZFPlayerGestureControl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFPlayerGestureControl.m; path = DDZFPlayerKit_Private/Classes/Core/ZFPlayerGestureControl.m; sourceTree = ""; }; - D06E1A210D37002D4D9EDBA17FC74F82 /* BRBaseView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BRBaseView.m; path = BRPickerView/Base/BRBaseView.m; sourceTree = ""; }; - D0881CEE46D38FAADED1CFDCC77A3FEF /* UIView+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+DDCategory.h"; path = "DDCategoryKit_Private/Classes/UIView+DDCategory/UIView+DDCategory.h"; sourceTree = ""; }; - D08BA247FE753C21738F05CD4BCB9962 /* ZLAnimationUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLAnimationUtils.swift; path = Sources/General/ZLAnimationUtils.swift; sourceTree = ""; }; - D0DC34DFC911705DDBD12D11C2C88CEF /* URLEncodedFormEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLEncodedFormEncoder.swift; path = Source/URLEncodedFormEncoder.swift; sourceTree = ""; }; - D13827848C413A76ADD18E47761D2B20 /* Pods-OrderScheduling.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-OrderScheduling.modulemap"; sourceTree = ""; }; - D1436DF22306A910DE634B3436397A6D /* DDUIViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDUIViewController.swift; path = DDUIKit/Classes/UIViewController/DDUIViewController.swift; sourceTree = ""; }; - D16254B55AAD3124DC99795F88D22EB4 /* MJRefreshStateTrailer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshStateTrailer.m; path = MJRefresh/Custom/Trailer/MJRefreshStateTrailer.m; sourceTree = ""; }; - D1BC1FE6F37047E71C9830283FDD5D1B /* DDBaseButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDBaseButton.m; path = DDBasicControlsKit_Private/Classes/DDBaseButton/DDBaseButton.m; sourceTree = ""; }; - D21954351CDAE70ABC850CAC620D988D /* MJRefreshAutoFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoFooter.m; path = MJRefresh/Base/MJRefreshAutoFooter.m; sourceTree = ""; }; - D230AE2AB8C8AAA0420E8B652CCE29D2 /* UIImage+Metadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Metadata.h"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+Metadata.h"; sourceTree = ""; }; - D23764F0D3CAF944BDB1C9D6BBD2AD48 /* UITableView+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableView+DDCategory.h"; path = "DDCategoryKit_Private/Classes/UITableView+DDCategory/UITableView+DDCategory.h"; sourceTree = ""; }; - D2A32F68783F1149F0EB7ED39AF6ABEA /* DDDateKit_Private-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDDateKit_Private-prefix.pch"; sourceTree = ""; }; - D2A9A8EF046B4DE273BD1DD1E5CCA659 /* ZFPlayerLogManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFPlayerLogManager.m; path = DDZFPlayerKit_Private/Classes/Core/ZFPlayerLogManager.m; sourceTree = ""; }; - D2C08CB7A46C8AE472089C3822E5E1FE /* BRResultModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BRResultModel.m; path = BRPickerView/StringPickerView/BRResultModel.m; sourceTree = ""; }; - D2EE928793DF72FDD723828035BA6AF5 /* ZFOrientationObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFOrientationObserver.h; path = DDZFPlayerKit_Private/Classes/Core/ZFOrientationObserver.h; sourceTree = ""; }; - D2FA04DA35E9EA159876C62B7E64BE72 /* Scan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Scan.swift; path = RxSwift/Observables/Scan.swift; sourceTree = ""; }; - D2FBC5D745AD1C4A03609880FFB133B9 /* TYPageControl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TYPageControl.h; path = TYCyclePagerViewDemo/TYCyclePagerView/TYPageControl.h; sourceTree = ""; }; - D35B817F04EF84FA1B6B36B155603D53 /* DDBasicControlsKit_Private-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDBasicControlsKit_Private-prefix.pch"; sourceTree = ""; }; - D361B211EAD33DA1B2A83B45487210D5 /* DDCategoryKit_Private-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDCategoryKit_Private-umbrella.h"; sourceTree = ""; }; - D3D4F647B2116FBFD7A18F0000CFBF1C /* DDBasicControlsKit_Private.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDBasicControlsKit_Private.debug.xcconfig; sourceTree = ""; }; - D3D5F3EE72923785B5ACA03ADDCC6CCD /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/UIButton+WebCache.h"; sourceTree = ""; }; - D440CB37BA34B299E9404C60DA8AA061 /* DDUILabel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDUILabel.swift; path = DDUIKit/Classes/UILabel/DDUILabel.swift; sourceTree = ""; }; - D4BCE737E0820DD5448EC6815BC33EC3 /* JPush-xcframeworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "JPush-xcframeworks.sh"; sourceTree = ""; }; - D509B560C3FD14DE99ED2E461F6F61FA /* EntryAppearanceDescriptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EntryAppearanceDescriptor.swift; path = Source/MessageViews/MessagesUtils/EntryAppearanceDescriptor.swift; sourceTree = ""; }; - D537699F67EA681BBE1912E3D2FAD08A /* MAPoiFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAPoiFilter.h; path = AMapNaviKit.framework/Headers/MAPoiFilter.h; sourceTree = ""; }; - D58C980FB04DBDCB318A173DB5818C3B /* SubjectType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubjectType.swift; path = RxSwift/Subjects/SubjectType.swift; sourceTree = ""; }; - D5910EDB571BD6BD89858E4B3A053323 /* MAOfflineMap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOfflineMap.h; path = AMapNaviKit.framework/Headers/MAOfflineMap.h; sourceTree = ""; }; - D5A3880A46506555230D960A979C59EA /* Pods-OrderScheduling-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-OrderScheduling-acknowledgements.plist"; sourceTree = ""; }; - D5EBFD158BED080A89452FC9A7C389C6 /* MJRefreshBackGifFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackGifFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h; sourceTree = ""; }; - D6326621A7E3A533A7086C0D6193C1E8 /* Driver+Subscription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Driver+Subscription.swift"; path = "RxCocoa/Traits/Driver/Driver+Subscription.swift"; sourceTree = ""; }; - D6409751BC87B860116CD41641A4EEEB /* Never.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Never.swift; path = RxSwift/Observables/Never.swift; sourceTree = ""; }; - D67E045E83C23CE19EE0D2D96B9E2AA8 /* UIButton+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+DDCategory.m"; path = "DDCategoryKit_Private/Classes/UIButton+DDCategory/UIButton+DDCategory.m"; sourceTree = ""; }; - D6E34F8429C02CFE78D89CA93E4DC2CD /* ZFKVOController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFKVOController.h; path = DDZFPlayerKit_Private/Classes/Core/ZFKVOController.h; sourceTree = ""; }; - D710A3950D427273ED8F12C6AE1B243F /* JXCategoryImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryImageView.m; path = Sources/Image/JXCategoryImageView.m; sourceTree = ""; }; - D7160A21DD11FB1310E0D52335060432 /* PopupDialogButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PopupDialogButton.swift; path = PopupDialog/Classes/PopupDialogButton.swift; sourceTree = ""; }; - D75F36396C825082508059CD0ED4DB49 /* Message.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Message.swift; path = Source/Message.swift; sourceTree = ""; }; - D79400C04611DCA0219CCC4FED5760A9 /* TransitionAnimations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransitionAnimations.swift; path = PopupDialog/Classes/TransitionAnimations.swift; sourceTree = ""; }; - D79736C3A55B7D6C5075C947B6694235 /* Signature.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Signature.swift; path = Source/Signature.swift; sourceTree = ""; }; - D7A66CF132ED4CA93E3261E86C3D485A /* SnapKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SnapKit.modulemap; sourceTree = ""; }; - D7CF7F9A71024CB3A8125537CEDBB7D9 /* MATraceManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MATraceManager.h; path = AMapNaviKit.framework/Headers/MATraceManager.h; sourceTree = ""; }; - D7D356C9644A29E54C6CC720E7B1B848 /* ZFPlayerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFPlayerView.m; path = DDZFPlayerKit_Private/Classes/Core/ZFPlayerView.m; sourceTree = ""; }; - D7D5AE346DB5672BA9E2CB1469B9C858 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/UIView+WebCacheOperation.h"; sourceTree = ""; }; - D80ECFAC844B9AC7A76107391505B65A /* DDUIGestureRecognizer */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = DDUIGestureRecognizer; path = libDDUIGestureRecognizer.a; sourceTree = BUILT_PRODUCTS_DIR; }; - D80F968D98241681D31CE31C3C611B4E /* DDFontKit_Private-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDFontKit_Private-prefix.pch"; sourceTree = ""; }; - D828469C73EA271E77A59D7E03735EA8 /* SDImageFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageFrame.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageFrame.m; sourceTree = ""; }; - D8487A37DAC8AC776C1874BB6B5053CB /* ZLEditVideoViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLEditVideoViewController.swift; path = Sources/Edit/ZLEditVideoViewController.swift; sourceTree = ""; }; - D848D78F80A981643F18272D44A6E4ED /* BRAddressPickerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BRAddressPickerView.h; path = BRPickerView/AddressPickerView/BRAddressPickerView.h; sourceTree = ""; }; - D878B3E61759AFBA94E2AD2BA556C63B /* ConstraintDirectionalInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsetTarget.swift; path = Sources/ConstraintDirectionalInsetTarget.swift; sourceTree = ""; }; - D88894EE3045F82FC515A0F14F7E4550 /* BRBaseView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BRBaseView.h; path = BRPickerView/Base/BRBaseView.h; sourceTree = ""; }; - D8B4EC3CA42A6FBE9D724058541231B3 /* ObservableConvertibleType+Driver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableConvertibleType+Driver.swift"; path = "RxCocoa/Traits/Driver/ObservableConvertibleType+Driver.swift"; sourceTree = ""; }; - D8CB5B60C5127068B6918F908DE32948 /* UIScrollView+ZFPlayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+ZFPlayer.m"; path = "DDZFPlayerKit_Private/Classes/Core/UIScrollView+ZFPlayer.m"; sourceTree = ""; }; - D9015D405821BA2A645D159035072F5F /* MJRefreshGifHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshGifHeader.h; path = MJRefresh/Custom/Header/MJRefreshGifHeader.h; sourceTree = ""; }; - D9017B4A55E653BC69EF76F2038FA511 /* DDNavigationControllerDelegateReceiver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDNavigationControllerDelegateReceiver.h; path = DDBasicControlsKit_Private/Classes/DDBaseNavigationController/DDNavigationControllerDelegateReceiver.h; sourceTree = ""; }; - D98B7057AC391941130E2F7D6BE2D5A2 /* MAConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAConfig.h; path = AMapNaviKit.framework/Headers/MAConfig.h; sourceTree = ""; }; - D9A94459E09F62AE28297A45E7F006CD /* DDUIGestureRecognizer.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DDUIGestureRecognizer.modulemap; sourceTree = ""; }; - D9AD4F7389BBA58001D5A859EB85B585 /* SDWebImageDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDefine.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDefine.h; sourceTree = ""; }; - D9B41086832850A388ACB48FB147D90D /* JXCategoryNumberCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryNumberCell.h; path = Sources/Number/JXCategoryNumberCell.h; sourceTree = ""; }; - D9D9B2753D60AF012D5427AEBECB1D93 /* MJRefreshBackFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackFooter.m; path = MJRefresh/Base/MJRefreshBackFooter.m; sourceTree = ""; }; - D9DF61443696E25D119968FD864EB092 /* NSObject+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+DDCategory.h"; path = "DDCategoryKit_Private/Classes/NSObject+DDCategory/NSObject+DDCategory.h"; sourceTree = ""; }; - DA2E3333B33EB4CDB413E35D03333FFF /* MJRefreshNormalHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshNormalHeader.m; path = MJRefresh/Custom/Header/MJRefreshNormalHeader.m; sourceTree = ""; }; - DA5F7E5AA5A762E4504855EAF3216C8A /* SwiftEntryKit */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = SwiftEntryKit; path = libSwiftEntryKit.a; sourceTree = BUILT_PRODUCTS_DIR; }; - DA9D848A9A1CE50B493878AC5B6453AE /* DDFontKit_Private.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DDFontKit_Private.modulemap; sourceTree = ""; }; - DAAF627C5AC1A45232223797F61A01A8 /* TYCyclePagerView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = TYCyclePagerView.modulemap; sourceTree = ""; }; - DAB598E6A39EA2D18270D5C97CE121FA /* IQKeyboardManagerSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-umbrella.h"; sourceTree = ""; }; - DAB5B9267035C86CAFA45CF72C521FEA /* AMapSearchKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapSearchKit.h; path = AMapSearchKit.framework/Headers/AMapSearchKit.h; sourceTree = ""; }; - DAE0A350B873FC7035DC492AEA003654 /* UITableViewCell+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableViewCell+DDCategory.m"; path = "DDCategoryKit_Private/Classes/UITableViewCell+DDCategory/UITableViewCell+DDCategory.m"; sourceTree = ""; }; - DAFBA996F8D0DB0779A067E6DF99FBAB /* UIApplication+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIApplication+Rx.swift"; path = "RxCocoa/iOS/UIApplication+Rx.swift"; sourceTree = ""; }; - DAFE13D35532C1BA0D3624F4C38BEE8E /* DDLogKit_Private */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = DDLogKit_Private; path = libDDLogKit_Private.a; sourceTree = BUILT_PRODUCTS_DIR; }; - DB2300310A7B772468D5F440815EC294 /* KFOptionsSetter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KFOptionsSetter.swift; path = Sources/General/KFOptionsSetter.swift; sourceTree = ""; }; - DB61BBB8A3E8C58DEBBBA388DE476E3C /* URLSession+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLSession+Rx.swift"; path = "RxCocoa/Foundation/URLSession+Rx.swift"; sourceTree = ""; }; - DBAD08126B9080C366F9E397191BBE57 /* DDBaseModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDBaseModel.h; path = DDBasicControlsKit_Private/Classes/DDBaseModel/DDBaseModel.h; sourceTree = ""; }; - DBDD0925F5FB23C67496CFE06943DA97 /* RxRelay.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxRelay.debug.xcconfig; sourceTree = ""; }; - DC1B952FDAF2B6A98BDABB7B08F4A16A /* DDTableViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDTableViewCell.swift; path = DDControlsKit_Private/Classes/DDTableViewCell/DDTableViewCell.swift; sourceTree = ""; }; - DC2B9F52B583A7A97A2FEC2B57038E90 /* MAAnnotationMoveAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAAnnotationMoveAnimation.h; path = AMapNaviKit.framework/Headers/MAAnnotationMoveAnimation.h; sourceTree = ""; }; - DC5B2825250FB48648B89626A7097EB1 /* UISwitch+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UISwitch+DDCategory.m"; path = "DDCategoryKit_Private/Classes/UISwitch+DDCategory/UISwitch+DDCategory.m"; sourceTree = ""; }; - DC7D9409D303846FA1887BF2C9F6C9D0 /* RxCocoa.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCocoa.swift; path = RxCocoa/RxCocoa.swift; sourceTree = ""; }; - DCBC10FF75DCF54BF4C8BE4226106158 /* NSBundle+BRPickerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBundle+BRPickerView.m"; path = "BRPickerView/Base/NSBundle+BRPickerView.m"; sourceTree = ""; }; - DCCB5B88E4403F92CC5C5B2D573509D0 /* ConstraintLayoutSupportDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupportDSL.swift; path = Sources/ConstraintLayoutSupportDSL.swift; sourceTree = ""; }; - DCCCC5EC07117618F4DAF00E27CFC556 /* DDUIButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDUIButton.swift; path = DDUIKit/Classes/UIButton/DDUIButton.swift; sourceTree = ""; }; - DCE08701C8652904BEE88F34DD27C3A5 /* DDAudioPlayerKit_Private.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDAudioPlayerKit_Private.debug.xcconfig; sourceTree = ""; }; - DD105EC99E1337DE2350EA8F5E086D67 /* SwiftyRSA.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftyRSA.swift; path = Source/SwiftyRSA.swift; sourceTree = ""; }; - DD217346865E975A6F9491C83FFED705 /* RequestCompression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestCompression.swift; path = Source/RequestCompression.swift; sourceTree = ""; }; - DD2645C8CEB2A5D2D9F6F734C385DA35 /* PopupDialogOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PopupDialogOverlayView.swift; path = PopupDialog/Classes/PopupDialogOverlayView.swift; sourceTree = ""; }; - DD404B51F03B97A6631E148DA050A732 /* Session.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Session.swift; path = Source/Session.swift; sourceTree = ""; }; - DD6E822FD84878F6DA0DF18290710A92 /* ESTabBarController-swift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "ESTabBarController-swift.release.xcconfig"; sourceTree = ""; }; - DD76C6A8AF1AA8CB62DF43C3F769AE0C /* MATraceReplayOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MATraceReplayOverlay.h; path = DDMAMapKit_Private/Classes/DDMAMap/Trace/MATraceReplayOverlay.h; sourceTree = ""; }; - DD9BCD7BD7083FAF3307D81DF81F7C46 /* _RXKVOObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _RXKVOObserver.h; path = RxCocoa/Runtime/include/_RXKVOObserver.h; sourceTree = ""; }; - DDABBF11E1ABB03D2E87EDAC1FD0A620 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloader.h; sourceTree = ""; }; - DDDA4038ABB30110E2D3271068B0EB69 /* First.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = First.swift; path = RxSwift/Observables/First.swift; sourceTree = ""; }; - DE00811D9FC152CBF7585716DC0FD733 /* UIPickerView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIPickerView+Rx.swift"; path = "RxCocoa/iOS/UIPickerView+Rx.swift"; sourceTree = ""; }; - DEBED50283779181BB11A4A881012EE7 /* IQKeyboardReturnKeyHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardReturnKeyHandler.swift; path = IQKeyboardManagerSwift/IQKeyboardReturnKeyHandler.swift; sourceTree = ""; }; - DEC4AC451F11FA32131EE78BB3FD9EF0 /* SynchronizedUnsubscribeType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SynchronizedUnsubscribeType.swift; path = RxSwift/Concurrency/SynchronizedUnsubscribeType.swift; sourceTree = ""; }; - DEDD4D0FB94D73F7564C989B43F262CB /* ZLPhotoUIConfiguration+Chaining.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ZLPhotoUIConfiguration+Chaining.swift"; path = "Sources/General/ZLPhotoUIConfiguration+Chaining.swift"; sourceTree = ""; }; - DEEF6A42E1003FED5213630188F0BCF9 /* Infallible+CombineLatest+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+CombineLatest+arity.swift"; path = "RxSwift/Traits/Infallible/Infallible+CombineLatest+arity.swift"; sourceTree = ""; }; - DF07F7B964C7E3CE99FEEC54FC37F050 /* DDUtilsSwiftKit_Private */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = DDUtilsSwiftKit_Private; path = libDDUtilsSwiftKit_Private.a; sourceTree = BUILT_PRODUCTS_DIR; }; - DF2AEC51482009E8935EC3F37C84EC10 /* RxRelay.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxRelay.release.xcconfig; sourceTree = ""; }; - DF35EB7DB7844E364D8910DDCE3BBA18 /* AMapUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapUtility.h; path = AMapFoundationKit.framework/Headers/AMapUtility.h; sourceTree = ""; }; - DF3F8CF3B9F0AA4C8B420B3F415EEC61 /* MAPathShowRange.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAPathShowRange.h; path = AMapNaviKit.framework/Headers/MAPathShowRange.h; sourceTree = ""; }; - DF5053DCE0FC4754ABF3BFA5A6FD68F8 /* SDWebImageOptionsProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOptionsProcessor.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageOptionsProcessor.h; sourceTree = ""; }; - DF8AEF1B45C629BBBC58611C20A3A1C5 /* MemoryStorage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MemoryStorage.swift; path = Sources/Cache/MemoryStorage.swift; sourceTree = ""; }; - E0080360A1C76A97BF3244B89E9CE1F6 /* MACustomBuildingOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MACustomBuildingOverlayRenderer.h; path = AMapNaviKit.framework/Headers/MACustomBuildingOverlayRenderer.h; sourceTree = ""; }; - E01259E1EBA2E46C02294D76E8696183 /* DDScrollView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDScrollView.swift; path = DDControlsKit_Private/Classes/DDScrollView/DDScrollView.swift; sourceTree = ""; }; - E01D15A927697FFBC21C2277A1BED082 /* MJRefreshNormalTrailer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshNormalTrailer.m; path = MJRefresh/Custom/Trailer/MJRefreshNormalTrailer.m; sourceTree = ""; }; - E03320A291BFDD5AA1545F5FF07DB996 /* JXCategoryView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "JXCategoryView-dummy.m"; sourceTree = ""; }; - E038753F3326EAFA55E551DED5A83E1A /* DDToastKit_Private-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDToastKit_Private-prefix.pch"; sourceTree = ""; }; - E073EEA268C0B3013B1B312FA549DEBF /* EKAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKAttributes.swift; path = Source/Model/EntryAttributes/EKAttributes.swift; sourceTree = ""; }; - E086170944E312848BD32A068A3B3D45 /* AMapTrackKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapTrackKit.h; path = AMapTrackKit.framework/Headers/AMapTrackKit.h; sourceTree = ""; }; - E0CF4E36EBC551A1499DEDE5076AD3C3 /* SDAsyncBlockOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAsyncBlockOperation.m; path = DDWebImageKit_Private/Classes/SDWebImage/Private/SDAsyncBlockOperation.m; sourceTree = ""; }; - E0D0B7AB20E57B728AF637B0BC82F481 /* DDUIGestureRecognizer.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDUIGestureRecognizer.release.xcconfig; sourceTree = ""; }; - E13FF61B48E4C0D427DEE769C21B81F7 /* SDWebImageDownloaderConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderConfig.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageDownloaderConfig.h; sourceTree = ""; }; - E140E38B445037E6F0E4FDB445C4A4B2 /* UIImageView+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+DDCategory.h"; path = "DDCategoryKit_Private/Classes/UIImageView+DDCategory/UIImageView+DDCategory.h"; sourceTree = ""; }; - E163311AD439D782918263286D181B9E /* ConstraintRelatableTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelatableTarget.swift; path = Sources/ConstraintRelatableTarget.swift; sourceTree = ""; }; - E18BECCC3AE278850CB90921D0269F8F /* MJRefreshBackNormalFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackNormalFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m; sourceTree = ""; }; - E1B104D5CB3FB436481B45A71DFEA863 /* DDNavigationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDNavigationController.swift; path = DDControlsKit_Private/Classes/DDNavigationController/DDNavigationController.swift; sourceTree = ""; }; - E1D1D28D7494F778CC60C149BC7097CE /* UIView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCache.h"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/UIView+WebCache.h"; sourceTree = ""; }; - E22F30851DDC7C549F663C5FEE847DCF /* AutoUI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AutoUI.swift; path = DDAutoUIKit_Private/Classes/AutoUI.swift; sourceTree = ""; }; - E235887340A6B4A54A73422D949DC61C /* DDAutoUIKit_Private.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDAutoUIKit_Private.debug.xcconfig; sourceTree = ""; }; - E23E3E037A1472C2E79E487DE308A5F2 /* UIWindow+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWindow+DDCategory.h"; path = "DDCategoryKit_Private/Classes/UIWindow+DDCategory/UIWindow+DDCategory.h"; sourceTree = ""; }; - E25AFE2CC3899B6483DAECBCD6614163 /* UIImageView+ZFCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+ZFCache.h"; path = "DDZFPlayerKit_Private/Classes/ControlView/UIImageView+ZFCache.h"; sourceTree = ""; }; - E270ABDB05C1E6CDFF8AB4EB055CE66E /* DDDateKit_Private */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = DDDateKit_Private; path = libDDDateKit_Private.a; sourceTree = BUILT_PRODUCTS_DIR; }; - E2AC799602AAE0F2E632A19FC0F91BC2 /* AMapFoundationConst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapFoundationConst.h; path = AMapFoundationKit.framework/Headers/AMapFoundationConst.h; sourceTree = ""; }; - E2B3927425DE48B1B85CC9C75B89ED55 /* Infallible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Infallible.swift; path = RxSwift/Traits/Infallible/Infallible.swift; sourceTree = ""; }; - E2CA575A587A32E09AFE79C40FEC5169 /* UIEdgeInsets+Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIEdgeInsets+Utils.swift"; path = "Source/Extensions/UIEdgeInsets+Utils.swift"; sourceTree = ""; }; - E2DEFD9CA0EEA8583343465F08D8408F /* NSURL+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURL+DDCategory.m"; path = "DDCategoryKit_Private/Classes/NSUrl+DDCategory/NSURL+DDCategory.m"; sourceTree = ""; }; - E2E74D7F078E0466B11691D964E4AABB /* UIActivityIndicatorView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIActivityIndicatorView+Rx.swift"; path = "RxCocoa/iOS/UIActivityIndicatorView+Rx.swift"; sourceTree = ""; }; - E31B79E563E0A858064565166B4BB08A /* ZLBaseStickerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLBaseStickerView.swift; path = Sources/Edit/ZLBaseStickerView.swift; sourceTree = ""; }; - E31E5E80EAB44D96A2F4FFAF84AD65CC /* JXCategoryDotCellModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryDotCellModel.h; path = Sources/Dot/JXCategoryDotCellModel.h; sourceTree = ""; }; - E31E82532012A9368CD278F1B64B4DB1 /* ZLEditImageConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLEditImageConfiguration.swift; path = Sources/General/ZLEditImageConfiguration.swift; sourceTree = ""; }; - E349C039A7235D90D8AE0A17E74F5C83 /* DDAudioPlayerKit_Private.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DDAudioPlayerKit_Private.modulemap; sourceTree = ""; }; - E359C5F7C7165D57D9A751DAEA7C1241 /* ZLThumbnailPhotoCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLThumbnailPhotoCell.swift; path = Sources/General/ZLThumbnailPhotoCell.swift; sourceTree = ""; }; - E35FA532115719FF16E0A82F72F336C1 /* MAOfflineItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOfflineItem.h; path = AMapNaviKit.framework/Headers/MAOfflineItem.h; sourceTree = ""; }; - E3925819052ECF20890A49C065A3E093 /* Bundle+ZLPhotoBrowser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Bundle+ZLPhotoBrowser.swift"; path = "Sources/Extensions/Bundle+ZLPhotoBrowser.swift"; sourceTree = ""; }; - E4070527A194B9408C92FC6ACF6AB111 /* ZFPortraitViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFPortraitViewController.m; path = DDZFPlayerKit_Private/Classes/Core/ZFPortraitViewController.m; sourceTree = ""; }; - E4073CAD6B821615CF29C574EC6BA55E /* MACircle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MACircle.h; path = AMapNaviKit.framework/Headers/MACircle.h; sourceTree = ""; }; - E4585747280D3DFC635BC74545A9FC72 /* JXCategoryIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryIndicatorView.h; path = Sources/Indicator/JXCategoryIndicatorView.h; sourceTree = ""; }; - E4863DBFE563EB129CD7414E7C378616 /* Pods-OrderSchedulingNotificationService-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-OrderSchedulingNotificationService-acknowledgements.markdown"; sourceTree = ""; }; - E49D6D248DD1CEE584E6776B9164A1B2 /* MJRefresh */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = MJRefresh; path = libMJRefresh.a; sourceTree = BUILT_PRODUCTS_DIR; }; - E4A4E116DE213028792AEB972C8C12D2 /* SDWebImageTransition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageTransition.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageTransition.m; sourceTree = ""; }; - E4CBD8C0AE14DFB9CB34041070E4439D /* PresentationManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PresentationManager.swift; path = PopupDialog/Classes/PresentationManager.swift; sourceTree = ""; }; - E4DF5B085BC59EDF20AE7C6EE0EEE622 /* AMapSearchError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapSearchError.h; path = AMapSearchKit.framework/Headers/AMapSearchError.h; sourceTree = ""; }; - E5304BD2E04EDB1DF6954A3EA072C79F /* NSControl+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSControl+Rx.swift"; path = "RxCocoa/macOS/NSControl+Rx.swift"; sourceTree = ""; }; - E536E290402532B1C466DC676C4B83A9 /* DDMASearch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDMASearch.h; path = DDMAMapKit_Private/Classes/DDMASearch/DDMASearch.h; sourceTree = ""; }; - E53F520764ACA8A4466548E0CCDA8872 /* SwiftyRSA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SwiftyRSA.h; path = Source/SwiftyRSA.h; sourceTree = ""; }; - E549DB56B833434F2CBC725218A73D74 /* MAMVTTileOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMVTTileOverlayRenderer.h; path = AMapNaviKit.framework/Headers/MAMVTTileOverlayRenderer.h; sourceTree = ""; }; - E54CB0ECE56F3A274E8E613742729F76 /* SDAnimatedImagePlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImagePlayer.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImagePlayer.h; sourceTree = ""; }; - E557E35BDB14E2A5E1D0495A8F99330F /* AMapNaviRoute.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviRoute.h; path = AMapNaviKit.framework/Headers/AMapNaviRoute.h; sourceTree = ""; }; - E5ABB7D74AB285DE7B0057E548038111 /* JPush.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JPush.debug.xcconfig; sourceTree = ""; }; - E5B1A18F6D34D8D44A2956B3A7D2F7CF /* Switch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Switch.swift; path = RxSwift/Observables/Switch.swift; sourceTree = ""; }; - E5E3C0DB744B960A5F6130A12E7244C8 /* JPush.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JPush.release.xcconfig; sourceTree = ""; }; - E5F691EEF4FDA09A3911F13E8A0BC1C6 /* DDBaseButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDBaseButton.h; path = DDBasicControlsKit_Private/Classes/DDBaseButton/DDBaseButton.h; sourceTree = ""; }; - E62D7B56DD56EC78FEA7E07C9936B539 /* BRDatePickerView+BR.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BRDatePickerView+BR.h"; path = "BRPickerView/DatePickerView/BRDatePickerView+BR.h"; sourceTree = ""; }; - E6348CDD50C7B181B8762F70DDD93B29 /* JXCategoryIndicatorCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryIndicatorCell.h; path = Sources/Indicator/JXCategoryIndicatorCell.h; sourceTree = ""; }; - E6508C1517EBD1EAAC85BF1F0E48F8F5 /* DDProgressHUDKit_Private-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDProgressHUDKit_Private-prefix.pch"; sourceTree = ""; }; - E67CB224042ABA4AE746F698258A5BAF /* ConstraintInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsets.swift; path = Sources/ConstraintInsets.swift; sourceTree = ""; }; - E6C2EF326DC11741D484EC5D8EDACEA0 /* NSButton+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSButton+Kingfisher.swift"; path = "Sources/Extensions/NSButton+Kingfisher.swift"; sourceTree = ""; }; - E6D4A7AD665C701DD8C1151EE2392682 /* UIColor+Hue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIColor+Hue.swift"; path = "DDColorKit_Private/Classes/UIColor+Hue.swift"; sourceTree = ""; }; - E6DF2B3DF55513B9094D6EAA7BA10CC9 /* ConstraintPriorityTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriorityTarget.swift; path = Sources/ConstraintPriorityTarget.swift; sourceTree = ""; }; - E6E382C8CC3828B550CFE1B411D59792 /* SwiftEntryKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftEntryKit.release.xcconfig; sourceTree = ""; }; - E73758C3486F0D78F7219FF634A7186A /* NSDate+BRPickerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDate+BRPickerView.m"; path = "BRPickerView/DatePickerView/NSDate+BRPickerView.m"; sourceTree = ""; }; - E742A448651BC79CF375DA1E1B75C63A /* UIScrollView+MJExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+MJExtension.m"; path = "MJRefresh/UIScrollView+MJExtension.m"; sourceTree = ""; }; - E74BE0175747C3FBC01B32C946F95953 /* MJRefreshBackFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackFooter.h; path = MJRefresh/Base/MJRefreshBackFooter.h; sourceTree = ""; }; - E788DA5B3A40955A6CFD2CC69F83202E /* TYCyclePagerView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TYCyclePagerView-umbrella.h"; sourceTree = ""; }; - E789064BE8F74BD0D5F7576611BA7428 /* AuthenticationChallengeResponsable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthenticationChallengeResponsable.swift; path = Sources/Networking/AuthenticationChallengeResponsable.swift; sourceTree = ""; }; - E7C9437E4E7340A6BDC7C73BE8A3B117 /* Pods-OrderSchedulingNotificationService */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "Pods-OrderSchedulingNotificationService"; path = "libPods-OrderSchedulingNotificationService.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - E7FF3C8609834F23B27A6CF3C7B47411 /* UISearchController+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UISearchController+Rx.swift"; path = "RxCocoa/iOS/UISearchController+Rx.swift"; sourceTree = ""; }; - E8088ECD7982C20A3DD64663A92E62C9 /* BRStringPickerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BRStringPickerView.m; path = BRPickerView/StringPickerView/BRStringPickerView.m; sourceTree = ""; }; - E8371E0143D366BA74178AD87E5EE44F /* URLConvertible+URLRequestConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLConvertible+URLRequestConvertible.swift"; path = "Source/URLConvertible+URLRequestConvertible.swift"; sourceTree = ""; }; - E887C966FAC9BB3EA4A498001949642D /* JXCategoryTitleImageCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryTitleImageCell.h; path = Sources/TitleImage/JXCategoryTitleImageCell.h; sourceTree = ""; }; - E8C42D67609D88558E1450A18B6E59EC /* SwiftSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftSupport.swift; path = RxSwift/SwiftSupport/SwiftSupport.swift; sourceTree = ""; }; - E8DD82B349770CC15C6303FB2010C745 /* DDTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDTextView.swift; path = DDControlsKit_Private/Classes/DDTextView/DDTextView.swift; sourceTree = ""; }; - E8E0A7A013E79187646EA79385AEF98F /* RxTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTarget.swift; path = RxCocoa/Common/RxTarget.swift; sourceTree = ""; }; - E8E43DDF6D3250D7F48E5403915C7890 /* UIButton+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIButton+Rx.swift"; path = "RxCocoa/iOS/UIButton+Rx.swift"; sourceTree = ""; }; - E90C22AD038BFFA334744016D632EBED /* AMapGeoFenceError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapGeoFenceError.h; path = AMapLocationKit.framework/Headers/AMapGeoFenceError.h; sourceTree = ""; }; - E9B4A66A0B2DEACD89817ACB5C1C2232 /* MJRefreshConst.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshConst.m; path = MJRefresh/MJRefreshConst.m; sourceTree = ""; }; - E9BB0949121DEB564F39CBB1F31331EC /* NSButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSButton+WebCache.h"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/NSButton+WebCache.h"; sourceTree = ""; }; - E9C32CEC0958CFDF3FB4362CBB18AEAC /* ZFLandscapeViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZFLandscapeViewController.m; path = DDZFPlayerKit_Private/Classes/Core/ZFLandscapeViewController.m; sourceTree = ""; }; - E9CAFFC5C0A595A1E9F2428562242FE5 /* DDPersistenceKit_Private-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DDPersistenceKit_Private-dummy.m"; sourceTree = ""; }; - E9EB98248632D80E2CD041148A8E5C15 /* DDAF.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDAF.swift; path = DDNetworkingOfAlamofireKit_Private/Classes/DDAF.swift; sourceTree = ""; }; - E9F792EED4B9415B48F4A5955AD528B4 /* ImageDownloader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDownloader.swift; path = Sources/Networking/ImageDownloader.swift; sourceTree = ""; }; - EA306782607E93BE5C83E20F856D1FB7 /* EKAttributes+WindowLevel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EKAttributes+WindowLevel.swift"; path = "Source/Model/EntryAttributes/EKAttributes+WindowLevel.swift"; sourceTree = ""; }; - EA63DB240FE9ADB9B6B607B6951C0B98 /* MAPinAnnotationView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAPinAnnotationView.h; path = AMapNaviKit.framework/Headers/MAPinAnnotationView.h; sourceTree = ""; }; - EA7C6374BBA0DE8238B8A6C24B7D5E34 /* AsMaybe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsMaybe.swift; path = RxSwift/Observables/AsMaybe.swift; sourceTree = ""; }; - EA7D93F4D43674BDC56D4B198D2ABEE8 /* RxCollectionViewDataSourcePrefetchingProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewDataSourcePrefetchingProxy.swift; path = RxCocoa/iOS/Proxies/RxCollectionViewDataSourcePrefetchingProxy.swift; sourceTree = ""; }; - EAD31E03CA470FCAAC8ED316DEBF0318 /* ObserveOn.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObserveOn.swift; path = RxSwift/Observables/ObserveOn.swift; sourceTree = ""; }; - EB54EDEF7A3CF863EB16DAC2BA19C9FD /* JCore-xcframeworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "JCore-xcframeworks.sh"; sourceTree = ""; }; - EB74D6A12317B8731336BC83C84C53FA /* ZFIJKPlayerManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFIJKPlayerManager.h; path = DDZFPlayerKit_Private/Classes/ijkplayer/ZFIJKPlayerManager.h; sourceTree = ""; }; - EB879BFE0858FF849CB21B097D093F05 /* JXCategoryView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryView.h; path = Sources/JXCategoryView.h; sourceTree = ""; }; - EBC6E4217A7A53C6E00E095A98CD7F60 /* Disposables.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Disposables.swift; path = RxSwift/Disposables/Disposables.swift; sourceTree = ""; }; - EBD61AF7F37F0D6AE15E7D3147506FB1 /* MAOfflineProvince.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOfflineProvince.h; path = AMapNaviKit.framework/Headers/MAOfflineProvince.h; sourceTree = ""; }; - EBF9CBF41B43FCD2928EBD34745C1603 /* Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Rx.swift; path = RxSwift/Rx.swift; sourceTree = ""; }; - EC0709F953C6E1E00E1B48C994DCA742 /* Cell+ZLPhotoBrowser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Cell+ZLPhotoBrowser.swift"; path = "Sources/Extensions/Cell+ZLPhotoBrowser.swift"; sourceTree = ""; }; - EC0ECADC146598702C545884614FFDC6 /* UICollectionViewLayout+MJRefresh.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UICollectionViewLayout+MJRefresh.m"; path = "MJRefresh/UICollectionViewLayout+MJRefresh.m"; sourceTree = ""; }; - EC4387F3F51AEEFFFB729F90F32F16B7 /* InvocableScheduledItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InvocableScheduledItem.swift; path = RxSwift/Schedulers/Internal/InvocableScheduledItem.swift; sourceTree = ""; }; - EC46C56D3F58BDA592A93730A005EF26 /* DDCategoryKit_Private */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = DDCategoryKit_Private; path = libDDCategoryKit_Private.a; sourceTree = BUILT_PRODUCTS_DIR; }; - EC4D291E74407DFFB144C84526148B9C /* NSImage+Compatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSImage+Compatibility.h"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/NSImage+Compatibility.h"; sourceTree = ""; }; - ECB77B5CB3F3CFE6CDF70C0DFB2AA0E1 /* JXCategoryNumberCellModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryNumberCellModel.m; path = Sources/Number/JXCategoryNumberCellModel.m; sourceTree = ""; }; - ECDAC965AE07254C2BFDE5F87782CAAA /* DDBaseCollectionViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDBaseCollectionViewCell.m; path = DDBasicControlsKit_Private/Classes/DDBaseCollectionViewCell/DDBaseCollectionViewCell.m; sourceTree = ""; }; - ED3395300C0C4DD1C5ED23CAD2620B09 /* Debounce.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debounce.swift; path = RxSwift/Observables/Debounce.swift; sourceTree = ""; }; - ED4B28777420DC719B44D67B307E6593 /* RetryStrategy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryStrategy.swift; path = Sources/Networking/RetryStrategy.swift; sourceTree = ""; }; - ED9A02E76946E33682F5D3514A1B2CA7 /* DDDateKit_Private-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DDDateKit_Private-dummy.m"; sourceTree = ""; }; - EDBA254B348DB78647705E13777F4E68 /* BRPickerView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BRPickerView.debug.xcconfig; sourceTree = ""; }; - EDD6E597DB96016769077D11DCFEB743 /* MJRefreshAutoGifFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoGifFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m; sourceTree = ""; }; - EDE9C8200260F8FAC9E298F1AFE1CC8D /* MJRefresh-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJRefresh-umbrella.h"; sourceTree = ""; }; - EE4FDB7DC97BA8834FC5ED0132CDEDC8 /* AMapFoundation-NO-IDFA.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "AMapFoundation-NO-IDFA.release.xcconfig"; sourceTree = ""; }; - EE8484A808EA47CF8801A366981A9DCB /* Lock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Lock.swift; path = RxSwift/Concurrency/Lock.swift; sourceTree = ""; }; - EE9DAF62ACE3606E6493AD782FB07900 /* MAOfflineItemMunicipality.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOfflineItemMunicipality.h; path = AMapNaviKit.framework/Headers/MAOfflineItemMunicipality.h; sourceTree = ""; }; - EEC77E95710C428FBBCEA3A19CC88933 /* UILabel+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UILabel+DDCategory.m"; path = "DDCategoryKit_Private/Classes/UILabel+DDCategory/UILabel+DDCategory.m"; sourceTree = ""; }; - EF2FE2FA4F4039C58F64777FB49CF7AF /* MAMultiTexturePolylineRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMultiTexturePolylineRenderer.h; path = AMapNaviKit.framework/Headers/MAMultiTexturePolylineRenderer.h; sourceTree = ""; }; - EF3CE6982BF810FD0EE3F1319498ABFF /* SubscribeOn.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubscribeOn.swift; path = RxSwift/Observables/SubscribeOn.swift; sourceTree = ""; }; - EF81A156B03A324F27CCC20B03CE0A4C /* ZLProgressView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLProgressView.swift; path = Sources/General/ZLProgressView.swift; sourceTree = ""; }; - EFC4D4B2C0266C20347F96DE5AA940D9 /* DDBasicControlsKit_Private.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DDBasicControlsKit_Private.modulemap; sourceTree = ""; }; - EFD256182E9A17F827A1B6C7D32A35DD /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDWebImageCompat.m; sourceTree = ""; }; - F040B492EFDF0AFBD24823DBC534B320 /* EKAttributes+PositionConstraints.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EKAttributes+PositionConstraints.swift"; path = "Source/Model/EntryAttributes/EKAttributes+PositionConstraints.swift"; sourceTree = ""; }; - F06179819437CD857BC99036F6557E2C /* MAOfflineMapViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOfflineMapViewController.h; path = AMapNaviKit.framework/Headers/MAOfflineMapViewController.h; sourceTree = ""; }; - F0929DCCF9C01C013E77B5DB0678C5B3 /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; - F09D6602F5FCF95A8ED208D36104E477 /* DDMAMapKit_Private.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDMAMapKit_Private.debug.xcconfig; sourceTree = ""; }; - F0D5E066D8BE3508DB0D643DF3BB08DC /* ImageCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageCache.swift; path = Sources/Cache/ImageCache.swift; sourceTree = ""; }; - F0D8101C65BB03367A1F60BD3741C443 /* DDControlsKit_Private.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDControlsKit_Private.release.xcconfig; sourceTree = ""; }; - F11BDB4C0CE14C0F34E32CF606B9F9C8 /* MAMapCustomStyleOptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMapCustomStyleOptions.h; path = AMapNaviKit.framework/Headers/MAMapCustomStyleOptions.h; sourceTree = ""; }; - F11C5D34D44394CFB2C5ADD740509CC9 /* DDPersistenceKit_Private */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = DDPersistenceKit_Private; path = libDDPersistenceKit_Private.a; sourceTree = BUILT_PRODUCTS_DIR; }; - F11EA65D845C4FA3C0A6F40BB8E10CF5 /* ZLCameraConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLCameraConfiguration.swift; path = Sources/General/ZLCameraConfiguration.swift; sourceTree = ""; }; - F1333F5272D4B2B7AABF8D2C55EDBE43 /* NSMutableAttributedString+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableAttributedString+DDCategory.m"; path = "DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSMutableAttributedString+DDCategory.m"; sourceTree = ""; }; - F1C0E8D46769E9C329D112D8ABD96732 /* DDBaseTextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDBaseTextView.h; path = DDBasicControlsKit_Private/Classes/DDBaseTextView/DDBaseTextView.h; sourceTree = ""; }; - F2007F3CB73FBA9964EAA5A89F892050 /* JXCategoryTitleVerticalZoomCellModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryTitleVerticalZoomCellModel.m; path = Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomCellModel.m; sourceTree = ""; }; - F2447B2BD2E445D4684FF17AB3FE3EAD /* RxNavigationControllerDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxNavigationControllerDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxNavigationControllerDelegateProxy.swift; sourceTree = ""; }; - F247FBBD0C9898AABCAFFD2447C8DABD /* AMapLocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapLocationManager.h; path = AMapLocationKit.framework/Headers/AMapLocationManager.h; sourceTree = ""; }; - F264CFD0AE4632E0FD8EBAB9513B169C /* GradientView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GradientView.swift; path = Source/Utils/GradientView.swift; sourceTree = ""; }; - F2C475F5C3DDC4D613BB54F6EC701363 /* DDUtilsSwiftKit_Private.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DDUtilsSwiftKit_Private.debug.xcconfig; sourceTree = ""; }; - F30E63CC60F0D2B3EE802DB7C288A3FB /* JXCategoryTitleVerticalZoomCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryTitleVerticalZoomCell.m; path = Sources/VerticalZoomTitle/JXCategoryTitleVerticalZoomCell.m; sourceTree = ""; }; - F314F35ABCEA3D13FF8F29D9D1A69159 /* SDImageLoadersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageLoadersManager.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageLoadersManager.m; sourceTree = ""; }; - F338E6DC579560992F3899DAE2EF1CB9 /* UIView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIView.swift; path = DDUIKit/Classes/UIView/UIView.swift; sourceTree = ""; }; - F36D81DEBFEB19B8FEFA60597AC42595 /* UIView+Animations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Animations.swift"; path = "PopupDialog/Classes/UIView+Animations.swift"; sourceTree = ""; }; - F375C7DA720F6C0C81573E458E9A4020 /* Pods-OrderScheduling.prerelease.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-OrderScheduling.prerelease.xcconfig"; sourceTree = ""; }; - F3ACEA525758D1E18127B9BCEE0C265C /* DDImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDImage.swift; path = DDControlsKit_Private/Classes/DDImage/DDImage.swift; sourceTree = ""; }; - F3C59223E4ACAC4319150C29731AC850 /* UISwitch+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UISwitch+DDCategory.h"; path = "DDCategoryKit_Private/Classes/UISwitch+DDCategory/UISwitch+DDCategory.h"; sourceTree = ""; }; - F3C6D62C79E5D87FAB325F53195052B0 /* AMapNaviWalkView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviWalkView.h; path = AMapNaviKit.framework/Headers/AMapNaviWalkView.h; sourceTree = ""; }; - F3D49D2FD69EFBD78E4034C3AEC6577E /* SDImageCodersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCodersManager.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageCodersManager.h; sourceTree = ""; }; - F3FDEA9E2FBBA9164D2DE1E6A2CF036B /* Kingfisher.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Kingfisher.debug.xcconfig; sourceTree = ""; }; - F40982896989E38B4742A81E7CC344B4 /* TextInput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextInput.swift; path = RxCocoa/Common/TextInput.swift; sourceTree = ""; }; - F41A87A84B122BF197E2AEDAF8C61252 /* UINavigationItem+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UINavigationItem+DDCategory.m"; path = "DDCategoryKit_Private/Classes/UINavigationItem+DDCategory/UINavigationItem+DDCategory.m"; sourceTree = ""; }; - F429EA86FA44E33584A442245B1808AA /* EKAttributes+Shadow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EKAttributes+Shadow.swift"; path = "Source/Model/EntryAttributes/EKAttributes+Shadow.swift"; sourceTree = ""; }; - F43014761DBC88A481A43AB0D0C370FC /* ZLPhotoManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLPhotoManager.swift; path = Sources/General/ZLPhotoManager.swift; sourceTree = ""; }; - F45E2E4C287E99D187D4A1DB6F7BC294 /* ZFPlayerConst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFPlayerConst.h; path = DDZFPlayerKit_Private/Classes/Core/ZFPlayerConst.h; sourceTree = ""; }; - F49BDDB4952C5AB6D71917A2B1A40633 /* MJRefresh-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MJRefresh-dummy.m"; sourceTree = ""; }; - F4F68B14FE695D9C2C2D7576508833C5 /* MAGeodesicPolyline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAGeodesicPolyline.h; path = AMapNaviKit.framework/Headers/MAGeodesicPolyline.h; sourceTree = ""; }; - F4F93F49467F0FB866E2CC8ADB4E6580 /* ConstraintViewDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintViewDSL.swift; path = Sources/ConstraintViewDSL.swift; sourceTree = ""; }; - F53702FA92D3BE5E71762BADC1DE9D13 /* SharedSequence+Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SharedSequence+Operators.swift"; path = "RxCocoa/Traits/SharedSequence/SharedSequence+Operators.swift"; sourceTree = ""; }; - F56489D13811035AB3474A613A684B37 /* RequestTaskMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestTaskMap.swift; path = Source/RequestTaskMap.swift; sourceTree = ""; }; - F56B63C279BD270DB88CF414880FCC24 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "DDWebImageKit_Private/Classes/SDWebImage/Core/UIImage+MultiFormat.h"; sourceTree = ""; }; - F59A80C7846EDAE9C2DB93A2BD7FA63B /* Infallible+Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+Operators.swift"; path = "RxSwift/Traits/Infallible/Infallible+Operators.swift"; sourceTree = ""; }; - F5A7774A11BB9917E8EE657319AE2549 /* ConstraintMakerFinalizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerFinalizable.swift; path = Sources/ConstraintMakerFinalizable.swift; sourceTree = ""; }; - F5BD9CE490CF87092BB8B234FCA349E4 /* ZFPlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZFPlayer.h; path = DDZFPlayerKit_Private/Classes/Core/ZFPlayer.h; sourceTree = ""; }; - F5FBF58841F12B52E17EB40D93DDB5A7 /* UIView+Responder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Responder.swift"; path = "Source/Utils/UIView+Responder.swift"; sourceTree = ""; }; - F627CC00DCD9284122D3CD6D983D873D /* DDUtilsSwiftKit_Private-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDUtilsSwiftKit_Private-prefix.pch"; sourceTree = ""; }; - F66F872117A74BAD54F1D783E5C1EBEB /* Result+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Result+Alamofire.swift"; path = "Source/Result+Alamofire.swift"; sourceTree = ""; }; - F67A501ADF18D25639263D92D6654876 /* DDAudioPlayerKit_Private-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDAudioPlayerKit_Private-prefix.pch"; sourceTree = ""; }; - F69849E1DCC3CB3810D7E5767BAB25C8 /* SDAnimatedImagePlayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImagePlayer.m; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDAnimatedImagePlayer.m; sourceTree = ""; }; - F69E380054270F3E4ECD98A969AF19D5 /* PriorityQueue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PriorityQueue.swift; path = Platform/DataStructures/PriorityQueue.swift; sourceTree = ""; }; - F6A3D4567910BCC6A6221DFC75E5D0E9 /* EKAttributes+PopBehavior.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EKAttributes+PopBehavior.swift"; path = "Source/Model/EntryAttributes/EKAttributes+PopBehavior.swift"; sourceTree = ""; }; - F6A62144C059A91625C1E74A8954ED64 /* ZLFetchImageOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZLFetchImageOperation.swift; path = Sources/General/ZLFetchImageOperation.swift; sourceTree = ""; }; - F6D00CA03F52F8332AAD8FEEC4AFD406 /* ESTabBarController-swift */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "ESTabBarController-swift"; path = "libESTabBarController-swift.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - F72F8157F7793CF06450BEC7A5AFE014 /* Sequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sequence.swift; path = RxSwift/Observables/Sequence.swift; sourceTree = ""; }; - F731947ED4C2E3A9E12E4662FD5BA8EA /* ElementAt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ElementAt.swift; path = RxSwift/Observables/ElementAt.swift; sourceTree = ""; }; - F736FC35BDD67E5655FB0ED07F754CA1 /* UIFont+DDCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIFont+DDCategory.m"; path = "DDCategoryKit_Private/Classes/UIFont+DDCategory/UIFont+DDCategory.m"; sourceTree = ""; }; - F76ACC56BA5AAD1D563E19E5841891D6 /* DDBaseCollectionView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDBaseCollectionView.h; path = DDBasicControlsKit_Private/Classes/DDBaseCollectionView/DDBaseCollectionView.h; sourceTree = ""; }; - F79010A235833C1FD58A192FD49B55FB /* RxTabBarControllerDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTabBarControllerDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxTabBarControllerDelegateProxy.swift; sourceTree = ""; }; - F7B8D7EA1853A8C26F80ECD85BC28919 /* MJRefreshStateHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshStateHeader.m; path = MJRefresh/Custom/Header/MJRefreshStateHeader.m; sourceTree = ""; }; - F7FAC3A404B58F4A9D91C818BE388D3B /* MJRefreshAutoNormalFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoNormalFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m; sourceTree = ""; }; - F808EF213CE7316979D69C89CFB2C8F4 /* DDUITextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDUITextView.swift; path = DDUIKit/Classes/UITextView/DDUITextView.swift; sourceTree = ""; }; - F816B829CBE7F47EFB4BD6AB66C05EB4 /* GraphicsContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GraphicsContext.swift; path = Sources/Image/GraphicsContext.swift; sourceTree = ""; }; - F83D993271FA1E68D39B8CE86244EAAE /* SingleAssignmentDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SingleAssignmentDisposable.swift; path = RxSwift/Disposables/SingleAssignmentDisposable.swift; sourceTree = ""; }; - F861AD22ECEACE2BFC4591DBE936550B /* JXCategoryIndicatorDotLineView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryIndicatorDotLineView.m; path = Sources/Indicator/IndicatorViews/JXCategoryIndicatorDotLineView.m; sourceTree = ""; }; - F869CFE581148CA743D129D15A275C6F /* JXCategoryTitleImageCellModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JXCategoryTitleImageCellModel.h; path = Sources/TitleImage/JXCategoryTitleImageCellModel.h; sourceTree = ""; }; - F90BBC29F391B2F3F78413CE035F55AB /* AMapNaviKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviKit.h; path = AMapNaviKit.framework/Headers/AMapNaviKit.h; sourceTree = ""; }; - F94B09B14159E9F93841B7999009E04F /* SDImageGIFCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageGIFCoder.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageGIFCoder.h; sourceTree = ""; }; - F95089D6AAE2F56A4AE183766CCBA2C7 /* _RX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _RX.h; path = RxCocoa/Runtime/include/_RX.h; sourceTree = ""; }; - F975F80BEF4FB7FC7F8A9AF822B4F520 /* Runtime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Runtime.swift; path = Sources/Utility/Runtime.swift; sourceTree = ""; }; - F97A959B6445AEF8D2365927D0D173DC /* AMapLocation-NO-IDFA.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "AMapLocation-NO-IDFA.debug.xcconfig"; sourceTree = ""; }; - F9A279C65F7CCAC189B64F5C731B0CCB /* ConstraintAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintAttributes.swift; path = Sources/ConstraintAttributes.swift; sourceTree = ""; }; - F9BE8BE147ADE304F6D8BDC1E3DE3E7E /* NSBezierPath+SDRoundedCorners.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBezierPath+SDRoundedCorners.h"; path = "DDWebImageKit_Private/Classes/SDWebImage/Private/NSBezierPath+SDRoundedCorners.h"; sourceTree = ""; }; - F9C8B8D6AB1298128BC2D1FB830BC314 /* DDBaseScrollView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDBaseScrollView.m; path = DDBasicControlsKit_Private/Classes/DDBaseScrollView/DDBaseScrollView.m; sourceTree = ""; }; - FA095F3E6860C75AB30F71DF7E77D7EF /* PopupDialog-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PopupDialog-dummy.m"; sourceTree = ""; }; - FA42C3E9A0BF15E687C4271CFC92E8D7 /* DDBasicControls.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDBasicControls.h; path = DDBasicControlsKit_Private/Classes/DDBasicControls.h; sourceTree = ""; }; - FA6A20F53C1068FD62DDBAD78DC9CA28 /* KFImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KFImage.swift; path = Sources/SwiftUI/KFImage.swift; sourceTree = ""; }; - FA722024DF90D36BDC855C49AA1E84E1 /* ConnectableObservableType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConnectableObservableType.swift; path = RxSwift/ConnectableObservableType.swift; sourceTree = ""; }; - FAB3C1ED4D9D5D6192E16F83E28CD1F3 /* UIImageView+DDWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+DDWebCache.h"; path = "DDWebImageKit_Private/Classes/DDWebImage/UIImageView+DDWebCache.h"; sourceTree = ""; }; - FABB86AAC91735D26EF7EFE896A6E29C /* DDLogKit_Private.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DDLogKit_Private.modulemap; sourceTree = ""; }; - FB4DBAD777C369DC82B55B8F1902E69B /* DDFontKit_Private-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DDFontKit_Private-umbrella.h"; sourceTree = ""; }; - FB4F8B6DC94DD898D02B59D0ECE08F04 /* UIScrollView+MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+MJExtension.h"; path = "MJRefresh/UIScrollView+MJExtension.h"; sourceTree = ""; }; - FB5B9559B4A5F0D29C7FE2478C5F3781 /* Platform.Darwin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.Darwin.swift; path = Platform/Platform.Darwin.swift; sourceTree = ""; }; - FB83826263A364A1DB23D827C1999862 /* EKNotificationMessageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EKNotificationMessageView.swift; path = Source/MessageViews/EKNotificationMessageView.swift; sourceTree = ""; }; - FB8DF17900F7D22134FA3FFD0126E1C5 /* MATraceLocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MATraceLocation.h; path = AMapNaviKit.framework/Headers/MATraceLocation.h; sourceTree = ""; }; - FB908FBF9F755AFB285A27A674140F71 /* DDMAMapKit_Private-DDMAMapKit_Private */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "DDMAMapKit_Private-DDMAMapKit_Private"; path = DDMAMapKit_Private.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - FBAEB9EA44537B5C66C8C858EAA4FDC7 /* DDUICollectionView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDUICollectionView.swift; path = DDUIKit/Classes/UICollectionView/DDUICollectionView.swift; sourceTree = ""; }; - FBD58529A4B13653F254FD8AF594991D /* SDImageIOAnimatedCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOAnimatedCoder.h; path = DDWebImageKit_Private/Classes/SDWebImage/Core/SDImageIOAnimatedCoder.h; sourceTree = ""; }; - FBD9915E8EE1AFCEC69B2B40F6151ADE /* MKAnnotationView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MKAnnotationView+WebCache.h"; path = "DDWebImageKit_Private/Classes/SDWebImageMapKit/MapKit/MKAnnotationView+WebCache.h"; sourceTree = ""; }; - FC2B8B1BA43DEED3EA2678AD43F4436C /* DDBaseViewModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDBaseViewModel.m; path = DDBasicControlsKit_Private/Classes/DDBaseViewModel/DDBaseViewModel.m; sourceTree = ""; }; - FC5181D72AF2B025E04FD2CC28CBDD64 /* EncryptedMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EncryptedMessage.swift; path = Source/EncryptedMessage.swift; sourceTree = ""; }; - FCF62EAF60C5015AF8A883FEEE83907C /* ScheduledItemType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScheduledItemType.swift; path = RxSwift/Schedulers/Internal/ScheduledItemType.swift; sourceTree = ""; }; - FCFEDC61BDCE6F30B5FCE1F4EF2FCA17 /* AMapNaviOpenNetwrokProxyManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNaviOpenNetwrokProxyManager.h; path = AMapNaviKit.framework/Headers/AMapNaviOpenNetwrokProxyManager.h; sourceTree = ""; }; - FD2A3D63A02D06CF00281FEE7DA6C722 /* JXCategoryImageCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JXCategoryImageCell.m; path = Sources/Image/JXCategoryImageCell.m; sourceTree = ""; }; - FD591A80AEE063F209FAF2EE3021EC1D /* EKAttributes+BackgroundStyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EKAttributes+BackgroundStyle.swift"; path = "Source/Model/EntryAttributes/EKAttributes+BackgroundStyle.swift"; sourceTree = ""; }; - FD64314C379E7F3EB5BD31238B02809F /* DDAlamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDAlamofire.swift; path = DDNetworkingOfAlamofireKit_Private/Classes/DDAlamofire.swift; sourceTree = ""; }; - FD954795EADD3272564F4494F60F7EDC /* BRDatePickerView+BR.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BRDatePickerView+BR.m"; path = "BRPickerView/DatePickerView/BRDatePickerView+BR.m"; sourceTree = ""; }; - FE099C0BE1DF10B4E09029F0CAC6B586 /* Sink.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sink.swift; path = RxSwift/Observables/Sink.swift; sourceTree = ""; }; - FE1FA7991B30749BBB0F7124F69A2B0B /* HTTPHeaders.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPHeaders.swift; path = Source/HTTPHeaders.swift; sourceTree = ""; }; - FE3C51C548ACADCC415CC972B8AA138B /* UIView+QuickLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+QuickLayout.swift"; path = "Source/Extensions/QuickLayout/UIView+QuickLayout.swift"; sourceTree = ""; }; - FE678389DCD102CF8E9F47C4B8441257 /* NSMutableParagraphStyle+DDCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableParagraphStyle+DDCategory.h"; path = "DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSMutableParagraphStyle+DDCategory.h"; sourceTree = ""; }; - FE8BE171D5B3ECB90B3FF43F1A9BE1DC /* DDProgressHUD.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDProgressHUD.swift; path = DDProgressHUDKit_Private/Classes/DDProgressHUD.swift; sourceTree = ""; }; - FEA3BC4A0AA3AAF35A6FE025713533A3 /* SnapKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.debug.xcconfig; sourceTree = ""; }; - FEB709FBC8A1D887D7688D12BDDA4AC5 /* DDMALocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDMALocationManager.h; path = DDMAMapKit_Private/Classes/DDMALocation/DDMALocationManager.h; sourceTree = ""; }; - FF55EF0E3D5B0CF7DB8F9CCEC16B88B9 /* DDAutoUIKit_Private.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DDAutoUIKit_Private.modulemap; sourceTree = ""; }; - FF8B264DFE802855D5D67E7CDDABFC3C /* RxRelay */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = RxRelay; path = libRxRelay.a; sourceTree = BUILT_PRODUCTS_DIR; }; - FF90DCE6C8DF4E822D13B2FD0A5552FC /* EventMonitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EventMonitor.swift; path = Source/EventMonitor.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 02495A0526A9148A384297DE6C9821FE /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 08B9FD08F7FD6D30F434840C8FA714DA /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 0B8442FC60C410BBCD0CF69AEDD8E3EF /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 12C88F6788E0E25041D3BFD1CD5C7D29 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 149A22ABB26E1ECB1C03650C590ABC5F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 17990104FFE54436BDAA194EAC7E8DE5 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1B1B2ABAC864873782928E419562C8E5 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1BB536A1913D475DB8E42F987B22460C /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F4EA202E54A8EB0E40C2C79AD1FA1C6 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 27D4F8F4DECFF32B6E0D45E760AB645E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2A677EBF9871ADA41FDE3D0BAA2FBF04 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 326EAB188CB9A80EB8C3A373C259E929 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 362B45E649581E44DD4A82C7AAD67DAB /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3D84F68896F4C855AFD27646663DEBDE /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 492F3958EE7157547DC199F58D38F7D9 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 55CD4B4AE879E5B05ADA877BEC57855A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 56B8A9EBB7197FED5769B6EB761D9547 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 58CA47D34BBF6987CB0C4BE026A3B368 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 61C4C73E476D1535B2604229BAA1DE06 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6354BA5A50CD9F6F6D3A053F7625822B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 638E033E74BC19306D46A076AAD79BB5 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6E9E7115CE7BC24746DDEB5F0E25616D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 81D4EA84926136F0D0AEEBAEE01452A4 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8336D2609010917843D902B67AC3B472 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 86D3753BCD844A14BC583F0971D2B5CE /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 91C28E5F4B5678B51CA36C84DAAC2351 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 9F55DEE06F31302485599F36FF5B115D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A0A168C02FAF5442483E807CEB972E21 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A18735041F772CB4AC8E95B7E4898790 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A6586DAF8F0CF8CE0853304C027BAAAB /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B499446037CB2F4167A41DDE5280893E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C23690D2E28990F2C02177E957655DD8 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CF451192F24DBFBE08BF82B332BFD0E7 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0DB15115A06C936E107DBD0C5D2E46F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D7A90294962B532796BCE2302BA70A54 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D8FE35EB16A315DB7C11F892FCAF8CFE /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DB22184510A5CD7DE25CC9DB75908AD4 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DCCAFADA7F9F2D59832D943426EA69B3 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E103787A6825D8DDFD3747654AA9B93B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FFB565781B9EA643F3320C8E128DB90C /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 00E74745A7A250F4CA76A8F907D7A2F9 /* Support Files */ = { - isa = PBXGroup; - children = ( - 3807B769008A2EE4CCD105890634EAFE /* DDZFPlayerKit_Private.modulemap */, - 81F71DBB04C399A622FE86723570D628 /* DDZFPlayerKit_Private-dummy.m */, - 1C67ECB91C7A40D96665F6F4A427C49F /* DDZFPlayerKit_Private-prefix.pch */, - C13B0001206C640A62A5E2E04C6C9587 /* DDZFPlayerKit_Private-umbrella.h */, - 26E44BAFA303D9F296CB04EEE6A486E2 /* DDZFPlayerKit_Private.debug.xcconfig */, - 7F0214AA38F1CEAC5DA9E004A183DC80 /* DDZFPlayerKit_Private.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/DDZFPlayerKit_Private"; - sourceTree = ""; - }; - 018039353A00085FB9C81E9A0D338A3A /* Support Files */ = { - isa = PBXGroup; - children = ( - C4B16647558A9B771B3905CC83AF8E88 /* RxSwift.modulemap */, - 7DCA95B6996F452F3EE171E19CE9AF58 /* RxSwift-dummy.m */, - 5DD9874FD66AF971A9E685366451F25B /* RxSwift-prefix.pch */, - AB375BF8D1973E65DF4553ED882C0DDE /* RxSwift-umbrella.h */, - 40876F10DB0DAFC2BCF0D3D3FF006558 /* RxSwift.debug.xcconfig */, - 34713360F6BD4606798AA38EDAD714D8 /* RxSwift.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/RxSwift"; - sourceTree = ""; - }; - 022D8D30E96F5769EA0345F8328BBD29 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 06D02539D3B0C017E502911F8C1B680A /* jpush-ios-5.0.1.xcframework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 03F6C1897A5332F7B2BBBD49C3597E74 /* DDBaseTextField */ = { - isa = PBXGroup; - children = ( - 7F26454F2D256FC88F2B6AD5F1A3AB5B /* DDBaseTextField.h */, - 536796DC557774A8360BF83BA16F52AA /* DDBaseTextField.m */, - ); - name = DDBaseTextField; - sourceTree = ""; - }; - 06D9B1EF716C43D8EEEFD95CF9E24277 /* DDLogKit_Private */ = { - isa = PBXGroup; - children = ( - EE3C12B9CE4BD62CEFDA487AFC380296 /* OCLog */, - B39D1123185D782AE4C684CB0E8B8B7D /* Support Files */, - EA7D89E6740391DE59BFFAE7560036F2 /* SwiftLog */, - ); - name = DDLogKit_Private; - path = DDLogKit_Private; - sourceTree = ""; - }; - 0737B11A6AF65F78C3CF128DE77A0E9C /* DDCollectionView */ = { - isa = PBXGroup; - children = ( - 9F127BF93108C5141D82F4B1DC73C17F /* DDCollectionView.swift */, - ); - name = DDCollectionView; - sourceTree = ""; - }; - 091FB38CA86706325600FD163F552C96 /* Support Files */ = { - isa = PBXGroup; - children = ( - 4F7021D7FFFCF1690396142030C52BAC /* SwiftEntryKit.modulemap */, - 48EFDAF744EAA5FEBB6A500C24870491 /* SwiftEntryKit-dummy.m */, - 599936F224D420CBE54D26146C8A58AD /* SwiftEntryKit-prefix.pch */, - 226798F0F42A0B656112DFB464D2ED72 /* SwiftEntryKit-umbrella.h */, - 3705A21F6D5C9B2BD3D689AF2E3AD83C /* SwiftEntryKit.debug.xcconfig */, - E6E382C8CC3828B550CFE1B411D59792 /* SwiftEntryKit.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/SwiftEntryKit"; - sourceTree = ""; - }; - 0A9DAB1035FDF96AB9A24944E8AE61C8 /* DDUIPanGestureRecognizer */ = { - isa = PBXGroup; - children = ( - 148C29FA0CE1ABC35CD096724D64A5E7 /* DDUIPanGestureRecognizer.swift */, - ); - name = DDUIPanGestureRecognizer; - sourceTree = ""; - }; - 0AD73BF3BE0578F9C9DD6BBF37C7CBFF /* Core */ = { - isa = PBXGroup; - children = ( - F9BE8BE147ADE304F6D8BDC1E3DE3E7E /* NSBezierPath+SDRoundedCorners.h */, - 56CF8531B5D158BE68E0B1C29BE65264 /* NSBezierPath+SDRoundedCorners.m */, - E9BB0949121DEB564F39CBB1F31331EC /* NSButton+WebCache.h */, - 498C4A8B3FD5447D5B6B910AF03FC6CE /* NSButton+WebCache.m */, - 9A78FC9AD8169AAD147465A241356279 /* NSData+ImageContentType.h */, - 51A507B1A2D0CE3FD329A654EEB872E6 /* NSData+ImageContentType.m */, - EC4D291E74407DFFB144C84526148B9C /* NSImage+Compatibility.h */, - 70D6E799EC458D6AC16F00B7EDB78A4B /* NSImage+Compatibility.m */, - 9413E14BB8B290E97588E5432B23FE2D /* SDAnimatedImage.h */, - 49BA399F21471B5CB36619A7E488EB11 /* SDAnimatedImage.m */, - E54CB0ECE56F3A274E8E613742729F76 /* SDAnimatedImagePlayer.h */, - F69849E1DCC3CB3810D7E5767BAB25C8 /* SDAnimatedImagePlayer.m */, - A6EF0DCA0CAA0174A8949A76D1CAE70D /* SDAnimatedImageRep.h */, - 1A800B2680C046933AA98E7BF241507A /* SDAnimatedImageRep.m */, - 7DA0F53808B8C0AA239AAAE7361A8539 /* SDAnimatedImageView.h */, - 2DD86580723992F780F2F830A13CBDF0 /* SDAnimatedImageView.m */, - 22942CBE8FDDA86BAFE7897238368F4F /* SDAnimatedImageView+WebCache.h */, - 6857AF4427C07FEB59ACA92B6BDF2199 /* SDAnimatedImageView+WebCache.m */, - B5496CD4E14B0472409CE2CD323640A3 /* SDAssociatedObject.h */, - 522C178DFAAE6C2D641B4251505FBA47 /* SDAssociatedObject.m */, - 426ACC0CB2BF1FC39A89311CF768EFF8 /* SDAsyncBlockOperation.h */, - E0CF4E36EBC551A1499DEDE5076AD3C3 /* SDAsyncBlockOperation.m */, - 632E258E93284619E078FEB3A2B6667A /* SDDeviceHelper.h */, - 41EFD7CBB52D61B19151E2CAAD31A43E /* SDDeviceHelper.m */, - 5D8B7DD59EA4C92A93696E08FB03BDA7 /* SDDiskCache.h */, - 87754DB8E6B2F3DEF68736B7B4CADCCD /* SDDiskCache.m */, - 1B937AC2FB944C6FC562648D22195058 /* SDDisplayLink.h */, - 9A110122034BF53FD4C701DA219A0B44 /* SDDisplayLink.m */, - 3613A096608801D6FD1BF44C98FC2916 /* SDFileAttributeHelper.h */, - C13A03B3256B854FBDD7EB286785A113 /* SDFileAttributeHelper.m */, - 2F9954B4961F79AD2C528D67355158EF /* SDGraphicsImageRenderer.h */, - 926C7B2D9241F96EEAE4177053E800DD /* SDGraphicsImageRenderer.m */, - BD6B267BB1F4635FC5329AAC62A54EF4 /* SDImageAPNGCoder.h */, - AF86A73839D53B6325786B9E79F1A871 /* SDImageAPNGCoder.m */, - 4DA182BBEDF3EEB595A5631C82EDB5D7 /* SDImageAssetManager.h */, - 46A2EEB0968D4F447F321284460CF594 /* SDImageAssetManager.m */, - C9449CDD5B37F1FA78E8BAE5C9DE0546 /* SDImageAWebPCoder.h */, - C8A37E16ABF1F765BD2F306F276A9BFC /* SDImageAWebPCoder.m */, - B31E895147F0B222F9A8F45E1A2C876D /* SDImageCache.h */, - 2D1725DDB3E1952143F821A86C658B11 /* SDImageCache.m */, - C29B82C1A35C3064AF29EED840507353 /* SDImageCacheConfig.h */, - CAAA47E3059B1B6A4EC16751C5895DD6 /* SDImageCacheConfig.m */, - 2C9F61CE6ED2DF8974E42B60C415199B /* SDImageCacheDefine.h */, - 2ABAA3E262A876DF8D6CF9B8AAB8DD84 /* SDImageCacheDefine.m */, - 4FA431B39B3D18FEF1C27A7AA65D0D7B /* SDImageCachesManager.h */, - C3FFBB9632D75DDBE9FD5A649334EDAB /* SDImageCachesManager.m */, - C319A07391F1A2F55BEEE27E267540B7 /* SDImageCachesManagerOperation.h */, - 27A084BC528FABAFAD9D6D01EA8A4143 /* SDImageCachesManagerOperation.m */, - 65B2DEE795D9C8799CE151F52AE9773E /* SDImageCoder.h */, - 4FAD17EC8C7A83C70F900C8152745963 /* SDImageCoder.m */, - A04508225E6AEC8C92FEAF73DFD200D0 /* SDImageCoderHelper.h */, - 15B41E543A86CDD8E132B8E735A02993 /* SDImageCoderHelper.m */, - F3D49D2FD69EFBD78E4034C3AEC6577E /* SDImageCodersManager.h */, - B7AB14FBCA5BC37BED3B5BCEBBF6E76F /* SDImageCodersManager.m */, - 8E96ABA47DCA2979529FDEE0238B2EC7 /* SDImageFrame.h */, - D828469C73EA271E77A59D7E03735EA8 /* SDImageFrame.m */, - F94B09B14159E9F93841B7999009E04F /* SDImageGIFCoder.h */, - 462DC57EE11DEC5C7ADE4D9A37B51625 /* SDImageGIFCoder.m */, - 86AE5B4011EC57E43AD9C11DD53BEB76 /* SDImageGraphics.h */, - 7B0AA00AC3C94D7CC89DAC7137913CAB /* SDImageGraphics.m */, - 89A7C174EBFD6AAA5B775D63BA1629DF /* SDImageHEICCoder.h */, - 3B149A2E0D291A7392934B51EA8DD0A2 /* SDImageHEICCoder.m */, - FBD58529A4B13653F254FD8AF594991D /* SDImageIOAnimatedCoder.h */, - 90C47C5148117C497AD2C834C048C21B /* SDImageIOAnimatedCoder.m */, - 9442CA2161D2AE5B59392E17CFD384B1 /* SDImageIOAnimatedCoderInternal.h */, - 66DB2925D53290049D355D6B00A86FFD /* SDImageIOCoder.h */, - 952BD25D85E7F1D25827AB7BFC26B4E9 /* SDImageIOCoder.m */, - 6BE521AD3CF2C53539D5D3AD834A7317 /* SDImageLoader.h */, - A09335CA1C8179E9CEA8C80B4C4B6642 /* SDImageLoader.m */, - 80158840C248659DCB2FDA6F747B60BD /* SDImageLoadersManager.h */, - F314F35ABCEA3D13FF8F29D9D1A69159 /* SDImageLoadersManager.m */, - 4471CA9489E40B759C857EA2C365EDE9 /* SDImageTransformer.h */, - 7AD064120AE0C72F43D3E534DD60772C /* SDImageTransformer.m */, - 33BCE71E5BE6A4D8F73BBC0EEF702D17 /* SDInternalMacros.h */, - A7115A9F7CE8071343308945E6AE1C2F /* SDInternalMacros.m */, - 0DFF9FCCF3FC76F60F991DBF190E4CB4 /* SDMemoryCache.h */, - 5184A22E35E8C6770D064988AFACAE4C /* SDMemoryCache.m */, - 869D5DFE9DD1A2268D9D13DA5B9EC726 /* SDmetamacros.h */, - 19285907593533A6AA9EB666187C70F5 /* SDWeakProxy.h */, - A37822F05945180B0ADB67D7E061F3C6 /* SDWeakProxy.m */, - 657DED17020554A52B02991B5355787E /* SDWebImage.h */, - 06F19A1142B68925C3423F5D9118B4DC /* SDWebImageCacheKeyFilter.h */, - 9097278903BF01262442BB7B4F02FCCC /* SDWebImageCacheKeyFilter.m */, - 79B1E784B755D1AD12181BE9233EF004 /* SDWebImageCacheSerializer.h */, - 2BAFEB0AC8934BC3B90191ECEA295D64 /* SDWebImageCacheSerializer.m */, - 023378F8A559DBD8D97CE6E8CCDF1EB2 /* SDWebImageCompat.h */, - EFD256182E9A17F827A1B6C7D32A35DD /* SDWebImageCompat.m */, - D9AD4F7389BBA58001D5A859EB85B585 /* SDWebImageDefine.h */, - 34938F9CC1D16CB3D3D73E959816D3E3 /* SDWebImageDefine.m */, - DDABBF11E1ABB03D2E87EDAC1FD0A620 /* SDWebImageDownloader.h */, - 416A70C7DC57E4465E15FAEAC9E1F89A /* SDWebImageDownloader.m */, - E13FF61B48E4C0D427DEE769C21B81F7 /* SDWebImageDownloaderConfig.h */, - 1D8F67E70271E3E66BC0DF5A51A979E7 /* SDWebImageDownloaderConfig.m */, - 779AC19DCC5922311DBA34FAE13EAEFF /* SDWebImageDownloaderDecryptor.h */, - 6335BE501B92B10DA9E34548D99F2DC3 /* SDWebImageDownloaderDecryptor.m */, - 84DB4A762C0D0C2F854D64D79D115052 /* SDWebImageDownloaderOperation.h */, - CD325B340468FE5EF69FE4F3EB703AE5 /* SDWebImageDownloaderOperation.m */, - 085373687E7A083B3531ED2646B272EE /* SDWebImageDownloaderRequestModifier.h */, - 8A71975A18BF8BF8BD89D40365861D8E /* SDWebImageDownloaderRequestModifier.m */, - 25FA9D728A1914EACE0A73F28DF83C74 /* SDWebImageDownloaderResponseModifier.h */, - 40A2E345E1BDEDC00DF59C9B2596A108 /* SDWebImageDownloaderResponseModifier.m */, - 5B50859502D1B19867D7EA919623A0CE /* SDWebImageError.h */, - 7085F55B8770E2A80C482C0260D650F5 /* SDWebImageError.m */, - A6252F1D08A7FF98BE7D2CCECA7BE45E /* SDWebImageIndicator.h */, - 6A8BE87DA95CA06EDD149CEC4DD022EC /* SDWebImageIndicator.m */, - 18E641006679281D6DC4518EF893F03A /* SDWebImageManager.h */, - 26C221C17DDF5C5FC87D071352FD7CB2 /* SDWebImageManager.m */, - 5CC1150024525BD9BEC30E9860D321B3 /* SDWebImageOperation.h */, - BDB973BC6B942C9A7ACE838891512FAC /* SDWebImageOperation.m */, - DF5053DCE0FC4754ABF3BFA5A6FD68F8 /* SDWebImageOptionsProcessor.h */, - 2817D92C2BEAFB54CF084528084DBBCC /* SDWebImageOptionsProcessor.m */, - 6096B34CC809CFEEF4B6AB3C297A5E15 /* SDWebImagePrefetcher.h */, - 027A9E5311A914D744DDAD84E24700DC /* SDWebImagePrefetcher.m */, - 814EB8D913B261BD1FC90D0860E810E3 /* SDWebImageTransition.h */, - E4A4E116DE213028792AEB972C8C12D2 /* SDWebImageTransition.m */, - BDE45026A07554106E56EAB1DFCFB909 /* SDWebImageTransitionInternal.h */, - D3D5F3EE72923785B5ACA03ADDCC6CCD /* UIButton+WebCache.h */, - 7D479A93404A798DA861ABBD79FD2E5A /* UIButton+WebCache.m */, - 718A346C9ADD65005FF57FF347E2C573 /* UIColor+SDHexString.h */, - 36298AA4A4FE034762B42BE21FB2A826 /* UIColor+SDHexString.m */, - 0406F09F5AE7A03A5CD0A573CD06C037 /* UIImage+ExtendedCacheData.h */, - 598CBDC2759DC5A39189E1145284EEC2 /* UIImage+ExtendedCacheData.m */, - 98195C66125642D3183345871C8CA849 /* UIImage+ForceDecode.h */, - 2F922C5772AFAFDAF4D4D9869570F846 /* UIImage+ForceDecode.m */, - 5367231B2744CCA950E57A1C9EA48E34 /* UIImage+GIF.h */, - CC1A6EA952868E1B1F4A942353DBE9C6 /* UIImage+GIF.m */, - 24CB2F3041D8659BA7302393256B9672 /* UIImage+MemoryCacheCost.h */, - 41899BEF290A56E1759DF59E6A5F3AEC /* UIImage+MemoryCacheCost.m */, - D230AE2AB8C8AAA0420E8B652CCE29D2 /* UIImage+Metadata.h */, - 9BBDBB6FA348C40B5FA3462EC0B5A081 /* UIImage+Metadata.m */, - F56B63C279BD270DB88CF414880FCC24 /* UIImage+MultiFormat.h */, - BC465FF8CCC797DDD39F72CE05907ABA /* UIImage+MultiFormat.m */, - 847E7C1B061013837E3A69D5B2318B7C /* UIImage+Transform.h */, - 7B5101DF3F3A75E32B40A1BBB8C07F95 /* UIImage+Transform.m */, - 8BF3C92827BD283E4A278321C4ACC3B0 /* UIImageView+HighlightedWebCache.h */, - F0929DCCF9C01C013E77B5DB0678C5B3 /* UIImageView+HighlightedWebCache.m */, - AC347FB9F385025D134DC6ADB74E29B2 /* UIImageView+WebCache.h */, - 5C03DF56DF571ECFC414A1E4DB5148D7 /* UIImageView+WebCache.m */, - E1D1D28D7494F778CC60C149BC7097CE /* UIView+WebCache.h */, - 153F0BEDCBFEB268003315167CB6A723 /* UIView+WebCache.m */, - D7D5AE346DB5672BA9E2CB1469B9C858 /* UIView+WebCacheOperation.h */, - 6EE069E2B488F1ECF47333C4E71C1FC5 /* UIView+WebCacheOperation.m */, - ); - name = Core; - sourceTree = ""; - }; - 0B4B97BBA231A376B20281FEF722637D /* DDUtilsSwiftKit_Private */ = { - isa = PBXGroup; - children = ( - 88961A355CED62D100E8EBD00F699FFC /* ApplicationInfo */, - B8738CD38139B426E769D26B460CE4FA /* DeviceInfo */, - CA50428624F966E89806A56EE3F63880 /* FileManager */, - 16FBDCE8C6761BB9EBB28629A6FC0D54 /* Support Files */, - 7F2CB8FDDB3522B39E647F5E714127A0 /* UrlLinks */, - ); - name = DDUtilsSwiftKit_Private; - path = DDUtilsSwiftKit_Private; - sourceTree = ""; - }; - 0D9D9E964F82B22CCED0232B808D855E /* UITableViewCell */ = { - isa = PBXGroup; - children = ( - B4F25F41C1101333FD424AA1FE2CBF4D /* DDUITableViewCell.swift */, - 1513C684FAA95B8BDFE57A3DE58BA4AA /* UITableViewCell.swift */, - ); - name = UITableViewCell; - sourceTree = ""; - }; - 0DCC14C8FAB8FA536DC00D3A73480205 /* DDMALocation */ = { - isa = PBXGroup; - children = ( - FEB709FBC8A1D887D7688D12BDDA4AC5 /* DDMALocationManager.h */, - 46232E29C2154F43BFFFAE1520C32F10 /* DDMALocationManager.m */, - ); - name = DDMALocation; - sourceTree = ""; - }; - 0EBE4E25705C6C20841244B88F34FED2 /* Overlay */ = { - isa = PBXGroup; - children = ( - 54A206BC69EC53E7599908DB6CED9A62 /* MABaseOverlay+DDCategory.h */, - 3916FA9DF3B273C25E7A7E90AFF8B94F /* MABaseOverlay+DDCategory.m */, - ); - name = Overlay; - sourceTree = ""; - }; - 0FC5DA08B4A44AFCED30763BBDEB99B2 /* ZLPhotoBrowser */ = { - isa = PBXGroup; - children = ( - 39056954D1FDB16702181AEBDF412658 /* Core */, - 79D5E266F9FD6A7E7DD1A8D7C4CF15AC /* Resources */, - 16341B9EFCD8FD34F2C447E56FCE4F68 /* Support Files */, - ); - name = ZLPhotoBrowser; - path = ZLPhotoBrowser; - sourceTree = ""; - }; - 10B821C608C5E57239D7D60B79FB0A0A /* UILabel */ = { - isa = PBXGroup; - children = ( - D440CB37BA34B299E9404C60DA8AA061 /* DDUILabel.swift */, - 0B9D719A08ECCEB67D4ED287E12478CE /* UILabel.swift */, - ); - name = UILabel; - sourceTree = ""; - }; - 10E7B3106FDB7E3A31188F2062967517 /* Support Files */ = { - isa = PBXGroup; - children = ( - 78E7F03AF7705EB5A80F42B781CF14CD /* SwiftyRSA.modulemap */, - 4DA9A6E5B948AF8AED6CD1839F7CBDC4 /* SwiftyRSA-dummy.m */, - 50C2E1096742BB2205654C122CF15A02 /* SwiftyRSA-prefix.pch */, - 370532CCD19CE547D32AF792C93EE248 /* SwiftyRSA-umbrella.h */, - 998DA7B38BC2237AEA6230DFF18B9B7F /* SwiftyRSA.debug.xcconfig */, - B3CD0776ABDED97153A49C6FFEF28611 /* SwiftyRSA.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/SwiftyRSA"; - sourceTree = ""; - }; - 11B5E5EEB7D008F7426AC0FDF2942D92 /* Support Files */ = { - isa = PBXGroup; - children = ( - AF777E532E08E2C6872AAC86019BE4E8 /* IQKeyboardManagerSwift.modulemap */, - 692CC13D213FAC30622EE61F9BE59763 /* IQKeyboardManagerSwift-dummy.m */, - 35FF28F1C978832822343F89E554FAA6 /* IQKeyboardManagerSwift-prefix.pch */, - DAB598E6A39EA2D18270D5C97CE121FA /* IQKeyboardManagerSwift-umbrella.h */, - 7CB5913E7C3EEFA536149605E932C168 /* IQKeyboardManagerSwift.debug.xcconfig */, - BCA4322CF19F0EF5B8D6F291D3C95A12 /* IQKeyboardManagerSwift.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/IQKeyboardManagerSwift"; - sourceTree = ""; - }; - 123363DA7822739A01DA1CA4E66F5B44 /* DDBaseImageView */ = { - isa = PBXGroup; - children = ( - 347979FE86A13B4C3ABA621A32CB62DE /* DDBaseImageView.h */, - 568BCEEEBC2986D1AADFB984FF7577BB /* DDBaseImageView.m */, - ); - name = DDBaseImageView; - sourceTree = ""; - }; - 1587FCCEE47EC3EF27CC91709D6CEA85 /* Resources */ = { - isa = PBXGroup; - children = ( - 735304CE313B6E93886A317EC3F4FEF2 /* BRPickerView.bundle */, - ); - name = Resources; - sourceTree = ""; - }; - 16341B9EFCD8FD34F2C447E56FCE4F68 /* Support Files */ = { - isa = PBXGroup; - children = ( - 43F4DAC646C434FF2C73B5370BC3D876 /* ZLPhotoBrowser.modulemap */, - 058FEC3140761826C1DB3A0F0D55D920 /* ZLPhotoBrowser-dummy.m */, - 845EFC8F66DA9A0B0471EC67D9911CDB /* ZLPhotoBrowser-prefix.pch */, - 648827F2C00313932F4B093D5730885E /* ZLPhotoBrowser-umbrella.h */, - B4A4770CC67D0EA235C5E9149674D857 /* ZLPhotoBrowser.debug.xcconfig */, - 779EDC7779B234CD9A467423080BE58F /* ZLPhotoBrowser.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/ZLPhotoBrowser"; - sourceTree = ""; - }; - 16FBDCE8C6761BB9EBB28629A6FC0D54 /* Support Files */ = { - isa = PBXGroup; - children = ( - 68B1D6DDFAB4EE712F4F2D47B71C4595 /* DDUtilsSwiftKit_Private.modulemap */, - 469FEE30B642194D50EECEF1B3350498 /* DDUtilsSwiftKit_Private-dummy.m */, - F627CC00DCD9284122D3CD6D983D873D /* DDUtilsSwiftKit_Private-prefix.pch */, - 5530C1CDAF74A3A4390B0D4A4A5114BC /* DDUtilsSwiftKit_Private-umbrella.h */, - F2C475F5C3DDC4D613BB54F6EC701363 /* DDUtilsSwiftKit_Private.debug.xcconfig */, - 1C06341F09287851FFC3FD086A6124E8 /* DDUtilsSwiftKit_Private.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/DDUtilsSwiftKit_Private"; - sourceTree = ""; - }; - 190EF7C1D93D67A29E227C8D1F1776AD /* RxCocoa */ = { - isa = PBXGroup; - children = ( - F95089D6AAE2F56A4AE183766CCBA2C7 /* _RX.h */, - B500A6A869EB38D0D880E1BF8D49D6C8 /* _RX.m */, - A5C1B76BD0CBB68330CE7E8EF4AD3313 /* _RXDelegateProxy.h */, - CF14298B31534E097A475D9C054AE38D /* _RXDelegateProxy.m */, - DD9BCD7BD7083FAF3307D81DF81F7C46 /* _RXKVOObserver.h */, - 40D535D7C4DF68F2B5AFB977FCA58DB1 /* _RXKVOObserver.m */, - 14ED7DE56301CCEBA5CD72994F13F7D6 /* _RXObjCRuntime.h */, - 6D7AC1021F0A3A36970B9F4952ABB573 /* _RXObjCRuntime.m */, - 34168E57D403C1E21D2EA1ED334153C8 /* Bag.swift */, - BDDBFCE276A131EBB993532F71DBB2E3 /* BehaviorRelay+Driver.swift */, - C2B30E589629B61219540929CD7847C3 /* ControlEvent.swift */, - B1AA9B165270C0157D0F344861B8D6D1 /* ControlEvent+Driver.swift */, - 344F0F6866E65EB5164258A81E6F9613 /* ControlEvent+Signal.swift */, - 9F1D62E18BCC5A0F453C5AA283BDD386 /* ControlProperty.swift */, - 862ABDF179BBEF97F8C92327EFA8274E /* ControlProperty+Driver.swift */, - 73C5D716985D6A9FC27099D22D4B49DC /* ControlTarget.swift */, - 381408FAF18C91E6B087F673947BBAF9 /* DelegateProxy.swift */, - 8C7EBBE1CA496181F88338AA121192DB /* DelegateProxyType.swift */, - 9759660E00B36943B3182DF3F4A8797F /* DispatchQueue+Extensions.swift */, - 13369AB30EF547AC897102096804BD8F /* Driver.swift */, - D6326621A7E3A533A7086C0D6193C1E8 /* Driver+Subscription.swift */, - 5B77C3205DCCF10BC1C817714EC01462 /* Infallible+Bind.swift */, - 195D2751CB51366D09A9B380BD68A086 /* InfiniteSequence.swift */, - 91567B25746861211EFCF26D50455EF5 /* ItemEvents.swift */, - 4ADC7A37A5B63903E0D95C418084602F /* KVORepresentable.swift */, - 3E62308DA6F5F5F56C4F7D2B33EBE279 /* KVORepresentable+CoreGraphics.swift */, - 9810D334802900F0950C50EC15F98587 /* KVORepresentable+Swift.swift */, - 60EF3B80C615D5A990E3DF57C927E9CD /* NotificationCenter+Rx.swift */, - A7944D1C40A7D9A312109C07AD7D23DE /* NSButton+Rx.swift */, - E5304BD2E04EDB1DF6954A3EA072C79F /* NSControl+Rx.swift */, - 6A8E35CED9F0F349320B9036A24B4C8D /* NSObject+Rx.swift */, - 2D3CC0F4DE0762CC5418409448E4B854 /* NSObject+Rx+KVORepresentable.swift */, - AA77BE7C3BCC65C4BD78B9CB0EAB4EAB /* NSObject+Rx+RawRepresentable.swift */, - 9C0372FB495EE23AA7290F4969203BC4 /* NSSlider+Rx.swift */, - 88E9D5C19171FD2F658F9EB3ECB18BA6 /* NSTextField+Rx.swift */, - 51AE42539088EFCA54ABA508DD8106DB /* NSTextStorage+Rx.swift */, - 227385DFB9BD93899C65F2800AFA2C5B /* NSTextView+Rx.swift */, - A33332BB8DE0C04C8C1445A7D3B6C879 /* NSView+Rx.swift */, - 26851AF6F5EBFADD0D752DEB55869AEB /* Observable+Bind.swift */, - D8B4EC3CA42A6FBE9D724058541231B3 /* ObservableConvertibleType+Driver.swift */, - 3E3F694548695F4C19B672C151FBF7CB /* ObservableConvertibleType+SharedSequence.swift */, - 8E279A08B259B797B34DCDC2CCDCB34B /* ObservableConvertibleType+Signal.swift */, - 218DC6BF23D33E9C1057D41CB1995EC7 /* Platform.Darwin.swift */, - 552A8AA3F44EAAF5EAEC8F40E021C291 /* Platform.Linux.swift */, - F69E380054270F3E4ECD98A969AF19D5 /* PriorityQueue.swift */, - 24C99B78F7B41E05CCBDD88A5BDB004E /* PublishRelay+Signal.swift */, - 92E4EEEDDDB44A6C80BAFE943472DC5A /* Queue.swift */, - 58E19414300B9B38EE7D7B98461DA21C /* RecursiveLock.swift */, - 5CFC02E1D254D0A828F4F0EC3F8A5E5B /* RxCocoa.h */, - DC7D9409D303846FA1887BF2C9F6C9D0 /* RxCocoa.swift */, - 5143BA28095773A5FBD89ADFA3D511A1 /* RxCocoaObjCRuntimeError+Extensions.swift */, - 5DB7B496DD62ACC8A4B2214846AD6B63 /* RxCocoaRuntime.h */, - EA7D93F4D43674BDC56D4B198D2ABEE8 /* RxCollectionViewDataSourcePrefetchingProxy.swift */, - 118D92AA162B4B2BA4022172E3B3D2DA /* RxCollectionViewDataSourceProxy.swift */, - 1FD65CB001A4CB7ADE94D956536C548D /* RxCollectionViewDataSourceType.swift */, - 8CB853B3D3FA4C1BA43C53DD9949EF5B /* RxCollectionViewDelegateProxy.swift */, - A2A7B06477B1D104EAEDE95A0A7E08EE /* RxCollectionViewReactiveArrayDataSource.swift */, - F2447B2BD2E445D4684FF17AB3FE3EAD /* RxNavigationControllerDelegateProxy.swift */, - 94D217CE091C04BDC0609047B3A81F03 /* RxPickerViewAdapter.swift */, - 3CE034D1CE8AED1F64BCDECD244183F1 /* RxPickerViewDataSourceProxy.swift */, - 9FFC7A16B1641BD6E007D549F831184F /* RxPickerViewDataSourceType.swift */, - ADDB4D0E7A405AF52EF8469AB5B04E9C /* RxPickerViewDelegateProxy.swift */, - 75A52E32B83D148E556C8F617FE1D6AE /* RxScrollViewDelegateProxy.swift */, - A872EC2845D2891B06608BF8F91561FF /* RxSearchBarDelegateProxy.swift */, - 6E9828A6C3CE9264DD664ED212B4FCEA /* RxSearchControllerDelegateProxy.swift */, - F79010A235833C1FD58A192FD49B55FB /* RxTabBarControllerDelegateProxy.swift */, - B06A89FE0E1CFE19CCA5E0444DFE8D56 /* RxTabBarDelegateProxy.swift */, - 47D85998CA5296D349A4BE600E0EAF58 /* RxTableViewDataSourcePrefetchingProxy.swift */, - 3CD093F7900FC1EE5C84AF7092F9B5E7 /* RxTableViewDataSourceProxy.swift */, - 2DD82308C60C73233AC78F46107CF4CA /* RxTableViewDataSourceType.swift */, - 2C1E1CE3F760862DD43B023692E505ED /* RxTableViewDelegateProxy.swift */, - 840E87C9C8939780C2AD28E56EB9CB52 /* RxTableViewReactiveArrayDataSource.swift */, - E8E0A7A013E79187646EA79385AEF98F /* RxTarget.swift */, - 85C82F2C72D480C27329E8DE6C874E4E /* RxTextStorageDelegateProxy.swift */, - 66950FDAEE4C42AA97440D86062A61A8 /* RxTextViewDelegateProxy.swift */, - 37AEFD8B4129F6504C117E16FCBE1286 /* RxWKNavigationDelegateProxy.swift */, - A326A4A902F299D94F85612E745775FC /* SchedulerType+SharedSequence.swift */, - 85F57474BB579320C48583C82F914C79 /* SectionedViewDataSourceType.swift */, - B10E4FEB83CCE9DE54FD1F4B7AE6ACAD /* SharedSequence.swift */, - 7D8C67673267733A9E988C337A527D49 /* SharedSequence+Concurrency.swift */, - F53702FA92D3BE5E71762BADC1DE9D13 /* SharedSequence+Operators.swift */, - 184CCF347EDC114B567A87699F4C22F0 /* SharedSequence+Operators+arity.swift */, - A748A668D69708CD89D222EE43A3D1C5 /* Signal.swift */, - 65C8C5A374A3AFBB2B0EF46F729868FD /* Signal+Subscription.swift */, - F40982896989E38B4742A81E7CC344B4 /* TextInput.swift */, - E2E74D7F078E0466B11691D964E4AABB /* UIActivityIndicatorView+Rx.swift */, - DAFBA996F8D0DB0779A067E6DF99FBAB /* UIApplication+Rx.swift */, - 9919F7353E8B43CA1CE542EF20E9748D /* UIBarButtonItem+Rx.swift */, - E8E43DDF6D3250D7F48E5403915C7890 /* UIButton+Rx.swift */, - B96EFB3FE70427D8B4D751D1F0718179 /* UICollectionView+Rx.swift */, - A5BED8008BBEBAE0D0CDCAE16028F220 /* UIControl+Rx.swift */, - 9322E153E318C2469BD3EC186192683D /* UIDatePicker+Rx.swift */, - 3C1C6FCE8B5DC525669FED53B182A2EB /* UIGestureRecognizer+Rx.swift */, - B6EF940D2FE866F6113D323A558A7820 /* UINavigationController+Rx.swift */, - DE00811D9FC152CBF7585716DC0FD733 /* UIPickerView+Rx.swift */, - 6A74E07F599D069F94264E596799DF79 /* UIRefreshControl+Rx.swift */, - 80D666C6013881110C1418D3BA746D1D /* UIScrollView+Rx.swift */, - 05C74632D9B36FCD0A38EA87E40B883A /* UISearchBar+Rx.swift */, - E7FF3C8609834F23B27A6CF3C7B47411 /* UISearchController+Rx.swift */, - A647AE6CCB05EAC4D6B466367BA7C249 /* UISegmentedControl+Rx.swift */, - 423F869E2B6E4696CC5C29A2BBDE7957 /* UISlider+Rx.swift */, - 9A77ABD82FEA2CA84D8B35154E4D4F40 /* UIStepper+Rx.swift */, - 27B5E7C065B8E43D37E0739DA791264B /* UISwitch+Rx.swift */, - A954104A7CF64E32BCA6E4A4876AF3C3 /* UITabBar+Rx.swift */, - CB5BDCC56546B80495D4FD3626AF7450 /* UITabBarController+Rx.swift */, - 76BC3284CDE9DE11C4F9DADC0B541015 /* UITableView+Rx.swift */, - A5A49B725EA9C5EC7506BC54EDF5130E /* UITextField+Rx.swift */, - 18E8F78A0E4FED3EEFBF8C45B9D4EC81 /* UITextView+Rx.swift */, - DB61BBB8A3E8C58DEBBBA388DE476E3C /* URLSession+Rx.swift */, - 511F3DDC481292E3027BACAB54473584 /* WKWebView+Rx.swift */, - 38981283857A45A407D6F8A640D835E7 /* Support Files */, - ); - name = RxCocoa; - path = RxCocoa; - sourceTree = ""; - }; - 19544D5B0B85DCD0856855326CA97927 /* Support Files */ = { - isa = PBXGroup; - children = ( - FF55EF0E3D5B0CF7DB8F9CCEC16B88B9 /* DDAutoUIKit_Private.modulemap */, - 8A0F62B3B0E6EF577D6728119CF869D1 /* DDAutoUIKit_Private-dummy.m */, - 959596DF795FD1A11BDF5501F8A8553C /* DDAutoUIKit_Private-prefix.pch */, - 50CB07612A7637E2E0500A966BB67134 /* DDAutoUIKit_Private-umbrella.h */, - E235887340A6B4A54A73422D949DC61C /* DDAutoUIKit_Private.debug.xcconfig */, - BE9EEFE3C1290547D139F2FDDE9A2A3F /* DDAutoUIKit_Private.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/DDAutoUIKit_Private"; - sourceTree = ""; - }; - 19B9C81FBC2F2570BF3AA23BFF93A9C3 /* TYCyclePagerView */ = { - isa = PBXGroup; - children = ( - 080CAEB7CFAB746E5ACC13C1037E72D5 /* TYCyclePagerTransformLayout.h */, - 3CBCFBA84881A19B21A4E7BDCC9C877A /* TYCyclePagerTransformLayout.m */, - C9E8038FB550A40B59487E96C2C014B8 /* TYCyclePagerView.h */, - 85B13CE0968FF2CAC03FA1775FF4DE8F /* TYCyclePagerView.m */, - D2FBC5D745AD1C4A03609880FFB133B9 /* TYPageControl.h */, - 41E1E31F6B85A14980B2BEAC9AF7EC28 /* TYPageControl.m */, - 260254F55106F34456CF2282FC454AA1 /* Support Files */, - ); - name = TYCyclePagerView; - path = TYCyclePagerView; - sourceTree = ""; - }; - 1A289F475403CC9A1BFE57BDEE164EE7 /* UINavigationController */ = { - isa = PBXGroup; - children = ( - 6E41C71C88721FCDB20ED598752F8C99 /* DDUINavigationController.swift */, - 11318CAE9188F3F3D96B377110B759AD /* UINavigationController.swift */, - ); - name = UINavigationController; - sourceTree = ""; - }; - 1FC79231716FFF745C0264A5A609764D /* Support Files */ = { - isa = PBXGroup; - children = ( - 0959863FC80CAA9E28A4DE5AF4622E66 /* DDColorKit_Private.modulemap */, - C06ED124531C652E7A38443F115F77BD /* DDColorKit_Private-dummy.m */, - 162A8904E032F3250DDA3F276E5E2033 /* DDColorKit_Private-prefix.pch */, - 1CC5F3FCC434662362EE890B27FB3B87 /* DDColorKit_Private-umbrella.h */, - 383F13627705F8373D8E826977B42A47 /* DDColorKit_Private.debug.xcconfig */, - 7302A599D8A8C33979FFF070740CFE34 /* DDColorKit_Private.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/DDColorKit_Private"; - sourceTree = ""; - }; - 2242C43BF7A075D9EE13556197414DD5 /* Support Files */ = { - isa = PBXGroup; - children = ( - 9BFA753E9F1F12C6DE091DBA9BE284CA /* DDPersistenceKit_Private.modulemap */, - E9CAFFC5C0A595A1E9F2428562242FE5 /* DDPersistenceKit_Private-dummy.m */, - 5DF4698B1812C25B59E081C42956DF82 /* DDPersistenceKit_Private-prefix.pch */, - 970613E589CD704BE5F22AFD8763B5E7 /* DDPersistenceKit_Private-umbrella.h */, - 842F1D9784F900A5C6F70B9B70077960 /* DDPersistenceKit_Private.debug.xcconfig */, - 542580CD4322A21B74A4ECC00C42E348 /* DDPersistenceKit_Private.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/DDPersistenceKit_Private"; - sourceTree = ""; - }; - 226546D43ED2CD532797CFEF4CC22C3B /* UIImage */ = { - isa = PBXGroup; - children = ( - 954BECCD57CC577E2B7C2B9E32C7694E /* DDUIImage.swift */, - BF1BFC1EC849AE1981681FFA8BC94515 /* UIImage.swift */, - ); - name = UIImage; - sourceTree = ""; - }; - 226E2A0928D089C2E17B0EC160D1ED98 /* DDMAUtil */ = { - isa = PBXGroup; - children = ( - 1D3790512280E5375A3BD1510F3FB837 /* DDMAGeometry.h */, - 7642B925B000700A66BF2CFEA93C27BB /* DDMAGeometry.m */, - ); - name = DDMAUtil; - sourceTree = ""; - }; - 22D36BF69A2CDBE674BBBD1A02E55492 /* UITableView+DDCategory */ = { - isa = PBXGroup; - children = ( - D23764F0D3CAF944BDB1C9D6BBD2AD48 /* UITableView+DDCategory.h */, - 9A285BA4E44C51CDB377F338817BDE37 /* UITableView+DDCategory.m */, - ); - name = "UITableView+DDCategory"; - sourceTree = ""; - }; - 234B60F3F1219A7CEA3AAE2D49DF68A4 /* Support Files */ = { - isa = PBXGroup; - children = ( - 91BC76F25BC47C0AA6D103C14C68E827 /* AMapNavi-NO-IDFA.debug.xcconfig */, - 9CB5BA613C7C9BDD94A870582467FAEB /* AMapNavi-NO-IDFA.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/AMapNavi-NO-IDFA"; - sourceTree = ""; - }; - 23ACDEF9B997771B5D6C2584F863EC67 /* UIApplication+DDCategory */ = { - isa = PBXGroup; - children = ( - 7FB11CF33FA9DC83DCAB3BD616563454 /* UIApplication+DDCategory.h */, - 3BA2FC10BF6B9B1101AA446A7C5118A1 /* UIApplication+DDCategory.m */, - ); - name = "UIApplication+DDCategory"; - sourceTree = ""; - }; - 24BBB347CDA890676EAC494C297EE1BE /* CALayer+DDCategory */ = { - isa = PBXGroup; - children = ( - 9940CADCEF66492949D10215DD3AB118 /* CALayer+DDCategory.h */, - AECEFBBB054915F457624F87E74D4449 /* CALayer+DDCategory.m */, - ); - name = "CALayer+DDCategory"; - sourceTree = ""; - }; - 2537A195B54F67C13394531B75E7E3FB /* DDColorKit_Private */ = { - isa = PBXGroup; - children = ( - B00B59E18DAA7669CDAA6F2AD3C73FD1 /* ColorUtil.swift */, - E6D4A7AD665C701DD8C1151EE2392682 /* UIColor+Hue.swift */, - 1FC79231716FFF745C0264A5A609764D /* Support Files */, - ); - name = DDColorKit_Private; - path = DDColorKit_Private; - sourceTree = ""; - }; - 260254F55106F34456CF2282FC454AA1 /* Support Files */ = { - isa = PBXGroup; - children = ( - DAAF627C5AC1A45232223797F61A01A8 /* TYCyclePagerView.modulemap */, - 384EB8BE83E3A97EEC0069B8558B9316 /* TYCyclePagerView-dummy.m */, - 499389C31AC66E0D791D7F93E9ECDBBB /* TYCyclePagerView-prefix.pch */, - E788DA5B3A40955A6CFD2CC69F83202E /* TYCyclePagerView-umbrella.h */, - 17888856B8B48807E8E714F1FA86DABD /* TYCyclePagerView.debug.xcconfig */, - 60804C91E753B56E570498CF4F798CB2 /* TYCyclePagerView.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/TYCyclePagerView"; - sourceTree = ""; - }; - 278CFB344AE4C468AC5F140F77743385 /* Resources */ = { - isa = PBXGroup; - children = ( - 155E255306AC9CACD09CDA2B0D7DBBD1 /* MJRefresh.bundle */, - ); - name = Resources; - sourceTree = ""; - }; - 27E5500F07A07BD4CCFD5469484545B7 /* UISwitch+DDCategory */ = { - isa = PBXGroup; - children = ( - F3C59223E4ACAC4319150C29731AC850 /* UISwitch+DDCategory.h */, - DC5B2825250FB48648B89626A7097EB1 /* UISwitch+DDCategory.m */, - ); - name = "UISwitch+DDCategory"; - sourceTree = ""; - }; - 295C230F1D3C50B104BDE785AB25AEDC /* DDMAMap */ = { - isa = PBXGroup; - children = ( - 58DAF34746433EDEA1CA1C1DD8BC893D /* Annotation */, - 869BCF835BE999A00E7E79A8B630FA4F /* AnnotationView */, - 585BF68AA3CFFECF5A905FDA33D0FD48 /* MapView */, - 0EBE4E25705C6C20841244B88F34FED2 /* Overlay */, - B1AEC05AFC8DE9E0EF68E56B6D0E31DB /* Sources */, - 92EA57812D48DDD1E43A368C752300F8 /* Trace */, - ); - name = DDMAMap; - sourceTree = ""; - }; - 2A44CC85D7A13800F9E6AD2CE864DFAE /* Frameworks */ = { - isa = PBXGroup; - children = ( - 91E77A811CC7B1A501293257C743ADC4 /* AMapNaviKit.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 2B94A0E4FD75BCA9EAFC93F5B14DF878 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 9430F409676A1F49E37152D3BEB797C4 /* jpush-extension-ios-2.0.1.xcframework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 2BABAC2ACBDA2FC8CA5472B4A366A3C1 /* UIScrollView */ = { - isa = PBXGroup; - children = ( - 0B31219001024F15894B441C638DC87D /* DDUIScrollView.swift */, - 3ED59B71873C943FEB7A1E883A0A09D8 /* UIScrollView.swift */, - ); - name = UIScrollView; - sourceTree = ""; - }; - 2BF46FD99D348D5B9EA7924DEA9BD209 /* Support Files */ = { - isa = PBXGroup; - children = ( - CBBFF9A97B5F717700B948C65F069E86 /* DDUIKit.modulemap */, - 3B2D944E7777A208BF0BE49900636983 /* DDUIKit-dummy.m */, - 6A568027EADF4F4867EF0E054E8961BB /* DDUIKit-prefix.pch */, - 95299BD6E3099A4ACBAA7311918BAD43 /* DDUIKit-umbrella.h */, - 0303A4FE184E126A0C84A0570CA1500C /* DDUIKit.debug.xcconfig */, - 11AA9FF2BF0AB34A6ABCED55E2B3DFD2 /* DDUIKit.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/DDUIKit"; - sourceTree = ""; - }; - 2D657AD12E7BA1BCEEFC18EE834C4133 /* Support Files */ = { - isa = PBXGroup; - children = ( - 8C6BFBD1F9FBF2D28844494DBBB77D9D /* DDDateKit_Private.modulemap */, - ED9A02E76946E33682F5D3514A1B2CA7 /* DDDateKit_Private-dummy.m */, - D2A32F68783F1149F0EB7ED39AF6ABEA /* DDDateKit_Private-prefix.pch */, - 581FA386B9CE43B28BA7F9F3D0A2A563 /* DDDateKit_Private-umbrella.h */, - B8A53289FAC7085293A39AE96E239567 /* DDDateKit_Private.debug.xcconfig */, - 92A8C75F27C7753AED1D69771277142C /* DDDateKit_Private.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/DDDateKit_Private"; - sourceTree = ""; - }; - 2DE4E2E0525FB8E489622F6D6F6B6EE7 /* UITableBarController */ = { - isa = PBXGroup; - children = ( - 403E99D310867149283418011F5BDB09 /* DDUITabBarController.swift */, - 5502FBE9DFBCF4CF0F65DD0B65863251 /* UITabBarController.swift */, - ); - name = UITableBarController; - sourceTree = ""; - }; - 2F12F0B1888B431F3BC5CC02F620E946 /* Bugly */ = { - isa = PBXGroup; - children = ( - AC902092AF48F9B78A9BA3C785EB10D5 /* Frameworks */, - D35AC2669DDE9BFF131FAF05845A4E4B /* Support Files */, - ); - name = Bugly; - path = Bugly; - sourceTree = ""; - }; - 2F902DF0E3F8BFB5F28F4AD2A20F0CBE /* UITextView */ = { - isa = PBXGroup; - children = ( - F808EF213CE7316979D69C89CFB2C8F4 /* DDUITextView.swift */, - CCBF6DEC90B74616999D2954B21EC702 /* UITextView.swift */, - ); - name = UITextView; - sourceTree = ""; - }; - 30472049FEDBFC970AFE18F2D536D9F1 /* Products */ = { - isa = PBXGroup; - children = ( - 5D797E9A5C5782CE845840781FA1CC81 /* Alamofire */, - 5BA6046B4C2674409C0D5625F45F8769 /* BRPickerView */, - 09B4C59FAB38D6054E5993BD78205023 /* DDAudioPlayerKit_Private */, - 16ADD43AE08E88D6F7A3498152249608 /* DDAutoUIKit_Private */, - 42F10DB6CED6AC3E9AA446F86C16A0F5 /* DDBasicControlsKit_Private */, - 71067D1F0754E977C6E009846B257042 /* DDBasicControlsKit_Private-DDBaseViewController */, - EC46C56D3F58BDA592A93730A005EF26 /* DDCategoryKit_Private */, - 9D4B74A4386EF8F53603612D83CA68C9 /* DDColorKit_Private */, - 1FEA06F110D30604A9FB015A9790A954 /* DDControlsKit_Private */, - E270ABDB05C1E6CDFF8AB4EB055CE66E /* DDDateKit_Private */, - 9CB241779EEAD809AC3180FD5B56FDF4 /* DDFontKit_Private */, - DAFE13D35532C1BA0D3624F4C38BEE8E /* DDLogKit_Private */, - 6EEB8B1CB2BF24B44DEEDC1B058B22E2 /* DDMAMapKit_Private */, - FB908FBF9F755AFB285A27A674140F71 /* DDMAMapKit_Private-DDMAMapKit_Private */, - 2DE47AF6516BB19369CA020EA7C48A4A /* DDNetworkingOfAlamofireKit_Private */, - F11C5D34D44394CFB2C5ADD740509CC9 /* DDPersistenceKit_Private */, - 35BC09180850FDD03C450D14BD310714 /* DDProgressHUDKit_Private */, - A9132D6AA90D7BC2B6C7A08B065F87A9 /* DDToastKit_Private */, - D80ECFAC844B9AC7A76107391505B65A /* DDUIGestureRecognizer */, - 69752B5EBA9E3F3BBD32E4CE9DAEF33D /* DDUIKit */, - DF07F7B964C7E3CE99FEEC54FC37F050 /* DDUtilsSwiftKit_Private */, - AD8FF1E8B0C9C12F070D79A5EC3BEE59 /* DDWebImageKit_Private */, - 8AD026CF2FA53C314E8C799B9A40528A /* DDZFPlayerKit_Private */, - 86C4A2D817E6CFFF31BF75161625FD5D /* DynamicBlurView */, - F6D00CA03F52F8332AAD8FEEC4AFD406 /* ESTabBarController-swift */, - A8E950A16D00F649C54FFB30F81D7842 /* IQKeyboardManagerSwift */, - C3A46B03C308EEEB11F2A62BA5D2E8BE /* JXCategoryView */, - C3F44C782D64D7EB20B61CE3844EBFAD /* Kingfisher */, - E49D6D248DD1CEE584E6776B9164A1B2 /* MJRefresh */, - B3B0956B7EBF66A8FD677D586C9C387A /* Pods-OrderScheduling */, - E7C9437E4E7340A6BDC7C73BE8A3B117 /* Pods-OrderSchedulingNotificationService */, - 34FB964502259D0FF233CE71CFDD2A71 /* PopupDialog */, - BC432FD48A5932251F1CAFBC4BF74894 /* RxCocoa */, - FF8B264DFE802855D5D67E7CDDABFC3C /* RxRelay */, - 809C5FAB588354C9BA37DC3EAB8CB45C /* RxSwift */, - 979486118B3E90C08386079D57962701 /* SnapKit */, - DA5F7E5AA5A762E4504855EAF3216C8A /* SwiftEntryKit */, - 0DA4828908E30CE4A29CB9AD3A405635 /* SwiftyRSA */, - 6B1A21536A55542D19E4E3C7277DFFAC /* TYCyclePagerView */, - BB28130B0F4C47DC99D2DB9C80F70152 /* ZLPhotoBrowser */, - ); - name = Products; - sourceTree = ""; - }; - 31A8C8C1EBB5CCA9F55F5F3BE6040F88 /* UIResponder */ = { - isa = PBXGroup; - children = ( - 0804916E58E0E3670AD97A3C08A30EEA /* UIResponder.swift */, - ); - name = UIResponder; - sourceTree = ""; - }; - 31E80E85A539EBB1B79A0EBB09075EB1 /* DDBaseSwitch */ = { - isa = PBXGroup; - children = ( - 1CE9CED92DFD164D0A7354F8CC55DC78 /* DDBaseSwitch.h */, - 2FF554B90DB384AF86113D10561E1090 /* DDBaseSwitch.m */, - ); - name = DDBaseSwitch; - sourceTree = ""; - }; - 3233988B6F378F2949C75281663DF4B2 /* StringPickerView */ = { - isa = PBXGroup; - children = ( - 0CF30404E7A7080C5C22D74A199E651C /* BRResultModel.h */, - D2C08CB7A46C8AE472089C3822E5E1FE /* BRResultModel.m */, - C01E8850DEB7E48F4ED5BFAC3EEA97CD /* BRStringPickerView.h */, - E8088ECD7982C20A3DD64663A92E62C9 /* BRStringPickerView.m */, - ); - name = StringPickerView; - sourceTree = ""; - }; - 338F7AB0266172BF411ACD3706C4F4CD /* Support Files */ = { - isa = PBXGroup; - children = ( - D9A94459E09F62AE28297A45E7F006CD /* DDUIGestureRecognizer.modulemap */, - 806ECCC14D9B5F7156BF228820319E04 /* DDUIGestureRecognizer-dummy.m */, - 350AD74105E5CE89CD260670098C3370 /* DDUIGestureRecognizer-prefix.pch */, - 7D905E824E4D85F0856BB14DEFA3F2F4 /* DDUIGestureRecognizer-umbrella.h */, - CD93EAF252FE9FC36CD21DC48271E1B3 /* DDUIGestureRecognizer.debug.xcconfig */, - E0D0B7AB20E57B728AF637B0BC82F481 /* DDUIGestureRecognizer.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/DDUIGestureRecognizer"; - sourceTree = ""; - }; - 36E1C97E97F808B86D99B8C863E4637E /* UIViewControllerAnimatedTransitioning */ = { - isa = PBXGroup; - children = ( - 3ABF59D401C215C4A851764E937B659C /* DDFullScreenTransition.swift */, - ); - name = UIViewControllerAnimatedTransitioning; - sourceTree = ""; - }; - 38981283857A45A407D6F8A640D835E7 /* Support Files */ = { - isa = PBXGroup; - children = ( - 7C5E22AC08D1F5DE4EC547DAA2FF5FD1 /* RxCocoa.modulemap */, - 883CA055738599B7362537690237CF24 /* RxCocoa-dummy.m */, - 3FDBEA08B47EAF4A3B168A2C2AA6225B /* RxCocoa-prefix.pch */, - 20AE7958E8A392E43477169D9EC04936 /* RxCocoa-umbrella.h */, - 7F9B1CB5758B76AA0B1DD916EEB5470A /* RxCocoa.debug.xcconfig */, - 8640052F44727BE6700FE064637A7951 /* RxCocoa.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/RxCocoa"; - sourceTree = ""; - }; - 39056954D1FDB16702181AEBDF412658 /* Core */ = { - isa = PBXGroup; - children = ( - 6431F850ACA34F73EF33CFE881026D97 /* Array+ZLPhotoBrowser.swift */, - 7F1EF9A5FFC46A2D6019B884482CBB45 /* Bool+ZLPhotoBrowser.swift */, - E3925819052ECF20890A49C065A3E093 /* Bundle+ZLPhotoBrowser.swift */, - EC0709F953C6E1E00E1B48C994DCA742 /* Cell+ZLPhotoBrowser.swift */, - A753F61823E68A691D7020B7DFC45383 /* CGFloat+ZLPhotoBrowser.swift */, - 7F6F4A1F3EF266F43BA3A721E0FB830D /* NSError+ZLPhotoBrowser.swift */, - 4627947125DF147BD8BB1B74E97E757B /* PHAsset+ZLPhotoBrowser.swift */, - 7572029D42460F4EB02FD88BC9C58997 /* String+ZLPhotoBrowser.swift */, - 109D8C0F4B04607753A80D730FFD1F2D /* UIColor+ZLPhotoBrowser.swift */, - 341025A3E2F61620469E370B9D764225 /* UIFont+ZLPhotoBrowser.swift */, - 2B9D361F4A7582DD8F461E698C862B45 /* UIImage+ZLPhotoBrowser.swift */, - 774FE99FE5FDF8AC16521D3F9EFD69EE /* UIView+ZLPhotoBrowser.swift */, - 7D9CBE956591DBD063DF9A572E7359A0 /* UIViewController+ZLPhotoBrowser.swift */, - 2DA29D0712B220E74A2165F2404E6A4F /* ZLAddPhotoCell.swift */, - 1809476E15987C3BE9B96C520F450AC2 /* ZLAdjustSlider.swift */, - B0803A53FC3AADB3C3FF8CF540D70628 /* ZLAlbumListCell.swift */, - 83B784AE07FC1CB1854DFC8AEA139651 /* ZLAlbumListController.swift */, - 573A7497C7A50D94FB4A7F442C5702F7 /* ZLAlbumListModel.swift */, - D08BA247FE753C21738F05CD4BCB9962 /* ZLAnimationUtils.swift */, - E31B79E563E0A858064565166B4BB08A /* ZLBaseStickerView.swift */, - 89065D469018D9E69D82FA9E80FB20E5 /* ZLCameraCell.swift */, - F11EA65D845C4FA3C0A6F40BB8E10CF5 /* ZLCameraConfiguration.swift */, - 41BBD956A0964B5501BF55369789D7AC /* ZLClipImageDismissAnimatedTransition.swift */, - 0E9E0DD979DAA290E780DA3E18F9871B /* ZLClipImageViewController.swift */, - A7AA25474A4160179473FF865A205D4A /* ZLCollectionViewFlowLayout.swift */, - CF26C5C758D8FA0F5CE7716DA649070E /* ZLCustomAlertProtocol.swift */, - 9FD050779C225444E531817AAF94E8D2 /* ZLCustomCamera.swift */, - E31E82532012A9368CD278F1B64B4DB1 /* ZLEditImageConfiguration.swift */, - 9352DC0994F4DD2F118943205CCBB176 /* ZLEditImageViewController.swift */, - B83D362193818D740A16D2ECC5B9B822 /* ZLEditToolCells.swift */, - D8487A37DAC8AC776C1874BB6B5053CB /* ZLEditVideoViewController.swift */, - 7DADE6BA1A545B69782EC9D67409C2D0 /* ZLEmbedAlbumListView.swift */, - 034525FE20689D57E20E852BAE248B94 /* ZLEnlargeButton.swift */, - F6A62144C059A91625C1E74A8954ED64 /* ZLFetchImageOperation.swift */, - A5293E8CF1312A0C6CFCB670FBCE385B /* ZLFilter.swift */, - 91001D6B4E594E8E7A44FCE6646FBBA5 /* ZLGeneralDefine.swift */, - 690D8FF5E039A54CF80B26FA60362319 /* ZLImageNavController.swift */, - AF5BFBF1CB21EAF66AAA114EB38C260C /* ZLImagePreviewController.swift */, - 0EAD6BD5B720939B07B237C3B918074E /* ZLImageStickerView.swift */, - 5AC12BC2C4E4FD3635A2E297A130D205 /* ZLInputTextViewController.swift */, - 4066A0B3AD78D101E9E024908C89ABE1 /* ZLLanguageDefine.swift */, - CCD9A6D58A4EE3EE6FCA29C9286D1E03 /* ZLPhotoBrowser.h */, - 295B67C739D3FA7CC1836B0AED59168A /* ZLPhotoBrowser.swift */, - 5CE7E18CB266816367C13967C70F5F18 /* ZLPhotoConfiguration.swift */, - 72C123574F2C4696870CD2220CF65D41 /* ZLPhotoConfiguration+Chaining.swift */, - F43014761DBC88A481A43AB0D0C370FC /* ZLPhotoManager.swift */, - A5932DD43ACFBD2D8C793226E1F64FD3 /* ZLPhotoModel.swift */, - 2126BCB05F88A7E5C18499699DAC6107 /* ZLPhotoPreviewAnimatedTransition.swift */, - 35925EFC5A2D9B134E35FD5C91D44C6F /* ZLPhotoPreviewCell.swift */, - 0BD45C5B1EC5DCCD150E978F75625687 /* ZLPhotoPreviewController.swift */, - BCDDAE64E175BDF68A49846D5367AC78 /* ZLPhotoPreviewPopInteractiveTransition.swift */, - 251A8361A153A5D0901C0796201088B7 /* ZLPhotoPreviewSheet.swift */, - 3F56CE93FE0E31FCB7FD04AB533C8969 /* ZLPhotoUIConfiguration.swift */, - DEDD4D0FB94D73F7564C989B43F262CB /* ZLPhotoUIConfiguration+Chaining.swift */, - 3D2D6F1D0DC3F2B9368D6D1917F7215F /* ZLProgressHUD.swift */, - EF81A156B03A324F27CCC20B03CE0A4C /* ZLProgressView.swift */, - 2F655379862B23651B80D3906B9B5F17 /* ZLResultModel.swift */, - C4968C01BFADC82312916BEF12CEADF0 /* ZLTextStickerView.swift */, - E359C5F7C7165D57D9A751DAEA7C1241 /* ZLThumbnailPhotoCell.swift */, - B3850B517F9DE77FBDE62F3FC235B71F /* ZLThumbnailViewController.swift */, - ADE5C8E5CC89CDB014129C96BC18A76A /* ZLVideoManager.swift */, - A48BE9C888D40CEA67C31A8F6BCDBE6A /* ZLWeakProxy.swift */, - ); - name = Core; - sourceTree = ""; - }; - 3A12F500E20B52433B1A7FDD7E291C97 /* DDBaseTextView */ = { - isa = PBXGroup; - children = ( - F1C0E8D46769E9C329D112D8ABD96732 /* DDBaseTextView.h */, - C756078088B7C77722EB7AE0CE6B21C7 /* DDBaseTextView.m */, - ); - name = DDBaseTextView; - sourceTree = ""; - }; - 3B1E3553849BB3404051E911A9AB3B7F /* UIImageView+DDCategory */ = { - isa = PBXGroup; - children = ( - E140E38B445037E6F0E4FDB445C4A4B2 /* UIImageView+DDCategory.h */, - 936932DE20A086927D0C0FEB2F50A814 /* UIImageView+DDCategory.m */, - ); - name = "UIImageView+DDCategory"; - sourceTree = ""; - }; - 3D22C6924DA08A2C0448B8730C1B2A03 /* DDProgressHUDKit_Private */ = { - isa = PBXGroup; - children = ( - FE8BE171D5B3ECB90B3FF43F1A9BE1DC /* DDProgressHUD.swift */, - 124F389547B3D21E25CC97EDD539A7F7 /* MBProgressHUD.h */, - 4FF8D191231FD486E20443860552DDFD /* MBProgressHUD.m */, - 6029C45A309727D2A37838E92DA402BC /* Support Files */, - ); - name = DDProgressHUDKit_Private; - path = DDProgressHUDKit_Private; - sourceTree = ""; - }; - 3DD66ACABAD8D2B1A6362D18DC9A9F10 /* DDBaseTabBarController */ = { - isa = PBXGroup; - children = ( - 3B0696219D2784C0023ADE4D9301B34C /* DDBaseTabBarController.h */, - 5B71809F121FB856CCDB8E824B5CF7BC /* DDBaseTabBarController.m */, - ); - name = DDBaseTabBarController; - sourceTree = ""; - }; - 4042D2E3CEBF4C3E3D988604FF464B97 /* DDBaseScrollView */ = { - isa = PBXGroup; - children = ( - 1CBF23CB7783B7D5344C0C32C0D47775 /* DDBaseScrollView.h */, - F9C8B8D6AB1298128BC2D1FB830BC314 /* DDBaseScrollView.m */, - ); - name = DDBaseScrollView; - sourceTree = ""; - }; - 40A3636688C71F6ABF6F58F7B88038CF /* SDWebImage */ = { - isa = PBXGroup; - children = ( - 0AD73BF3BE0578F9C9DD6BBF37C7CBFF /* Core */, - 72F01C210132F55B42D1E9F1CCB4E804 /* MapKit */, - ); - name = SDWebImage; - sourceTree = ""; - }; - 40F107534C937BC69E9FBEA4420D7509 /* Pods-OrderScheduling */ = { - isa = PBXGroup; - children = ( - D13827848C413A76ADD18E47761D2B20 /* Pods-OrderScheduling.modulemap */, - 3431A513DD5CF052B33F1798DE98E1E6 /* Pods-OrderScheduling-acknowledgements.markdown */, - D5A3880A46506555230D960A979C59EA /* Pods-OrderScheduling-acknowledgements.plist */, - 439EA354473F5B1B44C857E4C3A7D7D7 /* Pods-OrderScheduling-dummy.m */, - B10BE75A37E306EDA52A1E38B89F97ED /* Pods-OrderScheduling-resources.sh */, - A0031ECF94D34F1497602F4B0794DD58 /* Pods-OrderScheduling-umbrella.h */, - CCA25F5644BF0246ABFFF775553FEEAE /* Pods-OrderScheduling.debug.xcconfig */, - F375C7DA720F6C0C81573E458E9A4020 /* Pods-OrderScheduling.prerelease.xcconfig */, - 2AB85225A76FD605AAA4578E1A765164 /* Pods-OrderScheduling.release.xcconfig */, - ); - name = "Pods-OrderScheduling"; - path = "Target Support Files/Pods-OrderScheduling"; - sourceTree = ""; - }; - 42F70755CBFDB41FE151B6691B85C2AC /* AMapLocation-NO-IDFA */ = { - isa = PBXGroup; - children = ( - E90C22AD038BFFA334744016D632EBED /* AMapGeoFenceError.h */, - C95752AC4AE3A6A0AFE94E4BB528FF4D /* AMapGeoFenceManager.h */, - 803FEED6A19E9CC72E1466A8CB5A0F60 /* AMapGeoFenceRegionObj.h */, - 85EFECFBDCAF5E8618FCAE6D785AD742 /* AMapLocationCommonObj.h */, - 4F1DC518D800734646354089B5B9F99C /* AMapLocationKit.h */, - F247FBBD0C9898AABCAFFD2447C8DABD /* AMapLocationManager.h */, - AFAA5CFD633402E7C40743548272475F /* AMapLocationRegionObj.h */, - 8AA91CB080605C62AC6F782F7F290A83 /* AMapLocationVersion.h */, - E0FE236687443826C093AB643CC28FDA /* Frameworks */, - E28F80CB4D16EB69B8AFA13743BB65FD /* Support Files */, - ); - name = "AMapLocation-NO-IDFA"; - path = "AMapLocation-NO-IDFA"; - sourceTree = ""; - }; - 44F34ACE18277C4B7F7980377341A503 /* DDTableViewCell */ = { - isa = PBXGroup; - children = ( - DC1B952FDAF2B6A98BDABB7B08F4A16A /* DDTableViewCell.swift */, - ); - name = DDTableViewCell; - sourceTree = ""; - }; - 45B3977D4F48F8C58AA8C641F8392144 /* DDMASearch */ = { - isa = PBXGroup; - children = ( - E536E290402532B1C466DC676C4B83A9 /* DDMASearch.h */, - 3F95295E41697E40BCE6A61B148767E2 /* DDMASearch.m */, - ); - name = DDMASearch; - sourceTree = ""; - }; - 46F4E84C50153E82F1169A75151B1970 /* DDMATrackManager */ = { - isa = PBXGroup; - children = ( - 2E51793301441FE9DF9C1E68A2C0548C /* DDMATrackManager.h */, - 0230928B1996ADBD4E660FF7B1DA279E /* DDMATrackManager.m */, - ); - name = DDMATrackManager; - sourceTree = ""; - }; - 4774D585BAF3397300D9235FF2A496EC /* UITextField */ = { - isa = PBXGroup; - children = ( - 5815277FFB95917CF37B3586D9BCA52F /* DDUITextField.swift */, - 298D50B471F0C279F9EC1641B115388A /* UITextField.swift */, - ); - name = UITextField; - sourceTree = ""; - }; - 48418E6777142DC83E3CD16E91A58CD8 /* DDUIGestureRecognizer */ = { - isa = PBXGroup; - children = ( - 0A9DAB1035FDF96AB9A24944E8AE61C8 /* DDUIPanGestureRecognizer */, - 338F7AB0266172BF411ACD3706C4F4CD /* Support Files */, - ); - name = DDUIGestureRecognizer; - path = DDUIGestureRecognizer; - sourceTree = ""; - }; - 49953484792E03927E03AB7C8379AAEA /* Frameworks */ = { - isa = PBXGroup; - children = ( - 44FCE236D60437E28BB0EAA0A54210FD /* AMapSearchKit.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 4ADFEC8A59C5F388D3770FB7CE2EF097 /* NSThread+DDCategory */ = { - isa = PBXGroup; - children = ( - 9E02F7EC90E97AA69EC8DB78E0366C0A /* NSThread+DDCategory.h */, - 151C1822C9470A3F1C63D7E8698AEC70 /* NSThread+DDCategory.m */, - ); - name = "NSThread+DDCategory"; - sourceTree = ""; - }; - 4D952EBE24875334FF562B1C9AFFCEDF /* DDBaseView */ = { - isa = PBXGroup; - children = ( - 734FF49A837C1D2DFC54ECD58688A5E0 /* DDBaseView.h */, - 97CBA806FC564372E2C7B750AF8C0D8D /* DDBaseView.m */, - ); - name = DDBaseView; - sourceTree = ""; - }; - 4DDC64CBB6687C356ADDB0D536AB79FF /* Support Files */ = { - isa = PBXGroup; - children = ( - 69DC94595B344492E3E4B0AE179E2AFA /* DynamicBlurView.modulemap */, - 7946D60EA3ECE62330D28B5A8015DB98 /* DynamicBlurView-dummy.m */, - 983D6F31115DEE896419CAF786042FBD /* DynamicBlurView-prefix.pch */, - 0574069E22601655BD9A55A965E4BC4C /* DynamicBlurView-umbrella.h */, - 9E4DFAB8B416A2250E403EEEBD97218C /* DynamicBlurView.debug.xcconfig */, - 781949EB3E25C9E2A8DD56C72FD05953 /* DynamicBlurView.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/DynamicBlurView"; - sourceTree = ""; - }; - 4E77701401C392A3DA23D6336C440697 /* AMapSearch-NO-IDFA */ = { - isa = PBXGroup; - children = ( - 95075255709C4993BC039DE85C043DD0 /* AMapCommonObj.h */, - 0B78ECB37F7E4BD6056633F7BBFCE13E /* AMapNearbySearchManager.h */, - 5DD8AE4E92FC0D560F9669BC65BDFE8C /* AMapNearbyUploadInfo.h */, - ACC665948B2AD3A3BF2D0D64F8C27D66 /* AMapSearchAPI.h */, - E4DF5B085BC59EDF20AE7C6EE0EEE622 /* AMapSearchError.h */, - DAB5B9267035C86CAFA45CF72C521FEA /* AMapSearchKit.h */, - 455B0F0FCAFDC26E7ADEF95557114F83 /* AMapSearchObj.h */, - AE24AA2159F9388977663BE60B9394A8 /* AMapSearchVersion.h */, - 49953484792E03927E03AB7C8379AAEA /* Frameworks */, - 5FD9F8C8769C8D252405482309D0D066 /* Support Files */, - ); - name = "AMapSearch-NO-IDFA"; - path = "AMapSearch-NO-IDFA"; - sourceTree = ""; - }; - 517BF798E83D1788017C316EDC123B29 /* UIImage+DDCategory */ = { - isa = PBXGroup; - children = ( - C1E91D67416254F974D49C96E760D91C /* UIImage+DDCategory.h */, - BEF2E731E0967F055A4140D135562237 /* UIImage+DDCategory.m */, - ); - name = "UIImage+DDCategory"; - sourceTree = ""; - }; - 53BBD63DB182B970A3FFF3B5F20F3B2D /* DDBaseAnimation */ = { - isa = PBXGroup; - children = ( - 63BC2C356D86E706C645890C12309FF6 /* DDTransitionAnimation */, - ); - name = DDBaseAnimation; - sourceTree = ""; - }; - 57EA13414361830F5851843AD45F779A /* DDBaseAttributedString */ = { - isa = PBXGroup; - children = ( - 0E3AD0A5A60B44AF298FEC9482CE432A /* DDBaseAttributedString.h */, - C19A5FB1C0472EF8752D8DC60509F85C /* DDBaseAttributedString.m */, - 03D3414E7E22613A83F0777CAD861584 /* DDBaseMutableAttributedString.h */, - 7CC7C4C087BAF8CBEFC6978246850028 /* DDBaseMutableAttributedString.m */, - ); - name = DDBaseAttributedString; - sourceTree = ""; - }; - 585BF68AA3CFFECF5A905FDA33D0FD48 /* MapView */ = { - isa = PBXGroup; - children = ( - 7738A6AB801492AE05C5FDC1182FC2B5 /* DDMAMapView.h */, - 3FD638B5FD92B4BC6A9688438F9AFCF1 /* DDMAMapView.m */, - ); - name = MapView; - sourceTree = ""; - }; - 58DAF34746433EDEA1CA1C1DD8BC893D /* Annotation */ = { - isa = PBXGroup; - children = ( - 9D595B691C775C5988FC997E39429080 /* DriveRouteCustomAnnotation.h */, - 721152FA7D22BC0A6B433001D9BA4CD3 /* DriveRouteCustomAnnotation.m */, - 0037012C72DCE4FCB577AB16DD9DEFAC /* MAPointAnnotation+DDCategory.h */, - 7613695A0F7A3B72F09922FCB96C11F2 /* MAPointAnnotation+DDCategory.m */, - ); - name = Annotation; - sourceTree = ""; - }; - 58FEBBEBA4B9701AD2FF97DC9C384782 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 8C61E93DF7AB3B98C88827EDC6E05D4A /* jcore-ios-4.2.1.xcframework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 59B19A14C2277EAF44F18302ECFC6E8D /* Support Files */ = { - isa = PBXGroup; - children = ( - 9DEAC1DB7FAB5A38798E403ED90C1404 /* AMapTrack-NO-IDFA.debug.xcconfig */, - 4096897914F3034BAA58D3CE2344959E /* AMapTrack-NO-IDFA.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/AMapTrack-NO-IDFA"; - sourceTree = ""; - }; - 5B3816FE0AC681740B4CFAA8B3CD1EA9 /* UILabel+DDCategory */ = { - isa = PBXGroup; - children = ( - C2C00E9A59E2ACDCCCCBFA7AA1D8BC7C /* UILabel+DDCategory.h */, - EEC77E95710C428FBBCEA3A19CC88933 /* UILabel+DDCategory.m */, - ); - name = "UILabel+DDCategory"; - sourceTree = ""; - }; - 5B552ACA43B1F370B055D30B1B2C14A4 /* Support Files */ = { - isa = PBXGroup; - children = ( - EFC4D4B2C0266C20347F96DE5AA940D9 /* DDBasicControlsKit_Private.modulemap */, - 84A0BC8B18D1DA409E5D51C2A0AEDD56 /* DDBasicControlsKit_Private-dummy.m */, - D35B817F04EF84FA1B6B36B155603D53 /* DDBasicControlsKit_Private-prefix.pch */, - 4C3755E1970E45CA8E4427BFA0FBE2E4 /* DDBasicControlsKit_Private-umbrella.h */, - D3D4F647B2116FBFD7A18F0000CFBF1C /* DDBasicControlsKit_Private.debug.xcconfig */, - 3E7E04DEA4FFF9210284B5D20F80D906 /* DDBasicControlsKit_Private.release.xcconfig */, - 14E6DCED93863949755A398DB5C210B1 /* ResourceBundle-DDBaseViewController-DDBasicControlsKit_Private-Info.plist */, - ); - name = "Support Files"; - path = "../Target Support Files/DDBasicControlsKit_Private"; - sourceTree = ""; - }; - 5ECED1176A405C2FC91A81F50A5FADBA /* UIScreen+DDCategory */ = { - isa = PBXGroup; - children = ( - 3FC9941491BF1FD35C4EBA32A311119E /* UIScreen+DDCategory.h */, - 515837659844D168A62B87B0BDC7DA6D /* UIScreen+DDCategory.m */, - ); - name = "UIScreen+DDCategory"; - sourceTree = ""; - }; - 5F6336C0FB20EF52949A996957252765 /* UITabBarController+DDCategory */ = { - isa = PBXGroup; - children = ( - 04D353801D36CAB10F1D432D2B00D371 /* UITabBarController+DDCategory.h */, - 276FE88FD5FF17448AB1F17EB324730F /* UITabBarController+DDCategory.m */, - ); - name = "UITabBarController+DDCategory"; - sourceTree = ""; - }; - 5FD9F8C8769C8D252405482309D0D066 /* Support Files */ = { - isa = PBXGroup; - children = ( - 6A622A53D547AACE1D177EDFD1AA4776 /* AMapSearch-NO-IDFA.debug.xcconfig */, - 6B96E60464539F6B03106969E21D02D7 /* AMapSearch-NO-IDFA.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/AMapSearch-NO-IDFA"; - sourceTree = ""; - }; - 601C47CAEA6B490624B197E74678E23E /* DynamicBlurView */ = { - isa = PBXGroup; - children = ( - 0C510B75AAB2E4FDA9137E14999AFEEF /* BlurLayer.swift */, - 3A7060AA231C1C535E46258355ECF306 /* CaptureQuality.swift */, - 23ED62DFB1F578DEBE7EACFECEB5EC39 /* CGContext+CGImage.swift */, - 27E45414B8C8E3E7696F22281E6A9EB0 /* CGImage+Accelerate.swift */, - 0EDD3AA8542CAF5C63E2C88397F7D700 /* DynamicBlurView.h */, - 5A5588977EBBE11DE9687DFE5669F63A /* DynamicBlurView.swift */, - 9E2CFC0E730DADCB0B911107045FC77B /* TrackingMode.swift */, - 7B1E6C9CDECAB733FF7FAEDC6288CE4A /* UIImage+Blur.swift */, - 4DDC64CBB6687C356ADDB0D536AB79FF /* Support Files */, - ); - name = DynamicBlurView; - path = DynamicBlurView; - sourceTree = ""; - }; - 6029C45A309727D2A37838E92DA402BC /* Support Files */ = { - isa = PBXGroup; - children = ( - 1A3DF1E0C4CCABA356AF83F930F0C8A1 /* DDProgressHUDKit_Private.modulemap */, - 8D88EF3D6333224E5B251DE09E7F4DE4 /* DDProgressHUDKit_Private-dummy.m */, - E6508C1517EBD1EAAC85BF1F0E48F8F5 /* DDProgressHUDKit_Private-prefix.pch */, - B6D6F7392E7F77CC615EF6B2A71F0211 /* DDProgressHUDKit_Private-umbrella.h */, - 174AB53E059BB9A8DE414DD19F96A58E /* DDProgressHUDKit_Private.debug.xcconfig */, - 0E81B3F8F745DB6A9AAFB8CD40CB6EC8 /* DDProgressHUDKit_Private.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/DDProgressHUDKit_Private"; - sourceTree = ""; - }; - 60C41352CE0A002F15BA203BEB0D0781 /* UINavigationBar+DDCategory */ = { - isa = PBXGroup; - children = ( - 6D0E3B0B299F515EBA3AA57CBD00627C /* UINavigationBar+DDCategory.h */, - 263B33488CBD1E3F4E3B1CF228563F67 /* UINavigationBar+DDCategory.m */, - ); - name = "UINavigationBar+DDCategory"; - sourceTree = ""; - }; - 63BC2C356D86E706C645890C12309FF6 /* DDTransitionAnimation */ = { - isa = PBXGroup; - children = ( - 457A80DEC0166FAC9C9555D3122A7B34 /* DDViewControllerAnimatedTransition.h */, - 48824A0BF5D6B21C9142A13E3FEDA036 /* DDViewControllerAnimatedTransition.m */, - ); - name = DDTransitionAnimation; - sourceTree = ""; - }; - 63FDB0A1519A666E4694D2B7D4A45DD9 /* AMapFoundation-NO-IDFA */ = { - isa = PBXGroup; - children = ( - E2AC799602AAE0F2E632A19FC0F91BC2 /* AMapFoundationConst.h */, - 1F2351A2165091AD20D1FEC5C7EA60C7 /* AMapFoundationKit.h */, - 7F450B3BABD3DE2B1D50B02976C376F8 /* AMapFoundationVersion.h */, - B1EC74F7F7500674D8FBB7E1429709CD /* AMapServices.h */, - 423F9FD7E866DE5EE8F341B5CA25902E /* AMapURLSearch.h */, - 66ABF4318361B445E49E5A27950104FF /* AMapURLSearchConfig.h */, - 4C24E7BEC7235EE36BFA2C3574CBA5BC /* AMapURLSearchType.h */, - DF35EB7DB7844E364D8910DDCE3BBA18 /* AMapUtility.h */, - 83D6EC759EF9911FC0FC9513955C7953 /* Frameworks */, - 85CD6500E8C7217B3F48961EDBF841F0 /* Support Files */, - ); - name = "AMapFoundation-NO-IDFA"; - path = "AMapFoundation-NO-IDFA"; - sourceTree = ""; - }; - 64D5D4890C159DC96E3E7A6FC1F1059A /* NSBundle+DDCategory */ = { - isa = PBXGroup; - children = ( - 78ECCF2A4FEC22ABFF5BAC19B8E5E14C /* NSBundle+DDCategory.h */, - 4A3270C48302B0944D5B2835EE79B425 /* NSBundle+DDCategory.m */, - ); - name = "NSBundle+DDCategory"; - sourceTree = ""; - }; - 65BD8FD46AF8B4737D708BAA9028D6BC /* UIButton */ = { - isa = PBXGroup; - children = ( - DCCCC5EC07117618F4DAF00E27CFC556 /* DDUIButton.swift */, - 825061B0BF81331A04CC6FC14B768356 /* UIButton.swift */, - ); - name = UIButton; - sourceTree = ""; - }; - 66902890F2BE38FA0CF7F62BF54B17AD /* Support Files */ = { - isa = PBXGroup; - children = ( - 4D94106FCDFE013D9835C95208E1C1F8 /* DDCategoryKit_Private.modulemap */, - 7ABEA293518578544038E29B85A346D2 /* DDCategoryKit_Private-dummy.m */, - 42C5898BA6D381FC880FB37CAFC3FF06 /* DDCategoryKit_Private-prefix.pch */, - D361B211EAD33DA1B2A83B45487210D5 /* DDCategoryKit_Private-umbrella.h */, - B30C358AF2A5C1E6ABB5F69697182125 /* DDCategoryKit_Private.debug.xcconfig */, - 006B83DBD7EF9E9FED347BF4490BE076 /* DDCategoryKit_Private.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/DDCategoryKit_Private"; - sourceTree = ""; - }; - 68B479D319D087164ACDB9671B7B6D3F /* Alamofire */ = { - isa = PBXGroup; - children = ( - 087F207694F2E3A1DA9E0ABA8B92112E /* AFError.swift */, - A9B79AD8F9ECF1A550262D8AEF6C6FAB /* Alamofire.swift */, - 6F0FA8BDB00146BF15D3BC096E93834B /* AlamofireExtended.swift */, - 8D0D64955E50C10756E979684C646842 /* AuthenticationInterceptor.swift */, - 54EA0FC58504DCD8B983E0F43A2D1CA8 /* CachedResponseHandler.swift */, - AFDCBA487329768A35BFF9DA39F33DB9 /* Combine.swift */, - 545AD3827243FBFA4610FD3D35FB0BE0 /* Concurrency.swift */, - 7963ED1818D2E09A87008F84FD412B8F /* DispatchQueue+Alamofire.swift */, - FF90DCE6C8DF4E822D13B2FD0A5552FC /* EventMonitor.swift */, - FE1FA7991B30749BBB0F7124F69A2B0B /* HTTPHeaders.swift */, - 135376C1FCEE07616C702EA1545C5DC6 /* HTTPMethod.swift */, - 1B6FD128E219CB7AC00E58EF65D2391D /* MultipartFormData.swift */, - 5317D36007A002590BDDCEB4F3E14F2E /* MultipartUpload.swift */, - 4CA96118F51D2C5EFB0892AFF8C3EE26 /* NetworkReachabilityManager.swift */, - 52C5A7DD0243E06616AFC6E7636DD43B /* Notifications.swift */, - 5D09BA1722F8C68F7F93C759D012D933 /* OperationQueue+Alamofire.swift */, - 300CA45FD37A463B5FBFF59D25FE5E93 /* ParameterEncoder.swift */, - 49C93A93996A98CBFD6D8CF498430BCE /* ParameterEncoding.swift */, - ABE6AF3A01C8A4AFB4218FE6F9F11853 /* Protected.swift */, - 8E14108DD2E07F3E82CEC9C5C48840A8 /* RedirectHandler.swift */, - AFEB968189404DCD74B75448AC8B4080 /* Request.swift */, - DD217346865E975A6F9491C83FFED705 /* RequestCompression.swift */, - B1DD08EB56C97E0FC095E90E665D8EFA /* RequestInterceptor.swift */, - F56489D13811035AB3474A613A684B37 /* RequestTaskMap.swift */, - 2707E7BEE80B079FE70890826E091175 /* Response.swift */, - 9A0459A7149A6F37C650DDD18A70F5DA /* ResponseSerialization.swift */, - F66F872117A74BAD54F1D783E5C1EBEB /* Result+Alamofire.swift */, - 5DA4E705B3EB4AE201794AD0E21212F3 /* RetryPolicy.swift */, - 35B18F6196E9FDD3EE1EAD170B0BF2B7 /* ServerTrustEvaluation.swift */, - DD404B51F03B97A6631E148DA050A732 /* Session.swift */, - 84812DD20135F08C808375B3A1D71106 /* SessionDelegate.swift */, - BCE267FD9B0518D7608CA5999D2963E6 /* StringEncoding+Alamofire.swift */, - E8371E0143D366BA74178AD87E5EE44F /* URLConvertible+URLRequestConvertible.swift */, - D0DC34DFC911705DDBD12D11C2C88CEF /* URLEncodedFormEncoder.swift */, - 1623AE1629442AB8018887A49AD7E6DA /* URLRequest+Alamofire.swift */, - 689047FAC2FB89164EC2273005AAEDF2 /* URLSessionConfiguration+Alamofire.swift */, - 11A0D2EAF3988210C38EAB8A6A060240 /* Validation.swift */, - DE84C51D4B34B1D6FA7DBBC188243BA2 /* Support Files */, - ); - name = Alamofire; - path = Alamofire; - sourceTree = ""; - }; - 69FF3CC8D5F81035EC6E955BF687BB57 /* DDWebImage */ = { - isa = PBXGroup; - children = ( - FAB3C1ED4D9D5D6192E16F83E28CD1F3 /* UIImageView+DDWebCache.h */, - 0715B61A0864CFE40B3C7BFF28E161FD /* UIImageView+DDWebCache.m */, - ); - name = DDWebImage; - sourceTree = ""; - }; - 6A056B39DB7ED1449FF61E5CB142E399 /* DDDateKit_Private */ = { - isa = PBXGroup; - children = ( - 7AF29BE15096E94431865592E9D889EE /* DDDate.swift */, - 2D657AD12E7BA1BCEEFC18EE834C4133 /* Support Files */, - ); - name = DDDateKit_Private; - path = DDDateKit_Private; - sourceTree = ""; - }; - 6AFB793248CC37B0A3F42662653CCB04 /* UIImageView */ = { - isa = PBXGroup; - children = ( - 315A46D40C5C67E109FAB74191C975B3 /* DDUIImageView.swift */, - 86D5B58B2DC09E4FBC7347D6CD405BD3 /* UIImageView.swift */, - ); - name = UIImageView; - sourceTree = ""; - }; - 6BCFA12391513ED9740B344058DB6F88 /* RxRelay */ = { - isa = PBXGroup; - children = ( - 479A09A88817B87778CE37DBFED9DAB6 /* BehaviorRelay.swift */, - 488BEEF5FBD9A1384AC69B6BD17A49AD /* Observable+Bind.swift */, - C1580239C591ED5E9E6C2B67C649CD22 /* PublishRelay.swift */, - 60D63D707E6F989BD38068854B67B0D3 /* ReplayRelay.swift */, - B50F634451DD45773FE536016BBBEB29 /* Utils.swift */, - D4BFD1ABC543C5D52B90B5762E2224F5 /* Support Files */, - ); - name = RxRelay; - path = RxRelay; - sourceTree = ""; - }; - 6C0366B45BA65A38BFC8EE8FE23FC106 /* DDWebImageKit_Private */ = { - isa = PBXGroup; - children = ( - 69FF3CC8D5F81035EC6E955BF687BB57 /* DDWebImage */, - 40A3636688C71F6ABF6F58F7B88038CF /* SDWebImage */, - B9187514811BCDC89262BC03B773ED92 /* Support Files */, - ); - name = DDWebImageKit_Private; - path = DDWebImageKit_Private; - sourceTree = ""; - }; - 6C04C0A1D6F4CBC31A8E12A7603EDB4D /* AddressPickerView */ = { - isa = PBXGroup; - children = ( - 3F31B8EB67CCAD1CEF53C0FC8DE3B001 /* BRAddressModel.h */, - A3F289097EF2801A2430DDA17602D85B /* BRAddressModel.m */, - D848D78F80A981643F18272D44A6E4ED /* BRAddressPickerView.h */, - 27DE766D157FE0517E64E1E1DBF5B2FF /* BRAddressPickerView.m */, - F3923BC548E0F97BA4579E43735F7712 /* Resources */, - ); - name = AddressPickerView; - sourceTree = ""; - }; - 6DCCE3A9E2914B4D54BA3EB81B713655 /* ijkplayer */ = { - isa = PBXGroup; - children = ( - EB74D6A12317B8731336BC83C84C53FA /* ZFIJKPlayerManager.h */, - 467A95BB7613E49D26DC16209E6D6761 /* ZFIJKPlayerManager.m */, - CABFB415504202919439AD38D9F71126 /* Frameworks */, - ); - name = ijkplayer; - sourceTree = ""; - }; - 6EA7DB87CB84F5C9C3CEF976E1E01513 /* Resources */ = { - isa = PBXGroup; - children = ( - 26AEA41C8B14F7F0E9144CF1B5BAAAB5 /* car_xingshi.png */, - 161019006BC8262817EE81BC18718C05 /* car_xingshi@2x.png */, - 57620B74705E53124D9140938290B8C0 /* car_xingshi@3x.png */, - ); - name = Resources; - sourceTree = ""; - }; - 6F4EF8266029BEFE4D18C5847F8BC1E4 /* DDTextView */ = { - isa = PBXGroup; - children = ( - E8DD82B349770CC15C6303FB2010C745 /* DDTextView.swift */, - ); - name = DDTextView; - sourceTree = ""; - }; - 71849E54143E3E10F033703704021255 /* UIApplication */ = { - isa = PBXGroup; - children = ( - 15A4510CDE0028CA4E1A50F424E8666B /* UIApplication.swift */, - ); - name = UIApplication; - sourceTree = ""; - }; - 71BDF3DB9518A6140B50F7AA38A28485 /* Pods */ = { - isa = PBXGroup; - children = ( - 68B479D319D087164ACDB9671B7B6D3F /* Alamofire */, - 63FDB0A1519A666E4694D2B7D4A45DD9 /* AMapFoundation-NO-IDFA */, - 42F70755CBFDB41FE151B6691B85C2AC /* AMapLocation-NO-IDFA */, - FD49A3259CD48C86E7D47BCEEA9DE1C1 /* AMapNavi-NO-IDFA */, - 4E77701401C392A3DA23D6336C440697 /* AMapSearch-NO-IDFA */, - AB48EBFB32CF9E369197EE14651E9F18 /* AMapTrack-NO-IDFA */, - 773250EB5554E5DC8EDBE7CDE5D297BA /* BRPickerView */, - 2F12F0B1888B431F3BC5CC02F620E946 /* Bugly */, - 92AC48B3C097EA88B5D3DA7410B43CF5 /* DDAudioPlayerKit_Private */, - AF3736CD20D7039995CFDB34154BD4FA /* DDAutoUIKit_Private */, - 741DF4BB5F287F392E951568C9DED106 /* DDBasicControlsKit_Private */, - D15908CDC844D82863D9EE41BA74B213 /* DDCategoryKit_Private */, - 2537A195B54F67C13394531B75E7E3FB /* DDColorKit_Private */, - C5A67BCFF19614A2C39B70F24F669CE3 /* DDControlsKit_Private */, - 6A056B39DB7ED1449FF61E5CB142E399 /* DDDateKit_Private */, - A1B4F1C1C8DB85AAB6B723A8AEB61736 /* DDFontKit_Private */, - 06D9B1EF716C43D8EEEFD95CF9E24277 /* DDLogKit_Private */, - 92DC09227980CAB2EE0C000D53D702AC /* DDMAMapKit_Private */, - 7A145009AA2BC4C8F1A20A7814F06A80 /* DDNetworkingOfAlamofireKit_Private */, - D3E6EE6F292855F0D876753F9DBA0266 /* DDPersistenceKit_Private */, - 3D22C6924DA08A2C0448B8730C1B2A03 /* DDProgressHUDKit_Private */, - 97EF280B68FF61B1E4CAF98123C8B779 /* DDToastKit_Private */, - 48418E6777142DC83E3CD16E91A58CD8 /* DDUIGestureRecognizer */, - F545F8640A49FA4F9BFECE1280FB422A /* DDUIKit */, - 0B4B97BBA231A376B20281FEF722637D /* DDUtilsSwiftKit_Private */, - 6C0366B45BA65A38BFC8EE8FE23FC106 /* DDWebImageKit_Private */, - C246CADE0DA0158017E76E9CFCAE11B2 /* DDZFPlayerKit_Private */, - 601C47CAEA6B490624B197E74678E23E /* DynamicBlurView */, - D669167049D5184F7ED37BC54232D6BA /* ESTabBarController-swift */, - F010EFA1211CE7C3622FC5B516AF401D /* IQKeyboardManagerSwift */, - 7FDC644948DEEEAA977553639BBBE64D /* JCore */, - CCEE09735C19936E4F59BB26176444ED /* JPush */, - 8F3A17B1D98CF7435320C4DAA86F5454 /* JPushExtension */, - F6A125EE5D1D3EDAF6301DD28739298B /* JXCategoryView */, - FC8E5895D85E1A70F3E81B21CDD29A4C /* Kingfisher */, - B31F2AF8390A1895FA403ABCE3F03A79 /* MJRefresh */, - 827E36771EDE92EE8110F0BC7F201B45 /* PopupDialog */, - 190EF7C1D93D67A29E227C8D1F1776AD /* RxCocoa */, - 6BCFA12391513ED9740B344058DB6F88 /* RxRelay */, - D7C7AC43C0734B4BAB2D7736603027AC /* RxSwift */, - EA258734861E32735EB4FAA048CC6E2A /* SnapKit */, - D96206E627646D5FA91F8B0FBC8DE9A8 /* SwiftEntryKit */, - 8296E1D5557AFA5DB0B9D62407B06537 /* SwiftyRSA */, - 19B9C81FBC2F2570BF3AA23BFF93A9C3 /* TYCyclePagerView */, - 0FC5DA08B4A44AFCED30763BBDEB99B2 /* ZLPhotoBrowser */, - ); - name = Pods; - sourceTree = ""; - }; - 72F01C210132F55B42D1E9F1CCB4E804 /* MapKit */ = { - isa = PBXGroup; - children = ( - FBD9915E8EE1AFCEC69B2B40F6151ADE /* MKAnnotationView+WebCache.h */, - B4F4CECFE5F41E6594CCD5F0BD801E74 /* MKAnnotationView+WebCache.m */, - 9412DD92DB149FA51E3EFDC819CF8C95 /* SDWebImageMapKit.h */, - ); - name = MapKit; - sourceTree = ""; - }; - 7403197B2CE97A382CECA3B0B6CACE03 /* UICollectionView */ = { - isa = PBXGroup; - children = ( - FBAEB9EA44537B5C66C8C858EAA4FDC7 /* DDUICollectionView.swift */, - 3FE61B1653CA88CD313DD1993F1FB7C9 /* UICollectionView.swift */, - ); - name = UICollectionView; - sourceTree = ""; - }; - 741DF4BB5F287F392E951568C9DED106 /* DDBasicControlsKit_Private */ = { - isa = PBXGroup; - children = ( - FA42C3E9A0BF15E687C4271CFC92E8D7 /* DDBasicControls.h */, - 53BBD63DB182B970A3FFF3B5F20F3B2D /* DDBaseAnimation */, - 57EA13414361830F5851843AD45F779A /* DDBaseAttributedString */, - A5C04B6F6A92CC87EB725D9F761C3EFF /* DDBaseButton */, - E1AA544F9C63E28F83AEC775D068EECD /* DDBaseCollectionView */, - A8F103DB7C8FC1C12F18A419A13D8D4B /* DDBaseCollectionViewCell */, - A4E831CA6436C8352D3366CA112ED239 /* DDBaseImage */, - 123363DA7822739A01DA1CA4E66F5B44 /* DDBaseImageView */, - 82E214FD8CD92240802351D810974D08 /* DDBaseLabel */, - 81655CAE08FBE32EC80E60335339706E /* DDBaseModel */, - A2686D646AD68EDC7A628A111D8DD45D /* DDBaseNavigationController */, - 4042D2E3CEBF4C3E3D988604FF464B97 /* DDBaseScrollView */, - 31E80E85A539EBB1B79A0EBB09075EB1 /* DDBaseSwitch */, - 3DD66ACABAD8D2B1A6362D18DC9A9F10 /* DDBaseTabBarController */, - CB6BD9BF1203E0715BBFA03531BEF4B0 /* DDBaseTableView */, - F32AAA1C3755E295328A20DD5C590FEE /* DDBaseTableViewCell */, - 03F6C1897A5332F7B2BBBD49C3597E74 /* DDBaseTextField */, - 3A12F500E20B52433B1A7FDD7E291C97 /* DDBaseTextView */, - 4D952EBE24875334FF562B1C9AFFCEDF /* DDBaseView */, - 885F786A90BA6ADB0BAC834A25B7D46C /* DDBaseViewController */, - 79501767872DC9368CCC250057C648CF /* DDBaseViewModel */, - 5B552ACA43B1F370B055D30B1B2C14A4 /* Support Files */, - ); - name = DDBasicControlsKit_Private; - path = DDBasicControlsKit_Private; - sourceTree = ""; - }; - 74550BCD16C5A8712D842AAAAC790517 /* ObjC */ = { - isa = PBXGroup; - children = ( - 8BD1EE08814A7472706470B65F3D3639 /* SwiftyRSA+ObjC.swift */, - ); - name = ObjC; - sourceTree = ""; - }; - 7498BD3B3A74C235A60BB0842843D270 /* Resources */ = { - isa = PBXGroup; - children = ( - 9B355D1D250D7DFBEB4FC4D5CC6D52EF /* en.lproj */, - ); - name = Resources; - sourceTree = ""; - }; - 75189C437FA488366FDE63AF48155BF8 /* Support Files */ = { - isa = PBXGroup; - children = ( - 0A603A56BF9F0D351F7F58597AE67397 /* JXCategoryView.modulemap */, - E03320A291BFDD5AA1545F5FF07DB996 /* JXCategoryView-dummy.m */, - C01A1FC30FEE6FEE5B040C6EA68C73AF /* JXCategoryView-prefix.pch */, - 42A1A81F83BFB532AEB5DB4CAE2362E4 /* JXCategoryView-umbrella.h */, - 9DF5503B5B0AB88750E48EB61E67F526 /* JXCategoryView.debug.xcconfig */, - BAFA58A605A91B262522CC7C1D77EF05 /* JXCategoryView.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/JXCategoryView"; - sourceTree = ""; - }; - 75B9060FB776C87E0D8BFFA23C913933 /* ControlView */ = { - isa = PBXGroup; - children = ( - E25AFE2CC3899B6483DAECBCD6614163 /* UIImageView+ZFCache.h */, - A7910195E2BA26BBDC64BC79D7365557 /* UIImageView+ZFCache.m */, - 58FFBF9D8BEC6D0A877D11132717BF54 /* UIView+ZFFrame.h */, - A783B4031979F6BBE19524A554BBCE84 /* UIView+ZFFrame.m */, - 4DED4383148456821E55F74B9856B80A /* ZFLandScapeControlView.h */, - 6FF978DF56D9926EA3788A68EDA759E2 /* ZFLandScapeControlView.m */, - C3A40198775F90A1AE767DCDC1BCE469 /* ZFLoadingView.h */, - B43A1F2F1E63720D830B370B7AAA5020 /* ZFLoadingView.m */, - 5AE27BD2887CD524A80F947F01B089FD /* ZFNetworkSpeedMonitor.h */, - 811F0240EAB8C42BEA3E9912D916BBAE /* ZFNetworkSpeedMonitor.m */, - 1187BCC044B894F6E3491ED9B5C26252 /* ZFPlayerControlView.h */, - 8A2CBCA91EB2EA8F206B354A6E598552 /* ZFPlayerControlView.m */, - 14090DEF6DB4FAD172F8D3682ABAC65D /* ZFPortraitControlView.h */, - 056A3AE606265514F6884996EA21C6C6 /* ZFPortraitControlView.m */, - 7C73804AEDE7540DC69868ADD55D1AE3 /* ZFSliderView.h */, - 5C43572F515F76824B321D8A42D029D9 /* ZFSliderView.m */, - C33C1BB66CB81994191C0E4B8665F134 /* ZFSmallFloatControlView.h */, - 2532AA7D799838AA046A78158ADA67C8 /* ZFSmallFloatControlView.m */, - CB065740FE2583AF33580901156A78FA /* ZFSpeedLoadingView.h */, - 3A6FA7D7D1ECC53270E58F80B5EDE1E0 /* ZFSpeedLoadingView.m */, - 9379D6401784F1AEFF9724756BAFA76C /* ZFUtilities.h */, - 5553370591A8C083690A1FB20C27F538 /* ZFUtilities.m */, - 11E9E480C1E54BC90F57D2CCAB49A5FE /* ZFVolumeBrightnessView.h */, - 9334E4901AFDADE6CC32987663B2DA25 /* ZFVolumeBrightnessView.m */, - DDC50AD7A6FDF2525655E340541CBBF6 /* Resources */, - ); - name = ControlView; - sourceTree = ""; - }; - 773250EB5554E5DC8EDBE7CDE5D297BA /* BRPickerView */ = { - isa = PBXGroup; - children = ( - CA7A822181B9F7B98B45DE64CE0662BA /* BRPickerView.h */, - 6C04C0A1D6F4CBC31A8E12A7603EDB4D /* AddressPickerView */, - D29DD95B7AEA08AFE28525FD91D0E487 /* Base */, - AE661866F0164A4E8DB9AEBB5FB99DC1 /* DatePickerView */, - 3233988B6F378F2949C75281663DF4B2 /* StringPickerView */, - 7CC29ED6BFC7CB687C75DFA54FA8F093 /* Support Files */, - ); - name = BRPickerView; - path = BRPickerView; - sourceTree = ""; - }; - 79501767872DC9368CCC250057C648CF /* DDBaseViewModel */ = { - isa = PBXGroup; - children = ( - 795D28D4EAEFE189D8C322630AEBB944 /* DDBaseViewModel.h */, - FC2B8B1BA43DEED3EA2678AD43F4436C /* DDBaseViewModel.m */, - ); - name = DDBaseViewModel; - sourceTree = ""; - }; - 79D5E266F9FD6A7E7DD1A8D7C4CF15AC /* Resources */ = { - isa = PBXGroup; - children = ( - C9BA963A8C91E0A3F2A875E5F6FC8DA1 /* ZLPhotoBrowser.bundle */, - ); - name = Resources; - sourceTree = ""; - }; - 7A145009AA2BC4C8F1A20A7814F06A80 /* DDNetworkingOfAlamofireKit_Private */ = { - isa = PBXGroup; - children = ( - E9EB98248632D80E2CD041148A8E5C15 /* DDAF.swift */, - FD64314C379E7F3EB5BD31238B02809F /* DDAlamofire.swift */, - B0D708336A40ED61454563C47C3903A6 /* Support Files */, - ); - name = DDNetworkingOfAlamofireKit_Private; - path = DDNetworkingOfAlamofireKit_Private; - sourceTree = ""; - }; - 7B19FF4FAAC1D258622782E19A38EF1C /* DDButton */ = { - isa = PBXGroup; - children = ( - B29D005A8A780B7203165EFE4F81CEE8 /* DDButton.swift */, - ); - name = DDButton; - sourceTree = ""; - }; - 7C3963D83CEFB7C3C318CC8501C13F16 /* Resources */ = { - isa = PBXGroup; - children = ( - 82C950A22BDBB5BABA64AF085F248807 /* DDBaseViewController.xcassets */, - ); - name = Resources; - sourceTree = ""; - }; - 7CC29ED6BFC7CB687C75DFA54FA8F093 /* Support Files */ = { - isa = PBXGroup; - children = ( - 1EECE5C3878ECD2D907C22542FAF6CB0 /* BRPickerView.modulemap */, - 06238817EEBEE705945FA0A829CD003D /* BRPickerView-dummy.m */, - 1D46B6D7FC4D45B44DB68694E3E7A2B9 /* BRPickerView-prefix.pch */, - BC3172E9B17147866900EF13AD321BCE /* BRPickerView-umbrella.h */, - EDBA254B348DB78647705E13777F4E68 /* BRPickerView.debug.xcconfig */, - 5085009761EFF9710D58D141CE4344FE /* BRPickerView.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/BRPickerView"; - sourceTree = ""; - }; - 7D72F0AB9AD9E8F5CAF32CB9049E2E91 /* UIButton+DDCategory */ = { - isa = PBXGroup; - children = ( - A01548D6006AA25237AB32796B4A5291 /* UIButton+DDCategory.h */, - D67E045E83C23CE19EE0D2D96B9E2AA8 /* UIButton+DDCategory.m */, - ); - name = "UIButton+DDCategory"; - sourceTree = ""; - }; - 7E8641CEA2D0D13381E7D1F82A1A2C27 /* UIView */ = { - isa = PBXGroup; - children = ( - 039574ABCAE0F3DE38B92070B3D21AC6 /* DDUIView.swift */, - F338E6DC579560992F3899DAE2EF1CB9 /* UIView.swift */, - ); - name = UIView; - sourceTree = ""; - }; - 7ECD29DF3161E72D72BE4976F7550FA0 /* UIViewController */ = { - isa = PBXGroup; - children = ( - D1436DF22306A910DE634B3436397A6D /* DDUIViewController.swift */, - 3A63C95CEE4DC15C06CFE92356CA3CB2 /* UIViewController.swift */, - ); - name = UIViewController; - sourceTree = ""; - }; - 7F16E7327E3EDB91330A5FE52A71DBE1 /* Support Files */ = { - isa = PBXGroup; - children = ( - EB54EDEF7A3CF863EB16DAC2BA19C9FD /* JCore-xcframeworks.sh */, - 06B46F69C1C8EDD36B1781CEFBC2A6C7 /* JCore.debug.xcconfig */, - 4D14F99E6FF6E2DBE74EF977A4557537 /* JCore.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/JCore"; - sourceTree = ""; - }; - 7F2CB8FDDB3522B39E647F5E714127A0 /* UrlLinks */ = { - isa = PBXGroup; - children = ( - 960B877ECE016730DAADA8D1F864E36E /* UrlLinks.swift */, - ); - name = UrlLinks; - sourceTree = ""; - }; - 7FDC644948DEEEAA977553639BBBE64D /* JCore */ = { - isa = PBXGroup; - children = ( - 58FEBBEBA4B9701AD2FF97DC9C384782 /* Frameworks */, - 7F16E7327E3EDB91330A5FE52A71DBE1 /* Support Files */, - ); - name = JCore; - path = JCore; - sourceTree = ""; - }; - 814E136935470E09443F87A1EB296518 /* UITextView+DDCategory */ = { - isa = PBXGroup; - children = ( - 8EF6CA5C8605E89D5B95C7F02FBD7D4A /* UITextView+DDCategory.h */, - 369282BFFA17BE577950F2C29FB6A67E /* UITextView+DDCategory.m */, - ); - name = "UITextView+DDCategory"; - sourceTree = ""; - }; - 81655CAE08FBE32EC80E60335339706E /* DDBaseModel */ = { - isa = PBXGroup; - children = ( - DBAD08126B9080C366F9E397191BBE57 /* DDBaseModel.h */, - 039F00DC58F9C3A2C0A72729AF6B957A /* DDBaseModel.m */, - ); - name = DDBaseModel; - sourceTree = ""; - }; - 827E36771EDE92EE8110F0BC7F201B45 /* PopupDialog */ = { - isa = PBXGroup; - children = ( - C2E9949BCE8F768888E03E679CECC7C7 /* InteractiveTransition.swift */, - 21674AB534EC96E7927A0F7D146F0B81 /* PopupDialog.swift */, - 210A24BB10A3CA89D14A6F1A180FC065 /* PopupDialog+Keyboard.swift */, - D7160A21DD11FB1310E0D52335060432 /* PopupDialogButton.swift */, - 79E0D5C42037D6E6FB18C380AEC11396 /* PopupDialogContainerView.swift */, - 065B11C89371CC4255EE8CA78AB4D5D3 /* PopupDialogDefaultButtons.swift */, - CFA04185301A5917ABDBDEC1D612FE8F /* PopupDialogDefaultView.swift */, - 3FD023DC306D3D1E9C8B3A68B5BBAB60 /* PopupDialogDefaultViewController.swift */, - DD2645C8CEB2A5D2D9F6F734C385DA35 /* PopupDialogOverlayView.swift */, - 23D9826CFF8ECCEF2E4D1AD0394274D3 /* PresentationController.swift */, - E4CBD8C0AE14DFB9CB34041070E4439D /* PresentationManager.swift */, - D79400C04611DCA0219CCC4FED5760A9 /* TransitionAnimations.swift */, - 02922EBA62B995A2D40B08FE21B102BE /* TransitionAnimator.swift */, - 38C005235C5BD77A6A2BEB7BBCABC22C /* UIImageView+Calculations.swift */, - F36D81DEBFEB19B8FEFA60597AC42595 /* UIView+Animations.swift */, - 534F10DB9CA0B962E011471FA0C50EBD /* UIViewController+Visibility.swift */, - BFF38A47F8A98E69DC43C31D4034CBA2 /* Support Files */, - ); - name = PopupDialog; - path = PopupDialog; - sourceTree = ""; - }; - 8296E1D5557AFA5DB0B9D62407B06537 /* SwiftyRSA */ = { - isa = PBXGroup; - children = ( - 06BB61351E424DCB705710853DDB00F0 /* Asn1Parser.swift */, - 1DDD4360E28D83A8A2AAF2BEA9F751CD /* ClearMessage.swift */, - FC5181D72AF2B025E04FD2CC28CBDD64 /* EncryptedMessage.swift */, - 08E35A322211FEEB86CE4B42F9E74F5A /* Key.swift */, - D75F36396C825082508059CD0ED4DB49 /* Message.swift */, - 5B17B65CD8929CA3A776837F60DAEBBB /* NSData+SHA.h */, - CFCAA960B1920091AC115175863C7249 /* NSData+SHA.m */, - C01301176AEAC9809BD957B58457CBA2 /* PrivateKey.swift */, - 8C3C814A14571470DAD18447CE470666 /* PublicKey.swift */, - D79736C3A55B7D6C5075C947B6694235 /* Signature.swift */, - E53F520764ACA8A4466548E0CCDA8872 /* SwiftyRSA.h */, - DD105EC99E1337DE2350EA8F5E086D67 /* SwiftyRSA.swift */, - 69C45CC190A46771B6163C6F28C4148A /* SwiftyRSAError.swift */, - BE796FA7679BFCE0B82C986E0EC65503 /* X509Certificate.swift */, - 74550BCD16C5A8712D842AAAAC790517 /* ObjC */, - 10E7B3106FDB7E3A31188F2062967517 /* Support Files */, - ); - name = SwiftyRSA; - path = SwiftyRSA; - sourceTree = ""; - }; - 82E214FD8CD92240802351D810974D08 /* DDBaseLabel */ = { - isa = PBXGroup; - children = ( - 5C26366BE5C66DF9BD4A444D8916F6AE /* DDBaseLabel.h */, - 4FC7EA8397ECCC0A4035C805A341E66C /* DDBaseLabel.m */, - ); - name = DDBaseLabel; - sourceTree = ""; - }; - 83CA43A575637A355AFF917283E244DF /* UIFont+DDCategory */ = { - isa = PBXGroup; - children = ( - 4B2C6C950C836FE62DD8A8414331EBF9 /* UIFont+DDCategory.h */, - F736FC35BDD67E5655FB0ED07F754CA1 /* UIFont+DDCategory.m */, - ); - name = "UIFont+DDCategory"; - sourceTree = ""; - }; - 83D6EC759EF9911FC0FC9513955C7953 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 75E1F727257262E34B3092E52704AC5B /* AMapFoundationKit.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 83E6F5EF5FC0A24A8B20F7B0E872E29C /* Support Files */ = { - isa = PBXGroup; - children = ( - 0940B6836DEBA63416A98E29D1B7E0C6 /* DDToastKit_Private.modulemap */, - 2B69714D0D7BBF893C7D33E4E0F55581 /* DDToastKit_Private-dummy.m */, - E038753F3326EAFA55E551DED5A83E1A /* DDToastKit_Private-prefix.pch */, - BE81CF354513FFE3224BE1AAF856D4A3 /* DDToastKit_Private-umbrella.h */, - C8E4CE335A340C6A774310B86A5AE93B /* DDToastKit_Private.debug.xcconfig */, - 8F1AFC44ED08A99390C97E3260047E20 /* DDToastKit_Private.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/DDToastKit_Private"; - sourceTree = ""; - }; - 85CD6500E8C7217B3F48961EDBF841F0 /* Support Files */ = { - isa = PBXGroup; - children = ( - 0EB8C624EF7CB306DD272A6C7FD0984F /* AMapFoundation-NO-IDFA.debug.xcconfig */, - EE4FDB7DC97BA8834FC5ED0132CDEDC8 /* AMapFoundation-NO-IDFA.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/AMapFoundation-NO-IDFA"; - sourceTree = ""; - }; - 869BCF835BE999A00E7E79A8B630FA4F /* AnnotationView */ = { - isa = PBXGroup; - children = ( - 7D15009FE79448A8D3C61B246F3E6637 /* DriveRouteCustomAnnotationView.h */, - 6A058F68A609491EF0B8922E8D469DC9 /* DriveRouteCustomAnnotationView.m */, - ); - name = AnnotationView; - sourceTree = ""; - }; - 885F786A90BA6ADB0BAC834A25B7D46C /* DDBaseViewController */ = { - isa = PBXGroup; - children = ( - 07C7B77AC79010B011C9130BDAEFAE07 /* DDBaseViewController.h */, - AFC088A48A1A3668B42821D9FAC80DD5 /* DDBaseViewController.m */, - 7C3963D83CEFB7C3C318CC8501C13F16 /* Resources */, - ); - name = DDBaseViewController; - sourceTree = ""; - }; - 88961A355CED62D100E8EBD00F699FFC /* ApplicationInfo */ = { - isa = PBXGroup; - children = ( - 5DFBA462E81FE469A3880642FDFF4ACA /* ApplicationInfo.swift */, - ); - name = ApplicationInfo; - sourceTree = ""; - }; - 8C71DCC9CAC5FAF90BA8D45760D85751 /* UIBarButtonItem+DDCategory */ = { - isa = PBXGroup; - children = ( - 68F87BA0B7815B60BDC685846135F390 /* UIBarButtonItem+DDCategory.h */, - 397ACB177BAF19E4CBD6E53B19670373 /* UIBarButtonItem+DDCategory.m */, - ); - name = "UIBarButtonItem+DDCategory"; - sourceTree = ""; - }; - 8DCDEE1AEEEC1B1338FB045B2209A7A8 /* DDView */ = { - isa = PBXGroup; - children = ( - 7DEFBC6B3BC41B3EFEDF60E4155765E1 /* DDView.swift */, - ); - name = DDView; - sourceTree = ""; - }; - 8F3A17B1D98CF7435320C4DAA86F5454 /* JPushExtension */ = { - isa = PBXGroup; - children = ( - 2B94A0E4FD75BCA9EAFC93F5B14DF878 /* Frameworks */, - C09BB1486C5D7F7CBDF9CE84D69D88BD /* Support Files */, - ); - name = JPushExtension; - path = JPushExtension; - sourceTree = ""; - }; - 925F407D518B59D62587EE6DE5DAE071 /* Support Files */ = { - isa = PBXGroup; - children = ( - 1A8147D505262DC091E37F898CFB096C /* MJRefresh.modulemap */, - F49BDDB4952C5AB6D71917A2B1A40633 /* MJRefresh-dummy.m */, - 7EA102A765B12386FEB116DB655A322D /* MJRefresh-prefix.pch */, - EDE9C8200260F8FAC9E298F1AFE1CC8D /* MJRefresh-umbrella.h */, - 2245679B562A0A981E009C266C623CA3 /* MJRefresh.debug.xcconfig */, - C1E1001084A1DE3C73F7A4CBB0207512 /* MJRefresh.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/MJRefresh"; - sourceTree = ""; - }; - 92AC48B3C097EA88B5D3DA7410B43CF5 /* DDAudioPlayerKit_Private */ = { - isa = PBXGroup; - children = ( - 643999E3C7751C8F2484B249A02199E4 /* DDAudioService.swift */, - 5D8C99F56B74AE5CD4EA2D60C5825E87 /* DDSpeechSynthesizer.swift */, - F703ABC8858D5E7BFD7ABAC23FB82408 /* Support Files */, - ); - name = DDAudioPlayerKit_Private; - path = DDAudioPlayerKit_Private; - sourceTree = ""; - }; - 92DC09227980CAB2EE0C000D53D702AC /* DDMAMapKit_Private */ = { - isa = PBXGroup; - children = ( - 0DCC14C8FAB8FA536DC00D3A73480205 /* DDMALocation */, - 295C230F1D3C50B104BDE785AB25AEDC /* DDMAMap */, - DA7B76D9FD6DCF38508D400B23903F78 /* DDMANaviManager */, - 45B3977D4F48F8C58AA8C641F8392144 /* DDMASearch */, - 46F4E84C50153E82F1169A75151B1970 /* DDMATrackManager */, - 226E2A0928D089C2E17B0EC160D1ED98 /* DDMAUtil */, - E04E3A33D9C4C20A1E70E509E63598EA /* Support Files */, - ); - name = DDMAMapKit_Private; - path = DDMAMapKit_Private; - sourceTree = ""; - }; - 92EA57812D48DDD1E43A368C752300F8 /* Trace */ = { - isa = PBXGroup; - children = ( - DD76C6A8AF1AA8CB62DF43C3F769AE0C /* MATraceReplayOverlay.h */, - 17E2210B687B3412F03196B1C6A6D547 /* MATraceReplayOverlay.m */, - AA0495E1F6D98A3DDE4F33580F71324D /* MATraceReplayOverlay+Addition.h */, - 4A6DE22C0FFCF813D3A7FF22FDA7AA0F /* MATraceReplayOverlayRender.h */, - 1CC0FC134317D7C5174A921D18711453 /* MATraceReplayOverlayRender.m */, - ); - name = Trace; - sourceTree = ""; - }; - 945A936B3970B3D02ADF195141C92D6E /* UISwitch */ = { - isa = PBXGroup; - children = ( - B509D613CF3D47FE4B95ECA94FD5B68A /* DDUISwitch.swift */, - 8985AFEB1277743F0F561FA259EB9B5A /* UISwitch.swift */, - ); - name = UISwitch; - sourceTree = ""; - }; - 94BF35FB15A4061FCD3B2D817AD9D1BA /* Core */ = { - isa = PBXGroup; - children = ( - 058DDB67AFB24A6BA613442B24669C5F /* UIScrollView+ZFPlayer.h */, - D8CB5B60C5127068B6918F908DE32948 /* UIScrollView+ZFPlayer.m */, - 1BDA18B33684622BC30BDBB778EB44F3 /* UIViewController+ZFPlayerRotation.m */, - 2C723BBB371338FF563D44BF6B22F6F3 /* ZFFloatView.h */, - 7CA9932A4FB3310EABE728105AA0E97D /* ZFFloatView.m */, - D6E34F8429C02CFE78D89CA93E4DC2CD /* ZFKVOController.h */, - 878580EFC20BDA5466D9EF9E44549D32 /* ZFKVOController.m */, - A6E30A4D3AA46AF31525D1977A28346E /* ZFLandscapeViewController.h */, - E9C32CEC0958CFDF3FB4362CBB18AEAC /* ZFLandscapeViewController.m */, - 9B882DB504FC2BA9A0E42106EA10CAC8 /* ZFLandscapeWindow.h */, - 358CF138B0A845A1BF0BE48FCF35637A /* ZFLandscapeWindow.m */, - D2EE928793DF72FDD723828035BA6AF5 /* ZFOrientationObserver.h */, - A7F011B38D7AD5A6E9DF11557F805A9F /* ZFOrientationObserver.m */, - 264DAF11628C8A5413AA9E9C7E5D72C6 /* ZFPersentInteractiveTransition.h */, - 59B8930947FB340B6A8F52B651A5AB8C /* ZFPersentInteractiveTransition.m */, - F5BD9CE490CF87092BB8B234FCA349E4 /* ZFPlayer.h */, - F45E2E4C287E99D187D4A1DB6F7BC294 /* ZFPlayerConst.h */, - 632A81A7D5D503D4551B881A6D5E2D99 /* ZFPlayerController.h */, - 295F96681C9FA1B63215C978EF3FE540 /* ZFPlayerController.m */, - 6C3D5CC4826AB8E011A52B66A32ECA6B /* ZFPlayerGestureControl.h */, - CFFC1E69456D7DCFAB6347A9E16EBAE4 /* ZFPlayerGestureControl.m */, - 9CED34885294771F45656EB2CB3B1CB7 /* ZFPlayerLogManager.h */, - D2A9A8EF046B4DE273BD1DD1E5CCA659 /* ZFPlayerLogManager.m */, - 6C58AF8CDBB957DEA3D2D9A7D27A7A87 /* ZFPlayerMediaControl.h */, - 05C73D463A953B45A2781623B7CFCB22 /* ZFPlayerMediaPlayback.h */, - AC90F8EB3F87F865E1F4207E6838FF13 /* ZFPlayerNotification.h */, - 9F6F97EC0C91BD3DE2098FAC9123569C /* ZFPlayerNotification.m */, - AC19804ED42A23C30B6831CAEC3BE55E /* ZFPlayerView.h */, - D7D356C9644A29E54C6CC720E7B1B848 /* ZFPlayerView.m */, - B50A67F6E3A42FB4D8E1ABBCF32AA3D6 /* ZFPortraitViewController.h */, - E4070527A194B9408C92FC6ACF6AB111 /* ZFPortraitViewController.m */, - 02CD09B23F363A0ED6829FABD931714A /* ZFPresentTransition.h */, - 995060076AEF261DB00EA9F991ACA5B8 /* ZFPresentTransition.m */, - 1F74707FBFB8CE8AC92B29ABAE7450F7 /* ZFReachabilityManager.h */, - 2CA67F170CF46792086DB53F69F5E540 /* ZFReachabilityManager.m */, - ); - name = Core; - sourceTree = ""; - }; - 958848701ECE56B0A24844F6286D6C9B /* DDScrollView */ = { - isa = PBXGroup; - children = ( - E01259E1EBA2E46C02294D76E8696183 /* DDScrollView.swift */, - ); - name = DDScrollView; - sourceTree = ""; - }; - 96DE8506BF2E9B8CC316119DE393620E /* UITableView */ = { - isa = PBXGroup; - children = ( - CF97FF1728BE083E7BA8D4321400C927 /* DDUITableView.swift */, - 833946F37DE590CE2D3BD5D428F6E965 /* UITableView.swift */, - ); - name = UITableView; - sourceTree = ""; - }; - 97199020CECADDD7B70A05AD3A8D7A0B /* DDViewController */ = { - isa = PBXGroup; - children = ( - 5EA60EF7A1D34307AFF7A81D4E680E9E /* DDViewController.swift */, - ); - name = DDViewController; - sourceTree = ""; - }; - 97EF280B68FF61B1E4CAF98123C8B779 /* DDToastKit_Private */ = { - isa = PBXGroup; - children = ( - 29388440526D9ABF1075B841888D72C1 /* SwiftToast.swift */, - 19997B31DB091B9691A5431ADE9681FF /* Toast.swift */, - 83E6F5EF5FC0A24A8B20F7B0E872E29C /* Support Files */, - ); - name = DDToastKit_Private; - path = DDToastKit_Private; - sourceTree = ""; - }; - 9CDEAB3BCF03FB126C2BF81CFA40AB35 /* UIView+DDCategory */ = { - isa = PBXGroup; - children = ( - D0881CEE46D38FAADED1CFDCC77A3FEF /* UIView+DDCategory.h */, - 908AC48A993D433EBBA6339FD87B3CB8 /* UIView+DDCategory.m */, - ); - name = "UIView+DDCategory"; - sourceTree = ""; - }; - A1B4F1C1C8DB85AAB6B723A8AEB61736 /* DDFontKit_Private */ = { - isa = PBXGroup; - children = ( - CD598F35AF355F8CCB8C1293E8E93F66 /* FontUtil.swift */, - DF0CE1B03B58A0A509591CCE7C7C92EF /* Support Files */, - ); - name = DDFontKit_Private; - path = DDFontKit_Private; - sourceTree = ""; - }; - A2686D646AD68EDC7A628A111D8DD45D /* DDBaseNavigationController */ = { - isa = PBXGroup; - children = ( - 798474138D25DB49F370DB1108E75E84 /* DDBaseNavigationController.h */, - 9C36E70494C84153E00A9D5A545FBD11 /* DDBaseNavigationController.m */, - D9017B4A55E653BC69EF76F2038FA511 /* DDNavigationControllerDelegateReceiver.h */, - 81856247CFA175B2AED83E69B67F95CB /* DDNavigationControllerDelegateReceiver.m */, - ); - name = DDBaseNavigationController; - sourceTree = ""; - }; - A3D138CD2B4550ADD4F5657F33EEF241 /* UITextField+DDCategory */ = { - isa = PBXGroup; - children = ( - 52E0E699C8AFAFF016391939DD51C67C /* UITextField+DDCategory.h */, - 057CDBDB37EEDC39DAD8B2899316EB5A /* UITextField+DDCategory.m */, - ); - name = "UITextField+DDCategory"; - sourceTree = ""; - }; - A4E831CA6436C8352D3366CA112ED239 /* DDBaseImage */ = { - isa = PBXGroup; - children = ( - 404613DA5C40A3F551C7878410955590 /* DDBaseImage.h */, - 7CD68D27706669257C28A28DDD646C89 /* DDBaseImage.m */, - ); - name = DDBaseImage; - sourceTree = ""; - }; - A5C04B6F6A92CC87EB725D9F761C3EFF /* DDBaseButton */ = { - isa = PBXGroup; - children = ( - E5F691EEF4FDA09A3911F13E8A0BC1C6 /* DDBaseButton.h */, - D1BC1FE6F37047E71C9830283FDD5D1B /* DDBaseButton.m */, - ); - name = DDBaseButton; - sourceTree = ""; - }; - A7470A624A38E3DA9638933D8907D285 /* Resources */ = { - isa = PBXGroup; - children = ( - 990D38C97D240AC6130954FC2243CD1D /* AMap.bundle */, - 07B96C65DB21C0B51A30D6E1CFAF84C9 /* AMapNavi.bundle */, - ); - name = Resources; - sourceTree = ""; - }; - A856503D8D9AFBC68B865A8428B4632C /* UICollectionView+DDCategory */ = { - isa = PBXGroup; - children = ( - B40CABDEE2A7797422ABE98CB08C0532 /* UICollectionView+DDCategory.h */, - 5FB2CC1CEAF09C79CDCCF063B3552A65 /* UICollectionView+DDCategory.m */, - ); - name = "UICollectionView+DDCategory"; - sourceTree = ""; - }; - A8CDE7D2DC057916E68D208C6B97F824 /* UIGestureRecognizer */ = { - isa = PBXGroup; - children = ( - 2557183A2FE6CE05E0241839C2486DB5 /* DDUIGestureRecognizer.swift */, - 3E51D95118FA22F4FFEB066E2CF1A373 /* DDUIPanGestureRecognizer.swift */, - 4D47057D54AC76837ECCF6C6096426E3 /* UIGestureRecognizer.swift */, - ); - name = UIGestureRecognizer; - sourceTree = ""; - }; - A8F103DB7C8FC1C12F18A419A13D8D4B /* DDBaseCollectionViewCell */ = { - isa = PBXGroup; - children = ( - 93787936F27F8AA07F71567C3AEA05D4 /* DDBaseCollectionViewCell.h */, - ECDAC965AE07254C2BFDE5F87782CAAA /* DDBaseCollectionViewCell.m */, - ); - name = DDBaseCollectionViewCell; - sourceTree = ""; - }; - AA589270AC487CA8EFA329582799E096 /* Support Files */ = { - isa = PBXGroup; - children = ( - 4419C90CA680EE5E11CA8DD471569452 /* DDControlsKit_Private.modulemap */, - 1CBA3C0559234D90ED825EC7DD5EC9D6 /* DDControlsKit_Private-dummy.m */, - 251FF235CE955F28D337668577537D65 /* DDControlsKit_Private-prefix.pch */, - 8EBB9D79C4126F95ED0CBA0F3A9170C7 /* DDControlsKit_Private-umbrella.h */, - 4C492610364A0957F757E5C0834CA5E2 /* DDControlsKit_Private.debug.xcconfig */, - F0D8101C65BB03367A1F60BD3741C443 /* DDControlsKit_Private.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/DDControlsKit_Private"; - sourceTree = ""; - }; - AAC990982F63DA27D65E9A7B0CF8FD7F /* Support Files */ = { - isa = PBXGroup; - children = ( - D4BCE737E0820DD5448EC6815BC33EC3 /* JPush-xcframeworks.sh */, - E5ABB7D74AB285DE7B0057E548038111 /* JPush.debug.xcconfig */, - E5E3C0DB744B960A5F6130A12E7244C8 /* JPush.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/JPush"; - sourceTree = ""; - }; - AB48EBFB32CF9E369197EE14651E9F18 /* AMapTrack-NO-IDFA */ = { - isa = PBXGroup; - children = ( - A99EA3D76995EC1E88169F617A2B8804 /* AMapTrackCommonObj.h */, - 401E96E41DDE177579F094678E45AA85 /* AMapTrackError.h */, - 80B7297AC939B2B8559ED315012CAE3A /* AMapTrackHistoryObj.h */, - E086170944E312848BD32A068A3B3D45 /* AMapTrackKit.h */, - 16226D1086E5F03FEA888160551B6AE0 /* AMapTrackManager.h */, - BBB96050E4F141E4DBDDB6BEF4F085BA /* AMapTrackManagerOptions.h */, - C96AEB93B0FA97EFDC4E3B0439591217 /* AMapTrackTerminalObj.h */, - 6C25300F80EF9023F75DC9A9250D1B5D /* AMapTrackTrackObj.h */, - 9A6E17B9C11FE2FFAF7F992C9E228FE9 /* AMapTrackVersion.h */, - DEB5B4166B6DCCD22B1ABEF4050B4085 /* Frameworks */, - 59B19A14C2277EAF44F18302ECFC6E8D /* Support Files */, - ); - name = "AMapTrack-NO-IDFA"; - path = "AMapTrack-NO-IDFA"; - sourceTree = ""; - }; - AC902092AF48F9B78A9BA3C785EB10D5 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 663000EB836CA0BDD78F5C170DDE83FA /* Bugly.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - AE120E3EBDC111319F4D0C614A7B634C /* Support Files */ = { - isa = PBXGroup; - children = ( - D7A66CF132ED4CA93E3261E86C3D485A /* SnapKit.modulemap */, - 16AF0AA4A670CC0D68A66E6388506169 /* SnapKit-dummy.m */, - 5918B1075E12B3573D97D3D0A4F43DD9 /* SnapKit-prefix.pch */, - 302389AF8270E7C9B43A9943E089E17A /* SnapKit-umbrella.h */, - FEA3BC4A0AA3AAF35A6FE025713533A3 /* SnapKit.debug.xcconfig */, - 5CC4013C82704E2725B81D451DE06B1D /* SnapKit.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/SnapKit"; - sourceTree = ""; - }; - AE661866F0164A4E8DB9AEBB5FB99DC1 /* DatePickerView */ = { - isa = PBXGroup; - children = ( - 606FC9383BF61B22370150A5B8CE3783 /* BRDatePickerView.h */, - C6EE7242DB95F788956D974ED735093B /* BRDatePickerView.m */, - E62D7B56DD56EC78FEA7E07C9936B539 /* BRDatePickerView+BR.h */, - FD954795EADD3272564F4494F60F7EDC /* BRDatePickerView+BR.m */, - 71D6374CE4CA55B10AA45F89C4B9F367 /* NSDate+BRPickerView.h */, - E73758C3486F0D78F7219FF634A7186A /* NSDate+BRPickerView.m */, - ); - name = DatePickerView; - sourceTree = ""; - }; - AEA7684432342801BF543A1436A345D2 /* UIFont */ = { - isa = PBXGroup; - children = ( - BDE92CB423005A97CCA96201448CB518 /* UIFont.swift */, - ); - name = UIFont; - sourceTree = ""; - }; - AF3736CD20D7039995CFDB34154BD4FA /* DDAutoUIKit_Private */ = { - isa = PBXGroup; - children = ( - E22F30851DDC7C549F663C5FEE847DCF /* AutoUI.swift */, - 19544D5B0B85DCD0856855326CA97927 /* Support Files */, - ); - name = DDAutoUIKit_Private; - path = DDAutoUIKit_Private; - sourceTree = ""; - }; - B0D708336A40ED61454563C47C3903A6 /* Support Files */ = { - isa = PBXGroup; - children = ( - 1393641ADAD12F0FB77EA7491880E439 /* DDNetworkingOfAlamofireKit_Private.modulemap */, - 3A12523C19872904FE054C45BC2ABE97 /* DDNetworkingOfAlamofireKit_Private-dummy.m */, - A50725BDE5A5DFAF20AED3672F8D832B /* DDNetworkingOfAlamofireKit_Private-prefix.pch */, - 6EA1FDEBD940EAE99A65CB7F5179D1C4 /* DDNetworkingOfAlamofireKit_Private-umbrella.h */, - 15A9C1745230ADF165659AD1BA0426DC /* DDNetworkingOfAlamofireKit_Private.debug.xcconfig */, - 8876CD6696B4C9CC7FDBD176C9562B61 /* DDNetworkingOfAlamofireKit_Private.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/DDNetworkingOfAlamofireKit_Private"; - sourceTree = ""; - }; - B1AEC05AFC8DE9E0EF68E56B6D0E31DB /* Sources */ = { - isa = PBXGroup; - children = ( - 6EA7DB87CB84F5C9C3CEF976E1E01513 /* Resources */, - ); - name = Sources; - sourceTree = ""; - }; - B2111C31360210F12FF0549B22DA7D6E /* UINavigationBar */ = { - isa = PBXGroup; - children = ( - CAE0D91F5796C560EF46CE9E25E32D25 /* DDUINavigationBar.swift */, - 00D78E1CE9CA81423228170D3F54530B /* UINavigationBar.swift */, - ); - name = UINavigationBar; - sourceTree = ""; - }; - B31F2AF8390A1895FA403ABCE3F03A79 /* MJRefresh */ = { - isa = PBXGroup; - children = ( - 79F0BA79985E6280842283FB0DB3BE6F /* MJRefresh.h */, - 1AF2E387421E828F9892DAE7C4A9B989 /* MJRefreshAutoFooter.h */, - D21954351CDAE70ABC850CAC620D988D /* MJRefreshAutoFooter.m */, - AD5BACCB50178F49F6749843CEE08034 /* MJRefreshAutoGifFooter.h */, - EDD6E597DB96016769077D11DCFEB743 /* MJRefreshAutoGifFooter.m */, - AE77F298C5C64AD682EFE5F3A58D8E4A /* MJRefreshAutoNormalFooter.h */, - F7FAC3A404B58F4A9D91C818BE388D3B /* MJRefreshAutoNormalFooter.m */, - 657DDF65AE79FA5D9C7C891807282B62 /* MJRefreshAutoStateFooter.h */, - 6565306507F34475169D23A59D014B3C /* MJRefreshAutoStateFooter.m */, - E74BE0175747C3FBC01B32C946F95953 /* MJRefreshBackFooter.h */, - D9D9B2753D60AF012D5427AEBECB1D93 /* MJRefreshBackFooter.m */, - D5EBFD158BED080A89452FC9A7C389C6 /* MJRefreshBackGifFooter.h */, - 81EBDB7DF7D598C194F59E779B2FD663 /* MJRefreshBackGifFooter.m */, - A342026F5E868CF9F23A7BBFD7FD128E /* MJRefreshBackNormalFooter.h */, - E18BECCC3AE278850CB90921D0269F8F /* MJRefreshBackNormalFooter.m */, - 0A91CFDAA12C8CEB58541777463AAE88 /* MJRefreshBackStateFooter.h */, - 63D20FD065054E23EAAB7700F187118B /* MJRefreshBackStateFooter.m */, - B21F8612F2807C099B884C64D49996A7 /* MJRefreshComponent.h */, - 177D86724B93E0FCF0D92988AB516F08 /* MJRefreshComponent.m */, - 5A62154923D191AED767884A9A6697A5 /* MJRefreshConfig.h */, - 1DE8AAA4F54127820E8B93C1348805A6 /* MJRefreshConfig.m */, - 04F972D067C7E719AB2AD30877DC5080 /* MJRefreshConst.h */, - E9B4A66A0B2DEACD89817ACB5C1C2232 /* MJRefreshConst.m */, - 93060351B3270F33EB38A6F750943D39 /* MJRefreshFooter.h */, - 653B130E92D57161E795B844601778F2 /* MJRefreshFooter.m */, - D9015D405821BA2A645D159035072F5F /* MJRefreshGifHeader.h */, - 24ADBC076754485CD88040174BE822E6 /* MJRefreshGifHeader.m */, - 27A0965B519004ED7B9B45748B6D4483 /* MJRefreshHeader.h */, - 5FD8C3EB9E6B1E10EA43CE16BE3D8143 /* MJRefreshHeader.m */, - 90FE53E3607594EF3E86C0FE5911DD32 /* MJRefreshNormalHeader.h */, - DA2E3333B33EB4CDB413E35D03333FFF /* MJRefreshNormalHeader.m */, - BA36DE59C0FDA4C18BB99710BA24EEA9 /* MJRefreshNormalTrailer.h */, - E01D15A927697FFBC21C2277A1BED082 /* MJRefreshNormalTrailer.m */, - 7E20682491464A5052445B16ABD1C3D2 /* MJRefreshStateHeader.h */, - F7B8D7EA1853A8C26F80ECD85BC28919 /* MJRefreshStateHeader.m */, - C041D18F1C8DA8250A2E225062F890CC /* MJRefreshStateTrailer.h */, - D16254B55AAD3124DC99795F88D22EB4 /* MJRefreshStateTrailer.m */, - AC2354E45CCCD818CB871D2347C3BE1E /* MJRefreshTrailer.h */, - 8E9CAE3E2A1886A7E5366B9EB02019BB /* MJRefreshTrailer.m */, - BCC8AE7A78DD94BA4E3B714AE007DCA6 /* NSBundle+MJRefresh.h */, - 49FD7D21697F16B91B55A29E9611D5E0 /* NSBundle+MJRefresh.m */, - 68E7D802A2C4500DE77E6175ED8FEF7A /* UICollectionViewLayout+MJRefresh.h */, - EC0ECADC146598702C545884614FFDC6 /* UICollectionViewLayout+MJRefresh.m */, - FB4F8B6DC94DD898D02B59D0ECE08F04 /* UIScrollView+MJExtension.h */, - E742A448651BC79CF375DA1E1B75C63A /* UIScrollView+MJExtension.m */, - 481B395EA4F8224CA51AE8E284B17B24 /* UIScrollView+MJRefresh.h */, - 9DAB922164B4F645E967BC55BBE1B645 /* UIScrollView+MJRefresh.m */, - 43A38E0FF2F729CE15C65F122828BFC9 /* UIView+MJExtension.h */, - B21FAEC9D38F6E10B6AFC8070D781676 /* UIView+MJExtension.m */, - 278CFB344AE4C468AC5F140F77743385 /* Resources */, - 925F407D518B59D62587EE6DE5DAE071 /* Support Files */, - ); - name = MJRefresh; - path = MJRefresh; - sourceTree = ""; - }; - B39D1123185D782AE4C684CB0E8B8B7D /* Support Files */ = { - isa = PBXGroup; - children = ( - FABB86AAC91735D26EF7EFE896A6E29C /* DDLogKit_Private.modulemap */, - 28CF74A30ADA16A65120E81055556B9A /* DDLogKit_Private-dummy.m */, - 116E1CC88901ED78E2077B4C12D853B0 /* DDLogKit_Private-prefix.pch */, - 5781ACC4C3639A4B54467EB6B7B3DE11 /* DDLogKit_Private-umbrella.h */, - CCF5BE4A863570487343F695DA2B5F19 /* DDLogKit_Private.debug.xcconfig */, - BDFBA89DE326F0EFFD08C57490B7A03A /* DDLogKit_Private.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/DDLogKit_Private"; - sourceTree = ""; - }; - B8738CD38139B426E769D26B460CE4FA /* DeviceInfo */ = { - isa = PBXGroup; - children = ( - 1B10FB417AD06B507E287C969BAD54A7 /* DeviceInfo.swift */, - ); - name = DeviceInfo; - sourceTree = ""; - }; - B9187514811BCDC89262BC03B773ED92 /* Support Files */ = { - isa = PBXGroup; - children = ( - 7D10A2D9673F4FD68AAE3C4DA64CD72A /* DDWebImageKit_Private.modulemap */, - 8DD92C7EE1DDC3D90C62C8260A974413 /* DDWebImageKit_Private-dummy.m */, - A446A0BE9E273A76A038A88CB362F707 /* DDWebImageKit_Private-prefix.pch */, - 3FA15597BB8A44C93444D47674F7B89B /* DDWebImageKit_Private-umbrella.h */, - 9CB98AA2FFBDAE3D4B2D8331C0F2275C /* DDWebImageKit_Private.debug.xcconfig */, - 1B501E28E3FDFF405D393733C389A7BC /* DDWebImageKit_Private.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/DDWebImageKit_Private"; - sourceTree = ""; - }; - B9DEF8ECB6494AA1AEA018F744B53E58 /* NSURL+DDCategory */ = { - isa = PBXGroup; - children = ( - 72285DE049F671DE51C1B400CB5F2405 /* NSURL+DDCategory.h */, - E2DEFD9CA0EEA8583343465F08D8408F /* NSURL+DDCategory.m */, - ); - name = "NSURL+DDCategory"; - sourceTree = ""; - }; - BCE784557898D3AA760B6E6DB87551DC /* DDImageView */ = { - isa = PBXGroup; - children = ( - C074B9CA36FB289B014D60736C04B7D9 /* DDImageView.swift */, - ); - name = DDImageView; - sourceTree = ""; - }; - BD2E3528FC805369C7AC186DB8EBEFC4 /* DDCollectionViewCell */ = { - isa = PBXGroup; - children = ( - 6695ED3604B91A807D747E07473A606C /* DDCollectionViewCell.swift */, - ); - name = DDCollectionViewCell; - sourceTree = ""; - }; - BF7B42D1EC72671FE03D3C0AF5398D40 /* Support Files */ = { - isa = PBXGroup; - children = ( - 0F1CEAE9F4FAB91A665AF2D428A3738E /* ESTabBarController-swift.modulemap */, - 0F024E118CC7C6DF824B3A44E3B5D35F /* ESTabBarController-swift-dummy.m */, - 56277E9016C1E1A607974F30846BE35B /* ESTabBarController-swift-prefix.pch */, - 5E20E9477FD8A3662F55D39BDFAF2C4F /* ESTabBarController-swift-umbrella.h */, - 404742F23166DBF39C139FE4A5140FAD /* ESTabBarController-swift.debug.xcconfig */, - DD6E822FD84878F6DA0DF18290710A92 /* ESTabBarController-swift.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/ESTabBarController-swift"; - sourceTree = ""; - }; - BFF38A47F8A98E69DC43C31D4034CBA2 /* Support Files */ = { - isa = PBXGroup; - children = ( - 42D6D73DE10DE2C134C31111F3F65674 /* PopupDialog.modulemap */, - FA095F3E6860C75AB30F71DF7E77D7EF /* PopupDialog-dummy.m */, - 7E7E95B87C01936E8B2F7C7ED9A4EABF /* PopupDialog-prefix.pch */, - 4972DF1D69095AD65563B4AC673DE6F8 /* PopupDialog-umbrella.h */, - C343C02FE4A6350746A5D09A7082F8EA /* PopupDialog.debug.xcconfig */, - B1B3B78C24D91972E01D60EF4EFF9D2C /* PopupDialog.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/PopupDialog"; - sourceTree = ""; - }; - C09BB1486C5D7F7CBDF9CE84D69D88BD /* Support Files */ = { - isa = PBXGroup; - children = ( - 64D922F40BEFD39E4EDBAED09E42A253 /* JPushExtension-xcframeworks.sh */, - 3EF1A24EF12D2D981431935A575DF361 /* JPushExtension.debug.xcconfig */, - CD8F12B9844C2496DDF15B7705462661 /* JPushExtension.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/JPushExtension"; - sourceTree = ""; - }; - C16462356622CCE0487DF75F40C8B625 /* DDTableView */ = { - isa = PBXGroup; - children = ( - A482D1B3C81BC4D429A24F77D4E10CDD /* DDTableView.swift */, - ); - name = DDTableView; - sourceTree = ""; - }; - C246CADE0DA0158017E76E9CFCAE11B2 /* DDZFPlayerKit_Private */ = { - isa = PBXGroup; - children = ( - 75B9060FB776C87E0D8BFFA23C913933 /* ControlView */, - 94BF35FB15A4061FCD3B2D817AD9D1BA /* Core */, - 6DCCE3A9E2914B4D54BA3EB81B713655 /* ijkplayer */, - 00E74745A7A250F4CA76A8F907D7A2F9 /* Support Files */, - ); - name = DDZFPlayerKit_Private; - path = DDZFPlayerKit_Private; - sourceTree = ""; - }; - C30187432F0D78F0DF42C5230107F8BF /* DDSwitch */ = { - isa = PBXGroup; - children = ( - 5DBB59FA98EC126FCE887FBFDEC9DEEA /* DDSwitch.swift */, - ); - name = DDSwitch; - sourceTree = ""; - }; - C5A67BCFF19614A2C39B70F24F669CE3 /* DDControlsKit_Private */ = { - isa = PBXGroup; - children = ( - EBBA3A997825B6D8C84D099E7697F15B /* DDAttributedString */, - 7B19FF4FAAC1D258622782E19A38EF1C /* DDButton */, - 0737B11A6AF65F78C3CF128DE77A0E9C /* DDCollectionView */, - BD2E3528FC805369C7AC186DB8EBEFC4 /* DDCollectionViewCell */, - F35EB88EC3E1F0058AF774D2929DC80B /* DDImage */, - BCE784557898D3AA760B6E6DB87551DC /* DDImageView */, - F0FE237325BB3F502A77D58FAC077690 /* DDLabel */, - D515BE60B2C2FC67FA6158A9C3D97C65 /* DDNavigationController */, - 958848701ECE56B0A24844F6286D6C9B /* DDScrollView */, - C30187432F0D78F0DF42C5230107F8BF /* DDSwitch */, - C16462356622CCE0487DF75F40C8B625 /* DDTableView */, - 44F34ACE18277C4B7F7980377341A503 /* DDTableViewCell */, - F6DE4903E5C625048EF90A337DCD7B62 /* DDTextField */, - 6F4EF8266029BEFE4D18C5847F8BC1E4 /* DDTextView */, - 8DCDEE1AEEEC1B1338FB045B2209A7A8 /* DDView */, - 97199020CECADDD7B70A05AD3A8D7A0B /* DDViewController */, - AA589270AC487CA8EFA329582799E096 /* Support Files */, - ); - name = DDControlsKit_Private; - path = DDControlsKit_Private; - sourceTree = ""; - }; - C65A4E558CEED226DA56D2E034605CCA /* UINavigationItem+DDCategory */ = { - isa = PBXGroup; - children = ( - 279045C7261070E227F016C7B3CDA49C /* UINavigationItem+DDCategory.h */, - F41A87A84B122BF197E2AEDAF8C61252 /* UINavigationItem+DDCategory.m */, - ); - name = "UINavigationItem+DDCategory"; - sourceTree = ""; - }; - C75853DD0219D4027452952F5BD8530A /* Targets Support Files */ = { - isa = PBXGroup; - children = ( - 40F107534C937BC69E9FBEA4420D7509 /* Pods-OrderScheduling */, - ECFEDF123D996446174017D5A67EDBEB /* Pods-OrderSchedulingNotificationService */, - ); - name = "Targets Support Files"; - sourceTree = ""; - }; - CA50428624F966E89806A56EE3F63880 /* FileManager */ = { - isa = PBXGroup; - children = ( - 75EA5FCCEDCE228CB6796995E1D0BFDE /* DDFileManager.swift */, - ); - name = FileManager; - sourceTree = ""; - }; - CABFB415504202919439AD38D9F71126 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 2D0E4F4560A0D28E301C1A2D090AE1BE /* IJKMediaFramework.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - CB6BD9BF1203E0715BBFA03531BEF4B0 /* DDBaseTableView */ = { - isa = PBXGroup; - children = ( - 9EF742F5D2372049B5C01F37A3A104D0 /* DDBaseTableView.h */, - 436666AB315736653C64EDE0C05F0156 /* DDBaseTableView.m */, - ); - name = DDBaseTableView; - sourceTree = ""; - }; - CCEE09735C19936E4F59BB26176444ED /* JPush */ = { - isa = PBXGroup; - children = ( - 022D8D30E96F5769EA0345F8328BBD29 /* Frameworks */, - AAC990982F63DA27D65E9A7B0CF8FD7F /* Support Files */, - ); - name = JPush; - path = JPush; - sourceTree = ""; - }; - CEEDF92FB4EEFE43D0EB29486EB1477E /* UICollectionViewCell */ = { - isa = PBXGroup; - children = ( - 4B60CB40E2FC208134DDAC1A9F2A9D05 /* DDUICollectionViewCell.swift */, - 3C28BDCBAD94CF0EF86ACC5AEEE734D8 /* UICollectionViewCell.swift */, - ); - name = UICollectionViewCell; - sourceTree = ""; - }; - CF1408CF629C7361332E53B88F7BD30C = { - isa = PBXGroup; - children = ( - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - D89477F20FB1DE18A04690586D7808C4 /* Frameworks */, - 71BDF3DB9518A6140B50F7AA38A28485 /* Pods */, - 30472049FEDBFC970AFE18F2D536D9F1 /* Products */, - C75853DD0219D4027452952F5BD8530A /* Targets Support Files */, - ); - sourceTree = ""; - }; - D15908CDC844D82863D9EE41BA74B213 /* DDCategoryKit_Private */ = { - isa = PBXGroup; - children = ( - 2E09F0C30E2EF115B23D6DA6F45D3700 /* DDCategory.h */, - 24BBB347CDA890676EAC494C297EE1BE /* CALayer+DDCategory */, - F310273078927FE974BF52AAEDD93A91 /* NSAttributedString+DDCategory */, - 64D5D4890C159DC96E3E7A6FC1F1059A /* NSBundle+DDCategory */, - E14C0B26524077B7286FCCE30F713E58 /* NSObject+DDCategory */, - 4ADFEC8A59C5F388D3770FB7CE2EF097 /* NSThread+DDCategory */, - B9DEF8ECB6494AA1AEA018F744B53E58 /* NSURL+DDCategory */, - 66902890F2BE38FA0CF7F62BF54B17AD /* Support Files */, - 23ACDEF9B997771B5D6C2584F863EC67 /* UIApplication+DDCategory */, - 8C71DCC9CAC5FAF90BA8D45760D85751 /* UIBarButtonItem+DDCategory */, - 7D72F0AB9AD9E8F5CAF32CB9049E2E91 /* UIButton+DDCategory */, - A856503D8D9AFBC68B865A8428B4632C /* UICollectionView+DDCategory */, - F989FE2A94A92AFD3ED1245B02A7F823 /* UICollectionViewCell+DDCategory */, - 83CA43A575637A355AFF917283E244DF /* UIFont+DDCategory */, - 517BF798E83D1788017C316EDC123B29 /* UIImage+DDCategory */, - 3B1E3553849BB3404051E911A9AB3B7F /* UIImageView+DDCategory */, - 5B3816FE0AC681740B4CFAA8B3CD1EA9 /* UILabel+DDCategory */, - 60C41352CE0A002F15BA203BEB0D0781 /* UINavigationBar+DDCategory */, - F00CA76E37652B984B28B8BB48290901 /* UINavigationController+DDCategory */, - C65A4E558CEED226DA56D2E034605CCA /* UINavigationItem+DDCategory */, - 5ECED1176A405C2FC91A81F50A5FADBA /* UIScreen+DDCategory */, - DBE56162520E720DA1CF92CDCBF3F6DB /* UIScrollView+DDCategory */, - 27E5500F07A07BD4CCFD5469484545B7 /* UISwitch+DDCategory */, - 5F6336C0FB20EF52949A996957252765 /* UITabBarController+DDCategory */, - 22D36BF69A2CDBE674BBBD1A02E55492 /* UITableView+DDCategory */, - EF5F686DD5F848722EDEEB1DF48D60BD /* UITableViewCell+DDCategory */, - A3D138CD2B4550ADD4F5657F33EEF241 /* UITextField+DDCategory */, - 814E136935470E09443F87A1EB296518 /* UITextView+DDCategory */, - 9CDEAB3BCF03FB126C2BF81CFA40AB35 /* UIView+DDCategory */, - E341A6E2E54B3431063AA8AF41F9E23A /* UIViewController+DDCategory */, - FC54A0963EDD0E047F4C9A83C6B38598 /* UIWindow+DDCategory */, - ); - name = DDCategoryKit_Private; - path = DDCategoryKit_Private; - sourceTree = ""; - }; - D29DD95B7AEA08AFE28525FD91D0E487 /* Base */ = { - isa = PBXGroup; - children = ( - D88894EE3045F82FC515A0F14F7E4550 /* BRBaseView.h */, - D06E1A210D37002D4D9EDBA17FC74F82 /* BRBaseView.m */, - 7994FC0381B5E0274F1FB06C9232399C /* BRPickerStyle.h */, - 31DB6A78B50469B058812C0AB3DEF591 /* BRPickerStyle.m */, - 152188DBC7BA989BAFEC3E87588C15CF /* BRPickerViewMacro.h */, - 983C6C82824565D186F2DE43B686B581 /* NSBundle+BRPickerView.h */, - DCBC10FF75DCF54BF4C8BE4226106158 /* NSBundle+BRPickerView.m */, - 1587FCCEE47EC3EF27CC91709D6CEA85 /* Resources */, - ); - name = Base; - sourceTree = ""; - }; - D35AC2669DDE9BFF131FAF05845A4E4B /* Support Files */ = { - isa = PBXGroup; - children = ( - 076540906139345D94D6154860BC78BD /* Bugly.debug.xcconfig */, - C8912C7EDE4E45FE094F25961D746D68 /* Bugly.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/Bugly"; - sourceTree = ""; - }; - D3E6EE6F292855F0D876753F9DBA0266 /* DDPersistenceKit_Private */ = { - isa = PBXGroup; - children = ( - 8498143BCF31D1D2F1C61D52BE380805 /* DDKeychain.swift */, - 2242C43BF7A075D9EE13556197414DD5 /* Support Files */, - ); - name = DDPersistenceKit_Private; - path = DDPersistenceKit_Private; - sourceTree = ""; - }; - D4BFD1ABC543C5D52B90B5762E2224F5 /* Support Files */ = { - isa = PBXGroup; - children = ( - AA9A95CE2E427F6D271136668F01D57C /* RxRelay.modulemap */, - C5ED2057E6AFCBF4956A0048C71B1242 /* RxRelay-dummy.m */, - 178D2669607D468DF7A1E2D2A2126993 /* RxRelay-prefix.pch */, - 0021B2B09CD8A999B6DCD111BA5AEF9E /* RxRelay-umbrella.h */, - DBDD0925F5FB23C67496CFE06943DA97 /* RxRelay.debug.xcconfig */, - DF2AEC51482009E8935EC3F37C84EC10 /* RxRelay.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/RxRelay"; - sourceTree = ""; - }; - D515BE60B2C2FC67FA6158A9C3D97C65 /* DDNavigationController */ = { - isa = PBXGroup; - children = ( - E1B104D5CB3FB436481B45A71DFEA863 /* DDNavigationController.swift */, - ); - name = DDNavigationController; - sourceTree = ""; - }; - D669167049D5184F7ED37BC54232D6BA /* ESTabBarController-swift */ = { - isa = PBXGroup; - children = ( - 16726529D4925EFA5D61246DDF2520D6 /* ESTabBar.swift */, - B96ACA8FDAAD9914754C41EC4070FCB8 /* ESTabBarController.swift */, - C4D1F46CFAEE91B9E24E4CB861FBC9E0 /* ESTabBarItem.swift */, - B4E1CA0B57D4861AD65ECAD44D746C34 /* ESTabBarItemBadgeView.swift */, - 23690B28D6FFD2554B2D3954ECB97E68 /* ESTabBarItemContainer.swift */, - 1C4F166A34106C167C1D61C5851F8AF0 /* ESTabBarItemContentView.swift */, - B81C152E4A6B556CB69AD638A10954E8 /* ESTabBarItemMoreContentView.swift */, - 7498BD3B3A74C235A60BB0842843D270 /* Resources */, - BF7B42D1EC72671FE03D3C0AF5398D40 /* Support Files */, - ); - name = "ESTabBarController-swift"; - path = "ESTabBarController-swift"; - sourceTree = ""; - }; - D7C7AC43C0734B4BAB2D7736603027AC /* RxSwift */ = { - isa = PBXGroup; - children = ( - 9684E5208AF2080FA246A633E3635E48 /* AddRef.swift */, - 885ED7885E4BCED9FE28C757B18EC39A /* Amb.swift */, - 457CDCAB18594BD4385D6CEBCB903674 /* AnonymousDisposable.swift */, - 6D4473979D995416C875C583F2011D08 /* AnonymousObserver.swift */, - 3E8CB968364EE8AE8F32D4A3B8CE29FE /* AnyObserver.swift */, - EA7C6374BBA0DE8238B8A6C24B7D5E34 /* AsMaybe.swift */, - 17AF82E5033417808ED4E3CB26CA7030 /* AsSingle.swift */, - 539440C9DEE5A25C2E270CEABEB1D214 /* AsyncLock.swift */, - A40B6D53F2C484BF4A1AF2AB7E13905E /* AsyncSubject.swift */, - 06CB1C2A1EF28D471E1541ECC66BEAE7 /* AtomicInt.swift */, - 686DDB8A39D48159240E2AEA744CEF9F /* Bag.swift */, - 00FA6667229E991BB2E2C29A6538EF72 /* Bag+Rx.swift */, - 56B9E26358C9F2398DEEB048994BE93A /* BehaviorSubject.swift */, - 9372CC07D51DA7B97C860B833A7CB648 /* BinaryDisposable.swift */, - CF38C907BA4363B405B06B2D5BCC7B3D /* Binder.swift */, - 69CAEE7784D12AD99520E3982E588075 /* BooleanDisposable.swift */, - 3251F63234906BD5D69897A47D7DE228 /* Buffer.swift */, - BE9E8C2F33A98716C8CB038355C1390B /* Cancelable.swift */, - 6FAFEF99EFBA6FF7F7E9C96337811270 /* Catch.swift */, - 13FF1A8278613850FF62B0D49645157C /* CombineLatest.swift */, - 5A5434B5D7B7E8E6B1CD1AD4FC5985DB /* CombineLatest+arity.swift */, - 2B081C311F36B5381C8064B5A6CA8E74 /* CombineLatest+Collection.swift */, - 716DC897DBBFFCBB2E98C88BCE37BEB1 /* CompactMap.swift */, - 5E6397A0CDA382C57C417058EA4DAE97 /* Completable.swift */, - 3715174F3A8A21F2856A81720D2A4629 /* Completable+AndThen.swift */, - 7B24C7137909F5E10723721E632E326D /* CompositeDisposable.swift */, - 20AF9E2DEA4C18BDEC2A77D3D329CFFF /* Concat.swift */, - 69DAEACD65BE2304D0A45728C3932162 /* ConcurrentDispatchQueueScheduler.swift */, - B3BC900D01EF71EE85901B33DB533EE4 /* ConcurrentMainScheduler.swift */, - FA722024DF90D36BDC855C49AA1E84E1 /* ConnectableObservableType.swift */, - BDA833FD0597BF9701781FFC8BDA8715 /* Create.swift */, - 62D9858F32402E3110E88707039ACCCA /* CurrentThreadScheduler.swift */, - 74B22967C51D4B324B6AF48BFFF24C9F /* Date+Dispatch.swift */, - ED3395300C0C4DD1C5ED23CAD2620B09 /* Debounce.swift */, - 566149008FC73438B00482887D0A93B1 /* Debug.swift */, - B46EB72D6315FBCBFE0C8AAF6A32E8AF /* Decode.swift */, - 16E7B1F74180B8AD2D8B8445CE19FAFD /* DefaultIfEmpty.swift */, - 2875A2E717CC17FABBE08271D33F0C80 /* Deferred.swift */, - 44CE5DB2B5E2C512B1EABB9D218832F6 /* Delay.swift */, - 446374F155A36CCF0CAEF6EA8620AAD7 /* DelaySubscription.swift */, - C52A36F8A43054CA8133A15E0001C73E /* Dematerialize.swift */, - BD256580AAFD029F0A80CB33DC9878A7 /* DispatchQueue+Extensions.swift */, - 418F9B96060DF5FBA16BDB1166B19F5F /* DispatchQueueConfiguration.swift */, - 54ADBCF354548A1BA32238F2EDEDC39B /* Disposable.swift */, - EBC6E4217A7A53C6E00E095A98CD7F60 /* Disposables.swift */, - 8B38AE3B3E25A0D8BCCFD46D1E143B8D /* DisposeBag.swift */, - 712258C5A1A8F6094095053BD36BE3B1 /* DisposeBase.swift */, - 51F2ED7FD6260CFB78C34CE4FA7F7E67 /* DistinctUntilChanged.swift */, - 4F64FFF87CF53651BD305B21AF0D67B2 /* Do.swift */, - F731947ED4C2E3A9E12E4662FD5BA8EA /* ElementAt.swift */, - 445BD886C8C18951DE33FDE7A05783F1 /* Empty.swift */, - 8DD5FA871FE864A94DD9BEF3F937B03A /* Enumerated.swift */, - 99203C89C26B7C23E2C8EE71591F6A87 /* Error.swift */, - 7FE26F76E732DEF8C65ADED5FC1382A1 /* Errors.swift */, - 831B20D33413BC1CDBD0B53824B21FB9 /* Event.swift */, - 8428E6886EF5735974D641689E6BEE74 /* Filter.swift */, - DDDA4038ABB30110E2D3271068B0EB69 /* First.swift */, - C3427CC32FA757BD5490C584C308E20B /* Generate.swift */, - A5A9FB1441DD7A880D88E368B2138178 /* GroupBy.swift */, - 5FB4BCD456A230F295D58FBDDE49D3CE /* GroupedObservable.swift */, - CFF2CDF0A1C46CCC62AAE0924ABF1C29 /* HistoricalScheduler.swift */, - 100591C0CA8BC02FA5698620BD98FA34 /* HistoricalSchedulerTimeConverter.swift */, - 7E181C13ADB17FC57B6A09E78D0FAA07 /* ImmediateSchedulerType.swift */, - E2B3927425DE48B1B85CC9C75B89ED55 /* Infallible.swift */, - DEEF6A42E1003FED5213630188F0BCF9 /* Infallible+CombineLatest+arity.swift */, - A0FBFF0B8B14B1045EB2894EA2F1B363 /* Infallible+Concurrency.swift */, - A18FB371493DB8CCF5ADBDF82544101A /* Infallible+Create.swift */, - F59A80C7846EDAE9C2DB93A2BD7FA63B /* Infallible+Operators.swift */, - 18372F0E39BA4CC4FC036FCD277A0656 /* Infallible+Zip+arity.swift */, - 5CB255358604A2A3A9BE6B9B640EF332 /* InfiniteSequence.swift */, - EC4387F3F51AEEFFFB729F90F32F16B7 /* InvocableScheduledItem.swift */, - 8C7F0FFA47C3049DC719D410F57047C6 /* InvocableType.swift */, - 9D2D0EAEFB4F5549BE50EC06FF3F85D9 /* Just.swift */, - EE8484A808EA47CF8801A366981A9DCB /* Lock.swift */, - 6AEE3884E8EC8EEAAEFB67D17CC68D60 /* LockOwnerType.swift */, - 1E32B5B8F126CC4469DC4B28CA408AF4 /* MainScheduler.swift */, - 3285ECDE4EC7D2748C153D3697BE803A /* Map.swift */, - 382F3AA039A012560669E2786E5433D9 /* Materialize.swift */, - 7287EC60AA5E94AF51194C306E2508AC /* Maybe.swift */, - 0EA0223AFAEA527F51E060EC701FD9D5 /* Merge.swift */, - 26BB5F61F8863E99DA27C4E09C51050B /* Multicast.swift */, - D6409751BC87B860116CD41641A4EEEB /* Never.swift */, - 3051487E547347F0DCCB518F90317B8C /* NopDisposable.swift */, - C3B2233311370F500690044FC799B0D9 /* Observable.swift */, - B9047AB16D96E34F038045641FCEE0CE /* Observable+Concurrency.swift */, - 7C5E1F4832E5E802B3096201185D46F2 /* ObservableConvertibleType.swift */, - B5A920C3DD33739DB43E502929992BB4 /* ObservableConvertibleType+Infallible.swift */, - A5708C6073CCFAC3E206B14A1CDAA6B1 /* ObservableType.swift */, - 693E95377E489FBC2A570B8A5132231C /* ObservableType+Extensions.swift */, - 0D2C8B8FCE4545423026D47FA0BAF93B /* ObservableType+PrimitiveSequence.swift */, - EAD31E03CA470FCAAC8ED316DEBF0318 /* ObserveOn.swift */, - 209DED469D48F3D7CC4B7636A432924F /* ObserverBase.swift */, - 0C819BB49B3601AD30B87D450F464CC4 /* ObserverType.swift */, - 942C14E695852E8D238490D2EE310686 /* OperationQueueScheduler.swift */, - 251DEF303C9617640D84A7EA0306539F /* Optional.swift */, - FB5B9559B4A5F0D29C7FE2478C5F3781 /* Platform.Darwin.swift */, - 90FA751E3E2CDBE473C890A58D909C15 /* Platform.Linux.swift */, - 18EFC4D0850A7C6517CF4593826B1247 /* PrimitiveSequence.swift */, - 0C17676C2C51A168A30ABFFF942281EF /* PrimitiveSequence+Concurrency.swift */, - CEAE6478224C9C58CCED01B7D5EBD95B /* PrimitiveSequence+Zip+arity.swift */, - 72EF513226CD4CAA4535790E046899B7 /* PriorityQueue.swift */, - 4676A6C331D2C8F6A4CDD7FF5DF533F7 /* Producer.swift */, - CBDCF2E2806442EAACA290D1B6CD1865 /* PublishSubject.swift */, - 896E130CFF5AEF120690273A4D51A899 /* Queue.swift */, - 1962803FD59FC42F10DEE2A33E08B008 /* Range.swift */, - AF46B015D6EE97CBAE40564A92482A61 /* Reactive.swift */, - 3A615B3287B92F749920B6A3508323FA /* RecursiveLock.swift */, - 547000FF35ABCCC797CB4B8681D8BB16 /* RecursiveScheduler.swift */, - 40DBBFFF4A55B7E8AC42F0211E3F37FC /* Reduce.swift */, - 05CAA3162F254BAD2562D6C24FC25B43 /* RefCountDisposable.swift */, - 0BE2A0EF9D56819A61BC260CE4C8D225 /* Repeat.swift */, - 6F77AE1A97D56A1FB1D75FA81AD0B323 /* ReplaySubject.swift */, - 5F19601F920B1B3224D2D2242CA9FFB3 /* RetryWhen.swift */, - EBF9CBF41B43FCD2928EBD34745C1603 /* Rx.swift */, - 5AA6565E54EE5A1694A2DAAD03BC23C5 /* RxMutableBox.swift */, - 27709638D16E4E14D83FC485BDF23BB6 /* Sample.swift */, - D2FA04DA35E9EA159876C62B7E64BE72 /* Scan.swift */, - 8792A7A9537CE4E647DDE0061A9556A7 /* ScheduledDisposable.swift */, - 2C22936827447971972D59197C66EC0E /* ScheduledItem.swift */, - FCF62EAF60C5015AF8A883FEEE83907C /* ScheduledItemType.swift */, - 8C934F4020D5B676CC43644FC6189DDE /* SchedulerServices+Emulation.swift */, - 45C4E92B540566B16528071BAB185B4E /* SchedulerType.swift */, - F72F8157F7793CF06450BEC7A5AFE014 /* Sequence.swift */, - CCD0EEC530FB6824A9E422B23CDE22BD /* SerialDispatchQueueScheduler.swift */, - 87D76BBB25FCCE3F47116A0CC60ED74A /* SerialDisposable.swift */, - 8EF5D086ECA8310E1AE23ABAE87E3D2A /* ShareReplayScope.swift */, - A3BD5D11B5CB6A2B0A6CB9C123780623 /* Single.swift */, - F83D993271FA1E68D39B8CE86244EAAE /* SingleAssignmentDisposable.swift */, - 44348DB4F29E938E9FDF2F7E2CF490AB /* SingleAsync.swift */, - FE099C0BE1DF10B4E09029F0CAC6B586 /* Sink.swift */, - 656B9F9344610D50C24BA187D7C06D36 /* Skip.swift */, - 99FA7AA4D3F316909C923D07213FF1E3 /* SkipUntil.swift */, - 7CA7AAB23E0EA60B213EB7E208530CE8 /* SkipWhile.swift */, - 135A0A5D3367ABF20DAFEA47ECC806F9 /* StartWith.swift */, - D58C980FB04DBDCB318A173DB5818C3B /* SubjectType.swift */, - EF3CE6982BF810FD0EE3F1319498ABFF /* SubscribeOn.swift */, - A366CA9FFFC286CE0E906A7996D41FBA /* SubscriptionDisposable.swift */, - E8C42D67609D88558E1450A18B6E59EC /* SwiftSupport.swift */, - E5B1A18F6D34D8D44A2956B3A7D2F7CF /* Switch.swift */, - 72433C83B59FB3A89A9AC9B74431D3BE /* SwitchIfEmpty.swift */, - 8BEFDAF0F735B6BACFAF63C0B9E3F1F0 /* SynchronizedDisposeType.swift */, - 6666B8BBA034226611E539BAAC222772 /* SynchronizedOnType.swift */, - DEC4AC451F11FA32131EE78BB3FD9EF0 /* SynchronizedUnsubscribeType.swift */, - B134E99290E40135CBCB7EDBB5313561 /* TailRecursiveSink.swift */, - 8B12CAB104DDABADA7B3FDCFB0B03F49 /* Take.swift */, - 0CA09743333787DF3615586222AC3B7E /* TakeLast.swift */, - 9FAD6A4776B11C9AA107287E11B7C19D /* TakeWithPredicate.swift */, - AE64B0CAB84F57A86A736B0ECC34BE87 /* Throttle.swift */, - A5A7368941998232BE3AA8611B4EF6D5 /* Timeout.swift */, - 53C5218BC84CA6549F42E777DE2A80CE /* Timer.swift */, - 5F0DB9B80DE544F1AAD189CBF3B3ED7A /* ToArray.swift */, - B54B4AB77460FD0EF4E6301658A189DF /* Using.swift */, - 63964BF11EFEDD9CDC2E61E5FDA0F384 /* VirtualTimeConverterType.swift */, - B83E171BF333BCE6042F4790900A9FE2 /* VirtualTimeScheduler.swift */, - 865E5F8F5226DEAD3F9354CEF97CC836 /* Window.swift */, - 409DD780B50F40EFF5872988210030C6 /* WithLatestFrom.swift */, - AA48B41755825B3A3C4335BB7AF7847E /* WithUnretained.swift */, - CC4C3680FD2099E89158AF151AD3F178 /* Zip.swift */, - 4761AC1D3EEC34D23B8AB8FB50CD94F5 /* Zip+arity.swift */, - 348998058C7A2181E42DACBF50973982 /* Zip+Collection.swift */, - 018039353A00085FB9C81E9A0D338A3A /* Support Files */, - ); - name = RxSwift; - path = RxSwift; - sourceTree = ""; - }; - D89477F20FB1DE18A04690586D7808C4 /* Frameworks */ = { - isa = PBXGroup; - children = ( - ); - name = Frameworks; - sourceTree = ""; - }; - D96206E627646D5FA91F8B0FBC8DE9A8 /* SwiftEntryKit */ = { - isa = PBXGroup; - children = ( - 1041174B6008065A01D628E819B0F88B /* EKAccessoryNoteMessageView.swift */, - 9B538746BC9F48CA0F0B3EEFBB523B66 /* EKAlertMessage.swift */, - 3A63310BFF4BCEE45A37FEDC5464D8C8 /* EKAlertMessageView.swift */, - E073EEA268C0B3013B1B312FA549DEBF /* EKAttributes.swift */, - C408382CB10B497594A402E6EF66AFD7 /* EKAttributes+Animation.swift */, - FD591A80AEE063F209FAF2EE3021EC1D /* EKAttributes+BackgroundStyle.swift */, - 7A35003D0111822D8C96F21E91A1DDA6 /* EKAttributes+DisplayMode.swift */, - 7EDEEB9E0A8CDC712617883D540B4FA0 /* EKAttributes+Duration.swift */, - B4B6B677BE9FFA7A01674E06994149A5 /* EKAttributes+FrameStyle.swift */, - 2BAF5D75E4FB52D4E9196CE377997DE9 /* EKAttributes+HapticFeedback.swift */, - A6EF5A90C013D84B2CB1DC37BABA9C4D /* EKAttributes+LifecycleActions.swift */, - F6A3D4567910BCC6A6221DFC75E5D0E9 /* EKAttributes+PopBehavior.swift */, - 0BEA970F06657F2334B42BE2FFFDE5F5 /* EKAttributes+Position.swift */, - F040B492EFDF0AFBD24823DBC534B320 /* EKAttributes+PositionConstraints.swift */, - 21F1FCF1B9D88A58BD121690F90975BD /* EKAttributes+Precedence.swift */, - 39D0C74A85C6A8657704AD7AA6B953C4 /* EKAttributes+Presets.swift */, - 5612297CB1E62B65F4C43D6CC1F895DF /* EKAttributes+Scroll.swift */, - F429EA86FA44E33584A442245B1808AA /* EKAttributes+Shadow.swift */, - 53DB07EC82DD9C1E75BE9779C461DDBD /* EKAttributes+StatusBar.swift */, - 4C18A035A3551BF44932FA971E5ED5EE /* EKAttributes+UserInteraction.swift */, - 9F0846E80CCBB02E2D1DD78D7A719574 /* EKAttributes+Validations.swift */, - EA306782607E93BE5C83E20F856D1FB7 /* EKAttributes+WindowLevel.swift */, - CA15DFDDCC8535D313EB0DD2D765E4FD /* EKBackgroundView.swift */, - 07D63349A15F0AD260D727670549BB75 /* EKButtonBarView.swift */, - 5EF19DED81F206CA7BE663143BBA6CE8 /* EKButtonView.swift */, - 380AB04F49D86EFF23C80BA0B9985AD3 /* EKColor.swift */, - 6B0B1A7BEABC653A6A77F139744977C9 /* EKContentView.swift */, - 41CCAF8F8DBC6FB73F1598E27D048521 /* EKEntryView.swift */, - A724CE453656CC7AAF03C60FA8DC88A2 /* EKFormMessageView.swift */, - 3D5797C919C52BCF6845A7B532866584 /* EKImageNoteMessageView.swift */, - 31A01C7DB9ABC17AE1F999346AC6305E /* EKMessageContentView.swift */, - 2652145BBBEDD592507999E4EA544295 /* EKNoteMessageView.swift */, - C69A0E7976A70A4E86A4E00C69874F9D /* EKNotificationMessage.swift */, - FB83826263A364A1DB23D827C1999862 /* EKNotificationMessageView.swift */, - 6C03FB8C96325BC93F46E53E75B31B01 /* EKPopUpMessage.swift */, - 219D2C7D4A1233A49409F253CCB06585 /* EKPopUpMessageView.swift */, - 2251394CF95CFBA2E990C43CD3FC76B1 /* EKProcessingNoteMessageView.swift */, - 0B0CC58D2B57578DC41AC56CE29139C6 /* EKProperty.swift */, - B12AA9D5A20BE900E2D18AB09D1B8E06 /* EKRatingMessage.swift */, - 84327167CBBDD99B931D23F9AFF30DA5 /* EKRatingMessageView.swift */, - 41259F35F24F3B493E70473754F75265 /* EKRatingSymbolsContainerView.swift */, - 4218BFA03EECBC67513AD75A3D832AF1 /* EKRatingSymbolView.swift */, - 55C78DC3A2BF39C514F3164238BB70D0 /* EKRootViewController.swift */, - 93C94BD6E56866844B511F120D496BDE /* EKSimpleMessage.swift */, - 34E995B15C36462115ABFF8062A67418 /* EKSimpleMessageView.swift */, - 53A696AE56B4D87ACE694E3B5952C714 /* EKStyleView.swift */, - AEBBB5D23034F1AC2583F3353DF70EB7 /* EKTextField.swift */, - 451EB781764886B195B6449777F7D9EC /* EKWindow.swift */, - 17C6BB659A7CC437641CCB80B4A07F44 /* EKWindowProvider.swift */, - 29503832346B5ACA306B8351EFEF99F4 /* EKWrapperView.swift */, - 81F689351372B4E9638C1CDBF2952EC3 /* EKXStatusBarMessageView.swift */, - D509B560C3FD14DE99ED2E461F6F61FA /* EntryAppearanceDescriptor.swift */, - C3438C5869A327F52AF48414D67A7A69 /* EntryCachingHeuristic.swift */, - F264CFD0AE4632E0FD8EBAB9513B169C /* GradientView.swift */, - 4AA0D2BFBE481E96E80A0604083AF907 /* HapticFeedbackGenerator.swift */, - 66B027B2A71C75DE5339595FFF112FB8 /* QLCompatibility.swift */, - 8F49FBAA4DF5966CBB6BF8C388042265 /* QLUtils.swift */, - 67023A0C29F65A53F4C7542F092344D9 /* SwiftEntryKit.swift */, - A426F3AF126F6DA8CA693D6F418135D3 /* UIApplication+EKAppearance.swift */, - 5CE4C61D949DBCA1849BD1D3BB684F87 /* UIColor+Utils.swift */, - E2CA575A587A32E09AFE79C40FEC5169 /* UIEdgeInsets+Utils.swift */, - 95624B5D8F793D3FC5BE25AAECDF114B /* UIRectCorner+Short.swift */, - 704719AC18CD745B19709E9725EFB365 /* UIView+QLContentWrap.swift */, - FE3C51C548ACADCC415CC972B8AA138B /* UIView+QuickLayout.swift */, - F5FBF58841F12B52E17EB40D93DDB5A7 /* UIView+Responder.swift */, - 98D8CCB8D52B56C004790FC7FB9A1C84 /* UIView+Shadow.swift */, - C7E31D8C2FE8DC2AC72DC429CAF78F0B /* UIView+Utils.swift */, - BA001FD732029591053793CD9266C318 /* UIViewArray+QuickLayout.swift */, - 091FB38CA86706325600FD163F552C96 /* Support Files */, - ); - name = SwiftEntryKit; - path = SwiftEntryKit; - sourceTree = ""; - }; - D9D39D42083B149DBA80C647C0D4B89F /* UIColor */ = { - isa = PBXGroup; - children = ( - 3B8B9E1EAE4DB813CB3B48BA26A853EB /* UIColor.swift */, - ); - name = UIColor; - sourceTree = ""; - }; - DA7B76D9FD6DCF38508D400B23903F78 /* DDMANaviManager */ = { - isa = PBXGroup; - children = ( - 20B9AD5D0F5F4F68E74EBC1DB5C6F50C /* DDMANaviManager.h */, - 4C4C5A49DFCC82BEA24EA24DA32C7EE9 /* DDMANaviManager.m */, - ); - name = DDMANaviManager; - sourceTree = ""; - }; - DBE56162520E720DA1CF92CDCBF3F6DB /* UIScrollView+DDCategory */ = { - isa = PBXGroup; - children = ( - 577939DB40D698A43C32E2C6C96D8D54 /* UIScrollView+DDCategory.h */, - 44FE22F59FF2596285278D5DCA157A06 /* UIScrollView+DDCategory.m */, - ); - name = "UIScrollView+DDCategory"; - sourceTree = ""; - }; - DDC50AD7A6FDF2525655E340541CBBF6 /* Resources */ = { - isa = PBXGroup; - children = ( - C38350A7021D51F8E99227F3D940494D /* ZFPlayer.bundle */, - ); - name = Resources; - sourceTree = ""; - }; - DE84C51D4B34B1D6FA7DBBC188243BA2 /* Support Files */ = { - isa = PBXGroup; - children = ( - 90118CBBA6CFD233F5A54E0C34623B80 /* Alamofire.modulemap */, - 91314E62A67C82ADC8510FA97AD85E98 /* Alamofire-dummy.m */, - 00215A81703BD34FA6ED9D5801B47F8E /* Alamofire-prefix.pch */, - 5775410DC32C716E14D77A6112044605 /* Alamofire-umbrella.h */, - 52B570D1BFFF775858C3A96626EEAB44 /* Alamofire.debug.xcconfig */, - BB875281CE395495948947FC73ADD1BF /* Alamofire.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/Alamofire"; - sourceTree = ""; - }; - DEB5B4166B6DCCD22B1ABEF4050B4085 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 442E8707D4AEB66ADA3DE6E981681F69 /* AMapTrackKit.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - DF0CE1B03B58A0A509591CCE7C7C92EF /* Support Files */ = { - isa = PBXGroup; - children = ( - DA9D848A9A1CE50B493878AC5B6453AE /* DDFontKit_Private.modulemap */, - 8E02C3234AC4A04B5FAD9A2F0ECC740A /* DDFontKit_Private-dummy.m */, - D80F968D98241681D31CE31C3C611B4E /* DDFontKit_Private-prefix.pch */, - FB4DBAD777C369DC82B55B8F1902E69B /* DDFontKit_Private-umbrella.h */, - 4670DDFAF1755ACD108E1DBC72E66685 /* DDFontKit_Private.debug.xcconfig */, - A1343B18CD61CA9E028BFD908770A0F2 /* DDFontKit_Private.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/DDFontKit_Private"; - sourceTree = ""; - }; - E04E3A33D9C4C20A1E70E509E63598EA /* Support Files */ = { - isa = PBXGroup; - children = ( - 9AF8BE5979CE4BA8B23DF9ACAAC3D0AE /* DDMAMapKit_Private.modulemap */, - A32142F9C3ACAA35A914FC475558ED9D /* DDMAMapKit_Private-dummy.m */, - 0C11D5828432F95DF140C0DA7B677C80 /* DDMAMapKit_Private-prefix.pch */, - 6195DD4BC0C21292B9CBA555E364D1CB /* DDMAMapKit_Private-umbrella.h */, - F09D6602F5FCF95A8ED208D36104E477 /* DDMAMapKit_Private.debug.xcconfig */, - 7577CE3988A94830031C97156A439570 /* DDMAMapKit_Private.release.xcconfig */, - 5D0133E9AF4E6AA2F92D6B909E8DA5F5 /* ResourceBundle-DDMAMapKit_Private-DDMAMapKit_Private-Info.plist */, - ); - name = "Support Files"; - path = "../Target Support Files/DDMAMapKit_Private"; - sourceTree = ""; - }; - E0FE236687443826C093AB643CC28FDA /* Frameworks */ = { - isa = PBXGroup; - children = ( - 1BDD0DE426C4668E0ED9AE67C8C629C9 /* AMapLocationKit.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - E14C0B26524077B7286FCCE30F713E58 /* NSObject+DDCategory */ = { - isa = PBXGroup; - children = ( - D9DF61443696E25D119968FD864EB092 /* NSObject+DDCategory.h */, - 31FC849E0CFEB42AB4850F23C1A00092 /* NSObject+DDCategory.m */, - ); - name = "NSObject+DDCategory"; - sourceTree = ""; - }; - E1AA544F9C63E28F83AEC775D068EECD /* DDBaseCollectionView */ = { - isa = PBXGroup; - children = ( - F76ACC56BA5AAD1D563E19E5841891D6 /* DDBaseCollectionView.h */, - BB06AB8C6AB720492CD7C07FB2FB1E93 /* DDBaseCollectionView.m */, - ); - name = DDBaseCollectionView; - sourceTree = ""; - }; - E28F80CB4D16EB69B8AFA13743BB65FD /* Support Files */ = { - isa = PBXGroup; - children = ( - F97A959B6445AEF8D2365927D0D173DC /* AMapLocation-NO-IDFA.debug.xcconfig */, - A6DCBE7BA32A6207103E3433A2D746EB /* AMapLocation-NO-IDFA.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/AMapLocation-NO-IDFA"; - sourceTree = ""; - }; - E341A6E2E54B3431063AA8AF41F9E23A /* UIViewController+DDCategory */ = { - isa = PBXGroup; - children = ( - 6E131492C4734358B75A1E007DF069D4 /* UIViewController+DDCategory.h */, - CE6AFA9915B5BE9AA03F5AFDA4F0C76D /* UIViewController+DDCategory.m */, - ); - name = "UIViewController+DDCategory"; - sourceTree = ""; - }; - EA258734861E32735EB4FAA048CC6E2A /* SnapKit */ = { - isa = PBXGroup; - children = ( - 86B2A4FF9C2A0A6FE200F8903E17B272 /* Constraint.swift */, - F9A279C65F7CCAC189B64F5C731B0CCB /* ConstraintAttributes.swift */, - 50F91B65F8D524CA6D893A62F527BC0B /* ConstraintConfig.swift */, - 76E8749A43C5D7F0DA7AF30DB69F8996 /* ConstraintConstantTarget.swift */, - 641AA47CF864C1D4AD901A529A77C4E4 /* ConstraintDescription.swift */, - 8519064FA6E642776DCAF0CE14AAB2EA /* ConstraintDirectionalInsets.swift */, - D878B3E61759AFBA94E2AD2BA556C63B /* ConstraintDirectionalInsetTarget.swift */, - 9153015AB6FD5ABB6F8B4472D393CEAB /* ConstraintDSL.swift */, - E67CB224042ABA4AE746F698258A5BAF /* ConstraintInsets.swift */, - BFFA3748DBD1C58F25A0B59AFF5C5313 /* ConstraintInsetTarget.swift */, - 209FAB8364FAFA09461D2E3FEE43031A /* ConstraintItem.swift */, - C395B8259CC6D308C5CA33BA4BF46349 /* ConstraintLayoutGuide.swift */, - CA20C89C85B58F4039D8DF2007A09985 /* ConstraintLayoutGuide+Extensions.swift */, - 6F5271387C32E0CEF044AA35FED48BE4 /* ConstraintLayoutGuideDSL.swift */, - 2B62494A345FE3738E54D0B7BB72B876 /* ConstraintLayoutSupport.swift */, - DCCB5B88E4403F92CC5C5B2D573509D0 /* ConstraintLayoutSupportDSL.swift */, - 61795DD4AAC00E4DE2DBFC88353480A3 /* ConstraintMaker.swift */, - B2938A0EF02094C949227F15AEFEECD7 /* ConstraintMakerEditable.swift */, - 94BC58F3425390D4FF8DFD06FFF3A3AB /* ConstraintMakerExtendable.swift */, - F5A7774A11BB9917E8EE657319AE2549 /* ConstraintMakerFinalizable.swift */, - 08B10ABD8E2D4014D47119D67259DAAB /* ConstraintMakerPrioritizable.swift */, - A856362BC2958F1E938FC76343C3C31D /* ConstraintMakerRelatable.swift */, - 61F7EFB98DBCB896A8D8AC970EE5472C /* ConstraintMakerRelatable+Extensions.swift */, - 3A7784C8FB288E38B9CD0E6D5C56C3F4 /* ConstraintMultiplierTarget.swift */, - 5B2417A6C27552AF94CEB6A7B3F347AC /* ConstraintOffsetTarget.swift */, - 818D1A567BAFE4F5792B865DA9E9A500 /* ConstraintPriority.swift */, - E6DF2B3DF55513B9094D6EAA7BA10CC9 /* ConstraintPriorityTarget.swift */, - E163311AD439D782918263286D181B9E /* ConstraintRelatableTarget.swift */, - A73B56EBEAC18C110C7A0BF41780D315 /* ConstraintRelation.swift */, - 91BEADBC66054210F2E8D7D0FB1F40F9 /* ConstraintView.swift */, - 5C63CC9D0774D46FFAF866743A4AB191 /* ConstraintView+Extensions.swift */, - F4F93F49467F0FB866E2CC8ADB4E6580 /* ConstraintViewDSL.swift */, - 65FDD276990279745BA6CB81D369081D /* Debugging.swift */, - 1706A4772B2BBAD1B39CA90FD77B158B /* LayoutConstraint.swift */, - 6304FE730A0B040C2ADB8CB9C0DA30ED /* LayoutConstraintItem.swift */, - 6A877D279EEFB879AFA9861EF2D44691 /* Typealiases.swift */, - 289DCBB1FCB8AE9994D9CD156EDF5882 /* UILayoutSupport+Extensions.swift */, - AE120E3EBDC111319F4D0C614A7B634C /* Support Files */, - ); - name = SnapKit; - path = SnapKit; - sourceTree = ""; - }; - EA7D89E6740391DE59BFFAE7560036F2 /* SwiftLog */ = { - isa = PBXGroup; - children = ( - 53690792A070ED57C3C78781AE5FD16F /* DDSwiftLog.swift */, - ); - name = SwiftLog; - sourceTree = ""; - }; - EBBA3A997825B6D8C84D099E7697F15B /* DDAttributedString */ = { - isa = PBXGroup; - children = ( - 68A2ADFF5DD39F278ED312E5567831D9 /* DDAttributedString.swift */, - 68554C3CC98B485FD1D853F06B7641E9 /* DDMutableAttributedString.swift */, - ); - name = DDAttributedString; - sourceTree = ""; - }; - ECFEDF123D996446174017D5A67EDBEB /* Pods-OrderSchedulingNotificationService */ = { - isa = PBXGroup; - children = ( - E4863DBFE563EB129CD7414E7C378616 /* Pods-OrderSchedulingNotificationService-acknowledgements.markdown */, - 39C2ABB7EE85CD6B4D61998636DB33BB /* Pods-OrderSchedulingNotificationService-acknowledgements.plist */, - 861E3EABF816A1CA179B292C434C7624 /* Pods-OrderSchedulingNotificationService-dummy.m */, - 7BF437F1301E282D248141EA0E4FDED5 /* Pods-OrderSchedulingNotificationService.debug.xcconfig */, - A7EC9B31B72E86761444A2C60DB92CC6 /* Pods-OrderSchedulingNotificationService.prerelease.xcconfig */, - 18BCA08F5CEEE178EA4B5E4C7521ECB7 /* Pods-OrderSchedulingNotificationService.release.xcconfig */, - ); - name = "Pods-OrderSchedulingNotificationService"; - path = "Target Support Files/Pods-OrderSchedulingNotificationService"; - sourceTree = ""; - }; - EE3C12B9CE4BD62CEFDA487AFC380296 /* OCLog */ = { - isa = PBXGroup; - children = ( - 96EC391639BC38C74935AA3468FCEF06 /* DDOCLog.h */, - ); - name = OCLog; - sourceTree = ""; - }; - EF5F686DD5F848722EDEEB1DF48D60BD /* UITableViewCell+DDCategory */ = { - isa = PBXGroup; - children = ( - B9BD2F561593D661C8A6C7DD23A16169 /* UITableViewCell+DDCategory.h */, - DAE0A350B873FC7035DC492AEA003654 /* UITableViewCell+DDCategory.m */, - ); - name = "UITableViewCell+DDCategory"; - sourceTree = ""; - }; - F00CA76E37652B984B28B8BB48290901 /* UINavigationController+DDCategory */ = { - isa = PBXGroup; - children = ( - 4AF7527E60B3647B232A866C5951E416 /* UINavigationController+DDCategory.h */, - AADA84EFFDEA23D1E85608A1726D9D7F /* UINavigationController+DDCategory.m */, - ); - name = "UINavigationController+DDCategory"; - sourceTree = ""; - }; - F010EFA1211CE7C3622FC5B516AF401D /* IQKeyboardManagerSwift */ = { - isa = PBXGroup; - children = ( - 618B21D51E022FD548164F067A879588 /* IQBarButtonItem.swift */, - 9E7F73DE381B64D0C647E03BC90FB7CD /* IQInvocation.swift */, - 214E2061DBEB30C377E88C37A1745E4A /* IQKeyboardManager.swift */, - 5ECD22EB9050A97679DDF7C99A1EEE75 /* IQKeyboardManager+Debug.swift */, - CF7D6ACF48268BFF03CB452E3FABA2AC /* IQKeyboardManager+Internal.swift */, - BFECCD6DEE66A705C163467849DFDEF0 /* IQKeyboardManager+OrientationNotification.swift */, - 296E8642906500923FB63D86FC8AB460 /* IQKeyboardManager+Position.swift */, - B863C66C3495BE974F5227189B1FE551 /* IQKeyboardManager+Toolbar.swift */, - 28E2578003E2F135F48FD8D61F37EB4B /* IQKeyboardManager+UIKeyboardNotification.swift */, - 7FDEE7544DA6F949CFF94909E8F7BD5C /* IQKeyboardManager+UITextFieldViewNotification.swift */, - 1A37E45618A0FBC62D6154B91D9F0499 /* IQKeyboardManagerConstants.swift */, - 6E70E73FE658FA06B6755BEC556704C0 /* IQKeyboardManagerConstantsInternal.swift */, - DEBED50283779181BB11A4A881012EE7 /* IQKeyboardReturnKeyHandler.swift */, - C7DA28B79A5A6C2FCC8855981CC43356 /* IQNSArray+Sort.swift */, - 9B1A3EAF7E0A496D0A63AB929DC43012 /* IQPreviousNextView.swift */, - 63F1946A930CD2F8416A180A748C89B2 /* IQTextView.swift */, - C1C034DDF190FFFFEFDCBBE3BEED914A /* IQTitleBarButtonItem.swift */, - 5CB22E2B0D3FB2154A58DA396F8D8FF7 /* IQToolbar.swift */, - C9AFBB8C9DAE35B22C4B19C5E5660706 /* IQUIScrollView+Additions.swift */, - 6F21B23F9142424D9E0FEE0495DEA217 /* IQUITextFieldView+Additions.swift */, - 51A496931111C24D321E845AA62558C5 /* IQUIView+Hierarchy.swift */, - B45E5BF8F9A64B2C7F29374241812562 /* IQUIView+IQKeyboardToolbar.swift */, - C15163010490CB25348D095B99704CEB /* IQUIViewController+Additions.swift */, - 11B5E5EEB7D008F7426AC0FDF2942D92 /* Support Files */, - ); - name = IQKeyboardManagerSwift; - path = IQKeyboardManagerSwift; - sourceTree = ""; - }; - F0FE237325BB3F502A77D58FAC077690 /* DDLabel */ = { - isa = PBXGroup; - children = ( - 9B22324A35118323519D08BE490E6E8A /* DDLabel.swift */, - ); - name = DDLabel; - sourceTree = ""; - }; - F310273078927FE974BF52AAEDD93A91 /* NSAttributedString+DDCategory */ = { - isa = PBXGroup; - children = ( - 963A0B57E90D50D470C62B6A03E4C374 /* NSAttributedString+DDCategory.h */, - 2D41315ABF3EBC774F3D78F9C202071A /* NSAttributedString+DDCategory.m */, - C78371C90C6B9059FF339E22C904025D /* NSMutableAttributedString+DDCategory.h */, - F1333F5272D4B2B7AABF8D2C55EDBE43 /* NSMutableAttributedString+DDCategory.m */, - FE678389DCD102CF8E9F47C4B8441257 /* NSMutableParagraphStyle+DDCategory.h */, - 3FD2A1B3A21DB33DBDBD70B92DE429DE /* NSMutableParagraphStyle+DDCategory.m */, - ); - name = "NSAttributedString+DDCategory"; - sourceTree = ""; - }; - F32AAA1C3755E295328A20DD5C590FEE /* DDBaseTableViewCell */ = { - isa = PBXGroup; - children = ( - 1B3CB74D09971841E30AB45461B702B6 /* DDBaseTableViewCell.h */, - 84F5CA2285229E33C044F20BC1E02CC5 /* DDBaseTableViewCell.m */, - ); - name = DDBaseTableViewCell; - sourceTree = ""; - }; - F35EB88EC3E1F0058AF774D2929DC80B /* DDImage */ = { - isa = PBXGroup; - children = ( - F3ACEA525758D1E18127B9BCEE0C265C /* DDImage.swift */, - ); - name = DDImage; - sourceTree = ""; - }; - F3923BC548E0F97BA4579E43735F7712 /* Resources */ = { - isa = PBXGroup; - children = ( - 46110F087B0823B8AE474E640D6E8D6C /* BRAddressPickerView.bundle */, - ); - name = Resources; - sourceTree = ""; - }; - F5354CBD683656965358787B476F7C8E /* Support Files */ = { - isa = PBXGroup; - children = ( - CEB7830C5EECF9675B82456ED61DC054 /* Kingfisher.modulemap */, - 9783AD99AE5AB88CF4B0EFEA8601D4E1 /* Kingfisher-dummy.m */, - 1BE644B1249343805E50F86861F91F21 /* Kingfisher-prefix.pch */, - BFA7392806DD28A68BCAC8E86946F153 /* Kingfisher-umbrella.h */, - F3FDEA9E2FBBA9164D2DE1E6A2CF036B /* Kingfisher.debug.xcconfig */, - B81E6FB644DEFFD4669950FA4F809C45 /* Kingfisher.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/Kingfisher"; - sourceTree = ""; - }; - F545F8640A49FA4F9BFECE1280FB422A /* DDUIKit */ = { - isa = PBXGroup; - children = ( - 2BF46FD99D348D5B9EA7924DEA9BD209 /* Support Files */, - 71849E54143E3E10F033703704021255 /* UIApplication */, - 65BD8FD46AF8B4737D708BAA9028D6BC /* UIButton */, - 7403197B2CE97A382CECA3B0B6CACE03 /* UICollectionView */, - CEEDF92FB4EEFE43D0EB29486EB1477E /* UICollectionViewCell */, - D9D39D42083B149DBA80C647C0D4B89F /* UIColor */, - AEA7684432342801BF543A1436A345D2 /* UIFont */, - A8CDE7D2DC057916E68D208C6B97F824 /* UIGestureRecognizer */, - 226546D43ED2CD532797CFEF4CC22C3B /* UIImage */, - 6AFB793248CC37B0A3F42662653CCB04 /* UIImageView */, - 10B821C608C5E57239D7D60B79FB0A0A /* UILabel */, - B2111C31360210F12FF0549B22DA7D6E /* UINavigationBar */, - 1A289F475403CC9A1BFE57BDEE164EE7 /* UINavigationController */, - 31A8C8C1EBB5CCA9F55F5F3BE6040F88 /* UIResponder */, - 2BABAC2ACBDA2FC8CA5472B4A366A3C1 /* UIScrollView */, - 945A936B3970B3D02ADF195141C92D6E /* UISwitch */, - 2DE4E2E0525FB8E489622F6D6F6B6EE7 /* UITableBarController */, - 96DE8506BF2E9B8CC316119DE393620E /* UITableView */, - 0D9D9E964F82B22CCED0232B808D855E /* UITableViewCell */, - 4774D585BAF3397300D9235FF2A496EC /* UITextField */, - 2F902DF0E3F8BFB5F28F4AD2A20F0CBE /* UITextView */, - 7E8641CEA2D0D13381E7D1F82A1A2C27 /* UIView */, - 7ECD29DF3161E72D72BE4976F7550FA0 /* UIViewController */, - 36E1C97E97F808B86D99B8C863E4637E /* UIViewControllerAnimatedTransitioning */, - ); - name = DDUIKit; - path = DDUIKit; - sourceTree = ""; - }; - F6A125EE5D1D3EDAF6301DD28739298B /* JXCategoryView */ = { - isa = PBXGroup; - children = ( - 56018FF5D01D2F070C712EA706186D9B /* JXCategoryBaseCell.h */, - 37EEBD41FC55A11C4AFAFCE2EFDA03E5 /* JXCategoryBaseCell.m */, - 1A93FA71CAFA40C0939FDDBA2DAD1F61 /* JXCategoryBaseCellModel.h */, - 593FE252AAA081F01E71C12842EE9558 /* JXCategoryBaseCellModel.m */, - 5207A181F2C86F2FDD4D0B24485EC145 /* JXCategoryBaseView.h */, - 2B6973844C1B479BA07C39481BCAE57B /* JXCategoryBaseView.m */, - 25499C609D3D9E0423BAC734679F23C3 /* JXCategoryCollectionView.h */, - 42362AA9D45285F7082156A7838557A9 /* JXCategoryCollectionView.m */, - 0C5625CB64CAD78405F5F917FB912075 /* JXCategoryDotCell.h */, - 4F08F7C86ADB155DCA1C54C1982E77B1 /* JXCategoryDotCell.m */, - E31E5E80EAB44D96A2F4FFAF84AD65CC /* JXCategoryDotCellModel.h */, - 82BFEE2BBD374BD0BBBCC2DDA2FB0373 /* JXCategoryDotCellModel.m */, - 377468D4851829E62B60E46BD1DE02EC /* JXCategoryDotView.h */, - 9E3C0D0BDC718923EE5504123F9C64F7 /* JXCategoryDotView.m */, - 0933994A0349C22C4905F18E4DA1EF79 /* JXCategoryFactory.h */, - 753FDC5BE5FBB5061D1108BA18888FB7 /* JXCategoryFactory.m */, - 4F77844061B4BC6CBECD030C500BBD06 /* JXCategoryImageCell.h */, - FD2A3D63A02D06CF00281FEE7DA6C722 /* JXCategoryImageCell.m */, - 58AEB14A120E28F2C5376B258CF7DB25 /* JXCategoryImageCellModel.h */, - 77C393897F696244E9356EB4257EFCCF /* JXCategoryImageCellModel.m */, - 562732E9246B72FCF6D93C026574D0CC /* JXCategoryImageView.h */, - D710A3950D427273ED8F12C6AE1B243F /* JXCategoryImageView.m */, - 5EA67026DEA284C13DAA86C65E67D031 /* JXCategoryIndicatorBackgroundView.h */, - 329F0735A9474AD3C4D2019D9A2EB9B7 /* JXCategoryIndicatorBackgroundView.m */, - 9D48D4670D4B9CE786D3F3046B64754A /* JXCategoryIndicatorBallView.h */, - AAA2E2360F6F3888B41945153D157767 /* JXCategoryIndicatorBallView.m */, - E6348CDD50C7B181B8762F70DDD93B29 /* JXCategoryIndicatorCell.h */, - CC8558B336BC45B6ACB3389AFF5BD8A7 /* JXCategoryIndicatorCell.m */, - 808B2598E2CCBC3664D834D4D7D9D114 /* JXCategoryIndicatorCellModel.h */, - 54B8052223D66582723111C5AC6B1280 /* JXCategoryIndicatorCellModel.m */, - 72F0DEC630C27BDA147895E587AF3334 /* JXCategoryIndicatorComponentView.h */, - 92482A0DCB51192C5E68505C33EF5745 /* JXCategoryIndicatorComponentView.m */, - 6C7E605941B16D8E7A2CC2D9EDFDB4DC /* JXCategoryIndicatorDotLineView.h */, - F861AD22ECEACE2BFC4591DBE936550B /* JXCategoryIndicatorDotLineView.m */, - 8998A3652B29AA8449919D32DA10F18C /* JXCategoryIndicatorImageView.h */, - 04043FF7666CD2B69C1BF2F016A8C641 /* JXCategoryIndicatorImageView.m */, - 11460665CF36BD5EA4CA0A99BEAE7AC8 /* JXCategoryIndicatorLineView.h */, - AD90C1A30406D12664F5E1A77AE3C8A7 /* JXCategoryIndicatorLineView.m */, - 67698D6E6F85BD99D96F13DF9726BC97 /* JXCategoryIndicatorParamsModel.h */, - 7AA0C096E2B3D1663A3AEF9E4D752CCE /* JXCategoryIndicatorParamsModel.m */, - 1700F928EA0CBDB932CFDF241BFE6327 /* JXCategoryIndicatorProtocol.h */, - 886F8CD6F764BD1E1292C4FEDF5E0048 /* JXCategoryIndicatorRainbowLineView.h */, - 748D420ECBBF7920BB3C0AD0F9A753DA /* JXCategoryIndicatorRainbowLineView.m */, - 00792215745E92F19B0B1C8D83DFEB5C /* JXCategoryIndicatorTriangleView.h */, - 763B7A00E7384585CC4DF9B09534F5E8 /* JXCategoryIndicatorTriangleView.m */, - E4585747280D3DFC635BC74545A9FC72 /* JXCategoryIndicatorView.h */, - 62AD8B2C12AD556FD819FA11579D23C2 /* JXCategoryIndicatorView.m */, - 4F3BFABE11A71DB08CCAE2535FA7B07B /* JXCategoryListContainerRTLCell.h */, - 7DAC4C046B99E2599D90B326B52B4E7E /* JXCategoryListContainerRTLCell.m */, - B8784428820F3296428B578036544576 /* JXCategoryListContainerView.h */, - 80566DF70E74961202E3D638A60FEB2F /* JXCategoryListContainerView.m */, - D9B41086832850A388ACB48FB147D90D /* JXCategoryNumberCell.h */, - 4459BF2B76FE7B9D95339BE6E570C3DB /* JXCategoryNumberCell.m */, - 36BE6C0FA484D00F8769D414928C7FFC /* JXCategoryNumberCellModel.h */, - ECB77B5CB3F3CFE6CDF70C0DFB2AA0E1 /* JXCategoryNumberCellModel.m */, - 1099FA7EEADBEF967E93188CEB9E2759 /* JXCategoryNumberView.h */, - 4AB84CB658B71E80AB970C1BE896BCAC /* JXCategoryNumberView.m */, - 78C4BAD3B0B651A85659F92B5EC00A5B /* JXCategoryTitleCell.h */, - CAAFEA0B151D4C3826C15637652CBD4E /* JXCategoryTitleCell.m */, - A7D78289C9AE9EC534A12E30A5AD9A41 /* JXCategoryTitleCellModel.h */, - 2676A5C87CCFF94CF013F9C0D060E6EE /* JXCategoryTitleCellModel.m */, - E887C966FAC9BB3EA4A498001949642D /* JXCategoryTitleImageCell.h */, - 9DADE9080F80FDB7136837A59CE9C0CA /* JXCategoryTitleImageCell.m */, - F869CFE581148CA743D129D15A275C6F /* JXCategoryTitleImageCellModel.h */, - 53469862C615B608CE2D8CD625CB8BD4 /* JXCategoryTitleImageCellModel.m */, - 742666FFE4711020BFE103F95AE42CDE /* JXCategoryTitleImageView.h */, - AE186CB22D2A6AA49DEBAD692309AE92 /* JXCategoryTitleImageView.m */, - 1429C654602EE60F14E5C748E84A3EF7 /* JXCategoryTitleVerticalZoomCell.h */, - F30E63CC60F0D2B3EE802DB7C288A3FB /* JXCategoryTitleVerticalZoomCell.m */, - AC67E4932C28AACF796B91EFDEA343F5 /* JXCategoryTitleVerticalZoomCellModel.h */, - F2007F3CB73FBA9964EAA5A89F892050 /* JXCategoryTitleVerticalZoomCellModel.m */, - 32189BA3A3CA88E003608BB397FF6181 /* JXCategoryTitleVerticalZoomView.h */, - 97E5521DDF6771E927CED75D77239015 /* JXCategoryTitleVerticalZoomView.m */, - 0173ECE75B8B8C93840EE2421FC61436 /* JXCategoryTitleView.h */, - 80EC8747B96ED82E29BA807FFDF3A1A6 /* JXCategoryTitleView.m */, - EB879BFE0858FF849CB21B097D093F05 /* JXCategoryView.h */, - 691E8D0FC452DAAEC49C56AA02423214 /* JXCategoryViewAnimator.h */, - CACC29150612037ED48E79B9F8473318 /* JXCategoryViewAnimator.m */, - B97908D8442FB0F858BD709DB94C4C1E /* JXCategoryViewDefines.h */, - B45C7013FF09A7CA3B9F2D0C54DB8245 /* RTLManager.h */, - 1F2A5B4E0766288D3F438D9D9C313CD5 /* RTLManager.m */, - 1264866D6B7A332393A6A0FAA7E8E4E6 /* UIColor+JXAdd.h */, - 67A6BB9584DD0743998EF83E9E6733DF /* UIColor+JXAdd.m */, - 75189C437FA488366FDE63AF48155BF8 /* Support Files */, - ); - name = JXCategoryView; - path = JXCategoryView; - sourceTree = ""; - }; - F6DE4903E5C625048EF90A337DCD7B62 /* DDTextField */ = { - isa = PBXGroup; - children = ( - 4185E6DD953823F27950B2497D1A1FFE /* DDTextField.swift */, - ); - name = DDTextField; - sourceTree = ""; - }; - F703ABC8858D5E7BFD7ABAC23FB82408 /* Support Files */ = { - isa = PBXGroup; - children = ( - E349C039A7235D90D8AE0A17E74F5C83 /* DDAudioPlayerKit_Private.modulemap */, - 6808A7171BC3C492B5BA2F54A65A05D8 /* DDAudioPlayerKit_Private-dummy.m */, - F67A501ADF18D25639263D92D6654876 /* DDAudioPlayerKit_Private-prefix.pch */, - A49F0C945751755977DBF49FA086011C /* DDAudioPlayerKit_Private-umbrella.h */, - DCE08701C8652904BEE88F34DD27C3A5 /* DDAudioPlayerKit_Private.debug.xcconfig */, - 3743DCEBE7F1DF1C3A1F19E68A1BD44A /* DDAudioPlayerKit_Private.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/DDAudioPlayerKit_Private"; - sourceTree = ""; - }; - F989FE2A94A92AFD3ED1245B02A7F823 /* UICollectionViewCell+DDCategory */ = { - isa = PBXGroup; - children = ( - B94B2C940E7569CB6FB0AA4B74655F7A /* UICollectionViewCell+DDCategory.h */, - 4DB99BD101D871A09EAF11638B21F065 /* UICollectionViewCell+DDCategory.m */, - ); - name = "UICollectionViewCell+DDCategory"; - sourceTree = ""; - }; - FC54A0963EDD0E047F4C9A83C6B38598 /* UIWindow+DDCategory */ = { - isa = PBXGroup; - children = ( - E23E3E037A1472C2E79E487DE308A5F2 /* UIWindow+DDCategory.h */, - 8209FB0F008C90AE43B85B5AD7200BAA /* UIWindow+DDCategory.m */, - ); - name = "UIWindow+DDCategory"; - sourceTree = ""; - }; - FC8E5895D85E1A70F3E81B21CDD29A4C /* Kingfisher */ = { - isa = PBXGroup; - children = ( - 0BA17B720CE0D0878393E1E7FFA6742A /* AnimatedImageView.swift */, - E789064BE8F74BD0D5F7576611BA7428 /* AuthenticationChallengeResponsable.swift */, - 27D53C130081BF5B3BC6B422A21B1EF3 /* AVAssetImageDataProvider.swift */, - 06458FF46F17CC90652BA0E8437E6283 /* Box.swift */, - 9502367637953912902AAF7656758D40 /* CacheSerializer.swift */, - C77BAED957266D20EFB289729FC39BED /* CallbackQueue.swift */, - 218E425ABD782C7C3E7EF8315D9CDC69 /* CPListItem+Kingfisher.swift */, - 4228D86157E1C21EDE045BFFD3FB2681 /* Delegate.swift */, - 5696DCC77FA56BF0AEC9DAFDB3406D9B /* DiskStorage.swift */, - 1E8E1583D64690269DB3A220AB64E28B /* ExtensionHelpers.swift */, - 7FDE46C30B029812245A7834F1A97A1C /* Filter.swift */, - 35334AB4B90B42CBD33861B6540D33EA /* FormatIndicatedCacheSerializer.swift */, - 0629B72A7A9E52E3111C343CEE0BF886 /* GIFAnimatedImage.swift */, - F816B829CBE7F47EFB4BD6AB66C05EB4 /* GraphicsContext.swift */, - 83FB9E787FFB5AC30992F955910C7F8F /* Image.swift */, - 43FC4A6E4088C25584AF3B2FBD99A659 /* ImageBinder.swift */, - F0D5E066D8BE3508DB0D643DF3BB08DC /* ImageCache.swift */, - B1F313A4C922FA646400FB676210D8AC /* ImageContext.swift */, - 9C3109C8F1654822AD1777E7B0D9AB6A /* ImageDataProcessor.swift */, - 51B5AAD6E35677C397FD89ABC8683255 /* ImageDataProvider.swift */, - E9F792EED4B9415B48F4A5955AD528B4 /* ImageDownloader.swift */, - C0704E4A36349FCEE9EA71A73D5B75C3 /* ImageDownloaderDelegate.swift */, - 3C036FCBB24E7A04CA737EF41E1E560E /* ImageDrawing.swift */, - 9ED858A07E2C1676EDE73FD3773F9D8F /* ImageFormat.swift */, - 648BA3BBCC697CA4A2F235AACD7B07E7 /* ImageModifier.swift */, - 1D9510AF36E7EC45CD71E2C15F3863D5 /* ImagePrefetcher.swift */, - 2CA165EEA66299212C45787A9E8A4CFF /* ImageProcessor.swift */, - 69A6720526DC388CA1469393943F21EE /* ImageProgressive.swift */, - 5A0C072C6B2FA2BC1191E50928EAF9A8 /* ImageTransition.swift */, - 4E2FE2F7C3AE7D2BF2ECB8B23DAC4EC1 /* ImageView+Kingfisher.swift */, - 3A2343A0C3D24D5DA61225E4B6F74F79 /* Indicator.swift */, - 75A16BF64BD3DBCD4700931D9C252CD7 /* KF.swift */, - 8169709AECAFCBC66E7B0C5E1AFDE34F /* KFAnimatedImage.swift */, - FA6A20F53C1068FD62DDBAD78DC9CA28 /* KFImage.swift */, - 1C50AA79FC6A504C48ECB57F30434619 /* KFImageOptions.swift */, - 99F00559AF6546E5B86BD4CF3EA790F7 /* KFImageProtocol.swift */, - 3813A0B5BDAD1D477CF9F603F038C5D5 /* KFImageRenderer.swift */, - DB2300310A7B772468D5F440815EC294 /* KFOptionsSetter.swift */, - 54890BBE3275AB287FE321EBC05E1113 /* Kingfisher.swift */, - 9BE998AD8146E7E85A7CCA22DE77821C /* KingfisherError.swift */, - 26A1FD01AC8E602271BF3B13311D314A /* KingfisherManager.swift */, - 8BEC256418FA5FC987A022D0065F2333 /* KingfisherOptionsInfo.swift */, - DF8AEF1B45C629BBBC58611C20A3A1C5 /* MemoryStorage.swift */, - E6C2EF326DC11741D484EC5D8EDACEA0 /* NSButton+Kingfisher.swift */, - 1230108A6DB4BFE27E08F9E4F406B60C /* NSTextAttachment+Kingfisher.swift */, - C8247D5D8F93669C33937301C5B2A463 /* Placeholder.swift */, - 780F1BFE689231748499BC5383518102 /* RedirectHandler.swift */, - B7902230EB4AA5626B7A3B24F2E01A87 /* RequestModifier.swift */, - 06588AB9CE11B508EB5E70F5C408D372 /* Resource.swift */, - 473A354F5BA4D935C037F5476DE7D75C /* Result.swift */, - ED4B28777420DC719B44D67B307E6593 /* RetryStrategy.swift */, - F975F80BEF4FB7FC7F8A9AF822B4F520 /* Runtime.swift */, - 579C1BFFA581C17D7770FAE3ECACA589 /* SessionDataTask.swift */, - B2FD649435E033A4BED2589387337466 /* SessionDelegate.swift */, - 510F382F6C3892B46E55D5DFB10D3A50 /* SizeExtensions.swift */, - 4685CC601F3B47D2487C648F67C935C5 /* Source.swift */, - 9B32ABDA2E0E09E24C500316F4F6BD89 /* Storage.swift */, - 2CD6F59E9A12BD3804C023A1B9C383D4 /* String+MD5.swift */, - 4CDDC0F39144AAC8973E29871590F952 /* TVMonogramView+Kingfisher.swift */, - 11D3765EC2CDE2680F078D70E209211F /* UIButton+Kingfisher.swift */, - 5500002793689198A0DFD0853D396DDA /* WKInterfaceImage+Kingfisher.swift */, - F5354CBD683656965358787B476F7C8E /* Support Files */, - ); - name = Kingfisher; - path = Kingfisher; - sourceTree = ""; - }; - FD49A3259CD48C86E7D47BCEEA9DE1C1 /* AMapNavi-NO-IDFA */ = { - isa = PBXGroup; - children = ( - 27FB41B8C45B9D8A5FE620200DA8F6DD /* AMapNaviBaseManager.h */, - B8C5AEADB7B2578BCC3BCBFE40E54B9E /* AMapNaviCommonObj.h */, - 5DFA779C310F284BA685ECCC95E0D70E /* AMapNaviCompositeAnnotation.h */, - 1678C96269E52BE05030BE4EB8774254 /* AMapNaviCompositeManager.h */, - 0359D99D8CFBB7FD77C006DAA411E2AF /* AMapNaviCompositeUserConfig.h */, - 54E9038F69C370579812BE6ADD5C4E72 /* AMapNaviDriveDataRepresentable.h */, - C0081722F86179F95D0ADAC8D016F42B /* AMapNaviDriveManager.h */, - 265EEA9C2C0AAA2A66DB2E9157D15529 /* AMapNaviDriveView.h */, - 3110DC0DF5D51DA87F3A6DC9FC874FB3 /* AMapNaviEleBikeDataRepresentable.h */, - A470876C2E55AD6D19B4E59E80BE11DA /* AMapNaviEleBikeManager.h */, - 668CF8DB4024BA204F7B12AD96D05B3A /* AMapNaviHeaderHandler.h */, - 384B1E0FEAD308DEDECCC084F503ED1F /* AMapNaviHUDView.h */, - B59E4B99E08DFA1B3B4882AE6091395C /* AMapNaviInfo.h */, - F90BBC29F391B2F3F78413CE035F55AB /* AMapNaviKit.h */, - 63B15EBE31936C05E53C23743351E454 /* AMapNaviLocation.h */, - A5E520852C51FA062BDA4BE2FCE0F2AA /* AMapNaviManagerConfig.h */, - FCFEDC61BDCE6F30B5FCE1F4EF2FCA17 /* AMapNaviOpenNetwrokProxyManager.h */, - 3736EE368632C5203C2C99098692F218 /* AMapNaviRideDataRepresentable.h */, - 6C170138C959A6721B767AF44C3641C3 /* AMapNaviRideManager.h */, - 9F8F478CE1B7B93CA5B3559929FC11D9 /* AMapNaviRideView.h */, - E557E35BDB14E2A5E1D0495A8F99330F /* AMapNaviRoute.h */, - 5831941C7C5C99DA159A80F1268363ED /* AMapNaviStatisticsInfo.h */, - 592F989A497B98D30116A3819D68387C /* AMapNaviTravelManager.h */, - 6453493B3325E34CA6515F883C3850B0 /* AMapNaviVersion.h */, - 7DB8358B916400BD6BF681A1880C2FA1 /* AMapNaviWalkDataRepresentable.h */, - CC0D7C1A03B68DB302B661DFA918DB0C /* AMapNaviWalkManager.h */, - F3C6D62C79E5D87FAB325F53195052B0 /* AMapNaviWalkView.h */, - 0B1F0529EF82007EAECB091D0A4B3B95 /* MAAnimatedAnnotation.h */, - 5343C6A7395CC3CCB4525D689A3AA30C /* MAAnnotation.h */, - DC2B9F52B583A7A97A2FEC2B57038E90 /* MAAnnotationMoveAnimation.h */, - 4E7DBBD1E9EE712F6E1DF76B9781D310 /* MAAnnotationView.h */, - 0A435B9A05C7BB86FE26C523829C8D4A /* MAArc.h */, - 423D4BDC492139C4B90159AAC6C18FDB /* MAArcRenderer.h */, - C503F91C5A7F8C0526C05906C314FDD8 /* MABaseEngineOverlay.h */, - 222E43D67A215B6E2197307C686CA75D /* MABaseOverlay.h */, - E4073CAD6B821615CF29C574EC6BA55E /* MACircle.h */, - 76A414EC9FFDCB085700A732B77925D7 /* MACircleRenderer.h */, - D98B7057AC391941130E2F7D6BE2D5A2 /* MAConfig.h */, - 136F991523CD2ED2AA0E278428FE879E /* MACustomBuildingOverlay.h */, - E0080360A1C76A97BF3244B89E9CE1F6 /* MACustomBuildingOverlayRenderer.h */, - 26B9E0AAED2300205EA0828648CBB3DE /* MACustomCalloutView.h */, - F4F68B14FE695D9C2C2D7576508833C5 /* MAGeodesicPolyline.h */, - 9E7D696E284D78500EBC9D99913FDFFC /* MAGeometry.h */, - 64F3616CCBC0C363E23D6C69A9569DD5 /* MAGltfOverlay.h */, - 4F74C0F4CEAAB3192E20D60DB4165DF0 /* MAGltfOverlayRenderer.h */, - 2AF1AC9E6DF00390E2664025CE991E10 /* MAGroundOverlay.h */, - CE1593685AF734B81F3F07C111233514 /* MAGroundOverlayRenderer.h */, - 9B0A893251D98A6126AC39028E8C7B51 /* MAHeatMapTileOverlay.h */, - 42DC5CED9D0326747B3E5FAF64DF97F5 /* MAHeatMapVectorGridOverlay.h */, - A90CD00BAF1BD0C89C2EF33B7590DBDF /* MAHeatMapVectorGridOverlayRenderer.h */, - 81DBC71E1726D5BAFC9977E9E8DD9955 /* MAHeatMapVectorOverlay.h */, - 0EE2880C5818D2D6C4A79CFDF9892467 /* MAHeatMapVectorOverlayRender.h */, - 5827F1D0B0253B832ACD69AEEEAE6AE1 /* MAIndoorInfo.h */, - 79ABCE9DA3B26E0ADC63985A9BFBC24E /* MALineDrawType.h */, - 2C3DE9D6A02CD034594EA9F837835595 /* MAMapAccessibilityIdentifier.h */, - F11BDB4C0CE14C0F34E32CF606B9F9C8 /* MAMapCustomStyleOptions.h */, - 6CD31BF871B506BDA21F7CA4AF131325 /* MAMapKit.h */, - 69B9338E70C6EB5D50A6382A9EC4E56B /* MAMapStatus.h */, - CEA080F77496CCA95C9BEADCFA59A20C /* MAMapVersion.h */, - 136ACAADF3183D1A604697C4AA361579 /* MAMapView.h */, - A37893B605CBB699A81EAEB072E25B6F /* MAMultiColoredPolylineRenderer.h */, - A2931FAF8D81A0016500C9FD02A6CF1D /* MAMultiPoint.h */, - 9F4EB5F9A17FC49A3F73F7A011F381F8 /* MAMultiPointOverlay.h */, - 34FFA729B64A20BD85C43E1E373ABD61 /* MAMultiPointOverlayRenderer.h */, - 8870581A94799BB5FDF649316BCAF585 /* MAMultiPolyline.h */, - EF2FE2FA4F4039C58F64777FB49CF7AF /* MAMultiTexturePolylineRenderer.h */, - 3A872DDCD481B023368C91606B9B418B /* MAMVTTileOverlay.h */, - E549DB56B833434F2CBC725218A73D74 /* MAMVTTileOverlayRenderer.h */, - 46DC5B7AF40EA47AF17B4766BE3C1B81 /* MAOfflineCity.h */, - E35FA532115719FF16E0A82F72F336C1 /* MAOfflineItem.h */, - B7D601839745A233D11AB357632658F3 /* MAOfflineItemCommonCity.h */, - EE9DAF62ACE3606E6493AD782FB07900 /* MAOfflineItemMunicipality.h */, - 9789BEB35287480824753D01248833A9 /* MAOfflineItemNationWide.h */, - D5910EDB571BD6BD89858E4B3A053323 /* MAOfflineMap.h */, - F06179819437CD857BC99036F6557E2C /* MAOfflineMapViewController.h */, - EBD61AF7F37F0D6AE15E7D3147506FB1 /* MAOfflineProvince.h */, - 5B40CD297658E2EBFA9A3AEB0E9F171E /* MAOverlay.h */, - 8F631EA3637F9A1F0F57F9DCA7C3AB73 /* MAOverlayPathRenderer.h */, - C58DEEC5BECFDBEF87F5EBF5BA2865AF /* MAOverlayRenderer.h */, - C316711E28305E97B7E0A08F296FC514 /* MAParticleOverlay.h */, - 7C988EFCD405867B402DBAB7780E1982 /* MAParticleOverlayOptions.h */, - 2FD58E2C8E393E793A336B51AB10F68E /* MAParticleOverlayRenderer.h */, - DF3F8CF3B9F0AA4C8B420B3F415EEC61 /* MAPathShowRange.h */, - EA63DB240FE9ADB9B6B607B6951C0B98 /* MAPinAnnotationView.h */, - D537699F67EA681BBE1912E3D2FAD08A /* MAPoiFilter.h */, - 5A754FBD2ABEA9D9E3D700D480B33C2E /* MAPointAnnotation.h */, - B16F4B12205FAA9874555C3BBB86D884 /* MAPolygon.h */, - 3038E91F27734CAA04586C36ACD63273 /* MAPolygonRenderer.h */, - 388972DCDBB55BA9E652318E125C85E2 /* MAPolyline.h */, - ADD655FAF3ED8F62A6E0B94F261104E4 /* MAPolylineRenderer.h */, - 56479261D4BECB6ED900CEB1FE63EFA4 /* MARouteOverlay.h */, - 63C1D5A21775A467A9D16AA2FACC8FA0 /* MARouteOverlayModel.h */, - C38AA9CE57FA661B64139A67B24A96EC /* MAShape.h */, - 3B5DCE773C523A9E1546546DA8397F90 /* MATileOverlay.h */, - 26DFAA23DA9213BB6AF36641FBE3A2F8 /* MATileOverlayRenderer.h */, - 19941DC64BB0D0525D65311FB1D44117 /* MATouchPoi.h */, - FB8DF17900F7D22134FA3FFD0126E1C5 /* MATraceLocation.h */, - D7CF7F9A71024CB3A8125537CEDBB7D9 /* MATraceManager.h */, - C5A10322AB4A96E7AA39EB552DE0AB04 /* MAUserLocation.h */, - A486045D6F8A90B5B56117A30466C1D0 /* MAUserLocationRepresentation.h */, - 2A44CC85D7A13800F9E6AD2CE864DFAE /* Frameworks */, - A7470A624A38E3DA9638933D8907D285 /* Resources */, - 234B60F3F1219A7CEA3AAE2D49DF68A4 /* Support Files */, - ); - name = "AMapNavi-NO-IDFA"; - path = "AMapNavi-NO-IDFA"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 0458F3AAE5DABDC30A474A8E3A519395 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 813567124B996AD29CCAF98621B4D917 /* DDUtilsSwiftKit_Private-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 052CAF8711243CBCFAD060D3000233DF /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 76BCD01DEA5DFB76E7975B68591D4235 /* _RX.h in Headers */, - 4F59B6CC1D4B3EFAA25F42D96C22FF40 /* _RXDelegateProxy.h in Headers */, - 3F7C7042BBE1B605BD0FA37056BB1D78 /* _RXKVOObserver.h in Headers */, - BD71DAAD9C863C0905780369F5942079 /* _RXObjCRuntime.h in Headers */, - 59D42B6A518B9EA16194171DBE454F94 /* RxCocoa.h in Headers */, - 2BF1A8E6F302964E4EA7E6B004474BF6 /* RxCocoa-umbrella.h in Headers */, - BDEF2FB7D927B0B5EC012429474270DD /* RxCocoaRuntime.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 080AD7C5EC4077154C668E8AA84C6D55 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 6B354D42839B601C9DEFD984415411EF /* DDControlsKit_Private-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 0A343C9A37460783F5CEE6AF69416EC1 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - F0F38230060D730610F5815650288F1A /* DDZFPlayerKit_Private-umbrella.h in Headers */, - 2CFCF233E052F29452123E61CB274CFC /* UIImageView+ZFCache.h in Headers */, - 00149C338A154F7A90372D9D111E890D /* UIScrollView+ZFPlayer.h in Headers */, - B70BB03F1D414155F2C5F9E34E659806 /* UIView+ZFFrame.h in Headers */, - BB1D61B7D957E411C5CE3E21DAD20C6D /* ZFFloatView.h in Headers */, - B04A1F654CEE373527D6A1FDE4706545 /* ZFIJKPlayerManager.h in Headers */, - 701681C35B325B45CD0E46CF0D5471F1 /* ZFKVOController.h in Headers */, - 6C3B575651FF6BCDC6907608E2F89583 /* ZFLandScapeControlView.h in Headers */, - 7F9C36B013D01F2188457E0D3A7AEF07 /* ZFLandscapeViewController.h in Headers */, - 6BD973EF2D9AEAAA897F19ABE6ADB442 /* ZFLandscapeWindow.h in Headers */, - 468F7993E475998F74D45D577A1A8079 /* ZFLoadingView.h in Headers */, - 3A10B0AAD9F15B171EF41F035369BECB /* ZFNetworkSpeedMonitor.h in Headers */, - 76A190B0F869A4BA61AFA27C1EB92F4B /* ZFOrientationObserver.h in Headers */, - 90747EAF8374FFC67934EEAD2592FB29 /* ZFPersentInteractiveTransition.h in Headers */, - B9AE7983EB3E754C9E655B15C36143B1 /* ZFPlayer.h in Headers */, - 29A94387DA04DE3CA441D0244ED3B6E0 /* ZFPlayerConst.h in Headers */, - 3D1DB9B06A570F6243016C3FB3692C4C /* ZFPlayerController.h in Headers */, - 54BFDD82C3BBC603F1BA81AA8E103EAD /* ZFPlayerControlView.h in Headers */, - 70CB725EC2D3E4977E8C55CE9EAC4D0A /* ZFPlayerGestureControl.h in Headers */, - 9497825ACEC7F42AFA494D810FDCD4EC /* ZFPlayerLogManager.h in Headers */, - BBEC1389AE859C1F53CB8588CA32A54B /* ZFPlayerMediaControl.h in Headers */, - 791629CECDE0D6A5445563A3E0025ACF /* ZFPlayerMediaPlayback.h in Headers */, - C08497A34F7671FF094AA92DDB82CEE1 /* ZFPlayerNotification.h in Headers */, - EE379B4848EDB17BE1C4D32E97B930A8 /* ZFPlayerView.h in Headers */, - 2BF7BE1115AE5E63724A339701C1D7C3 /* ZFPortraitControlView.h in Headers */, - 4A48E82F99ED27665CF929386AB1FFC6 /* ZFPortraitViewController.h in Headers */, - 290CC252DD7A79A8CD348210A4ECEF8F /* ZFPresentTransition.h in Headers */, - 5F41ADDEE1A3170476DADD035BFF8DAB /* ZFReachabilityManager.h in Headers */, - F0B4282A102ACF883C5664EE6EFB2081 /* ZFSliderView.h in Headers */, - DB15F0057F1CC17F374030B02456DBD6 /* ZFSmallFloatControlView.h in Headers */, - 0C83C845A20F4CDC656714E4DBABC116 /* ZFSpeedLoadingView.h in Headers */, - 3EFC804679D24748F1AE2B2ECC493751 /* ZFUtilities.h in Headers */, - 56E6249ACC30A676C07E28C381EA77C0 /* ZFVolumeBrightnessView.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 11D1725C653AC098561EAA32D8D1A0E0 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 7409FFC5269708E4F4606C21C9DF1B97 /* DDNetworkingOfAlamofireKit_Private-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 15BB48AC2657041B814384EC540298A7 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 1C9653CE5BA95B8280803BA82EC70A26 /* DDFontKit_Private-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1E2FBD5FB6BBE9A446D3CBF3C5810901 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D1D3FC269DB485011A5C792F187BD964 /* DDToastKit_Private-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F3A31C3E1FDE24E6AAD37611B193897 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - BC9DE732A9A9A3E6BA2DBE6C7ACB0427 /* Alamofire-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 21718AF52139A0E7359E1119AEDA98D7 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 432F9B4E6023BA249378CAF9EDBB5CCA /* DDBaseAttributedString.h in Headers */, - 011A1EBE3B8FEAEC24BA46DA5217CA60 /* DDBaseButton.h in Headers */, - F5F6F5A843B2EDC770A466CBA835F1B1 /* DDBaseCollectionView.h in Headers */, - B39CB141B9670AEF45DD1C127E168D12 /* DDBaseCollectionViewCell.h in Headers */, - 9B32CCFFA0C3806B0187E0ECBC35C0B7 /* DDBaseImage.h in Headers */, - F516F3D6A4D4372838C9043170D9D653 /* DDBaseImageView.h in Headers */, - DE4F489481A1E3AD69973B943DE2E414 /* DDBaseLabel.h in Headers */, - 065E058B7EFAEF60F0FE94916FBF3CFF /* DDBaseModel.h in Headers */, - 708122038CA6D6697142EB3BD7A03014 /* DDBaseMutableAttributedString.h in Headers */, - D04ED0B157FFAD652458CA96D31C61BE /* DDBaseNavigationController.h in Headers */, - 316ECCB1FEC71196E803E0DDCED7C651 /* DDBaseScrollView.h in Headers */, - B063BA956EB9BCA0B53896A0E792A264 /* DDBaseSwitch.h in Headers */, - 8BF878796834ECEA997A949F8D4E1EAE /* DDBaseTabBarController.h in Headers */, - 52E0B9ED085280B6B8F67219F7EA366E /* DDBaseTableView.h in Headers */, - 665C707285723F3A68DEDF48EB6117F7 /* DDBaseTableViewCell.h in Headers */, - 0D536CBD733C8354E24D5753892BB371 /* DDBaseTextField.h in Headers */, - A4D3C0FF0EC1462586B769D06F7A9A1C /* DDBaseTextView.h in Headers */, - 4CFBCFBE0205E6688F8E47137BD45C15 /* DDBaseView.h in Headers */, - DEAAA0FB6DAC4E8D6E9F37F3FFF7FAE9 /* DDBaseViewController.h in Headers */, - D01491958316B3D143C1F82521420141 /* DDBaseViewModel.h in Headers */, - F17BED9A66F08C6647EB4CCED0A8EA8C /* DDBasicControls.h in Headers */, - 32E95A874664AF103BB1075B97BCB00C /* DDBasicControlsKit_Private-umbrella.h in Headers */, - 2D2CDCF93A57C458A459F5A968528E34 /* DDNavigationControllerDelegateReceiver.h in Headers */, - 24E92B843F6FA24594FB1963D297E1C1 /* DDViewControllerAnimatedTransition.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2A41190E065BFC59481951F25FD5ECCD /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 235F5CA0FE85EC9C9BF77DDF796070C3 /* JXCategoryBaseCell.h in Headers */, - 99D7BD631F5D4CC39B09885065481AE0 /* JXCategoryBaseCellModel.h in Headers */, - EF5F3CF8BBFDE4BEA2A2380A503569E5 /* JXCategoryBaseView.h in Headers */, - 7F646201C11F75FEB2701844D49DF702 /* JXCategoryCollectionView.h in Headers */, - F1CD6661FAFABF16CD930C30A0566C47 /* JXCategoryDotCell.h in Headers */, - F6771DBD2D0EFBDC47030E698BA56780 /* JXCategoryDotCellModel.h in Headers */, - 1660E2FBDA4323E7357179056B4B0E65 /* JXCategoryDotView.h in Headers */, - 780B82DCFDBD9C2D7E5C92DF80FF1630 /* JXCategoryFactory.h in Headers */, - 66A90DE49D5D62A6B8B93B1BEB6BB0E6 /* JXCategoryImageCell.h in Headers */, - 86EFDCFB015C812E2695EA28F9F3B88F /* JXCategoryImageCellModel.h in Headers */, - CD25427AEC067E2E672CD4FCD03E1C0C /* JXCategoryImageView.h in Headers */, - CD1FBD083AEB95AF2A233A5D251CC860 /* JXCategoryIndicatorBackgroundView.h in Headers */, - C2690FBB1AF6367DBEFA11F552A14ACD /* JXCategoryIndicatorBallView.h in Headers */, - B6A5A9C096B866F53FC368AA2E9E94B7 /* JXCategoryIndicatorCell.h in Headers */, - 4BB281256AF4C43F5356440D9BCA56AA /* JXCategoryIndicatorCellModel.h in Headers */, - 7E9CB89FA3B14991D8C31254F7594BAF /* JXCategoryIndicatorComponentView.h in Headers */, - C5A65CAA184CBF2D7641A9EC731D4F5E /* JXCategoryIndicatorDotLineView.h in Headers */, - 523D1B7E3260356560241D0C2A66A49E /* JXCategoryIndicatorImageView.h in Headers */, - E89EA5216E074A8E2073062D8AF5EA40 /* JXCategoryIndicatorLineView.h in Headers */, - F79338C3D732C666311E9A66D3611901 /* JXCategoryIndicatorParamsModel.h in Headers */, - D4F67ACDCA6B952008E043750BAC4940 /* JXCategoryIndicatorProtocol.h in Headers */, - 4C12DE85147AE7B743C1FBF85A6B4304 /* JXCategoryIndicatorRainbowLineView.h in Headers */, - A0649D13B9C3CE011F3FEA618EA1724B /* JXCategoryIndicatorTriangleView.h in Headers */, - A0CAC16C811D166585ADC16AF08A6EBA /* JXCategoryIndicatorView.h in Headers */, - 51460A037F3BD4D23EB161ED5D9F279F /* JXCategoryListContainerRTLCell.h in Headers */, - A3F68F7FD050BA0038F03314E92B7CFE /* JXCategoryListContainerView.h in Headers */, - 34C07B18252160C63FBD16003E845CFF /* JXCategoryNumberCell.h in Headers */, - 4F50E550117789F0699F8F37CFA9BA6E /* JXCategoryNumberCellModel.h in Headers */, - C8522895B2B87B2C972E499ED4BCA683 /* JXCategoryNumberView.h in Headers */, - 78F19D9EAA15F4779D096963F790CF62 /* JXCategoryTitleCell.h in Headers */, - 6CCDD8BBD40821514AC48F42628D4D7A /* JXCategoryTitleCellModel.h in Headers */, - E2D1C8236E08CA248E758FF3BDDD2BB1 /* JXCategoryTitleImageCell.h in Headers */, - BC17BBE68BE2B0233A2B24429A134292 /* JXCategoryTitleImageCellModel.h in Headers */, - B3E2E1B9AE15CC280B8957C339243BEB /* JXCategoryTitleImageView.h in Headers */, - 129C1964A364166530F529A390760D71 /* JXCategoryTitleVerticalZoomCell.h in Headers */, - 8C1123CFF840715FE9BD669C43D75E7D /* JXCategoryTitleVerticalZoomCellModel.h in Headers */, - A4AE06BE1B4C107F33C291F8B1B10E22 /* JXCategoryTitleVerticalZoomView.h in Headers */, - 79D547FB7599B9D84A5F5697924BC58B /* JXCategoryTitleView.h in Headers */, - 48C8179391555746A729FA6483B7EAB0 /* JXCategoryView.h in Headers */, - 5BEB2A988FCD05A226349FD9C4BC4619 /* JXCategoryView-umbrella.h in Headers */, - 37DA31E97761C9AD09DB9F3AD80AAA70 /* JXCategoryViewAnimator.h in Headers */, - 6D04BB428ED55D57D68354552C043A49 /* JXCategoryViewDefines.h in Headers */, - 04131C0EECA33AD45AD1E07CF500E344 /* RTLManager.h in Headers */, - E62A3E33CD01B815039CCA9622117DC2 /* UIColor+JXAdd.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2A6794EB3A6C1790F7D1ABF7FAF9C39C /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - F0BFF5608C4202CA0453E53F57D91514 /* DDProgressHUDKit_Private-umbrella.h in Headers */, - BD361E4E0FE4613901338D791BD13A5D /* MBProgressHUD.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2EA8B11EFD1540C9B0872B897B2B527E /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 4490B08CBFDFC7269B17068AA4CDA61F /* DDUIKit-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 38B282191F0E0DAC69CB217E06EDB783 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 4980DADD831068300F504E6010C54A08 /* DDAutoUIKit_Private-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3FEB4E2AEB147194E5DB6081FB1E7381 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - F5D8728188EC93EA5FAF5CA84A2C3E3E /* SwiftEntryKit-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4186B123C472EDD38935C0C7ED379119 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 1713CBE84A019518FACBAC5F96A60CA0 /* RxSwift-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 432635C16356FEAE7D18BB7DD8CBC796 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 81495AC63688C3355033D5BA9CCFC035 /* BRAddressModel.h in Headers */, - BC4248890A2765F68B3FCA279352ED4F /* BRAddressPickerView.h in Headers */, - F5E07701094C970A9458F8BFDAB4F3B1 /* BRBaseView.h in Headers */, - CF8D15E322415CC1628A88CB4935CF1A /* BRDatePickerView.h in Headers */, - 82300175606EA43BE4BF57888C4A77E8 /* BRDatePickerView+BR.h in Headers */, - 3563535F257C8923038E5C66A70CD288 /* BRPickerStyle.h in Headers */, - D9608FB125F849D4B3C79BFC4B8023C3 /* BRPickerView.h in Headers */, - 602CC4A58ED9B538AFD8A04290F44C75 /* BRPickerView-umbrella.h in Headers */, - 927A9E34C2E88E982888A5D2F8A9B127 /* BRPickerViewMacro.h in Headers */, - 21FA952E49A0EB77EB7825A78FEF6AA5 /* BRResultModel.h in Headers */, - 0325FC0D4CE47D33E675D5F9546D482C /* BRStringPickerView.h in Headers */, - 62E03A7C90AC5E5B1D0112A6CC78F131 /* NSBundle+BRPickerView.h in Headers */, - FB726649DB4AFB1EF71F4D6F6F4FA5B0 /* NSDate+BRPickerView.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4BA3B37DF51B11F77AD3D2D2D309C10D /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 8C86163FB573BF8082BFA48147D80A64 /* DDUIGestureRecognizer-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5312D2A9C6733D079A5979170CE13887 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - CC75CF0F969F9E0669EBB3AFDCDAEBD1 /* DDMAGeometry.h in Headers */, - C672DB50E93AC356BA2EEE98CDA7B9A5 /* DDMALocationManager.h in Headers */, - C44C4447FBB255B063FF9D6030B5B5DE /* DDMAMapKit_Private-umbrella.h in Headers */, - 97912E6F8356C809B27C1F474438FE4E /* DDMAMapView.h in Headers */, - 87313140962DA79E017A5AC13FEBB529 /* DDMANaviManager.h in Headers */, - B2B130B66CDC70BD01B66F4A2423FAEA /* DDMASearch.h in Headers */, - 4B8ED5D956B3C820B03A1535782FB7D9 /* DDMATrackManager.h in Headers */, - C45A8124E56E7E86995334FC88FAAB66 /* DriveRouteCustomAnnotation.h in Headers */, - E95D335A7ED46DE041EA8A3A82E3FAE2 /* DriveRouteCustomAnnotationView.h in Headers */, - 24E9C22091E66AD34A6F04C2AA5DCFA2 /* MABaseOverlay+DDCategory.h in Headers */, - 47CBBEBB4822A8F690563BFA73578324 /* MAPointAnnotation+DDCategory.h in Headers */, - 1A43C63DFF19F317EF5C924811638A34 /* MATraceReplayOverlay.h in Headers */, - 81480F42C04F75FE39E3D0BF33DF098C /* MATraceReplayOverlay+Addition.h in Headers */, - F03EEA22090304A49A88AC9A826A7571 /* MATraceReplayOverlayRender.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5E052E8D1CE35F445A62E5D30932A959 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 4E2E95B4812870A973F2D0FCECF307AA /* NSData+SHA.h in Headers */, - 774CFF5DF8BB0D8AF40C421AC4E7427C /* SwiftyRSA.h in Headers */, - A21A3EDB30349656A7BF23004B6AF02B /* SwiftyRSA-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5E098BB7BE997CD5D50F43C8D362569C /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - A0E59DE1E829AB6653A41F549DEA9F3C /* ESTabBarController-swift-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5E1C7C1173D8D5DDF95FA77D40676397 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 46C36454D8E82CEC47B95D6426063110 /* ZLPhotoBrowser.h in Headers */, - 1E4A2E4EB128ED973EFAD8D0A76ECCAF /* ZLPhotoBrowser-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 753504BE0834C5BED70B6E9A5A015430 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D8A5713C93E38A1BE6A52CF5C91C0196 /* CALayer+DDCategory.h in Headers */, - 9FA5380BF96537A0F41B105EDE040DA5 /* DDCategory.h in Headers */, - 9155B335C6AE3ED47CE756D8493F51ED /* DDCategoryKit_Private-umbrella.h in Headers */, - EC30EA207AF0A4D5BC1842E7120948FD /* NSAttributedString+DDCategory.h in Headers */, - 23DEC997EFDAB5839591BBBFABC6A2A8 /* NSBundle+DDCategory.h in Headers */, - 11D40BBD081118EFECD6F3BECB3BCD94 /* NSMutableAttributedString+DDCategory.h in Headers */, - 01A764D927F92014C4738A9914A00398 /* NSMutableParagraphStyle+DDCategory.h in Headers */, - A487575A0ABFF095346738854FEFA545 /* NSObject+DDCategory.h in Headers */, - C21392ED3731180649ED72D922AC62E0 /* NSThread+DDCategory.h in Headers */, - 357623AFCD422D2A1BF39E9A65530F53 /* NSURL+DDCategory.h in Headers */, - 485E36DF4F23C0A4D9B9556B23204C26 /* UIApplication+DDCategory.h in Headers */, - 028BC2C9CCEA9FE2D0942F51E275731C /* UIBarButtonItem+DDCategory.h in Headers */, - 57246E353A1964D160A994B8197A9615 /* UIButton+DDCategory.h in Headers */, - 7A063BE33C5927C37F9E673046FDA439 /* UICollectionView+DDCategory.h in Headers */, - 1C7BC91F3D267D0DDD1B41CE993D28D8 /* UICollectionViewCell+DDCategory.h in Headers */, - 26D7B78DF030A20F012D3C770E6F469A /* UIFont+DDCategory.h in Headers */, - 1D7DA734E7B0D2F613E87464252340F3 /* UIImage+DDCategory.h in Headers */, - 519BC1C0446F6F9BF8E934A7B3FBB42E /* UIImageView+DDCategory.h in Headers */, - B8D73EA70C82FA9B0BCB42B04F3A8E5C /* UILabel+DDCategory.h in Headers */, - 4D5DEF06B4F581C09ECD424AEF7D0BB3 /* UINavigationBar+DDCategory.h in Headers */, - 3A7C66A33B73A848F44A1333ED59AA98 /* UINavigationController+DDCategory.h in Headers */, - 25C7EB9F72274DDDD8E0F343712DEE92 /* UINavigationItem+DDCategory.h in Headers */, - 3FEB57F82B4C5F6D6AAD855FFBAE7FD4 /* UIScreen+DDCategory.h in Headers */, - AC5015ADDC603789F71786216F37E8B5 /* UIScrollView+DDCategory.h in Headers */, - 287C57DAAE89B78235098039F1AF3AF2 /* UISwitch+DDCategory.h in Headers */, - 64B8DC5A305B04F3DABDCF8B0281715A /* UITabBarController+DDCategory.h in Headers */, - D9F15D8E6C554086A04A49DABB47A67C /* UITableView+DDCategory.h in Headers */, - B740BD965E9F4E86C2EF3B33616805A9 /* UITableViewCell+DDCategory.h in Headers */, - 6F0E06B59AD85AC18E40EE0B1D577ABF /* UITextField+DDCategory.h in Headers */, - CC3AFC20CA13CFBB2D08814074009FDA /* UITextView+DDCategory.h in Headers */, - 1F08C8A1BDA5493CCB4E836F26A9194B /* UIView+DDCategory.h in Headers */, - 50F8DDD0A0560477DF0F19D80945E798 /* UIViewController+DDCategory.h in Headers */, - B406D1DAF6D1DD0D30CEBE3AD0ECB5EF /* UIWindow+DDCategory.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 78CB62404BB42411C48B82E288A4EA60 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7CE29FF9AEAE1043DA60EFC0B7677857 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 515AAE754CE0C0504AEF12054A24264E /* Pods-OrderScheduling-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 85FE8441CAA769AB4FC1554C719B5FC9 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - E16993B02DC28363DCEE3C0A6625288D /* SnapKit-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8AF8013021BC9C5C63FFB8A23BC8D912 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - C685B4E57FCFFF4FC132CC2C886CC561 /* DDWebImageKit_Private-umbrella.h in Headers */, - 97352932EA7908FEA0DB6210F4692034 /* MKAnnotationView+WebCache.h in Headers */, - 3ED2486A34EFAD23ACEA160695EEEAD9 /* NSBezierPath+SDRoundedCorners.h in Headers */, - 1B2A260FFFFCB3D9E0AC958E83C57F4B /* NSButton+WebCache.h in Headers */, - 02EDCC0E7DA24D63CD39E7D6326F5A56 /* NSData+ImageContentType.h in Headers */, - 73A9E4170A91F0F715E9E7C1F069FA45 /* NSImage+Compatibility.h in Headers */, - 3530FB5ECF1B91F9E3243BF34F446980 /* SDAnimatedImage.h in Headers */, - CF0542E7E27082F0AE761E78228DEB8F /* SDAnimatedImagePlayer.h in Headers */, - D6696173A60A63EAC3F30D4BBC21C72E /* SDAnimatedImageRep.h in Headers */, - 5939C34E4D2E9A26E09C2334A50D4D39 /* SDAnimatedImageView.h in Headers */, - 75C045B811885FBDF3FCB78F77326FDF /* SDAnimatedImageView+WebCache.h in Headers */, - BAB7A04FB6B2883C06D4EFB12CD4974F /* SDAssociatedObject.h in Headers */, - 28E3B45C51EB7B6711CC6AF6BBA4F32F /* SDAsyncBlockOperation.h in Headers */, - 6D9162F60E7975B61948B1E253941FB8 /* SDDeviceHelper.h in Headers */, - B84BED170956D2391246497EC4ACE3B3 /* SDDiskCache.h in Headers */, - 809174478F55FCD93B0706148F6D9B72 /* SDDisplayLink.h in Headers */, - 745D1703E1D29FD12340402A7F6B71D5 /* SDFileAttributeHelper.h in Headers */, - F7869ECB08349199C0FCBC6ACA0DFA89 /* SDGraphicsImageRenderer.h in Headers */, - 52563FEE66AB6AC291788E02FEE56DFF /* SDImageAPNGCoder.h in Headers */, - AE81E26AA0581A9E7559FB6CCC5FDC36 /* SDImageAssetManager.h in Headers */, - 90C350B739A3E899B1B53E52B15430EE /* SDImageAWebPCoder.h in Headers */, - 9BE899982FAEB47E89D2EE2FD9684CCA /* SDImageCache.h in Headers */, - 456C758D7BE4EDCF597AD04A3D095711 /* SDImageCacheConfig.h in Headers */, - 3EE1F3D911A2EEFC8A9BC6503440FAA4 /* SDImageCacheDefine.h in Headers */, - C6FB7F94CB7899B5D36DFC3BCC9124F5 /* SDImageCachesManager.h in Headers */, - 0B52A423F3F9E6C5A42612A06BCEEEF8 /* SDImageCachesManagerOperation.h in Headers */, - BD42414ADB05335CCF6162EED02EB0E0 /* SDImageCoder.h in Headers */, - D54C1EB233C3DFF0AB1C78D665B7A5DF /* SDImageCoderHelper.h in Headers */, - A0657A64DEA57E5606A79DF5FFA0C0C9 /* SDImageCodersManager.h in Headers */, - 119A65AD7B8F6C7C39DD19128A7B2DA9 /* SDImageFrame.h in Headers */, - 91A36B31EC90DB60DC9584F00E5D5643 /* SDImageGIFCoder.h in Headers */, - 887595F20B78C5473EA5B93D699737A6 /* SDImageGraphics.h in Headers */, - B7F2FC2537F8A512F7969F37EEBABA19 /* SDImageHEICCoder.h in Headers */, - 34F4C47DFD00CBF46312DFB03A6E8840 /* SDImageIOAnimatedCoder.h in Headers */, - C3396F46162BECCC47A36826B0CA1070 /* SDImageIOAnimatedCoderInternal.h in Headers */, - 8BD7243E27CAB2AE337CFA2AAC384640 /* SDImageIOCoder.h in Headers */, - 7D5AC16F195967267DAD36F198E0A5F0 /* SDImageLoader.h in Headers */, - DFA46412CF2FE571B31ECD6CC8EEB9BE /* SDImageLoadersManager.h in Headers */, - 1A64F561597A70C28B3564007FF6D24C /* SDImageTransformer.h in Headers */, - B8ACFB27F7B7E309059AA265F2657634 /* SDInternalMacros.h in Headers */, - 84DC0626D65FE608EACE77EE19BCF92F /* SDMemoryCache.h in Headers */, - 27770DF47A61DEEB841F3E977A6BE99B /* SDmetamacros.h in Headers */, - 372DFC5E474E6F5988D709EE7BAD99E6 /* SDWeakProxy.h in Headers */, - 348A2399833F70160F70ABBDCB980E2B /* SDWebImage.h in Headers */, - 8C5AE031DA4F7E6C727B298D2CE5AAAC /* SDWebImageCacheKeyFilter.h in Headers */, - B5909D30D3D2544499F30CA21286AC58 /* SDWebImageCacheSerializer.h in Headers */, - 2E7F3CDAAF53377E46D82BA29C31E95C /* SDWebImageCompat.h in Headers */, - 7B0B8A575C497874E971408584743E02 /* SDWebImageDefine.h in Headers */, - C9A4CE5CAA3D142D609453B227BDF3CF /* SDWebImageDownloader.h in Headers */, - 5A18E4F1E797987FD46675D6E1A9232E /* SDWebImageDownloaderConfig.h in Headers */, - 22A0EE3CF4D4D5DAF933A7871B6E47A9 /* SDWebImageDownloaderDecryptor.h in Headers */, - A88D569C6D40F093E8AA5773B735147D /* SDWebImageDownloaderOperation.h in Headers */, - C68C35A8E72BEE67B8BDE9E7FE89BE46 /* SDWebImageDownloaderRequestModifier.h in Headers */, - 23B683FB3262FAB104127CD59D29E34A /* SDWebImageDownloaderResponseModifier.h in Headers */, - 4A5855A5E58F24A944BA6D1CEBDC5BBC /* SDWebImageError.h in Headers */, - AC816DAE095CF51A98ECF689E6158059 /* SDWebImageIndicator.h in Headers */, - 923EE64F6CBFF20AD30002B633BC50BF /* SDWebImageManager.h in Headers */, - A69C94A0DD35B9524F7481113B574E33 /* SDWebImageMapKit.h in Headers */, - B5E8226BCB600380F56DF4E98CAA2777 /* SDWebImageOperation.h in Headers */, - 6EE3CE5E6C7683F30D2D59D0ADAC6FDA /* SDWebImageOptionsProcessor.h in Headers */, - 9DC2A94B2891D5F2B37FF69F48347EA7 /* SDWebImagePrefetcher.h in Headers */, - 315E6E32711371D1E923D202C5BDF0D4 /* SDWebImageTransition.h in Headers */, - 14C821B748B65A96E6D91708B70C0A93 /* SDWebImageTransitionInternal.h in Headers */, - B7B9F94EF5A56E156C57147F5F302559 /* UIButton+WebCache.h in Headers */, - CBB261988616F006F3D14E6E3E1A1567 /* UIColor+SDHexString.h in Headers */, - 7615AD04C15B5C1E8A259A80825D68FC /* UIImage+ExtendedCacheData.h in Headers */, - 36B204B1822DC0BB1A37AADE7218B28C /* UIImage+ForceDecode.h in Headers */, - 15D38081B9302FBAF9A361BAD7E5B05F /* UIImage+GIF.h in Headers */, - 68C20F65E3110735F394C2D1E0E60AC5 /* UIImage+MemoryCacheCost.h in Headers */, - 044C9F746F7E39BA1B482B553386CA48 /* UIImage+Metadata.h in Headers */, - A8DC4B6CAA17BCE09B33F0CBD7B760AA /* UIImage+MultiFormat.h in Headers */, - 6D1295F002B144E1731C38BEDF62855E /* UIImage+Transform.h in Headers */, - 502EA6DB92E0383603F215C479FA7D67 /* UIImageView+DDWebCache.h in Headers */, - A45846C269357C355CDEBF8B8EF896CD /* UIImageView+HighlightedWebCache.h in Headers */, - 070AC1A560FD65090FD38168F6F8E8C4 /* UIImageView+WebCache.h in Headers */, - 01B815BD97E0BA94CF89C42FE41254A8 /* UIView+WebCache.h in Headers */, - 5F178DC2C4D71599481251FAC75742E2 /* UIView+WebCacheOperation.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8F19AA5BF1A33B00BF5A32F77B750882 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - C2C39ADDBED33BA6BB6C1C65335BB560 /* PopupDialog-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 905CAAD161B8D5A8D768FDE5A4D147D9 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - B7083DE68F7564F0FEDCFD660926393B /* DynamicBlurView.h in Headers */, - 088B0AB69DB7F6EE83AAFF43A8DEEB96 /* DynamicBlurView-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 96888FCE6D38BAA29FE0113D7512C251 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - DD7FD9534175BB8CA05C83AA8BDCF23A /* DDAudioPlayerKit_Private-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C0EE8285E44CE580C209775C2B44A2DF /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 71E369AC039524E2F13AC548B3B043EA /* DDColorKit_Private-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0D903566325DCC49A0AD3893BF9EBE7 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - ECA819DD954059EEB6A5A08A3A3341E5 /* Kingfisher-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D94AB6A603FC4D91AD9C543BE2CB3C09 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - DD792E3784D6D144A65A189A78A58428 /* MJRefresh.h in Headers */, - 8B5C7472AB1189940F2C7A38AB4E5D57 /* MJRefresh-umbrella.h in Headers */, - C56AD838C0FF689FEA8E5AEA32E94175 /* MJRefreshAutoFooter.h in Headers */, - D76130AD70A7483771A8051BE486A761 /* MJRefreshAutoGifFooter.h in Headers */, - 608E5CD7CA96A3E486C33D9F312FC900 /* MJRefreshAutoNormalFooter.h in Headers */, - A952741473205F790F725FA10B2C2667 /* MJRefreshAutoStateFooter.h in Headers */, - C848D2C5E05796A51A2CEC91D99D186C /* MJRefreshBackFooter.h in Headers */, - BF2F9348A80AD292B37135521A29FA03 /* MJRefreshBackGifFooter.h in Headers */, - 9EA55F404A7BE4684E3299402A5B88AE /* MJRefreshBackNormalFooter.h in Headers */, - FE20744885FCBBEFACEA58867A812C6C /* MJRefreshBackStateFooter.h in Headers */, - 93207A865D205334FE48160E599E0FC7 /* MJRefreshComponent.h in Headers */, - 09CB072529CD8E230649CBA428E3550F /* MJRefreshConfig.h in Headers */, - E5F6C631FE32C41FFA4610E64AFEBEF6 /* MJRefreshConst.h in Headers */, - 475A2347C2C908A8DDEACC4C98C0C388 /* MJRefreshFooter.h in Headers */, - 71BACD458EFE7CF21260654449513C75 /* MJRefreshGifHeader.h in Headers */, - 8D42E6E44020386BF96406F0D3540D19 /* MJRefreshHeader.h in Headers */, - 02780D132E8AA44865FEF53E4D5155E6 /* MJRefreshNormalHeader.h in Headers */, - 9DEFB591D6DEBAAAF949BE635617A7A6 /* MJRefreshNormalTrailer.h in Headers */, - 1437BB3F5BFA3F0EEF784975F7CA2970 /* MJRefreshStateHeader.h in Headers */, - C975D55EF9DA37044907022D01EFC501 /* MJRefreshStateTrailer.h in Headers */, - CEF5ADCAD1251F127AC70054BB17179B /* MJRefreshTrailer.h in Headers */, - 5FEB0A58659C60C0B299319EEB72E290 /* NSBundle+MJRefresh.h in Headers */, - B2B998194CCD760C0095B9CD67B288CD /* UICollectionViewLayout+MJRefresh.h in Headers */, - C91C59A7EBFE30758FB1BE247A0C1368 /* UIScrollView+MJExtension.h in Headers */, - 9F75DD325C460FFC7984DF4A9A42BC68 /* UIScrollView+MJRefresh.h in Headers */, - 95AD0B08F159E5B4571FD8C7FCC3A78D /* UIView+MJExtension.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DD21C750A9A6B734AF385BE80A26C7DC /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 012F8E75319C189D770D47D637B60E37 /* RxRelay-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DF7153BF744727B83DF86EB145249B67 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D7B5F3D2457D1F8E54BF758F6F0388F /* DDLogKit_Private-umbrella.h in Headers */, - 757DAD9E812317B7B8FECFBD78953286 /* DDOCLog.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E0736C17A71E66572CEA56CF96BEA936 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - A2B9284895F22572FEF6613C7F74C037 /* TYCyclePagerTransformLayout.h in Headers */, - 5792C39EA7AB9C9A3BD746887E4CDD36 /* TYCyclePagerView.h in Headers */, - AEF2533A0CA4708B8047A6F131F25107 /* TYCyclePagerView-umbrella.h in Headers */, - ECB1F582CE1CE8FED0ED585CAAB64813 /* TYPageControl.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E557108C4040787F825AECDDC4D2E2AC /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - FA46D15B11235046C6234111666D3BBE /* DDDateKit_Private-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - EA3F960DB58EC0798DF3B03A69442C20 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 406B70834D7638A4706184831DA1BA56 /* DDPersistenceKit_Private-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - EC6583CC1D76B0C3DA8E8417A194DC92 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 8620470517C811FD4767A6DD0371D0D5 /* IQKeyboardManagerSwift-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 035D1842293C4AA08F442FFD899F7F28 /* DDControlsKit_Private */ = { - isa = PBXNativeTarget; - buildConfigurationList = 6EFF2AAACB8F237CB585C1B5C0A8EAE8 /* Build configuration list for PBXNativeTarget "DDControlsKit_Private" */; - buildPhases = ( - 080AD7C5EC4077154C668E8AA84C6D55 /* Headers */, - 72C2651DB2B4288C26A42C4F05FF4276 /* Sources */, - D8FE35EB16A315DB7C11F892FCAF8CFE /* Frameworks */, - F152F35B9F3EA19569C6B3D24CE42803 /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - 788F6BA23A64AE55724B3D73EEE6E39B /* PBXTargetDependency */, - ); - name = DDControlsKit_Private; - productName = DDControlsKit_Private; - productReference = 1FEA06F110D30604A9FB015A9790A954 /* DDControlsKit_Private */; - productType = "com.apple.product-type.library.static"; - }; - 087B100C5691B6A3C04A45198E6C32F6 /* DDBasicControlsKit_Private */ = { - isa = PBXNativeTarget; - buildConfigurationList = ADFF35896AEF363010BAB413E213D106 /* Build configuration list for PBXNativeTarget "DDBasicControlsKit_Private" */; - buildPhases = ( - 21718AF52139A0E7359E1119AEDA98D7 /* Headers */, - F623158EE9B44DBBE9E3438E4A6F4A7E /* Sources */, - 9F55DEE06F31302485599F36FF5B115D /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 00BE1B52BCDF3B07C04ABAFB2706E95B /* PBXTargetDependency */, - 267659A84A6C245A671BABFC81C7A3B8 /* PBXTargetDependency */, - ); - name = DDBasicControlsKit_Private; - productName = DDBasicControlsKit_Private; - productReference = 42F10DB6CED6AC3E9AA446F86C16A0F5 /* DDBasicControlsKit_Private */; - productType = "com.apple.product-type.library.static"; - }; - 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */ = { - isa = PBXNativeTarget; - buildConfigurationList = FB2322486CA3331AA94A9C04DF69318F /* Build configuration list for PBXNativeTarget "SnapKit" */; - buildPhases = ( - 85FE8441CAA769AB4FC1554C719B5FC9 /* Headers */, - 0463124C82281ED8DA3328493BF37AE7 /* Sources */, - 02495A0526A9148A384297DE6C9821FE /* Frameworks */, - EF98F93CE26827906E2283AE5E4B50E1 /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SnapKit; - productName = SnapKit; - productReference = 979486118B3E90C08386079D57962701 /* SnapKit */; - productType = "com.apple.product-type.library.static"; - }; - 26BA8950EBF05410254D54F7EF76D5CE /* DDLogKit_Private */ = { - isa = PBXNativeTarget; - buildConfigurationList = C8112CA141B15627612EA3F72A647CE1 /* Build configuration list for PBXNativeTarget "DDLogKit_Private" */; - buildPhases = ( - DF7153BF744727B83DF86EB145249B67 /* Headers */, - 7AB490E201D8C635516B7B840E5B3FB2 /* Sources */, - 2A677EBF9871ADA41FDE3D0BAA2FBF04 /* Frameworks */, - 0CAB8FEC20166B5F1E820081BCF36BFE /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = DDLogKit_Private; - productName = DDLogKit_Private; - productReference = DAFE13D35532C1BA0D3624F4C38BEE8E /* DDLogKit_Private */; - productType = "com.apple.product-type.library.static"; - }; - 2864923095274ACF5E5F99312F360AEB /* DDZFPlayerKit_Private */ = { - isa = PBXNativeTarget; - buildConfigurationList = C4E4E4F823CED3B97CC2CFA09F4213F4 /* Build configuration list for PBXNativeTarget "DDZFPlayerKit_Private" */; - buildPhases = ( - 0A343C9A37460783F5CEE6AF69416EC1 /* Headers */, - 36A35162888C72211AF1A2516CAF1CC9 /* Sources */, - 492F3958EE7157547DC199F58D38F7D9 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = DDZFPlayerKit_Private; - productName = DDZFPlayerKit_Private; - productReference = 8AD026CF2FA53C314E8C799B9A40528A /* DDZFPlayerKit_Private */; - productType = "com.apple.product-type.library.static"; - }; - 2FAF03761A44702490259F857A848B42 /* ZLPhotoBrowser */ = { - isa = PBXNativeTarget; - buildConfigurationList = B9B33C2A134C402CB943274AB39A370B /* Build configuration list for PBXNativeTarget "ZLPhotoBrowser" */; - buildPhases = ( - 5E1C7C1173D8D5DDF95FA77D40676397 /* Headers */, - FF6B6EC1C56BA42D2BE5F20501D75E31 /* Sources */, - 08B9FD08F7FD6D30F434840C8FA714DA /* Frameworks */, - A23DADCFA45D1A2A8510B02EEA8E6370 /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = ZLPhotoBrowser; - productName = ZLPhotoBrowser; - productReference = BB28130B0F4C47DC99D2DB9C80F70152 /* ZLPhotoBrowser */; - productType = "com.apple.product-type.library.static"; - }; - 387C7767E705FE68450F97CBA4348CC0 /* DDProgressHUDKit_Private */ = { - isa = PBXNativeTarget; - buildConfigurationList = DA982D34EAFA4B067C71E35A1DB515C9 /* Build configuration list for PBXNativeTarget "DDProgressHUDKit_Private" */; - buildPhases = ( - 2A6794EB3A6C1790F7D1ABF7FAF9C39C /* Headers */, - C03E608B00E0D64F8CAFEB03DFD443F2 /* Sources */, - 58CA47D34BBF6987CB0C4BE026A3B368 /* Frameworks */, - 734882066F7D5696CA518DF9EE7D2FBC /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - 0B98C1313BE8E6DE64E7D3FE652305B0 /* PBXTargetDependency */, - 58F6689B23489BFE342DA5E168741DEE /* PBXTargetDependency */, - 51FC9CED5314A608DEEAE3883DAAA4B8 /* PBXTargetDependency */, - ); - name = DDProgressHUDKit_Private; - productName = DDProgressHUDKit_Private; - productReference = 35BC09180850FDD03C450D14BD310714 /* DDProgressHUDKit_Private */; - productType = "com.apple.product-type.library.static"; - }; - 3F83465BA81F6E581B3A431642D2992E /* ESTabBarController-swift */ = { - isa = PBXNativeTarget; - buildConfigurationList = 4CAF566969FC6727547C71532B4C8935 /* Build configuration list for PBXNativeTarget "ESTabBarController-swift" */; - buildPhases = ( - 5E098BB7BE997CD5D50F43C8D362569C /* Headers */, - F232AD196DD62CDB2A3B404892E213CD /* Sources */, - FFB565781B9EA643F3320C8E128DB90C /* Frameworks */, - B96D9CB4B6EE13DAC0F38E6D5F28FA79 /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "ESTabBarController-swift"; - productName = "ESTabBarController-swift"; - productReference = F6D00CA03F52F8332AAD8FEEC4AFD406 /* ESTabBarController-swift */; - productType = "com.apple.product-type.library.static"; - }; - 416BCB647D16D0ED89A6729B14DD54D2 /* TYCyclePagerView */ = { - isa = PBXNativeTarget; - buildConfigurationList = AB35C9AC8A2A2E347541A085C64AA1B2 /* Build configuration list for PBXNativeTarget "TYCyclePagerView" */; - buildPhases = ( - E0736C17A71E66572CEA56CF96BEA936 /* Headers */, - 4A22334EC3699D30B5694C841150CCE7 /* Sources */, - 27D4F8F4DECFF32B6E0D45E760AB645E /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = TYCyclePagerView; - productName = TYCyclePagerView; - productReference = 6B1A21536A55542D19E4E3C7277DFFAC /* TYCyclePagerView */; - productType = "com.apple.product-type.library.static"; - }; - 4622BFEF3DC16E8BD15EEFC30D4D0084 /* RxRelay */ = { - isa = PBXNativeTarget; - buildConfigurationList = 27CA1B235B0408A487B3D2403B6D6187 /* Build configuration list for PBXNativeTarget "RxRelay" */; - buildPhases = ( - DD21C750A9A6B734AF385BE80A26C7DC /* Headers */, - C7398DEDD141E4D243CD03337DD9CDE9 /* Sources */, - 362B45E649581E44DD4A82C7AAD67DAB /* Frameworks */, - DFA15587E1C6A3CDA8A14FE79B8D902B /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - B71B8AD4C63A09A091162E88BBD0975A /* PBXTargetDependency */, - ); - name = RxRelay; - productName = RxRelay; - productReference = FF8B264DFE802855D5D67E7CDDABFC3C /* RxRelay */; - productType = "com.apple.product-type.library.static"; - }; - 477926D6FB1DCEFB352517A19636405D /* DDWebImageKit_Private */ = { - isa = PBXNativeTarget; - buildConfigurationList = FACDACD41FFDF5C28F71071FFA4F3BF8 /* Build configuration list for PBXNativeTarget "DDWebImageKit_Private" */; - buildPhases = ( - 8AF8013021BC9C5C63FFB8A23BC8D912 /* Headers */, - 98E82CF2907147E2BFF26136E42B9E5A /* Sources */, - D7A90294962B532796BCE2302BA70A54 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = DDWebImageKit_Private; - productName = DDWebImageKit_Private; - productReference = AD8FF1E8B0C9C12F070D79A5EC3BEE59 /* DDWebImageKit_Private */; - productType = "com.apple.product-type.library.static"; - }; - 53463808DD395EFE0C9E0CDCB79A6C0A /* DDAutoUIKit_Private */ = { - isa = PBXNativeTarget; - buildConfigurationList = A5237F3BC6AF959C52BA85324715A761 /* Build configuration list for PBXNativeTarget "DDAutoUIKit_Private" */; - buildPhases = ( - 38B282191F0E0DAC69CB217E06EDB783 /* Headers */, - 6CAE4326F0042B0C370F9488D5D5BC2E /* Sources */, - 638E033E74BC19306D46A076AAD79BB5 /* Frameworks */, - 3738100E795D70A08ADDEECF0853005C /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = DDAutoUIKit_Private; - productName = DDAutoUIKit_Private; - productReference = 16ADD43AE08E88D6F7A3498152249608 /* DDAutoUIKit_Private */; - productType = "com.apple.product-type.library.static"; - }; - 5C23965029860967865B3429B5E29092 /* DDBasicControlsKit_Private-DDBaseViewController */ = { - isa = PBXNativeTarget; - buildConfigurationList = F612754571F1DC598D4FEA34C4978659 /* Build configuration list for PBXNativeTarget "DDBasicControlsKit_Private-DDBaseViewController" */; - buildPhases = ( - 79C21AA022DDDB83E1C46385A3974946 /* Sources */, - 86D3753BCD844A14BC583F0971D2B5CE /* Frameworks */, - 4782DB4512F3774E7F0CBB147FC427D0 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "DDBasicControlsKit_Private-DDBaseViewController"; - productName = DDBaseViewController; - productReference = 71067D1F0754E977C6E009846B257042 /* DDBasicControlsKit_Private-DDBaseViewController */; - productType = "com.apple.product-type.bundle"; - }; - 6056870867CC4728BCEF2E5EBDD1DCB3 /* DDMAMapKit_Private-DDMAMapKit_Private */ = { - isa = PBXNativeTarget; - buildConfigurationList = D6C3D0A9E88D7C5652DB9B105A3B4CF4 /* Build configuration list for PBXNativeTarget "DDMAMapKit_Private-DDMAMapKit_Private" */; - buildPhases = ( - EF699BB99C544AE21CE18457306B5064 /* Sources */, - 56B8A9EBB7197FED5769B6EB761D9547 /* Frameworks */, - 0A60C3CB80B7637A14BBC2835884B1C1 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "DDMAMapKit_Private-DDMAMapKit_Private"; - productName = DDMAMapKit_Private; - productReference = FB908FBF9F755AFB285A27A674140F71 /* DDMAMapKit_Private-DDMAMapKit_Private */; - productType = "com.apple.product-type.bundle"; - }; - 67F8329E1ABF625D93A19CDE570535BB /* DDUIGestureRecognizer */ = { - isa = PBXNativeTarget; - buildConfigurationList = 01BED254426C9C5978429C2EBF7A003D /* Build configuration list for PBXNativeTarget "DDUIGestureRecognizer" */; - buildPhases = ( - 4BA3B37DF51B11F77AD3D2D2D309C10D /* Headers */, - 208FDABC2A1C6C4B03CB817DF2384F2D /* Sources */, - 12C88F6788E0E25041D3BFD1CD5C7D29 /* Frameworks */, - 8C40DCFED4CF55F25E3BE435B84AD168 /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = DDUIGestureRecognizer; - productName = DDUIGestureRecognizer; - productReference = D80ECFAC844B9AC7A76107391505B65A /* DDUIGestureRecognizer */; - productType = "com.apple.product-type.library.static"; - }; - 6868056D761E163D10FDAF8CF1C4D9B8 /* MJRefresh */ = { - isa = PBXNativeTarget; - buildConfigurationList = F6BDC633A594EFE95B0539379C061D7A /* Build configuration list for PBXNativeTarget "MJRefresh" */; - buildPhases = ( - D94AB6A603FC4D91AD9C543BE2CB3C09 /* Headers */, - 6DE1CCB3EFB5124D6E2B8ABF63F7F6C6 /* Sources */, - DB22184510A5CD7DE25CC9DB75908AD4 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = MJRefresh; - productName = MJRefresh; - productReference = E49D6D248DD1CEE584E6776B9164A1B2 /* MJRefresh */; - productType = "com.apple.product-type.library.static"; - }; - 6E71929B582F8CD57B3DC1FD6560F047 /* PopupDialog */ = { - isa = PBXNativeTarget; - buildConfigurationList = F13AD981FE58D26C2085CC0848B7F96C /* Build configuration list for PBXNativeTarget "PopupDialog" */; - buildPhases = ( - 8F19AA5BF1A33B00BF5A32F77B750882 /* Headers */, - 6E3E0ACDF1B6098B32E67E6ABE42A80F /* Sources */, - A18735041F772CB4AC8E95B7E4898790 /* Frameworks */, - 98C7715190AA7DB755724D8AB4ED1CC8 /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - E6EAB402D572660E44FC0E8CB2DAA5DB /* PBXTargetDependency */, - ); - name = PopupDialog; - productName = PopupDialog; - productReference = 34FB964502259D0FF233CE71CFDD2A71 /* PopupDialog */; - productType = "com.apple.product-type.library.static"; - }; - 775A96192E9F3E75FE7B0644CEB05EB1 /* Pods-OrderSchedulingNotificationService */ = { - isa = PBXNativeTarget; - buildConfigurationList = AE7446B97173A69641977C096891CA8C /* Build configuration list for PBXNativeTarget "Pods-OrderSchedulingNotificationService" */; - buildPhases = ( - 78CB62404BB42411C48B82E288A4EA60 /* Headers */, - F0C06941B1B124C19A1B942250436C58 /* Sources */, - 6E9E7115CE7BC24746DDEB5F0E25616D /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 02803C3757678EAF22D1069C64D962CC /* PBXTargetDependency */, - ); - name = "Pods-OrderSchedulingNotificationService"; - productName = "Pods-OrderSchedulingNotificationService"; - productReference = E7C9437E4E7340A6BDC7C73BE8A3B117 /* Pods-OrderSchedulingNotificationService */; - productType = "com.apple.product-type.library.static"; - }; - 7A11E58B7B0678A54DDBE15F2F5C3361 /* Pods-OrderScheduling */ = { - isa = PBXNativeTarget; - buildConfigurationList = E4C81922A6992D1B0B7E17B0C709906D /* Build configuration list for PBXNativeTarget "Pods-OrderScheduling" */; - buildPhases = ( - 7CE29FF9AEAE1043DA60EFC0B7677857 /* Headers */, - 66B0EFC761F29099DEA6CA3BD50082BA /* Sources */, - 3D84F68896F4C855AFD27646663DEBDE /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 37969071B01C6956036513BBF110DD7E /* PBXTargetDependency */, - EC01F252778ABAFCB87FA1D9DB85DBE5 /* PBXTargetDependency */, - 0C4651853F7ACA61259E672A47ED3FD5 /* PBXTargetDependency */, - F39E48CADD6E11FB7D0BB496D531966E /* PBXTargetDependency */, - 06AA4982B023C13FC5B22DFCD0233A0B /* PBXTargetDependency */, - 5B2DC9A60601A7A525093CD9CDDD3919 /* PBXTargetDependency */, - 7DF78ABBD0DE2A3DDA76F0011659E66C /* PBXTargetDependency */, - 4E94094043D3E891830F5888836E02AB /* PBXTargetDependency */, - E02C5F07E9246801BEC4FC5C97A9ED5E /* PBXTargetDependency */, - CFFCD0FD55134D0F78547AF9D8D54C7E /* PBXTargetDependency */, - 1633022682C2123873924B93EF3C9677 /* PBXTargetDependency */, - B6EF3B7E87C54CD8A68A29C001BB6310 /* PBXTargetDependency */, - B17D6CAA2CEFD436DDFAFA979EE4EEF0 /* PBXTargetDependency */, - 100B5545B2F4EC973C408D054C4EBB94 /* PBXTargetDependency */, - CC712BF8E859F2B02CAC9EBBBDD77922 /* PBXTargetDependency */, - B488AD774EBAD06156928D62D399340A /* PBXTargetDependency */, - B48031CC689064A6C16120B01B71361A /* PBXTargetDependency */, - 778983FFCB4F15E8F98D268EFDCDD830 /* PBXTargetDependency */, - 2B9BCC77F7969EDC70DBC5DC87A4E3ED /* PBXTargetDependency */, - 5C7239C45D8D9E2A9FA3BBD86D4179E2 /* PBXTargetDependency */, - B4CF307D1D90D77E549CF7A33186B0C2 /* PBXTargetDependency */, - 0B01DBA2C706F80A84E7DE5172C0CB0D /* PBXTargetDependency */, - 8E18824A7872AE780C2AE3F66CD9EE59 /* PBXTargetDependency */, - AC842DF5065B3C8018CFADB74ECF3A50 /* PBXTargetDependency */, - 2CB82F76A6B07C8437ED99F44F3E0E9C /* PBXTargetDependency */, - 22820E2C3391E9F34078B29268236B8A /* PBXTargetDependency */, - E889AAECFC160E4018AFD7486FC53DF0 /* PBXTargetDependency */, - 36743C5D1FAE2BA997BC87FAC5ECCC3D /* PBXTargetDependency */, - 89FFA8E6A31E7768E5F731832914074B /* PBXTargetDependency */, - A8AF3C20252CE416D14B7A5586B91626 /* PBXTargetDependency */, - 34FB2A650CB5C58578BDC616EC9E7976 /* PBXTargetDependency */, - F3A7A4EB852AFDC4AFE35B42035B21F3 /* PBXTargetDependency */, - 504F13E95D17FFD5A06FD7DD3A453C64 /* PBXTargetDependency */, - 032771D9E38FF66B85B79E942B5E6207 /* PBXTargetDependency */, - DC491551FD76FD49346D68985FB785C3 /* PBXTargetDependency */, - 9AEF09A7C0365E9FAC348A3351FFDD10 /* PBXTargetDependency */, - 0479EE13ED8EAD5FC9CE6E6372F95480 /* PBXTargetDependency */, - 94887CB9AC6B5CB556FE7FFC5D194DA4 /* PBXTargetDependency */, - 2C8D6AF21492605D95168E63FFDCC9C5 /* PBXTargetDependency */, - E2C8BA2BD53BE119505AE4F1AB99606B /* PBXTargetDependency */, - 688CAE5EFFC5BA054808DB3DD53A0A40 /* PBXTargetDependency */, - 8D9B2A5E48EEEC9C2AFDD91882FC9F72 /* PBXTargetDependency */, - 9AB95092D6EF6FD28708C61C33CF0330 /* PBXTargetDependency */, - 6C8841D5047826A7D875F7CC488480CD /* PBXTargetDependency */, - ); - name = "Pods-OrderScheduling"; - productName = "Pods-OrderScheduling"; - productReference = B3B0956B7EBF66A8FD677D586C9C387A /* Pods-OrderScheduling */; - productType = "com.apple.product-type.library.static"; - }; - 7AD0C6DCDC9CEC8A3C7C10C7FEE07BE6 /* RxCocoa */ = { - isa = PBXNativeTarget; - buildConfigurationList = D4DF964BCCEC6C6DD17FC5511C5756AB /* Build configuration list for PBXNativeTarget "RxCocoa" */; - buildPhases = ( - 052CAF8711243CBCFAD060D3000233DF /* Headers */, - C71FB1A4F5FE3800B11251B6AD5555CE /* Sources */, - DCCAFADA7F9F2D59832D943426EA69B3 /* Frameworks */, - 96C60001B6E911ABE0127B658345B9D2 /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - 298B8DE21B9024A7AB10C71557B92F54 /* PBXTargetDependency */, - B55BC0A6A88B9F909B83BF3EEB3EB1C8 /* PBXTargetDependency */, - ); - name = RxCocoa; - productName = RxCocoa; - productReference = BC432FD48A5932251F1CAFBC4BF74894 /* RxCocoa */; - productType = "com.apple.product-type.library.static"; - }; - 7B8412F08BD27981DB53CE2C25C19F0A /* DDCategoryKit_Private */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8E50EE297DCC05014C88F699A36DEF43 /* Build configuration list for PBXNativeTarget "DDCategoryKit_Private" */; - buildPhases = ( - 753504BE0834C5BED70B6E9A5A015430 /* Headers */, - 6625AD6412FB17FEF66A2EC9A5E96BF8 /* Sources */, - 1F4EA202E54A8EB0E40C2C79AD1FA1C6 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = DDCategoryKit_Private; - productName = DDCategoryKit_Private; - productReference = EC46C56D3F58BDA592A93730A005EF26 /* DDCategoryKit_Private */; - productType = "com.apple.product-type.library.static"; - }; - 7D914FA2F03C860D5133BA2DB87C594A /* DynamicBlurView */ = { - isa = PBXNativeTarget; - buildConfigurationList = 374A4E3B7BD99D9F06FDEA7CC87E8850 /* Build configuration list for PBXNativeTarget "DynamicBlurView" */; - buildPhases = ( - 905CAAD161B8D5A8D768FDE5A4D147D9 /* Headers */, - 9AF0B6EBA680D5DD019C9E42CB4C0F48 /* Sources */, - 326EAB188CB9A80EB8C3A373C259E929 /* Frameworks */, - B6E4A591665DD1A7B499C160D6F36BAC /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = DynamicBlurView; - productName = DynamicBlurView; - productReference = 86C4A2D817E6CFFF31BF75161625FD5D /* DynamicBlurView */; - productType = "com.apple.product-type.library.static"; - }; - 8BEAFAA726C1965864B79B4B441AA513 /* JXCategoryView */ = { - isa = PBXNativeTarget; - buildConfigurationList = 278981AA103168968C1076BB61FD151E /* Build configuration list for PBXNativeTarget "JXCategoryView" */; - buildPhases = ( - 2A41190E065BFC59481951F25FD5ECCD /* Headers */, - 946506CFEB421F414CE172C4F8B6744E /* Sources */, - 1B1B2ABAC864873782928E419562C8E5 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = JXCategoryView; - productName = JXCategoryView; - productReference = C3A46B03C308EEEB11F2A62BA5D2E8BE /* JXCategoryView */; - productType = "com.apple.product-type.library.static"; - }; - 8F3F4D8426620E7E4A06FE4BCDB96FDE /* DDFontKit_Private */ = { - isa = PBXNativeTarget; - buildConfigurationList = 49DDBBC328AA5B7CDE3A461CA361D9BD /* Build configuration list for PBXNativeTarget "DDFontKit_Private" */; - buildPhases = ( - 15BB48AC2657041B814384EC540298A7 /* Headers */, - 1904E2693C2C29ED89D5B9762AC29E60 /* Sources */, - 91C28E5F4B5678B51CA36C84DAAC2351 /* Frameworks */, - 2E58578622C47DB65D042BD13D189BC5 /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = DDFontKit_Private; - productName = DDFontKit_Private; - productReference = 9CB241779EEAD809AC3180FD5B56FDF4 /* DDFontKit_Private */; - productType = "com.apple.product-type.library.static"; - }; - 92A1C13902E7ACDA3ABB5BA1FEACC86C /* SwiftyRSA */ = { - isa = PBXNativeTarget; - buildConfigurationList = 097C79FA69DF7375991D9694E01952C1 /* Build configuration list for PBXNativeTarget "SwiftyRSA" */; - buildPhases = ( - 5E052E8D1CE35F445A62E5D30932A959 /* Headers */, - 3364FF6FC5BAA2DDA7C2A5E5FC9561CA /* Sources */, - A6586DAF8F0CF8CE0853304C027BAAAB /* Frameworks */, - 60A83CACD768832E8E6C2AEFD0837240 /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SwiftyRSA; - productName = SwiftyRSA; - productReference = 0DA4828908E30CE4A29CB9AD3A405635 /* SwiftyRSA */; - productType = "com.apple.product-type.library.static"; - }; - A27F26E25C91875F304337D28F939BF9 /* DDUIKit */ = { - isa = PBXNativeTarget; - buildConfigurationList = A8966CB70E87DF6729A33CEF31BFAFDF /* Build configuration list for PBXNativeTarget "DDUIKit" */; - buildPhases = ( - 2EA8B11EFD1540C9B0872B897B2B527E /* Headers */, - CD374D0251825084FB7ADA905CBA1579 /* Sources */, - 0B8442FC60C410BBCD0CF69AEDD8E3EF /* Frameworks */, - 58EAB651BFDF14C0B4A54B39CEECADE1 /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = DDUIKit; - productName = DDUIKit; - productReference = 69752B5EBA9E3F3BBD32E4CE9DAEF33D /* DDUIKit */; - productType = "com.apple.product-type.library.static"; - }; - A8B712B20F60AB02004557B884A28FD4 /* DDUtilsSwiftKit_Private */ = { - isa = PBXNativeTarget; - buildConfigurationList = 3B447F142DEA14A3711012439CBCE2AC /* Build configuration list for PBXNativeTarget "DDUtilsSwiftKit_Private" */; - buildPhases = ( - 0458F3AAE5DABDC30A474A8E3A519395 /* Headers */, - DA4C868A4F075D8EFE7BB9C49A761008 /* Sources */, - 55CD4B4AE879E5B05ADA877BEC57855A /* Frameworks */, - 91F77F3A10D7BA4C298BC3556848A80E /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = DDUtilsSwiftKit_Private; - productName = DDUtilsSwiftKit_Private; - productReference = DF07F7B964C7E3CE99FEEC54FC37F050 /* DDUtilsSwiftKit_Private */; - productType = "com.apple.product-type.library.static"; - }; - B41F58F2856AB275B4CF75F359937653 /* DDMAMapKit_Private */ = { - isa = PBXNativeTarget; - buildConfigurationList = A50EC8C9EBC4A6FEDDD2C848237DCBA3 /* Build configuration list for PBXNativeTarget "DDMAMapKit_Private" */; - buildPhases = ( - 5312D2A9C6733D079A5979170CE13887 /* Headers */, - 4DC3B7EC02645E3FAD25EEC11058C002 /* Sources */, - D0DB15115A06C936E107DBD0C5D2E46F /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 02D2F40852DA8789195EAF1FABEBC42C /* PBXTargetDependency */, - DC050D0D99C293C43691DFF95D5A4C99 /* PBXTargetDependency */, - 2FD31F3B45C5AD64D168F177A92497CD /* PBXTargetDependency */, - CEDDF22D07BD4BE7FB2272416634BCE3 /* PBXTargetDependency */, - 75884B2F16FC998D1AE93630592459A1 /* PBXTargetDependency */, - 6AE52C1C7ADA650B01ED3766B6E02F00 /* PBXTargetDependency */, - ); - name = DDMAMapKit_Private; - productName = DDMAMapKit_Private; - productReference = 6EEB8B1CB2BF24B44DEEDC1B058B22E2 /* DDMAMapKit_Private */; - productType = "com.apple.product-type.library.static"; - }; - B490E7485944099E16C9CBD79119D1D4 /* IQKeyboardManagerSwift */ = { - isa = PBXNativeTarget; - buildConfigurationList = BD0248CAADFBD7D6BE758A542A5EA572 /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift" */; - buildPhases = ( - EC6583CC1D76B0C3DA8E8417A194DC92 /* Headers */, - 7368DBD0445798A37E4484C6B02012F9 /* Sources */, - CF451192F24DBFBE08BF82B332BFD0E7 /* Frameworks */, - F9D8108A2B02A75FAF4170D1760CBE68 /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = IQKeyboardManagerSwift; - productName = IQKeyboardManagerSwift; - productReference = A8E950A16D00F649C54FFB30F81D7842 /* IQKeyboardManagerSwift */; - productType = "com.apple.product-type.library.static"; - }; - B68A4B40517CF9B14050FA0A4A618B04 /* DDNetworkingOfAlamofireKit_Private */ = { - isa = PBXNativeTarget; - buildConfigurationList = 3120225E7763A74BA53C664BD8B9E714 /* Build configuration list for PBXNativeTarget "DDNetworkingOfAlamofireKit_Private" */; - buildPhases = ( - 11D1725C653AC098561EAA32D8D1A0E0 /* Headers */, - FEADC5AA31171CC91CC5DAEC030F2B0E /* Sources */, - 6354BA5A50CD9F6F6D3A053F7625822B /* Frameworks */, - EF00CD33B4665CA7269F82993A377B1A /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - 818AD6591A1C7553381AF6D71182A502 /* PBXTargetDependency */, - 96ED16C3ACBDD3BD0146E56F1003FF76 /* PBXTargetDependency */, - 586FF5165701F30940C63C39BB71090D /* PBXTargetDependency */, - ); - name = DDNetworkingOfAlamofireKit_Private; - productName = DDNetworkingOfAlamofireKit_Private; - productReference = 2DE47AF6516BB19369CA020EA7C48A4A /* DDNetworkingOfAlamofireKit_Private */; - productType = "com.apple.product-type.library.static"; - }; - BFED7668E8D0960F3873C9C1329EB63F /* DDColorKit_Private */ = { - isa = PBXNativeTarget; - buildConfigurationList = B4F27C1BD05C95157EA376F9A95D1D93 /* Build configuration list for PBXNativeTarget "DDColorKit_Private" */; - buildPhases = ( - C0EE8285E44CE580C209775C2B44A2DF /* Headers */, - A867B0D35CB3B819A5071748F7742866 /* Sources */, - E103787A6825D8DDFD3747654AA9B93B /* Frameworks */, - A63D5710D9CE37DCC756E33E1335A4AD /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = DDColorKit_Private; - productName = DDColorKit_Private; - productReference = 9D4B74A4386EF8F53603612D83CA68C9 /* DDColorKit_Private */; - productType = "com.apple.product-type.library.static"; - }; - CFF5B7CDF57A32781D2AD4CC98E95B29 /* DDToastKit_Private */ = { - isa = PBXNativeTarget; - buildConfigurationList = 336E075ABE2AD4F9E57E395E1E880209 /* Build configuration list for PBXNativeTarget "DDToastKit_Private" */; - buildPhases = ( - 1E2FBD5FB6BBE9A446D3CBF3C5810901 /* Headers */, - E8D9525ADEA0CD4A8CEB0BBD8B14DC97 /* Sources */, - 81D4EA84926136F0D0AEEBAEE01452A4 /* Frameworks */, - 25500B2245ACA87924EEE987F0EBBF41 /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = DDToastKit_Private; - productName = DDToastKit_Private; - productReference = A9132D6AA90D7BC2B6C7A08B065F87A9 /* DDToastKit_Private */; - productType = "com.apple.product-type.library.static"; - }; - D505645C3F99EB1E8B6529D64D2C3E1C /* BRPickerView */ = { - isa = PBXNativeTarget; - buildConfigurationList = 2BBA364C66D6425D2066BED8F68D00CE /* Build configuration list for PBXNativeTarget "BRPickerView" */; - buildPhases = ( - 432635C16356FEAE7D18BB7DD8CBC796 /* Headers */, - CAB25926C077F5422787F0F64A3A79ED /* Sources */, - A0A168C02FAF5442483E807CEB972E21 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = BRPickerView; - productName = BRPickerView; - productReference = 5BA6046B4C2674409C0D5625F45F8769 /* BRPickerView */; - productType = "com.apple.product-type.library.static"; - }; - E72BE4C94039A951B47CCC942F6B4B8F /* DDAudioPlayerKit_Private */ = { - isa = PBXNativeTarget; - buildConfigurationList = 33080B7EB2A16733916B557F95CDB25D /* Build configuration list for PBXNativeTarget "DDAudioPlayerKit_Private" */; - buildPhases = ( - 96888FCE6D38BAA29FE0113D7512C251 /* Headers */, - 2AD137A2E1FC7343733EE6EC866EF34C /* Sources */, - 8336D2609010917843D902B67AC3B472 /* Frameworks */, - EA7731AFE124BDEF55FED2A34737FCB4 /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = DDAudioPlayerKit_Private; - productName = DDAudioPlayerKit_Private; - productReference = 09B4C59FAB38D6054E5993BD78205023 /* DDAudioPlayerKit_Private */; - productType = "com.apple.product-type.library.static"; - }; - E8022D22FAA6690B5E1C379C1BCE1491 /* Kingfisher */ = { - isa = PBXNativeTarget; - buildConfigurationList = A1E6BD1F6C215CED34782F41B649F813 /* Build configuration list for PBXNativeTarget "Kingfisher" */; - buildPhases = ( - D0D903566325DCC49A0AD3893BF9EBE7 /* Headers */, - 745CB78064A1E95189482B6F70416FE8 /* Sources */, - 17990104FFE54436BDAA194EAC7E8DE5 /* Frameworks */, - E682D69D10544BD05F893344B384F91F /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Kingfisher; - productName = Kingfisher; - productReference = C3F44C782D64D7EB20B61CE3844EBFAD /* Kingfisher */; - productType = "com.apple.product-type.library.static"; - }; - EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */ = { - isa = PBXNativeTarget; - buildConfigurationList = E55D47F313331FDABCD32857105AFD2C /* Build configuration list for PBXNativeTarget "RxSwift" */; - buildPhases = ( - 4186B123C472EDD38935C0C7ED379119 /* Headers */, - 62D8975FEB599B74786F644DB2C11882 /* Sources */, - B499446037CB2F4167A41DDE5280893E /* Frameworks */, - 3AF2C48A72792E4AC1F299FC9D50441F /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = RxSwift; - productName = RxSwift; - productReference = 809C5FAB588354C9BA37DC3EAB8CB45C /* RxSwift */; - productType = "com.apple.product-type.library.static"; - }; - EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */ = { - isa = PBXNativeTarget; - buildConfigurationList = 018A1050B9A6148C61A6CA6E0549295C /* Build configuration list for PBXNativeTarget "Alamofire" */; - buildPhases = ( - 1F3A31C3E1FDE24E6AAD37611B193897 /* Headers */, - 7276708BC4B36ED3675C72DA19B83767 /* Sources */, - 149A22ABB26E1ECB1C03650C590ABC5F /* Frameworks */, - 18975C3175D757683CE728020300C873 /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Alamofire; - productName = Alamofire; - productReference = 5D797E9A5C5782CE845840781FA1CC81 /* Alamofire */; - productType = "com.apple.product-type.library.static"; - }; - F8AE53003F66B148774CFC6EBDEB9425 /* DDPersistenceKit_Private */ = { - isa = PBXNativeTarget; - buildConfigurationList = EFE63C32122B5B979FBB92406341D163 /* Build configuration list for PBXNativeTarget "DDPersistenceKit_Private" */; - buildPhases = ( - EA3F960DB58EC0798DF3B03A69442C20 /* Headers */, - 3D617A0C7EC401D1D14E14B3ED37B8F9 /* Sources */, - 61C4C73E476D1535B2604229BAA1DE06 /* Frameworks */, - 2BBD6C92D031AB69CC229814EFA8790A /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = DDPersistenceKit_Private; - productName = DDPersistenceKit_Private; - productReference = F11C5D34D44394CFB2C5ADD740509CC9 /* DDPersistenceKit_Private */; - productType = "com.apple.product-type.library.static"; - }; - FA849029E6A899F45F613165943A6C68 /* DDDateKit_Private */ = { - isa = PBXNativeTarget; - buildConfigurationList = C0672E536A06498349A0C576A0004D4F /* Build configuration list for PBXNativeTarget "DDDateKit_Private" */; - buildPhases = ( - E557108C4040787F825AECDDC4D2E2AC /* Headers */, - C48E693650203B2A2E44527E2F7E3FD5 /* Sources */, - C23690D2E28990F2C02177E957655DD8 /* Frameworks */, - FFAFF71C63A68A0848E1569F249322F3 /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = DDDateKit_Private; - productName = DDDateKit_Private; - productReference = E270ABDB05C1E6CDFF8AB4EB055CE66E /* DDDateKit_Private */; - productType = "com.apple.product-type.library.static"; - }; - FEA6FF0588A91CCD972EDCD698B85647 /* SwiftEntryKit */ = { - isa = PBXNativeTarget; - buildConfigurationList = 3729326E71B6DC63C475DB2A2B4FEA64 /* Build configuration list for PBXNativeTarget "SwiftEntryKit" */; - buildPhases = ( - 3FEB4E2AEB147194E5DB6081FB1E7381 /* Headers */, - DC30882199AE9E371D14D1598CFD5C80 /* Sources */, - 1BB536A1913D475DB8E42F987B22460C /* Frameworks */, - EC30A33612005CA3B6C16D74ECC9B004 /* Copy generated compatibility header */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SwiftEntryKit; - productName = SwiftEntryKit; - productReference = DA5F7E5AA5A762E4504855EAF3216C8A /* SwiftEntryKit */; - productType = "com.apple.product-type.library.static"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - BFDFE7DC352907FC980B868725387E98 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 1500; - LastUpgradeCheck = 1500; - }; - buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; - compatibilityVersion = "Xcode 14.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - Base, - en, - ); - mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 30472049FEDBFC970AFE18F2D536D9F1 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */, - 9B182CB4E1716E9070813D3C59736001 /* AMapFoundation-NO-IDFA */, - 4BD4E22D3419D68A85BDD6119CB37C6C /* AMapLocation-NO-IDFA */, - E94C558142469C11984D67CA883BAB1F /* AMapNavi-NO-IDFA */, - 4F1379598302C9160590B3650C10E1A5 /* AMapSearch-NO-IDFA */, - 2160840D78FCB958CABE1B88300E38C5 /* AMapTrack-NO-IDFA */, - D505645C3F99EB1E8B6529D64D2C3E1C /* BRPickerView */, - 4A68CFD979D413A619DF631BB121D98F /* Bugly */, - E72BE4C94039A951B47CCC942F6B4B8F /* DDAudioPlayerKit_Private */, - 53463808DD395EFE0C9E0CDCB79A6C0A /* DDAutoUIKit_Private */, - 087B100C5691B6A3C04A45198E6C32F6 /* DDBasicControlsKit_Private */, - 5C23965029860967865B3429B5E29092 /* DDBasicControlsKit_Private-DDBaseViewController */, - 7B8412F08BD27981DB53CE2C25C19F0A /* DDCategoryKit_Private */, - BFED7668E8D0960F3873C9C1329EB63F /* DDColorKit_Private */, - 035D1842293C4AA08F442FFD899F7F28 /* DDControlsKit_Private */, - FA849029E6A899F45F613165943A6C68 /* DDDateKit_Private */, - 8F3F4D8426620E7E4A06FE4BCDB96FDE /* DDFontKit_Private */, - 26BA8950EBF05410254D54F7EF76D5CE /* DDLogKit_Private */, - B41F58F2856AB275B4CF75F359937653 /* DDMAMapKit_Private */, - 6056870867CC4728BCEF2E5EBDD1DCB3 /* DDMAMapKit_Private-DDMAMapKit_Private */, - B68A4B40517CF9B14050FA0A4A618B04 /* DDNetworkingOfAlamofireKit_Private */, - F8AE53003F66B148774CFC6EBDEB9425 /* DDPersistenceKit_Private */, - 387C7767E705FE68450F97CBA4348CC0 /* DDProgressHUDKit_Private */, - CFF5B7CDF57A32781D2AD4CC98E95B29 /* DDToastKit_Private */, - 67F8329E1ABF625D93A19CDE570535BB /* DDUIGestureRecognizer */, - A27F26E25C91875F304337D28F939BF9 /* DDUIKit */, - A8B712B20F60AB02004557B884A28FD4 /* DDUtilsSwiftKit_Private */, - 477926D6FB1DCEFB352517A19636405D /* DDWebImageKit_Private */, - 2864923095274ACF5E5F99312F360AEB /* DDZFPlayerKit_Private */, - 7D914FA2F03C860D5133BA2DB87C594A /* DynamicBlurView */, - 3F83465BA81F6E581B3A431642D2992E /* ESTabBarController-swift */, - B490E7485944099E16C9CBD79119D1D4 /* IQKeyboardManagerSwift */, - D504B99928659EA67A1C3A9E981EB8FF /* JCore */, - 5FB6AB0A09E7A2F2BE11AD6BAEFD9AED /* JPush */, - 609276B985CD7549B9F1DEE4969208FF /* JPushExtension */, - 8BEAFAA726C1965864B79B4B441AA513 /* JXCategoryView */, - E8022D22FAA6690B5E1C379C1BCE1491 /* Kingfisher */, - 6868056D761E163D10FDAF8CF1C4D9B8 /* MJRefresh */, - 7A11E58B7B0678A54DDBE15F2F5C3361 /* Pods-OrderScheduling */, - 775A96192E9F3E75FE7B0644CEB05EB1 /* Pods-OrderSchedulingNotificationService */, - 6E71929B582F8CD57B3DC1FD6560F047 /* PopupDialog */, - 7AD0C6DCDC9CEC8A3C7C10C7FEE07BE6 /* RxCocoa */, - 4622BFEF3DC16E8BD15EEFC30D4D0084 /* RxRelay */, - EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */, - 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */, - FEA6FF0588A91CCD972EDCD698B85647 /* SwiftEntryKit */, - 92A1C13902E7ACDA3ABB5BA1FEACC86C /* SwiftyRSA */, - 416BCB647D16D0ED89A6729B14DD54D2 /* TYCyclePagerView */, - 2FAF03761A44702490259F857A848B42 /* ZLPhotoBrowser */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 0A60C3CB80B7637A14BBC2835884B1C1 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 245545785378684632B1A838648E423C /* car_xingshi.png in Resources */, - 1B2AB722CA64C661DA6D668CC4A3CDF2 /* car_xingshi@2x.png in Resources */, - E00794F0E88E22C443BCE5BE66457249 /* car_xingshi@3x.png in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4782DB4512F3774E7F0CBB147FC427D0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 735C27E021B37367E4B05F53C23C333E /* DDBaseViewController.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 0CAB8FEC20166B5F1E820081BCF36BFE /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/DDLogKit_Private/DDLogKit_Private.modulemap", - "${PODS_ROOT}/Headers/Public/DDLogKit_Private/DDLogKit_Private-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/DDLogKit_Private-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDLogKit_Private/DDLogKit_Private.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDLogKit_Private/DDLogKit_Private-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - 18975C3175D757683CE728020300C873 /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/Alamofire/Alamofire.modulemap", - "${PODS_ROOT}/Headers/Public/Alamofire/Alamofire-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/Alamofire-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/Alamofire/Alamofire.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/Alamofire/Alamofire-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - 25500B2245ACA87924EEE987F0EBBF41 /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/DDToastKit_Private/DDToastKit_Private.modulemap", - "${PODS_ROOT}/Headers/Public/DDToastKit_Private/DDToastKit_Private-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/DDToastKit_Private-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDToastKit_Private/DDToastKit_Private.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDToastKit_Private/DDToastKit_Private-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - 2BBD6C92D031AB69CC229814EFA8790A /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/DDPersistenceKit_Private/DDPersistenceKit_Private.modulemap", - "${PODS_ROOT}/Headers/Public/DDPersistenceKit_Private/DDPersistenceKit_Private-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/DDPersistenceKit_Private-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDPersistenceKit_Private/DDPersistenceKit_Private.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDPersistenceKit_Private/DDPersistenceKit_Private-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - 2E58578622C47DB65D042BD13D189BC5 /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/DDFontKit_Private/DDFontKit_Private.modulemap", - "${PODS_ROOT}/Headers/Public/DDFontKit_Private/DDFontKit_Private-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/DDFontKit_Private-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDFontKit_Private/DDFontKit_Private.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDFontKit_Private/DDFontKit_Private-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - 329295F5A096E0819713CBB5799FA87B /* [CP] Copy XCFrameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/JPush/JPush-xcframeworks-input-files.xcfilelist", - ); - name = "[CP] Copy XCFrameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/JPush/JPush-xcframeworks-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/JPush/JPush-xcframeworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 3738100E795D70A08ADDEECF0853005C /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap", - "${PODS_ROOT}/Headers/Public/DDAutoUIKit_Private/DDAutoUIKit_Private-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/DDAutoUIKit_Private-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDAutoUIKit_Private/DDAutoUIKit_Private-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - 3AF2C48A72792E4AC1F299FC9D50441F /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/RxSwift/RxSwift.modulemap", - "${PODS_ROOT}/Headers/Public/RxSwift/RxSwift-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/RxSwift-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/RxSwift/RxSwift.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/RxSwift/RxSwift-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - 58EAB651BFDF14C0B4A54B39CEECADE1 /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/DDUIKit/DDUIKit.modulemap", - "${PODS_ROOT}/Headers/Public/DDUIKit/DDUIKit-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/DDUIKit-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDUIKit/DDUIKit.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDUIKit/DDUIKit-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - 60A83CACD768832E8E6C2AEFD0837240 /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/SwiftyRSA/SwiftyRSA.modulemap", - "${PODS_ROOT}/Headers/Public/SwiftyRSA/SwiftyRSA-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/SwiftyRSA-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/SwiftyRSA/SwiftyRSA.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/SwiftyRSA/SwiftyRSA-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - 734882066F7D5696CA518DF9EE7D2FBC /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap", - "${PODS_ROOT}/Headers/Public/DDProgressHUDKit_Private/DDProgressHUDKit_Private-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/DDProgressHUDKit_Private-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDProgressHUDKit_Private/DDProgressHUDKit_Private-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - 8C40DCFED4CF55F25E3BE435B84AD168 /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/DDUIGestureRecognizer/DDUIGestureRecognizer.modulemap", - "${PODS_ROOT}/Headers/Public/DDUIGestureRecognizer/DDUIGestureRecognizer-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/DDUIGestureRecognizer-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDUIGestureRecognizer/DDUIGestureRecognizer.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDUIGestureRecognizer/DDUIGestureRecognizer-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - 91F77F3A10D7BA4C298BC3556848A80E /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private.modulemap", - "${PODS_ROOT}/Headers/Public/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/DDUtilsSwiftKit_Private-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - 96C60001B6E911ABE0127B658345B9D2 /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/RxCocoa/RxCocoa.modulemap", - "${PODS_ROOT}/Headers/Public/RxCocoa/RxCocoa-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/RxCocoa-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/RxCocoa/RxCocoa.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/RxCocoa/RxCocoa-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - 98C7715190AA7DB755724D8AB4ED1CC8 /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/PopupDialog/PopupDialog.modulemap", - "${PODS_ROOT}/Headers/Public/PopupDialog/PopupDialog-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/PopupDialog-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/PopupDialog/PopupDialog.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/PopupDialog/PopupDialog-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - 9B1DCA94E2E74FDB6B8B2AF3004CC4BD /* [CP] Copy XCFrameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/JCore/JCore-xcframeworks-input-files.xcfilelist", - ); - name = "[CP] Copy XCFrameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/JCore/JCore-xcframeworks-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/JCore/JCore-xcframeworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - A23DADCFA45D1A2A8510B02EEA8E6370 /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/ZLPhotoBrowser/ZLPhotoBrowser.modulemap", - "${PODS_ROOT}/Headers/Public/ZLPhotoBrowser/ZLPhotoBrowser-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/ZLPhotoBrowser-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/ZLPhotoBrowser/ZLPhotoBrowser.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/ZLPhotoBrowser/ZLPhotoBrowser-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - A63D5710D9CE37DCC756E33E1335A4AD /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/DDColorKit_Private/DDColorKit_Private.modulemap", - "${PODS_ROOT}/Headers/Public/DDColorKit_Private/DDColorKit_Private-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/DDColorKit_Private-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDColorKit_Private/DDColorKit_Private.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDColorKit_Private/DDColorKit_Private-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - B6E4A591665DD1A7B499C160D6F36BAC /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/DynamicBlurView/DynamicBlurView.modulemap", - "${PODS_ROOT}/Headers/Public/DynamicBlurView/DynamicBlurView-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/DynamicBlurView-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DynamicBlurView/DynamicBlurView.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DynamicBlurView/DynamicBlurView-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - B96D9CB4B6EE13DAC0F38E6D5F28FA79 /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/ESTabBarController_swift/ESTabBarController-swift.modulemap", - "${PODS_ROOT}/Headers/Public/ESTabBarController_swift/ESTabBarController-swift-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/ESTabBarController-swift-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/ESTabBarController_swift/ESTabBarController-swift.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/ESTabBarController_swift/ESTabBarController-swift-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - BB7DC1876AF8A5A922FEE0061999D0AE /* [CP] Copy XCFrameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/JPushExtension/JPushExtension-xcframeworks-input-files.xcfilelist", - ); - name = "[CP] Copy XCFrameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/JPushExtension/JPushExtension-xcframeworks-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/JPushExtension/JPushExtension-xcframeworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - DFA15587E1C6A3CDA8A14FE79B8D902B /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/RxRelay/RxRelay.modulemap", - "${PODS_ROOT}/Headers/Public/RxRelay/RxRelay-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/RxRelay-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/RxRelay/RxRelay.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/RxRelay/RxRelay-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - E682D69D10544BD05F893344B384F91F /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/Kingfisher/Kingfisher.modulemap", - "${PODS_ROOT}/Headers/Public/Kingfisher/Kingfisher-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/Kingfisher-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/Kingfisher/Kingfisher.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/Kingfisher/Kingfisher-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - EA7731AFE124BDEF55FED2A34737FCB4 /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private.modulemap", - "${PODS_ROOT}/Headers/Public/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/DDAudioPlayerKit_Private-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - EC30A33612005CA3B6C16D74ECC9B004 /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/SwiftEntryKit/SwiftEntryKit.modulemap", - "${PODS_ROOT}/Headers/Public/SwiftEntryKit/SwiftEntryKit-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/SwiftEntryKit-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/SwiftEntryKit/SwiftEntryKit.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/SwiftEntryKit/SwiftEntryKit-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - EF00CD33B4665CA7269F82993A377B1A /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap", - "${PODS_ROOT}/Headers/Public/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/DDNetworkingOfAlamofireKit_Private-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - EF98F93CE26827906E2283AE5E4B50E1 /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/SnapKit/SnapKit.modulemap", - "${PODS_ROOT}/Headers/Public/SnapKit/SnapKit-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/SnapKit-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/SnapKit/SnapKit.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/SnapKit/SnapKit-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - F152F35B9F3EA19569C6B3D24CE42803 /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/DDControlsKit_Private/DDControlsKit_Private.modulemap", - "${PODS_ROOT}/Headers/Public/DDControlsKit_Private/DDControlsKit_Private-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/DDControlsKit_Private-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDControlsKit_Private/DDControlsKit_Private.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDControlsKit_Private/DDControlsKit_Private-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - F9D8108A2B02A75FAF4170D1760CBE68 /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap", - "${PODS_ROOT}/Headers/Public/IQKeyboardManagerSwift/IQKeyboardManagerSwift-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/IQKeyboardManagerSwift-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/IQKeyboardManagerSwift/IQKeyboardManagerSwift-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; - FFAFF71C63A68A0848E1569F249322F3 /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/DDDateKit_Private/DDDateKit_Private.modulemap", - "${PODS_ROOT}/Headers/Public/DDDateKit_Private/DDDateKit_Private-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/DDDateKit_Private-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDDateKit_Private/DDDateKit_Private.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DDDateKit_Private/DDDateKit_Private-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 0463124C82281ED8DA3328493BF37AE7 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 597293228A7D2A435FBA04579B65C915 /* Constraint.swift in Sources */, - 09715D3A5DEE43ADAA3DA14CE2AB5F6F /* ConstraintAttributes.swift in Sources */, - DE7A6690710B58A11F691A7FCC558059 /* ConstraintConfig.swift in Sources */, - C1AA0AC4B35580D329308B22D94EFB7A /* ConstraintConstantTarget.swift in Sources */, - 6756625F8543CC1FB1E3CFB36ED27D46 /* ConstraintDescription.swift in Sources */, - 5A77C9FAE382A7344E03BFF956E92709 /* ConstraintDirectionalInsets.swift in Sources */, - 5894B57DDCD97FA97150174C4F8C9741 /* ConstraintDirectionalInsetTarget.swift in Sources */, - AC8CB69399E67A7BF32EF8527076691A /* ConstraintDSL.swift in Sources */, - AA6ED7CFD770A61F126E49FDF8BD455F /* ConstraintInsets.swift in Sources */, - E37C1ACEDAAFF4548DE69CEDF36036D7 /* ConstraintInsetTarget.swift in Sources */, - E2CBECE556D34D563C01A9D12D85EDEE /* ConstraintItem.swift in Sources */, - 21AD65B6FADAAF0BE20DCB59FCB3AF37 /* ConstraintLayoutGuide.swift in Sources */, - B8E1A0528A9695731A25A4F670339247 /* ConstraintLayoutGuide+Extensions.swift in Sources */, - DABB71645C0A42245F89523428F94FC1 /* ConstraintLayoutGuideDSL.swift in Sources */, - 12D239EBF9D35B376A5912A89A8D2D5E /* ConstraintLayoutSupport.swift in Sources */, - 2EE2043D4DD09C8AFEB9FDDA05E9AF6A /* ConstraintLayoutSupportDSL.swift in Sources */, - D9C6F585D90AB46FF392513FD0EE42CB /* ConstraintMaker.swift in Sources */, - 7D4A6E8BA0ACCCD9700EAA722BAC7512 /* ConstraintMakerEditable.swift in Sources */, - A8BA8FD24CC92B6B0EB05598FF2D1A74 /* ConstraintMakerExtendable.swift in Sources */, - AA911B2E9CC0933BD24DE4E5486536A4 /* ConstraintMakerFinalizable.swift in Sources */, - 8E20465B712075DD500DCFD662D07177 /* ConstraintMakerPrioritizable.swift in Sources */, - 01B4678C48C79FE296E8D02086F945DF /* ConstraintMakerRelatable.swift in Sources */, - 5F8A56FB7C29C774B9B15A2EE33C3F2E /* ConstraintMakerRelatable+Extensions.swift in Sources */, - 803C6345EE6E2A5FDDE206AE70F23B70 /* ConstraintMultiplierTarget.swift in Sources */, - 76EBB2D3BF0A7774F59D0C3871364154 /* ConstraintOffsetTarget.swift in Sources */, - B00E4DCB41133530E09A76C0E9F3D957 /* ConstraintPriority.swift in Sources */, - 3F4B847DC64A98AF7C577DBD92606ACC /* ConstraintPriorityTarget.swift in Sources */, - F595B5D9F76D3292E682DEC1E1DBA59A /* ConstraintRelatableTarget.swift in Sources */, - 022BACAB001EA60E05F59D7F57C307F8 /* ConstraintRelation.swift in Sources */, - 967AA6C79C02F4665EBBDD48A4E3F6B8 /* ConstraintView.swift in Sources */, - 1E04860F7D564AB6E07965B70A21532A /* ConstraintView+Extensions.swift in Sources */, - B572380E3B1153DB53BF872072AEB45D /* ConstraintViewDSL.swift in Sources */, - 93A6AF9B36DF2817E850F6A33114357C /* Debugging.swift in Sources */, - E593C3895A05AA2F2E5B2469A9C3E95E /* LayoutConstraint.swift in Sources */, - 6612615053F5D866B16713B28DEEC8DC /* LayoutConstraintItem.swift in Sources */, - 41B097CA87620491B5A500124B922D58 /* SnapKit-dummy.m in Sources */, - CE8B98EAA4B4F955B0AC26C5AFC34FD8 /* Typealiases.swift in Sources */, - 951858E9EEFBED5BEC0317E9D44987BC /* UILayoutSupport+Extensions.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1904E2693C2C29ED89D5B9762AC29E60 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 477BADEE897F3C0AA214683C37B50980 /* DDFontKit_Private-dummy.m in Sources */, - BB9CF389D15F65172C5D16936279DAAD /* FontUtil.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 208FDABC2A1C6C4B03CB817DF2384F2D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D9AC52596EBDC826499603EC3A3A4DA0 /* DDUIGestureRecognizer-dummy.m in Sources */, - 632C96E0B7AF101CD955F4311CDAF91C /* DDUIPanGestureRecognizer.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2AD137A2E1FC7343733EE6EC866EF34C /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 465DDC88E2B046AF9FBB74B1D3D3FECD /* DDAudioPlayerKit_Private-dummy.m in Sources */, - DD13D1582CFCE65C448C2B56AB55ADB1 /* DDAudioService.swift in Sources */, - A859C89F424EDCA9AFE07133A3CF3FC7 /* DDSpeechSynthesizer.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3364FF6FC5BAA2DDA7C2A5E5FC9561CA /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - E24B4E923380A82510C81933D8ADEBC0 /* Asn1Parser.swift in Sources */, - 53693C4A79EC833BC3BA47F4CAAC9E44 /* ClearMessage.swift in Sources */, - 0B5B8EB020F39AD312D8C7A32FAF741A /* EncryptedMessage.swift in Sources */, - CC55C5B908ADB58120CCC05520A0BFFD /* Key.swift in Sources */, - 8A6158438F3B894DE7F91DE5FE93C795 /* Message.swift in Sources */, - B11769C6D0E6CA59FC36D1D77F642A78 /* NSData+SHA.m in Sources */, - 3CA6371C85FE25DFE2889186676D041B /* PrivateKey.swift in Sources */, - 2C0D806E4CC111F69F6DA1589BF4DE81 /* PublicKey.swift in Sources */, - 408E77F6FB2A28181214F3571597C6E6 /* Signature.swift in Sources */, - A99CF24F1B900AB7722D972FA4FED6BE /* SwiftyRSA.swift in Sources */, - 3D99594286ED1D20D88E0A86886224BA /* SwiftyRSA+ObjC.swift in Sources */, - 259DD1BE69FB6C8030BCD5994B5E5B51 /* SwiftyRSA-dummy.m in Sources */, - 7DF26FE5A9AF886EEA362BD9C81678E7 /* SwiftyRSAError.swift in Sources */, - 709711B731CC35DA65084FE1C1A2F73C /* X509Certificate.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 36A35162888C72211AF1A2516CAF1CC9 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CBC7F6CAD45F4BE6E058E1ABA62F83A4 /* DDZFPlayerKit_Private-dummy.m in Sources */, - 530C1E6E8D8210BD44D1C17B9A089BDF /* UIImageView+ZFCache.m in Sources */, - 4E1B724F70879610E56C69765A0E2938 /* UIScrollView+ZFPlayer.m in Sources */, - 31CF6A9299E02044EA28735F99B19686 /* UIView+ZFFrame.m in Sources */, - 876F0A0ED17438D064D6255B031ED91B /* UIViewController+ZFPlayerRotation.m in Sources */, - 9D4EAF940F2C46778D1682E8127F003A /* ZFFloatView.m in Sources */, - B5169B93C52F1FF030F7497A6FEF7E2E /* ZFIJKPlayerManager.m in Sources */, - FBC89193D9C95C427AEB8FAAA0184E43 /* ZFKVOController.m in Sources */, - 0EC5EC45F806F2DC7B68E6727227E49E /* ZFLandScapeControlView.m in Sources */, - 6F46408B20EA653BE535660788D44444 /* ZFLandscapeViewController.m in Sources */, - B601FF45040CC3B4D882477DB46A8DFD /* ZFLandscapeWindow.m in Sources */, - 219624B2DB84EE52D0E4F6B1789954E1 /* ZFLoadingView.m in Sources */, - DF217CDC17FBC6B0860732A9547F6805 /* ZFNetworkSpeedMonitor.m in Sources */, - ADFDF04B44D98030E7FB1F4A4196F155 /* ZFOrientationObserver.m in Sources */, - 7CDD4BF0209AA2F717C7546D5B6BF979 /* ZFPersentInteractiveTransition.m in Sources */, - F1B8D62196F1AEB3E7F0D9B1EFE4FD15 /* ZFPlayerController.m in Sources */, - B87FA1A74AFFD85DC6676B5D9F777DA4 /* ZFPlayerControlView.m in Sources */, - 245D0E313372FC4F2297E8CDC17BFDF4 /* ZFPlayerGestureControl.m in Sources */, - 2655C03CDF30A7690E43D892DDC95AB5 /* ZFPlayerLogManager.m in Sources */, - FFA171B211AC028D0A9375105738BDC1 /* ZFPlayerNotification.m in Sources */, - 3BA07D26BA7B31AD481DCF513B101864 /* ZFPlayerView.m in Sources */, - 54C7634794172F98C306F0B3597D5F8B /* ZFPortraitControlView.m in Sources */, - BEDC9DBFBB0DC7DD1731D138A43247C8 /* ZFPortraitViewController.m in Sources */, - 6A6F48CBEC40D32D1FED610A00C2CB8F /* ZFPresentTransition.m in Sources */, - FD7228A6A8B2236D44BE57275510EEAC /* ZFReachabilityManager.m in Sources */, - 3088663B2B31153DD3995BB53A10045A /* ZFSliderView.m in Sources */, - 35B124D386A8A344DB4E378136803251 /* ZFSmallFloatControlView.m in Sources */, - C65ED3D3286E2BFCEFB3291A3A776317 /* ZFSpeedLoadingView.m in Sources */, - D8FD93FBAC2166F333BA48C4D726B091 /* ZFUtilities.m in Sources */, - E07F5D56A6657C9297ACEF8B1E6047A3 /* ZFVolumeBrightnessView.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3D617A0C7EC401D1D14E14B3ED37B8F9 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5150F8B34780E4E3DD7CF2219EDCC4C2 /* DDKeychain.swift in Sources */, - 61B5D7DACF71FABBA2A23BC96030639D /* DDPersistenceKit_Private-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4A22334EC3699D30B5694C841150CCE7 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 9905D4F90FFAAA9BD6CAA9AAC049F967 /* TYCyclePagerTransformLayout.m in Sources */, - F02048C2A20F7616F84B024D49DA7218 /* TYCyclePagerView.m in Sources */, - DD693F44E362191D7A11E49AAA07D969 /* TYCyclePagerView-dummy.m in Sources */, - C3F1CFD58CCED57613DB1DDD25B6DF84 /* TYPageControl.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4DC3B7EC02645E3FAD25EEC11058C002 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5A2C1631C66120F95575B215D09760DF /* DDMAGeometry.m in Sources */, - 6F39C14D3EACE69517B3F102401E791A /* DDMALocationManager.m in Sources */, - C043CD6F673D841BCC733689B68F717D /* DDMAMapKit_Private-dummy.m in Sources */, - 32F4D098720BAB0CDADEB1740B23B290 /* DDMAMapView.m in Sources */, - 71097CFC69B73A09121CA1305A5139DC /* DDMANaviManager.m in Sources */, - F36D2AA3EEE04F0B422504D6B9DDCCCA /* DDMASearch.m in Sources */, - 6E588555392C32D460B05C99853074D0 /* DDMATrackManager.m in Sources */, - 99C743774FE46ABD47AB0B3588D4DA83 /* DriveRouteCustomAnnotation.m in Sources */, - BA90BD15789C130422EC079A83EA388D /* DriveRouteCustomAnnotationView.m in Sources */, - 65678E17B7F7748CD01C16053354C6F8 /* MABaseOverlay+DDCategory.m in Sources */, - 8E603D8736D65C38275F54BC50D3EB6A /* MAPointAnnotation+DDCategory.m in Sources */, - 4102520C79E465F93CCC555425B16A21 /* MATraceReplayOverlay.m in Sources */, - 6E81876ACD21C5A277955C72CE0C5F80 /* MATraceReplayOverlayRender.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 62D8975FEB599B74786F644DB2C11882 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - BACD7DFF47298324961BF36945739C4F /* AddRef.swift in Sources */, - E2FF272E289323C7679973E60C0CD959 /* Amb.swift in Sources */, - 334A994CC4B847C1B6262E13A65F9C3E /* AnonymousDisposable.swift in Sources */, - 532183013AEC102A1C6A27C1B0967A3A /* AnonymousObserver.swift in Sources */, - 4BA5566CD5E802D5B7297AA8BA9533EF /* AnyObserver.swift in Sources */, - AC9E9E52D8BEA49ABF792CD042B6A16B /* AsMaybe.swift in Sources */, - 49F7DAB07DB916955ABAA7248DD15E55 /* AsSingle.swift in Sources */, - 9BC1300E9DB508915604775E9F7A5889 /* AsyncLock.swift in Sources */, - 85A7214146CCC616A5A1147215F8F37D /* AsyncSubject.swift in Sources */, - E3EC4DC132466B25561D71A60EFCDF24 /* AtomicInt.swift in Sources */, - 3BC81C04B06FB5B079FDE9C95231AC97 /* Bag.swift in Sources */, - 6C2983F92070D6109B2CA8DC03796251 /* Bag+Rx.swift in Sources */, - D57BCC1A2B5001E4FC3AAB3D8A2A3759 /* BehaviorSubject.swift in Sources */, - E2138FFF0F7680DD4FAC45615082CA2E /* BinaryDisposable.swift in Sources */, - 51C7DF23678C1593037C5F583E993210 /* Binder.swift in Sources */, - 449C0983E8393CA349A0801B4BDEAE12 /* BooleanDisposable.swift in Sources */, - AEDAB119EA022C9AEF284E5230B29B80 /* Buffer.swift in Sources */, - 29A2E2087AE8D794A6A57E3BC55EEAF2 /* Cancelable.swift in Sources */, - FA66F11E4B7B60BB248A05F2F46AD00D /* Catch.swift in Sources */, - 0425126815863F5750612619CD1E32E9 /* CombineLatest.swift in Sources */, - C3A8476756DCFE56F36FA4C0C0F005C4 /* CombineLatest+arity.swift in Sources */, - 1C6B7EF5080126ACA9C2CAC9427FF0EB /* CombineLatest+Collection.swift in Sources */, - 9C3ACAA9BB7E4D19B32622BD32744A27 /* CompactMap.swift in Sources */, - 8E3011EF2559246BC3F4EF3CF479D7BA /* Completable.swift in Sources */, - 5D2DAAA0BB64E431F68C78ECB131EB93 /* Completable+AndThen.swift in Sources */, - 4DF304D36C33016666F6F057364BBCB9 /* CompositeDisposable.swift in Sources */, - 8C6F6029E7F458B72B22CB4EEB15BC12 /* Concat.swift in Sources */, - 3C785FEF705A69574697F75A7255C9FC /* ConcurrentDispatchQueueScheduler.swift in Sources */, - 7F1D1D9E76CC3BE34BFFF024E342DEB5 /* ConcurrentMainScheduler.swift in Sources */, - DAEB613013D8DAA244588733E413BEBF /* ConnectableObservableType.swift in Sources */, - 6B0790606C8DB29CABAC53C2DEB4982A /* Create.swift in Sources */, - BE2018EFCF55CB7212A3F720375237CF /* CurrentThreadScheduler.swift in Sources */, - 13E71BF7B0D9A685C7FB89D273C1CFBB /* Date+Dispatch.swift in Sources */, - ECB14F14E7999F982F82BA091BA297D5 /* Debounce.swift in Sources */, - 3BF1A3079B688B22EA3D2D87B3AD4DC4 /* Debug.swift in Sources */, - 1ACD8986D61166611918FD8F593AE55A /* Decode.swift in Sources */, - 8F12D586950726E67D16461D7D687C36 /* DefaultIfEmpty.swift in Sources */, - DB5C9157EC5FBF29CAA2889AF521DEE4 /* Deferred.swift in Sources */, - E7D8977C3725A243870793FC8761451E /* Delay.swift in Sources */, - 10BDEF2047FF1F2C3E095BF8CDAF7558 /* DelaySubscription.swift in Sources */, - CB0615A6A31F103532C75B7517795946 /* Dematerialize.swift in Sources */, - C5311161FC021C5AE34AE87AB393E5B9 /* DispatchQueue+Extensions.swift in Sources */, - 65ED6AB935E11F8E9A22060F171544DC /* DispatchQueueConfiguration.swift in Sources */, - 49955951CE0578AA45BB0397E425E243 /* Disposable.swift in Sources */, - 6A96B599CEF23FE690A56C0D3CF277F1 /* Disposables.swift in Sources */, - 0A52100A925E2B7AEE0B2A1F282751C2 /* DisposeBag.swift in Sources */, - DF958914EFE9E21C6C5E1BD242222E0B /* DisposeBase.swift in Sources */, - 34CBF28932334DC78F6E40B6FABECCB7 /* DistinctUntilChanged.swift in Sources */, - 8156214828F1F0FF073CE3E2B0010CAA /* Do.swift in Sources */, - 6F51243AC4188956ECC4583E961FA5B0 /* ElementAt.swift in Sources */, - 7F7DBCD636EEF4EE02EAA9682BC4E795 /* Empty.swift in Sources */, - AD8663D8100F84B56F975B4E50E1C5D9 /* Enumerated.swift in Sources */, - 7F7C17A10F83520B090996AE23ED917A /* Error.swift in Sources */, - E3DEDAE9D05FB9EE7F9EEC242BDF1BBA /* Errors.swift in Sources */, - 4D6B1F20A558A51499DF08D824AF1DD0 /* Event.swift in Sources */, - 4485A6CBAF4E316C0B58C1773F36D839 /* Filter.swift in Sources */, - B5F003569FB9997A51E10C4E408FEA61 /* First.swift in Sources */, - 63C2C57FB68436805B347EE05A1660FF /* Generate.swift in Sources */, - CC3B11B118C846F367689523882D1B5B /* GroupBy.swift in Sources */, - 3EE8DABA9C8DF87F6E10FEABF6F4F00A /* GroupedObservable.swift in Sources */, - 5E4348F11992D4F087ED9E6650AA384B /* HistoricalScheduler.swift in Sources */, - 3FC1DB05D712E48147247956545C6688 /* HistoricalSchedulerTimeConverter.swift in Sources */, - F350A1D21C18D72777925C6B41AB3BB4 /* ImmediateSchedulerType.swift in Sources */, - 878CCD15A728F07149720672E14337C2 /* Infallible.swift in Sources */, - 426669FEBC6BACB365C6043CADAAA0CC /* Infallible+CombineLatest+arity.swift in Sources */, - 08E6D56E326D4E16E6A83E0DEA552670 /* Infallible+Concurrency.swift in Sources */, - 55709C176E85E0CC725A7F1CED037C8C /* Infallible+Create.swift in Sources */, - 25CC4020FC9FED9D12F42A6367A95F1A /* Infallible+Operators.swift in Sources */, - 4C9E9BFE3A0518B96F9C2E64D857B212 /* Infallible+Zip+arity.swift in Sources */, - FDC4C980438A74360492FF2B22F13D2F /* InfiniteSequence.swift in Sources */, - 8273F7BD41CEA739E2ED609A60ACAF01 /* InvocableScheduledItem.swift in Sources */, - 296AD743BAED5C596C4FC357CD4FC261 /* InvocableType.swift in Sources */, - F7C751E3C8D7FB88659AC708054E0EA5 /* Just.swift in Sources */, - BEE76258849282C7DB56B153572C3A85 /* Lock.swift in Sources */, - F430CB626CD4AC2EFDD5970D691BA9C1 /* LockOwnerType.swift in Sources */, - E826B398FF000673F909C8468DA77F14 /* MainScheduler.swift in Sources */, - 2D6959FD049A370CC9591C62B0F7381A /* Map.swift in Sources */, - D71C467819D0C24DA0612DD278C6DE04 /* Materialize.swift in Sources */, - C41E477379FFE61691E0607BF65A4296 /* Maybe.swift in Sources */, - 2CE66298EB882DB104A440707386CB8E /* Merge.swift in Sources */, - 5F2ECA17D03BA273DCE3919C2968D778 /* Multicast.swift in Sources */, - D3F6591486E5671C716779009415B650 /* Never.swift in Sources */, - 072037C9AD869FE022268B0EEA723CDE /* NopDisposable.swift in Sources */, - 0310232331D116E4E50D233928126D66 /* Observable.swift in Sources */, - E29BAD8968297677EC4C9976C29D1860 /* Observable+Concurrency.swift in Sources */, - FF2C0F2DD47DC250B918F529C235083A /* ObservableConvertibleType.swift in Sources */, - 15E0847650E2432CA703DE562686D4A4 /* ObservableConvertibleType+Infallible.swift in Sources */, - 0FD6F20710A8667F9AE78B5758DE276D /* ObservableType.swift in Sources */, - 6A476007EF6D08B47938FDB9EF35BCDA /* ObservableType+Extensions.swift in Sources */, - E12619A2F1D79867781EE5C6A5C4F3AD /* ObservableType+PrimitiveSequence.swift in Sources */, - F70F7DABAD548AC26AA54EB60E25EC6E /* ObserveOn.swift in Sources */, - 1E350EF29DBE0EFA8CCAB91CA8E71AB3 /* ObserverBase.swift in Sources */, - AB1C148882E9316F6B2916F717FE6270 /* ObserverType.swift in Sources */, - DC1C2216E66ECA445192FE61CBDEC2F5 /* OperationQueueScheduler.swift in Sources */, - D2182DC0B451B548EFEF84CC8131C92E /* Optional.swift in Sources */, - 1572367981DAA2E0A4283D97FA701291 /* Platform.Darwin.swift in Sources */, - 83AE7729BA3BDB481140205DD5BABD95 /* Platform.Linux.swift in Sources */, - C809900775721D5EEA2F892F5878FDD1 /* PrimitiveSequence.swift in Sources */, - 06A70A35FC5D27014F93EA37402BC11B /* PrimitiveSequence+Concurrency.swift in Sources */, - 5E7DBA263B48BDB53880AD16170C9E99 /* PrimitiveSequence+Zip+arity.swift in Sources */, - 9A2E199ED48D8EA4691580E1DC4DCF1A /* PriorityQueue.swift in Sources */, - A9A3DF66A7A34ADF5BA6300B6664C68A /* Producer.swift in Sources */, - 2DEBD6FF56476D9DEF23F26A6B128E98 /* PublishSubject.swift in Sources */, - 269E460B54758ACB6B351151604E0B1A /* Queue.swift in Sources */, - 0D20CF83B8511B1CCB09EEF4A194613D /* Range.swift in Sources */, - 4C0F74240FF8C9D4E1C9FD82857A2EAD /* Reactive.swift in Sources */, - CC84D24A147B6443C21384FED4BCC5DD /* RecursiveLock.swift in Sources */, - 2C52389E12667E0179DC612D112DBC64 /* RecursiveScheduler.swift in Sources */, - F0B6B921967271EEBF6A446541AA1C92 /* Reduce.swift in Sources */, - 480514F620746636B9FBE06238DFBC7D /* RefCountDisposable.swift in Sources */, - 30CD9E67B22802940BB72062DED254CE /* Repeat.swift in Sources */, - 344AC17E91D0F874C0E41AE3F6D7C9D7 /* ReplaySubject.swift in Sources */, - 614EE654E34F468C46CEE0B7A7871AD4 /* RetryWhen.swift in Sources */, - 7D4EF029C2E661170E8487853AA7F318 /* Rx.swift in Sources */, - 2FE046DCADD181369DFC6A2685D565A1 /* RxMutableBox.swift in Sources */, - 2230F8D2C691E97B535D933B21CF1676 /* RxSwift-dummy.m in Sources */, - F7320F1A3B3B6F57FCE6DD4506442B71 /* Sample.swift in Sources */, - 80D210A4F34FD9BDA0ABFA71918550AC /* Scan.swift in Sources */, - FB81983B2C1D737FB57EC95493026EBB /* ScheduledDisposable.swift in Sources */, - E90C791097260FF982B97A17351E9DE3 /* ScheduledItem.swift in Sources */, - F20D0C75BB1C6DF67CB0AEBA120EA029 /* ScheduledItemType.swift in Sources */, - 13EA7F2015E57D048FEE8E0ECD4E3871 /* SchedulerServices+Emulation.swift in Sources */, - 573E712B6BC3B0962DA57414A6225ED0 /* SchedulerType.swift in Sources */, - 32266A6F42922E50D21FF66C496DF1F0 /* Sequence.swift in Sources */, - FE7D14F3ECC035AA8B007C33B0E69D76 /* SerialDispatchQueueScheduler.swift in Sources */, - 03C49F5C79286BB52FA09BB9556BA0D0 /* SerialDisposable.swift in Sources */, - 78ACEC567DE643862E2D6222BD26255D /* ShareReplayScope.swift in Sources */, - 6B99BFFDC604E20213188FD1672F7692 /* Single.swift in Sources */, - 6A3847647FCA85BD47543ED73E4E8B8C /* SingleAssignmentDisposable.swift in Sources */, - 96A6378A09CD1F2FC5D2A159A065CD07 /* SingleAsync.swift in Sources */, - ABA4EE05D4E24045F1E1919CFB3433B3 /* Sink.swift in Sources */, - DD0DFABC55424FB2AEE317F53FC64F1A /* Skip.swift in Sources */, - BC1FA3C1D43CCA25D6310A112D25E8E7 /* SkipUntil.swift in Sources */, - 037FD9140CC8FF08C2AE16915A81C7D8 /* SkipWhile.swift in Sources */, - 5493F488DA8371A8D85F28372DF306CD /* StartWith.swift in Sources */, - 262F6512506ED9745F84C00D7748E54A /* SubjectType.swift in Sources */, - CBE5E198EAC977A29F3EAC4E9D1D56ED /* SubscribeOn.swift in Sources */, - 1A564818CADAE845D348E6245B9637EA /* SubscriptionDisposable.swift in Sources */, - C7DB4FA42C8E94C52D3D41699874CF67 /* SwiftSupport.swift in Sources */, - 079AC611B84A6DF669CB8AA0BB3E4D11 /* Switch.swift in Sources */, - D85E58106957DB73F0CC08DD6C979742 /* SwitchIfEmpty.swift in Sources */, - 4F96FDE3192A3D4E05EFBB752EE656E1 /* SynchronizedDisposeType.swift in Sources */, - C824936B87BAA0090A97BCF377ADD5AF /* SynchronizedOnType.swift in Sources */, - 0AA7DF04E09E0767F6E7615B4E431C0C /* SynchronizedUnsubscribeType.swift in Sources */, - 6EBD3EB2E29B8A2B136B34B89B730869 /* TailRecursiveSink.swift in Sources */, - 52AA99114795E96612515F4C16B3D033 /* Take.swift in Sources */, - A3415197D016B366AAE1BC80C731AC3D /* TakeLast.swift in Sources */, - 85C13D51F12A1B41DB7AC016038FA2BA /* TakeWithPredicate.swift in Sources */, - A6842F40F5FB9AB6448371BF3B794DAB /* Throttle.swift in Sources */, - 0F6D409DD37040FBD2F76BD9D1764022 /* Timeout.swift in Sources */, - 38D3D319A463252D8357528ABC9B92C6 /* Timer.swift in Sources */, - 9293372592A2E6163FCD7389BFCA1D72 /* ToArray.swift in Sources */, - 8839F137790BBE93BDAF4EE73FAB9781 /* Using.swift in Sources */, - AABFBAB8D7E34B9FD6BD00BD475CF52F /* VirtualTimeConverterType.swift in Sources */, - 32FDEF26E5A224A9DE72E09CE33BFDF0 /* VirtualTimeScheduler.swift in Sources */, - 6601F5C3344A2030290917F15C108641 /* Window.swift in Sources */, - 7A7A6301711D6E6DF31091B6C5CA4CD2 /* WithLatestFrom.swift in Sources */, - 22F9542CF144A32FA791286228A88C04 /* WithUnretained.swift in Sources */, - 5147BF32CAD32DF305EEA0FED27FBA35 /* Zip.swift in Sources */, - EABB7C47885DF8E1EF8E0E53F0E681C4 /* Zip+arity.swift in Sources */, - 069D3D96F28A4530C45940DDD664360C /* Zip+Collection.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6625AD6412FB17FEF66A2EC9A5E96BF8 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - F2B8385F9E67C1CF82BE8221FA419DF9 /* CALayer+DDCategory.m in Sources */, - E638D3FCD2120FD5A105AEA12DDA46BC /* DDCategoryKit_Private-dummy.m in Sources */, - 7BB44CB2C08CE4C0DAA91A68CD4ED371 /* NSAttributedString+DDCategory.m in Sources */, - AC8C7E1422291BD597A507AE2FBE4CFB /* NSBundle+DDCategory.m in Sources */, - 6BC93A49B7722F929EB15D043F57ECDA /* NSMutableAttributedString+DDCategory.m in Sources */, - AB31BC88396C84D36D01D30B3089EE27 /* NSMutableParagraphStyle+DDCategory.m in Sources */, - BBA64CC3159B0055112684672E6C6D53 /* NSObject+DDCategory.m in Sources */, - 327738D4F79388DCE57DA6B462AD2936 /* NSThread+DDCategory.m in Sources */, - 6BBBC6A48B32F57D19A97FEB3FB866C9 /* NSURL+DDCategory.m in Sources */, - A66E511DE17FA95247044C0C2A40CFD2 /* UIApplication+DDCategory.m in Sources */, - A314E58FA49392DFB77624520F1B0508 /* UIBarButtonItem+DDCategory.m in Sources */, - 6B47753CA282E9B3229C1D8089F00203 /* UIButton+DDCategory.m in Sources */, - 751BA451DA262CF94764D22EBC4F681A /* UICollectionView+DDCategory.m in Sources */, - BE6C77A7809ED5414A68D5B02A0FF6ED /* UICollectionViewCell+DDCategory.m in Sources */, - 36609831C82EC1E0D38EFF6ECDF53026 /* UIFont+DDCategory.m in Sources */, - D2C54215CC9AC0E3263271582DF6F5B0 /* UIImage+DDCategory.m in Sources */, - E2398607939A65FDFF4982710B41A8D1 /* UIImageView+DDCategory.m in Sources */, - 2D498A82DAA39D56247F29BEE6EEB7ED /* UILabel+DDCategory.m in Sources */, - 7CA457233780E79114A0CCEC631708D9 /* UINavigationBar+DDCategory.m in Sources */, - 25970C989E301315E4B0E51B9265191C /* UINavigationController+DDCategory.m in Sources */, - DE3F89AA06EBBA984828544D70488A49 /* UINavigationItem+DDCategory.m in Sources */, - FB63C11A4701790527577A12E5CB1681 /* UIScreen+DDCategory.m in Sources */, - 090FD4710FE267FEA37C51F5F2F0E2B8 /* UIScrollView+DDCategory.m in Sources */, - 8FBE778ABB873574910D9E9349DCCFF1 /* UISwitch+DDCategory.m in Sources */, - 866045BB12EBA3D69870F9D99D908C85 /* UITabBarController+DDCategory.m in Sources */, - 779DFAB16470286A2ED0216508F251C0 /* UITableView+DDCategory.m in Sources */, - 6C1B5121359AF488ECDF2AD63A006A3E /* UITableViewCell+DDCategory.m in Sources */, - 7DFCA00B01A0FE5B3114D6D871534743 /* UITextField+DDCategory.m in Sources */, - 58A9766AA4CAEEC214180B350E74FAC2 /* UITextView+DDCategory.m in Sources */, - B27B495AC5C1672B794F62A046B37732 /* UIView+DDCategory.m in Sources */, - 9FE833A54A7D964D0D67BB8288C07D69 /* UIViewController+DDCategory.m in Sources */, - 170BF4251CF6C18857EE8DCE876FF4D5 /* UIWindow+DDCategory.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 66B0EFC761F29099DEA6CA3BD50082BA /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 6DDB75CE35087BF5A4E5F24C173FB0B5 /* Pods-OrderScheduling-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6CAE4326F0042B0C370F9488D5D5BC2E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 36F40E8EBE86E294348DF7F319E98D8A /* AutoUI.swift in Sources */, - DFF1DB48DB0640CE62267571AB775F15 /* DDAutoUIKit_Private-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6DE1CCB3EFB5124D6E2B8ABF63F7F6C6 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 91ED131F555A03F5905E86878BF38C69 /* MJRefresh-dummy.m in Sources */, - 8D2C2E93E44DC32A322DC0F747FE8D7C /* MJRefreshAutoFooter.m in Sources */, - FD70F673A044AAAE0C5AA9739516065A /* MJRefreshAutoGifFooter.m in Sources */, - D3A692A8D6778B0C530C667E0D2645F5 /* MJRefreshAutoNormalFooter.m in Sources */, - 9DAB2556D82974EE7905C156B4F3A07A /* MJRefreshAutoStateFooter.m in Sources */, - EDB63409EB6B2D945EB157D8A6CB1E4D /* MJRefreshBackFooter.m in Sources */, - 90C2306666CD2C08EF76F2012825951C /* MJRefreshBackGifFooter.m in Sources */, - F4B076723D3EEFEE244EE1009B3CCF28 /* MJRefreshBackNormalFooter.m in Sources */, - 208A97584D845254E986E9C707635B67 /* MJRefreshBackStateFooter.m in Sources */, - 662D8B722CE76FE956E05768FD3ED3B0 /* MJRefreshComponent.m in Sources */, - 9817388F04E487B7ECB5C08DDE606F86 /* MJRefreshConfig.m in Sources */, - 50DD8666AF1EAA8E711927A3EBC87508 /* MJRefreshConst.m in Sources */, - 5B9B3869CE36800618F1D641E9B002F5 /* MJRefreshFooter.m in Sources */, - D45471D1E2289BEDB132AE8868F21AAA /* MJRefreshGifHeader.m in Sources */, - 2D83E793BB320606B62CFE1E10C2A490 /* MJRefreshHeader.m in Sources */, - CA09255FDEA073F52E9B21618886EE8F /* MJRefreshNormalHeader.m in Sources */, - 93DF6D6B5E32104AFE985F15355F629A /* MJRefreshNormalTrailer.m in Sources */, - 2BBD8EA6B3F3A8EA8F721498BE13D6C8 /* MJRefreshStateHeader.m in Sources */, - 2BF6AD4F75D3FFC369CCB82DCA4C730E /* MJRefreshStateTrailer.m in Sources */, - E27EFB8F48312FC0268C6B922BA3474E /* MJRefreshTrailer.m in Sources */, - 159BBC585A2C51D44D40DE88B5B18AAF /* NSBundle+MJRefresh.m in Sources */, - 79F7344C573425769AF35D858AD4A67E /* UICollectionViewLayout+MJRefresh.m in Sources */, - FFAA74F5A2EF6804BF1496B33FF45C9E /* UIScrollView+MJExtension.m in Sources */, - DB546CEBEB12A61D98A707A776672188 /* UIScrollView+MJRefresh.m in Sources */, - E01CDA460DAFCC348AFF41C35B802C89 /* UIView+MJExtension.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6E3E0ACDF1B6098B32E67E6ABE42A80F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - E1A06049FF5CB696BF410CBDC87EC7FC /* InteractiveTransition.swift in Sources */, - BF218C5F8191D91FFD1E960B817BEF4F /* PopupDialog.swift in Sources */, - 730A1A889B49E6BFED461A87F2DA2961 /* PopupDialog+Keyboard.swift in Sources */, - 1B0E9E785A36AB31562F17D0F5C39246 /* PopupDialog-dummy.m in Sources */, - E81FFF1ED445A3DE95215901193CAFDA /* PopupDialogButton.swift in Sources */, - BBC905AD0AF2928C275E48F731297B78 /* PopupDialogContainerView.swift in Sources */, - 33C5347E93C96AC65380B9B1CCF3B411 /* PopupDialogDefaultButtons.swift in Sources */, - B58868E339463DBA3ECA1579ADDAD5CE /* PopupDialogDefaultView.swift in Sources */, - BD6BC8F83AEF023312480ACA7BFEDD1F /* PopupDialogDefaultViewController.swift in Sources */, - BDD349F62595EE9FFB6FCEB9AEA108A4 /* PopupDialogOverlayView.swift in Sources */, - 2CD914E4B91EBD8D2CA2DF77BC35BDB1 /* PresentationController.swift in Sources */, - 7596AB8416A0BA074FEB4D4F0EF0B137 /* PresentationManager.swift in Sources */, - 171803E499E9C5E946F0FE061019936B /* TransitionAnimations.swift in Sources */, - 0319C6AB030514ABA3FDD2A242BD48E8 /* TransitionAnimator.swift in Sources */, - 180F0CC23C1B3AB52C80EF79A5B89158 /* UIImageView+Calculations.swift in Sources */, - 590659560832CE55F1066E36EE26F4BB /* UIView+Animations.swift in Sources */, - C5F8C1BAC35773605FE119A52C0CC0DA /* UIViewController+Visibility.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7276708BC4B36ED3675C72DA19B83767 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B4C0B46C21087CA310DE57D0B9FF1C17 /* AFError.swift in Sources */, - 1984D4549EEA55FB1812D99162C83E52 /* Alamofire.swift in Sources */, - 4B717036F93677425DDB9682C705B644 /* Alamofire-dummy.m in Sources */, - 2A9587CB9E83DC818BC42AB6D3BA6C93 /* AlamofireExtended.swift in Sources */, - 88E8C4E6532C1885DE243488021CF2D2 /* AuthenticationInterceptor.swift in Sources */, - 20DC5EFA536B064520E620C2ACAB766E /* CachedResponseHandler.swift in Sources */, - 460CAF3FCDD140A11875B67D3124B8BC /* Combine.swift in Sources */, - 302832D4B7652F756A29A925F087C822 /* Concurrency.swift in Sources */, - D552F57595574A84A82587BF008F32BB /* DispatchQueue+Alamofire.swift in Sources */, - 67613012FC19662F5A1A452C9DFD7AF3 /* EventMonitor.swift in Sources */, - 7539BFBC46E1BB8AE022CB250A405582 /* HTTPHeaders.swift in Sources */, - 7FD541C37F57A49DA86354FB0AC6CB72 /* HTTPMethod.swift in Sources */, - 4DD86C40D4F594076831DF90DFAF5961 /* MultipartFormData.swift in Sources */, - C27DA232D42C0C1A1860904474D006CE /* MultipartUpload.swift in Sources */, - D14356BF87F9E91736CB650348922BB1 /* NetworkReachabilityManager.swift in Sources */, - 7D23A05408E0E17BB56E5909C983386D /* Notifications.swift in Sources */, - 95277350C6DD3C3641CFF98AE0A12B12 /* OperationQueue+Alamofire.swift in Sources */, - A011FE7F352E2DC4F52A72ACC985E865 /* ParameterEncoder.swift in Sources */, - 5C8D180662E74F979FE9FA3DC5BEC582 /* ParameterEncoding.swift in Sources */, - 65FBF2652959C0C03F5BEB1A97949DCF /* Protected.swift in Sources */, - 3B14941EB241AF1ED07CFF634860BE1E /* RedirectHandler.swift in Sources */, - 63FFF49598498CF8C2ED679A60632466 /* Request.swift in Sources */, - 47ABDC62006F547E265B058A1D70E8BA /* RequestCompression.swift in Sources */, - ADF031ED0468E75793D32E1609139984 /* RequestInterceptor.swift in Sources */, - 194D6F32A526649820D6B0AA03EEF12F /* RequestTaskMap.swift in Sources */, - 34EE7B15E96B44F2F505FF8B47CA47BA /* Response.swift in Sources */, - FC061D954352F832FBE08C01973F7DF7 /* ResponseSerialization.swift in Sources */, - 83888A11B0701E2D4EE236DFA1E56800 /* Result+Alamofire.swift in Sources */, - 33859D3CB90E4ABDB24C9227DFE85E4A /* RetryPolicy.swift in Sources */, - 69EC7466EB3C133CE0D82257EF336100 /* ServerTrustEvaluation.swift in Sources */, - 731BC8F0B05F16D9E44C9EA00B22F4C9 /* Session.swift in Sources */, - 68B4FCC1E1A2735532B81982ECC9BE5B /* SessionDelegate.swift in Sources */, - 1DAD1ABC0638C45123D6AA1E78167F56 /* StringEncoding+Alamofire.swift in Sources */, - BE5E45566FE7DF80AFCE321E3EB0FBCD /* URLConvertible+URLRequestConvertible.swift in Sources */, - B3E51F0E8AA1550E1B667D96C3BDD1A5 /* URLEncodedFormEncoder.swift in Sources */, - 2354A0786A1EBBC2298B9CB493F8C4FF /* URLRequest+Alamofire.swift in Sources */, - B169869926BCF8894AD891F3261B8AF1 /* URLSessionConfiguration+Alamofire.swift in Sources */, - 1D6D63D61E41CDC8C9A95724CF0E75CC /* Validation.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 72C2651DB2B4288C26A42C4F05FF4276 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 568DF1ED8C470080C126EA9D00448949 /* DDAttributedString.swift in Sources */, - C324D23492EC6AD067A7DC7E705DACD9 /* DDButton.swift in Sources */, - E0A97352EFF47010A3449A81255CE5FD /* DDCollectionView.swift in Sources */, - 0811BB981A2EF4E3C78C193E8AE1A4BA /* DDCollectionViewCell.swift in Sources */, - 9313F5863E61D51958D4954C876666DC /* DDControlsKit_Private-dummy.m in Sources */, - CBEC084A900017F2E5219E7C514B1CA5 /* DDImage.swift in Sources */, - D1C81C32A93CCE7A35A72FC1D5FFBC75 /* DDImageView.swift in Sources */, - C0C8B5A6D43875BA9B2C23CC0181071D /* DDLabel.swift in Sources */, - 5434354C379A1C85A849409F278C7BC0 /* DDMutableAttributedString.swift in Sources */, - 21D966E2F801F96E6E36D2C7BA73235B /* DDNavigationController.swift in Sources */, - C06003DD05A5FB9050C6BCE1DD128511 /* DDScrollView.swift in Sources */, - 474B94BF4B12B3168F0A330F9858BAD9 /* DDSwitch.swift in Sources */, - 841447C2E526E658EC8102873B77A9C9 /* DDTableView.swift in Sources */, - 6F1697BC66902A6089A108DFE1E31B00 /* DDTableViewCell.swift in Sources */, - E42BF0E600D0189F7F9AD5329D385334 /* DDTextField.swift in Sources */, - DDFE00C961BDCC08086F9939477303CD /* DDTextView.swift in Sources */, - 685297AE4AE28A8EA07BECA639E313E9 /* DDView.swift in Sources */, - E425B1792B00EFB153A9BCAC85B730F4 /* DDViewController.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7368DBD0445798A37E4484C6B02012F9 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5F73068079D791AB651DA5F0563C5EB9 /* IQBarButtonItem.swift in Sources */, - 1112AADD470DD6BB1410B7C32A0EA334 /* IQInvocation.swift in Sources */, - 5DA9D5D4FE27BA93CE470741D4A1D202 /* IQKeyboardManager.swift in Sources */, - 7C4555B4F80F91CE5F03F39C2D64D86D /* IQKeyboardManager+Debug.swift in Sources */, - 4F338A6C52C35B05E8A873571A9815D7 /* IQKeyboardManager+Internal.swift in Sources */, - 2A6423FCAB17960280B3035F79F4DD6F /* IQKeyboardManager+OrientationNotification.swift in Sources */, - 1FC870398A64B8565B90B11479B88B68 /* IQKeyboardManager+Position.swift in Sources */, - AFE7A6835DD89F0D3331538280787CEE /* IQKeyboardManager+Toolbar.swift in Sources */, - 38113EA83CFE5B14B6BCFC96772A2BDE /* IQKeyboardManager+UIKeyboardNotification.swift in Sources */, - 678E3ECA55B06B72144E0F1FCB7792D7 /* IQKeyboardManager+UITextFieldViewNotification.swift in Sources */, - 56D33A6E86B978BD0A7C66442E2D8B52 /* IQKeyboardManagerConstants.swift in Sources */, - A328DD14BD9500BC78D1C7120DBC30E4 /* IQKeyboardManagerConstantsInternal.swift in Sources */, - 9413C7DB4B03B9C9178A64659F476AD0 /* IQKeyboardManagerSwift-dummy.m in Sources */, - FDE175AAA2CB3652B67AA421E7AF96AF /* IQKeyboardReturnKeyHandler.swift in Sources */, - 96199F1BEE04A029B3278BB1BED5F276 /* IQNSArray+Sort.swift in Sources */, - 7CC298CB85BBB9C814F22B8AAEF94281 /* IQPreviousNextView.swift in Sources */, - F001B72EF2941419AF8310B30D8FF42C /* IQTextView.swift in Sources */, - 3AAB1695C0F9AAE144A7E37E34966F45 /* IQTitleBarButtonItem.swift in Sources */, - 25BF5D9FAE084BAE3824007EA8E0196C /* IQToolbar.swift in Sources */, - 31C23CF66BBB1520FFD4D8C8AFB510DF /* IQUIScrollView+Additions.swift in Sources */, - F85954F8ECD9E80718B093791EA95425 /* IQUITextFieldView+Additions.swift in Sources */, - 511B522F19916DD68AF4EFED285AF968 /* IQUIView+Hierarchy.swift in Sources */, - 7A852F0AF1F3E1693579BFB0EE3DFEAA /* IQUIView+IQKeyboardToolbar.swift in Sources */, - 80707A9E832C8EEAC361896B59A1DE19 /* IQUIViewController+Additions.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 745CB78064A1E95189482B6F70416FE8 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 4EAB3D85D6961144A09F0BA9D1A312A1 /* AnimatedImageView.swift in Sources */, - 0D56C50DBF09FF385867AEDB34602727 /* AuthenticationChallengeResponsable.swift in Sources */, - 275381CAC910D22744FEFD2CA9C80297 /* AVAssetImageDataProvider.swift in Sources */, - 83F4318BF4095ECFC31DE8DA2E94CBFE /* Box.swift in Sources */, - EBFB3E5BC755784C22270B8ED231D67B /* CacheSerializer.swift in Sources */, - 0451FF01902971B742037EC3A8954BD6 /* CallbackQueue.swift in Sources */, - 6BBB8F72F2FC1455E6D2B80067068144 /* CPListItem+Kingfisher.swift in Sources */, - FB9EFEF61EC1B810AC75ED83BF92A9D1 /* Delegate.swift in Sources */, - 19481C533673C7B4B552A16BB4B267EF /* DiskStorage.swift in Sources */, - 6556CAFF24D92AF5238AB1C304E908E7 /* ExtensionHelpers.swift in Sources */, - 42B1E4E7DD051B0FEF42A279062218A8 /* Filter.swift in Sources */, - ECF8E423DA88D54D8D943575E54CD51E /* FormatIndicatedCacheSerializer.swift in Sources */, - B4677B8626E61F6810C199F75F2B971C /* GIFAnimatedImage.swift in Sources */, - 52533243FC2524EA3BCAEC5C85A5B598 /* GraphicsContext.swift in Sources */, - 8DD38F3D371B152A614804C552C71F86 /* Image.swift in Sources */, - 564B8B68C28EEC9BC89FDBB79C917D40 /* ImageBinder.swift in Sources */, - A4877D2BE9220BB9B366F86461105668 /* ImageCache.swift in Sources */, - EF36E84507DB598234E41BA12B9949A4 /* ImageContext.swift in Sources */, - 65C2BAFC8CDDCCCAD8B2DFABA4016D6F /* ImageDataProcessor.swift in Sources */, - A7B75A1968198A4D77CC553FAAA42540 /* ImageDataProvider.swift in Sources */, - 28096A037B656B6C13E1B62315EDBF25 /* ImageDownloader.swift in Sources */, - 9EC8F835ACF69A2724E2141D8C3FFEFE /* ImageDownloaderDelegate.swift in Sources */, - 788B7DE9EE9D0619CD3A2EC07BBB8BED /* ImageDrawing.swift in Sources */, - 2BB1B5BC54D2ADDD6BF253B4FBB71E3A /* ImageFormat.swift in Sources */, - E935E55BDB37F2E9B02D54AE9EF58BA6 /* ImageModifier.swift in Sources */, - EA8238C94EF2404183162571A60D4BBD /* ImagePrefetcher.swift in Sources */, - 821981D6FA5DC29F6EA7B7CFAF8465C0 /* ImageProcessor.swift in Sources */, - 944D167D78E7367502ABE9458F874AB3 /* ImageProgressive.swift in Sources */, - 87369DBBCC57DA7281AAE3BC6224BAFE /* ImageTransition.swift in Sources */, - E70ED922DB0307C23F12F9C7B417BDAF /* ImageView+Kingfisher.swift in Sources */, - 85D3F6F5B63497C2F4378413D2401F7E /* Indicator.swift in Sources */, - 13B2ED45C9B0CE27BE4B8AF1D3C80775 /* KF.swift in Sources */, - 5C885F0F46D1C0BBBAB4A0833F1B188F /* KFAnimatedImage.swift in Sources */, - D5F0E537FCA14DAEBFD97E634B6955FE /* KFImage.swift in Sources */, - 4A557479ADC816F4988D9804DD8DB891 /* KFImageOptions.swift in Sources */, - E8F1355FE55953956F3239C1987AFE76 /* KFImageProtocol.swift in Sources */, - 0F81FC4C865D75BD8DAC0AE4D0972FC5 /* KFImageRenderer.swift in Sources */, - 6C5602F523BBEE19D51F8D69581E8915 /* KFOptionsSetter.swift in Sources */, - FAA6FD10E049D4D922B3D6F70DCBB926 /* Kingfisher.swift in Sources */, - 35F5FA1C74B28C3080CA0005AE863FA8 /* Kingfisher-dummy.m in Sources */, - 6FD18EAB66A2867AD9BE2F4098227286 /* KingfisherError.swift in Sources */, - 550EF3A9F8FAB1F87221E9FA00C72B76 /* KingfisherManager.swift in Sources */, - 49B721C8B6C6DD55122848FE9E1B5527 /* KingfisherOptionsInfo.swift in Sources */, - B2D7D749AE349EFEAD819B4D368B93F3 /* MemoryStorage.swift in Sources */, - E8400A943E9004BE6A770856DC99C082 /* NSButton+Kingfisher.swift in Sources */, - 9BF9E0DACEA26C0A297BA1FD09530F00 /* NSTextAttachment+Kingfisher.swift in Sources */, - 72165416D3629B4F9F969ADA727DBC6C /* Placeholder.swift in Sources */, - 6C716A2374DA6660793F27214D130B24 /* RedirectHandler.swift in Sources */, - DFCBE8F061AA424BFCF63CACDC73B4AD /* RequestModifier.swift in Sources */, - DAB323FD8A75DAF084E56CEA380D6838 /* Resource.swift in Sources */, - 03FC127625970082E238B6996698846C /* Result.swift in Sources */, - 27393AF110439C3A37744A4040E1E9EE /* RetryStrategy.swift in Sources */, - 616796AAE5C08649C603637718A1FB60 /* Runtime.swift in Sources */, - 5A8B90BF77A2238F3FB7A263DD06E6F8 /* SessionDataTask.swift in Sources */, - 619FF05D3ACB3E9D89C3798588D72EC2 /* SessionDelegate.swift in Sources */, - 75E0DE66BA53B97486D0CB0C0CC76278 /* SizeExtensions.swift in Sources */, - A0F2E96F6ABFE662AE84553D7840D9DD /* Source.swift in Sources */, - ABB15EAD40CF82A895F7FAC4184EE041 /* Storage.swift in Sources */, - 1B9535181C5455FF923D768AC06810C2 /* String+MD5.swift in Sources */, - D526D9C8D89180F4256A88EE5D008D26 /* TVMonogramView+Kingfisher.swift in Sources */, - 74BB85D686209241F106C05A945AF56E /* UIButton+Kingfisher.swift in Sources */, - 02C89181C2C2F2F794BB150CA1DE59C5 /* WKInterfaceImage+Kingfisher.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 79C21AA022DDDB83E1C46385A3974946 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7AB490E201D8C635516B7B840E5B3FB2 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 29F4DFF55D0B18B9ACA5820B30481389 /* DDLogKit_Private-dummy.m in Sources */, - C115C15858CF1B67C2654831E2FA0CD6 /* DDSwiftLog.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 946506CFEB421F414CE172C4F8B6744E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 02D531FA1E9A19A134ED8BD68C5E04C0 /* JXCategoryBaseCell.m in Sources */, - 1CAF7FCBD075678639BE65A029B4E56A /* JXCategoryBaseCellModel.m in Sources */, - 1379145EE1CE455EBC27791628DABACA /* JXCategoryBaseView.m in Sources */, - 3F04950F30488FB6AD475A0519B0B16F /* JXCategoryCollectionView.m in Sources */, - 3FE17AA44DD3A1A5179103D3798D079F /* JXCategoryDotCell.m in Sources */, - 1AD7C51CCF7E6204B37A504B68924F16 /* JXCategoryDotCellModel.m in Sources */, - 8EA71FCE62BCE72E1798AC86592F4747 /* JXCategoryDotView.m in Sources */, - B0C86B62900B2C3ED6A6CC0E578492D1 /* JXCategoryFactory.m in Sources */, - 8A93BFC4ECE061648BEDA3A17DF34B7D /* JXCategoryImageCell.m in Sources */, - 3542BDC08CBCA8BB1951AB507AB42AA1 /* JXCategoryImageCellModel.m in Sources */, - C06198FCBBF8CEF254BBBFA81EC292F8 /* JXCategoryImageView.m in Sources */, - 279C4E09D6D4113942EB37DE5DD034B0 /* JXCategoryIndicatorBackgroundView.m in Sources */, - 9A1DF88AB0E546AB51597714309B05C2 /* JXCategoryIndicatorBallView.m in Sources */, - 513CADFB7F193445B353B7320A624FBD /* JXCategoryIndicatorCell.m in Sources */, - A576C4698BA14346E54EB6463022EAD9 /* JXCategoryIndicatorCellModel.m in Sources */, - 6E79B8E1DBB132B9953B5F37A743CB43 /* JXCategoryIndicatorComponentView.m in Sources */, - 97ACD5F8ACFCD7B423375EB425F82287 /* JXCategoryIndicatorDotLineView.m in Sources */, - 4FA542506516B8922F8AADE85C136E1C /* JXCategoryIndicatorImageView.m in Sources */, - 33043B5E0E8C4E2805481E6D692949AB /* JXCategoryIndicatorLineView.m in Sources */, - 51734B077F9900737E1E59F4E5D6CAFE /* JXCategoryIndicatorParamsModel.m in Sources */, - 127BB0831E7F383B0F7DE209003032B9 /* JXCategoryIndicatorRainbowLineView.m in Sources */, - 78F42347772C57AEB0CE35F118F14AD5 /* JXCategoryIndicatorTriangleView.m in Sources */, - 9069546BCE91958C23E24D6279C5E7C0 /* JXCategoryIndicatorView.m in Sources */, - 4139B49E8556C97A3D8FE0AB885CA1FD /* JXCategoryListContainerRTLCell.m in Sources */, - 794C8686B1DFD5AA5216F9165ABD8EE3 /* JXCategoryListContainerView.m in Sources */, - AE1015AC17118CA9A93681AAE7454DCD /* JXCategoryNumberCell.m in Sources */, - 09B9E5FB7E73F28A4E1F581917EF868A /* JXCategoryNumberCellModel.m in Sources */, - F07D944FB9EE7D69319AEA7DF8818876 /* JXCategoryNumberView.m in Sources */, - 0F2AAE2334C409128ADD57B132E767F6 /* JXCategoryTitleCell.m in Sources */, - 8A3E8C9849B1E73D113589B8F007E566 /* JXCategoryTitleCellModel.m in Sources */, - 50520A6CAB33DD6A5F11562B65CA78A3 /* JXCategoryTitleImageCell.m in Sources */, - 8F94DE7C574F2E68FB7F4182FF4AA19A /* JXCategoryTitleImageCellModel.m in Sources */, - 3ACFBA19004CE54466BBD8C6BEF1D27B /* JXCategoryTitleImageView.m in Sources */, - 58236AA8C078BA049D0224B773054304 /* JXCategoryTitleVerticalZoomCell.m in Sources */, - 8772F32DE15FC5E2426A36349DE9E7C8 /* JXCategoryTitleVerticalZoomCellModel.m in Sources */, - F5BB2BEFDB9F1EA2A0A168F46096A065 /* JXCategoryTitleVerticalZoomView.m in Sources */, - EDC4065EC27A50BCC6B13FC3ACD00185 /* JXCategoryTitleView.m in Sources */, - E9D877C0FC7A2087F6B5FEC67FFD4CFE /* JXCategoryView-dummy.m in Sources */, - 67361CCD8BA6B13F5AFA500684267561 /* JXCategoryViewAnimator.m in Sources */, - 698D4BC94388BEEF0696C5F30A549DAB /* RTLManager.m in Sources */, - F844A55CF6790D853D264312D6F883E0 /* UIColor+JXAdd.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 98E82CF2907147E2BFF26136E42B9E5A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ACF6E744FFBA77DB4FE3E42A917E5CAC /* DDWebImageKit_Private-dummy.m in Sources */, - DB8E1097EFEC248D83112C45B37D7B88 /* MKAnnotationView+WebCache.m in Sources */, - D8DDE2D559F66BDDAFAEBD52C6E4176C /* NSBezierPath+SDRoundedCorners.m in Sources */, - 01D8AE321F1FA71F2D43127EAC90559D /* NSButton+WebCache.m in Sources */, - FB16503E903E5B60EE15B0DD4D8562D1 /* NSData+ImageContentType.m in Sources */, - 388BBDF2D1096563AA5C9266E06AF151 /* NSImage+Compatibility.m in Sources */, - 669426523C46BED22DB96FFC90045F60 /* SDAnimatedImage.m in Sources */, - 3DB9872080D437F2A851158F1F8F2693 /* SDAnimatedImagePlayer.m in Sources */, - F39F0FA7DEC7786370959E557810E16D /* SDAnimatedImageRep.m in Sources */, - 270ED905740AD9FEFB9A346AC527D53A /* SDAnimatedImageView.m in Sources */, - 6CEA6FC42B1EBFB8EB263DDD2295BA1B /* SDAnimatedImageView+WebCache.m in Sources */, - A17B88101B55AE2259598D30E3CDA92E /* SDAssociatedObject.m in Sources */, - B062397EBC3E007F3B3A05D7EEDE6ABD /* SDAsyncBlockOperation.m in Sources */, - 981F1BFE14D989096611F7DB1D782B97 /* SDDeviceHelper.m in Sources */, - D3DAA79DECE865BDCE076290194B4033 /* SDDiskCache.m in Sources */, - ED9F225882E966D67FD120629EE2B926 /* SDDisplayLink.m in Sources */, - E0535C22C58CFE61C7FC72412989EE7E /* SDFileAttributeHelper.m in Sources */, - 9F90CCC3FC0CF5D2BF452D59CDDF8A7B /* SDGraphicsImageRenderer.m in Sources */, - 977F8070B2734739DD77174D591DC065 /* SDImageAPNGCoder.m in Sources */, - 8D67E1E9F0E2F132D6A0D8EFB3C36974 /* SDImageAssetManager.m in Sources */, - 36AB9414D82F70F6517E1948301B56E6 /* SDImageAWebPCoder.m in Sources */, - 7867E2730114828625D52A47C43CCD2B /* SDImageCache.m in Sources */, - B734391A023E1397D7C4988865147809 /* SDImageCacheConfig.m in Sources */, - 012C3348FDB9BD307BC866EC0B5D23A3 /* SDImageCacheDefine.m in Sources */, - 2B799593BA9EF6DAF478B5551D7E7A6D /* SDImageCachesManager.m in Sources */, - 68E3BB3C139447BA9A82E53CF485909F /* SDImageCachesManagerOperation.m in Sources */, - 3ACCD6DF1F9C7989B0BB3482AD01D786 /* SDImageCoder.m in Sources */, - EA20E7451CE67E411DAE038C6EE49472 /* SDImageCoderHelper.m in Sources */, - E9466C49123B6DB38997B61FBE1A864C /* SDImageCodersManager.m in Sources */, - FA145D73018E7D2FB142938415DB42E5 /* SDImageFrame.m in Sources */, - 9CFBE2A3F8BFF4BBDB6DA37F9CE7C266 /* SDImageGIFCoder.m in Sources */, - 3EEB15302467C142726D815653A92E15 /* SDImageGraphics.m in Sources */, - 6B66FA28308AAD03CF48491A2156DBDE /* SDImageHEICCoder.m in Sources */, - 4EE30E33D02A0D59F317A9CFA0009B01 /* SDImageIOAnimatedCoder.m in Sources */, - C40F08C50B0B6DDB15E4F1D6F18213A5 /* SDImageIOCoder.m in Sources */, - C01355012AE3DC761464C352BCFD4197 /* SDImageLoader.m in Sources */, - B850BC342D7976173853AA223DF66FDF /* SDImageLoadersManager.m in Sources */, - 059DE39D2D7414DD88A410B406D3AD8F /* SDImageTransformer.m in Sources */, - ED3F8719AE0C4D9464C372D0CB5D2E14 /* SDInternalMacros.m in Sources */, - A608BF8A042013F0E8E790941B4D8866 /* SDMemoryCache.m in Sources */, - 1F601A8A4AE7C27226B893F8C4611E0E /* SDWeakProxy.m in Sources */, - 8A5D7CFB78278C7861D3061D212B189D /* SDWebImageCacheKeyFilter.m in Sources */, - A9A5CC537275881320975BDC2EE7F62C /* SDWebImageCacheSerializer.m in Sources */, - A358C72687DDFF484CAB4B0124CE34A8 /* SDWebImageCompat.m in Sources */, - F8A7F261739C12A8135E4A47FFA7772E /* SDWebImageDefine.m in Sources */, - F525906C5A016C296FF10CB143F624BD /* SDWebImageDownloader.m in Sources */, - 5664FEDF3A5F6FBD52B9B19B2EE7360C /* SDWebImageDownloaderConfig.m in Sources */, - 8CFB68D77E49914A0DD60B939BA767C0 /* SDWebImageDownloaderDecryptor.m in Sources */, - 8EF8D0C1BE201C03A65D66C92BAD9206 /* SDWebImageDownloaderOperation.m in Sources */, - 814AA2BB51B51E467391D717BF24FAE5 /* SDWebImageDownloaderRequestModifier.m in Sources */, - 8B753F9A4427257D3732F4AE2E2EDCCD /* SDWebImageDownloaderResponseModifier.m in Sources */, - F87C3F12FA754F2BF1068C663D2E8EDC /* SDWebImageError.m in Sources */, - 62645F034EC4123B63B4EF816CA13844 /* SDWebImageIndicator.m in Sources */, - AA6F9F6A4405BB9AFDDAAFF967296ACD /* SDWebImageManager.m in Sources */, - 4408CB04AFDA8CC998F4FD00910B4738 /* SDWebImageOperation.m in Sources */, - 5EFB9B488300A7396D40C60E2ABB5CEB /* SDWebImageOptionsProcessor.m in Sources */, - BB91F7BFE3AECA8494D5E2BFA3AE593E /* SDWebImagePrefetcher.m in Sources */, - 28E8453EBEAA5D3187A1FB686F807A07 /* SDWebImageTransition.m in Sources */, - 64C3041F08A2B870F8EE53C9DCF2A5AE /* UIButton+WebCache.m in Sources */, - 87E790F289BC43498505B6D68AD37C12 /* UIColor+SDHexString.m in Sources */, - E017B4EF323A0EBD732F33B9C92FBD0D /* UIImage+ExtendedCacheData.m in Sources */, - 4B541C41E90C260270E635F42EDC9B7F /* UIImage+ForceDecode.m in Sources */, - 6CBB8A0459051E23B564D2D128E4B219 /* UIImage+GIF.m in Sources */, - 5551815A96AC2006ED7008C9DD3F8F56 /* UIImage+MemoryCacheCost.m in Sources */, - D9B8B43830362EE0C77A55B6CE157ECA /* UIImage+Metadata.m in Sources */, - A5DCA31A4D36F66FFA278B81D8BEF027 /* UIImage+MultiFormat.m in Sources */, - C581FAFB2BE7E18B9FCA322BE28127A2 /* UIImage+Transform.m in Sources */, - AEE86A9326DC09055B5C28D98C50874A /* UIImageView+DDWebCache.m in Sources */, - A29CAE715EFFA6F90408C3B8345A1883 /* UIImageView+HighlightedWebCache.m in Sources */, - 5CFCDC35057A3E9FD4B24DD4CBB161AE /* UIImageView+WebCache.m in Sources */, - D6E51D328530E74EBF3DFBA6709DE9D0 /* UIView+WebCache.m in Sources */, - 9AE63A71DB55322FFBB6EF1D979282BE /* UIView+WebCacheOperation.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 9AF0B6EBA680D5DD019C9E42CB4C0F48 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 7F4D570B7BC5EC083C0CAC1C223C208F /* BlurLayer.swift in Sources */, - B178E385806A85AE79762280815013B1 /* CaptureQuality.swift in Sources */, - F509B1FBA17CE6C9D85434E17BA64618 /* CGContext+CGImage.swift in Sources */, - 54440A2A0E9BEB8BA02D62F516C3373D /* CGImage+Accelerate.swift in Sources */, - 9AF25DE3F59D7DFA42BD557BE616AEC8 /* DynamicBlurView.swift in Sources */, - 597D51FE18D7474F286ABA20D6B68E0C /* DynamicBlurView-dummy.m in Sources */, - FDE3C2C53226F29CAABE70CFFA208E4F /* TrackingMode.swift in Sources */, - 57DE5931B4D670D16C3FAC5726F7C5BF /* UIImage+Blur.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A867B0D35CB3B819A5071748F7742866 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 65393DFEDA642FBE76283D75C070E00B /* ColorUtil.swift in Sources */, - 70AED23C9E4B7C54A57E04BB493B1632 /* DDColorKit_Private-dummy.m in Sources */, - 168F32A6ABFCE1B9110D5C266D36988A /* UIColor+Hue.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C03E608B00E0D64F8CAFEB03DFD443F2 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 88E67755F51F1CA22343EAA1CFBD41E7 /* DDProgressHUD.swift in Sources */, - CAB5A868A61CB97E7501C0E73726E34B /* DDProgressHUDKit_Private-dummy.m in Sources */, - 463859BF5F9D7AAD1F9216EA25687599 /* MBProgressHUD.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C48E693650203B2A2E44527E2F7E3FD5 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C67841324248C9CA5635AE5BD7C3784C /* DDDate.swift in Sources */, - 5E228FEF4C8DAD374328D4560B129417 /* DDDateKit_Private-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C71FB1A4F5FE3800B11251B6AD5555CE /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1BA88BD6149449B0EB04E4E7F2822237 /* _RX.m in Sources */, - BB714B9D7C8AECD5513CD2452AD8687E /* _RXDelegateProxy.m in Sources */, - 0C833DB2294851CFBE098DF5BCEBADF3 /* _RXKVOObserver.m in Sources */, - 49B34E046084601F4A21F26D84FE832B /* _RXObjCRuntime.m in Sources */, - EC2B3804DBD7244270FE3CBB4076AE22 /* Bag.swift in Sources */, - 1A7ADD63C2F158E10825F3FA38EC3639 /* BehaviorRelay+Driver.swift in Sources */, - B502E9659BC94C3074C41F9294248930 /* ControlEvent.swift in Sources */, - 0605E2513549327B19854B3FED759B44 /* ControlEvent+Driver.swift in Sources */, - 44BDECE8B10C6DFB4BBFB8621A636FB9 /* ControlEvent+Signal.swift in Sources */, - E62A2816F9FFAF952C0E47C31B28D461 /* ControlProperty.swift in Sources */, - 9912583A0C3DCE5F8AC15A3FC34E6FE2 /* ControlProperty+Driver.swift in Sources */, - 29BDE26902A035FAEBCB2DC35DEE16F2 /* ControlTarget.swift in Sources */, - 0C7A81B76F81FFAA7AFD437D61831C77 /* DelegateProxy.swift in Sources */, - B2E3B006A6EBE8AAB7911F7F030B5568 /* DelegateProxyType.swift in Sources */, - 80474D488D0DE9EEB589E4B5F9EE1256 /* DispatchQueue+Extensions.swift in Sources */, - 36FEB6DD53D08DB2164BEE84F3653BE7 /* Driver.swift in Sources */, - 464C0BACBF2990B25DC1444413849288 /* Driver+Subscription.swift in Sources */, - 57B80CE67B76B0DFBD48E90021B939B5 /* Infallible+Bind.swift in Sources */, - 01C132EB3605024492C96C11F1094D0B /* InfiniteSequence.swift in Sources */, - 08CC4F2CF084EB4C21FD37F7D5C1728A /* ItemEvents.swift in Sources */, - 24488C0EC1CD3766AF3BA0C3361D2F05 /* KVORepresentable.swift in Sources */, - 8B1A402F74B6E4E6F42C395DDE64169C /* KVORepresentable+CoreGraphics.swift in Sources */, - E674B743DA97272AC8135AF21CF22F80 /* KVORepresentable+Swift.swift in Sources */, - 04C95DB4DD1BD71AAF5FD233628A6C6D /* NotificationCenter+Rx.swift in Sources */, - 22CE10056B2DC6A993C8E3CE966A45D4 /* NSButton+Rx.swift in Sources */, - 11CDFB1A43FE6D23D2F8463B142537CC /* NSControl+Rx.swift in Sources */, - B026AD1C1E94F5FC78A1CE5A96DDEE89 /* NSObject+Rx.swift in Sources */, - B27F69341AA274200D4EC565EA51B477 /* NSObject+Rx+KVORepresentable.swift in Sources */, - F19174B6F08BC6807F7168938A624447 /* NSObject+Rx+RawRepresentable.swift in Sources */, - DDF9F1CD51A0B6E3FAEEC690269482E6 /* NSSlider+Rx.swift in Sources */, - AE3814FADC3432DB8F6B88D2102EBB0B /* NSTextField+Rx.swift in Sources */, - B4DA45D21312C13C1BD200335595798D /* NSTextStorage+Rx.swift in Sources */, - 45F2115D4EC21D89A899E9D969CA1810 /* NSTextView+Rx.swift in Sources */, - B01AD0CF889816FA1985284F075CFBF7 /* NSView+Rx.swift in Sources */, - DE63FE12234373986128740BCD872713 /* Observable+Bind.swift in Sources */, - A2B52B66E0891E57CFA6C3750BF7DBC7 /* ObservableConvertibleType+Driver.swift in Sources */, - 793F19320DBE5EBACB9D67FA411F720A /* ObservableConvertibleType+SharedSequence.swift in Sources */, - FCED5EA34F470E1DE64CB9C632245922 /* ObservableConvertibleType+Signal.swift in Sources */, - 054C5D3D52D113CC9A7AC9F7115A26A4 /* Platform.Darwin.swift in Sources */, - 8B3145567FD389F30FCBB34C08F60CB0 /* Platform.Linux.swift in Sources */, - 308503CCD3E28A3911BCC7004887D711 /* PriorityQueue.swift in Sources */, - 878B6B1A4C24B3D46773E79E0294CC89 /* PublishRelay+Signal.swift in Sources */, - F8DDC9D4E7FFBE6F0911E2D7A4DC9F80 /* Queue.swift in Sources */, - 3808291BFCAA43687CA6EEEBA0A23A78 /* RecursiveLock.swift in Sources */, - 8ED0EA8B64CA7C4860DC6D8B565F4448 /* RxCocoa.swift in Sources */, - F8F722B95C950969CB8FCA2543BFE113 /* RxCocoa-dummy.m in Sources */, - 96351482FE93C85C20C75E992ACC4D3C /* RxCocoaObjCRuntimeError+Extensions.swift in Sources */, - 835173C7877CC2512FC25FC6EBBA0350 /* RxCollectionViewDataSourcePrefetchingProxy.swift in Sources */, - E034031C40FE734AB1A4ACF321EEB12D /* RxCollectionViewDataSourceProxy.swift in Sources */, - E1FDB8D42137D8BF8709EE551862079B /* RxCollectionViewDataSourceType.swift in Sources */, - 3EBC1473805AE2975380A13C46E9394E /* RxCollectionViewDelegateProxy.swift in Sources */, - B1CCDEB46FFBD5C857CEE2829F31D65F /* RxCollectionViewReactiveArrayDataSource.swift in Sources */, - CE53DDB87C864CE0B303DD4BB61087FD /* RxNavigationControllerDelegateProxy.swift in Sources */, - B2BB06514C0A38F894279DA3BFAAB03E /* RxPickerViewAdapter.swift in Sources */, - 7E77F7A02B348F2B136DC0548A0AADB1 /* RxPickerViewDataSourceProxy.swift in Sources */, - 226AE9954640E71AA69AC12F268C4B58 /* RxPickerViewDataSourceType.swift in Sources */, - 53136C9E69D0BA58AD108FF73345FB79 /* RxPickerViewDelegateProxy.swift in Sources */, - C70566B479FBFB82538A0E1C48E33C45 /* RxScrollViewDelegateProxy.swift in Sources */, - 73FFFD550E5D834616601E46F7468513 /* RxSearchBarDelegateProxy.swift in Sources */, - FFB9E82FF0E210BFEB30F4D221DD476C /* RxSearchControllerDelegateProxy.swift in Sources */, - 484940673D2B49420F4CA31D609A52F3 /* RxTabBarControllerDelegateProxy.swift in Sources */, - 80BC7581EDC7EF248D8E56A3AB986B53 /* RxTabBarDelegateProxy.swift in Sources */, - 1B957CE26D7722E306F95886B5EDC013 /* RxTableViewDataSourcePrefetchingProxy.swift in Sources */, - 9FA55209BBEC5446B1699EFEAA8AE99C /* RxTableViewDataSourceProxy.swift in Sources */, - 1BED5C40C873A14BD22FCC7A8BC11848 /* RxTableViewDataSourceType.swift in Sources */, - BF4B5199FBBD2138841B0FFE7D841114 /* RxTableViewDelegateProxy.swift in Sources */, - E60B45E5647579F76C24F8451C2EB8F7 /* RxTableViewReactiveArrayDataSource.swift in Sources */, - 5D3023A3FDDAEC5C7D316E3C88815548 /* RxTarget.swift in Sources */, - EE4F330BFC8B694E49B714C8A93CC916 /* RxTextStorageDelegateProxy.swift in Sources */, - 62643C2B0784DD59DA7827A6E98164E4 /* RxTextViewDelegateProxy.swift in Sources */, - 5BB847676A6F2EC8B5A779AEBC5EEBD8 /* RxWKNavigationDelegateProxy.swift in Sources */, - CD28B9F3F0DF1EAAFBCCFD3FDFF7E877 /* SchedulerType+SharedSequence.swift in Sources */, - BA11AE6276ED0BCA627940CF2AA4A82A /* SectionedViewDataSourceType.swift in Sources */, - 659075391B642E87AA542B9F3EC30173 /* SharedSequence.swift in Sources */, - 73E288FCEA27F5DEB683B074F96D0846 /* SharedSequence+Concurrency.swift in Sources */, - 9EE55E6E57DFF49D9CEB2493AD5B93A9 /* SharedSequence+Operators.swift in Sources */, - 564F74F04646D901439FA92F30873B9E /* SharedSequence+Operators+arity.swift in Sources */, - 5619747115BC45D8EF9E0AFBFB7754AC /* Signal.swift in Sources */, - 6F6324778DAEAC9A6B9C1E5EFEBBA492 /* Signal+Subscription.swift in Sources */, - D12A6518AD01C22CBBD148C8FC550D6D /* TextInput.swift in Sources */, - 64E217B3FE62EEA10B5EB992A7B2435D /* UIActivityIndicatorView+Rx.swift in Sources */, - 2EDAF39A638BF0797DAC0C75226CE335 /* UIApplication+Rx.swift in Sources */, - F610D4583B86C6599C47292F1D1AC91D /* UIBarButtonItem+Rx.swift in Sources */, - B963E078896CC9DF2C37C06A438908DA /* UIButton+Rx.swift in Sources */, - 263E6DC0FCCF45948585AE8D649ADCE4 /* UICollectionView+Rx.swift in Sources */, - 2B6E7E401FECF3BA6B6856DAFE81E233 /* UIControl+Rx.swift in Sources */, - C4BF6BFB52FEE82B04DB8EA2AE9E5BBA /* UIDatePicker+Rx.swift in Sources */, - 38B5C354CCEB18536DC8739368429DA9 /* UIGestureRecognizer+Rx.swift in Sources */, - E30D053236494B7F13FCF9171D8EF69A /* UINavigationController+Rx.swift in Sources */, - C76E436525BA78E49B7646D419140C86 /* UIPickerView+Rx.swift in Sources */, - 2C37F2D2D4CEAD643BD8D6212242A740 /* UIRefreshControl+Rx.swift in Sources */, - 81452427ADF1E98E642A1233E6B650B0 /* UIScrollView+Rx.swift in Sources */, - A5F8871912A1A3E8168E6DCF8EB4207D /* UISearchBar+Rx.swift in Sources */, - 17DA0483F109F5BA66CF5DD7366E36FF /* UISearchController+Rx.swift in Sources */, - E8F5C10BEE66E0A8E67F786EE75C4DE3 /* UISegmentedControl+Rx.swift in Sources */, - 02C5131798FF28B7D851F0DB13D67C00 /* UISlider+Rx.swift in Sources */, - B5F5635CB0E895EAC58232DADF5FC3AE /* UIStepper+Rx.swift in Sources */, - 70AC10609FB1A12D49AAF643F6DB6799 /* UISwitch+Rx.swift in Sources */, - C3CFA478FB802F5A6AD209E5E1B34F54 /* UITabBar+Rx.swift in Sources */, - D591717337E72C406E7C3F0BF9F4907B /* UITabBarController+Rx.swift in Sources */, - 11EAAA60DB73219EFC8B0CF1722D9C1D /* UITableView+Rx.swift in Sources */, - 9A41FC2ABBF645CC7F01120A6BDB0A24 /* UITextField+Rx.swift in Sources */, - 9CF1888AF79CD22EB414BFE758E5D36A /* UITextView+Rx.swift in Sources */, - F0133CE9DC3178B35F2AF1F29D535F7F /* URLSession+Rx.swift in Sources */, - 144B55A9628A2AD6B54F8BBACAB7BCFD /* WKWebView+Rx.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C7398DEDD141E4D243CD03337DD9CDE9 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5091E0944D55EF504E05485E71616DDA /* BehaviorRelay.swift in Sources */, - 4D2F14F1767762AB4AE766D7516197CE /* Observable+Bind.swift in Sources */, - 08CB54ABE0EC0CF4DEEFCA6B0E17D995 /* PublishRelay.swift in Sources */, - 3F56A52F3459E227CD0669EC4192F7C6 /* ReplayRelay.swift in Sources */, - 5041212B7ECFB8678390AC149F12B0A4 /* RxRelay-dummy.m in Sources */, - A426B3CC412353B4B3655644EF00F78D /* Utils.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CAB25926C077F5422787F0F64A3A79ED /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D1F58981CC9B866CA76BD812F0DF5E18 /* BRAddressModel.m in Sources */, - 1C33277D17F042B6BADC5BEFD04DC3E9 /* BRAddressPickerView.m in Sources */, - CFCCC0B66A4858FC59896A0D0B4111B4 /* BRBaseView.m in Sources */, - D10A97575FC17A740F4AD23FC87961E3 /* BRDatePickerView.m in Sources */, - 6BCEC0DE81E072E922CE82BF2C10D0D1 /* BRDatePickerView+BR.m in Sources */, - 17C901067A0CC336075ABAC7A279589B /* BRPickerStyle.m in Sources */, - 19B69267A13B522D47259CF72C882725 /* BRPickerView-dummy.m in Sources */, - 40F0EC1B6B9648E6668E369AB598A876 /* BRResultModel.m in Sources */, - A97E69232EB284E6EF3127992F66C58D /* BRStringPickerView.m in Sources */, - DB534E0B9BCE28F670003044F0242932 /* NSBundle+BRPickerView.m in Sources */, - 1C0B22AA4E83F0C0C7E55FE842D3C1F9 /* NSDate+BRPickerView.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CD374D0251825084FB7ADA905CBA1579 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CCE513817FE3AD9CEA59455CD1996249 /* DDFullScreenTransition.swift in Sources */, - 88AB044F1DB2804B0480A01527BC6B74 /* DDUIButton.swift in Sources */, - ADB08B0E617EA7DE1CC16BD69FB38004 /* DDUICollectionView.swift in Sources */, - FE465B7346138FE58C1A96F9D10FC0D1 /* DDUICollectionViewCell.swift in Sources */, - 436ED0BEB10283F8E64348F38B2D09EC /* DDUIGestureRecognizer.swift in Sources */, - C1996DFE0601C837A2390FDFF5918A2C /* DDUIImage.swift in Sources */, - C4A5990975751D34280AF05CC36E2268 /* DDUIImageView.swift in Sources */, - AA6502FA7B93298C6DCB3F45466D93E2 /* DDUIKit-dummy.m in Sources */, - 7667DFBCCDA76EA0209A108FB3E9E4A9 /* DDUILabel.swift in Sources */, - 0D62E2BC891D0F73407FDBA5604FF465 /* DDUINavigationBar.swift in Sources */, - 64E2F5A967CEFA0D86EB3C9D18B02248 /* DDUINavigationController.swift in Sources */, - AC9D194628C4196609B1B98ABEF5A3B4 /* DDUIPanGestureRecognizer.swift in Sources */, - A555775BE8D4C3E51FB96A3A6875CD68 /* DDUIScrollView.swift in Sources */, - B529241B855030B376028D2F3989DBCB /* DDUISwitch.swift in Sources */, - C8C3D679667C928DD4714C80CFF78FB7 /* DDUITabBarController.swift in Sources */, - 7C2788B48E430BB0EE2223A5544A32F7 /* DDUITableView.swift in Sources */, - CAC364FF1EC3CF4CC7DE1AF5A48F6748 /* DDUITableViewCell.swift in Sources */, - 941DF4F9B9686E518F574A14A643D6F0 /* DDUITextField.swift in Sources */, - 020E854D5611C1FD2A92FD76E7B50E1D /* DDUITextView.swift in Sources */, - 43E005872AB5B98625C1BCB4453ED0C0 /* DDUIView.swift in Sources */, - 545F35FD477093FAC4E65A6357113C53 /* DDUIViewController.swift in Sources */, - 166CA595A0A31AC822DB1A41527ACFB7 /* UIApplication.swift in Sources */, - FEAC0E2206AA52258A995502BF0AA648 /* UIButton.swift in Sources */, - 97005485BCEC1979C768300CC520862C /* UICollectionView.swift in Sources */, - 430B8F18E9BEA750A8C84C4DC1BD9A99 /* UICollectionViewCell.swift in Sources */, - 37115542AB588CD7E9A715EFCBD931B2 /* UIColor.swift in Sources */, - 05257DE99C24C0AFA84427AA91B7B300 /* UIFont.swift in Sources */, - 423150CAA90F1925435371DAD5C7ECBC /* UIGestureRecognizer.swift in Sources */, - C71DB5513E761FCDA99D29CCE8EB2125 /* UIImage.swift in Sources */, - 3845205DF5D46F4839DB38A7F6AB90B4 /* UIImageView.swift in Sources */, - 5BE82F6C3C7AC29DE599B84D36577663 /* UILabel.swift in Sources */, - 8077ADA76E274A36EC5B42B92FC0FAB6 /* UINavigationBar.swift in Sources */, - 2A3C45CBC3104636FF2ED8A1B3D2CAF7 /* UINavigationController.swift in Sources */, - B46D6E7861A1028BCE0FFC9AA26C9D12 /* UIResponder.swift in Sources */, - 754A0CBE952892135855191BC6265397 /* UIScrollView.swift in Sources */, - A414F98B05BC44021847376B2C922897 /* UISwitch.swift in Sources */, - 98ABA13FB9B5A510025F67BB96656272 /* UITabBarController.swift in Sources */, - F1C01B0235CA4C0D6DDA075BFAF15BEB /* UITableView.swift in Sources */, - 6D2824486BCF64BF840FC1C436C1DA04 /* UITableViewCell.swift in Sources */, - 4B49CE5C1DC026887F1AE1892639AB4B /* UITextField.swift in Sources */, - FA10EFE327CA4876CC065BB2244EB1B3 /* UITextView.swift in Sources */, - 85A7D659806F859D9874C49E30708AAC /* UIView.swift in Sources */, - 5B9A7DA0B8A1CD1866EAD649573B956B /* UIViewController.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DA4C868A4F075D8EFE7BB9C49A761008 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5943D1EA324ADEC89AA918C05AAF5FC2 /* ApplicationInfo.swift in Sources */, - 58FBC07F1AB57EE09E9E2283BAEC5C71 /* DDFileManager.swift in Sources */, - 76FFD8BBEBFDA70717385A5C74DFDEA1 /* DDUtilsSwiftKit_Private-dummy.m in Sources */, - 23E7FD08C3DF07540AD2118EA057AECA /* DeviceInfo.swift in Sources */, - 516E3095B8774B6FA0FC6C672ABE4B57 /* UrlLinks.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DC30882199AE9E371D14D1598CFD5C80 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 466076161BAFA79E1EB9C034956DB0CB /* EKAccessoryNoteMessageView.swift in Sources */, - CFA4B5FE834BF6F5947C854ADC9C5A57 /* EKAlertMessage.swift in Sources */, - 57096ADF117830FDA4E842AEFAD07BDD /* EKAlertMessageView.swift in Sources */, - A8A0C288519E463DE5E9B307FAE797F3 /* EKAttributes.swift in Sources */, - 66A4D5DEBBA734D31FC0052BC438A63C /* EKAttributes+Animation.swift in Sources */, - 721A97ACFEC77E36D1023E41BB0AE1AC /* EKAttributes+BackgroundStyle.swift in Sources */, - 91B718E97E5B0E6C8E089096AC2DF4FD /* EKAttributes+DisplayMode.swift in Sources */, - D4DE36B575B65B54091CB7179DDE1242 /* EKAttributes+Duration.swift in Sources */, - D1381434AA9A73F22A5686775B9BDD03 /* EKAttributes+FrameStyle.swift in Sources */, - 27043FD4E15DBD03FD933A60109C3009 /* EKAttributes+HapticFeedback.swift in Sources */, - D02E869FBC7503DA41EA8292A40085F8 /* EKAttributes+LifecycleActions.swift in Sources */, - D87C8DA2C35F94CD5157A6F37F9A9728 /* EKAttributes+PopBehavior.swift in Sources */, - 639859131F5B6B971A6D5F13570E2E5D /* EKAttributes+Position.swift in Sources */, - E8A2CDF5B1D642F2C3225619514140C4 /* EKAttributes+PositionConstraints.swift in Sources */, - 0B4577864274CE4EB338A238A241AA0C /* EKAttributes+Precedence.swift in Sources */, - FB543E6A5F8C2EC92FF45630C6D5F49E /* EKAttributes+Presets.swift in Sources */, - E2D3345435E9F597C1445F09F5BD5FF4 /* EKAttributes+Scroll.swift in Sources */, - 0D444C6AD7BA8B3307579F9FCA9F43FB /* EKAttributes+Shadow.swift in Sources */, - 21FADAA36F19612801A23CD9FC35BA98 /* EKAttributes+StatusBar.swift in Sources */, - D30295702271BA26222EC0E8D2829E63 /* EKAttributes+UserInteraction.swift in Sources */, - 72B0A8793C1F38AA19A0CD865BEE8BE7 /* EKAttributes+Validations.swift in Sources */, - 29ADDEB7070613224B9510A61E41A745 /* EKAttributes+WindowLevel.swift in Sources */, - 94B52F9D43DC46D45062BB39E53E9DE1 /* EKBackgroundView.swift in Sources */, - BE1A80FF8E7EBE33844C18B9DE10DF9F /* EKButtonBarView.swift in Sources */, - A6D371F7B8F0AE9A55EE402E33583504 /* EKButtonView.swift in Sources */, - F9E6C48FEF11BDA55B335E1060721D74 /* EKColor.swift in Sources */, - E0528E490DB59F03F3D21D2509CC36E9 /* EKContentView.swift in Sources */, - E2EF5387D71F2D5DEC1F9C0FE6026C1A /* EKEntryView.swift in Sources */, - 6D8A1EAC97E1ABC816801F06E11AEF2A /* EKFormMessageView.swift in Sources */, - 5DC4E3C2A738F07C2943D5C49C79BDA4 /* EKImageNoteMessageView.swift in Sources */, - CB0DCDB203D1D4E3DBCF2931711D6A7C /* EKMessageContentView.swift in Sources */, - 0BCF8CB00A9A52600E24370C7144693F /* EKNoteMessageView.swift in Sources */, - A13B4CC2584A03BF7414FE90F04C487D /* EKNotificationMessage.swift in Sources */, - 303B93CF0EE553490F73F76D9C534C44 /* EKNotificationMessageView.swift in Sources */, - 52E7EA351B5EA7DE9BD235418C0484E4 /* EKPopUpMessage.swift in Sources */, - A1059E3A9E938EE8F540D5639AB4B4E5 /* EKPopUpMessageView.swift in Sources */, - 1CD029D4F48324168F0220D8213348D3 /* EKProcessingNoteMessageView.swift in Sources */, - B12803F0E38CFAE8770FE476242895C3 /* EKProperty.swift in Sources */, - 0328E2D27FBE6EE399FC37D913E2290F /* EKRatingMessage.swift in Sources */, - 35ED1671F8FD3A5108E1B917130980EE /* EKRatingMessageView.swift in Sources */, - 6C850BF5602E027A876A27784A160519 /* EKRatingSymbolsContainerView.swift in Sources */, - 3C11CB98AFEFBE7A201DA71292528A69 /* EKRatingSymbolView.swift in Sources */, - 417F88073D2B0203BC70C580CA9AACFF /* EKRootViewController.swift in Sources */, - C9FF0064F6C55CD4E49ED41B2EA17DE8 /* EKSimpleMessage.swift in Sources */, - 18EBCC2A133B26DF8B5D5754492F3214 /* EKSimpleMessageView.swift in Sources */, - 82F6C49CD5442529B117D4B77ECD8518 /* EKStyleView.swift in Sources */, - 6210A5E8C94D9610DD9326F3F053E236 /* EKTextField.swift in Sources */, - D1CA27FA62FDFD654437AFE802F0FDC1 /* EKWindow.swift in Sources */, - DA39F13925A217C94F8582009262EAA2 /* EKWindowProvider.swift in Sources */, - 357C743823312159B0278D1810A8A481 /* EKWrapperView.swift in Sources */, - 9F26F0EB6575EEC06D48252EC38DDC46 /* EKXStatusBarMessageView.swift in Sources */, - 9E13BAA5897DBE84C6842BE86EED1CFC /* EntryAppearanceDescriptor.swift in Sources */, - 84CBB8B38762FD16B0BF7B4BA778228E /* EntryCachingHeuristic.swift in Sources */, - 4482C25FB41CA449FB31D498FBC4C50C /* GradientView.swift in Sources */, - 0E84EA21B0858EDC04A53458A7F8DBDD /* HapticFeedbackGenerator.swift in Sources */, - 2CC3AD3D3398B56CF9B85CC4A7F9F439 /* QLCompatibility.swift in Sources */, - 23070072A95EC58547F751658BD10FB8 /* QLUtils.swift in Sources */, - 69628B06AF6EDF37ABECD410CCFF53D7 /* SwiftEntryKit.swift in Sources */, - 714B1CA2AD44049A52267BE368CD4C8E /* SwiftEntryKit-dummy.m in Sources */, - 9D43333662E9A614D8F63052D7F1ABA7 /* UIApplication+EKAppearance.swift in Sources */, - FA398422E4E9153C85204F33651B6414 /* UIColor+Utils.swift in Sources */, - F3128567652CC62E62B1B8DBEEC5A304 /* UIEdgeInsets+Utils.swift in Sources */, - B6062CB645AB7C112A4963605E59E4AE /* UIRectCorner+Short.swift in Sources */, - EBCEE8F5579114E5F617B63B87CF4B48 /* UIView+QLContentWrap.swift in Sources */, - 8A64ED4C758DC20F9F638F956789182F /* UIView+QuickLayout.swift in Sources */, - 60EF2DF520F1164BB293FB035B4F965E /* UIView+Responder.swift in Sources */, - 23EFAA45BE23C0F05AE3A5A892808639 /* UIView+Shadow.swift in Sources */, - DD0D82EA0192E44DA541CEC3B4A673CA /* UIView+Utils.swift in Sources */, - D9DFB73AB4BE6CB973F6F316B2A6A765 /* UIViewArray+QuickLayout.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E8D9525ADEA0CD4A8CEB0BBD8B14DC97 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 4A8438BA1927768B5ABF3C58D9B8E25C /* DDToastKit_Private-dummy.m in Sources */, - 599A18B882F08DE626F2B4BC6FF8388C /* SwiftToast.swift in Sources */, - 4223E964C57E9A4588FA614FE769EBB1 /* Toast.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - EF699BB99C544AE21CE18457306B5064 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F0C06941B1B124C19A1B942250436C58 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8F7C09C252C91A4C49C70B874D9AD4EF /* Pods-OrderSchedulingNotificationService-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F232AD196DD62CDB2A3B404892E213CD /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 2E3D2707E7E60BE010D3246CD02D6584 /* ESTabBar.swift in Sources */, - 0A762FAE78A91ABC899CB431FE10B9FD /* ESTabBarController.swift in Sources */, - 441793180F0D4EFB3B71D6117EDFA872 /* ESTabBarController-swift-dummy.m in Sources */, - 0591B0EE71308251E0E53C6D3EDB3D4C /* ESTabBarItem.swift in Sources */, - A928D17689392DAAC600620B1020505C /* ESTabBarItemBadgeView.swift in Sources */, - FD0574A25469F0713B34ED1B682755F2 /* ESTabBarItemContainer.swift in Sources */, - 379EF14788368688008C6046091CBA72 /* ESTabBarItemContentView.swift in Sources */, - BB53D3B70456942057B1D13A5B59CA10 /* ESTabBarItemMoreContentView.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F623158EE9B44DBBE9E3438E4A6F4A7E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 218A594F4B538DBFF56BDDBFA62906B3 /* DDBaseAttributedString.m in Sources */, - 2508C13A6D783495CAA9FEF848ED3408 /* DDBaseButton.m in Sources */, - 53A8449A2AB1430B1001ED45223DCDCA /* DDBaseCollectionView.m in Sources */, - 949E8D2BB740EADFE39A5D66DF0612E8 /* DDBaseCollectionViewCell.m in Sources */, - 69C303549B8C8DC6586AC4D570FAD12C /* DDBaseImage.m in Sources */, - 1874DC3D934C7225FFDF0965A4EDC46E /* DDBaseImageView.m in Sources */, - A6D743CD31F8BE6B743622F1EE837BE1 /* DDBaseLabel.m in Sources */, - F4BA1100C7409E860A413BC0F2B3AEA4 /* DDBaseModel.m in Sources */, - 1DF58F80AC0A6C167AFCF76ABE39A9D2 /* DDBaseMutableAttributedString.m in Sources */, - 5B61B135DCE322C883A69872A356F596 /* DDBaseNavigationController.m in Sources */, - 512135578BA3F99913265843C0638642 /* DDBaseScrollView.m in Sources */, - 365DE3259C4106D8E3AC066DAEEB4720 /* DDBaseSwitch.m in Sources */, - 6DF8E7C3E612645CB0F3523DAC8E1F33 /* DDBaseTabBarController.m in Sources */, - CE4C9BD43001835DFA0CCA47681C8ACB /* DDBaseTableView.m in Sources */, - 6FA29C0A343CD009CAD5FBB50810D9D4 /* DDBaseTableViewCell.m in Sources */, - 33E6C702602A0ABE4B9FF00731487E49 /* DDBaseTextField.m in Sources */, - 44C35B8EF128278FA7F9F22C82379DEC /* DDBaseTextView.m in Sources */, - 63A77C21EFD53EA8A7E3B79ABF59E2F7 /* DDBaseView.m in Sources */, - 6526EAD8B470F52119D2C453861C687D /* DDBaseViewController.m in Sources */, - 90C1CA69717100719BCA2413895F4E30 /* DDBaseViewModel.m in Sources */, - F3297C24B7F6D6AA6679633470AFD387 /* DDBasicControlsKit_Private-dummy.m in Sources */, - 7AB8E1F03D7085D0F1CF9CA55F17E9FB /* DDNavigationControllerDelegateReceiver.m in Sources */, - B912045CC6351F6B403B2BA16E0FA3CE /* DDViewControllerAnimatedTransition.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FEADC5AA31171CC91CC5DAEC030F2B0E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 32D2FA4F8AC6EBE83DDF786AF4629B28 /* DDAF.swift in Sources */, - 559C39AC9FE303F8E073EC5C205F3C58 /* DDAlamofire.swift in Sources */, - 97B4A15E0218313B8CE3CDB2D3CC73D2 /* DDNetworkingOfAlamofireKit_Private-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FF6B6EC1C56BA42D2BE5F20501D75E31 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 55736FD6531A0F1C3B1FDB92244D02EF /* Array+ZLPhotoBrowser.swift in Sources */, - 224D5F6BA39BADAD19041AF6AD880C80 /* Bool+ZLPhotoBrowser.swift in Sources */, - B40E0790D6C9B7387B5FAB251E16B1C0 /* Bundle+ZLPhotoBrowser.swift in Sources */, - 5BE1573FD25A25AF030B0BF733677457 /* Cell+ZLPhotoBrowser.swift in Sources */, - D269044D982531C2EABA7BD3F34101D2 /* CGFloat+ZLPhotoBrowser.swift in Sources */, - 1A370F104A326B06BB5A7A623DC96920 /* NSError+ZLPhotoBrowser.swift in Sources */, - 67F2E90F42B5116F653D1FCC9C2E9D4A /* PHAsset+ZLPhotoBrowser.swift in Sources */, - C0A16AD03D4F121B5F6D22E51F6FD69A /* String+ZLPhotoBrowser.swift in Sources */, - B929603A11A07A494CBE9E734195270E /* UIColor+ZLPhotoBrowser.swift in Sources */, - 6B553F2B3704D9BD7FF7FCE04E403CC1 /* UIFont+ZLPhotoBrowser.swift in Sources */, - 7B45550C7795D7B29E6E558F00864D1E /* UIImage+ZLPhotoBrowser.swift in Sources */, - CEAF6058D42F63FA245DAD43FE4981CD /* UIView+ZLPhotoBrowser.swift in Sources */, - 4433D02EE9231F24E94E5FD44492907C /* UIViewController+ZLPhotoBrowser.swift in Sources */, - C2B53EB045512989EDDDE03B3592E068 /* ZLAddPhotoCell.swift in Sources */, - D86F0D26E943BB73BBB29356FD203D18 /* ZLAdjustSlider.swift in Sources */, - D41706C216134FC77605103354F07C42 /* ZLAlbumListCell.swift in Sources */, - C317B43DB6D2482017A763892A53203F /* ZLAlbumListController.swift in Sources */, - 254DB7DF69C8F0DA8BAC684099B27944 /* ZLAlbumListModel.swift in Sources */, - EBD415C26D6A34A0BD3DC50D43856960 /* ZLAnimationUtils.swift in Sources */, - B0470BF38DA7AECBDEC223D60C2A05D4 /* ZLBaseStickerView.swift in Sources */, - B41FD6E22B5A75FC2EAA129FF1B54B82 /* ZLCameraCell.swift in Sources */, - 29C7B5B61EDB9B6010093123C95146D0 /* ZLCameraConfiguration.swift in Sources */, - 4AEEFC52D4F0E173563EF56901855257 /* ZLClipImageDismissAnimatedTransition.swift in Sources */, - 7E89E3B38E4ACBC2954D330AB4FF0293 /* ZLClipImageViewController.swift in Sources */, - 9517AFD055FCAC61888F63B46B1012CB /* ZLCollectionViewFlowLayout.swift in Sources */, - DEA9C3D6CE995A50A590F7844D364C53 /* ZLCustomAlertProtocol.swift in Sources */, - 453C775A0F9ACCD310681A1C49D051AF /* ZLCustomCamera.swift in Sources */, - 33206CE1C59D7666BDDE9E1465A610EE /* ZLEditImageConfiguration.swift in Sources */, - EB34415A0817B6F0EA97C89773A6FB99 /* ZLEditImageViewController.swift in Sources */, - 14006084B55ECBF580E396E89C097D64 /* ZLEditToolCells.swift in Sources */, - 04C0033DE2A1FD3EB256E41523A8F0E0 /* ZLEditVideoViewController.swift in Sources */, - C313E645865798661616F4F3407D8BD1 /* ZLEmbedAlbumListView.swift in Sources */, - AFA87EA35BBF8E4F0A2D41954069DD9C /* ZLEnlargeButton.swift in Sources */, - 81A3D9DB1BECA7DD9A94142824783DD8 /* ZLFetchImageOperation.swift in Sources */, - 055FD13CE509E194412FE8E424649053 /* ZLFilter.swift in Sources */, - 54E7ACA4C129B78296C039BFE5E61BC6 /* ZLGeneralDefine.swift in Sources */, - AB8707AC05E95D10D125F69C0F1F84CC /* ZLImageNavController.swift in Sources */, - C13CCD0F2979956BF520659BC2826A70 /* ZLImagePreviewController.swift in Sources */, - AE310A252E96F1A89125262C9293FB10 /* ZLImageStickerView.swift in Sources */, - 523D1B0BB7DE56448B35661435267EC0 /* ZLInputTextViewController.swift in Sources */, - 145BBF6F393882C968D5A99AC80004E1 /* ZLLanguageDefine.swift in Sources */, - 6F1EC7D7C6057783745CD6C5C41EE5EF /* ZLPhotoBrowser.swift in Sources */, - 9AF82E3FE6B0FCA2D289149812D57304 /* ZLPhotoBrowser-dummy.m in Sources */, - 2776B3355D535E5A68E18C4C77B2D595 /* ZLPhotoConfiguration.swift in Sources */, - 4723320357D0EA504D83E69BBCF159D6 /* ZLPhotoConfiguration+Chaining.swift in Sources */, - AE2421B86D481DB24462BBB65580903A /* ZLPhotoManager.swift in Sources */, - 06A20EF6BA10D63870C3AB7C0E1BA53E /* ZLPhotoModel.swift in Sources */, - A91F69373347CD458D89B84B084E0640 /* ZLPhotoPreviewAnimatedTransition.swift in Sources */, - 4EEB05C55B66338EEC5261DDC2B1A341 /* ZLPhotoPreviewCell.swift in Sources */, - DC2AD54F59773138F1461A45C2F19097 /* ZLPhotoPreviewController.swift in Sources */, - E94B3EE66EBD1003468410DFEEBCA688 /* ZLPhotoPreviewPopInteractiveTransition.swift in Sources */, - 7ABFC8DDB94ABE4C0687BC981E98A2BE /* ZLPhotoPreviewSheet.swift in Sources */, - 4A73E66A0348DE3EB7FACE0F8FD7DA61 /* ZLPhotoUIConfiguration.swift in Sources */, - E6AAEB8C90F798D2176874B496FAED5B /* ZLPhotoUIConfiguration+Chaining.swift in Sources */, - 6819E936EDDC5F64E03965DDA16F6EA2 /* ZLProgressHUD.swift in Sources */, - ABA3BE298F1B209B9A4F53D73F8EFAE7 /* ZLProgressView.swift in Sources */, - 0CF0A87B87DF71F838545FC4B0161A8B /* ZLResultModel.swift in Sources */, - 999B33DC38983D04AD690B4599F3C316 /* ZLTextStickerView.swift in Sources */, - 93C25343A940D20BD21AE6C1EF582189 /* ZLThumbnailPhotoCell.swift in Sources */, - 6405B88F00699FB27D556521FA391E9B /* ZLThumbnailViewController.swift in Sources */, - 87E876627F3BB158FD39966792B76B65 /* ZLVideoManager.swift in Sources */, - 86997C2E83106153831376DF4CB88084 /* ZLWeakProxy.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 00BE1B52BCDF3B07C04ABAFB2706E95B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "DDBasicControlsKit_Private-DDBaseViewController"; - target = 5C23965029860967865B3429B5E29092 /* DDBasicControlsKit_Private-DDBaseViewController */; - targetProxy = 0EC3896B72CE8C92278DC6E34610CE21 /* PBXContainerItemProxy */; - }; - 02803C3757678EAF22D1069C64D962CC /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = JPushExtension; - target = 609276B985CD7549B9F1DEE4969208FF /* JPushExtension */; - targetProxy = 3E46E5FF0CEF961EF0C721AA5AE34975 /* PBXContainerItemProxy */; - }; - 02D2F40852DA8789195EAF1FABEBC42C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "AMapFoundation-NO-IDFA"; - target = 9B182CB4E1716E9070813D3C59736001 /* AMapFoundation-NO-IDFA */; - targetProxy = 31CC52496C85EEC66773A037CA5B67BA /* PBXContainerItemProxy */; - }; - 032771D9E38FF66B85B79E942B5E6207 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Kingfisher; - target = E8022D22FAA6690B5E1C379C1BCE1491 /* Kingfisher */; - targetProxy = 49660C747E2F03F8ACBB39C8798ED7F2 /* PBXContainerItemProxy */; - }; - 0479EE13ED8EAD5FC9CE6E6372F95480 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RxCocoa; - target = 7AD0C6DCDC9CEC8A3C7C10C7FEE07BE6 /* RxCocoa */; - targetProxy = 54CDA1925E10C4D34D565FBB3E9B1084 /* PBXContainerItemProxy */; - }; - 06AA4982B023C13FC5B22DFCD0233A0B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "AMapTrack-NO-IDFA"; - target = 2160840D78FCB958CABE1B88300E38C5 /* AMapTrack-NO-IDFA */; - targetProxy = A296C60700A54467A658868A3A54CAF5 /* PBXContainerItemProxy */; - }; - 0B01DBA2C706F80A84E7DE5172C0CB0D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DDToastKit_Private; - target = CFF5B7CDF57A32781D2AD4CC98E95B29 /* DDToastKit_Private */; - targetProxy = 9F17F4A3B4E90A8F9B2E1B0F3AD0C933 /* PBXContainerItemProxy */; - }; - 0B98C1313BE8E6DE64E7D3FE652305B0 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DDCategoryKit_Private; - target = 7B8412F08BD27981DB53CE2C25C19F0A /* DDCategoryKit_Private */; - targetProxy = 7994FDB79BC9D7D7E1CB5396CBC02B6B /* PBXContainerItemProxy */; - }; - 0C4651853F7ACA61259E672A47ED3FD5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "AMapNavi-NO-IDFA"; - target = E94C558142469C11984D67CA883BAB1F /* AMapNavi-NO-IDFA */; - targetProxy = 481DD8337D748C4A121F301AB894ED41 /* PBXContainerItemProxy */; - }; - 100B5545B2F4EC973C408D054C4EBB94 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DDControlsKit_Private; - target = 035D1842293C4AA08F442FFD899F7F28 /* DDControlsKit_Private */; - targetProxy = 13C0CE74B101F36A685E250219DBAA18 /* PBXContainerItemProxy */; - }; - 1633022682C2123873924B93EF3C9677 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DDBasicControlsKit_Private; - target = 087B100C5691B6A3C04A45198E6C32F6 /* DDBasicControlsKit_Private */; - targetProxy = 9C3C9E1187AA06D8EAA10CB25E1608F0 /* PBXContainerItemProxy */; - }; - 22820E2C3391E9F34078B29268236B8A /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DDWebImageKit_Private; - target = 477926D6FB1DCEFB352517A19636405D /* DDWebImageKit_Private */; - targetProxy = 1CB056DA3F24B8298DF5559472941389 /* PBXContainerItemProxy */; - }; - 267659A84A6C245A671BABFC81C7A3B8 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DDCategoryKit_Private; - target = 7B8412F08BD27981DB53CE2C25C19F0A /* DDCategoryKit_Private */; - targetProxy = 25724F992F71DE1CB48ADE2985606D56 /* PBXContainerItemProxy */; - }; - 298B8DE21B9024A7AB10C71557B92F54 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RxRelay; - target = 4622BFEF3DC16E8BD15EEFC30D4D0084 /* RxRelay */; - targetProxy = 83C181CBE36F7CE08E9AD07588BF8534 /* PBXContainerItemProxy */; - }; - 2B9BCC77F7969EDC70DBC5DC87A4E3ED /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DDNetworkingOfAlamofireKit_Private; - target = B68A4B40517CF9B14050FA0A4A618B04 /* DDNetworkingOfAlamofireKit_Private */; - targetProxy = 64980B2020812EAC95EA2979D9E7E089 /* PBXContainerItemProxy */; - }; - 2C8D6AF21492605D95168E63FFDCC9C5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RxSwift; - target = EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */; - targetProxy = 25F820E47FAB12365671C2CB6B6ACAC2 /* PBXContainerItemProxy */; - }; - 2CB82F76A6B07C8437ED99F44F3E0E9C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DDUtilsSwiftKit_Private; - target = A8B712B20F60AB02004557B884A28FD4 /* DDUtilsSwiftKit_Private */; - targetProxy = AC61E5775AFAB814996813E79ADDB2FE /* PBXContainerItemProxy */; - }; - 2FD31F3B45C5AD64D168F177A92497CD /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "AMapNavi-NO-IDFA"; - target = E94C558142469C11984D67CA883BAB1F /* AMapNavi-NO-IDFA */; - targetProxy = 85F6EB0AE08560BB4614F067AEBD6C43 /* PBXContainerItemProxy */; - }; - 34FB2A650CB5C58578BDC616EC9E7976 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = JCore; - target = D504B99928659EA67A1C3A9E981EB8FF /* JCore */; - targetProxy = 2F7963BA2821D47B2524AA761FC8A3B4 /* PBXContainerItemProxy */; - }; - 36743C5D1FAE2BA997BC87FAC5ECCC3D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DynamicBlurView; - target = 7D914FA2F03C860D5133BA2DB87C594A /* DynamicBlurView */; - targetProxy = 8111465CA375E244E6BA90C72C0A8922 /* PBXContainerItemProxy */; - }; - 37969071B01C6956036513BBF110DD7E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "AMapFoundation-NO-IDFA"; - target = 9B182CB4E1716E9070813D3C59736001 /* AMapFoundation-NO-IDFA */; - targetProxy = 8FE3BECC74D7005D63AC1DA73C715C5F /* PBXContainerItemProxy */; - }; - 3BA28A5F4E3FBC505F06C745E714AD41 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "AMapFoundation-NO-IDFA"; - target = 9B182CB4E1716E9070813D3C59736001 /* AMapFoundation-NO-IDFA */; - targetProxy = 254CC460E1A29B4726C334B61DEC6345 /* PBXContainerItemProxy */; - }; - 4E94094043D3E891830F5888836E02AB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Bugly; - target = 4A68CFD979D413A619DF631BB121D98F /* Bugly */; - targetProxy = 7B68E74D31D52EB5FF6737DBB9848A71 /* PBXContainerItemProxy */; - }; - 504F13E95D17FFD5A06FD7DD3A453C64 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = JXCategoryView; - target = 8BEAFAA726C1965864B79B4B441AA513 /* JXCategoryView */; - targetProxy = C8540454A0640B646242911CAC624D55 /* PBXContainerItemProxy */; - }; - 51FC9CED5314A608DEEAE3883DAAA4B8 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SnapKit; - target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; - targetProxy = 88D10CF8B99829E420B9D7841B55C98D /* PBXContainerItemProxy */; - }; - 556A389E0764D06E42D554E5A9BAC3CC /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = JCore; - target = D504B99928659EA67A1C3A9E981EB8FF /* JCore */; - targetProxy = 255E065DB1160EF48571504202BC54BF /* PBXContainerItemProxy */; - }; - 586FF5165701F30940C63C39BB71090D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RxSwift; - target = EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */; - targetProxy = D9EE7BBF2E384EFC149ECAF5FD023672 /* PBXContainerItemProxy */; - }; - 58F6689B23489BFE342DA5E168741DEE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Kingfisher; - target = E8022D22FAA6690B5E1C379C1BCE1491 /* Kingfisher */; - targetProxy = 182A0D62DDA3C08A86C183086801D616 /* PBXContainerItemProxy */; - }; - 5B2DC9A60601A7A525093CD9CDDD3919 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Alamofire; - target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; - targetProxy = 151817BE71EECD9428B86D5C24DD7895 /* PBXContainerItemProxy */; - }; - 5C7239C45D8D9E2A9FA3BBD86D4179E2 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DDPersistenceKit_Private; - target = F8AE53003F66B148774CFC6EBDEB9425 /* DDPersistenceKit_Private */; - targetProxy = 262533A6221342A804CA9120F28E680D /* PBXContainerItemProxy */; - }; - 688CAE5EFFC5BA054808DB3DD53A0A40 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SwiftEntryKit; - target = FEA6FF0588A91CCD972EDCD698B85647 /* SwiftEntryKit */; - targetProxy = 884CA9C14E88B8CCBA5991B4232FF1E9 /* PBXContainerItemProxy */; - }; - 6AE52C1C7ADA650B01ED3766B6E02F00 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "DDMAMapKit_Private-DDMAMapKit_Private"; - target = 6056870867CC4728BCEF2E5EBDD1DCB3 /* DDMAMapKit_Private-DDMAMapKit_Private */; - targetProxy = A19229CABA7774679B060B58B4F64F19 /* PBXContainerItemProxy */; - }; - 6C8841D5047826A7D875F7CC488480CD /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = ZLPhotoBrowser; - target = 2FAF03761A44702490259F857A848B42 /* ZLPhotoBrowser */; - targetProxy = FAC7CA6E6036239806E7B442F1BD6D2F /* PBXContainerItemProxy */; - }; - 6E979D36038A6391DD587A1FDC29677E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "AMapFoundation-NO-IDFA"; - target = 9B182CB4E1716E9070813D3C59736001 /* AMapFoundation-NO-IDFA */; - targetProxy = C1F32222CCBBF68CFA496F5064B63C0E /* PBXContainerItemProxy */; - }; - 75884B2F16FC998D1AE93630592459A1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "AMapTrack-NO-IDFA"; - target = 2160840D78FCB958CABE1B88300E38C5 /* AMapTrack-NO-IDFA */; - targetProxy = 5556437E59B62361E3C1D8835BF55623 /* PBXContainerItemProxy */; - }; - 778983FFCB4F15E8F98D268EFDCDD830 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DDMAMapKit_Private; - target = B41F58F2856AB275B4CF75F359937653 /* DDMAMapKit_Private */; - targetProxy = CBC0C11B69F489AAF9D4F6995E7A3E66 /* PBXContainerItemProxy */; - }; - 788F6BA23A64AE55724B3D73EEE6E39B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DDBasicControlsKit_Private; - target = 087B100C5691B6A3C04A45198E6C32F6 /* DDBasicControlsKit_Private */; - targetProxy = 4BDF214ADDD87FAFCE776F7D068241BF /* PBXContainerItemProxy */; - }; - 7A2E58EE5C4266C53891B75FA7787370 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "AMapLocation-NO-IDFA"; - target = 4BD4E22D3419D68A85BDD6119CB37C6C /* AMapLocation-NO-IDFA */; - targetProxy = 53FFBE314C39D33D54AA41061A094F38 /* PBXContainerItemProxy */; - }; - 7DF78ABBD0DE2A3DDA76F0011659E66C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = BRPickerView; - target = D505645C3F99EB1E8B6529D64D2C3E1C /* BRPickerView */; - targetProxy = D4357617B09C7613CBEDDC637884F399 /* PBXContainerItemProxy */; - }; - 818AD6591A1C7553381AF6D71182A502 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Alamofire; - target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; - targetProxy = DD1C9C665271655ACE599A8E044B33B6 /* PBXContainerItemProxy */; - }; - 89FFA8E6A31E7768E5F731832914074B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "ESTabBarController-swift"; - target = 3F83465BA81F6E581B3A431642D2992E /* ESTabBarController-swift */; - targetProxy = 01AA4F26D08B0764F3FBC8575D219867 /* PBXContainerItemProxy */; - }; - 8D9B2A5E48EEEC9C2AFDD91882FC9F72 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SwiftyRSA; - target = 92A1C13902E7ACDA3ABB5BA1FEACC86C /* SwiftyRSA */; - targetProxy = D653C2AB57C66C5FDB433FC98405CA53 /* PBXContainerItemProxy */; - }; - 8E18824A7872AE780C2AE3F66CD9EE59 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DDUIGestureRecognizer; - target = 67F8329E1ABF625D93A19CDE570535BB /* DDUIGestureRecognizer */; - targetProxy = BA15EA16F0650162823F705B50FC638E /* PBXContainerItemProxy */; - }; - 94887CB9AC6B5CB556FE7FFC5D194DA4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RxRelay; - target = 4622BFEF3DC16E8BD15EEFC30D4D0084 /* RxRelay */; - targetProxy = 830112A31C2BB1EC2044490BF16A3A96 /* PBXContainerItemProxy */; - }; - 96ED16C3ACBDD3BD0146E56F1003FF76 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DDLogKit_Private; - target = 26BA8950EBF05410254D54F7EF76D5CE /* DDLogKit_Private */; - targetProxy = FDCB8C76939EE86BE03DBF5EB1B6AD03 /* PBXContainerItemProxy */; - }; - 9AB95092D6EF6FD28708C61C33CF0330 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = TYCyclePagerView; - target = 416BCB647D16D0ED89A6729B14DD54D2 /* TYCyclePagerView */; - targetProxy = BFB3909ED1C95064974FA2DBB419DCA7 /* PBXContainerItemProxy */; - }; - 9AEF09A7C0365E9FAC348A3351FFDD10 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = PopupDialog; - target = 6E71929B582F8CD57B3DC1FD6560F047 /* PopupDialog */; - targetProxy = 6884C7B4D6CEAA68B4B627B0B9807AF0 /* PBXContainerItemProxy */; - }; - A8AF3C20252CE416D14B7A5586B91626 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = IQKeyboardManagerSwift; - target = B490E7485944099E16C9CBD79119D1D4 /* IQKeyboardManagerSwift */; - targetProxy = 0826467EB9010324D3F53EF1A10A8544 /* PBXContainerItemProxy */; - }; - AC842DF5065B3C8018CFADB74ECF3A50 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DDUIKit; - target = A27F26E25C91875F304337D28F939BF9 /* DDUIKit */; - targetProxy = 5DD5579D189C112A038571D848CC5621 /* PBXContainerItemProxy */; - }; - B17D6CAA2CEFD436DDFAFA979EE4EEF0 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DDColorKit_Private; - target = BFED7668E8D0960F3873C9C1329EB63F /* DDColorKit_Private */; - targetProxy = 8424281C16D08DD08E3BBAE68879E544 /* PBXContainerItemProxy */; - }; - B48031CC689064A6C16120B01B71361A /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DDLogKit_Private; - target = 26BA8950EBF05410254D54F7EF76D5CE /* DDLogKit_Private */; - targetProxy = F221641570F50A11324F0D66F0D23CCE /* PBXContainerItemProxy */; - }; - B488AD774EBAD06156928D62D399340A /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DDFontKit_Private; - target = 8F3F4D8426620E7E4A06FE4BCDB96FDE /* DDFontKit_Private */; - targetProxy = 98C9FA7A05B196FAABCECF54914EFE29 /* PBXContainerItemProxy */; - }; - B4CF307D1D90D77E549CF7A33186B0C2 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DDProgressHUDKit_Private; - target = 387C7767E705FE68450F97CBA4348CC0 /* DDProgressHUDKit_Private */; - targetProxy = 7F325864B7C03CA0172C42D418E8EA13 /* PBXContainerItemProxy */; - }; - B55BC0A6A88B9F909B83BF3EEB3EB1C8 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RxSwift; - target = EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */; - targetProxy = 6BAC6FC977EAE280D44846F9CFDF4DBB /* PBXContainerItemProxy */; - }; - B6EF3B7E87C54CD8A68A29C001BB6310 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DDCategoryKit_Private; - target = 7B8412F08BD27981DB53CE2C25C19F0A /* DDCategoryKit_Private */; - targetProxy = 813EF339A520F7F15CC3496F87CAF397 /* PBXContainerItemProxy */; - }; - B71B8AD4C63A09A091162E88BBD0975A /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RxSwift; - target = EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */; - targetProxy = F0BA0C35A2A8BC64B7F7F3772A17E4B7 /* PBXContainerItemProxy */; - }; - BE94734D0D90B097F7F83A5F1C8A541B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "AMapFoundation-NO-IDFA"; - target = 9B182CB4E1716E9070813D3C59736001 /* AMapFoundation-NO-IDFA */; - targetProxy = B19DA5BEF1348CF57133D982110FA0E0 /* PBXContainerItemProxy */; - }; - C90D11EDFC42C3249105A58D22042597 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "AMapFoundation-NO-IDFA"; - target = 9B182CB4E1716E9070813D3C59736001 /* AMapFoundation-NO-IDFA */; - targetProxy = 04AFC8F5FDDE7CCF3DB28FE3481EE05B /* PBXContainerItemProxy */; - }; - CC712BF8E859F2B02CAC9EBBBDD77922 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DDDateKit_Private; - target = FA849029E6A899F45F613165943A6C68 /* DDDateKit_Private */; - targetProxy = 7A05A84CDA5DFFB86C3A0C2B7678D830 /* PBXContainerItemProxy */; - }; - CEDDF22D07BD4BE7FB2272416634BCE3 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "AMapSearch-NO-IDFA"; - target = 4F1379598302C9160590B3650C10E1A5 /* AMapSearch-NO-IDFA */; - targetProxy = CC8066C89FD98493E757CB636EC07CE2 /* PBXContainerItemProxy */; - }; - CFFCD0FD55134D0F78547AF9D8D54C7E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DDAutoUIKit_Private; - target = 53463808DD395EFE0C9E0CDCB79A6C0A /* DDAutoUIKit_Private */; - targetProxy = 932CE0ECC73B299F3E6B1F2B67FEEA42 /* PBXContainerItemProxy */; - }; - DC050D0D99C293C43691DFF95D5A4C99 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "AMapLocation-NO-IDFA"; - target = 4BD4E22D3419D68A85BDD6119CB37C6C /* AMapLocation-NO-IDFA */; - targetProxy = 235D82538392E3F211C89822979EBEE2 /* PBXContainerItemProxy */; - }; - DC491551FD76FD49346D68985FB785C3 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = MJRefresh; - target = 6868056D761E163D10FDAF8CF1C4D9B8 /* MJRefresh */; - targetProxy = 6AD72BA49E6745C6E40801A03143394B /* PBXContainerItemProxy */; - }; - E02C5F07E9246801BEC4FC5C97A9ED5E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DDAudioPlayerKit_Private; - target = E72BE4C94039A951B47CCC942F6B4B8F /* DDAudioPlayerKit_Private */; - targetProxy = 280B185D01FD102ED2895D202288D6BF /* PBXContainerItemProxy */; - }; - E2C8BA2BD53BE119505AE4F1AB99606B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SnapKit; - target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; - targetProxy = 1E6AA2776A0B689B38E43F4C077E6CC5 /* PBXContainerItemProxy */; - }; - E6EAB402D572660E44FC0E8CB2DAA5DB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DynamicBlurView; - target = 7D914FA2F03C860D5133BA2DB87C594A /* DynamicBlurView */; - targetProxy = CF38E273E831957CA74380731F0DD345 /* PBXContainerItemProxy */; - }; - E889AAECFC160E4018AFD7486FC53DF0 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DDZFPlayerKit_Private; - target = 2864923095274ACF5E5F99312F360AEB /* DDZFPlayerKit_Private */; - targetProxy = 2D4A6E088D751A3E55416285ACF4B109 /* PBXContainerItemProxy */; - }; - EC01F252778ABAFCB87FA1D9DB85DBE5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "AMapLocation-NO-IDFA"; - target = 4BD4E22D3419D68A85BDD6119CB37C6C /* AMapLocation-NO-IDFA */; - targetProxy = 91F0D93793BAF0DA9E56B0F751486A83 /* PBXContainerItemProxy */; - }; - F39E48CADD6E11FB7D0BB496D531966E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "AMapSearch-NO-IDFA"; - target = 4F1379598302C9160590B3650C10E1A5 /* AMapSearch-NO-IDFA */; - targetProxy = 56C4E16CCA94C8DF146D66BDDD3CE6AD /* PBXContainerItemProxy */; - }; - F3A7A4EB852AFDC4AFE35B42035B21F3 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = JPush; - target = 5FB6AB0A09E7A2F2BE11AD6BAEFD9AED /* JPush */; - targetProxy = 8E92984767FE8C1DB258B5F3B45502BA /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 00CFFB6AC18FFD8289A2D08ECB0D6317 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7F0214AA38F1CEAC5DA9E004A183DC80 /* DDZFPlayerKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDZFPlayerKit_Private/DDZFPlayerKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDZFPlayerKit_Private; - PRODUCT_NAME = DDZFPlayerKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 02EAF8F8D4762C1B17A8CEB476228273 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3E7E04DEA4FFF9210284B5D20F80D906 /* DDBasicControlsKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDBasicControlsKit_Private/DDBasicControlsKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDBasicControlsKit_Private; - PRODUCT_NAME = DDBasicControlsKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 034BA87C2C84A3F815BABA073747D950 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BCA4322CF19F0EF5B8D6F291D3C95A12 /* IQKeyboardManagerSwift.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = IQKeyboardManagerSwift; - PRODUCT_NAME = IQKeyboardManagerSwift; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.8; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 03D5621DFAF33B3E865DA1A7AA59856A /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3743DCEBE7F1DF1C3A1F19E68A1BD44A /* DDAudioPlayerKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDAudioPlayerKit_Private; - PRODUCT_NAME = DDAudioPlayerKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 062D9F2B9A556AF545F7D73B6BAD9E4C /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = CD8F12B9844C2496DDF15B7705462661 /* JPushExtension.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CLANG_ENABLE_OBJC_WEAK = NO; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 06902B9EA0B8701B1BBD382EF5B048E5 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F0D8101C65BB03367A1F60BD3741C443 /* DDControlsKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDControlsKit_Private/DDControlsKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDControlsKit_Private/DDControlsKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDControlsKit_Private; - PRODUCT_NAME = DDControlsKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 0781C02B9B1ABAB69E606763A1B452A0 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9CB5BA613C7C9BDD94A870582467FAEB /* AMapNavi-NO-IDFA.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 0821F81F1C31A0D8294FD58FB0667D35 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 006B83DBD7EF9E9FED347BF4490BE076 /* DDCategoryKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDCategoryKit_Private/DDCategoryKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDCategoryKit_Private; - PRODUCT_NAME = DDCategoryKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 0924432DC61373F45432E46A7A0F31A1 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B30C358AF2A5C1E6ABB5F69697182125 /* DDCategoryKit_Private.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDCategoryKit_Private/DDCategoryKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDCategoryKit_Private; - PRODUCT_NAME = DDCategoryKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 0AECEEFF7929FBEFD97057F5F6DC8B2C /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 06B46F69C1C8EDD36B1781CEFBC2A6C7 /* JCore.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 0B07FC7C2CBBECC1AEAB861B30DB8E43 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E6E382C8CC3828B550CFE1B411D59792 /* SwiftEntryKit.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/SwiftEntryKit/SwiftEntryKit-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MODULEMAP_FILE = Headers/Public/SwiftEntryKit/SwiftEntryKit.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SwiftEntryKit; - PRODUCT_NAME = SwiftEntryKit; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 0CB1723AE73B5963CE93AED98ED6D6ED /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E0D0B7AB20E57B728AF637B0BC82F481 /* DDUIGestureRecognizer.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDUIGestureRecognizer/DDUIGestureRecognizer-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MODULEMAP_FILE = Headers/Public/DDUIGestureRecognizer/DDUIGestureRecognizer.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDUIGestureRecognizer; - PRODUCT_NAME = DDUIGestureRecognizer; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 0F56E9EF4C4A8A2EFE063DB95981BAD1 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 076540906139345D94D6154860BC78BD /* Bugly.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 1170D4F6047D92FB103D8925261C4446 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DD6E822FD84878F6DA0DF18290710A92 /* ESTabBarController-swift.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/ESTabBarController-swift/ESTabBarController-swift-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MODULEMAP_FILE = "Headers/Public/ESTabBarController_swift/ESTabBarController-swift.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = ESTabBarController_swift; - PRODUCT_NAME = "ESTabBarController-swift"; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 11EDDBA6D8DE247C3D269380A575CDF4 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 11AA9FF2BF0AB34A6ABCED55E2B3DFD2 /* DDUIKit.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDUIKit/DDUIKit-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MODULEMAP_FILE = Headers/Public/DDUIKit/DDUIKit.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDUIKit; - PRODUCT_NAME = DDUIKit; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 1495AF8B549792BF7912F5A1E1119712 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8876CD6696B4C9CC7FDBD176C9562B61 /* DDNetworkingOfAlamofireKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDNetworkingOfAlamofireKit_Private; - PRODUCT_NAME = DDNetworkingOfAlamofireKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 15B7F84E39C93EFEBD8AD10B0FE0B047 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 91BC76F25BC47C0AA6D103C14C68E827 /* AMapNavi-NO-IDFA.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 1704F0EC987CC93E0AB9E671AB5625D2 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 34713360F6BD4606798AA38EDAD714D8 /* RxSwift.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/RxSwift/RxSwift-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MODULEMAP_FILE = Headers/Public/RxSwift/RxSwift.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = RxSwift; - PRODUCT_NAME = RxSwift; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 1726DC34BF3C4756B065E2A908DCC12C /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 542580CD4322A21B74A4ECC00C42E348 /* DDPersistenceKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDPersistenceKit_Private/DDPersistenceKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDPersistenceKit_Private/DDPersistenceKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDPersistenceKit_Private; - PRODUCT_NAME = DDPersistenceKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 17E9F697225BE4693A9A0CAAE767CFEB /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 92A8C75F27C7753AED1D69771277142C /* DDDateKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDDateKit_Private/DDDateKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDDateKit_Private/DDDateKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDDateKit_Private; - PRODUCT_NAME = DDDateKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 18450C9EEFA1230D2952C8327442D5AE /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 4096897914F3034BAA58D3CE2344959E /* AMapTrack-NO-IDFA.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 1A549D214D907E76BA47A41507492968 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E235887340A6B4A54A73422D949DC61C /* DDAutoUIKit_Private.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDAutoUIKit_Private/DDAutoUIKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDAutoUIKit_Private; - PRODUCT_NAME = DDAutoUIKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 1D6ECDD132EE5035CEB27FA70E194607 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 779EDC7779B234CD9A467423080BE58F /* ZLPhotoBrowser.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/ZLPhotoBrowser/ZLPhotoBrowser-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - MODULEMAP_FILE = Headers/Public/ZLPhotoBrowser/ZLPhotoBrowser.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = ZLPhotoBrowser; - PRODUCT_NAME = ZLPhotoBrowser; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.2; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 1DF8897E06F8071D42BAE4465121279D /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BB875281CE395495948947FC73ADD1BF /* Alamofire.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/Alamofire/Alamofire-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - MODULEMAP_FILE = Headers/Public/Alamofire/Alamofire.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = Alamofire; - PRODUCT_NAME = Alamofire; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 225716D671C2AF3962051A80830E0D98 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9DF5503B5B0AB88750E48EB61E67F526 /* JXCategoryView.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/JXCategoryView/JXCategoryView-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MODULEMAP_FILE = Headers/Public/JXCategoryView/JXCategoryView.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = JXCategoryView; - PRODUCT_NAME = JXCategoryView; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 226221FEFECAF478E4AD3C69CC522966 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A6DCBE7BA32A6207103E3433A2D746EB /* AMapLocation-NO-IDFA.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 231DE093916EB01285DC4AECC16D44CF /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B8A53289FAC7085293A39AE96E239567 /* DDDateKit_Private.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDDateKit_Private/DDDateKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDDateKit_Private/DDDateKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDDateKit_Private; - PRODUCT_NAME = DDDateKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 24D7D357EF5DACAB8C59F250AC83420F /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BDFBA89DE326F0EFFD08C57490B7A03A /* DDLogKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDLogKit_Private/DDLogKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDLogKit_Private/DDLogKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDLogKit_Private; - PRODUCT_NAME = DDLogKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 252AFF79657A12EA0F2D05BCA8BCF72C /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F3FDEA9E2FBBA9164D2DE1E6A2CF036B /* Kingfisher.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/Kingfisher/Kingfisher-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MODULEMAP_FILE = Headers/Public/Kingfisher/Kingfisher.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = Kingfisher; - PRODUCT_NAME = Kingfisher; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 263186E013F11491F5E484935ED3148D /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B81E6FB644DEFFD4669950FA4F809C45 /* Kingfisher.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/Kingfisher/Kingfisher-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MODULEMAP_FILE = Headers/Public/Kingfisher/Kingfisher.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = Kingfisher; - PRODUCT_NAME = Kingfisher; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 28351E0A3C97633F27A3A5C9C6F6ABF6 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BAFA58A605A91B262522CC7C1D77EF05 /* JXCategoryView.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/JXCategoryView/JXCategoryView-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MODULEMAP_FILE = Headers/Public/JXCategoryView/JXCategoryView.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = JXCategoryView; - PRODUCT_NAME = JXCategoryView; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 2853FEDC9CC66B9840B31219EECD4E5A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7302A599D8A8C33979FFF070740CFE34 /* DDColorKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDColorKit_Private/DDColorKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDColorKit_Private/DDColorKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDColorKit_Private; - PRODUCT_NAME = DDColorKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 28959E0767ADF85A6F17F70647B6F7D8 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7577CE3988A94830031C97156A439570 /* DDMAMapKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDMAMapKit_Private/DDMAMapKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDMAMapKit_Private; - PRODUCT_NAME = DDMAMapKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 29DB94002704203A0B4A69C3238100D9 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 15A9C1745230ADF165659AD1BA0426DC /* DDNetworkingOfAlamofireKit_Private.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDNetworkingOfAlamofireKit_Private; - PRODUCT_NAME = DDNetworkingOfAlamofireKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 2C14C682F1AF1911E085FA9E288139D2 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8640052F44727BE6700FE064637A7951 /* RxCocoa.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/RxCocoa/RxCocoa-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MODULEMAP_FILE = Headers/Public/RxCocoa/RxCocoa.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = RxCocoa; - PRODUCT_NAME = RxCocoa; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 30E9D8E42AE5CD6D5246F2627DD27E9F /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9CB98AA2FFBDAE3D4B2D8331C0F2275C /* DDWebImageKit_Private.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDWebImageKit_Private/DDWebImageKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDWebImageKit_Private; - PRODUCT_NAME = DDWebImageKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 3281C76EA7D794732D228832C577826B /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7302A599D8A8C33979FFF070740CFE34 /* DDColorKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDColorKit_Private/DDColorKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDColorKit_Private/DDColorKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDColorKit_Private; - PRODUCT_NAME = DDColorKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 36020B1F0CA4D13823086273C510C125 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5CC4013C82704E2725B81D451DE06B1D /* SnapKit.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - MODULEMAP_FILE = Headers/Public/SnapKit/SnapKit.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SnapKit; - PRODUCT_NAME = SnapKit; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 3810F09D10322B304912A8FC9D90FE73 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3E7E04DEA4FFF9210284B5D20F80D906 /* DDBasicControlsKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDBasicControlsKit_Private/DDBasicControlsKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDBasicControlsKit_Private; - PRODUCT_NAME = DDBasicControlsKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 3E82EF80F3ACC6610CD959FD17245D53 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = CCF5BE4A863570487343F695DA2B5F19 /* DDLogKit_Private.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDLogKit_Private/DDLogKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDLogKit_Private/DDLogKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDLogKit_Private; - PRODUCT_NAME = DDLogKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 3EB0C0846EA6732314C5D69489AE15E2 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = EE4FDB7DC97BA8834FC5ED0132CDEDC8 /* AMapFoundation-NO-IDFA.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 3F958C3B78D47F9549C9023C4E5B4004 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BAFA58A605A91B262522CC7C1D77EF05 /* JXCategoryView.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/JXCategoryView/JXCategoryView-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MODULEMAP_FILE = Headers/Public/JXCategoryView/JXCategoryView.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = JXCategoryView; - PRODUCT_NAME = JXCategoryView; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 443AAC2D2192D04E03EB3B4A97A49FCC /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7BF437F1301E282D248141EA0E4FDED5 /* Pods-OrderSchedulingNotificationService.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*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MACH_O_TYPE = staticlib; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 44CB277F467617FACCA6BF598A034A65 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = EDBA254B348DB78647705E13777F4E68 /* BRPickerView.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/BRPickerView/BRPickerView-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MODULEMAP_FILE = Headers/Public/BRPickerView/BRPickerView.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = BRPickerView; - PRODUCT_NAME = BRPickerView; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 466EBD678661D52A379DAAE6AC65AEAD /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C343C02FE4A6350746A5D09A7082F8EA /* PopupDialog.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/PopupDialog/PopupDialog-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - MODULEMAP_FILE = Headers/Public/PopupDialog/PopupDialog.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = PopupDialog; - PRODUCT_NAME = PopupDialog; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 489E9830093FC6106F0F7738C189C410 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = FEA3BC4A0AA3AAF35A6FE025713533A3 /* SnapKit.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - MODULEMAP_FILE = Headers/Public/SnapKit/SnapKit.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SnapKit; - PRODUCT_NAME = SnapKit; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 48EB4E81196F9DCDB95B5C2D51E11A1D /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7577CE3988A94830031C97156A439570 /* DDMAMapKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDMAMapKit_Private/DDMAMapKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDMAMapKit_Private; - PRODUCT_NAME = DDMAMapKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 4CFE159363E23D99B30DCFC1E84B6E21 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C8E4CE335A340C6A774310B86A5AE93B /* DDToastKit_Private.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDToastKit_Private/DDToastKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDToastKit_Private/DDToastKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDToastKit_Private; - PRODUCT_NAME = DDToastKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.1; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 4D53E26FAE1ED5EB8E462D391AADD577 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8F1AFC44ED08A99390C97E3260047E20 /* DDToastKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDToastKit_Private/DDToastKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDToastKit_Private/DDToastKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDToastKit_Private; - PRODUCT_NAME = DDToastKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 4E026E4F4DA1962A2D7BA31CDB0CA756 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3705A21F6D5C9B2BD3D689AF2E3AD83C /* SwiftEntryKit.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/SwiftEntryKit/SwiftEntryKit-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MODULEMAP_FILE = Headers/Public/SwiftEntryKit/SwiftEntryKit.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SwiftEntryKit; - PRODUCT_NAME = SwiftEntryKit; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 4E8A37E39B95F86B5A498DEF72505CB1 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 2245679B562A0A981E009C266C623CA3 /* MJRefresh.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/MJRefresh/MJRefresh-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MODULEMAP_FILE = Headers/Public/MJRefresh/MJRefresh.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = MJRefresh; - PRODUCT_NAME = MJRefresh; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 524FE77734DC93C283D4E32516210D3C /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 60804C91E753B56E570498CF4F798CB2 /* TYCyclePagerView.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/TYCyclePagerView/TYCyclePagerView-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - MODULEMAP_FILE = Headers/Public/TYCyclePagerView/TYCyclePagerView.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = TYCyclePagerView; - PRODUCT_NAME = TYCyclePagerView; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 53DBDCA48029EDDC75E87A248B01458C /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 4D14F99E6FF6E2DBE74EF977A4557537 /* JCore.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 5425F23225AE92341F2558DA01812C57 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C1E1001084A1DE3C73F7A4CBB0207512 /* MJRefresh.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/MJRefresh/MJRefresh-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MODULEMAP_FILE = Headers/Public/MJRefresh/MJRefresh.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = MJRefresh; - PRODUCT_NAME = MJRefresh; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 5776ED848C82B0310FAF78DF8E22D701 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 18BCA08F5CEEE178EA4B5E4C7521ECB7 /* Pods-OrderSchedulingNotificationService.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*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MACH_O_TYPE = staticlib; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 577813FB86763A6ADFB7460A091E77EA /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E5E3C0DB744B960A5F6130A12E7244C8 /* JPush.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 5859B1ED45373FA14A1E6451A262D675 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DD6E822FD84878F6DA0DF18290710A92 /* ESTabBarController-swift.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/ESTabBarController-swift/ESTabBarController-swift-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MODULEMAP_FILE = "Headers/Public/ESTabBarController_swift/ESTabBarController-swift.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = ESTabBarController_swift; - PRODUCT_NAME = "ESTabBarController-swift"; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 5BB5E10A404E0A105E959D4D22CD06B8 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7577CE3988A94830031C97156A439570 /* DDMAMapKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DDMAMapKit_Private"; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IBSC_MODULE = DDMAMapKit_Private; - INFOPLIST_FILE = "Target Support Files/DDMAMapKit_Private/ResourceBundle-DDMAMapKit_Private-DDMAMapKit_Private-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - PRODUCT_NAME = DDMAMapKit_Private; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - WRAPPER_EXTENSION = bundle; - }; - name = PreRelease; - }; - 6140DDBB9B050ACCF404485A14F4FFE0 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5085009761EFF9710D58D141CE4344FE /* BRPickerView.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/BRPickerView/BRPickerView-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MODULEMAP_FILE = Headers/Public/BRPickerView/BRPickerView.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = BRPickerView; - PRODUCT_NAME = BRPickerView; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 63275981B15BE90F6912932D6156AC92 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7CB5913E7C3EEFA536149605E932C168 /* IQKeyboardManagerSwift.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = IQKeyboardManagerSwift; - PRODUCT_NAME = IQKeyboardManagerSwift; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.8; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 64F8D025C0B4722D495C98EC8827C679 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BB875281CE395495948947FC73ADD1BF /* Alamofire.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/Alamofire/Alamofire-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - MODULEMAP_FILE = Headers/Public/Alamofire/Alamofire.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = Alamofire; - PRODUCT_NAME = Alamofire; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 65B60F5572E5A88B96165BADCBB1BDA6 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 6A622A53D547AACE1D177EDFD1AA4776 /* AMapSearch-NO-IDFA.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 6B9A53460BDAF5BE885221978932492C /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 779EDC7779B234CD9A467423080BE58F /* ZLPhotoBrowser.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/ZLPhotoBrowser/ZLPhotoBrowser-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - MODULEMAP_FILE = Headers/Public/ZLPhotoBrowser/ZLPhotoBrowser.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = ZLPhotoBrowser; - PRODUCT_NAME = ZLPhotoBrowser; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.2; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 6C3CC8E0B427ECC1DB4A52D26B813CEF /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 842F1D9784F900A5C6F70B9B70077960 /* DDPersistenceKit_Private.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDPersistenceKit_Private/DDPersistenceKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDPersistenceKit_Private/DDPersistenceKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDPersistenceKit_Private; - PRODUCT_NAME = DDPersistenceKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 6C81FF1694F67970213CC687C43B91A3 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 6B96E60464539F6B03106969E21D02D7 /* AMapSearch-NO-IDFA.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 6E369200B22231B3ABCA75FDF3ABE62B /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C1E1001084A1DE3C73F7A4CBB0207512 /* MJRefresh.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/MJRefresh/MJRefresh-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MODULEMAP_FILE = Headers/Public/MJRefresh/MJRefresh.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = MJRefresh; - PRODUCT_NAME = MJRefresh; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 6FA6D0B57F7F0945CD6226AD94C296BB /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9DEAC1DB7FAB5A38798E403ED90C1404 /* AMapTrack-NO-IDFA.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 7004DBDA636C88E2F25FDB913BBCF872 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 0E81B3F8F745DB6A9AAFB8CD40CB6EC8 /* DDProgressHUDKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDProgressHUDKit_Private/DDProgressHUDKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDProgressHUDKit_Private; - PRODUCT_NAME = DDProgressHUDKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 7006E7DA87DBF9FB621E5E92F18FB641 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8640052F44727BE6700FE064637A7951 /* RxCocoa.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/RxCocoa/RxCocoa-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MODULEMAP_FILE = Headers/Public/RxCocoa/RxCocoa.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = RxCocoa; - PRODUCT_NAME = RxCocoa; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 7136F591221AD5501E817C1B77F484ED /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 4C492610364A0957F757E5C0834CA5E2 /* DDControlsKit_Private.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDControlsKit_Private/DDControlsKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDControlsKit_Private/DDControlsKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDControlsKit_Private; - PRODUCT_NAME = DDControlsKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 739DE83A94D5F3796DA470D04BDBA273 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9CB5BA613C7C9BDD94A870582467FAEB /* AMapNavi-NO-IDFA.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 77BAB67F30880412AB4954F7FF0DE8DB /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = EE4FDB7DC97BA8834FC5ED0132CDEDC8 /* AMapFoundation-NO-IDFA.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 7B0823ECDBE4CBBB30A637989E0F1800 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B1B3B78C24D91972E01D60EF4EFF9D2C /* PopupDialog.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/PopupDialog/PopupDialog-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - MODULEMAP_FILE = Headers/Public/PopupDialog/PopupDialog.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = PopupDialog; - PRODUCT_NAME = PopupDialog; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 7B6A78D46D28FC77A1C662278E8C009E /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B81E6FB644DEFFD4669950FA4F809C45 /* Kingfisher.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/Kingfisher/Kingfisher-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MODULEMAP_FILE = Headers/Public/Kingfisher/Kingfisher.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = Kingfisher; - PRODUCT_NAME = Kingfisher; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 7D4FC5186D0C5815B2ABFC9323046C03 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F97A959B6445AEF8D2365927D0D173DC /* AMapLocation-NO-IDFA.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 7D63FB0E7E7506708BD5F823B9463916 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 781949EB3E25C9E2A8DD56C72FD05953 /* DynamicBlurView.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DynamicBlurView/DynamicBlurView-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MODULEMAP_FILE = Headers/Public/DynamicBlurView/DynamicBlurView.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DynamicBlurView; - PRODUCT_NAME = DynamicBlurView; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 7DE63CFFD890B984947FC4B929ED850A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 4D14F99E6FF6E2DBE74EF977A4557537 /* JCore.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 814F2EABC15AA1599B495C2A2CFA8022 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 781949EB3E25C9E2A8DD56C72FD05953 /* DynamicBlurView.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DynamicBlurView/DynamicBlurView-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MODULEMAP_FILE = Headers/Public/DynamicBlurView/DynamicBlurView.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DynamicBlurView; - PRODUCT_NAME = DynamicBlurView; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 81778199DDA158D28CA32B744C1651D1 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F09D6602F5FCF95A8ED208D36104E477 /* DDMAMapKit_Private.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDMAMapKit_Private/DDMAMapKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDMAMapKit_Private; - PRODUCT_NAME = DDMAMapKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 8215DD463CCF8977E1AD7FEC6D594030 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = CCA25F5644BF0246ABFFF775553FEEAE /* Pods-OrderScheduling.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*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-OrderScheduling/Pods-OrderScheduling.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 826C56951F2AA52ACA6011106F8C484F /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D3D4F647B2116FBFD7A18F0000CFBF1C /* DDBasicControlsKit_Private.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DDBasicControlsKit_Private"; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IBSC_MODULE = DDBasicControlsKit_Private; - INFOPLIST_FILE = "Target Support Files/DDBasicControlsKit_Private/ResourceBundle-DDBaseViewController-DDBasicControlsKit_Private-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - PRODUCT_NAME = DDBaseViewController; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - 874D5ECFCBDE246920D02ADB76CDB268 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C8912C7EDE4E45FE094F25961D746D68 /* Bugly.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 8D95C529FCF4FDEA49C65D2E82670BCF /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 998DA7B38BC2237AEA6230DFF18B9B7F /* SwiftyRSA.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/SwiftyRSA/SwiftyRSA-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/SwiftyRSA/SwiftyRSA.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SwiftyRSA; - PRODUCT_NAME = SwiftyRSA; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 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; - }; - 904AF2F6BEE0469BB3786D9548E42CC7 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B3CD0776ABDED97153A49C6FFEF28611 /* SwiftyRSA.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/SwiftyRSA/SwiftyRSA-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/SwiftyRSA/SwiftyRSA.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SwiftyRSA; - PRODUCT_NAME = SwiftyRSA; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 934475E4DA2C0BABCCF26DBEB031FCF6 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BE9EEFE3C1290547D139F2FDDE9A2A3F /* DDAutoUIKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDAutoUIKit_Private/DDAutoUIKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDAutoUIKit_Private; - PRODUCT_NAME = DDAutoUIKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 9372D9A03A0E88D0504BA7590C49DF48 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F2C475F5C3DDC4D613BB54F6EC701363 /* DDUtilsSwiftKit_Private.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDUtilsSwiftKit_Private; - PRODUCT_NAME = DDUtilsSwiftKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 93F02EE5EC44C8D3ACA38D0F7AE8D178 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DF2AEC51482009E8935EC3F37C84EC10 /* RxRelay.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/RxRelay/RxRelay-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MODULEMAP_FILE = Headers/Public/RxRelay/RxRelay.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = RxRelay; - PRODUCT_NAME = RxRelay; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 95A2B0B1F1013B66BBCC3BDD17A1A58A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7577CE3988A94830031C97156A439570 /* DDMAMapKit_Private.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DDMAMapKit_Private"; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IBSC_MODULE = DDMAMapKit_Private; - INFOPLIST_FILE = "Target Support Files/DDMAMapKit_Private/ResourceBundle-DDMAMapKit_Private-DDMAMapKit_Private-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - PRODUCT_NAME = DDMAMapKit_Private; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; - 95F977185959B1C025A76CB343AF5CA8 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D3D4F647B2116FBFD7A18F0000CFBF1C /* DDBasicControlsKit_Private.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDBasicControlsKit_Private/DDBasicControlsKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDBasicControlsKit_Private; - PRODUCT_NAME = DDBasicControlsKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 96E335AB1050ECC308696A8784201197 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 11AA9FF2BF0AB34A6ABCED55E2B3DFD2 /* DDUIKit.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDUIKit/DDUIKit-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MODULEMAP_FILE = Headers/Public/DDUIKit/DDUIKit.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDUIKit; - PRODUCT_NAME = DDUIKit; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 97407110C2616E82AAABA592E25F0B1E /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DCE08701C8652904BEE88F34DD27C3A5 /* DDAudioPlayerKit_Private.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDAudioPlayerKit_Private; - PRODUCT_NAME = DDAudioPlayerKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 98545824CDE7ABF6900E75D1A6C37E47 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 006B83DBD7EF9E9FED347BF4490BE076 /* DDCategoryKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDCategoryKit_Private/DDCategoryKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDCategoryKit_Private; - PRODUCT_NAME = DDCategoryKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 99CCD2E6A3652FCDF864FD2DF5B79D3C /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 60804C91E753B56E570498CF4F798CB2 /* TYCyclePagerView.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/TYCyclePagerView/TYCyclePagerView-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - MODULEMAP_FILE = Headers/Public/TYCyclePagerView/TYCyclePagerView.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = TYCyclePagerView; - PRODUCT_NAME = TYCyclePagerView; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - 99F4C308A2075AEDDE5F26F284DA3E2C /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E0D0B7AB20E57B728AF637B0BC82F481 /* DDUIGestureRecognizer.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDUIGestureRecognizer/DDUIGestureRecognizer-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MODULEMAP_FILE = Headers/Public/DDUIGestureRecognizer/DDUIGestureRecognizer.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDUIGestureRecognizer; - PRODUCT_NAME = DDUIGestureRecognizer; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 9B86043376CA2F95D8531E0A0889657F /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 2AB85225A76FD605AAA4578E1A765164 /* Pods-OrderScheduling.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*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-OrderScheduling/Pods-OrderScheduling.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 9C23F3BFA136C876EABD07FBA9320B77 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1B501E28E3FDFF405D393733C389A7BC /* DDWebImageKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDWebImageKit_Private/DDWebImageKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDWebImageKit_Private; - PRODUCT_NAME = DDWebImageKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 9D20A75E937BB9774107EE2096453A04 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F09D6602F5FCF95A8ED208D36104E477 /* DDMAMapKit_Private.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DDMAMapKit_Private"; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IBSC_MODULE = DDMAMapKit_Private; - INFOPLIST_FILE = "Target Support Files/DDMAMapKit_Private/ResourceBundle-DDMAMapKit_Private-DDMAMapKit_Private-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - PRODUCT_NAME = DDMAMapKit_Private; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - 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; - }; - 9FC4AEA5BCE37566BA898173C24D35FB /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7F0214AA38F1CEAC5DA9E004A183DC80 /* DDZFPlayerKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDZFPlayerKit_Private/DDZFPlayerKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDZFPlayerKit_Private; - PRODUCT_NAME = DDZFPlayerKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - A053864A4C7CCE4DF4E4A2087D9E4CC8 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E5ABB7D74AB285DE7B0057E548038111 /* JPush.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - A6B72CF8955C56DF71299106046D684E /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7F9B1CB5758B76AA0B1DD916EEB5470A /* RxCocoa.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/RxCocoa/RxCocoa-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MODULEMAP_FILE = Headers/Public/RxCocoa/RxCocoa.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = RxCocoa; - PRODUCT_NAME = RxCocoa; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.1; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - A794012D20A5CD57211E1D4516C55EE5 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 6B96E60464539F6B03106969E21D02D7 /* AMapSearch-NO-IDFA.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - A84D1A77D947A2D2B8E5D54B2EA3DC14 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 0303A4FE184E126A0C84A0570CA1500C /* DDUIKit.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDUIKit/DDUIKit-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MODULEMAP_FILE = Headers/Public/DDUIKit/DDUIKit.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDUIKit; - PRODUCT_NAME = DDUIKit; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - A91E6C1D84E7355205D2A116E4968450 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5085009761EFF9710D58D141CE4344FE /* BRPickerView.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/BRPickerView/BRPickerView-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MODULEMAP_FILE = Headers/Public/BRPickerView/BRPickerView.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = BRPickerView; - PRODUCT_NAME = BRPickerView; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - AAD6F321785D34BD16EC6F2E6EBB3FD8 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DBDD0925F5FB23C67496CFE06943DA97 /* RxRelay.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/RxRelay/RxRelay-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MODULEMAP_FILE = Headers/Public/RxRelay/RxRelay.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = RxRelay; - PRODUCT_NAME = RxRelay; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.1; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - AC2BF088394456C214FB78D9ED463DAE /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1C06341F09287851FFC3FD086A6124E8 /* DDUtilsSwiftKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDUtilsSwiftKit_Private; - PRODUCT_NAME = DDUtilsSwiftKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - AE9BE5BF7D5EA18EDF75839085C706F5 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1B501E28E3FDFF405D393733C389A7BC /* DDWebImageKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDWebImageKit_Private/DDWebImageKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDWebImageKit_Private; - PRODUCT_NAME = DDWebImageKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - B2155827CB60089BFE7E07CDD28D4162 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E5E3C0DB744B960A5F6130A12E7244C8 /* JPush.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - B4C2592AF9B3E1CB38269A6341773DE2 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3E7E04DEA4FFF9210284B5D20F80D906 /* DDBasicControlsKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DDBasicControlsKit_Private"; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IBSC_MODULE = DDBasicControlsKit_Private; - INFOPLIST_FILE = "Target Support Files/DDBasicControlsKit_Private/ResourceBundle-DDBaseViewController-DDBasicControlsKit_Private-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - PRODUCT_NAME = DDBaseViewController; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - WRAPPER_EXTENSION = bundle; - }; - name = PreRelease; - }; - B4FE51F4F207B2C4F54618B9A13E6CC8 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8876CD6696B4C9CC7FDBD176C9562B61 /* DDNetworkingOfAlamofireKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDNetworkingOfAlamofireKit_Private; - PRODUCT_NAME = DDNetworkingOfAlamofireKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - BB4FE9F0AC1A5ECF8D07C1690147AD45 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8F1AFC44ED08A99390C97E3260047E20 /* DDToastKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDToastKit_Private/DDToastKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDToastKit_Private/DDToastKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDToastKit_Private; - PRODUCT_NAME = DDToastKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - BC3A49A5F1543E29E82A94504188C974 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F0D8101C65BB03367A1F60BD3741C443 /* DDControlsKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDControlsKit_Private/DDControlsKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDControlsKit_Private/DDControlsKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDControlsKit_Private; - PRODUCT_NAME = DDControlsKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - BDB50D1512B27C99FEC5AFD017B9C2FD /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BE9EEFE3C1290547D139F2FDDE9A2A3F /* DDAutoUIKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDAutoUIKit_Private/DDAutoUIKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDAutoUIKit_Private; - PRODUCT_NAME = DDAutoUIKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - BE22D79D33B14C35C020D24E71C6CFEE /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A1343B18CD61CA9E028BFD908770A0F2 /* DDFontKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDFontKit_Private/DDFontKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDFontKit_Private/DDFontKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDFontKit_Private; - PRODUCT_NAME = DDFontKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - BF8138C640EDD6FDAD55B4BD35354072 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A7EC9B31B72E86761444A2C60DB92CC6 /* Pods-OrderSchedulingNotificationService.prerelease.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*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MACH_O_TYPE = staticlib; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - C2CF9D64B823FDF5559C4A461A345DA5 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B3CD0776ABDED97153A49C6FFEF28611 /* SwiftyRSA.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/SwiftyRSA/SwiftyRSA-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/SwiftyRSA/SwiftyRSA.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SwiftyRSA; - PRODUCT_NAME = SwiftyRSA; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - C4050B58B3671D1B57C9668880DF1E94 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C8912C7EDE4E45FE094F25961D746D68 /* Bugly.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - C4879EE709DDBAAA009F3A5FB2176461 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B4A4770CC67D0EA235C5E9149674D857 /* ZLPhotoBrowser.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/ZLPhotoBrowser/ZLPhotoBrowser-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - MODULEMAP_FILE = Headers/Public/ZLPhotoBrowser/ZLPhotoBrowser.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = ZLPhotoBrowser; - PRODUCT_NAME = ZLPhotoBrowser; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.2; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - C723089A4A8EECB528038729687D4337 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 0EB8C624EF7CB306DD272A6C7FD0984F /* AMapFoundation-NO-IDFA.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - C7F778431CCFA2F935A0DB577516EBF7 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = CD8F12B9844C2496DDF15B7705462661 /* JPushExtension.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CLANG_ENABLE_OBJC_WEAK = NO; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - C9B5A7A9EE2F32B23DF16125FBECDF13 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 174AB53E059BB9A8DE414DD19F96A58E /* DDProgressHUDKit_Private.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDProgressHUDKit_Private/DDProgressHUDKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDProgressHUDKit_Private; - PRODUCT_NAME = DDProgressHUDKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - CA71D1250878D7A2F10FC80912091C9E /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 404742F23166DBF39C139FE4A5140FAD /* ESTabBarController-swift.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/ESTabBarController-swift/ESTabBarController-swift-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MODULEMAP_FILE = "Headers/Public/ESTabBarController_swift/ESTabBarController-swift.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = ESTabBarController_swift; - PRODUCT_NAME = "ESTabBarController-swift"; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - CA8EE889378675C9A5C3F87CF3F81643 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3743DCEBE7F1DF1C3A1F19E68A1BD44A /* DDAudioPlayerKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDAudioPlayerKit_Private; - PRODUCT_NAME = DDAudioPlayerKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - CAB187C7B4254222CCA7BFFDC3B26BDA /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3E7E04DEA4FFF9210284B5D20F80D906 /* DDBasicControlsKit_Private.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DDBasicControlsKit_Private"; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IBSC_MODULE = DDBasicControlsKit_Private; - INFOPLIST_FILE = "Target Support Files/DDBasicControlsKit_Private/ResourceBundle-DDBaseViewController-DDBasicControlsKit_Private-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - PRODUCT_NAME = DDBaseViewController; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; - CADF7FA20B64C7AB1DC430F5F3A6743A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DF2AEC51482009E8935EC3F37C84EC10 /* RxRelay.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/RxRelay/RxRelay-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MODULEMAP_FILE = Headers/Public/RxRelay/RxRelay.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = RxRelay; - PRODUCT_NAME = RxRelay; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - CE71B62CECF863FCD01752A325065BB8 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3EF1A24EF12D2D981431935A575DF361 /* JPushExtension.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CLANG_ENABLE_OBJC_WEAK = NO; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - CFBF0AB3A1C1AFE7DCEA152CB3F0CDBF /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9E4DFAB8B416A2250E403EEEBD97218C /* DynamicBlurView.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DynamicBlurView/DynamicBlurView-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MODULEMAP_FILE = Headers/Public/DynamicBlurView/DynamicBlurView.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DynamicBlurView; - PRODUCT_NAME = DynamicBlurView; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - D4C6CC16ECDE97BFB3D9B16E26F2DFAB /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E6E382C8CC3828B550CFE1B411D59792 /* SwiftEntryKit.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/SwiftEntryKit/SwiftEntryKit-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MODULEMAP_FILE = Headers/Public/SwiftEntryKit/SwiftEntryKit.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SwiftEntryKit; - PRODUCT_NAME = SwiftEntryKit; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - D4E7C0BFC10A4C991D9744879B3B3D87 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 34713360F6BD4606798AA38EDAD714D8 /* RxSwift.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/RxSwift/RxSwift-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MODULEMAP_FILE = Headers/Public/RxSwift/RxSwift.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = RxSwift; - PRODUCT_NAME = RxSwift; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - D753782F97F4E74713668F63AC2264FC /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BCA4322CF19F0EF5B8D6F291D3C95A12 /* IQKeyboardManagerSwift.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = IQKeyboardManagerSwift; - PRODUCT_NAME = IQKeyboardManagerSwift; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.8; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - D8C42B711DF611275F46D4A34ECE3773 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 0E81B3F8F745DB6A9AAFB8CD40CB6EC8 /* DDProgressHUDKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDProgressHUDKit_Private/DDProgressHUDKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDProgressHUDKit_Private; - PRODUCT_NAME = DDProgressHUDKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - DB575ABAA2A6F12E1E3403D17F082F82 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5CC4013C82704E2725B81D451DE06B1D /* SnapKit.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - MODULEMAP_FILE = Headers/Public/SnapKit/SnapKit.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SnapKit; - PRODUCT_NAME = SnapKit; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - DC44562C893BBD9E6500DE8495051652 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = CD93EAF252FE9FC36CD21DC48271E1B3 /* DDUIGestureRecognizer.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDUIGestureRecognizer/DDUIGestureRecognizer-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MODULEMAP_FILE = Headers/Public/DDUIGestureRecognizer/DDUIGestureRecognizer.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDUIGestureRecognizer; - PRODUCT_NAME = DDUIGestureRecognizer; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - DF2EED8A10FE5D2C9BC103161FA8FF7A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A1343B18CD61CA9E028BFD908770A0F2 /* DDFontKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDFontKit_Private/DDFontKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDFontKit_Private/DDFontKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDFontKit_Private; - PRODUCT_NAME = DDFontKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - DFE3DB0D7A79153CE9B1B4EE24EDD541 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 52B570D1BFFF775858C3A96626EEAB44 /* Alamofire.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/Alamofire/Alamofire-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - MODULEMAP_FILE = Headers/Public/Alamofire/Alamofire.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = Alamofire; - PRODUCT_NAME = Alamofire; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - E0AC88ADD941277FF7B427F755BC7B15 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 542580CD4322A21B74A4ECC00C42E348 /* DDPersistenceKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDPersistenceKit_Private/DDPersistenceKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDPersistenceKit_Private/DDPersistenceKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDPersistenceKit_Private; - PRODUCT_NAME = DDPersistenceKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - E1031BB4531D9A9132E269EA00AFF8B4 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1C06341F09287851FFC3FD086A6124E8 /* DDUtilsSwiftKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDUtilsSwiftKit_Private; - PRODUCT_NAME = DDUtilsSwiftKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - E21A5F2FEA6117A1960CA8D8DF5802CF /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BDFBA89DE326F0EFFD08C57490B7A03A /* DDLogKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDLogKit_Private/DDLogKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDLogKit_Private/DDLogKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDLogKit_Private; - PRODUCT_NAME = DDLogKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - E792F3F0C8FC014786AFA041A0E1A6A5 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F375C7DA720F6C0C81573E458E9A4020 /* Pods-OrderScheduling.prerelease.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*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-OrderScheduling/Pods-OrderScheduling.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - EA77E2D16CF855DB969ADBF9307BDD89 /* PreRelease */ = { - 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_PRE_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 = PreRelease; - }; - EC0B9BEDBAD3BA7D069F833CE7BD41B5 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 17888856B8B48807E8E714F1FA86DABD /* TYCyclePagerView.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/TYCyclePagerView/TYCyclePagerView-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - MODULEMAP_FILE = Headers/Public/TYCyclePagerView/TYCyclePagerView.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = TYCyclePagerView; - PRODUCT_NAME = TYCyclePagerView; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - ED6776014B1D7C96C20FC7409EE0CE27 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 40876F10DB0DAFC2BCF0D3D3FF006558 /* RxSwift.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/RxSwift/RxSwift-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MODULEMAP_FILE = Headers/Public/RxSwift/RxSwift.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = RxSwift; - PRODUCT_NAME = RxSwift; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.1; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - EEDB89A479687B1B952A7288C971BFB2 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 92A8C75F27C7753AED1D69771277142C /* DDDateKit_Private.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDDateKit_Private/DDDateKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDDateKit_Private/DDDateKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDDateKit_Private; - PRODUCT_NAME = DDDateKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - F4D09748EA447467AA488E65BF352248 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 4096897914F3034BAA58D3CE2344959E /* AMapTrack-NO-IDFA.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - F5CC28EC3299B709423FB6C60A226B24 /* PreRelease */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A6DCBE7BA32A6207103E3433A2D746EB /* AMapLocation-NO-IDFA.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = PreRelease; - }; - F6C7ECFF2293D4993D9933A5DE819A41 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 4670DDFAF1755ACD108E1DBC72E66685 /* DDFontKit_Private.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDFontKit_Private/DDFontKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDFontKit_Private/DDFontKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDFontKit_Private; - PRODUCT_NAME = DDFontKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - F7A68DC3E75DBA99B64E78F514059694 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 383F13627705F8373D8E826977B42A47 /* DDColorKit_Private.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDColorKit_Private/DDColorKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDColorKit_Private/DDColorKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDColorKit_Private; - PRODUCT_NAME = DDColorKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - F80564BD8F0491FD9F7BE7AFA7F24A40 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B1B3B78C24D91972E01D60EF4EFF9D2C /* PopupDialog.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/PopupDialog/PopupDialog-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - MODULEMAP_FILE = Headers/Public/PopupDialog/PopupDialog.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = PopupDialog; - PRODUCT_NAME = PopupDialog; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) RELEASE"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - FB30073E2C0CCAE442B4761A540433B1 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 26E44BAFA303D9F296CB04EEE6A486E2 /* DDZFPlayerKit_Private.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEVELOPMENT_TEAM = W4SG324NS4; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - GCC_PREFIX_HEADER = "Target Support Files/DDZFPlayerKit_Private/DDZFPlayerKit_Private-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MODULEMAP_FILE = Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DDZFPlayerKit_Private; - PRODUCT_NAME = DDZFPlayerKit_Private; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 018A1050B9A6148C61A6CA6E0549295C /* Build configuration list for PBXNativeTarget "Alamofire" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DFE3DB0D7A79153CE9B1B4EE24EDD541 /* Debug */, - 1DF8897E06F8071D42BAE4465121279D /* PreRelease */, - 64F8D025C0B4722D495C98EC8827C679 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 01BED254426C9C5978429C2EBF7A003D /* Build configuration list for PBXNativeTarget "DDUIGestureRecognizer" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DC44562C893BBD9E6500DE8495051652 /* Debug */, - 0CB1723AE73B5963CE93AED98ED6D6ED /* PreRelease */, - 99F4C308A2075AEDDE5F26F284DA3E2C /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 05B7CC068076863F33103323458DA634 /* Build configuration list for PBXAggregateTarget "Bugly" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 0F56E9EF4C4A8A2EFE063DB95981BAD1 /* Debug */, - 874D5ECFCBDE246920D02ADB76CDB268 /* PreRelease */, - C4050B58B3671D1B57C9668880DF1E94 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 097C79FA69DF7375991D9694E01952C1 /* Build configuration list for PBXNativeTarget "SwiftyRSA" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D95C529FCF4FDEA49C65D2E82670BCF /* Debug */, - C2CF9D64B823FDF5559C4A461A345DA5 /* PreRelease */, - 904AF2F6BEE0469BB3786D9548E42CC7 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 2502DBFD94504E58AACFE09B0E8730C7 /* Build configuration list for PBXAggregateTarget "JCore" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 0AECEEFF7929FBEFD97057F5F6DC8B2C /* Debug */, - 53DBDCA48029EDDC75E87A248B01458C /* PreRelease */, - 7DE63CFFD890B984947FC4B929ED850A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 25CFE62468C25C17F232DB520C79BE68 /* Build configuration list for PBXAggregateTarget "AMapNavi-NO-IDFA" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 15B7F84E39C93EFEBD8AD10B0FE0B047 /* Debug */, - 0781C02B9B1ABAB69E606763A1B452A0 /* PreRelease */, - 739DE83A94D5F3796DA470D04BDBA273 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 278981AA103168968C1076BB61FD151E /* Build configuration list for PBXNativeTarget "JXCategoryView" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 225716D671C2AF3962051A80830E0D98 /* Debug */, - 28351E0A3C97633F27A3A5C9C6F6ABF6 /* PreRelease */, - 3F958C3B78D47F9549C9023C4E5B4004 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 27CA1B235B0408A487B3D2403B6D6187 /* Build configuration list for PBXNativeTarget "RxRelay" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - AAD6F321785D34BD16EC6F2E6EBB3FD8 /* Debug */, - 93F02EE5EC44C8D3ACA38D0F7AE8D178 /* PreRelease */, - CADF7FA20B64C7AB1DC430F5F3A6743A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 2BBA364C66D6425D2066BED8F68D00CE /* Build configuration list for PBXNativeTarget "BRPickerView" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 44CB277F467617FACCA6BF598A034A65 /* Debug */, - 6140DDBB9B050ACCF404485A14F4FFE0 /* PreRelease */, - A91E6C1D84E7355205D2A116E4968450 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 3120225E7763A74BA53C664BD8B9E714 /* Build configuration list for PBXNativeTarget "DDNetworkingOfAlamofireKit_Private" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 29DB94002704203A0B4A69C3238100D9 /* Debug */, - B4FE51F4F207B2C4F54618B9A13E6CC8 /* PreRelease */, - 1495AF8B549792BF7912F5A1E1119712 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 32AC8C76A1CE8899EE309D593325A136 /* Build configuration list for PBXAggregateTarget "AMapTrack-NO-IDFA" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 6FA6D0B57F7F0945CD6226AD94C296BB /* Debug */, - F4D09748EA447467AA488E65BF352248 /* PreRelease */, - 18450C9EEFA1230D2952C8327442D5AE /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 33080B7EB2A16733916B557F95CDB25D /* Build configuration list for PBXNativeTarget "DDAudioPlayerKit_Private" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97407110C2616E82AAABA592E25F0B1E /* Debug */, - 03D5621DFAF33B3E865DA1A7AA59856A /* PreRelease */, - CA8EE889378675C9A5C3F87CF3F81643 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 336E075ABE2AD4F9E57E395E1E880209 /* Build configuration list for PBXNativeTarget "DDToastKit_Private" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4CFE159363E23D99B30DCFC1E84B6E21 /* Debug */, - 4D53E26FAE1ED5EB8E462D391AADD577 /* PreRelease */, - BB4FE9F0AC1A5ECF8D07C1690147AD45 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 3729326E71B6DC63C475DB2A2B4FEA64 /* Build configuration list for PBXNativeTarget "SwiftEntryKit" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4E026E4F4DA1962A2D7BA31CDB0CA756 /* Debug */, - D4C6CC16ECDE97BFB3D9B16E26F2DFAB /* PreRelease */, - 0B07FC7C2CBBECC1AEAB861B30DB8E43 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 374A4E3B7BD99D9F06FDEA7CC87E8850 /* Build configuration list for PBXNativeTarget "DynamicBlurView" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - CFBF0AB3A1C1AFE7DCEA152CB3F0CDBF /* Debug */, - 7D63FB0E7E7506708BD5F823B9463916 /* PreRelease */, - 814F2EABC15AA1599B495C2A2CFA8022 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 3B447F142DEA14A3711012439CBCE2AC /* Build configuration list for PBXNativeTarget "DDUtilsSwiftKit_Private" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 9372D9A03A0E88D0504BA7590C49DF48 /* Debug */, - AC2BF088394456C214FB78D9ED463DAE /* PreRelease */, - E1031BB4531D9A9132E269EA00AFF8B4 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 42640293F3A3C60B57F8E8CB6A88B983 /* Build configuration list for PBXAggregateTarget "JPush" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - A053864A4C7CCE4DF4E4A2087D9E4CC8 /* Debug */, - 577813FB86763A6ADFB7460A091E77EA /* PreRelease */, - B2155827CB60089BFE7E07CDD28D4162 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 42EC8F64C3654164552B3366BF3A3C6D /* Build configuration list for PBXAggregateTarget "AMapLocation-NO-IDFA" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 7D4FC5186D0C5815B2ABFC9323046C03 /* Debug */, - F5CC28EC3299B709423FB6C60A226B24 /* PreRelease */, - 226221FEFECAF478E4AD3C69CC522966 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8DE5143C03248BB6CD542DE3963D6F3A /* Debug */, - EA77E2D16CF855DB969ADBF9307BDD89 /* PreRelease */, - 9E406C6AAF85E580207CD97B0044DEAB /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 49DDBBC328AA5B7CDE3A461CA361D9BD /* Build configuration list for PBXNativeTarget "DDFontKit_Private" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - F6C7ECFF2293D4993D9933A5DE819A41 /* Debug */, - BE22D79D33B14C35C020D24E71C6CFEE /* PreRelease */, - DF2EED8A10FE5D2C9BC103161FA8FF7A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4CAF566969FC6727547C71532B4C8935 /* Build configuration list for PBXNativeTarget "ESTabBarController-swift" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - CA71D1250878D7A2F10FC80912091C9E /* Debug */, - 5859B1ED45373FA14A1E6451A262D675 /* PreRelease */, - 1170D4F6047D92FB103D8925261C4446 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 6EFF2AAACB8F237CB585C1B5C0A8EAE8 /* Build configuration list for PBXNativeTarget "DDControlsKit_Private" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 7136F591221AD5501E817C1B77F484ED /* Debug */, - 06902B9EA0B8701B1BBD382EF5B048E5 /* PreRelease */, - BC3A49A5F1543E29E82A94504188C974 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8E50EE297DCC05014C88F699A36DEF43 /* Build configuration list for PBXNativeTarget "DDCategoryKit_Private" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 0924432DC61373F45432E46A7A0F31A1 /* Debug */, - 0821F81F1C31A0D8294FD58FB0667D35 /* PreRelease */, - 98545824CDE7ABF6900E75D1A6C37E47 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 9112C4B5379A7A93828F210A5BCC34CC /* Build configuration list for PBXAggregateTarget "JPushExtension" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - CE71B62CECF863FCD01752A325065BB8 /* Debug */, - 062D9F2B9A556AF545F7D73B6BAD9E4C /* PreRelease */, - C7F778431CCFA2F935A0DB577516EBF7 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 9548A22CCE439C8FB7025321E7EBC912 /* Build configuration list for PBXAggregateTarget "AMapSearch-NO-IDFA" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 65B60F5572E5A88B96165BADCBB1BDA6 /* Debug */, - 6C81FF1694F67970213CC687C43B91A3 /* PreRelease */, - A794012D20A5CD57211E1D4516C55EE5 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - A1E6BD1F6C215CED34782F41B649F813 /* Build configuration list for PBXNativeTarget "Kingfisher" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 252AFF79657A12EA0F2D05BCA8BCF72C /* Debug */, - 263186E013F11491F5E484935ED3148D /* PreRelease */, - 7B6A78D46D28FC77A1C662278E8C009E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - A50EC8C9EBC4A6FEDDD2C848237DCBA3 /* Build configuration list for PBXNativeTarget "DDMAMapKit_Private" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 81778199DDA158D28CA32B744C1651D1 /* Debug */, - 48EB4E81196F9DCDB95B5C2D51E11A1D /* PreRelease */, - 28959E0767ADF85A6F17F70647B6F7D8 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - A5237F3BC6AF959C52BA85324715A761 /* Build configuration list for PBXNativeTarget "DDAutoUIKit_Private" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1A549D214D907E76BA47A41507492968 /* Debug */, - 934475E4DA2C0BABCCF26DBEB031FCF6 /* PreRelease */, - BDB50D1512B27C99FEC5AFD017B9C2FD /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - A8966CB70E87DF6729A33CEF31BFAFDF /* Build configuration list for PBXNativeTarget "DDUIKit" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - A84D1A77D947A2D2B8E5D54B2EA3DC14 /* Debug */, - 11EDDBA6D8DE247C3D269380A575CDF4 /* PreRelease */, - 96E335AB1050ECC308696A8784201197 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - AB35C9AC8A2A2E347541A085C64AA1B2 /* Build configuration list for PBXNativeTarget "TYCyclePagerView" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - EC0B9BEDBAD3BA7D069F833CE7BD41B5 /* Debug */, - 99CCD2E6A3652FCDF864FD2DF5B79D3C /* PreRelease */, - 524FE77734DC93C283D4E32516210D3C /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - ADFF35896AEF363010BAB413E213D106 /* Build configuration list for PBXNativeTarget "DDBasicControlsKit_Private" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 95F977185959B1C025A76CB343AF5CA8 /* Debug */, - 02EAF8F8D4762C1B17A8CEB476228273 /* PreRelease */, - 3810F09D10322B304912A8FC9D90FE73 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - AE7446B97173A69641977C096891CA8C /* Build configuration list for PBXNativeTarget "Pods-OrderSchedulingNotificationService" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 443AAC2D2192D04E03EB3B4A97A49FCC /* Debug */, - BF8138C640EDD6FDAD55B4BD35354072 /* PreRelease */, - 5776ED848C82B0310FAF78DF8E22D701 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - B4F27C1BD05C95157EA376F9A95D1D93 /* Build configuration list for PBXNativeTarget "DDColorKit_Private" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - F7A68DC3E75DBA99B64E78F514059694 /* Debug */, - 3281C76EA7D794732D228832C577826B /* PreRelease */, - 2853FEDC9CC66B9840B31219EECD4E5A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - B9B33C2A134C402CB943274AB39A370B /* Build configuration list for PBXNativeTarget "ZLPhotoBrowser" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C4879EE709DDBAAA009F3A5FB2176461 /* Debug */, - 6B9A53460BDAF5BE885221978932492C /* PreRelease */, - 1D6ECDD132EE5035CEB27FA70E194607 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - BD0248CAADFBD7D6BE758A542A5EA572 /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 63275981B15BE90F6912932D6156AC92 /* Debug */, - 034BA87C2C84A3F815BABA073747D950 /* PreRelease */, - D753782F97F4E74713668F63AC2264FC /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C0672E536A06498349A0C576A0004D4F /* Build configuration list for PBXNativeTarget "DDDateKit_Private" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 231DE093916EB01285DC4AECC16D44CF /* Debug */, - EEDB89A479687B1B952A7288C971BFB2 /* PreRelease */, - 17E9F697225BE4693A9A0CAAE767CFEB /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C4E4E4F823CED3B97CC2CFA09F4213F4 /* Build configuration list for PBXNativeTarget "DDZFPlayerKit_Private" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FB30073E2C0CCAE442B4761A540433B1 /* Debug */, - 9FC4AEA5BCE37566BA898173C24D35FB /* PreRelease */, - 00CFFB6AC18FFD8289A2D08ECB0D6317 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C8112CA141B15627612EA3F72A647CE1 /* Build configuration list for PBXNativeTarget "DDLogKit_Private" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 3E82EF80F3ACC6610CD959FD17245D53 /* Debug */, - E21A5F2FEA6117A1960CA8D8DF5802CF /* PreRelease */, - 24D7D357EF5DACAB8C59F250AC83420F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D4DF964BCCEC6C6DD17FC5511C5756AB /* Build configuration list for PBXNativeTarget "RxCocoa" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - A6B72CF8955C56DF71299106046D684E /* Debug */, - 7006E7DA87DBF9FB621E5E92F18FB641 /* PreRelease */, - 2C14C682F1AF1911E085FA9E288139D2 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D6C3D0A9E88D7C5652DB9B105A3B4CF4 /* Build configuration list for PBXNativeTarget "DDMAMapKit_Private-DDMAMapKit_Private" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 9D20A75E937BB9774107EE2096453A04 /* Debug */, - 5BB5E10A404E0A105E959D4D22CD06B8 /* PreRelease */, - 95A2B0B1F1013B66BBCC3BDD17A1A58A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D88767459E8E16207822B6DEB496E73F /* Build configuration list for PBXAggregateTarget "AMapFoundation-NO-IDFA" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C723089A4A8EECB528038729687D4337 /* Debug */, - 77BAB67F30880412AB4954F7FF0DE8DB /* PreRelease */, - 3EB0C0846EA6732314C5D69489AE15E2 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - DA982D34EAFA4B067C71E35A1DB515C9 /* Build configuration list for PBXNativeTarget "DDProgressHUDKit_Private" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C9B5A7A9EE2F32B23DF16125FBECDF13 /* Debug */, - D8C42B711DF611275F46D4A34ECE3773 /* PreRelease */, - 7004DBDA636C88E2F25FDB913BBCF872 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - E4C81922A6992D1B0B7E17B0C709906D /* Build configuration list for PBXNativeTarget "Pods-OrderScheduling" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8215DD463CCF8977E1AD7FEC6D594030 /* Debug */, - E792F3F0C8FC014786AFA041A0E1A6A5 /* PreRelease */, - 9B86043376CA2F95D8531E0A0889657F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - E55D47F313331FDABCD32857105AFD2C /* Build configuration list for PBXNativeTarget "RxSwift" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - ED6776014B1D7C96C20FC7409EE0CE27 /* Debug */, - D4E7C0BFC10A4C991D9744879B3B3D87 /* PreRelease */, - 1704F0EC987CC93E0AB9E671AB5625D2 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - EFE63C32122B5B979FBB92406341D163 /* Build configuration list for PBXNativeTarget "DDPersistenceKit_Private" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 6C3CC8E0B427ECC1DB4A52D26B813CEF /* Debug */, - E0AC88ADD941277FF7B427F755BC7B15 /* PreRelease */, - 1726DC34BF3C4756B065E2A908DCC12C /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - F13AD981FE58D26C2085CC0848B7F96C /* Build configuration list for PBXNativeTarget "PopupDialog" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 466EBD678661D52A379DAAE6AC65AEAD /* Debug */, - 7B0823ECDBE4CBBB30A637989E0F1800 /* PreRelease */, - F80564BD8F0491FD9F7BE7AFA7F24A40 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - F612754571F1DC598D4FEA34C4978659 /* Build configuration list for PBXNativeTarget "DDBasicControlsKit_Private-DDBaseViewController" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 826C56951F2AA52ACA6011106F8C484F /* Debug */, - B4C2592AF9B3E1CB38269A6341773DE2 /* PreRelease */, - CAB187C7B4254222CCA7BFFDC3B26BDA /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - F6BDC633A594EFE95B0539379C061D7A /* Build configuration list for PBXNativeTarget "MJRefresh" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4E8A37E39B95F86B5A498DEF72505CB1 /* Debug */, - 6E369200B22231B3ABCA75FDF3ABE62B /* PreRelease */, - 5425F23225AE92341F2558DA01812C57 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FACDACD41FFDF5C28F71071FFA4F3BF8 /* Build configuration list for PBXNativeTarget "DDWebImageKit_Private" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 30E9D8E42AE5CD6D5246F2627DD27E9F /* Debug */, - AE9BE5BF7D5EA18EDF75839085C706F5 /* PreRelease */, - 9C23F3BFA136C876EABD07FBA9320B77 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FB2322486CA3331AA94A9C04DF69318F /* Build configuration list for PBXNativeTarget "SnapKit" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 489E9830093FC6106F0F7738C189C410 /* Debug */, - DB575ABAA2A6F12E1E3403D17F082F82 /* PreRelease */, - 36020B1F0CA4D13823086273C510C125 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; -} diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/AMapFoundation-NO-IDFA.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/AMapFoundation-NO-IDFA.xcscheme deleted file mode 100644 index 8c96669..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/AMapFoundation-NO-IDFA.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/AMapLocation-NO-IDFA.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/AMapLocation-NO-IDFA.xcscheme deleted file mode 100644 index b73bac1..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/AMapLocation-NO-IDFA.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/AMapNavi-NO-IDFA.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/AMapNavi-NO-IDFA.xcscheme deleted file mode 100644 index 2695f53..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/AMapNavi-NO-IDFA.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/AMapSearch-NO-IDFA.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/AMapSearch-NO-IDFA.xcscheme deleted file mode 100644 index 9570b02..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/AMapSearch-NO-IDFA.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/AMapTrack-NO-IDFA.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/AMapTrack-NO-IDFA.xcscheme deleted file mode 100644 index 2e58b29..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/AMapTrack-NO-IDFA.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/Alamofire.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/Alamofire.xcscheme deleted file mode 100644 index 93c267f..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/Alamofire.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/BRPickerView.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/BRPickerView.xcscheme deleted file mode 100644 index 3e4c7ae..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/BRPickerView.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/Bugly.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/Bugly.xcscheme deleted file mode 100644 index 9865fe3..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/Bugly.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDAudioPlayerKit_Private.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDAudioPlayerKit_Private.xcscheme deleted file mode 100644 index 7ade889..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDAudioPlayerKit_Private.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDAutoUIKit_Private.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDAutoUIKit_Private.xcscheme deleted file mode 100644 index e4b93a9..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDAutoUIKit_Private.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDBasicControlsKit_Private-DDBaseViewController.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDBasicControlsKit_Private-DDBaseViewController.xcscheme deleted file mode 100644 index baeee6a..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDBasicControlsKit_Private-DDBaseViewController.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDBasicControlsKit_Private.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDBasicControlsKit_Private.xcscheme deleted file mode 100644 index 7a0a3fe..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDBasicControlsKit_Private.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDCategoryKit_Private.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDCategoryKit_Private.xcscheme deleted file mode 100644 index 9e163c8..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDCategoryKit_Private.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDColorKit_Private.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDColorKit_Private.xcscheme deleted file mode 100644 index 670b0ce..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDColorKit_Private.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDControlsKit_Private.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDControlsKit_Private.xcscheme deleted file mode 100644 index 8bafa45..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDControlsKit_Private.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDDateKit_Private.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDDateKit_Private.xcscheme deleted file mode 100644 index fc417a8..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDDateKit_Private.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDFontKit_Private.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDFontKit_Private.xcscheme deleted file mode 100644 index 853c6fa..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDFontKit_Private.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDLogKit_Private.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDLogKit_Private.xcscheme deleted file mode 100644 index 9d059b7..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDLogKit_Private.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDMAMapKit_Private-DDMAMapKit_Private.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDMAMapKit_Private-DDMAMapKit_Private.xcscheme deleted file mode 100644 index 2837070..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDMAMapKit_Private-DDMAMapKit_Private.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDMAMapKit_Private.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDMAMapKit_Private.xcscheme deleted file mode 100644 index 3fad3b4..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDMAMapKit_Private.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDNetworkingOfAlamofireKit_Private.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDNetworkingOfAlamofireKit_Private.xcscheme deleted file mode 100644 index 1c933f2..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDNetworkingOfAlamofireKit_Private.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDPersistenceKit_Private.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDPersistenceKit_Private.xcscheme deleted file mode 100644 index 7eb21ca..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDPersistenceKit_Private.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDProgressHUDKit_Private.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDProgressHUDKit_Private.xcscheme deleted file mode 100644 index 617b55b..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDProgressHUDKit_Private.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDToastKit_Private.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDToastKit_Private.xcscheme deleted file mode 100644 index 9a356d7..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDToastKit_Private.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDUIGestureRecognizer.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDUIGestureRecognizer.xcscheme deleted file mode 100644 index e852931..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDUIGestureRecognizer.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDUIKit.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDUIKit.xcscheme deleted file mode 100644 index 2795e51..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDUIKit.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDUtilsSwiftKit_Private.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDUtilsSwiftKit_Private.xcscheme deleted file mode 100644 index 81c0ab4..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDUtilsSwiftKit_Private.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDWebImageKit_Private.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDWebImageKit_Private.xcscheme deleted file mode 100644 index 85608f5..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDWebImageKit_Private.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDZFPlayerKit_Private.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDZFPlayerKit_Private.xcscheme deleted file mode 100644 index f168ee2..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DDZFPlayerKit_Private.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DynamicBlurView.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DynamicBlurView.xcscheme deleted file mode 100644 index 448714a..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/DynamicBlurView.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/ESTabBarController-swift.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/ESTabBarController-swift.xcscheme deleted file mode 100644 index ec4e62a..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/ESTabBarController-swift.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/IQKeyboardManagerSwift.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/IQKeyboardManagerSwift.xcscheme deleted file mode 100644 index 7d3c0eb..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/IQKeyboardManagerSwift.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/JCore.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/JCore.xcscheme deleted file mode 100644 index 236f5ca..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/JCore.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/JPush.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/JPush.xcscheme deleted file mode 100644 index a915901..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/JPush.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/JPushExtension.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/JPushExtension.xcscheme deleted file mode 100644 index 9d193aa..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/JPushExtension.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/JXCategoryView.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/JXCategoryView.xcscheme deleted file mode 100644 index 958bcaa..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/JXCategoryView.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/Kingfisher.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/Kingfisher.xcscheme deleted file mode 100644 index 429cf6e..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/Kingfisher.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/MJRefresh.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/MJRefresh.xcscheme deleted file mode 100644 index c875345..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/MJRefresh.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/Pods-OrderScheduling.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/Pods-OrderScheduling.xcscheme deleted file mode 100644 index cc332fa..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/Pods-OrderScheduling.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/Pods-OrderSchedulingNotificationService.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/Pods-OrderSchedulingNotificationService.xcscheme deleted file mode 100644 index e662413..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/Pods-OrderSchedulingNotificationService.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/PopupDialog.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/PopupDialog.xcscheme deleted file mode 100644 index 09685fc..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/PopupDialog.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/RxCocoa.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/RxCocoa.xcscheme deleted file mode 100644 index 04a12f7..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/RxCocoa.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/RxRelay.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/RxRelay.xcscheme deleted file mode 100644 index 83fb737..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/RxRelay.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/RxSwift.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/RxSwift.xcscheme deleted file mode 100644 index 4d3aefe..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/RxSwift.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/SnapKit.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/SnapKit.xcscheme deleted file mode 100644 index b02dac8..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/SnapKit.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/SwiftEntryKit.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/SwiftEntryKit.xcscheme deleted file mode 100644 index 2799349..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/SwiftEntryKit.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/SwiftyRSA.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/SwiftyRSA.xcscheme deleted file mode 100644 index 41e0d8e..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/SwiftyRSA.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/TYCyclePagerView.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/TYCyclePagerView.xcscheme deleted file mode 100644 index a43a055..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/TYCyclePagerView.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/ZLPhotoBrowser.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/ZLPhotoBrowser.xcscheme deleted file mode 100644 index 495cd49..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/ZLPhotoBrowser.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/xcschememanagement.plist b/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index f2efa21..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,256 +0,0 @@ - - - - - SchemeUserState - - AMapFoundation-NO-IDFA.xcscheme - - isShown - - - AMapLocation-NO-IDFA.xcscheme - - isShown - - - AMapNavi-NO-IDFA.xcscheme - - isShown - - - AMapSearch-NO-IDFA.xcscheme - - isShown - - - AMapTrack-NO-IDFA.xcscheme - - isShown - - - Alamofire.xcscheme - - isShown - - - BRPickerView.xcscheme - - isShown - - - Bugly.xcscheme - - isShown - - - DDAudioPlayerKit_Private.xcscheme - - isShown - - - DDAutoUIKit_Private.xcscheme - - isShown - - - DDBasicControlsKit_Private-DDBaseViewController.xcscheme - - isShown - - - DDBasicControlsKit_Private.xcscheme - - isShown - - - DDCategoryKit_Private.xcscheme - - isShown - - - DDColorKit_Private.xcscheme - - isShown - - - DDControlsKit_Private.xcscheme - - isShown - - - DDDateKit_Private.xcscheme - - isShown - - - DDFontKit_Private.xcscheme - - isShown - - - DDLogKit_Private.xcscheme - - isShown - - - DDMAMapKit_Private-DDMAMapKit_Private.xcscheme - - isShown - - - DDMAMapKit_Private.xcscheme - - isShown - - - DDNetworkingOfAlamofireKit_Private.xcscheme - - isShown - - - DDPersistenceKit_Private.xcscheme - - isShown - - - DDProgressHUDKit_Private.xcscheme - - isShown - - - DDToastKit_Private.xcscheme - - isShown - - - DDUIGestureRecognizer.xcscheme - - isShown - - - DDUIKit.xcscheme - - isShown - - - DDUtilsSwiftKit_Private.xcscheme - - isShown - - - DDWebImageKit_Private.xcscheme - - isShown - - - DDZFPlayerKit_Private.xcscheme - - isShown - - - DynamicBlurView.xcscheme - - isShown - - - ESTabBarController-swift.xcscheme - - isShown - - - IQKeyboardManagerSwift.xcscheme - - isShown - - - JCore.xcscheme - - isShown - - - JPush.xcscheme - - isShown - - - JPushExtension.xcscheme - - isShown - - - JXCategoryView.xcscheme - - isShown - - - Kingfisher.xcscheme - - isShown - - - MJRefresh.xcscheme - - isShown - - - Pods-OrderScheduling.xcscheme - - isShown - - - Pods-OrderSchedulingNotificationService.xcscheme - - isShown - - - PopupDialog.xcscheme - - isShown - - - RxCocoa.xcscheme - - isShown - - - RxRelay.xcscheme - - isShown - - - RxSwift.xcscheme - - isShown - - - SnapKit.xcscheme - - isShown - - - SwiftEntryKit.xcscheme - - isShown - - - SwiftyRSA.xcscheme - - isShown - - - TYCyclePagerView.xcscheme - - isShown - - - ZLPhotoBrowser.xcscheme - - isShown - - - - SuppressBuildableAutocreation - - - diff --git a/Pods/PopupDialog/LICENSE b/Pods/PopupDialog/LICENSE deleted file mode 100644 index 6431917..0000000 --- a/Pods/PopupDialog/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -Author - Martin Wildfeuer (http://www.mwfire.de) - -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. diff --git a/Pods/PopupDialog/PopupDialog/Classes/InteractiveTransition.swift b/Pods/PopupDialog/PopupDialog/Classes/InteractiveTransition.swift deleted file mode 100644 index 0f9f2f4..0000000 --- a/Pods/PopupDialog/PopupDialog/Classes/InteractiveTransition.swift +++ /dev/null @@ -1,86 +0,0 @@ -// -// PopupDialogInteractiveTransition.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// 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 - -// Handles interactive transition triggered via pan gesture recognizer on dialog -final internal class InteractiveTransition: UIPercentDrivenInteractiveTransition { - - // If the interactive transition was started - var hasStarted = false - - // If the interactive transition - var shouldFinish = false - - // The view controller containing the views - // with attached gesture recognizers - weak var viewController: UIViewController? - - @objc func handlePan(_ sender: UIPanGestureRecognizer) { - - guard let vc = viewController else { return } - - guard let progress = calculateProgress(sender: sender) else { return } - - switch sender.state { - case .began: - hasStarted = true - vc.dismiss(animated: true, completion: nil) - case .changed: - shouldFinish = progress > 0.3 - update(progress) - case .cancelled: - hasStarted = false - cancel() - case .ended: - hasStarted = false - completionSpeed = 0.55 - shouldFinish ? finish() : cancel() - default: - break - } - } -} - -internal extension InteractiveTransition { - - /*! - Translates the pan gesture recognizer position to the progress percentage - - parameter sender: A UIPanGestureRecognizer - - returns: Progress - */ - func calculateProgress(sender: UIPanGestureRecognizer) -> CGFloat? { - guard let vc = viewController else { return nil } - - // http://www.thorntech.com/2016/02/ios-tutorial-close-modal-dragging/ - let translation = sender.translation(in: vc.view) - let verticalMovement = translation.y / vc.view.bounds.height - let downwardMovement = fmaxf(Float(verticalMovement), 0.0) - let downwardMovementPercent = fminf(downwardMovement, 1.0) - let progress = CGFloat(downwardMovementPercent) - - return progress - } -} diff --git a/Pods/PopupDialog/PopupDialog/Classes/PopupDialog+Keyboard.swift b/Pods/PopupDialog/PopupDialog/Classes/PopupDialog+Keyboard.swift deleted file mode 100644 index 38ed6df..0000000 --- a/Pods/PopupDialog/PopupDialog/Classes/PopupDialog+Keyboard.swift +++ /dev/null @@ -1,132 +0,0 @@ -// -// PopupDialog+Keyboard.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// 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 -import UIKit - -/// This extension is designed to handle dialog positioning -/// if a keyboard is displayed while the popup is on top -internal extension PopupDialog { - - // MARK: - Keyboard & orientation observers - - /*! Add obserservers for UIKeyboard notifications */ - func addObservers() { - NotificationCenter.default.addObserver(self, selector: #selector(orientationChanged), - name: UIDevice.orientationDidChangeNotification, - object: nil) - - NotificationCenter.default.addObserver(self, - selector: #selector(keyboardWillShow), - name: UIResponder.keyboardWillShowNotification, - object: nil) - - NotificationCenter.default.addObserver(self, - selector: #selector(keyboardWillHide), - name: UIResponder.keyboardWillHideNotification, - object: nil) - - NotificationCenter.default.addObserver(self, - selector: #selector(keyboardWillChangeFrame), - name: UIResponder.keyboardWillChangeFrameNotification, - object: nil) - } - - /*! Remove observers */ - func removeObservers() { - NotificationCenter.default.removeObserver(self, - name: UIDevice.orientationDidChangeNotification, - object: nil) - - NotificationCenter.default.removeObserver(self, - name: UIResponder.keyboardWillShowNotification, - object: nil) - - NotificationCenter.default.removeObserver(self, - name: UIResponder.keyboardWillHideNotification, - object: nil) - - NotificationCenter.default.removeObserver(self, - name: UIResponder.keyboardWillChangeFrameNotification, - object: nil) - } - - // MARK: - Actions - - /*! - Keyboard will show notification listener - - parameter notification: NSNotification - */ - @objc fileprivate func keyboardWillShow(_ notification: Notification) { - guard isTopAndVisible else { return } - keyboardShown = true - centerPopup() - } - - /*! - Keyboard will hide notification listener - - parameter notification: NSNotification - */ - @objc fileprivate func keyboardWillHide(_ notification: Notification) { - guard isTopAndVisible else { return } - keyboardShown = false - centerPopup() - } - - /*! - Keyboard will change frame notification listener - - parameter notification: NSNotification - */ - @objc fileprivate func keyboardWillChangeFrame(_ notification: Notification) { - guard let keyboardRect = (notification as NSNotification).userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { - return - } - keyboardHeight = keyboardRect.cgRectValue.height - } - - /*! - Listen to orientation changes - - parameter notification: NSNotification - */ - @objc fileprivate func orientationChanged(_ notification: Notification) { - if keyboardShown { centerPopup() } - } - - fileprivate func centerPopup() { - - // Make sure keyboard should reposition on keayboard notifications - guard keyboardShiftsView else { return } - - // Make sure a valid keyboard height is available - guard let keyboardHeight = keyboardHeight else { return } - - // Calculate new center of shadow background - let popupCenter = keyboardShown ? keyboardHeight / -2 : 0 - - // Reposition and animate - popupContainerView.centerYConstraint?.constant = popupCenter - popupContainerView.pv_layoutIfNeededAnimated() - } -} diff --git a/Pods/PopupDialog/PopupDialog/Classes/PopupDialog.swift b/Pods/PopupDialog/PopupDialog/Classes/PopupDialog.swift deleted file mode 100644 index 69e7a00..0000000 --- a/Pods/PopupDialog/PopupDialog/Classes/PopupDialog.swift +++ /dev/null @@ -1,342 +0,0 @@ -// -// PopupDialog.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// 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 -import UIKit - -/// Creates a Popup dialog similar to UIAlertController -final public class PopupDialog: UIViewController { - - // MARK: Private / Internal - - /// First init flag - fileprivate var initialized = false - - /// StatusBar display related - fileprivate let hideStatusBar: Bool - fileprivate var statusBarShouldBeHidden: Bool = false - - /// Width for iPad displays - fileprivate let preferredWidth: CGFloat - - /// The completion handler - fileprivate var completion: (() -> Void)? - - /// The custom transition presentation manager - fileprivate var presentationManager: PresentationManager! - - /// Interactor class for pan gesture dismissal - fileprivate lazy var interactor = InteractiveTransition() - - /// Returns the controllers view - internal var popupContainerView: PopupDialogContainerView { - return view as! PopupDialogContainerView // swiftlint:disable:this force_cast - } - - /// The set of buttons - fileprivate var buttons = [PopupDialogButton]() - - /// Whether keyboard has shifted view - internal var keyboardShown = false - - /// Keyboard height - internal var keyboardHeight: CGFloat? - - // MARK: Public - - /// The content view of the popup dialog - public var viewController: UIViewController - - /// Whether or not to shift view for keyboard display - public var keyboardShiftsView = true - - // MARK: - Initializers - - /*! - Creates a standard popup dialog with title, message and image field - - - parameter title: The dialog title - - parameter message: The dialog message - - parameter image: The dialog image - - parameter buttonAlignment: The dialog button alignment - - parameter transitionStyle: The dialog transition style - - parameter preferredWidth: The preferred width for iPad screens - - parameter tapGestureDismissal: Indicates if dialog can be dismissed via tap gesture - - parameter panGestureDismissal: Indicates if dialog can be dismissed via pan gesture - - parameter hideStatusBar: Whether to hide the status bar on PopupDialog presentation - - parameter completion: Completion block invoked when dialog was dismissed - - - returns: Popup dialog default style - */ - @objc public convenience init( - title: String?, - message: String?, - image: UIImage? = nil, - buttonAlignment: NSLayoutConstraint.Axis = .vertical, - transitionStyle: PopupDialogTransitionStyle = .bounceUp, - preferredWidth: CGFloat = 340, - tapGestureDismissal: Bool = true, - panGestureDismissal: Bool = true, - hideStatusBar: Bool = false, - completion: (() -> Void)? = nil) { - - // Create and configure the standard popup dialog view - let viewController = PopupDialogDefaultViewController() - viewController.titleText = title - viewController.messageText = message - viewController.image = image - - // Call designated initializer - self.init(viewController: viewController, - buttonAlignment: buttonAlignment, - transitionStyle: transitionStyle, - preferredWidth: preferredWidth, - tapGestureDismissal: tapGestureDismissal, - panGestureDismissal: panGestureDismissal, - hideStatusBar: hideStatusBar, - completion: completion) - } - - /*! - Creates a popup dialog containing a custom view - - - parameter viewController: A custom view controller to be displayed - - parameter buttonAlignment: The dialog button alignment - - parameter transitionStyle: The dialog transition style - - parameter preferredWidth: The preferred width for iPad screens - - parameter tapGestureDismissal: Indicates if dialog can be dismissed via tap gesture - - parameter panGestureDismissal: Indicates if dialog can be dismissed via pan gesture - - parameter hideStatusBar: Whether to hide the status bar on PopupDialog presentation - - parameter completion: Completion block invoked when dialog was dismissed - - - returns: Popup dialog with a custom view controller - */ - @objc public init( - viewController: UIViewController, - buttonAlignment: NSLayoutConstraint.Axis = .vertical, - transitionStyle: PopupDialogTransitionStyle = .bounceUp, - preferredWidth: CGFloat = 340, - tapGestureDismissal: Bool = true, - panGestureDismissal: Bool = true, - hideStatusBar: Bool = false, - completion: (() -> Void)? = nil) { - - self.viewController = viewController - self.preferredWidth = preferredWidth - self.hideStatusBar = hideStatusBar - self.completion = completion - super.init(nibName: nil, bundle: nil) - - // Init the presentation manager - presentationManager = PresentationManager(transitionStyle: transitionStyle, interactor: interactor) - - // Assign the interactor view controller - interactor.viewController = self - - // Define presentation styles - transitioningDelegate = presentationManager - modalPresentationStyle = .custom - - // StatusBar setup - modalPresentationCapturesStatusBarAppearance = true - - // Add our custom view to the container - addChild(viewController) - popupContainerView.stackView.insertArrangedSubview(viewController.view, at: 0) - popupContainerView.buttonStackView.axis = buttonAlignment - viewController.didMove(toParent: self) - - // Allow for dialog dismissal on background tap - if tapGestureDismissal { - let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap)) - tapRecognizer.cancelsTouchesInView = false - popupContainerView.addGestureRecognizer(tapRecognizer) - } - // Allow for dialog dismissal on dialog pan gesture - if panGestureDismissal { - let panRecognizer = UIPanGestureRecognizer(target: interactor, action: #selector(InteractiveTransition.handlePan)) - panRecognizer.cancelsTouchesInView = false - popupContainerView.stackView.addGestureRecognizer(panRecognizer) - } - } - - // Init with coder not implemented - required public init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - View life cycle - - /// Replaces controller view with popup view - public override func loadView() { - view = PopupDialogContainerView(frame: UIScreen.main.bounds, preferredWidth: preferredWidth) - } - - public override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - addObservers() - - guard !initialized else { return } - appendButtons() - initialized = true - } - - public override func viewDidAppear(_ animated: Bool) { - super.viewDidAppear(animated) - - statusBarShouldBeHidden = hideStatusBar - UIView.animate(withDuration: 0.15) { - self.setNeedsStatusBarAppearanceUpdate() - } - } - - public override func viewWillDisappear(_ animated: Bool) { - super.viewWillDisappear(animated) - removeObservers() - } - - deinit { - completion?() - completion = nil - } - - // MARK: - Dismissal related - - @objc fileprivate func handleTap(_ sender: UITapGestureRecognizer) { - - // Make sure it's not a tap on the dialog but the background - let point = sender.location(in: popupContainerView.stackView) - guard !popupContainerView.stackView.point(inside: point, with: nil) else { return } - dismiss() - } - - /*! - Dismisses the popup dialog - */ - @objc public func dismiss(_ completion: (() -> Void)? = nil) { - self.dismiss(animated: true) { - completion?() - } - } - - // MARK: - Button related - - /*! - Appends the buttons added to the popup dialog - to the placeholder stack view - */ - fileprivate func appendButtons() { - - // Add action to buttons - let stackView = popupContainerView.stackView - let buttonStackView = popupContainerView.buttonStackView - if buttons.isEmpty { - stackView.removeArrangedSubview(popupContainerView.buttonStackView) - } - - for (index, button) in buttons.enumerated() { - button.needsLeftSeparator = buttonStackView.axis == .horizontal && index > 0 - buttonStackView.addArrangedSubview(button) - button.addTarget(self, action: #selector(buttonTapped(_:)), for: .touchUpInside) - } - } - - /*! - Adds a single PopupDialogButton to the Popup dialog - - parameter button: A PopupDialogButton instance - */ - @objc public func addButton(_ button: PopupDialogButton) { - buttons.append(button) - } - - /*! - Adds an array of PopupDialogButtons to the Popup dialog - - parameter buttons: A list of PopupDialogButton instances - */ - @objc public func addButtons(_ buttons: [PopupDialogButton]) { - self.buttons += buttons - } - - /// Calls the action closure of the button instance tapped - @objc fileprivate func buttonTapped(_ button: PopupDialogButton) { - if button.dismissOnTap { - dismiss({ button.buttonAction?() }) - } else { - button.buttonAction?() - } - } - - /*! - Simulates a button tap for the given index - Makes testing a breeze - - parameter index: The index of the button to tap - */ - public func tapButtonWithIndex(_ index: Int) { - let button = buttons[index] - button.buttonAction?() - } - - // MARK: - StatusBar display related - - public override var prefersStatusBarHidden: Bool { - return statusBarShouldBeHidden - } - - public override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation { - return .slide - } -} - -// MARK: - View proxy values - -extension PopupDialog { - - /// The button alignment of the alert dialog - @objc public var buttonAlignment: NSLayoutConstraint.Axis { - get { - return popupContainerView.buttonStackView.axis - } - set { - popupContainerView.buttonStackView .axis = newValue - popupContainerView.pv_layoutIfNeededAnimated() - } - } - - /// The transition style - @objc public var transitionStyle: PopupDialogTransitionStyle { - get { return presentationManager.transitionStyle } - set { presentationManager.transitionStyle = newValue } - } -} - -// MARK: - Shake - -extension PopupDialog { - - /// Performs a shake animation on the dialog - @objc public func shake() { - popupContainerView.pv_shake() - } -} diff --git a/Pods/PopupDialog/PopupDialog/Classes/PopupDialogButton.swift b/Pods/PopupDialog/PopupDialog/Classes/PopupDialogButton.swift deleted file mode 100644 index 774213b..0000000 --- a/Pods/PopupDialog/PopupDialog/Classes/PopupDialogButton.swift +++ /dev/null @@ -1,166 +0,0 @@ -// -// PopupDialogButton.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// 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 -import UIKit - -/// Represents the default button for the popup dialog -open class PopupDialogButton: UIButton { - - public typealias PopupDialogButtonAction = () -> Void - - // MARK: Public - - /// The font and size of the button title - @objc open dynamic var titleFont: UIFont? { - get { return titleLabel?.font } - set { titleLabel?.font = newValue } - } - - /// The height of the button - @objc open dynamic var buttonHeight: Int - - /// The title color of the button - @objc open dynamic var titleColor: UIColor? { - get { return self.titleColor(for: UIControl.State()) } - set { setTitleColor(newValue, for: UIControl.State()) } - } - - /// The background color of the button - @objc open dynamic var buttonColor: UIColor? { - get { return backgroundColor } - set { backgroundColor = newValue } - } - - /// The separator color of this button - @objc open dynamic var separatorColor: UIColor? { - get { return separator.backgroundColor } - set { - separator.backgroundColor = newValue - leftSeparator.backgroundColor = newValue - } - } - - /// Default appearance of the button - open var defaultTitleFont = UIFont.systemFont(ofSize: 14) - open var defaultTitleColor = UIColor(red: 0.25, green: 0.53, blue: 0.91, alpha: 1) - open var defaultButtonColor = UIColor.clear - open var defaultSeparatorColor = UIColor(white: 0.9, alpha: 1) - - /// Whether button should dismiss popup when tapped - @objc open var dismissOnTap = true - - /// The action called when the button is tapped - open fileprivate(set) var buttonAction: PopupDialogButtonAction? - - // MARK: Private - - fileprivate lazy var separator: UIView = { - let line = UIView(frame: .zero) - line.translatesAutoresizingMaskIntoConstraints = false - return line - }() - - fileprivate lazy var leftSeparator: UIView = { - let line = UIView(frame: .zero) - line.translatesAutoresizingMaskIntoConstraints = false - line.alpha = 0 - return line - }() - - // MARK: Internal - - internal var needsLeftSeparator: Bool = false { - didSet { - leftSeparator.alpha = needsLeftSeparator ? 1.0 : 0.0 - } - } - - // MARK: Initializers - - /*! - Creates a button that can be added to the popup dialog - - - parameter title: The button title - - parameter dismisssOnTap: Whether a tap automatically dismisses the dialog - - parameter action: The action closure - - - returns: PopupDialogButton - */ - @objc public init(title: String, height: Int = 45, dismissOnTap: Bool = true, action: PopupDialogButtonAction?) { - - // Assign the button height - buttonHeight = height - - // Assign the button action - buttonAction = action - - super.init(frame: .zero) - - // Set the button title - setTitle(title, for: UIControl.State()) - - self.dismissOnTap = dismissOnTap - - // Setup the views - setupView() - } - - required public init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: View setup - - open func setupView() { - - // Default appearance - setTitleColor(defaultTitleColor, for: UIControl.State()) - titleLabel?.font = defaultTitleFont - backgroundColor = defaultButtonColor - separator.backgroundColor = defaultSeparatorColor - leftSeparator.backgroundColor = defaultSeparatorColor - - // Add and layout views - addSubview(separator) - addSubview(leftSeparator) - - let views = ["separator": separator, "leftSeparator": leftSeparator, "button": self] - let metrics = ["buttonHeight": buttonHeight] - var constraints = [NSLayoutConstraint]() - constraints += NSLayoutConstraint.constraints(withVisualFormat: "V:[button(buttonHeight)]", options: [], metrics: metrics, views: views) - constraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|[separator]|", options: [], metrics: nil, views: views) - constraints += NSLayoutConstraint.constraints(withVisualFormat: "V:|[separator(1)]", options: [], metrics: nil, views: views) - constraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|[leftSeparator(1)]", options: [], metrics: nil, views: views) - constraints += NSLayoutConstraint.constraints(withVisualFormat: "V:|[leftSeparator]|", options: [], metrics: nil, views: views) - NSLayoutConstraint.activate(constraints) - } - - open override var isHighlighted: Bool { - didSet { - isHighlighted ? pv_fade(.out, 0.5) : pv_fade(.in, 1.0) - } - } -} diff --git a/Pods/PopupDialog/PopupDialog/Classes/PopupDialogContainerView.swift b/Pods/PopupDialog/PopupDialog/Classes/PopupDialogContainerView.swift deleted file mode 100644 index 4f36e6c..0000000 --- a/Pods/PopupDialog/PopupDialog/Classes/PopupDialogContainerView.swift +++ /dev/null @@ -1,197 +0,0 @@ -// -// PopupDialogContainerView.swift -// Pods -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// 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 -import UIKit - -/// The main view of the popup dialog -final public class PopupDialogContainerView: UIView { - - // MARK: - Appearance - - /// The background color of the popup dialog - override public dynamic var backgroundColor: UIColor? { - get { return container.backgroundColor } - set { container.backgroundColor = newValue } - } - - /// The corner radius of the popup view - @objc public dynamic var cornerRadius: Float { - get { return Float(shadowContainer.layer.cornerRadius) } - set { - let radius = CGFloat(newValue) - shadowContainer.layer.cornerRadius = radius - container.layer.cornerRadius = radius - } - } - - // MARK: Shadow related - - /// Enable / disable shadow rendering of the container - @objc public dynamic var shadowEnabled: Bool { - get { return shadowContainer.layer.shadowRadius > 0 } - set { shadowContainer.layer.shadowRadius = newValue ? shadowRadius : 0 } - } - - /// Color of the container shadow - @objc public dynamic var shadowColor: UIColor? { - get { - guard let color = shadowContainer.layer.shadowColor else { - return nil - } - return UIColor(cgColor: color) - } - set { shadowContainer.layer.shadowColor = newValue?.cgColor } - } - - /// Radius of the container shadow - @objc public dynamic var shadowRadius: CGFloat { - get { return shadowContainer.layer.shadowRadius } - set { shadowContainer.layer.shadowRadius = newValue } - } - - /// Opacity of the the container shadow - @objc public dynamic var shadowOpacity: Float { - get { return shadowContainer.layer.shadowOpacity } - set { shadowContainer.layer.shadowOpacity = newValue } - } - - /// Offset of the the container shadow - @objc public dynamic var shadowOffset: CGSize { - get { return shadowContainer.layer.shadowOffset } - set { shadowContainer.layer.shadowOffset = newValue } - } - - /// Path of the the container shadow - @objc public dynamic var shadowPath: CGPath? { - get { return shadowContainer.layer.shadowPath} - set { shadowContainer.layer.shadowPath = newValue } - } - - // MARK: - Views - - /// The shadow container is the basic view of the PopupDialog - /// As it does not clip subviews, a shadow can be applied to it - internal lazy var shadowContainer: UIView = { - let shadowContainer = UIView(frame: .zero) - shadowContainer.translatesAutoresizingMaskIntoConstraints = false - shadowContainer.backgroundColor = UIColor.clear - shadowContainer.layer.shadowColor = UIColor.black.cgColor - shadowContainer.layer.shadowRadius = 5 - shadowContainer.layer.shadowOpacity = 0.4 - shadowContainer.layer.shadowOffset = CGSize(width: 0, height: 0) - shadowContainer.layer.cornerRadius = 4 - return shadowContainer - }() - - /// The container view is a child of shadowContainer and contains - /// all other views. It clips to bounds so cornerRadius can be set - internal lazy var container: UIView = { - let container = UIView(frame: .zero) - container.translatesAutoresizingMaskIntoConstraints = false - container.backgroundColor = UIColor.white - container.clipsToBounds = true - container.layer.cornerRadius = 4 - return container - }() - - // The container stack view for buttons - internal lazy var buttonStackView: UIStackView = { - let buttonStackView = UIStackView() - buttonStackView.translatesAutoresizingMaskIntoConstraints = false - buttonStackView.distribution = .fillEqually - buttonStackView.spacing = 0 - return buttonStackView - }() - - // The main stack view, containing all relevant views - internal lazy var stackView: UIStackView = { - let stackView = UIStackView(arrangedSubviews: [self.buttonStackView]) - stackView.translatesAutoresizingMaskIntoConstraints = false - stackView.axis = .vertical - stackView.spacing = 0 - return stackView - }() - - // The preferred width for iPads - fileprivate let preferredWidth: CGFloat - - // MARK: - Constraints - - /// The center constraint of the shadow container - internal var centerYConstraint: NSLayoutConstraint? - - // MARK: - Initializers - - internal init(frame: CGRect, preferredWidth: CGFloat) { - self.preferredWidth = preferredWidth - super.init(frame: frame) - setupViews() - } - - required public init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - View setup - - internal func setupViews() { - - // Add views - addSubview(shadowContainer) - shadowContainer.addSubview(container) - container.addSubview(stackView) - - // Layout views - let views = ["shadowContainer": shadowContainer, "container": container, "stackView": stackView] - var constraints = [NSLayoutConstraint]() - - // Shadow container constraints - if UIDevice.current.userInterfaceIdiom == UIUserInterfaceIdiom.pad { - let metrics = ["preferredWidth": preferredWidth] - constraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|-(>=40)-[shadowContainer(==preferredWidth@900)]-(>=40)-|", options: [], metrics: metrics, views: views) - } else { - constraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|-(>=10,==20@900)-[shadowContainer(<=340,>=300)]-(>=10,==20@900)-|", options: [], metrics: nil, views: views) - } - constraints += [NSLayoutConstraint(item: shadowContainer, attribute: .centerX, relatedBy: .equal, toItem: self, attribute: .centerX, multiplier: 1, constant: 0)] - centerYConstraint = NSLayoutConstraint(item: shadowContainer, attribute: .centerY, relatedBy: .equal, toItem: self, attribute: .centerY, multiplier: 1, constant: 0) - - if let centerYConstraint = centerYConstraint { - constraints.append(centerYConstraint) - } - - // Container constraints - constraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|[container]|", options: [], metrics: nil, views: views) - constraints += NSLayoutConstraint.constraints(withVisualFormat: "V:|[container]|", options: [], metrics: nil, views: views) - - // Main stack view constraints - constraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|[stackView]|", options: [], metrics: nil, views: views) - constraints += NSLayoutConstraint.constraints(withVisualFormat: "V:|[stackView]|", options: [], metrics: nil, views: views) - - // Activate constraints - NSLayoutConstraint.activate(constraints) - } -} diff --git a/Pods/PopupDialog/PopupDialog/Classes/PopupDialogDefaultButtons.swift b/Pods/PopupDialog/PopupDialog/Classes/PopupDialogDefaultButtons.swift deleted file mode 100644 index 0bb130f..0000000 --- a/Pods/PopupDialog/PopupDialog/Classes/PopupDialogDefaultButtons.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// PopupDialogDefaultButtons.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// 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 -import UIKit - -// MARK: Default button - -/// Represents the default button for the popup dialog -public final class DefaultButton: PopupDialogButton {} - -// MARK: Cancel button - -/// Represents a cancel button for the popup dialog -public final class CancelButton: PopupDialogButton { - - override public func setupView() { - defaultTitleColor = UIColor.lightGray - super.setupView() - } -} - -// MARK: destructive button - -/// Represents a destructive button for the popup dialog -public final class DestructiveButton: PopupDialogButton { - - override public func setupView() { - defaultTitleColor = UIColor.red - super.setupView() - } -} diff --git a/Pods/PopupDialog/PopupDialog/Classes/PopupDialogDefaultView.swift b/Pods/PopupDialog/PopupDialog/Classes/PopupDialogDefaultView.swift deleted file mode 100644 index 7107222..0000000 --- a/Pods/PopupDialog/PopupDialog/Classes/PopupDialogDefaultView.swift +++ /dev/null @@ -1,148 +0,0 @@ -// -// PopupDialogView.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// 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 -import UIKit - -/// The main view of the popup dialog -final public class PopupDialogDefaultView: UIView { - - // MARK: - Appearance - - /// The font and size of the title label - @objc public dynamic var titleFont: UIFont { - get { return titleLabel.font } - set { titleLabel.font = newValue } - } - - /// The color of the title label - @objc public dynamic var titleColor: UIColor? { - get { return titleLabel.textColor } - set { titleLabel.textColor = newValue } - } - - /// The text alignment of the title label - @objc public dynamic var titleTextAlignment: NSTextAlignment { - get { return titleLabel.textAlignment } - set { titleLabel.textAlignment = newValue } - } - - /// The font and size of the body label - @objc public dynamic var messageFont: UIFont { - get { return messageLabel.font } - set { messageLabel.font = newValue } - } - - /// The color of the message label - @objc public dynamic var messageColor: UIColor? { - get { return messageLabel.textColor } - set { messageLabel.textColor = newValue} - } - - /// The text alignment of the message label - @objc public dynamic var messageTextAlignment: NSTextAlignment { - get { return messageLabel.textAlignment } - set { messageLabel.textAlignment = newValue } - } - - // MARK: - Views - - /// The view that will contain the image, if set - internal lazy var imageView: UIImageView = { - let imageView = UIImageView(frame: .zero) - imageView.translatesAutoresizingMaskIntoConstraints = false - imageView.contentMode = .scaleAspectFill - imageView.clipsToBounds = true - return imageView - }() - - /// The title label of the dialog - internal lazy var titleLabel: UILabel = { - let titleLabel = UILabel(frame: .zero) - titleLabel.translatesAutoresizingMaskIntoConstraints = false - titleLabel.numberOfLines = 0 - titleLabel.textAlignment = .center - titleLabel.textColor = UIColor(white: 0.4, alpha: 1) - titleLabel.font = .boldSystemFont(ofSize: 14) - return titleLabel - }() - - /// The message label of the dialog - internal lazy var messageLabel: UILabel = { - let messageLabel = UILabel(frame: .zero) - messageLabel.translatesAutoresizingMaskIntoConstraints = false - messageLabel.numberOfLines = 0 - messageLabel.textAlignment = .center - messageLabel.textColor = UIColor(white: 0.6, alpha: 1) - messageLabel.font = .systemFont(ofSize: 14) - return messageLabel - }() - - /// The height constraint of the image view, 0 by default - internal var imageHeightConstraint: NSLayoutConstraint? - - // MARK: - Initializers - - internal override init(frame: CGRect) { - super.init(frame: frame) - setupViews() - } - - required public init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - View setup - - internal func setupViews() { - - // Self setup - translatesAutoresizingMaskIntoConstraints = false - - // Add views - addSubview(imageView) - addSubview(titleLabel) - addSubview(messageLabel) - - // Layout views - let views = ["imageView": imageView, "titleLabel": titleLabel, "messageLabel": messageLabel] as [String: Any] - var constraints = [NSLayoutConstraint]() - - constraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|[imageView]|", options: [], metrics: nil, views: views) - constraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|-(==20@900)-[titleLabel]-(==20@900)-|", options: [], metrics: nil, views: views) - constraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|-(==20@900)-[messageLabel]-(==20@900)-|", options: [], metrics: nil, views: views) - constraints += NSLayoutConstraint.constraints(withVisualFormat: "V:|[imageView]-(==30@900)-[titleLabel]-(==8@900)-[messageLabel]-(==30@900)-|", options: [], metrics: nil, views: views) - - // ImageView height constraint - imageHeightConstraint = NSLayoutConstraint(item: imageView, attribute: .height, relatedBy: .equal, toItem: imageView, attribute: .height, multiplier: 0, constant: 0) - - if let imageHeightConstraint = imageHeightConstraint { - constraints.append(imageHeightConstraint) - } - - // Activate constraints - NSLayoutConstraint.activate(constraints) - } -} diff --git a/Pods/PopupDialog/PopupDialog/Classes/PopupDialogDefaultViewController.swift b/Pods/PopupDialog/PopupDialog/Classes/PopupDialogDefaultViewController.swift deleted file mode 100644 index cdda411..0000000 --- a/Pods/PopupDialog/PopupDialog/Classes/PopupDialogDefaultViewController.swift +++ /dev/null @@ -1,133 +0,0 @@ -// -// PopupDialogDefaultViewController.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// 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 - -final public class PopupDialogDefaultViewController: UIViewController { - - public var standardView: PopupDialogDefaultView { - return view as! PopupDialogDefaultView // swiftlint:disable:this force_cast - } - - override public func loadView() { - super.loadView() - view = PopupDialogDefaultView(frame: .zero) - } -} - -public extension PopupDialogDefaultViewController { - - // MARK: - Setter / Getter - - // MARK: Content - - /// The dialog image - var image: UIImage? { - get { return standardView.imageView.image } - set { - standardView.imageView.image = newValue - standardView.imageHeightConstraint?.constant = standardView.imageView.pv_heightForImageView() - } - } - - /// The title text of the dialog - var titleText: String? { - get { return standardView.titleLabel.text } - set { - standardView.titleLabel.text = newValue - standardView.pv_layoutIfNeededAnimated() - } - } - - /// The message text of the dialog - var messageText: String? { - get { return standardView.messageLabel.text } - set { - standardView.messageLabel.text = newValue - standardView.pv_layoutIfNeededAnimated() - } - } - - // MARK: Appearance - - /// The font and size of the title label - @objc dynamic var titleFont: UIFont { - get { return standardView.titleFont } - set { - standardView.titleFont = newValue - standardView.pv_layoutIfNeededAnimated() - } - } - - /// The color of the title label - @objc dynamic var titleColor: UIColor? { - get { return standardView.titleLabel.textColor } - set { - standardView.titleColor = newValue - standardView.pv_layoutIfNeededAnimated() - } - } - - /// The text alignment of the title label - @objc dynamic var titleTextAlignment: NSTextAlignment { - get { return standardView.titleTextAlignment } - set { - standardView.titleTextAlignment = newValue - standardView.pv_layoutIfNeededAnimated() - } - } - - /// The font and size of the body label - @objc dynamic var messageFont: UIFont { - get { return standardView.messageFont} - set { - standardView.messageFont = newValue - standardView.pv_layoutIfNeededAnimated() - } - } - - /// The color of the message label - @objc dynamic var messageColor: UIColor? { - get { return standardView.messageColor } - set { - standardView.messageColor = newValue - standardView.pv_layoutIfNeededAnimated() - } - } - - /// The text alignment of the message label - @objc dynamic var messageTextAlignment: NSTextAlignment { - get { return standardView.messageTextAlignment } - set { - standardView.messageTextAlignment = newValue - standardView.pv_layoutIfNeededAnimated() - } - } - - override func viewDidLayoutSubviews() { - super.viewDidLayoutSubviews() - standardView.imageHeightConstraint?.constant = standardView.imageView.pv_heightForImageView() - } -} diff --git a/Pods/PopupDialog/PopupDialog/Classes/PopupDialogOverlayView.swift b/Pods/PopupDialog/PopupDialog/Classes/PopupDialogOverlayView.swift deleted file mode 100644 index a1326c0..0000000 --- a/Pods/PopupDialog/PopupDialog/Classes/PopupDialogOverlayView.swift +++ /dev/null @@ -1,128 +0,0 @@ -// -// PopupDialogOverlayView.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// 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 -import DynamicBlurView - -/// The (blurred) overlay view below the popup dialog -final public class PopupDialogOverlayView: UIView { - - // MARK: - Appearance - - /// Turns the blur of the overlay view on or off - @objc public dynamic var blurEnabled: Bool { - get { return !blurView.isHidden } - set { blurView.isHidden = !newValue } - } - - /// The blur radius of the overlay view - @objc public dynamic var blurRadius: CGFloat { - get { return blurView.blurRadius } - set { blurView.blurRadius = newValue } - } - - /// Whether the blur view should allow for - /// live rendering of the background - @objc public dynamic var liveBlurEnabled: Bool { - get { return blurView.trackingMode == .common } - set { - if newValue { - blurView.trackingMode = .common - } else { - blurView.trackingMode = .none - } - } - } - - /// The background color of the overlay view - @objc public dynamic var color: UIColor? { - get { return overlay.backgroundColor } - set { overlay.backgroundColor = newValue } - } - - /// The opacity of the overlay view - @objc public dynamic var opacity: CGFloat { - get { return overlay.alpha } - set { overlay.alpha = newValue } - } - - // MARK: - Views - - internal lazy var blurView: DynamicBlurView = { - let blurView = DynamicBlurView(frame: .zero) - blurView.blurRadius = 8 - blurView.trackingMode = .none - blurView.isDeepRendering = true - blurView.tintColor = .clear - blurView.autoresizingMask = [.flexibleHeight, .flexibleWidth] - return blurView - }() - - internal lazy var overlay: UIView = { - let overlay = UIView(frame: .zero) - overlay.backgroundColor = .black - overlay.alpha = 0.7 - overlay.autoresizingMask = [.flexibleHeight, .flexibleWidth] - return overlay - }() - - // MARK: - Inititalizers - - override init(frame: CGRect) { - super.init(frame: frame) - setupView() - } - - required public init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - View setup - - fileprivate func setupView() { - - autoresizingMask = [.flexibleHeight, .flexibleWidth] - backgroundColor = .clear - alpha = 0 - - addSubview(blurView) - addSubview(overlay) - } - -} - -// MARK: - Deprecated - -extension PopupDialogOverlayView { - - /// Whether the blur view should allow for - /// dynamic rendering of the background - @available(*, deprecated, message: "liveBlur has been deprecated and will be removed with future versions of PopupDialog. Please use isLiveBlurEnabled instead.") - @objc public dynamic var liveBlur: Bool { - get { return liveBlurEnabled } - set { liveBlurEnabled = newValue } - } - -} diff --git a/Pods/PopupDialog/PopupDialog/Classes/PresentationController.swift b/Pods/PopupDialog/PopupDialog/Classes/PresentationController.swift deleted file mode 100644 index ccca56a..0000000 --- a/Pods/PopupDialog/PopupDialog/Classes/PresentationController.swift +++ /dev/null @@ -1,61 +0,0 @@ -// -// PopupDialogPresentationController.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// 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 -import UIKit - -final internal class PresentationController: UIPresentationController { - - private lazy var overlay: PopupDialogOverlayView = { - return PopupDialogOverlayView(frame: .zero) - }() - - override func presentationTransitionWillBegin() { - - guard let containerView = containerView else { return } - - overlay.frame = containerView.bounds - containerView.insertSubview(overlay, at: 0) - - presentedViewController.transitionCoordinator?.animate(alongsideTransition: { [weak self] _ in - self?.overlay.alpha = 1.0 - }, completion: nil) - } - - override func dismissalTransitionWillBegin() { - presentedViewController.transitionCoordinator?.animate(alongsideTransition: { [weak self] _ in - self?.overlay.alpha = 0.0 - }, completion: nil) - } - - override func containerViewWillLayoutSubviews() { - - guard let presentedView = presentedView else { return } - - presentedView.frame = frameOfPresentedViewInContainerView - overlay.blurView.refresh() - } - -} diff --git a/Pods/PopupDialog/PopupDialog/Classes/PresentationManager.swift b/Pods/PopupDialog/PopupDialog/Classes/PresentationManager.swift deleted file mode 100644 index fdc1072..0000000 --- a/Pods/PopupDialog/PopupDialog/Classes/PresentationManager.swift +++ /dev/null @@ -1,86 +0,0 @@ -// -// PopupDialogPresentationManager.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// 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 -import UIKit - -final internal class PresentationManager: NSObject, UIViewControllerTransitioningDelegate { - - var transitionStyle: PopupDialogTransitionStyle - var interactor: InteractiveTransition - - init(transitionStyle: PopupDialogTransitionStyle, interactor: InteractiveTransition) { - self.transitionStyle = transitionStyle - self.interactor = interactor - super.init() - } - - func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? { - let presentationController = PresentationController(presentedViewController: presented, presenting: source) - return presentationController - } - - func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? { - - var transition: TransitionAnimator - switch transitionStyle { - case .bounceUp: - transition = BounceUpTransition(direction: .in) - case .bounceDown: - transition = BounceDownTransition(direction: .in) - case .zoomIn: - transition = ZoomTransition(direction: .in) - case .fadeIn: - transition = FadeTransition(direction: .in) - } - - return transition - } - - func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { - - if interactor.hasStarted || interactor.shouldFinish { - return DismissInteractiveTransition() - } - - var transition: TransitionAnimator - switch transitionStyle { - case .bounceUp: - transition = BounceUpTransition(direction: .out) - case .bounceDown: - transition = BounceDownTransition(direction: .out) - case .zoomIn: - transition = ZoomTransition(direction: .out) - case .fadeIn: - transition = FadeTransition(direction: .out) - } - - return transition - } - - func interactionControllerForDismissal(using animator: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? { - return interactor.hasStarted ? interactor : nil - } -} diff --git a/Pods/PopupDialog/PopupDialog/Classes/TransitionAnimations.swift b/Pods/PopupDialog/PopupDialog/Classes/TransitionAnimations.swift deleted file mode 100644 index e496b0c..0000000 --- a/Pods/PopupDialog/PopupDialog/Classes/TransitionAnimations.swift +++ /dev/null @@ -1,186 +0,0 @@ -// -// PopupDialogTransitionAnimations.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// 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 -import UIKit - -/*! - Presentation transition styles for the popup dialog - - - BounceUp: Dialog bounces in from bottom and is dismissed to bottom - - BounceDown: Dialog bounces in from top and is dismissed to top - - ZoomIn: Dialog zooms in and is dismissed by zooming out - - FadeIn: Dialog fades in and is dismissed by fading out - */ -@objc public enum PopupDialogTransitionStyle: Int { - case bounceUp - case bounceDown - case zoomIn - case fadeIn -} - -/// Dialog bounces in from bottom and is dismissed to bottom -final internal class BounceUpTransition: TransitionAnimator { - - init(direction: AnimationDirection) { - super.init(inDuration: 0.22, outDuration: 0.2, direction: direction) - } - - override func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { - super.animateTransition(using: transitionContext) - - switch direction { - case .in: - to.view.bounds.origin = CGPoint(x: 0, y: -from.view.bounds.size.height) - UIView.animate(withDuration: 0.6, delay: 0.0, usingSpringWithDamping: 0.6, initialSpringVelocity: 0, options: [.curveEaseOut], animations: { [weak self] in - guard let self = self else { return } - self.to.view.bounds = self.from.view.bounds - }, completion: { _ in - transitionContext.completeTransition(true) - }) - case .out: - UIView.animate(withDuration: outDuration, delay: 0.0, options: [.curveEaseIn], animations: { [weak self] in - guard let self = self else { return } - self.from.view.bounds.origin = CGPoint(x: 0, y: -self.from.view.bounds.size.height) - self.from.view.alpha = 0.0 - }, completion: { _ in - transitionContext.completeTransition(!transitionContext.transitionWasCancelled) - }) - } - } -} - - -/// Dialog bounces in from top and is dismissed to top -final internal class BounceDownTransition: TransitionAnimator { - - init(direction: AnimationDirection) { - super.init(inDuration: 0.22, outDuration: 0.2, direction: direction) - } - - override func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { - super.animateTransition(using: transitionContext) - - switch direction { - case .in: - to.view.bounds.origin = CGPoint(x: 0, y: from.view.bounds.size.height) - UIView.animate(withDuration: 0.6, delay: 0.0, usingSpringWithDamping: 0.6, initialSpringVelocity: 0, options: [.curveEaseOut], animations: { [weak self] in - guard let self = self else { return } - self.to.view.bounds = self.from.view.bounds - }, completion: { _ in - transitionContext.completeTransition(true) - }) - case .out: - UIView.animate(withDuration: outDuration, delay: 0.0, options: [.curveEaseIn], animations: { [weak self] in - guard let self = self else { return } - self.from.view.bounds.origin = CGPoint(x: 0, y: self.from.view.bounds.size.height) - self.from.view.alpha = 0.0 - }, completion: { _ in - transitionContext.completeTransition(!transitionContext.transitionWasCancelled) - }) - } - } -} - -/// Dialog zooms in and is dismissed by zooming out -final internal class ZoomTransition: TransitionAnimator { - - init(direction: AnimationDirection) { - super.init(inDuration: 0.22, outDuration: 0.2, direction: direction) - } - - override func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { - super.animateTransition(using: transitionContext) - - switch direction { - case .in: - to.view.transform = CGAffineTransform(scaleX: 0.1, y: 0.1) - UIView.animate(withDuration: 0.6, delay: 0.0, usingSpringWithDamping: 0.6, initialSpringVelocity: 0, options: [.curveEaseOut], animations: { [weak self] in - guard let self = self else { return } - self.to.view.transform = CGAffineTransform(scaleX: 1, y: 1) - }, completion: { _ in - transitionContext.completeTransition(true) - }) - case .out: - UIView.animate(withDuration: outDuration, delay: 0.0, options: [.curveEaseIn], animations: { [weak self] in - guard let self = self else { return } - self.from.view.transform = CGAffineTransform(scaleX: 0.1, y: 0.1) - self.from.view.alpha = 0.0 - }, completion: { _ in - transitionContext.completeTransition(!transitionContext.transitionWasCancelled) - }) - } - } -} - -/// Dialog fades in and is dismissed by fading out -final internal class FadeTransition: TransitionAnimator { - - init(direction: AnimationDirection) { - super.init(inDuration: 0.22, outDuration: 0.2, direction: direction) - } - - override func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { - super.animateTransition(using: transitionContext) - - switch direction { - case .in: - to.view.alpha = 0 - UIView.animate(withDuration: 0.6, delay: 0.0, options: [.curveEaseOut], - animations: { [weak self] in - guard let self = self else { return } - self.to.view.alpha = 1 - }, completion: { _ in - transitionContext.completeTransition(true) - }) - case .out: - UIView.animate(withDuration: outDuration, delay: 0.0, options: [.curveEaseIn], animations: { [weak self] in - guard let self = self else { return } - self.from.view.alpha = 0.0 - }, completion: { _ in - transitionContext.completeTransition(!transitionContext.transitionWasCancelled) - }) - } - } -} - -/// Used for the always drop out animation with pan gesture dismissal -final internal class DismissInteractiveTransition: TransitionAnimator { - - init() { - super.init(inDuration: 0.22, outDuration: 0.32, direction: .out) - } - - override func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { - super.animateTransition(using: transitionContext) - UIView.animate(withDuration: outDuration, delay: 0.0, options: [.beginFromCurrentState], animations: { [weak self] in - guard let self = self else { return } - self.from.view.bounds.origin = CGPoint(x: 0, y: -self.from.view.bounds.size.height) - self.from.view.alpha = 0.0 - }, completion: { _ in - transitionContext.completeTransition(!transitionContext.transitionWasCancelled) - }) - } -} diff --git a/Pods/PopupDialog/PopupDialog/Classes/TransitionAnimator.swift b/Pods/PopupDialog/PopupDialog/Classes/TransitionAnimator.swift deleted file mode 100644 index fd996fa..0000000 --- a/Pods/PopupDialog/PopupDialog/Classes/TransitionAnimator.swift +++ /dev/null @@ -1,68 +0,0 @@ -// -// PopupDialogTransitionAnimator.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// 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 -import UIKit - -/// Base class for custom transition animations -internal class TransitionAnimator: NSObject, UIViewControllerAnimatedTransitioning { - - var to: UIViewController! - var from: UIViewController! - let inDuration: TimeInterval - let outDuration: TimeInterval - let direction: AnimationDirection - - init(inDuration: TimeInterval, outDuration: TimeInterval, direction: AnimationDirection) { - self.inDuration = inDuration - self.outDuration = outDuration - self.direction = direction - super.init() - } - - internal func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval { - return direction == .in ? inDuration : outDuration - } - - internal func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { - switch direction { - case .in: - guard let to = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to), - let from = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from) else { return } - - self.to = to - self.from = from - - let container = transitionContext.containerView - container.addSubview(to.view) - case .out: - guard let to = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to), - let from = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from) else { return } - - self.to = to - self.from = from - } - } -} diff --git a/Pods/PopupDialog/PopupDialog/Classes/UIImageView+Calculations.swift b/Pods/PopupDialog/PopupDialog/Classes/UIImageView+Calculations.swift deleted file mode 100755 index 2ad9121..0000000 --- a/Pods/PopupDialog/PopupDialog/Classes/UIImageView+Calculations.swift +++ /dev/null @@ -1,44 +0,0 @@ -// -// UIImageView+Calculations.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// 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 -import UIKit - -internal extension UIImageView { - - /*! - Calculates the height of the the UIImageView has to - have so the image is displayed correctly - - returns: Height to set on the imageView - */ - func pv_heightForImageView() -> CGFloat { - guard let image = image, image.size.height > 0 else { - return 0.0 - } - let width = bounds.size.width - let ratio = image.size.height / image.size.width - return width * ratio - } -} diff --git a/Pods/PopupDialog/PopupDialog/Classes/UIView+Animations.swift b/Pods/PopupDialog/PopupDialog/Classes/UIView+Animations.swift deleted file mode 100644 index 68adc29..0000000 --- a/Pods/PopupDialog/PopupDialog/Classes/UIView+Animations.swift +++ /dev/null @@ -1,82 +0,0 @@ -// -// UIView+Animations.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// 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 -import UIKit - -/*! - The intended direction of the animation - - in: Animate in - - out: Animate out - */ -internal enum AnimationDirection { - case `in` // swiftlint:disable:this identifier_name - case out -} - -internal extension UIView { - - /// The key for the fade animation - var fadeKey: String { return "FadeAnimation" } - var shakeKey: String { return "ShakeAnimation" } - - func pv_fade(_ direction: AnimationDirection, _ value: Float, duration: CFTimeInterval = 0.08) { - layer.removeAnimation(forKey: fadeKey) - let animation = CABasicAnimation(keyPath: "opacity") - animation.duration = duration - animation.fromValue = layer.presentation()?.opacity - layer.opacity = value - animation.fillMode = CAMediaTimingFillMode.forwards - layer.add(animation, forKey: fadeKey) - } - - func pv_layoutIfNeededAnimated(duration: CFTimeInterval = 0.08) { - UIView.animate(withDuration: duration, delay: 0, options: UIView.AnimationOptions(), animations: { - self.layoutIfNeeded() - }, completion: nil) - } - - // As found at https://gist.github.com/mourad-brahim/cf0bfe9bec5f33a6ea66#file-uiview-animations-swift-L9 - // Slightly modified - func pv_shake() { - layer.removeAnimation(forKey: shakeKey) - let vals: [Double] = [-2, 2, -2, 2, 0] - - let translation = CAKeyframeAnimation(keyPath: "transform.translation.x") - translation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.linear) - translation.values = vals - - let rotation = CAKeyframeAnimation(keyPath: "transform.rotation.z") - rotation.values = vals.map { (degrees: Double) in - let radians: Double = (Double.pi * degrees) / 180.0 - return radians - } - - let shakeGroup: CAAnimationGroup = CAAnimationGroup() - shakeGroup.animations = [translation, rotation] - shakeGroup.duration = 0.3 - self.layer.add(shakeGroup, forKey: shakeKey) - } -} diff --git a/Pods/PopupDialog/PopupDialog/Classes/UIViewController+Visibility.swift b/Pods/PopupDialog/PopupDialog/Classes/UIViewController+Visibility.swift deleted file mode 100644 index 079b1ac..0000000 --- a/Pods/PopupDialog/PopupDialog/Classes/UIViewController+Visibility.swift +++ /dev/null @@ -1,52 +0,0 @@ -// -// UIViewController+Visibility.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// 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 -import UIKit - -// http://stackoverflow.com/questions/2777438/how-to-tell-if-uiviewcontrollers-view-is-visible -internal extension UIViewController { - - var isTopAndVisible: Bool { - return isVisible && isTopViewController - } - - var isVisible: Bool { - if isViewLoaded { - return view.window != nil - } - return false - } - - var isTopViewController: Bool { - if self.navigationController != nil { - return self.navigationController?.visibleViewController === self - } else if self.tabBarController != nil { - return self.tabBarController?.selectedViewController == self && self.presentedViewController == nil - } else { - return self.presentedViewController == nil && self.isVisible - } - } -} diff --git a/Pods/PopupDialog/README.md b/Pods/PopupDialog/README.md deleted file mode 100644 index c2302a4..0000000 --- a/Pods/PopupDialog/README.md +++ /dev/null @@ -1,499 +0,0 @@ - - -

 

- -![Swift Version](https://img.shields.io/badge/Swift-5-orange.svg) -[![Version](https://img.shields.io/cocoapods/v/PopupDialog.svg?style=flat)](http://cocoapods.org/pods/PopupDialog) -[![License](https://img.shields.io/cocoapods/l/PopupDialog.svg?style=flat)](http://cocoapods.org/pods/PopupDialog) -[![Platform](https://img.shields.io/cocoapods/p/PopupDialog.svg?style=flat)](http://cocoapods.org/pods/PopupDialog) -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) -[![Build Status Master](https://travis-ci.org/Orderella/PopupDialog.svg?branch=master)](https://travis-ci.org/Orderella/PopupDialog) -[![Build Status Development](https://travis-ci.org/Orderella/PopupDialog.svg?branch=development)](https://travis-ci.org/Orderella/PopupDialog) -[![Reviewed by Hound](https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg)](https://houndci.com) - -

 

- -# Introduction - -Popup Dialog is a simple, customizable popup dialog written in Swift. - - - - - - -## Features - -- [x] Easy to use API with hardly any boilerplate code -- [x] Convenient default view with image, title, message -- [x] Supports custom view controllers -- [x] Slick transition animations -- [x] Fully themeable via appearance, including fonts, colors, corner radius, shadow, overlay color and blur, etc. -- [x] Can be dismissed via swipe and background tap -- [x] Objective-C compatible -- [x] Works on all screens and devices supporting iOS 10.0+ - -

 

- -# Installation - -This version is Swift 5 compatible. For the Swift 4.2 version, please use [V1.0.0](https://github.com/Orderella/PopupDialog/releases/tag/1.0.0). - -## CocoaPods - -PopupDialog is available through [CocoaPods](http://cocoapods.org). Simply add the following to your Podfile: - -```ruby -use_frameworks! - -target '' -pod 'PopupDialog', '~> 1.1' -``` - -## Carthage - -[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. A minimum version of `0.17` is required. - -To install, simply add the following lines to your Cartfile: - -```ruby -github "Orderella/PopupDialog" ~> 1.1 -``` - -## Manually - -If you prefer not to use either of the above mentioned dependency managers, you can integrate PopupDialog into your project manually by adding the files contained in the [Classes](https://github.com/trungp/PopupDialog/tree/master/PopupDialog/Classes) -folder to your project. Moreover, you have to manually add the classes of [DynamicBlurView](https://github.com/KyoheiG3/DynamicBlurView/tree/master/DynamicBlurView) to your project. - - -

 

- -# Example - -You can find this and more example projects in the repo. To run it, clone the repo, and run `pod install` from the Example directory first. - -```swift -import PopupDialog - -// Prepare the popup assets -let title = "THIS IS THE DIALOG TITLE" -let message = "This is the message section of the popup dialog default view" -let image = UIImage(named: "pexels-photo-103290") - -// Create the dialog -let popup = PopupDialog(title: title, message: message, image: image) - -// Create buttons -let buttonOne = CancelButton(title: "CANCEL") { - print("You canceled the car dialog.") -} - -// This button will not the dismiss the dialog -let buttonTwo = DefaultButton(title: "ADMIRE CAR", dismissOnTap: false) { - print("What a beauty!") -} - -let buttonThree = DefaultButton(title: "BUY CAR", height: 60) { - print("Ah, maybe next time :)") -} - -// Add buttons to dialog -// Alternatively, you can use popup.addButton(buttonOne) -// to add a single button -popup.addButtons([buttonOne, buttonTwo, buttonThree]) - -// Present dialog -self.present(popup, animated: true, completion: nil) -``` - -

 

- -# Usage - -PopupDialog is a subclass of UIViewController and as such can be added to your view controller modally. You can initialize it either with the handy default view or a custom view controller. - -## Default Dialog - -```swift -public convenience init( - title: String?, - message: String?, - image: UIImage? = nil, - buttonAlignment: UILayoutConstraintAxis = .vertical, - transitionStyle: PopupDialogTransitionStyle = .bounceUp, - preferredWidth: CGFloat = 340, - tapGestureDismissal: Bool = true, - panGestureDismissal: Bool = true, - hideStatusBar: Bool = false, - completion: (() -> Void)? = nil) -``` - -The default dialog initializer is a convenient way of creating a popup with image, title and message (see image one and three). - -Bascially, all parameters are optional, although this makes no sense at all. You want to at least add a message and a single button, otherwise the dialog can't be dismissed, unless you do it manually. - -If you provide an image it will be pinned to the top/left/right of the dialog. The ratio of the image will be used to set the height of the image view, so no distortion will occur. - -## Custom View Controller - -```swift -public init( - viewController: UIViewController, - buttonAlignment: UILayoutConstraintAxis = .vertical, - transitionStyle: PopupDialogTransitionStyle = .bounceUp, - preferredWidth: CGFloat = 340, - tapGestureDismissal: Bool = true, - panGestureDismissal: Bool = true, - hideStatusBar: Bool = false, - completion: (() -> Void)? = nil) -``` - -You can pass your own view controller to PopupDialog (see image two). It is accessible via the `viewController` property of PopupDialog, which has to be casted to your view controllers class to access its properties. Make sure the custom view defines all constraints needed, so you don't run into any autolayout issues. - -Buttons are added below the controllers view, however, these buttons are optional. If you decide to not add any buttons, you have to take care of dismissing the dialog manually. Being a subclass of view controller, this can be easily done via `dismissViewControllerAnimated(flag: Bool, completion: (() -> Void)?)`. - -## Button Alignment - -Buttons can be distributed either `.horizontal` or `.vertical`, with the latter being the default. Please note distributing buttons horizontally might not be a good idea if you have more than two buttons. - -```swift -public enum UILayoutConstraintAxis : Int { - case horizontal - case vertical -} -``` - -## Transition Style - -You can set a transition animation style with `.bounceUp` being the default. The following transition styles are available - -```swift -public enum PopupDialogTransitionStyle: Int { - case bounceUp - case bounceDown - case zoomIn - case fadeIn -} -``` - -## Preferred Width - -PopupDialog will always try to have a max width of 340 . On iPhones with smaller screens, like iPhone 5 SE, width would be 320. -340 is also the standard width for iPads. By setting preferredWidth you can override the max width of 340 for iPads only. - -## Gesture Dismissal - -Gesture dismissal allows your dialog being dismissed either by a background tap or by swiping the dialog down. By default, this is set to `true`. You can prevent this behavior by setting either `tapGestureDismissal` or `panGestureDismissal` to `false` in the initializer. - -## Hide Status Bar - -PopupDialog can hide the status bar whenever it is displayed. Defaults to `false`. Make sure to add `UIViewControllerBasedStatusBarAppearance` to `Info.plist` and set it to `YES`. - -## Completion -This completion handler is called when the dialog was dismissed. This is especially useful for catching a gesture dismissal. - -

 

- -# Default Dialog Properties - -If you are using the default dialog, you can change selected properties at runtime: - -```swift -// Create the dialog -let popup = PopupDialog(title: title, message: message, image: image) - -// Present dialog -self.present(popup, animated: true, completion: nil) - -// Get the default view controller and cast it -// Unfortunately, casting is necessary to support Objective-C -let vc = popup.viewController as! PopupDialogDefaultViewController - -// Set dialog properties -vc.image = UIImage(...) -vc.titleText = "..." -vc.messageText = "..." -vc.buttonAlignment = .horizontal -vc.transitionStyle = .bounceUp -``` - -

 

- -# Styling PopupDialog - -Appearance is the preferred way of customizing the style of PopupDialog. -The idea of PopupDialog is to define a theme in a single place, without having to provide style settings with every single instantiation. This way, creating a PopupDialog requires only minimal code to be written and no "wrappers". - -This makes even more sense, as popup dialogs and alerts are supposed to look consistent throughout the app, that is, maintain a single style. - -## Dialog Default View Appearance Settings - -If you are using the default popup view, the following appearance settings are available: - -```swift -let dialogAppearance = PopupDialogDefaultView.appearance() - -dialogAppearance.backgroundColor = .white -dialogAppearance.titleFont = .boldSystemFont(ofSize: 14) -dialogAppearance.titleColor = UIColor(white: 0.4, alpha: 1) -dialogAppearance.titleTextAlignment = .center -dialogAppearance.messageFont = .systemFont(ofSize: 14) -dialogAppearance.messageColor = UIColor(white: 0.6, alpha: 1) -dialogAppearance.messageTextAlignment = .center -``` - -## Dialog Container Appearance Settings - -The container view contains the PopupDialogDefaultView or your custom view controller. the following appearance settings are available: - -```swift -let containerAppearance = PopupDialogContainerView.appearance() - -containerAppearance.backgroundColor = UIColor(red:0.23, green:0.23, blue:0.27, alpha:1.00) -containerAppearance.cornerRadius = 2 -containerAppearance.shadowEnabled = true -containerAppearance.shadowColor = .black -containerAppearance.shadowOpacity = 0.6 -containerAppearance.shadowRadius = 20 -containerAppearance.shadowOffset = CGSize(width: 0, height: 8) -containerAppearance.shadowPath = CGPath(...) -``` - -## Overlay View Appearance Settings - -This refers to the view that is used as an overlay above the underlying view controller but below the popup dialog view. If that makes sense ;) - -```swift -let overlayAppearance = PopupDialogOverlayView.appearance() - -overlayAppearance.color = .black -overlayAppearance.blurRadius = 20 -overlayAppearance.blurEnabled = true -overlayAppearance.liveBlurEnabled = false -overlayAppearance.opacity = 0.7 -``` - -#### Note -Setting `liveBlurEnabled` to true, that is enabling realtime updates of the background view, results in a significantly higher CPU usage /power consumption and is therefore turned off by default. Choose wisely whether you need this feature or not ;) - -## Button Appearance Settings - -The standard button classes available are `DefaultButton`, `CancelButton` and `DestructiveButton`. All buttons feature the same appearance settings and can be styled seperately. - -```swift -var buttonAppearance = DefaultButton.appearance() - -// Default button -buttonAppearance.titleFont = .systemFont(ofSize: 14) -buttonAppearance.titleColor = UIColor(red: 0.25, green: 0.53, blue: 0.91, alpha: 1) -buttonAppearance.buttonColor = .clear -buttonAppearance.separatorColor = UIColor(white: 0.9, alpha: 1) - -// Below, only the differences are highlighted - -// Cancel button -CancelButton.appearance().titleColor = .lightGray - -// Destructive button -DestructiveButton.appearance().titleColor = .red -``` - -Moreover, you can create a custom button by subclassing `PopupDialogButton`. The following example creates a solid blue button, featuring a bold white title font. Separators are invisble. - -```swift -public final class SolidBlueButton: PopupDialogButton { - - override public func setupView() { - defaultFont = .boldSystemFont(ofSize: 16) - defaultTitleColor = .white - defaultButtonColor = .blue - defaultSeparatorColor = .clear - super.setupView() - } -} - -``` - -These buttons can be customized with the appearance settings given above as well. - -

 

- -## Dark mode example - -The following is an example of a *Dark Mode* theme. You can find this in the Example project `AppDelegate`, just uncomment it to apply the custom appearance. - -```swift -// Customize dialog appearance -let pv = PopupDialogDefaultView.appearance() -pv.titleFont = UIFont(name: "HelveticaNeue-Light", size: 16)! -pv.titleColor = .white -pv.messageFont = UIFont(name: "HelveticaNeue", size: 14)! -pv.messageColor = UIColor(white: 0.8, alpha: 1) - -// Customize the container view appearance -let pcv = PopupDialogContainerView.appearance() -pcv.backgroundColor = UIColor(red:0.23, green:0.23, blue:0.27, alpha:1.00) -pcv.cornerRadius = 2 -pcv.shadowEnabled = true -pcv.shadowColor = .black - -// Customize overlay appearance -let ov = PopupDialogOverlayView.appearance() -ov.blurEnabled = true -ov.blurRadius = 30 -ov.liveBlurEnabled = true -ov.opacity = 0.7 -ov.color = .black - -// Customize default button appearance -let db = DefaultButton.appearance() -db.titleFont = UIFont(name: "HelveticaNeue-Medium", size: 14)! -db.titleColor = .white -db.buttonColor = UIColor(red:0.25, green:0.25, blue:0.29, alpha:1.00) -db.separatorColor = UIColor(red:0.20, green:0.20, blue:0.25, alpha:1.00) - -// Customize cancel button appearance -let cb = CancelButton.appearance() -cb.titleFont = UIFont(name: "HelveticaNeue-Medium", size: 14)! -cb.titleColor = UIColor(white: 0.6, alpha: 1) -cb.buttonColor = UIColor(red:0.25, green:0.25, blue:0.29, alpha:1.00) -cb.separatorColor = UIColor(red:0.20, green:0.20, blue:0.25, alpha:1.00) - -``` - - - - -I can see that there is room for more customization options. I might add more of them over time. - -

 

- -# Screen sizes and rotation - -Rotation and all screen sizes are supported. However, the dialog will never exceed a width of 340 points on iPhones. For iPads, you can set `preferredWidth` when initializing a new PopupDialog. However, landscape mode will not work well if the height of the dialog exceeds the width of the screen. - -

 

- -# Working with text fields - -If you are using text fields in your custom view controller, popup dialog makes sure that the dialog is positioned above the keybord whenever it appears. You can opt out of this behaviour by setting `keyboardShiftsView` to false on a PopupDialog. - -# Testing - -PopupDialog exposes a nice and handy method that lets you trigger a button tap programmatically: - -```swift -public func tapButtonWithIndex(_ index: Int) -``` - -Other than that, PopupDialog unit tests are included in the root folder. - -

 

- -# Objective-C - -PopupDialog can be used in Objective-C projects as well. -Here is a basic example: - -```objective-c -PopupDialog *popup = [[PopupDialog alloc] initWithTitle: @"Title" - message: @"This is a message" - image: nil - buttonAlignment: UILayoutConstraintAxisVertical - transitionStyle: PopupDialogTransitionStyleBounceUp - preferredWidth: 380 - tapGestureDismissal: NO - panGestureDismissal: NO - hideStatusBar: NO - completion: nil]; - -DestructiveButton *delete = [[DestructiveButton alloc] initWithTitle: @"Delete" - height: 45 - dismissOnTap: YES - action: nil]; - -CancelButton *cancel = [[CancelButton alloc] initWithTitle: @"Cancel" - height: 45 - dismissOnTap: YES - action: nil]; - -DefaultButton *ok = [[DefaultButton alloc] initWithTitle: @"OK" - height: 45 - dismissOnTap: YES - action: nil]; - -[dialog addButtons:@[delete, cancel, ok]]; - -[self presentViewController:popup animated:YES completion:nil]; -``` - - -

 

- - -# Bonus - -## Shake animation - -If you happen to use PopupDialog to validate text input, for example, you can call the handy `shake()` method on PopupDialog. - -

 

- -# Requirements - -Minimum requirement is iOS 10.0. This dialog was written with Swift 5, for support of older versions please head over to releases. - -

 

- -# Changelog -* **1.1.1** Updates dependencies to Swift 5 -* **1.1.0** Swift 5 support -* **1.0.0** Pinned Swift version to 4.2
Dropped iOS 9 support as of moving to ios-snapshot-test-case -* **0.9.2** Fixes crash when presenting dialog while app is inactive -* **0.9.1** Fixes Carthage support -* **0.9.0** Swift 4.2 support -* **0.8.1** Added shadow appearance properties -* **0.8.0** Separated tap and pan gesture dismissal -* **0.7.1** Fixes Objective-C compatability
Improved Carthage handling -* **0.7.0** Removed FXBlurView while switching to DynamicBlurView -* **0.6.2** Added preferredWidth option for iPads -* **0.6.1** Added shake animation
Introduced hideStatusBar option -* **0.6.0** Swift 4 support
Dropped iOS8 compatibility -* **0.5.4** Fixed bug where blur view would reveal hidden layer
Improved view controller lifecycle handling
Scroll views can now be used with gesture dismissal -* **0.5.3** Fixed memory leak with custom view controllers
Added UI automation & snapshot tests -* **0.5.2** Fixed image scaling for default view -* **0.5.1** Introduced custom button height parameter
Reintroduced iOS8 compatibility -* **0.5.0** Swift 3 compatibility / removed iOS8 -* **0.4.0** iOS 8 compatibility -* **0.3.3** Fixes buttons being added multiple times -* **0.3.2** Dialog repositioning when interacting with keyboard
Non dismissable buttons option
Additional completion handler when dialog is dismissed -* **0.3.1** Fixed Carthage issues -* **0.3.0** Objective-C compatibility -* **0.2.2** Turned off liveBlur by default to increase performance -* **0.2.1** Dismiss via background tap or swipe down transition -* **0.2.0** You can now pass custom view controllers to the dialog. This introduces breaking changes. -* **0.1.6** Defer button action until animation completes -* **0.1.5** Exposed dialog properties
(titleText, messageText, image, buttonAlignment, transitionStyle) -* **0.1.4** Pick transition animation style -* **0.1.3** Big screen support
Exposed basic shadow appearance -* **0.1.2** Exposed blur and overlay appearance -* **0.1.1** Added themeing example -* **0.1.0** Intitial version - -

 

- -# Author - -Martin Wildfeuer, mwfire@mwfire.de -for Orderella Ltd., [orderella.co.uk](http://orderella.co.uk)
-You might also want to follow us on Twitter, [@theMWFire](https://twitter.com/theMWFire) | [@Orderella](https://twitter.com/orderella) - -# Thank you -Thanks to everyone who uses, enhances and improves this library, especially the contributors. -Moreover, thanks to KyoheiG3 for porting FXBlurView to [DynamicBlurView](https://github.com/KyoheiG3/DynamicBlurView). - -

 

- -# License - -PopupDialog is available under the MIT license. See the LICENSE file for more info. diff --git a/Pods/RxCocoa/LICENSE.md b/Pods/RxCocoa/LICENSE.md deleted file mode 100644 index e32511b..0000000 --- a/Pods/RxCocoa/LICENSE.md +++ /dev/null @@ -1,9 +0,0 @@ -**The MIT License** -**Copyright © 2015 Krunoslav Zaher, Shai Mishali** -**All rights reserved.** - -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. diff --git a/Pods/RxCocoa/Platform/DataStructures/Bag.swift b/Pods/RxCocoa/Platform/DataStructures/Bag.swift deleted file mode 100644 index 5720a3b..0000000 --- a/Pods/RxCocoa/Platform/DataStructures/Bag.swift +++ /dev/null @@ -1,181 +0,0 @@ -// -// Bag.swift -// Platform -// -// Created by Krunoslav Zaher on 2/28/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import Swift - -let arrayDictionaryMaxSize = 30 - -struct BagKey { - /** - Unique identifier for object added to `Bag`. - - It's underlying type is UInt64. If we assume there in an idealized CPU that works at 4GHz, - it would take ~150 years of continuous running time for it to overflow. - */ - fileprivate let rawValue: UInt64 -} - -/** -Data structure that represents a bag of elements typed `T`. - -Single element can be stored multiple times. - -Time and space complexity of insertion and deletion is O(n). - -It is suitable for storing small number of elements. -*/ -struct Bag : CustomDebugStringConvertible { - /// Type of identifier for inserted elements. - typealias KeyType = BagKey - - typealias Entry = (key: BagKey, value: T) - - private var _nextKey: BagKey = BagKey(rawValue: 0) - - // data - - // first fill inline variables - var _key0: BagKey? - var _value0: T? - - // then fill "array dictionary" - var _pairs = ContiguousArray() - - // last is sparse dictionary - var _dictionary: [BagKey: T]? - - var _onlyFastPath = true - - /// Creates new empty `Bag`. - init() { - } - - /** - Inserts `value` into bag. - - - parameter element: Element to insert. - - returns: Key that can be used to remove element from bag. - */ - mutating func insert(_ element: T) -> BagKey { - let key = _nextKey - - _nextKey = BagKey(rawValue: _nextKey.rawValue &+ 1) - - if _key0 == nil { - _key0 = key - _value0 = element - return key - } - - _onlyFastPath = false - - if _dictionary != nil { - _dictionary![key] = element - return key - } - - if _pairs.count < arrayDictionaryMaxSize { - _pairs.append((key: key, value: element)) - return key - } - - _dictionary = [key: element] - - return key - } - - /// - returns: Number of elements in bag. - var count: Int { - let dictionaryCount: Int = _dictionary?.count ?? 0 - return (_value0 != nil ? 1 : 0) + _pairs.count + dictionaryCount - } - - /// Removes all elements from bag and clears capacity. - mutating func removeAll() { - _key0 = nil - _value0 = nil - - _pairs.removeAll(keepingCapacity: false) - _dictionary?.removeAll(keepingCapacity: false) - } - - /** - Removes element with a specific `key` from bag. - - - parameter key: Key that identifies element to remove from bag. - - returns: Element that bag contained, or nil in case element was already removed. - */ - mutating func removeKey(_ key: BagKey) -> T? { - if _key0 == key { - _key0 = nil - let value = _value0! - _value0 = nil - return value - } - - if let existingObject = _dictionary?.removeValue(forKey: key) { - return existingObject - } - - for i in 0 ..< _pairs.count where _pairs[i].key == key { - let value = _pairs[i].value - _pairs.remove(at: i) - return value - } - - return nil - } -} - -extension Bag { - /// A textual representation of `self`, suitable for debugging. - var debugDescription : String { - "\(self.count) elements in Bag" - } -} - -extension Bag { - /// Enumerates elements inside the bag. - /// - /// - parameter action: Enumeration closure. - func forEach(_ action: (T) -> Void) { - if _onlyFastPath { - if let value0 = _value0 { - action(value0) - } - return - } - - let value0 = _value0 - let dictionary = _dictionary - - if let value0 = value0 { - action(value0) - } - - for i in 0 ..< _pairs.count { - action(_pairs[i].value) - } - - if dictionary?.count ?? 0 > 0 { - for element in dictionary!.values { - action(element) - } - } - } -} - -extension BagKey: Hashable { - func hash(into hasher: inout Hasher) { - hasher.combine(rawValue) - } -} - -func ==(lhs: BagKey, rhs: BagKey) -> Bool { - lhs.rawValue == rhs.rawValue -} diff --git a/Pods/RxCocoa/Platform/DataStructures/InfiniteSequence.swift b/Pods/RxCocoa/Platform/DataStructures/InfiniteSequence.swift deleted file mode 100644 index 75d7bea..0000000 --- a/Pods/RxCocoa/Platform/DataStructures/InfiniteSequence.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// InfiniteSequence.swift -// Platform -// -// Created by Krunoslav Zaher on 6/13/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/// Sequence that repeats `repeatedValue` infinite number of times. -struct InfiniteSequence : Sequence { - typealias Iterator = AnyIterator - - private let repeatedValue: Element - - init(repeatedValue: Element) { - self.repeatedValue = repeatedValue - } - - func makeIterator() -> Iterator { - let repeatedValue = self.repeatedValue - return AnyIterator { repeatedValue } - } -} diff --git a/Pods/RxCocoa/Platform/DataStructures/PriorityQueue.swift b/Pods/RxCocoa/Platform/DataStructures/PriorityQueue.swift deleted file mode 100644 index 9ed856b..0000000 --- a/Pods/RxCocoa/Platform/DataStructures/PriorityQueue.swift +++ /dev/null @@ -1,111 +0,0 @@ -// -// PriorityQueue.swift -// Platform -// -// Created by Krunoslav Zaher on 12/27/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -struct PriorityQueue { - private let hasHigherPriority: (Element, Element) -> Bool - private let isEqual: (Element, Element) -> Bool - - private var elements = [Element]() - - init(hasHigherPriority: @escaping (Element, Element) -> Bool, isEqual: @escaping (Element, Element) -> Bool) { - self.hasHigherPriority = hasHigherPriority - self.isEqual = isEqual - } - - mutating func enqueue(_ element: Element) { - elements.append(element) - bubbleToHigherPriority(elements.count - 1) - } - - func peek() -> Element? { - elements.first - } - - var isEmpty: Bool { - elements.count == 0 - } - - mutating func dequeue() -> Element? { - guard let front = peek() else { - return nil - } - - removeAt(0) - - return front - } - - mutating func remove(_ element: Element) { - for i in 0 ..< elements.count { - if self.isEqual(elements[i], element) { - removeAt(i) - return - } - } - } - - private mutating func removeAt(_ index: Int) { - let removingLast = index == elements.count - 1 - if !removingLast { - elements.swapAt(index, elements.count - 1) - } - - _ = elements.popLast() - - if !removingLast { - bubbleToHigherPriority(index) - bubbleToLowerPriority(index) - } - } - - private mutating func bubbleToHigherPriority(_ initialUnbalancedIndex: Int) { - precondition(initialUnbalancedIndex >= 0) - precondition(initialUnbalancedIndex < elements.count) - - var unbalancedIndex = initialUnbalancedIndex - - while unbalancedIndex > 0 { - let parentIndex = (unbalancedIndex - 1) / 2 - guard self.hasHigherPriority(elements[unbalancedIndex], elements[parentIndex]) else { break } - elements.swapAt(unbalancedIndex, parentIndex) - unbalancedIndex = parentIndex - } - } - - private mutating func bubbleToLowerPriority(_ initialUnbalancedIndex: Int) { - precondition(initialUnbalancedIndex >= 0) - precondition(initialUnbalancedIndex < elements.count) - - var unbalancedIndex = initialUnbalancedIndex - while true { - let leftChildIndex = unbalancedIndex * 2 + 1 - let rightChildIndex = unbalancedIndex * 2 + 2 - - var highestPriorityIndex = unbalancedIndex - - if leftChildIndex < elements.count && self.hasHigherPriority(elements[leftChildIndex], elements[highestPriorityIndex]) { - highestPriorityIndex = leftChildIndex - } - - if rightChildIndex < elements.count && self.hasHigherPriority(elements[rightChildIndex], elements[highestPriorityIndex]) { - highestPriorityIndex = rightChildIndex - } - - guard highestPriorityIndex != unbalancedIndex else { break } - elements.swapAt(highestPriorityIndex, unbalancedIndex) - - unbalancedIndex = highestPriorityIndex - } - } -} - -extension PriorityQueue : CustomDebugStringConvertible { - var debugDescription: String { - elements.debugDescription - } -} diff --git a/Pods/RxCocoa/Platform/DataStructures/Queue.swift b/Pods/RxCocoa/Platform/DataStructures/Queue.swift deleted file mode 100644 index 625d473..0000000 --- a/Pods/RxCocoa/Platform/DataStructures/Queue.swift +++ /dev/null @@ -1,148 +0,0 @@ -// -// Queue.swift -// Platform -// -// Created by Krunoslav Zaher on 3/21/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/** -Data structure that represents queue. - -Complexity of `enqueue`, `dequeue` is O(1) when number of operations is -averaged over N operations. - -Complexity of `peek` is O(1). -*/ -struct Queue: Sequence { - /// Type of generator. - typealias Generator = AnyIterator - - private let resizeFactor = 2 - - private var storage: ContiguousArray - private var innerCount = 0 - private var pushNextIndex = 0 - private let initialCapacity: Int - - /** - Creates new queue. - - - parameter capacity: Capacity of newly created queue. - */ - init(capacity: Int) { - initialCapacity = capacity - - storage = ContiguousArray(repeating: nil, count: capacity) - } - - private var dequeueIndex: Int { - let index = pushNextIndex - count - return index < 0 ? index + storage.count : index - } - - /// - returns: Is queue empty. - var isEmpty: Bool { count == 0 } - - /// - returns: Number of elements inside queue. - var count: Int { innerCount } - - /// - returns: Element in front of a list of elements to `dequeue`. - func peek() -> T { - precondition(count > 0) - - return storage[dequeueIndex]! - } - - mutating private func resizeTo(_ size: Int) { - var newStorage = ContiguousArray(repeating: nil, count: size) - - let count = self.count - - let dequeueIndex = self.dequeueIndex - let spaceToEndOfQueue = storage.count - dequeueIndex - - // first batch is from dequeue index to end of array - let countElementsInFirstBatch = Swift.min(count, spaceToEndOfQueue) - // second batch is wrapped from start of array to end of queue - let numberOfElementsInSecondBatch = count - countElementsInFirstBatch - - newStorage[0 ..< countElementsInFirstBatch] = storage[dequeueIndex ..< (dequeueIndex + countElementsInFirstBatch)] - newStorage[countElementsInFirstBatch ..< (countElementsInFirstBatch + numberOfElementsInSecondBatch)] = storage[0 ..< numberOfElementsInSecondBatch] - - self.innerCount = count - pushNextIndex = count - storage = newStorage - } - - /// Enqueues `element`. - /// - /// - parameter element: Element to enqueue. - mutating func enqueue(_ element: T) { - if count == storage.count { - resizeTo(Swift.max(storage.count, 1) * resizeFactor) - } - - storage[pushNextIndex] = element - pushNextIndex += 1 - innerCount += 1 - - if pushNextIndex >= storage.count { - pushNextIndex -= storage.count - } - } - - private mutating func dequeueElementOnly() -> T { - precondition(count > 0) - - let index = dequeueIndex - - defer { - storage[index] = nil - innerCount -= 1 - } - - return storage[index]! - } - - /// Dequeues element or throws an exception in case queue is empty. - /// - /// - returns: Dequeued element. - mutating func dequeue() -> T? { - if self.count == 0 { - return nil - } - - defer { - let downsizeLimit = storage.count / (resizeFactor * resizeFactor) - if count < downsizeLimit && downsizeLimit >= initialCapacity { - resizeTo(storage.count / resizeFactor) - } - } - - return dequeueElementOnly() - } - - /// - returns: Generator of contained elements. - func makeIterator() -> AnyIterator { - var i = dequeueIndex - var innerCount = count - - return AnyIterator { - if innerCount == 0 { - return nil - } - - defer { - innerCount -= 1 - i += 1 - } - - if i >= self.storage.count { - i -= self.storage.count - } - - return self.storage[i] - } - } -} diff --git a/Pods/RxCocoa/Platform/DispatchQueue+Extensions.swift b/Pods/RxCocoa/Platform/DispatchQueue+Extensions.swift deleted file mode 100644 index aaf24ca..0000000 --- a/Pods/RxCocoa/Platform/DispatchQueue+Extensions.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// DispatchQueue+Extensions.swift -// Platform -// -// Created by Krunoslav Zaher on 10/22/16. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -import Dispatch - -extension DispatchQueue { - private static var token: DispatchSpecificKey<()> = { - let key = DispatchSpecificKey<()>() - DispatchQueue.main.setSpecific(key: key, value: ()) - return key - }() - - static var isMain: Bool { - DispatchQueue.getSpecific(key: token) != nil - } -} diff --git a/Pods/RxCocoa/Platform/Platform.Darwin.swift b/Pods/RxCocoa/Platform/Platform.Darwin.swift deleted file mode 100644 index eacc194..0000000 --- a/Pods/RxCocoa/Platform/Platform.Darwin.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// Platform.Darwin.swift -// Platform -// -// Created by Krunoslav Zaher on 12/29/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) - - import Darwin - import Foundation - - extension Thread { - static func setThreadLocalStorageValue(_ value: T?, forKey key: NSCopying) { - let currentThread = Thread.current - let threadDictionary = currentThread.threadDictionary - - if let newValue = value { - threadDictionary[key] = newValue - } - else { - threadDictionary[key] = nil - } - } - - static func getThreadLocalStorageValueForKey(_ key: NSCopying) -> T? { - let currentThread = Thread.current - let threadDictionary = currentThread.threadDictionary - - return threadDictionary[key] as? T - } - } - -#endif diff --git a/Pods/RxCocoa/Platform/Platform.Linux.swift b/Pods/RxCocoa/Platform/Platform.Linux.swift deleted file mode 100644 index 52a3e3a..0000000 --- a/Pods/RxCocoa/Platform/Platform.Linux.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// Platform.Linux.swift -// Platform -// -// Created by Krunoslav Zaher on 12/29/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(Linux) - - import Foundation - - extension Thread { - - static func setThreadLocalStorageValue(_ value: T?, forKey key: String) { - if let newValue = value { - Thread.current.threadDictionary[key] = newValue - } - else { - Thread.current.threadDictionary[key] = nil - } - } - - static func getThreadLocalStorageValueForKey(_ key: String) -> T? { - let currentThread = Thread.current - let threadDictionary = currentThread.threadDictionary - - return threadDictionary[key] as? T - } - } - -#endif diff --git a/Pods/RxCocoa/Platform/RecursiveLock.swift b/Pods/RxCocoa/Platform/RecursiveLock.swift deleted file mode 100644 index 10b9bbb..0000000 --- a/Pods/RxCocoa/Platform/RecursiveLock.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// RecursiveLock.swift -// Platform -// -// Created by Krunoslav Zaher on 12/18/16. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -import Foundation - -#if TRACE_RESOURCES - class RecursiveLock: NSRecursiveLock { - override init() { - _ = Resources.incrementTotal() - super.init() - } - - override func lock() { - super.lock() - _ = Resources.incrementTotal() - } - - override func unlock() { - super.unlock() - _ = Resources.decrementTotal() - } - - deinit { - _ = Resources.decrementTotal() - } - } -#else - typealias RecursiveLock = NSRecursiveLock -#endif diff --git a/Pods/RxCocoa/README.md b/Pods/RxCocoa/README.md deleted file mode 100644 index a95d9e0..0000000 --- a/Pods/RxCocoa/README.md +++ /dev/null @@ -1,254 +0,0 @@ -

-RxSwift Logo -
-Build Status -Supported Platforms: iOS, macOS, tvOS, watchOS & Linux -
- - - -

- -Rx is a [generic abstraction of computation](https://youtu.be/looJcaeboBY) expressed through `Observable` interface, which lets you broadcast and subscribe to values and other events from an `Observable` stream. - -RxSwift is the Swift-specific implementation of the [Reactive Extensions](http://reactivex.io) standard. - -

RxSwift Observable Example of a price constantly changing and updating the app's UI

- -While this version aims to stay true to the original spirit and naming conventions of Rx, this projects also aims to provide a true Swift-first API for Rx APIs. - -Cross platform documentation can be found on [ReactiveX.io](http://reactivex.io/). - -Like other Rx implementation, RxSwift's intention is to enable easy composition of asynchronous operations and streams of data in the form of `Observable` objects and a suite of methods to transform and compose these pieces of asynchronous work. - -KVO observation, async operations, UI Events and other streams of data are all unified under [abstraction of sequence](Documentation/GettingStarted.md#observables-aka-sequences). This is the reason why Rx is so simple, elegant and powerful. - -## I came here because I want to ... - -###### ... understand - -* [why use rx?](Documentation/Why.md) -* [the basics, getting started with RxSwift](Documentation/GettingStarted.md) -* [traits](Documentation/Traits.md) - what are `Single`, `Completable`, `Maybe`, `Driver`, and `ControlProperty` ... and why do they exist? -* [testing](Documentation/UnitTests.md) -* [tips and common errors](Documentation/Tips.md) -* [debugging](Documentation/GettingStarted.md#debugging) -* [the math behind Rx](Documentation/MathBehindRx.md) -* [what are hot and cold observable sequences?](Documentation/HotAndColdObservables.md) - -###### ... install - -* Integrate RxSwift/RxCocoa with my app. [Installation Guide](#installation) - -###### ... hack around - -* with the example app. [Running Example App](Documentation/ExampleApp.md) -* with operators in playgrounds. [Playgrounds](Documentation/Playgrounds.md) - -###### ... interact - -* All of this is great, but it would be nice to talk with other people using RxSwift and exchange experiences.
[Join Slack Channel](http://slack.rxswift.org) -* Report a problem using the library. [Open an Issue With Bug Template](.github/ISSUE_TEMPLATE.md) -* Request a new feature. [Open an Issue With Feature Request Template](Documentation/NewFeatureRequestTemplate.md) -* Help out [Check out contribution guide](CONTRIBUTING.md) - -###### ... compare - -* [with Combine and ReactiveSwift](Documentation/ComparisonWithOtherLibraries.md). - -###### ... understand the structure - -RxSwift is as compositional as the asynchronous work it drives. The core unit is RxSwift itself, while other dependencies can be added for UI Work, testing, and more. - -It comprises five separate components depending on each other in the following way: - -```none -┌──────────────┐ ┌──────────────┐ -│ RxCocoa ├────▶ RxRelay │ -└───────┬──────┘ └──────┬───────┘ - │ │ -┌───────▼──────────────────▼───────┐ -│ RxSwift │ -└───────▲──────────────────▲───────┘ - │ │ -┌───────┴──────┐ ┌──────┴───────┐ -│ RxTest │ │ RxBlocking │ -└──────────────┘ └──────────────┘ -``` - -* **RxSwift**: The core of RxSwift, providing the Rx standard as (mostly) defined by [ReactiveX](https://reactivex.io). It has no other dependencies. -* **RxCocoa**: Provides Cocoa-specific capabilities for general iOS/macOS/watchOS & tvOS app development, such as Shared Sequences, Traits, and much more. It depends on both `RxSwift` and `RxRelay`. -* **RxRelay**: Provides `PublishRelay`, `BehaviorRelay` and `ReplayRelay`, three [simple wrappers around Subjects](https://github.com/ReactiveX/RxSwift/blob/main/Documentation/Subjects.md#relays). It depends on `RxSwift`. -* **RxTest** and **RxBlocking**: Provides testing capabilities for Rx-based systems. It depends on `RxSwift`. - -## Usage - - - - - - - - - - - - - - - - - - - -
Here's an exampleIn Action
Define search for GitHub repositories ...
-let searchResults = searchBar.rx.text.orEmpty
-    .throttle(.milliseconds(300), scheduler: MainScheduler.instance)
-    .distinctUntilChanged()
-    .flatMapLatest { query -> Observable<[Repository]> in
-        if query.isEmpty {
-            return .just([])
-        }
-        return searchGitHub(query)
-            .catchAndReturn([])
-    }
-    .observe(on: MainScheduler.instance)
... then bind the results to your tableview
-searchResults
-    .bind(to: tableView.rx.items(cellIdentifier: "Cell")) {
-        (index, repository: Repository, cell) in
-        cell.textLabel?.text = repository.name
-        cell.detailTextLabel?.text = repository.url
-    }
-    .disposed(by: disposeBag)
- - -## Requirements - -* Xcode 12.x -* Swift 5.x - -For Xcode 11 and below, [use RxSwift 5.x](https://github.com/ReactiveX/RxSwift/releases/tag/5.1.1). - -## Installation - -RxSwift doesn't contain any external dependencies. - -These are currently the supported installation options: - -### Manual - -Open Rx.xcworkspace, choose `RxExample` and hit run. This method will build everything and run the sample app - -### [CocoaPods](https://guides.cocoapods.org/using/using-cocoapods.html) - -```ruby -# Podfile -use_frameworks! - -target 'YOUR_TARGET_NAME' do - pod 'RxSwift', '6.5.0' - pod 'RxCocoa', '6.5.0' -end - -# RxTest and RxBlocking make the most sense in the context of unit/integration tests -target 'YOUR_TESTING_TARGET' do - pod 'RxBlocking', '6.5.0' - pod 'RxTest', '6.5.0' -end -``` - -Replace `YOUR_TARGET_NAME` and then, in the `Podfile` directory, type: - -```bash -$ pod install -``` - -### XCFrameworks - -Each release starting with RxSwift 6 includes `*.xcframework` framework binaries. - -Simply drag the needed framework binaries to your **Frameworks, Libraries, and Embedded Content** section under your target's **General** tab. - -> **Note**: If you're using `RxCocoa`, be sure to also drag **RxCocoaRuntime.xcframework** before importing `RxCocoa`. - -XCFrameworks instructions - -### [Carthage](https://github.com/Carthage/Carthage) - -Add this to `Cartfile` - -``` -github "ReactiveX/RxSwift" "6.5.0" -``` - -```bash -$ carthage update -``` - -#### Carthage as a Static Library - -Carthage defaults to building RxSwift as a Dynamic Library. - -If you wish to build RxSwift as a Static Library using Carthage you may use the script below to manually modify the framework type before building with Carthage: - -```bash -carthage update RxSwift --platform iOS --no-build -sed -i -e 's/MACH_O_TYPE = mh_dylib/MACH_O_TYPE = staticlib/g' Carthage/Checkouts/RxSwift/Rx.xcodeproj/project.pbxproj -carthage build RxSwift --platform iOS -``` - -### [Swift Package Manager](https://github.com/apple/swift-package-manager) - -> **Note**: There is a critical cross-dependency bug affecting many projects including RxSwift in Swift Package Manager. We've [filed a bug (SR-12303)](https://bugs.swift.org/browse/SR-12303) in early 2020 but have no answer yet. Your mileage may vary. A partial workaround can be found [here](https://github.com/ReactiveX/RxSwift/issues/2127#issuecomment-717830502). - -Create a `Package.swift` file. - -```swift -// swift-tools-version:5.0 - -import PackageDescription - -let package = Package( - name: "RxTestProject", - dependencies: [ - .package(url: "https://github.com/ReactiveX/RxSwift.git", .exact("6.5.0")) - ], - targets: [ - .target(name: "RxTestProject", dependencies: ["RxSwift", "RxCocoa"]) - ] -) -``` - -```bash -$ swift build -``` - -To build or test a module with RxTest dependency, set `TEST=1`. - -```bash -$ TEST=1 swift test -``` - -### Manually using git submodules - -* Add RxSwift as a submodule - -```bash -$ git submodule add git@github.com:ReactiveX/RxSwift.git -``` - -* Drag `Rx.xcodeproj` into Project Navigator -* Go to `Project > Targets > Build Phases > Link Binary With Libraries`, click `+` and select `RxSwift`, `RxCocoa` and `RxRelay` targets - -## References - -* [http://reactivex.io/](http://reactivex.io/) -* [Reactive Extensions GitHub (GitHub)](https://github.com/Reactive-Extensions) -* [RxSwift RayWenderlich.com Book](https://store.raywenderlich.com/products/rxswift-reactive-programming-with-swift) -* [RxSwift: Debunking the myth of hard (YouTube)](https://www.youtube.com/watch?v=GdvLP0ZAhhc) -* [Boxue.io RxSwift Online Course](https://boxueio.com/series/rxswift-101) (Chinese 🇨🇳) -* [Expert to Expert: Brian Beckman and Erik Meijer - Inside the .NET Reactive Framework (Rx) (video)](https://youtu.be/looJcaeboBY) -* [Reactive Programming Overview (Jafar Husain from Netflix)](https://youtu.be/-8Y1-lE6NSA) -* [Subject/Observer is Dual to Iterator (paper)](http://csl.stanford.edu/~christos/pldi2010.fit/meijer.duality.pdf) -* [Rx standard sequence operators visualized (visualization tool)](http://rxmarbles.com/) -* [Haskell](https://www.haskell.org/) diff --git a/Pods/RxCocoa/RxCocoa/Common/ControlTarget.swift b/Pods/RxCocoa/RxCocoa/Common/ControlTarget.swift deleted file mode 100644 index 231c3fe..0000000 --- a/Pods/RxCocoa/RxCocoa/Common/ControlTarget.swift +++ /dev/null @@ -1,88 +0,0 @@ -// -// ControlTarget.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 2/21/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) || os(macOS) - -import RxSwift - -#if os(iOS) || os(tvOS) - import UIKit - - typealias Control = UIKit.UIControl -#elseif os(macOS) - import Cocoa - - typealias Control = Cocoa.NSControl -#endif - -// This should be only used from `MainScheduler` -final class ControlTarget: RxTarget { - typealias Callback = (Control) -> Void - - let selector: Selector = #selector(ControlTarget.eventHandler(_:)) - - weak var control: Control? -#if os(iOS) || os(tvOS) - let controlEvents: UIControl.Event -#endif - var callback: Callback? - #if os(iOS) || os(tvOS) - init(control: Control, controlEvents: UIControl.Event, callback: @escaping Callback) { - MainScheduler.ensureRunningOnMainThread() - - self.control = control - self.controlEvents = controlEvents - self.callback = callback - - super.init() - - control.addTarget(self, action: selector, for: controlEvents) - - let method = self.method(for: selector) - if method == nil { - rxFatalError("Can't find method") - } - } -#elseif os(macOS) - init(control: Control, callback: @escaping Callback) { - MainScheduler.ensureRunningOnMainThread() - - self.control = control - self.callback = callback - - super.init() - - control.target = self - control.action = self.selector - - let method = self.method(for: self.selector) - if method == nil { - rxFatalError("Can't find method") - } - } -#endif - - @objc func eventHandler(_ sender: Control!) { - if let callback = self.callback, let control = self.control { - callback(control) - } - } - - override func dispose() { - super.dispose() -#if os(iOS) || os(tvOS) - self.control?.removeTarget(self, action: self.selector, for: self.controlEvents) -#elseif os(macOS) - self.control?.target = nil - self.control?.action = nil -#endif - self.callback = nil - } -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/Common/DelegateProxy.swift b/Pods/RxCocoa/RxCocoa/Common/DelegateProxy.swift deleted file mode 100644 index d103448..0000000 --- a/Pods/RxCocoa/RxCocoa/Common/DelegateProxy.swift +++ /dev/null @@ -1,294 +0,0 @@ -// -// DelegateProxy.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 6/14/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if !os(Linux) - - import RxSwift - #if SWIFT_PACKAGE && !os(Linux) - import RxCocoaRuntime - #endif - - /// Base class for `DelegateProxyType` protocol. - /// - /// This implementation is not thread safe and can be used only from one thread (Main thread). - open class DelegateProxy: _RXDelegateProxy { - public typealias ParentObject = P - public typealias Delegate = D - - private var _sentMessageForSelector = [Selector: MessageDispatcher]() - private var _methodInvokedForSelector = [Selector: MessageDispatcher]() - - /// Parent object associated with delegate proxy. - private weak var _parentObject: ParentObject? - - private let _currentDelegateFor: (ParentObject) -> AnyObject? - private let _setCurrentDelegateTo: (AnyObject?, ParentObject) -> Void - - /// Initializes new instance. - /// - /// - parameter parentObject: Optional parent object that owns `DelegateProxy` as associated object. - public init(parentObject: ParentObject, delegateProxy: Proxy.Type) - where Proxy: DelegateProxy, Proxy.ParentObject == ParentObject, Proxy.Delegate == Delegate { - self._parentObject = parentObject - self._currentDelegateFor = delegateProxy._currentDelegate - self._setCurrentDelegateTo = delegateProxy._setCurrentDelegate - - MainScheduler.ensureRunningOnMainThread() - #if TRACE_RESOURCES - _ = Resources.incrementTotal() - #endif - super.init() - } - - /** - Returns observable sequence of invocations of delegate methods. Elements are sent *before method is invoked*. - - Only methods that have `void` return value can be observed using this method because - those methods are used as a notification mechanism. It doesn't matter if they are optional - or not. Observing is performed by installing a hidden associated `PublishSubject` that is - used to dispatch messages to observers. - - Delegate methods that have non `void` return value can't be observed directly using this method - because: - * those methods are not intended to be used as a notification mechanism, but as a behavior customization mechanism - * there is no sensible automatic way to determine a default return value - - In case observing of delegate methods that have return type is required, it can be done by - manually installing a `PublishSubject` or `BehaviorSubject` and implementing delegate method. - - e.g. - - // delegate proxy part (RxScrollViewDelegateProxy) - - let internalSubject = PublishSubject - - public func requiredDelegateMethod(scrollView: UIScrollView, arg1: CGPoint) -> Bool { - internalSubject.on(.next(arg1)) - return self._forwardToDelegate?.requiredDelegateMethod?(scrollView, arg1: arg1) ?? defaultReturnValue - } - - .... - - // reactive property implementation in a real class (`UIScrollView`) - public var property: Observable { - let proxy = RxScrollViewDelegateProxy.proxy(for: base) - return proxy.internalSubject.asObservable() - } - - **In case calling this method prints "Delegate proxy is already implementing `\(selector)`, - a more performant way of registering might exist.", that means that manual observing method - is required analog to the example above because delegate method has already been implemented.** - - - parameter selector: Selector used to filter observed invocations of delegate methods. - - returns: Observable sequence of arguments passed to `selector` method. - */ - open func sentMessage(_ selector: Selector) -> Observable<[Any]> { - MainScheduler.ensureRunningOnMainThread() - - let subject = self._sentMessageForSelector[selector] - - if let subject = subject { - return subject.asObservable() - } - else { - let subject = MessageDispatcher(selector: selector, delegateProxy: self) - self._sentMessageForSelector[selector] = subject - return subject.asObservable() - } - } - - /** - Returns observable sequence of invoked delegate methods. Elements are sent *after method is invoked*. - - Only methods that have `void` return value can be observed using this method because - those methods are used as a notification mechanism. It doesn't matter if they are optional - or not. Observing is performed by installing a hidden associated `PublishSubject` that is - used to dispatch messages to observers. - - Delegate methods that have non `void` return value can't be observed directly using this method - because: - * those methods are not intended to be used as a notification mechanism, but as a behavior customization mechanism - * there is no sensible automatic way to determine a default return value - - In case observing of delegate methods that have return type is required, it can be done by - manually installing a `PublishSubject` or `BehaviorSubject` and implementing delegate method. - - e.g. - - // delegate proxy part (RxScrollViewDelegateProxy) - - let internalSubject = PublishSubject - - public func requiredDelegateMethod(scrollView: UIScrollView, arg1: CGPoint) -> Bool { - internalSubject.on(.next(arg1)) - return self._forwardToDelegate?.requiredDelegateMethod?(scrollView, arg1: arg1) ?? defaultReturnValue - } - - .... - - // reactive property implementation in a real class (`UIScrollView`) - public var property: Observable { - let proxy = RxScrollViewDelegateProxy.proxy(for: base) - return proxy.internalSubject.asObservable() - } - - **In case calling this method prints "Delegate proxy is already implementing `\(selector)`, - a more performant way of registering might exist.", that means that manual observing method - is required analog to the example above because delegate method has already been implemented.** - - - parameter selector: Selector used to filter observed invocations of delegate methods. - - returns: Observable sequence of arguments passed to `selector` method. - */ - open func methodInvoked(_ selector: Selector) -> Observable<[Any]> { - MainScheduler.ensureRunningOnMainThread() - - let subject = self._methodInvokedForSelector[selector] - - if let subject = subject { - return subject.asObservable() - } - else { - let subject = MessageDispatcher(selector: selector, delegateProxy: self) - self._methodInvokedForSelector[selector] = subject - return subject.asObservable() - } - } - - fileprivate func checkSelectorIsObservable(_ selector: Selector) { - MainScheduler.ensureRunningOnMainThread() - - if self.hasWiredImplementation(for: selector) { - print("⚠️ Delegate proxy is already implementing `\(selector)`, a more performant way of registering might exist.") - return - } - - if self.voidDelegateMethodsContain(selector) { - return - } - - // In case `_forwardToDelegate` is `nil`, it is assumed the check is being done prematurely. - if !(self._forwardToDelegate?.responds(to: selector) ?? true) { - print("⚠️ Using delegate proxy dynamic interception method but the target delegate object doesn't respond to the requested selector. " + - "In case pure Swift delegate proxy is being used please use manual observing method by using`PublishSubject`s. " + - " (selector: `\(selector)`, forwardToDelegate: `\(self._forwardToDelegate ?? self)`)") - } - } - - // proxy - - open override func _sentMessage(_ selector: Selector, withArguments arguments: [Any]) { - self._sentMessageForSelector[selector]?.on(.next(arguments)) - } - - open override func _methodInvoked(_ selector: Selector, withArguments arguments: [Any]) { - self._methodInvokedForSelector[selector]?.on(.next(arguments)) - } - - /// Returns reference of normal delegate that receives all forwarded messages - /// through `self`. - /// - /// - returns: Value of reference if set or nil. - open func forwardToDelegate() -> Delegate? { - return castOptionalOrFatalError(self._forwardToDelegate) - } - - /// Sets reference of normal delegate that receives all forwarded messages - /// through `self`. - /// - /// - parameter delegate: Reference of delegate that receives all messages through `self`. - /// - parameter retainDelegate: Should `self` retain `forwardToDelegate`. - open func setForwardToDelegate(_ delegate: Delegate?, retainDelegate: Bool) { - #if DEBUG // 4.0 all configurations - MainScheduler.ensureRunningOnMainThread() - #endif - self._setForwardToDelegate(delegate, retainDelegate: retainDelegate) - - let sentSelectors: [Selector] = self._sentMessageForSelector.values.filter { $0.hasObservers }.map { $0.selector } - let invokedSelectors: [Selector] = self._methodInvokedForSelector.values.filter { $0.hasObservers }.map { $0.selector } - let allUsedSelectors = sentSelectors + invokedSelectors - - for selector in Set(allUsedSelectors) { - self.checkSelectorIsObservable(selector) - } - - self.reset() - } - - private func hasObservers(selector: Selector) -> Bool { - return (self._sentMessageForSelector[selector]?.hasObservers ?? false) - || (self._methodInvokedForSelector[selector]?.hasObservers ?? false) - } - - override open func responds(to aSelector: Selector!) -> Bool { - guard let aSelector = aSelector else { return false } - return super.responds(to: aSelector) - || (self._forwardToDelegate?.responds(to: aSelector) ?? false) - || (self.voidDelegateMethodsContain(aSelector) && self.hasObservers(selector: aSelector)) - } - - fileprivate func reset() { - guard let parentObject = self._parentObject else { return } - - let maybeCurrentDelegate = self._currentDelegateFor(parentObject) - - if maybeCurrentDelegate === self { - self._setCurrentDelegateTo(nil, parentObject) - self._setCurrentDelegateTo(castOrFatalError(self), parentObject) - } - } - - deinit { - for v in self._sentMessageForSelector.values { - v.on(.completed) - } - for v in self._methodInvokedForSelector.values { - v.on(.completed) - } - #if TRACE_RESOURCES - _ = Resources.decrementTotal() - #endif - } - - - } - - private let mainScheduler = MainScheduler() - - private final class MessageDispatcher { - private let dispatcher: PublishSubject<[Any]> - private let result: Observable<[Any]> - - fileprivate let selector: Selector - - init(selector: Selector, delegateProxy _delegateProxy: DelegateProxy) { - weak var weakDelegateProxy = _delegateProxy - - let dispatcher = PublishSubject<[Any]>() - self.dispatcher = dispatcher - self.selector = selector - - self.result = dispatcher - .do(onSubscribed: { weakDelegateProxy?.checkSelectorIsObservable(selector); weakDelegateProxy?.reset() }, onDispose: { weakDelegateProxy?.reset() }) - .share() - .subscribe(on: mainScheduler) - } - - var on: (Event<[Any]>) -> Void { - return self.dispatcher.on - } - - var hasObservers: Bool { - return self.dispatcher.hasObservers - } - - func asObservable() -> Observable<[Any]> { - return self.result - } - } - -#endif diff --git a/Pods/RxCocoa/RxCocoa/Common/DelegateProxyType.swift b/Pods/RxCocoa/RxCocoa/Common/DelegateProxyType.swift deleted file mode 100644 index 7ca9c97..0000000 --- a/Pods/RxCocoa/RxCocoa/Common/DelegateProxyType.swift +++ /dev/null @@ -1,435 +0,0 @@ -// -// DelegateProxyType.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 6/15/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if !os(Linux) - - import Foundation - import RxSwift - -/** -`DelegateProxyType` protocol enables using both normal delegates and Rx observable sequences with -views that can have only one delegate/datasource registered. - -`Proxies` store information about observers, subscriptions and delegates -for specific views. - -Type implementing `DelegateProxyType` should never be initialized directly. - -To fetch initialized instance of type implementing `DelegateProxyType`, `proxy` method -should be used. - -This is more or less how it works. - - - - +-------------------------------------------+ - | | - | UIView subclass (UIScrollView) | - | | - +-----------+-------------------------------+ - | - | Delegate - | - | - +-----------v-------------------------------+ - | | - | Delegate proxy : DelegateProxyType +-----+----> Observable - | , UIScrollViewDelegate | | - +-----------+-------------------------------+ +----> Observable - | | - | +----> Observable - | | - | forwards events | - | to custom delegate | - | v - +-----------v-------------------------------+ - | | - | Custom delegate (UIScrollViewDelegate) | - | | - +-------------------------------------------+ - - -Since RxCocoa needs to automagically create those Proxies and because views that have delegates can be hierarchical - - UITableView : UIScrollView : UIView - -.. and corresponding delegates are also hierarchical - - UITableViewDelegate : UIScrollViewDelegate : NSObject - -... this mechanism can be extended by using the following snippet in `registerKnownImplementations` or in some other - part of your app that executes before using `rx.*` (e.g. appDidFinishLaunching). - - RxScrollViewDelegateProxy.register { RxTableViewDelegateProxy(parentObject: $0) } - -*/ -public protocol DelegateProxyType: AnyObject { - associatedtype ParentObject: AnyObject - associatedtype Delegate - - /// It is require that enumerate call `register` of the extended DelegateProxy subclasses here. - static func registerKnownImplementations() - - /// Unique identifier for delegate - static var identifier: UnsafeRawPointer { get } - - /// Returns designated delegate property for object. - /// - /// Objects can have multiple delegate properties. - /// - /// Each delegate property needs to have it's own type implementing `DelegateProxyType`. - /// - /// It's abstract method. - /// - /// - parameter object: Object that has delegate property. - /// - returns: Value of delegate property. - static func currentDelegate(for object: ParentObject) -> Delegate? - - /// Sets designated delegate property for object. - /// - /// Objects can have multiple delegate properties. - /// - /// Each delegate property needs to have it's own type implementing `DelegateProxyType`. - /// - /// It's abstract method. - /// - /// - parameter delegate: Delegate value. - /// - parameter object: Object that has delegate property. - static func setCurrentDelegate(_ delegate: Delegate?, to object: ParentObject) - - /// Returns reference of normal delegate that receives all forwarded messages - /// through `self`. - /// - /// - returns: Value of reference if set or nil. - func forwardToDelegate() -> Delegate? - - /// Sets reference of normal delegate that receives all forwarded messages - /// through `self`. - /// - /// - parameter forwardToDelegate: Reference of delegate that receives all messages through `self`. - /// - parameter retainDelegate: Should `self` retain `forwardToDelegate`. - func setForwardToDelegate(_ forwardToDelegate: Delegate?, retainDelegate: Bool) -} - -// default implementations -extension DelegateProxyType { - /// Unique identifier for delegate - public static var identifier: UnsafeRawPointer { - let delegateIdentifier = ObjectIdentifier(Delegate.self) - let integerIdentifier = Int(bitPattern: delegateIdentifier) - return UnsafeRawPointer(bitPattern: integerIdentifier)! - } -} - -// workaround of Delegate: class -extension DelegateProxyType { - static func _currentDelegate(for object: ParentObject) -> AnyObject? { - currentDelegate(for: object).map { $0 as AnyObject } - } - - static func _setCurrentDelegate(_ delegate: AnyObject?, to object: ParentObject) { - setCurrentDelegate(castOptionalOrFatalError(delegate), to: object) - } - - func _forwardToDelegate() -> AnyObject? { - self.forwardToDelegate().map { $0 as AnyObject } - } - - func _setForwardToDelegate(_ forwardToDelegate: AnyObject?, retainDelegate: Bool) { - self.setForwardToDelegate(castOptionalOrFatalError(forwardToDelegate), retainDelegate: retainDelegate) - } -} - -extension DelegateProxyType { - - /// Store DelegateProxy subclass to factory. - /// When make 'Rx*DelegateProxy' subclass, call 'Rx*DelegateProxySubclass.register(for:_)' 1 time, or use it in DelegateProxyFactory - /// 'Rx*DelegateProxy' can have one subclass implementation per concrete ParentObject type. - /// Should call it from concrete DelegateProxy type, not generic. - public static func register(make: @escaping (Parent) -> Self) { - self.factory.extend(make: make) - } - - /// Creates new proxy for target object. - /// Should not call this function directory, use 'DelegateProxy.proxy(for:)' - public static func createProxy(for object: AnyObject) -> Self { - castOrFatalError(factory.createProxy(for: object)) - } - - /// Returns existing proxy for object or installs new instance of delegate proxy. - /// - /// - parameter object: Target object on which to install delegate proxy. - /// - returns: Installed instance of delegate proxy. - /// - /// - /// extension Reactive where Base: UISearchBar { - /// - /// public var delegate: DelegateProxy { - /// return RxSearchBarDelegateProxy.proxy(for: base) - /// } - /// - /// public var text: ControlProperty { - /// let source: Observable = self.delegate.observe(#selector(UISearchBarDelegate.searchBar(_:textDidChange:))) - /// ... - /// } - /// } - public static func proxy(for object: ParentObject) -> Self { - MainScheduler.ensureRunningOnMainThread() - - let maybeProxy = self.assignedProxy(for: object) - - let proxy: AnyObject - if let existingProxy = maybeProxy { - proxy = existingProxy - } - else { - proxy = castOrFatalError(self.createProxy(for: object)) - self.assignProxy(proxy, toObject: object) - assert(self.assignedProxy(for: object) === proxy) - } - let currentDelegate = self._currentDelegate(for: object) - let delegateProxy: Self = castOrFatalError(proxy) - - if currentDelegate !== delegateProxy { - delegateProxy._setForwardToDelegate(currentDelegate, retainDelegate: false) - assert(delegateProxy._forwardToDelegate() === currentDelegate) - self._setCurrentDelegate(proxy, to: object) - assert(self._currentDelegate(for: object) === proxy) - assert(delegateProxy._forwardToDelegate() === currentDelegate) - } - - return delegateProxy - } - - /// Sets forward delegate for `DelegateProxyType` associated with a specific object and return disposable that can be used to unset the forward to delegate. - /// Using this method will also make sure that potential original object cached selectors are cleared and will report any accidental forward delegate mutations. - /// - /// - parameter forwardDelegate: Delegate object to set. - /// - parameter retainDelegate: Retain `forwardDelegate` while it's being set. - /// - parameter onProxyForObject: Object that has `delegate` property. - /// - returns: Disposable object that can be used to clear forward delegate. - public static func installForwardDelegate(_ forwardDelegate: Delegate, retainDelegate: Bool, onProxyForObject object: ParentObject) -> Disposable { - weak var weakForwardDelegate: AnyObject? = forwardDelegate as AnyObject - let proxy = self.proxy(for: object) - - assert(proxy._forwardToDelegate() === nil, "This is a feature to warn you that there is already a delegate (or data source) set somewhere previously. The action you are trying to perform will clear that delegate (data source) and that means that some of your features that depend on that delegate (data source) being set will likely stop working.\n" + - "If you are ok with this, try to set delegate (data source) to `nil` in front of this operation.\n" + - " This is the source object value: \(object)\n" + - " This is the original delegate (data source) value: \(proxy.forwardToDelegate()!)\n" + - "Hint: Maybe delegate was already set in xib or storyboard and now it's being overwritten in code.\n") - - proxy.setForwardToDelegate(forwardDelegate, retainDelegate: retainDelegate) - - return Disposables.create { - MainScheduler.ensureRunningOnMainThread() - - let delegate: AnyObject? = weakForwardDelegate - - assert(delegate == nil || proxy._forwardToDelegate() === delegate, "Delegate was changed from time it was first set. Current \(String(describing: proxy.forwardToDelegate())), and it should have been \(proxy)") - - proxy.setForwardToDelegate(nil, retainDelegate: retainDelegate) - } - } -} - - -// private extensions -extension DelegateProxyType { - private static var factory: DelegateProxyFactory { - DelegateProxyFactory.sharedFactory(for: self) - } - - private static func assignedProxy(for object: ParentObject) -> AnyObject? { - let maybeDelegate = objc_getAssociatedObject(object, self.identifier) - return castOptionalOrFatalError(maybeDelegate) - } - - private static func assignProxy(_ proxy: AnyObject, toObject object: ParentObject) { - objc_setAssociatedObject(object, self.identifier, proxy, .OBJC_ASSOCIATION_RETAIN) - } -} - -/// Describes an object that has a delegate. -public protocol HasDelegate: AnyObject { - /// Delegate type - associatedtype Delegate - - /// Delegate - var delegate: Delegate? { get set } -} - -extension DelegateProxyType where ParentObject: HasDelegate, Self.Delegate == ParentObject.Delegate { - public static func currentDelegate(for object: ParentObject) -> Delegate? { - object.delegate - } - - public static func setCurrentDelegate(_ delegate: Delegate?, to object: ParentObject) { - object.delegate = delegate - } -} - -/// Describes an object that has a data source. -public protocol HasDataSource: AnyObject { - /// Data source type - associatedtype DataSource - - /// Data source - var dataSource: DataSource? { get set } -} - -extension DelegateProxyType where ParentObject: HasDataSource, Self.Delegate == ParentObject.DataSource { - public static func currentDelegate(for object: ParentObject) -> Delegate? { - object.dataSource - } - - public static func setCurrentDelegate(_ delegate: Delegate?, to object: ParentObject) { - object.dataSource = delegate - } -} - -/// Describes an object that has a prefetch data source. -@available(iOS 10.0, tvOS 10.0, *) -public protocol HasPrefetchDataSource: AnyObject { - /// Prefetch data source type - associatedtype PrefetchDataSource - - /// Prefetch data source - var prefetchDataSource: PrefetchDataSource? { get set } -} - -@available(iOS 10.0, tvOS 10.0, *) -extension DelegateProxyType where ParentObject: HasPrefetchDataSource, Self.Delegate == ParentObject.PrefetchDataSource { - public static func currentDelegate(for object: ParentObject) -> Delegate? { - object.prefetchDataSource - } - - public static func setCurrentDelegate(_ delegate: Delegate?, to object: ParentObject) { - object.prefetchDataSource = delegate - } -} - - #if os(iOS) || os(tvOS) - import UIKit - - extension ObservableType { - func subscribeProxyDataSource(ofObject object: DelegateProxy.ParentObject, dataSource: DelegateProxy.Delegate, retainDataSource: Bool, binding: @escaping (DelegateProxy, Event) -> Void) - -> Disposable - where DelegateProxy.ParentObject: UIView - , DelegateProxy.Delegate: AnyObject { - let proxy = DelegateProxy.proxy(for: object) - let unregisterDelegate = DelegateProxy.installForwardDelegate(dataSource, retainDelegate: retainDataSource, onProxyForObject: object) - - // Do not perform layoutIfNeeded if the object is still not in the view hierarchy - if object.window != nil { - // this is needed to flush any delayed old state (https://github.com/RxSwiftCommunity/RxDataSources/pull/75) - object.layoutIfNeeded() - } - - let subscription = self.asObservable() - .observe(on:MainScheduler()) - .catch { error in - bindingError(error) - return Observable.empty() - } - // source can never end, otherwise it would release the subscriber, and deallocate the data source - .concat(Observable.never()) - .take(until: object.rx.deallocated) - .subscribe { [weak object] (event: Event) in - - if let object = object { - assert(proxy === DelegateProxy.currentDelegate(for: object), "Proxy changed from the time it was first set.\nOriginal: \(proxy)\nExisting: \(String(describing: DelegateProxy.currentDelegate(for: object)))") - } - - binding(proxy, event) - - switch event { - case .error(let error): - bindingError(error) - unregisterDelegate.dispose() - case .completed: - unregisterDelegate.dispose() - default: - break - } - } - - return Disposables.create { [weak object] in - subscription.dispose() - - if object?.window != nil { - object?.layoutIfNeeded() - } - - unregisterDelegate.dispose() - } - } - } - - #endif - - /** - - To add delegate proxy subclasses call `DelegateProxySubclass.register()` in `registerKnownImplementations` or in some other - part of your app that executes before using `rx.*` (e.g. appDidFinishLaunching). - - class RxScrollViewDelegateProxy: DelegateProxy { - public static func registerKnownImplementations() { - self.register { RxTableViewDelegateProxy(parentObject: $0) } - } - ... - - - */ - private class DelegateProxyFactory { - private static var _sharedFactories: [UnsafeRawPointer: DelegateProxyFactory] = [:] - - fileprivate static func sharedFactory(for proxyType: DelegateProxy.Type) -> DelegateProxyFactory { - MainScheduler.ensureRunningOnMainThread() - let identifier = DelegateProxy.identifier - if let factory = _sharedFactories[identifier] { - return factory - } - let factory = DelegateProxyFactory(for: proxyType) - _sharedFactories[identifier] = factory - DelegateProxy.registerKnownImplementations() - return factory - } - - private var _factories: [ObjectIdentifier: ((AnyObject) -> AnyObject)] - private var _delegateProxyType: Any.Type - private var _identifier: UnsafeRawPointer - - private init(for proxyType: DelegateProxy.Type) { - self._factories = [:] - self._delegateProxyType = proxyType - self._identifier = proxyType.identifier - } - - fileprivate func extend(make: @escaping (ParentObject) -> DelegateProxy) { - MainScheduler.ensureRunningOnMainThread() - precondition(self._identifier == DelegateProxy.identifier, "Delegate proxy has inconsistent identifier") - guard self._factories[ObjectIdentifier(ParentObject.self)] == nil else { - rxFatalError("The factory of \(ParentObject.self) is duplicated. DelegateProxy is not allowed of duplicated base object type.") - } - self._factories[ObjectIdentifier(ParentObject.self)] = { make(castOrFatalError($0)) } - } - - fileprivate func createProxy(for object: AnyObject) -> AnyObject { - MainScheduler.ensureRunningOnMainThread() - var maybeMirror: Mirror? = Mirror(reflecting: object) - while let mirror = maybeMirror { - if let factory = self._factories[ObjectIdentifier(mirror.subjectType)] { - return factory(object) - } - maybeMirror = mirror.superclassMirror - } - rxFatalError("DelegateProxy has no factory of \(object). Implement DelegateProxy subclass for \(object) first.") - } - } - -#endif diff --git a/Pods/RxCocoa/RxCocoa/Common/Infallible+Bind.swift b/Pods/RxCocoa/RxCocoa/Common/Infallible+Bind.swift deleted file mode 100644 index 9622c98..0000000 --- a/Pods/RxCocoa/RxCocoa/Common/Infallible+Bind.swift +++ /dev/null @@ -1,148 +0,0 @@ -// -// Infallible+Bind.swift -// RxCocoa -// -// Created by Shai Mishali on 27/08/2020. -// Copyright © 2020 Krunoslav Zaher. All rights reserved. -// - -import RxSwift - -extension InfallibleType { - /** - Creates new subscription and sends elements to observer(s). - In this form, it's equivalent to the `subscribe` method, but it better conveys intent, and enables - writing more consistent binding code. - - parameter observers: Observers to receives events. - - returns: Disposable object that can be used to unsubscribe the observers. - */ - public func bind(to observers: Observer...) -> Disposable where Observer.Element == Element { - self.subscribe { event in - observers.forEach { $0.on(event) } - } - } - - /** - Creates new subscription and sends elements to observer(s). - In this form, it's equivalent to the `subscribe` method, but it better conveys intent, and enables - writing more consistent binding code. - - parameter observers: Observers to receives events. - - returns: Disposable object that can be used to unsubscribe the observers. - */ - public func bind(to observers: Observer...) -> Disposable where Observer.Element == Element? { - self.map { $0 as Element? } - .subscribe { event in - observers.forEach { $0.on(event) } - } - } - - /** - Subscribes to observable sequence using custom binder function. - - - parameter binder: Function used to bind elements from `self`. - - returns: Object representing subscription. - */ - public func bind(to binder: (Self) -> Result) -> Result { - binder(self) - } - - /** - Subscribes to observable sequence using custom binder function and final parameter passed to binder function - after `self` is passed. - - public func bind(to binder: Self -> R1 -> R2, curriedArgument: R1) -> R2 { - return binder(self)(curriedArgument) - } - - - parameter binder: Function used to bind elements from `self`. - - parameter curriedArgument: Final argument passed to `binder` to finish binding process. - - returns: Object representing subscription. - */ - public func bind(to binder: (Self) -> (R1) -> R2, curriedArgument: R1) -> R2 { - binder(self)(curriedArgument) - } - - /** - Subscribes an element handler to an observable sequence. - In case error occurs in debug mode, `fatalError` will be raised. - In case error occurs in release mode, `error` will be logged. - - - parameter onNext: Action to invoke for each element in the observable sequence. - - returns: Subscription object used to unsubscribe from the observable sequence. - */ - public func bind(onNext: @escaping (Element) -> Void) -> Disposable { - self.subscribe(onNext: onNext) - } - - /** - Creates new subscription and sends elements to `BehaviorRelay`. - - - parameter relays: Target relay for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer from the relay. - */ - public func bind(to relays: BehaviorRelay...) -> Disposable { - return self.subscribe(onNext: { e in - relays.forEach { $0.accept(e) } - }) - } - - /** - Creates new subscription and sends elements to `BehaviorRelay`. - - - parameter relays: Target relay for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer from the relay. - */ - public func bind(to relays: BehaviorRelay...) -> Disposable { - return self.subscribe(onNext: { e in - relays.forEach { $0.accept(e) } - }) - } - - /** - Creates new subscription and sends elements to `PublishRelay`. - - - parameter relays: Target relay for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer from the relay. - */ - public func bind(to relays: PublishRelay...) -> Disposable { - return self.subscribe(onNext: { e in - relays.forEach { $0.accept(e) } - }) - } - - /** - Creates new subscription and sends elements to `PublishRelay`. - - - parameter relays: Target relay for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer from the relay. - */ - public func bind(to relays: PublishRelay...) -> Disposable { - return self.subscribe(onNext: { e in - relays.forEach { $0.accept(e) } - }) - } - - /** - Creates new subscription and sends elements to `ReplayRelay`. - - - parameter relays: Target relay for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer from the relay. - */ - public func bind(to relays: ReplayRelay...) -> Disposable { - return self.subscribe(onNext: { e in - relays.forEach { $0.accept(e) } - }) - } - - /** - Creates new subscription and sends elements to `ReplayRelay`. - - - parameter relays: Target relay for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer from the relay. - */ - public func bind(to relays: ReplayRelay...) -> Disposable { - return self.subscribe(onNext: { e in - relays.forEach { $0.accept(e) } - }) - } -} diff --git a/Pods/RxCocoa/RxCocoa/Common/Observable+Bind.swift b/Pods/RxCocoa/RxCocoa/Common/Observable+Bind.swift deleted file mode 100644 index 500154a..0000000 --- a/Pods/RxCocoa/RxCocoa/Common/Observable+Bind.swift +++ /dev/null @@ -1,103 +0,0 @@ -// -// Observable+Bind.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 8/29/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import RxSwift - -extension ObservableType { - /** - Creates new subscription and sends elements to observer(s). - In this form, it's equivalent to the `subscribe` method, but it better conveys intent, and enables - writing more consistent binding code. - - parameter observers: Observers to receives events. - - returns: Disposable object that can be used to unsubscribe the observers. - */ - public func bind(to observers: Observer...) -> Disposable where Observer.Element == Element { - self.subscribe { event in - observers.forEach { $0.on(event) } - } - } - - /** - Creates new subscription and sends elements to observer(s). - In this form, it's equivalent to the `subscribe` method, but it better conveys intent, and enables - writing more consistent binding code. - - parameter observers: Observers to receives events. - - returns: Disposable object that can be used to unsubscribe the observers. - */ - public func bind(to observers: Observer...) -> Disposable where Observer.Element == Element? { - self.map { $0 as Element? } - .subscribe { event in - observers.forEach { $0.on(event) } - } - } - - /** - Subscribes to observable sequence using custom binder function. - - - parameter binder: Function used to bind elements from `self`. - - returns: Object representing subscription. - */ - public func bind(to binder: (Self) -> Result) -> Result { - binder(self) - } - - /** - Subscribes to observable sequence using custom binder function and final parameter passed to binder function - after `self` is passed. - - public func bind(to binder: Self -> R1 -> R2, curriedArgument: R1) -> R2 { - return binder(self)(curriedArgument) - } - - - parameter binder: Function used to bind elements from `self`. - - parameter curriedArgument: Final argument passed to `binder` to finish binding process. - - returns: Object representing subscription. - */ - public func bind(to binder: (Self) -> (R1) -> R2, curriedArgument: R1) -> R2 { - binder(self)(curriedArgument) - } - - /** - Subscribes an element handler to an observable sequence. - In case error occurs in debug mode, `fatalError` will be raised. - In case error occurs in release mode, `error` will be logged. - - - Note: If `object` can't be retained, none of the other closures will be invoked. - - - parameter object: The object to provide an unretained reference on. - - parameter onNext: Action to invoke for each element in the observable sequence. - - returns: Subscription object used to unsubscribe from the observable sequence. - */ - public func bind( - with object: Object, - onNext: @escaping (Object, Element) -> Void - ) -> Disposable { - self.subscribe(onNext: { [weak object] in - guard let object = object else { return } - onNext(object, $0) - }, - onError: { error in - rxFatalErrorInDebug("Binding error: \(error)") - }) - } - - /** - Subscribes an element handler to an observable sequence. - In case error occurs in debug mode, `fatalError` will be raised. - In case error occurs in release mode, `error` will be logged. - - - parameter onNext: Action to invoke for each element in the observable sequence. - - returns: Subscription object used to unsubscribe from the observable sequence. - */ - public func bind(onNext: @escaping (Element) -> Void) -> Disposable { - self.subscribe(onNext: onNext, - onError: { error in - rxFatalErrorInDebug("Binding error: \(error)") - }) - } -} diff --git a/Pods/RxCocoa/RxCocoa/Common/RxCocoaObjCRuntimeError+Extensions.swift b/Pods/RxCocoa/RxCocoa/Common/RxCocoaObjCRuntimeError+Extensions.swift deleted file mode 100644 index 4abf880..0000000 --- a/Pods/RxCocoa/RxCocoa/Common/RxCocoaObjCRuntimeError+Extensions.swift +++ /dev/null @@ -1,161 +0,0 @@ -// -// RxCocoaObjCRuntimeError+Extensions.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 10/9/16. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -#if SWIFT_PACKAGE && !DISABLE_SWIZZLING && !os(Linux) - import RxCocoaRuntime -#endif - -#if !DISABLE_SWIZZLING && !os(Linux) - /// RxCocoa ObjC runtime interception mechanism. - public enum RxCocoaInterceptionMechanism { - /// Unknown message interception mechanism. - case unknown - /// Key value observing interception mechanism. - case kvo - } - - /// RxCocoa ObjC runtime modification errors. - public enum RxCocoaObjCRuntimeError - : Swift.Error - , CustomDebugStringConvertible { - /// Unknown error has occurred. - case unknown(target: AnyObject) - - /** - If the object is reporting a different class then it's real class, that means that there is probably - already some interception mechanism in place or something weird is happening. - - The most common case when this would happen is when using a combination of KVO (`observe`) and `sentMessage`. - - This error is easily resolved by just using `sentMessage` observing before `observe`. - - The reason why the other way around could create issues is because KVO will unregister it's interceptor - class and restore original class. Unfortunately that will happen no matter was there another interceptor - subclass registered in hierarchy or not. - - Failure scenario: - * KVO sets class to be `__KVO__OriginalClass` (subclass of `OriginalClass`) - * `sentMessage` sets object class to be `_RX_namespace___KVO__OriginalClass` (subclass of `__KVO__OriginalClass`) - * then unobserving with KVO will restore class to be `OriginalClass` -> failure point (possibly a bug in KVO) - - The reason why changing order of observing works is because any interception method on unregistration - should return object's original real class (if that doesn't happen then it's really easy to argue that's a bug - in that interception mechanism). - - This library won't remove registered interceptor even if there aren't any observers left because - it's highly unlikely it would have any benefit in real world use cases, and it's even more - dangerous. - */ - case objectMessagesAlreadyBeingIntercepted(target: AnyObject, interceptionMechanism: RxCocoaInterceptionMechanism) - - /// Trying to observe messages for selector that isn't implemented. - case selectorNotImplemented(target: AnyObject) - - /// Core Foundation classes are usually toll free bridged. Those classes crash the program in case - /// `object_setClass` is performed on them. - /// - /// There is a possibility to just swizzle methods on original object, but since those won't be usual use - /// cases for this library, then an error will just be reported for now. - case cantInterceptCoreFoundationTollFreeBridgedObjects(target: AnyObject) - - /// Two libraries have simultaneously tried to modify ObjC runtime and that was detected. This can only - /// happen in scenarios where multiple interception libraries are used. - /// - /// To synchronize other libraries intercepting messages for an object, use `synchronized` on target object and - /// it's meta-class. - case threadingCollisionWithOtherInterceptionMechanism(target: AnyObject) - - /// For some reason saving original method implementation under RX namespace failed. - case savingOriginalForwardingMethodFailed(target: AnyObject) - - /// Intercepting a sent message by replacing a method implementation with `_objc_msgForward` failed for some reason. - case replacingMethodWithForwardingImplementation(target: AnyObject) - - /// Attempt to intercept one of the performance sensitive methods: - /// * class - /// * respondsToSelector: - /// * methodSignatureForSelector: - /// * forwardingTargetForSelector: - case observingPerformanceSensitiveMessages(target: AnyObject) - - /// Message implementation has unsupported return type (for example large struct). The reason why this is a error - /// is because in some cases intercepting sent messages requires replacing implementation with `_objc_msgForward_stret` - /// instead of `_objc_msgForward`. - /// - /// The unsupported cases should be fairly uncommon. - case observingMessagesWithUnsupportedReturnType(target: AnyObject) - } - - extension RxCocoaObjCRuntimeError { - /// A textual representation of `self`, suitable for debugging. - public var debugDescription: String { - switch self { - case let .unknown(target): - return "Unknown error occurred.\nTarget: `\(target)`" - case let .objectMessagesAlreadyBeingIntercepted(target, interceptionMechanism): - let interceptionMechanismDescription = interceptionMechanism == .kvo ? "KVO" : "other interception mechanism" - return "Collision between RxCocoa interception mechanism and \(interceptionMechanismDescription)." - + " To resolve this conflict please use this interception mechanism first.\nTarget: \(target)" - case let .selectorNotImplemented(target): - return "Trying to observe messages for selector that isn't implemented.\nTarget: \(target)" - case let .cantInterceptCoreFoundationTollFreeBridgedObjects(target): - return "Interception of messages sent to Core Foundation isn't supported.\nTarget: \(target)" - case let .threadingCollisionWithOtherInterceptionMechanism(target): - return "Detected a conflict while modifying ObjC runtime.\nTarget: \(target)" - case let .savingOriginalForwardingMethodFailed(target): - return "Saving original method implementation failed.\nTarget: \(target)" - case let .replacingMethodWithForwardingImplementation(target): - return "Intercepting a sent message by replacing a method implementation with `_objc_msgForward` failed for some reason.\nTarget: \(target)" - case let .observingPerformanceSensitiveMessages(target): - return "Attempt to intercept one of the performance sensitive methods. \nTarget: \(target)" - case let .observingMessagesWithUnsupportedReturnType(target): - return "Attempt to intercept a method with unsupported return type. \nTarget: \(target)" - } - } - } - - // MARK: Conversions `NSError` > `RxCocoaObjCRuntimeError` - - extension Error { - func rxCocoaErrorForTarget(_ target: AnyObject) -> RxCocoaObjCRuntimeError { - let error = self as NSError - - if error.domain == RXObjCRuntimeErrorDomain { - let errorCode = RXObjCRuntimeError(rawValue: error.code) ?? .unknown - - switch errorCode { - case .unknown: - return .unknown(target: target) - case .objectMessagesAlreadyBeingIntercepted: - let isKVO = (error.userInfo[RXObjCRuntimeErrorIsKVOKey] as? NSNumber)?.boolValue ?? false - return .objectMessagesAlreadyBeingIntercepted(target: target, interceptionMechanism: isKVO ? .kvo : .unknown) - case .selectorNotImplemented: - return .selectorNotImplemented(target: target) - case .cantInterceptCoreFoundationTollFreeBridgedObjects: - return .cantInterceptCoreFoundationTollFreeBridgedObjects(target: target) - case .threadingCollisionWithOtherInterceptionMechanism: - return .threadingCollisionWithOtherInterceptionMechanism(target: target) - case .savingOriginalForwardingMethodFailed: - return .savingOriginalForwardingMethodFailed(target: target) - case .replacingMethodWithForwardingImplementation: - return .replacingMethodWithForwardingImplementation(target: target) - case .observingPerformanceSensitiveMessages: - return .observingPerformanceSensitiveMessages(target: target) - case .observingMessagesWithUnsupportedReturnType: - return .observingMessagesWithUnsupportedReturnType(target: target) - @unknown default: - fatalError("Unhandled Objective C Runtime Error") - } - } - - return RxCocoaObjCRuntimeError.unknown(target: target) - } - } - -#endif - diff --git a/Pods/RxCocoa/RxCocoa/Common/RxTarget.swift b/Pods/RxCocoa/RxCocoa/Common/RxTarget.swift deleted file mode 100644 index 5a2c464..0000000 --- a/Pods/RxCocoa/RxCocoa/Common/RxTarget.swift +++ /dev/null @@ -1,43 +0,0 @@ -// -// RxTarget.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 7/12/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import Foundation - -import RxSwift - -class RxTarget : NSObject - , Disposable { - - private var retainSelf: RxTarget? - - override init() { - super.init() - self.retainSelf = self - -#if TRACE_RESOURCES - _ = Resources.incrementTotal() -#endif - -#if DEBUG - MainScheduler.ensureRunningOnMainThread() -#endif - } - - func dispose() { -#if DEBUG - MainScheduler.ensureRunningOnMainThread() -#endif - self.retainSelf = nil - } - -#if TRACE_RESOURCES - deinit { - _ = Resources.decrementTotal() - } -#endif -} diff --git a/Pods/RxCocoa/RxCocoa/Common/SectionedViewDataSourceType.swift b/Pods/RxCocoa/RxCocoa/Common/SectionedViewDataSourceType.swift deleted file mode 100644 index 5c3cf3c..0000000 --- a/Pods/RxCocoa/RxCocoa/Common/SectionedViewDataSourceType.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// SectionedViewDataSourceType.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 1/10/16. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -import Foundation - -/// Data source with access to underlying sectioned model. -public protocol SectionedViewDataSourceType { - /// Returns model at index path. - /// - /// In case data source doesn't contain any sections when this method is being called, `RxCocoaError.ItemsNotYetBound(object: self)` is thrown. - - /// - parameter indexPath: Model index path - /// - returns: Model at index path. - func model(at indexPath: IndexPath) throws -> Any -} diff --git a/Pods/RxCocoa/RxCocoa/Common/TextInput.swift b/Pods/RxCocoa/RxCocoa/Common/TextInput.swift deleted file mode 100644 index 2268882..0000000 --- a/Pods/RxCocoa/RxCocoa/Common/TextInput.swift +++ /dev/null @@ -1,78 +0,0 @@ -// -// TextInput.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 5/12/16. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -import RxSwift - -#if os(iOS) || os(tvOS) - import UIKit - - /// Represents text input with reactive extensions. - public struct TextInput { - /// Base text input to extend. - public let base: Base - - /// Reactive wrapper for `text` property. - public let text: ControlProperty - - /// Initializes new text input. - /// - /// - parameter base: Base object. - /// - parameter text: Textual control property. - public init(base: Base, text: ControlProperty) { - self.base = base - self.text = text - } - } - - extension Reactive where Base: UITextField { - /// Reactive text input. - public var textInput: TextInput { - return TextInput(base: base, text: self.text) - } - } - - extension Reactive where Base: UITextView { - /// Reactive text input. - public var textInput: TextInput { - return TextInput(base: base, text: self.text) - } - } - -#endif - -#if os(macOS) - import Cocoa - - /// Represents text input with reactive extensions. - public struct TextInput { - /// Base text input to extend. - public let base: Base - - /// Reactive wrapper for `text` property. - public let text: ControlProperty - - /// Initializes new text input. - /// - /// - parameter base: Base object. - /// - parameter text: Textual control property. - public init(base: Base, text: ControlProperty) { - self.base = base - self.text = text - } - } - - extension Reactive where Base: NSTextField, Base: NSTextInputClient { - /// Reactive text input. - public var textInput: TextInput { - return TextInput(base: self.base, text: self.text) - } - } - -#endif - - diff --git a/Pods/RxCocoa/RxCocoa/Foundation/KVORepresentable+CoreGraphics.swift b/Pods/RxCocoa/RxCocoa/Foundation/KVORepresentable+CoreGraphics.swift deleted file mode 100644 index 30026bf..0000000 --- a/Pods/RxCocoa/RxCocoa/Foundation/KVORepresentable+CoreGraphics.swift +++ /dev/null @@ -1,68 +0,0 @@ -// -// KVORepresentable+CoreGraphics.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 11/14/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if !os(Linux) - -import RxSwift -import CoreGraphics - -import Foundation - -#if arch(x86_64) || arch(arm64) - let CGRectType = "{CGRect={CGPoint=dd}{CGSize=dd}}" - let CGSizeType = "{CGSize=dd}" - let CGPointType = "{CGPoint=dd}" -#elseif arch(i386) || arch(arm) || os(watchOS) - let CGRectType = "{CGRect={CGPoint=ff}{CGSize=ff}}" - let CGSizeType = "{CGSize=ff}" - let CGPointType = "{CGPoint=ff}" -#endif - -extension CGRect : KVORepresentable { - public typealias KVOType = NSValue - - /// Constructs self from `NSValue`. - public init?(KVOValue: KVOType) { - if strcmp(KVOValue.objCType, CGRectType) != 0 { - return nil - } - var typedValue = CGRect(x: 0, y: 0, width: 0, height: 0) - KVOValue.getValue(&typedValue) - self = typedValue - } -} - -extension CGPoint : KVORepresentable { - public typealias KVOType = NSValue - - /// Constructs self from `NSValue`. - public init?(KVOValue: KVOType) { - if strcmp(KVOValue.objCType, CGPointType) != 0 { - return nil - } - var typedValue = CGPoint(x: 0, y: 0) - KVOValue.getValue(&typedValue) - self = typedValue - } -} - -extension CGSize : KVORepresentable { - public typealias KVOType = NSValue - - /// Constructs self from `NSValue`. - public init?(KVOValue: KVOType) { - if strcmp(KVOValue.objCType, CGSizeType) != 0 { - return nil - } - var typedValue = CGSize(width: 0, height: 0) - KVOValue.getValue(&typedValue) - self = typedValue - } -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/Foundation/KVORepresentable+Swift.swift b/Pods/RxCocoa/RxCocoa/Foundation/KVORepresentable+Swift.swift deleted file mode 100644 index 00d53dd..0000000 --- a/Pods/RxCocoa/RxCocoa/Foundation/KVORepresentable+Swift.swift +++ /dev/null @@ -1,88 +0,0 @@ -// -// KVORepresentable+Swift.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 11/14/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import Foundation - -extension Int : KVORepresentable { - public typealias KVOType = NSNumber - - /// Constructs `Self` using KVO value. - public init?(KVOValue: KVOType) { - self.init(KVOValue.int32Value) - } -} - -extension Int32 : KVORepresentable { - public typealias KVOType = NSNumber - - /// Constructs `Self` using KVO value. - public init?(KVOValue: KVOType) { - self.init(KVOValue.int32Value) - } -} - -extension Int64 : KVORepresentable { - public typealias KVOType = NSNumber - - /// Constructs `Self` using KVO value. - public init?(KVOValue: KVOType) { - self.init(KVOValue.int64Value) - } -} - -extension UInt : KVORepresentable { - public typealias KVOType = NSNumber - - /// Constructs `Self` using KVO value. - public init?(KVOValue: KVOType) { - self.init(KVOValue.uintValue) - } -} - -extension UInt32 : KVORepresentable { - public typealias KVOType = NSNumber - - /// Constructs `Self` using KVO value. - public init?(KVOValue: KVOType) { - self.init(KVOValue.uint32Value) - } -} - -extension UInt64 : KVORepresentable { - public typealias KVOType = NSNumber - - /// Constructs `Self` using KVO value. - public init?(KVOValue: KVOType) { - self.init(KVOValue.uint64Value) - } -} - -extension Bool : KVORepresentable { - public typealias KVOType = NSNumber - - /// Constructs `Self` using KVO value. - public init?(KVOValue: KVOType) { - self.init(KVOValue.boolValue) - } -} - - -extension RawRepresentable where RawValue: KVORepresentable { - /// Constructs `Self` using optional KVO value. - init?(KVOValue: RawValue.KVOType?) { - guard let KVOValue = KVOValue else { - return nil - } - - guard let rawValue = RawValue(KVOValue: KVOValue) else { - return nil - } - - self.init(rawValue: rawValue) - } -} diff --git a/Pods/RxCocoa/RxCocoa/Foundation/KVORepresentable.swift b/Pods/RxCocoa/RxCocoa/Foundation/KVORepresentable.swift deleted file mode 100644 index be12b33..0000000 --- a/Pods/RxCocoa/RxCocoa/Foundation/KVORepresentable.swift +++ /dev/null @@ -1,28 +0,0 @@ -// -// KVORepresentable.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 11/14/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/// Type that is KVO representable (KVO mechanism can be used to observe it). -public protocol KVORepresentable { - /// Associated KVO type. - associatedtype KVOType - - /// Constructs `Self` using KVO value. - init?(KVOValue: KVOType) -} - -extension KVORepresentable { - /// Initializes `KVORepresentable` with optional value. - init?(KVOValue: KVOType?) { - guard let KVOValue = KVOValue else { - return nil - } - - self.init(KVOValue: KVOValue) - } -} - diff --git a/Pods/RxCocoa/RxCocoa/Foundation/NSObject+Rx+KVORepresentable.swift b/Pods/RxCocoa/RxCocoa/Foundation/NSObject+Rx+KVORepresentable.swift deleted file mode 100644 index 1be5a21..0000000 --- a/Pods/RxCocoa/RxCocoa/Foundation/NSObject+Rx+KVORepresentable.swift +++ /dev/null @@ -1,60 +0,0 @@ -// -// NSObject+Rx+KVORepresentable.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 11/14/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if !os(Linux) - -import Foundation -import RxSwift - -/// Key value observing options -public struct KeyValueObservingOptions: OptionSet { - /// Raw value - public let rawValue: UInt - - public init(rawValue: UInt) { - self.rawValue = rawValue - } - - /// Whether a sequence element should be sent to the observer immediately, before the subscribe method even returns. - public static let initial = KeyValueObservingOptions(rawValue: 1 << 0) - /// Whether to send updated values. - public static let new = KeyValueObservingOptions(rawValue: 1 << 1) -} - -extension Reactive where Base: NSObject { - - /** - Specialization of generic `observe` method. - - This is a special overload because to observe values of some type (for example `Int`), first values of KVO type - need to be observed (`NSNumber`), and then converted to result type. - - For more information take a look at `observe` method. - */ - public func observe(_ type: Element.Type, _ keyPath: String, options: KeyValueObservingOptions = [.new, .initial], retainSelf: Bool = true) -> Observable { - return self.observe(Element.KVOType.self, keyPath, options: options, retainSelf: retainSelf) - .map(Element.init) - } -} - -#if !DISABLE_SWIZZLING && !os(Linux) - // KVO - extension Reactive where Base: NSObject { - /** - Specialization of generic `observeWeakly` method. - - For more information take a look at `observeWeakly` method. - */ - public func observeWeakly(_ type: Element.Type, _ keyPath: String, options: KeyValueObservingOptions = [.new, .initial]) -> Observable { - return self.observeWeakly(Element.KVOType.self, keyPath, options: options) - .map(Element.init) - } - } -#endif - -#endif diff --git a/Pods/RxCocoa/RxCocoa/Foundation/NSObject+Rx+RawRepresentable.swift b/Pods/RxCocoa/RxCocoa/Foundation/NSObject+Rx+RawRepresentable.swift deleted file mode 100644 index 6e47cb2..0000000 --- a/Pods/RxCocoa/RxCocoa/Foundation/NSObject+Rx+RawRepresentable.swift +++ /dev/null @@ -1,52 +0,0 @@ -// -// NSObject+Rx+RawRepresentable.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 11/9/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if !os(Linux) - -import RxSwift - -import Foundation - -extension Reactive where Base: NSObject { - /** - Specialization of generic `observe` method. - - This specialization first observes `KVORepresentable` value and then converts it to `RawRepresentable` value. - - It is useful for observing bridged ObjC enum values. - - For more information take a look at `observe` method. - */ - public func observe(_ type: Element.Type, _ keyPath: String, options: KeyValueObservingOptions = [.new, .initial], retainSelf: Bool = true) -> Observable where Element.RawValue: KVORepresentable { - return self.observe(Element.RawValue.KVOType.self, keyPath, options: options, retainSelf: retainSelf) - .map(Element.init) - } -} - -#if !DISABLE_SWIZZLING - - // observeWeakly + RawRepresentable - extension Reactive where Base: NSObject { - - /** - Specialization of generic `observeWeakly` method. - - This specialization first observes `KVORepresentable` value and then converts it to `RawRepresentable` value. - - It is useful for observing bridged ObjC enum values. - - For more information take a look at `observeWeakly` method. - */ - public func observeWeakly(_ type: Element.Type, _ keyPath: String, options: KeyValueObservingOptions = [.new, .initial]) -> Observable where Element.RawValue: KVORepresentable { - return self.observeWeakly(Element.RawValue.KVOType.self, keyPath, options: options) - .map(Element.init) - } - } -#endif - -#endif diff --git a/Pods/RxCocoa/RxCocoa/Foundation/NSObject+Rx.swift b/Pods/RxCocoa/RxCocoa/Foundation/NSObject+Rx.swift deleted file mode 100644 index 2f15724..0000000 --- a/Pods/RxCocoa/RxCocoa/Foundation/NSObject+Rx.swift +++ /dev/null @@ -1,569 +0,0 @@ -// -// NSObject+Rx.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 2/21/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if !os(Linux) - -import Foundation -import RxSwift -#if SWIFT_PACKAGE && !DISABLE_SWIZZLING && !os(Linux) - import RxCocoaRuntime -#endif - -#if !DISABLE_SWIZZLING && !os(Linux) -private var deallocatingSubjectTriggerContext: UInt8 = 0 -private var deallocatingSubjectContext: UInt8 = 0 -#endif -private var deallocatedSubjectTriggerContext: UInt8 = 0 -private var deallocatedSubjectContext: UInt8 = 0 - -#if !os(Linux) - -/** -KVO is a tricky mechanism. - -When observing child in a ownership hierarchy, usually retaining observing target is wanted behavior. -When observing parent in a ownership hierarchy, usually retaining target isn't wanter behavior. - -KVO with weak references is especially tricky. For it to work, some kind of swizzling is required. -That can be done by - * replacing object class dynamically (like KVO does) - * by swizzling `dealloc` method on all instances for a class. - * some third method ... - -Both approaches can fail in certain scenarios: - * problems arise when swizzlers return original object class (like KVO does when nobody is observing) - * Problems can arise because replacing dealloc method isn't atomic operation (get implementation, - set implementation). - -Second approach is chosen. It can fail in case there are multiple libraries dynamically trying -to replace dealloc method. In case that isn't the case, it should be ok. -*/ -extension Reactive where Base: NSObject { - - - /** - Observes values on `keyPath` starting from `self` with `options` and retains `self` if `retainSelf` is set. - - `observe` is just a simple and performant wrapper around KVO mechanism. - - * it can be used to observe paths starting from `self` or from ancestors in ownership graph (`retainSelf = false`) - * it can be used to observe paths starting from descendants in ownership graph (`retainSelf = true`) - * the paths have to consist only of `strong` properties, otherwise you are risking crashing the system by not unregistering KVO observer before dealloc. - - If support for weak properties is needed or observing arbitrary or unknown relationships in the - ownership tree, `observeWeakly` is the preferred option. - - parameter type: Optional type hint of the observed sequence elements. - - parameter keyPath: Key path of property names to observe. - - parameter options: KVO mechanism notification options. - - parameter retainSelf: Retains self during observation if set `true`. - - returns: Observable sequence of objects on `keyPath`. - */ - public func observe(_ type: Element.Type, - _ keyPath: String, - options: KeyValueObservingOptions = [.new, .initial], - retainSelf: Bool = true) -> Observable { - KVOObservable(object: self.base, keyPath: keyPath, options: options, retainTarget: retainSelf).asObservable() - } - - /** - Observes values at the provided key path using the provided options. - - - parameter keyPath: A key path between the object and one of its properties. - - parameter options: Key-value observation options, defaults to `.new` and `.initial`. - - - note: When the object is deallocated, a completion event is emitted. - - - returns: An observable emitting value changes at the provided key path. - */ - public func observe(_ keyPath: KeyPath, - options: NSKeyValueObservingOptions = [.new, .initial]) -> Observable { - Observable.create { [weak base] observer in - let observation = base?.observe(keyPath, options: options) { obj, _ in - observer.on(.next(obj[keyPath: keyPath])) - } - - return Disposables.create { observation?.invalidate() } - } - .take(until: base.rx.deallocated) - } -} - -#endif - -#if !DISABLE_SWIZZLING && !os(Linux) -// KVO -extension Reactive where Base: NSObject { - /** - Observes values on `keyPath` starting from `self` with `options` and doesn't retain `self`. - - It can be used in all cases where `observe` can be used and additionally - - * because it won't retain observed target, it can be used to observe arbitrary object graph whose ownership relation is unknown - * it can be used to observe `weak` properties - - **Since it needs to intercept object deallocation process it needs to perform swizzling of `dealloc` method on observed object.** - - parameter type: Optional type hint of the observed sequence elements. - - parameter keyPath: Key path of property names to observe. - - parameter options: KVO mechanism notification options. - - returns: Observable sequence of objects on `keyPath`. - */ - public func observeWeakly(_ type: Element.Type, _ keyPath: String, options: KeyValueObservingOptions = [.new, .initial]) -> Observable { - return observeWeaklyKeyPathFor(self.base, keyPath: keyPath, options: options) - .map { n in - return n as? Element - } - } -} -#endif - -// Dealloc -extension Reactive where Base: AnyObject { - - /** - Observable sequence of object deallocated events. - - After object is deallocated one `()` element will be produced and sequence will immediately complete. - - - returns: Observable sequence of object deallocated events. - */ - public var deallocated: Observable { - return self.synchronized { - if let deallocObservable = objc_getAssociatedObject(self.base, &deallocatedSubjectContext) as? DeallocObservable { - return deallocObservable.subject - } - - let deallocObservable = DeallocObservable() - - objc_setAssociatedObject(self.base, &deallocatedSubjectContext, deallocObservable, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - return deallocObservable.subject - } - } - -#if !DISABLE_SWIZZLING && !os(Linux) - - /** - Observable sequence of message arguments that completes when object is deallocated. - - Each element is produced before message is invoked on target object. `methodInvoked` - exists in case observing of invoked messages is needed. - - In case an error occurs sequence will fail with `RxCocoaObjCRuntimeError`. - - In case some argument is `nil`, instance of `NSNull()` will be sent. - - - returns: Observable sequence of arguments passed to `selector` method. - */ - public func sentMessage(_ selector: Selector) -> Observable<[Any]> { - return self.synchronized { - // in case of dealloc selector replay subject behavior needs to be used - if selector == deallocSelector { - return self.deallocating.map { _ in [] } - } - - do { - let proxy: MessageSentProxy = try self.registerMessageInterceptor(selector) - return proxy.messageSent.asObservable() - } - catch let e { - return Observable.error(e) - } - } - } - - /** - Observable sequence of message arguments that completes when object is deallocated. - - Each element is produced after message is invoked on target object. `sentMessage` - exists in case interception of sent messages before they were invoked is needed. - - In case an error occurs sequence will fail with `RxCocoaObjCRuntimeError`. - - In case some argument is `nil`, instance of `NSNull()` will be sent. - - - returns: Observable sequence of arguments passed to `selector` method. - */ - public func methodInvoked(_ selector: Selector) -> Observable<[Any]> { - return self.synchronized { - // in case of dealloc selector replay subject behavior needs to be used - if selector == deallocSelector { - return self.deallocated.map { _ in [] } - } - - - do { - let proxy: MessageSentProxy = try self.registerMessageInterceptor(selector) - return proxy.methodInvoked.asObservable() - } - catch let e { - return Observable.error(e) - } - } - } - - /** - Observable sequence of object deallocating events. - - When `dealloc` message is sent to `self` one `()` element will be produced and after object is deallocated sequence - will immediately complete. - - In case an error occurs sequence will fail with `RxCocoaObjCRuntimeError`. - - - returns: Observable sequence of object deallocating events. - */ - public var deallocating: Observable<()> { - return self.synchronized { - do { - let proxy: DeallocatingProxy = try self.registerMessageInterceptor(deallocSelector) - return proxy.messageSent.asObservable() - } - catch let e { - return Observable.error(e) - } - } - } - - private func registerMessageInterceptor(_ selector: Selector) throws -> T { - let rxSelector = RX_selector(selector) - let selectorReference = RX_reference_from_selector(rxSelector) - - let subject: T - if let existingSubject = objc_getAssociatedObject(self.base, selectorReference) as? T { - subject = existingSubject - } - else { - subject = T() - objc_setAssociatedObject( - self.base, - selectorReference, - subject, - .OBJC_ASSOCIATION_RETAIN_NONATOMIC - ) - } - - if subject.isActive { - return subject - } - - var error: NSError? - let targetImplementation = RX_ensure_observing(self.base, selector, &error) - if targetImplementation == nil { - throw error?.rxCocoaErrorForTarget(self.base) ?? RxCocoaError.unknown - } - - subject.targetImplementation = targetImplementation! - - return subject - } -#endif -} - -// MARK: Message interceptors - -#if !DISABLE_SWIZZLING && !os(Linux) - - private protocol MessageInterceptorSubject: AnyObject { - init() - - var isActive: Bool { - get - } - - var targetImplementation: IMP { get set } - } - - private final class DeallocatingProxy - : MessageInterceptorSubject - , RXDeallocatingObserver { - typealias Element = () - - let messageSent = ReplaySubject<()>.create(bufferSize: 1) - - @objc var targetImplementation: IMP = RX_default_target_implementation() - - var isActive: Bool { - return self.targetImplementation != RX_default_target_implementation() - } - - init() { - } - - @objc func deallocating() { - self.messageSent.on(.next(())) - } - - deinit { - self.messageSent.on(.completed) - } - } - - private final class MessageSentProxy - : MessageInterceptorSubject - , RXMessageSentObserver { - typealias Element = [AnyObject] - - let messageSent = PublishSubject<[Any]>() - let methodInvoked = PublishSubject<[Any]>() - - @objc var targetImplementation: IMP = RX_default_target_implementation() - - var isActive: Bool { - return self.targetImplementation != RX_default_target_implementation() - } - - init() { - } - - @objc func messageSent(withArguments arguments: [Any]) { - self.messageSent.on(.next(arguments)) - } - - @objc func methodInvoked(withArguments arguments: [Any]) { - self.methodInvoked.on(.next(arguments)) - } - - deinit { - self.messageSent.on(.completed) - self.methodInvoked.on(.completed) - } - } - -#endif - - -private final class DeallocObservable { - let subject = ReplaySubject.create(bufferSize:1) - - init() { - } - - deinit { - self.subject.on(.next(())) - self.subject.on(.completed) - } -} - -// MARK: KVO - -#if !os(Linux) - -private protocol KVOObservableProtocol { - var target: AnyObject { get } - var keyPath: String { get } - var retainTarget: Bool { get } - var options: KeyValueObservingOptions { get } -} - -private final class KVOObserver - : _RXKVOObserver - , Disposable { - typealias Callback = (Any?) -> Void - - var retainSelf: KVOObserver? - - init(parent: KVOObservableProtocol, callback: @escaping Callback) { - #if TRACE_RESOURCES - _ = Resources.incrementTotal() - #endif - - super.init(target: parent.target, retainTarget: parent.retainTarget, keyPath: parent.keyPath, options: parent.options.nsOptions, callback: callback) - self.retainSelf = self - } - - override func dispose() { - super.dispose() - self.retainSelf = nil - } - - deinit { - #if TRACE_RESOURCES - _ = Resources.decrementTotal() - #endif - } -} - -private final class KVOObservable - : ObservableType - , KVOObservableProtocol { - typealias Element = Element? - - unowned var target: AnyObject - var strongTarget: AnyObject? - - var keyPath: String - var options: KeyValueObservingOptions - var retainTarget: Bool - - init(object: AnyObject, keyPath: String, options: KeyValueObservingOptions, retainTarget: Bool) { - self.target = object - self.keyPath = keyPath - self.options = options - self.retainTarget = retainTarget - if retainTarget { - self.strongTarget = object - } - } - - func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element? { - let observer = KVOObserver(parent: self) { value in - if value as? NSNull != nil { - observer.on(.next(nil)) - return - } - observer.on(.next(value as? Element)) - } - - return Disposables.create(with: observer.dispose) - } - -} - -private extension KeyValueObservingOptions { - var nsOptions: NSKeyValueObservingOptions { - var result: UInt = 0 - if self.contains(.new) { - result |= NSKeyValueObservingOptions.new.rawValue - } - if self.contains(.initial) { - result |= NSKeyValueObservingOptions.initial.rawValue - } - - return NSKeyValueObservingOptions(rawValue: result) - } -} - -#endif - -#if !DISABLE_SWIZZLING && !os(Linux) - - private func observeWeaklyKeyPathFor(_ target: NSObject, keyPath: String, options: KeyValueObservingOptions) -> Observable { - let components = keyPath.components(separatedBy: ".").filter { $0 != "self" } - - let observable = observeWeaklyKeyPathFor(target, keyPathSections: components, options: options) - .finishWithNilWhenDealloc(target) - - if !options.isDisjoint(with: .initial) { - return observable - } - else { - return observable - .skip(1) - } - } - - // This should work correctly - // Identifiers can't contain `,`, so the only place where `,` can appear - // is as a delimiter. - // This means there is `W` as element in an array of property attributes. - private func isWeakProperty(_ properyRuntimeInfo: String) -> Bool { - properyRuntimeInfo.range(of: ",W,") != nil - } - - private extension ObservableType where Element == AnyObject? { - func finishWithNilWhenDealloc(_ target: NSObject) - -> Observable { - let deallocating = target.rx.deallocating - - return deallocating - .map { _ in - return Observable.just(nil) - } - .startWith(self.asObservable()) - .switchLatest() - } - } - - private func observeWeaklyKeyPathFor( - _ target: NSObject, - keyPathSections: [String], - options: KeyValueObservingOptions - ) -> Observable { - - weak var weakTarget: AnyObject? = target - - let propertyName = keyPathSections[0] - let remainingPaths = Array(keyPathSections[1.. - - // KVO recursion for value changes - return propertyObservable - .flatMapLatest { (nextTarget: AnyObject?) -> Observable in - if nextTarget == nil { - return Observable.just(nil) - } - let nextObject = nextTarget! as? NSObject - - let strongTarget: AnyObject? = weakTarget - - if nextObject == nil { - return Observable.error(RxCocoaError.invalidObjectOnKeyPath(object: nextTarget!, sourceObject: strongTarget ?? NSNull(), propertyName: propertyName)) - } - - // if target is alive, then send change - // if it's deallocated, don't send anything - if strongTarget == nil { - return Observable.empty() - } - - let nextElementsObservable = keyPathSections.count == 1 - ? Observable.just(nextTarget) - : observeWeaklyKeyPathFor(nextObject!, keyPathSections: remainingPaths, options: options) - - if isWeak { - return nextElementsObservable - .finishWithNilWhenDealloc(nextObject!) - } - else { - return nextElementsObservable - } - } - } -#endif - -// MARK: Constants - -private let deallocSelector = NSSelectorFromString("dealloc") - -// MARK: AnyObject + Reactive - -extension Reactive where Base: AnyObject { - func synchronized( _ action: () -> T) -> T { - objc_sync_enter(self.base) - let result = action() - objc_sync_exit(self.base) - return result - } -} - -extension Reactive where Base: AnyObject { - /** - Helper to make sure that `Observable` returned from `createCachedObservable` is only created once. - This is important because there is only one `target` and `action` properties on `NSControl` or `UIBarButtonItem`. - */ - func lazyInstanceObservable(_ key: UnsafeRawPointer, createCachedObservable: () -> T) -> T { - if let value = objc_getAssociatedObject(self.base, key) { - return value as! T - } - - let observable = createCachedObservable() - - objc_setAssociatedObject(self.base, key, observable, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - - return observable - } -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/Foundation/NotificationCenter+Rx.swift b/Pods/RxCocoa/RxCocoa/Foundation/NotificationCenter+Rx.swift deleted file mode 100644 index 30ffa2b..0000000 --- a/Pods/RxCocoa/RxCocoa/Foundation/NotificationCenter+Rx.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// NotificationCenter+Rx.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 5/2/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import Foundation -import RxSwift - -extension Reactive where Base: NotificationCenter { - /** - Transforms notifications posted to notification center to observable sequence of notifications. - - - parameter name: Optional name used to filter notifications. - - parameter object: Optional object used to filter notifications. - - returns: Observable sequence of posted notifications. - */ - public func notification(_ name: Notification.Name?, object: AnyObject? = nil) -> Observable { - return Observable.create { [weak object] observer in - let nsObserver = self.base.addObserver(forName: name, object: object, queue: nil) { notification in - observer.on(.next(notification)) - } - - return Disposables.create { - self.base.removeObserver(nsObserver) - } - } - } -} diff --git a/Pods/RxCocoa/RxCocoa/Foundation/URLSession+Rx.swift b/Pods/RxCocoa/RxCocoa/Foundation/URLSession+Rx.swift deleted file mode 100644 index 93e65cc..0000000 --- a/Pods/RxCocoa/RxCocoa/Foundation/URLSession+Rx.swift +++ /dev/null @@ -1,240 +0,0 @@ -// -// URLSession+Rx.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 3/23/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import Foundation -import RxSwift - -#if canImport(FoundationNetworking) -import FoundationNetworking -#endif - -/// RxCocoa URL errors. -public enum RxCocoaURLError - : Swift.Error { - /// Unknown error occurred. - case unknown - /// Response is not NSHTTPURLResponse - case nonHTTPResponse(response: URLResponse) - /// Response is not successful. (not in `200 ..< 300` range) - case httpRequestFailed(response: HTTPURLResponse, data: Data?) - /// Deserialization error. - case deserializationError(error: Swift.Error) -} - -extension RxCocoaURLError - : CustomDebugStringConvertible { - /// A textual representation of `self`, suitable for debugging. - public var debugDescription: String { - switch self { - case .unknown: - return "Unknown error has occurred." - case let .nonHTTPResponse(response): - return "Response is not NSHTTPURLResponse `\(response)`." - case let .httpRequestFailed(response, _): - return "HTTP request failed with `\(response.statusCode)`." - case let .deserializationError(error): - return "Error during deserialization of the response: \(error)" - } - } -} - -private func escapeTerminalString(_ value: String) -> String { - return value.replacingOccurrences(of: "\"", with: "\\\"", options:[], range: nil) -} - -private func convertURLRequestToCurlCommand(_ request: URLRequest) -> String { - let method = request.httpMethod ?? "GET" - var returnValue = "curl -X \(method) " - - if let httpBody = request.httpBody { - let maybeBody = String(data: httpBody, encoding: String.Encoding.utf8) - if let body = maybeBody { - returnValue += "-d \"\(escapeTerminalString(body))\" " - } - } - - for (key, value) in request.allHTTPHeaderFields ?? [:] { - let escapedKey = escapeTerminalString(key as String) - let escapedValue = escapeTerminalString(value as String) - returnValue += "\n -H \"\(escapedKey): \(escapedValue)\" " - } - - let URLString = request.url?.absoluteString ?? "" - - returnValue += "\n\"\(escapeTerminalString(URLString))\"" - - returnValue += " -i -v" - - return returnValue -} - -private func convertResponseToString(_ response: URLResponse?, _ error: NSError?, _ interval: TimeInterval) -> String { - let ms = Int(interval * 1000) - - if let response = response as? HTTPURLResponse { - if 200 ..< 300 ~= response.statusCode { - return "Success (\(ms)ms): Status \(response.statusCode)" - } - else { - return "Failure (\(ms)ms): Status \(response.statusCode)" - } - } - - if let error = error { - if error.domain == NSURLErrorDomain && error.code == NSURLErrorCancelled { - return "Canceled (\(ms)ms)" - } - return "Failure (\(ms)ms): NSError > \(error)" - } - - return "" -} - -extension Reactive where Base: URLSession { - /** - Observable sequence of responses for URL request. - - Performing of request starts after observer is subscribed and not after invoking this method. - - **URL requests will be performed per subscribed observer.** - - Any error during fetching of the response will cause observed sequence to terminate with error. - - - parameter request: URL request. - - returns: Observable sequence of URL responses. - */ - public func response(request: URLRequest) -> Observable<(response: HTTPURLResponse, data: Data)> { - return Observable.create { observer in - - // smart compiler should be able to optimize this out - let d: Date? - - if URLSession.rx.shouldLogRequest(request) { - d = Date() - } - else { - d = nil - } - - let task = self.base.dataTask(with: request) { data, response, error in - - if URLSession.rx.shouldLogRequest(request) { - let interval = Date().timeIntervalSince(d ?? Date()) - print(convertURLRequestToCurlCommand(request)) - #if os(Linux) - print(convertResponseToString(response, error.flatMap { $0 as NSError }, interval)) - #else - print(convertResponseToString(response, error.map { $0 as NSError }, interval)) - #endif - } - - guard let response = response, let data = data else { - observer.on(.error(error ?? RxCocoaURLError.unknown)) - return - } - - guard let httpResponse = response as? HTTPURLResponse else { - observer.on(.error(RxCocoaURLError.nonHTTPResponse(response: response))) - return - } - - observer.on(.next((httpResponse, data))) - observer.on(.completed) - } - - task.resume() - - return Disposables.create(with: task.cancel) - } - } - - /** - Observable sequence of response data for URL request. - - Performing of request starts after observer is subscribed and not after invoking this method. - - **URL requests will be performed per subscribed observer.** - - Any error during fetching of the response will cause observed sequence to terminate with error. - - If response is not HTTP response with status code in the range of `200 ..< 300`, sequence - will terminate with `(RxCocoaErrorDomain, RxCocoaError.NetworkError)`. - - - parameter request: URL request. - - returns: Observable sequence of response data. - */ - public func data(request: URLRequest) -> Observable { - return self.response(request: request).map { pair -> Data in - if 200 ..< 300 ~= pair.0.statusCode { - return pair.1 - } - else { - throw RxCocoaURLError.httpRequestFailed(response: pair.0, data: pair.1) - } - } - } - - /** - Observable sequence of response JSON for URL request. - - Performing of request starts after observer is subscribed and not after invoking this method. - - **URL requests will be performed per subscribed observer.** - - Any error during fetching of the response will cause observed sequence to terminate with error. - - If response is not HTTP response with status code in the range of `200 ..< 300`, sequence - will terminate with `(RxCocoaErrorDomain, RxCocoaError.NetworkError)`. - - If there is an error during JSON deserialization observable sequence will fail with that error. - - - parameter request: URL request. - - returns: Observable sequence of response JSON. - */ - public func json(request: URLRequest, options: JSONSerialization.ReadingOptions = []) -> Observable { - return self.data(request: request).map { data -> Any in - do { - return try JSONSerialization.jsonObject(with: data, options: options) - } catch let error { - throw RxCocoaURLError.deserializationError(error: error) - } - } - } - - /** - Observable sequence of response JSON for GET request with `URL`. - - Performing of request starts after observer is subscribed and not after invoking this method. - - **URL requests will be performed per subscribed observer.** - - Any error during fetching of the response will cause observed sequence to terminate with error. - - If response is not HTTP response with status code in the range of `200 ..< 300`, sequence - will terminate with `(RxCocoaErrorDomain, RxCocoaError.NetworkError)`. - - If there is an error during JSON deserialization observable sequence will fail with that error. - - - parameter url: URL of `NSURLRequest` request. - - returns: Observable sequence of response JSON. - */ - public func json(url: Foundation.URL) -> Observable { - self.json(request: URLRequest(url: url)) - } -} - -extension Reactive where Base == URLSession { - /// Log URL requests to standard output in curl format. - public static var shouldLogRequest: (URLRequest) -> Bool = { _ in - #if DEBUG - return true - #else - return false - #endif - } -} diff --git a/Pods/RxCocoa/RxCocoa/Runtime/_RX.m b/Pods/RxCocoa/RxCocoa/Runtime/_RX.m deleted file mode 100644 index cffbfbc..0000000 --- a/Pods/RxCocoa/RxCocoa/Runtime/_RX.m +++ /dev/null @@ -1,10 +0,0 @@ -// -// _RX.m -// RxCocoa -// -// Created by Krunoslav Zaher on 7/12/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#import "include/_RX.h" - diff --git a/Pods/RxCocoa/RxCocoa/Runtime/_RXDelegateProxy.m b/Pods/RxCocoa/RxCocoa/Runtime/_RXDelegateProxy.m deleted file mode 100644 index 36338a5..0000000 --- a/Pods/RxCocoa/RxCocoa/Runtime/_RXDelegateProxy.m +++ /dev/null @@ -1,147 +0,0 @@ -// -// _RXDelegateProxy.m -// RxCocoa -// -// Created by Krunoslav Zaher on 7/4/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#import "include/_RXDelegateProxy.h" -#import "include/_RX.h" -#import "include/_RXObjCRuntime.h" - -@interface _RXDelegateProxy () { - id __weak __forwardToDelegate; -} - -@property (nonatomic, strong) id strongForwardDelegate; - -@end - -static NSMutableDictionary *voidSelectorsPerClass = nil; - -@implementation _RXDelegateProxy - -+(NSSet*)collectVoidSelectorsForProtocol:(Protocol *)protocol { - NSMutableSet *selectors = [NSMutableSet set]; - - unsigned int protocolMethodCount = 0; - struct objc_method_description *pMethods = protocol_copyMethodDescriptionList(protocol, NO, YES, &protocolMethodCount); - - for (unsigned int i = 0; i < protocolMethodCount; ++i) { - struct objc_method_description method = pMethods[i]; - if (RX_is_method_with_description_void(method)) { - [selectors addObject:SEL_VALUE(method.name)]; - } - } - - free(pMethods); - - unsigned int numberOfBaseProtocols = 0; - Protocol * __unsafe_unretained * pSubprotocols = protocol_copyProtocolList(protocol, &numberOfBaseProtocols); - - for (unsigned int i = 0; i < numberOfBaseProtocols; ++i) { - [selectors unionSet:[self collectVoidSelectorsForProtocol:pSubprotocols[i]]]; - } - - free(pSubprotocols); - - return selectors; -} - -+(void)initialize { - @synchronized (_RXDelegateProxy.class) { - if (voidSelectorsPerClass == nil) { - voidSelectorsPerClass = [[NSMutableDictionary alloc] init]; - } - - NSMutableSet *voidSelectors = [NSMutableSet set]; - -#define CLASS_HIERARCHY_MAX_DEPTH 100 - - NSInteger classHierarchyDepth = 0; - Class targetClass = NULL; - - for (classHierarchyDepth = 0, targetClass = self; - classHierarchyDepth < CLASS_HIERARCHY_MAX_DEPTH && targetClass != nil; - ++classHierarchyDepth, targetClass = class_getSuperclass(targetClass) - ) { - unsigned int count; - Protocol *__unsafe_unretained *pProtocols = class_copyProtocolList(targetClass, &count); - - for (unsigned int i = 0; i < count; i++) { - NSSet *selectorsForProtocol = [self collectVoidSelectorsForProtocol:pProtocols[i]]; - [voidSelectors unionSet:selectorsForProtocol]; - } - - free(pProtocols); - } - - if (classHierarchyDepth == CLASS_HIERARCHY_MAX_DEPTH) { - NSLog(@"Detected weird class hierarchy with depth over %d. Starting with this class -> %@", CLASS_HIERARCHY_MAX_DEPTH, self); -#if DEBUG - abort(); -#endif - } - - voidSelectorsPerClass[CLASS_VALUE(self)] = voidSelectors; - } -} - --(id)_forwardToDelegate { - return __forwardToDelegate; -} - --(void)_setForwardToDelegate:(id __nullable)forwardToDelegate retainDelegate:(BOOL)retainDelegate { - __forwardToDelegate = forwardToDelegate; - if (retainDelegate) { - self.strongForwardDelegate = forwardToDelegate; - } - else { - self.strongForwardDelegate = nil; - } -} - --(BOOL)hasWiredImplementationForSelector:(SEL)selector { - return [super respondsToSelector:selector]; -} - --(BOOL)voidDelegateMethodsContain:(SEL)selector { - @synchronized(_RXDelegateProxy.class) { - NSSet *voidSelectors = voidSelectorsPerClass[CLASS_VALUE(self.class)]; - NSAssert(voidSelectors != nil, @"Set of allowed methods not initialized"); - return [voidSelectors containsObject:SEL_VALUE(selector)]; - } -} - --(void)forwardInvocation:(NSInvocation *)anInvocation { - BOOL isVoid = RX_is_method_signature_void(anInvocation.methodSignature); - NSArray *arguments = nil; - if (isVoid) { - arguments = RX_extract_arguments(anInvocation); - [self _sentMessage:anInvocation.selector withArguments:arguments]; - } - - if (self._forwardToDelegate && [self._forwardToDelegate respondsToSelector:anInvocation.selector]) { - [anInvocation invokeWithTarget:self._forwardToDelegate]; - } - - if (isVoid) { - [self _methodInvoked:anInvocation.selector withArguments:arguments]; - } -} - -// abstract method --(void)_sentMessage:(SEL)selector withArguments:(NSArray *)arguments { - -} - -// abstract method --(void)_methodInvoked:(SEL)selector withArguments:(NSArray *)arguments { - -} - --(void)dealloc { -} - -@end diff --git a/Pods/RxCocoa/RxCocoa/Runtime/_RXKVOObserver.m b/Pods/RxCocoa/RxCocoa/Runtime/_RXKVOObserver.m deleted file mode 100644 index fc8fb75..0000000 --- a/Pods/RxCocoa/RxCocoa/Runtime/_RXKVOObserver.m +++ /dev/null @@ -1,54 +0,0 @@ -// -// _RXKVOObserver.m -// RxCocoa -// -// Created by Krunoslav Zaher on 7/11/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#import "include/_RXKVOObserver.h" - -@interface _RXKVOObserver () - -@property (nonatomic, unsafe_unretained) id target; -@property (nonatomic, strong ) id retainedTarget; -@property (nonatomic, copy ) NSString *keyPath; -@property (nonatomic, copy ) void (^callback)(id); - -@end - -@implementation _RXKVOObserver - --(instancetype)initWithTarget:(id)target - retainTarget:(BOOL)retainTarget - keyPath:(NSString*)keyPath - options:(NSKeyValueObservingOptions)options - callback:(void (^)(id))callback { - self = [super init]; - if (!self) return nil; - - self.target = target; - if (retainTarget) { - self.retainedTarget = target; - } - self.keyPath = keyPath; - self.callback = callback; - - [self.target addObserver:self forKeyPath:self.keyPath options:options context:nil]; - - return self; -} - --(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { - @synchronized(self) { - self.callback(change[NSKeyValueChangeNewKey]); - } -} - --(void)dispose { - [self.target removeObserver:self forKeyPath:self.keyPath context:nil]; - self.target = nil; - self.retainedTarget = nil; -} - -@end diff --git a/Pods/RxCocoa/RxCocoa/Runtime/_RXObjCRuntime.m b/Pods/RxCocoa/RxCocoa/Runtime/_RXObjCRuntime.m deleted file mode 100644 index 2e685aa..0000000 --- a/Pods/RxCocoa/RxCocoa/Runtime/_RXObjCRuntime.m +++ /dev/null @@ -1,1062 +0,0 @@ -// -// _RXObjCRuntime.m -// RxCocoa -// -// Created by Krunoslav Zaher on 7/11/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#import -#import -#import -#import -#import -#import - -#import "include/_RX.h" -#import "include/_RXObjCRuntime.h" - -// self + cmd -#define HIDDEN_ARGUMENT_COUNT 2 - -#if !DISABLE_SWIZZLING - -#define NSErrorParam NSError *__autoreleasing __nullable * __nullable - -@class RXObjCRuntime; - -BOOL RXAbortOnThreadingHazard = NO; - -typedef NSInvocation *NSInvocationRef; -typedef NSMethodSignature *NSMethodSignatureRef; -typedef unsigned char rx_uchar; -typedef unsigned short rx_ushort; -typedef unsigned int rx_uint; -typedef unsigned long rx_ulong; -typedef id (^rx_block)(id); -typedef BOOL (^RXInterceptWithOptimizedObserver)(RXObjCRuntime * __nonnull self, Class __nonnull class, SEL __nonnull selector, NSErrorParam error); - -static CFTypeID defaultTypeID; -static SEL deallocSelector; - -static int RxSwizzlingTargetClassKey = 0; - -#if TRACE_RESOURCES -_Atomic static int32_t numberOInterceptedMethods = 0; -_Atomic static int32_t numberOfForwardedMethods = 0; -#endif - -#define THREADING_HAZARD(class) \ - NSLog(@"There was a problem swizzling on `%@`.\nYou have probably two libraries performing swizzling in runtime.\nWe didn't want to crash your program, but this is not good ...\nYou an solve this problem by either not using swizzling in this library, removing one of those other libraries, or making sure that swizzling parts are synchronized (only perform them on main thread).\nAnd yes, this message will self destruct when you clear the console, and since it's non deterministic, the problem could still exist and it will be hard for you to reproduce it.", NSStringFromClass(class)); ABORT_IN_DEBUG if (RXAbortOnThreadingHazard) { abort(); } - -#define ALWAYS(condition, message) if (!(condition)) { [NSException raise:@"RX Invalid Operator" format:@"%@", message]; } -#define ALWAYS_WITH_INFO(condition, message) NSAssert((condition), @"%@ [%@] > %@", NSStringFromClass(class), NSStringFromSelector(selector), (message)) -#define C_ALWAYS(condition, message) NSCAssert((condition), @"%@ [%@] > %@", NSStringFromClass(class), NSStringFromSelector(selector), (message)) - -#define RX_PREFIX @"_RX_namespace_" - -#define RX_ARG_id(value) ((value) ?: [NSNull null]) -#define RX_ARG_char(value) [NSNumber numberWithChar:value] -#define RX_ARG_short(value) [NSNumber numberWithShort:value] -#define RX_ARG_int(value) [NSNumber numberWithInt:value] -#define RX_ARG_long(value) [NSNumber numberWithLong:value] -#define RX_ARG_BOOL(value) [NSNumber numberWithBool:value] -#define RX_ARG_SEL(value) [NSNumber valueWithPointer:value] -#define RX_ARG_rx_uchar(value) [NSNumber numberWithUnsignedInt:value] -#define RX_ARG_rx_ushort(value) [NSNumber numberWithUnsignedInt:value] -#define RX_ARG_rx_uint(value) [NSNumber numberWithUnsignedInt:value] -#define RX_ARG_rx_ulong(value) [NSNumber numberWithUnsignedLong:value] -#define RX_ARG_rx_block(value) ((id)(value) ?: [NSNull null]) -#define RX_ARG_float(value) [NSNumber numberWithFloat:value] -#define RX_ARG_double(value) [NSNumber numberWithDouble:value] - -typedef struct supported_type { - const char *encoding; -} supported_type_t; - -static supported_type_t supported_types[] = { - { .encoding = @encode(void)}, - { .encoding = @encode(id)}, - { .encoding = @encode(Class)}, - { .encoding = @encode(void (^)(void))}, - { .encoding = @encode(char)}, - { .encoding = @encode(short)}, - { .encoding = @encode(int)}, - { .encoding = @encode(long)}, - { .encoding = @encode(long long)}, - { .encoding = @encode(unsigned char)}, - { .encoding = @encode(unsigned short)}, - { .encoding = @encode(unsigned int)}, - { .encoding = @encode(unsigned long)}, - { .encoding = @encode(unsigned long long)}, - { .encoding = @encode(float)}, - { .encoding = @encode(double)}, - { .encoding = @encode(BOOL)}, - { .encoding = @encode(const char*)}, -}; - -NSString * __nonnull const RXObjCRuntimeErrorDomain = @"RXObjCRuntimeErrorDomain"; -NSString * __nonnull const RXObjCRuntimeErrorIsKVOKey = @"RXObjCRuntimeErrorIsKVOKey"; - -BOOL RX_return_type_is_supported(const char *type) { - if (type == nil) { - return NO; - } - - for (int i = 0; i < sizeof(supported_types) / sizeof(supported_type_t); ++i) { - if (supported_types[i].encoding[0] != type[0]) { - continue; - } - if (strcmp(supported_types[i].encoding, type) == 0) { - return YES; - } - } - - return NO; -} - -static BOOL RX_method_has_supported_return_type(Method method) { - const char *rawEncoding = method_getTypeEncoding(method); - ALWAYS(rawEncoding != nil, @"Example encoding method is nil."); - - NSMethodSignature *methodSignature = [NSMethodSignature signatureWithObjCTypes:rawEncoding]; - ALWAYS(methodSignature != nil, @"Method signature method is nil."); - - return RX_return_type_is_supported(methodSignature.methodReturnType); -} - -SEL __nonnull RX_selector(SEL __nonnull selector) { - NSString *selectorString = NSStringFromSelector(selector); - return NSSelectorFromString([RX_PREFIX stringByAppendingString:selectorString]); -} - -#endif - -BOOL RX_is_method_signature_void(NSMethodSignature * __nonnull methodSignature) { - const char *methodReturnType = methodSignature.methodReturnType; - return strcmp(methodReturnType, @encode(void)) == 0; -} - -BOOL RX_is_method_with_description_void(struct objc_method_description method) { - return strncmp(method.types, @encode(void), 1) == 0; -} - -id __nonnull RX_extract_argument_at_index(NSInvocation * __nonnull invocation, NSUInteger index) { - const char *argumentType = [invocation.methodSignature getArgumentTypeAtIndex:index]; - -#define RETURN_VALUE(type) \ - else if (strcmp(argumentType, @encode(type)) == 0) {\ - type val = 0; \ - [invocation getArgument:&val atIndex:index]; \ - return @(val); \ - } - - // Skip const type qualifier. - if (argumentType[0] == 'r') { - argumentType++; - } - - if (strcmp(argumentType, @encode(id)) == 0 - || strcmp(argumentType, @encode(Class)) == 0 - || strcmp(argumentType, @encode(void (^)(void))) == 0 - ) { - __unsafe_unretained id argument = nil; - [invocation getArgument:&argument atIndex:index]; - return argument; - } - RETURN_VALUE(char) - RETURN_VALUE(short) - RETURN_VALUE(int) - RETURN_VALUE(long) - RETURN_VALUE(long long) - RETURN_VALUE(unsigned char) - RETURN_VALUE(unsigned short) - RETURN_VALUE(unsigned int) - RETURN_VALUE(unsigned long) - RETURN_VALUE(unsigned long long) - RETURN_VALUE(float) - RETURN_VALUE(double) - RETURN_VALUE(BOOL) - RETURN_VALUE(const char *) - else { - NSUInteger size = 0; - NSGetSizeAndAlignment(argumentType, &size, NULL); - NSCParameterAssert(size > 0); - uint8_t data[size]; - [invocation getArgument:&data atIndex:index]; - - return [NSValue valueWithBytes:&data objCType:argumentType]; - } -} - -NSArray *RX_extract_arguments(NSInvocation *invocation) { - NSUInteger numberOfArguments = invocation.methodSignature.numberOfArguments; - NSUInteger numberOfVisibleArguments = numberOfArguments - HIDDEN_ARGUMENT_COUNT; - - NSCParameterAssert(numberOfVisibleArguments >= 0); - - NSMutableArray *arguments = [NSMutableArray arrayWithCapacity:numberOfVisibleArguments]; - - for (NSUInteger index = HIDDEN_ARGUMENT_COUNT; index < numberOfArguments; ++index) { - [arguments addObject:RX_extract_argument_at_index(invocation, index) ?: [NSNull null]]; - } - - return arguments; -} - -IMP __nonnull RX_default_target_implementation(void) { - return _objc_msgForward; -} - -#if !DISABLE_SWIZZLING - -void * __nonnull RX_reference_from_selector(SEL __nonnull selector) { - return selector; -} - -static BOOL RX_forward_invocation(id __nonnull __unsafe_unretained self, NSInvocation *invocation) { - SEL originalSelector = RX_selector(invocation.selector); - - id messageSentObserver = objc_getAssociatedObject(self, originalSelector); - - if (messageSentObserver != nil) { - NSArray *arguments = RX_extract_arguments(invocation); - [messageSentObserver messageSentWithArguments:arguments]; - } - - if ([self respondsToSelector:originalSelector]) { - invocation.selector = originalSelector; - [invocation invokeWithTarget:self]; - - if (messageSentObserver != nil) { - NSArray *arguments = RX_extract_arguments(invocation); - [messageSentObserver methodInvokedWithArguments:arguments]; - } - - return YES; - } - - return NO; -} - -static BOOL RX_responds_to_selector(id __nonnull __unsafe_unretained self, SEL selector) { - Class class = object_getClass(self); - if (class == nil) { return NO; } - - Method m = class_getInstanceMethod(class, selector); - return m != nil; - -} - -static NSMethodSignatureRef RX_method_signature(id __nonnull __unsafe_unretained self, SEL selector) { - Class class = object_getClass(self); - if (class == nil) { return nil; } - - Method method = class_getInstanceMethod(class, selector); - if (method == nil) { return nil; } - - const char *encoding = method_getTypeEncoding(method); - if (encoding == nil) { return nil; } - - return [NSMethodSignature signatureWithObjCTypes:encoding]; -} - -static NSString * __nonnull RX_method_encoding(Method __nonnull method) { - const char *typeEncoding = method_getTypeEncoding(method); - ALWAYS(typeEncoding != nil, @"Method encoding is nil."); - - NSString *encoding = [NSString stringWithCString:typeEncoding encoding:NSASCIIStringEncoding]; - ALWAYS(encoding != nil, @"Can't convert encoding to NSString."); - return encoding; -} - -@interface RXObjCRuntime: NSObject - -@property (nonatomic, assign) pthread_mutex_t lock; - -@property (nonatomic, strong) NSMutableSet *classesThatSupportObservingByForwarding; -@property (nonatomic, strong) NSMutableDictionary *> *forwardedSelectorsByClass; - -@property (nonatomic, strong) NSMutableDictionary *dynamicSubclassByRealClass; -@property (nonatomic, strong) NSMutableDictionary*> *interceptorIMPbySelectorsByClass; - -+(RXObjCRuntime*)instance; - --(void)performLocked:(void (^)(RXObjCRuntime* __nonnull))action; --(IMP __nullable)ensurePrepared:(id __nonnull)target forObserving:(SEL __nonnull)selector error:(NSErrorParam)error; --(BOOL)ensureSwizzledSelector:(SEL __nonnull)selector - ofClass:(Class __nonnull)class - newImplementationGenerator:(IMP(^)(void))newImplementationGenerator -replacementImplementationGenerator:(IMP (^)(IMP originalImplementation))replacementImplementationGenerator - error:(NSErrorParam)error; - - -+(void)registerOptimizedObserver:(RXInterceptWithOptimizedObserver)registration encodedAs:(SEL)selector; - -@end - -/** - All API methods perform work on locked instance of `RXObjCRuntime`. In that way it's easy to prove - that every action is properly locked. - */ -IMP __nullable RX_ensure_observing(id __nonnull target, SEL __nonnull selector, NSErrorParam error) { - __block IMP targetImplementation = nil; - // Target is the second object that needs to be synchronized to TRY to make sure other swizzling framework - // won't do something in parallel. - // Even though this is too fine grained locking and more coarse grained locks should exist, this is just in case - // someone calls this method directly without any external lock. - @synchronized(target) { - // The only other resource that all other swizzling libraries have in common without introducing external - // dependencies is class object. - // - // It is polite to try to synchronize it in hope other unknown entities will also attempt to do so. - // It's like trying to figure out how to communicate with aliens without actually communicating, - // save for the fact that aliens are people, programmers, authors of swizzling libraries. - @synchronized([target class]) { - [[RXObjCRuntime instance] performLocked:^(RXObjCRuntime * __nonnull self) { - targetImplementation = [self ensurePrepared:target - forObserving:selector - error:error]; - }]; - } - } - - return targetImplementation; -} - -// bodies - -#define FORWARD_BODY(invocation) if (RX_forward_invocation(self, NAME_CAT(_, 0, invocation))) { return; } - -#define RESPONDS_TO_SELECTOR_BODY(selector) if (RX_responds_to_selector(self, NAME_CAT(_, 0, selector))) return YES; - -#define CLASS_BODY(...) return actAsClass; - -#define METHOD_SIGNATURE_FOR_SELECTOR_BODY(selector) \ - NSMethodSignatureRef methodSignature = RX_method_signature(self, NAME_CAT(_, 0, selector)); \ - if (methodSignature != nil) { \ - return methodSignature; \ - } - -#define DEALLOCATING_BODY(...) \ - id observer = objc_getAssociatedObject(self, rxSelector); \ - if (observer != nil && observer.targetImplementation == thisIMP) { \ - [observer deallocating]; \ - } - -#define OBSERVE_BODY(...) \ - id observer = objc_getAssociatedObject(self, rxSelector); \ - \ - if (observer != nil && observer.targetImplementation == thisIMP) { \ - [observer messageSentWithArguments:@[COMMA_DELIMITED_ARGUMENTS(__VA_ARGS__)]]; \ - } \ - - -#define OBSERVE_INVOKED_BODY(...) \ - if (observer != nil && observer.targetImplementation == thisIMP) { \ - [observer methodInvokedWithArguments:@[COMMA_DELIMITED_ARGUMENTS(__VA_ARGS__)]]; \ - } \ - - -#define BUILD_ARG_WRAPPER(type) RX_ARG_ ## type //RX_ARG_ ## type - -#define CAT(_1, _2, head, tail) RX_CAT2(head, tail) -#define SEPARATE_BY_COMMA(_1, _2, head, tail) head, tail -#define SEPARATE_BY_SPACE(_1, _2, head, tail) head tail -#define SEPARATE_BY_UNDERSCORE(head, tail) RX_CAT2(RX_CAT2(head, _), tail) - -#define UNDERSCORE_TYPE_CAT(_1, index, type) RX_CAT2(_, type) // generates -> _type -#define NAME_CAT(_1, index, type) SEPARATE_BY_UNDERSCORE(type, index) // generates -> type_0 -#define TYPE_AND_NAME_CAT(_1, index, type) type SEPARATE_BY_UNDERSCORE(type, index) // generates -> type type_0 -#define NOT_NULL_ARGUMENT_CAT(_1, index, type) BUILD_ARG_WRAPPER(type)(NAME_CAT(_1, index, type)) // generates -> ((id)(type_0) ?: [NSNull null]) -#define EXAMPLE_PARAMETER(_1, index, type) RX_CAT2(_, type):(type)SEPARATE_BY_UNDERSCORE(type, index) // generates -> _type:(type)type_0 -#define SELECTOR_PART(_1, index, type) RX_CAT2(_, type:) // generates -> _type: - -#define COMMA_DELIMITED_ARGUMENTS(...) RX_FOREACH(_, SEPARATE_BY_COMMA, NOT_NULL_ARGUMENT_CAT, ## __VA_ARGS__) -#define ARGUMENTS(...) RX_FOREACH_COMMA(_, NAME_CAT, ## __VA_ARGS__) -#define DECLARE_ARGUMENTS(...) RX_FOREACH_COMMA(_, TYPE_AND_NAME_CAT, ## __VA_ARGS__) - -// optimized observe methods - -#define GENERATE_SELECTOR_IDENTIFIER(...) RX_CAT2(exampleSelector, RX_FOREACH(_, CAT, UNDERSCORE_TYPE_CAT, ## __VA_ARGS__)) - -#define GENERATE_METHOD_IDENTIFIER(...) RX_CAT2(swizzle, RX_FOREACH(_, CAT, UNDERSCORE_TYPE_CAT, ## __VA_ARGS__)) - -#define GENERATE_OBSERVE_METHOD_DECLARATION(...) \ - -(BOOL)GENERATE_METHOD_IDENTIFIER(__VA_ARGS__):(Class __nonnull)class \ - selector:(SEL)selector \ - error:(NSErrorParam)error { \ - - -#define BUILD_EXAMPLE_METHOD(return_value, ...) \ - +(return_value)RX_CAT2(RX_CAT2(example_, return_value), RX_FOREACH(_, SEPARATE_BY_SPACE, EXAMPLE_PARAMETER, ## __VA_ARGS__)) {} - -#define BUILD_EXAMPLE_METHOD_SELECTOR(return_value, ...) \ - RX_CAT2(RX_CAT2(example_, return_value), RX_FOREACH(_, SEPARATE_BY_SPACE, SELECTOR_PART, ## __VA_ARGS__)) - -#define SWIZZLE_OBSERVE_METHOD_DEFINITIONS(return_value, ...) \ - BUILD_EXAMPLE_METHOD(return_value, ## __VA_ARGS__) \ - SWIZZLE_METHOD(return_value, GENERATE_OBSERVE_METHOD_DECLARATION(return_value, ## __VA_ARGS__), OBSERVE_BODY, OBSERVE_INVOKED_BODY, ## __VA_ARGS__) \ - -#define SWIZZLE_OBSERVE_METHOD_BODY(return_value, ...) \ - __unused SEL GENERATE_SELECTOR_IDENTIFIER(return_value, ## __VA_ARGS__) = @selector(BUILD_EXAMPLE_METHOD_SELECTOR(return_value, ## __VA_ARGS__)); \ - [self registerOptimizedObserver:^BOOL(RXObjCRuntime * __nonnull self, Class __nonnull class, \ - SEL __nonnull selector, NSErrorParam error) { \ - return [self GENERATE_METHOD_IDENTIFIER(return_value, ## __VA_ARGS__):class selector:selector error:error]; \ - } encodedAs:GENERATE_SELECTOR_IDENTIFIER(return_value, ## __VA_ARGS__)]; \ - -// infrastructure method - -#define NO_BODY(...) - -#define SWIZZLE_INFRASTRUCTURE_METHOD(return_value, method_name, parameters, method_selector, body, ...) \ - SWIZZLE_METHOD(return_value, -(BOOL)method_name:(Class __nonnull)class parameters error:(NSErrorParam)error \ - { \ - SEL selector = method_selector; , body, NO_BODY, __VA_ARGS__) \ - - -// common base - -#define SWIZZLE_METHOD(return_value, method_prototype, body, invoked_body, ...) \ -method_prototype \ - __unused SEL rxSelector = RX_selector(selector); \ - IMP (^newImplementationGenerator)(void) = ^() { \ - __block IMP thisIMP = nil; \ - id newImplementation = ^return_value(__unsafe_unretained id self DECLARE_ARGUMENTS(__VA_ARGS__)) { \ - body(__VA_ARGS__) \ - \ - struct objc_super superInfo = { \ - .receiver = self, \ - .super_class = class_getSuperclass(class) \ - }; \ - \ - return_value (*msgSend)(struct objc_super *, SEL DECLARE_ARGUMENTS(__VA_ARGS__)) \ - = (__typeof__(msgSend))objc_msgSendSuper; \ - @try { \ - return msgSend(&superInfo, selector ARGUMENTS(__VA_ARGS__)); \ - } \ - @finally { invoked_body(__VA_ARGS__) } \ - }; \ - \ - thisIMP = imp_implementationWithBlock(newImplementation); \ - return thisIMP; \ - }; \ - \ - IMP (^replacementImplementationGenerator)(IMP) = ^(IMP originalImplementation) { \ - __block return_value (*originalImplementationTyped)(__unsafe_unretained id, SEL DECLARE_ARGUMENTS(__VA_ARGS__) ) \ - = (__typeof__(originalImplementationTyped))(originalImplementation); \ - \ - __block IMP thisIMP = nil; \ - id implementationReplacement = ^return_value(__unsafe_unretained id self DECLARE_ARGUMENTS(__VA_ARGS__) ) { \ - body(__VA_ARGS__) \ - @try { \ - return originalImplementationTyped(self, selector ARGUMENTS(__VA_ARGS__)); \ - } \ - @finally { invoked_body(__VA_ARGS__) } \ - }; \ - \ - thisIMP = imp_implementationWithBlock(implementationReplacement); \ - return thisIMP; \ - }; \ - \ - return [self ensureSwizzledSelector:selector \ - ofClass:class \ - newImplementationGenerator:newImplementationGenerator \ - replacementImplementationGenerator:replacementImplementationGenerator \ - error:error]; \ - } \ - - -@interface RXObjCRuntime (InfrastructureMethods) -@end - -// MARK: Infrastructure Methods - -@implementation RXObjCRuntime (InfrastructureMethods) - -SWIZZLE_INFRASTRUCTURE_METHOD( - void, - swizzleForwardInvocation, - , - @selector(forwardInvocation:), - FORWARD_BODY, - NSInvocationRef -) -SWIZZLE_INFRASTRUCTURE_METHOD( - BOOL, - swizzleRespondsToSelector, - , - @selector(respondsToSelector:), - RESPONDS_TO_SELECTOR_BODY, - SEL -) -SWIZZLE_INFRASTRUCTURE_METHOD( - Class __nonnull, - swizzleClass, - toActAs:(Class)actAsClass, - @selector(class), - CLASS_BODY -) -SWIZZLE_INFRASTRUCTURE_METHOD( - NSMethodSignatureRef, - swizzleMethodSignatureForSelector, - , - @selector(methodSignatureForSelector:), - METHOD_SIGNATURE_FOR_SELECTOR_BODY, - SEL -) -SWIZZLE_INFRASTRUCTURE_METHOD( - void, - swizzleDeallocating, - , - deallocSelector, - DEALLOCATING_BODY -) - -@end - -// MARK: Optimized intercepting methods for specific combination of parameter types - -@interface RXObjCRuntime (swizzle) - -@end - -@implementation RXObjCRuntime(swizzle) - -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void) - -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, id) -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, char) -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, short) -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, int) -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, long) -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, rx_uchar) -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, rx_ushort) -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, rx_uint) -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, rx_ulong) -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, rx_block) -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, float) -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, double) -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, SEL) - -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, id, id) -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, id, char) -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, id, short) -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, id, int) -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, id, long) -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, id, rx_uchar) -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, id, rx_ushort) -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, id, rx_uint) -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, id, rx_ulong) -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, id, rx_block) -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, id, float) -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, id, double) -SWIZZLE_OBSERVE_METHOD_DEFINITIONS(void, id, SEL) - -+(void)load { - SWIZZLE_OBSERVE_METHOD_BODY(void) - - SWIZZLE_OBSERVE_METHOD_BODY(void, id) - SWIZZLE_OBSERVE_METHOD_BODY(void, char) - SWIZZLE_OBSERVE_METHOD_BODY(void, short) - SWIZZLE_OBSERVE_METHOD_BODY(void, int) - SWIZZLE_OBSERVE_METHOD_BODY(void, long) - SWIZZLE_OBSERVE_METHOD_BODY(void, rx_uchar) - SWIZZLE_OBSERVE_METHOD_BODY(void, rx_ushort) - SWIZZLE_OBSERVE_METHOD_BODY(void, rx_uint) - SWIZZLE_OBSERVE_METHOD_BODY(void, rx_ulong) - SWIZZLE_OBSERVE_METHOD_BODY(void, rx_block) - SWIZZLE_OBSERVE_METHOD_BODY(void, float) - SWIZZLE_OBSERVE_METHOD_BODY(void, double) - SWIZZLE_OBSERVE_METHOD_BODY(void, SEL) - - SWIZZLE_OBSERVE_METHOD_BODY(void, id, id) - SWIZZLE_OBSERVE_METHOD_BODY(void, id, char) - SWIZZLE_OBSERVE_METHOD_BODY(void, id, short) - SWIZZLE_OBSERVE_METHOD_BODY(void, id, int) - SWIZZLE_OBSERVE_METHOD_BODY(void, id, long) - SWIZZLE_OBSERVE_METHOD_BODY(void, id, rx_uchar) - SWIZZLE_OBSERVE_METHOD_BODY(void, id, rx_ushort) - SWIZZLE_OBSERVE_METHOD_BODY(void, id, rx_uint) - SWIZZLE_OBSERVE_METHOD_BODY(void, id, rx_ulong) - SWIZZLE_OBSERVE_METHOD_BODY(void, id, rx_block) - SWIZZLE_OBSERVE_METHOD_BODY(void, id, float) - SWIZZLE_OBSERVE_METHOD_BODY(void, id, double) - SWIZZLE_OBSERVE_METHOD_BODY(void, id, SEL) -} - -@end - -// MARK: RXObjCRuntime - -@implementation RXObjCRuntime - -static RXObjCRuntime *_instance = nil; -static NSMutableDictionary *optimizedObserversByMethodEncoding = nil; - -+(RXObjCRuntime*)instance { - return _instance; -} - -+(void)initialize { - _instance = [[RXObjCRuntime alloc] init]; - defaultTypeID = CFGetTypeID((CFTypeRef)RXObjCRuntime.class); // just need a reference of some object not from CF - deallocSelector = NSSelectorFromString(@"dealloc"); - NSAssert(_instance != nil, @"Failed to initialize swizzling"); -} - --(instancetype)init { - self = [super init]; - if (!self) return nil; - - self.classesThatSupportObservingByForwarding = [NSMutableSet set]; - self.forwardedSelectorsByClass = [NSMutableDictionary dictionary]; - - self.dynamicSubclassByRealClass = [NSMutableDictionary dictionary]; - self.interceptorIMPbySelectorsByClass = [NSMutableDictionary dictionary]; - - pthread_mutexattr_t lock_attr; - pthread_mutexattr_init(&lock_attr); - pthread_mutexattr_settype(&lock_attr, PTHREAD_MUTEX_RECURSIVE); - pthread_mutex_init(&_lock, &lock_attr); - pthread_mutexattr_destroy(&lock_attr); - - return self; -} - --(void)performLocked:(void (^)(RXObjCRuntime* __nonnull))action { - pthread_mutex_lock(&_lock); - action(self); - pthread_mutex_unlock(&_lock); -} - -+(void)registerOptimizedObserver:(RXInterceptWithOptimizedObserver)registration encodedAs:(SEL)selector { - Method exampleEncodingMethod = class_getClassMethod(self, selector); - ALWAYS(exampleEncodingMethod != nil, @"Example encoding method is nil."); - - NSString *methodEncoding = RX_method_encoding(exampleEncodingMethod); - - if (optimizedObserversByMethodEncoding == nil) { - optimizedObserversByMethodEncoding = [NSMutableDictionary dictionary]; - } - - DLOG(@"Added optimized method: %@ (%@)", methodEncoding, NSStringFromSelector(selector)); - ALWAYS(optimizedObserversByMethodEncoding[methodEncoding] == nil, @"Optimized observer already registered") - optimizedObserversByMethodEncoding[methodEncoding] = registration; -} - -/** - This is the main entry point for observing messages sent to arbitrary objects. - */ --(IMP __nullable)ensurePrepared:(id __nonnull)target forObserving:(SEL __nonnull)selector error:(NSErrorParam)error { - Method instanceMethod = class_getInstanceMethod([target class], selector); - if (instanceMethod == nil) { - RX_THROW_ERROR([NSError errorWithDomain:RXObjCRuntimeErrorDomain - code:RXObjCRuntimeErrorSelectorNotImplemented - userInfo:nil], nil); - } - - if (selector == @selector(class) - || selector == @selector(forwardingTargetForSelector:) - || selector == @selector(methodSignatureForSelector:) - || selector == @selector(respondsToSelector:)) { - RX_THROW_ERROR([NSError errorWithDomain:RXObjCRuntimeErrorDomain - code:RXObjCRuntimeErrorObservingPerformanceSensitiveMessages - userInfo:nil], nil); - } - - // For `dealloc` message, original implementation will be swizzled. - // This is a special case because observing `dealloc` message is performed when `observeWeakly` is used. - // - // Some toll free bridged classes don't handle `object_setClass` well and cause crashes. - // - // To make `deallocating` as robust as possible, original implementation will be replaced. - if (selector == deallocSelector) { - Class __nonnull deallocSwizzingTarget = [target class]; - IMP interceptorIMPForSelector = [self interceptorImplementationForSelector:selector forClass:deallocSwizzingTarget]; - if (interceptorIMPForSelector != nil) { - return interceptorIMPForSelector; - } - - if (![self swizzleDeallocating:deallocSwizzingTarget error:error]) { - return nil; - } - - interceptorIMPForSelector = [self interceptorImplementationForSelector:selector forClass:deallocSwizzingTarget]; - if (interceptorIMPForSelector != nil) { - return interceptorIMPForSelector; - } - } - else { - Class __nullable swizzlingImplementorClass = [self prepareTargetClassForObserving:target error:error]; - if (swizzlingImplementorClass == nil) { - return nil; - } - - NSString *methodEncoding = RX_method_encoding(instanceMethod); - RXInterceptWithOptimizedObserver optimizedIntercept = optimizedObserversByMethodEncoding[methodEncoding]; - - if (!RX_method_has_supported_return_type(instanceMethod)) { - RX_THROW_ERROR([NSError errorWithDomain:RXObjCRuntimeErrorDomain - code:RXObjCRuntimeErrorObservingMessagesWithUnsupportedReturnType - userInfo:nil], nil); - } - - // optimized interception method - if (optimizedIntercept != nil) { - IMP interceptorIMPForSelector = [self interceptorImplementationForSelector:selector forClass:swizzlingImplementorClass]; - if (interceptorIMPForSelector != nil) { - return interceptorIMPForSelector; - } - - if (!optimizedIntercept(self, swizzlingImplementorClass, selector, error)) { - return nil; - } - - interceptorIMPForSelector = [self interceptorImplementationForSelector:selector forClass:swizzlingImplementorClass]; - if (interceptorIMPForSelector != nil) { - return interceptorIMPForSelector; - } - } - // default fallback to observing by forwarding messages - else { - if ([self forwardingSelector:selector forClass:swizzlingImplementorClass]) { - return RX_default_target_implementation(); - } - - if (![self observeByForwardingMessages:swizzlingImplementorClass - selector:selector - target:target - error:error]) { - return nil; - } - - if ([self forwardingSelector:selector forClass:swizzlingImplementorClass]) { - return RX_default_target_implementation(); - } - } - } - - RX_THROW_ERROR([NSError errorWithDomain:RXObjCRuntimeErrorDomain - code:RXObjCRuntimeErrorUnknown - userInfo:nil], nil); -} - --(Class __nullable)prepareTargetClassForObserving:(id __nonnull)target error:(NSErrorParam)error { - Class swizzlingClass = objc_getAssociatedObject(target, &RxSwizzlingTargetClassKey); - if (swizzlingClass != nil) { - return swizzlingClass; - } - - Class __nonnull wannaBeClass = [target class]; - /** - Core Foundation classes are usually toll free bridged. Those classes crash the program in case - `object_setClass` is performed on them. - - There is a possibility to just swizzle methods on original object, but since those won't be usual use - cases for this library, then an error will just be reported for now. - */ - BOOL isThisTollFreeFoundationClass = CFGetTypeID((CFTypeRef)target) != defaultTypeID; - - if (isThisTollFreeFoundationClass) { - RX_THROW_ERROR([NSError errorWithDomain:RXObjCRuntimeErrorDomain - code:RXObjCRuntimeErrorCantInterceptCoreFoundationTollFreeBridgedObjects - userInfo:nil], nil); - } - - /** - If the object is reporting a different class then what it's real class, that means that there is probably - already some interception mechanism in place or something weird is happening. - - Most common case when this would happen is when using KVO (`observe`) and `sentMessage`. - - This error is easily resolved by just using `sentMessage` observing before `observe`. - - The reason why other way around could create issues is because KVO will unregister it's interceptor - class and restore original class. Unfortunately that will happen no matter was there another interceptor - subclass registered in hierarchy or not. - - Failure scenario: - * KVO sets class to be `__KVO__OriginalClass` (subclass of `OriginalClass`) - * `sentMessage` sets object class to be `_RX_namespace___KVO__OriginalClass` (subclass of `__KVO__OriginalClass`) - * then unobserving with KVO will restore class to be `OriginalClass` -> failure point - - The reason why changing order of observing works is because any interception method should return - object's original real class (if that doesn't happen then it's really easy to argue that's a bug - in that other library). - - This library won't remove registered interceptor even if there aren't any observers left because - it's highly unlikely it would have any benefit in real world use cases, and it's even more - dangerous. - */ - if ([target class] != object_getClass(target)) { - BOOL isKVO = [target respondsToSelector:NSSelectorFromString(@"_isKVOA")]; - - RX_THROW_ERROR([NSError errorWithDomain:RXObjCRuntimeErrorDomain - code:RXObjCRuntimeErrorObjectMessagesAlreadyBeingIntercepted - userInfo:@{ - RXObjCRuntimeErrorIsKVOKey : @(isKVO) - }], nil); - } - - Class __nullable dynamicFakeSubclass = [self ensureHasDynamicFakeSubclass:wannaBeClass error:error]; - - if (dynamicFakeSubclass == nil) { - return nil; - } - - Class previousClass = object_setClass(target, dynamicFakeSubclass); - if (previousClass != wannaBeClass) { - THREADING_HAZARD(wannaBeClass); - RX_THROW_ERROR([NSError errorWithDomain:RXObjCRuntimeErrorDomain - code:RXObjCRuntimeErrorThreadingCollisionWithOtherInterceptionMechanism - userInfo:nil], nil); - } - - objc_setAssociatedObject(target, &RxSwizzlingTargetClassKey, dynamicFakeSubclass, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - return dynamicFakeSubclass; -} - - --(BOOL)forwardingSelector:(SEL)selector forClass:(Class __nonnull)class { - return [self.forwardedSelectorsByClass[CLASS_VALUE(class)] containsObject:SEL_VALUE(selector)]; -} - --(void)registerForwardedSelector:(SEL)selector forClass:(Class __nonnull)class { - NSValue *classValue = CLASS_VALUE(class); - - NSMutableSet *forwardedSelectors = self.forwardedSelectorsByClass[classValue]; - - if (forwardedSelectors == nil) { - forwardedSelectors = [NSMutableSet set]; - self.forwardedSelectorsByClass[classValue] = forwardedSelectors; - } - - [forwardedSelectors addObject:SEL_VALUE(selector)]; -} - --(BOOL)observeByForwardingMessages:(Class __nonnull)swizzlingImplementorClass - selector:(SEL)selector - target:(id __nonnull)target - error:(NSErrorParam)error { - if (![self ensureForwardingMethodsAreSwizzled:swizzlingImplementorClass error:error]) { - return NO; - } - - ALWAYS(![self forwardingSelector:selector forClass:swizzlingImplementorClass], @"Already observing selector for class"); - -#if TRACE_RESOURCES - atomic_fetch_add(&numberOfForwardedMethods, 1); -#endif - SEL rxSelector = RX_selector(selector); - - Method instanceMethod = class_getInstanceMethod(swizzlingImplementorClass, selector); - ALWAYS(instanceMethod != nil, @"Instance method is nil"); - - const char* methodEncoding = method_getTypeEncoding(instanceMethod); - ALWAYS(methodEncoding != nil, @"Method encoding is nil."); - NSMethodSignature *methodSignature = [NSMethodSignature signatureWithObjCTypes:methodEncoding]; - ALWAYS(methodSignature != nil, @"Method signature is invalid."); - - IMP implementation = method_getImplementation(instanceMethod); - - if (implementation == nil) { - RX_THROW_ERROR([NSError errorWithDomain:RXObjCRuntimeErrorDomain - code:RXObjCRuntimeErrorSelectorNotImplemented - userInfo:nil], NO); - } - - if (!class_addMethod(swizzlingImplementorClass, rxSelector, implementation, methodEncoding)) { - RX_THROW_ERROR([NSError errorWithDomain:RXObjCRuntimeErrorDomain - code:RXObjCRuntimeErrorSavingOriginalForwardingMethodFailed - userInfo:nil], NO); - } - - if (!class_addMethod(swizzlingImplementorClass, selector, _objc_msgForward, methodEncoding)) { - if (implementation != method_setImplementation(instanceMethod, _objc_msgForward)) { - THREADING_HAZARD(swizzlingImplementorClass); - RX_THROW_ERROR([NSError errorWithDomain:RXObjCRuntimeErrorDomain - code:RXObjCRuntimeErrorReplacingMethodWithForwardingImplementation - userInfo:nil], NO); - } - } - - DLOG(@"Rx uses forwarding to observe `%@` for `%@`.", NSStringFromSelector(selector), swizzlingImplementorClass); - [self registerForwardedSelector:selector forClass:swizzlingImplementorClass]; - - return YES; -} - -/** - If object don't have some weird behavior, claims it's the same class that runtime shows, - then dynamic subclass is created (only this instance will have performance hit). - - In case something weird is detected, then original base class is being swizzled and all instances - will have somewhat reduced performance. - - This is especially handy optimization for weak KVO. Nobody will swizzle for example `NSString`, - but to know when instance of a `NSString` was deallocated, performance hit will be only felt on a - single instance of `NSString`, not all instances of `NSString`s. - */ --(Class __nullable)ensureHasDynamicFakeSubclass:(Class __nonnull)class error:(NSErrorParam)error { - Class dynamicFakeSubclass = self.dynamicSubclassByRealClass[CLASS_VALUE(class)]; - if (dynamicFakeSubclass != nil) { - return dynamicFakeSubclass; - } - - NSString *dynamicFakeSubclassName = [RX_PREFIX stringByAppendingString:NSStringFromClass(class)]; - const char *dynamicFakeSubclassNameRaw = dynamicFakeSubclassName.UTF8String; - dynamicFakeSubclass = objc_allocateClassPair(class, dynamicFakeSubclassNameRaw, 0); - ALWAYS(dynamicFakeSubclass != nil, @"Class not generated"); - - if (![self swizzleClass:dynamicFakeSubclass toActAs:class error:error]) { - return nil; - } - - objc_registerClassPair(dynamicFakeSubclass); - - [self.dynamicSubclassByRealClass setObject:dynamicFakeSubclass forKey:CLASS_VALUE(class)]; - ALWAYS(self.dynamicSubclassByRealClass[CLASS_VALUE(class)] != nil, @"Class not registered"); - - return dynamicFakeSubclass; -} - --(BOOL)ensureForwardingMethodsAreSwizzled:(Class __nonnull)class error:(NSErrorParam)error { - NSValue *classValue = CLASS_VALUE(class); - if ([self.classesThatSupportObservingByForwarding containsObject:classValue]) { - return YES; - } - - if (![self swizzleForwardInvocation:class error:error]) { return NO; } - if (![self swizzleMethodSignatureForSelector:class error:error]) { return NO; } - if (![self swizzleRespondsToSelector:class error:error]) { return NO; } - - [self.classesThatSupportObservingByForwarding addObject:classValue]; - - return YES; -} - --(void)registerInterceptedSelector:(SEL)selector implementation:(IMP)implementation forClass:(Class)class { - NSValue * __nonnull classValue = CLASS_VALUE(class); - NSValue * __nonnull selectorValue = SEL_VALUE(selector); - - NSMutableDictionary *swizzledIMPBySelectorsForClass = self.interceptorIMPbySelectorsByClass[classValue]; - - if (swizzledIMPBySelectorsForClass == nil) { - swizzledIMPBySelectorsForClass = [NSMutableDictionary dictionary]; - self.interceptorIMPbySelectorsByClass[classValue] = swizzledIMPBySelectorsForClass; - } - - swizzledIMPBySelectorsForClass[selectorValue] = IMP_VALUE(implementation); - - ALWAYS([self interceptorImplementationForSelector:selector forClass:class] != nil, @"Class should have been swizzled"); -} - --(IMP)interceptorImplementationForSelector:(SEL)selector forClass:(Class)class { - NSValue * __nonnull classValue = CLASS_VALUE(class); - NSValue * __nonnull selectorValue = SEL_VALUE(selector); - - NSMutableDictionary *swizzledIMPBySelectorForClass = self.interceptorIMPbySelectorsByClass[classValue]; - - NSValue *impValue = swizzledIMPBySelectorForClass[selectorValue]; - return impValue.pointerValue; -} - --(BOOL)ensureSwizzledSelector:(SEL __nonnull)selector - ofClass:(Class __nonnull)class - newImplementationGenerator:(IMP(^)(void))newImplementationGenerator -replacementImplementationGenerator:(IMP (^)(IMP originalImplementation))replacementImplementationGenerator - error:(NSErrorParam)error { - if ([self interceptorImplementationForSelector:selector forClass:class] != nil) { - DLOG(@"Trying to register same intercept at least once, this sounds like a possible bug"); - return YES; - } - -#if TRACE_RESOURCES - atomic_fetch_add(&numberOInterceptedMethods, 1); -#endif - - DLOG(@"Rx is swizzling `%@` for `%@`", NSStringFromSelector(selector), class); - - Method existingMethod = class_getInstanceMethod(class, selector); - ALWAYS(existingMethod != nil, @"Method doesn't exist"); - - const char *encoding = method_getTypeEncoding(existingMethod); - ALWAYS(encoding != nil, @"Encoding is nil"); - - IMP newImplementation = newImplementationGenerator(); - - if (class_addMethod(class, selector, newImplementation, encoding)) { - // new method added, job done - [self registerInterceptedSelector:selector implementation:newImplementation forClass:class]; - - return YES; - } - - imp_removeBlock(newImplementation); - - // if add fails, that means that method already exists on targetClass - Method existingMethodOnTargetClass = existingMethod; - - IMP originalImplementation = method_getImplementation(existingMethodOnTargetClass); - ALWAYS(originalImplementation != nil, @"Method must exist."); - IMP implementationReplacementIMP = replacementImplementationGenerator(originalImplementation); - ALWAYS(implementationReplacementIMP != nil, @"Method must exist."); - IMP originalImplementationAfterChange = method_setImplementation(existingMethodOnTargetClass, implementationReplacementIMP); - ALWAYS(originalImplementation != nil, @"Method must exist."); - - // If method replacing failed, who knows what happened, better not trying again, otherwise program can get - // corrupted. - [self registerInterceptedSelector:selector implementation:implementationReplacementIMP forClass:class]; - - // ¯\_(ツ)_/¯ - if (originalImplementationAfterChange != originalImplementation) { - THREADING_HAZARD(class); - return NO; - } - - return YES; -} - -@end - -#if TRACE_RESOURCES - -NSInteger RX_number_of_dynamic_subclasses(void) { - __block NSInteger count = 0; - [[RXObjCRuntime instance] performLocked:^(RXObjCRuntime * __nonnull self) { - count = self.dynamicSubclassByRealClass.count; - }]; - - return count; -} - -NSInteger RX_number_of_forwarding_enabled_classes(void) { - __block NSInteger count = 0; - [[RXObjCRuntime instance] performLocked:^(RXObjCRuntime * __nonnull self) { - count = self.classesThatSupportObservingByForwarding.count; - }]; - - return count; -} - -NSInteger RX_number_of_intercepting_classes(void) { - __block NSInteger count = 0; - [[RXObjCRuntime instance] performLocked:^(RXObjCRuntime * __nonnull self) { - count = self.interceptorIMPbySelectorsByClass.count; - }]; - - return count; -} - -NSInteger RX_number_of_forwarded_methods(void) { - return numberOfForwardedMethods; -} - -NSInteger RX_number_of_swizzled_methods(void) { - return numberOInterceptedMethods; -} - -#endif - -#endif diff --git a/Pods/RxCocoa/RxCocoa/Runtime/include/RxCocoaRuntime.h b/Pods/RxCocoa/RxCocoa/Runtime/include/RxCocoaRuntime.h deleted file mode 100644 index 8cf762e..0000000 --- a/Pods/RxCocoa/RxCocoa/Runtime/include/RxCocoaRuntime.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// RxCocoaRuntime.h -// RxCocoa -// -// Created by Krunoslav Zaher on 2/21/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#import -#import "_RX.h" -#import "_RXDelegateProxy.h" -#import "_RXKVOObserver.h" -#import "_RXObjCRuntime.h" - -//! Project version number for RxCocoa. -FOUNDATION_EXPORT double RxCocoaVersionNumber; - -//! Project version string for RxCocoa. -FOUNDATION_EXPORT const unsigned char RxCocoaVersionString[]; diff --git a/Pods/RxCocoa/RxCocoa/Runtime/include/_RX.h b/Pods/RxCocoa/RxCocoa/Runtime/include/_RX.h deleted file mode 100644 index b868ac9..0000000 --- a/Pods/RxCocoa/RxCocoa/Runtime/include/_RX.h +++ /dev/null @@ -1,93 +0,0 @@ -// -// _RX.h -// RxCocoa -// -// Created by Krunoslav Zaher on 7/12/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#import -#import - -/** - ################################################################################ - This file is part of RX private API - ################################################################################ - */ - -#if TRACE_RESOURCES >= 2 -# define DLOG(...) NSLog(__VA_ARGS__) -#else -# define DLOG(...) -#endif - -#if DEBUG -# define ABORT_IN_DEBUG abort(); -#else -# define ABORT_IN_DEBUG -#endif - - -#define SEL_VALUE(x) [NSValue valueWithPointer:(x)] -#define CLASS_VALUE(x) [NSValue valueWithNonretainedObject:(x)] -#define IMP_VALUE(x) [NSValue valueWithPointer:(x)] - -/** - Checks that the local `error` instance exists before assigning it's value by reference. - This macro exists to work around static analysis warnings — `NSError` is always assumed to be `nullable`, even though we explicitly define the method parameter as `nonnull`. See http://www.openradar.me/21766176 for more details. - */ -#define RX_THROW_ERROR(errorValue, returnValue) if (error != nil) { *error = (errorValue); } return (returnValue); - -#define RX_CAT2(_1, _2) _RX_CAT2(_1, _2) -#define _RX_CAT2(_1, _2) _1 ## _2 - -#define RX_ELEMENT_AT(n, ...) RX_CAT2(_RX_ELEMENT_AT_, n)(__VA_ARGS__) -#define _RX_ELEMENT_AT_0(x, ...) x -#define _RX_ELEMENT_AT_1(_0, x, ...) x -#define _RX_ELEMENT_AT_2(_0, _1, x, ...) x -#define _RX_ELEMENT_AT_3(_0, _1, _2, x, ...) x -#define _RX_ELEMENT_AT_4(_0, _1, _2, _3, x, ...) x -#define _RX_ELEMENT_AT_5(_0, _1, _2, _3, _4, x, ...) x -#define _RX_ELEMENT_AT_6(_0, _1, _2, _3, _4, _5, x, ...) x - -#define RX_COUNT(...) RX_ELEMENT_AT(6, ## __VA_ARGS__, 6, 5, 4, 3, 2, 1, 0) -#define RX_EMPTY(...) RX_ELEMENT_AT(6, ## __VA_ARGS__, 0, 0, 0, 0, 0, 0, 1) - -/** - #define SUM(context, index, head, tail) head + tail - #define MAP(context, index, element) (context)[index] * (element) - - RX_FOR(numbers, SUM, MAP, b0, b1, b2); - - (numbers)[0] * (b0) + (numbers)[1] * (b1) + (numbers[2]) * (b2) - */ - -#define RX_FOREACH(context, concat, map, ...) RX_FOR_MAX(RX_COUNT(__VA_ARGS__), _RX_FOREACH_CONCAT, _RX_FOREACH_MAP, context, concat, map, __VA_ARGS__) -#define _RX_FOREACH_CONCAT(index, head, tail, context, concat, map, ...) concat(context, index, head, tail) -#define _RX_FOREACH_MAP(index, context, concat, map, ...) map(context, index, RX_ELEMENT_AT(index, __VA_ARGS__)) - -/** - #define MAP(context, index, item) (context)[index] * (item) - - RX_FOR_COMMA(numbers, MAP, b0, b1); - - ,(numbers)[0] * b0, (numbers)[1] * b1 - */ -#define RX_FOREACH_COMMA(context, map, ...) RX_CAT2(_RX_FOREACH_COMMA_EMPTY_, RX_EMPTY(__VA_ARGS__))(context, map, ## __VA_ARGS__) -#define _RX_FOREACH_COMMA_EMPTY_1(context, map, ...) -#define _RX_FOREACH_COMMA_EMPTY_0(context, map, ...) , RX_FOR_MAX(RX_COUNT(__VA_ARGS__), _RX_FOREACH_COMMA_CONCAT, _RX_FOREACH_COMMA_MAP, context, map, __VA_ARGS__) -#define _RX_FOREACH_COMMA_CONCAT(index, head, tail, context, map, ...) head, tail -#define _RX_FOREACH_COMMA_MAP(index, context, map, ...) map(context, index, RX_ELEMENT_AT(index, __VA_ARGS__)) - -// rx for - -#define RX_FOR_MAX(max, concat, map, ...) RX_CAT2(RX_FOR_, max)(concat, map, ## __VA_ARGS__) - -#define RX_FOR_0(concat, map, ...) -#define RX_FOR_1(concat, map, ...) map(0, __VA_ARGS__) -#define RX_FOR_2(concat, map, ...) concat(1, RX_FOR_1(concat, map, ## __VA_ARGS__), map(1, __VA_ARGS__), __VA_ARGS__) -#define RX_FOR_3(concat, map, ...) concat(2, RX_FOR_2(concat, map, ## __VA_ARGS__), map(2, __VA_ARGS__), __VA_ARGS__) -#define RX_FOR_4(concat, map, ...) concat(3, RX_FOR_3(concat, map, ## __VA_ARGS__), map(3, __VA_ARGS__), __VA_ARGS__) -#define RX_FOR_5(concat, map, ...) concat(4, RX_FOR_4(concat, map, ## __VA_ARGS__), map(4, __VA_ARGS__), __VA_ARGS__) -#define RX_FOR_6(concat, map, ...) concat(5, RX_FOR_5(concat, map, ## __VA_ARGS__), map(5, __VA_ARGS__), __VA_ARGS__) - diff --git a/Pods/RxCocoa/RxCocoa/Runtime/include/_RXDelegateProxy.h b/Pods/RxCocoa/RxCocoa/Runtime/include/_RXDelegateProxy.h deleted file mode 100644 index e1cc207..0000000 --- a/Pods/RxCocoa/RxCocoa/Runtime/include/_RXDelegateProxy.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// _RXDelegateProxy.h -// RxCocoa -// -// Created by Krunoslav Zaher on 7/4/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface _RXDelegateProxy : NSObject - -@property (nonatomic, weak, readonly) id _forwardToDelegate; - --(void)_setForwardToDelegate:(id __nullable)forwardToDelegate retainDelegate:(BOOL)retainDelegate NS_SWIFT_NAME(_setForwardToDelegate(_:retainDelegate:)) ; - --(BOOL)hasWiredImplementationForSelector:(SEL)selector; --(BOOL)voidDelegateMethodsContain:(SEL)selector; - --(void)_sentMessage:(SEL)selector withArguments:(NSArray*)arguments; --(void)_methodInvoked:(SEL)selector withArguments:(NSArray*)arguments; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/RxCocoa/RxCocoa/Runtime/include/_RXKVOObserver.h b/Pods/RxCocoa/RxCocoa/Runtime/include/_RXKVOObserver.h deleted file mode 100644 index adcfd0a..0000000 --- a/Pods/RxCocoa/RxCocoa/Runtime/include/_RXKVOObserver.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// _RXKVOObserver.h -// RxCocoa -// -// Created by Krunoslav Zaher on 7/11/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#import - -/** - ################################################################################ - This file is part of RX private API - ################################################################################ - */ - -// Exists because if written in Swift, reading unowned is disabled during dealloc process -@interface _RXKVOObserver : NSObject - --(instancetype)initWithTarget:(id)target - retainTarget:(BOOL)retainTarget - keyPath:(NSString*)keyPath - options:(NSKeyValueObservingOptions)options - callback:(void (^)(id))callback; - --(void)dispose; - -@end diff --git a/Pods/RxCocoa/RxCocoa/Runtime/include/_RXObjCRuntime.h b/Pods/RxCocoa/RxCocoa/Runtime/include/_RXObjCRuntime.h deleted file mode 100644 index bc6a76a..0000000 --- a/Pods/RxCocoa/RxCocoa/Runtime/include/_RXObjCRuntime.h +++ /dev/null @@ -1,102 +0,0 @@ -// -// _RXObjCRuntime.h -// RxCocoa -// -// Created by Krunoslav Zaher on 7/11/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#import - -#if !DISABLE_SWIZZLING - -/** - ################################################################################ - This file is part of RX private API - ################################################################################ - */ - -/** - This flag controls `RELEASE` configuration behavior in case race was detecting while modifying - ObjC runtime. - - In case this value is set to `YES`, after runtime race is detected, `abort()` will be called. - Otherwise, only error will be reported using normal error reporting mechanism. - - In `DEBUG` mode `abort` will be always called in case race is detected. - - Races can't happen in case this is the only library modifying ObjC runtime, but in case there are multiple libraries - changing ObjC runtime, race conditions can occur because there is no way to synchronize multiple libraries unaware of - each other. - - To help remedy this situation this library will use `synchronized` on target object and it's meta-class, but - there aren't any guarantees of how other libraries will behave. - - Default value is `NO`. - - */ -extern BOOL RXAbortOnThreadingHazard; - -/// Error domain for RXObjCRuntime. -extern NSString * __nonnull const RXObjCRuntimeErrorDomain; - -/// `userInfo` key with additional information is interceptor probably KVO. -extern NSString * __nonnull const RXObjCRuntimeErrorIsKVOKey; - -typedef NS_ENUM(NSInteger, RXObjCRuntimeError) { - RXObjCRuntimeErrorUnknown = 1, - RXObjCRuntimeErrorObjectMessagesAlreadyBeingIntercepted = 2, - RXObjCRuntimeErrorSelectorNotImplemented = 3, - RXObjCRuntimeErrorCantInterceptCoreFoundationTollFreeBridgedObjects = 4, - RXObjCRuntimeErrorThreadingCollisionWithOtherInterceptionMechanism = 5, - RXObjCRuntimeErrorSavingOriginalForwardingMethodFailed = 6, - RXObjCRuntimeErrorReplacingMethodWithForwardingImplementation = 7, - RXObjCRuntimeErrorObservingPerformanceSensitiveMessages = 8, - RXObjCRuntimeErrorObservingMessagesWithUnsupportedReturnType = 9, -}; - -/// Transforms normal selector into a selector with RX prefix. -SEL _Nonnull RX_selector(SEL _Nonnull selector); - -/// Transforms selector into a unique pointer (because of Swift conversion rules) -void * __nonnull RX_reference_from_selector(SEL __nonnull selector); - -/// Protocol that interception observers must implement. -@protocol RXMessageSentObserver - -/// In case the same selector is being intercepted for a pair of base/sub classes, -/// this property will differentiate between interceptors that need to fire. -@property (nonatomic, assign, readonly) IMP __nonnull targetImplementation; - --(void)messageSentWithArguments:(NSArray* __nonnull)arguments; --(void)methodInvokedWithArguments:(NSArray* __nonnull)arguments; - -@end - -/// Protocol that deallocating observer must implement. -@protocol RXDeallocatingObserver - -/// In case the same selector is being intercepted for a pair of base/sub classes, -/// this property will differentiate between interceptors that need to fire. -@property (nonatomic, assign, readonly) IMP __nonnull targetImplementation; - --(void)deallocating; - -@end - -/// Ensures interceptor is installed on target object. -IMP __nullable RX_ensure_observing(id __nonnull target, SEL __nonnull selector, NSError *__autoreleasing __nullable * __nullable error); - -#endif - -/// Extracts arguments for `invocation`. -NSArray * __nonnull RX_extract_arguments(NSInvocation * __nonnull invocation); - -/// Returns `YES` in case method has `void` return type. -BOOL RX_is_method_with_description_void(struct objc_method_description method); - -/// Returns `YES` in case methodSignature has `void` return type. -BOOL RX_is_method_signature_void(NSMethodSignature * __nonnull methodSignature); - -/// Default value for `RXInterceptionObserver.targetImplementation`. -IMP __nonnull RX_default_target_implementation(void); diff --git a/Pods/RxCocoa/RxCocoa/RxCocoa.h b/Pods/RxCocoa/RxCocoa/RxCocoa.h deleted file mode 100644 index 0bca1bc..0000000 --- a/Pods/RxCocoa/RxCocoa/RxCocoa.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// RxCocoa.h -// RxCocoa -// -// Created by Krunoslav Zaher on 2/21/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#import -#import -#import -#import -#import - -//! Project version number for RxCocoa. -FOUNDATION_EXPORT double RxCocoaVersionNumber; - -//! Project version string for RxCocoa. -FOUNDATION_EXPORT const unsigned char RxCocoaVersionString[]; diff --git a/Pods/RxCocoa/RxCocoa/RxCocoa.swift b/Pods/RxCocoa/RxCocoa/RxCocoa.swift deleted file mode 100644 index 5e569fc..0000000 --- a/Pods/RxCocoa/RxCocoa/RxCocoa.swift +++ /dev/null @@ -1,155 +0,0 @@ -// -// RxCocoa.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 2/21/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import Foundation - -// Importing RxCocoa also imports RxRelay -@_exported import RxRelay - -import RxSwift -#if os(iOS) - import UIKit -#endif - -/// RxCocoa errors. -public enum RxCocoaError - : Swift.Error - , CustomDebugStringConvertible { - /// Unknown error has occurred. - case unknown - /// Invalid operation was attempted. - case invalidOperation(object: Any) - /// Items are not yet bound to user interface but have been requested. - case itemsNotYetBound(object: Any) - /// Invalid KVO Path. - case invalidPropertyName(object: Any, propertyName: String) - /// Invalid object on key path. - case invalidObjectOnKeyPath(object: Any, sourceObject: AnyObject, propertyName: String) - /// Error during swizzling. - case errorDuringSwizzling - /// Casting error. - case castingError(object: Any, targetType: Any.Type) -} - - -// MARK: Debug descriptions - -extension RxCocoaError { - /// A textual representation of `self`, suitable for debugging. - public var debugDescription: String { - switch self { - case .unknown: - return "Unknown error occurred." - case let .invalidOperation(object): - return "Invalid operation was attempted on `\(object)`." - case let .itemsNotYetBound(object): - return "Data source is set, but items are not yet bound to user interface for `\(object)`." - case let .invalidPropertyName(object, propertyName): - return "Object `\(object)` doesn't have a property named `\(propertyName)`." - case let .invalidObjectOnKeyPath(object, sourceObject, propertyName): - return "Unobservable object `\(object)` was observed as `\(propertyName)` of `\(sourceObject)`." - case .errorDuringSwizzling: - return "Error during swizzling." - case let .castingError(object, targetType): - return "Error casting `\(object)` to `\(targetType)`" - } - } -} - - - -// MARK: Error binding policies - -func bindingError(_ error: Swift.Error) { - let error = "Binding error: \(error)" -#if DEBUG - rxFatalError(error) -#else - print(error) -#endif -} - -/// Swift does not implement abstract methods. This method is used as a runtime check to ensure that methods which intended to be abstract (i.e., they should be implemented in subclasses) are not called directly on the superclass. -func rxAbstractMethod(message: String = "Abstract method", file: StaticString = #file, line: UInt = #line) -> Swift.Never { - rxFatalError(message, file: file, line: line) -} - -func rxFatalError(_ lastMessage: @autoclosure () -> String, file: StaticString = #file, line: UInt = #line) -> Swift.Never { - // The temptation to comment this line is great, but please don't, it's for your own good. The choice is yours. - fatalError(lastMessage(), file: file, line: line) -} - -func rxFatalErrorInDebug(_ lastMessage: @autoclosure () -> String, file: StaticString = #file, line: UInt = #line) { - #if DEBUG - fatalError(lastMessage(), file: file, line: line) - #else - print("\(file):\(line): \(lastMessage())") - #endif -} - -// MARK: casts or fatal error - -// workaround for Swift compiler bug, cheers compiler team :) -func castOptionalOrFatalError(_ value: Any?) -> T? { - if value == nil { - return nil - } - let v: T = castOrFatalError(value) - return v -} - -func castOrThrow(_ resultType: T.Type, _ object: Any) throws -> T { - guard let returnValue = object as? T else { - throw RxCocoaError.castingError(object: object, targetType: resultType) - } - - return returnValue -} - -func castOptionalOrThrow(_ resultType: T.Type, _ object: AnyObject) throws -> T? { - if NSNull().isEqual(object) { - return nil - } - - guard let returnValue = object as? T else { - throw RxCocoaError.castingError(object: object, targetType: resultType) - } - - return returnValue -} - -func castOrFatalError(_ value: AnyObject!, message: String) -> T { - let maybeResult: T? = value as? T - guard let result = maybeResult else { - rxFatalError(message) - } - - return result -} - -func castOrFatalError(_ value: Any!) -> T { - let maybeResult: T? = value as? T - guard let result = maybeResult else { - rxFatalError("Failure converting from \(String(describing: value)) to \(T.self)") - } - - return result -} - -// MARK: Error messages - -let dataSourceNotSet = "DataSource not set" -let delegateNotSet = "Delegate not set" - -// MARK: Shared with RxSwift - -func rxFatalError(_ lastMessage: String) -> Never { - // The temptation to comment this line is great, but please don't, it's for your own good. The choice is yours. - fatalError(lastMessage) -} - diff --git a/Pods/RxCocoa/RxCocoa/Traits/ControlEvent.swift b/Pods/RxCocoa/RxCocoa/Traits/ControlEvent.swift deleted file mode 100644 index bea1d83..0000000 --- a/Pods/RxCocoa/RxCocoa/Traits/ControlEvent.swift +++ /dev/null @@ -1,68 +0,0 @@ -// -// ControlEvent.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 8/28/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import RxSwift - -/// A protocol that extends `ControlEvent`. -public protocol ControlEventType : ObservableType { - - /// - returns: `ControlEvent` interface - func asControlEvent() -> ControlEvent -} - -/** - A trait for `Observable`/`ObservableType` that represents an event on a UI element. - - Properties: - - - it doesn’t send any initial value on subscription, - - it `Complete`s the sequence when the control deallocates, - - it never errors out - - it delivers events on `MainScheduler.instance`. - - **The implementation of `ControlEvent` will ensure that sequence of events is being subscribed on main scheduler - (`subscribe(on: ConcurrentMainScheduler.instance)` behavior).** - - **It is the implementor’s responsibility to make sure that all other properties enumerated above are satisfied.** - - **If they aren’t, using this trait will communicate wrong properties, and could potentially break someone’s code.** - - **If the `events` observable sequence passed into the initializer doesn’t satisfy all enumerated - properties, don’t use this trait.** -*/ -public struct ControlEvent : ControlEventType { - public typealias Element = PropertyType - - let events: Observable - - /// Initializes control event with a observable sequence that represents events. - /// - /// - parameter events: Observable sequence that represents events. - /// - returns: Control event created with a observable sequence of events. - public init(events: Ev) where Ev.Element == Element { - self.events = events.subscribe(on: ConcurrentMainScheduler.instance) - } - - /// Subscribes an observer to control events. - /// - /// - parameter observer: Observer to subscribe to events. - /// - returns: Disposable object that can be used to unsubscribe the observer from receiving control events. - public func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element { - self.events.subscribe(observer) - } - - /// - returns: `Observable` interface. - public func asObservable() -> Observable { - self.events - } - - /// - returns: `ControlEvent` interface. - public func asControlEvent() -> ControlEvent { - self - } -} diff --git a/Pods/RxCocoa/RxCocoa/Traits/ControlProperty.swift b/Pods/RxCocoa/RxCocoa/Traits/ControlProperty.swift deleted file mode 100644 index 5ff48ca..0000000 --- a/Pods/RxCocoa/RxCocoa/Traits/ControlProperty.swift +++ /dev/null @@ -1,118 +0,0 @@ -// -// ControlProperty.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 8/28/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import RxSwift - -/// Protocol that enables extension of `ControlProperty`. -public protocol ControlPropertyType : ObservableType, ObserverType { - - /// - returns: `ControlProperty` interface - func asControlProperty() -> ControlProperty -} - -/** - Trait for `Observable`/`ObservableType` that represents property of UI element. - - Sequence of values only represents initial control value and user initiated value changes. - Programmatic value changes won't be reported. - - It's properties are: - - - `shareReplay(1)` behavior - - it's stateful, upon subscription (calling subscribe) last element is immediately replayed if it was produced - - it will `Complete` sequence on control being deallocated - - it never errors out - - it delivers events on `MainScheduler.instance` - - **The implementation of `ControlProperty` will ensure that sequence of values is being subscribed on main scheduler - (`subscribe(on: ConcurrentMainScheduler.instance)` behavior).** - - **It is implementor's responsibility to make sure that that all other properties enumerated above are satisfied.** - - **If they aren't, then using this trait communicates wrong properties and could potentially break someone's code.** - - **In case `values` observable sequence that is being passed into initializer doesn't satisfy all enumerated - properties, please don't use this trait.** -*/ -public struct ControlProperty : ControlPropertyType { - public typealias Element = PropertyType - - let values: Observable - let valueSink: AnyObserver - - /// Initializes control property with a observable sequence that represents property values and observer that enables - /// binding values to property. - /// - /// - parameter values: Observable sequence that represents property values. - /// - parameter valueSink: Observer that enables binding values to control property. - /// - returns: Control property created with a observable sequence of values and an observer that enables binding values - /// to property. - public init(values: Values, valueSink: Sink) where Element == Values.Element, Element == Sink.Element { - self.values = values.subscribe(on: ConcurrentMainScheduler.instance) - self.valueSink = valueSink.asObserver() - } - - /// Subscribes an observer to control property values. - /// - /// - parameter observer: Observer to subscribe to property values. - /// - returns: Disposable object that can be used to unsubscribe the observer from receiving control property values. - public func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element { - self.values.subscribe(observer) - } - - /// `ControlEvent` of user initiated value changes. Every time user updates control value change event - /// will be emitted from `changed` event. - /// - /// Programmatic changes to control value won't be reported. - /// - /// It contains all control property values except for first one. - /// - /// The name only implies that sequence element will be generated once user changes a value and not that - /// adjacent sequence values need to be different (e.g. because of interaction between programmatic and user updates, - /// or for any other reason). - public var changed: ControlEvent { - ControlEvent(events: self.values.skip(1)) - } - - /// - returns: `Observable` interface. - public func asObservable() -> Observable { - self.values - } - - /// - returns: `ControlProperty` interface. - public func asControlProperty() -> ControlProperty { - self - } - - /// Binds event to user interface. - /// - /// - In case next element is received, it is being set to control value. - /// - In case error is received, DEBUG builds raise fatal error, RELEASE builds log event to standard output. - /// - In case sequence completes, nothing happens. - public func on(_ event: Event) { - switch event { - case .error(let error): - bindingError(error) - case .next: - self.valueSink.on(event) - case .completed: - self.valueSink.on(event) - } - } -} - -extension ControlPropertyType where Element == String? { - /// Transforms control property of type `String?` into control property of type `String`. - public var orEmpty: ControlProperty { - let original: ControlProperty = self.asControlProperty() - - let values: Observable = original.values.map { $0 ?? "" } - let valueSink: AnyObserver = original.valueSink.mapObserver { $0 } - return ControlProperty(values: values, valueSink: valueSink) - } -} diff --git a/Pods/RxCocoa/RxCocoa/Traits/Driver/BehaviorRelay+Driver.swift b/Pods/RxCocoa/RxCocoa/Traits/Driver/BehaviorRelay+Driver.swift deleted file mode 100644 index 76d960f..0000000 --- a/Pods/RxCocoa/RxCocoa/Traits/Driver/BehaviorRelay+Driver.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// BehaviorRelay+Driver.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 10/7/17. -// Copyright © 2017 Krunoslav Zaher. All rights reserved. -// - -import RxSwift -import RxRelay - -extension BehaviorRelay { - /// Converts `BehaviorRelay` to `Driver`. - /// - /// - returns: Observable sequence. - public func asDriver() -> Driver { - let source = self.asObservable() - .observe(on:DriverSharingStrategy.scheduler) - return SharedSequence(source) - } -} diff --git a/Pods/RxCocoa/RxCocoa/Traits/Driver/ControlEvent+Driver.swift b/Pods/RxCocoa/RxCocoa/Traits/Driver/ControlEvent+Driver.swift deleted file mode 100644 index b59c753..0000000 --- a/Pods/RxCocoa/RxCocoa/Traits/Driver/ControlEvent+Driver.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// ControlEvent+Driver.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 9/19/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import RxSwift - -extension ControlEvent { - /// Converts `ControlEvent` to `Driver` trait. - /// - /// `ControlEvent` already can't fail, so no special case needs to be handled. - public func asDriver() -> Driver { - return self.asDriver { _ -> Driver in - #if DEBUG - rxFatalError("Somehow driver received error from a source that shouldn't fail.") - #else - return Driver.empty() - #endif - } - } -} diff --git a/Pods/RxCocoa/RxCocoa/Traits/Driver/ControlProperty+Driver.swift b/Pods/RxCocoa/RxCocoa/Traits/Driver/ControlProperty+Driver.swift deleted file mode 100644 index 7904529..0000000 --- a/Pods/RxCocoa/RxCocoa/Traits/Driver/ControlProperty+Driver.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// ControlProperty+Driver.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 9/19/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import RxSwift - -extension ControlProperty { - /// Converts `ControlProperty` to `Driver` trait. - /// - /// `ControlProperty` already can't fail, so no special case needs to be handled. - public func asDriver() -> Driver { - return self.asDriver { _ -> Driver in - #if DEBUG - rxFatalError("Somehow driver received error from a source that shouldn't fail.") - #else - return Driver.empty() - #endif - } - } -} diff --git a/Pods/RxCocoa/RxCocoa/Traits/Driver/Driver+Subscription.swift b/Pods/RxCocoa/RxCocoa/Traits/Driver/Driver+Subscription.swift deleted file mode 100644 index 0b9024c..0000000 --- a/Pods/RxCocoa/RxCocoa/Traits/Driver/Driver+Subscription.swift +++ /dev/null @@ -1,203 +0,0 @@ -// -// Driver+Subscription.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 9/19/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import RxSwift -import RxRelay - -private let errorMessage = "`drive*` family of methods can be only called from `MainThread`.\n" + -"This is required to ensure that the last replayed `Driver` element is delivered on `MainThread`.\n" - -extension SharedSequenceConvertibleType where SharingStrategy == DriverSharingStrategy { - /** - Creates new subscription and sends elements to observer. - This method can be only called from `MainThread`. - - In this form it's equivalent to `subscribe` method, but it communicates intent better. - - - parameter observers: Observers that receives events. - - returns: Disposable object that can be used to unsubscribe the observer from the subject. - */ - public func drive(_ observers: Observer...) -> Disposable where Observer.Element == Element { - MainScheduler.ensureRunningOnMainThread(errorMessage: errorMessage) - return self.asSharedSequence() - .asObservable() - .subscribe { e in - observers.forEach { $0.on(e) } - } - } - - /** - Creates new subscription and sends elements to observer. - This method can be only called from `MainThread`. - - In this form it's equivalent to `subscribe` method, but it communicates intent better. - - - parameter observers: Observers that receives events. - - returns: Disposable object that can be used to unsubscribe the observer from the subject. - */ - public func drive(_ observers: Observer...) -> Disposable where Observer.Element == Element? { - MainScheduler.ensureRunningOnMainThread(errorMessage: errorMessage) - return self.asSharedSequence() - .asObservable() - .map { $0 as Element? } - .subscribe { e in - observers.forEach { $0.on(e) } - } - } - - /** - Creates new subscription and sends elements to `BehaviorRelay`. - This method can be only called from `MainThread`. - - - parameter relays: Target relays for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer from the relay. - */ - public func drive(_ relays: BehaviorRelay...) -> Disposable { - MainScheduler.ensureRunningOnMainThread(errorMessage: errorMessage) - return self.drive(onNext: { e in - relays.forEach { $0.accept(e) } - }) - } - - /** - Creates new subscription and sends elements to `BehaviorRelay`. - This method can be only called from `MainThread`. - - - parameter relays: Target relays for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer from the relay. - */ - public func drive(_ relays: BehaviorRelay...) -> Disposable { - MainScheduler.ensureRunningOnMainThread(errorMessage: errorMessage) - return self.drive(onNext: { e in - relays.forEach { $0.accept(e) } - }) - } - - /** - Creates new subscription and sends elements to `ReplayRelay`. - This method can be only called from `MainThread`. - - - parameter relays: Target relays for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer from the relay. - */ - public func drive(_ relays: ReplayRelay...) -> Disposable { - MainScheduler.ensureRunningOnMainThread(errorMessage: errorMessage) - return self.drive(onNext: { e in - relays.forEach { $0.accept(e) } - }) - } - - /** - Creates new subscription and sends elements to `ReplayRelay`. - This method can be only called from `MainThread`. - - - parameter relays: Target relays for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer from the relay. - */ - public func drive(_ relays: ReplayRelay...) -> Disposable { - MainScheduler.ensureRunningOnMainThread(errorMessage: errorMessage) - return self.drive(onNext: { e in - relays.forEach { $0.accept(e) } - }) - } - - /** - Subscribes to observable sequence using custom binder function. - This method can be only called from `MainThread`. - - - parameter transformation: Function used to bind elements from `self`. - - returns: Object representing subscription. - */ - public func drive(_ transformation: (Observable) -> Result) -> Result { - MainScheduler.ensureRunningOnMainThread(errorMessage: errorMessage) - return transformation(self.asObservable()) - } - - /** - Subscribes to observable sequence using custom binder function and final parameter passed to binder function - after `self` is passed. - - public func drive(with: Self -> R1 -> R2, curriedArgument: R1) -> R2 { - return with(self)(curriedArgument) - } - - This method can be only called from `MainThread`. - - - parameter with: Function used to bind elements from `self`. - - parameter curriedArgument: Final argument passed to `binder` to finish binding process. - - returns: Object representing subscription. - */ - public func drive(_ with: (Observable) -> (R1) -> R2, curriedArgument: R1) -> R2 { - MainScheduler.ensureRunningOnMainThread(errorMessage: errorMessage) - return with(self.asObservable())(curriedArgument) - } - - /** - Subscribes an element handler, a completion handler and disposed handler to an observable sequence. - This method can be only called from `MainThread`. - - Also, take in an object and provide an unretained, safe to use (i.e. not implicitly unwrapped), reference to it along with the events emitted by the sequence. - - Error callback is not exposed because `Driver` can't error out. - - - Note: If `object` can't be retained, none of the other closures will be invoked. - - - parameter object: The object to provide an unretained reference on. - - parameter onNext: Action to invoke for each element in the observable sequence. - - parameter onCompleted: Action to invoke upon graceful termination of the observable sequence. - gracefully completed, errored, or if the generation is canceled by disposing subscription) - - parameter onDisposed: Action to invoke upon any type of termination of sequence (if the sequence has - gracefully completed, errored, or if the generation is canceled by disposing subscription) - - returns: Subscription object used to unsubscribe from the observable sequence. - */ - public func drive( - with object: Object, - onNext: ((Object, Element) -> Void)? = nil, - onCompleted: ((Object) -> Void)? = nil, - onDisposed: ((Object) -> Void)? = nil - ) -> Disposable { - MainScheduler.ensureRunningOnMainThread(errorMessage: errorMessage) - return self.asObservable().subscribe(with: object, onNext: onNext, onCompleted: onCompleted, onDisposed: onDisposed) - } - - /** - Subscribes an element handler, a completion handler and disposed handler to an observable sequence. - This method can be only called from `MainThread`. - - Error callback is not exposed because `Driver` can't error out. - - - parameter onNext: Action to invoke for each element in the observable sequence. - - parameter onCompleted: Action to invoke upon graceful termination of the observable sequence. - gracefully completed, errored, or if the generation is canceled by disposing subscription) - - parameter onDisposed: Action to invoke upon any type of termination of sequence (if the sequence has - gracefully completed, errored, or if the generation is canceled by disposing subscription) - - returns: Subscription object used to unsubscribe from the observable sequence. - */ - public func drive( - onNext: ((Element) -> Void)? = nil, - onCompleted: (() -> Void)? = nil, - onDisposed: (() -> Void)? = nil - ) -> Disposable { - MainScheduler.ensureRunningOnMainThread(errorMessage: errorMessage) - return self.asObservable().subscribe(onNext: onNext, onCompleted: onCompleted, onDisposed: onDisposed) - } - - /** - Subscribes to this `Driver` with a no-op. - This method can be only called from `MainThread`. - - - note: This is an alias of `drive(onNext: nil, onCompleted: nil, onDisposed: nil)` used to fix an ambiguity bug in Swift: https://bugs.swift.org/browse/SR-13657 - - - returns: Subscription object used to unsubscribe from the observable sequence. - */ - public func drive() -> Disposable { - drive(onNext: nil, onCompleted: nil, onDisposed: nil) - } -} - - diff --git a/Pods/RxCocoa/RxCocoa/Traits/Driver/Driver.swift b/Pods/RxCocoa/RxCocoa/Traits/Driver/Driver.swift deleted file mode 100644 index 5de8b3a..0000000 --- a/Pods/RxCocoa/RxCocoa/Traits/Driver/Driver.swift +++ /dev/null @@ -1,53 +0,0 @@ -// -// Driver.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 9/26/16. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -import RxSwift - -/** - Trait that represents observable sequence with following properties: - - - it never fails - - it delivers events on `MainScheduler.instance` - - `share(replay: 1, scope: .whileConnected)` sharing strategy - - Additional explanation: - - all observers share sequence computation resources - - it's stateful, upon subscription (calling subscribe) last element is immediately replayed if it was produced - - computation of elements is reference counted with respect to the number of observers - - if there are no subscribers, it will release sequence computation resources - - In case trait that models event bus is required, please check `Signal`. - - `Driver` can be considered a builder pattern for observable sequences that drive the application. - - If observable sequence has produced at least one element, after new subscription is made last produced element will be - immediately replayed on the same thread on which the subscription was made. - - When using `drive*`, `subscribe*` and `bind*` family of methods, they should always be called from main thread. - - If `drive*`, `subscribe*` and `bind*` are called from background thread, it is possible that initial replay - will happen on background thread, and subsequent events will arrive on main thread. - - To find out more about traits and how to use them, please visit `Documentation/Traits.md`. - */ -public typealias Driver = SharedSequence - -public struct DriverSharingStrategy: SharingStrategyProtocol { - public static var scheduler: SchedulerType { SharingScheduler.make() } - public static func share(_ source: Observable) -> Observable { - source.share(replay: 1, scope: .whileConnected) - } -} - -extension SharedSequenceConvertibleType where SharingStrategy == DriverSharingStrategy { - /// Adds `asDriver` to `SharingSequence` with `DriverSharingStrategy`. - public func asDriver() -> Driver { - self.asSharedSequence() - } -} - diff --git a/Pods/RxCocoa/RxCocoa/Traits/Driver/ObservableConvertibleType+Driver.swift b/Pods/RxCocoa/RxCocoa/Traits/Driver/ObservableConvertibleType+Driver.swift deleted file mode 100644 index bcac66b..0000000 --- a/Pods/RxCocoa/RxCocoa/Traits/Driver/ObservableConvertibleType+Driver.swift +++ /dev/null @@ -1,57 +0,0 @@ -// -// ObservableConvertibleType+Driver.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 9/19/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import RxSwift - -extension ObservableConvertibleType { - /** - Converts observable sequence to `Driver` trait. - - - parameter onErrorJustReturn: Element to return in case of error and after that complete the sequence. - - returns: Driver trait. - */ - public func asDriver(onErrorJustReturn: Element) -> Driver { - let source = self - .asObservable() - .observe(on:DriverSharingStrategy.scheduler) - .catchAndReturn(onErrorJustReturn) - return Driver(source) - } - - /** - Converts observable sequence to `Driver` trait. - - - parameter onErrorDriveWith: Driver that continues to drive the sequence in case of error. - - returns: Driver trait. - */ - public func asDriver(onErrorDriveWith: Driver) -> Driver { - let source = self - .asObservable() - .observe(on:DriverSharingStrategy.scheduler) - .catch { _ in - onErrorDriveWith.asObservable() - } - return Driver(source) - } - - /** - Converts observable sequence to `Driver` trait. - - - parameter onErrorRecover: Calculates driver that continues to drive the sequence in case of error. - - returns: Driver trait. - */ - public func asDriver(onErrorRecover: @escaping (_ error: Swift.Error) -> Driver) -> Driver { - let source = self - .asObservable() - .observe(on:DriverSharingStrategy.scheduler) - .catch { error in - onErrorRecover(error).asObservable() - } - return Driver(source) - } -} diff --git a/Pods/RxCocoa/RxCocoa/Traits/SharedSequence/ObservableConvertibleType+SharedSequence.swift b/Pods/RxCocoa/RxCocoa/Traits/SharedSequence/ObservableConvertibleType+SharedSequence.swift deleted file mode 100644 index 20ddf86..0000000 --- a/Pods/RxCocoa/RxCocoa/Traits/SharedSequence/ObservableConvertibleType+SharedSequence.swift +++ /dev/null @@ -1,57 +0,0 @@ -// -// ObservableConvertibleType+SharedSequence.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 11/1/17. -// Copyright © 2017 Krunoslav Zaher. All rights reserved. -// - -import RxSwift - -extension ObservableConvertibleType { - /** - Converts anything convertible to `Observable` to `SharedSequence` unit. - - - parameter onErrorJustReturn: Element to return in case of error and after that complete the sequence. - - returns: Driving observable sequence. - */ - public func asSharedSequence(sharingStrategy: S.Type = S.self, onErrorJustReturn: Element) -> SharedSequence { - let source = self - .asObservable() - .observe(on:S.scheduler) - .catchAndReturn(onErrorJustReturn) - return SharedSequence(source) - } - - /** - Converts anything convertible to `Observable` to `SharedSequence` unit. - - - parameter onErrorDriveWith: SharedSequence that provides elements of the sequence in case of error. - - returns: Driving observable sequence. - */ - public func asSharedSequence(sharingStrategy: S.Type = S.self, onErrorDriveWith: SharedSequence) -> SharedSequence { - let source = self - .asObservable() - .observe(on:S.scheduler) - .catch { _ in - onErrorDriveWith.asObservable() - } - return SharedSequence(source) - } - - /** - Converts anything convertible to `Observable` to `SharedSequence` unit. - - - parameter onErrorRecover: Calculates driver that continues to drive the sequence in case of error. - - returns: Driving observable sequence. - */ - public func asSharedSequence(sharingStrategy: S.Type = S.self, onErrorRecover: @escaping (_ error: Swift.Error) -> SharedSequence) -> SharedSequence { - let source = self - .asObservable() - .observe(on:S.scheduler) - .catch { error in - onErrorRecover(error).asObservable() - } - return SharedSequence(source) - } -} diff --git a/Pods/RxCocoa/RxCocoa/Traits/SharedSequence/SchedulerType+SharedSequence.swift b/Pods/RxCocoa/RxCocoa/Traits/SharedSequence/SchedulerType+SharedSequence.swift deleted file mode 100644 index 5111e06..0000000 --- a/Pods/RxCocoa/RxCocoa/Traits/SharedSequence/SchedulerType+SharedSequence.swift +++ /dev/null @@ -1,62 +0,0 @@ -// -// SchedulerType+SharedSequence.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 8/27/17. -// Copyright © 2017 Krunoslav Zaher. All rights reserved. -// - -import RxSwift - -public enum SharingScheduler { - /// Default scheduler used in SharedSequence based traits. - public private(set) static var make: () -> SchedulerType = { MainScheduler() } - - /** - This method can be used in unit tests to ensure that built in shared sequences are using mock schedulers instead - of main schedulers. - - **This shouldn't be used in normal release builds.** - */ - static public func mock(scheduler: SchedulerType, action: () throws -> Void) rethrows { - return try mock(makeScheduler: { scheduler }, action: action) - } - - /** - This method can be used in unit tests to ensure that built in shared sequences are using mock schedulers instead - of main schedulers. - - **This shouldn't be used in normal release builds.** - */ - static public func mock(makeScheduler: @escaping () -> SchedulerType, action: () throws -> Void) rethrows { - let originalMake = make - make = makeScheduler - defer { - make = originalMake - } - - try action() - - // If you remove this line , compiler buggy optimizations will change behavior of this code - _forceCompilerToStopDoingInsaneOptimizationsThatBreakCode(makeScheduler) - // Scary, I know - } -} - -#if os(Linux) - import Glibc -#else - import Foundation -#endif - -func _forceCompilerToStopDoingInsaneOptimizationsThatBreakCode(_ scheduler: () -> SchedulerType) { - let a: Int32 = 1 -#if os(Linux) - let b = 314 + Int32(Glibc.random() & 1) -#else - let b = 314 + Int32(arc4random() & 1) -#endif - if a == b { - print(scheduler()) - } -} diff --git a/Pods/RxCocoa/RxCocoa/Traits/SharedSequence/SharedSequence+Concurrency.swift b/Pods/RxCocoa/RxCocoa/Traits/SharedSequence/SharedSequence+Concurrency.swift deleted file mode 100644 index c36b575..0000000 --- a/Pods/RxCocoa/RxCocoa/Traits/SharedSequence/SharedSequence+Concurrency.swift +++ /dev/null @@ -1,42 +0,0 @@ -// -// SharedSequence+Concurrency.swift -// RxCocoa -// -// Created by Shai Mishali on 22/09/2021. -// Copyright © 2021 Krunoslav Zaher. All rights reserved. -// - -#if swift(>=5.5.2) && canImport(_Concurrency) && !os(Linux) -import Foundation - -// MARK: - Shared Sequence -@available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) -public extension SharedSequence { - /// Allows iterating over the values of this Shared Sequence - /// asynchronously via Swift's concurrency features (`async/await`) - /// - /// A sample usage would look like so: - /// - /// ```swift - /// for await value in driver.values { - /// // Handle emitted values - /// } - /// ``` - @MainActor var values: AsyncStream { - AsyncStream { continuation in - // It is safe to ignore the `onError` closure here since - // Shared Sequences (`Driver` and `Signal`) cannot fail - let disposable = self.asObservable() - .subscribe( - onNext: { value in continuation.yield(value) }, - onCompleted: { continuation.finish() }, - onDisposed: { continuation.onTermination?(.cancelled) } - ) - - continuation.onTermination = { @Sendable _ in - disposable.dispose() - } - } - } -} -#endif diff --git a/Pods/RxCocoa/RxCocoa/Traits/SharedSequence/SharedSequence+Operators+arity.swift b/Pods/RxCocoa/RxCocoa/Traits/SharedSequence/SharedSequence+Operators+arity.swift deleted file mode 100644 index 4cc967c..0000000 --- a/Pods/RxCocoa/RxCocoa/Traits/SharedSequence/SharedSequence+Operators+arity.swift +++ /dev/null @@ -1,656 +0,0 @@ -// This file is autogenerated. Take a look at `Preprocessor` target in RxSwift project -// -// SharedSequence+Operators+arity.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 10/14/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import RxSwift - - - -// 2 - -extension SharedSequence { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. - - - parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func zip - (_ source1: O1, _ source2: O2, resultSelector: @escaping (O1.Element, O2.Element) throws -> Element) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy { - let source = Observable.zip( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), - resultSelector: resultSelector - ) - - return SharedSequence(source) - } -} - -extension SharedSequenceConvertibleType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of element tuples whenever all of the observable sequences have produced an element at a corresponding index. - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func zip - (_ source1: O1, _ source2: O2) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy { - let source = Observable.zip( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable() - ) - - return SharedSequence(source) - } -} - -extension SharedSequence { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. - - - parameter resultSelector: Function to invoke whenever any of the sources produces an element. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, resultSelector: @escaping (O1.Element, O2.Element) throws -> Element) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy { - let source = Observable.combineLatest( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), - resultSelector: resultSelector - ) - - return SharedSequence(source) - } -} - -extension SharedSequenceConvertibleType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of element tuples whenever any of the observable sequences produces an element. - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy { - let source = Observable.combineLatest( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable() - ) - - return SharedSequence(source) - } -} - - - -// 3 - -extension SharedSequence { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. - - - parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func zip - (_ source1: O1, _ source2: O2, _ source3: O3, resultSelector: @escaping (O1.Element, O2.Element, O3.Element) throws -> Element) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy, - SharingStrategy == O3.SharingStrategy { - let source = Observable.zip( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), source3.asSharedSequence().asObservable(), - resultSelector: resultSelector - ) - - return SharedSequence(source) - } -} - -extension SharedSequenceConvertibleType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of element tuples whenever all of the observable sequences have produced an element at a corresponding index. - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func zip - (_ source1: O1, _ source2: O2, _ source3: O3) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy, - SharingStrategy == O3.SharingStrategy { - let source = Observable.zip( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), source3.asSharedSequence().asObservable() - ) - - return SharedSequence(source) - } -} - -extension SharedSequence { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. - - - parameter resultSelector: Function to invoke whenever any of the sources produces an element. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, _ source3: O3, resultSelector: @escaping (O1.Element, O2.Element, O3.Element) throws -> Element) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy, - SharingStrategy == O3.SharingStrategy { - let source = Observable.combineLatest( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), source3.asSharedSequence().asObservable(), - resultSelector: resultSelector - ) - - return SharedSequence(source) - } -} - -extension SharedSequenceConvertibleType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of element tuples whenever any of the observable sequences produces an element. - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, _ source3: O3) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy, - SharingStrategy == O3.SharingStrategy { - let source = Observable.combineLatest( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), source3.asSharedSequence().asObservable() - ) - - return SharedSequence(source) - } -} - - - -// 4 - -extension SharedSequence { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. - - - parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func zip - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, resultSelector: @escaping (O1.Element, O2.Element, O3.Element, O4.Element) throws -> Element) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy, - SharingStrategy == O3.SharingStrategy, - SharingStrategy == O4.SharingStrategy { - let source = Observable.zip( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), source3.asSharedSequence().asObservable(), source4.asSharedSequence().asObservable(), - resultSelector: resultSelector - ) - - return SharedSequence(source) - } -} - -extension SharedSequenceConvertibleType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of element tuples whenever all of the observable sequences have produced an element at a corresponding index. - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func zip - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy, - SharingStrategy == O3.SharingStrategy, - SharingStrategy == O4.SharingStrategy { - let source = Observable.zip( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), source3.asSharedSequence().asObservable(), source4.asSharedSequence().asObservable() - ) - - return SharedSequence(source) - } -} - -extension SharedSequence { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. - - - parameter resultSelector: Function to invoke whenever any of the sources produces an element. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, resultSelector: @escaping (O1.Element, O2.Element, O3.Element, O4.Element) throws -> Element) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy, - SharingStrategy == O3.SharingStrategy, - SharingStrategy == O4.SharingStrategy { - let source = Observable.combineLatest( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), source3.asSharedSequence().asObservable(), source4.asSharedSequence().asObservable(), - resultSelector: resultSelector - ) - - return SharedSequence(source) - } -} - -extension SharedSequenceConvertibleType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of element tuples whenever any of the observable sequences produces an element. - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy, - SharingStrategy == O3.SharingStrategy, - SharingStrategy == O4.SharingStrategy { - let source = Observable.combineLatest( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), source3.asSharedSequence().asObservable(), source4.asSharedSequence().asObservable() - ) - - return SharedSequence(source) - } -} - - - -// 5 - -extension SharedSequence { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. - - - parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func zip - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, resultSelector: @escaping (O1.Element, O2.Element, O3.Element, O4.Element, O5.Element) throws -> Element) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy, - SharingStrategy == O3.SharingStrategy, - SharingStrategy == O4.SharingStrategy, - SharingStrategy == O5.SharingStrategy { - let source = Observable.zip( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), source3.asSharedSequence().asObservable(), source4.asSharedSequence().asObservable(), source5.asSharedSequence().asObservable(), - resultSelector: resultSelector - ) - - return SharedSequence(source) - } -} - -extension SharedSequenceConvertibleType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of element tuples whenever all of the observable sequences have produced an element at a corresponding index. - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func zip - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy, - SharingStrategy == O3.SharingStrategy, - SharingStrategy == O4.SharingStrategy, - SharingStrategy == O5.SharingStrategy { - let source = Observable.zip( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), source3.asSharedSequence().asObservable(), source4.asSharedSequence().asObservable(), source5.asSharedSequence().asObservable() - ) - - return SharedSequence(source) - } -} - -extension SharedSequence { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. - - - parameter resultSelector: Function to invoke whenever any of the sources produces an element. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, resultSelector: @escaping (O1.Element, O2.Element, O3.Element, O4.Element, O5.Element) throws -> Element) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy, - SharingStrategy == O3.SharingStrategy, - SharingStrategy == O4.SharingStrategy, - SharingStrategy == O5.SharingStrategy { - let source = Observable.combineLatest( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), source3.asSharedSequence().asObservable(), source4.asSharedSequence().asObservable(), source5.asSharedSequence().asObservable(), - resultSelector: resultSelector - ) - - return SharedSequence(source) - } -} - -extension SharedSequenceConvertibleType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of element tuples whenever any of the observable sequences produces an element. - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy, - SharingStrategy == O3.SharingStrategy, - SharingStrategy == O4.SharingStrategy, - SharingStrategy == O5.SharingStrategy { - let source = Observable.combineLatest( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), source3.asSharedSequence().asObservable(), source4.asSharedSequence().asObservable(), source5.asSharedSequence().asObservable() - ) - - return SharedSequence(source) - } -} - - - -// 6 - -extension SharedSequence { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. - - - parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func zip - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, resultSelector: @escaping (O1.Element, O2.Element, O3.Element, O4.Element, O5.Element, O6.Element) throws -> Element) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy, - SharingStrategy == O3.SharingStrategy, - SharingStrategy == O4.SharingStrategy, - SharingStrategy == O5.SharingStrategy, - SharingStrategy == O6.SharingStrategy { - let source = Observable.zip( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), source3.asSharedSequence().asObservable(), source4.asSharedSequence().asObservable(), source5.asSharedSequence().asObservable(), source6.asSharedSequence().asObservable(), - resultSelector: resultSelector - ) - - return SharedSequence(source) - } -} - -extension SharedSequenceConvertibleType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of element tuples whenever all of the observable sequences have produced an element at a corresponding index. - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func zip - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy, - SharingStrategy == O3.SharingStrategy, - SharingStrategy == O4.SharingStrategy, - SharingStrategy == O5.SharingStrategy, - SharingStrategy == O6.SharingStrategy { - let source = Observable.zip( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), source3.asSharedSequence().asObservable(), source4.asSharedSequence().asObservable(), source5.asSharedSequence().asObservable(), source6.asSharedSequence().asObservable() - ) - - return SharedSequence(source) - } -} - -extension SharedSequence { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. - - - parameter resultSelector: Function to invoke whenever any of the sources produces an element. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, resultSelector: @escaping (O1.Element, O2.Element, O3.Element, O4.Element, O5.Element, O6.Element) throws -> Element) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy, - SharingStrategy == O3.SharingStrategy, - SharingStrategy == O4.SharingStrategy, - SharingStrategy == O5.SharingStrategy, - SharingStrategy == O6.SharingStrategy { - let source = Observable.combineLatest( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), source3.asSharedSequence().asObservable(), source4.asSharedSequence().asObservable(), source5.asSharedSequence().asObservable(), source6.asSharedSequence().asObservable(), - resultSelector: resultSelector - ) - - return SharedSequence(source) - } -} - -extension SharedSequenceConvertibleType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of element tuples whenever any of the observable sequences produces an element. - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy, - SharingStrategy == O3.SharingStrategy, - SharingStrategy == O4.SharingStrategy, - SharingStrategy == O5.SharingStrategy, - SharingStrategy == O6.SharingStrategy { - let source = Observable.combineLatest( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), source3.asSharedSequence().asObservable(), source4.asSharedSequence().asObservable(), source5.asSharedSequence().asObservable(), source6.asSharedSequence().asObservable() - ) - - return SharedSequence(source) - } -} - - - -// 7 - -extension SharedSequence { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. - - - parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func zip - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7, resultSelector: @escaping (O1.Element, O2.Element, O3.Element, O4.Element, O5.Element, O6.Element, O7.Element) throws -> Element) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy, - SharingStrategy == O3.SharingStrategy, - SharingStrategy == O4.SharingStrategy, - SharingStrategy == O5.SharingStrategy, - SharingStrategy == O6.SharingStrategy, - SharingStrategy == O7.SharingStrategy { - let source = Observable.zip( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), source3.asSharedSequence().asObservable(), source4.asSharedSequence().asObservable(), source5.asSharedSequence().asObservable(), source6.asSharedSequence().asObservable(), source7.asSharedSequence().asObservable(), - resultSelector: resultSelector - ) - - return SharedSequence(source) - } -} - -extension SharedSequenceConvertibleType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of element tuples whenever all of the observable sequences have produced an element at a corresponding index. - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func zip - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy, - SharingStrategy == O3.SharingStrategy, - SharingStrategy == O4.SharingStrategy, - SharingStrategy == O5.SharingStrategy, - SharingStrategy == O6.SharingStrategy, - SharingStrategy == O7.SharingStrategy { - let source = Observable.zip( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), source3.asSharedSequence().asObservable(), source4.asSharedSequence().asObservable(), source5.asSharedSequence().asObservable(), source6.asSharedSequence().asObservable(), source7.asSharedSequence().asObservable() - ) - - return SharedSequence(source) - } -} - -extension SharedSequence { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. - - - parameter resultSelector: Function to invoke whenever any of the sources produces an element. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7, resultSelector: @escaping (O1.Element, O2.Element, O3.Element, O4.Element, O5.Element, O6.Element, O7.Element) throws -> Element) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy, - SharingStrategy == O3.SharingStrategy, - SharingStrategy == O4.SharingStrategy, - SharingStrategy == O5.SharingStrategy, - SharingStrategy == O6.SharingStrategy, - SharingStrategy == O7.SharingStrategy { - let source = Observable.combineLatest( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), source3.asSharedSequence().asObservable(), source4.asSharedSequence().asObservable(), source5.asSharedSequence().asObservable(), source6.asSharedSequence().asObservable(), source7.asSharedSequence().asObservable(), - resultSelector: resultSelector - ) - - return SharedSequence(source) - } -} - -extension SharedSequenceConvertibleType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of element tuples whenever any of the observable sequences produces an element. - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy, - SharingStrategy == O3.SharingStrategy, - SharingStrategy == O4.SharingStrategy, - SharingStrategy == O5.SharingStrategy, - SharingStrategy == O6.SharingStrategy, - SharingStrategy == O7.SharingStrategy { - let source = Observable.combineLatest( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), source3.asSharedSequence().asObservable(), source4.asSharedSequence().asObservable(), source5.asSharedSequence().asObservable(), source6.asSharedSequence().asObservable(), source7.asSharedSequence().asObservable() - ) - - return SharedSequence(source) - } -} - - - -// 8 - -extension SharedSequence { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. - - - parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func zip - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7, _ source8: O8, resultSelector: @escaping (O1.Element, O2.Element, O3.Element, O4.Element, O5.Element, O6.Element, O7.Element, O8.Element) throws -> Element) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy, - SharingStrategy == O3.SharingStrategy, - SharingStrategy == O4.SharingStrategy, - SharingStrategy == O5.SharingStrategy, - SharingStrategy == O6.SharingStrategy, - SharingStrategy == O7.SharingStrategy, - SharingStrategy == O8.SharingStrategy { - let source = Observable.zip( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), source3.asSharedSequence().asObservable(), source4.asSharedSequence().asObservable(), source5.asSharedSequence().asObservable(), source6.asSharedSequence().asObservable(), source7.asSharedSequence().asObservable(), source8.asSharedSequence().asObservable(), - resultSelector: resultSelector - ) - - return SharedSequence(source) - } -} - -extension SharedSequenceConvertibleType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of element tuples whenever all of the observable sequences have produced an element at a corresponding index. - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func zip - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7, _ source8: O8) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy, - SharingStrategy == O3.SharingStrategy, - SharingStrategy == O4.SharingStrategy, - SharingStrategy == O5.SharingStrategy, - SharingStrategy == O6.SharingStrategy, - SharingStrategy == O7.SharingStrategy, - SharingStrategy == O8.SharingStrategy { - let source = Observable.zip( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), source3.asSharedSequence().asObservable(), source4.asSharedSequence().asObservable(), source5.asSharedSequence().asObservable(), source6.asSharedSequence().asObservable(), source7.asSharedSequence().asObservable(), source8.asSharedSequence().asObservable() - ) - - return SharedSequence(source) - } -} - -extension SharedSequence { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. - - - parameter resultSelector: Function to invoke whenever any of the sources produces an element. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7, _ source8: O8, resultSelector: @escaping (O1.Element, O2.Element, O3.Element, O4.Element, O5.Element, O6.Element, O7.Element, O8.Element) throws -> Element) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy, - SharingStrategy == O3.SharingStrategy, - SharingStrategy == O4.SharingStrategy, - SharingStrategy == O5.SharingStrategy, - SharingStrategy == O6.SharingStrategy, - SharingStrategy == O7.SharingStrategy, - SharingStrategy == O8.SharingStrategy { - let source = Observable.combineLatest( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), source3.asSharedSequence().asObservable(), source4.asSharedSequence().asObservable(), source5.asSharedSequence().asObservable(), source6.asSharedSequence().asObservable(), source7.asSharedSequence().asObservable(), source8.asSharedSequence().asObservable(), - resultSelector: resultSelector - ) - - return SharedSequence(source) - } -} - -extension SharedSequenceConvertibleType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of element tuples whenever any of the observable sequences produces an element. - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7, _ source8: O8) - -> SharedSequence where SharingStrategy == O1.SharingStrategy, - SharingStrategy == O2.SharingStrategy, - SharingStrategy == O3.SharingStrategy, - SharingStrategy == O4.SharingStrategy, - SharingStrategy == O5.SharingStrategy, - SharingStrategy == O6.SharingStrategy, - SharingStrategy == O7.SharingStrategy, - SharingStrategy == O8.SharingStrategy { - let source = Observable.combineLatest( - source1.asSharedSequence().asObservable(), source2.asSharedSequence().asObservable(), source3.asSharedSequence().asObservable(), source4.asSharedSequence().asObservable(), source5.asSharedSequence().asObservable(), source6.asSharedSequence().asObservable(), source7.asSharedSequence().asObservable(), source8.asSharedSequence().asObservable() - ) - - return SharedSequence(source) - } -} - - diff --git a/Pods/RxCocoa/RxCocoa/Traits/SharedSequence/SharedSequence+Operators.swift b/Pods/RxCocoa/RxCocoa/Traits/SharedSequence/SharedSequence+Operators.swift deleted file mode 100644 index 1d53b03..0000000 --- a/Pods/RxCocoa/RxCocoa/Traits/SharedSequence/SharedSequence+Operators.swift +++ /dev/null @@ -1,584 +0,0 @@ -// -// SharedSequence+Operators.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 9/19/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import RxSwift - -// MARK: map -extension SharedSequenceConvertibleType { - - /** - Projects each element of an observable sequence into a new form. - - - parameter selector: A transform function to apply to each source element. - - returns: An observable sequence whose elements are the result of invoking the transform function on each element of source. - */ - public func map(_ selector: @escaping (Element) -> Result) -> SharedSequence { - let source = self - .asObservable() - .map(selector) - return SharedSequence(source) - } -} - -// MARK: compactMap -extension SharedSequenceConvertibleType { - - /** - Projects each element of an observable sequence into an optional form and filters all optional results. - - - parameter selector: A transform function to apply to each source element and which returns an element or nil. - - returns: An observable sequence whose elements are the result of filtering the transform function for each element of the source. - - */ - public func compactMap(_ selector: @escaping (Element) -> Result?) -> SharedSequence { - let source = self - .asObservable() - .compactMap(selector) - return SharedSequence(source) - } -} - -// MARK: filter -extension SharedSequenceConvertibleType { - /** - Filters the elements of an observable sequence based on a predicate. - - - parameter predicate: A function to test each source element for a condition. - - returns: An observable sequence that contains elements from the input sequence that satisfy the condition. - */ - public func filter(_ predicate: @escaping (Element) -> Bool) -> SharedSequence { - let source = self - .asObservable() - .filter(predicate) - return SharedSequence(source) - } -} - -// MARK: switchLatest -extension SharedSequenceConvertibleType where Element: SharedSequenceConvertibleType { - - /** - Transforms an observable sequence of observable sequences into an observable sequence - producing values only from the most recent observable sequence. - - Each time a new inner observable sequence is received, unsubscribe from the - previous inner observable sequence. - - - returns: The observable sequence that at any point in time produces the elements of the most recent inner observable sequence that has been received. - */ - public func switchLatest() -> SharedSequence { - let source: Observable = self - .asObservable() - .map { $0.asSharedSequence() } - .switchLatest() - return SharedSequence(source) - } -} - -// MARK: flatMapLatest -extension SharedSequenceConvertibleType { - /** - Projects each element of an observable sequence into a new sequence of observable sequences and then - transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. - - It is a combination of `map` + `switchLatest` operator - - - parameter selector: A transform function to apply to each element. - - returns: An observable sequence whose elements are the result of invoking the transform function on each element of source producing an - Observable of Observable sequences and that at any point in time produces the elements of the most recent inner observable sequence that has been received. - */ - public func flatMapLatest(_ selector: @escaping (Element) -> SharedSequence) - -> SharedSequence { - let source: Observable = self - .asObservable() - .flatMapLatest(selector) - return SharedSequence(source) - } -} - -// MARK: flatMapFirst -extension SharedSequenceConvertibleType { - - /** - Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. - If element is received while there is some projected observable sequence being merged it will simply be ignored. - - - parameter selector: A transform function to apply to element that was observed while no observable is executing in parallel. - - returns: An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence that was received while no other sequence was being calculated. - */ - public func flatMapFirst(_ selector: @escaping (Element) -> SharedSequence) - -> SharedSequence { - let source: Observable = self - .asObservable() - .flatMapFirst(selector) - return SharedSequence(source) - } -} - -// MARK: do -extension SharedSequenceConvertibleType { - /** - Invokes an action for each event in the observable sequence, and propagates all observer messages through the result sequence. - - - parameter onNext: Action to invoke for each element in the observable sequence. - - parameter afterNext: Action to invoke for each element after the observable has passed an onNext event along to its downstream. - - parameter onCompleted: Action to invoke upon graceful termination of the observable sequence. - - parameter afterCompleted: Action to invoke after graceful termination of the observable sequence. - - parameter onSubscribe: Action to invoke before subscribing to source observable sequence. - - parameter onSubscribed: Action to invoke after subscribing to source observable sequence. - - parameter onDispose: Action to invoke after subscription to source observable has been disposed for any reason. It can be either because sequence terminates for some reason or observer subscription being disposed. - - returns: The source sequence with the side-effecting behavior applied. - */ - public func `do`(onNext: ((Element) -> Void)? = nil, afterNext: ((Element) -> Void)? = nil, onCompleted: (() -> Void)? = nil, afterCompleted: (() -> Void)? = nil, onSubscribe: (() -> Void)? = nil, onSubscribed: (() -> Void)? = nil, onDispose: (() -> Void)? = nil) - -> SharedSequence { - let source = self.asObservable() - .do(onNext: onNext, afterNext: afterNext, onCompleted: onCompleted, afterCompleted: afterCompleted, onSubscribe: onSubscribe, onSubscribed: onSubscribed, onDispose: onDispose) - - return SharedSequence(source) - } -} - -// MARK: debug -extension SharedSequenceConvertibleType { - - /** - Prints received events for all observers on standard output. - - - parameter identifier: Identifier that is printed together with event description to standard output. - - returns: An observable sequence whose events are printed to standard output. - */ - public func debug(_ identifier: String? = nil, trimOutput: Bool = false, file: String = #file, line: UInt = #line, function: String = #function) -> SharedSequence { - let source = self.asObservable() - .debug(identifier, trimOutput: trimOutput, file: file, line: line, function: function) - return SharedSequence(source) - } -} - -// MARK: distinctUntilChanged -extension SharedSequenceConvertibleType where Element: Equatable { - - /** - Returns an observable sequence that contains only distinct contiguous elements according to equality operator. - - - returns: An observable sequence only containing the distinct contiguous elements, based on equality operator, from the source sequence. - */ - public func distinctUntilChanged() - -> SharedSequence { - let source = self.asObservable() - .distinctUntilChanged({ $0 }, comparer: { ($0 == $1) }) - - return SharedSequence(source) - } -} - -extension SharedSequenceConvertibleType { - - /** - Returns an observable sequence that contains only distinct contiguous elements according to the `keySelector`. - - - parameter keySelector: A function to compute the comparison key for each element. - - returns: An observable sequence only containing the distinct contiguous elements, based on a computed key value, from the source sequence. - */ - public func distinctUntilChanged(_ keySelector: @escaping (Element) -> Key) -> SharedSequence { - let source = self.asObservable() - .distinctUntilChanged(keySelector, comparer: { $0 == $1 }) - return SharedSequence(source) - } - - /** - Returns an observable sequence that contains only distinct contiguous elements according to the `comparer`. - - - parameter comparer: Equality comparer for computed key values. - - returns: An observable sequence only containing the distinct contiguous elements, based on `comparer`, from the source sequence. - */ - public func distinctUntilChanged(_ comparer: @escaping (Element, Element) -> Bool) -> SharedSequence { - let source = self.asObservable() - .distinctUntilChanged({ $0 }, comparer: comparer) - return SharedSequence(source) - } - - /** - Returns an observable sequence that contains only distinct contiguous elements according to the keySelector and the comparer. - - - parameter keySelector: A function to compute the comparison key for each element. - - parameter comparer: Equality comparer for computed key values. - - returns: An observable sequence only containing the distinct contiguous elements, based on a computed key value and the comparer, from the source sequence. - */ - public func distinctUntilChanged(_ keySelector: @escaping (Element) -> K, comparer: @escaping (K, K) -> Bool) -> SharedSequence { - let source = self.asObservable() - .distinctUntilChanged(keySelector, comparer: comparer) - return SharedSequence(source) - } -} - - -// MARK: flatMap -extension SharedSequenceConvertibleType { - - /** - Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. - - - parameter selector: A transform function to apply to each element. - - returns: An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. - */ - public func flatMap(_ selector: @escaping (Element) -> SharedSequence) -> SharedSequence { - let source = self.asObservable() - .flatMap(selector) - - return SharedSequence(source) - } -} - -// MARK: merge -extension SharedSequenceConvertibleType { - /** - Merges elements from all observable sequences from collection into a single observable sequence. - - - seealso: [merge operator on reactivex.io](http://reactivex.io/documentation/operators/merge.html) - - - parameter sources: Collection of observable sequences to merge. - - returns: The observable sequence that merges the elements of the observable sequences. - */ - public static func merge(_ sources: Collection) -> SharedSequence - where Collection.Element == SharedSequence { - let source = Observable.merge(sources.map { $0.asObservable() }) - return SharedSequence(source) - } - - /** - Merges elements from all observable sequences from array into a single observable sequence. - - - seealso: [merge operator on reactivex.io](http://reactivex.io/documentation/operators/merge.html) - - - parameter sources: Array of observable sequences to merge. - - returns: The observable sequence that merges the elements of the observable sequences. - */ - public static func merge(_ sources: [SharedSequence]) -> SharedSequence { - let source = Observable.merge(sources.map { $0.asObservable() }) - return SharedSequence(source) - } - - /** - Merges elements from all observable sequences into a single observable sequence. - - - seealso: [merge operator on reactivex.io](http://reactivex.io/documentation/operators/merge.html) - - - parameter sources: Collection of observable sequences to merge. - - returns: The observable sequence that merges the elements of the observable sequences. - */ - public static func merge(_ sources: SharedSequence...) -> SharedSequence { - let source = Observable.merge(sources.map { $0.asObservable() }) - return SharedSequence(source) - } - -} - -// MARK: merge -extension SharedSequenceConvertibleType where Element: SharedSequenceConvertibleType { - /** - Merges elements from all observable sequences in the given enumerable sequence into a single observable sequence. - - - returns: The observable sequence that merges the elements of the observable sequences. - */ - public func merge() -> SharedSequence { - let source = self.asObservable() - .map { $0.asSharedSequence() } - .merge() - return SharedSequence(source) - } - - /** - Merges elements from all inner observable sequences into a single observable sequence, limiting the number of concurrent subscriptions to inner sequences. - - - parameter maxConcurrent: Maximum number of inner observable sequences being subscribed to concurrently. - - returns: The observable sequence that merges the elements of the inner sequences. - */ - public func merge(maxConcurrent: Int) - -> SharedSequence { - let source = self.asObservable() - .map { $0.asSharedSequence() } - .merge(maxConcurrent: maxConcurrent) - return SharedSequence(source) - } -} - -// MARK: throttle -extension SharedSequenceConvertibleType { - - /** - Returns an Observable that emits the first and the latest item emitted by the source Observable during sequential time windows of a specified duration. - - This operator makes sure that no two elements are emitted in less then dueTime. - - - seealso: [debounce operator on reactivex.io](http://reactivex.io/documentation/operators/debounce.html) - - - parameter dueTime: Throttling duration for each element. - - parameter latest: Should latest element received in a dueTime wide time window since last element emission be emitted. - - returns: The throttled sequence. - */ - public func throttle(_ dueTime: RxTimeInterval, latest: Bool = true) - -> SharedSequence { - let source = self.asObservable() - .throttle(dueTime, latest: latest, scheduler: SharingStrategy.scheduler) - - return SharedSequence(source) - } - - /** - Ignores elements from an observable sequence which are followed by another element within a specified relative time duration, using the specified scheduler to run throttling timers. - - - parameter dueTime: Throttling duration for each element. - - returns: The throttled sequence. - */ - public func debounce(_ dueTime: RxTimeInterval) - -> SharedSequence { - let source = self.asObservable() - .debounce(dueTime, scheduler: SharingStrategy.scheduler) - - return SharedSequence(source) - } -} - -// MARK: scan -extension SharedSequenceConvertibleType { - /** - Applies an accumulator function over an observable sequence and returns each intermediate result. The specified seed value is used as the initial accumulator value. - - For aggregation behavior with no intermediate results, see `reduce`. - - - parameter seed: The initial accumulator value. - - parameter accumulator: An accumulator function to be invoked on each element. - - returns: An observable sequence containing the accumulated values. - */ - public func scan(_ seed: A, accumulator: @escaping (A, Element) -> A) - -> SharedSequence { - let source = self.asObservable() - .scan(seed, accumulator: accumulator) - return SharedSequence(source) - } -} - -// MARK: concat - -extension SharedSequence { - /** - Concatenates all observable sequences in the given sequence, as long as the previous observable sequence terminated successfully. - - - returns: An observable sequence that contains the elements of each given sequence, in sequential order. - */ - public static func concat(_ sequence: Sequence) -> SharedSequence - where Sequence.Element == SharedSequence { - let source = Observable.concat(sequence.lazy.map { $0.asObservable() }) - return SharedSequence(source) - } - - /** - Concatenates all observable sequences in the given sequence, as long as the previous observable sequence terminated successfully. - - - returns: An observable sequence that contains the elements of each given sequence, in sequential order. - */ - public static func concat(_ collection: Collection) -> SharedSequence - where Collection.Element == SharedSequence { - let source = Observable.concat(collection.map { $0.asObservable() }) - return SharedSequence(source) - } -} - -// MARK: zip - -extension SharedSequence { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. - - - parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func zip(_ collection: Collection, resultSelector: @escaping ([Element]) throws -> Result) -> SharedSequence - where Collection.Element == SharedSequence { - let source = Observable.zip(collection.map { $0.asSharedSequence().asObservable() }, resultSelector: resultSelector) - return SharedSequence(source) - } - - /** - Merges the specified observable sequences into one observable sequence all of the observable sequences have produced an element at a corresponding index. - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func zip(_ collection: Collection) -> SharedSequence - where Collection.Element == SharedSequence { - let source = Observable.zip(collection.map { $0.asSharedSequence().asObservable() }) - return SharedSequence(source) - } -} - -// MARK: combineLatest - -extension SharedSequence { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. - - - parameter resultSelector: Function to invoke whenever any of the sources produces an element. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func combineLatest(_ collection: Collection, resultSelector: @escaping ([Element]) throws -> Result) -> SharedSequence - where Collection.Element == SharedSequence { - let source = Observable.combineLatest(collection.map { $0.asObservable() }, resultSelector: resultSelector) - return SharedSequence(source) - } - - /** - Merges the specified observable sequences into one observable sequence whenever any of the observable sequences produces an element. - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func combineLatest(_ collection: Collection) -> SharedSequence - where Collection.Element == SharedSequence { - let source = Observable.combineLatest(collection.map { $0.asObservable() }) - return SharedSequence(source) - } -} - -// MARK: - withUnretained -extension SharedSequenceConvertibleType where SharingStrategy == SignalSharingStrategy { - /** - Provides an unretained, safe to use (i.e. not implicitly unwrapped), reference to an object along with the events emitted by the sequence. - - In the case the provided object cannot be retained successfully, the sequence will complete. - - - note: Be careful when using this operator in a sequence that has a buffer or replay, for example `share(replay: 1)`, as the sharing buffer will also include the provided object, which could potentially cause a retain cycle. - - - parameter obj: The object to provide an unretained reference on. - - parameter resultSelector: A function to combine the unretained referenced on `obj` and the value of the observable sequence. - - returns: An observable sequence that contains the result of `resultSelector` being called with an unretained reference on `obj` and the values of the original sequence. - */ - public func withUnretained( - _ obj: Object, - resultSelector: @escaping (Object, Element) -> Out - ) -> SharedSequence { - SharedSequence(self.asObservable().withUnretained(obj, resultSelector: resultSelector)) - } - - /** - Provides an unretained, safe to use (i.e. not implicitly unwrapped), reference to an object along with the events emitted by the sequence. - - In the case the provided object cannot be retained successfully, the sequence will complete. - - - note: Be careful when using this operator in a sequence that has a buffer or replay, for example `share(replay: 1)`, as the sharing buffer will also include the provided object, which could potentially cause a retain cycle. - - - parameter obj: The object to provide an unretained reference on. - - returns: An observable sequence of tuples that contains both an unretained reference on `obj` and the values of the original sequence. - */ - public func withUnretained(_ obj: Object) -> SharedSequence { - withUnretained(obj) { ($0, $1) } - } -} - -extension SharedSequenceConvertibleType where SharingStrategy == DriverSharingStrategy { - @available(*, message: "withUnretained has been deprecated for Driver. Consider using `drive(with:onNext:onCompleted:onDisposed:)`, instead", unavailable) - public func withUnretained( - _ obj: Object, - resultSelector: @escaping (Object, Element) -> Out - ) -> SharedSequence { - SharedSequence(self.asObservable().withUnretained(obj, resultSelector: resultSelector)) - } - - @available(*, message: "withUnretained has been deprecated for Driver. Consider using `drive(with:onNext:onCompleted:onDisposed:)`, instead", unavailable) - public func withUnretained(_ obj: Object) -> SharedSequence { - SharedSequence(self.asObservable().withUnretained(obj) { ($0, $1) }) - } -} - -// MARK: withLatestFrom -extension SharedSequenceConvertibleType { - - /** - Merges two observable sequences into one observable sequence by combining each element from self with the latest element from the second source, if any. - - - parameter second: Second observable source. - - parameter resultSelector: Function to invoke for each element from the self combined with the latest element from the second source, if any. - - returns: An observable sequence containing the result of combining each element of the self with the latest element from the second source, if any, using the specified result selector function. - */ - public func withLatestFrom(_ second: SecondO, resultSelector: @escaping (Element, SecondO.Element) -> ResultType) -> SharedSequence where SecondO.SharingStrategy == SharingStrategy { - let source = self.asObservable() - .withLatestFrom(second.asSharedSequence(), resultSelector: resultSelector) - - return SharedSequence(source) - } - - /** - Merges two observable sequences into one observable sequence by using latest element from the second sequence every time when `self` emits an element. - - - parameter second: Second observable source. - - returns: An observable sequence containing the result of combining each element of the self with the latest element from the second source, if any, using the specified result selector function. - */ - public func withLatestFrom(_ second: SecondO) -> SharedSequence { - let source = self.asObservable() - .withLatestFrom(second.asSharedSequence()) - - return SharedSequence(source) - } -} - -// MARK: skip -extension SharedSequenceConvertibleType { - - /** - Bypasses a specified number of elements in an observable sequence and then returns the remaining elements. - - - seealso: [skip operator on reactivex.io](http://reactivex.io/documentation/operators/skip.html) - - - parameter count: The number of elements to skip before returning the remaining elements. - - returns: An observable sequence that contains the elements that occur after the specified index in the input sequence. - */ - public func skip(_ count: Int) - -> SharedSequence { - let source = self.asObservable() - .skip(count) - return SharedSequence(source) - } -} - -// MARK: startWith -extension SharedSequenceConvertibleType { - - /** - Prepends a value to an observable sequence. - - - seealso: [startWith operator on reactivex.io](http://reactivex.io/documentation/operators/startwith.html) - - - parameter element: Element to prepend to the specified sequence. - - returns: The source sequence prepended with the specified values. - */ - public func startWith(_ element: Element) - -> SharedSequence { - let source = self.asObservable() - .startWith(element) - - return SharedSequence(source) - } -} - -// MARK: delay -extension SharedSequenceConvertibleType { - - /** - Returns an observable sequence by the source observable sequence shifted forward in time by a specified delay. Error events from the source observable sequence are not delayed. - - - seealso: [delay operator on reactivex.io](http://reactivex.io/documentation/operators/delay.html) - - - parameter dueTime: Relative time shift of the source by. - - returns: the source Observable shifted in time by the specified delay. - */ - public func delay(_ dueTime: RxTimeInterval) - -> SharedSequence { - let source = self.asObservable() - .delay(dueTime, scheduler: SharingStrategy.scheduler) - - return SharedSequence(source) - } -} diff --git a/Pods/RxCocoa/RxCocoa/Traits/SharedSequence/SharedSequence.swift b/Pods/RxCocoa/RxCocoa/Traits/SharedSequence/SharedSequence.swift deleted file mode 100644 index 4db2ee4..0000000 --- a/Pods/RxCocoa/RxCocoa/Traits/SharedSequence/SharedSequence.swift +++ /dev/null @@ -1,226 +0,0 @@ -// -// SharedSequence.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 8/27/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import RxSwift - -/** - Trait that represents observable sequence that shares computation resources with following properties: - - - it never fails - - it delivers events on `SharingStrategy.scheduler` - - sharing strategy is customizable using `SharingStrategy.share` behavior - - `SharedSequence` can be considered a builder pattern for observable sequences that share computation resources. - - To find out more about units and how to use them, please visit `Documentation/Traits.md`. -*/ -public struct SharedSequence : SharedSequenceConvertibleType, ObservableConvertibleType { - let source: Observable - - init(_ source: Observable) { - self.source = SharingStrategy.share(source) - } - - init(raw: Observable) { - self.source = raw - } - - #if EXPANDABLE_SHARED_SEQUENCE - /** - This method is extension hook in case this unit needs to extended from outside the library. - - By defining `EXPANDABLE_SHARED_SEQUENCE` one agrees that it's up to them to ensure shared sequence - properties are preserved after extension. - */ - public static func createUnsafe(source: Source) -> SharedSequence { - SharedSequence(raw: source.asObservable()) - } - #endif - - /** - - returns: Built observable sequence. - */ - public func asObservable() -> Observable { - self.source - } - - /** - - returns: `self` - */ - public func asSharedSequence() -> SharedSequence { - self - } -} - -/** - Different `SharedSequence` sharing strategies must conform to this protocol. - */ -public protocol SharingStrategyProtocol { - /** - Scheduled on which all sequence events will be delivered. - */ - static var scheduler: SchedulerType { get } - - /** - Computation resources sharing strategy for multiple sequence observers. - - E.g. One can choose `share(replay:scope:)` - as sequence event sharing strategies, but also do something more exotic, like - implementing promises or lazy loading chains. - */ - static func share(_ source: Observable) -> Observable -} - -/** -A type that can be converted to `SharedSequence`. -*/ -public protocol SharedSequenceConvertibleType : ObservableConvertibleType { - associatedtype SharingStrategy: SharingStrategyProtocol - - /** - Converts self to `SharedSequence`. - */ - func asSharedSequence() -> SharedSequence -} - -extension SharedSequenceConvertibleType { - public func asObservable() -> Observable { - self.asSharedSequence().asObservable() - } -} - - -extension SharedSequence { - - /** - Returns an empty observable sequence, using the specified scheduler to send out the single `Completed` message. - - - returns: An observable sequence with no elements. - */ - public static func empty() -> SharedSequence { - SharedSequence(raw: Observable.empty().subscribe(on: SharingStrategy.scheduler)) - } - - /** - Returns a non-terminating observable sequence, which can be used to denote an infinite duration. - - - returns: An observable sequence whose observers will never get called. - */ - public static func never() -> SharedSequence { - SharedSequence(raw: Observable.never()) - } - - /** - Returns an observable sequence that contains a single element. - - - parameter element: Single element in the resulting observable sequence. - - returns: An observable sequence containing the single specified element. - */ - public static func just(_ element: Element) -> SharedSequence { - SharedSequence(raw: Observable.just(element).subscribe(on: SharingStrategy.scheduler)) - } - - /** - Returns an observable sequence that invokes the specified factory function whenever a new observer subscribes. - - - parameter observableFactory: Observable factory function to invoke for each observer that subscribes to the resulting sequence. - - returns: An observable sequence whose observers trigger an invocation of the given observable factory function. - */ - public static func deferred(_ observableFactory: @escaping () -> SharedSequence) - -> SharedSequence { - SharedSequence(Observable.deferred { observableFactory().asObservable() }) - } - - /** - This method creates a new Observable instance with a variable number of elements. - - - seealso: [from operator on reactivex.io](http://reactivex.io/documentation/operators/from.html) - - - parameter elements: Elements to generate. - - returns: The observable sequence whose elements are pulled from the given arguments. - */ - public static func of(_ elements: Element ...) -> SharedSequence { - let source = Observable.from(elements, scheduler: SharingStrategy.scheduler) - return SharedSequence(raw: source) - } -} - -extension SharedSequence { - - /** - This method converts an array to an observable sequence. - - - seealso: [from operator on reactivex.io](http://reactivex.io/documentation/operators/from.html) - - - returns: The observable sequence whose elements are pulled from the given enumerable sequence. - */ - public static func from(_ array: [Element]) -> SharedSequence { - let source = Observable.from(array, scheduler: SharingStrategy.scheduler) - return SharedSequence(raw: source) - } - - /** - This method converts a sequence to an observable sequence. - - - seealso: [from operator on reactivex.io](http://reactivex.io/documentation/operators/from.html) - - - returns: The observable sequence whose elements are pulled from the given enumerable sequence. - */ - public static func from(_ sequence: Sequence) -> SharedSequence where Sequence.Element == Element { - let source = Observable.from(sequence, scheduler: SharingStrategy.scheduler) - return SharedSequence(raw: source) - } - - /** - This method converts a optional to an observable sequence. - - - seealso: [from operator on reactivex.io](http://reactivex.io/documentation/operators/from.html) - - - parameter optional: Optional element in the resulting observable sequence. - - - returns: An observable sequence containing the wrapped value or not from given optional. - */ - public static func from(optional: Element?) -> SharedSequence { - let source = Observable.from(optional: optional, scheduler: SharingStrategy.scheduler) - return SharedSequence(raw: source) - } -} - -extension SharedSequence where Element: RxAbstractInteger { - /** - Returns an observable sequence that produces a value after each period, using the specified scheduler to run timers and to send out observer messages. - - - seealso: [interval operator on reactivex.io](http://reactivex.io/documentation/operators/interval.html) - - - parameter period: Period for producing the values in the resulting sequence. - - returns: An observable sequence that produces a value after each period. - */ - public static func interval(_ period: RxTimeInterval) - -> SharedSequence { - SharedSequence(Observable.interval(period, scheduler: SharingStrategy.scheduler)) - } -} - -// MARK: timer - -extension SharedSequence where Element: RxAbstractInteger { - /** - Returns an observable sequence that periodically produces a value after the specified initial relative due time has elapsed, using the specified scheduler to run timers. - - - seealso: [timer operator on reactivex.io](http://reactivex.io/documentation/operators/timer.html) - - - parameter dueTime: Relative time at which to produce the first value. - - parameter period: Period to produce subsequent values. - - returns: An observable sequence that produces a value after due time has elapsed and then each period. - */ - public static func timer(_ dueTime: RxTimeInterval, period: RxTimeInterval) - -> SharedSequence { - SharedSequence(Observable.timer(dueTime, period: period, scheduler: SharingStrategy.scheduler)) - } -} - diff --git a/Pods/RxCocoa/RxCocoa/Traits/Signal/ControlEvent+Signal.swift b/Pods/RxCocoa/RxCocoa/Traits/Signal/ControlEvent+Signal.swift deleted file mode 100644 index bec4723..0000000 --- a/Pods/RxCocoa/RxCocoa/Traits/Signal/ControlEvent+Signal.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// ControlEvent+Signal.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 11/1/17. -// Copyright © 2017 Krunoslav Zaher. All rights reserved. -// - -import RxSwift - -extension ControlEvent { - /// Converts `ControlEvent` to `Signal` trait. - /// - /// `ControlEvent` already can't fail, so no special case needs to be handled. - public func asSignal() -> Signal { - return self.asSignal { _ -> Signal in - #if DEBUG - rxFatalError("Somehow signal received error from a source that shouldn't fail.") - #else - return Signal.empty() - #endif - } - } -} - diff --git a/Pods/RxCocoa/RxCocoa/Traits/Signal/ObservableConvertibleType+Signal.swift b/Pods/RxCocoa/RxCocoa/Traits/Signal/ObservableConvertibleType+Signal.swift deleted file mode 100644 index b962d4e..0000000 --- a/Pods/RxCocoa/RxCocoa/Traits/Signal/ObservableConvertibleType+Signal.swift +++ /dev/null @@ -1,57 +0,0 @@ -// -// ObservableConvertibleType+Signal.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 9/19/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import RxSwift - -extension ObservableConvertibleType { - /** - Converts observable sequence to `Signal` trait. - - - parameter onErrorJustReturn: Element to return in case of error and after that complete the sequence. - - returns: Signal trait. - */ - public func asSignal(onErrorJustReturn: Element) -> Signal { - let source = self - .asObservable() - .observe(on: SignalSharingStrategy.scheduler) - .catchAndReturn(onErrorJustReturn) - return Signal(source) - } - - /** - Converts observable sequence to `Signal` trait. - - - parameter onErrorSignalWith: Signal that continues to emit the sequence in case of error. - - returns: Signal trait. - */ - public func asSignal(onErrorSignalWith: Signal) -> Signal { - let source = self - .asObservable() - .observe(on: SignalSharingStrategy.scheduler) - .catch { _ in - onErrorSignalWith.asObservable() - } - return Signal(source) - } - - /** - Converts observable sequence to `Signal` trait. - - - parameter onErrorRecover: Calculates signal that continues to emit the sequence in case of error. - - returns: Signal trait. - */ - public func asSignal(onErrorRecover: @escaping (_ error: Swift.Error) -> Signal) -> Signal { - let source = self - .asObservable() - .observe(on: SignalSharingStrategy.scheduler) - .catch { error in - onErrorRecover(error).asObservable() - } - return Signal(source) - } -} diff --git a/Pods/RxCocoa/RxCocoa/Traits/Signal/PublishRelay+Signal.swift b/Pods/RxCocoa/RxCocoa/Traits/Signal/PublishRelay+Signal.swift deleted file mode 100644 index 79b975d..0000000 --- a/Pods/RxCocoa/RxCocoa/Traits/Signal/PublishRelay+Signal.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// PublishRelay+Signal.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 12/28/15. -// Copyright © 2017 Krunoslav Zaher. All rights reserved. -// - -import RxSwift -import RxRelay - -extension PublishRelay { - /// Converts `PublishRelay` to `Signal`. - /// - /// - returns: Observable sequence. - public func asSignal() -> Signal { - let source = self.asObservable() - .observe(on:SignalSharingStrategy.scheduler) - return SharedSequence(source) - } -} diff --git a/Pods/RxCocoa/RxCocoa/Traits/Signal/Signal+Subscription.swift b/Pods/RxCocoa/RxCocoa/Traits/Signal/Signal+Subscription.swift deleted file mode 100644 index 4a6add3..0000000 --- a/Pods/RxCocoa/RxCocoa/Traits/Signal/Signal+Subscription.swift +++ /dev/null @@ -1,178 +0,0 @@ -// -// Signal+Subscription.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 9/19/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import RxSwift -import RxRelay - -extension SharedSequenceConvertibleType where SharingStrategy == SignalSharingStrategy { - /** - Creates new subscription and sends elements to observer. - - In this form it's equivalent to `subscribe` method, but it communicates intent better. - - - parameter observers: Observers that receives events. - - returns: Disposable object that can be used to unsubscribe the observer from the subject. - */ - public func emit(to observers: Observer...) -> Disposable where Observer.Element == Element { - return self.asSharedSequence() - .asObservable() - .subscribe { event in - observers.forEach { $0.on(event) } - } - } - - /** - Creates new subscription and sends elements to observer. - - In this form it's equivalent to `subscribe` method, but it communicates intent better. - - - parameter observers: Observers that receives events. - - returns: Disposable object that can be used to unsubscribe the observer from the subject. - */ - public func emit(to observers: Observer...) -> Disposable where Observer.Element == Element? { - return self.asSharedSequence() - .asObservable() - .map { $0 as Element? } - .subscribe { event in - observers.forEach { $0.on(event) } - } - } - - /** - Creates new subscription and sends elements to `BehaviorRelay`. - - parameter relays: Target relays for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer from the relay. - */ - public func emit(to relays: BehaviorRelay...) -> Disposable { - return self.emit(onNext: { e in - relays.forEach { $0.accept(e) } - }) - } - - /** - Creates new subscription and sends elements to `BehaviorRelay`. - - parameter relays: Target relays for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer from the relay. - */ - public func emit(to relays: BehaviorRelay...) -> Disposable { - return self.emit(onNext: { e in - relays.forEach { $0.accept(e) } - }) - } - - /** - Creates new subscription and sends elements to `PublishRelay`. - - - parameter relays: Target relays for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer from the relay. - */ - public func emit(to relays: PublishRelay...) -> Disposable { - return self.emit(onNext: { e in - relays.forEach { $0.accept(e) } - }) - } - - /** - Creates new subscription and sends elements to `PublishRelay`. - - - parameter relays: Target relay for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer from the relay. - */ - public func emit(to relays: PublishRelay...) -> Disposable { - return self.emit(onNext: { e in - relays.forEach { $0.accept(e) } - }) - } - - /** - Creates new subscription and sends elements to `ReplayRelay`. - - - parameter relays: Target relays for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer from the relay. - */ - public func emit(to relays: ReplayRelay...) -> Disposable { - return self.emit(onNext: { e in - relays.forEach { $0.accept(e) } - }) - } - - /** - Creates new subscription and sends elements to `ReplayRelay`. - - - parameter relays: Target relay for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer from the relay. - */ - public func emit(to relays: ReplayRelay...) -> Disposable { - return self.emit(onNext: { e in - relays.forEach { $0.accept(e) } - }) - } - - /** - Subscribes an element handler, a completion handler and disposed handler to an observable sequence. - - Also, take in an object and provide an unretained, safe to use (i.e. not implicitly unwrapped), reference to it along with the events emitted by the sequence. - - Error callback is not exposed because `Signal` can't error out. - - - Note: If `object` can't be retained, none of the other closures will be invoked. - - - parameter object: The object to provide an unretained reference on. - - parameter onNext: Action to invoke for each element in the observable sequence. - - parameter onCompleted: Action to invoke upon graceful termination of the observable sequence. - gracefully completed, errored, or if the generation is canceled by disposing subscription) - - parameter onDisposed: Action to invoke upon any type of termination of sequence (if the sequence has - gracefully completed, errored, or if the generation is canceled by disposing subscription) - - returns: Subscription object used to unsubscribe from the observable sequence. - */ - public func emit( - with object: Object, - onNext: ((Object, Element) -> Void)? = nil, - onCompleted: ((Object) -> Void)? = nil, - onDisposed: ((Object) -> Void)? = nil - ) -> Disposable { - self.asObservable().subscribe( - with: object, - onNext: onNext, - onCompleted: onCompleted, - onDisposed: onDisposed - ) - } - - /** - Subscribes an element handler, a completion handler and disposed handler to an observable sequence. - - Error callback is not exposed because `Signal` can't error out. - - - parameter onNext: Action to invoke for each element in the observable sequence. - - parameter onCompleted: Action to invoke upon graceful termination of the observable sequence. - gracefully completed, errored, or if the generation is canceled by disposing subscription) - - parameter onDisposed: Action to invoke upon any type of termination of sequence (if the sequence has - gracefully completed, errored, or if the generation is canceled by disposing subscription) - - returns: Subscription object used to unsubscribe from the observable sequence. - */ - public func emit( - onNext: ((Element) -> Void)? = nil, - onCompleted: (() -> Void)? = nil, - onDisposed: (() -> Void)? = nil - ) -> Disposable { - self.asObservable().subscribe(onNext: onNext, onCompleted: onCompleted, onDisposed: onDisposed) - } - - /** - Subscribes to this `Signal` with a no-op. - This method can be only called from `MainThread`. - - - note: This is an alias of `emit(onNext: nil, onCompleted: nil, onDisposed: nil)` used to fix an ambiguity bug in Swift: https://bugs.swift.org/browse/SR-13657 - - - returns: Subscription object used to unsubscribe from the observable sequence. - */ - public func emit() -> Disposable { - emit(onNext: nil, onCompleted: nil, onDisposed: nil) - } -} diff --git a/Pods/RxCocoa/RxCocoa/Traits/Signal/Signal.swift b/Pods/RxCocoa/RxCocoa/Traits/Signal/Signal.swift deleted file mode 100644 index e066b7e..0000000 --- a/Pods/RxCocoa/RxCocoa/Traits/Signal/Signal.swift +++ /dev/null @@ -1,45 +0,0 @@ -// -// Signal.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 9/26/16. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -import RxSwift - -/** - Trait that represents observable sequence with following properties: - - - it never fails - - it delivers events on `MainScheduler.instance` - - `share(scope: .whileConnected)` sharing strategy - - Additional explanation: - - all observers share sequence computation resources - - there is no replaying of sequence elements on new observer subscription - - computation of elements is reference counted with respect to the number of observers - - if there are no subscribers, it will release sequence computation resources - - In case trait that models state propagation is required, please check `Driver`. - - `Signal` can be considered a builder pattern for observable sequences that model imperative events part of the application. - - To find out more about units and how to use them, please visit `Documentation/Traits.md`. - */ -public typealias Signal = SharedSequence - -public struct SignalSharingStrategy: SharingStrategyProtocol { - public static var scheduler: SchedulerType { SharingScheduler.make() } - - public static func share(_ source: Observable) -> Observable { - source.share(scope: .whileConnected) - } -} - -extension SharedSequenceConvertibleType where SharingStrategy == SignalSharingStrategy { - /// Adds `asPublisher` to `SharingSequence` with `PublishSharingStrategy`. - public func asSignal() -> Signal { - self.asSharedSequence() - } -} diff --git a/Pods/RxCocoa/RxCocoa/iOS/DataSources/RxCollectionViewReactiveArrayDataSource.swift b/Pods/RxCocoa/RxCocoa/iOS/DataSources/RxCollectionViewReactiveArrayDataSource.swift deleted file mode 100644 index 1acc998..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/DataSources/RxCollectionViewReactiveArrayDataSource.swift +++ /dev/null @@ -1,108 +0,0 @@ -// -// RxCollectionViewReactiveArrayDataSource.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 6/29/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import UIKit -import RxSwift - -// objc monkey business -class _RxCollectionViewReactiveArrayDataSource - : NSObject - , UICollectionViewDataSource { - - @objc(numberOfSectionsInCollectionView:) - func numberOfSections(in: UICollectionView) -> Int { - 1 - } - - func _collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - 0 - } - - func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - _collectionView(collectionView, numberOfItemsInSection: section) - } - - fileprivate func _collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { - rxAbstractMethod() - } - - func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { - _collectionView(collectionView, cellForItemAt: indexPath) - } -} - -class RxCollectionViewReactiveArrayDataSourceSequenceWrapper - : RxCollectionViewReactiveArrayDataSource - , RxCollectionViewDataSourceType { - typealias Element = Sequence - - override init(cellFactory: @escaping CellFactory) { - super.init(cellFactory: cellFactory) - } - - func collectionView(_ collectionView: UICollectionView, observedEvent: Event) { - Binder(self) { collectionViewDataSource, sectionModels in - let sections = Array(sectionModels) - collectionViewDataSource.collectionView(collectionView, observedElements: sections) - }.on(observedEvent) - } -} - - -// Please take a look at `DelegateProxyType.swift` -class RxCollectionViewReactiveArrayDataSource - : _RxCollectionViewReactiveArrayDataSource - , SectionedViewDataSourceType { - - typealias CellFactory = (UICollectionView, Int, Element) -> UICollectionViewCell - - var itemModels: [Element]? - - func modelAtIndex(_ index: Int) -> Element? { - itemModels?[index] - } - - func model(at indexPath: IndexPath) throws -> Any { - precondition(indexPath.section == 0) - guard let item = itemModels?[indexPath.item] else { - throw RxCocoaError.itemsNotYetBound(object: self) - } - return item - } - - var cellFactory: CellFactory - - init(cellFactory: @escaping CellFactory) { - self.cellFactory = cellFactory - } - - // data source - - override func _collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - itemModels?.count ?? 0 - } - - override func _collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { - cellFactory(collectionView, indexPath.item, itemModels![indexPath.item]) - } - - // reactive - - func collectionView(_ collectionView: UICollectionView, observedElements: [Element]) { - self.itemModels = observedElements - - collectionView.reloadData() - - // workaround for http://stackoverflow.com/questions/39867325/ios-10-bug-uicollectionview-received-layout-attributes-for-a-cell-with-an-index - collectionView.collectionViewLayout.invalidateLayout() - } -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/DataSources/RxPickerViewAdapter.swift b/Pods/RxCocoa/RxCocoa/iOS/DataSources/RxPickerViewAdapter.swift deleted file mode 100644 index 53b8475..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/DataSources/RxPickerViewAdapter.swift +++ /dev/null @@ -1,92 +0,0 @@ -// -// RxPickerViewAdapter.swift -// RxCocoa -// -// Created by Sergey Shulga on 12/07/2017. -// Copyright © 2017 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) - -import UIKit -import RxSwift - -class RxPickerViewArrayDataSource: NSObject, UIPickerViewDataSource, SectionedViewDataSourceType { - fileprivate var items: [T] = [] - - func model(at indexPath: IndexPath) throws -> Any { - guard items.indices ~= indexPath.row else { - throw RxCocoaError.itemsNotYetBound(object: self) - } - return items[indexPath.row] - } - - func numberOfComponents(in pickerView: UIPickerView) -> Int { - 1 - } - - func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { - items.count - } -} - -class RxPickerViewSequenceDataSource - : RxPickerViewArrayDataSource - , RxPickerViewDataSourceType { - typealias Element = Sequence - - func pickerView(_ pickerView: UIPickerView, observedEvent: Event) { - Binder(self) { dataSource, items in - dataSource.items = items - pickerView.reloadAllComponents() - } - .on(observedEvent.map(Array.init)) - } -} - -final class RxStringPickerViewAdapter - : RxPickerViewSequenceDataSource - , UIPickerViewDelegate { - - typealias TitleForRow = (Int, Sequence.Element) -> String? - private let titleForRow: TitleForRow - - init(titleForRow: @escaping TitleForRow) { - self.titleForRow = titleForRow - super.init() - } - - func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { - titleForRow(row, items[row]) - } -} - -final class RxAttributedStringPickerViewAdapter: RxPickerViewSequenceDataSource, UIPickerViewDelegate { - typealias AttributedTitleForRow = (Int, Sequence.Element) -> NSAttributedString? - private let attributedTitleForRow: AttributedTitleForRow - - init(attributedTitleForRow: @escaping AttributedTitleForRow) { - self.attributedTitleForRow = attributedTitleForRow - super.init() - } - - func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? { - attributedTitleForRow(row, items[row]) - } -} - -final class RxPickerViewAdapter: RxPickerViewSequenceDataSource, UIPickerViewDelegate { - typealias ViewForRow = (Int, Sequence.Element, UIView?) -> UIView - private let viewForRow: ViewForRow - - init(viewForRow: @escaping ViewForRow) { - self.viewForRow = viewForRow - super.init() - } - - func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView { - viewForRow(row, items[row], view) - } -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/DataSources/RxTableViewReactiveArrayDataSource.swift b/Pods/RxCocoa/RxCocoa/iOS/DataSources/RxTableViewReactiveArrayDataSource.swift deleted file mode 100644 index 6d612f3..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/DataSources/RxTableViewReactiveArrayDataSource.swift +++ /dev/null @@ -1,101 +0,0 @@ -// -// RxTableViewReactiveArrayDataSource.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 6/26/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import UIKit -import RxSwift - -// objc monkey business -class _RxTableViewReactiveArrayDataSource - : NSObject - , UITableViewDataSource { - - func numberOfSections(in tableView: UITableView) -> Int { - 1 - } - - func _tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - 0 - } - - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - _tableView(tableView, numberOfRowsInSection: section) - } - - fileprivate func _tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - rxAbstractMethod() - } - - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - _tableView(tableView, cellForRowAt: indexPath) - } -} - - -class RxTableViewReactiveArrayDataSourceSequenceWrapper - : RxTableViewReactiveArrayDataSource - , RxTableViewDataSourceType { - typealias Element = Sequence - - override init(cellFactory: @escaping CellFactory) { - super.init(cellFactory: cellFactory) - } - - func tableView(_ tableView: UITableView, observedEvent: Event) { - Binder(self) { tableViewDataSource, sectionModels in - let sections = Array(sectionModels) - tableViewDataSource.tableView(tableView, observedElements: sections) - }.on(observedEvent) - } -} - -// Please take a look at `DelegateProxyType.swift` -class RxTableViewReactiveArrayDataSource - : _RxTableViewReactiveArrayDataSource - , SectionedViewDataSourceType { - typealias CellFactory = (UITableView, Int, Element) -> UITableViewCell - - var itemModels: [Element]? - - func modelAtIndex(_ index: Int) -> Element? { - itemModels?[index] - } - - func model(at indexPath: IndexPath) throws -> Any { - precondition(indexPath.section == 0) - guard let item = itemModels?[indexPath.item] else { - throw RxCocoaError.itemsNotYetBound(object: self) - } - return item - } - - let cellFactory: CellFactory - - init(cellFactory: @escaping CellFactory) { - self.cellFactory = cellFactory - } - - override func _tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - itemModels?.count ?? 0 - } - - override func _tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - cellFactory(tableView, indexPath.item, itemModels![indexPath.row]) - } - - // reactive - - func tableView(_ tableView: UITableView, observedElements: [Element]) { - self.itemModels = observedElements - - tableView.reloadData() - } -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/Events/ItemEvents.swift b/Pods/RxCocoa/RxCocoa/iOS/Events/ItemEvents.swift deleted file mode 100644 index aadf749..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/Events/ItemEvents.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// ItemEvents.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 6/20/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) -import UIKit - -public typealias ItemMovedEvent = (sourceIndex: IndexPath, destinationIndex: IndexPath) -public typealias WillDisplayCellEvent = (cell: UITableViewCell, indexPath: IndexPath) -public typealias DidEndDisplayingCellEvent = (cell: UITableViewCell, indexPath: IndexPath) -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/NSTextStorage+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/NSTextStorage+Rx.swift deleted file mode 100644 index ba30547..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/NSTextStorage+Rx.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// NSTextStorage+Rx.swift -// RxCocoa -// -// Created by Segii Shulga on 12/30/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - import RxSwift - import UIKit - - extension Reactive where Base: NSTextStorage { - - /// Reactive wrapper for `delegate`. - /// - /// For more information take a look at `DelegateProxyType` protocol documentation. - public var delegate: DelegateProxy { - return RxTextStorageDelegateProxy.proxy(for: base) - } - - /// Reactive wrapper for `delegate` message. - public var didProcessEditingRangeChangeInLength: Observable<(editedMask: NSTextStorage.EditActions, editedRange: NSRange, delta: Int)> { - return delegate - .methodInvoked(#selector(NSTextStorageDelegate.textStorage(_:didProcessEditing:range:changeInLength:))) - .map { a in - let editedMask = NSTextStorage.EditActions(rawValue: try castOrThrow(UInt.self, a[1]) ) - let editedRange = try castOrThrow(NSValue.self, a[2]).rangeValue - let delta = try castOrThrow(Int.self, a[3]) - - return (editedMask, editedRange, delta) - } - } - } -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/Protocols/RxCollectionViewDataSourceType.swift b/Pods/RxCocoa/RxCocoa/iOS/Protocols/RxCollectionViewDataSourceType.swift deleted file mode 100644 index b098a9e..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/Protocols/RxCollectionViewDataSourceType.swift +++ /dev/null @@ -1,27 +0,0 @@ -// -// RxCollectionViewDataSourceType.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 6/29/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import UIKit -import RxSwift - -/// Marks data source as `UICollectionView` reactive data source enabling it to be used with one of the `bindTo` methods. -public protocol RxCollectionViewDataSourceType /*: UICollectionViewDataSource*/ { - - /// Type of elements that can be bound to collection view. - associatedtype Element - - /// New observable sequence event observed. - /// - /// - parameter collectionView: Bound collection view. - /// - parameter observedEvent: Event - func collectionView(_ collectionView: UICollectionView, observedEvent: Event) -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/Protocols/RxPickerViewDataSourceType.swift b/Pods/RxCocoa/RxCocoa/iOS/Protocols/RxPickerViewDataSourceType.swift deleted file mode 100644 index 1f390bf..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/Protocols/RxPickerViewDataSourceType.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// RxPickerViewDataSourceType.swift -// RxCocoa -// -// Created by Sergey Shulga on 05/07/2017. -// Copyright © 2017 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) - -import UIKit -import RxSwift - -/// Marks data source as `UIPickerView` reactive data source enabling it to be used with one of the `bindTo` methods. -public protocol RxPickerViewDataSourceType { - /// Type of elements that can be bound to picker view. - associatedtype Element - - /// New observable sequence event observed. - /// - /// - parameter pickerView: Bound picker view. - /// - parameter observedEvent: Event - func pickerView(_ pickerView: UIPickerView, observedEvent: Event) -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/Protocols/RxTableViewDataSourceType.swift b/Pods/RxCocoa/RxCocoa/iOS/Protocols/RxTableViewDataSourceType.swift deleted file mode 100644 index d59af9e..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/Protocols/RxTableViewDataSourceType.swift +++ /dev/null @@ -1,27 +0,0 @@ -// -// RxTableViewDataSourceType.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 6/26/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import UIKit -import RxSwift - -/// Marks data source as `UITableView` reactive data source enabling it to be used with one of the `bindTo` methods. -public protocol RxTableViewDataSourceType /*: UITableViewDataSource*/ { - - /// Type of elements that can be bound to table view. - associatedtype Element - - /// New observable sequence event observed. - /// - /// - parameter tableView: Bound table view. - /// - parameter observedEvent: Event - func tableView(_ tableView: UITableView, observedEvent: Event) -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxCollectionViewDataSourcePrefetchingProxy.swift b/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxCollectionViewDataSourcePrefetchingProxy.swift deleted file mode 100644 index 5ddfda7..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxCollectionViewDataSourcePrefetchingProxy.swift +++ /dev/null @@ -1,92 +0,0 @@ -// -// RxCollectionViewDataSourcePrefetchingProxy.swift -// RxCocoa -// -// Created by Rowan Livingstone on 2/15/18. -// Copyright © 2018 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import UIKit -import RxSwift - -@available(iOS 10.0, tvOS 10.0, *) -extension UICollectionView: HasPrefetchDataSource { - public typealias PrefetchDataSource = UICollectionViewDataSourcePrefetching -} - -@available(iOS 10.0, tvOS 10.0, *) -private let collectionViewPrefetchDataSourceNotSet = CollectionViewPrefetchDataSourceNotSet() - -@available(iOS 10.0, tvOS 10.0, *) -private final class CollectionViewPrefetchDataSourceNotSet - : NSObject - , UICollectionViewDataSourcePrefetching { - - func collectionView(_ collectionView: UICollectionView, prefetchItemsAt indexPaths: [IndexPath]) {} - -} - -@available(iOS 10.0, tvOS 10.0, *) -open class RxCollectionViewDataSourcePrefetchingProxy - : DelegateProxy - , DelegateProxyType { - - /// Typed parent object. - public weak private(set) var collectionView: UICollectionView? - - /// - parameter collectionView: Parent object for delegate proxy. - public init(collectionView: ParentObject) { - self.collectionView = collectionView - super.init(parentObject: collectionView, delegateProxy: RxCollectionViewDataSourcePrefetchingProxy.self) - } - - // Register known implementations - public static func registerKnownImplementations() { - self.register { RxCollectionViewDataSourcePrefetchingProxy(collectionView: $0) } - } - - private var _prefetchItemsPublishSubject: PublishSubject<[IndexPath]>? - - /// Optimized version used for observing prefetch items callbacks. - internal var prefetchItemsPublishSubject: PublishSubject<[IndexPath]> { - if let subject = _prefetchItemsPublishSubject { - return subject - } - - let subject = PublishSubject<[IndexPath]>() - _prefetchItemsPublishSubject = subject - - return subject - } - - private weak var _requiredMethodsPrefetchDataSource: UICollectionViewDataSourcePrefetching? = collectionViewPrefetchDataSourceNotSet - - /// For more information take a look at `DelegateProxyType`. - open override func setForwardToDelegate(_ forwardToDelegate: UICollectionViewDataSourcePrefetching?, retainDelegate: Bool) { - _requiredMethodsPrefetchDataSource = forwardToDelegate ?? collectionViewPrefetchDataSourceNotSet - super.setForwardToDelegate(forwardToDelegate, retainDelegate: retainDelegate) - } - - deinit { - if let subject = _prefetchItemsPublishSubject { - subject.on(.completed) - } - } - -} - -@available(iOS 10.0, tvOS 10.0, *) -extension RxCollectionViewDataSourcePrefetchingProxy: UICollectionViewDataSourcePrefetching { - /// Required delegate method implementation. - public func collectionView(_ collectionView: UICollectionView, prefetchItemsAt indexPaths: [IndexPath]) { - if let subject = _prefetchItemsPublishSubject { - subject.on(.next(indexPaths)) - } - - (_requiredMethodsPrefetchDataSource ?? collectionViewPrefetchDataSourceNotSet).collectionView(collectionView, prefetchItemsAt: indexPaths) - } -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxCollectionViewDataSourceProxy.swift b/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxCollectionViewDataSourceProxy.swift deleted file mode 100644 index 534b6fa..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxCollectionViewDataSourceProxy.swift +++ /dev/null @@ -1,75 +0,0 @@ -// -// RxCollectionViewDataSourceProxy.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 6/29/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import UIKit -import RxSwift - -extension UICollectionView: HasDataSource { - public typealias DataSource = UICollectionViewDataSource -} - -private let collectionViewDataSourceNotSet = CollectionViewDataSourceNotSet() - -private final class CollectionViewDataSourceNotSet - : NSObject - , UICollectionViewDataSource { - - func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - 0 - } - - // The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath: - func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { - rxAbstractMethod(message: dataSourceNotSet) - } - -} - -/// For more information take a look at `DelegateProxyType`. -open class RxCollectionViewDataSourceProxy - : DelegateProxy - , DelegateProxyType { - - /// Typed parent object. - public weak private(set) var collectionView: UICollectionView? - - /// - parameter collectionView: Parent object for delegate proxy. - public init(collectionView: ParentObject) { - self.collectionView = collectionView - super.init(parentObject: collectionView, delegateProxy: RxCollectionViewDataSourceProxy.self) - } - - // Register known implementations - public static func registerKnownImplementations() { - self.register { RxCollectionViewDataSourceProxy(collectionView: $0) } - } - - private weak var _requiredMethodsDataSource: UICollectionViewDataSource? = collectionViewDataSourceNotSet - - /// For more information take a look at `DelegateProxyType`. - open override func setForwardToDelegate(_ forwardToDelegate: UICollectionViewDataSource?, retainDelegate: Bool) { - _requiredMethodsDataSource = forwardToDelegate ?? collectionViewDataSourceNotSet - super.setForwardToDelegate(forwardToDelegate, retainDelegate: retainDelegate) - } -} - -extension RxCollectionViewDataSourceProxy: UICollectionViewDataSource { - /// Required delegate method implementation. - public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - (_requiredMethodsDataSource ?? collectionViewDataSourceNotSet).collectionView(collectionView, numberOfItemsInSection: section) - } - - /// Required delegate method implementation. - public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { - (_requiredMethodsDataSource ?? collectionViewDataSourceNotSet).collectionView(collectionView, cellForItemAt: indexPath) - } -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxCollectionViewDelegateProxy.swift b/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxCollectionViewDelegateProxy.swift deleted file mode 100644 index da04caa..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxCollectionViewDelegateProxy.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// RxCollectionViewDelegateProxy.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 6/29/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import UIKit -import RxSwift - -/// For more information take a look at `DelegateProxyType`. -open class RxCollectionViewDelegateProxy - : RxScrollViewDelegateProxy { - - /// Typed parent object. - public weak private(set) var collectionView: UICollectionView? - - /// Initializes `RxCollectionViewDelegateProxy` - /// - /// - parameter collectionView: Parent object for delegate proxy. - public init(collectionView: UICollectionView) { - self.collectionView = collectionView - super.init(scrollView: collectionView) - } -} - -extension RxCollectionViewDelegateProxy: UICollectionViewDelegateFlowLayout {} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxNavigationControllerDelegateProxy.swift b/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxNavigationControllerDelegateProxy.swift deleted file mode 100644 index b4a827e..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxNavigationControllerDelegateProxy.swift +++ /dev/null @@ -1,39 +0,0 @@ -// -// RxNavigationControllerDelegateProxy.swift -// RxCocoa -// -// Created by Diogo on 13/04/17. -// Copyright © 2017 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - - import UIKit - import RxSwift - - extension UINavigationController: HasDelegate { - public typealias Delegate = UINavigationControllerDelegate - } - - /// For more information take a look at `DelegateProxyType`. - open class RxNavigationControllerDelegateProxy - : DelegateProxy - , DelegateProxyType { - - /// Typed parent object. - public weak private(set) var navigationController: UINavigationController? - - /// - parameter navigationController: Parent object for delegate proxy. - public init(navigationController: ParentObject) { - self.navigationController = navigationController - super.init(parentObject: navigationController, delegateProxy: RxNavigationControllerDelegateProxy.self) - } - - // Register known implementations - public static func registerKnownImplementations() { - self.register { RxNavigationControllerDelegateProxy(navigationController: $0) } - } - } - - extension RxNavigationControllerDelegateProxy: UINavigationControllerDelegate {} -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxPickerViewDataSourceProxy.swift b/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxPickerViewDataSourceProxy.swift deleted file mode 100644 index ecd0288..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxPickerViewDataSourceProxy.swift +++ /dev/null @@ -1,72 +0,0 @@ -// -// RxPickerViewDataSourceProxy.swift -// RxCocoa -// -// Created by Sergey Shulga on 05/07/2017. -// Copyright © 2017 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) - -import UIKit -import RxSwift - -extension UIPickerView: HasDataSource { - public typealias DataSource = UIPickerViewDataSource -} - -private let pickerViewDataSourceNotSet = PickerViewDataSourceNotSet() - -final private class PickerViewDataSourceNotSet: NSObject, UIPickerViewDataSource { - func numberOfComponents(in pickerView: UIPickerView) -> Int { - 0 - } - - func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { - 0 - } -} - -/// For more information take a look at `DelegateProxyType`. -public class RxPickerViewDataSourceProxy - : DelegateProxy - , DelegateProxyType { - - /// Typed parent object. - public weak private(set) var pickerView: UIPickerView? - - /// - parameter pickerView: Parent object for delegate proxy. - public init(pickerView: ParentObject) { - self.pickerView = pickerView - super.init(parentObject: pickerView, delegateProxy: RxPickerViewDataSourceProxy.self) - } - - // Register known implementations - public static func registerKnownImplementations() { - self.register { RxPickerViewDataSourceProxy(pickerView: $0) } - } - - private weak var _requiredMethodsDataSource: UIPickerViewDataSource? = pickerViewDataSourceNotSet - - /// For more information take a look at `DelegateProxyType`. - public override func setForwardToDelegate(_ forwardToDelegate: UIPickerViewDataSource?, retainDelegate: Bool) { - _requiredMethodsDataSource = forwardToDelegate ?? pickerViewDataSourceNotSet - super.setForwardToDelegate(forwardToDelegate, retainDelegate: retainDelegate) - } -} - -// MARK: UIPickerViewDataSource - -extension RxPickerViewDataSourceProxy: UIPickerViewDataSource { - /// Required delegate method implementation. - public func numberOfComponents(in pickerView: UIPickerView) -> Int { - (_requiredMethodsDataSource ?? pickerViewDataSourceNotSet).numberOfComponents(in: pickerView) - } - - /// Required delegate method implementation. - public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { - (_requiredMethodsDataSource ?? pickerViewDataSourceNotSet).pickerView(pickerView, numberOfRowsInComponent: component) - } -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxPickerViewDelegateProxy.swift b/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxPickerViewDelegateProxy.swift deleted file mode 100644 index 9e64f01..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxPickerViewDelegateProxy.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// RxPickerViewDelegateProxy.swift -// RxCocoa -// -// Created by Segii Shulga on 5/12/16. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) - - import RxSwift - import UIKit - - extension UIPickerView: HasDelegate { - public typealias Delegate = UIPickerViewDelegate - } - - open class RxPickerViewDelegateProxy - : DelegateProxy - , DelegateProxyType { - - /// Typed parent object. - public weak private(set) var pickerView: UIPickerView? - - /// - parameter pickerView: Parent object for delegate proxy. - public init(pickerView: ParentObject) { - self.pickerView = pickerView - super.init(parentObject: pickerView, delegateProxy: RxPickerViewDelegateProxy.self) - } - - // Register known implementations - public static func registerKnownImplementations() { - self.register { RxPickerViewDelegateProxy(pickerView: $0) } - } - } - - extension RxPickerViewDelegateProxy: UIPickerViewDelegate {} -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxScrollViewDelegateProxy.swift b/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxScrollViewDelegateProxy.swift deleted file mode 100644 index 02e7592..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxScrollViewDelegateProxy.swift +++ /dev/null @@ -1,91 +0,0 @@ -// -// RxScrollViewDelegateProxy.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 6/19/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import RxSwift -import UIKit - -extension UIScrollView: HasDelegate { - public typealias Delegate = UIScrollViewDelegate -} - -/// For more information take a look at `DelegateProxyType`. -open class RxScrollViewDelegateProxy - : DelegateProxy - , DelegateProxyType { - - /// Typed parent object. - public weak private(set) var scrollView: UIScrollView? - - /// - parameter scrollView: Parent object for delegate proxy. - public init(scrollView: ParentObject) { - self.scrollView = scrollView - super.init(parentObject: scrollView, delegateProxy: RxScrollViewDelegateProxy.self) - } - - // Register known implementations - public static func registerKnownImplementations() { - self.register { RxScrollViewDelegateProxy(scrollView: $0) } - self.register { RxTableViewDelegateProxy(tableView: $0) } - self.register { RxCollectionViewDelegateProxy(collectionView: $0) } - self.register { RxTextViewDelegateProxy(textView: $0) } - } - - private var _contentOffsetBehaviorSubject: BehaviorSubject? - private var _contentOffsetPublishSubject: PublishSubject<()>? - - /// Optimized version used for observing content offset changes. - internal var contentOffsetBehaviorSubject: BehaviorSubject { - if let subject = _contentOffsetBehaviorSubject { - return subject - } - - let subject = BehaviorSubject(value: self.scrollView?.contentOffset ?? CGPoint.zero) - _contentOffsetBehaviorSubject = subject - - return subject - } - - /// Optimized version used for observing content offset changes. - internal var contentOffsetPublishSubject: PublishSubject<()> { - if let subject = _contentOffsetPublishSubject { - return subject - } - - let subject = PublishSubject<()>() - _contentOffsetPublishSubject = subject - - return subject - } - - deinit { - if let subject = _contentOffsetBehaviorSubject { - subject.on(.completed) - } - - if let subject = _contentOffsetPublishSubject { - subject.on(.completed) - } - } -} - -extension RxScrollViewDelegateProxy: UIScrollViewDelegate { - /// For more information take a look at `DelegateProxyType`. - public func scrollViewDidScroll(_ scrollView: UIScrollView) { - if let subject = _contentOffsetBehaviorSubject { - subject.on(.next(scrollView.contentOffset)) - } - if let subject = _contentOffsetPublishSubject { - subject.on(.next(())) - } - self._forwardToDelegate?.scrollViewDidScroll?(scrollView) - } -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxSearchBarDelegateProxy.swift b/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxSearchBarDelegateProxy.swift deleted file mode 100644 index 94bd30b..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxSearchBarDelegateProxy.swift +++ /dev/null @@ -1,40 +0,0 @@ -// -// RxSearchBarDelegateProxy.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 7/4/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import UIKit -import RxSwift - -extension UISearchBar: HasDelegate { - public typealias Delegate = UISearchBarDelegate -} - -/// For more information take a look at `DelegateProxyType`. -open class RxSearchBarDelegateProxy - : DelegateProxy - , DelegateProxyType { - - /// Typed parent object. - public weak private(set) var searchBar: UISearchBar? - - /// - parameter searchBar: Parent object for delegate proxy. - public init(searchBar: ParentObject) { - self.searchBar = searchBar - super.init(parentObject: searchBar, delegateProxy: RxSearchBarDelegateProxy.self) - } - - // Register known implementations - public static func registerKnownImplementations() { - self.register { RxSearchBarDelegateProxy(searchBar: $0) } - } -} - -extension RxSearchBarDelegateProxy: UISearchBarDelegate {} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxSearchControllerDelegateProxy.swift b/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxSearchControllerDelegateProxy.swift deleted file mode 100644 index 64e36a2..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxSearchControllerDelegateProxy.swift +++ /dev/null @@ -1,40 +0,0 @@ -// -// RxSearchControllerDelegateProxy.swift -// RxCocoa -// -// Created by Segii Shulga on 3/17/16. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) - -import RxSwift -import UIKit - -extension UISearchController: HasDelegate { - public typealias Delegate = UISearchControllerDelegate -} - -/// For more information take a look at `DelegateProxyType`. -open class RxSearchControllerDelegateProxy - : DelegateProxy - , DelegateProxyType { - - /// Typed parent object. - public weak private(set) var searchController: UISearchController? - - /// - parameter searchController: Parent object for delegate proxy. - public init(searchController: UISearchController) { - self.searchController = searchController - super.init(parentObject: searchController, delegateProxy: RxSearchControllerDelegateProxy.self) - } - - // Register known implementations - public static func registerKnownImplementations() { - self.register { RxSearchControllerDelegateProxy(searchController: $0) } - } -} - -extension RxSearchControllerDelegateProxy: UISearchControllerDelegate {} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTabBarControllerDelegateProxy.swift b/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTabBarControllerDelegateProxy.swift deleted file mode 100644 index 62d42ac..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTabBarControllerDelegateProxy.swift +++ /dev/null @@ -1,40 +0,0 @@ -// -// RxTabBarControllerDelegateProxy.swift -// RxCocoa -// -// Created by Yusuke Kita on 2016/12/07. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import UIKit -import RxSwift - -extension UITabBarController: HasDelegate { - public typealias Delegate = UITabBarControllerDelegate -} - -/// For more information take a look at `DelegateProxyType`. -open class RxTabBarControllerDelegateProxy - : DelegateProxy - , DelegateProxyType { - - /// Typed parent object. - public weak private(set) var tabBar: UITabBarController? - - /// - parameter tabBar: Parent object for delegate proxy. - public init(tabBar: ParentObject) { - self.tabBar = tabBar - super.init(parentObject: tabBar, delegateProxy: RxTabBarControllerDelegateProxy.self) - } - - // Register known implementations - public static func registerKnownImplementations() { - self.register { RxTabBarControllerDelegateProxy(tabBar: $0) } - } -} - -extension RxTabBarControllerDelegateProxy: UITabBarControllerDelegate {} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTabBarDelegateProxy.swift b/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTabBarDelegateProxy.swift deleted file mode 100644 index 49c5cf7..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTabBarDelegateProxy.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// RxTabBarDelegateProxy.swift -// RxCocoa -// -// Created by Jesse Farless on 5/14/16. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import UIKit -import RxSwift - -extension UITabBar: HasDelegate { - public typealias Delegate = UITabBarDelegate -} - -/// For more information take a look at `DelegateProxyType`. -open class RxTabBarDelegateProxy - : DelegateProxy - , DelegateProxyType { - - /// Typed parent object. - public weak private(set) var tabBar: UITabBar? - - /// - parameter tabBar: Parent object for delegate proxy. - public init(tabBar: ParentObject) { - self.tabBar = tabBar - super.init(parentObject: tabBar, delegateProxy: RxTabBarDelegateProxy.self) - } - - // Register known implementations - public static func registerKnownImplementations() { - self.register { RxTabBarDelegateProxy(tabBar: $0) } - } - - /// For more information take a look at `DelegateProxyType`. - open class func currentDelegate(for object: ParentObject) -> UITabBarDelegate? { - object.delegate - } - - /// For more information take a look at `DelegateProxyType`. - open class func setCurrentDelegate(_ delegate: UITabBarDelegate?, to object: ParentObject) { - object.delegate = delegate - } -} - -extension RxTabBarDelegateProxy: UITabBarDelegate {} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTableViewDataSourcePrefetchingProxy.swift b/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTableViewDataSourcePrefetchingProxy.swift deleted file mode 100644 index d0831f2..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTableViewDataSourcePrefetchingProxy.swift +++ /dev/null @@ -1,93 +0,0 @@ -// -// RxTableViewDataSourcePrefetchingProxy.swift -// RxCocoa -// -// Created by Rowan Livingstone on 2/15/18. -// Copyright © 2018 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import UIKit -import RxSwift - -@available(iOS 10.0, tvOS 10.0, *) -extension UITableView: HasPrefetchDataSource { - public typealias PrefetchDataSource = UITableViewDataSourcePrefetching -} - -@available(iOS 10.0, tvOS 10.0, *) -private let tableViewPrefetchDataSourceNotSet = TableViewPrefetchDataSourceNotSet() - -@available(iOS 10.0, tvOS 10.0, *) -private final class TableViewPrefetchDataSourceNotSet - : NSObject - , UITableViewDataSourcePrefetching { - - func tableView(_ tableView: UITableView, prefetchRowsAt indexPaths: [IndexPath]) {} - -} - -@available(iOS 10.0, tvOS 10.0, *) -open class RxTableViewDataSourcePrefetchingProxy - : DelegateProxy - , DelegateProxyType { - - /// Typed parent object. - public weak private(set) var tableView: UITableView? - - /// - parameter tableView: Parent object for delegate proxy. - public init(tableView: ParentObject) { - self.tableView = tableView - super.init(parentObject: tableView, delegateProxy: RxTableViewDataSourcePrefetchingProxy.self) - } - - // Register known implementations - public static func registerKnownImplementations() { - self.register { RxTableViewDataSourcePrefetchingProxy(tableView: $0) } - } - - private var _prefetchRowsPublishSubject: PublishSubject<[IndexPath]>? - - /// Optimized version used for observing prefetch rows callbacks. - internal var prefetchRowsPublishSubject: PublishSubject<[IndexPath]> { - if let subject = _prefetchRowsPublishSubject { - return subject - } - - let subject = PublishSubject<[IndexPath]>() - _prefetchRowsPublishSubject = subject - - return subject - } - - private weak var _requiredMethodsPrefetchDataSource: UITableViewDataSourcePrefetching? = tableViewPrefetchDataSourceNotSet - - /// For more information take a look at `DelegateProxyType`. - open override func setForwardToDelegate(_ forwardToDelegate: UITableViewDataSourcePrefetching?, retainDelegate: Bool) { - _requiredMethodsPrefetchDataSource = forwardToDelegate ?? tableViewPrefetchDataSourceNotSet - super.setForwardToDelegate(forwardToDelegate, retainDelegate: retainDelegate) - } - - deinit { - if let subject = _prefetchRowsPublishSubject { - subject.on(.completed) - } - } - -} - -@available(iOS 10.0, tvOS 10.0, *) -extension RxTableViewDataSourcePrefetchingProxy: UITableViewDataSourcePrefetching { - /// Required delegate method implementation. - public func tableView(_ tableView: UITableView, prefetchRowsAt indexPaths: [IndexPath]) { - if let subject = _prefetchRowsPublishSubject { - subject.on(.next(indexPaths)) - } - - (_requiredMethodsPrefetchDataSource ?? tableViewPrefetchDataSourceNotSet).tableView(tableView, prefetchRowsAt: indexPaths) - } -} - -#endif - diff --git a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTableViewDataSourceProxy.swift b/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTableViewDataSourceProxy.swift deleted file mode 100644 index 4c5e863..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTableViewDataSourceProxy.swift +++ /dev/null @@ -1,73 +0,0 @@ -// -// RxTableViewDataSourceProxy.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 6/15/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import UIKit -import RxSwift - -extension UITableView: HasDataSource { - public typealias DataSource = UITableViewDataSource -} - -private let tableViewDataSourceNotSet = TableViewDataSourceNotSet() - -private final class TableViewDataSourceNotSet - : NSObject - , UITableViewDataSource { - - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - 0 - } - - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - rxAbstractMethod(message: dataSourceNotSet) - } -} - -/// For more information take a look at `DelegateProxyType`. -open class RxTableViewDataSourceProxy - : DelegateProxy - , DelegateProxyType { - - /// Typed parent object. - public weak private(set) var tableView: UITableView? - - /// - parameter tableView: Parent object for delegate proxy. - public init(tableView: UITableView) { - self.tableView = tableView - super.init(parentObject: tableView, delegateProxy: RxTableViewDataSourceProxy.self) - } - - // Register known implementations - public static func registerKnownImplementations() { - self.register { RxTableViewDataSourceProxy(tableView: $0) } - } - - private weak var _requiredMethodsDataSource: UITableViewDataSource? = tableViewDataSourceNotSet - - /// For more information take a look at `DelegateProxyType`. - open override func setForwardToDelegate(_ forwardToDelegate: UITableViewDataSource?, retainDelegate: Bool) { - _requiredMethodsDataSource = forwardToDelegate ?? tableViewDataSourceNotSet - super.setForwardToDelegate(forwardToDelegate, retainDelegate: retainDelegate) - } -} - -extension RxTableViewDataSourceProxy: UITableViewDataSource { - /// Required delegate method implementation. - public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - (_requiredMethodsDataSource ?? tableViewDataSourceNotSet).tableView(tableView, numberOfRowsInSection: section) - } - - /// Required delegate method implementation. - public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - (_requiredMethodsDataSource ?? tableViewDataSourceNotSet).tableView(tableView, cellForRowAt: indexPath) - } -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTableViewDelegateProxy.swift b/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTableViewDelegateProxy.swift deleted file mode 100644 index 901fe66..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTableViewDelegateProxy.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// RxTableViewDelegateProxy.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 6/15/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import UIKit -import RxSwift - -/// For more information take a look at `DelegateProxyType`. -open class RxTableViewDelegateProxy - : RxScrollViewDelegateProxy { - - /// Typed parent object. - public weak private(set) var tableView: UITableView? - - /// - parameter tableView: Parent object for delegate proxy. - public init(tableView: UITableView) { - self.tableView = tableView - super.init(scrollView: tableView) - } - -} - -extension RxTableViewDelegateProxy: UITableViewDelegate {} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTextStorageDelegateProxy.swift b/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTextStorageDelegateProxy.swift deleted file mode 100644 index e8ff33f..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTextStorageDelegateProxy.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// RxTextStorageDelegateProxy.swift -// RxCocoa -// -// Created by Segii Shulga on 12/30/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - - import RxSwift - import UIKit - - extension NSTextStorage: HasDelegate { - public typealias Delegate = NSTextStorageDelegate - } - - open class RxTextStorageDelegateProxy - : DelegateProxy - , DelegateProxyType { - - /// Typed parent object. - public weak private(set) var textStorage: NSTextStorage? - - /// - parameter textStorage: Parent object for delegate proxy. - public init(textStorage: NSTextStorage) { - self.textStorage = textStorage - super.init(parentObject: textStorage, delegateProxy: RxTextStorageDelegateProxy.self) - } - - // Register known implementations - public static func registerKnownImplementations() { - self.register { RxTextStorageDelegateProxy(textStorage: $0) } - } - } - - extension RxTextStorageDelegateProxy: NSTextStorageDelegate {} -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTextViewDelegateProxy.swift b/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTextViewDelegateProxy.swift deleted file mode 100644 index 9d93424..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTextViewDelegateProxy.swift +++ /dev/null @@ -1,42 +0,0 @@ -// -// RxTextViewDelegateProxy.swift -// RxCocoa -// -// Created by Yuta ToKoRo on 7/19/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import UIKit -import RxSwift - -/// For more information take a look at `DelegateProxyType`. -open class RxTextViewDelegateProxy - : RxScrollViewDelegateProxy { - - /// Typed parent object. - public weak private(set) var textView: UITextView? - - /// - parameter textview: Parent object for delegate proxy. - public init(textView: UITextView) { - self.textView = textView - super.init(scrollView: textView) - } -} - -extension RxTextViewDelegateProxy: UITextViewDelegate { - /// For more information take a look at `DelegateProxyType`. - @objc open func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { - /** - We've had some issues with observing text changes. This is here just in case we need the same hack in future and that - we wouldn't need to change the public interface. - */ - let forwardToDelegate = self.forwardToDelegate() as? UITextViewDelegate - return forwardToDelegate?.textView?(textView, - shouldChangeTextIn: range, - replacementText: text) ?? true - } -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxWKNavigationDelegateProxy.swift b/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxWKNavigationDelegateProxy.swift deleted file mode 100644 index 0fa16b4..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxWKNavigationDelegateProxy.swift +++ /dev/null @@ -1,45 +0,0 @@ -// -// RxWKNavigationDelegateProxy.swift -// RxCocoa -// -// Created by Giuseppe Lanza on 14/02/2020. -// Copyright © 2020 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(macOS) - -import RxSwift -import WebKit - -@available(iOS 8.0, OSX 10.10, OSXApplicationExtension 10.10, *) -open class RxWKNavigationDelegateProxy - : DelegateProxy - , DelegateProxyType { - - /// Typed parent object. - public weak private(set) var webView: WKWebView? - - /// - parameter webView: Parent object for delegate proxy. - public init(webView: ParentObject) { - self.webView = webView - super.init(parentObject: webView, delegateProxy: RxWKNavigationDelegateProxy.self) - } - - // Register known implementations - public static func registerKnownImplementations() { - self.register { RxWKNavigationDelegateProxy(webView: $0) } - } - - public static func currentDelegate(for object: WKWebView) -> WKNavigationDelegate? { - object.navigationDelegate - } - - public static func setCurrentDelegate(_ delegate: WKNavigationDelegate?, to object: WKWebView) { - object.navigationDelegate = delegate - } -} - -@available(iOS 8.0, OSX 10.10, OSXApplicationExtension 10.10, *) -extension RxWKNavigationDelegateProxy: WKNavigationDelegate {} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/UIActivityIndicatorView+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/UIActivityIndicatorView+Rx.swift deleted file mode 100644 index ca2d4f1..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/UIActivityIndicatorView+Rx.swift +++ /dev/null @@ -1,27 +0,0 @@ -// -// UIActivityIndicatorView+Rx.swift -// RxCocoa -// -// Created by Ivan Persidskiy on 02/12/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import UIKit -import RxSwift - -extension Reactive where Base: UIActivityIndicatorView { - /// Bindable sink for `startAnimating()`, `stopAnimating()` methods. - public var isAnimating: Binder { - Binder(self.base) { activityIndicator, active in - if active { - activityIndicator.startAnimating() - } else { - activityIndicator.stopAnimating() - } - } - } -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/UIApplication+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/UIApplication+Rx.swift deleted file mode 100644 index d776105..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/UIApplication+Rx.swift +++ /dev/null @@ -1,106 +0,0 @@ -// -// UIApplication+Rx.swift -// RxCocoa -// -// Created by Mads Bøgeskov on 18/01/16. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) - -import UIKit -import RxSwift - -extension Reactive where Base: UIApplication { - /// Bindable sink for `isNetworkActivityIndicatorVisible`. - public var isNetworkActivityIndicatorVisible: Binder { - return Binder(self.base) { application, active in - application.isNetworkActivityIndicatorVisible = active - } - } - - /// Reactive wrapper for `UIApplication.didEnterBackgroundNotification` - public static var didEnterBackground: ControlEvent { - let source = NotificationCenter.default.rx.notification(UIApplication.didEnterBackgroundNotification).map { _ in } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `UIApplication.willEnterForegroundNotification` - public static var willEnterForeground: ControlEvent { - let source = NotificationCenter.default.rx.notification(UIApplication.willEnterForegroundNotification).map { _ in } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `UIApplication.didFinishLaunchingNotification` - public static var didFinishLaunching: ControlEvent { - let source = NotificationCenter.default.rx.notification(UIApplication.didFinishLaunchingNotification).map { _ in } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `UIApplication.didBecomeActiveNotification` - public static var didBecomeActive: ControlEvent { - let source = NotificationCenter.default.rx.notification(UIApplication.didBecomeActiveNotification).map { _ in } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `UIApplication.willResignActiveNotification` - public static var willResignActive: ControlEvent { - let source = NotificationCenter.default.rx.notification(UIApplication.willResignActiveNotification).map { _ in } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `UIApplication.didReceiveMemoryWarningNotification` - public static var didReceiveMemoryWarning: ControlEvent { - let source = NotificationCenter.default.rx.notification(UIApplication.didReceiveMemoryWarningNotification).map { _ in } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `UIApplication.willTerminateNotification` - public static var willTerminate: ControlEvent { - let source = NotificationCenter.default.rx.notification(UIApplication.willTerminateNotification).map { _ in } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `UIApplication.significantTimeChangeNotification` - public static var significantTimeChange: ControlEvent { - let source = NotificationCenter.default.rx.notification(UIApplication.significantTimeChangeNotification).map { _ in } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `UIApplication.backgroundRefreshStatusDidChangeNotification` - public static var backgroundRefreshStatusDidChange: ControlEvent { - let source = NotificationCenter.default.rx.notification(UIApplication.backgroundRefreshStatusDidChangeNotification).map { _ in } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `UIApplication.protectedDataWillBecomeUnavailableNotification` - public static var protectedDataWillBecomeUnavailable: ControlEvent { - let source = NotificationCenter.default.rx.notification(UIApplication.protectedDataWillBecomeUnavailableNotification).map { _ in } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `UIApplication.protectedDataDidBecomeAvailableNotification` - public static var protectedDataDidBecomeAvailable: ControlEvent { - let source = NotificationCenter.default.rx.notification(UIApplication.protectedDataDidBecomeAvailableNotification).map { _ in } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `UIApplication.userDidTakeScreenshotNotification` - public static var userDidTakeScreenshot: ControlEvent { - let source = NotificationCenter.default.rx.notification(UIApplication.userDidTakeScreenshotNotification).map { _ in } - - return ControlEvent(events: source) - } -} -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/UIBarButtonItem+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/UIBarButtonItem+Rx.swift deleted file mode 100644 index 0bcaa99..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/UIBarButtonItem+Rx.swift +++ /dev/null @@ -1,72 +0,0 @@ -// -// UIBarButtonItem+Rx.swift -// RxCocoa -// -// Created by Daniel Tartaglia on 5/31/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import UIKit -import RxSwift - -private var rx_tap_key: UInt8 = 0 - -extension Reactive where Base: UIBarButtonItem { - /// Reactive wrapper for target action pattern on `self`. - public var tap: ControlEvent<()> { - let source = lazyInstanceObservable(&rx_tap_key) { () -> Observable<()> in - Observable.create { [weak control = self.base] observer in - guard let control = control else { - observer.on(.completed) - return Disposables.create() - } - let target = BarButtonItemTarget(barButtonItem: control) { - observer.on(.next(())) - } - return target - } - .take(until: self.deallocated) - .share() - } - - return ControlEvent(events: source) - } -} - - -@objc -final class BarButtonItemTarget: RxTarget { - typealias Callback = () -> Void - - weak var barButtonItem: UIBarButtonItem? - var callback: Callback! - - init(barButtonItem: UIBarButtonItem, callback: @escaping () -> Void) { - self.barButtonItem = barButtonItem - self.callback = callback - super.init() - barButtonItem.target = self - barButtonItem.action = #selector(BarButtonItemTarget.action(_:)) - } - - override func dispose() { - super.dispose() -#if DEBUG - MainScheduler.ensureRunningOnMainThread() -#endif - - barButtonItem?.target = nil - barButtonItem?.action = nil - - callback = nil - } - - @objc func action(_ sender: AnyObject) { - callback() - } - -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/UIButton+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/UIButton+Rx.swift deleted file mode 100644 index 4d0f4c3..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/UIButton+Rx.swift +++ /dev/null @@ -1,82 +0,0 @@ -// -// UIButton+Rx.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 3/28/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) - -import RxSwift -import UIKit - -extension Reactive where Base: UIButton { - - /// Reactive wrapper for `TouchUpInside` control event. - public var tap: ControlEvent { - controlEvent(.touchUpInside) - } -} - -#endif - -#if os(tvOS) - -import RxSwift -import UIKit - -extension Reactive where Base: UIButton { - - /// Reactive wrapper for `PrimaryActionTriggered` control event. - public var primaryAction: ControlEvent { - controlEvent(.primaryActionTriggered) - } - -} - -#endif - -#if os(iOS) || os(tvOS) - -import RxSwift -import UIKit - -extension Reactive where Base: UIButton { - /// Reactive wrapper for `setTitle(_:for:)` - public func title(for controlState: UIControl.State = []) -> Binder { - Binder(self.base) { button, title in - button.setTitle(title, for: controlState) - } - } - - /// Reactive wrapper for `setImage(_:for:)` - public func image(for controlState: UIControl.State = []) -> Binder { - Binder(self.base) { button, image in - button.setImage(image, for: controlState) - } - } - - /// Reactive wrapper for `setBackgroundImage(_:for:)` - public func backgroundImage(for controlState: UIControl.State = []) -> Binder { - Binder(self.base) { button, image in - button.setBackgroundImage(image, for: controlState) - } - } - -} -#endif - -#if os(iOS) || os(tvOS) - import RxSwift - import UIKit - - extension Reactive where Base: UIButton { - /// Reactive wrapper for `setAttributedTitle(_:controlState:)` - public func attributedTitle(for controlState: UIControl.State = []) -> Binder { - return Binder(self.base) { button, attributedTitle -> Void in - button.setAttributedTitle(attributedTitle, for: controlState) - } - } - } -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/UICollectionView+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/UICollectionView+Rx.swift deleted file mode 100644 index 8f4bdb3..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/UICollectionView+Rx.swift +++ /dev/null @@ -1,380 +0,0 @@ -// -// UICollectionView+Rx.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 4/2/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import RxSwift -import UIKit - -// Items - -extension Reactive where Base: UICollectionView { - - /** - Binds sequences of elements to collection view items. - - - parameter source: Observable sequence of items. - - parameter cellFactory: Transform between sequence elements and view cells. - - returns: Disposable object that can be used to unbind. - - Example - - let items = Observable.just([ - 1, - 2, - 3 - ]) - - items - .bind(to: collectionView.rx.items) { (collectionView, row, element) in - let indexPath = IndexPath(row: row, section: 0) - let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! NumberCell - cell.value?.text = "\(element) @ \(row)" - return cell - } - .disposed(by: disposeBag) - */ - public func items - (_ source: Source) - -> (_ cellFactory: @escaping (UICollectionView, Int, Sequence.Element) -> UICollectionViewCell) - -> Disposable where Source.Element == Sequence { - return { cellFactory in - let dataSource = RxCollectionViewReactiveArrayDataSourceSequenceWrapper(cellFactory: cellFactory) - return self.items(dataSource: dataSource)(source) - } - - } - - /** - Binds sequences of elements to collection view items. - - - parameter cellIdentifier: Identifier used to dequeue cells. - - parameter source: Observable sequence of items. - - parameter configureCell: Transform between sequence elements and view cells. - - parameter cellType: Type of collection view cell. - - returns: Disposable object that can be used to unbind. - - Example - - let items = Observable.just([ - 1, - 2, - 3 - ]) - - items - .bind(to: collectionView.rx.items(cellIdentifier: "Cell", cellType: NumberCell.self)) { (row, element, cell) in - cell.value?.text = "\(element) @ \(row)" - } - .disposed(by: disposeBag) - */ - public func items - (cellIdentifier: String, cellType: Cell.Type = Cell.self) - -> (_ source: Source) - -> (_ configureCell: @escaping (Int, Sequence.Element, Cell) -> Void) - -> Disposable where Source.Element == Sequence { - return { source in - return { configureCell in - let dataSource = RxCollectionViewReactiveArrayDataSourceSequenceWrapper { cv, i, item in - let indexPath = IndexPath(item: i, section: 0) - let cell = cv.dequeueReusableCell(withReuseIdentifier: cellIdentifier, for: indexPath) as! Cell - configureCell(i, item, cell) - return cell - } - - return self.items(dataSource: dataSource)(source) - } - } - } - - - /** - Binds sequences of elements to collection view items using a custom reactive data used to perform the transformation. - - - parameter dataSource: Data source used to transform elements to view cells. - - parameter source: Observable sequence of items. - - returns: Disposable object that can be used to unbind. - - Example - - let dataSource = RxCollectionViewSectionedReloadDataSource>() - - let items = Observable.just([ - SectionModel(model: "First section", items: [ - 1.0, - 2.0, - 3.0 - ]), - SectionModel(model: "Second section", items: [ - 1.0, - 2.0, - 3.0 - ]), - SectionModel(model: "Third section", items: [ - 1.0, - 2.0, - 3.0 - ]) - ]) - - dataSource.configureCell = { (dataSource, cv, indexPath, element) in - let cell = cv.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! NumberCell - cell.value?.text = "\(element) @ row \(indexPath.row)" - return cell - } - - items - .bind(to: collectionView.rx.items(dataSource: dataSource)) - .disposed(by: disposeBag) - */ - public func items< - DataSource: RxCollectionViewDataSourceType & UICollectionViewDataSource, - Source: ObservableType> - (dataSource: DataSource) - -> (_ source: Source) - -> Disposable where DataSource.Element == Source.Element - { - return { source in - // This is called for side effects only, and to make sure delegate proxy is in place when - // data source is being bound. - // This is needed because theoretically the data source subscription itself might - // call `self.rx.delegate`. If that happens, it might cause weird side effects since - // setting data source will set delegate, and UICollectionView might get into a weird state. - // Therefore it's better to set delegate proxy first, just to be sure. - _ = self.delegate - // Strong reference is needed because data source is in use until result subscription is disposed - return source.subscribeProxyDataSource(ofObject: self.base, dataSource: dataSource, retainDataSource: true) { [weak collectionView = self.base] (_: RxCollectionViewDataSourceProxy, event) -> Void in - guard let collectionView = collectionView else { - return - } - dataSource.collectionView(collectionView, observedEvent: event) - } - } - } -} - -extension Reactive where Base: UICollectionView { - public typealias DisplayCollectionViewCellEvent = (cell: UICollectionViewCell, at: IndexPath) - public typealias DisplayCollectionViewSupplementaryViewEvent = (supplementaryView: UICollectionReusableView, elementKind: String, at: IndexPath) - - /// Reactive wrapper for `dataSource`. - /// - /// For more information take a look at `DelegateProxyType` protocol documentation. - public var dataSource: DelegateProxy { - RxCollectionViewDataSourceProxy.proxy(for: base) - } - - /// Installs data source as forwarding delegate on `rx.dataSource`. - /// Data source won't be retained. - /// - /// It enables using normal delegate mechanism with reactive delegate mechanism. - /// - /// - parameter dataSource: Data source object. - /// - returns: Disposable object that can be used to unbind the data source. - public func setDataSource(_ dataSource: UICollectionViewDataSource) - -> Disposable { - RxCollectionViewDataSourceProxy.installForwardDelegate(dataSource, retainDelegate: false, onProxyForObject: self.base) - } - - /// Reactive wrapper for `delegate` message `collectionView(_:didSelectItemAtIndexPath:)`. - public var itemSelected: ControlEvent { - let source = delegate.methodInvoked(#selector(UICollectionViewDelegate.collectionView(_:didSelectItemAt:))) - .map { a in - return try castOrThrow(IndexPath.self, a[1]) - } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `delegate` message `collectionView(_:didDeselectItemAtIndexPath:)`. - public var itemDeselected: ControlEvent { - let source = delegate.methodInvoked(#selector(UICollectionViewDelegate.collectionView(_:didDeselectItemAt:))) - .map { a in - return try castOrThrow(IndexPath.self, a[1]) - } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `delegate` message `collectionView(_:didHighlightItemAt:)`. - public var itemHighlighted: ControlEvent { - let source = delegate.methodInvoked(#selector(UICollectionViewDelegate.collectionView(_:didHighlightItemAt:))) - .map { a in - return try castOrThrow(IndexPath.self, a[1]) - } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `delegate` message `collectionView(_:didUnhighlightItemAt:)`. - public var itemUnhighlighted: ControlEvent { - let source = delegate.methodInvoked(#selector(UICollectionViewDelegate.collectionView(_:didUnhighlightItemAt:))) - .map { a in - return try castOrThrow(IndexPath.self, a[1]) - } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `delegate` message `collectionView:willDisplay:forItemAt:`. - public var willDisplayCell: ControlEvent { - let source: Observable = self.delegate.methodInvoked(#selector(UICollectionViewDelegate.collectionView(_:willDisplay:forItemAt:))) - .map { a in - return (try castOrThrow(UICollectionViewCell.self, a[1]), try castOrThrow(IndexPath.self, a[2])) - } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `delegate` message `collectionView(_:willDisplaySupplementaryView:forElementKind:at:)`. - public var willDisplaySupplementaryView: ControlEvent { - let source: Observable = self.delegate.methodInvoked(#selector(UICollectionViewDelegate.collectionView(_:willDisplaySupplementaryView:forElementKind:at:))) - .map { a in - return (try castOrThrow(UICollectionReusableView.self, a[1]), - try castOrThrow(String.self, a[2]), - try castOrThrow(IndexPath.self, a[3])) - } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `delegate` message `collectionView:didEndDisplaying:forItemAt:`. - public var didEndDisplayingCell: ControlEvent { - let source: Observable = self.delegate.methodInvoked(#selector(UICollectionViewDelegate.collectionView(_:didEndDisplaying:forItemAt:))) - .map { a in - return (try castOrThrow(UICollectionViewCell.self, a[1]), try castOrThrow(IndexPath.self, a[2])) - } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `delegate` message `collectionView(_:didEndDisplayingSupplementaryView:forElementOfKind:at:)`. - public var didEndDisplayingSupplementaryView: ControlEvent { - let source: Observable = self.delegate.methodInvoked(#selector(UICollectionViewDelegate.collectionView(_:didEndDisplayingSupplementaryView:forElementOfKind:at:))) - .map { a in - return (try castOrThrow(UICollectionReusableView.self, a[1]), - try castOrThrow(String.self, a[2]), - try castOrThrow(IndexPath.self, a[3])) - } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `delegate` message `collectionView(_:didSelectItemAtIndexPath:)`. - /// - /// It can be only used when one of the `rx.itemsWith*` methods is used to bind observable sequence, - /// or any other data source conforming to `SectionedViewDataSourceType` protocol. - /// - /// ``` - /// collectionView.rx.modelSelected(MyModel.self) - /// .map { ... - /// ``` - public func modelSelected(_ modelType: T.Type) -> ControlEvent { - let source: Observable = itemSelected.flatMap { [weak view = self.base as UICollectionView] indexPath -> Observable in - guard let view = view else { - return Observable.empty() - } - - return Observable.just(try view.rx.model(at: indexPath)) - } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `delegate` message `collectionView(_:didSelectItemAtIndexPath:)`. - /// - /// It can be only used when one of the `rx.itemsWith*` methods is used to bind observable sequence, - /// or any other data source conforming to `SectionedViewDataSourceType` protocol. - /// - /// ``` - /// collectionView.rx.modelDeselected(MyModel.self) - /// .map { ... - /// ``` - public func modelDeselected(_ modelType: T.Type) -> ControlEvent { - let source: Observable = itemDeselected.flatMap { [weak view = self.base as UICollectionView] indexPath -> Observable in - guard let view = view else { - return Observable.empty() - } - - return Observable.just(try view.rx.model(at: indexPath)) - } - - return ControlEvent(events: source) - } - - /// Synchronous helper method for retrieving a model at indexPath through a reactive data source - public func model(at indexPath: IndexPath) throws -> T { - let dataSource: SectionedViewDataSourceType = castOrFatalError(self.dataSource.forwardToDelegate(), message: "This method only works in case one of the `rx.itemsWith*` methods was used.") - - let element = try dataSource.model(at: indexPath) - - return try castOrThrow(T.self, element) - } -} - -@available(iOS 10.0, tvOS 10.0, *) -extension Reactive where Base: UICollectionView { - - /// Reactive wrapper for `prefetchDataSource`. - /// - /// For more information take a look at `DelegateProxyType` protocol documentation. - public var prefetchDataSource: DelegateProxy { - RxCollectionViewDataSourcePrefetchingProxy.proxy(for: base) - } - - /** - Installs prefetch data source as forwarding delegate on `rx.prefetchDataSource`. - Prefetch data source won't be retained. - - It enables using normal delegate mechanism with reactive delegate mechanism. - - - parameter prefetchDataSource: Prefetch data source object. - - returns: Disposable object that can be used to unbind the data source. - */ - public func setPrefetchDataSource(_ prefetchDataSource: UICollectionViewDataSourcePrefetching) - -> Disposable { - return RxCollectionViewDataSourcePrefetchingProxy.installForwardDelegate(prefetchDataSource, retainDelegate: false, onProxyForObject: self.base) - } - - /// Reactive wrapper for `prefetchDataSource` message `collectionView(_:prefetchItemsAt:)`. - public var prefetchItems: ControlEvent<[IndexPath]> { - let source = RxCollectionViewDataSourcePrefetchingProxy.proxy(for: base).prefetchItemsPublishSubject - return ControlEvent(events: source) - } - - /// Reactive wrapper for `prefetchDataSource` message `collectionView(_:cancelPrefetchingForItemsAt:)`. - public var cancelPrefetchingForItems: ControlEvent<[IndexPath]> { - let source = prefetchDataSource.methodInvoked(#selector(UICollectionViewDataSourcePrefetching.collectionView(_:cancelPrefetchingForItemsAt:))) - .map { a in - return try castOrThrow(Array.self, a[1]) - } - - return ControlEvent(events: source) - } - -} -#endif - -#if os(tvOS) - -extension Reactive where Base: UICollectionView { - - /// Reactive wrapper for `delegate` message `collectionView(_:didUpdateFocusInContext:withAnimationCoordinator:)`. - public var didUpdateFocusInContextWithAnimationCoordinator: ControlEvent<(context: UICollectionViewFocusUpdateContext, animationCoordinator: UIFocusAnimationCoordinator)> { - - let source = delegate.methodInvoked(#selector(UICollectionViewDelegate.collectionView(_:didUpdateFocusIn:with:))) - .map { a -> (context: UICollectionViewFocusUpdateContext, animationCoordinator: UIFocusAnimationCoordinator) in - let context = try castOrThrow(UICollectionViewFocusUpdateContext.self, a[1]) - let animationCoordinator = try castOrThrow(UIFocusAnimationCoordinator.self, a[2]) - return (context: context, animationCoordinator: animationCoordinator) - } - - return ControlEvent(events: source) - } -} -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/UIControl+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/UIControl+Rx.swift deleted file mode 100644 index 6698cf2..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/UIControl+Rx.swift +++ /dev/null @@ -1,86 +0,0 @@ -// -// UIControl+Rx.swift -// RxCocoa -// -// Created by Daniel Tartaglia on 5/23/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import RxSwift -import UIKit - -extension Reactive where Base: UIControl { - /// Reactive wrapper for target action pattern. - /// - /// - parameter controlEvents: Filter for observed event types. - public func controlEvent(_ controlEvents: UIControl.Event) -> ControlEvent<()> { - let source: Observable = Observable.create { [weak control = self.base] observer in - MainScheduler.ensureRunningOnMainThread() - - guard let control = control else { - observer.on(.completed) - return Disposables.create() - } - - let controlTarget = ControlTarget(control: control, controlEvents: controlEvents) { _ in - observer.on(.next(())) - } - - return Disposables.create(with: controlTarget.dispose) - } - .take(until: deallocated) - - return ControlEvent(events: source) - } - - /// Creates a `ControlProperty` that is triggered by target/action pattern value updates. - /// - /// - parameter controlEvents: Events that trigger value update sequence elements. - /// - parameter getter: Property value getter. - /// - parameter setter: Property value setter. - public func controlProperty( - editingEvents: UIControl.Event, - getter: @escaping (Base) -> T, - setter: @escaping (Base, T) -> Void - ) -> ControlProperty { - let source: Observable = Observable.create { [weak weakControl = base] observer in - guard let control = weakControl else { - observer.on(.completed) - return Disposables.create() - } - - observer.on(.next(getter(control))) - - let controlTarget = ControlTarget(control: control, controlEvents: editingEvents) { _ in - if let control = weakControl { - observer.on(.next(getter(control))) - } - } - - return Disposables.create(with: controlTarget.dispose) - } - .take(until: deallocated) - - let bindingObserver = Binder(base, binding: setter) - - return ControlProperty(values: source, valueSink: bindingObserver) - } - - /// This is a separate method to better communicate to public consumers that - /// an `editingEvent` needs to fire for control property to be updated. - internal func controlPropertyWithDefaultEvents( - editingEvents: UIControl.Event = [.allEditingEvents, .valueChanged], - getter: @escaping (Base) -> T, - setter: @escaping (Base, T) -> Void - ) -> ControlProperty { - return controlProperty( - editingEvents: editingEvents, - getter: getter, - setter: setter - ) - } -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/UIDatePicker+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/UIDatePicker+Rx.swift deleted file mode 100644 index e10c1ec..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/UIDatePicker+Rx.swift +++ /dev/null @@ -1,43 +0,0 @@ -// -// UIDatePicker+Rx.swift -// RxCocoa -// -// Created by Daniel Tartaglia on 5/31/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) - -import RxSwift -import UIKit - -extension Reactive where Base: UIDatePicker { - /// Reactive wrapper for `date` property. - public var date: ControlProperty { - value - } - - /// Reactive wrapper for `date` property. - public var value: ControlProperty { - return base.rx.controlPropertyWithDefaultEvents( - getter: { datePicker in - datePicker.date - }, setter: { datePicker, value in - datePicker.date = value - } - ) - } - - /// Reactive wrapper for `countDownDuration` property. - public var countDownDuration: ControlProperty { - return base.rx.controlPropertyWithDefaultEvents( - getter: { datePicker in - datePicker.countDownDuration - }, setter: { datePicker, value in - datePicker.countDownDuration = value - } - ) - } -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/UIGestureRecognizer+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/UIGestureRecognizer+Rx.swift deleted file mode 100644 index 5512900..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/UIGestureRecognizer+Rx.swift +++ /dev/null @@ -1,75 +0,0 @@ -// -// UIGestureRecognizer+Rx.swift -// RxCocoa -// -// Created by Carlos García on 10/6/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import UIKit -import RxSwift - -// This should be only used from `MainScheduler` -final class GestureTarget: RxTarget { - typealias Callback = (Recognizer) -> Void - - let selector = #selector(ControlTarget.eventHandler(_:)) - - weak var gestureRecognizer: Recognizer? - var callback: Callback? - - init(_ gestureRecognizer: Recognizer, callback: @escaping Callback) { - self.gestureRecognizer = gestureRecognizer - self.callback = callback - - super.init() - - gestureRecognizer.addTarget(self, action: selector) - - let method = self.method(for: selector) - if method == nil { - fatalError("Can't find method") - } - } - - @objc func eventHandler(_ sender: UIGestureRecognizer) { - if let callback = self.callback, let gestureRecognizer = self.gestureRecognizer { - callback(gestureRecognizer) - } - } - - override func dispose() { - super.dispose() - - self.gestureRecognizer?.removeTarget(self, action: self.selector) - self.callback = nil - } -} - -extension Reactive where Base: UIGestureRecognizer { - - /// Reactive wrapper for gesture recognizer events. - public var event: ControlEvent { - let source: Observable = Observable.create { [weak control = self.base] observer in - MainScheduler.ensureRunningOnMainThread() - - guard let control = control else { - observer.on(.completed) - return Disposables.create() - } - - let observer = GestureTarget(control) { control in - observer.on(.next(control)) - } - - return observer - }.take(until: deallocated) - - return ControlEvent(events: source) - } - -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/UINavigationController+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/UINavigationController+Rx.swift deleted file mode 100644 index 94796b6..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/UINavigationController+Rx.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// UINavigationController+Rx.swift -// RxCocoa -// -// Created by Diogo on 13/04/17. -// Copyright © 2017 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import RxSwift -import UIKit - -extension Reactive where Base: UINavigationController { - public typealias ShowEvent = (viewController: UIViewController, animated: Bool) - - /// Reactive wrapper for `delegate`. - /// - /// For more information take a look at `DelegateProxyType` protocol documentation. - public var delegate: DelegateProxy { - RxNavigationControllerDelegateProxy.proxy(for: base) - } - - /// Reactive wrapper for delegate method `navigationController(:willShow:animated:)`. - public var willShow: ControlEvent { - let source: Observable = delegate - .methodInvoked(#selector(UINavigationControllerDelegate.navigationController(_:willShow:animated:))) - .map { arg in - let viewController = try castOrThrow(UIViewController.self, arg[1]) - let animated = try castOrThrow(Bool.self, arg[2]) - return (viewController, animated) - } - return ControlEvent(events: source) - } - - /// Reactive wrapper for delegate method `navigationController(:didShow:animated:)`. - public var didShow: ControlEvent { - let source: Observable = delegate - .methodInvoked(#selector(UINavigationControllerDelegate.navigationController(_:didShow:animated:))) - .map { arg in - let viewController = try castOrThrow(UIViewController.self, arg[1]) - let animated = try castOrThrow(Bool.self, arg[2]) - return (viewController, animated) - } - return ControlEvent(events: source) - } -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/UIPickerView+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/UIPickerView+Rx.swift deleted file mode 100644 index 317dc13..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/UIPickerView+Rx.swift +++ /dev/null @@ -1,224 +0,0 @@ -// -// UIPickerView+Rx.swift -// RxCocoa -// -// Created by Segii Shulga on 5/12/16. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) - - import RxSwift - import UIKit - - extension Reactive where Base: UIPickerView { - - /// Reactive wrapper for `delegate`. - /// For more information take a look at `DelegateProxyType` protocol documentation. - public var delegate: DelegateProxy { - return RxPickerViewDelegateProxy.proxy(for: base) - } - - /// Installs delegate as forwarding delegate on `delegate`. - /// Delegate won't be retained. - /// - /// It enables using normal delegate mechanism with reactive delegate mechanism. - /// - /// - parameter delegate: Delegate object. - /// - returns: Disposable object that can be used to unbind the delegate. - public func setDelegate(_ delegate: UIPickerViewDelegate) - -> Disposable { - return RxPickerViewDelegateProxy.installForwardDelegate(delegate, retainDelegate: false, onProxyForObject: self.base) - } - - /** - Reactive wrapper for `dataSource`. - - For more information take a look at `DelegateProxyType` protocol documentation. - */ - public var dataSource: DelegateProxy { - return RxPickerViewDataSourceProxy.proxy(for: base) - } - - /** - Reactive wrapper for `delegate` message `pickerView:didSelectRow:inComponent:`. - */ - public var itemSelected: ControlEvent<(row: Int, component: Int)> { - let source = delegate - .methodInvoked(#selector(UIPickerViewDelegate.pickerView(_:didSelectRow:inComponent:))) - .map { - return (row: try castOrThrow(Int.self, $0[1]), component: try castOrThrow(Int.self, $0[2])) - } - return ControlEvent(events: source) - } - - /** - Reactive wrapper for `delegate` message `pickerView:didSelectRow:inComponent:`. - - It can be only used when one of the `rx.itemTitles, rx.itemAttributedTitles, items(_ source: O)` methods is used to bind observable sequence, - or any other data source conforming to a `ViewDataSourceType` protocol. - - ``` - pickerView.rx.modelSelected(MyModel.self) - .map { ... - ``` - - parameter modelType: Type of a Model which bound to the dataSource - */ - public func modelSelected(_ modelType: T.Type) -> ControlEvent<[T]> { - let source = itemSelected.flatMap { [weak view = self.base as UIPickerView] _, component -> Observable<[T]> in - guard let view = view else { - return Observable.empty() - } - - let model: [T] = try (0 ..< view.numberOfComponents).map { component in - let row = view.selectedRow(inComponent: component) - return try view.rx.model(at: IndexPath(row: row, section: component)) - } - - return Observable.just(model) - } - - return ControlEvent(events: source) - } - - /** - Binds sequences of elements to picker view rows. - - - parameter source: Observable sequence of items. - - parameter titleForRow: Transform between sequence elements and row titles. - - returns: Disposable object that can be used to unbind. - - Example: - - let items = Observable.just([ - "First Item", - "Second Item", - "Third Item" - ]) - - items - .bind(to: pickerView.rx.itemTitles) { (row, element) in - return element.title - } - .disposed(by: disposeBag) - - */ - - public func itemTitles - (_ source: Source) - -> (_ titleForRow: @escaping (Int, Sequence.Element) -> String?) - -> Disposable where Source.Element == Sequence { - return { titleForRow in - let adapter = RxStringPickerViewAdapter(titleForRow: titleForRow) - return self.items(adapter: adapter)(source) - } - } - - /** - Binds sequences of elements to picker view rows. - - - parameter source: Observable sequence of items. - - parameter attributedTitleForRow: Transform between sequence elements and row attributed titles. - - returns: Disposable object that can be used to unbind. - - Example: - - let items = Observable.just([ - "First Item", - "Second Item", - "Third Item" - ]) - - items - .bind(to: pickerView.rx.itemAttributedTitles) { (row, element) in - return NSAttributedString(string: element.title) - } - .disposed(by: disposeBag) - - */ - - public func itemAttributedTitles - (_ source: Source) - -> (_ attributedTitleForRow: @escaping (Int, Sequence.Element) -> NSAttributedString?) - -> Disposable where Source.Element == Sequence { - return { attributedTitleForRow in - let adapter = RxAttributedStringPickerViewAdapter(attributedTitleForRow: attributedTitleForRow) - return self.items(adapter: adapter)(source) - } - } - - /** - Binds sequences of elements to picker view rows. - - - parameter source: Observable sequence of items. - - parameter viewForRow: Transform between sequence elements and row views. - - returns: Disposable object that can be used to unbind. - - Example: - - let items = Observable.just([ - "First Item", - "Second Item", - "Third Item" - ]) - - items - .bind(to: pickerView.rx.items) { (row, element, view) in - guard let myView = view as? MyView else { - let view = MyView() - view.configure(with: element) - return view - } - myView.configure(with: element) - return myView - } - .disposed(by: disposeBag) - - */ - - public func items - (_ source: Source) - -> (_ viewForRow: @escaping (Int, Sequence.Element, UIView?) -> UIView) - -> Disposable where Source.Element == Sequence { - return { viewForRow in - let adapter = RxPickerViewAdapter(viewForRow: viewForRow) - return self.items(adapter: adapter)(source) - } - } - - /** - Binds sequences of elements to picker view rows using a custom reactive adapter used to perform the transformation. - This method will retain the adapter for as long as the subscription isn't disposed (result `Disposable` - being disposed). - In case `source` observable sequence terminates successfully, the adapter will present latest element - until the subscription isn't disposed. - - - parameter adapter: Adapter used to transform elements to picker components. - - parameter source: Observable sequence of items. - - returns: Disposable object that can be used to unbind. - */ - public func items(adapter: Adapter) - -> (_ source: Source) - -> Disposable where Source.Element == Adapter.Element { - return { source in - let delegateSubscription = self.setDelegate(adapter) - let dataSourceSubscription = source.subscribeProxyDataSource(ofObject: self.base, dataSource: adapter, retainDataSource: true, binding: { [weak pickerView = self.base] (_: RxPickerViewDataSourceProxy, event) in - guard let pickerView = pickerView else { return } - adapter.pickerView(pickerView, observedEvent: event) - }) - return Disposables.create(delegateSubscription, dataSourceSubscription) - } - } - - /** - Synchronous helper method for retrieving a model at indexPath through a reactive data source. - */ - public func model(at indexPath: IndexPath) throws -> T { - let dataSource: SectionedViewDataSourceType = castOrFatalError(self.dataSource.forwardToDelegate(), message: "This method only works in case one of the `rx.itemTitles, rx.itemAttributedTitles, items(_ source: O)` methods was used.") - - return castOrFatalError(try dataSource.model(at: indexPath)) - } - } - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/UIRefreshControl+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/UIRefreshControl+Rx.swift deleted file mode 100644 index cdb10be..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/UIRefreshControl+Rx.swift +++ /dev/null @@ -1,28 +0,0 @@ -// -// UIRefreshControl+Rx.swift -// RxCocoa -// -// Created by Yosuke Ishikawa on 1/31/16. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) - -import UIKit -import RxSwift - -extension Reactive where Base: UIRefreshControl { - /// Bindable sink for `beginRefreshing()`, `endRefreshing()` methods. - public var isRefreshing: Binder { - return Binder(self.base) { refreshControl, refresh in - if refresh { - refreshControl.beginRefreshing() - } else { - refreshControl.endRefreshing() - } - } - } - -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/UIScrollView+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/UIScrollView+Rx.swift deleted file mode 100644 index f90e1c2..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/UIScrollView+Rx.swift +++ /dev/null @@ -1,131 +0,0 @@ -// -// UIScrollView+Rx.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 4/3/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - - import RxSwift - import UIKit - - extension Reactive where Base: UIScrollView { - public typealias EndZoomEvent = (view: UIView?, scale: CGFloat) - public typealias WillEndDraggingEvent = (velocity: CGPoint, targetContentOffset: UnsafeMutablePointer) - - /// Reactive wrapper for `delegate`. - /// - /// For more information take a look at `DelegateProxyType` protocol documentation. - public var delegate: DelegateProxy { - return RxScrollViewDelegateProxy.proxy(for: base) - } - - /// Reactive wrapper for `contentOffset`. - public var contentOffset: ControlProperty { - let proxy = RxScrollViewDelegateProxy.proxy(for: base) - - let bindingObserver = Binder(self.base) { scrollView, contentOffset in - scrollView.contentOffset = contentOffset - } - - return ControlProperty(values: proxy.contentOffsetBehaviorSubject, valueSink: bindingObserver) - } - - /// Reactive wrapper for delegate method `scrollViewDidScroll` - public var didScroll: ControlEvent { - let source = RxScrollViewDelegateProxy.proxy(for: base).contentOffsetPublishSubject - return ControlEvent(events: source) - } - - /// Reactive wrapper for delegate method `scrollViewWillBeginDecelerating` - public var willBeginDecelerating: ControlEvent { - let source = delegate.methodInvoked(#selector(UIScrollViewDelegate.scrollViewWillBeginDecelerating(_:))).map { _ in } - return ControlEvent(events: source) - } - - /// Reactive wrapper for delegate method `scrollViewDidEndDecelerating` - public var didEndDecelerating: ControlEvent { - let source = delegate.methodInvoked(#selector(UIScrollViewDelegate.scrollViewDidEndDecelerating(_:))).map { _ in } - return ControlEvent(events: source) - } - - /// Reactive wrapper for delegate method `scrollViewWillBeginDragging` - public var willBeginDragging: ControlEvent { - let source = delegate.methodInvoked(#selector(UIScrollViewDelegate.scrollViewWillBeginDragging(_:))).map { _ in } - return ControlEvent(events: source) - } - - /// Reactive wrapper for delegate method `scrollViewWillEndDragging(_:withVelocity:targetContentOffset:)` - public var willEndDragging: ControlEvent { - let source = delegate.methodInvoked(#selector(UIScrollViewDelegate.scrollViewWillEndDragging(_:withVelocity:targetContentOffset:))) - .map { value -> WillEndDraggingEvent in - let velocity = try castOrThrow(CGPoint.self, value[1]) - let targetContentOffsetValue = try castOrThrow(NSValue.self, value[2]) - - guard let rawPointer = targetContentOffsetValue.pointerValue else { throw RxCocoaError.unknown } - let typedPointer = rawPointer.bindMemory(to: CGPoint.self, capacity: MemoryLayout.size) - - return (velocity, typedPointer) - } - return ControlEvent(events: source) - } - - /// Reactive wrapper for delegate method `scrollViewDidEndDragging(_:willDecelerate:)` - public var didEndDragging: ControlEvent { - let source = delegate.methodInvoked(#selector(UIScrollViewDelegate.scrollViewDidEndDragging(_:willDecelerate:))).map { value -> Bool in - return try castOrThrow(Bool.self, value[1]) - } - return ControlEvent(events: source) - } - - /// Reactive wrapper for delegate method `scrollViewDidZoom` - public var didZoom: ControlEvent { - let source = delegate.methodInvoked(#selector(UIScrollViewDelegate.scrollViewDidZoom)).map { _ in } - return ControlEvent(events: source) - } - - - /// Reactive wrapper for delegate method `scrollViewDidScrollToTop` - public var didScrollToTop: ControlEvent { - let source = delegate.methodInvoked(#selector(UIScrollViewDelegate.scrollViewDidScrollToTop(_:))).map { _ in } - return ControlEvent(events: source) - } - - /// Reactive wrapper for delegate method `scrollViewDidEndScrollingAnimation` - public var didEndScrollingAnimation: ControlEvent { - let source = delegate.methodInvoked(#selector(UIScrollViewDelegate.scrollViewDidEndScrollingAnimation(_:))).map { _ in } - return ControlEvent(events: source) - } - - /// Reactive wrapper for delegate method `scrollViewWillBeginZooming(_:with:)` - public var willBeginZooming: ControlEvent { - let source = delegate.methodInvoked(#selector(UIScrollViewDelegate.scrollViewWillBeginZooming(_:with:))).map { value -> UIView? in - return try castOptionalOrThrow(UIView.self, value[1] as AnyObject) - } - return ControlEvent(events: source) - } - - /// Reactive wrapper for delegate method `scrollViewDidEndZooming(_:with:atScale:)` - public var didEndZooming: ControlEvent { - let source = delegate.methodInvoked(#selector(UIScrollViewDelegate.scrollViewDidEndZooming(_:with:atScale:))).map { value -> EndZoomEvent in - return (try castOptionalOrThrow(UIView.self, value[1] as AnyObject), try castOrThrow(CGFloat.self, value[2])) - } - return ControlEvent(events: source) - } - - /// Installs delegate as forwarding delegate on `delegate`. - /// Delegate won't be retained. - /// - /// It enables using normal delegate mechanism with reactive delegate mechanism. - /// - /// - parameter delegate: Delegate object. - /// - returns: Disposable object that can be used to unbind the delegate. - public func setDelegate(_ delegate: UIScrollViewDelegate) - -> Disposable { - return RxScrollViewDelegateProxy.installForwardDelegate(delegate, retainDelegate: false, onProxyForObject: self.base) - } - } - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/UISearchBar+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/UISearchBar+Rx.swift deleted file mode 100644 index 3892b1c..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/UISearchBar+Rx.swift +++ /dev/null @@ -1,136 +0,0 @@ -// -// UISearchBar+Rx.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 3/28/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import RxSwift -import UIKit - -extension Reactive where Base: UISearchBar { - - /// Reactive wrapper for `delegate`. - /// - /// For more information take a look at `DelegateProxyType` protocol documentation. - public var delegate: DelegateProxy { - RxSearchBarDelegateProxy.proxy(for: base) - } - - /// Reactive wrapper for `text` property. - public var text: ControlProperty { - value - } - - /// Reactive wrapper for `text` property. - public var value: ControlProperty { - let source: Observable = Observable.deferred { [weak searchBar = self.base as UISearchBar] () -> Observable in - let text = searchBar?.text - - let textDidChange = (searchBar?.rx.delegate.methodInvoked(#selector(UISearchBarDelegate.searchBar(_:textDidChange:))) ?? Observable.empty()) - let didEndEditing = (searchBar?.rx.delegate.methodInvoked(#selector(UISearchBarDelegate.searchBarTextDidEndEditing(_:))) ?? Observable.empty()) - - return Observable.merge(textDidChange, didEndEditing) - .map { _ in searchBar?.text ?? "" } - .startWith(text) - } - - let bindingObserver = Binder(self.base) { (searchBar, text: String?) in - searchBar.text = text - } - - return ControlProperty(values: source, valueSink: bindingObserver) - } - - /// Reactive wrapper for `selectedScopeButtonIndex` property. - public var selectedScopeButtonIndex: ControlProperty { - let source: Observable = Observable.deferred { [weak source = self.base as UISearchBar] () -> Observable in - let index = source?.selectedScopeButtonIndex ?? 0 - - return (source?.rx.delegate.methodInvoked(#selector(UISearchBarDelegate.searchBar(_:selectedScopeButtonIndexDidChange:))) ?? Observable.empty()) - .map { a in - return try castOrThrow(Int.self, a[1]) - } - .startWith(index) - } - - let bindingObserver = Binder(self.base) { (searchBar, index: Int) in - searchBar.selectedScopeButtonIndex = index - } - - return ControlProperty(values: source, valueSink: bindingObserver) - } - -#if os(iOS) - /// Reactive wrapper for delegate method `searchBarCancelButtonClicked`. - public var cancelButtonClicked: ControlEvent { - let source: Observable = self.delegate.methodInvoked(#selector(UISearchBarDelegate.searchBarCancelButtonClicked(_:))) - .map { _ in - return () - } - return ControlEvent(events: source) - } - - /// Reactive wrapper for delegate method `searchBarBookmarkButtonClicked`. - public var bookmarkButtonClicked: ControlEvent { - let source: Observable = self.delegate.methodInvoked(#selector(UISearchBarDelegate.searchBarBookmarkButtonClicked(_:))) - .map { _ in - return () - } - return ControlEvent(events: source) - } - - /// Reactive wrapper for delegate method `searchBarResultsListButtonClicked`. - public var resultsListButtonClicked: ControlEvent { - let source: Observable = self.delegate.methodInvoked(#selector(UISearchBarDelegate.searchBarResultsListButtonClicked(_:))) - .map { _ in - return () - } - return ControlEvent(events: source) - } -#endif - - /// Reactive wrapper for delegate method `searchBarSearchButtonClicked`. - public var searchButtonClicked: ControlEvent { - let source: Observable = self.delegate.methodInvoked(#selector(UISearchBarDelegate.searchBarSearchButtonClicked(_:))) - .map { _ in - return () - } - return ControlEvent(events: source) - } - - /// Reactive wrapper for delegate method `searchBarTextDidBeginEditing`. - public var textDidBeginEditing: ControlEvent { - let source: Observable = self.delegate.methodInvoked(#selector(UISearchBarDelegate.searchBarTextDidBeginEditing(_:))) - .map { _ in - return () - } - return ControlEvent(events: source) - } - - /// Reactive wrapper for delegate method `searchBarTextDidEndEditing`. - public var textDidEndEditing: ControlEvent { - let source: Observable = self.delegate.methodInvoked(#selector(UISearchBarDelegate.searchBarTextDidEndEditing(_:))) - .map { _ in - return () - } - return ControlEvent(events: source) - } - - /// Installs delegate as forwarding delegate on `delegate`. - /// Delegate won't be retained. - /// - /// It enables using normal delegate mechanism with reactive delegate mechanism. - /// - /// - parameter delegate: Delegate object. - /// - returns: Disposable object that can be used to unbind the delegate. - public func setDelegate(_ delegate: UISearchBarDelegate) - -> Disposable { - RxSearchBarDelegateProxy.installForwardDelegate(delegate, retainDelegate: false, onProxyForObject: self.base) - } -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/UISearchController+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/UISearchController+Rx.swift deleted file mode 100644 index 4f524a5..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/UISearchController+Rx.swift +++ /dev/null @@ -1,58 +0,0 @@ -// -// UISearchController+Rx.swift -// RxCocoa -// -// Created by Segii Shulga on 3/17/16. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) - - import RxSwift - import UIKit - - extension Reactive where Base: UISearchController { - /// Reactive wrapper for `delegate`. - /// For more information take a look at `DelegateProxyType` protocol documentation. - public var delegate: DelegateProxy { - return RxSearchControllerDelegateProxy.proxy(for: base) - } - - /// Reactive wrapper for `delegate` message. - public var didDismiss: Observable { - return delegate - .methodInvoked( #selector(UISearchControllerDelegate.didDismissSearchController(_:))) - .map { _ in } - } - - /// Reactive wrapper for `delegate` message. - public var didPresent: Observable { - return delegate - .methodInvoked(#selector(UISearchControllerDelegate.didPresentSearchController(_:))) - .map { _ in } - } - - /// Reactive wrapper for `delegate` message. - public var present: Observable { - return delegate - .methodInvoked( #selector(UISearchControllerDelegate.presentSearchController(_:))) - .map { _ in } - } - - /// Reactive wrapper for `delegate` message. - public var willDismiss: Observable { - return delegate - .methodInvoked(#selector(UISearchControllerDelegate.willDismissSearchController(_:))) - .map { _ in } - } - - /// Reactive wrapper for `delegate` message. - public var willPresent: Observable { - return delegate - .methodInvoked( #selector(UISearchControllerDelegate.willPresentSearchController(_:))) - .map { _ in } - } - - } - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/UISegmentedControl+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/UISegmentedControl+Rx.swift deleted file mode 100644 index 1a62662..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/UISegmentedControl+Rx.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// UISegmentedControl+Rx.swift -// RxCocoa -// -// Created by Carlos García on 8/7/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import UIKit -import RxSwift - -extension Reactive where Base: UISegmentedControl { - /// Reactive wrapper for `selectedSegmentIndex` property. - public var selectedSegmentIndex: ControlProperty { - value - } - - /// Reactive wrapper for `selectedSegmentIndex` property. - public var value: ControlProperty { - return base.rx.controlPropertyWithDefaultEvents( - getter: { segmentedControl in - segmentedControl.selectedSegmentIndex - }, setter: { segmentedControl, value in - segmentedControl.selectedSegmentIndex = value - } - ) - } - - /// Reactive wrapper for `setEnabled(_:forSegmentAt:)` - public func enabledForSegment(at index: Int) -> Binder { - return Binder(self.base) { segmentedControl, segmentEnabled -> Void in - segmentedControl.setEnabled(segmentEnabled, forSegmentAt: index) - } - } - - /// Reactive wrapper for `setTitle(_:forSegmentAt:)` - public func titleForSegment(at index: Int) -> Binder { - return Binder(self.base) { segmentedControl, title -> Void in - segmentedControl.setTitle(title, forSegmentAt: index) - } - } - - /// Reactive wrapper for `setImage(_:forSegmentAt:)` - public func imageForSegment(at index: Int) -> Binder { - return Binder(self.base) { segmentedControl, image -> Void in - segmentedControl.setImage(image, forSegmentAt: index) - } - } - -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/UISlider+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/UISlider+Rx.swift deleted file mode 100644 index 07d4adb..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/UISlider+Rx.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// UISlider+Rx.swift -// RxCocoa -// -// Created by Alexander van der Werff on 28/05/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) - -import RxSwift -import UIKit - -extension Reactive where Base: UISlider { - - /// Reactive wrapper for `value` property. - public var value: ControlProperty { - return base.rx.controlPropertyWithDefaultEvents( - getter: { slider in - slider.value - }, setter: { slider, value in - slider.value = value - } - ) - } - -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/UIStepper+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/UIStepper+Rx.swift deleted file mode 100644 index 29f6386..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/UIStepper+Rx.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// UIStepper+Rx.swift -// RxCocoa -// -// Created by Yuta ToKoRo on 9/1/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) - -import UIKit -import RxSwift - -extension Reactive where Base: UIStepper { - - /// Reactive wrapper for `value` property. - public var value: ControlProperty { - return base.rx.controlPropertyWithDefaultEvents( - getter: { stepper in - stepper.value - }, setter: { stepper, value in - stepper.value = value - } - ) - } -} - -#endif - diff --git a/Pods/RxCocoa/RxCocoa/iOS/UISwitch+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/UISwitch+Rx.swift deleted file mode 100644 index 6e116b3..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/UISwitch+Rx.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// UISwitch+Rx.swift -// RxCocoa -// -// Created by Carlos García on 8/7/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) - -import UIKit -import RxSwift - -extension Reactive where Base: UISwitch { - - /// Reactive wrapper for `isOn` property. - public var isOn: ControlProperty { - value - } - - /// Reactive wrapper for `isOn` property. - /// - /// ⚠️ Versions prior to iOS 10.2 were leaking `UISwitch`'s, so on those versions - /// underlying observable sequence won't complete when nothing holds a strong reference - /// to `UISwitch`. - public var value: ControlProperty { - return base.rx.controlPropertyWithDefaultEvents( - getter: { uiSwitch in - uiSwitch.isOn - }, setter: { uiSwitch, value in - uiSwitch.isOn = value - } - ) - } - -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/UITabBar+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/UITabBar+Rx.swift deleted file mode 100644 index e989667..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/UITabBar+Rx.swift +++ /dev/null @@ -1,92 +0,0 @@ -// -// UITabBar+Rx.swift -// RxCocoa -// -// Created by Jesse Farless on 5/13/16. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import UIKit -import RxSwift - -/** - iOS only - */ -#if os(iOS) -extension Reactive where Base: UITabBar { - - /// Reactive wrapper for `delegate` message `tabBar(_:willBeginCustomizing:)`. - public var willBeginCustomizing: ControlEvent<[UITabBarItem]> { - - let source = delegate.methodInvoked(#selector(UITabBarDelegate.tabBar(_:willBeginCustomizing:))) - .map { a in - return try castOrThrow([UITabBarItem].self, a[1]) - } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `delegate` message `tabBar(_:didBeginCustomizing:)`. - public var didBeginCustomizing: ControlEvent<[UITabBarItem]> { - let source = delegate.methodInvoked(#selector(UITabBarDelegate.tabBar(_:didBeginCustomizing:))) - .map { a in - return try castOrThrow([UITabBarItem].self, a[1]) - } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `delegate` message `tabBar(_:willEndCustomizing:changed:)`. - public var willEndCustomizing: ControlEvent<([UITabBarItem], Bool)> { - let source = delegate.methodInvoked(#selector(UITabBarDelegate.tabBar(_:willEndCustomizing:changed:))) - .map { (a: [Any]) -> (([UITabBarItem], Bool)) in - let items = try castOrThrow([UITabBarItem].self, a[1]) - let changed = try castOrThrow(Bool.self, a[2]) - return (items, changed) - } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `delegate` message `tabBar(_:didEndCustomizing:changed:)`. - public var didEndCustomizing: ControlEvent<([UITabBarItem], Bool)> { - let source = delegate.methodInvoked(#selector(UITabBarDelegate.tabBar(_:didEndCustomizing:changed:))) - .map { (a: [Any]) -> (([UITabBarItem], Bool)) in - let items = try castOrThrow([UITabBarItem].self, a[1]) - let changed = try castOrThrow(Bool.self, a[2]) - return (items, changed) - } - - return ControlEvent(events: source) - } - -} -#endif - -/** - iOS and tvOS - */ - -extension Reactive where Base: UITabBar { - /// Reactive wrapper for `delegate`. - /// - /// For more information take a look at `DelegateProxyType` protocol documentation. - public var delegate: DelegateProxy { - RxTabBarDelegateProxy.proxy(for: base) - } - - /// Reactive wrapper for `delegate` message `tabBar(_:didSelect:)`. - public var didSelectItem: ControlEvent { - let source = delegate.methodInvoked(#selector(UITabBarDelegate.tabBar(_:didSelect:))) - .map { a in - return try castOrThrow(UITabBarItem.self, a[1]) - } - - return ControlEvent(events: source) - } - -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/UITabBarController+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/UITabBarController+Rx.swift deleted file mode 100644 index 4b48e8e..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/UITabBarController+Rx.swift +++ /dev/null @@ -1,79 +0,0 @@ -// -// UITabBarController+Rx.swift -// RxCocoa -// -// Created by Yusuke Kita on 2016/12/07. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import UIKit -import RxSwift - -/** - iOS only - */ -#if os(iOS) -extension Reactive where Base: UITabBarController { - - /// Reactive wrapper for `delegate` message `tabBarController:willBeginCustomizing:`. - public var willBeginCustomizing: ControlEvent<[UIViewController]> { - let source = delegate.methodInvoked(#selector(UITabBarControllerDelegate.tabBarController(_:willBeginCustomizing:))) - .map { a in - return try castOrThrow([UIViewController].self, a[1]) - } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `delegate` message `tabBarController:willEndCustomizing:changed:`. - public var willEndCustomizing: ControlEvent<(viewControllers: [UIViewController], changed: Bool)> { - let source = delegate.methodInvoked(#selector(UITabBarControllerDelegate.tabBarController(_:willEndCustomizing:changed:))) - .map { (a: [Any]) -> (viewControllers: [UIViewController], changed: Bool) in - let viewControllers = try castOrThrow([UIViewController].self, a[1]) - let changed = try castOrThrow(Bool.self, a[2]) - return (viewControllers, changed) - } - - return ControlEvent(events: source) - } - - /// Reactive wrapper for `delegate` message `tabBarController:didEndCustomizing:changed:`. - public var didEndCustomizing: ControlEvent<(viewControllers: [UIViewController], changed: Bool)> { - let source = delegate.methodInvoked(#selector(UITabBarControllerDelegate.tabBarController(_:didEndCustomizing:changed:))) - .map { (a: [Any]) -> (viewControllers: [UIViewController], changed: Bool) in - let viewControllers = try castOrThrow([UIViewController].self, a[1]) - let changed = try castOrThrow(Bool.self, a[2]) - return (viewControllers, changed) - } - - return ControlEvent(events: source) - } -} -#endif - -/** - iOS and tvOS - */ - - extension Reactive where Base: UITabBarController { - /// Reactive wrapper for `delegate`. - /// - /// For more information take a look at `DelegateProxyType` protocol documentation. - public var delegate: DelegateProxy { - RxTabBarControllerDelegateProxy.proxy(for: base) - } - - /// Reactive wrapper for `delegate` message `tabBarController:didSelect:`. - public var didSelect: ControlEvent { - let source = delegate.methodInvoked(#selector(UITabBarControllerDelegate.tabBarController(_:didSelect:))) - .map { a in - return try castOrThrow(UIViewController.self, a[1]) - } - - return ControlEvent(events: source) - } -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/UITableView+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/UITableView+Rx.swift deleted file mode 100644 index f30197d..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/UITableView+Rx.swift +++ /dev/null @@ -1,429 +0,0 @@ -// -// UITableView+Rx.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 4/2/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import RxSwift -import UIKit - -// Items - -extension Reactive where Base: UITableView { - - /** - Binds sequences of elements to table view rows. - - - parameter source: Observable sequence of items. - - parameter cellFactory: Transform between sequence elements and view cells. - - returns: Disposable object that can be used to unbind. - - Example: - - let items = Observable.just([ - "First Item", - "Second Item", - "Third Item" - ]) - - items - .bind(to: tableView.rx.items) { (tableView, row, element) in - let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")! - cell.textLabel?.text = "\(element) @ row \(row)" - return cell - } - .disposed(by: disposeBag) - - */ - public func items - (_ source: Source) - -> (_ cellFactory: @escaping (UITableView, Int, Sequence.Element) -> UITableViewCell) - -> Disposable - where Source.Element == Sequence { - return { cellFactory in - let dataSource = RxTableViewReactiveArrayDataSourceSequenceWrapper(cellFactory: cellFactory) - return self.items(dataSource: dataSource)(source) - } - } - - /** - Binds sequences of elements to table view rows. - - - parameter cellIdentifier: Identifier used to dequeue cells. - - parameter source: Observable sequence of items. - - parameter configureCell: Transform between sequence elements and view cells. - - parameter cellType: Type of table view cell. - - returns: Disposable object that can be used to unbind. - - Example: - - let items = Observable.just([ - "First Item", - "Second Item", - "Third Item" - ]) - - items - .bind(to: tableView.rx.items(cellIdentifier: "Cell", cellType: UITableViewCell.self)) { (row, element, cell) in - cell.textLabel?.text = "\(element) @ row \(row)" - } - .disposed(by: disposeBag) - */ - public func items - (cellIdentifier: String, cellType: Cell.Type = Cell.self) - -> (_ source: Source) - -> (_ configureCell: @escaping (Int, Sequence.Element, Cell) -> Void) - -> Disposable - where Source.Element == Sequence { - return { source in - return { configureCell in - let dataSource = RxTableViewReactiveArrayDataSourceSequenceWrapper { tv, i, item in - let indexPath = IndexPath(item: i, section: 0) - let cell = tv.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! Cell - configureCell(i, item, cell) - return cell - } - return self.items(dataSource: dataSource)(source) - } - } - } - - - /** - Binds sequences of elements to table view rows using a custom reactive data used to perform the transformation. - This method will retain the data source for as long as the subscription isn't disposed (result `Disposable` - being disposed). - In case `source` observable sequence terminates successfully, the data source will present latest element - until the subscription isn't disposed. - - - parameter dataSource: Data source used to transform elements to view cells. - - parameter source: Observable sequence of items. - - returns: Disposable object that can be used to unbind. - */ - public func items< - DataSource: RxTableViewDataSourceType & UITableViewDataSource, - Source: ObservableType> - (dataSource: DataSource) - -> (_ source: Source) - -> Disposable - where DataSource.Element == Source.Element { - return { source in - // This is called for side effects only, and to make sure delegate proxy is in place when - // data source is being bound. - // This is needed because theoretically the data source subscription itself might - // call `self.rx.delegate`. If that happens, it might cause weird side effects since - // setting data source will set delegate, and UITableView might get into a weird state. - // Therefore it's better to set delegate proxy first, just to be sure. - _ = self.delegate - // Strong reference is needed because data source is in use until result subscription is disposed - return source.subscribeProxyDataSource(ofObject: self.base, dataSource: dataSource as UITableViewDataSource, retainDataSource: true) { [weak tableView = self.base] (_: RxTableViewDataSourceProxy, event) -> Void in - guard let tableView = tableView else { - return - } - dataSource.tableView(tableView, observedEvent: event) - } - } - } - -} - -extension Reactive where Base: UITableView { - /** - Reactive wrapper for `dataSource`. - - For more information take a look at `DelegateProxyType` protocol documentation. - */ - public var dataSource: DelegateProxy { - RxTableViewDataSourceProxy.proxy(for: base) - } - - /** - Installs data source as forwarding delegate on `rx.dataSource`. - Data source won't be retained. - - It enables using normal delegate mechanism with reactive delegate mechanism. - - - parameter dataSource: Data source object. - - returns: Disposable object that can be used to unbind the data source. - */ - public func setDataSource(_ dataSource: UITableViewDataSource) - -> Disposable { - RxTableViewDataSourceProxy.installForwardDelegate(dataSource, retainDelegate: false, onProxyForObject: self.base) - } - - // events - - /** - Reactive wrapper for `delegate` message `tableView:didSelectRowAtIndexPath:`. - */ - public var itemSelected: ControlEvent { - let source = self.delegate.methodInvoked(#selector(UITableViewDelegate.tableView(_:didSelectRowAt:))) - .map { a in - return try castOrThrow(IndexPath.self, a[1]) - } - - return ControlEvent(events: source) - } - - /** - Reactive wrapper for `delegate` message `tableView:didDeselectRowAtIndexPath:`. - */ - public var itemDeselected: ControlEvent { - let source = self.delegate.methodInvoked(#selector(UITableViewDelegate.tableView(_:didDeselectRowAt:))) - .map { a in - return try castOrThrow(IndexPath.self, a[1]) - } - - return ControlEvent(events: source) - } - - /** - Reactive wrapper for `delegate` message `tableView:didHighlightRowAt:`. - */ - public var itemHighlighted: ControlEvent { - let source = self.delegate.methodInvoked(#selector(UITableViewDelegate.tableView(_:didHighlightRowAt:))) - .map { a in - return try castOrThrow(IndexPath.self, a[1]) - } - - return ControlEvent(events: source) - } - - /** - Reactive wrapper for `delegate` message `tableView:didUnhighlightRowAt:`. - */ - public var itemUnhighlighted: ControlEvent { - let source = self.delegate.methodInvoked(#selector(UITableViewDelegate.tableView(_:didUnhighlightRowAt:))) - .map { a in - return try castOrThrow(IndexPath.self, a[1]) - } - - return ControlEvent(events: source) - } - - /** - Reactive wrapper for `delegate` message `tableView:accessoryButtonTappedForRowWithIndexPath:`. - */ - public var itemAccessoryButtonTapped: ControlEvent { - let source: Observable = self.delegate.methodInvoked(#selector(UITableViewDelegate.tableView(_:accessoryButtonTappedForRowWith:))) - .map { a in - return try castOrThrow(IndexPath.self, a[1]) - } - - return ControlEvent(events: source) - } - - /** - Reactive wrapper for `delegate` message `tableView:commitEditingStyle:forRowAtIndexPath:`. - */ - public var itemInserted: ControlEvent { - let source = self.dataSource.methodInvoked(#selector(UITableViewDataSource.tableView(_:commit:forRowAt:))) - .filter { a in - return UITableViewCell.EditingStyle(rawValue: (try castOrThrow(NSNumber.self, a[1])).intValue) == .insert - } - .map { a in - return (try castOrThrow(IndexPath.self, a[2])) - } - - return ControlEvent(events: source) - } - - /** - Reactive wrapper for `delegate` message `tableView:commitEditingStyle:forRowAtIndexPath:`. - */ - public var itemDeleted: ControlEvent { - let source = self.dataSource.methodInvoked(#selector(UITableViewDataSource.tableView(_:commit:forRowAt:))) - .filter { a in - return UITableViewCell.EditingStyle(rawValue: (try castOrThrow(NSNumber.self, a[1])).intValue) == .delete - } - .map { a in - return try castOrThrow(IndexPath.self, a[2]) - } - - return ControlEvent(events: source) - } - - /** - Reactive wrapper for `delegate` message `tableView:moveRowAtIndexPath:toIndexPath:`. - */ - public var itemMoved: ControlEvent { - let source: Observable = self.dataSource.methodInvoked(#selector(UITableViewDataSource.tableView(_:moveRowAt:to:))) - .map { a in - return (try castOrThrow(IndexPath.self, a[1]), try castOrThrow(IndexPath.self, a[2])) - } - - return ControlEvent(events: source) - } - - /** - Reactive wrapper for `delegate` message `tableView:willDisplayCell:forRowAtIndexPath:`. - */ - public var willDisplayCell: ControlEvent { - let source: Observable = self.delegate.methodInvoked(#selector(UITableViewDelegate.tableView(_:willDisplay:forRowAt:))) - .map { a in - return (try castOrThrow(UITableViewCell.self, a[1]), try castOrThrow(IndexPath.self, a[2])) - } - - return ControlEvent(events: source) - } - - /** - Reactive wrapper for `delegate` message `tableView:didEndDisplayingCell:forRowAtIndexPath:`. - */ - public var didEndDisplayingCell: ControlEvent { - let source: Observable = self.delegate.methodInvoked(#selector(UITableViewDelegate.tableView(_:didEndDisplaying:forRowAt:))) - .map { a in - return (try castOrThrow(UITableViewCell.self, a[1]), try castOrThrow(IndexPath.self, a[2])) - } - - return ControlEvent(events: source) - } - - /** - Reactive wrapper for `delegate` message `tableView:didSelectRowAtIndexPath:`. - - It can be only used when one of the `rx.itemsWith*` methods is used to bind observable sequence, - or any other data source conforming to `SectionedViewDataSourceType` protocol. - - ``` - tableView.rx.modelSelected(MyModel.self) - .map { ... - ``` - */ - public func modelSelected(_ modelType: T.Type) -> ControlEvent { - let source: Observable = self.itemSelected.flatMap { [weak view = self.base as UITableView] indexPath -> Observable in - guard let view = view else { - return Observable.empty() - } - - return Observable.just(try view.rx.model(at: indexPath)) - } - - return ControlEvent(events: source) - } - - /** - Reactive wrapper for `delegate` message `tableView:didDeselectRowAtIndexPath:`. - - It can be only used when one of the `rx.itemsWith*` methods is used to bind observable sequence, - or any other data source conforming to `SectionedViewDataSourceType` protocol. - - ``` - tableView.rx.modelDeselected(MyModel.self) - .map { ... - ``` - */ - public func modelDeselected(_ modelType: T.Type) -> ControlEvent { - let source: Observable = self.itemDeselected.flatMap { [weak view = self.base as UITableView] indexPath -> Observable in - guard let view = view else { - return Observable.empty() - } - - return Observable.just(try view.rx.model(at: indexPath)) - } - - return ControlEvent(events: source) - } - - /** - Reactive wrapper for `delegate` message `tableView:commitEditingStyle:forRowAtIndexPath:`. - - It can be only used when one of the `rx.itemsWith*` methods is used to bind observable sequence, - or any other data source conforming to `SectionedViewDataSourceType` protocol. - - ``` - tableView.rx.modelDeleted(MyModel.self) - .map { ... - ``` - */ - public func modelDeleted(_ modelType: T.Type) -> ControlEvent { - let source: Observable = self.itemDeleted.flatMap { [weak view = self.base as UITableView] indexPath -> Observable in - guard let view = view else { - return Observable.empty() - } - - return Observable.just(try view.rx.model(at: indexPath)) - } - - return ControlEvent(events: source) - } - - /** - Synchronous helper method for retrieving a model at indexPath through a reactive data source. - */ - public func model(at indexPath: IndexPath) throws -> T { - let dataSource: SectionedViewDataSourceType = castOrFatalError(self.dataSource.forwardToDelegate(), message: "This method only works in case one of the `rx.items*` methods was used.") - - let element = try dataSource.model(at: indexPath) - - return castOrFatalError(element) - } -} - -@available(iOS 10.0, tvOS 10.0, *) -extension Reactive where Base: UITableView { - - /// Reactive wrapper for `prefetchDataSource`. - /// - /// For more information take a look at `DelegateProxyType` protocol documentation. - public var prefetchDataSource: DelegateProxy { - RxTableViewDataSourcePrefetchingProxy.proxy(for: base) - } - - /** - Installs prefetch data source as forwarding delegate on `rx.prefetchDataSource`. - Prefetch data source won't be retained. - - It enables using normal delegate mechanism with reactive delegate mechanism. - - - parameter prefetchDataSource: Prefetch data source object. - - returns: Disposable object that can be used to unbind the data source. - */ - public func setPrefetchDataSource(_ prefetchDataSource: UITableViewDataSourcePrefetching) - -> Disposable { - return RxTableViewDataSourcePrefetchingProxy.installForwardDelegate(prefetchDataSource, retainDelegate: false, onProxyForObject: self.base) - } - - /// Reactive wrapper for `prefetchDataSource` message `tableView(_:prefetchRowsAt:)`. - public var prefetchRows: ControlEvent<[IndexPath]> { - let source = RxTableViewDataSourcePrefetchingProxy.proxy(for: base).prefetchRowsPublishSubject - return ControlEvent(events: source) - } - - /// Reactive wrapper for `prefetchDataSource` message `tableView(_:cancelPrefetchingForRowsAt:)`. - public var cancelPrefetchingForRows: ControlEvent<[IndexPath]> { - let source = prefetchDataSource.methodInvoked(#selector(UITableViewDataSourcePrefetching.tableView(_:cancelPrefetchingForRowsAt:))) - .map { a in - return try castOrThrow(Array.self, a[1]) - } - - return ControlEvent(events: source) - } - -} -#endif - -#if os(tvOS) - - extension Reactive where Base: UITableView { - - /** - Reactive wrapper for `delegate` message `tableView:didUpdateFocusInContext:withAnimationCoordinator:`. - */ - public var didUpdateFocusInContextWithAnimationCoordinator: ControlEvent<(context: UITableViewFocusUpdateContext, animationCoordinator: UIFocusAnimationCoordinator)> { - - let source = delegate.methodInvoked(#selector(UITableViewDelegate.tableView(_:didUpdateFocusIn:with:))) - .map { a -> (context: UITableViewFocusUpdateContext, animationCoordinator: UIFocusAnimationCoordinator) in - let context = try castOrThrow(UITableViewFocusUpdateContext.self, a[1]) - let animationCoordinator = try castOrThrow(UIFocusAnimationCoordinator.self, a[2]) - return (context: context, animationCoordinator: animationCoordinator) - } - - return ControlEvent(events: source) - } - } -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/UITextField+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/UITextField+Rx.swift deleted file mode 100644 index 46e0e48..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/UITextField+Rx.swift +++ /dev/null @@ -1,55 +0,0 @@ -// -// UITextField+Rx.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 2/21/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import RxSwift -import UIKit - -extension Reactive where Base: UITextField { - /// Reactive wrapper for `text` property. - public var text: ControlProperty { - value - } - - /// Reactive wrapper for `text` property. - public var value: ControlProperty { - return base.rx.controlPropertyWithDefaultEvents( - getter: { textField in - textField.text - }, - setter: { textField, value in - // This check is important because setting text value always clears control state - // including marked text selection which is important for proper input - // when IME input method is used. - if textField.text != value { - textField.text = value - } - } - ) - } - - /// Bindable sink for `attributedText` property. - public var attributedText: ControlProperty { - return base.rx.controlPropertyWithDefaultEvents( - getter: { textField in - textField.attributedText - }, - setter: { textField, value in - // This check is important because setting text value always clears control state - // including marked text selection which is important for proper input - // when IME input method is used. - if textField.attributedText != value { - textField.attributedText = value - } - } - ) - } -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/UITextView+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/UITextView+Rx.swift deleted file mode 100644 index 3395d9b..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/UITextView+Rx.swift +++ /dev/null @@ -1,125 +0,0 @@ -// -// UITextView+Rx.swift -// RxCocoa -// -// Created by Yuta ToKoRo on 7/19/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(tvOS) - -import UIKit -import RxSwift - -extension Reactive where Base: UITextView { - /// Reactive wrapper for `text` property - public var text: ControlProperty { - value - } - - /// Reactive wrapper for `text` property. - public var value: ControlProperty { - let source: Observable = Observable.deferred { [weak textView = self.base] in - let text = textView?.text - - let textChanged = textView?.textStorage - // This project uses text storage notifications because - // that's the only way to catch autocorrect changes - // in all cases. Other suggestions are welcome. - .rx.didProcessEditingRangeChangeInLength - // This observe on is here because text storage - // will emit event while process is not completely done, - // so rebinding a value will cause an exception to be thrown. - .observe(on:MainScheduler.asyncInstance) - .map { _ in - return textView?.textStorage.string - } - ?? Observable.empty() - - return textChanged - .startWith(text) - } - - let bindingObserver = Binder(self.base) { (textView, text: String?) in - // This check is important because setting text value always clears control state - // including marked text selection which is important for proper input - // when IME input method is used. - if textView.text != text { - textView.text = text - } - } - - return ControlProperty(values: source, valueSink: bindingObserver) - } - - - /// Reactive wrapper for `attributedText` property. - public var attributedText: ControlProperty { - let source: Observable = Observable.deferred { [weak textView = self.base] in - let attributedText = textView?.attributedText - - let textChanged: Observable = textView?.textStorage - // This project uses text storage notifications because - // that's the only way to catch autocorrect changes - // in all cases. Other suggestions are welcome. - .rx.didProcessEditingRangeChangeInLength - // This observe on is here because attributedText storage - // will emit event while process is not completely done, - // so rebinding a value will cause an exception to be thrown. - .observe(on:MainScheduler.asyncInstance) - .map { _ in - return textView?.attributedText - } - ?? Observable.empty() - - return textChanged - .startWith(attributedText) - } - - let bindingObserver = Binder(self.base) { (textView, attributedText: NSAttributedString?) in - // This check is important because setting text value always clears control state - // including marked text selection which is important for proper input - // when IME input method is used. - if textView.attributedText != attributedText { - textView.attributedText = attributedText - } - } - - return ControlProperty(values: source, valueSink: bindingObserver) - } - - /// Reactive wrapper for `delegate` message. - public var didBeginEditing: ControlEvent<()> { - return ControlEvent<()>(events: self.delegate.methodInvoked(#selector(UITextViewDelegate.textViewDidBeginEditing(_:))) - .map { _ in - return () - }) - } - - /// Reactive wrapper for `delegate` message. - public var didEndEditing: ControlEvent<()> { - return ControlEvent<()>(events: self.delegate.methodInvoked(#selector(UITextViewDelegate.textViewDidEndEditing(_:))) - .map { _ in - return () - }) - } - - /// Reactive wrapper for `delegate` message. - public var didChange: ControlEvent<()> { - return ControlEvent<()>(events: self.delegate.methodInvoked(#selector(UITextViewDelegate.textViewDidChange(_:))) - .map { _ in - return () - }) - } - - /// Reactive wrapper for `delegate` message. - public var didChangeSelection: ControlEvent<()> { - return ControlEvent<()>(events: self.delegate.methodInvoked(#selector(UITextViewDelegate.textViewDidChangeSelection(_:))) - .map { _ in - return () - }) - } - -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/iOS/WKWebView+Rx.swift b/Pods/RxCocoa/RxCocoa/iOS/WKWebView+Rx.swift deleted file mode 100644 index b3b4d84..0000000 --- a/Pods/RxCocoa/RxCocoa/iOS/WKWebView+Rx.swift +++ /dev/null @@ -1,57 +0,0 @@ -// -// WKWebView+Rx.swift -// RxCocoa -// -// Created by Giuseppe Lanza on 14/02/2020. -// Copyright © 2020 Krunoslav Zaher. All rights reserved. -// - -#if os(iOS) || os(macOS) - -import RxSwift -import WebKit - -@available(iOS 8.0, OSX 10.10, OSXApplicationExtension 10.10, *) -extension Reactive where Base: WKWebView { - - /// Reactive wrapper for `navigationDelegate`. - /// For more information take a look at `DelegateProxyType` protocol documentation. - public var navigationDelegate: DelegateProxy { - RxWKNavigationDelegateProxy.proxy(for: base) - } - - /// Reactive wrapper for `navigationDelegate` message. - public var didCommit: Observable { - navigationDelegate - .methodInvoked(#selector(WKNavigationDelegate.webView(_:didCommit:))) - .map { a in try castOrThrow(WKNavigation.self, a[1]) } - } - - /// Reactive wrapper for `navigationDelegate` message. - public var didStartLoad: Observable { - navigationDelegate - .methodInvoked(#selector(WKNavigationDelegate.webView(_:didStartProvisionalNavigation:))) - .map { a in try castOrThrow(WKNavigation.self, a[1]) } - } - - /// Reactive wrapper for `navigationDelegate` message. - public var didFinishLoad: Observable { - navigationDelegate - .methodInvoked(#selector(WKNavigationDelegate.webView(_:didFinish:))) - .map { a in try castOrThrow(WKNavigation.self, a[1]) } - } - - /// Reactive wrapper for `navigationDelegate` message. - public var didFailLoad: Observable<(WKNavigation, Error)> { - navigationDelegate - .methodInvoked(#selector(WKNavigationDelegate.webView(_:didFail:withError:))) - .map { a in - ( - try castOrThrow(WKNavigation.self, a[1]), - try castOrThrow(Error.self, a[2]) - ) - } - } -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/macOS/NSButton+Rx.swift b/Pods/RxCocoa/RxCocoa/macOS/NSButton+Rx.swift deleted file mode 100644 index 7c22361..0000000 --- a/Pods/RxCocoa/RxCocoa/macOS/NSButton+Rx.swift +++ /dev/null @@ -1,33 +0,0 @@ -// -// NSButton+Rx.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 5/17/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(macOS) - -import RxSwift -import Cocoa - -extension Reactive where Base: NSButton { - - /// Reactive wrapper for control event. - public var tap: ControlEvent { - self.controlEvent - } - - /// Reactive wrapper for `state` property`. - public var state: ControlProperty { - return self.base.rx.controlProperty( - getter: { control in - return control.state - }, setter: { (control: NSButton, state: NSControl.StateValue) in - control.state = state - } - ) - } -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/macOS/NSControl+Rx.swift b/Pods/RxCocoa/RxCocoa/macOS/NSControl+Rx.swift deleted file mode 100644 index 534f40c..0000000 --- a/Pods/RxCocoa/RxCocoa/macOS/NSControl+Rx.swift +++ /dev/null @@ -1,87 +0,0 @@ -// -// NSControl+Rx.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 5/31/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(macOS) - -import Cocoa -import RxSwift - -private var rx_value_key: UInt8 = 0 -private var rx_control_events_key: UInt8 = 0 - -extension Reactive where Base: NSControl { - - /// Reactive wrapper for control event. - public var controlEvent: ControlEvent<()> { - MainScheduler.ensureRunningOnMainThread() - - let source = self.lazyInstanceObservable(&rx_control_events_key) { () -> Observable in - Observable.create { [weak control = self.base] observer in - MainScheduler.ensureRunningOnMainThread() - - guard let control = control else { - observer.on(.completed) - return Disposables.create() - } - - let observer = ControlTarget(control: control) { _ in - observer.on(.next(())) - } - - return observer - } - .take(until: self.deallocated) - .share() - } - - return ControlEvent(events: source) - } - - /// Creates a `ControlProperty` that is triggered by target/action pattern value updates. - /// - /// - parameter getter: Property value getter. - /// - parameter setter: Property value setter. - public func controlProperty( - getter: @escaping (Base) -> T, - setter: @escaping (Base, T) -> Void - ) -> ControlProperty { - MainScheduler.ensureRunningOnMainThread() - - let source = self.base.rx.lazyInstanceObservable(&rx_value_key) { () -> Observable<()> in - return Observable.create { [weak weakControl = self.base] (observer: AnyObserver<()>) in - guard let control = weakControl else { - observer.on(.completed) - return Disposables.create() - } - - observer.on(.next(())) - - let observer = ControlTarget(control: control) { _ in - if weakControl != nil { - observer.on(.next(())) - } - } - - return observer - } - .take(until: self.deallocated) - .share(replay: 1, scope: .whileConnected) - } - .flatMap { [weak base] _ -> Observable in - guard let control = base else { return Observable.empty() } - return Observable.just(getter(control)) - } - - let bindingObserver = Binder(self.base, binding: setter) - - return ControlProperty(values: source, valueSink: bindingObserver) - } -} - - -#endif diff --git a/Pods/RxCocoa/RxCocoa/macOS/NSSlider+Rx.swift b/Pods/RxCocoa/RxCocoa/macOS/NSSlider+Rx.swift deleted file mode 100644 index 2e5b19a..0000000 --- a/Pods/RxCocoa/RxCocoa/macOS/NSSlider+Rx.swift +++ /dev/null @@ -1,30 +0,0 @@ -// -// NSSlider+Rx.swift -// RxCocoa -// -// Created by Junior B. on 24/05/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(macOS) - -import RxSwift -import Cocoa - -extension Reactive where Base: NSSlider { - - /// Reactive wrapper for `value` property. - public var value: ControlProperty { - return self.base.rx.controlProperty( - getter: { control -> Double in - return control.doubleValue - }, - setter: { control, value in - control.doubleValue = value - } - ) - } - -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/macOS/NSTextField+Rx.swift b/Pods/RxCocoa/RxCocoa/macOS/NSTextField+Rx.swift deleted file mode 100644 index ce69f9e..0000000 --- a/Pods/RxCocoa/RxCocoa/macOS/NSTextField+Rx.swift +++ /dev/null @@ -1,87 +0,0 @@ -// -// NSTextField+Rx.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 5/17/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(macOS) - -import Cocoa -import RxSwift - -/// Delegate proxy for `NSTextField`. -/// -/// For more information take a look at `DelegateProxyType`. -open class RxTextFieldDelegateProxy - : DelegateProxy - , DelegateProxyType - , NSTextFieldDelegate { - - /// Typed parent object. - public weak private(set) var textField: NSTextField? - - /// Initializes `RxTextFieldDelegateProxy` - /// - /// - parameter textField: Parent object for delegate proxy. - init(textField: NSTextField) { - self.textField = textField - super.init(parentObject: textField, delegateProxy: RxTextFieldDelegateProxy.self) - } - - public static func registerKnownImplementations() { - self.register { RxTextFieldDelegateProxy(textField: $0) } - } - - fileprivate let textSubject = PublishSubject() - - // MARK: Delegate methods - open func controlTextDidChange(_ notification: Notification) { - let textField: NSTextField = castOrFatalError(notification.object) - let nextValue = textField.stringValue - self.textSubject.on(.next(nextValue)) - _forwardToDelegate?.controlTextDidChange?(notification) - } - - // MARK: Delegate proxy methods - - /// For more information take a look at `DelegateProxyType`. - open class func currentDelegate(for object: ParentObject) -> NSTextFieldDelegate? { - object.delegate - } - - /// For more information take a look at `DelegateProxyType`. - open class func setCurrentDelegate(_ delegate: NSTextFieldDelegate?, to object: ParentObject) { - object.delegate = delegate - } - -} - -extension Reactive where Base: NSTextField { - - /// Reactive wrapper for `delegate`. - /// - /// For more information take a look at `DelegateProxyType` protocol documentation. - public var delegate: DelegateProxy { - RxTextFieldDelegateProxy.proxy(for: self.base) - } - - /// Reactive wrapper for `text` property. - public var text: ControlProperty { - let delegate = RxTextFieldDelegateProxy.proxy(for: self.base) - - let source = Observable.deferred { [weak textField = self.base] in - delegate.textSubject.startWith(textField?.stringValue) - }.take(until: self.deallocated) - - let observer = Binder(self.base) { (control, value: String?) in - control.stringValue = value ?? "" - } - - return ControlProperty(values: source, valueSink: observer.asObserver()) - } - -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/macOS/NSTextView+Rx.swift b/Pods/RxCocoa/RxCocoa/macOS/NSTextView+Rx.swift deleted file mode 100644 index c3134e4..0000000 --- a/Pods/RxCocoa/RxCocoa/macOS/NSTextView+Rx.swift +++ /dev/null @@ -1,94 +0,0 @@ -// -// NSTextView+Rx.swift -// RxCocoa -// -// Created by Cee on 8/5/18. -// Copyright © 2018 Krunoslav Zaher. All rights reserved. -// - -#if os(macOS) - -import Cocoa -import RxSwift - -/// Delegate proxy for `NSTextView`. -/// -/// For more information take a look at `DelegateProxyType`. -open class RxTextViewDelegateProxy: DelegateProxy, DelegateProxyType, NSTextViewDelegate { - - #if compiler(>=5.2) - /// Typed parent object. - /// - /// - note: Since Swift 5.2 and Xcode 11.4, Apple have suddenly - /// disallowed using `weak` for NSTextView. For more details - /// see this GitHub Issue: https://git.io/JvSRn - public private(set) var textView: NSTextView? - #else - /// Typed parent object. - public weak private(set) var textView: NSTextView? - #endif - - /// Initializes `RxTextViewDelegateProxy` - /// - /// - parameter textView: Parent object for delegate proxy. - init(textView: NSTextView) { - self.textView = textView - super.init(parentObject: textView, delegateProxy: RxTextViewDelegateProxy.self) - } - - public static func registerKnownImplementations() { - self.register { RxTextViewDelegateProxy(textView: $0) } - } - - fileprivate let textSubject = PublishSubject() - - // MARK: Delegate methods - - open func textDidChange(_ notification: Notification) { - let textView: NSTextView = castOrFatalError(notification.object) - let nextValue = textView.string - self.textSubject.on(.next(nextValue)) - self._forwardToDelegate?.textDidChange?(notification) - } - - // MARK: Delegate proxy methods - - /// For more information take a look at `DelegateProxyType`. - open class func currentDelegate(for object: ParentObject) -> NSTextViewDelegate? { - object.delegate - } - - /// For more information take a look at `DelegateProxyType`. - open class func setCurrentDelegate(_ delegate: NSTextViewDelegate?, to object: ParentObject) { - object.delegate = delegate - } - -} - -extension Reactive where Base: NSTextView { - - /// Reactive wrapper for `delegate`. - /// - /// For more information take a look at `DelegateProxyType` protocol documentation. - public var delegate: DelegateProxy { - RxTextViewDelegateProxy.proxy(for: self.base) - } - - /// Reactive wrapper for `string` property. - public var string: ControlProperty { - let delegate = RxTextViewDelegateProxy.proxy(for: self.base) - - let source = Observable.deferred { [weak textView = self.base] in - delegate.textSubject.startWith(textView?.string ?? "") - }.take(until: self.deallocated) - - let observer = Binder(self.base) { control, value in - control.string = value - } - - return ControlProperty(values: source, valueSink: observer.asObserver()) - } - -} - -#endif diff --git a/Pods/RxCocoa/RxCocoa/macOS/NSView+Rx.swift b/Pods/RxCocoa/RxCocoa/macOS/NSView+Rx.swift deleted file mode 100644 index f4256d1..0000000 --- a/Pods/RxCocoa/RxCocoa/macOS/NSView+Rx.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// NSView+Rx.swift -// RxCocoa -// -// Created by Krunoslav Zaher on 12/6/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(macOS) - import Cocoa - import RxSwift - - extension Reactive where Base: NSView { - /// Bindable sink for `alphaValue` property. - public var alpha: Binder { - return Binder(self.base) { view, value in - view.alphaValue = value - } - } - } -#endif diff --git a/Pods/RxRelay/LICENSE.md b/Pods/RxRelay/LICENSE.md deleted file mode 100644 index e32511b..0000000 --- a/Pods/RxRelay/LICENSE.md +++ /dev/null @@ -1,9 +0,0 @@ -**The MIT License** -**Copyright © 2015 Krunoslav Zaher, Shai Mishali** -**All rights reserved.** - -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. diff --git a/Pods/RxRelay/README.md b/Pods/RxRelay/README.md deleted file mode 100644 index a95d9e0..0000000 --- a/Pods/RxRelay/README.md +++ /dev/null @@ -1,254 +0,0 @@ -

-RxSwift Logo -
-
Build Status -Supported Platforms: iOS, macOS, tvOS, watchOS & Linux -
- - - -

- -Rx is a [generic abstraction of computation](https://youtu.be/looJcaeboBY) expressed through `Observable` interface, which lets you broadcast and subscribe to values and other events from an `Observable` stream. - -RxSwift is the Swift-specific implementation of the [Reactive Extensions](http://reactivex.io) standard. - -

RxSwift Observable Example of a price constantly changing and updating the app's UI

- -While this version aims to stay true to the original spirit and naming conventions of Rx, this projects also aims to provide a true Swift-first API for Rx APIs. - -Cross platform documentation can be found on [ReactiveX.io](http://reactivex.io/). - -Like other Rx implementation, RxSwift's intention is to enable easy composition of asynchronous operations and streams of data in the form of `Observable` objects and a suite of methods to transform and compose these pieces of asynchronous work. - -KVO observation, async operations, UI Events and other streams of data are all unified under [abstraction of sequence](Documentation/GettingStarted.md#observables-aka-sequences). This is the reason why Rx is so simple, elegant and powerful. - -## I came here because I want to ... - -###### ... understand - -* [why use rx?](Documentation/Why.md) -* [the basics, getting started with RxSwift](Documentation/GettingStarted.md) -* [traits](Documentation/Traits.md) - what are `Single`, `Completable`, `Maybe`, `Driver`, and `ControlProperty` ... and why do they exist? -* [testing](Documentation/UnitTests.md) -* [tips and common errors](Documentation/Tips.md) -* [debugging](Documentation/GettingStarted.md#debugging) -* [the math behind Rx](Documentation/MathBehindRx.md) -* [what are hot and cold observable sequences?](Documentation/HotAndColdObservables.md) - -###### ... install - -* Integrate RxSwift/RxCocoa with my app. [Installation Guide](#installation) - -###### ... hack around - -* with the example app. [Running Example App](Documentation/ExampleApp.md) -* with operators in playgrounds. [Playgrounds](Documentation/Playgrounds.md) - -###### ... interact - -* All of this is great, but it would be nice to talk with other people using RxSwift and exchange experiences.
[Join Slack Channel](http://slack.rxswift.org) -* Report a problem using the library. [Open an Issue With Bug Template](.github/ISSUE_TEMPLATE.md) -* Request a new feature. [Open an Issue With Feature Request Template](Documentation/NewFeatureRequestTemplate.md) -* Help out [Check out contribution guide](CONTRIBUTING.md) - -###### ... compare - -* [with Combine and ReactiveSwift](Documentation/ComparisonWithOtherLibraries.md). - -###### ... understand the structure - -RxSwift is as compositional as the asynchronous work it drives. The core unit is RxSwift itself, while other dependencies can be added for UI Work, testing, and more. - -It comprises five separate components depending on each other in the following way: - -```none -┌──────────────┐ ┌──────────────┐ -│ RxCocoa ├────▶ RxRelay │ -└───────┬──────┘ └──────┬───────┘ - │ │ -┌───────▼──────────────────▼───────┐ -│ RxSwift │ -└───────▲──────────────────▲───────┘ - │ │ -┌───────┴──────┐ ┌──────┴───────┐ -│ RxTest │ │ RxBlocking │ -└──────────────┘ └──────────────┘ -``` - -* **RxSwift**: The core of RxSwift, providing the Rx standard as (mostly) defined by [ReactiveX](https://reactivex.io). It has no other dependencies. -* **RxCocoa**: Provides Cocoa-specific capabilities for general iOS/macOS/watchOS & tvOS app development, such as Shared Sequences, Traits, and much more. It depends on both `RxSwift` and `RxRelay`. -* **RxRelay**: Provides `PublishRelay`, `BehaviorRelay` and `ReplayRelay`, three [simple wrappers around Subjects](https://github.com/ReactiveX/RxSwift/blob/main/Documentation/Subjects.md#relays). It depends on `RxSwift`. -* **RxTest** and **RxBlocking**: Provides testing capabilities for Rx-based systems. It depends on `RxSwift`. - -## Usage - - - - - - - - - - - - - - - - - - - -
Here's an exampleIn Action
Define search for GitHub repositories ...
-let searchResults = searchBar.rx.text.orEmpty
-    .throttle(.milliseconds(300), scheduler: MainScheduler.instance)
-    .distinctUntilChanged()
-    .flatMapLatest { query -> Observable<[Repository]> in
-        if query.isEmpty {
-            return .just([])
-        }
-        return searchGitHub(query)
-            .catchAndReturn([])
-    }
-    .observe(on: MainScheduler.instance)
... then bind the results to your tableview
-searchResults
-    .bind(to: tableView.rx.items(cellIdentifier: "Cell")) {
-        (index, repository: Repository, cell) in
-        cell.textLabel?.text = repository.name
-        cell.detailTextLabel?.text = repository.url
-    }
-    .disposed(by: disposeBag)
- - -## Requirements - -* Xcode 12.x -* Swift 5.x - -For Xcode 11 and below, [use RxSwift 5.x](https://github.com/ReactiveX/RxSwift/releases/tag/5.1.1). - -## Installation - -RxSwift doesn't contain any external dependencies. - -These are currently the supported installation options: - -### Manual - -Open Rx.xcworkspace, choose `RxExample` and hit run. This method will build everything and run the sample app - -### [CocoaPods](https://guides.cocoapods.org/using/using-cocoapods.html) - -```ruby -# Podfile -use_frameworks! - -target 'YOUR_TARGET_NAME' do - pod 'RxSwift', '6.5.0' - pod 'RxCocoa', '6.5.0' -end - -# RxTest and RxBlocking make the most sense in the context of unit/integration tests -target 'YOUR_TESTING_TARGET' do - pod 'RxBlocking', '6.5.0' - pod 'RxTest', '6.5.0' -end -``` - -Replace `YOUR_TARGET_NAME` and then, in the `Podfile` directory, type: - -```bash -$ pod install -``` - -### XCFrameworks - -Each release starting with RxSwift 6 includes `*.xcframework` framework binaries. - -Simply drag the needed framework binaries to your **Frameworks, Libraries, and Embedded Content** section under your target's **General** tab. - -> **Note**: If you're using `RxCocoa`, be sure to also drag **RxCocoaRuntime.xcframework** before importing `RxCocoa`. - -XCFrameworks instructions - -### [Carthage](https://github.com/Carthage/Carthage) - -Add this to `Cartfile` - -``` -github "ReactiveX/RxSwift" "6.5.0" -``` - -```bash -$ carthage update -``` - -#### Carthage as a Static Library - -Carthage defaults to building RxSwift as a Dynamic Library. - -If you wish to build RxSwift as a Static Library using Carthage you may use the script below to manually modify the framework type before building with Carthage: - -```bash -carthage update RxSwift --platform iOS --no-build -sed -i -e 's/MACH_O_TYPE = mh_dylib/MACH_O_TYPE = staticlib/g' Carthage/Checkouts/RxSwift/Rx.xcodeproj/project.pbxproj -carthage build RxSwift --platform iOS -``` - -### [Swift Package Manager](https://github.com/apple/swift-package-manager) - -> **Note**: There is a critical cross-dependency bug affecting many projects including RxSwift in Swift Package Manager. We've [filed a bug (SR-12303)](https://bugs.swift.org/browse/SR-12303) in early 2020 but have no answer yet. Your mileage may vary. A partial workaround can be found [here](https://github.com/ReactiveX/RxSwift/issues/2127#issuecomment-717830502). - -Create a `Package.swift` file. - -```swift -// swift-tools-version:5.0 - -import PackageDescription - -let package = Package( - name: "RxTestProject", - dependencies: [ - .package(url: "https://github.com/ReactiveX/RxSwift.git", .exact("6.5.0")) - ], - targets: [ - .target(name: "RxTestProject", dependencies: ["RxSwift", "RxCocoa"]) - ] -) -``` - -```bash -$ swift build -``` - -To build or test a module with RxTest dependency, set `TEST=1`. - -```bash -$ TEST=1 swift test -``` - -### Manually using git submodules - -* Add RxSwift as a submodule - -```bash -$ git submodule add git@github.com:ReactiveX/RxSwift.git -``` - -* Drag `Rx.xcodeproj` into Project Navigator -* Go to `Project > Targets > Build Phases > Link Binary With Libraries`, click `+` and select `RxSwift`, `RxCocoa` and `RxRelay` targets - -## References - -* [http://reactivex.io/](http://reactivex.io/) -* [Reactive Extensions GitHub (GitHub)](https://github.com/Reactive-Extensions) -* [RxSwift RayWenderlich.com Book](https://store.raywenderlich.com/products/rxswift-reactive-programming-with-swift) -* [RxSwift: Debunking the myth of hard (YouTube)](https://www.youtube.com/watch?v=GdvLP0ZAhhc) -* [Boxue.io RxSwift Online Course](https://boxueio.com/series/rxswift-101) (Chinese 🇨🇳) -* [Expert to Expert: Brian Beckman and Erik Meijer - Inside the .NET Reactive Framework (Rx) (video)](https://youtu.be/looJcaeboBY) -* [Reactive Programming Overview (Jafar Husain from Netflix)](https://youtu.be/-8Y1-lE6NSA) -* [Subject/Observer is Dual to Iterator (paper)](http://csl.stanford.edu/~christos/pldi2010.fit/meijer.duality.pdf) -* [Rx standard sequence operators visualized (visualization tool)](http://rxmarbles.com/) -* [Haskell](https://www.haskell.org/) diff --git a/Pods/RxRelay/RxRelay/BehaviorRelay.swift b/Pods/RxRelay/RxRelay/BehaviorRelay.swift deleted file mode 100644 index e02fc8f..0000000 --- a/Pods/RxRelay/RxRelay/BehaviorRelay.swift +++ /dev/null @@ -1,42 +0,0 @@ -// -// BehaviorRelay.swift -// RxRelay -// -// Created by Krunoslav Zaher on 10/7/17. -// Copyright © 2017 Krunoslav Zaher. All rights reserved. -// - -import RxSwift - -/// BehaviorRelay is a wrapper for `BehaviorSubject`. -/// -/// Unlike `BehaviorSubject` it can't terminate with error or completed. -public final class BehaviorRelay: ObservableType { - private let subject: BehaviorSubject - - /// Accepts `event` and emits it to subscribers - public func accept(_ event: Element) { - self.subject.onNext(event) - } - - /// Current value of behavior subject - public var value: Element { - // this try! is ok because subject can't error out or be disposed - return try! self.subject.value() - } - - /// Initializes behavior relay with initial value. - public init(value: Element) { - self.subject = BehaviorSubject(value: value) - } - - /// Subscribes observer - public func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element { - self.subject.subscribe(observer) - } - - /// - returns: Canonical interface for push style sequence - public func asObservable() -> Observable { - self.subject.asObservable() - } -} diff --git a/Pods/RxRelay/RxRelay/Observable+Bind.swift b/Pods/RxRelay/RxRelay/Observable+Bind.swift deleted file mode 100644 index 08c4a97..0000000 --- a/Pods/RxRelay/RxRelay/Observable+Bind.swift +++ /dev/null @@ -1,149 +0,0 @@ -// -// Observable+Bind.swift -// RxRelay -// -// Created by Shai Mishali on 09/04/2019. -// Copyright © 2019 Krunoslav Zaher. All rights reserved. -// - -import RxSwift - -extension ObservableType { - /** - Creates new subscription and sends elements to publish relay(s). - In case error occurs in debug mode, `fatalError` will be raised. - In case error occurs in release mode, `error` will be logged. - - parameter relays: Target publish relays for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer. - */ - public func bind(to relays: PublishRelay...) -> Disposable { - bind(to: relays) - } - - /** - Creates new subscription and sends elements to publish relay(s). - - In case error occurs in debug mode, `fatalError` will be raised. - In case error occurs in release mode, `error` will be logged. - - - parameter relays: Target publish relays for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer. - */ - public func bind(to relays: PublishRelay...) -> Disposable { - self.map { $0 as Element? }.bind(to: relays) - } - - /** - Creates new subscription and sends elements to publish relay(s). - In case error occurs in debug mode, `fatalError` will be raised. - In case error occurs in release mode, `error` will be logged. - - parameter relays: Target publish relays for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer. - */ - private func bind(to relays: [PublishRelay]) -> Disposable { - subscribe { e in - switch e { - case let .next(element): - relays.forEach { - $0.accept(element) - } - case let .error(error): - rxFatalErrorInDebug("Binding error to publish relay: \(error)") - case .completed: - break - } - } - } - - /** - Creates new subscription and sends elements to behavior relay(s). - In case error occurs in debug mode, `fatalError` will be raised. - In case error occurs in release mode, `error` will be logged. - - parameter relays: Target behavior relay for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer. - */ - public func bind(to relays: BehaviorRelay...) -> Disposable { - self.bind(to: relays) - } - - /** - Creates new subscription and sends elements to behavior relay(s). - - In case error occurs in debug mode, `fatalError` will be raised. - In case error occurs in release mode, `error` will be logged. - - - parameter relays: Target behavior relay for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer. - */ - public func bind(to relays: BehaviorRelay...) -> Disposable { - self.map { $0 as Element? }.bind(to: relays) - } - - /** - Creates new subscription and sends elements to behavior relay(s). - In case error occurs in debug mode, `fatalError` will be raised. - In case error occurs in release mode, `error` will be logged. - - parameter relays: Target behavior relay for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer. - */ - private func bind(to relays: [BehaviorRelay]) -> Disposable { - subscribe { e in - switch e { - case let .next(element): - relays.forEach { - $0.accept(element) - } - case let .error(error): - rxFatalErrorInDebug("Binding error to behavior relay: \(error)") - case .completed: - break - } - } - } - - /** - Creates new subscription and sends elements to replay relay(s). - In case error occurs in debug mode, `fatalError` will be raised. - In case error occurs in release mode, `error` will be logged. - - parameter relays: Target replay relay for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer. - */ - public func bind(to relays: ReplayRelay...) -> Disposable { - self.bind(to: relays) - } - - /** - Creates new subscription and sends elements to replay relay(s). - - In case error occurs in debug mode, `fatalError` will be raised. - In case error occurs in release mode, `error` will be logged. - - - parameter relays: Target replay relay for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer. - */ - public func bind(to relays: ReplayRelay...) -> Disposable { - self.map { $0 as Element? }.bind(to: relays) - } - - /** - Creates new subscription and sends elements to replay relay(s). - In case error occurs in debug mode, `fatalError` will be raised. - In case error occurs in release mode, `error` will be logged. - - parameter relays: Target replay relay for sequence elements. - - returns: Disposable object that can be used to unsubscribe the observer. - */ - private func bind(to relays: [ReplayRelay]) -> Disposable { - subscribe { e in - switch e { - case let .next(element): - relays.forEach { - $0.accept(element) - } - case let .error(error): - rxFatalErrorInDebug("Binding error to behavior relay: \(error)") - case .completed: - break - } - } - } -} diff --git a/Pods/RxRelay/RxRelay/PublishRelay.swift b/Pods/RxRelay/RxRelay/PublishRelay.swift deleted file mode 100644 index a9c8ac4..0000000 --- a/Pods/RxRelay/RxRelay/PublishRelay.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// PublishRelay.swift -// RxRelay -// -// Created by Krunoslav Zaher on 3/28/15. -// Copyright © 2017 Krunoslav Zaher. All rights reserved. -// - -import RxSwift - -/// PublishRelay is a wrapper for `PublishSubject`. -/// -/// Unlike `PublishSubject` it can't terminate with error or completed. -public final class PublishRelay: ObservableType { - private let subject: PublishSubject - - // Accepts `event` and emits it to subscribers - public func accept(_ event: Element) { - self.subject.onNext(event) - } - - /// Initializes with internal empty subject. - public init() { - self.subject = PublishSubject() - } - - /// Subscribes observer - public func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element { - self.subject.subscribe(observer) - } - - /// - returns: Canonical interface for push style sequence - public func asObservable() -> Observable { - self.subject.asObservable() - } -} diff --git a/Pods/RxRelay/RxRelay/ReplayRelay.swift b/Pods/RxRelay/RxRelay/ReplayRelay.swift deleted file mode 100644 index 3cc87cd..0000000 --- a/Pods/RxRelay/RxRelay/ReplayRelay.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// ReplayRelay.swift -// RxRelay -// -// Created by Zsolt Kovacs on 12/22/19. -// Copyright © 2019 Krunoslav Zaher. All rights reserved. -// - -import RxSwift - -/// ReplayRelay is a wrapper for `ReplaySubject`. -/// -/// Unlike `ReplaySubject` it can't terminate with an error or complete. -public final class ReplayRelay: ObservableType { - private let subject: ReplaySubject - - // Accepts `event` and emits it to subscribers - public func accept(_ event: Element) { - self.subject.onNext(event) - } - - private init(subject: ReplaySubject) { - self.subject = subject - } - - /// Creates new instance of `ReplayRelay` that replays at most `bufferSize` last elements sent to it. - /// - /// - parameter bufferSize: Maximal number of elements to replay to observers after subscription. - /// - returns: New instance of replay relay. - public static func create(bufferSize: Int) -> ReplayRelay { - ReplayRelay(subject: ReplaySubject.create(bufferSize: bufferSize)) - } - - /// Creates a new instance of `ReplayRelay` that buffers all the sent to it. - /// To avoid filling up memory, developer needs to make sure that the use case will only ever store a 'reasonable' - /// number of elements. - public static func createUnbound() -> ReplayRelay { - ReplayRelay(subject: ReplaySubject.createUnbounded()) - } - - /// Subscribes observer - public func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element { - self.subject.subscribe(observer) - } - - /// - returns: Canonical interface for push style sequence - public func asObservable() -> Observable { - self.subject.asObserver() - } -} diff --git a/Pods/RxRelay/RxRelay/Utils.swift b/Pods/RxRelay/RxRelay/Utils.swift deleted file mode 100644 index 5954fb9..0000000 --- a/Pods/RxRelay/RxRelay/Utils.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// Utils.swift -// RxRelay -// -// Created by Shai Mishali on 09/04/2019. -// Copyright © 2019 Krunoslav Zaher. All rights reserved. -// - -import Foundation - -func rxFatalErrorInDebug(_ lastMessage: @autoclosure () -> String, file: StaticString = #file, line: UInt = #line) { - #if DEBUG - fatalError(lastMessage(), file: file, line: line) - #else - print("\(file):\(line): \(lastMessage())") - #endif -} diff --git a/Pods/RxSwift/LICENSE.md b/Pods/RxSwift/LICENSE.md deleted file mode 100644 index e32511b..0000000 --- a/Pods/RxSwift/LICENSE.md +++ /dev/null @@ -1,9 +0,0 @@ -**The MIT License** -**Copyright © 2015 Krunoslav Zaher, Shai Mishali** -**All rights reserved.** - -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. diff --git a/Pods/RxSwift/Platform/AtomicInt.swift b/Pods/RxSwift/Platform/AtomicInt.swift deleted file mode 100644 index 98479fd..0000000 --- a/Pods/RxSwift/Platform/AtomicInt.swift +++ /dev/null @@ -1,71 +0,0 @@ -// -// AtomicInt.swift -// Platform -// -// Created by Krunoslav Zaher on 10/28/18. -// Copyright © 2018 Krunoslav Zaher. All rights reserved. -// - -import Foundation - -final class AtomicInt: NSLock { - fileprivate var value: Int32 - public init(_ value: Int32 = 0) { - self.value = value - } -} - -@discardableResult -@inline(__always) -func add(_ this: AtomicInt, _ value: Int32) -> Int32 { - this.lock() - let oldValue = this.value - this.value += value - this.unlock() - return oldValue -} - -@discardableResult -@inline(__always) -func sub(_ this: AtomicInt, _ value: Int32) -> Int32 { - this.lock() - let oldValue = this.value - this.value -= value - this.unlock() - return oldValue -} - -@discardableResult -@inline(__always) -func fetchOr(_ this: AtomicInt, _ mask: Int32) -> Int32 { - this.lock() - let oldValue = this.value - this.value |= mask - this.unlock() - return oldValue -} - -@inline(__always) -func load(_ this: AtomicInt) -> Int32 { - this.lock() - let oldValue = this.value - this.unlock() - return oldValue -} - -@discardableResult -@inline(__always) -func increment(_ this: AtomicInt) -> Int32 { - add(this, 1) -} - -@discardableResult -@inline(__always) -func decrement(_ this: AtomicInt) -> Int32 { - sub(this, 1) -} - -@inline(__always) -func isFlagSet(_ this: AtomicInt, _ mask: Int32) -> Bool { - (load(this) & mask) != 0 -} diff --git a/Pods/RxSwift/Platform/DataStructures/Bag.swift b/Pods/RxSwift/Platform/DataStructures/Bag.swift deleted file mode 100644 index 5720a3b..0000000 --- a/Pods/RxSwift/Platform/DataStructures/Bag.swift +++ /dev/null @@ -1,181 +0,0 @@ -// -// Bag.swift -// Platform -// -// Created by Krunoslav Zaher on 2/28/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import Swift - -let arrayDictionaryMaxSize = 30 - -struct BagKey { - /** - Unique identifier for object added to `Bag`. - - It's underlying type is UInt64. If we assume there in an idealized CPU that works at 4GHz, - it would take ~150 years of continuous running time for it to overflow. - */ - fileprivate let rawValue: UInt64 -} - -/** -Data structure that represents a bag of elements typed `T`. - -Single element can be stored multiple times. - -Time and space complexity of insertion and deletion is O(n). - -It is suitable for storing small number of elements. -*/ -struct Bag : CustomDebugStringConvertible { - /// Type of identifier for inserted elements. - typealias KeyType = BagKey - - typealias Entry = (key: BagKey, value: T) - - private var _nextKey: BagKey = BagKey(rawValue: 0) - - // data - - // first fill inline variables - var _key0: BagKey? - var _value0: T? - - // then fill "array dictionary" - var _pairs = ContiguousArray() - - // last is sparse dictionary - var _dictionary: [BagKey: T]? - - var _onlyFastPath = true - - /// Creates new empty `Bag`. - init() { - } - - /** - Inserts `value` into bag. - - - parameter element: Element to insert. - - returns: Key that can be used to remove element from bag. - */ - mutating func insert(_ element: T) -> BagKey { - let key = _nextKey - - _nextKey = BagKey(rawValue: _nextKey.rawValue &+ 1) - - if _key0 == nil { - _key0 = key - _value0 = element - return key - } - - _onlyFastPath = false - - if _dictionary != nil { - _dictionary![key] = element - return key - } - - if _pairs.count < arrayDictionaryMaxSize { - _pairs.append((key: key, value: element)) - return key - } - - _dictionary = [key: element] - - return key - } - - /// - returns: Number of elements in bag. - var count: Int { - let dictionaryCount: Int = _dictionary?.count ?? 0 - return (_value0 != nil ? 1 : 0) + _pairs.count + dictionaryCount - } - - /// Removes all elements from bag and clears capacity. - mutating func removeAll() { - _key0 = nil - _value0 = nil - - _pairs.removeAll(keepingCapacity: false) - _dictionary?.removeAll(keepingCapacity: false) - } - - /** - Removes element with a specific `key` from bag. - - - parameter key: Key that identifies element to remove from bag. - - returns: Element that bag contained, or nil in case element was already removed. - */ - mutating func removeKey(_ key: BagKey) -> T? { - if _key0 == key { - _key0 = nil - let value = _value0! - _value0 = nil - return value - } - - if let existingObject = _dictionary?.removeValue(forKey: key) { - return existingObject - } - - for i in 0 ..< _pairs.count where _pairs[i].key == key { - let value = _pairs[i].value - _pairs.remove(at: i) - return value - } - - return nil - } -} - -extension Bag { - /// A textual representation of `self`, suitable for debugging. - var debugDescription : String { - "\(self.count) elements in Bag" - } -} - -extension Bag { - /// Enumerates elements inside the bag. - /// - /// - parameter action: Enumeration closure. - func forEach(_ action: (T) -> Void) { - if _onlyFastPath { - if let value0 = _value0 { - action(value0) - } - return - } - - let value0 = _value0 - let dictionary = _dictionary - - if let value0 = value0 { - action(value0) - } - - for i in 0 ..< _pairs.count { - action(_pairs[i].value) - } - - if dictionary?.count ?? 0 > 0 { - for element in dictionary!.values { - action(element) - } - } - } -} - -extension BagKey: Hashable { - func hash(into hasher: inout Hasher) { - hasher.combine(rawValue) - } -} - -func ==(lhs: BagKey, rhs: BagKey) -> Bool { - lhs.rawValue == rhs.rawValue -} diff --git a/Pods/RxSwift/Platform/DataStructures/InfiniteSequence.swift b/Pods/RxSwift/Platform/DataStructures/InfiniteSequence.swift deleted file mode 100644 index 75d7bea..0000000 --- a/Pods/RxSwift/Platform/DataStructures/InfiniteSequence.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// InfiniteSequence.swift -// Platform -// -// Created by Krunoslav Zaher on 6/13/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/// Sequence that repeats `repeatedValue` infinite number of times. -struct InfiniteSequence : Sequence { - typealias Iterator = AnyIterator - - private let repeatedValue: Element - - init(repeatedValue: Element) { - self.repeatedValue = repeatedValue - } - - func makeIterator() -> Iterator { - let repeatedValue = self.repeatedValue - return AnyIterator { repeatedValue } - } -} diff --git a/Pods/RxSwift/Platform/DataStructures/PriorityQueue.swift b/Pods/RxSwift/Platform/DataStructures/PriorityQueue.swift deleted file mode 100644 index 9ed856b..0000000 --- a/Pods/RxSwift/Platform/DataStructures/PriorityQueue.swift +++ /dev/null @@ -1,111 +0,0 @@ -// -// PriorityQueue.swift -// Platform -// -// Created by Krunoslav Zaher on 12/27/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -struct PriorityQueue { - private let hasHigherPriority: (Element, Element) -> Bool - private let isEqual: (Element, Element) -> Bool - - private var elements = [Element]() - - init(hasHigherPriority: @escaping (Element, Element) -> Bool, isEqual: @escaping (Element, Element) -> Bool) { - self.hasHigherPriority = hasHigherPriority - self.isEqual = isEqual - } - - mutating func enqueue(_ element: Element) { - elements.append(element) - bubbleToHigherPriority(elements.count - 1) - } - - func peek() -> Element? { - elements.first - } - - var isEmpty: Bool { - elements.count == 0 - } - - mutating func dequeue() -> Element? { - guard let front = peek() else { - return nil - } - - removeAt(0) - - return front - } - - mutating func remove(_ element: Element) { - for i in 0 ..< elements.count { - if self.isEqual(elements[i], element) { - removeAt(i) - return - } - } - } - - private mutating func removeAt(_ index: Int) { - let removingLast = index == elements.count - 1 - if !removingLast { - elements.swapAt(index, elements.count - 1) - } - - _ = elements.popLast() - - if !removingLast { - bubbleToHigherPriority(index) - bubbleToLowerPriority(index) - } - } - - private mutating func bubbleToHigherPriority(_ initialUnbalancedIndex: Int) { - precondition(initialUnbalancedIndex >= 0) - precondition(initialUnbalancedIndex < elements.count) - - var unbalancedIndex = initialUnbalancedIndex - - while unbalancedIndex > 0 { - let parentIndex = (unbalancedIndex - 1) / 2 - guard self.hasHigherPriority(elements[unbalancedIndex], elements[parentIndex]) else { break } - elements.swapAt(unbalancedIndex, parentIndex) - unbalancedIndex = parentIndex - } - } - - private mutating func bubbleToLowerPriority(_ initialUnbalancedIndex: Int) { - precondition(initialUnbalancedIndex >= 0) - precondition(initialUnbalancedIndex < elements.count) - - var unbalancedIndex = initialUnbalancedIndex - while true { - let leftChildIndex = unbalancedIndex * 2 + 1 - let rightChildIndex = unbalancedIndex * 2 + 2 - - var highestPriorityIndex = unbalancedIndex - - if leftChildIndex < elements.count && self.hasHigherPriority(elements[leftChildIndex], elements[highestPriorityIndex]) { - highestPriorityIndex = leftChildIndex - } - - if rightChildIndex < elements.count && self.hasHigherPriority(elements[rightChildIndex], elements[highestPriorityIndex]) { - highestPriorityIndex = rightChildIndex - } - - guard highestPriorityIndex != unbalancedIndex else { break } - elements.swapAt(highestPriorityIndex, unbalancedIndex) - - unbalancedIndex = highestPriorityIndex - } - } -} - -extension PriorityQueue : CustomDebugStringConvertible { - var debugDescription: String { - elements.debugDescription - } -} diff --git a/Pods/RxSwift/Platform/DataStructures/Queue.swift b/Pods/RxSwift/Platform/DataStructures/Queue.swift deleted file mode 100644 index 625d473..0000000 --- a/Pods/RxSwift/Platform/DataStructures/Queue.swift +++ /dev/null @@ -1,148 +0,0 @@ -// -// Queue.swift -// Platform -// -// Created by Krunoslav Zaher on 3/21/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/** -Data structure that represents queue. - -Complexity of `enqueue`, `dequeue` is O(1) when number of operations is -averaged over N operations. - -Complexity of `peek` is O(1). -*/ -struct Queue: Sequence { - /// Type of generator. - typealias Generator = AnyIterator - - private let resizeFactor = 2 - - private var storage: ContiguousArray - private var innerCount = 0 - private var pushNextIndex = 0 - private let initialCapacity: Int - - /** - Creates new queue. - - - parameter capacity: Capacity of newly created queue. - */ - init(capacity: Int) { - initialCapacity = capacity - - storage = ContiguousArray(repeating: nil, count: capacity) - } - - private var dequeueIndex: Int { - let index = pushNextIndex - count - return index < 0 ? index + storage.count : index - } - - /// - returns: Is queue empty. - var isEmpty: Bool { count == 0 } - - /// - returns: Number of elements inside queue. - var count: Int { innerCount } - - /// - returns: Element in front of a list of elements to `dequeue`. - func peek() -> T { - precondition(count > 0) - - return storage[dequeueIndex]! - } - - mutating private func resizeTo(_ size: Int) { - var newStorage = ContiguousArray(repeating: nil, count: size) - - let count = self.count - - let dequeueIndex = self.dequeueIndex - let spaceToEndOfQueue = storage.count - dequeueIndex - - // first batch is from dequeue index to end of array - let countElementsInFirstBatch = Swift.min(count, spaceToEndOfQueue) - // second batch is wrapped from start of array to end of queue - let numberOfElementsInSecondBatch = count - countElementsInFirstBatch - - newStorage[0 ..< countElementsInFirstBatch] = storage[dequeueIndex ..< (dequeueIndex + countElementsInFirstBatch)] - newStorage[countElementsInFirstBatch ..< (countElementsInFirstBatch + numberOfElementsInSecondBatch)] = storage[0 ..< numberOfElementsInSecondBatch] - - self.innerCount = count - pushNextIndex = count - storage = newStorage - } - - /// Enqueues `element`. - /// - /// - parameter element: Element to enqueue. - mutating func enqueue(_ element: T) { - if count == storage.count { - resizeTo(Swift.max(storage.count, 1) * resizeFactor) - } - - storage[pushNextIndex] = element - pushNextIndex += 1 - innerCount += 1 - - if pushNextIndex >= storage.count { - pushNextIndex -= storage.count - } - } - - private mutating func dequeueElementOnly() -> T { - precondition(count > 0) - - let index = dequeueIndex - - defer { - storage[index] = nil - innerCount -= 1 - } - - return storage[index]! - } - - /// Dequeues element or throws an exception in case queue is empty. - /// - /// - returns: Dequeued element. - mutating func dequeue() -> T? { - if self.count == 0 { - return nil - } - - defer { - let downsizeLimit = storage.count / (resizeFactor * resizeFactor) - if count < downsizeLimit && downsizeLimit >= initialCapacity { - resizeTo(storage.count / resizeFactor) - } - } - - return dequeueElementOnly() - } - - /// - returns: Generator of contained elements. - func makeIterator() -> AnyIterator { - var i = dequeueIndex - var innerCount = count - - return AnyIterator { - if innerCount == 0 { - return nil - } - - defer { - innerCount -= 1 - i += 1 - } - - if i >= self.storage.count { - i -= self.storage.count - } - - return self.storage[i] - } - } -} diff --git a/Pods/RxSwift/Platform/DispatchQueue+Extensions.swift b/Pods/RxSwift/Platform/DispatchQueue+Extensions.swift deleted file mode 100644 index aaf24ca..0000000 --- a/Pods/RxSwift/Platform/DispatchQueue+Extensions.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// DispatchQueue+Extensions.swift -// Platform -// -// Created by Krunoslav Zaher on 10/22/16. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -import Dispatch - -extension DispatchQueue { - private static var token: DispatchSpecificKey<()> = { - let key = DispatchSpecificKey<()>() - DispatchQueue.main.setSpecific(key: key, value: ()) - return key - }() - - static var isMain: Bool { - DispatchQueue.getSpecific(key: token) != nil - } -} diff --git a/Pods/RxSwift/Platform/Platform.Darwin.swift b/Pods/RxSwift/Platform/Platform.Darwin.swift deleted file mode 100644 index eacc194..0000000 --- a/Pods/RxSwift/Platform/Platform.Darwin.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// Platform.Darwin.swift -// Platform -// -// Created by Krunoslav Zaher on 12/29/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) - - import Darwin - import Foundation - - extension Thread { - static func setThreadLocalStorageValue(_ value: T?, forKey key: NSCopying) { - let currentThread = Thread.current - let threadDictionary = currentThread.threadDictionary - - if let newValue = value { - threadDictionary[key] = newValue - } - else { - threadDictionary[key] = nil - } - } - - static func getThreadLocalStorageValueForKey(_ key: NSCopying) -> T? { - let currentThread = Thread.current - let threadDictionary = currentThread.threadDictionary - - return threadDictionary[key] as? T - } - } - -#endif diff --git a/Pods/RxSwift/Platform/Platform.Linux.swift b/Pods/RxSwift/Platform/Platform.Linux.swift deleted file mode 100644 index 52a3e3a..0000000 --- a/Pods/RxSwift/Platform/Platform.Linux.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// Platform.Linux.swift -// Platform -// -// Created by Krunoslav Zaher on 12/29/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(Linux) - - import Foundation - - extension Thread { - - static func setThreadLocalStorageValue(_ value: T?, forKey key: String) { - if let newValue = value { - Thread.current.threadDictionary[key] = newValue - } - else { - Thread.current.threadDictionary[key] = nil - } - } - - static func getThreadLocalStorageValueForKey(_ key: String) -> T? { - let currentThread = Thread.current - let threadDictionary = currentThread.threadDictionary - - return threadDictionary[key] as? T - } - } - -#endif diff --git a/Pods/RxSwift/Platform/RecursiveLock.swift b/Pods/RxSwift/Platform/RecursiveLock.swift deleted file mode 100644 index 10b9bbb..0000000 --- a/Pods/RxSwift/Platform/RecursiveLock.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// RecursiveLock.swift -// Platform -// -// Created by Krunoslav Zaher on 12/18/16. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -import Foundation - -#if TRACE_RESOURCES - class RecursiveLock: NSRecursiveLock { - override init() { - _ = Resources.incrementTotal() - super.init() - } - - override func lock() { - super.lock() - _ = Resources.incrementTotal() - } - - override func unlock() { - super.unlock() - _ = Resources.decrementTotal() - } - - deinit { - _ = Resources.decrementTotal() - } - } -#else - typealias RecursiveLock = NSRecursiveLock -#endif diff --git a/Pods/RxSwift/README.md b/Pods/RxSwift/README.md deleted file mode 100644 index a95d9e0..0000000 --- a/Pods/RxSwift/README.md +++ /dev/null @@ -1,254 +0,0 @@ -

-RxSwift Logo -
-Build Status -Supported Platforms: iOS, macOS, tvOS, watchOS & Linux -
- - - -

- -Rx is a [generic abstraction of computation](https://youtu.be/looJcaeboBY) expressed through `Observable` interface, which lets you broadcast and subscribe to values and other events from an `Observable` stream. - -RxSwift is the Swift-specific implementation of the [Reactive Extensions](http://reactivex.io) standard. - -

RxSwift Observable Example of a price constantly changing and updating the app's UI

- -While this version aims to stay true to the original spirit and naming conventions of Rx, this projects also aims to provide a true Swift-first API for Rx APIs. - -Cross platform documentation can be found on [ReactiveX.io](http://reactivex.io/). - -Like other Rx implementation, RxSwift's intention is to enable easy composition of asynchronous operations and streams of data in the form of `Observable` objects and a suite of methods to transform and compose these pieces of asynchronous work. - -KVO observation, async operations, UI Events and other streams of data are all unified under [abstraction of sequence](Documentation/GettingStarted.md#observables-aka-sequences). This is the reason why Rx is so simple, elegant and powerful. - -## I came here because I want to ... - -###### ... understand - -* [why use rx?](Documentation/Why.md) -* [the basics, getting started with RxSwift](Documentation/GettingStarted.md) -* [traits](Documentation/Traits.md) - what are `Single`, `Completable`, `Maybe`, `Driver`, and `ControlProperty` ... and why do they exist? -* [testing](Documentation/UnitTests.md) -* [tips and common errors](Documentation/Tips.md) -* [debugging](Documentation/GettingStarted.md#debugging) -* [the math behind Rx](Documentation/MathBehindRx.md) -* [what are hot and cold observable sequences?](Documentation/HotAndColdObservables.md) - -###### ... install - -* Integrate RxSwift/RxCocoa with my app. [Installation Guide](#installation) - -###### ... hack around - -* with the example app. [Running Example App](Documentation/ExampleApp.md) -* with operators in playgrounds. [Playgrounds](Documentation/Playgrounds.md) - -###### ... interact - -* All of this is great, but it would be nice to talk with other people using RxSwift and exchange experiences.
[Join Slack Channel](http://slack.rxswift.org) -* Report a problem using the library. [Open an Issue With Bug Template](.github/ISSUE_TEMPLATE.md) -* Request a new feature. [Open an Issue With Feature Request Template](Documentation/NewFeatureRequestTemplate.md) -* Help out [Check out contribution guide](CONTRIBUTING.md) - -###### ... compare - -* [with Combine and ReactiveSwift](Documentation/ComparisonWithOtherLibraries.md). - -###### ... understand the structure - -RxSwift is as compositional as the asynchronous work it drives. The core unit is RxSwift itself, while other dependencies can be added for UI Work, testing, and more. - -It comprises five separate components depending on each other in the following way: - -```none -┌──────────────┐ ┌──────────────┐ -│ RxCocoa ├────▶ RxRelay │ -└───────┬──────┘ └──────┬───────┘ - │ │ -┌───────▼──────────────────▼───────┐ -│ RxSwift │ -└───────▲──────────────────▲───────┘ - │ │ -┌───────┴──────┐ ┌──────┴───────┐ -│ RxTest │ │ RxBlocking │ -└──────────────┘ └──────────────┘ -``` - -* **RxSwift**: The core of RxSwift, providing the Rx standard as (mostly) defined by [ReactiveX](https://reactivex.io). It has no other dependencies. -* **RxCocoa**: Provides Cocoa-specific capabilities for general iOS/macOS/watchOS & tvOS app development, such as Shared Sequences, Traits, and much more. It depends on both `RxSwift` and `RxRelay`. -* **RxRelay**: Provides `PublishRelay`, `BehaviorRelay` and `ReplayRelay`, three [simple wrappers around Subjects](https://github.com/ReactiveX/RxSwift/blob/main/Documentation/Subjects.md#relays). It depends on `RxSwift`. -* **RxTest** and **RxBlocking**: Provides testing capabilities for Rx-based systems. It depends on `RxSwift`. - -## Usage - - - - - - - - - - - - - - - - - - - -
Here's an exampleIn Action
Define search for GitHub repositories ...
-let searchResults = searchBar.rx.text.orEmpty
-    .throttle(.milliseconds(300), scheduler: MainScheduler.instance)
-    .distinctUntilChanged()
-    .flatMapLatest { query -> Observable<[Repository]> in
-        if query.isEmpty {
-            return .just([])
-        }
-        return searchGitHub(query)
-            .catchAndReturn([])
-    }
-    .observe(on: MainScheduler.instance)
... then bind the results to your tableview
-searchResults
-    .bind(to: tableView.rx.items(cellIdentifier: "Cell")) {
-        (index, repository: Repository, cell) in
-        cell.textLabel?.text = repository.name
-        cell.detailTextLabel?.text = repository.url
-    }
-    .disposed(by: disposeBag)
- - -## Requirements - -* Xcode 12.x -* Swift 5.x - -For Xcode 11 and below, [use RxSwift 5.x](https://github.com/ReactiveX/RxSwift/releases/tag/5.1.1). - -## Installation - -RxSwift doesn't contain any external dependencies. - -These are currently the supported installation options: - -### Manual - -Open Rx.xcworkspace, choose `RxExample` and hit run. This method will build everything and run the sample app - -### [CocoaPods](https://guides.cocoapods.org/using/using-cocoapods.html) - -```ruby -# Podfile -use_frameworks! - -target 'YOUR_TARGET_NAME' do - pod 'RxSwift', '6.5.0' - pod 'RxCocoa', '6.5.0' -end - -# RxTest and RxBlocking make the most sense in the context of unit/integration tests -target 'YOUR_TESTING_TARGET' do - pod 'RxBlocking', '6.5.0' - pod 'RxTest', '6.5.0' -end -``` - -Replace `YOUR_TARGET_NAME` and then, in the `Podfile` directory, type: - -```bash -$ pod install -``` - -### XCFrameworks - -Each release starting with RxSwift 6 includes `*.xcframework` framework binaries. - -Simply drag the needed framework binaries to your **Frameworks, Libraries, and Embedded Content** section under your target's **General** tab. - -> **Note**: If you're using `RxCocoa`, be sure to also drag **RxCocoaRuntime.xcframework** before importing `RxCocoa`. - -XCFrameworks instructions - -### [Carthage](https://github.com/Carthage/Carthage) - -Add this to `Cartfile` - -``` -github "ReactiveX/RxSwift" "6.5.0" -``` - -```bash -$ carthage update -``` - -#### Carthage as a Static Library - -Carthage defaults to building RxSwift as a Dynamic Library. - -If you wish to build RxSwift as a Static Library using Carthage you may use the script below to manually modify the framework type before building with Carthage: - -```bash -carthage update RxSwift --platform iOS --no-build -sed -i -e 's/MACH_O_TYPE = mh_dylib/MACH_O_TYPE = staticlib/g' Carthage/Checkouts/RxSwift/Rx.xcodeproj/project.pbxproj -carthage build RxSwift --platform iOS -``` - -### [Swift Package Manager](https://github.com/apple/swift-package-manager) - -> **Note**: There is a critical cross-dependency bug affecting many projects including RxSwift in Swift Package Manager. We've [filed a bug (SR-12303)](https://bugs.swift.org/browse/SR-12303) in early 2020 but have no answer yet. Your mileage may vary. A partial workaround can be found [here](https://github.com/ReactiveX/RxSwift/issues/2127#issuecomment-717830502). - -Create a `Package.swift` file. - -```swift -// swift-tools-version:5.0 - -import PackageDescription - -let package = Package( - name: "RxTestProject", - dependencies: [ - .package(url: "https://github.com/ReactiveX/RxSwift.git", .exact("6.5.0")) - ], - targets: [ - .target(name: "RxTestProject", dependencies: ["RxSwift", "RxCocoa"]) - ] -) -``` - -```bash -$ swift build -``` - -To build or test a module with RxTest dependency, set `TEST=1`. - -```bash -$ TEST=1 swift test -``` - -### Manually using git submodules - -* Add RxSwift as a submodule - -```bash -$ git submodule add git@github.com:ReactiveX/RxSwift.git -``` - -* Drag `Rx.xcodeproj` into Project Navigator -* Go to `Project > Targets > Build Phases > Link Binary With Libraries`, click `+` and select `RxSwift`, `RxCocoa` and `RxRelay` targets - -## References - -* [http://reactivex.io/](http://reactivex.io/) -* [Reactive Extensions GitHub (GitHub)](https://github.com/Reactive-Extensions) -* [RxSwift RayWenderlich.com Book](https://store.raywenderlich.com/products/rxswift-reactive-programming-with-swift) -* [RxSwift: Debunking the myth of hard (YouTube)](https://www.youtube.com/watch?v=GdvLP0ZAhhc) -* [Boxue.io RxSwift Online Course](https://boxueio.com/series/rxswift-101) (Chinese 🇨🇳) -* [Expert to Expert: Brian Beckman and Erik Meijer - Inside the .NET Reactive Framework (Rx) (video)](https://youtu.be/looJcaeboBY) -* [Reactive Programming Overview (Jafar Husain from Netflix)](https://youtu.be/-8Y1-lE6NSA) -* [Subject/Observer is Dual to Iterator (paper)](http://csl.stanford.edu/~christos/pldi2010.fit/meijer.duality.pdf) -* [Rx standard sequence operators visualized (visualization tool)](http://rxmarbles.com/) -* [Haskell](https://www.haskell.org/) diff --git a/Pods/RxSwift/RxSwift/AnyObserver.swift b/Pods/RxSwift/RxSwift/AnyObserver.swift deleted file mode 100644 index e92cc81..0000000 --- a/Pods/RxSwift/RxSwift/AnyObserver.swift +++ /dev/null @@ -1,69 +0,0 @@ -// -// AnyObserver.swift -// RxSwift -// -// Created by Krunoslav Zaher on 2/28/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/// A type-erased `ObserverType`. -/// -/// Forwards operations to an arbitrary underlying observer with the same `Element` type, hiding the specifics of the underlying observer type. -public struct AnyObserver : ObserverType { - /// Anonymous event handler type. - public typealias EventHandler = (Event) -> Void - - private let observer: EventHandler - - /// Construct an instance whose `on(event)` calls `eventHandler(event)` - /// - /// - parameter eventHandler: Event handler that observes sequences events. - public init(eventHandler: @escaping EventHandler) { - self.observer = eventHandler - } - - /// Construct an instance whose `on(event)` calls `observer.on(event)` - /// - /// - parameter observer: Observer that receives sequence events. - public init(_ observer: Observer) where Observer.Element == Element { - self.observer = observer.on - } - - /// Send `event` to this observer. - /// - /// - parameter event: Event instance. - public func on(_ event: Event) { - self.observer(event) - } - - /// Erases type of observer and returns canonical observer. - /// - /// - returns: type erased observer. - public func asObserver() -> AnyObserver { - self - } -} - -extension AnyObserver { - /// Collection of `AnyObserver`s - typealias s = Bag<(Event) -> Void> -} - -extension ObserverType { - /// Erases type of observer and returns canonical observer. - /// - /// - returns: type erased observer. - public func asObserver() -> AnyObserver { - AnyObserver(self) - } - - /// Transforms observer of type R to type E using custom transform method. - /// Each event sent to result observer is transformed and sent to `self`. - /// - /// - returns: observer that transforms events. - public func mapObserver(_ transform: @escaping (Result) throws -> Element) -> AnyObserver { - AnyObserver { e in - self.on(e.map(transform)) - } - } -} diff --git a/Pods/RxSwift/RxSwift/Binder.swift b/Pods/RxSwift/RxSwift/Binder.swift deleted file mode 100644 index 1aae095..0000000 --- a/Pods/RxSwift/RxSwift/Binder.swift +++ /dev/null @@ -1,59 +0,0 @@ -// -// Binder.swift -// RxSwift -// -// Created by Krunoslav Zaher on 9/17/17. -// Copyright © 2017 Krunoslav Zaher. All rights reserved. -// - -/** - Observer that enforces interface binding rules: - * can't bind errors (in debug builds binding of errors causes `fatalError` in release builds errors are being logged) - * ensures binding is performed on a specific scheduler - - `Binder` doesn't retain target and in case target is released, element isn't bound. - - By default it binds elements on main scheduler. - */ -public struct Binder: ObserverType { - public typealias Element = Value - - private let binding: (Event) -> Void - - /// Initializes `Binder` - /// - /// - parameter target: Target object. - /// - parameter scheduler: Scheduler used to bind the events. - /// - parameter binding: Binding logic. - public init(_ target: Target, scheduler: ImmediateSchedulerType = MainScheduler(), binding: @escaping (Target, Value) -> Void) { - weak var weakTarget = target - - self.binding = { event in - switch event { - case .next(let element): - _ = scheduler.schedule(element) { element in - if let target = weakTarget { - binding(target, element) - } - return Disposables.create() - } - case .error(let error): - rxFatalErrorInDebug("Binding error: \(error)") - case .completed: - break - } - } - } - - /// Binds next element to owner view as described in `binding`. - public func on(_ event: Event) { - self.binding(event) - } - - /// Erases type of observer. - /// - /// - returns: type erased observer. - public func asObserver() -> AnyObserver { - AnyObserver(eventHandler: self.on) - } -} diff --git a/Pods/RxSwift/RxSwift/Cancelable.swift b/Pods/RxSwift/RxSwift/Cancelable.swift deleted file mode 100644 index 1fa7a67..0000000 --- a/Pods/RxSwift/RxSwift/Cancelable.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// Cancelable.swift -// RxSwift -// -// Created by Krunoslav Zaher on 3/12/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/// Represents disposable resource with state tracking. -public protocol Cancelable : Disposable { - /// Was resource disposed. - var isDisposed: Bool { get } -} diff --git a/Pods/RxSwift/RxSwift/Concurrency/AsyncLock.swift b/Pods/RxSwift/RxSwift/Concurrency/AsyncLock.swift deleted file mode 100644 index 502597e..0000000 --- a/Pods/RxSwift/RxSwift/Concurrency/AsyncLock.swift +++ /dev/null @@ -1,100 +0,0 @@ -// -// AsyncLock.swift -// RxSwift -// -// Created by Krunoslav Zaher on 3/21/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/** -In case nobody holds this lock, the work will be queued and executed immediately -on thread that is requesting lock. - -In case there is somebody currently holding that lock, action will be enqueued. -When owned of the lock finishes with it's processing, it will also execute -and pending work. - -That means that enqueued work could possibly be executed later on a different thread. -*/ -final class AsyncLock - : Disposable - , Lock - , SynchronizedDisposeType { - typealias Action = () -> Void - - private var _lock = SpinLock() - - private var queue: Queue = Queue(capacity: 0) - - private var isExecuting: Bool = false - private var hasFaulted: Bool = false - - // lock { - func lock() { - self._lock.lock() - } - - func unlock() { - self._lock.unlock() - } - // } - - private func enqueue(_ action: I) -> I? { - self.lock(); defer { self.unlock() } - if self.hasFaulted { - return nil - } - - if self.isExecuting { - self.queue.enqueue(action) - return nil - } - - self.isExecuting = true - - return action - } - - private func dequeue() -> I? { - self.lock(); defer { self.unlock() } - if !self.queue.isEmpty { - return self.queue.dequeue() - } - else { - self.isExecuting = false - return nil - } - } - - func invoke(_ action: I) { - let firstEnqueuedAction = self.enqueue(action) - - if let firstEnqueuedAction = firstEnqueuedAction { - firstEnqueuedAction.invoke() - } - else { - // action is enqueued, it's somebody else's concern now - return - } - - while true { - let nextAction = self.dequeue() - - if let nextAction = nextAction { - nextAction.invoke() - } - else { - return - } - } - } - - func dispose() { - self.synchronizedDispose() - } - - func synchronized_dispose() { - self.queue = Queue(capacity: 0) - self.hasFaulted = true - } -} diff --git a/Pods/RxSwift/RxSwift/Concurrency/Lock.swift b/Pods/RxSwift/RxSwift/Concurrency/Lock.swift deleted file mode 100644 index 7232f23..0000000 --- a/Pods/RxSwift/RxSwift/Concurrency/Lock.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// Lock.swift -// RxSwift -// -// Created by Krunoslav Zaher on 3/31/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -protocol Lock { - func lock() - func unlock() -} - -// https://lists.swift.org/pipermail/swift-dev/Week-of-Mon-20151214/000321.html -typealias SpinLock = RecursiveLock - -extension RecursiveLock : Lock { - @inline(__always) - final func performLocked(_ action: () -> T) -> T { - self.lock(); defer { self.unlock() } - return action() - } -} diff --git a/Pods/RxSwift/RxSwift/Concurrency/LockOwnerType.swift b/Pods/RxSwift/RxSwift/Concurrency/LockOwnerType.swift deleted file mode 100644 index 8a98007..0000000 --- a/Pods/RxSwift/RxSwift/Concurrency/LockOwnerType.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// LockOwnerType.swift -// RxSwift -// -// Created by Krunoslav Zaher on 10/25/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -protocol LockOwnerType: AnyObject, Lock { - var lock: RecursiveLock { get } -} - -extension LockOwnerType { - func lock() { self.lock.lock() } - func unlock() { self.lock.unlock() } -} diff --git a/Pods/RxSwift/RxSwift/Concurrency/SynchronizedDisposeType.swift b/Pods/RxSwift/RxSwift/Concurrency/SynchronizedDisposeType.swift deleted file mode 100644 index 527a2fb..0000000 --- a/Pods/RxSwift/RxSwift/Concurrency/SynchronizedDisposeType.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// SynchronizedDisposeType.swift -// RxSwift -// -// Created by Krunoslav Zaher on 10/25/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -protocol SynchronizedDisposeType: AnyObject, Disposable, Lock { - func synchronized_dispose() -} - -extension SynchronizedDisposeType { - func synchronizedDispose() { - self.lock(); defer { self.unlock() } - self.synchronized_dispose() - } -} diff --git a/Pods/RxSwift/RxSwift/Concurrency/SynchronizedOnType.swift b/Pods/RxSwift/RxSwift/Concurrency/SynchronizedOnType.swift deleted file mode 100644 index 19168d7..0000000 --- a/Pods/RxSwift/RxSwift/Concurrency/SynchronizedOnType.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// SynchronizedOnType.swift -// RxSwift -// -// Created by Krunoslav Zaher on 10/25/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -protocol SynchronizedOnType: AnyObject, ObserverType, Lock { - func synchronized_on(_ event: Event) -} - -extension SynchronizedOnType { - func synchronizedOn(_ event: Event) { - self.lock(); defer { self.unlock() } - self.synchronized_on(event) - } -} diff --git a/Pods/RxSwift/RxSwift/Concurrency/SynchronizedUnsubscribeType.swift b/Pods/RxSwift/RxSwift/Concurrency/SynchronizedUnsubscribeType.swift deleted file mode 100644 index 988b86f..0000000 --- a/Pods/RxSwift/RxSwift/Concurrency/SynchronizedUnsubscribeType.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// SynchronizedUnsubscribeType.swift -// RxSwift -// -// Created by Krunoslav Zaher on 10/25/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -protocol SynchronizedUnsubscribeType: AnyObject { - associatedtype DisposeKey - - func synchronizedUnsubscribe(_ disposeKey: DisposeKey) -} diff --git a/Pods/RxSwift/RxSwift/ConnectableObservableType.swift b/Pods/RxSwift/RxSwift/ConnectableObservableType.swift deleted file mode 100644 index 52bf93c..0000000 --- a/Pods/RxSwift/RxSwift/ConnectableObservableType.swift +++ /dev/null @@ -1,19 +0,0 @@ -// -// ConnectableObservableType.swift -// RxSwift -// -// Created by Krunoslav Zaher on 3/1/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/** -Represents an observable sequence wrapper that can be connected and disconnected from its underlying observable sequence. -*/ -public protocol ConnectableObservableType : ObservableType { - /** - Connects the observable wrapper to its source. All subscribed observers will receive values from the underlying observable sequence as long as the connection is established. - - - returns: Disposable used to disconnect the observable wrapper from its source, causing subscribed observer to stop receiving values from the underlying observable sequence. - */ - func connect() -> Disposable -} diff --git a/Pods/RxSwift/RxSwift/Date+Dispatch.swift b/Pods/RxSwift/RxSwift/Date+Dispatch.swift deleted file mode 100644 index 90f70c5..0000000 --- a/Pods/RxSwift/RxSwift/Date+Dispatch.swift +++ /dev/null @@ -1,64 +0,0 @@ -// -// Date+Dispatch.swift -// RxSwift -// -// Created by Krunoslav Zaher on 4/14/19. -// Copyright © 2019 Krunoslav Zaher. All rights reserved. -// - -import Dispatch -import Foundation - -extension DispatchTimeInterval { - var convertToSecondsFactor: Double { - switch self { - case .nanoseconds: return 1_000_000_000.0 - case .microseconds: return 1_000_000.0 - case .milliseconds: return 1_000.0 - case .seconds: return 1.0 - case .never: fatalError() - @unknown default: fatalError() - } - } - - func map(_ transform: (Int, Double) -> Int) -> DispatchTimeInterval { - switch self { - case .nanoseconds(let value): return .nanoseconds(transform(value, 1_000_000_000.0)) - case .microseconds(let value): return .microseconds(transform(value, 1_000_000.0)) - case .milliseconds(let value): return .milliseconds(transform(value, 1_000.0)) - case .seconds(let value): return .seconds(transform(value, 1.0)) - case .never: return .never - @unknown default: fatalError() - } - } - - var isNow: Bool { - switch self { - case .nanoseconds(let value), .microseconds(let value), .milliseconds(let value), .seconds(let value): return value == 0 - case .never: return false - @unknown default: fatalError() - } - } - - internal func reduceWithSpanBetween(earlierDate: Date, laterDate: Date) -> DispatchTimeInterval { - return self.map { value, factor in - let interval = laterDate.timeIntervalSince(earlierDate) - let remainder = Double(value) - interval * factor - guard remainder > 0 else { return 0 } - return Int(remainder.rounded(.toNearestOrAwayFromZero)) - } - } -} - -extension Date { - - internal func addingDispatchInterval(_ dispatchInterval: DispatchTimeInterval) -> Date { - switch dispatchInterval { - case .nanoseconds(let value), .microseconds(let value), .milliseconds(let value), .seconds(let value): - return self.addingTimeInterval(TimeInterval(value) / dispatchInterval.convertToSecondsFactor) - case .never: return Date.distantFuture - @unknown default: fatalError() - } - } - -} diff --git a/Pods/RxSwift/RxSwift/Disposable.swift b/Pods/RxSwift/RxSwift/Disposable.swift deleted file mode 100644 index b79c77a..0000000 --- a/Pods/RxSwift/RxSwift/Disposable.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// Disposable.swift -// RxSwift -// -// Created by Krunoslav Zaher on 2/8/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/// Represents a disposable resource. -public protocol Disposable { - /// Dispose resource. - func dispose() -} diff --git a/Pods/RxSwift/RxSwift/Disposables/AnonymousDisposable.swift b/Pods/RxSwift/RxSwift/Disposables/AnonymousDisposable.swift deleted file mode 100644 index 591aafa..0000000 --- a/Pods/RxSwift/RxSwift/Disposables/AnonymousDisposable.swift +++ /dev/null @@ -1,59 +0,0 @@ -// -// AnonymousDisposable.swift -// RxSwift -// -// Created by Krunoslav Zaher on 2/15/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/// Represents an Action-based disposable. -/// -/// When dispose method is called, disposal action will be dereferenced. -private final class AnonymousDisposable : DisposeBase, Cancelable { - public typealias DisposeAction = () -> Void - - private let disposed = AtomicInt(0) - private var disposeAction: DisposeAction? - - /// - returns: Was resource disposed. - public var isDisposed: Bool { - isFlagSet(self.disposed, 1) - } - - /// Constructs a new disposable with the given action used for disposal. - /// - /// - parameter disposeAction: Disposal action which will be run upon calling `dispose`. - private init(_ disposeAction: @escaping DisposeAction) { - self.disposeAction = disposeAction - super.init() - } - - // Non-deprecated version of the constructor, used by `Disposables.create(with:)` - fileprivate init(disposeAction: @escaping DisposeAction) { - self.disposeAction = disposeAction - super.init() - } - - /// Calls the disposal action if and only if the current instance hasn't been disposed yet. - /// - /// After invoking disposal action, disposal action will be dereferenced. - fileprivate func dispose() { - if fetchOr(self.disposed, 1) == 0 { - if let action = self.disposeAction { - self.disposeAction = nil - action() - } - } - } -} - -extension Disposables { - - /// Constructs a new disposable with the given action used for disposal. - /// - /// - parameter dispose: Disposal action which will be run upon calling `dispose`. - public static func create(with dispose: @escaping () -> Void) -> Cancelable { - AnonymousDisposable(disposeAction: dispose) - } - -} diff --git a/Pods/RxSwift/RxSwift/Disposables/BinaryDisposable.swift b/Pods/RxSwift/RxSwift/Disposables/BinaryDisposable.swift deleted file mode 100644 index a3d4937..0000000 --- a/Pods/RxSwift/RxSwift/Disposables/BinaryDisposable.swift +++ /dev/null @@ -1,53 +0,0 @@ -// -// BinaryDisposable.swift -// RxSwift -// -// Created by Krunoslav Zaher on 6/12/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/// Represents two disposable resources that are disposed together. -private final class BinaryDisposable : DisposeBase, Cancelable { - - private let disposed = AtomicInt(0) - - // state - private var disposable1: Disposable? - private var disposable2: Disposable? - - /// - returns: Was resource disposed. - var isDisposed: Bool { - isFlagSet(self.disposed, 1) - } - - /// Constructs new binary disposable from two disposables. - /// - /// - parameter disposable1: First disposable - /// - parameter disposable2: Second disposable - init(_ disposable1: Disposable, _ disposable2: Disposable) { - self.disposable1 = disposable1 - self.disposable2 = disposable2 - super.init() - } - - /// Calls the disposal action if and only if the current instance hasn't been disposed yet. - /// - /// After invoking disposal action, disposal action will be dereferenced. - func dispose() { - if fetchOr(self.disposed, 1) == 0 { - self.disposable1?.dispose() - self.disposable2?.dispose() - self.disposable1 = nil - self.disposable2 = nil - } - } -} - -extension Disposables { - - /// Creates a disposable with the given disposables. - public static func create(_ disposable1: Disposable, _ disposable2: Disposable) -> Cancelable { - BinaryDisposable(disposable1, disposable2) - } - -} diff --git a/Pods/RxSwift/RxSwift/Disposables/BooleanDisposable.swift b/Pods/RxSwift/RxSwift/Disposables/BooleanDisposable.swift deleted file mode 100644 index c7d73e9..0000000 --- a/Pods/RxSwift/RxSwift/Disposables/BooleanDisposable.swift +++ /dev/null @@ -1,33 +0,0 @@ -// -// BooleanDisposable.swift -// RxSwift -// -// Created by Junior B. on 10/29/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/// Represents a disposable resource that can be checked for disposal status. -public final class BooleanDisposable : Cancelable { - - internal static let BooleanDisposableTrue = BooleanDisposable(isDisposed: true) - private var disposed = false - - /// Initializes a new instance of the `BooleanDisposable` class - public init() { - } - - /// Initializes a new instance of the `BooleanDisposable` class with given value - public init(isDisposed: Bool) { - self.disposed = isDisposed - } - - /// - returns: Was resource disposed. - public var isDisposed: Bool { - self.disposed - } - - /// Sets the status to disposed, which can be observer through the `isDisposed` property. - public func dispose() { - self.disposed = true - } -} diff --git a/Pods/RxSwift/RxSwift/Disposables/CompositeDisposable.swift b/Pods/RxSwift/RxSwift/Disposables/CompositeDisposable.swift deleted file mode 100644 index bb4efe6..0000000 --- a/Pods/RxSwift/RxSwift/Disposables/CompositeDisposable.swift +++ /dev/null @@ -1,147 +0,0 @@ -// -// CompositeDisposable.swift -// RxSwift -// -// Created by Krunoslav Zaher on 2/20/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/// Represents a group of disposable resources that are disposed together. -public final class CompositeDisposable : DisposeBase, Cancelable { - /// Key used to remove disposable from composite disposable - public struct DisposeKey { - fileprivate let key: BagKey - fileprivate init(key: BagKey) { - self.key = key - } - } - - private var lock = SpinLock() - - // state - private var disposables: Bag? = Bag() - - public var isDisposed: Bool { - self.lock.performLocked { self.disposables == nil } - } - - public override init() { - } - - /// Initializes a new instance of composite disposable with the specified number of disposables. - public init(_ disposable1: Disposable, _ disposable2: Disposable) { - // This overload is here to make sure we are using optimized version up to 4 arguments. - _ = self.disposables!.insert(disposable1) - _ = self.disposables!.insert(disposable2) - } - - /// Initializes a new instance of composite disposable with the specified number of disposables. - public init(_ disposable1: Disposable, _ disposable2: Disposable, _ disposable3: Disposable) { - // This overload is here to make sure we are using optimized version up to 4 arguments. - _ = self.disposables!.insert(disposable1) - _ = self.disposables!.insert(disposable2) - _ = self.disposables!.insert(disposable3) - } - - /// Initializes a new instance of composite disposable with the specified number of disposables. - public init(_ disposable1: Disposable, _ disposable2: Disposable, _ disposable3: Disposable, _ disposable4: Disposable, _ disposables: Disposable...) { - // This overload is here to make sure we are using optimized version up to 4 arguments. - _ = self.disposables!.insert(disposable1) - _ = self.disposables!.insert(disposable2) - _ = self.disposables!.insert(disposable3) - _ = self.disposables!.insert(disposable4) - - for disposable in disposables { - _ = self.disposables!.insert(disposable) - } - } - - /// Initializes a new instance of composite disposable with the specified number of disposables. - public init(disposables: [Disposable]) { - for disposable in disposables { - _ = self.disposables!.insert(disposable) - } - } - - /** - Adds a disposable to the CompositeDisposable or disposes the disposable if the CompositeDisposable is disposed. - - - parameter disposable: Disposable to add. - - returns: Key that can be used to remove disposable from composite disposable. In case dispose bag was already - disposed `nil` will be returned. - */ - public func insert(_ disposable: Disposable) -> DisposeKey? { - let key = self._insert(disposable) - - if key == nil { - disposable.dispose() - } - - return key - } - - private func _insert(_ disposable: Disposable) -> DisposeKey? { - self.lock.performLocked { - let bagKey = self.disposables?.insert(disposable) - return bagKey.map(DisposeKey.init) - } - } - - /// - returns: Gets the number of disposables contained in the `CompositeDisposable`. - public var count: Int { - self.lock.performLocked { self.disposables?.count ?? 0 } - } - - /// Removes and disposes the disposable identified by `disposeKey` from the CompositeDisposable. - /// - /// - parameter disposeKey: Key used to identify disposable to be removed. - public func remove(for disposeKey: DisposeKey) { - self._remove(for: disposeKey)?.dispose() - } - - private func _remove(for disposeKey: DisposeKey) -> Disposable? { - self.lock.performLocked { self.disposables?.removeKey(disposeKey.key) } - } - - /// Disposes all disposables in the group and removes them from the group. - public func dispose() { - if let disposables = self._dispose() { - disposeAll(in: disposables) - } - } - - private func _dispose() -> Bag? { - self.lock.performLocked { - let current = self.disposables - self.disposables = nil - return current - } - } -} - -extension Disposables { - - /// Creates a disposable with the given disposables. - public static func create(_ disposable1: Disposable, _ disposable2: Disposable, _ disposable3: Disposable) -> Cancelable { - CompositeDisposable(disposable1, disposable2, disposable3) - } - - /// Creates a disposable with the given disposables. - public static func create(_ disposable1: Disposable, _ disposable2: Disposable, _ disposable3: Disposable, _ disposables: Disposable ...) -> Cancelable { - var disposables = disposables - disposables.append(disposable1) - disposables.append(disposable2) - disposables.append(disposable3) - return CompositeDisposable(disposables: disposables) - } - - /// Creates a disposable with the given disposables. - public static func create(_ disposables: [Disposable]) -> Cancelable { - switch disposables.count { - case 2: - return Disposables.create(disposables[0], disposables[1]) - default: - return CompositeDisposable(disposables: disposables) - } - } -} diff --git a/Pods/RxSwift/RxSwift/Disposables/Disposables.swift b/Pods/RxSwift/RxSwift/Disposables/Disposables.swift deleted file mode 100644 index 8cd6e28..0000000 --- a/Pods/RxSwift/RxSwift/Disposables/Disposables.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// Disposables.swift -// RxSwift -// -// Created by Mohsen Ramezanpoor on 01/08/2016. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -/// A collection of utility methods for common disposable operations. -public struct Disposables { - private init() {} -} - diff --git a/Pods/RxSwift/RxSwift/Disposables/DisposeBag.swift b/Pods/RxSwift/RxSwift/Disposables/DisposeBag.swift deleted file mode 100644 index 1a673bc..0000000 --- a/Pods/RxSwift/RxSwift/Disposables/DisposeBag.swift +++ /dev/null @@ -1,144 +0,0 @@ -// -// DisposeBag.swift -// RxSwift -// -// Created by Krunoslav Zaher on 3/25/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension Disposable { - /// Adds `self` to `bag` - /// - /// - parameter bag: `DisposeBag` to add `self` to. - public func disposed(by bag: DisposeBag) { - bag.insert(self) - } -} - -/** -Thread safe bag that disposes added disposables on `deinit`. - -This returns ARC (RAII) like resource management to `RxSwift`. - -In case contained disposables need to be disposed, just put a different dispose bag -or create a new one in its place. - - self.existingDisposeBag = DisposeBag() - -In case explicit disposal is necessary, there is also `CompositeDisposable`. -*/ -public final class DisposeBag: DisposeBase { - - private var lock = SpinLock() - - // state - private var disposables = [Disposable]() - private var isDisposed = false - - /// Constructs new empty dispose bag. - public override init() { - super.init() - } - - /// Adds `disposable` to be disposed when dispose bag is being deinited. - /// - /// - parameter disposable: Disposable to add. - public func insert(_ disposable: Disposable) { - self._insert(disposable)?.dispose() - } - - private func _insert(_ disposable: Disposable) -> Disposable? { - self.lock.performLocked { - if self.isDisposed { - return disposable - } - - self.disposables.append(disposable) - - return nil - } - } - - /// This is internal on purpose, take a look at `CompositeDisposable` instead. - private func dispose() { - let oldDisposables = self._dispose() - - for disposable in oldDisposables { - disposable.dispose() - } - } - - private func _dispose() -> [Disposable] { - self.lock.performLocked { - let disposables = self.disposables - - self.disposables.removeAll(keepingCapacity: false) - self.isDisposed = true - - return disposables - } - } - - deinit { - self.dispose() - } -} - -extension DisposeBag { - /// Convenience init allows a list of disposables to be gathered for disposal. - public convenience init(disposing disposables: Disposable...) { - self.init() - self.disposables += disposables - } - - /// Convenience init which utilizes a function builder to let you pass in a list of - /// disposables to make a DisposeBag of. - public convenience init(@DisposableBuilder builder: () -> [Disposable]) { - self.init(disposing: builder()) - } - - /// Convenience init allows an array of disposables to be gathered for disposal. - public convenience init(disposing disposables: [Disposable]) { - self.init() - self.disposables += disposables - } - - /// Convenience function allows a list of disposables to be gathered for disposal. - public func insert(_ disposables: Disposable...) { - self.insert(disposables) - } - - /// Convenience function allows a list of disposables to be gathered for disposal. - public func insert(@DisposableBuilder builder: () -> [Disposable]) { - self.insert(builder()) - } - - /// Convenience function allows an array of disposables to be gathered for disposal. - public func insert(_ disposables: [Disposable]) { - self.lock.performLocked { - if self.isDisposed { - disposables.forEach { $0.dispose() } - } else { - self.disposables += disposables - } - } - } - - /// A function builder accepting a list of Disposables and returning them as an array. - #if swift(>=5.4) - @resultBuilder - public struct DisposableBuilder { - public static func buildBlock(_ disposables: Disposable...) -> [Disposable] { - return disposables - } - } - #else - @_functionBuilder - public struct DisposableBuilder { - public static func buildBlock(_ disposables: Disposable...) -> [Disposable] { - return disposables - } - } - #endif - -} diff --git a/Pods/RxSwift/RxSwift/Disposables/DisposeBase.swift b/Pods/RxSwift/RxSwift/Disposables/DisposeBase.swift deleted file mode 100644 index 0d4b2fb..0000000 --- a/Pods/RxSwift/RxSwift/Disposables/DisposeBase.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// DisposeBase.swift -// RxSwift -// -// Created by Krunoslav Zaher on 4/4/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/// Base class for all disposables. -public class DisposeBase { - init() { -#if TRACE_RESOURCES - _ = Resources.incrementTotal() -#endif - } - - deinit { -#if TRACE_RESOURCES - _ = Resources.decrementTotal() -#endif - } -} diff --git a/Pods/RxSwift/RxSwift/Disposables/NopDisposable.swift b/Pods/RxSwift/RxSwift/Disposables/NopDisposable.swift deleted file mode 100644 index dd436ba..0000000 --- a/Pods/RxSwift/RxSwift/Disposables/NopDisposable.swift +++ /dev/null @@ -1,30 +0,0 @@ -// -// NopDisposable.swift -// RxSwift -// -// Created by Krunoslav Zaher on 2/15/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/// Represents a disposable that does nothing on disposal. -/// -/// Nop = No Operation -private struct NopDisposable : Disposable { - - fileprivate static let noOp: Disposable = NopDisposable() - - private init() { - - } - - /// Does nothing. - public func dispose() { - } -} - -extension Disposables { - /** - Creates a disposable that does nothing on disposal. - */ - static public func create() -> Disposable { NopDisposable.noOp } -} diff --git a/Pods/RxSwift/RxSwift/Disposables/RefCountDisposable.swift b/Pods/RxSwift/RxSwift/Disposables/RefCountDisposable.swift deleted file mode 100644 index a59f778..0000000 --- a/Pods/RxSwift/RxSwift/Disposables/RefCountDisposable.swift +++ /dev/null @@ -1,112 +0,0 @@ -// -// RefCountDisposable.swift -// RxSwift -// -// Created by Junior B. on 10/29/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/// Represents a disposable resource that only disposes its underlying disposable resource when all dependent disposable objects have been disposed. -public final class RefCountDisposable : DisposeBase, Cancelable { - private var lock = SpinLock() - private var disposable = nil as Disposable? - private var primaryDisposed = false - private var count = 0 - - /// - returns: Was resource disposed. - public var isDisposed: Bool { - self.lock.performLocked { self.disposable == nil } - } - - /// Initializes a new instance of the `RefCountDisposable`. - public init(disposable: Disposable) { - self.disposable = disposable - super.init() - } - - /** - Holds a dependent disposable that when disposed decreases the refcount on the underlying disposable. - - When getter is called, a dependent disposable contributing to the reference count that manages the underlying disposable's lifetime is returned. - */ - public func retain() -> Disposable { - self.lock.performLocked { - if self.disposable != nil { - do { - _ = try incrementChecked(&self.count) - } catch { - rxFatalError("RefCountDisposable increment failed") - } - - return RefCountInnerDisposable(self) - } else { - return Disposables.create() - } - } - } - - /// Disposes the underlying disposable only when all dependent disposables have been disposed. - public func dispose() { - let oldDisposable: Disposable? = self.lock.performLocked { - if let oldDisposable = self.disposable, !self.primaryDisposed { - self.primaryDisposed = true - - if self.count == 0 { - self.disposable = nil - return oldDisposable - } - } - - return nil - } - - if let disposable = oldDisposable { - disposable.dispose() - } - } - - fileprivate func release() { - let oldDisposable: Disposable? = self.lock.performLocked { - if let oldDisposable = self.disposable { - do { - _ = try decrementChecked(&self.count) - } catch { - rxFatalError("RefCountDisposable decrement on release failed") - } - - guard self.count >= 0 else { - rxFatalError("RefCountDisposable counter is lower than 0") - } - - if self.primaryDisposed && self.count == 0 { - self.disposable = nil - return oldDisposable - } - } - - return nil - } - - if let disposable = oldDisposable { - disposable.dispose() - } - } -} - -internal final class RefCountInnerDisposable: DisposeBase, Disposable -{ - private let parent: RefCountDisposable - private let isDisposed = AtomicInt(0) - - init(_ parent: RefCountDisposable) { - self.parent = parent - super.init() - } - - internal func dispose() - { - if fetchOr(self.isDisposed, 1) == 0 { - self.parent.release() - } - } -} diff --git a/Pods/RxSwift/RxSwift/Disposables/ScheduledDisposable.swift b/Pods/RxSwift/RxSwift/Disposables/ScheduledDisposable.swift deleted file mode 100644 index 2cf997b..0000000 --- a/Pods/RxSwift/RxSwift/Disposables/ScheduledDisposable.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// ScheduledDisposable.swift -// RxSwift -// -// Created by Krunoslav Zaher on 6/13/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -private let disposeScheduledDisposable: (ScheduledDisposable) -> Disposable = { sd in - sd.disposeInner() - return Disposables.create() -} - -/// Represents a disposable resource whose disposal invocation will be scheduled on the specified scheduler. -public final class ScheduledDisposable : Cancelable { - public let scheduler: ImmediateSchedulerType - - private let disposed = AtomicInt(0) - - // state - private var disposable: Disposable? - - /// - returns: Was resource disposed. - public var isDisposed: Bool { - isFlagSet(self.disposed, 1) - } - - /** - Initializes a new instance of the `ScheduledDisposable` that uses a `scheduler` on which to dispose the `disposable`. - - - parameter scheduler: Scheduler where the disposable resource will be disposed on. - - parameter disposable: Disposable resource to dispose on the given scheduler. - */ - public init(scheduler: ImmediateSchedulerType, disposable: Disposable) { - self.scheduler = scheduler - self.disposable = disposable - } - - /// Disposes the wrapped disposable on the provided scheduler. - public func dispose() { - _ = self.scheduler.schedule(self, action: disposeScheduledDisposable) - } - - func disposeInner() { - if fetchOr(self.disposed, 1) == 0 { - self.disposable!.dispose() - self.disposable = nil - } - } -} diff --git a/Pods/RxSwift/RxSwift/Disposables/SerialDisposable.swift b/Pods/RxSwift/RxSwift/Disposables/SerialDisposable.swift deleted file mode 100644 index ef4690d..0000000 --- a/Pods/RxSwift/RxSwift/Disposables/SerialDisposable.swift +++ /dev/null @@ -1,73 +0,0 @@ -// -// SerialDisposable.swift -// RxSwift -// -// Created by Krunoslav Zaher on 3/12/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/// Represents a disposable resource whose underlying disposable resource can be replaced by another disposable resource, causing automatic disposal of the previous underlying disposable resource. -public final class SerialDisposable : DisposeBase, Cancelable { - private var lock = SpinLock() - - // state - private var current = nil as Disposable? - private var disposed = false - - /// - returns: Was resource disposed. - public var isDisposed: Bool { - self.disposed - } - - /// Initializes a new instance of the `SerialDisposable`. - override public init() { - super.init() - } - - /** - Gets or sets the underlying disposable. - - Assigning this property disposes the previous disposable object. - - If the `SerialDisposable` has already been disposed, assignment to this property causes immediate disposal of the given disposable object. - */ - public var disposable: Disposable { - get { - self.lock.performLocked { - self.current ?? Disposables.create() - } - } - set (newDisposable) { - let disposable: Disposable? = self.lock.performLocked { - if self.isDisposed { - return newDisposable - } - else { - let toDispose = self.current - self.current = newDisposable - return toDispose - } - } - - if let disposable = disposable { - disposable.dispose() - } - } - } - - /// Disposes the underlying disposable as well as all future replacements. - public func dispose() { - self._dispose()?.dispose() - } - - private func _dispose() -> Disposable? { - self.lock.performLocked { - guard !self.isDisposed else { return nil } - - self.disposed = true - let current = self.current - self.current = nil - return current - } - } -} diff --git a/Pods/RxSwift/RxSwift/Disposables/SingleAssignmentDisposable.swift b/Pods/RxSwift/RxSwift/Disposables/SingleAssignmentDisposable.swift deleted file mode 100644 index 4a5fb86..0000000 --- a/Pods/RxSwift/RxSwift/Disposables/SingleAssignmentDisposable.swift +++ /dev/null @@ -1,72 +0,0 @@ -// -// SingleAssignmentDisposable.swift -// RxSwift -// -// Created by Krunoslav Zaher on 2/15/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/** -Represents a disposable resource which only allows a single assignment of its underlying disposable resource. - -If an underlying disposable resource has already been set, future attempts to set the underlying disposable resource will throw an exception. -*/ -public final class SingleAssignmentDisposable : DisposeBase, Cancelable { - - private struct DisposeState: OptionSet { - let rawValue: Int32 - - static let disposed = DisposeState(rawValue: 1 << 0) - static let disposableSet = DisposeState(rawValue: 1 << 1) - } - - // state - private let state = AtomicInt(0) - private var disposable = nil as Disposable? - - /// - returns: A value that indicates whether the object is disposed. - public var isDisposed: Bool { - isFlagSet(self.state, DisposeState.disposed.rawValue) - } - - /// Initializes a new instance of the `SingleAssignmentDisposable`. - public override init() { - super.init() - } - - /// Gets or sets the underlying disposable. After disposal, the result of getting this property is undefined. - /// - /// **Throws exception if the `SingleAssignmentDisposable` has already been assigned to.** - public func setDisposable(_ disposable: Disposable) { - self.disposable = disposable - - let previousState = fetchOr(self.state, DisposeState.disposableSet.rawValue) - - if (previousState & DisposeState.disposableSet.rawValue) != 0 { - rxFatalError("oldState.disposable != nil") - } - - if (previousState & DisposeState.disposed.rawValue) != 0 { - disposable.dispose() - self.disposable = nil - } - } - - /// Disposes the underlying disposable. - public func dispose() { - let previousState = fetchOr(self.state, DisposeState.disposed.rawValue) - - if (previousState & DisposeState.disposed.rawValue) != 0 { - return - } - - if (previousState & DisposeState.disposableSet.rawValue) != 0 { - guard let disposable = self.disposable else { - rxFatalError("Disposable not set") - } - disposable.dispose() - self.disposable = nil - } - } - -} diff --git a/Pods/RxSwift/RxSwift/Disposables/SubscriptionDisposable.swift b/Pods/RxSwift/RxSwift/Disposables/SubscriptionDisposable.swift deleted file mode 100644 index a406c84..0000000 --- a/Pods/RxSwift/RxSwift/Disposables/SubscriptionDisposable.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// SubscriptionDisposable.swift -// RxSwift -// -// Created by Krunoslav Zaher on 10/25/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -struct SubscriptionDisposable : Disposable { - private let key: T.DisposeKey - private weak var owner: T? - - init(owner: T, key: T.DisposeKey) { - self.owner = owner - self.key = key - } - - func dispose() { - self.owner?.synchronizedUnsubscribe(self.key) - } -} diff --git a/Pods/RxSwift/RxSwift/Errors.swift b/Pods/RxSwift/RxSwift/Errors.swift deleted file mode 100644 index d2d2917..0000000 --- a/Pods/RxSwift/RxSwift/Errors.swift +++ /dev/null @@ -1,52 +0,0 @@ -// -// Errors.swift -// RxSwift -// -// Created by Krunoslav Zaher on 3/28/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -let RxErrorDomain = "RxErrorDomain" -let RxCompositeFailures = "RxCompositeFailures" - -/// Generic Rx error codes. -public enum RxError - : Swift.Error - , CustomDebugStringConvertible { - /// Unknown error occurred. - case unknown - /// Performing an action on disposed object. - case disposed(object: AnyObject) - /// Arithmetic overflow error. - case overflow - /// Argument out of range error. - case argumentOutOfRange - /// Sequence doesn't contain any elements. - case noElements - /// Sequence contains more than one element. - case moreThanOneElement - /// Timeout error. - case timeout -} - -extension RxError { - /// A textual representation of `self`, suitable for debugging. - public var debugDescription: String { - switch self { - case .unknown: - return "Unknown error occurred." - case .disposed(let object): - return "Object `\(object)` was already disposed." - case .overflow: - return "Arithmetic overflow occurred." - case .argumentOutOfRange: - return "Argument out of range." - case .noElements: - return "Sequence doesn't contain any elements." - case .moreThanOneElement: - return "Sequence contains more than one element." - case .timeout: - return "Sequence timeout." - } - } -} diff --git a/Pods/RxSwift/RxSwift/Event.swift b/Pods/RxSwift/RxSwift/Event.swift deleted file mode 100644 index 01861a8..0000000 --- a/Pods/RxSwift/RxSwift/Event.swift +++ /dev/null @@ -1,104 +0,0 @@ -// -// Event.swift -// RxSwift -// -// Created by Krunoslav Zaher on 2/8/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/// Represents a sequence event. -/// -/// Sequence grammar: -/// **next\* (error | completed)** -@frozen public enum Event { - /// Next element is produced. - case next(Element) - - /// Sequence terminated with an error. - case error(Swift.Error) - - /// Sequence completed successfully. - case completed -} - -extension Event: CustomDebugStringConvertible { - /// Description of event. - public var debugDescription: String { - switch self { - case .next(let value): - return "next(\(value))" - case .error(let error): - return "error(\(error))" - case .completed: - return "completed" - } - } -} - -extension Event { - /// Is `completed` or `error` event. - public var isStopEvent: Bool { - switch self { - case .next: return false - case .error, .completed: return true - } - } - - /// If `next` event, returns element value. - public var element: Element? { - if case .next(let value) = self { - return value - } - return nil - } - - /// If `error` event, returns error. - public var error: Swift.Error? { - if case .error(let error) = self { - return error - } - return nil - } - - /// If `completed` event, returns `true`. - public var isCompleted: Bool { - if case .completed = self { - return true - } - return false - } -} - -extension Event { - /// Maps sequence elements using transform. If error happens during the transform, `.error` - /// will be returned as value. - public func map(_ transform: (Element) throws -> Result) -> Event { - do { - switch self { - case let .next(element): - return .next(try transform(element)) - case let .error(error): - return .error(error) - case .completed: - return .completed - } - } - catch let e { - return .error(e) - } - } -} - -/// A type that can be converted to `Event`. -public protocol EventConvertible { - /// Type of element in event - associatedtype Element - - /// Event representation of this instance - var event: Event { get } -} - -extension Event: EventConvertible { - /// Event representation of this instance - public var event: Event { self } -} diff --git a/Pods/RxSwift/RxSwift/Extensions/Bag+Rx.swift b/Pods/RxSwift/RxSwift/Extensions/Bag+Rx.swift deleted file mode 100644 index 9794683..0000000 --- a/Pods/RxSwift/RxSwift/Extensions/Bag+Rx.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// Bag+Rx.swift -// RxSwift -// -// Created by Krunoslav Zaher on 10/19/16. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - - -// MARK: forEach - -@inline(__always) -func dispatch(_ bag: Bag<(Event) -> Void>, _ event: Event) { - bag._value0?(event) - - if bag._onlyFastPath { - return - } - - let pairs = bag._pairs - for i in 0 ..< pairs.count { - pairs[i].value(event) - } - - if let dictionary = bag._dictionary { - for element in dictionary.values { - element(event) - } - } -} - -/// Dispatches `dispose` to all disposables contained inside bag. -func disposeAll(in bag: Bag) { - bag._value0?.dispose() - - if bag._onlyFastPath { - return - } - - let pairs = bag._pairs - for i in 0 ..< pairs.count { - pairs[i].value.dispose() - } - - if let dictionary = bag._dictionary { - for element in dictionary.values { - element.dispose() - } - } -} diff --git a/Pods/RxSwift/RxSwift/GroupedObservable.swift b/Pods/RxSwift/RxSwift/GroupedObservable.swift deleted file mode 100644 index 189a8c4..0000000 --- a/Pods/RxSwift/RxSwift/GroupedObservable.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// GroupedObservable.swift -// RxSwift -// -// Created by Tomi Koskinen on 01/12/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/// Represents an observable sequence of elements that have a common key. -public struct GroupedObservable : ObservableType { - /// Gets the common key. - public let key: Key - - private let source: Observable - - /// Initializes grouped observable sequence with key and source observable sequence. - /// - /// - parameter key: Grouped observable sequence key - /// - parameter source: Observable sequence that represents sequence of elements for the key - /// - returns: Grouped observable sequence of elements for the specific key - public init(key: Key, source: Observable) { - self.key = key - self.source = source - } - - /// Subscribes `observer` to receive events for this sequence. - public func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element { - self.source.subscribe(observer) - } - - /// Converts `self` to `Observable` sequence. - public func asObservable() -> Observable { - self.source - } -} diff --git a/Pods/RxSwift/RxSwift/ImmediateSchedulerType.swift b/Pods/RxSwift/RxSwift/ImmediateSchedulerType.swift deleted file mode 100644 index 954fbf0..0000000 --- a/Pods/RxSwift/RxSwift/ImmediateSchedulerType.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// ImmediateSchedulerType.swift -// RxSwift -// -// Created by Krunoslav Zaher on 5/31/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/// Represents an object that immediately schedules units of work. -public protocol ImmediateSchedulerType { - /** - Schedules an action to be executed immediately. - - - parameter state: State passed to the action to be executed. - - parameter action: Action to be executed. - - returns: The disposable object used to cancel the scheduled action (best effort). - */ - func schedule(_ state: StateType, action: @escaping (StateType) -> Disposable) -> Disposable -} - -extension ImmediateSchedulerType { - /** - Schedules an action to be executed recursively. - - - parameter state: State passed to the action to be executed. - - parameter action: Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in recursive invocation state. - - returns: The disposable object used to cancel the scheduled action (best effort). - */ - public func scheduleRecursive(_ state: State, action: @escaping (_ state: State, _ recurse: (State) -> Void) -> Void) -> Disposable { - let recursiveScheduler = RecursiveImmediateScheduler(action: action, scheduler: self) - - recursiveScheduler.schedule(state) - - return Disposables.create(with: recursiveScheduler.dispose) - } -} diff --git a/Pods/RxSwift/RxSwift/Observable+Concurrency.swift b/Pods/RxSwift/RxSwift/Observable+Concurrency.swift deleted file mode 100644 index c1df7ee..0000000 --- a/Pods/RxSwift/RxSwift/Observable+Concurrency.swift +++ /dev/null @@ -1,68 +0,0 @@ -// -// Observable+Concurrency.swift -// RxSwift -// -// Created by Shai Mishali on 22/09/2021. -// Copyright © 2021 Krunoslav Zaher. All rights reserved. -// - -#if swift(>=5.5.2) && canImport(_Concurrency) -import Foundation - -@available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) -public extension ObservableConvertibleType { - /// Allows iterating over the values of an Observable - /// asynchronously via Swift's concurrency features (`async/await`) - /// - /// A sample usage would look like so: - /// - /// ```swift - /// do { - /// for try await value in observable.values { - /// // Handle emitted values - /// } - /// } catch { - /// // Handle error - /// } - /// ``` - var values: AsyncThrowingStream { - AsyncThrowingStream { continuation in - let disposable = asObservable().subscribe( - onNext: { value in continuation.yield(value) }, - onError: { error in continuation.finish(throwing: error) }, - onCompleted: { continuation.finish() }, - onDisposed: { continuation.onTermination?(.cancelled) } - ) - - continuation.onTermination = { @Sendable _ in - disposable.dispose() - } - } - } -} - -@available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) -public extension AsyncSequence { - /// Convert an `AsyncSequence` to an `Observable` emitting - /// values of the asynchronous sequence's type - /// - /// - returns: An `Observable` of the async sequence's type - func asObservable() -> Observable { - Observable.create { observer in - let task = Task { - do { - for try await value in self { - observer.onNext(value) - } - - observer.onCompleted() - } catch { - observer.onError(error) - } - } - - return Disposables.create { task.cancel() } - } - } -} -#endif diff --git a/Pods/RxSwift/RxSwift/Observable.swift b/Pods/RxSwift/RxSwift/Observable.swift deleted file mode 100644 index 93a3ed7..0000000 --- a/Pods/RxSwift/RxSwift/Observable.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// Observable.swift -// RxSwift -// -// Created by Krunoslav Zaher on 2/8/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/// A type-erased `ObservableType`. -/// -/// It represents a push style sequence. -public class Observable : ObservableType { - init() { -#if TRACE_RESOURCES - _ = Resources.incrementTotal() -#endif - } - - public func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element { - rxAbstractMethod() - } - - public func asObservable() -> Observable { self } - - deinit { -#if TRACE_RESOURCES - _ = Resources.decrementTotal() -#endif - } -} - diff --git a/Pods/RxSwift/RxSwift/ObservableConvertibleType.swift b/Pods/RxSwift/RxSwift/ObservableConvertibleType.swift deleted file mode 100644 index 0f56a81..0000000 --- a/Pods/RxSwift/RxSwift/ObservableConvertibleType.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// ObservableConvertibleType.swift -// RxSwift -// -// Created by Krunoslav Zaher on 9/17/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/// Type that can be converted to observable sequence (`Observable`). -public protocol ObservableConvertibleType { - /// Type of elements in sequence. - associatedtype Element - - /// Converts `self` to `Observable` sequence. - /// - /// - returns: Observable sequence that represents `self`. - func asObservable() -> Observable -} diff --git a/Pods/RxSwift/RxSwift/ObservableType+Extensions.swift b/Pods/RxSwift/RxSwift/ObservableType+Extensions.swift deleted file mode 100644 index ac850c3..0000000 --- a/Pods/RxSwift/RxSwift/ObservableType+Extensions.swift +++ /dev/null @@ -1,174 +0,0 @@ -// -// ObservableType+Extensions.swift -// RxSwift -// -// Created by Krunoslav Zaher on 2/21/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if DEBUG - import Foundation -#endif - -extension ObservableType { - /** - Subscribes an event handler to an observable sequence. - - - parameter on: Action to invoke for each event in the observable sequence. - - returns: Subscription object used to unsubscribe from the observable sequence. - */ - public func subscribe(_ on: @escaping (Event) -> Void) -> Disposable { - let observer = AnonymousObserver { e in - on(e) - } - return self.asObservable().subscribe(observer) - } - - /** - Subscribes an element handler, an error handler, a completion handler and disposed handler to an observable sequence. - - Also, take in an object and provide an unretained, safe to use (i.e. not implicitly unwrapped), reference to it along with the events emitted by the sequence. - - - Note: If `object` can't be retained, none of the other closures will be invoked. - - - parameter object: The object to provide an unretained reference on. - - parameter onNext: Action to invoke for each element in the observable sequence. - - parameter onError: Action to invoke upon errored termination of the observable sequence. - - parameter onCompleted: Action to invoke upon graceful termination of the observable sequence. - - parameter onDisposed: Action to invoke upon any type of termination of sequence (if the sequence has - gracefully completed, errored, or if the generation is canceled by disposing subscription). - - returns: Subscription object used to unsubscribe from the observable sequence. - */ - public func subscribe( - with object: Object, - onNext: ((Object, Element) -> Void)? = nil, - onError: ((Object, Swift.Error) -> Void)? = nil, - onCompleted: ((Object) -> Void)? = nil, - onDisposed: ((Object) -> Void)? = nil - ) -> Disposable { - subscribe( - onNext: { [weak object] in - guard let object = object else { return } - onNext?(object, $0) - }, - onError: { [weak object] in - guard let object = object else { return } - onError?(object, $0) - }, - onCompleted: { [weak object] in - guard let object = object else { return } - onCompleted?(object) - }, - onDisposed: { [weak object] in - guard let object = object else { return } - onDisposed?(object) - } - ) - } - - /** - Subscribes an element handler, an error handler, a completion handler and disposed handler to an observable sequence. - - - parameter onNext: Action to invoke for each element in the observable sequence. - - parameter onError: Action to invoke upon errored termination of the observable sequence. - - parameter onCompleted: Action to invoke upon graceful termination of the observable sequence. - - parameter onDisposed: Action to invoke upon any type of termination of sequence (if the sequence has - gracefully completed, errored, or if the generation is canceled by disposing subscription). - - returns: Subscription object used to unsubscribe from the observable sequence. - */ - public func subscribe( - onNext: ((Element) -> Void)? = nil, - onError: ((Swift.Error) -> Void)? = nil, - onCompleted: (() -> Void)? = nil, - onDisposed: (() -> Void)? = nil - ) -> Disposable { - let disposable: Disposable - - if let disposed = onDisposed { - disposable = Disposables.create(with: disposed) - } - else { - disposable = Disposables.create() - } - - #if DEBUG - let synchronizationTracker = SynchronizationTracker() - #endif - - let callStack = Hooks.recordCallStackOnError ? Hooks.customCaptureSubscriptionCallstack() : [] - - let observer = AnonymousObserver { event in - - #if DEBUG - synchronizationTracker.register(synchronizationErrorMessage: .default) - defer { synchronizationTracker.unregister() } - #endif - - switch event { - case .next(let value): - onNext?(value) - case .error(let error): - if let onError = onError { - onError(error) - } - else { - Hooks.defaultErrorHandler(callStack, error) - } - disposable.dispose() - case .completed: - onCompleted?() - disposable.dispose() - } - } - return Disposables.create( - self.asObservable().subscribe(observer), - disposable - ) - } -} - -import Foundation - -extension Hooks { - public typealias DefaultErrorHandler = (_ subscriptionCallStack: [String], _ error: Error) -> Void - public typealias CustomCaptureSubscriptionCallstack = () -> [String] - - private static let lock = RecursiveLock() - private static var _defaultErrorHandler: DefaultErrorHandler = { subscriptionCallStack, error in - #if DEBUG - let serializedCallStack = subscriptionCallStack.joined(separator: "\n") - print("Unhandled error happened: \(error)") - if !serializedCallStack.isEmpty { - print("subscription called from:\n\(serializedCallStack)") - } - #endif - } - private static var _customCaptureSubscriptionCallstack: CustomCaptureSubscriptionCallstack = { - #if DEBUG - return Thread.callStackSymbols - #else - return [] - #endif - } - - /// Error handler called in case onError handler wasn't provided. - public static var defaultErrorHandler: DefaultErrorHandler { - get { - lock.performLocked { _defaultErrorHandler } - } - set { - lock.performLocked { _defaultErrorHandler = newValue } - } - } - - /// Subscription callstack block to fetch custom callstack information. - public static var customCaptureSubscriptionCallstack: CustomCaptureSubscriptionCallstack { - get { - lock.performLocked { _customCaptureSubscriptionCallstack } - } - set { - lock.performLocked { _customCaptureSubscriptionCallstack = newValue } - } - } -} - diff --git a/Pods/RxSwift/RxSwift/ObservableType.swift b/Pods/RxSwift/RxSwift/ObservableType.swift deleted file mode 100644 index 279bf7f..0000000 --- a/Pods/RxSwift/RxSwift/ObservableType.swift +++ /dev/null @@ -1,45 +0,0 @@ -// -// ObservableType.swift -// RxSwift -// -// Created by Krunoslav Zaher on 8/8/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/// Represents a push style sequence. -public protocol ObservableType: ObservableConvertibleType { - /** - Subscribes `observer` to receive events for this sequence. - - ### Grammar - - **Next\* (Error | Completed)?** - - * sequences can produce zero or more elements so zero or more `Next` events can be sent to `observer` - * once an `Error` or `Completed` event is sent, the sequence terminates and can't produce any other elements - - It is possible that events are sent from different threads, but no two events can be sent concurrently to - `observer`. - - ### Resource Management - - When sequence sends `Complete` or `Error` event all internal resources that compute sequence elements - will be freed. - - To cancel production of sequence elements and free resources immediately, call `dispose` on returned - subscription. - - - returns: Subscription for `observer` that can be used to cancel production of sequence elements and free resources. - */ - func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element -} - -extension ObservableType { - - /// Default implementation of converting `ObservableType` to `Observable`. - public func asObservable() -> Observable { - // temporary workaround - //return Observable.create(subscribe: self.subscribe) - Observable.create { o in self.subscribe(o) } - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/AddRef.swift b/Pods/RxSwift/RxSwift/Observables/AddRef.swift deleted file mode 100644 index a96dfcb..0000000 --- a/Pods/RxSwift/RxSwift/Observables/AddRef.swift +++ /dev/null @@ -1,44 +0,0 @@ -// -// AddRef.swift -// RxSwift -// -// Created by Junior B. on 30/10/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -final class AddRefSink : Sink, ObserverType { - typealias Element = Observer.Element - - override init(observer: Observer, cancel: Cancelable) { - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - switch event { - case .next: - self.forwardOn(event) - case .completed, .error: - self.forwardOn(event) - self.dispose() - } - } -} - -final class AddRef : Producer { - - private let source: Observable - private let refCount: RefCountDisposable - - init(source: Observable, refCount: RefCountDisposable) { - self.source = source - self.refCount = refCount - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let releaseDisposable = self.refCount.retain() - let sink = AddRefSink(observer: observer, cancel: cancel) - let subscription = Disposables.create(releaseDisposable, self.source.subscribe(sink)) - - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Amb.swift b/Pods/RxSwift/RxSwift/Observables/Amb.swift deleted file mode 100644 index efc17a8..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Amb.swift +++ /dev/null @@ -1,157 +0,0 @@ -// -// Amb.swift -// RxSwift -// -// Created by Krunoslav Zaher on 6/14/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /** - Propagates the observable sequence that reacts first. - - - seealso: [amb operator on reactivex.io](http://reactivex.io/documentation/operators/amb.html) - - - returns: An observable sequence that surfaces any of the given sequences, whichever reacted first. - */ - public static func amb(_ sequence: Sequence) -> Observable - where Sequence.Element == Observable { - sequence.reduce(Observable.never()) { a, o in - a.amb(o.asObservable()) - } - } -} - -extension ObservableType { - - /** - Propagates the observable sequence that reacts first. - - - seealso: [amb operator on reactivex.io](http://reactivex.io/documentation/operators/amb.html) - - - parameter right: Second observable sequence. - - returns: An observable sequence that surfaces either of the given sequences, whichever reacted first. - */ - public func amb - (_ right: O2) - -> Observable where O2.Element == Element { - Amb(left: self.asObservable(), right: right.asObservable()) - } -} - -private enum AmbState { - case neither - case left - case right -} - -final private class AmbObserver: ObserverType { - typealias Element = Observer.Element - typealias Parent = AmbSink - typealias This = AmbObserver - typealias Sink = (This, Event) -> Void - - private let parent: Parent - fileprivate var sink: Sink - fileprivate var cancel: Disposable - - init(parent: Parent, cancel: Disposable, sink: @escaping Sink) { -#if TRACE_RESOURCES - _ = Resources.incrementTotal() -#endif - - self.parent = parent - self.sink = sink - self.cancel = cancel - } - - func on(_ event: Event) { - self.sink(self, event) - if event.isStopEvent { - self.cancel.dispose() - } - } - - deinit { -#if TRACE_RESOURCES - _ = Resources.decrementTotal() -#endif - } -} - -final private class AmbSink: Sink { - typealias Element = Observer.Element - typealias Parent = Amb - typealias AmbObserverType = AmbObserver - - private let parent: Parent - - private let lock = RecursiveLock() - // state - private var choice = AmbState.neither - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(observer: observer, cancel: cancel) - } - - func run() -> Disposable { - let subscription1 = SingleAssignmentDisposable() - let subscription2 = SingleAssignmentDisposable() - let disposeAll = Disposables.create(subscription1, subscription2) - - let forwardEvent = { (o: AmbObserverType, event: Event) -> Void in - self.forwardOn(event) - if event.isStopEvent { - self.dispose() - } - } - - let decide = { (o: AmbObserverType, event: Event, me: AmbState, otherSubscription: Disposable) in - self.lock.performLocked { - if self.choice == .neither { - self.choice = me - o.sink = forwardEvent - o.cancel = disposeAll - otherSubscription.dispose() - } - - if self.choice == me { - self.forwardOn(event) - if event.isStopEvent { - self.dispose() - } - } - } - } - - let sink1 = AmbObserver(parent: self, cancel: subscription1) { o, e in - decide(o, e, .left, subscription2) - } - - let sink2 = AmbObserver(parent: self, cancel: subscription1) { o, e in - decide(o, e, .right, subscription1) - } - - subscription1.setDisposable(self.parent.left.subscribe(sink1)) - subscription2.setDisposable(self.parent.right.subscribe(sink2)) - - return disposeAll - } -} - -final private class Amb: Producer { - fileprivate let left: Observable - fileprivate let right: Observable - - init(left: Observable, right: Observable) { - self.left = left - self.right = right - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = AmbSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/AsMaybe.swift b/Pods/RxSwift/RxSwift/Observables/AsMaybe.swift deleted file mode 100644 index 6fa6257..0000000 --- a/Pods/RxSwift/RxSwift/Observables/AsMaybe.swift +++ /dev/null @@ -1,48 +0,0 @@ -// -// AsMaybe.swift -// RxSwift -// -// Created by Krunoslav Zaher on 3/12/17. -// Copyright © 2017 Krunoslav Zaher. All rights reserved. -// - -private final class AsMaybeSink : Sink, ObserverType { - typealias Element = Observer.Element - - private var element: Event? - - func on(_ event: Event) { - switch event { - case .next: - if self.element != nil { - self.forwardOn(.error(RxError.moreThanOneElement)) - self.dispose() - } - - self.element = event - case .error: - self.forwardOn(event) - self.dispose() - case .completed: - if let element = self.element { - self.forwardOn(element) - } - self.forwardOn(.completed) - self.dispose() - } - } -} - -final class AsMaybe: Producer { - private let source: Observable - - init(source: Observable) { - self.source = source - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = AsMaybeSink(observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/AsSingle.swift b/Pods/RxSwift/RxSwift/Observables/AsSingle.swift deleted file mode 100644 index b39932f..0000000 --- a/Pods/RxSwift/RxSwift/Observables/AsSingle.swift +++ /dev/null @@ -1,51 +0,0 @@ -// -// AsSingle.swift -// RxSwift -// -// Created by Krunoslav Zaher on 3/12/17. -// Copyright © 2017 Krunoslav Zaher. All rights reserved. -// - -private final class AsSingleSink : Sink, ObserverType { - typealias Element = Observer.Element - - private var element: Event? - - func on(_ event: Event) { - switch event { - case .next: - if self.element != nil { - self.forwardOn(.error(RxError.moreThanOneElement)) - self.dispose() - } - - self.element = event - case .error: - self.forwardOn(event) - self.dispose() - case .completed: - if let element = self.element { - self.forwardOn(element) - self.forwardOn(.completed) - } - else { - self.forwardOn(.error(RxError.noElements)) - } - self.dispose() - } - } -} - -final class AsSingle: Producer { - private let source: Observable - - init(source: Observable) { - self.source = source - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = AsSingleSink(observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Buffer.swift b/Pods/RxSwift/RxSwift/Observables/Buffer.swift deleted file mode 100644 index 087c4cf..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Buffer.swift +++ /dev/null @@ -1,138 +0,0 @@ -// -// Buffer.swift -// RxSwift -// -// Created by Krunoslav Zaher on 9/13/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - - /** - Projects each element of an observable sequence into a buffer that's sent out when either it's full or a given amount of time has elapsed, using the specified scheduler to run timers. - - A useful real-world analogy of this overload is the behavior of a ferry leaving the dock when all seats are taken, or at the scheduled time of departure, whichever event occurs first. - - - seealso: [buffer operator on reactivex.io](http://reactivex.io/documentation/operators/buffer.html) - - - parameter timeSpan: Maximum time length of a buffer. - - parameter count: Maximum element count of a buffer. - - parameter scheduler: Scheduler to run buffering timers on. - - returns: An observable sequence of buffers. - */ - public func buffer(timeSpan: RxTimeInterval, count: Int, scheduler: SchedulerType) - -> Observable<[Element]> { - BufferTimeCount(source: self.asObservable(), timeSpan: timeSpan, count: count, scheduler: scheduler) - } -} - -final private class BufferTimeCount: Producer<[Element]> { - - fileprivate let timeSpan: RxTimeInterval - fileprivate let count: Int - fileprivate let scheduler: SchedulerType - fileprivate let source: Observable - - init(source: Observable, timeSpan: RxTimeInterval, count: Int, scheduler: SchedulerType) { - self.source = source - self.timeSpan = timeSpan - self.count = count - self.scheduler = scheduler - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == [Element] { - let sink = BufferTimeCountSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} - -final private class BufferTimeCountSink - : Sink - , LockOwnerType - , ObserverType - , SynchronizedOnType where Observer.Element == [Element] { - typealias Parent = BufferTimeCount - - private let parent: Parent - - let lock = RecursiveLock() - - // state - private let timerD = SerialDisposable() - private var buffer = [Element]() - private var windowID = 0 - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(observer: observer, cancel: cancel) - } - - func run() -> Disposable { - self.createTimer(self.windowID) - return Disposables.create(timerD, parent.source.subscribe(self)) - } - - func startNewWindowAndSendCurrentOne() { - self.windowID = self.windowID &+ 1 - let windowID = self.windowID - - let buffer = self.buffer - self.buffer = [] - self.forwardOn(.next(buffer)) - - self.createTimer(windowID) - } - - func on(_ event: Event) { - self.synchronizedOn(event) - } - - func synchronized_on(_ event: Event) { - switch event { - case .next(let element): - self.buffer.append(element) - - if self.buffer.count == self.parent.count { - self.startNewWindowAndSendCurrentOne() - } - - case .error(let error): - self.buffer = [] - self.forwardOn(.error(error)) - self.dispose() - case .completed: - self.forwardOn(.next(self.buffer)) - self.forwardOn(.completed) - self.dispose() - } - } - - func createTimer(_ windowID: Int) { - if self.timerD.isDisposed { - return - } - - if self.windowID != windowID { - return - } - - let nextTimer = SingleAssignmentDisposable() - - self.timerD.disposable = nextTimer - - let disposable = self.parent.scheduler.scheduleRelative(windowID, dueTime: self.parent.timeSpan) { previousWindowID in - self.lock.performLocked { - if previousWindowID != self.windowID { - return - } - - self.startNewWindowAndSendCurrentOne() - } - - return Disposables.create() - } - - nextTimer.setDisposable(disposable) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Catch.swift b/Pods/RxSwift/RxSwift/Observables/Catch.swift deleted file mode 100644 index 2efd660..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Catch.swift +++ /dev/null @@ -1,275 +0,0 @@ -// -// Catch.swift -// RxSwift -// -// Created by Krunoslav Zaher on 4/19/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - - /** - Continues an observable sequence that is terminated by an error with the observable sequence produced by the handler. - - - seealso: [catch operator on reactivex.io](http://reactivex.io/documentation/operators/catch.html) - - - parameter handler: Error handler function, producing another observable sequence. - - returns: An observable sequence containing the source sequence's elements, followed by the elements produced by the handler's resulting observable sequence in case an error occurred. - */ - public func `catch`(_ handler: @escaping (Swift.Error) throws -> Observable) - -> Observable { - Catch(source: self.asObservable(), handler: handler) - } - - /** - Continues an observable sequence that is terminated by an error with the observable sequence produced by the handler. - - - seealso: [catch operator on reactivex.io](http://reactivex.io/documentation/operators/catch.html) - - - parameter handler: Error handler function, producing another observable sequence. - - returns: An observable sequence containing the source sequence's elements, followed by the elements produced by the handler's resulting observable sequence in case an error occurred. - */ - @available(*, deprecated, renamed: "catch(_:)") - public func catchError(_ handler: @escaping (Swift.Error) throws -> Observable) - -> Observable { - `catch`(handler) - } - - /** - Continues an observable sequence that is terminated by an error with a single element. - - - seealso: [catch operator on reactivex.io](http://reactivex.io/documentation/operators/catch.html) - - - parameter element: Last element in an observable sequence in case error occurs. - - returns: An observable sequence containing the source sequence's elements, followed by the `element` in case an error occurred. - */ - public func catchAndReturn(_ element: Element) - -> Observable { - Catch(source: self.asObservable(), handler: { _ in Observable.just(element) }) - } - - /** - Continues an observable sequence that is terminated by an error with a single element. - - - seealso: [catch operator on reactivex.io](http://reactivex.io/documentation/operators/catch.html) - - - parameter element: Last element in an observable sequence in case error occurs. - - returns: An observable sequence containing the source sequence's elements, followed by the `element` in case an error occurred. - */ - @available(*, deprecated, renamed: "catchAndReturn(_:)") - public func catchErrorJustReturn(_ element: Element) - -> Observable { - catchAndReturn(element) - } -} - -extension ObservableType { - /** - Continues an observable sequence that is terminated by an error with the next observable sequence. - - - seealso: [catch operator on reactivex.io](http://reactivex.io/documentation/operators/catch.html) - - - returns: An observable sequence containing elements from consecutive source sequences until a source sequence terminates successfully. - */ - @available(*, deprecated, renamed: "catch(onSuccess:onFailure:onDisposed:)") - public static func catchError(_ sequence: Sequence) -> Observable - where Sequence.Element == Observable { - `catch`(sequence: sequence) - } - - /** - Continues an observable sequence that is terminated by an error with the next observable sequence. - - - seealso: [catch operator on reactivex.io](http://reactivex.io/documentation/operators/catch.html) - - - returns: An observable sequence containing elements from consecutive source sequences until a source sequence terminates successfully. - */ - public static func `catch`(sequence: Sequence) -> Observable - where Sequence.Element == Observable { - CatchSequence(sources: sequence) - } -} - -extension ObservableType { - - /** - Repeats the source observable sequence until it successfully terminates. - - **This could potentially create an infinite sequence.** - - - seealso: [retry operator on reactivex.io](http://reactivex.io/documentation/operators/retry.html) - - - returns: Observable sequence to repeat until it successfully terminates. - */ - public func retry() -> Observable { - CatchSequence(sources: InfiniteSequence(repeatedValue: self.asObservable())) - } - - /** - Repeats the source observable sequence the specified number of times in case of an error or until it successfully terminates. - - If you encounter an error and want it to retry once, then you must use `retry(2)` - - - seealso: [retry operator on reactivex.io](http://reactivex.io/documentation/operators/retry.html) - - - parameter maxAttemptCount: Maximum number of times to repeat the sequence. - - returns: An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully. - */ - public func retry(_ maxAttemptCount: Int) - -> Observable { - CatchSequence(sources: Swift.repeatElement(self.asObservable(), count: maxAttemptCount)) - } -} - -// catch with callback - -final private class CatchSinkProxy: ObserverType { - typealias Element = Observer.Element - typealias Parent = CatchSink - - private let parent: Parent - - init(parent: Parent) { - self.parent = parent - } - - func on(_ event: Event) { - self.parent.forwardOn(event) - - switch event { - case .next: - break - case .error, .completed: - self.parent.dispose() - } - } -} - -final private class CatchSink: Sink, ObserverType { - typealias Element = Observer.Element - typealias Parent = Catch - - private let parent: Parent - private let subscription = SerialDisposable() - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(observer: observer, cancel: cancel) - } - - func run() -> Disposable { - let d1 = SingleAssignmentDisposable() - self.subscription.disposable = d1 - d1.setDisposable(self.parent.source.subscribe(self)) - - return self.subscription - } - - func on(_ event: Event) { - switch event { - case .next: - self.forwardOn(event) - case .completed: - self.forwardOn(event) - self.dispose() - case .error(let error): - do { - let catchSequence = try self.parent.handler(error) - - let observer = CatchSinkProxy(parent: self) - - self.subscription.disposable = catchSequence.subscribe(observer) - } - catch let e { - self.forwardOn(.error(e)) - self.dispose() - } - } - } -} - -final private class Catch: Producer { - typealias Handler = (Swift.Error) throws -> Observable - - fileprivate let source: Observable - fileprivate let handler: Handler - - init(source: Observable, handler: @escaping Handler) { - self.source = source - self.handler = handler - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = CatchSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} - -// catch enumerable - -final private class CatchSequenceSink - : TailRecursiveSink - , ObserverType where Sequence.Element: ObservableConvertibleType, Sequence.Element.Element == Observer.Element { - typealias Element = Observer.Element - typealias Parent = CatchSequence - - private var lastError: Swift.Error? - - override init(observer: Observer, cancel: Cancelable) { - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - switch event { - case .next: - self.forwardOn(event) - case .error(let error): - self.lastError = error - self.schedule(.moveNext) - case .completed: - self.forwardOn(event) - self.dispose() - } - } - - override func subscribeToNext(_ source: Observable) -> Disposable { - source.subscribe(self) - } - - override func done() { - if let lastError = self.lastError { - self.forwardOn(.error(lastError)) - } - else { - self.forwardOn(.completed) - } - - self.dispose() - } - - override func extract(_ observable: Observable) -> SequenceGenerator? { - if let onError = observable as? CatchSequence { - return (onError.sources.makeIterator(), nil) - } - else { - return nil - } - } -} - -final private class CatchSequence: Producer where Sequence.Element: ObservableConvertibleType { - typealias Element = Sequence.Element.Element - - let sources: Sequence - - init(sources: Sequence) { - self.sources = sources - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = CatchSequenceSink(observer: observer, cancel: cancel) - let subscription = sink.run((self.sources.makeIterator(), nil)) - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/CombineLatest+Collection.swift b/Pods/RxSwift/RxSwift/Observables/CombineLatest+Collection.swift deleted file mode 100644 index 4350851..0000000 --- a/Pods/RxSwift/RxSwift/Observables/CombineLatest+Collection.swift +++ /dev/null @@ -1,165 +0,0 @@ -// -// CombineLatest+Collection.swift -// RxSwift -// -// Created by Krunoslav Zaher on 8/29/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. - - - seealso: [combinelatest operator on reactivex.io](http://reactivex.io/documentation/operators/combinelatest.html) - - - parameter resultSelector: Function to invoke whenever any of the sources produces an element. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func combineLatest(_ collection: Collection, resultSelector: @escaping ([Collection.Element.Element]) throws -> Element) -> Observable - where Collection.Element: ObservableType { - CombineLatestCollectionType(sources: collection, resultSelector: resultSelector) - } - - /** - Merges the specified observable sequences into one observable sequence whenever any of the observable sequences produces an element. - - - seealso: [combinelatest operator on reactivex.io](http://reactivex.io/documentation/operators/combinelatest.html) - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func combineLatest(_ collection: Collection) -> Observable<[Element]> - where Collection.Element: ObservableType, Collection.Element.Element == Element { - CombineLatestCollectionType(sources: collection, resultSelector: { $0 }) - } -} - -final private class CombineLatestCollectionTypeSink - : Sink where Collection.Element: ObservableConvertibleType { - typealias Result = Observer.Element - typealias Parent = CombineLatestCollectionType - typealias SourceElement = Collection.Element.Element - - let parent: Parent - - let lock = RecursiveLock() - - // state - var numberOfValues = 0 - var values: [SourceElement?] - var isDone: [Bool] - var numberOfDone = 0 - var subscriptions: [SingleAssignmentDisposable] - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - self.values = [SourceElement?](repeating: nil, count: parent.count) - self.isDone = [Bool](repeating: false, count: parent.count) - self.subscriptions = [SingleAssignmentDisposable]() - self.subscriptions.reserveCapacity(parent.count) - - for _ in 0 ..< parent.count { - self.subscriptions.append(SingleAssignmentDisposable()) - } - - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event, atIndex: Int) { - self.lock.lock(); defer { self.lock.unlock() } - switch event { - case .next(let element): - if self.values[atIndex] == nil { - self.numberOfValues += 1 - } - - self.values[atIndex] = element - - if self.numberOfValues < self.parent.count { - let numberOfOthersThatAreDone = self.numberOfDone - (self.isDone[atIndex] ? 1 : 0) - if numberOfOthersThatAreDone == self.parent.count - 1 { - self.forwardOn(.completed) - self.dispose() - } - return - } - - do { - let result = try self.parent.resultSelector(self.values.map { $0! }) - self.forwardOn(.next(result)) - } - catch let error { - self.forwardOn(.error(error)) - self.dispose() - } - - case .error(let error): - self.forwardOn(.error(error)) - self.dispose() - case .completed: - if self.isDone[atIndex] { - return - } - - self.isDone[atIndex] = true - self.numberOfDone += 1 - - if self.numberOfDone == self.parent.count { - self.forwardOn(.completed) - self.dispose() - } - else { - self.subscriptions[atIndex].dispose() - } - } - } - - func run() -> Disposable { - var j = 0 - for i in self.parent.sources { - let index = j - let source = i.asObservable() - let disposable = source.subscribe(AnyObserver { event in - self.on(event, atIndex: index) - }) - - self.subscriptions[j].setDisposable(disposable) - - j += 1 - } - - if self.parent.sources.isEmpty { - do { - let result = try self.parent.resultSelector([]) - self.forwardOn(.next(result)) - self.forwardOn(.completed) - self.dispose() - } - catch let error { - self.forwardOn(.error(error)) - self.dispose() - } - } - - return Disposables.create(subscriptions) - } -} - -final private class CombineLatestCollectionType: Producer where Collection.Element: ObservableConvertibleType { - typealias ResultSelector = ([Collection.Element.Element]) throws -> Result - - let sources: Collection - let resultSelector: ResultSelector - let count: Int - - init(sources: Collection, resultSelector: @escaping ResultSelector) { - self.sources = sources - self.resultSelector = resultSelector - self.count = self.sources.count - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Result { - let sink = CombineLatestCollectionTypeSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/CombineLatest+arity.swift b/Pods/RxSwift/RxSwift/Observables/CombineLatest+arity.swift deleted file mode 100644 index e69bbab..0000000 --- a/Pods/RxSwift/RxSwift/Observables/CombineLatest+arity.swift +++ /dev/null @@ -1,843 +0,0 @@ -// This file is autogenerated. Take a look at `Preprocessor` target in RxSwift project -// -// CombineLatest+arity.swift -// RxSwift -// -// Created by Krunoslav Zaher on 4/22/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - - - -// 2 - -extension ObservableType { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. - - - seealso: [combineLatest operator on reactivex.io](http://reactivex.io/documentation/operators/combinelatest.html) - - - parameter resultSelector: Function to invoke whenever any of the sources produces an element. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, resultSelector: @escaping (O1.Element, O2.Element) throws -> Element) - -> Observable { - return CombineLatest2( - source1: source1.asObservable(), source2: source2.asObservable(), - resultSelector: resultSelector - ) - } -} - -extension ObservableType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of tuples whenever any of the observable sequences produces an element. - - - seealso: [combineLatest operator on reactivex.io](http://reactivex.io/documentation/operators/combinelatest.html) - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2) - -> Observable<(O1.Element, O2.Element)> { - return CombineLatest2( - source1: source1.asObservable(), source2: source2.asObservable(), - resultSelector: { ($0, $1) } - ) - } -} - -final class CombineLatestSink2_ : CombineLatestSink { - typealias Result = Observer.Element - typealias Parent = CombineLatest2 - - let parent: Parent - - var latestElement1: E1! = nil - var latestElement2: E2! = nil - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(arity: 2, observer: observer, cancel: cancel) - } - - func run() -> Disposable { - let subscription1 = SingleAssignmentDisposable() - let subscription2 = SingleAssignmentDisposable() - - let observer1 = CombineLatestObserver(lock: self.lock, parent: self, index: 0, setLatestValue: { (e: E1) -> Void in self.latestElement1 = e }, this: subscription1) - let observer2 = CombineLatestObserver(lock: self.lock, parent: self, index: 1, setLatestValue: { (e: E2) -> Void in self.latestElement2 = e }, this: subscription2) - - subscription1.setDisposable(self.parent.source1.subscribe(observer1)) - subscription2.setDisposable(self.parent.source2.subscribe(observer2)) - - return Disposables.create([ - subscription1, - subscription2 - ]) - } - - override func getResult() throws -> Result { - try self.parent.resultSelector(self.latestElement1, self.latestElement2) - } -} - -final class CombineLatest2 : Producer { - typealias ResultSelector = (E1, E2) throws -> Result - - let source1: Observable - let source2: Observable - - let resultSelector: ResultSelector - - init(source1: Observable, source2: Observable, resultSelector: @escaping ResultSelector) { - self.source1 = source1 - self.source2 = source2 - - self.resultSelector = resultSelector - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Result { - let sink = CombineLatestSink2_(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} - - - -// 3 - -extension ObservableType { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. - - - seealso: [combineLatest operator on reactivex.io](http://reactivex.io/documentation/operators/combinelatest.html) - - - parameter resultSelector: Function to invoke whenever any of the sources produces an element. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, _ source3: O3, resultSelector: @escaping (O1.Element, O2.Element, O3.Element) throws -> Element) - -> Observable { - return CombineLatest3( - source1: source1.asObservable(), source2: source2.asObservable(), source3: source3.asObservable(), - resultSelector: resultSelector - ) - } -} - -extension ObservableType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of tuples whenever any of the observable sequences produces an element. - - - seealso: [combineLatest operator on reactivex.io](http://reactivex.io/documentation/operators/combinelatest.html) - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, _ source3: O3) - -> Observable<(O1.Element, O2.Element, O3.Element)> { - return CombineLatest3( - source1: source1.asObservable(), source2: source2.asObservable(), source3: source3.asObservable(), - resultSelector: { ($0, $1, $2) } - ) - } -} - -final class CombineLatestSink3_ : CombineLatestSink { - typealias Result = Observer.Element - typealias Parent = CombineLatest3 - - let parent: Parent - - var latestElement1: E1! = nil - var latestElement2: E2! = nil - var latestElement3: E3! = nil - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(arity: 3, observer: observer, cancel: cancel) - } - - func run() -> Disposable { - let subscription1 = SingleAssignmentDisposable() - let subscription2 = SingleAssignmentDisposable() - let subscription3 = SingleAssignmentDisposable() - - let observer1 = CombineLatestObserver(lock: self.lock, parent: self, index: 0, setLatestValue: { (e: E1) -> Void in self.latestElement1 = e }, this: subscription1) - let observer2 = CombineLatestObserver(lock: self.lock, parent: self, index: 1, setLatestValue: { (e: E2) -> Void in self.latestElement2 = e }, this: subscription2) - let observer3 = CombineLatestObserver(lock: self.lock, parent: self, index: 2, setLatestValue: { (e: E3) -> Void in self.latestElement3 = e }, this: subscription3) - - subscription1.setDisposable(self.parent.source1.subscribe(observer1)) - subscription2.setDisposable(self.parent.source2.subscribe(observer2)) - subscription3.setDisposable(self.parent.source3.subscribe(observer3)) - - return Disposables.create([ - subscription1, - subscription2, - subscription3 - ]) - } - - override func getResult() throws -> Result { - try self.parent.resultSelector(self.latestElement1, self.latestElement2, self.latestElement3) - } -} - -final class CombineLatest3 : Producer { - typealias ResultSelector = (E1, E2, E3) throws -> Result - - let source1: Observable - let source2: Observable - let source3: Observable - - let resultSelector: ResultSelector - - init(source1: Observable, source2: Observable, source3: Observable, resultSelector: @escaping ResultSelector) { - self.source1 = source1 - self.source2 = source2 - self.source3 = source3 - - self.resultSelector = resultSelector - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Result { - let sink = CombineLatestSink3_(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} - - - -// 4 - -extension ObservableType { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. - - - seealso: [combineLatest operator on reactivex.io](http://reactivex.io/documentation/operators/combinelatest.html) - - - parameter resultSelector: Function to invoke whenever any of the sources produces an element. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, resultSelector: @escaping (O1.Element, O2.Element, O3.Element, O4.Element) throws -> Element) - -> Observable { - return CombineLatest4( - source1: source1.asObservable(), source2: source2.asObservable(), source3: source3.asObservable(), source4: source4.asObservable(), - resultSelector: resultSelector - ) - } -} - -extension ObservableType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of tuples whenever any of the observable sequences produces an element. - - - seealso: [combineLatest operator on reactivex.io](http://reactivex.io/documentation/operators/combinelatest.html) - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4) - -> Observable<(O1.Element, O2.Element, O3.Element, O4.Element)> { - return CombineLatest4( - source1: source1.asObservable(), source2: source2.asObservable(), source3: source3.asObservable(), source4: source4.asObservable(), - resultSelector: { ($0, $1, $2, $3) } - ) - } -} - -final class CombineLatestSink4_ : CombineLatestSink { - typealias Result = Observer.Element - typealias Parent = CombineLatest4 - - let parent: Parent - - var latestElement1: E1! = nil - var latestElement2: E2! = nil - var latestElement3: E3! = nil - var latestElement4: E4! = nil - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(arity: 4, observer: observer, cancel: cancel) - } - - func run() -> Disposable { - let subscription1 = SingleAssignmentDisposable() - let subscription2 = SingleAssignmentDisposable() - let subscription3 = SingleAssignmentDisposable() - let subscription4 = SingleAssignmentDisposable() - - let observer1 = CombineLatestObserver(lock: self.lock, parent: self, index: 0, setLatestValue: { (e: E1) -> Void in self.latestElement1 = e }, this: subscription1) - let observer2 = CombineLatestObserver(lock: self.lock, parent: self, index: 1, setLatestValue: { (e: E2) -> Void in self.latestElement2 = e }, this: subscription2) - let observer3 = CombineLatestObserver(lock: self.lock, parent: self, index: 2, setLatestValue: { (e: E3) -> Void in self.latestElement3 = e }, this: subscription3) - let observer4 = CombineLatestObserver(lock: self.lock, parent: self, index: 3, setLatestValue: { (e: E4) -> Void in self.latestElement4 = e }, this: subscription4) - - subscription1.setDisposable(self.parent.source1.subscribe(observer1)) - subscription2.setDisposable(self.parent.source2.subscribe(observer2)) - subscription3.setDisposable(self.parent.source3.subscribe(observer3)) - subscription4.setDisposable(self.parent.source4.subscribe(observer4)) - - return Disposables.create([ - subscription1, - subscription2, - subscription3, - subscription4 - ]) - } - - override func getResult() throws -> Result { - try self.parent.resultSelector(self.latestElement1, self.latestElement2, self.latestElement3, self.latestElement4) - } -} - -final class CombineLatest4 : Producer { - typealias ResultSelector = (E1, E2, E3, E4) throws -> Result - - let source1: Observable - let source2: Observable - let source3: Observable - let source4: Observable - - let resultSelector: ResultSelector - - init(source1: Observable, source2: Observable, source3: Observable, source4: Observable, resultSelector: @escaping ResultSelector) { - self.source1 = source1 - self.source2 = source2 - self.source3 = source3 - self.source4 = source4 - - self.resultSelector = resultSelector - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Result { - let sink = CombineLatestSink4_(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} - - - -// 5 - -extension ObservableType { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. - - - seealso: [combineLatest operator on reactivex.io](http://reactivex.io/documentation/operators/combinelatest.html) - - - parameter resultSelector: Function to invoke whenever any of the sources produces an element. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, resultSelector: @escaping (O1.Element, O2.Element, O3.Element, O4.Element, O5.Element) throws -> Element) - -> Observable { - return CombineLatest5( - source1: source1.asObservable(), source2: source2.asObservable(), source3: source3.asObservable(), source4: source4.asObservable(), source5: source5.asObservable(), - resultSelector: resultSelector - ) - } -} - -extension ObservableType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of tuples whenever any of the observable sequences produces an element. - - - seealso: [combineLatest operator on reactivex.io](http://reactivex.io/documentation/operators/combinelatest.html) - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5) - -> Observable<(O1.Element, O2.Element, O3.Element, O4.Element, O5.Element)> { - return CombineLatest5( - source1: source1.asObservable(), source2: source2.asObservable(), source3: source3.asObservable(), source4: source4.asObservable(), source5: source5.asObservable(), - resultSelector: { ($0, $1, $2, $3, $4) } - ) - } -} - -final class CombineLatestSink5_ : CombineLatestSink { - typealias Result = Observer.Element - typealias Parent = CombineLatest5 - - let parent: Parent - - var latestElement1: E1! = nil - var latestElement2: E2! = nil - var latestElement3: E3! = nil - var latestElement4: E4! = nil - var latestElement5: E5! = nil - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(arity: 5, observer: observer, cancel: cancel) - } - - func run() -> Disposable { - let subscription1 = SingleAssignmentDisposable() - let subscription2 = SingleAssignmentDisposable() - let subscription3 = SingleAssignmentDisposable() - let subscription4 = SingleAssignmentDisposable() - let subscription5 = SingleAssignmentDisposable() - - let observer1 = CombineLatestObserver(lock: self.lock, parent: self, index: 0, setLatestValue: { (e: E1) -> Void in self.latestElement1 = e }, this: subscription1) - let observer2 = CombineLatestObserver(lock: self.lock, parent: self, index: 1, setLatestValue: { (e: E2) -> Void in self.latestElement2 = e }, this: subscription2) - let observer3 = CombineLatestObserver(lock: self.lock, parent: self, index: 2, setLatestValue: { (e: E3) -> Void in self.latestElement3 = e }, this: subscription3) - let observer4 = CombineLatestObserver(lock: self.lock, parent: self, index: 3, setLatestValue: { (e: E4) -> Void in self.latestElement4 = e }, this: subscription4) - let observer5 = CombineLatestObserver(lock: self.lock, parent: self, index: 4, setLatestValue: { (e: E5) -> Void in self.latestElement5 = e }, this: subscription5) - - subscription1.setDisposable(self.parent.source1.subscribe(observer1)) - subscription2.setDisposable(self.parent.source2.subscribe(observer2)) - subscription3.setDisposable(self.parent.source3.subscribe(observer3)) - subscription4.setDisposable(self.parent.source4.subscribe(observer4)) - subscription5.setDisposable(self.parent.source5.subscribe(observer5)) - - return Disposables.create([ - subscription1, - subscription2, - subscription3, - subscription4, - subscription5 - ]) - } - - override func getResult() throws -> Result { - try self.parent.resultSelector(self.latestElement1, self.latestElement2, self.latestElement3, self.latestElement4, self.latestElement5) - } -} - -final class CombineLatest5 : Producer { - typealias ResultSelector = (E1, E2, E3, E4, E5) throws -> Result - - let source1: Observable - let source2: Observable - let source3: Observable - let source4: Observable - let source5: Observable - - let resultSelector: ResultSelector - - init(source1: Observable, source2: Observable, source3: Observable, source4: Observable, source5: Observable, resultSelector: @escaping ResultSelector) { - self.source1 = source1 - self.source2 = source2 - self.source3 = source3 - self.source4 = source4 - self.source5 = source5 - - self.resultSelector = resultSelector - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Result { - let sink = CombineLatestSink5_(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} - - - -// 6 - -extension ObservableType { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. - - - seealso: [combineLatest operator on reactivex.io](http://reactivex.io/documentation/operators/combinelatest.html) - - - parameter resultSelector: Function to invoke whenever any of the sources produces an element. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, resultSelector: @escaping (O1.Element, O2.Element, O3.Element, O4.Element, O5.Element, O6.Element) throws -> Element) - -> Observable { - return CombineLatest6( - source1: source1.asObservable(), source2: source2.asObservable(), source3: source3.asObservable(), source4: source4.asObservable(), source5: source5.asObservable(), source6: source6.asObservable(), - resultSelector: resultSelector - ) - } -} - -extension ObservableType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of tuples whenever any of the observable sequences produces an element. - - - seealso: [combineLatest operator on reactivex.io](http://reactivex.io/documentation/operators/combinelatest.html) - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6) - -> Observable<(O1.Element, O2.Element, O3.Element, O4.Element, O5.Element, O6.Element)> { - return CombineLatest6( - source1: source1.asObservable(), source2: source2.asObservable(), source3: source3.asObservable(), source4: source4.asObservable(), source5: source5.asObservable(), source6: source6.asObservable(), - resultSelector: { ($0, $1, $2, $3, $4, $5) } - ) - } -} - -final class CombineLatestSink6_ : CombineLatestSink { - typealias Result = Observer.Element - typealias Parent = CombineLatest6 - - let parent: Parent - - var latestElement1: E1! = nil - var latestElement2: E2! = nil - var latestElement3: E3! = nil - var latestElement4: E4! = nil - var latestElement5: E5! = nil - var latestElement6: E6! = nil - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(arity: 6, observer: observer, cancel: cancel) - } - - func run() -> Disposable { - let subscription1 = SingleAssignmentDisposable() - let subscription2 = SingleAssignmentDisposable() - let subscription3 = SingleAssignmentDisposable() - let subscription4 = SingleAssignmentDisposable() - let subscription5 = SingleAssignmentDisposable() - let subscription6 = SingleAssignmentDisposable() - - let observer1 = CombineLatestObserver(lock: self.lock, parent: self, index: 0, setLatestValue: { (e: E1) -> Void in self.latestElement1 = e }, this: subscription1) - let observer2 = CombineLatestObserver(lock: self.lock, parent: self, index: 1, setLatestValue: { (e: E2) -> Void in self.latestElement2 = e }, this: subscription2) - let observer3 = CombineLatestObserver(lock: self.lock, parent: self, index: 2, setLatestValue: { (e: E3) -> Void in self.latestElement3 = e }, this: subscription3) - let observer4 = CombineLatestObserver(lock: self.lock, parent: self, index: 3, setLatestValue: { (e: E4) -> Void in self.latestElement4 = e }, this: subscription4) - let observer5 = CombineLatestObserver(lock: self.lock, parent: self, index: 4, setLatestValue: { (e: E5) -> Void in self.latestElement5 = e }, this: subscription5) - let observer6 = CombineLatestObserver(lock: self.lock, parent: self, index: 5, setLatestValue: { (e: E6) -> Void in self.latestElement6 = e }, this: subscription6) - - subscription1.setDisposable(self.parent.source1.subscribe(observer1)) - subscription2.setDisposable(self.parent.source2.subscribe(observer2)) - subscription3.setDisposable(self.parent.source3.subscribe(observer3)) - subscription4.setDisposable(self.parent.source4.subscribe(observer4)) - subscription5.setDisposable(self.parent.source5.subscribe(observer5)) - subscription6.setDisposable(self.parent.source6.subscribe(observer6)) - - return Disposables.create([ - subscription1, - subscription2, - subscription3, - subscription4, - subscription5, - subscription6 - ]) - } - - override func getResult() throws -> Result { - try self.parent.resultSelector(self.latestElement1, self.latestElement2, self.latestElement3, self.latestElement4, self.latestElement5, self.latestElement6) - } -} - -final class CombineLatest6 : Producer { - typealias ResultSelector = (E1, E2, E3, E4, E5, E6) throws -> Result - - let source1: Observable - let source2: Observable - let source3: Observable - let source4: Observable - let source5: Observable - let source6: Observable - - let resultSelector: ResultSelector - - init(source1: Observable, source2: Observable, source3: Observable, source4: Observable, source5: Observable, source6: Observable, resultSelector: @escaping ResultSelector) { - self.source1 = source1 - self.source2 = source2 - self.source3 = source3 - self.source4 = source4 - self.source5 = source5 - self.source6 = source6 - - self.resultSelector = resultSelector - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Result { - let sink = CombineLatestSink6_(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} - - - -// 7 - -extension ObservableType { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. - - - seealso: [combineLatest operator on reactivex.io](http://reactivex.io/documentation/operators/combinelatest.html) - - - parameter resultSelector: Function to invoke whenever any of the sources produces an element. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7, resultSelector: @escaping (O1.Element, O2.Element, O3.Element, O4.Element, O5.Element, O6.Element, O7.Element) throws -> Element) - -> Observable { - return CombineLatest7( - source1: source1.asObservable(), source2: source2.asObservable(), source3: source3.asObservable(), source4: source4.asObservable(), source5: source5.asObservable(), source6: source6.asObservable(), source7: source7.asObservable(), - resultSelector: resultSelector - ) - } -} - -extension ObservableType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of tuples whenever any of the observable sequences produces an element. - - - seealso: [combineLatest operator on reactivex.io](http://reactivex.io/documentation/operators/combinelatest.html) - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7) - -> Observable<(O1.Element, O2.Element, O3.Element, O4.Element, O5.Element, O6.Element, O7.Element)> { - return CombineLatest7( - source1: source1.asObservable(), source2: source2.asObservable(), source3: source3.asObservable(), source4: source4.asObservable(), source5: source5.asObservable(), source6: source6.asObservable(), source7: source7.asObservable(), - resultSelector: { ($0, $1, $2, $3, $4, $5, $6) } - ) - } -} - -final class CombineLatestSink7_ : CombineLatestSink { - typealias Result = Observer.Element - typealias Parent = CombineLatest7 - - let parent: Parent - - var latestElement1: E1! = nil - var latestElement2: E2! = nil - var latestElement3: E3! = nil - var latestElement4: E4! = nil - var latestElement5: E5! = nil - var latestElement6: E6! = nil - var latestElement7: E7! = nil - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(arity: 7, observer: observer, cancel: cancel) - } - - func run() -> Disposable { - let subscription1 = SingleAssignmentDisposable() - let subscription2 = SingleAssignmentDisposable() - let subscription3 = SingleAssignmentDisposable() - let subscription4 = SingleAssignmentDisposable() - let subscription5 = SingleAssignmentDisposable() - let subscription6 = SingleAssignmentDisposable() - let subscription7 = SingleAssignmentDisposable() - - let observer1 = CombineLatestObserver(lock: self.lock, parent: self, index: 0, setLatestValue: { (e: E1) -> Void in self.latestElement1 = e }, this: subscription1) - let observer2 = CombineLatestObserver(lock: self.lock, parent: self, index: 1, setLatestValue: { (e: E2) -> Void in self.latestElement2 = e }, this: subscription2) - let observer3 = CombineLatestObserver(lock: self.lock, parent: self, index: 2, setLatestValue: { (e: E3) -> Void in self.latestElement3 = e }, this: subscription3) - let observer4 = CombineLatestObserver(lock: self.lock, parent: self, index: 3, setLatestValue: { (e: E4) -> Void in self.latestElement4 = e }, this: subscription4) - let observer5 = CombineLatestObserver(lock: self.lock, parent: self, index: 4, setLatestValue: { (e: E5) -> Void in self.latestElement5 = e }, this: subscription5) - let observer6 = CombineLatestObserver(lock: self.lock, parent: self, index: 5, setLatestValue: { (e: E6) -> Void in self.latestElement6 = e }, this: subscription6) - let observer7 = CombineLatestObserver(lock: self.lock, parent: self, index: 6, setLatestValue: { (e: E7) -> Void in self.latestElement7 = e }, this: subscription7) - - subscription1.setDisposable(self.parent.source1.subscribe(observer1)) - subscription2.setDisposable(self.parent.source2.subscribe(observer2)) - subscription3.setDisposable(self.parent.source3.subscribe(observer3)) - subscription4.setDisposable(self.parent.source4.subscribe(observer4)) - subscription5.setDisposable(self.parent.source5.subscribe(observer5)) - subscription6.setDisposable(self.parent.source6.subscribe(observer6)) - subscription7.setDisposable(self.parent.source7.subscribe(observer7)) - - return Disposables.create([ - subscription1, - subscription2, - subscription3, - subscription4, - subscription5, - subscription6, - subscription7 - ]) - } - - override func getResult() throws -> Result { - try self.parent.resultSelector(self.latestElement1, self.latestElement2, self.latestElement3, self.latestElement4, self.latestElement5, self.latestElement6, self.latestElement7) - } -} - -final class CombineLatest7 : Producer { - typealias ResultSelector = (E1, E2, E3, E4, E5, E6, E7) throws -> Result - - let source1: Observable - let source2: Observable - let source3: Observable - let source4: Observable - let source5: Observable - let source6: Observable - let source7: Observable - - let resultSelector: ResultSelector - - init(source1: Observable, source2: Observable, source3: Observable, source4: Observable, source5: Observable, source6: Observable, source7: Observable, resultSelector: @escaping ResultSelector) { - self.source1 = source1 - self.source2 = source2 - self.source3 = source3 - self.source4 = source4 - self.source5 = source5 - self.source6 = source6 - self.source7 = source7 - - self.resultSelector = resultSelector - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Result { - let sink = CombineLatestSink7_(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} - - - -// 8 - -extension ObservableType { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. - - - seealso: [combineLatest operator on reactivex.io](http://reactivex.io/documentation/operators/combinelatest.html) - - - parameter resultSelector: Function to invoke whenever any of the sources produces an element. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7, _ source8: O8, resultSelector: @escaping (O1.Element, O2.Element, O3.Element, O4.Element, O5.Element, O6.Element, O7.Element, O8.Element) throws -> Element) - -> Observable { - return CombineLatest8( - source1: source1.asObservable(), source2: source2.asObservable(), source3: source3.asObservable(), source4: source4.asObservable(), source5: source5.asObservable(), source6: source6.asObservable(), source7: source7.asObservable(), source8: source8.asObservable(), - resultSelector: resultSelector - ) - } -} - -extension ObservableType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of tuples whenever any of the observable sequences produces an element. - - - seealso: [combineLatest operator on reactivex.io](http://reactivex.io/documentation/operators/combinelatest.html) - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func combineLatest - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7, _ source8: O8) - -> Observable<(O1.Element, O2.Element, O3.Element, O4.Element, O5.Element, O6.Element, O7.Element, O8.Element)> { - return CombineLatest8( - source1: source1.asObservable(), source2: source2.asObservable(), source3: source3.asObservable(), source4: source4.asObservable(), source5: source5.asObservable(), source6: source6.asObservable(), source7: source7.asObservable(), source8: source8.asObservable(), - resultSelector: { ($0, $1, $2, $3, $4, $5, $6, $7) } - ) - } -} - -final class CombineLatestSink8_ : CombineLatestSink { - typealias Result = Observer.Element - typealias Parent = CombineLatest8 - - let parent: Parent - - var latestElement1: E1! = nil - var latestElement2: E2! = nil - var latestElement3: E3! = nil - var latestElement4: E4! = nil - var latestElement5: E5! = nil - var latestElement6: E6! = nil - var latestElement7: E7! = nil - var latestElement8: E8! = nil - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(arity: 8, observer: observer, cancel: cancel) - } - - func run() -> Disposable { - let subscription1 = SingleAssignmentDisposable() - let subscription2 = SingleAssignmentDisposable() - let subscription3 = SingleAssignmentDisposable() - let subscription4 = SingleAssignmentDisposable() - let subscription5 = SingleAssignmentDisposable() - let subscription6 = SingleAssignmentDisposable() - let subscription7 = SingleAssignmentDisposable() - let subscription8 = SingleAssignmentDisposable() - - let observer1 = CombineLatestObserver(lock: self.lock, parent: self, index: 0, setLatestValue: { (e: E1) -> Void in self.latestElement1 = e }, this: subscription1) - let observer2 = CombineLatestObserver(lock: self.lock, parent: self, index: 1, setLatestValue: { (e: E2) -> Void in self.latestElement2 = e }, this: subscription2) - let observer3 = CombineLatestObserver(lock: self.lock, parent: self, index: 2, setLatestValue: { (e: E3) -> Void in self.latestElement3 = e }, this: subscription3) - let observer4 = CombineLatestObserver(lock: self.lock, parent: self, index: 3, setLatestValue: { (e: E4) -> Void in self.latestElement4 = e }, this: subscription4) - let observer5 = CombineLatestObserver(lock: self.lock, parent: self, index: 4, setLatestValue: { (e: E5) -> Void in self.latestElement5 = e }, this: subscription5) - let observer6 = CombineLatestObserver(lock: self.lock, parent: self, index: 5, setLatestValue: { (e: E6) -> Void in self.latestElement6 = e }, this: subscription6) - let observer7 = CombineLatestObserver(lock: self.lock, parent: self, index: 6, setLatestValue: { (e: E7) -> Void in self.latestElement7 = e }, this: subscription7) - let observer8 = CombineLatestObserver(lock: self.lock, parent: self, index: 7, setLatestValue: { (e: E8) -> Void in self.latestElement8 = e }, this: subscription8) - - subscription1.setDisposable(self.parent.source1.subscribe(observer1)) - subscription2.setDisposable(self.parent.source2.subscribe(observer2)) - subscription3.setDisposable(self.parent.source3.subscribe(observer3)) - subscription4.setDisposable(self.parent.source4.subscribe(observer4)) - subscription5.setDisposable(self.parent.source5.subscribe(observer5)) - subscription6.setDisposable(self.parent.source6.subscribe(observer6)) - subscription7.setDisposable(self.parent.source7.subscribe(observer7)) - subscription8.setDisposable(self.parent.source8.subscribe(observer8)) - - return Disposables.create([ - subscription1, - subscription2, - subscription3, - subscription4, - subscription5, - subscription6, - subscription7, - subscription8 - ]) - } - - override func getResult() throws -> Result { - try self.parent.resultSelector(self.latestElement1, self.latestElement2, self.latestElement3, self.latestElement4, self.latestElement5, self.latestElement6, self.latestElement7, self.latestElement8) - } -} - -final class CombineLatest8 : Producer { - typealias ResultSelector = (E1, E2, E3, E4, E5, E6, E7, E8) throws -> Result - - let source1: Observable - let source2: Observable - let source3: Observable - let source4: Observable - let source5: Observable - let source6: Observable - let source7: Observable - let source8: Observable - - let resultSelector: ResultSelector - - init(source1: Observable, source2: Observable, source3: Observable, source4: Observable, source5: Observable, source6: Observable, source7: Observable, source8: Observable, resultSelector: @escaping ResultSelector) { - self.source1 = source1 - self.source2 = source2 - self.source3 = source3 - self.source4 = source4 - self.source5 = source5 - self.source6 = source6 - self.source7 = source7 - self.source8 = source8 - - self.resultSelector = resultSelector - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Result { - let sink = CombineLatestSink8_(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} - - diff --git a/Pods/RxSwift/RxSwift/Observables/CombineLatest.swift b/Pods/RxSwift/RxSwift/Observables/CombineLatest.swift deleted file mode 100644 index caa0256..0000000 --- a/Pods/RxSwift/RxSwift/Observables/CombineLatest.swift +++ /dev/null @@ -1,131 +0,0 @@ -// -// CombineLatest.swift -// RxSwift -// -// Created by Krunoslav Zaher on 3/21/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -protocol CombineLatestProtocol: AnyObject { - func next(_ index: Int) - func fail(_ error: Swift.Error) - func done(_ index: Int) -} - -class CombineLatestSink - : Sink - , CombineLatestProtocol { - typealias Element = Observer.Element - - let lock = RecursiveLock() - - private let arity: Int - private var numberOfValues = 0 - private var numberOfDone = 0 - private var hasValue: [Bool] - private var isDone: [Bool] - - init(arity: Int, observer: Observer, cancel: Cancelable) { - self.arity = arity - self.hasValue = [Bool](repeating: false, count: arity) - self.isDone = [Bool](repeating: false, count: arity) - - super.init(observer: observer, cancel: cancel) - } - - func getResult() throws -> Element { - rxAbstractMethod() - } - - func next(_ index: Int) { - if !self.hasValue[index] { - self.hasValue[index] = true - self.numberOfValues += 1 - } - - if self.numberOfValues == self.arity { - do { - let result = try self.getResult() - self.forwardOn(.next(result)) - } - catch let e { - self.forwardOn(.error(e)) - self.dispose() - } - } - else { - var allOthersDone = true - - for i in 0 ..< self.arity { - if i != index && !self.isDone[i] { - allOthersDone = false - break - } - } - - if allOthersDone { - self.forwardOn(.completed) - self.dispose() - } - } - } - - func fail(_ error: Swift.Error) { - self.forwardOn(.error(error)) - self.dispose() - } - - func done(_ index: Int) { - if self.isDone[index] { - return - } - - self.isDone[index] = true - self.numberOfDone += 1 - - if self.numberOfDone == self.arity { - self.forwardOn(.completed) - self.dispose() - } - } -} - -final class CombineLatestObserver - : ObserverType - , LockOwnerType - , SynchronizedOnType { - typealias ValueSetter = (Element) -> Void - - private let parent: CombineLatestProtocol - - let lock: RecursiveLock - private let index: Int - private let this: Disposable - private let setLatestValue: ValueSetter - - init(lock: RecursiveLock, parent: CombineLatestProtocol, index: Int, setLatestValue: @escaping ValueSetter, this: Disposable) { - self.lock = lock - self.parent = parent - self.index = index - self.this = this - self.setLatestValue = setLatestValue - } - - func on(_ event: Event) { - self.synchronizedOn(event) - } - - func synchronized_on(_ event: Event) { - switch event { - case .next(let value): - self.setLatestValue(value) - self.parent.next(self.index) - case .error(let error): - self.this.dispose() - self.parent.fail(error) - case .completed: - self.this.dispose() - self.parent.done(self.index) - } - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/CompactMap.swift b/Pods/RxSwift/RxSwift/Observables/CompactMap.swift deleted file mode 100644 index 7dbcdfb..0000000 --- a/Pods/RxSwift/RxSwift/Observables/CompactMap.swift +++ /dev/null @@ -1,76 +0,0 @@ -// -// CompactMap.swift -// RxSwift -// -// Created by Michael Long on 04/09/2019. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - - /** - Projects each element of an observable sequence into an optional form and filters all optional results. - - - parameter transform: A transform function to apply to each source element and which returns an element or nil. - - returns: An observable sequence whose elements are the result of filtering the transform function for each element of the source. - - */ - public func compactMap(_ transform: @escaping (Element) throws -> Result?) - -> Observable { - CompactMap(source: self.asObservable(), transform: transform) - } -} - -final private class CompactMapSink: Sink, ObserverType { - typealias Transform = (SourceType) throws -> ResultType? - - typealias ResultType = Observer.Element - typealias Element = SourceType - - private let transform: Transform - - init(transform: @escaping Transform, observer: Observer, cancel: Cancelable) { - self.transform = transform - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - switch event { - case .next(let element): - do { - if let mappedElement = try self.transform(element) { - self.forwardOn(.next(mappedElement)) - } - } - catch let e { - self.forwardOn(.error(e)) - self.dispose() - } - case .error(let error): - self.forwardOn(.error(error)) - self.dispose() - case .completed: - self.forwardOn(.completed) - self.dispose() - } - } -} - -final private class CompactMap: Producer { - typealias Transform = (SourceType) throws -> ResultType? - - private let source: Observable - - private let transform: Transform - - init(source: Observable, transform: @escaping Transform) { - self.source = source - self.transform = transform - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == ResultType { - let sink = CompactMapSink(transform: self.transform, observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Concat.swift b/Pods/RxSwift/RxSwift/Observables/Concat.swift deleted file mode 100644 index b2fb1a2..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Concat.swift +++ /dev/null @@ -1,131 +0,0 @@ -// -// Concat.swift -// RxSwift -// -// Created by Krunoslav Zaher on 3/21/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - - /** - Concatenates the second observable sequence to `self` upon successful termination of `self`. - - - seealso: [concat operator on reactivex.io](http://reactivex.io/documentation/operators/concat.html) - - - parameter second: Second observable sequence. - - returns: An observable sequence that contains the elements of `self`, followed by those of the second sequence. - */ - public func concat(_ second: Source) -> Observable where Source.Element == Element { - Observable.concat([self.asObservable(), second.asObservable()]) - } -} - -extension ObservableType { - /** - Concatenates all observable sequences in the given sequence, as long as the previous observable sequence terminated successfully. - - This operator has tail recursive optimizations that will prevent stack overflow. - - Optimizations will be performed in cases equivalent to following: - - [1, [2, [3, .....].concat()].concat].concat() - - - seealso: [concat operator on reactivex.io](http://reactivex.io/documentation/operators/concat.html) - - - returns: An observable sequence that contains the elements of each given sequence, in sequential order. - */ - public static func concat(_ sequence: Sequence) -> Observable - where Sequence.Element == Observable { - return Concat(sources: sequence, count: nil) - } - - /** - Concatenates all observable sequences in the given collection, as long as the previous observable sequence terminated successfully. - - This operator has tail recursive optimizations that will prevent stack overflow. - - Optimizations will be performed in cases equivalent to following: - - [1, [2, [3, .....].concat()].concat].concat() - - - seealso: [concat operator on reactivex.io](http://reactivex.io/documentation/operators/concat.html) - - - returns: An observable sequence that contains the elements of each given sequence, in sequential order. - */ - public static func concat(_ collection: Collection) -> Observable - where Collection.Element == Observable { - return Concat(sources: collection, count: Int64(collection.count)) - } - - /** - Concatenates all observable sequences in the given collection, as long as the previous observable sequence terminated successfully. - - This operator has tail recursive optimizations that will prevent stack overflow. - - Optimizations will be performed in cases equivalent to following: - - [1, [2, [3, .....].concat()].concat].concat() - - - seealso: [concat operator on reactivex.io](http://reactivex.io/documentation/operators/concat.html) - - - returns: An observable sequence that contains the elements of each given sequence, in sequential order. - */ - public static func concat(_ sources: Observable ...) -> Observable { - Concat(sources: sources, count: Int64(sources.count)) - } -} - -final private class ConcatSink - : TailRecursiveSink - , ObserverType where Sequence.Element: ObservableConvertibleType, Sequence.Element.Element == Observer.Element { - typealias Element = Observer.Element - - override init(observer: Observer, cancel: Cancelable) { - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event){ - switch event { - case .next: - self.forwardOn(event) - case .error: - self.forwardOn(event) - self.dispose() - case .completed: - self.schedule(.moveNext) - } - } - - override func subscribeToNext(_ source: Observable) -> Disposable { - source.subscribe(self) - } - - override func extract(_ observable: Observable) -> SequenceGenerator? { - if let source = observable as? Concat { - return (source.sources.makeIterator(), source.count) - } - else { - return nil - } - } -} - -final private class Concat: Producer where Sequence.Element: ObservableConvertibleType { - typealias Element = Sequence.Element.Element - - fileprivate let sources: Sequence - fileprivate let count: IntMax? - - init(sources: Sequence, count: IntMax?) { - self.sources = sources - self.count = count - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = ConcatSink(observer: observer, cancel: cancel) - let subscription = sink.run((self.sources.makeIterator(), self.count)) - return (sink: sink, subscription: subscription) - } -} - diff --git a/Pods/RxSwift/RxSwift/Observables/Create.swift b/Pods/RxSwift/RxSwift/Observables/Create.swift deleted file mode 100644 index ca81442..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Create.swift +++ /dev/null @@ -1,78 +0,0 @@ -// -// Create.swift -// RxSwift -// -// Created by Krunoslav Zaher on 2/8/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - // MARK: create - - /** - Creates an observable sequence from a specified subscribe method implementation. - - - seealso: [create operator on reactivex.io](http://reactivex.io/documentation/operators/create.html) - - - parameter subscribe: Implementation of the resulting observable sequence's `subscribe` method. - - returns: The observable sequence with the specified implementation for the `subscribe` method. - */ - public static func create(_ subscribe: @escaping (AnyObserver) -> Disposable) -> Observable { - AnonymousObservable(subscribe) - } -} - -final private class AnonymousObservableSink: Sink, ObserverType { - typealias Element = Observer.Element - typealias Parent = AnonymousObservable - - // state - private let isStopped = AtomicInt(0) - - #if DEBUG - private let synchronizationTracker = SynchronizationTracker() - #endif - - override init(observer: Observer, cancel: Cancelable) { - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - #if DEBUG - self.synchronizationTracker.register(synchronizationErrorMessage: .default) - defer { self.synchronizationTracker.unregister() } - #endif - switch event { - case .next: - if load(self.isStopped) == 1 { - return - } - self.forwardOn(event) - case .error, .completed: - if fetchOr(self.isStopped, 1) == 0 { - self.forwardOn(event) - self.dispose() - } - } - } - - func run(_ parent: Parent) -> Disposable { - parent.subscribeHandler(AnyObserver(self)) - } -} - -final private class AnonymousObservable: Producer { - typealias SubscribeHandler = (AnyObserver) -> Disposable - - let subscribeHandler: SubscribeHandler - - init(_ subscribeHandler: @escaping SubscribeHandler) { - self.subscribeHandler = subscribeHandler - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = AnonymousObservableSink(observer: observer, cancel: cancel) - let subscription = sink.run(self) - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Debounce.swift b/Pods/RxSwift/RxSwift/Observables/Debounce.swift deleted file mode 100644 index dfab004..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Debounce.swift +++ /dev/null @@ -1,119 +0,0 @@ -// -// Debounce.swift -// RxSwift -// -// Created by Krunoslav Zaher on 9/11/16. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - - /** - Ignores elements from an observable sequence which are followed by another element within a specified relative time duration, using the specified scheduler to run throttling timers. - - - seealso: [debounce operator on reactivex.io](http://reactivex.io/documentation/operators/debounce.html) - - - parameter dueTime: Throttling duration for each element. - - parameter scheduler: Scheduler to run the throttle timers on. - - returns: The throttled sequence. - */ - public func debounce(_ dueTime: RxTimeInterval, scheduler: SchedulerType) - -> Observable { - return Debounce(source: self.asObservable(), dueTime: dueTime, scheduler: scheduler) - } -} - -final private class DebounceSink - : Sink - , ObserverType - , LockOwnerType - , SynchronizedOnType { - typealias Element = Observer.Element - typealias ParentType = Debounce - - private let parent: ParentType - - let lock = RecursiveLock() - - // state - private var id = 0 as UInt64 - private var value: Element? - - let cancellable = SerialDisposable() - - init(parent: ParentType, observer: Observer, cancel: Cancelable) { - self.parent = parent - - super.init(observer: observer, cancel: cancel) - } - - func run() -> Disposable { - let subscription = self.parent.source.subscribe(self) - - return Disposables.create(subscription, cancellable) - } - - func on(_ event: Event) { - self.synchronizedOn(event) - } - - func synchronized_on(_ event: Event) { - switch event { - case .next(let element): - self.id = self.id &+ 1 - let currentId = self.id - self.value = element - - - let scheduler = self.parent.scheduler - let dueTime = self.parent.dueTime - - let d = SingleAssignmentDisposable() - self.cancellable.disposable = d - d.setDisposable(scheduler.scheduleRelative(currentId, dueTime: dueTime, action: self.propagate)) - case .error: - self.value = nil - self.forwardOn(event) - self.dispose() - case .completed: - if let value = self.value { - self.value = nil - self.forwardOn(.next(value)) - } - self.forwardOn(.completed) - self.dispose() - } - } - - func propagate(_ currentId: UInt64) -> Disposable { - self.lock.performLocked { - let originalValue = self.value - - if let value = originalValue, self.id == currentId { - self.value = nil - self.forwardOn(.next(value)) - } - - return Disposables.create() - } - } -} - -final private class Debounce: Producer { - fileprivate let source: Observable - fileprivate let dueTime: RxTimeInterval - fileprivate let scheduler: SchedulerType - - init(source: Observable, dueTime: RxTimeInterval, scheduler: SchedulerType) { - self.source = source - self.dueTime = dueTime - self.scheduler = scheduler - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = DebounceSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } - -} diff --git a/Pods/RxSwift/RxSwift/Observables/Debug.swift b/Pods/RxSwift/RxSwift/Observables/Debug.swift deleted file mode 100644 index 762e394..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Debug.swift +++ /dev/null @@ -1,102 +0,0 @@ -// -// Debug.swift -// RxSwift -// -// Created by Krunoslav Zaher on 5/2/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import Foundation - -extension ObservableType { - - /** - Prints received events for all observers on standard output. - - - seealso: [do operator on reactivex.io](http://reactivex.io/documentation/operators/do.html) - - - parameter identifier: Identifier that is printed together with event description to standard output. - - parameter trimOutput: Should output be trimmed to max 40 characters. - - returns: An observable sequence whose events are printed to standard output. - */ - public func debug(_ identifier: String? = nil, trimOutput: Bool = false, file: String = #file, line: UInt = #line, function: String = #function) - -> Observable { - return Debug(source: self, identifier: identifier, trimOutput: trimOutput, file: file, line: line, function: function) - } -} - -private let dateFormat = "yyyy-MM-dd HH:mm:ss.SSS" - -private func logEvent(_ identifier: String, dateFormat: DateFormatter, content: String) { - print("\(dateFormat.string(from: Date())): \(identifier) -> \(content)") -} - -final private class DebugSink: Sink, ObserverType where Observer.Element == Source.Element { - typealias Element = Observer.Element - typealias Parent = Debug - - private let parent: Parent - private let timestampFormatter = DateFormatter() - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - self.timestampFormatter.dateFormat = dateFormat - - logEvent(self.parent.identifier, dateFormat: self.timestampFormatter, content: "subscribed") - - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - let maxEventTextLength = 40 - let eventText = "\(event)" - - let eventNormalized = (eventText.count > maxEventTextLength) && self.parent.trimOutput - ? String(eventText.prefix(maxEventTextLength / 2)) + "..." + String(eventText.suffix(maxEventTextLength / 2)) - : eventText - - logEvent(self.parent.identifier, dateFormat: self.timestampFormatter, content: "Event \(eventNormalized)") - - self.forwardOn(event) - if event.isStopEvent { - self.dispose() - } - } - - override func dispose() { - if !self.isDisposed { - logEvent(self.parent.identifier, dateFormat: self.timestampFormatter, content: "isDisposed") - } - super.dispose() - } -} - -final private class Debug: Producer { - fileprivate let identifier: String - fileprivate let trimOutput: Bool - private let source: Source - - init(source: Source, identifier: String?, trimOutput: Bool, file: String, line: UInt, function: String) { - self.trimOutput = trimOutput - if let identifier = identifier { - self.identifier = identifier - } - else { - let trimmedFile: String - if let lastIndex = file.lastIndex(of: "/") { - trimmedFile = String(file[file.index(after: lastIndex) ..< file.endIndex]) - } - else { - trimmedFile = file - } - self.identifier = "\(trimmedFile):\(line) (\(function))" - } - self.source = source - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Source.Element { - let sink = DebugSink(parent: self, observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Decode.swift b/Pods/RxSwift/RxSwift/Observables/Decode.swift deleted file mode 100644 index 8bc7342..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Decode.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// Decode.swift -// RxSwift -// -// Created by Shai Mishali on 24/07/2020. -// Copyright © 2020 Krunoslav Zaher. All rights reserved. -// - -import Foundation - -public extension ObservableType where Element == Data { - /// Attempt to decode the emitted `Data` using a provided decoder. - /// - /// - parameter type: A `Decodable`-conforming type to attempt to decode to - /// - parameter decoder: A capable decoder, e.g. `JSONDecoder` or `PropertyListDecoder` - /// - /// - note: If using a custom decoder, it must conform to the `DataDecoder` protocol. - /// - /// - returns: An `Observable` of the decoded type - func decode(type: Item.Type, - decoder: Decoder) -> Observable { - map { try decoder.decode(type, from: $0) } - } -} - -/// Represents an entity capable of decoding raw `Data` -/// into a concrete `Decodable` type -public protocol DataDecoder { - func decode(_ type: Item.Type, from data: Data) throws -> Item -} - -extension JSONDecoder: DataDecoder {} -extension PropertyListDecoder: DataDecoder {} diff --git a/Pods/RxSwift/RxSwift/Observables/DefaultIfEmpty.swift b/Pods/RxSwift/RxSwift/Observables/DefaultIfEmpty.swift deleted file mode 100644 index 8d133d8..0000000 --- a/Pods/RxSwift/RxSwift/Observables/DefaultIfEmpty.swift +++ /dev/null @@ -1,66 +0,0 @@ -// -// DefaultIfEmpty.swift -// RxSwift -// -// Created by sergdort on 23/12/2016. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - - /** - Emits elements from the source observable sequence, or a default element if the source observable sequence is empty. - - - seealso: [DefaultIfEmpty operator on reactivex.io](http://reactivex.io/documentation/operators/defaultifempty.html) - - - parameter default: Default element to be sent if the source does not emit any elements - - returns: An observable sequence which emits default element end completes in case the original sequence is empty - */ - public func ifEmpty(default: Element) -> Observable { - DefaultIfEmpty(source: self.asObservable(), default: `default`) - } -} - -final private class DefaultIfEmptySink: Sink, ObserverType { - typealias Element = Observer.Element - private let `default`: Element - private var isEmpty = true - - init(default: Element, observer: Observer, cancel: Cancelable) { - self.default = `default` - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - switch event { - case .next: - self.isEmpty = false - self.forwardOn(event) - case .error: - self.forwardOn(event) - self.dispose() - case .completed: - if self.isEmpty { - self.forwardOn(.next(self.default)) - } - self.forwardOn(.completed) - self.dispose() - } - } -} - -final private class DefaultIfEmpty: Producer { - private let source: Observable - private let `default`: SourceType - - init(source: Observable, `default`: SourceType) { - self.source = source - self.default = `default` - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == SourceType { - let sink = DefaultIfEmptySink(default: self.default, observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Deferred.swift b/Pods/RxSwift/RxSwift/Observables/Deferred.swift deleted file mode 100644 index b81cb16..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Deferred.swift +++ /dev/null @@ -1,75 +0,0 @@ -// -// Deferred.swift -// RxSwift -// -// Created by Krunoslav Zaher on 4/19/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /** - Returns an observable sequence that invokes the specified factory function whenever a new observer subscribes. - - - seealso: [defer operator on reactivex.io](http://reactivex.io/documentation/operators/defer.html) - - - parameter observableFactory: Observable factory function to invoke for each observer that subscribes to the resulting sequence. - - returns: An observable sequence whose observers trigger an invocation of the given observable factory function. - */ - public static func deferred(_ observableFactory: @escaping () throws -> Observable) - -> Observable { - Deferred(observableFactory: observableFactory) - } -} - -final private class DeferredSink: Sink, ObserverType where Source.Element == Observer.Element { - typealias Element = Observer.Element - - private let observableFactory: () throws -> Source - - init(observableFactory: @escaping () throws -> Source, observer: Observer, cancel: Cancelable) { - self.observableFactory = observableFactory - super.init(observer: observer, cancel: cancel) - } - - func run() -> Disposable { - do { - let result = try self.observableFactory() - return result.subscribe(self) - } - catch let e { - self.forwardOn(.error(e)) - self.dispose() - return Disposables.create() - } - } - - func on(_ event: Event) { - self.forwardOn(event) - - switch event { - case .next: - break - case .error: - self.dispose() - case .completed: - self.dispose() - } - } -} - -final private class Deferred: Producer { - typealias Factory = () throws -> Source - - private let observableFactory : Factory - - init(observableFactory: @escaping Factory) { - self.observableFactory = observableFactory - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) - where Observer.Element == Source.Element { - let sink = DeferredSink(observableFactory: self.observableFactory, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Delay.swift b/Pods/RxSwift/RxSwift/Observables/Delay.swift deleted file mode 100644 index 9f71c32..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Delay.swift +++ /dev/null @@ -1,174 +0,0 @@ -// -// Delay.swift -// RxSwift -// -// Created by tarunon on 2016/02/09. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -import Foundation - -extension ObservableType { - - /** - Returns an observable sequence by the source observable sequence shifted forward in time by a specified delay. Error events from the source observable sequence are not delayed. - - - seealso: [delay operator on reactivex.io](http://reactivex.io/documentation/operators/delay.html) - - - parameter dueTime: Relative time shift of the source by. - - parameter scheduler: Scheduler to run the subscription delay timer on. - - returns: the source Observable shifted in time by the specified delay. - */ - public func delay(_ dueTime: RxTimeInterval, scheduler: SchedulerType) - -> Observable { - return Delay(source: self.asObservable(), dueTime: dueTime, scheduler: scheduler) - } -} - -final private class DelaySink - : Sink - , ObserverType { - typealias Element = Observer.Element - typealias Source = Observable - typealias DisposeKey = Bag.KeyType - - private let lock = RecursiveLock() - - private let dueTime: RxTimeInterval - private let scheduler: SchedulerType - - private let sourceSubscription = SingleAssignmentDisposable() - private let cancelable = SerialDisposable() - - // is scheduled some action - private var active = false - // is "run loop" on different scheduler running - private var running = false - private var errorEvent: Event? - - // state - private var queue = Queue<(eventTime: RxTime, event: Event)>(capacity: 0) - - init(observer: Observer, dueTime: RxTimeInterval, scheduler: SchedulerType, cancel: Cancelable) { - self.dueTime = dueTime - self.scheduler = scheduler - super.init(observer: observer, cancel: cancel) - } - - // All of these complications in this method are caused by the fact that - // error should be propagated immediately. Error can be potentially received on different - // scheduler so this process needs to be synchronized somehow. - // - // Another complication is that scheduler is potentially concurrent so internal queue is used. - func drainQueue(state: (), scheduler: AnyRecursiveScheduler<()>) { - self.lock.lock() - let hasFailed = self.errorEvent != nil - if !hasFailed { - self.running = true - } - self.lock.unlock() - - if hasFailed { - return - } - - var ranAtLeastOnce = false - - while true { - self.lock.lock() - let errorEvent = self.errorEvent - - let eventToForwardImmediately = ranAtLeastOnce ? nil : self.queue.dequeue()?.event - let nextEventToScheduleOriginalTime: Date? = ranAtLeastOnce && !self.queue.isEmpty ? self.queue.peek().eventTime : nil - - if errorEvent == nil { - if eventToForwardImmediately != nil { - } - else if nextEventToScheduleOriginalTime != nil { - self.running = false - } - else { - self.running = false - self.active = false - } - } - self.lock.unlock() - - if let errorEvent = errorEvent { - self.forwardOn(errorEvent) - self.dispose() - return - } - else { - if let eventToForwardImmediately = eventToForwardImmediately { - ranAtLeastOnce = true - self.forwardOn(eventToForwardImmediately) - if case .completed = eventToForwardImmediately { - self.dispose() - return - } - } - else if let nextEventToScheduleOriginalTime = nextEventToScheduleOriginalTime { - scheduler.schedule((), dueTime: self.dueTime.reduceWithSpanBetween(earlierDate: nextEventToScheduleOriginalTime, laterDate: self.scheduler.now)) - return - } - else { - return - } - } - } - } - - func on(_ event: Event) { - if event.isStopEvent { - self.sourceSubscription.dispose() - } - - switch event { - case .error: - self.lock.lock() - let shouldSendImmediately = !self.running - self.queue = Queue(capacity: 0) - self.errorEvent = event - self.lock.unlock() - - if shouldSendImmediately { - self.forwardOn(event) - self.dispose() - } - default: - self.lock.lock() - let shouldSchedule = !self.active - self.active = true - self.queue.enqueue((self.scheduler.now, event)) - self.lock.unlock() - - if shouldSchedule { - self.cancelable.disposable = self.scheduler.scheduleRecursive((), dueTime: self.dueTime, action: self.drainQueue) - } - } - } - - func run(source: Observable) -> Disposable { - self.sourceSubscription.setDisposable(source.subscribe(self)) - return Disposables.create(sourceSubscription, cancelable) - } -} - -final private class Delay: Producer { - private let source: Observable - private let dueTime: RxTimeInterval - private let scheduler: SchedulerType - - init(source: Observable, dueTime: RxTimeInterval, scheduler: SchedulerType) { - self.source = source - self.dueTime = dueTime - self.scheduler = scheduler - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = DelaySink(observer: observer, dueTime: self.dueTime, scheduler: self.scheduler, cancel: cancel) - let subscription = sink.run(source: self.source) - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/DelaySubscription.swift b/Pods/RxSwift/RxSwift/Observables/DelaySubscription.swift deleted file mode 100644 index fd8c495..0000000 --- a/Pods/RxSwift/RxSwift/Observables/DelaySubscription.swift +++ /dev/null @@ -1,58 +0,0 @@ -// -// DelaySubscription.swift -// RxSwift -// -// Created by Krunoslav Zaher on 6/14/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - - /** - Time shifts the observable sequence by delaying the subscription with the specified relative time duration, using the specified scheduler to run timers. - - - seealso: [delay operator on reactivex.io](http://reactivex.io/documentation/operators/delay.html) - - - parameter dueTime: Relative time shift of the subscription. - - parameter scheduler: Scheduler to run the subscription delay timer on. - - returns: Time-shifted sequence. - */ - public func delaySubscription(_ dueTime: RxTimeInterval, scheduler: SchedulerType) - -> Observable { - DelaySubscription(source: self.asObservable(), dueTime: dueTime, scheduler: scheduler) - } -} - -final private class DelaySubscriptionSink - : Sink, ObserverType { - typealias Element = Observer.Element - - func on(_ event: Event) { - self.forwardOn(event) - if event.isStopEvent { - self.dispose() - } - } - -} - -final private class DelaySubscription: Producer { - private let source: Observable - private let dueTime: RxTimeInterval - private let scheduler: SchedulerType - - init(source: Observable, dueTime: RxTimeInterval, scheduler: SchedulerType) { - self.source = source - self.dueTime = dueTime - self.scheduler = scheduler - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = DelaySubscriptionSink(observer: observer, cancel: cancel) - let subscription = self.scheduler.scheduleRelative((), dueTime: self.dueTime) { _ in - return self.source.subscribe(sink) - } - - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Dematerialize.swift b/Pods/RxSwift/RxSwift/Observables/Dematerialize.swift deleted file mode 100644 index 2ccd546..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Dematerialize.swift +++ /dev/null @@ -1,51 +0,0 @@ -// -// Dematerialize.swift -// RxSwift -// -// Created by Jamie Pinkham on 3/13/17. -// Copyright © 2017 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType where Element: EventConvertible { - /** - Convert any previously materialized Observable into it's original form. - - seealso: [materialize operator on reactivex.io](http://reactivex.io/documentation/operators/materialize-dematerialize.html) - - returns: The dematerialized observable sequence. - */ - public func dematerialize() -> Observable { - Dematerialize(source: self.asObservable()) - } - -} - -private final class DematerializeSink: Sink, ObserverType where Observer.Element == T.Element { - fileprivate func on(_ event: Event) { - switch event { - case .next(let element): - self.forwardOn(element.event) - if element.event.isStopEvent { - self.dispose() - } - case .completed: - self.forwardOn(.completed) - self.dispose() - case .error(let error): - self.forwardOn(.error(error)) - self.dispose() - } - } -} - -final private class Dematerialize: Producer { - private let source: Observable - - init(source: Observable) { - self.source = source - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == T.Element { - let sink = DematerializeSink(observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/DistinctUntilChanged.swift b/Pods/RxSwift/RxSwift/Observables/DistinctUntilChanged.swift deleted file mode 100644 index c127b5a..0000000 --- a/Pods/RxSwift/RxSwift/Observables/DistinctUntilChanged.swift +++ /dev/null @@ -1,137 +0,0 @@ -// -// DistinctUntilChanged.swift -// RxSwift -// -// Created by Krunoslav Zaher on 3/15/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType where Element: Equatable { - - /** - Returns an observable sequence that contains only distinct contiguous elements according to equality operator. - - - seealso: [distinct operator on reactivex.io](http://reactivex.io/documentation/operators/distinct.html) - - - returns: An observable sequence only containing the distinct contiguous elements, based on equality operator, from the source sequence. - */ - public func distinctUntilChanged() - -> Observable { - self.distinctUntilChanged({ $0 }, comparer: { ($0 == $1) }) - } -} - -extension ObservableType { - /** - Returns an observable sequence that contains only distinct contiguous elements according to the `keySelector`. - - - seealso: [distinct operator on reactivex.io](http://reactivex.io/documentation/operators/distinct.html) - - - parameter keySelector: A function to compute the comparison key for each element. - - returns: An observable sequence only containing the distinct contiguous elements, based on a computed key value, from the source sequence. - */ - public func distinctUntilChanged(_ keySelector: @escaping (Element) throws -> Key) - -> Observable { - self.distinctUntilChanged(keySelector, comparer: { $0 == $1 }) - } - - /** - Returns an observable sequence that contains only distinct contiguous elements according to the `comparer`. - - - seealso: [distinct operator on reactivex.io](http://reactivex.io/documentation/operators/distinct.html) - - - parameter comparer: Equality comparer for computed key values. - - returns: An observable sequence only containing the distinct contiguous elements, based on `comparer`, from the source sequence. - */ - public func distinctUntilChanged(_ comparer: @escaping (Element, Element) throws -> Bool) - -> Observable { - self.distinctUntilChanged({ $0 }, comparer: comparer) - } - - /** - Returns an observable sequence that contains only distinct contiguous elements according to the keySelector and the comparer. - - - seealso: [distinct operator on reactivex.io](http://reactivex.io/documentation/operators/distinct.html) - - - parameter keySelector: A function to compute the comparison key for each element. - - parameter comparer: Equality comparer for computed key values. - - returns: An observable sequence only containing the distinct contiguous elements, based on a computed key value and the comparer, from the source sequence. - */ - public func distinctUntilChanged(_ keySelector: @escaping (Element) throws -> K, comparer: @escaping (K, K) throws -> Bool) - -> Observable { - return DistinctUntilChanged(source: self.asObservable(), selector: keySelector, comparer: comparer) - } - - /** - Returns an observable sequence that contains only contiguous elements with distinct values in the provided key path on each object. - - - seealso: [distinct operator on reactivex.io](http://reactivex.io/documentation/operators/distinct.html) - - - returns: An observable sequence only containing the distinct contiguous elements, based on equality operator on the provided key path - */ - public func distinctUntilChanged(at keyPath: KeyPath) -> - Observable { - self.distinctUntilChanged { $0[keyPath: keyPath] == $1[keyPath: keyPath] } - } -} - -final private class DistinctUntilChangedSink: Sink, ObserverType { - typealias Element = Observer.Element - - private let parent: DistinctUntilChanged - private var currentKey: Key? - - init(parent: DistinctUntilChanged, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - switch event { - case .next(let value): - do { - let key = try self.parent.selector(value) - var areEqual = false - if let currentKey = self.currentKey { - areEqual = try self.parent.comparer(currentKey, key) - } - - if areEqual { - return - } - - self.currentKey = key - - self.forwardOn(event) - } - catch let error { - self.forwardOn(.error(error)) - self.dispose() - } - case .error, .completed: - self.forwardOn(event) - self.dispose() - } - } -} - -final private class DistinctUntilChanged: Producer { - typealias KeySelector = (Element) throws -> Key - typealias EqualityComparer = (Key, Key) throws -> Bool - - private let source: Observable - fileprivate let selector: KeySelector - fileprivate let comparer: EqualityComparer - - init(source: Observable, selector: @escaping KeySelector, comparer: @escaping EqualityComparer) { - self.source = source - self.selector = selector - self.comparer = comparer - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = DistinctUntilChangedSink(parent: self, observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Do.swift b/Pods/RxSwift/RxSwift/Observables/Do.swift deleted file mode 100644 index 3c8c68b..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Do.swift +++ /dev/null @@ -1,112 +0,0 @@ -// -// Do.swift -// RxSwift -// -// Created by Krunoslav Zaher on 2/21/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /** - Invokes an action for each event in the observable sequence, and propagates all observer messages through the result sequence. - - - seealso: [do operator on reactivex.io](http://reactivex.io/documentation/operators/do.html) - - - parameter onNext: Action to invoke for each element in the observable sequence. - - parameter afterNext: Action to invoke for each element after the observable has passed an onNext event along to its downstream. - - parameter onError: Action to invoke upon errored termination of the observable sequence. - - parameter afterError: Action to invoke after errored termination of the observable sequence. - - parameter onCompleted: Action to invoke upon graceful termination of the observable sequence. - - parameter afterCompleted: Action to invoke after graceful termination of the observable sequence. - - parameter onSubscribe: Action to invoke before subscribing to source observable sequence. - - parameter onSubscribed: Action to invoke after subscribing to source observable sequence. - - parameter onDispose: Action to invoke after subscription to source observable has been disposed for any reason. It can be either because sequence terminates for some reason or observer subscription being disposed. - - returns: The source sequence with the side-effecting behavior applied. - */ - public func `do`(onNext: ((Element) throws -> Void)? = nil, afterNext: ((Element) throws -> Void)? = nil, onError: ((Swift.Error) throws -> Void)? = nil, afterError: ((Swift.Error) throws -> Void)? = nil, onCompleted: (() throws -> Void)? = nil, afterCompleted: (() throws -> Void)? = nil, onSubscribe: (() -> Void)? = nil, onSubscribed: (() -> Void)? = nil, onDispose: (() -> Void)? = nil) - -> Observable { - return Do(source: self.asObservable(), eventHandler: { e in - switch e { - case .next(let element): - try onNext?(element) - case .error(let e): - try onError?(e) - case .completed: - try onCompleted?() - } - }, afterEventHandler: { e in - switch e { - case .next(let element): - try afterNext?(element) - case .error(let e): - try afterError?(e) - case .completed: - try afterCompleted?() - } - }, onSubscribe: onSubscribe, onSubscribed: onSubscribed, onDispose: onDispose) - } -} - -final private class DoSink: Sink, ObserverType { - typealias Element = Observer.Element - typealias EventHandler = (Event) throws -> Void - typealias AfterEventHandler = (Event) throws -> Void - - private let eventHandler: EventHandler - private let afterEventHandler: AfterEventHandler - - init(eventHandler: @escaping EventHandler, afterEventHandler: @escaping AfterEventHandler, observer: Observer, cancel: Cancelable) { - self.eventHandler = eventHandler - self.afterEventHandler = afterEventHandler - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - do { - try self.eventHandler(event) - self.forwardOn(event) - try self.afterEventHandler(event) - if event.isStopEvent { - self.dispose() - } - } - catch let error { - self.forwardOn(.error(error)) - self.dispose() - } - } -} - -final private class Do: Producer { - typealias EventHandler = (Event) throws -> Void - typealias AfterEventHandler = (Event) throws -> Void - - private let source: Observable - private let eventHandler: EventHandler - private let afterEventHandler: AfterEventHandler - private let onSubscribe: (() -> Void)? - private let onSubscribed: (() -> Void)? - private let onDispose: (() -> Void)? - - init(source: Observable, eventHandler: @escaping EventHandler, afterEventHandler: @escaping AfterEventHandler, onSubscribe: (() -> Void)?, onSubscribed: (() -> Void)?, onDispose: (() -> Void)?) { - self.source = source - self.eventHandler = eventHandler - self.afterEventHandler = afterEventHandler - self.onSubscribe = onSubscribe - self.onSubscribed = onSubscribed - self.onDispose = onDispose - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - self.onSubscribe?() - let sink = DoSink(eventHandler: self.eventHandler, afterEventHandler: self.afterEventHandler, observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - self.onSubscribed?() - let onDispose = self.onDispose - let allSubscriptions = Disposables.create { - subscription.dispose() - onDispose?() - } - return (sink: sink, subscription: allSubscriptions) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/ElementAt.swift b/Pods/RxSwift/RxSwift/Observables/ElementAt.swift deleted file mode 100644 index 3f09c70..0000000 --- a/Pods/RxSwift/RxSwift/Observables/ElementAt.swift +++ /dev/null @@ -1,105 +0,0 @@ -// -// ElementAt.swift -// RxSwift -// -// Created by Junior B. on 21/10/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /** - Returns a sequence emitting only element _n_ emitted by an Observable - - - seealso: [elementAt operator on reactivex.io](http://reactivex.io/documentation/operators/elementat.html) - - - parameter index: The index of the required element (starting from 0). - - returns: An observable sequence that emits the desired element as its own sole emission. - */ - @available(*, deprecated, renamed: "element(at:)") - public func elementAt(_ index: Int) - -> Observable { - element(at: index) - } - - /** - Returns a sequence emitting only element _n_ emitted by an Observable - - - seealso: [elementAt operator on reactivex.io](http://reactivex.io/documentation/operators/elementat.html) - - - parameter index: The index of the required element (starting from 0). - - returns: An observable sequence that emits the desired element as its own sole emission. - */ - public func element(at index: Int) - -> Observable { - ElementAt(source: self.asObservable(), index: index, throwOnEmpty: true) - } -} - -final private class ElementAtSink: Sink, ObserverType { - typealias SourceType = Observer.Element - typealias Parent = ElementAt - - let parent: Parent - var i: Int - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - self.i = parent.index - - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - switch event { - case .next: - - if self.i == 0 { - self.forwardOn(event) - self.forwardOn(.completed) - self.dispose() - } - - do { - _ = try decrementChecked(&self.i) - } catch let e { - self.forwardOn(.error(e)) - self.dispose() - return - } - - case .error(let e): - self.forwardOn(.error(e)) - self.dispose() - case .completed: - if self.parent.throwOnEmpty { - self.forwardOn(.error(RxError.argumentOutOfRange)) - } else { - self.forwardOn(.completed) - } - - self.dispose() - } - } -} - -final private class ElementAt: Producer { - let source: Observable - let throwOnEmpty: Bool - let index: Int - - init(source: Observable, index: Int, throwOnEmpty: Bool) { - if index < 0 { - rxFatalError("index can't be negative") - } - - self.source = source - self.index = index - self.throwOnEmpty = throwOnEmpty - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == SourceType { - let sink = ElementAtSink(parent: self, observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Empty.swift b/Pods/RxSwift/RxSwift/Observables/Empty.swift deleted file mode 100644 index 9ca5965..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Empty.swift +++ /dev/null @@ -1,27 +0,0 @@ -// -// Empty.swift -// RxSwift -// -// Created by Krunoslav Zaher on 8/30/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /** - Returns an empty observable sequence, using the specified scheduler to send out the single `Completed` message. - - - seealso: [empty operator on reactivex.io](http://reactivex.io/documentation/operators/empty-never-throw.html) - - - returns: An observable sequence with no elements. - */ - public static func empty() -> Observable { - EmptyProducer() - } -} - -final private class EmptyProducer: Producer { - override func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element { - observer.on(.completed) - return Disposables.create() - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Enumerated.swift b/Pods/RxSwift/RxSwift/Observables/Enumerated.swift deleted file mode 100644 index ef8a0ff..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Enumerated.swift +++ /dev/null @@ -1,61 +0,0 @@ -// -// Enumerated.swift -// RxSwift -// -// Created by Krunoslav Zaher on 8/6/17. -// Copyright © 2017 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - - /** - Enumerates the elements of an observable sequence. - - - seealso: [map operator on reactivex.io](http://reactivex.io/documentation/operators/map.html) - - - returns: An observable sequence that contains tuples of source sequence elements and their indexes. - */ - public func enumerated() - -> Observable<(index: Int, element: Element)> { - Enumerated(source: self.asObservable()) - } -} - -final private class EnumeratedSink: Sink, ObserverType where Observer.Element == (index: Int, element: Element) { - var index = 0 - - func on(_ event: Event) { - switch event { - case .next(let value): - do { - let nextIndex = try incrementChecked(&self.index) - let next = (index: nextIndex, element: value) - self.forwardOn(.next(next)) - } - catch let e { - self.forwardOn(.error(e)) - self.dispose() - } - case .completed: - self.forwardOn(.completed) - self.dispose() - case .error(let error): - self.forwardOn(.error(error)) - self.dispose() - } - } -} - -final private class Enumerated: Producer<(index: Int, element: Element)> { - private let source: Observable - - init(source: Observable) { - self.source = source - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == (index: Int, element: Element) { - let sink = EnumeratedSink(observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Error.swift b/Pods/RxSwift/RxSwift/Observables/Error.swift deleted file mode 100644 index 2e722d6..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Error.swift +++ /dev/null @@ -1,33 +0,0 @@ -// -// Error.swift -// RxSwift -// -// Created by Krunoslav Zaher on 8/30/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /** - Returns an observable sequence that terminates with an `error`. - - - seealso: [throw operator on reactivex.io](http://reactivex.io/documentation/operators/empty-never-throw.html) - - - returns: The observable sequence that terminates with specified error. - */ - public static func error(_ error: Swift.Error) -> Observable { - ErrorProducer(error: error) - } -} - -final private class ErrorProducer: Producer { - private let error: Swift.Error - - init(error: Swift.Error) { - self.error = error - } - - override func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element { - observer.on(.error(self.error)) - return Disposables.create() - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Filter.swift b/Pods/RxSwift/RxSwift/Observables/Filter.swift deleted file mode 100644 index 61d3ce7..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Filter.swift +++ /dev/null @@ -1,86 +0,0 @@ -// -// Filter.swift -// RxSwift -// -// Created by Krunoslav Zaher on 2/17/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - - /** - Filters the elements of an observable sequence based on a predicate. - - - seealso: [filter operator on reactivex.io](http://reactivex.io/documentation/operators/filter.html) - - - parameter predicate: A function to test each source element for a condition. - - returns: An observable sequence that contains elements from the input sequence that satisfy the condition. - */ - public func filter(_ predicate: @escaping (Element) throws -> Bool) - -> Observable { - Filter(source: self.asObservable(), predicate: predicate) - } -} - -extension ObservableType { - /** - Skips elements and completes (or errors) when the observable sequence completes (or errors). Equivalent to filter that always returns false. - - - seealso: [ignoreElements operator on reactivex.io](http://reactivex.io/documentation/operators/ignoreelements.html) - - - returns: An observable sequence that skips all elements of the source sequence. - */ - public func ignoreElements() - -> Observable { - self.flatMap { _ in Observable.empty() } - } -} - -final private class FilterSink: Sink, ObserverType { - typealias Predicate = (Element) throws -> Bool - typealias Element = Observer.Element - - private let predicate: Predicate - - init(predicate: @escaping Predicate, observer: Observer, cancel: Cancelable) { - self.predicate = predicate - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - switch event { - case .next(let value): - do { - let satisfies = try self.predicate(value) - if satisfies { - self.forwardOn(.next(value)) - } - } - catch let e { - self.forwardOn(.error(e)) - self.dispose() - } - case .completed, .error: - self.forwardOn(event) - self.dispose() - } - } -} - -final private class Filter: Producer { - typealias Predicate = (Element) throws -> Bool - - private let source: Observable - private let predicate: Predicate - - init(source: Observable, predicate: @escaping Predicate) { - self.source = source - self.predicate = predicate - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = FilterSink(predicate: self.predicate, observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/First.swift b/Pods/RxSwift/RxSwift/Observables/First.swift deleted file mode 100644 index 0014114..0000000 --- a/Pods/RxSwift/RxSwift/Observables/First.swift +++ /dev/null @@ -1,41 +0,0 @@ -// -// First.swift -// RxSwift -// -// Created by Krunoslav Zaher on 7/31/17. -// Copyright © 2017 Krunoslav Zaher. All rights reserved. -// - -private final class FirstSink : Sink, ObserverType where Observer.Element == Element? { - typealias Parent = First - - func on(_ event: Event) { - switch event { - case .next(let value): - self.forwardOn(.next(value)) - self.forwardOn(.completed) - self.dispose() - case .error(let error): - self.forwardOn(.error(error)) - self.dispose() - case .completed: - self.forwardOn(.next(nil)) - self.forwardOn(.completed) - self.dispose() - } - } -} - -final class First: Producer { - private let source: Observable - - init(source: Observable) { - self.source = source - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element? { - let sink = FirstSink(observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Generate.swift b/Pods/RxSwift/RxSwift/Observables/Generate.swift deleted file mode 100644 index 7b924b3..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Generate.swift +++ /dev/null @@ -1,87 +0,0 @@ -// -// Generate.swift -// RxSwift -// -// Created by Krunoslav Zaher on 9/2/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /** - Generates an observable sequence by running a state-driven loop producing the sequence's elements, using the specified scheduler - to run the loop send out observer messages. - - - seealso: [create operator on reactivex.io](http://reactivex.io/documentation/operators/create.html) - - - parameter initialState: Initial state. - - parameter condition: Condition to terminate generation (upon returning `false`). - - parameter iterate: Iteration step function. - - parameter scheduler: Scheduler on which to run the generator loop. - - returns: The generated sequence. - */ - public static func generate(initialState: Element, condition: @escaping (Element) throws -> Bool, scheduler: ImmediateSchedulerType = CurrentThreadScheduler.instance, iterate: @escaping (Element) throws -> Element) -> Observable { - Generate(initialState: initialState, condition: condition, iterate: iterate, resultSelector: { $0 }, scheduler: scheduler) - } -} - -final private class GenerateSink: Sink { - typealias Parent = Generate - - private let parent: Parent - - private var state: Sequence - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - self.state = parent.initialState - super.init(observer: observer, cancel: cancel) - } - - func run() -> Disposable { - return self.parent.scheduler.scheduleRecursive(true) { isFirst, recurse -> Void in - do { - if !isFirst { - self.state = try self.parent.iterate(self.state) - } - - if try self.parent.condition(self.state) { - let result = try self.parent.resultSelector(self.state) - self.forwardOn(.next(result)) - - recurse(false) - } - else { - self.forwardOn(.completed) - self.dispose() - } - } - catch let error { - self.forwardOn(.error(error)) - self.dispose() - } - } - } -} - -final private class Generate: Producer { - fileprivate let initialState: Sequence - fileprivate let condition: (Sequence) throws -> Bool - fileprivate let iterate: (Sequence) throws -> Sequence - fileprivate let resultSelector: (Sequence) throws -> Element - fileprivate let scheduler: ImmediateSchedulerType - - init(initialState: Sequence, condition: @escaping (Sequence) throws -> Bool, iterate: @escaping (Sequence) throws -> Sequence, resultSelector: @escaping (Sequence) throws -> Element, scheduler: ImmediateSchedulerType) { - self.initialState = initialState - self.condition = condition - self.iterate = iterate - self.resultSelector = resultSelector - self.scheduler = scheduler - super.init() - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = GenerateSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/GroupBy.swift b/Pods/RxSwift/RxSwift/Observables/GroupBy.swift deleted file mode 100644 index 88cbda7..0000000 --- a/Pods/RxSwift/RxSwift/Observables/GroupBy.swift +++ /dev/null @@ -1,133 +0,0 @@ -// -// GroupBy.swift -// RxSwift -// -// Created by Tomi Koskinen on 01/12/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /* - Groups the elements of an observable sequence according to a specified key selector function. - - - seealso: [groupBy operator on reactivex.io](http://reactivex.io/documentation/operators/groupby.html) - - - parameter keySelector: A function to extract the key for each element. - - returns: A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. - */ - public func groupBy(keySelector: @escaping (Element) throws -> Key) - -> Observable> { - GroupBy(source: self.asObservable(), selector: keySelector) - } -} - -final private class GroupedObservableImpl: Observable { - private var subject: PublishSubject - private var refCount: RefCountDisposable - - init(subject: PublishSubject, refCount: RefCountDisposable) { - self.subject = subject - self.refCount = refCount - } - - override public func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element { - let release = self.refCount.retain() - let subscription = self.subject.subscribe(observer) - return Disposables.create(release, subscription) - } -} - - -final private class GroupBySink - : Sink - , ObserverType where Observer.Element == GroupedObservable { - typealias ResultType = Observer.Element - typealias Parent = GroupBy - - private let parent: Parent - private let subscription = SingleAssignmentDisposable() - private var refCountDisposable: RefCountDisposable! - private var groupedSubjectTable: [Key: PublishSubject] - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - self.groupedSubjectTable = [Key: PublishSubject]() - super.init(observer: observer, cancel: cancel) - } - - func run() -> Disposable { - self.refCountDisposable = RefCountDisposable(disposable: self.subscription) - - self.subscription.setDisposable(self.parent.source.subscribe(self)) - - return self.refCountDisposable - } - - private func onGroupEvent(key: Key, value: Element) { - if let writer = self.groupedSubjectTable[key] { - writer.on(.next(value)) - } else { - let writer = PublishSubject() - self.groupedSubjectTable[key] = writer - - let group = GroupedObservable( - key: key, - source: GroupedObservableImpl(subject: writer, refCount: refCountDisposable) - ) - - self.forwardOn(.next(group)) - writer.on(.next(value)) - } - } - - final func on(_ event: Event) { - switch event { - case let .next(value): - do { - let groupKey = try self.parent.selector(value) - self.onGroupEvent(key: groupKey, value: value) - } - catch let e { - self.error(e) - return - } - case let .error(e): - self.error(e) - case .completed: - self.forwardOnGroups(event: .completed) - self.forwardOn(.completed) - self.subscription.dispose() - self.dispose() - } - } - - final func error(_ error: Swift.Error) { - self.forwardOnGroups(event: .error(error)) - self.forwardOn(.error(error)) - self.subscription.dispose() - self.dispose() - } - - final func forwardOnGroups(event: Event) { - for writer in self.groupedSubjectTable.values { - writer.on(event) - } - } -} - -final private class GroupBy: Producer> { - typealias KeySelector = (Element) throws -> Key - - fileprivate let source: Observable - fileprivate let selector: KeySelector - - init(source: Observable, selector: @escaping KeySelector) { - self.source = source - self.selector = selector - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == GroupedObservable { - let sink = GroupBySink(parent: self, observer: observer, cancel: cancel) - return (sink: sink, subscription: sink.run()) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Just.swift b/Pods/RxSwift/RxSwift/Observables/Just.swift deleted file mode 100644 index 9349083..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Just.swift +++ /dev/null @@ -1,87 +0,0 @@ -// -// Just.swift -// RxSwift -// -// Created by Krunoslav Zaher on 8/30/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /** - Returns an observable sequence that contains a single element. - - - seealso: [just operator on reactivex.io](http://reactivex.io/documentation/operators/just.html) - - - parameter element: Single element in the resulting observable sequence. - - returns: An observable sequence containing the single specified element. - */ - public static func just(_ element: Element) -> Observable { - Just(element: element) - } - - /** - Returns an observable sequence that contains a single element. - - - seealso: [just operator on reactivex.io](http://reactivex.io/documentation/operators/just.html) - - - parameter element: Single element in the resulting observable sequence. - - parameter scheduler: Scheduler to send the single element on. - - returns: An observable sequence containing the single specified element. - */ - public static func just(_ element: Element, scheduler: ImmediateSchedulerType) -> Observable { - JustScheduled(element: element, scheduler: scheduler) - } -} - -final private class JustScheduledSink: Sink { - typealias Parent = JustScheduled - - private let parent: Parent - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(observer: observer, cancel: cancel) - } - - func run() -> Disposable { - let scheduler = self.parent.scheduler - return scheduler.schedule(self.parent.element) { element in - self.forwardOn(.next(element)) - return scheduler.schedule(()) { _ in - self.forwardOn(.completed) - self.dispose() - return Disposables.create() - } - } - } -} - -final private class JustScheduled: Producer { - fileprivate let scheduler: ImmediateSchedulerType - fileprivate let element: Element - - init(element: Element, scheduler: ImmediateSchedulerType) { - self.scheduler = scheduler - self.element = element - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = JustScheduledSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} - -final private class Just: Producer { - private let element: Element - - init(element: Element) { - self.element = element - } - - override func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element { - observer.on(.next(self.element)) - observer.on(.completed) - return Disposables.create() - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Map.swift b/Pods/RxSwift/RxSwift/Observables/Map.swift deleted file mode 100644 index 0691273..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Map.swift +++ /dev/null @@ -1,77 +0,0 @@ -// -// Map.swift -// RxSwift -// -// Created by Krunoslav Zaher on 3/15/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - - /** - Projects each element of an observable sequence into a new form. - - - seealso: [map operator on reactivex.io](http://reactivex.io/documentation/operators/map.html) - - - parameter transform: A transform function to apply to each source element. - - returns: An observable sequence whose elements are the result of invoking the transform function on each element of source. - - */ - public func map(_ transform: @escaping (Element) throws -> Result) - -> Observable { - Map(source: self.asObservable(), transform: transform) - } -} - -final private class MapSink: Sink, ObserverType { - typealias Transform = (SourceType) throws -> ResultType - - typealias ResultType = Observer.Element - typealias Element = SourceType - - private let transform: Transform - - init(transform: @escaping Transform, observer: Observer, cancel: Cancelable) { - self.transform = transform - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - switch event { - case .next(let element): - do { - let mappedElement = try self.transform(element) - self.forwardOn(.next(mappedElement)) - } - catch let e { - self.forwardOn(.error(e)) - self.dispose() - } - case .error(let error): - self.forwardOn(.error(error)) - self.dispose() - case .completed: - self.forwardOn(.completed) - self.dispose() - } - } -} - -final private class Map: Producer { - typealias Transform = (SourceType) throws -> ResultType - - private let source: Observable - - private let transform: Transform - - init(source: Observable, transform: @escaping Transform) { - self.source = source - self.transform = transform - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == ResultType { - let sink = MapSink(transform: self.transform, observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Materialize.swift b/Pods/RxSwift/RxSwift/Observables/Materialize.swift deleted file mode 100644 index e2577be..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Materialize.swift +++ /dev/null @@ -1,44 +0,0 @@ -// -// Materialize.swift -// RxSwift -// -// Created by sergdort on 08/03/2017. -// Copyright © 2017 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /** - Convert any Observable into an Observable of its events. - - seealso: [materialize operator on reactivex.io](http://reactivex.io/documentation/operators/materialize-dematerialize.html) - - returns: An observable sequence that wraps events in an Event. The returned Observable never errors, but it does complete after observing all of the events of the underlying Observable. - */ - public func materialize() -> Observable> { - Materialize(source: self.asObservable()) - } -} - -private final class MaterializeSink: Sink, ObserverType where Observer.Element == Event { - - func on(_ event: Event) { - self.forwardOn(.next(event)) - if event.isStopEvent { - self.forwardOn(.completed) - self.dispose() - } - } -} - -final private class Materialize: Producer> { - private let source: Observable - - init(source: Observable) { - self.source = source - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = MaterializeSink(observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Merge.swift b/Pods/RxSwift/RxSwift/Observables/Merge.swift deleted file mode 100644 index 51a6462..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Merge.swift +++ /dev/null @@ -1,600 +0,0 @@ -// -// Merge.swift -// RxSwift -// -// Created by Krunoslav Zaher on 3/28/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - - /** - Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. - - - seealso: [flatMap operator on reactivex.io](http://reactivex.io/documentation/operators/flatmap.html) - - - parameter selector: A transform function to apply to each element. - - returns: An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. - */ - public func flatMap(_ selector: @escaping (Element) throws -> Source) - -> Observable { - return FlatMap(source: self.asObservable(), selector: selector) - } - -} - -extension ObservableType { - - /** - Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. - If element is received while there is some projected observable sequence being merged it will simply be ignored. - - - seealso: [flatMapFirst operator on reactivex.io](http://reactivex.io/documentation/operators/flatmap.html) - - - parameter selector: A transform function to apply to element that was observed while no observable is executing in parallel. - - returns: An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence that was received while no other sequence was being calculated. - */ - public func flatMapFirst(_ selector: @escaping (Element) throws -> Source) - -> Observable { - return FlatMapFirst(source: self.asObservable(), selector: selector) - } -} - -extension ObservableType where Element: ObservableConvertibleType { - - /** - Merges elements from all observable sequences in the given enumerable sequence into a single observable sequence. - - - seealso: [merge operator on reactivex.io](http://reactivex.io/documentation/operators/merge.html) - - - returns: The observable sequence that merges the elements of the observable sequences. - */ - public func merge() -> Observable { - Merge(source: self.asObservable()) - } - - /** - Merges elements from all inner observable sequences into a single observable sequence, limiting the number of concurrent subscriptions to inner sequences. - - - seealso: [merge operator on reactivex.io](http://reactivex.io/documentation/operators/merge.html) - - - parameter maxConcurrent: Maximum number of inner observable sequences being subscribed to concurrently. - - returns: The observable sequence that merges the elements of the inner sequences. - */ - public func merge(maxConcurrent: Int) - -> Observable { - MergeLimited(source: self.asObservable(), maxConcurrent: maxConcurrent) - } -} - -extension ObservableType where Element: ObservableConvertibleType { - - /** - Concatenates all inner observable sequences, as long as the previous observable sequence terminated successfully. - - - seealso: [concat operator on reactivex.io](http://reactivex.io/documentation/operators/concat.html) - - - returns: An observable sequence that contains the elements of each observed inner sequence, in sequential order. - */ - public func concat() -> Observable { - self.merge(maxConcurrent: 1) - } -} - -extension ObservableType { - /** - Merges elements from all observable sequences from collection into a single observable sequence. - - - seealso: [merge operator on reactivex.io](http://reactivex.io/documentation/operators/merge.html) - - - parameter sources: Collection of observable sequences to merge. - - returns: The observable sequence that merges the elements of the observable sequences. - */ - public static func merge(_ sources: Collection) -> Observable where Collection.Element == Observable { - MergeArray(sources: Array(sources)) - } - - /** - Merges elements from all observable sequences from array into a single observable sequence. - - - seealso: [merge operator on reactivex.io](http://reactivex.io/documentation/operators/merge.html) - - - parameter sources: Array of observable sequences to merge. - - returns: The observable sequence that merges the elements of the observable sequences. - */ - public static func merge(_ sources: [Observable]) -> Observable { - MergeArray(sources: sources) - } - - /** - Merges elements from all observable sequences into a single observable sequence. - - - seealso: [merge operator on reactivex.io](http://reactivex.io/documentation/operators/merge.html) - - - parameter sources: Collection of observable sequences to merge. - - returns: The observable sequence that merges the elements of the observable sequences. - */ - public static func merge(_ sources: Observable...) -> Observable { - MergeArray(sources: sources) - } -} - -// MARK: concatMap - -extension ObservableType { - /** - Projects each element of an observable sequence to an observable sequence and concatenates the resulting observable sequences into one observable sequence. - - - seealso: [concat operator on reactivex.io](http://reactivex.io/documentation/operators/concat.html) - - - returns: An observable sequence that contains the elements of each observed inner sequence, in sequential order. - */ - - public func concatMap(_ selector: @escaping (Element) throws -> Source) - -> Observable { - return ConcatMap(source: self.asObservable(), selector: selector) - } -} - -private final class MergeLimitedSinkIter - : ObserverType - , LockOwnerType - , SynchronizedOnType where SourceSequence.Element == Observer.Element { - typealias Element = Observer.Element - typealias DisposeKey = CompositeDisposable.DisposeKey - typealias Parent = MergeLimitedSink - - private let parent: Parent - private let disposeKey: DisposeKey - - var lock: RecursiveLock { - self.parent.lock - } - - init(parent: Parent, disposeKey: DisposeKey) { - self.parent = parent - self.disposeKey = disposeKey - } - - func on(_ event: Event) { - self.synchronizedOn(event) - } - - func synchronized_on(_ event: Event) { - switch event { - case .next: - self.parent.forwardOn(event) - case .error: - self.parent.forwardOn(event) - self.parent.dispose() - case .completed: - self.parent.group.remove(for: self.disposeKey) - if let next = self.parent.queue.dequeue() { - self.parent.subscribe(next, group: self.parent.group) - } - else { - self.parent.activeCount -= 1 - - if self.parent.stopped && self.parent.activeCount == 0 { - self.parent.forwardOn(.completed) - self.parent.dispose() - } - } - } - } -} - -private final class ConcatMapSink: MergeLimitedSink where Observer.Element == SourceSequence.Element { - typealias Selector = (SourceElement) throws -> SourceSequence - - private let selector: Selector - - init(selector: @escaping Selector, observer: Observer, cancel: Cancelable) { - self.selector = selector - super.init(maxConcurrent: 1, observer: observer, cancel: cancel) - } - - override func performMap(_ element: SourceElement) throws -> SourceSequence { - try self.selector(element) - } -} - -private final class MergeLimitedBasicSink: MergeLimitedSink where Observer.Element == SourceSequence.Element { - - override func performMap(_ element: SourceSequence) throws -> SourceSequence { - element - } -} - -private class MergeLimitedSink - : Sink - , ObserverType where Observer.Element == SourceSequence.Element { - typealias QueueType = Queue - - let maxConcurrent: Int - - let lock = RecursiveLock() - - // state - var stopped = false - var activeCount = 0 - var queue = QueueType(capacity: 2) - - let sourceSubscription = SingleAssignmentDisposable() - let group = CompositeDisposable() - - init(maxConcurrent: Int, observer: Observer, cancel: Cancelable) { - self.maxConcurrent = maxConcurrent - super.init(observer: observer, cancel: cancel) - } - - func run(_ source: Observable) -> Disposable { - _ = self.group.insert(self.sourceSubscription) - - let disposable = source.subscribe(self) - self.sourceSubscription.setDisposable(disposable) - return self.group - } - - func subscribe(_ innerSource: SourceSequence, group: CompositeDisposable) { - let subscription = SingleAssignmentDisposable() - - let key = group.insert(subscription) - - if let key = key { - let observer = MergeLimitedSinkIter(parent: self, disposeKey: key) - - let disposable = innerSource.asObservable().subscribe(observer) - subscription.setDisposable(disposable) - } - } - - func performMap(_ element: SourceElement) throws -> SourceSequence { - rxAbstractMethod() - } - - @inline(__always) - final private func nextElementArrived(element: SourceElement) -> SourceSequence? { - self.lock.performLocked { - let subscribe: Bool - if self.activeCount < self.maxConcurrent { - self.activeCount += 1 - subscribe = true - } - else { - do { - let value = try self.performMap(element) - self.queue.enqueue(value) - } catch { - self.forwardOn(.error(error)) - self.dispose() - } - subscribe = false - } - - if subscribe { - do { - return try self.performMap(element) - } catch { - self.forwardOn(.error(error)) - self.dispose() - } - } - - return nil - } - } - - func on(_ event: Event) { - switch event { - case .next(let element): - if let sequence = self.nextElementArrived(element: element) { - self.subscribe(sequence, group: self.group) - } - case .error(let error): - self.lock.performLocked { - self.forwardOn(.error(error)) - self.dispose() - } - case .completed: - self.lock.performLocked { - if self.activeCount == 0 { - self.forwardOn(.completed) - self.dispose() - } - else { - self.sourceSubscription.dispose() - } - - self.stopped = true - } - } - } -} - -final private class MergeLimited: Producer { - private let source: Observable - private let maxConcurrent: Int - - init(source: Observable, maxConcurrent: Int) { - self.source = source - self.maxConcurrent = maxConcurrent - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == SourceSequence.Element { - let sink = MergeLimitedBasicSink(maxConcurrent: self.maxConcurrent, observer: observer, cancel: cancel) - let subscription = sink.run(self.source) - return (sink: sink, subscription: subscription) - } -} - -// MARK: Merge - -private final class MergeBasicSink : MergeSink where Observer.Element == Source.Element { - override func performMap(_ element: Source) throws -> Source { - element - } -} - -// MARK: flatMap - -private final class FlatMapSink : MergeSink where Observer.Element == SourceSequence.Element { - typealias Selector = (SourceElement) throws -> SourceSequence - - private let selector: Selector - - init(selector: @escaping Selector, observer: Observer, cancel: Cancelable) { - self.selector = selector - super.init(observer: observer, cancel: cancel) - } - - override func performMap(_ element: SourceElement) throws -> SourceSequence { - try self.selector(element) - } -} - -// MARK: FlatMapFirst - -private final class FlatMapFirstSink : MergeSink where Observer.Element == SourceSequence.Element { - typealias Selector = (SourceElement) throws -> SourceSequence - - private let selector: Selector - - override var subscribeNext: Bool { - self.activeCount == 0 - } - - init(selector: @escaping Selector, observer: Observer, cancel: Cancelable) { - self.selector = selector - super.init(observer: observer, cancel: cancel) - } - - override func performMap(_ element: SourceElement) throws -> SourceSequence { - try self.selector(element) - } -} - -private final class MergeSinkIter : ObserverType where Observer.Element == SourceSequence.Element { - typealias Parent = MergeSink - typealias DisposeKey = CompositeDisposable.DisposeKey - typealias Element = Observer.Element - - private let parent: Parent - private let disposeKey: DisposeKey - - init(parent: Parent, disposeKey: DisposeKey) { - self.parent = parent - self.disposeKey = disposeKey - } - - func on(_ event: Event) { - self.parent.lock.performLocked { - switch event { - case .next(let value): - self.parent.forwardOn(.next(value)) - case .error(let error): - self.parent.forwardOn(.error(error)) - self.parent.dispose() - case .completed: - self.parent.group.remove(for: self.disposeKey) - self.parent.activeCount -= 1 - self.parent.checkCompleted() - } - } - } -} - - -private class MergeSink - : Sink - , ObserverType where Observer.Element == SourceSequence.Element { - typealias ResultType = Observer.Element - typealias Element = SourceElement - - let lock = RecursiveLock() - - var subscribeNext: Bool { - true - } - - // state - let group = CompositeDisposable() - let sourceSubscription = SingleAssignmentDisposable() - - var activeCount = 0 - var stopped = false - - override init(observer: Observer, cancel: Cancelable) { - super.init(observer: observer, cancel: cancel) - } - - func performMap(_ element: SourceElement) throws -> SourceSequence { - rxAbstractMethod() - } - - @inline(__always) - final private func nextElementArrived(element: SourceElement) -> SourceSequence? { - self.lock.performLocked { - if !self.subscribeNext { - return nil - } - - do { - let value = try self.performMap(element) - self.activeCount += 1 - return value - } - catch let e { - self.forwardOn(.error(e)) - self.dispose() - return nil - } - } - } - - func on(_ event: Event) { - switch event { - case .next(let element): - if let value = self.nextElementArrived(element: element) { - self.subscribeInner(value.asObservable()) - } - case .error(let error): - self.lock.performLocked { - self.forwardOn(.error(error)) - self.dispose() - } - case .completed: - self.lock.performLocked { - self.stopped = true - self.sourceSubscription.dispose() - self.checkCompleted() - } - } - } - - func subscribeInner(_ source: Observable) { - let iterDisposable = SingleAssignmentDisposable() - if let disposeKey = self.group.insert(iterDisposable) { - let iter = MergeSinkIter(parent: self, disposeKey: disposeKey) - let subscription = source.subscribe(iter) - iterDisposable.setDisposable(subscription) - } - } - - func run(_ sources: [Observable]) -> Disposable { - self.activeCount += sources.count - - for source in sources { - self.subscribeInner(source) - } - - self.stopped = true - - self.checkCompleted() - - return self.group - } - - @inline(__always) - func checkCompleted() { - if self.stopped && self.activeCount == 0 { - self.forwardOn(.completed) - self.dispose() - } - } - - func run(_ source: Observable) -> Disposable { - _ = self.group.insert(self.sourceSubscription) - - let subscription = source.subscribe(self) - self.sourceSubscription.setDisposable(subscription) - - return self.group - } -} - -// MARK: Producers - -final private class FlatMap: Producer { - typealias Selector = (SourceElement) throws -> SourceSequence - - private let source: Observable - - private let selector: Selector - - init(source: Observable, selector: @escaping Selector) { - self.source = source - self.selector = selector - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == SourceSequence.Element { - let sink = FlatMapSink(selector: self.selector, observer: observer, cancel: cancel) - let subscription = sink.run(self.source) - return (sink: sink, subscription: subscription) - } -} - -final private class FlatMapFirst: Producer { - typealias Selector = (SourceElement) throws -> SourceSequence - - private let source: Observable - - private let selector: Selector - - init(source: Observable, selector: @escaping Selector) { - self.source = source - self.selector = selector - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == SourceSequence.Element { - let sink = FlatMapFirstSink(selector: self.selector, observer: observer, cancel: cancel) - let subscription = sink.run(self.source) - return (sink: sink, subscription: subscription) - } -} - -final class ConcatMap: Producer { - typealias Selector = (SourceElement) throws -> SourceSequence - - private let source: Observable - private let selector: Selector - - init(source: Observable, selector: @escaping Selector) { - self.source = source - self.selector = selector - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == SourceSequence.Element { - let sink = ConcatMapSink(selector: self.selector, observer: observer, cancel: cancel) - let subscription = sink.run(self.source) - return (sink: sink, subscription: subscription) - } -} - -final class Merge : Producer { - private let source: Observable - - init(source: Observable) { - self.source = source - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == SourceSequence.Element { - let sink = MergeBasicSink(observer: observer, cancel: cancel) - let subscription = sink.run(self.source) - return (sink: sink, subscription: subscription) - } -} - -final private class MergeArray: Producer { - private let sources: [Observable] - - init(sources: [Observable]) { - self.sources = sources - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = MergeBasicSink, Observer>(observer: observer, cancel: cancel) - let subscription = sink.run(self.sources) - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Multicast.swift b/Pods/RxSwift/RxSwift/Observables/Multicast.swift deleted file mode 100644 index 1ebcf02..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Multicast.swift +++ /dev/null @@ -1,405 +0,0 @@ -// -// Multicast.swift -// RxSwift -// -// Created by Krunoslav Zaher on 2/27/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/** - Represents an observable wrapper that can be connected and disconnected from its underlying observable sequence. - */ -public class ConnectableObservable - : Observable - , ConnectableObservableType { - - /** - Connects the observable wrapper to its source. All subscribed observers will receive values from the underlying observable sequence as long as the connection is established. - - - returns: Disposable used to disconnect the observable wrapper from its source, causing subscribed observer to stop receiving values from the underlying observable sequence. - */ - public func connect() -> Disposable { - rxAbstractMethod() - } -} - -extension ObservableType { - - /** - Multicasts the source sequence notifications through an instantiated subject into all uses of the sequence within a selector function. - - Each subscription to the resulting sequence causes a separate multicast invocation, exposing the sequence resulting from the selector function's invocation. - - For specializations with fixed subject types, see `publish` and `replay`. - - - seealso: [multicast operator on reactivex.io](http://reactivex.io/documentation/operators/publish.html) - - - parameter subjectSelector: Factory function to create an intermediate subject through which the source sequence's elements will be multicast to the selector function. - - parameter selector: Selector function which can use the multicasted source sequence subject to the policies enforced by the created subject. - - returns: An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. - */ - public func multicast(_ subjectSelector: @escaping () throws -> Subject, selector: @escaping (Observable) throws -> Observable) - -> Observable where Subject.Observer.Element == Element { - return Multicast( - source: self.asObservable(), - subjectSelector: subjectSelector, - selector: selector - ) - } -} - -extension ObservableType { - - /** - Returns a connectable observable sequence that shares a single subscription to the underlying sequence. - - This operator is a specialization of `multicast` using a `PublishSubject`. - - - seealso: [publish operator on reactivex.io](http://reactivex.io/documentation/operators/publish.html) - - - returns: A connectable observable sequence that shares a single subscription to the underlying sequence. - */ - public func publish() -> ConnectableObservable { - self.multicast { PublishSubject() } - } -} - -extension ObservableType { - - /** - Returns a connectable observable sequence that shares a single subscription to the underlying sequence replaying bufferSize elements. - - This operator is a specialization of `multicast` using a `ReplaySubject`. - - - seealso: [replay operator on reactivex.io](http://reactivex.io/documentation/operators/replay.html) - - - parameter bufferSize: Maximum element count of the replay buffer. - - returns: A connectable observable sequence that shares a single subscription to the underlying sequence. - */ - public func replay(_ bufferSize: Int) - -> ConnectableObservable { - self.multicast { ReplaySubject.create(bufferSize: bufferSize) } - } - - /** - Returns a connectable observable sequence that shares a single subscription to the underlying sequence replaying all elements. - - This operator is a specialization of `multicast` using a `ReplaySubject`. - - - seealso: [replay operator on reactivex.io](http://reactivex.io/documentation/operators/replay.html) - - - returns: A connectable observable sequence that shares a single subscription to the underlying sequence. - */ - public func replayAll() - -> ConnectableObservable { - self.multicast { ReplaySubject.createUnbounded() } - } -} - -extension ConnectableObservableType { - - /** - Returns an observable sequence that stays connected to the source as long as there is at least one subscription to the observable sequence. - - - seealso: [refCount operator on reactivex.io](http://reactivex.io/documentation/operators/refcount.html) - - - returns: An observable sequence that stays connected to the source as long as there is at least one subscription to the observable sequence. - */ - public func refCount() -> Observable { - RefCount(source: self) - } -} - -extension ObservableType { - - /** - Multicasts the source sequence notifications through the specified subject to the resulting connectable observable. - - Upon connection of the connectable observable, the subject is subscribed to the source exactly one, and messages are forwarded to the observers registered with the connectable observable. - - For specializations with fixed subject types, see `publish` and `replay`. - - - seealso: [multicast operator on reactivex.io](http://reactivex.io/documentation/operators/publish.html) - - - parameter subject: Subject to push source elements into. - - returns: A connectable observable sequence that upon connection causes the source sequence to push results into the specified subject. - */ - public func multicast(_ subject: Subject) - -> ConnectableObservable where Subject.Observer.Element == Element { - ConnectableObservableAdapter(source: self.asObservable(), makeSubject: { subject }) - } - - /** - Multicasts the source sequence notifications through an instantiated subject to the resulting connectable observable. - - Upon connection of the connectable observable, the subject is subscribed to the source exactly one, and messages are forwarded to the observers registered with the connectable observable. - - Subject is cleared on connection disposal or in case source sequence produces terminal event. - - - seealso: [multicast operator on reactivex.io](http://reactivex.io/documentation/operators/publish.html) - - - parameter makeSubject: Factory function used to instantiate a subject for each connection. - - returns: A connectable observable sequence that upon connection causes the source sequence to push results into the specified subject. - */ - public func multicast(makeSubject: @escaping () -> Subject) - -> ConnectableObservable where Subject.Observer.Element == Element { - ConnectableObservableAdapter(source: self.asObservable(), makeSubject: makeSubject) - } -} - -final private class Connection: ObserverType, Disposable { - typealias Element = Subject.Observer.Element - - private var lock: RecursiveLock - // state - private var parent: ConnectableObservableAdapter? - private var subscription : Disposable? - private var subjectObserver: Subject.Observer - - private let disposed = AtomicInt(0) - - init(parent: ConnectableObservableAdapter, subjectObserver: Subject.Observer, lock: RecursiveLock, subscription: Disposable) { - self.parent = parent - self.subscription = subscription - self.lock = lock - self.subjectObserver = subjectObserver - } - - func on(_ event: Event) { - if isFlagSet(self.disposed, 1) { - return - } - if event.isStopEvent { - self.dispose() - } - self.subjectObserver.on(event) - } - - func dispose() { - lock.lock(); defer { lock.unlock() } - fetchOr(self.disposed, 1) - guard let parent = self.parent else { - return - } - - if parent.connection === self { - parent.connection = nil - parent.subject = nil - } - self.parent = nil - - self.subscription?.dispose() - self.subscription = nil - } -} - -final private class ConnectableObservableAdapter - : ConnectableObservable { - typealias ConnectionType = Connection - - private let source: Observable - private let makeSubject: () -> Subject - - fileprivate let lock = RecursiveLock() - fileprivate var subject: Subject? - - // state - fileprivate var connection: ConnectionType? - - init(source: Observable, makeSubject: @escaping () -> Subject) { - self.source = source - self.makeSubject = makeSubject - self.subject = nil - self.connection = nil - } - - override func connect() -> Disposable { - return self.lock.performLocked { - if let connection = self.connection { - return connection - } - - let singleAssignmentDisposable = SingleAssignmentDisposable() - let connection = Connection(parent: self, subjectObserver: self.lazySubject.asObserver(), lock: self.lock, subscription: singleAssignmentDisposable) - self.connection = connection - let subscription = self.source.subscribe(connection) - singleAssignmentDisposable.setDisposable(subscription) - return connection - } - } - - private var lazySubject: Subject { - if let subject = self.subject { - return subject - } - - let subject = self.makeSubject() - self.subject = subject - return subject - } - - override func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Subject.Element { - self.lazySubject.subscribe(observer) - } -} - -final private class RefCountSink - : Sink - , ObserverType where ConnectableSource.Element == Observer.Element { - typealias Element = Observer.Element - typealias Parent = RefCount - - private let parent: Parent - - private var connectionIdSnapshot: Int64 = -1 - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(observer: observer, cancel: cancel) - } - - func run() -> Disposable { - let subscription = self.parent.source.subscribe(self) - self.parent.lock.lock(); defer { self.parent.lock.unlock() } - - self.connectionIdSnapshot = self.parent.connectionId - - if self.isDisposed { - return Disposables.create() - } - - if self.parent.count == 0 { - self.parent.count = 1 - self.parent.connectableSubscription = self.parent.source.connect() - } - else { - self.parent.count += 1 - } - - return Disposables.create { - subscription.dispose() - self.parent.lock.lock(); defer { self.parent.lock.unlock() } - if self.parent.connectionId != self.connectionIdSnapshot { - return - } - if self.parent.count == 1 { - self.parent.count = 0 - guard let connectableSubscription = self.parent.connectableSubscription else { - return - } - - connectableSubscription.dispose() - self.parent.connectableSubscription = nil - } - else if self.parent.count > 1 { - self.parent.count -= 1 - } - else { - rxFatalError("Something went wrong with RefCount disposing mechanism") - } - } - } - - func on(_ event: Event) { - switch event { - case .next: - self.forwardOn(event) - case .error, .completed: - self.parent.lock.lock() - if self.parent.connectionId == self.connectionIdSnapshot { - let connection = self.parent.connectableSubscription - defer { connection?.dispose() } - self.parent.count = 0 - self.parent.connectionId = self.parent.connectionId &+ 1 - self.parent.connectableSubscription = nil - } - self.parent.lock.unlock() - self.forwardOn(event) - self.dispose() - } - } -} - -final private class RefCount: Producer { - fileprivate let lock = RecursiveLock() - - // state - fileprivate var count = 0 - fileprivate var connectionId: Int64 = 0 - fileprivate var connectableSubscription = nil as Disposable? - - fileprivate let source: ConnectableSource - - init(source: ConnectableSource) { - self.source = source - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) - where Observer.Element == ConnectableSource.Element { - let sink = RefCountSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} - -final private class MulticastSink: Sink, ObserverType { - typealias Element = Observer.Element - typealias ResultType = Element - typealias MutlicastType = Multicast - - private let parent: MutlicastType - - init(parent: MutlicastType, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(observer: observer, cancel: cancel) - } - - func run() -> Disposable { - do { - let subject = try self.parent.subjectSelector() - let connectable = ConnectableObservableAdapter(source: self.parent.source, makeSubject: { subject }) - - let observable = try self.parent.selector(connectable) - - let subscription = observable.subscribe(self) - let connection = connectable.connect() - - return Disposables.create(subscription, connection) - } - catch let e { - self.forwardOn(.error(e)) - self.dispose() - return Disposables.create() - } - } - - func on(_ event: Event) { - self.forwardOn(event) - switch event { - case .next: break - case .error, .completed: - self.dispose() - } - } -} - -final private class Multicast: Producer { - typealias SubjectSelectorType = () throws -> Subject - typealias SelectorType = (Observable) throws -> Observable - - fileprivate let source: Observable - fileprivate let subjectSelector: SubjectSelectorType - fileprivate let selector: SelectorType - - init(source: Observable, subjectSelector: @escaping SubjectSelectorType, selector: @escaping SelectorType) { - self.source = source - self.subjectSelector = subjectSelector - self.selector = selector - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Result { - let sink = MulticastSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Never.swift b/Pods/RxSwift/RxSwift/Observables/Never.swift deleted file mode 100644 index 7b456ee..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Never.swift +++ /dev/null @@ -1,27 +0,0 @@ -// -// Never.swift -// RxSwift -// -// Created by Krunoslav Zaher on 8/30/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - - /** - Returns a non-terminating observable sequence, which can be used to denote an infinite duration. - - - seealso: [never operator on reactivex.io](http://reactivex.io/documentation/operators/empty-never-throw.html) - - - returns: An observable sequence whose observers will never get called. - */ - public static func never() -> Observable { - NeverProducer() - } -} - -final private class NeverProducer: Producer { - override func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element { - Disposables.create() - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/ObserveOn.swift b/Pods/RxSwift/RxSwift/Observables/ObserveOn.swift deleted file mode 100644 index 6b8689e..0000000 --- a/Pods/RxSwift/RxSwift/Observables/ObserveOn.swift +++ /dev/null @@ -1,243 +0,0 @@ -// -// ObserveOn.swift -// RxSwift -// -// Created by Krunoslav Zaher on 7/25/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /** - Wraps the source sequence in order to run its observer callbacks on the specified scheduler. - - This only invokes observer callbacks on a `scheduler`. In case the subscription and/or unsubscription - actions have side-effects that require to be run on a scheduler, use `subscribeOn`. - - - seealso: [observeOn operator on reactivex.io](http://reactivex.io/documentation/operators/observeon.html) - - - parameter scheduler: Scheduler to notify observers on. - - returns: The source sequence whose observations happen on the specified scheduler. - */ - public func observe(on scheduler: ImmediateSchedulerType) - -> Observable { - guard let serialScheduler = scheduler as? SerialDispatchQueueScheduler else { - return ObserveOn(source: self.asObservable(), scheduler: scheduler) - } - - return ObserveOnSerialDispatchQueue(source: self.asObservable(), - scheduler: serialScheduler) - } - - /** - Wraps the source sequence in order to run its observer callbacks on the specified scheduler. - - This only invokes observer callbacks on a `scheduler`. In case the subscription and/or unsubscription - actions have side-effects that require to be run on a scheduler, use `subscribeOn`. - - - seealso: [observeOn operator on reactivex.io](http://reactivex.io/documentation/operators/observeon.html) - - - parameter scheduler: Scheduler to notify observers on. - - returns: The source sequence whose observations happen on the specified scheduler. - */ - @available(*, deprecated, renamed: "observe(on:)") - public func observeOn(_ scheduler: ImmediateSchedulerType) - -> Observable { - observe(on: scheduler) - } -} - -final private class ObserveOn: Producer { - let scheduler: ImmediateSchedulerType - let source: Observable - - init(source: Observable, scheduler: ImmediateSchedulerType) { - self.scheduler = scheduler - self.source = source - -#if TRACE_RESOURCES - _ = Resources.incrementTotal() -#endif - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = ObserveOnSink(scheduler: self.scheduler, observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - return (sink: sink, subscription: subscription) - } - -#if TRACE_RESOURCES - deinit { - _ = Resources.decrementTotal() - } -#endif -} - -enum ObserveOnState : Int32 { - // pump is not running - case stopped = 0 - // pump is running - case running = 1 -} - -final private class ObserveOnSink: ObserverBase { - typealias Element = Observer.Element - - let scheduler: ImmediateSchedulerType - - var lock = SpinLock() - let observer: Observer - - // state - var state = ObserveOnState.stopped - var queue = Queue>(capacity: 10) - - let scheduleDisposable = SerialDisposable() - let cancel: Cancelable - - init(scheduler: ImmediateSchedulerType, observer: Observer, cancel: Cancelable) { - self.scheduler = scheduler - self.observer = observer - self.cancel = cancel - } - - override func onCore(_ event: Event) { - let shouldStart = self.lock.performLocked { () -> Bool in - self.queue.enqueue(event) - - switch self.state { - case .stopped: - self.state = .running - return true - case .running: - return false - } - } - - if shouldStart { - self.scheduleDisposable.disposable = self.scheduler.scheduleRecursive((), action: self.run) - } - } - - func run(_ state: (), _ recurse: (()) -> Void) { - let (nextEvent, observer) = self.lock.performLocked { () -> (Event?, Observer) in - if !self.queue.isEmpty { - return (self.queue.dequeue(), self.observer) - } - else { - self.state = .stopped - return (nil, self.observer) - } - } - - if let nextEvent = nextEvent, !self.cancel.isDisposed { - observer.on(nextEvent) - if nextEvent.isStopEvent { - self.dispose() - } - } - else { - return - } - - let shouldContinue = self.shouldContinue_synchronized() - - if shouldContinue { - recurse(()) - } - } - - func shouldContinue_synchronized() -> Bool { - self.lock.performLocked { - let isEmpty = self.queue.isEmpty - if isEmpty { self.state = .stopped } - return !isEmpty - } - } - - override func dispose() { - super.dispose() - - self.cancel.dispose() - self.scheduleDisposable.dispose() - } -} - -#if TRACE_RESOURCES - private let numberOfSerialDispatchObservables = AtomicInt(0) - extension Resources { - /** - Counts number of `SerialDispatchQueueObservables`. - - Purposed for unit tests. - */ - public static var numberOfSerialDispatchQueueObservables: Int32 { - return load(numberOfSerialDispatchObservables) - } - } -#endif - -final private class ObserveOnSerialDispatchQueueSink: ObserverBase { - let scheduler: SerialDispatchQueueScheduler - let observer: Observer - - let cancel: Cancelable - - var cachedScheduleLambda: (((sink: ObserveOnSerialDispatchQueueSink, event: Event)) -> Disposable)! - - init(scheduler: SerialDispatchQueueScheduler, observer: Observer, cancel: Cancelable) { - self.scheduler = scheduler - self.observer = observer - self.cancel = cancel - super.init() - - self.cachedScheduleLambda = { pair in - guard !cancel.isDisposed else { return Disposables.create() } - - pair.sink.observer.on(pair.event) - - if pair.event.isStopEvent { - pair.sink.dispose() - } - - return Disposables.create() - } - } - - override func onCore(_ event: Event) { - _ = self.scheduler.schedule((self, event), action: self.cachedScheduleLambda!) - } - - override func dispose() { - super.dispose() - - self.cancel.dispose() - } -} - -final private class ObserveOnSerialDispatchQueue: Producer { - let scheduler: SerialDispatchQueueScheduler - let source: Observable - - init(source: Observable, scheduler: SerialDispatchQueueScheduler) { - self.scheduler = scheduler - self.source = source - - #if TRACE_RESOURCES - _ = Resources.incrementTotal() - _ = increment(numberOfSerialDispatchObservables) - #endif - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = ObserveOnSerialDispatchQueueSink(scheduler: self.scheduler, observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - return (sink: sink, subscription: subscription) - } - - #if TRACE_RESOURCES - deinit { - _ = Resources.decrementTotal() - _ = decrement(numberOfSerialDispatchObservables) - } - #endif -} diff --git a/Pods/RxSwift/RxSwift/Observables/Optional.swift b/Pods/RxSwift/RxSwift/Observables/Optional.swift deleted file mode 100644 index 64f8f1f..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Optional.swift +++ /dev/null @@ -1,95 +0,0 @@ -// -// Optional.swift -// RxSwift -// -// Created by tarunon on 2016/12/13. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /** - Converts a optional to an observable sequence. - - - seealso: [from operator on reactivex.io](http://reactivex.io/documentation/operators/from.html) - - - parameter optional: Optional element in the resulting observable sequence. - - returns: An observable sequence containing the wrapped value or not from given optional. - */ - public static func from(optional: Element?) -> Observable { - ObservableOptional(optional: optional) - } - - /** - Converts a optional to an observable sequence. - - - seealso: [from operator on reactivex.io](http://reactivex.io/documentation/operators/from.html) - - - parameter optional: Optional element in the resulting observable sequence. - - parameter scheduler: Scheduler to send the optional element on. - - returns: An observable sequence containing the wrapped value or not from given optional. - */ - public static func from(optional: Element?, scheduler: ImmediateSchedulerType) -> Observable { - ObservableOptionalScheduled(optional: optional, scheduler: scheduler) - } -} - -final private class ObservableOptionalScheduledSink: Sink { - typealias Element = Observer.Element - typealias Parent = ObservableOptionalScheduled - - private let parent: Parent - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(observer: observer, cancel: cancel) - } - - func run() -> Disposable { - return self.parent.scheduler.schedule(self.parent.optional) { (optional: Element?) -> Disposable in - if let next = optional { - self.forwardOn(.next(next)) - return self.parent.scheduler.schedule(()) { _ in - self.forwardOn(.completed) - self.dispose() - return Disposables.create() - } - } else { - self.forwardOn(.completed) - self.dispose() - return Disposables.create() - } - } - } -} - -final private class ObservableOptionalScheduled: Producer { - fileprivate let optional: Element? - fileprivate let scheduler: ImmediateSchedulerType - - init(optional: Element?, scheduler: ImmediateSchedulerType) { - self.optional = optional - self.scheduler = scheduler - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = ObservableOptionalScheduledSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} - -final private class ObservableOptional: Producer { - private let optional: Element? - - init(optional: Element?) { - self.optional = optional - } - - override func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element { - if let element = self.optional { - observer.on(.next(element)) - } - observer.on(.completed) - return Disposables.create() - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Producer.swift b/Pods/RxSwift/RxSwift/Observables/Producer.swift deleted file mode 100644 index e611930..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Producer.swift +++ /dev/null @@ -1,92 +0,0 @@ -// -// Producer.swift -// RxSwift -// -// Created by Krunoslav Zaher on 2/20/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -class Producer: Observable { - override init() { - super.init() - } - - override func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element { - if !CurrentThreadScheduler.isScheduleRequired { - // The returned disposable needs to release all references once it was disposed. - let disposer = SinkDisposer() - let sinkAndSubscription = self.run(observer, cancel: disposer) - disposer.setSinkAndSubscription(sink: sinkAndSubscription.sink, subscription: sinkAndSubscription.subscription) - - return disposer - } - else { - return CurrentThreadScheduler.instance.schedule(()) { _ in - let disposer = SinkDisposer() - let sinkAndSubscription = self.run(observer, cancel: disposer) - disposer.setSinkAndSubscription(sink: sinkAndSubscription.sink, subscription: sinkAndSubscription.subscription) - - return disposer - } - } - } - - func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - rxAbstractMethod() - } -} - -private final class SinkDisposer: Cancelable { - private enum DisposeState: Int32 { - case disposed = 1 - case sinkAndSubscriptionSet = 2 - } - - private let state = AtomicInt(0) - private var sink: Disposable? - private var subscription: Disposable? - - var isDisposed: Bool { - isFlagSet(self.state, DisposeState.disposed.rawValue) - } - - func setSinkAndSubscription(sink: Disposable, subscription: Disposable) { - self.sink = sink - self.subscription = subscription - - let previousState = fetchOr(self.state, DisposeState.sinkAndSubscriptionSet.rawValue) - if (previousState & DisposeState.sinkAndSubscriptionSet.rawValue) != 0 { - rxFatalError("Sink and subscription were already set") - } - - if (previousState & DisposeState.disposed.rawValue) != 0 { - sink.dispose() - subscription.dispose() - self.sink = nil - self.subscription = nil - } - } - - func dispose() { - let previousState = fetchOr(self.state, DisposeState.disposed.rawValue) - - if (previousState & DisposeState.disposed.rawValue) != 0 { - return - } - - if (previousState & DisposeState.sinkAndSubscriptionSet.rawValue) != 0 { - guard let sink = self.sink else { - rxFatalError("Sink not set") - } - guard let subscription = self.subscription else { - rxFatalError("Subscription not set") - } - - sink.dispose() - subscription.dispose() - - self.sink = nil - self.subscription = nil - } - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Range.swift b/Pods/RxSwift/RxSwift/Observables/Range.swift deleted file mode 100644 index 2453532..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Range.swift +++ /dev/null @@ -1,73 +0,0 @@ -// -// Range.swift -// RxSwift -// -// Created by Krunoslav Zaher on 9/13/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType where Element: RxAbstractInteger { - /** - Generates an observable sequence of integral numbers within a specified range, using the specified scheduler to generate and send out observer messages. - - - seealso: [range operator on reactivex.io](http://reactivex.io/documentation/operators/range.html) - - - parameter start: The value of the first integer in the sequence. - - parameter count: The number of sequential integers to generate. - - parameter scheduler: Scheduler to run the generator loop on. - - returns: An observable sequence that contains a range of sequential integral numbers. - */ - public static func range(start: Element, count: Element, scheduler: ImmediateSchedulerType = CurrentThreadScheduler.instance) -> Observable { - RangeProducer(start: start, count: count, scheduler: scheduler) - } -} - -final private class RangeProducer: Producer { - fileprivate let start: Element - fileprivate let count: Element - fileprivate let scheduler: ImmediateSchedulerType - - init(start: Element, count: Element, scheduler: ImmediateSchedulerType) { - guard count >= 0 else { - rxFatalError("count can't be negative") - } - - guard start &+ (count - 1) >= start || count == 0 else { - rxFatalError("overflow of count") - } - - self.start = start - self.count = count - self.scheduler = scheduler - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = RangeSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} - -final private class RangeSink: Sink where Observer.Element: RxAbstractInteger { - typealias Parent = RangeProducer - - private let parent: Parent - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(observer: observer, cancel: cancel) - } - - func run() -> Disposable { - return self.parent.scheduler.scheduleRecursive(0 as Observer.Element) { i, recurse in - if i < self.parent.count { - self.forwardOn(.next(self.parent.start + i)) - recurse(i + 1) - } - else { - self.forwardOn(.completed) - self.dispose() - } - } - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Reduce.swift b/Pods/RxSwift/RxSwift/Observables/Reduce.swift deleted file mode 100644 index d5fab34..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Reduce.swift +++ /dev/null @@ -1,109 +0,0 @@ -// -// Reduce.swift -// RxSwift -// -// Created by Krunoslav Zaher on 4/1/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - - -extension ObservableType { - /** - Applies an `accumulator` function over an observable sequence, returning the result of the aggregation as a single element in the result sequence. The specified `seed` value is used as the initial accumulator value. - - For aggregation behavior with incremental intermediate results, see `scan`. - - - seealso: [reduce operator on reactivex.io](http://reactivex.io/documentation/operators/reduce.html) - - - parameter seed: The initial accumulator value. - - parameter accumulator: A accumulator function to be invoked on each element. - - parameter mapResult: A function to transform the final accumulator value into the result value. - - returns: An observable sequence containing a single element with the final accumulator value. - */ - public func reduce(_ seed: A, accumulator: @escaping (A, Element) throws -> A, mapResult: @escaping (A) throws -> Result) - -> Observable { - Reduce(source: self.asObservable(), seed: seed, accumulator: accumulator, mapResult: mapResult) - } - - /** - Applies an `accumulator` function over an observable sequence, returning the result of the aggregation as a single element in the result sequence. The specified `seed` value is used as the initial accumulator value. - - For aggregation behavior with incremental intermediate results, see `scan`. - - - seealso: [reduce operator on reactivex.io](http://reactivex.io/documentation/operators/reduce.html) - - - parameter seed: The initial accumulator value. - - parameter accumulator: A accumulator function to be invoked on each element. - - returns: An observable sequence containing a single element with the final accumulator value. - */ - public func reduce(_ seed: A, accumulator: @escaping (A, Element) throws -> A) - -> Observable { - Reduce(source: self.asObservable(), seed: seed, accumulator: accumulator, mapResult: { $0 }) - } -} - -final private class ReduceSink: Sink, ObserverType { - typealias ResultType = Observer.Element - typealias Parent = Reduce - - private let parent: Parent - private var accumulation: AccumulateType - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - self.accumulation = parent.seed - - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - switch event { - case .next(let value): - do { - self.accumulation = try self.parent.accumulator(self.accumulation, value) - } - catch let e { - self.forwardOn(.error(e)) - self.dispose() - } - case .error(let e): - self.forwardOn(.error(e)) - self.dispose() - case .completed: - do { - let result = try self.parent.mapResult(self.accumulation) - self.forwardOn(.next(result)) - self.forwardOn(.completed) - self.dispose() - } - catch let e { - self.forwardOn(.error(e)) - self.dispose() - } - } - } -} - -final private class Reduce: Producer { - typealias AccumulatorType = (AccumulateType, SourceType) throws -> AccumulateType - typealias ResultSelectorType = (AccumulateType) throws -> ResultType - - private let source: Observable - fileprivate let seed: AccumulateType - fileprivate let accumulator: AccumulatorType - fileprivate let mapResult: ResultSelectorType - - init(source: Observable, seed: AccumulateType, accumulator: @escaping AccumulatorType, mapResult: @escaping ResultSelectorType) { - self.source = source - self.seed = seed - self.accumulator = accumulator - self.mapResult = mapResult - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == ResultType { - let sink = ReduceSink(parent: self, observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - return (sink: sink, subscription: subscription) - } -} - diff --git a/Pods/RxSwift/RxSwift/Observables/Repeat.swift b/Pods/RxSwift/RxSwift/Observables/Repeat.swift deleted file mode 100644 index 69a3ba0..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Repeat.swift +++ /dev/null @@ -1,57 +0,0 @@ -// -// Repeat.swift -// RxSwift -// -// Created by Krunoslav Zaher on 9/13/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /** - Generates an observable sequence that repeats the given element infinitely, using the specified scheduler to send out observer messages. - - - seealso: [repeat operator on reactivex.io](http://reactivex.io/documentation/operators/repeat.html) - - - parameter element: Element to repeat. - - parameter scheduler: Scheduler to run the producer loop on. - - returns: An observable sequence that repeats the given element infinitely. - */ - public static func repeatElement(_ element: Element, scheduler: ImmediateSchedulerType = CurrentThreadScheduler.instance) -> Observable { - RepeatElement(element: element, scheduler: scheduler) - } -} - -final private class RepeatElement: Producer { - fileprivate let element: Element - fileprivate let scheduler: ImmediateSchedulerType - - init(element: Element, scheduler: ImmediateSchedulerType) { - self.element = element - self.scheduler = scheduler - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = RepeatElementSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - - return (sink: sink, subscription: subscription) - } -} - -final private class RepeatElementSink: Sink { - typealias Parent = RepeatElement - - private let parent: Parent - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(observer: observer, cancel: cancel) - } - - func run() -> Disposable { - return self.parent.scheduler.scheduleRecursive(self.parent.element) { e, recurse in - self.forwardOn(.next(e)) - recurse(e) - } - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/RetryWhen.swift b/Pods/RxSwift/RxSwift/Observables/RetryWhen.swift deleted file mode 100644 index 1b2a6f1..0000000 --- a/Pods/RxSwift/RxSwift/Observables/RetryWhen.swift +++ /dev/null @@ -1,211 +0,0 @@ -// -// RetryWhen.swift -// RxSwift -// -// Created by Junior B. on 06/10/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /** - Repeats the source observable sequence on error when the notifier emits a next value. - If the source observable errors and the notifier completes, it will complete the source sequence. - - - seealso: [retry operator on reactivex.io](http://reactivex.io/documentation/operators/retry.html) - - - parameter notificationHandler: A handler that is passed an observable sequence of errors raised by the source observable and returns and observable that either continues, completes or errors. This behavior is then applied to the source observable. - - returns: An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully or is notified to error or complete. - */ - public func retry(when notificationHandler: @escaping (Observable) -> TriggerObservable) - -> Observable { - RetryWhenSequence(sources: InfiniteSequence(repeatedValue: self.asObservable()), notificationHandler: notificationHandler) - } - - /** - Repeats the source observable sequence on error when the notifier emits a next value. - If the source observable errors and the notifier completes, it will complete the source sequence. - - - seealso: [retry operator on reactivex.io](http://reactivex.io/documentation/operators/retry.html) - - - parameter notificationHandler: A handler that is passed an observable sequence of errors raised by the source observable and returns and observable that either continues, completes or errors. This behavior is then applied to the source observable. - - returns: An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully or is notified to error or complete. - */ - @available(*, deprecated, renamed: "retry(when:)") - public func retryWhen(_ notificationHandler: @escaping (Observable) -> TriggerObservable) - -> Observable { - retry(when: notificationHandler) - } - - /** - Repeats the source observable sequence on error when the notifier emits a next value. - If the source observable errors and the notifier completes, it will complete the source sequence. - - - seealso: [retry operator on reactivex.io](http://reactivex.io/documentation/operators/retry.html) - - - parameter notificationHandler: A handler that is passed an observable sequence of errors raised by the source observable and returns and observable that either continues, completes or errors. This behavior is then applied to the source observable. - - returns: An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully or is notified to error or complete. - */ - public func retry(when notificationHandler: @escaping (Observable) -> TriggerObservable) - -> Observable { - RetryWhenSequence(sources: InfiniteSequence(repeatedValue: self.asObservable()), notificationHandler: notificationHandler) - } - - /** - Repeats the source observable sequence on error when the notifier emits a next value. - If the source observable errors and the notifier completes, it will complete the source sequence. - - - seealso: [retry operator on reactivex.io](http://reactivex.io/documentation/operators/retry.html) - - - parameter notificationHandler: A handler that is passed an observable sequence of errors raised by the source observable and returns and observable that either continues, completes or errors. This behavior is then applied to the source observable. - - returns: An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully or is notified to error or complete. - */ - @available(*, deprecated, renamed: "retry(when:)") - public func retryWhen(_ notificationHandler: @escaping (Observable) -> TriggerObservable) - -> Observable { - RetryWhenSequence(sources: InfiniteSequence(repeatedValue: self.asObservable()), notificationHandler: notificationHandler) - } -} - -final private class RetryTriggerSink - : ObserverType where Sequence.Element: ObservableType, Sequence.Element.Element == Observer.Element { - typealias Element = TriggerObservable.Element - - typealias Parent = RetryWhenSequenceSinkIter - - private let parent: Parent - - init(parent: Parent) { - self.parent = parent - } - - func on(_ event: Event) { - switch event { - case .next: - self.parent.parent.lastError = nil - self.parent.parent.schedule(.moveNext) - case .error(let e): - self.parent.parent.forwardOn(.error(e)) - self.parent.parent.dispose() - case .completed: - self.parent.parent.forwardOn(.completed) - self.parent.parent.dispose() - } - } -} - -final private class RetryWhenSequenceSinkIter - : ObserverType - , Disposable where Sequence.Element: ObservableType, Sequence.Element.Element == Observer.Element { - typealias Element = Observer.Element - typealias Parent = RetryWhenSequenceSink - - fileprivate let parent: Parent - private let errorHandlerSubscription = SingleAssignmentDisposable() - private let subscription: Disposable - - init(parent: Parent, subscription: Disposable) { - self.parent = parent - self.subscription = subscription - } - - func on(_ event: Event) { - switch event { - case .next: - self.parent.forwardOn(event) - case .error(let error): - self.parent.lastError = error - - if let failedWith = error as? Error { - // dispose current subscription - self.subscription.dispose() - - let errorHandlerSubscription = self.parent.notifier.subscribe(RetryTriggerSink(parent: self)) - self.errorHandlerSubscription.setDisposable(errorHandlerSubscription) - self.parent.errorSubject.on(.next(failedWith)) - } - else { - self.parent.forwardOn(.error(error)) - self.parent.dispose() - } - case .completed: - self.parent.forwardOn(event) - self.parent.dispose() - } - } - - final func dispose() { - self.subscription.dispose() - self.errorHandlerSubscription.dispose() - } -} - -final private class RetryWhenSequenceSink - : TailRecursiveSink where Sequence.Element: ObservableType, Sequence.Element.Element == Observer.Element { - typealias Element = Observer.Element - typealias Parent = RetryWhenSequence - - let lock = RecursiveLock() - - private let parent: Parent - - fileprivate var lastError: Swift.Error? - fileprivate let errorSubject = PublishSubject() - private let handler: Observable - fileprivate let notifier = PublishSubject() - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - self.handler = parent.notificationHandler(self.errorSubject).asObservable() - super.init(observer: observer, cancel: cancel) - } - - override func done() { - if let lastError = self.lastError { - self.forwardOn(.error(lastError)) - self.lastError = nil - } - else { - self.forwardOn(.completed) - } - - self.dispose() - } - - override func extract(_ observable: Observable) -> SequenceGenerator? { - // It is important to always return `nil` here because there are side effects in the `run` method - // that are dependant on particular `retryWhen` operator so single operator stack can't be reused in this - // case. - return nil - } - - override func subscribeToNext(_ source: Observable) -> Disposable { - let subscription = SingleAssignmentDisposable() - let iter = RetryWhenSequenceSinkIter(parent: self, subscription: subscription) - subscription.setDisposable(source.subscribe(iter)) - return iter - } - - override func run(_ sources: SequenceGenerator) -> Disposable { - let triggerSubscription = self.handler.subscribe(self.notifier.asObserver()) - let superSubscription = super.run(sources) - return Disposables.create(superSubscription, triggerSubscription) - } -} - -final private class RetryWhenSequence: Producer where Sequence.Element: ObservableType { - typealias Element = Sequence.Element.Element - - private let sources: Sequence - fileprivate let notificationHandler: (Observable) -> TriggerObservable - - init(sources: Sequence, notificationHandler: @escaping (Observable) -> TriggerObservable) { - self.sources = sources - self.notificationHandler = notificationHandler - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = RetryWhenSequenceSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run((self.sources.makeIterator(), nil)) - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Sample.swift b/Pods/RxSwift/RxSwift/Observables/Sample.swift deleted file mode 100644 index 9301c9a..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Sample.swift +++ /dev/null @@ -1,139 +0,0 @@ -// -// Sample.swift -// RxSwift -// -// Created by Krunoslav Zaher on 5/1/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - - /** - Samples the source observable sequence using a sampler observable sequence producing sampling ticks. - - Upon each sampling tick, the latest element (if any) in the source sequence during the last sampling interval is sent to the resulting sequence. - - **In case there were no new elements between sampler ticks, you may provide a default value to be emitted, instead - to the resulting sequence otherwise no element is sent.** - - - seealso: [sample operator on reactivex.io](http://reactivex.io/documentation/operators/sample.html) - - - parameter sampler: Sampling tick sequence. - - parameter defaultValue: a value to return if there are no new elements between sampler ticks - - returns: Sampled observable sequence. - */ - public func sample(_ sampler: Source, defaultValue: Element? = nil) - -> Observable { - return Sample(source: self.asObservable(), sampler: sampler.asObservable(), defaultValue: defaultValue) - } -} - -final private class SamplerSink - : ObserverType - , LockOwnerType - , SynchronizedOnType { - typealias Element = SampleType - - typealias Parent = SampleSequenceSink - - private let parent: Parent - - var lock: RecursiveLock { - self.parent.lock - } - - init(parent: Parent) { - self.parent = parent - } - - func on(_ event: Event) { - self.synchronizedOn(event) - } - - func synchronized_on(_ event: Event) { - switch event { - case .next, .completed: - if let element = parent.element ?? self.parent.defaultValue { - self.parent.element = nil - self.parent.forwardOn(.next(element)) - } - - if self.parent.atEnd { - self.parent.forwardOn(.completed) - self.parent.dispose() - } - case .error(let e): - self.parent.forwardOn(.error(e)) - self.parent.dispose() - } - } -} - -final private class SampleSequenceSink - : Sink - , ObserverType - , LockOwnerType - , SynchronizedOnType { - typealias Element = Observer.Element - typealias Parent = Sample - - fileprivate let parent: Parent - fileprivate let defaultValue: Element? - - let lock = RecursiveLock() - - // state - fileprivate var element = nil as Element? - fileprivate var atEnd = false - - private let sourceSubscription = SingleAssignmentDisposable() - - init(parent: Parent, observer: Observer, cancel: Cancelable, defaultValue: Element? = nil) { - self.parent = parent - self.defaultValue = defaultValue - super.init(observer: observer, cancel: cancel) - } - - func run() -> Disposable { - self.sourceSubscription.setDisposable(self.parent.source.subscribe(self)) - let samplerSubscription = self.parent.sampler.subscribe(SamplerSink(parent: self)) - - return Disposables.create(sourceSubscription, samplerSubscription) - } - - func on(_ event: Event) { - self.synchronizedOn(event) - } - - func synchronized_on(_ event: Event) { - switch event { - case .next(let element): - self.element = element - case .error: - self.forwardOn(event) - self.dispose() - case .completed: - self.atEnd = true - self.sourceSubscription.dispose() - } - } - -} - -final private class Sample: Producer { - fileprivate let source: Observable - fileprivate let sampler: Observable - fileprivate let defaultValue: Element? - - init(source: Observable, sampler: Observable, defaultValue: Element? = nil) { - self.source = source - self.sampler = sampler - self.defaultValue = defaultValue - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = SampleSequenceSink(parent: self, observer: observer, cancel: cancel, defaultValue: self.defaultValue) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Scan.swift b/Pods/RxSwift/RxSwift/Observables/Scan.swift deleted file mode 100644 index ecf69c8..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Scan.swift +++ /dev/null @@ -1,100 +0,0 @@ -// -// Scan.swift -// RxSwift -// -// Created by Krunoslav Zaher on 6/14/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - - /** - Applies an accumulator function over an observable sequence and returns each intermediate result. The specified seed value is used as the initial accumulator value. - - For aggregation behavior with no intermediate results, see `reduce`. - - - seealso: [scan operator on reactivex.io](http://reactivex.io/documentation/operators/scan.html) - - - parameter seed: The initial accumulator value. - - parameter accumulator: An accumulator function to be invoked on each element. - - returns: An observable sequence containing the accumulated values. - */ - public func scan(into seed: A, accumulator: @escaping (inout A, Element) throws -> Void) - -> Observable { - Scan(source: self.asObservable(), seed: seed, accumulator: accumulator) - } - - /** - Applies an accumulator function over an observable sequence and returns each intermediate result. The specified seed value is used as the initial accumulator value. - - For aggregation behavior with no intermediate results, see `reduce`. - - - seealso: [scan operator on reactivex.io](http://reactivex.io/documentation/operators/scan.html) - - - parameter seed: The initial accumulator value. - - parameter accumulator: An accumulator function to be invoked on each element. - - returns: An observable sequence containing the accumulated values. - */ - public func scan(_ seed: A, accumulator: @escaping (A, Element) throws -> A) - -> Observable { - return Scan(source: self.asObservable(), seed: seed) { acc, element in - let currentAcc = acc - acc = try accumulator(currentAcc, element) - } - } -} - -final private class ScanSink: Sink, ObserverType { - typealias Accumulate = Observer.Element - typealias Parent = Scan - - private let parent: Parent - private var accumulate: Accumulate - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - self.accumulate = parent.seed - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - switch event { - case .next(let element): - do { - try self.parent.accumulator(&self.accumulate, element) - self.forwardOn(.next(self.accumulate)) - } - catch let error { - self.forwardOn(.error(error)) - self.dispose() - } - case .error(let error): - self.forwardOn(.error(error)) - self.dispose() - case .completed: - self.forwardOn(.completed) - self.dispose() - } - } - -} - -final private class Scan: Producer { - typealias Accumulator = (inout Accumulate, Element) throws -> Void - - private let source: Observable - fileprivate let seed: Accumulate - fileprivate let accumulator: Accumulator - - init(source: Observable, seed: Accumulate, accumulator: @escaping Accumulator) { - self.source = source - self.seed = seed - self.accumulator = accumulator - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Accumulate { - let sink = ScanSink(parent: self, observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Sequence.swift b/Pods/RxSwift/RxSwift/Observables/Sequence.swift deleted file mode 100644 index c6d1089..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Sequence.swift +++ /dev/null @@ -1,89 +0,0 @@ -// -// Sequence.swift -// RxSwift -// -// Created by Krunoslav Zaher on 11/14/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - // MARK: of - - /** - This method creates a new Observable instance with a variable number of elements. - - - seealso: [from operator on reactivex.io](http://reactivex.io/documentation/operators/from.html) - - - parameter elements: Elements to generate. - - parameter scheduler: Scheduler to send elements on. If `nil`, elements are sent immediately on subscription. - - returns: The observable sequence whose elements are pulled from the given arguments. - */ - public static func of(_ elements: Element ..., scheduler: ImmediateSchedulerType = CurrentThreadScheduler.instance) -> Observable { - ObservableSequence(elements: elements, scheduler: scheduler) - } -} - -extension ObservableType { - /** - Converts an array to an observable sequence. - - - seealso: [from operator on reactivex.io](http://reactivex.io/documentation/operators/from.html) - - - returns: The observable sequence whose elements are pulled from the given enumerable sequence. - */ - public static func from(_ array: [Element], scheduler: ImmediateSchedulerType = CurrentThreadScheduler.instance) -> Observable { - ObservableSequence(elements: array, scheduler: scheduler) - } - - /** - Converts a sequence to an observable sequence. - - - seealso: [from operator on reactivex.io](http://reactivex.io/documentation/operators/from.html) - - - returns: The observable sequence whose elements are pulled from the given enumerable sequence. - */ - public static func from(_ sequence: Sequence, scheduler: ImmediateSchedulerType = CurrentThreadScheduler.instance) -> Observable where Sequence.Element == Element { - ObservableSequence(elements: sequence, scheduler: scheduler) - } -} - -final private class ObservableSequenceSink: Sink where Sequence.Element == Observer.Element { - typealias Parent = ObservableSequence - - private let parent: Parent - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(observer: observer, cancel: cancel) - } - - func run() -> Disposable { - return self.parent.scheduler.scheduleRecursive(self.parent.elements.makeIterator()) { iterator, recurse in - var mutableIterator = iterator - if let next = mutableIterator.next() { - self.forwardOn(.next(next)) - recurse(mutableIterator) - } - else { - self.forwardOn(.completed) - self.dispose() - } - } - } -} - -final private class ObservableSequence: Producer { - fileprivate let elements: Sequence - fileprivate let scheduler: ImmediateSchedulerType - - init(elements: Sequence, scheduler: ImmediateSchedulerType) { - self.elements = elements - self.scheduler = scheduler - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = ObservableSequenceSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/ShareReplayScope.swift b/Pods/RxSwift/RxSwift/Observables/ShareReplayScope.swift deleted file mode 100644 index 59d440d..0000000 --- a/Pods/RxSwift/RxSwift/Observables/ShareReplayScope.swift +++ /dev/null @@ -1,443 +0,0 @@ -// -// ShareReplayScope.swift -// RxSwift -// -// Created by Krunoslav Zaher on 5/28/17. -// Copyright © 2017 Krunoslav Zaher. All rights reserved. -// - -/// Subject lifetime scope -public enum SubjectLifetimeScope { - /** - **Each connection will have it's own subject instance to store replay events.** - **Connections will be isolated from each another.** - - Configures the underlying implementation to behave equivalent to. - - ``` - source.multicast(makeSubject: { MySubject() }).refCount() - ``` - - **This is the recommended default.** - - This has the following consequences: - * `retry` or `concat` operators will function as expected because terminating the sequence will clear internal state. - * Each connection to source observable sequence will use it's own subject. - * When the number of subscribers drops from 1 to 0 and connection to source sequence is disposed, subject will be cleared. - - - ``` - let xs = Observable.deferred { () -> Observable in - print("Performing work ...") - return Observable.just(Date().timeIntervalSince1970) - } - .share(replay: 1, scope: .whileConnected) - - _ = xs.subscribe(onNext: { print("next \($0)") }, onCompleted: { print("completed\n") }) - _ = xs.subscribe(onNext: { print("next \($0)") }, onCompleted: { print("completed\n") }) - _ = xs.subscribe(onNext: { print("next \($0)") }, onCompleted: { print("completed\n") }) - - ``` - - Notice how time interval is different and `Performing work ...` is printed each time) - - ``` - Performing work ... - next 1495998900.82141 - completed - - Performing work ... - next 1495998900.82359 - completed - - Performing work ... - next 1495998900.82444 - completed - - - ``` - - */ - case whileConnected - - /** - **One subject will store replay events for all connections to source.** - **Connections won't be isolated from each another.** - - Configures the underlying implementation behave equivalent to. - - ``` - source.multicast(MySubject()).refCount() - ``` - - This has the following consequences: - * Using `retry` or `concat` operators after this operator usually isn't advised. - * Each connection to source observable sequence will share the same subject. - * After number of subscribers drops from 1 to 0 and connection to source observable sequence is dispose, this operator will - continue holding a reference to the same subject. - If at some later moment a new observer initiates a new connection to source it can potentially receive - some of the stale events received during previous connection. - * After source sequence terminates any new observer will always immediately receive replayed elements and terminal event. - No new subscriptions to source observable sequence will be attempted. - - ``` - let xs = Observable.deferred { () -> Observable in - print("Performing work ...") - return Observable.just(Date().timeIntervalSince1970) - } - .share(replay: 1, scope: .forever) - - _ = xs.subscribe(onNext: { print("next \($0)") }, onCompleted: { print("completed\n") }) - _ = xs.subscribe(onNext: { print("next \($0)") }, onCompleted: { print("completed\n") }) - _ = xs.subscribe(onNext: { print("next \($0)") }, onCompleted: { print("completed\n") }) - ``` - - Notice how time interval is the same, replayed, and `Performing work ...` is printed only once - - ``` - Performing work ... - next 1495999013.76356 - completed - - next 1495999013.76356 - completed - - next 1495999013.76356 - completed - ``` - - */ - case forever -} - -extension ObservableType { - - /** - Returns an observable sequence that **shares a single subscription to the underlying sequence**, and immediately upon subscription replays elements in buffer. - - This operator is equivalent to: - * `.whileConnected` - ``` - // Each connection will have it's own subject instance to store replay events. - // Connections will be isolated from each another. - source.multicast(makeSubject: { Replay.create(bufferSize: replay) }).refCount() - ``` - * `.forever` - ``` - // One subject will store replay events for all connections to source. - // Connections won't be isolated from each another. - source.multicast(Replay.create(bufferSize: replay)).refCount() - ``` - - It uses optimized versions of the operators for most common operations. - - - parameter replay: Maximum element count of the replay buffer. - - parameter scope: Lifetime scope of sharing subject. For more information see `SubjectLifetimeScope` enum. - - - seealso: [shareReplay operator on reactivex.io](http://reactivex.io/documentation/operators/replay.html) - - - returns: An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. - */ - public func share(replay: Int = 0, scope: SubjectLifetimeScope = .whileConnected) - -> Observable { - switch scope { - case .forever: - switch replay { - case 0: return self.multicast(PublishSubject()).refCount() - default: return self.multicast(ReplaySubject.create(bufferSize: replay)).refCount() - } - case .whileConnected: - switch replay { - case 0: return ShareWhileConnected(source: self.asObservable()) - case 1: return ShareReplay1WhileConnected(source: self.asObservable()) - default: return self.multicast(makeSubject: { ReplaySubject.create(bufferSize: replay) }).refCount() - } - } - } -} - -private final class ShareReplay1WhileConnectedConnection - : ObserverType - , SynchronizedUnsubscribeType { - typealias Observers = AnyObserver.s - typealias DisposeKey = Observers.KeyType - - typealias Parent = ShareReplay1WhileConnected - private let parent: Parent - private let subscription = SingleAssignmentDisposable() - - private let lock: RecursiveLock - private var disposed: Bool = false - fileprivate var observers = Observers() - private var element: Element? - - init(parent: Parent, lock: RecursiveLock) { - self.parent = parent - self.lock = lock - - #if TRACE_RESOURCES - _ = Resources.incrementTotal() - #endif - } - - final func on(_ event: Event) { - let observers = self.lock.performLocked { self.synchronized_on(event) } - dispatch(observers, event) - } - - final private func synchronized_on(_ event: Event) -> Observers { - if self.disposed { - return Observers() - } - - switch event { - case .next(let element): - self.element = element - return self.observers - case .error, .completed: - let observers = self.observers - self.synchronized_dispose() - return observers - } - } - - final func connect() { - self.subscription.setDisposable(self.parent.source.subscribe(self)) - } - - final func synchronized_subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element { - self.lock.performLocked { - if let element = self.element { - observer.on(.next(element)) - } - - let disposeKey = self.observers.insert(observer.on) - - return SubscriptionDisposable(owner: self, key: disposeKey) - } - } - - final private func synchronized_dispose() { - self.disposed = true - if self.parent.connection === self { - self.parent.connection = nil - } - self.observers = Observers() - } - - final func synchronizedUnsubscribe(_ disposeKey: DisposeKey) { - if self.lock.performLocked({ self.synchronized_unsubscribe(disposeKey) }) { - self.subscription.dispose() - } - } - - @inline(__always) - final private func synchronized_unsubscribe(_ disposeKey: DisposeKey) -> Bool { - // if already unsubscribed, just return - if self.observers.removeKey(disposeKey) == nil { - return false - } - - if self.observers.count == 0 { - self.synchronized_dispose() - return true - } - - return false - } - - #if TRACE_RESOURCES - deinit { - _ = Resources.decrementTotal() - } - #endif -} - -// optimized version of share replay for most common case -final private class ShareReplay1WhileConnected - : Observable { - - fileprivate typealias Connection = ShareReplay1WhileConnectedConnection - - fileprivate let source: Observable - - private let lock = RecursiveLock() - - fileprivate var connection: Connection? - - init(source: Observable) { - self.source = source - } - - override func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element { - self.lock.lock() - let connection = self.synchronized_subscribe(observer) - let count = connection.observers.count - - let disposable = connection.synchronized_subscribe(observer) - self.lock.unlock() - - if count == 0 { - connection.connect() - } - - return disposable - } - - @inline(__always) - private func synchronized_subscribe(_ observer: Observer) -> Connection where Observer.Element == Element { - let connection: Connection - - if let existingConnection = self.connection { - connection = existingConnection - } - else { - connection = ShareReplay1WhileConnectedConnection( - parent: self, - lock: self.lock) - self.connection = connection - } - - return connection - } -} - -private final class ShareWhileConnectedConnection - : ObserverType - , SynchronizedUnsubscribeType { - typealias Observers = AnyObserver.s - typealias DisposeKey = Observers.KeyType - - typealias Parent = ShareWhileConnected - private let parent: Parent - private let subscription = SingleAssignmentDisposable() - - private let lock: RecursiveLock - private var disposed: Bool = false - fileprivate var observers = Observers() - - init(parent: Parent, lock: RecursiveLock) { - self.parent = parent - self.lock = lock - - #if TRACE_RESOURCES - _ = Resources.incrementTotal() - #endif - } - - final func on(_ event: Event) { - let observers = self.lock.performLocked { self.synchronized_on(event) } - dispatch(observers, event) - } - - final private func synchronized_on(_ event: Event) -> Observers { - if self.disposed { - return Observers() - } - - switch event { - case .next: - return self.observers - case .error, .completed: - let observers = self.observers - self.synchronized_dispose() - return observers - } - } - - final func connect() { - self.subscription.setDisposable(self.parent.source.subscribe(self)) - } - - final func synchronized_subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element { - self.lock.performLocked { - let disposeKey = self.observers.insert(observer.on) - - return SubscriptionDisposable(owner: self, key: disposeKey) - } - } - - final private func synchronized_dispose() { - self.disposed = true - if self.parent.connection === self { - self.parent.connection = nil - } - self.observers = Observers() - } - - final func synchronizedUnsubscribe(_ disposeKey: DisposeKey) { - if self.lock.performLocked({ self.synchronized_unsubscribe(disposeKey) }) { - self.subscription.dispose() - } - } - - @inline(__always) - final private func synchronized_unsubscribe(_ disposeKey: DisposeKey) -> Bool { - // if already unsubscribed, just return - if self.observers.removeKey(disposeKey) == nil { - return false - } - - if self.observers.count == 0 { - self.synchronized_dispose() - return true - } - - return false - } - - #if TRACE_RESOURCES - deinit { - _ = Resources.decrementTotal() - } - #endif -} - -// optimized version of share replay for most common case -final private class ShareWhileConnected - : Observable { - - fileprivate typealias Connection = ShareWhileConnectedConnection - - fileprivate let source: Observable - - private let lock = RecursiveLock() - - fileprivate var connection: Connection? - - init(source: Observable) { - self.source = source - } - - override func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element { - self.lock.lock() - let connection = self.synchronized_subscribe(observer) - let count = connection.observers.count - - let disposable = connection.synchronized_subscribe(observer) - self.lock.unlock() - - if count == 0 { - connection.connect() - } - - return disposable - } - - @inline(__always) - private func synchronized_subscribe(_ observer: Observer) -> Connection where Observer.Element == Element { - let connection: Connection - - if let existingConnection = self.connection { - connection = existingConnection - } - else { - connection = ShareWhileConnectedConnection( - parent: self, - lock: self.lock) - self.connection = connection - } - - return connection - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/SingleAsync.swift b/Pods/RxSwift/RxSwift/Observables/SingleAsync.swift deleted file mode 100644 index 04e2217..0000000 --- a/Pods/RxSwift/RxSwift/Observables/SingleAsync.swift +++ /dev/null @@ -1,104 +0,0 @@ -// -// SingleAsync.swift -// RxSwift -// -// Created by Junior B. on 09/11/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - - /** - The single operator is similar to first, but throws a `RxError.noElements` or `RxError.moreThanOneElement` - if the source Observable does not emit exactly one element before successfully completing. - - - seealso: [single operator on reactivex.io](http://reactivex.io/documentation/operators/first.html) - - - returns: An observable sequence that emits a single element or throws an exception if more (or none) of them are emitted. - */ - public func single() - -> Observable { - SingleAsync(source: self.asObservable()) - } - - /** - The single operator is similar to first, but throws a `RxError.NoElements` or `RxError.MoreThanOneElement` - if the source Observable does not emit exactly one element before successfully completing. - - - seealso: [single operator on reactivex.io](http://reactivex.io/documentation/operators/first.html) - - - parameter predicate: A function to test each source element for a condition. - - returns: An observable sequence that emits a single element or throws an exception if more (or none) of them are emitted. - */ - public func single(_ predicate: @escaping (Element) throws -> Bool) - -> Observable { - SingleAsync(source: self.asObservable(), predicate: predicate) - } -} - -private final class SingleAsyncSink : Sink, ObserverType { - typealias Element = Observer.Element - typealias Parent = SingleAsync - - private let parent: Parent - private var seenValue: Bool = false - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - switch event { - case .next(let value): - do { - let forward = try self.parent.predicate?(value) ?? true - if !forward { - return - } - } - catch let error { - self.forwardOn(.error(error as Swift.Error)) - self.dispose() - return - } - - if self.seenValue { - self.forwardOn(.error(RxError.moreThanOneElement)) - self.dispose() - return - } - - self.seenValue = true - self.forwardOn(.next(value)) - case .error: - self.forwardOn(event) - self.dispose() - case .completed: - if self.seenValue { - self.forwardOn(.completed) - } else { - self.forwardOn(.error(RxError.noElements)) - } - self.dispose() - } - } -} - -final class SingleAsync: Producer { - typealias Predicate = (Element) throws -> Bool - - private let source: Observable - fileprivate let predicate: Predicate? - - init(source: Observable, predicate: Predicate? = nil) { - self.source = source - self.predicate = predicate - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = SingleAsyncSink(parent: self, observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Sink.swift b/Pods/RxSwift/RxSwift/Observables/Sink.swift deleted file mode 100644 index ed4fec0..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Sink.swift +++ /dev/null @@ -1,75 +0,0 @@ -// -// Sink.swift -// RxSwift -// -// Created by Krunoslav Zaher on 2/19/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -class Sink: Disposable { - fileprivate let observer: Observer - fileprivate let cancel: Cancelable - private let disposed = AtomicInt(0) - - #if DEBUG - private let synchronizationTracker = SynchronizationTracker() - #endif - - init(observer: Observer, cancel: Cancelable) { -#if TRACE_RESOURCES - _ = Resources.incrementTotal() -#endif - self.observer = observer - self.cancel = cancel - } - - final func forwardOn(_ event: Event) { - #if DEBUG - self.synchronizationTracker.register(synchronizationErrorMessage: .default) - defer { self.synchronizationTracker.unregister() } - #endif - if isFlagSet(self.disposed, 1) { - return - } - self.observer.on(event) - } - - final func forwarder() -> SinkForward { - SinkForward(forward: self) - } - - final var isDisposed: Bool { - isFlagSet(self.disposed, 1) - } - - func dispose() { - fetchOr(self.disposed, 1) - self.cancel.dispose() - } - - deinit { -#if TRACE_RESOURCES - _ = Resources.decrementTotal() -#endif - } -} - -final class SinkForward: ObserverType { - typealias Element = Observer.Element - - private let forward: Sink - - init(forward: Sink) { - self.forward = forward - } - - final func on(_ event: Event) { - switch event { - case .next: - self.forward.observer.on(event) - case .error, .completed: - self.forward.observer.on(event) - self.forward.cancel.dispose() - } - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Skip.swift b/Pods/RxSwift/RxSwift/Observables/Skip.swift deleted file mode 100644 index 5856f37..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Skip.swift +++ /dev/null @@ -1,158 +0,0 @@ -// -// Skip.swift -// RxSwift -// -// Created by Krunoslav Zaher on 6/25/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - - /** - Bypasses a specified number of elements in an observable sequence and then returns the remaining elements. - - - seealso: [skip operator on reactivex.io](http://reactivex.io/documentation/operators/skip.html) - - - parameter count: The number of elements to skip before returning the remaining elements. - - returns: An observable sequence that contains the elements that occur after the specified index in the input sequence. - */ - public func skip(_ count: Int) - -> Observable { - SkipCount(source: self.asObservable(), count: count) - } -} - -extension ObservableType { - - /** - Skips elements for the specified duration from the start of the observable source sequence, using the specified scheduler to run timers. - - - seealso: [skip operator on reactivex.io](http://reactivex.io/documentation/operators/skip.html) - - - parameter duration: Duration for skipping elements from the start of the sequence. - - parameter scheduler: Scheduler to run the timer on. - - returns: An observable sequence with the elements skipped during the specified duration from the start of the source sequence. - */ - public func skip(_ duration: RxTimeInterval, scheduler: SchedulerType) - -> Observable { - SkipTime(source: self.asObservable(), duration: duration, scheduler: scheduler) - } -} - -// count version - -final private class SkipCountSink: Sink, ObserverType { - typealias Element = Observer.Element - typealias Parent = SkipCount - - let parent: Parent - - var remaining: Int - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - self.remaining = parent.count - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - switch event { - case .next(let value): - - if self.remaining <= 0 { - self.forwardOn(.next(value)) - } - else { - self.remaining -= 1 - } - case .error: - self.forwardOn(event) - self.dispose() - case .completed: - self.forwardOn(event) - self.dispose() - } - } - -} - -final private class SkipCount: Producer { - let source: Observable - let count: Int - - init(source: Observable, count: Int) { - self.source = source - self.count = count - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = SkipCountSink(parent: self, observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - - return (sink: sink, subscription: subscription) - } -} - -// time version - -final private class SkipTimeSink: Sink, ObserverType where Observer.Element == Element { - typealias Parent = SkipTime - - let parent: Parent - - // state - var open = false - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - switch event { - case .next(let value): - if self.open { - self.forwardOn(.next(value)) - } - case .error: - self.forwardOn(event) - self.dispose() - case .completed: - self.forwardOn(event) - self.dispose() - } - } - - func tick() { - self.open = true - } - - func run() -> Disposable { - let disposeTimer = self.parent.scheduler.scheduleRelative((), dueTime: self.parent.duration) { _ in - self.tick() - return Disposables.create() - } - - let disposeSubscription = self.parent.source.subscribe(self) - - return Disposables.create(disposeTimer, disposeSubscription) - } -} - -final private class SkipTime: Producer { - let source: Observable - let duration: RxTimeInterval - let scheduler: SchedulerType - - init(source: Observable, duration: RxTimeInterval, scheduler: SchedulerType) { - self.source = source - self.scheduler = scheduler - self.duration = duration - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = SkipTimeSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/SkipUntil.swift b/Pods/RxSwift/RxSwift/Observables/SkipUntil.swift deleted file mode 100644 index c8fe193..0000000 --- a/Pods/RxSwift/RxSwift/Observables/SkipUntil.swift +++ /dev/null @@ -1,152 +0,0 @@ -// -// SkipUntil.swift -// RxSwift -// -// Created by Yury Korolev on 10/3/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /** - Returns the elements from the source observable sequence that are emitted after the other observable sequence produces an element. - - - seealso: [skipUntil operator on reactivex.io](http://reactivex.io/documentation/operators/skipuntil.html) - - - parameter other: Observable sequence that starts propagation of elements of the source sequence. - - returns: An observable sequence containing the elements of the source sequence that are emitted after the other sequence emits an item. - */ - public func skip(until other: Source) - -> Observable { - SkipUntil(source: self.asObservable(), other: other.asObservable()) - } - - /** - Returns the elements from the source observable sequence that are emitted after the other observable sequence produces an element. - - - seealso: [skipUntil operator on reactivex.io](http://reactivex.io/documentation/operators/skipuntil.html) - - - parameter other: Observable sequence that starts propagation of elements of the source sequence. - - returns: An observable sequence containing the elements of the source sequence that are emitted after the other sequence emits an item. - */ - @available(*, deprecated, renamed: "skip(until:)") - public func skipUntil(_ other: Source) - -> Observable { - skip(until: other) - } -} - -final private class SkipUntilSinkOther - : ObserverType - , LockOwnerType - , SynchronizedOnType { - typealias Parent = SkipUntilSink - typealias Element = Other - - private let parent: Parent - - var lock: RecursiveLock { - self.parent.lock - } - - let subscription = SingleAssignmentDisposable() - - init(parent: Parent) { - self.parent = parent - #if TRACE_RESOURCES - _ = Resources.incrementTotal() - #endif - } - - func on(_ event: Event) { - self.synchronizedOn(event) - } - - func synchronized_on(_ event: Event) { - switch event { - case .next: - self.parent.forwardElements = true - self.subscription.dispose() - case .error(let e): - self.parent.forwardOn(.error(e)) - self.parent.dispose() - case .completed: - self.subscription.dispose() - } - } - - #if TRACE_RESOURCES - deinit { - _ = Resources.decrementTotal() - } - #endif - -} - - -final private class SkipUntilSink - : Sink - , ObserverType - , LockOwnerType - , SynchronizedOnType { - typealias Element = Observer.Element - typealias Parent = SkipUntil - - let lock = RecursiveLock() - private let parent: Parent - fileprivate var forwardElements = false - - private let sourceSubscription = SingleAssignmentDisposable() - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - self.synchronizedOn(event) - } - - func synchronized_on(_ event: Event) { - switch event { - case .next: - if self.forwardElements { - self.forwardOn(event) - } - case .error: - self.forwardOn(event) - self.dispose() - case .completed: - if self.forwardElements { - self.forwardOn(event) - } - self.dispose() - } - } - - func run() -> Disposable { - let sourceSubscription = self.parent.source.subscribe(self) - let otherObserver = SkipUntilSinkOther(parent: self) - let otherSubscription = self.parent.other.subscribe(otherObserver) - self.sourceSubscription.setDisposable(sourceSubscription) - otherObserver.subscription.setDisposable(otherSubscription) - - return Disposables.create(sourceSubscription, otherObserver.subscription) - } -} - -final private class SkipUntil: Producer { - - fileprivate let source: Observable - fileprivate let other: Observable - - init(source: Observable, other: Observable) { - self.source = source - self.other = other - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = SkipUntilSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/SkipWhile.swift b/Pods/RxSwift/RxSwift/Observables/SkipWhile.swift deleted file mode 100644 index a62f88d..0000000 --- a/Pods/RxSwift/RxSwift/Observables/SkipWhile.swift +++ /dev/null @@ -1,87 +0,0 @@ -// -// SkipWhile.swift -// RxSwift -// -// Created by Yury Korolev on 10/9/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /** - Bypasses elements in an observable sequence as long as a specified condition is true and then returns the remaining elements. - - - seealso: [skipWhile operator on reactivex.io](http://reactivex.io/documentation/operators/skipwhile.html) - - - parameter predicate: A function to test each element for a condition. - - returns: An observable sequence that contains the elements from the input sequence starting at the first element in the linear series that does not pass the test specified by predicate. - */ - public func skip(while predicate: @escaping (Element) throws -> Bool) -> Observable { - SkipWhile(source: self.asObservable(), predicate: predicate) - } - - /** - Bypasses elements in an observable sequence as long as a specified condition is true and then returns the remaining elements. - - - seealso: [skipWhile operator on reactivex.io](http://reactivex.io/documentation/operators/skipwhile.html) - - - parameter predicate: A function to test each element for a condition. - - returns: An observable sequence that contains the elements from the input sequence starting at the first element in the linear series that does not pass the test specified by predicate. - */ - @available(*, deprecated, renamed: "skip(while:)") - public func skipWhile(_ predicate: @escaping (Element) throws -> Bool) -> Observable { - SkipWhile(source: self.asObservable(), predicate: predicate) - } -} - -final private class SkipWhileSink: Sink, ObserverType { - typealias Element = Observer.Element - typealias Parent = SkipWhile - - private let parent: Parent - private var running = false - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - switch event { - case .next(let value): - if !self.running { - do { - self.running = try !self.parent.predicate(value) - } catch let e { - self.forwardOn(.error(e)) - self.dispose() - return - } - } - - if self.running { - self.forwardOn(.next(value)) - } - case .error, .completed: - self.forwardOn(event) - self.dispose() - } - } -} - -final private class SkipWhile: Producer { - typealias Predicate = (Element) throws -> Bool - - private let source: Observable - fileprivate let predicate: Predicate - - init(source: Observable, predicate: @escaping Predicate) { - self.source = source - self.predicate = predicate - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = SkipWhileSink(parent: self, observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/StartWith.swift b/Pods/RxSwift/RxSwift/Observables/StartWith.swift deleted file mode 100644 index 13fb31d..0000000 --- a/Pods/RxSwift/RxSwift/Observables/StartWith.swift +++ /dev/null @@ -1,42 +0,0 @@ -// -// StartWith.swift -// RxSwift -// -// Created by Krunoslav Zaher on 4/6/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - - /** - Prepends a sequence of values to an observable sequence. - - - seealso: [startWith operator on reactivex.io](http://reactivex.io/documentation/operators/startwith.html) - - - parameter elements: Elements to prepend to the specified sequence. - - returns: The source sequence prepended with the specified values. - */ - public func startWith(_ elements: Element ...) - -> Observable { - return StartWith(source: self.asObservable(), elements: elements) - } -} - -final private class StartWith: Producer { - let elements: [Element] - let source: Observable - - init(source: Observable, elements: [Element]) { - self.source = source - self.elements = elements - super.init() - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - for e in self.elements { - observer.on(.next(e)) - } - - return (sink: Disposables.create(), subscription: self.source.subscribe(observer)) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/SubscribeOn.swift b/Pods/RxSwift/RxSwift/Observables/SubscribeOn.swift deleted file mode 100644 index e8e41d9..0000000 --- a/Pods/RxSwift/RxSwift/Observables/SubscribeOn.swift +++ /dev/null @@ -1,103 +0,0 @@ -// -// SubscribeOn.swift -// RxSwift -// -// Created by Krunoslav Zaher on 6/14/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /** - Wraps the source sequence in order to run its subscription and unsubscription logic on the specified - scheduler. - - This operation is not commonly used. - - This only performs the side-effects of subscription and unsubscription on the specified scheduler. - - In order to invoke observer callbacks on a `scheduler`, use `observeOn`. - - - seealso: [subscribeOn operator on reactivex.io](http://reactivex.io/documentation/operators/subscribeon.html) - - - parameter scheduler: Scheduler to perform subscription and unsubscription actions on. - - returns: The source sequence whose subscriptions and unsubscriptions happen on the specified scheduler. - */ - public func subscribe(on scheduler: ImmediateSchedulerType) - -> Observable { - SubscribeOn(source: self, scheduler: scheduler) - } - - /** - Wraps the source sequence in order to run its subscription and unsubscription logic on the specified - scheduler. - - This operation is not commonly used. - - This only performs the side-effects of subscription and unsubscription on the specified scheduler. - - In order to invoke observer callbacks on a `scheduler`, use `observeOn`. - - - seealso: [subscribeOn operator on reactivex.io](http://reactivex.io/documentation/operators/subscribeon.html) - - - parameter scheduler: Scheduler to perform subscription and unsubscription actions on. - - returns: The source sequence whose subscriptions and unsubscriptions happen on the specified scheduler. - */ - @available(*, deprecated, renamed: "subscribe(on:)") - public func subscribeOn(_ scheduler: ImmediateSchedulerType) - -> Observable { - subscribe(on: scheduler) - } -} - -final private class SubscribeOnSink: Sink, ObserverType where Ob.Element == Observer.Element { - typealias Element = Observer.Element - typealias Parent = SubscribeOn - - let parent: Parent - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - self.forwardOn(event) - - if event.isStopEvent { - self.dispose() - } - } - - func run() -> Disposable { - let disposeEverything = SerialDisposable() - let cancelSchedule = SingleAssignmentDisposable() - - disposeEverything.disposable = cancelSchedule - - let disposeSchedule = self.parent.scheduler.schedule(()) { _ -> Disposable in - let subscription = self.parent.source.subscribe(self) - disposeEverything.disposable = ScheduledDisposable(scheduler: self.parent.scheduler, disposable: subscription) - return Disposables.create() - } - - cancelSchedule.setDisposable(disposeSchedule) - - return disposeEverything - } -} - -final private class SubscribeOn: Producer { - let source: Ob - let scheduler: ImmediateSchedulerType - - init(source: Ob, scheduler: ImmediateSchedulerType) { - self.source = source - self.scheduler = scheduler - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Ob.Element { - let sink = SubscribeOnSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Switch.swift b/Pods/RxSwift/RxSwift/Observables/Switch.swift deleted file mode 100644 index 5aa60b9..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Switch.swift +++ /dev/null @@ -1,251 +0,0 @@ -// -// Switch.swift -// RxSwift -// -// Created by Krunoslav Zaher on 3/12/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /** - Projects each element of an observable sequence into a new sequence of observable sequences and then - transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. - - It is a combination of `map` + `switchLatest` operator - - - seealso: [flatMapLatest operator on reactivex.io](http://reactivex.io/documentation/operators/flatmap.html) - - - parameter selector: A transform function to apply to each element. - - returns: An observable sequence whose elements are the result of invoking the transform function on each element of source producing an - Observable of Observable sequences and that at any point in time produces the elements of the most recent inner observable sequence that has been received. - */ - public func flatMapLatest(_ selector: @escaping (Element) throws -> Source) - -> Observable { - return FlatMapLatest(source: self.asObservable(), selector: selector) - } - - /** - Projects each element of an observable sequence into a new sequence of observable sequences and then - transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. - - It is a combination of `map` + `switchLatest` operator - - - seealso: [flatMapLatest operator on reactivex.io](http://reactivex.io/documentation/operators/flatmap.html) - - - parameter selector: A transform function to apply to each element. - - returns: An observable sequence whose elements are the result of invoking the transform function on each element of source producing an - Observable of Observable sequences and that at any point in time produces the elements of the most recent inner observable sequence that has been received. - */ - public func flatMapLatest(_ selector: @escaping (Element) throws -> Source) - -> Infallible { - return Infallible(flatMapLatest(selector)) - } -} - -extension ObservableType where Element: ObservableConvertibleType { - - /** - Transforms an observable sequence of observable sequences into an observable sequence - producing values only from the most recent observable sequence. - - Each time a new inner observable sequence is received, unsubscribe from the - previous inner observable sequence. - - - seealso: [switch operator on reactivex.io](http://reactivex.io/documentation/operators/switch.html) - - - returns: The observable sequence that at any point in time produces the elements of the most recent inner observable sequence that has been received. - */ - public func switchLatest() -> Observable { - Switch(source: self.asObservable()) - } -} - -private class SwitchSink - : Sink - , ObserverType where Source.Element == Observer.Element { - typealias Element = SourceType - - private let subscriptions: SingleAssignmentDisposable = SingleAssignmentDisposable() - private let innerSubscription: SerialDisposable = SerialDisposable() - - let lock = RecursiveLock() - - // state - fileprivate var stopped = false - fileprivate var latest = 0 - fileprivate var hasLatest = false - - override init(observer: Observer, cancel: Cancelable) { - super.init(observer: observer, cancel: cancel) - } - - func run(_ source: Observable) -> Disposable { - let subscription = source.subscribe(self) - self.subscriptions.setDisposable(subscription) - return Disposables.create(subscriptions, innerSubscription) - } - - func performMap(_ element: SourceType) throws -> Source { - rxAbstractMethod() - } - - @inline(__always) - final private func nextElementArrived(element: Element) -> (Int, Observable)? { - self.lock.lock(); defer { self.lock.unlock() } - - do { - let observable = try self.performMap(element).asObservable() - self.hasLatest = true - self.latest = self.latest &+ 1 - return (self.latest, observable) - } - catch let error { - self.forwardOn(.error(error)) - self.dispose() - } - - return nil - } - - func on(_ event: Event) { - switch event { - case .next(let element): - if let (latest, observable) = self.nextElementArrived(element: element) { - let d = SingleAssignmentDisposable() - self.innerSubscription.disposable = d - - let observer = SwitchSinkIter(parent: self, id: latest, this: d) - let disposable = observable.subscribe(observer) - d.setDisposable(disposable) - } - case .error(let error): - self.lock.lock(); defer { self.lock.unlock() } - self.forwardOn(.error(error)) - self.dispose() - case .completed: - self.lock.lock(); defer { self.lock.unlock() } - self.stopped = true - - self.subscriptions.dispose() - - if !self.hasLatest { - self.forwardOn(.completed) - self.dispose() - } - } - } -} - -final private class SwitchSinkIter - : ObserverType - , LockOwnerType - , SynchronizedOnType where Source.Element == Observer.Element { - typealias Element = Source.Element - typealias Parent = SwitchSink - - private let parent: Parent - private let id: Int - private let this: Disposable - - var lock: RecursiveLock { - self.parent.lock - } - - init(parent: Parent, id: Int, this: Disposable) { - self.parent = parent - self.id = id - self.this = this - } - - func on(_ event: Event) { - self.synchronizedOn(event) - } - - func synchronized_on(_ event: Event) { - switch event { - case .next: break - case .error, .completed: - self.this.dispose() - } - - if self.parent.latest != self.id { - return - } - - switch event { - case .next: - self.parent.forwardOn(event) - case .error: - self.parent.forwardOn(event) - self.parent.dispose() - case .completed: - self.parent.hasLatest = false - if self.parent.stopped { - self.parent.forwardOn(event) - self.parent.dispose() - } - } - } -} - -// MARK: Specializations - -final private class SwitchIdentitySink: SwitchSink - where Observer.Element == Source.Element { - override init(observer: Observer, cancel: Cancelable) { - super.init(observer: observer, cancel: cancel) - } - - override func performMap(_ element: Source) throws -> Source { - element - } -} - -final private class MapSwitchSink: SwitchSink where Observer.Element == Source.Element { - typealias Selector = (SourceType) throws -> Source - - private let selector: Selector - - init(selector: @escaping Selector, observer: Observer, cancel: Cancelable) { - self.selector = selector - super.init(observer: observer, cancel: cancel) - } - - override func performMap(_ element: SourceType) throws -> Source { - try self.selector(element) - } -} - -// MARK: Producers - -final private class Switch: Producer { - private let source: Observable - - init(source: Observable) { - self.source = source - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Source.Element { - let sink = SwitchIdentitySink(observer: observer, cancel: cancel) - let subscription = sink.run(self.source) - return (sink: sink, subscription: subscription) - } -} - -final private class FlatMapLatest: Producer { - typealias Selector = (SourceType) throws -> Source - - private let source: Observable - private let selector: Selector - - init(source: Observable, selector: @escaping Selector) { - self.source = source - self.selector = selector - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Source.Element { - let sink = MapSwitchSink(selector: self.selector, observer: observer, cancel: cancel) - let subscription = sink.run(self.source) - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/SwitchIfEmpty.swift b/Pods/RxSwift/RxSwift/Observables/SwitchIfEmpty.swift deleted file mode 100644 index 037bf69..0000000 --- a/Pods/RxSwift/RxSwift/Observables/SwitchIfEmpty.swift +++ /dev/null @@ -1,104 +0,0 @@ -// -// SwitchIfEmpty.swift -// RxSwift -// -// Created by sergdort on 23/12/2016. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /** - Returns the elements of the specified sequence or `switchTo` sequence if the sequence is empty. - - - seealso: [DefaultIfEmpty operator on reactivex.io](http://reactivex.io/documentation/operators/defaultifempty.html) - - - parameter other: Observable sequence being returned when source sequence is empty. - - returns: Observable sequence that contains elements from switchTo sequence if source is empty, otherwise returns source sequence elements. - */ - public func ifEmpty(switchTo other: Observable) -> Observable { - SwitchIfEmpty(source: self.asObservable(), ifEmpty: other) - } -} - -final private class SwitchIfEmpty: Producer { - - private let source: Observable - private let ifEmpty: Observable - - init(source: Observable, ifEmpty: Observable) { - self.source = source - self.ifEmpty = ifEmpty - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = SwitchIfEmptySink(ifEmpty: self.ifEmpty, - observer: observer, - cancel: cancel) - let subscription = sink.run(self.source.asObservable()) - - return (sink: sink, subscription: subscription) - } -} - -final private class SwitchIfEmptySink: Sink - , ObserverType { - typealias Element = Observer.Element - - private let ifEmpty: Observable - private var isEmpty = true - private let ifEmptySubscription = SingleAssignmentDisposable() - - init(ifEmpty: Observable, observer: Observer, cancel: Cancelable) { - self.ifEmpty = ifEmpty - super.init(observer: observer, cancel: cancel) - } - - func run(_ source: Observable) -> Disposable { - let subscription = source.subscribe(self) - return Disposables.create(subscription, ifEmptySubscription) - } - - func on(_ event: Event) { - switch event { - case .next: - self.isEmpty = false - self.forwardOn(event) - case .error: - self.forwardOn(event) - self.dispose() - case .completed: - guard self.isEmpty else { - self.forwardOn(.completed) - self.dispose() - return - } - let ifEmptySink = SwitchIfEmptySinkIter(parent: self) - self.ifEmptySubscription.setDisposable(self.ifEmpty.subscribe(ifEmptySink)) - } - } -} - -final private class SwitchIfEmptySinkIter - : ObserverType { - typealias Element = Observer.Element - typealias Parent = SwitchIfEmptySink - - private let parent: Parent - - init(parent: Parent) { - self.parent = parent - } - - func on(_ event: Event) { - switch event { - case .next: - self.parent.forwardOn(event) - case .error: - self.parent.forwardOn(event) - self.parent.dispose() - case .completed: - self.parent.forwardOn(event) - self.parent.dispose() - } - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Take.swift b/Pods/RxSwift/RxSwift/Observables/Take.swift deleted file mode 100644 index e574688..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Take.swift +++ /dev/null @@ -1,193 +0,0 @@ -// -// Take.swift -// RxSwift -// -// Created by Krunoslav Zaher on 6/12/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - - /** - Returns a specified number of contiguous elements from the start of an observable sequence. - - - seealso: [take operator on reactivex.io](http://reactivex.io/documentation/operators/take.html) - - - parameter count: The number of elements to return. - - returns: An observable sequence that contains the specified number of elements from the start of the input sequence. - */ - public func take(_ count: Int) - -> Observable { - if count == 0 { - return Observable.empty() - } - else { - return TakeCount(source: self.asObservable(), count: count) - } - } -} - -extension ObservableType { - /** - Takes elements for the specified duration from the start of the observable source sequence, using the specified scheduler to run timers. - - - seealso: [take operator on reactivex.io](http://reactivex.io/documentation/operators/take.html) - - - parameter duration: Duration for taking elements from the start of the sequence. - - parameter scheduler: Scheduler to run the timer on. - - returns: An observable sequence with the elements taken during the specified duration from the start of the source sequence. - */ - public func take(for duration: RxTimeInterval, scheduler: SchedulerType) - -> Observable { - TakeTime(source: self.asObservable(), duration: duration, scheduler: scheduler) - } - - /** - Takes elements for the specified duration from the start of the observable source sequence, using the specified scheduler to run timers. - - - seealso: [take operator on reactivex.io](http://reactivex.io/documentation/operators/take.html) - - - parameter duration: Duration for taking elements from the start of the sequence. - - parameter scheduler: Scheduler to run the timer on. - - returns: An observable sequence with the elements taken during the specified duration from the start of the source sequence. - */ - @available(*, deprecated, renamed: "take(for:scheduler:)") - public func take(_ duration: RxTimeInterval, scheduler: SchedulerType) - -> Observable { - take(for: duration, scheduler: scheduler) - } -} - -// count version - -final private class TakeCountSink: Sink, ObserverType { - typealias Element = Observer.Element - typealias Parent = TakeCount - - private let parent: Parent - - private var remaining: Int - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - self.remaining = parent.count - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - switch event { - case .next(let value): - - if self.remaining > 0 { - self.remaining -= 1 - - self.forwardOn(.next(value)) - - if self.remaining == 0 { - self.forwardOn(.completed) - self.dispose() - } - } - case .error: - self.forwardOn(event) - self.dispose() - case .completed: - self.forwardOn(event) - self.dispose() - } - } - -} - -final private class TakeCount: Producer { - private let source: Observable - fileprivate let count: Int - - init(source: Observable, count: Int) { - if count < 0 { - rxFatalError("count can't be negative") - } - self.source = source - self.count = count - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = TakeCountSink(parent: self, observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - return (sink: sink, subscription: subscription) - } -} - -// time version - -final private class TakeTimeSink - : Sink - , LockOwnerType - , ObserverType - , SynchronizedOnType where Observer.Element == Element { - typealias Parent = TakeTime - - private let parent: Parent - - let lock = RecursiveLock() - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - self.synchronizedOn(event) - } - - func synchronized_on(_ event: Event) { - switch event { - case .next(let value): - self.forwardOn(.next(value)) - case .error: - self.forwardOn(event) - self.dispose() - case .completed: - self.forwardOn(event) - self.dispose() - } - } - - func tick() { - self.lock.performLocked { - self.forwardOn(.completed) - self.dispose() - } - } - - func run() -> Disposable { - let disposeTimer = self.parent.scheduler.scheduleRelative((), dueTime: self.parent.duration) { _ in - self.tick() - return Disposables.create() - } - - let disposeSubscription = self.parent.source.subscribe(self) - - return Disposables.create(disposeTimer, disposeSubscription) - } -} - -final private class TakeTime: Producer { - typealias TimeInterval = RxTimeInterval - - fileprivate let source: Observable - fileprivate let duration: TimeInterval - fileprivate let scheduler: SchedulerType - - init(source: Observable, duration: TimeInterval, scheduler: SchedulerType) { - self.source = source - self.scheduler = scheduler - self.duration = duration - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = TakeTimeSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/TakeLast.swift b/Pods/RxSwift/RxSwift/Observables/TakeLast.swift deleted file mode 100644 index 9183387..0000000 --- a/Pods/RxSwift/RxSwift/Observables/TakeLast.swift +++ /dev/null @@ -1,78 +0,0 @@ -// -// TakeLast.swift -// RxSwift -// -// Created by Tomi Koskinen on 25/10/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - - /** - Returns a specified number of contiguous elements from the end of an observable sequence. - - This operator accumulates a buffer with a length enough to store elements count elements. Upon completion of the source sequence, this buffer is drained on the result sequence. This causes the elements to be delayed. - - - seealso: [takeLast operator on reactivex.io](http://reactivex.io/documentation/operators/takelast.html) - - - parameter count: Number of elements to take from the end of the source sequence. - - returns: An observable sequence containing the specified number of elements from the end of the source sequence. - */ - public func takeLast(_ count: Int) - -> Observable { - TakeLast(source: self.asObservable(), count: count) - } -} - -final private class TakeLastSink: Sink, ObserverType { - typealias Element = Observer.Element - typealias Parent = TakeLast - - private let parent: Parent - - private var elements: Queue - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - self.elements = Queue(capacity: parent.count + 1) - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - switch event { - case .next(let value): - self.elements.enqueue(value) - if self.elements.count > self.parent.count { - _ = self.elements.dequeue() - } - case .error: - self.forwardOn(event) - self.dispose() - case .completed: - for e in self.elements { - self.forwardOn(.next(e)) - } - self.forwardOn(.completed) - self.dispose() - } - } -} - -final private class TakeLast: Producer { - private let source: Observable - fileprivate let count: Int - - init(source: Observable, count: Int) { - if count < 0 { - rxFatalError("count can't be negative") - } - self.source = source - self.count = count - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = TakeLastSink(parent: self, observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/TakeWithPredicate.swift b/Pods/RxSwift/RxSwift/Observables/TakeWithPredicate.swift deleted file mode 100644 index 6c28d19..0000000 --- a/Pods/RxSwift/RxSwift/Observables/TakeWithPredicate.swift +++ /dev/null @@ -1,285 +0,0 @@ -// -// TakeWithPredicate.swift -// RxSwift -// -// Created by Krunoslav Zaher on 6/7/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /** - Returns the elements from the source observable sequence until the other observable sequence produces an element. - - - seealso: [takeUntil operator on reactivex.io](http://reactivex.io/documentation/operators/takeuntil.html) - - - parameter other: Observable sequence that terminates propagation of elements of the source sequence. - - returns: An observable sequence containing the elements of the source sequence up to the point the other sequence interrupted further propagation. - */ - public func take(until other: Source) - -> Observable { - TakeUntil(source: self.asObservable(), other: other.asObservable()) - } - - /** - Returns elements from an observable sequence until the specified condition is true. - - - seealso: [takeUntil operator on reactivex.io](http://reactivex.io/documentation/operators/takeuntil.html) - - - parameter predicate: A function to test each element for a condition. - - parameter behavior: Whether or not to include the last element matching the predicate. Defaults to `exclusive`. - - - returns: An observable sequence that contains the elements from the input sequence that occur before the element at which the test passes. - */ - public func take(until predicate: @escaping (Element) throws -> Bool, - behavior: TakeBehavior = .exclusive) - -> Observable { - TakeUntilPredicate(source: self.asObservable(), - behavior: behavior, - predicate: predicate) - } - - /** - Returns elements from an observable sequence as long as a specified condition is true. - - - seealso: [takeWhile operator on reactivex.io](http://reactivex.io/documentation/operators/takewhile.html) - - - parameter predicate: A function to test each element for a condition. - - returns: An observable sequence that contains the elements from the input sequence that occur before the element at which the test no longer passes. - */ - public func take(while predicate: @escaping (Element) throws -> Bool, - behavior: TakeBehavior = .exclusive) - -> Observable { - take(until: { try !predicate($0) }, behavior: behavior) - } - - /** - Returns the elements from the source observable sequence until the other observable sequence produces an element. - - - seealso: [takeUntil operator on reactivex.io](http://reactivex.io/documentation/operators/takeuntil.html) - - - parameter other: Observable sequence that terminates propagation of elements of the source sequence. - - returns: An observable sequence containing the elements of the source sequence up to the point the other sequence interrupted further propagation. - */ - @available(*, deprecated, renamed: "take(until:)") - public func takeUntil(_ other: Source) - -> Observable { - take(until: other) - } - - /** - Returns elements from an observable sequence until the specified condition is true. - - - seealso: [takeUntil operator on reactivex.io](http://reactivex.io/documentation/operators/takeuntil.html) - - - parameter behavior: Whether or not to include the last element matching the predicate. - - parameter predicate: A function to test each element for a condition. - - returns: An observable sequence that contains the elements from the input sequence that occur before the element at which the test passes. - */ - @available(*, deprecated, renamed: "take(until:behavior:)") - public func takeUntil(_ behavior: TakeBehavior, - predicate: @escaping (Element) throws -> Bool) - -> Observable { - take(until: predicate, behavior: behavior) - } - - /** - Returns elements from an observable sequence as long as a specified condition is true. - - - seealso: [takeWhile operator on reactivex.io](http://reactivex.io/documentation/operators/takewhile.html) - - - parameter predicate: A function to test each element for a condition. - - returns: An observable sequence that contains the elements from the input sequence that occur before the element at which the test no longer passes. - */ - @available(*, deprecated, renamed: "take(while:)") - public func takeWhile(_ predicate: @escaping (Element) throws -> Bool) - -> Observable { - take(until: { try !predicate($0) }, behavior: .exclusive) - } -} - -/// Behaviors for the take operator family. -public enum TakeBehavior { - /// Include the last element matching the predicate. - case inclusive - - /// Exclude the last element matching the predicate. - case exclusive -} - -// MARK: - TakeUntil Observable -final private class TakeUntilSinkOther - : ObserverType - , LockOwnerType - , SynchronizedOnType { - typealias Parent = TakeUntilSink - typealias Element = Other - - private let parent: Parent - - var lock: RecursiveLock { - self.parent.lock - } - - fileprivate let subscription = SingleAssignmentDisposable() - - init(parent: Parent) { - self.parent = parent -#if TRACE_RESOURCES - _ = Resources.incrementTotal() -#endif - } - - func on(_ event: Event) { - self.synchronizedOn(event) - } - - func synchronized_on(_ event: Event) { - switch event { - case .next: - self.parent.forwardOn(.completed) - self.parent.dispose() - case .error(let e): - self.parent.forwardOn(.error(e)) - self.parent.dispose() - case .completed: - self.subscription.dispose() - } - } - -#if TRACE_RESOURCES - deinit { - _ = Resources.decrementTotal() - } -#endif -} - -final private class TakeUntilSink - : Sink - , LockOwnerType - , ObserverType - , SynchronizedOnType { - typealias Element = Observer.Element - typealias Parent = TakeUntil - - private let parent: Parent - - let lock = RecursiveLock() - - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - self.synchronizedOn(event) - } - - func synchronized_on(_ event: Event) { - switch event { - case .next: - self.forwardOn(event) - case .error: - self.forwardOn(event) - self.dispose() - case .completed: - self.forwardOn(event) - self.dispose() - } - } - - func run() -> Disposable { - let otherObserver = TakeUntilSinkOther(parent: self) - let otherSubscription = self.parent.other.subscribe(otherObserver) - otherObserver.subscription.setDisposable(otherSubscription) - let sourceSubscription = self.parent.source.subscribe(self) - - return Disposables.create(sourceSubscription, otherObserver.subscription) - } -} - -final private class TakeUntil: Producer { - - fileprivate let source: Observable - fileprivate let other: Observable - - init(source: Observable, other: Observable) { - self.source = source - self.other = other - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = TakeUntilSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} - -// MARK: - TakeUntil Predicate -final private class TakeUntilPredicateSink - : Sink, ObserverType { - typealias Element = Observer.Element - typealias Parent = TakeUntilPredicate - - private let parent: Parent - private var running = true - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - switch event { - case .next(let value): - if !self.running { - return - } - - do { - self.running = try !self.parent.predicate(value) - } catch let e { - self.forwardOn(.error(e)) - self.dispose() - return - } - - if self.running { - self.forwardOn(.next(value)) - } else { - if self.parent.behavior == .inclusive { - self.forwardOn(.next(value)) - } - - self.forwardOn(.completed) - self.dispose() - } - case .error, .completed: - self.forwardOn(event) - self.dispose() - } - } - -} - -final private class TakeUntilPredicate: Producer { - typealias Predicate = (Element) throws -> Bool - - private let source: Observable - fileprivate let predicate: Predicate - fileprivate let behavior: TakeBehavior - - init(source: Observable, - behavior: TakeBehavior, - predicate: @escaping Predicate) { - self.source = source - self.behavior = behavior - self.predicate = predicate - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = TakeUntilPredicateSink(parent: self, observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Throttle.swift b/Pods/RxSwift/RxSwift/Observables/Throttle.swift deleted file mode 100644 index 86152a8..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Throttle.swift +++ /dev/null @@ -1,160 +0,0 @@ -// -// Throttle.swift -// RxSwift -// -// Created by Krunoslav Zaher on 3/22/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import Foundation - -extension ObservableType { - - /** - Returns an Observable that emits the first and the latest item emitted by the source Observable during sequential time windows of a specified duration. - - This operator makes sure that no two elements are emitted in less then dueTime. - - - seealso: [debounce operator on reactivex.io](http://reactivex.io/documentation/operators/debounce.html) - - - parameter dueTime: Throttling duration for each element. - - parameter latest: Should latest element received in a dueTime wide time window since last element emission be emitted. - - parameter scheduler: Scheduler to run the throttle timers on. - - returns: The throttled sequence. - */ - public func throttle(_ dueTime: RxTimeInterval, latest: Bool = true, scheduler: SchedulerType) - -> Observable { - Throttle(source: self.asObservable(), dueTime: dueTime, latest: latest, scheduler: scheduler) - } -} - -final private class ThrottleSink - : Sink - , ObserverType - , LockOwnerType - , SynchronizedOnType { - typealias Element = Observer.Element - typealias ParentType = Throttle - - private let parent: ParentType - - let lock = RecursiveLock() - - // state - private var lastUnsentElement: Element? - private var lastSentTime: Date? - private var completed: Bool = false - - let cancellable = SerialDisposable() - - init(parent: ParentType, observer: Observer, cancel: Cancelable) { - self.parent = parent - - super.init(observer: observer, cancel: cancel) - } - - func run() -> Disposable { - let subscription = self.parent.source.subscribe(self) - - return Disposables.create(subscription, cancellable) - } - - func on(_ event: Event) { - self.synchronizedOn(event) - } - - func synchronized_on(_ event: Event) { - switch event { - case .next(let element): - let now = self.parent.scheduler.now - - let reducedScheduledTime: RxTimeInterval - - if let lastSendingTime = self.lastSentTime { - reducedScheduledTime = self.parent.dueTime.reduceWithSpanBetween(earlierDate: lastSendingTime, laterDate: now) - } - else { - reducedScheduledTime = .nanoseconds(0) - } - - if reducedScheduledTime.isNow { - self.sendNow(element: element) - return - } - - if !self.parent.latest { - return - } - - let isThereAlreadyInFlightRequest = self.lastUnsentElement != nil - - self.lastUnsentElement = element - - if isThereAlreadyInFlightRequest { - return - } - - let scheduler = self.parent.scheduler - - let d = SingleAssignmentDisposable() - self.cancellable.disposable = d - - d.setDisposable(scheduler.scheduleRelative(0, dueTime: reducedScheduledTime, action: self.propagate)) - case .error: - self.lastUnsentElement = nil - self.forwardOn(event) - self.dispose() - case .completed: - if self.lastUnsentElement != nil { - self.completed = true - } - else { - self.forwardOn(.completed) - self.dispose() - } - } - } - - private func sendNow(element: Element) { - self.lastUnsentElement = nil - self.forwardOn(.next(element)) - // in case element processing takes a while, this should give some more room - self.lastSentTime = self.parent.scheduler.now - } - - func propagate(_: Int) -> Disposable { - self.lock.performLocked { - if let lastUnsentElement = self.lastUnsentElement { - self.sendNow(element: lastUnsentElement) - } - - if self.completed { - self.forwardOn(.completed) - self.dispose() - } - } - - return Disposables.create() - } -} - -final private class Throttle: Producer { - fileprivate let source: Observable - fileprivate let dueTime: RxTimeInterval - fileprivate let latest: Bool - fileprivate let scheduler: SchedulerType - - init(source: Observable, dueTime: RxTimeInterval, latest: Bool, scheduler: SchedulerType) { - self.source = source - self.dueTime = dueTime - self.latest = latest - self.scheduler = scheduler - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = ThrottleSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } - -} diff --git a/Pods/RxSwift/RxSwift/Observables/Timeout.swift b/Pods/RxSwift/RxSwift/Observables/Timeout.swift deleted file mode 100644 index efcc791..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Timeout.swift +++ /dev/null @@ -1,151 +0,0 @@ -// -// Timeout.swift -// RxSwift -// -// Created by Tomi Koskinen on 13/11/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - - /** - Applies a timeout policy for each element in the observable sequence. If the next element isn't received within the specified timeout duration starting from its predecessor, a TimeoutError is propagated to the observer. - - - seealso: [timeout operator on reactivex.io](http://reactivex.io/documentation/operators/timeout.html) - - - parameter dueTime: Maximum duration between values before a timeout occurs. - - parameter scheduler: Scheduler to run the timeout timer on. - - returns: An observable sequence with a `RxError.timeout` in case of a timeout. - */ - public func timeout(_ dueTime: RxTimeInterval, scheduler: SchedulerType) - -> Observable { - return Timeout(source: self.asObservable(), dueTime: dueTime, other: Observable.error(RxError.timeout), scheduler: scheduler) - } - - /** - Applies a timeout policy for each element in the observable sequence, using the specified scheduler to run timeout timers. If the next element isn't received within the specified timeout duration starting from its predecessor, the other observable sequence is used to produce future messages from that point on. - - - seealso: [timeout operator on reactivex.io](http://reactivex.io/documentation/operators/timeout.html) - - - parameter dueTime: Maximum duration between values before a timeout occurs. - - parameter other: Sequence to return in case of a timeout. - - parameter scheduler: Scheduler to run the timeout timer on. - - returns: The source sequence switching to the other sequence in case of a timeout. - */ - public func timeout(_ dueTime: RxTimeInterval, other: Source, scheduler: SchedulerType) - -> Observable where Element == Source.Element { - return Timeout(source: self.asObservable(), dueTime: dueTime, other: other.asObservable(), scheduler: scheduler) - } -} - -final private class TimeoutSink: Sink, LockOwnerType, ObserverType { - typealias Element = Observer.Element - typealias Parent = Timeout - - private let parent: Parent - - let lock = RecursiveLock() - - private let timerD = SerialDisposable() - private let subscription = SerialDisposable() - - private var id = 0 - private var switched = false - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(observer: observer, cancel: cancel) - } - - func run() -> Disposable { - let original = SingleAssignmentDisposable() - self.subscription.disposable = original - - self.createTimeoutTimer() - - original.setDisposable(self.parent.source.subscribe(self)) - - return Disposables.create(subscription, timerD) - } - - func on(_ event: Event) { - switch event { - case .next: - var onNextWins = false - - self.lock.performLocked { - onNextWins = !self.switched - if onNextWins { - self.id = self.id &+ 1 - } - } - - if onNextWins { - self.forwardOn(event) - self.createTimeoutTimer() - } - case .error, .completed: - var onEventWins = false - - self.lock.performLocked { - onEventWins = !self.switched - if onEventWins { - self.id = self.id &+ 1 - } - } - - if onEventWins { - self.forwardOn(event) - self.dispose() - } - } - } - - private func createTimeoutTimer() { - if self.timerD.isDisposed { - return - } - - let nextTimer = SingleAssignmentDisposable() - self.timerD.disposable = nextTimer - - let disposeSchedule = self.parent.scheduler.scheduleRelative(self.id, dueTime: self.parent.dueTime) { state in - - var timerWins = false - - self.lock.performLocked { - self.switched = (state == self.id) - timerWins = self.switched - } - - if timerWins { - self.subscription.disposable = self.parent.other.subscribe(self.forwarder()) - } - - return Disposables.create() - } - - nextTimer.setDisposable(disposeSchedule) - } -} - - -final private class Timeout: Producer { - fileprivate let source: Observable - fileprivate let dueTime: RxTimeInterval - fileprivate let other: Observable - fileprivate let scheduler: SchedulerType - - init(source: Observable, dueTime: RxTimeInterval, other: Observable, scheduler: SchedulerType) { - self.source = source - self.dueTime = dueTime - self.other = other - self.scheduler = scheduler - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = TimeoutSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Timer.swift b/Pods/RxSwift/RxSwift/Observables/Timer.swift deleted file mode 100644 index 30bbdf6..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Timer.swift +++ /dev/null @@ -1,117 +0,0 @@ -// -// Timer.swift -// RxSwift -// -// Created by Krunoslav Zaher on 6/7/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType where Element: RxAbstractInteger { - /** - Returns an observable sequence that produces a value after each period, using the specified scheduler to run timers and to send out observer messages. - - - seealso: [interval operator on reactivex.io](http://reactivex.io/documentation/operators/interval.html) - - - parameter period: Period for producing the values in the resulting sequence. - - parameter scheduler: Scheduler to run the timer on. - - returns: An observable sequence that produces a value after each period. - */ - public static func interval(_ period: RxTimeInterval, scheduler: SchedulerType) - -> Observable { - return Timer( - dueTime: period, - period: period, - scheduler: scheduler - ) - } -} - -extension ObservableType where Element: RxAbstractInteger { - /** - Returns an observable sequence that periodically produces a value after the specified initial relative due time has elapsed, using the specified scheduler to run timers. - - - seealso: [timer operator on reactivex.io](http://reactivex.io/documentation/operators/timer.html) - - - parameter dueTime: Relative time at which to produce the first value. - - parameter period: Period to produce subsequent values. - - parameter scheduler: Scheduler to run timers on. - - returns: An observable sequence that produces a value after due time has elapsed and then each period. - */ - public static func timer(_ dueTime: RxTimeInterval, period: RxTimeInterval? = nil, scheduler: SchedulerType) - -> Observable { - return Timer( - dueTime: dueTime, - period: period, - scheduler: scheduler - ) - } -} - -import Foundation - -final private class TimerSink : Sink where Observer.Element : RxAbstractInteger { - typealias Parent = Timer - - private let parent: Parent - private let lock = RecursiveLock() - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(observer: observer, cancel: cancel) - } - - func run() -> Disposable { - return self.parent.scheduler.schedulePeriodic(0 as Observer.Element, startAfter: self.parent.dueTime, period: self.parent.period!) { state in - self.lock.performLocked { - self.forwardOn(.next(state)) - return state &+ 1 - } - } - } -} - -final private class TimerOneOffSink: Sink where Observer.Element: RxAbstractInteger { - typealias Parent = Timer - - private let parent: Parent - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(observer: observer, cancel: cancel) - } - - func run() -> Disposable { - return self.parent.scheduler.scheduleRelative(self, dueTime: self.parent.dueTime) { [unowned self] _ -> Disposable in - self.forwardOn(.next(0)) - self.forwardOn(.completed) - self.dispose() - - return Disposables.create() - } - } -} - -final private class Timer: Producer { - fileprivate let scheduler: SchedulerType - fileprivate let dueTime: RxTimeInterval - fileprivate let period: RxTimeInterval? - - init(dueTime: RxTimeInterval, period: RxTimeInterval?, scheduler: SchedulerType) { - self.scheduler = scheduler - self.dueTime = dueTime - self.period = period - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - if self.period != nil { - let sink = TimerSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } - else { - let sink = TimerOneOffSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/ToArray.swift b/Pods/RxSwift/RxSwift/Observables/ToArray.swift deleted file mode 100644 index 76c7370..0000000 --- a/Pods/RxSwift/RxSwift/Observables/ToArray.swift +++ /dev/null @@ -1,64 +0,0 @@ -// -// ToArray.swift -// RxSwift -// -// Created by Junior B. on 20/10/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /** - Converts an Observable into a Single that emits the whole sequence as a single array and then terminates. - - For aggregation behavior see `reduce`. - - - seealso: [toArray operator on reactivex.io](http://reactivex.io/documentation/operators/to.html) - - - returns: A Single sequence containing all the emitted elements as array. - */ - public func toArray() - -> Single<[Element]> { - PrimitiveSequence(raw: ToArray(source: self.asObservable())) - } -} - -final private class ToArraySink: Sink, ObserverType where Observer.Element == [SourceType] { - typealias Parent = ToArray - - let parent: Parent - var list = [SourceType]() - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event) { - switch event { - case .next(let value): - self.list.append(value) - case .error(let e): - self.forwardOn(.error(e)) - self.dispose() - case .completed: - self.forwardOn(.next(self.list)) - self.forwardOn(.completed) - self.dispose() - } - } -} - -final private class ToArray: Producer<[SourceType]> { - let source: Observable - - init(source: Observable) { - self.source = source - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == [SourceType] { - let sink = ToArraySink(parent: self, observer: observer, cancel: cancel) - let subscription = self.source.subscribe(sink) - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Using.swift b/Pods/RxSwift/RxSwift/Observables/Using.swift deleted file mode 100644 index ca48d2f..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Using.swift +++ /dev/null @@ -1,90 +0,0 @@ -// -// Using.swift -// RxSwift -// -// Created by Yury Korolev on 10/15/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /** - Constructs an observable sequence that depends on a resource object, whose lifetime is tied to the resulting observable sequence's lifetime. - - - seealso: [using operator on reactivex.io](http://reactivex.io/documentation/operators/using.html) - - - parameter resourceFactory: Factory function to obtain a resource object. - - parameter observableFactory: Factory function to obtain an observable sequence that depends on the obtained resource. - - returns: An observable sequence whose lifetime controls the lifetime of the dependent resource object. - */ - public static func using(_ resourceFactory: @escaping () throws -> Resource, observableFactory: @escaping (Resource) throws -> Observable) -> Observable { - Using(resourceFactory: resourceFactory, observableFactory: observableFactory) - } -} - -final private class UsingSink: Sink, ObserverType { - typealias SourceType = Observer.Element - typealias Parent = Using - - private let parent: Parent - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(observer: observer, cancel: cancel) - } - - func run() -> Disposable { - var disposable = Disposables.create() - - do { - let resource = try self.parent.resourceFactory() - disposable = resource - let source = try self.parent.observableFactory(resource) - - return Disposables.create( - source.subscribe(self), - disposable - ) - } catch let error { - return Disposables.create( - Observable.error(error).subscribe(self), - disposable - ) - } - } - - func on(_ event: Event) { - switch event { - case let .next(value): - self.forwardOn(.next(value)) - case let .error(error): - self.forwardOn(.error(error)) - self.dispose() - case .completed: - self.forwardOn(.completed) - self.dispose() - } - } -} - -final private class Using: Producer { - - typealias Element = SourceType - - typealias ResourceFactory = () throws -> ResourceType - typealias ObservableFactory = (ResourceType) throws -> Observable - - fileprivate let resourceFactory: ResourceFactory - fileprivate let observableFactory: ObservableFactory - - - init(resourceFactory: @escaping ResourceFactory, observableFactory: @escaping ObservableFactory) { - self.resourceFactory = resourceFactory - self.observableFactory = observableFactory - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element { - let sink = UsingSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Window.swift b/Pods/RxSwift/RxSwift/Observables/Window.swift deleted file mode 100644 index b2a37a5..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Window.swift +++ /dev/null @@ -1,168 +0,0 @@ -// -// Window.swift -// RxSwift -// -// Created by Junior B. on 29/10/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - - /** - Projects each element of an observable sequence into a window that is completed when either it’s full or a given amount of time has elapsed. - - - seealso: [window operator on reactivex.io](http://reactivex.io/documentation/operators/window.html) - - - parameter timeSpan: Maximum time length of a window. - - parameter count: Maximum element count of a window. - - parameter scheduler: Scheduler to run windowing timers on. - - returns: An observable sequence of windows (instances of `Observable`). - */ - public func window(timeSpan: RxTimeInterval, count: Int, scheduler: SchedulerType) - -> Observable> { - return WindowTimeCount(source: self.asObservable(), timeSpan: timeSpan, count: count, scheduler: scheduler) - } -} - -final private class WindowTimeCountSink - : Sink - , ObserverType - , LockOwnerType - , SynchronizedOnType where Observer.Element == Observable { - typealias Parent = WindowTimeCount - - private let parent: Parent - - let lock = RecursiveLock() - - private var subject = PublishSubject() - private var count = 0 - private var windowId = 0 - - private let timerD = SerialDisposable() - private let refCountDisposable: RefCountDisposable - private let groupDisposable = CompositeDisposable() - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - - _ = self.groupDisposable.insert(self.timerD) - - self.refCountDisposable = RefCountDisposable(disposable: self.groupDisposable) - super.init(observer: observer, cancel: cancel) - } - - func run() -> Disposable { - - self.forwardOn(.next(AddRef(source: self.subject, refCount: self.refCountDisposable).asObservable())) - self.createTimer(self.windowId) - - _ = self.groupDisposable.insert(self.parent.source.subscribe(self)) - return self.refCountDisposable - } - - func startNewWindowAndCompleteCurrentOne() { - self.subject.on(.completed) - self.subject = PublishSubject() - - self.forwardOn(.next(AddRef(source: self.subject, refCount: self.refCountDisposable).asObservable())) - } - - func on(_ event: Event) { - self.synchronizedOn(event) - } - - func synchronized_on(_ event: Event) { - var newWindow = false - var newId = 0 - - switch event { - case .next(let element): - self.subject.on(.next(element)) - - do { - _ = try incrementChecked(&self.count) - } catch let e { - self.subject.on(.error(e as Swift.Error)) - self.dispose() - } - - if self.count == self.parent.count { - newWindow = true - self.count = 0 - self.windowId += 1 - newId = self.windowId - self.startNewWindowAndCompleteCurrentOne() - } - - case .error(let error): - self.subject.on(.error(error)) - self.forwardOn(.error(error)) - self.dispose() - case .completed: - self.subject.on(.completed) - self.forwardOn(.completed) - self.dispose() - } - - if newWindow { - self.createTimer(newId) - } - } - - func createTimer(_ windowId: Int) { - if self.timerD.isDisposed { - return - } - - if self.windowId != windowId { - return - } - - let nextTimer = SingleAssignmentDisposable() - - self.timerD.disposable = nextTimer - - let scheduledRelative = self.parent.scheduler.scheduleRelative(windowId, dueTime: self.parent.timeSpan) { previousWindowId in - - var newId = 0 - - self.lock.performLocked { - if previousWindowId != self.windowId { - return - } - - self.count = 0 - self.windowId = self.windowId &+ 1 - newId = self.windowId - self.startNewWindowAndCompleteCurrentOne() - } - - self.createTimer(newId) - - return Disposables.create() - } - - nextTimer.setDisposable(scheduledRelative) - } -} - -final private class WindowTimeCount: Producer> { - fileprivate let timeSpan: RxTimeInterval - fileprivate let count: Int - fileprivate let scheduler: SchedulerType - fileprivate let source: Observable - - init(source: Observable, timeSpan: RxTimeInterval, count: Int, scheduler: SchedulerType) { - self.source = source - self.timeSpan = timeSpan - self.count = count - self.scheduler = scheduler - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Observable { - let sink = WindowTimeCountSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/WithLatestFrom.swift b/Pods/RxSwift/RxSwift/Observables/WithLatestFrom.swift deleted file mode 100644 index d286812..0000000 --- a/Pods/RxSwift/RxSwift/Observables/WithLatestFrom.swift +++ /dev/null @@ -1,151 +0,0 @@ -// -// WithLatestFrom.swift -// RxSwift -// -// Created by Yury Korolev on 10/19/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - - /** - Merges two observable sequences into one observable sequence by combining each element from self with the latest element from the second source, if any. - - - seealso: [combineLatest operator on reactivex.io](http://reactivex.io/documentation/operators/combinelatest.html) - - note: Elements emitted by self before the second source has emitted any values will be omitted. - - - parameter second: Second observable source. - - parameter resultSelector: Function to invoke for each element from the self combined with the latest element from the second source, if any. - - returns: An observable sequence containing the result of combining each element of the self with the latest element from the second source, if any, using the specified result selector function. - */ - public func withLatestFrom(_ second: Source, resultSelector: @escaping (Element, Source.Element) throws -> ResultType) -> Observable { - WithLatestFrom(first: self.asObservable(), second: second.asObservable(), resultSelector: resultSelector) - } - - /** - Merges two observable sequences into one observable sequence by using latest element from the second sequence every time when `self` emits an element. - - - seealso: [combineLatest operator on reactivex.io](http://reactivex.io/documentation/operators/combinelatest.html) - - note: Elements emitted by self before the second source has emitted any values will be omitted. - - - parameter second: Second observable source. - - returns: An observable sequence containing the result of combining each element of the self with the latest element from the second source, if any, using the specified result selector function. - */ - public func withLatestFrom(_ second: Source) -> Observable { - WithLatestFrom(first: self.asObservable(), second: second.asObservable(), resultSelector: { $1 }) - } -} - -final private class WithLatestFromSink - : Sink - , ObserverType - , LockOwnerType - , SynchronizedOnType { - typealias ResultType = Observer.Element - typealias Parent = WithLatestFrom - typealias Element = FirstType - - private let parent: Parent - - fileprivate var lock = RecursiveLock() - fileprivate var latest: SecondType? - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - - super.init(observer: observer, cancel: cancel) - } - - func run() -> Disposable { - let sndSubscription = SingleAssignmentDisposable() - let sndO = WithLatestFromSecond(parent: self, disposable: sndSubscription) - - sndSubscription.setDisposable(self.parent.second.subscribe(sndO)) - let fstSubscription = self.parent.first.subscribe(self) - - return Disposables.create(fstSubscription, sndSubscription) - } - - func on(_ event: Event) { - self.synchronizedOn(event) - } - - func synchronized_on(_ event: Event) { - switch event { - case let .next(value): - guard let latest = self.latest else { return } - do { - let res = try self.parent.resultSelector(value, latest) - - self.forwardOn(.next(res)) - } catch let e { - self.forwardOn(.error(e)) - self.dispose() - } - case .completed: - self.forwardOn(.completed) - self.dispose() - case let .error(error): - self.forwardOn(.error(error)) - self.dispose() - } - } -} - -final private class WithLatestFromSecond - : ObserverType - , LockOwnerType - , SynchronizedOnType { - - typealias ResultType = Observer.Element - typealias Parent = WithLatestFromSink - typealias Element = SecondType - - private let parent: Parent - private let disposable: Disposable - - var lock: RecursiveLock { - self.parent.lock - } - - init(parent: Parent, disposable: Disposable) { - self.parent = parent - self.disposable = disposable - } - - func on(_ event: Event) { - self.synchronizedOn(event) - } - - func synchronized_on(_ event: Event) { - switch event { - case let .next(value): - self.parent.latest = value - case .completed: - self.disposable.dispose() - case let .error(error): - self.parent.forwardOn(.error(error)) - self.parent.dispose() - } - } -} - -final private class WithLatestFrom: Producer { - typealias ResultSelector = (FirstType, SecondType) throws -> ResultType - - fileprivate let first: Observable - fileprivate let second: Observable - fileprivate let resultSelector: ResultSelector - - init(first: Observable, second: Observable, resultSelector: @escaping ResultSelector) { - self.first = first - self.second = second - self.resultSelector = resultSelector - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == ResultType { - let sink = WithLatestFromSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/WithUnretained.swift b/Pods/RxSwift/RxSwift/Observables/WithUnretained.swift deleted file mode 100644 index 076f6de..0000000 --- a/Pods/RxSwift/RxSwift/Observables/WithUnretained.swift +++ /dev/null @@ -1,58 +0,0 @@ -// -// WithUnretained.swift -// RxSwift -// -// Created by Vincent Pradeilles on 01/01/2021. -// Copyright © 2020 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /** - Provides an unretained, safe to use (i.e. not implicitly unwrapped), reference to an object along with the events emitted by the sequence. - - In the case the provided object cannot be retained successfully, the sequence will complete. - - - note: Be careful when using this operator in a sequence that has a buffer or replay, for example `share(replay: 1)`, as the sharing buffer will also include the provided object, which could potentially cause a retain cycle. - - - parameter obj: The object to provide an unretained reference on. - - parameter resultSelector: A function to combine the unretained referenced on `obj` and the value of the observable sequence. - - returns: An observable sequence that contains the result of `resultSelector` being called with an unretained reference on `obj` and the values of the original sequence. - */ - public func withUnretained( - _ obj: Object, - resultSelector: @escaping (Object, Element) -> Out - ) -> Observable { - map { [weak obj] element -> Out in - guard let obj = obj else { throw UnretainedError.failedRetaining } - - return resultSelector(obj, element) - } - .catch{ error -> Observable in - guard let unretainedError = error as? UnretainedError, - unretainedError == .failedRetaining else { - return .error(error) - } - - return .empty() - } - } - - - /** - Provides an unretained, safe to use (i.e. not implicitly unwrapped), reference to an object along with the events emitted by the sequence. - - In the case the provided object cannot be retained successfully, the sequence will complete. - - - note: Be careful when using this operator in a sequence that has a buffer or replay, for example `share(replay: 1)`, as the sharing buffer will also include the provided object, which could potentially cause a retain cycle. - - - parameter obj: The object to provide an unretained reference on. - - returns: An observable sequence of tuples that contains both an unretained reference on `obj` and the values of the original sequence. - */ - public func withUnretained(_ obj: Object) -> Observable<(Object, Element)> { - return withUnretained(obj) { ($0, $1) } - } -} - -private enum UnretainedError: Swift.Error { - case failedRetaining -} diff --git a/Pods/RxSwift/RxSwift/Observables/Zip+Collection.swift b/Pods/RxSwift/RxSwift/Observables/Zip+Collection.swift deleted file mode 100644 index 2d7f887..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Zip+Collection.swift +++ /dev/null @@ -1,168 +0,0 @@ -// -// Zip+Collection.swift -// RxSwift -// -// Created by Krunoslav Zaher on 8/30/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -extension ObservableType { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. - - - seealso: [zip operator on reactivex.io](http://reactivex.io/documentation/operators/zip.html) - - - parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func zip(_ collection: Collection, resultSelector: @escaping ([Collection.Element.Element]) throws -> Element) -> Observable - where Collection.Element: ObservableType { - ZipCollectionType(sources: collection, resultSelector: resultSelector) - } - - /** - Merges the specified observable sequences into one observable sequence whenever all of the observable sequences have produced an element at a corresponding index. - - - seealso: [zip operator on reactivex.io](http://reactivex.io/documentation/operators/zip.html) - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func zip(_ collection: Collection) -> Observable<[Element]> - where Collection.Element: ObservableType, Collection.Element.Element == Element { - ZipCollectionType(sources: collection, resultSelector: { $0 }) - } - -} - -final private class ZipCollectionTypeSink - : Sink where Collection.Element: ObservableConvertibleType { - typealias Result = Observer.Element - typealias Parent = ZipCollectionType - typealias SourceElement = Collection.Element.Element - - private let parent: Parent - - private let lock = RecursiveLock() - - // state - private var numberOfValues = 0 - private var values: [Queue] - private var isDone: [Bool] - private var numberOfDone = 0 - private var subscriptions: [SingleAssignmentDisposable] - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - self.values = [Queue](repeating: Queue(capacity: 4), count: parent.count) - self.isDone = [Bool](repeating: false, count: parent.count) - self.subscriptions = [SingleAssignmentDisposable]() - self.subscriptions.reserveCapacity(parent.count) - - for _ in 0 ..< parent.count { - self.subscriptions.append(SingleAssignmentDisposable()) - } - - super.init(observer: observer, cancel: cancel) - } - - func on(_ event: Event, atIndex: Int) { - self.lock.lock(); defer { self.lock.unlock() } - switch event { - case .next(let element): - self.values[atIndex].enqueue(element) - - if self.values[atIndex].count == 1 { - self.numberOfValues += 1 - } - - if self.numberOfValues < self.parent.count { - if self.numberOfDone == self.parent.count - 1 { - self.forwardOn(.completed) - self.dispose() - } - return - } - - do { - var arguments = [SourceElement]() - arguments.reserveCapacity(self.parent.count) - - // recalculate number of values - self.numberOfValues = 0 - - for i in 0 ..< self.values.count { - arguments.append(self.values[i].dequeue()!) - if !self.values[i].isEmpty { - self.numberOfValues += 1 - } - } - - let result = try self.parent.resultSelector(arguments) - self.forwardOn(.next(result)) - } - catch let error { - self.forwardOn(.error(error)) - self.dispose() - } - - case .error(let error): - self.forwardOn(.error(error)) - self.dispose() - case .completed: - if self.isDone[atIndex] { - return - } - - self.isDone[atIndex] = true - self.numberOfDone += 1 - - if self.numberOfDone == self.parent.count { - self.forwardOn(.completed) - self.dispose() - } - else { - self.subscriptions[atIndex].dispose() - } - } - } - - func run() -> Disposable { - var j = 0 - for i in self.parent.sources { - let index = j - let source = i.asObservable() - - let disposable = source.subscribe(AnyObserver { event in - self.on(event, atIndex: index) - }) - self.subscriptions[j].setDisposable(disposable) - j += 1 - } - - if self.parent.sources.isEmpty { - self.forwardOn(.completed) - } - - return Disposables.create(subscriptions) - } -} - -final private class ZipCollectionType: Producer where Collection.Element: ObservableConvertibleType { - typealias ResultSelector = ([Collection.Element.Element]) throws -> Result - - let sources: Collection - let resultSelector: ResultSelector - let count: Int - - init(sources: Collection, resultSelector: @escaping ResultSelector) { - self.sources = sources - self.resultSelector = resultSelector - self.count = self.sources.count - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Result { - let sink = ZipCollectionTypeSink(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} diff --git a/Pods/RxSwift/RxSwift/Observables/Zip+arity.swift b/Pods/RxSwift/RxSwift/Observables/Zip+arity.swift deleted file mode 100644 index b6d876d..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Zip+arity.swift +++ /dev/null @@ -1,934 +0,0 @@ -// This file is autogenerated. Take a look at `Preprocessor` target in RxSwift project -// -// Zip+arity.swift -// RxSwift -// -// Created by Krunoslav Zaher on 5/23/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - - - -// 2 - -extension ObservableType { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. - - - seealso: [zip operator on reactivex.io](http://reactivex.io/documentation/operators/zip.html) - - - parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func zip - (_ source1: O1, _ source2: O2, resultSelector: @escaping (O1.Element, O2.Element) throws -> Element) - -> Observable { - return Zip2( - source1: source1.asObservable(), source2: source2.asObservable(), - resultSelector: resultSelector - ) - } -} - -extension ObservableType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of tuples whenever all of the observable sequences have produced an element at a corresponding index. - - - seealso: [zip operator on reactivex.io](http://reactivex.io/documentation/operators/zip.html) - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func zip - (_ source1: O1, _ source2: O2) - -> Observable<(O1.Element, O2.Element)> { - return Zip2( - source1: source1.asObservable(), source2: source2.asObservable(), - resultSelector: { ($0, $1) } - ) - } -} - -final class ZipSink2_ : ZipSink { - typealias Result = Observer.Element - typealias Parent = Zip2 - - let parent: Parent - - var values1: Queue = Queue(capacity: 2) - var values2: Queue = Queue(capacity: 2) - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(arity: 2, observer: observer, cancel: cancel) - } - - override func hasElements(_ index: Int) -> Bool { - switch index { - case 0: return !self.values1.isEmpty - case 1: return !self.values2.isEmpty - - default: - rxFatalError("Unhandled case (Function)") - } - } - - func run() -> Disposable { - let subscription1 = SingleAssignmentDisposable() - let subscription2 = SingleAssignmentDisposable() - - let observer1 = ZipObserver(lock: self.lock, parent: self, index: 0, setNextValue: { self.values1.enqueue($0) }, this: subscription1) - let observer2 = ZipObserver(lock: self.lock, parent: self, index: 1, setNextValue: { self.values2.enqueue($0) }, this: subscription2) - - subscription1.setDisposable(self.parent.source1.subscribe(observer1)) - subscription2.setDisposable(self.parent.source2.subscribe(observer2)) - - return Disposables.create([ - subscription1, - subscription2 - ]) - } - - override func getResult() throws -> Result { - try self.parent.resultSelector(self.values1.dequeue()!, self.values2.dequeue()!) - } -} - -final class Zip2 : Producer { - typealias ResultSelector = (E1, E2) throws -> Result - - let source1: Observable - let source2: Observable - - let resultSelector: ResultSelector - - init(source1: Observable, source2: Observable, resultSelector: @escaping ResultSelector) { - self.source1 = source1 - self.source2 = source2 - - self.resultSelector = resultSelector - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Result { - let sink = ZipSink2_(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} - - - -// 3 - -extension ObservableType { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. - - - seealso: [zip operator on reactivex.io](http://reactivex.io/documentation/operators/zip.html) - - - parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func zip - (_ source1: O1, _ source2: O2, _ source3: O3, resultSelector: @escaping (O1.Element, O2.Element, O3.Element) throws -> Element) - -> Observable { - return Zip3( - source1: source1.asObservable(), source2: source2.asObservable(), source3: source3.asObservable(), - resultSelector: resultSelector - ) - } -} - -extension ObservableType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of tuples whenever all of the observable sequences have produced an element at a corresponding index. - - - seealso: [zip operator on reactivex.io](http://reactivex.io/documentation/operators/zip.html) - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func zip - (_ source1: O1, _ source2: O2, _ source3: O3) - -> Observable<(O1.Element, O2.Element, O3.Element)> { - return Zip3( - source1: source1.asObservable(), source2: source2.asObservable(), source3: source3.asObservable(), - resultSelector: { ($0, $1, $2) } - ) - } -} - -final class ZipSink3_ : ZipSink { - typealias Result = Observer.Element - typealias Parent = Zip3 - - let parent: Parent - - var values1: Queue = Queue(capacity: 2) - var values2: Queue = Queue(capacity: 2) - var values3: Queue = Queue(capacity: 2) - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(arity: 3, observer: observer, cancel: cancel) - } - - override func hasElements(_ index: Int) -> Bool { - switch index { - case 0: return !self.values1.isEmpty - case 1: return !self.values2.isEmpty - case 2: return !self.values3.isEmpty - - default: - rxFatalError("Unhandled case (Function)") - } - } - - func run() -> Disposable { - let subscription1 = SingleAssignmentDisposable() - let subscription2 = SingleAssignmentDisposable() - let subscription3 = SingleAssignmentDisposable() - - let observer1 = ZipObserver(lock: self.lock, parent: self, index: 0, setNextValue: { self.values1.enqueue($0) }, this: subscription1) - let observer2 = ZipObserver(lock: self.lock, parent: self, index: 1, setNextValue: { self.values2.enqueue($0) }, this: subscription2) - let observer3 = ZipObserver(lock: self.lock, parent: self, index: 2, setNextValue: { self.values3.enqueue($0) }, this: subscription3) - - subscription1.setDisposable(self.parent.source1.subscribe(observer1)) - subscription2.setDisposable(self.parent.source2.subscribe(observer2)) - subscription3.setDisposable(self.parent.source3.subscribe(observer3)) - - return Disposables.create([ - subscription1, - subscription2, - subscription3 - ]) - } - - override func getResult() throws -> Result { - try self.parent.resultSelector(self.values1.dequeue()!, self.values2.dequeue()!, self.values3.dequeue()!) - } -} - -final class Zip3 : Producer { - typealias ResultSelector = (E1, E2, E3) throws -> Result - - let source1: Observable - let source2: Observable - let source3: Observable - - let resultSelector: ResultSelector - - init(source1: Observable, source2: Observable, source3: Observable, resultSelector: @escaping ResultSelector) { - self.source1 = source1 - self.source2 = source2 - self.source3 = source3 - - self.resultSelector = resultSelector - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Result { - let sink = ZipSink3_(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} - - - -// 4 - -extension ObservableType { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. - - - seealso: [zip operator on reactivex.io](http://reactivex.io/documentation/operators/zip.html) - - - parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func zip - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, resultSelector: @escaping (O1.Element, O2.Element, O3.Element, O4.Element) throws -> Element) - -> Observable { - return Zip4( - source1: source1.asObservable(), source2: source2.asObservable(), source3: source3.asObservable(), source4: source4.asObservable(), - resultSelector: resultSelector - ) - } -} - -extension ObservableType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of tuples whenever all of the observable sequences have produced an element at a corresponding index. - - - seealso: [zip operator on reactivex.io](http://reactivex.io/documentation/operators/zip.html) - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func zip - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4) - -> Observable<(O1.Element, O2.Element, O3.Element, O4.Element)> { - return Zip4( - source1: source1.asObservable(), source2: source2.asObservable(), source3: source3.asObservable(), source4: source4.asObservable(), - resultSelector: { ($0, $1, $2, $3) } - ) - } -} - -final class ZipSink4_ : ZipSink { - typealias Result = Observer.Element - typealias Parent = Zip4 - - let parent: Parent - - var values1: Queue = Queue(capacity: 2) - var values2: Queue = Queue(capacity: 2) - var values3: Queue = Queue(capacity: 2) - var values4: Queue = Queue(capacity: 2) - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(arity: 4, observer: observer, cancel: cancel) - } - - override func hasElements(_ index: Int) -> Bool { - switch index { - case 0: return !self.values1.isEmpty - case 1: return !self.values2.isEmpty - case 2: return !self.values3.isEmpty - case 3: return !self.values4.isEmpty - - default: - rxFatalError("Unhandled case (Function)") - } - } - - func run() -> Disposable { - let subscription1 = SingleAssignmentDisposable() - let subscription2 = SingleAssignmentDisposable() - let subscription3 = SingleAssignmentDisposable() - let subscription4 = SingleAssignmentDisposable() - - let observer1 = ZipObserver(lock: self.lock, parent: self, index: 0, setNextValue: { self.values1.enqueue($0) }, this: subscription1) - let observer2 = ZipObserver(lock: self.lock, parent: self, index: 1, setNextValue: { self.values2.enqueue($0) }, this: subscription2) - let observer3 = ZipObserver(lock: self.lock, parent: self, index: 2, setNextValue: { self.values3.enqueue($0) }, this: subscription3) - let observer4 = ZipObserver(lock: self.lock, parent: self, index: 3, setNextValue: { self.values4.enqueue($0) }, this: subscription4) - - subscription1.setDisposable(self.parent.source1.subscribe(observer1)) - subscription2.setDisposable(self.parent.source2.subscribe(observer2)) - subscription3.setDisposable(self.parent.source3.subscribe(observer3)) - subscription4.setDisposable(self.parent.source4.subscribe(observer4)) - - return Disposables.create([ - subscription1, - subscription2, - subscription3, - subscription4 - ]) - } - - override func getResult() throws -> Result { - try self.parent.resultSelector(self.values1.dequeue()!, self.values2.dequeue()!, self.values3.dequeue()!, self.values4.dequeue()!) - } -} - -final class Zip4 : Producer { - typealias ResultSelector = (E1, E2, E3, E4) throws -> Result - - let source1: Observable - let source2: Observable - let source3: Observable - let source4: Observable - - let resultSelector: ResultSelector - - init(source1: Observable, source2: Observable, source3: Observable, source4: Observable, resultSelector: @escaping ResultSelector) { - self.source1 = source1 - self.source2 = source2 - self.source3 = source3 - self.source4 = source4 - - self.resultSelector = resultSelector - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Result { - let sink = ZipSink4_(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} - - - -// 5 - -extension ObservableType { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. - - - seealso: [zip operator on reactivex.io](http://reactivex.io/documentation/operators/zip.html) - - - parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func zip - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, resultSelector: @escaping (O1.Element, O2.Element, O3.Element, O4.Element, O5.Element) throws -> Element) - -> Observable { - return Zip5( - source1: source1.asObservable(), source2: source2.asObservable(), source3: source3.asObservable(), source4: source4.asObservable(), source5: source5.asObservable(), - resultSelector: resultSelector - ) - } -} - -extension ObservableType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of tuples whenever all of the observable sequences have produced an element at a corresponding index. - - - seealso: [zip operator on reactivex.io](http://reactivex.io/documentation/operators/zip.html) - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func zip - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5) - -> Observable<(O1.Element, O2.Element, O3.Element, O4.Element, O5.Element)> { - return Zip5( - source1: source1.asObservable(), source2: source2.asObservable(), source3: source3.asObservable(), source4: source4.asObservable(), source5: source5.asObservable(), - resultSelector: { ($0, $1, $2, $3, $4) } - ) - } -} - -final class ZipSink5_ : ZipSink { - typealias Result = Observer.Element - typealias Parent = Zip5 - - let parent: Parent - - var values1: Queue = Queue(capacity: 2) - var values2: Queue = Queue(capacity: 2) - var values3: Queue = Queue(capacity: 2) - var values4: Queue = Queue(capacity: 2) - var values5: Queue = Queue(capacity: 2) - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(arity: 5, observer: observer, cancel: cancel) - } - - override func hasElements(_ index: Int) -> Bool { - switch index { - case 0: return !self.values1.isEmpty - case 1: return !self.values2.isEmpty - case 2: return !self.values3.isEmpty - case 3: return !self.values4.isEmpty - case 4: return !self.values5.isEmpty - - default: - rxFatalError("Unhandled case (Function)") - } - } - - func run() -> Disposable { - let subscription1 = SingleAssignmentDisposable() - let subscription2 = SingleAssignmentDisposable() - let subscription3 = SingleAssignmentDisposable() - let subscription4 = SingleAssignmentDisposable() - let subscription5 = SingleAssignmentDisposable() - - let observer1 = ZipObserver(lock: self.lock, parent: self, index: 0, setNextValue: { self.values1.enqueue($0) }, this: subscription1) - let observer2 = ZipObserver(lock: self.lock, parent: self, index: 1, setNextValue: { self.values2.enqueue($0) }, this: subscription2) - let observer3 = ZipObserver(lock: self.lock, parent: self, index: 2, setNextValue: { self.values3.enqueue($0) }, this: subscription3) - let observer4 = ZipObserver(lock: self.lock, parent: self, index: 3, setNextValue: { self.values4.enqueue($0) }, this: subscription4) - let observer5 = ZipObserver(lock: self.lock, parent: self, index: 4, setNextValue: { self.values5.enqueue($0) }, this: subscription5) - - subscription1.setDisposable(self.parent.source1.subscribe(observer1)) - subscription2.setDisposable(self.parent.source2.subscribe(observer2)) - subscription3.setDisposable(self.parent.source3.subscribe(observer3)) - subscription4.setDisposable(self.parent.source4.subscribe(observer4)) - subscription5.setDisposable(self.parent.source5.subscribe(observer5)) - - return Disposables.create([ - subscription1, - subscription2, - subscription3, - subscription4, - subscription5 - ]) - } - - override func getResult() throws -> Result { - try self.parent.resultSelector(self.values1.dequeue()!, self.values2.dequeue()!, self.values3.dequeue()!, self.values4.dequeue()!, self.values5.dequeue()!) - } -} - -final class Zip5 : Producer { - typealias ResultSelector = (E1, E2, E3, E4, E5) throws -> Result - - let source1: Observable - let source2: Observable - let source3: Observable - let source4: Observable - let source5: Observable - - let resultSelector: ResultSelector - - init(source1: Observable, source2: Observable, source3: Observable, source4: Observable, source5: Observable, resultSelector: @escaping ResultSelector) { - self.source1 = source1 - self.source2 = source2 - self.source3 = source3 - self.source4 = source4 - self.source5 = source5 - - self.resultSelector = resultSelector - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Result { - let sink = ZipSink5_(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} - - - -// 6 - -extension ObservableType { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. - - - seealso: [zip operator on reactivex.io](http://reactivex.io/documentation/operators/zip.html) - - - parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func zip - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, resultSelector: @escaping (O1.Element, O2.Element, O3.Element, O4.Element, O5.Element, O6.Element) throws -> Element) - -> Observable { - return Zip6( - source1: source1.asObservable(), source2: source2.asObservable(), source3: source3.asObservable(), source4: source4.asObservable(), source5: source5.asObservable(), source6: source6.asObservable(), - resultSelector: resultSelector - ) - } -} - -extension ObservableType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of tuples whenever all of the observable sequences have produced an element at a corresponding index. - - - seealso: [zip operator on reactivex.io](http://reactivex.io/documentation/operators/zip.html) - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func zip - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6) - -> Observable<(O1.Element, O2.Element, O3.Element, O4.Element, O5.Element, O6.Element)> { - return Zip6( - source1: source1.asObservable(), source2: source2.asObservable(), source3: source3.asObservable(), source4: source4.asObservable(), source5: source5.asObservable(), source6: source6.asObservable(), - resultSelector: { ($0, $1, $2, $3, $4, $5) } - ) - } -} - -final class ZipSink6_ : ZipSink { - typealias Result = Observer.Element - typealias Parent = Zip6 - - let parent: Parent - - var values1: Queue = Queue(capacity: 2) - var values2: Queue = Queue(capacity: 2) - var values3: Queue = Queue(capacity: 2) - var values4: Queue = Queue(capacity: 2) - var values5: Queue = Queue(capacity: 2) - var values6: Queue = Queue(capacity: 2) - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(arity: 6, observer: observer, cancel: cancel) - } - - override func hasElements(_ index: Int) -> Bool { - switch index { - case 0: return !self.values1.isEmpty - case 1: return !self.values2.isEmpty - case 2: return !self.values3.isEmpty - case 3: return !self.values4.isEmpty - case 4: return !self.values5.isEmpty - case 5: return !self.values6.isEmpty - - default: - rxFatalError("Unhandled case (Function)") - } - } - - func run() -> Disposable { - let subscription1 = SingleAssignmentDisposable() - let subscription2 = SingleAssignmentDisposable() - let subscription3 = SingleAssignmentDisposable() - let subscription4 = SingleAssignmentDisposable() - let subscription5 = SingleAssignmentDisposable() - let subscription6 = SingleAssignmentDisposable() - - let observer1 = ZipObserver(lock: self.lock, parent: self, index: 0, setNextValue: { self.values1.enqueue($0) }, this: subscription1) - let observer2 = ZipObserver(lock: self.lock, parent: self, index: 1, setNextValue: { self.values2.enqueue($0) }, this: subscription2) - let observer3 = ZipObserver(lock: self.lock, parent: self, index: 2, setNextValue: { self.values3.enqueue($0) }, this: subscription3) - let observer4 = ZipObserver(lock: self.lock, parent: self, index: 3, setNextValue: { self.values4.enqueue($0) }, this: subscription4) - let observer5 = ZipObserver(lock: self.lock, parent: self, index: 4, setNextValue: { self.values5.enqueue($0) }, this: subscription5) - let observer6 = ZipObserver(lock: self.lock, parent: self, index: 5, setNextValue: { self.values6.enqueue($0) }, this: subscription6) - - subscription1.setDisposable(self.parent.source1.subscribe(observer1)) - subscription2.setDisposable(self.parent.source2.subscribe(observer2)) - subscription3.setDisposable(self.parent.source3.subscribe(observer3)) - subscription4.setDisposable(self.parent.source4.subscribe(observer4)) - subscription5.setDisposable(self.parent.source5.subscribe(observer5)) - subscription6.setDisposable(self.parent.source6.subscribe(observer6)) - - return Disposables.create([ - subscription1, - subscription2, - subscription3, - subscription4, - subscription5, - subscription6 - ]) - } - - override func getResult() throws -> Result { - try self.parent.resultSelector(self.values1.dequeue()!, self.values2.dequeue()!, self.values3.dequeue()!, self.values4.dequeue()!, self.values5.dequeue()!, self.values6.dequeue()!) - } -} - -final class Zip6 : Producer { - typealias ResultSelector = (E1, E2, E3, E4, E5, E6) throws -> Result - - let source1: Observable - let source2: Observable - let source3: Observable - let source4: Observable - let source5: Observable - let source6: Observable - - let resultSelector: ResultSelector - - init(source1: Observable, source2: Observable, source3: Observable, source4: Observable, source5: Observable, source6: Observable, resultSelector: @escaping ResultSelector) { - self.source1 = source1 - self.source2 = source2 - self.source3 = source3 - self.source4 = source4 - self.source5 = source5 - self.source6 = source6 - - self.resultSelector = resultSelector - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Result { - let sink = ZipSink6_(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} - - - -// 7 - -extension ObservableType { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. - - - seealso: [zip operator on reactivex.io](http://reactivex.io/documentation/operators/zip.html) - - - parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func zip - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7, resultSelector: @escaping (O1.Element, O2.Element, O3.Element, O4.Element, O5.Element, O6.Element, O7.Element) throws -> Element) - -> Observable { - return Zip7( - source1: source1.asObservable(), source2: source2.asObservable(), source3: source3.asObservable(), source4: source4.asObservable(), source5: source5.asObservable(), source6: source6.asObservable(), source7: source7.asObservable(), - resultSelector: resultSelector - ) - } -} - -extension ObservableType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of tuples whenever all of the observable sequences have produced an element at a corresponding index. - - - seealso: [zip operator on reactivex.io](http://reactivex.io/documentation/operators/zip.html) - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func zip - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7) - -> Observable<(O1.Element, O2.Element, O3.Element, O4.Element, O5.Element, O6.Element, O7.Element)> { - return Zip7( - source1: source1.asObservable(), source2: source2.asObservable(), source3: source3.asObservable(), source4: source4.asObservable(), source5: source5.asObservable(), source6: source6.asObservable(), source7: source7.asObservable(), - resultSelector: { ($0, $1, $2, $3, $4, $5, $6) } - ) - } -} - -final class ZipSink7_ : ZipSink { - typealias Result = Observer.Element - typealias Parent = Zip7 - - let parent: Parent - - var values1: Queue = Queue(capacity: 2) - var values2: Queue = Queue(capacity: 2) - var values3: Queue = Queue(capacity: 2) - var values4: Queue = Queue(capacity: 2) - var values5: Queue = Queue(capacity: 2) - var values6: Queue = Queue(capacity: 2) - var values7: Queue = Queue(capacity: 2) - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(arity: 7, observer: observer, cancel: cancel) - } - - override func hasElements(_ index: Int) -> Bool { - switch index { - case 0: return !self.values1.isEmpty - case 1: return !self.values2.isEmpty - case 2: return !self.values3.isEmpty - case 3: return !self.values4.isEmpty - case 4: return !self.values5.isEmpty - case 5: return !self.values6.isEmpty - case 6: return !self.values7.isEmpty - - default: - rxFatalError("Unhandled case (Function)") - } - } - - func run() -> Disposable { - let subscription1 = SingleAssignmentDisposable() - let subscription2 = SingleAssignmentDisposable() - let subscription3 = SingleAssignmentDisposable() - let subscription4 = SingleAssignmentDisposable() - let subscription5 = SingleAssignmentDisposable() - let subscription6 = SingleAssignmentDisposable() - let subscription7 = SingleAssignmentDisposable() - - let observer1 = ZipObserver(lock: self.lock, parent: self, index: 0, setNextValue: { self.values1.enqueue($0) }, this: subscription1) - let observer2 = ZipObserver(lock: self.lock, parent: self, index: 1, setNextValue: { self.values2.enqueue($0) }, this: subscription2) - let observer3 = ZipObserver(lock: self.lock, parent: self, index: 2, setNextValue: { self.values3.enqueue($0) }, this: subscription3) - let observer4 = ZipObserver(lock: self.lock, parent: self, index: 3, setNextValue: { self.values4.enqueue($0) }, this: subscription4) - let observer5 = ZipObserver(lock: self.lock, parent: self, index: 4, setNextValue: { self.values5.enqueue($0) }, this: subscription5) - let observer6 = ZipObserver(lock: self.lock, parent: self, index: 5, setNextValue: { self.values6.enqueue($0) }, this: subscription6) - let observer7 = ZipObserver(lock: self.lock, parent: self, index: 6, setNextValue: { self.values7.enqueue($0) }, this: subscription7) - - subscription1.setDisposable(self.parent.source1.subscribe(observer1)) - subscription2.setDisposable(self.parent.source2.subscribe(observer2)) - subscription3.setDisposable(self.parent.source3.subscribe(observer3)) - subscription4.setDisposable(self.parent.source4.subscribe(observer4)) - subscription5.setDisposable(self.parent.source5.subscribe(observer5)) - subscription6.setDisposable(self.parent.source6.subscribe(observer6)) - subscription7.setDisposable(self.parent.source7.subscribe(observer7)) - - return Disposables.create([ - subscription1, - subscription2, - subscription3, - subscription4, - subscription5, - subscription6, - subscription7 - ]) - } - - override func getResult() throws -> Result { - try self.parent.resultSelector(self.values1.dequeue()!, self.values2.dequeue()!, self.values3.dequeue()!, self.values4.dequeue()!, self.values5.dequeue()!, self.values6.dequeue()!, self.values7.dequeue()!) - } -} - -final class Zip7 : Producer { - typealias ResultSelector = (E1, E2, E3, E4, E5, E6, E7) throws -> Result - - let source1: Observable - let source2: Observable - let source3: Observable - let source4: Observable - let source5: Observable - let source6: Observable - let source7: Observable - - let resultSelector: ResultSelector - - init(source1: Observable, source2: Observable, source3: Observable, source4: Observable, source5: Observable, source6: Observable, source7: Observable, resultSelector: @escaping ResultSelector) { - self.source1 = source1 - self.source2 = source2 - self.source3 = source3 - self.source4 = source4 - self.source5 = source5 - self.source6 = source6 - self.source7 = source7 - - self.resultSelector = resultSelector - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Result { - let sink = ZipSink7_(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} - - - -// 8 - -extension ObservableType { - /** - Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. - - - seealso: [zip operator on reactivex.io](http://reactivex.io/documentation/operators/zip.html) - - - parameter resultSelector: Function to invoke for each series of elements at corresponding indexes in the sources. - - returns: An observable sequence containing the result of combining elements of the sources using the specified result selector function. - */ - public static func zip - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7, _ source8: O8, resultSelector: @escaping (O1.Element, O2.Element, O3.Element, O4.Element, O5.Element, O6.Element, O7.Element, O8.Element) throws -> Element) - -> Observable { - return Zip8( - source1: source1.asObservable(), source2: source2.asObservable(), source3: source3.asObservable(), source4: source4.asObservable(), source5: source5.asObservable(), source6: source6.asObservable(), source7: source7.asObservable(), source8: source8.asObservable(), - resultSelector: resultSelector - ) - } -} - -extension ObservableType where Element == Any { - /** - Merges the specified observable sequences into one observable sequence of tuples whenever all of the observable sequences have produced an element at a corresponding index. - - - seealso: [zip operator on reactivex.io](http://reactivex.io/documentation/operators/zip.html) - - - returns: An observable sequence containing the result of combining elements of the sources. - */ - public static func zip - (_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7, _ source8: O8) - -> Observable<(O1.Element, O2.Element, O3.Element, O4.Element, O5.Element, O6.Element, O7.Element, O8.Element)> { - return Zip8( - source1: source1.asObservable(), source2: source2.asObservable(), source3: source3.asObservable(), source4: source4.asObservable(), source5: source5.asObservable(), source6: source6.asObservable(), source7: source7.asObservable(), source8: source8.asObservable(), - resultSelector: { ($0, $1, $2, $3, $4, $5, $6, $7) } - ) - } -} - -final class ZipSink8_ : ZipSink { - typealias Result = Observer.Element - typealias Parent = Zip8 - - let parent: Parent - - var values1: Queue = Queue(capacity: 2) - var values2: Queue = Queue(capacity: 2) - var values3: Queue = Queue(capacity: 2) - var values4: Queue = Queue(capacity: 2) - var values5: Queue = Queue(capacity: 2) - var values6: Queue = Queue(capacity: 2) - var values7: Queue = Queue(capacity: 2) - var values8: Queue = Queue(capacity: 2) - - init(parent: Parent, observer: Observer, cancel: Cancelable) { - self.parent = parent - super.init(arity: 8, observer: observer, cancel: cancel) - } - - override func hasElements(_ index: Int) -> Bool { - switch index { - case 0: return !self.values1.isEmpty - case 1: return !self.values2.isEmpty - case 2: return !self.values3.isEmpty - case 3: return !self.values4.isEmpty - case 4: return !self.values5.isEmpty - case 5: return !self.values6.isEmpty - case 6: return !self.values7.isEmpty - case 7: return !self.values8.isEmpty - - default: - rxFatalError("Unhandled case (Function)") - } - } - - func run() -> Disposable { - let subscription1 = SingleAssignmentDisposable() - let subscription2 = SingleAssignmentDisposable() - let subscription3 = SingleAssignmentDisposable() - let subscription4 = SingleAssignmentDisposable() - let subscription5 = SingleAssignmentDisposable() - let subscription6 = SingleAssignmentDisposable() - let subscription7 = SingleAssignmentDisposable() - let subscription8 = SingleAssignmentDisposable() - - let observer1 = ZipObserver(lock: self.lock, parent: self, index: 0, setNextValue: { self.values1.enqueue($0) }, this: subscription1) - let observer2 = ZipObserver(lock: self.lock, parent: self, index: 1, setNextValue: { self.values2.enqueue($0) }, this: subscription2) - let observer3 = ZipObserver(lock: self.lock, parent: self, index: 2, setNextValue: { self.values3.enqueue($0) }, this: subscription3) - let observer4 = ZipObserver(lock: self.lock, parent: self, index: 3, setNextValue: { self.values4.enqueue($0) }, this: subscription4) - let observer5 = ZipObserver(lock: self.lock, parent: self, index: 4, setNextValue: { self.values5.enqueue($0) }, this: subscription5) - let observer6 = ZipObserver(lock: self.lock, parent: self, index: 5, setNextValue: { self.values6.enqueue($0) }, this: subscription6) - let observer7 = ZipObserver(lock: self.lock, parent: self, index: 6, setNextValue: { self.values7.enqueue($0) }, this: subscription7) - let observer8 = ZipObserver(lock: self.lock, parent: self, index: 7, setNextValue: { self.values8.enqueue($0) }, this: subscription8) - - subscription1.setDisposable(self.parent.source1.subscribe(observer1)) - subscription2.setDisposable(self.parent.source2.subscribe(observer2)) - subscription3.setDisposable(self.parent.source3.subscribe(observer3)) - subscription4.setDisposable(self.parent.source4.subscribe(observer4)) - subscription5.setDisposable(self.parent.source5.subscribe(observer5)) - subscription6.setDisposable(self.parent.source6.subscribe(observer6)) - subscription7.setDisposable(self.parent.source7.subscribe(observer7)) - subscription8.setDisposable(self.parent.source8.subscribe(observer8)) - - return Disposables.create([ - subscription1, - subscription2, - subscription3, - subscription4, - subscription5, - subscription6, - subscription7, - subscription8 - ]) - } - - override func getResult() throws -> Result { - try self.parent.resultSelector(self.values1.dequeue()!, self.values2.dequeue()!, self.values3.dequeue()!, self.values4.dequeue()!, self.values5.dequeue()!, self.values6.dequeue()!, self.values7.dequeue()!, self.values8.dequeue()!) - } -} - -final class Zip8 : Producer { - typealias ResultSelector = (E1, E2, E3, E4, E5, E6, E7, E8) throws -> Result - - let source1: Observable - let source2: Observable - let source3: Observable - let source4: Observable - let source5: Observable - let source6: Observable - let source7: Observable - let source8: Observable - - let resultSelector: ResultSelector - - init(source1: Observable, source2: Observable, source3: Observable, source4: Observable, source5: Observable, source6: Observable, source7: Observable, source8: Observable, resultSelector: @escaping ResultSelector) { - self.source1 = source1 - self.source2 = source2 - self.source3 = source3 - self.source4 = source4 - self.source5 = source5 - self.source6 = source6 - self.source7 = source7 - self.source8 = source8 - - self.resultSelector = resultSelector - } - - override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Result { - let sink = ZipSink8_(parent: self, observer: observer, cancel: cancel) - let subscription = sink.run() - return (sink: sink, subscription: subscription) - } -} - - diff --git a/Pods/RxSwift/RxSwift/Observables/Zip.swift b/Pods/RxSwift/RxSwift/Observables/Zip.swift deleted file mode 100644 index 328a40e..0000000 --- a/Pods/RxSwift/RxSwift/Observables/Zip.swift +++ /dev/null @@ -1,135 +0,0 @@ -// -// Zip.swift -// RxSwift -// -// Created by Krunoslav Zaher on 5/23/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -protocol ZipSinkProtocol: AnyObject { - func next(_ index: Int) - func fail(_ error: Swift.Error) - func done(_ index: Int) -} - -class ZipSink : Sink, ZipSinkProtocol { - typealias Element = Observer.Element - - let arity: Int - - let lock = RecursiveLock() - - // state - private var isDone: [Bool] - - init(arity: Int, observer: Observer, cancel: Cancelable) { - self.isDone = [Bool](repeating: false, count: arity) - self.arity = arity - - super.init(observer: observer, cancel: cancel) - } - - func getResult() throws -> Element { - rxAbstractMethod() - } - - func hasElements(_ index: Int) -> Bool { - rxAbstractMethod() - } - - func next(_ index: Int) { - var hasValueAll = true - - for i in 0 ..< self.arity { - if !self.hasElements(i) { - hasValueAll = false - break - } - } - - if hasValueAll { - do { - let result = try self.getResult() - self.forwardOn(.next(result)) - } - catch let e { - self.forwardOn(.error(e)) - self.dispose() - } - } - } - - func fail(_ error: Swift.Error) { - self.forwardOn(.error(error)) - self.dispose() - } - - func done(_ index: Int) { - self.isDone[index] = true - - var allDone = true - - for done in self.isDone where !done { - allDone = false - break - } - - if allDone { - self.forwardOn(.completed) - self.dispose() - } - } -} - -final class ZipObserver - : ObserverType - , LockOwnerType - , SynchronizedOnType { - typealias ValueSetter = (Element) -> Void - - private var parent: ZipSinkProtocol? - - let lock: RecursiveLock - - // state - private let index: Int - private let this: Disposable - private let setNextValue: ValueSetter - - init(lock: RecursiveLock, parent: ZipSinkProtocol, index: Int, setNextValue: @escaping ValueSetter, this: Disposable) { - self.lock = lock - self.parent = parent - self.index = index - self.this = this - self.setNextValue = setNextValue - } - - func on(_ event: Event) { - self.synchronizedOn(event) - } - - func synchronized_on(_ event: Event) { - if self.parent != nil { - switch event { - case .next: - break - case .error: - self.this.dispose() - case .completed: - self.this.dispose() - } - } - - if let parent = self.parent { - switch event { - case .next(let value): - self.setNextValue(value) - parent.next(self.index) - case .error(let error): - parent.fail(error) - case .completed: - parent.done(self.index) - } - } - } -} diff --git a/Pods/RxSwift/RxSwift/ObserverType.swift b/Pods/RxSwift/RxSwift/ObserverType.swift deleted file mode 100644 index b7a6648..0000000 --- a/Pods/RxSwift/RxSwift/ObserverType.swift +++ /dev/null @@ -1,40 +0,0 @@ -// -// ObserverType.swift -// RxSwift -// -// Created by Krunoslav Zaher on 2/8/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/// Supports push-style iteration over an observable sequence. -public protocol ObserverType { - /// The type of elements in sequence that observer can observe. - associatedtype Element - - /// Notify observer about sequence event. - /// - /// - parameter event: Event that occurred. - func on(_ event: Event) -} - -/// Convenience API extensions to provide alternate next, error, completed events -extension ObserverType { - - /// Convenience method equivalent to `on(.next(element: Element))` - /// - /// - parameter element: Next element to send to observer(s) - public func onNext(_ element: Element) { - self.on(.next(element)) - } - - /// Convenience method equivalent to `on(.completed)` - public func onCompleted() { - self.on(.completed) - } - - /// Convenience method equivalent to `on(.error(Swift.Error))` - /// - parameter error: Swift.Error to send to observer(s) - public func onError(_ error: Swift.Error) { - self.on(.error(error)) - } -} diff --git a/Pods/RxSwift/RxSwift/Observers/AnonymousObserver.swift b/Pods/RxSwift/RxSwift/Observers/AnonymousObserver.swift deleted file mode 100644 index cbb42dc..0000000 --- a/Pods/RxSwift/RxSwift/Observers/AnonymousObserver.swift +++ /dev/null @@ -1,30 +0,0 @@ -// -// AnonymousObserver.swift -// RxSwift -// -// Created by Krunoslav Zaher on 2/8/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -final class AnonymousObserver: ObserverBase { - typealias EventHandler = (Event) -> Void - - private let eventHandler : EventHandler - - init(_ eventHandler: @escaping EventHandler) { -#if TRACE_RESOURCES - _ = Resources.incrementTotal() -#endif - self.eventHandler = eventHandler - } - - override func onCore(_ event: Event) { - self.eventHandler(event) - } - -#if TRACE_RESOURCES - deinit { - _ = Resources.decrementTotal() - } -#endif -} diff --git a/Pods/RxSwift/RxSwift/Observers/ObserverBase.swift b/Pods/RxSwift/RxSwift/Observers/ObserverBase.swift deleted file mode 100644 index 48e0986..0000000 --- a/Pods/RxSwift/RxSwift/Observers/ObserverBase.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// ObserverBase.swift -// RxSwift -// -// Created by Krunoslav Zaher on 2/15/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -class ObserverBase : Disposable, ObserverType { - private let isStopped = AtomicInt(0) - - func on(_ event: Event) { - switch event { - case .next: - if load(self.isStopped) == 0 { - self.onCore(event) - } - case .error, .completed: - if fetchOr(self.isStopped, 1) == 0 { - self.onCore(event) - } - } - } - - func onCore(_ event: Event) { - rxAbstractMethod() - } - - func dispose() { - fetchOr(self.isStopped, 1) - } -} diff --git a/Pods/RxSwift/RxSwift/Observers/TailRecursiveSink.swift b/Pods/RxSwift/RxSwift/Observers/TailRecursiveSink.swift deleted file mode 100644 index fd52700..0000000 --- a/Pods/RxSwift/RxSwift/Observers/TailRecursiveSink.swift +++ /dev/null @@ -1,151 +0,0 @@ -// -// TailRecursiveSink.swift -// RxSwift -// -// Created by Krunoslav Zaher on 3/21/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -enum TailRecursiveSinkCommand { - case moveNext - case dispose -} - -#if DEBUG || TRACE_RESOURCES - public var maxTailRecursiveSinkStackSize = 0 -#endif - -/// This class is usually used with `Generator` version of the operators. -class TailRecursiveSink - : Sink - , InvocableWithValueType where Sequence.Element: ObservableConvertibleType, Sequence.Element.Element == Observer.Element { - typealias Value = TailRecursiveSinkCommand - typealias Element = Observer.Element - typealias SequenceGenerator = (generator: Sequence.Iterator, remaining: IntMax?) - - var generators: [SequenceGenerator] = [] - var disposed = false - var subscription = SerialDisposable() - - // this is thread safe object - var gate = AsyncLock>>() - - override init(observer: Observer, cancel: Cancelable) { - super.init(observer: observer, cancel: cancel) - } - - func run(_ sources: SequenceGenerator) -> Disposable { - self.generators.append(sources) - - self.schedule(.moveNext) - - return self.subscription - } - - func invoke(_ command: TailRecursiveSinkCommand) { - switch command { - case .dispose: - self.disposeCommand() - case .moveNext: - self.moveNextCommand() - } - } - - // simple implementation for now - func schedule(_ command: TailRecursiveSinkCommand) { - self.gate.invoke(InvocableScheduledItem(invocable: self, state: command)) - } - - func done() { - self.forwardOn(.completed) - self.dispose() - } - - func extract(_ observable: Observable) -> SequenceGenerator? { - rxAbstractMethod() - } - - // should be done on gate locked - - private func moveNextCommand() { - var next: Observable? - - repeat { - guard let (g, left) = self.generators.last else { - break - } - - if self.isDisposed { - return - } - - self.generators.removeLast() - - var e = g - - guard let nextCandidate = e.next()?.asObservable() else { - continue - } - - // `left` is a hint of how many elements are left in generator. - // In case this is the last element, then there is no need to push - // that generator on stack. - // - // This is an optimization used to make sure in tail recursive case - // there is no memory leak in case this operator is used to generate non terminating - // sequence. - - if let knownOriginalLeft = left { - // `- 1` because generator.next() has just been called - if knownOriginalLeft - 1 >= 1 { - self.generators.append((e, knownOriginalLeft - 1)) - } - } - else { - self.generators.append((e, nil)) - } - - let nextGenerator = self.extract(nextCandidate) - - if let nextGenerator = nextGenerator { - self.generators.append(nextGenerator) - #if DEBUG || TRACE_RESOURCES - if maxTailRecursiveSinkStackSize < self.generators.count { - maxTailRecursiveSinkStackSize = self.generators.count - } - #endif - } - else { - next = nextCandidate - } - } while next == nil - - guard let existingNext = next else { - self.done() - return - } - - let disposable = SingleAssignmentDisposable() - self.subscription.disposable = disposable - disposable.setDisposable(self.subscribeToNext(existingNext)) - } - - func subscribeToNext(_ source: Observable) -> Disposable { - rxAbstractMethod() - } - - func disposeCommand() { - self.disposed = true - self.generators.removeAll(keepingCapacity: false) - } - - override func dispose() { - super.dispose() - - self.subscription.dispose() - self.gate.dispose() - - self.schedule(.dispose) - } -} - diff --git a/Pods/RxSwift/RxSwift/Reactive.swift b/Pods/RxSwift/RxSwift/Reactive.swift deleted file mode 100644 index 1bf390d..0000000 --- a/Pods/RxSwift/RxSwift/Reactive.swift +++ /dev/null @@ -1,80 +0,0 @@ -// -// Reactive.swift -// RxSwift -// -// Created by Yury Korolev on 5/2/16. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -/** - Use `Reactive` proxy as customization point for constrained protocol extensions. - - General pattern would be: - - // 1. Extend Reactive protocol with constrain on Base - // Read as: Reactive Extension where Base is a SomeType - extension Reactive where Base: SomeType { - // 2. Put any specific reactive extension for SomeType here - } - - With this approach we can have more specialized methods and properties using - `Base` and not just specialized on common base type. - - `Binder`s are also automatically synthesized using `@dynamicMemberLookup` for writable reference properties of the reactive base. - */ - -@dynamicMemberLookup -public struct Reactive { - /// Base object to extend. - public let base: Base - - /// Creates extensions with base object. - /// - /// - parameter base: Base object. - public init(_ base: Base) { - self.base = base - } - - /// Automatically synthesized binder for a key path between the reactive - /// base and one of its properties - public subscript(dynamicMember keyPath: ReferenceWritableKeyPath) -> Binder where Base: AnyObject { - Binder(self.base) { base, value in - base[keyPath: keyPath] = value - } - } -} - -/// A type that has reactive extensions. -public protocol ReactiveCompatible { - /// Extended type - associatedtype ReactiveBase - - /// Reactive extensions. - static var rx: Reactive.Type { get set } - - /// Reactive extensions. - var rx: Reactive { get set } -} - -extension ReactiveCompatible { - /// Reactive extensions. - public static var rx: Reactive.Type { - get { Reactive.self } - // this enables using Reactive to "mutate" base type - // swiftlint:disable:next unused_setter_value - set { } - } - - /// Reactive extensions. - public var rx: Reactive { - get { Reactive(self) } - // this enables using Reactive to "mutate" base object - // swiftlint:disable:next unused_setter_value - set { } - } -} - -import Foundation - -/// Extend NSObject with `rx` proxy. -extension NSObject: ReactiveCompatible { } diff --git a/Pods/RxSwift/RxSwift/Rx.swift b/Pods/RxSwift/RxSwift/Rx.swift deleted file mode 100644 index bcdd279..0000000 --- a/Pods/RxSwift/RxSwift/Rx.swift +++ /dev/null @@ -1,142 +0,0 @@ -// -// Rx.swift -// RxSwift -// -// Created by Krunoslav Zaher on 2/14/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if TRACE_RESOURCES - private let resourceCount = AtomicInt(0) - - /// Resource utilization information - public struct Resources { - /// Counts internal Rx resource allocations (Observables, Observers, Disposables, etc.). This provides a simple way to detect leaks during development. - public static var total: Int32 { - load(resourceCount) - } - - /// Increments `Resources.total` resource count. - /// - /// - returns: New resource count - public static func incrementTotal() -> Int32 { - increment(resourceCount) - } - - /// Decrements `Resources.total` resource count - /// - /// - returns: New resource count - public static func decrementTotal() -> Int32 { - decrement(resourceCount) - } - } -#endif - -/// Swift does not implement abstract methods. This method is used as a runtime check to ensure that methods which intended to be abstract (i.e., they should be implemented in subclasses) are not called directly on the superclass. -func rxAbstractMethod(file: StaticString = #file, line: UInt = #line) -> Swift.Never { - rxFatalError("Abstract method", file: file, line: line) -} - -func rxFatalError(_ lastMessage: @autoclosure () -> String, file: StaticString = #file, line: UInt = #line) -> Swift.Never { - fatalError(lastMessage(), file: file, line: line) -} - -func rxFatalErrorInDebug(_ lastMessage: @autoclosure () -> String, file: StaticString = #file, line: UInt = #line) { - #if DEBUG - fatalError(lastMessage(), file: file, line: line) - #else - print("\(file):\(line): \(lastMessage())") - #endif -} - -func incrementChecked(_ i: inout Int) throws -> Int { - if i == Int.max { - throw RxError.overflow - } - defer { i += 1 } - return i -} - -func decrementChecked(_ i: inout Int) throws -> Int { - if i == Int.min { - throw RxError.overflow - } - defer { i -= 1 } - return i -} - -#if DEBUG - import Foundation - final class SynchronizationTracker { - private let lock = RecursiveLock() - - public enum SynchronizationErrorMessages: String { - case variable = "Two different threads are trying to assign the same `Variable.value` unsynchronized.\n This is undefined behavior because the end result (variable value) is nondeterministic and depends on the \n operating system thread scheduler. This will cause random behavior of your program.\n" - case `default` = "Two different unsynchronized threads are trying to send some event simultaneously.\n This is undefined behavior because the ordering of the effects caused by these events is nondeterministic and depends on the \n operating system thread scheduler. This will result in a random behavior of your program.\n" - } - - private var threads = [UnsafeMutableRawPointer: Int]() - - private func synchronizationError(_ message: String) { - #if FATAL_SYNCHRONIZATION - rxFatalError(message) - #else - print(message) - #endif - } - - func register(synchronizationErrorMessage: SynchronizationErrorMessages) { - self.lock.lock(); defer { self.lock.unlock() } - let pointer = Unmanaged.passUnretained(Thread.current).toOpaque() - let count = (self.threads[pointer] ?? 0) + 1 - - if count > 1 { - self.synchronizationError( - "⚠️ Reentrancy anomaly was detected.\n" + - " > Debugging: To debug this issue you can set a breakpoint in \(#file):\(#line) and observe the call stack.\n" + - " > Problem: This behavior is breaking the observable sequence grammar. `next (error | completed)?`\n" + - " This behavior breaks the grammar because there is overlapping between sequence events.\n" + - " Observable sequence is trying to send an event before sending of previous event has finished.\n" + - " > Interpretation: This could mean that there is some kind of unexpected cyclic dependency in your code,\n" + - " or that the system is not behaving in the expected way.\n" + - " > Remedy: If this is the expected behavior this message can be suppressed by adding `.observe(on:MainScheduler.asyncInstance)`\n" + - " or by enqueuing sequence events in some other way.\n" - ) - } - - self.threads[pointer] = count - - if self.threads.count > 1 { - self.synchronizationError( - "⚠️ Synchronization anomaly was detected.\n" + - " > Debugging: To debug this issue you can set a breakpoint in \(#file):\(#line) and observe the call stack.\n" + - " > Problem: This behavior is breaking the observable sequence grammar. `next (error | completed)?`\n" + - " This behavior breaks the grammar because there is overlapping between sequence events.\n" + - " Observable sequence is trying to send an event before sending of previous event has finished.\n" + - " > Interpretation: " + synchronizationErrorMessage.rawValue + - " > Remedy: If this is the expected behavior this message can be suppressed by adding `.observe(on:MainScheduler.asyncInstance)`\n" + - " or by synchronizing sequence events in some other way.\n" - ) - } - } - - func unregister() { - self.lock.performLocked { - let pointer = Unmanaged.passUnretained(Thread.current).toOpaque() - self.threads[pointer] = (self.threads[pointer] ?? 1) - 1 - if self.threads[pointer] == 0 { - self.threads[pointer] = nil - } - } - } - } - -#endif - -/// RxSwift global hooks -public enum Hooks { - - // Should capture call stack - public static var recordCallStackOnError: Bool = false - -} diff --git a/Pods/RxSwift/RxSwift/RxMutableBox.swift b/Pods/RxSwift/RxSwift/RxMutableBox.swift deleted file mode 100644 index 73476c3..0000000 --- a/Pods/RxSwift/RxSwift/RxMutableBox.swift +++ /dev/null @@ -1,53 +0,0 @@ -// -// RxMutableBox.swift -// RxSwift -// -// Created by Krunoslav Zaher on 5/22/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -#if os(Linux) -/// As Swift 5 was released, A patch to `Thread` for Linux -/// changed `threadDictionary` to a `NSMutableDictionary` instead of -/// a `Dictionary`: https://github.com/apple/swift-corelibs-foundation/pull/1762/files -/// -/// This means that on Linux specifically, `RxMutableBox` must be a `NSObject` -/// or it won't be possible to store it in `Thread.threadDictionary`. -/// -/// For more information, read the discussion at: -/// https://github.com/ReactiveX/RxSwift/issues/1911#issuecomment-479723298 -import Foundation - -/// Creates mutable reference wrapper for any type. -final class RxMutableBox: NSObject { - /// Wrapped value - var value: T - - /// Creates reference wrapper for `value`. - /// - /// - parameter value: Value to wrap. - init (_ value: T) { - self.value = value - } -} -#else -/// Creates mutable reference wrapper for any type. -final class RxMutableBox: CustomDebugStringConvertible { - /// Wrapped value - var value: T - - /// Creates reference wrapper for `value`. - /// - /// - parameter value: Value to wrap. - init (_ value: T) { - self.value = value - } -} - -extension RxMutableBox { - /// - returns: Box description. - var debugDescription: String { - "MutatingBox(\(self.value))" - } -} -#endif diff --git a/Pods/RxSwift/RxSwift/SchedulerType.swift b/Pods/RxSwift/RxSwift/SchedulerType.swift deleted file mode 100644 index 6c8fe4a..0000000 --- a/Pods/RxSwift/RxSwift/SchedulerType.swift +++ /dev/null @@ -1,71 +0,0 @@ -// -// SchedulerType.swift -// RxSwift -// -// Created by Krunoslav Zaher on 2/8/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import Dispatch -import Foundation - -// Type that represents time interval in the context of RxSwift. -public typealias RxTimeInterval = DispatchTimeInterval - -/// Type that represents absolute time in the context of RxSwift. -public typealias RxTime = Date - -/// Represents an object that schedules units of work. -public protocol SchedulerType: ImmediateSchedulerType { - - /// - returns: Current time. - var now : RxTime { - get - } - - /** - Schedules an action to be executed. - - - parameter state: State passed to the action to be executed. - - parameter dueTime: Relative time after which to execute the action. - - parameter action: Action to be executed. - - returns: The disposable object used to cancel the scheduled action (best effort). - */ - func scheduleRelative(_ state: StateType, dueTime: RxTimeInterval, action: @escaping (StateType) -> Disposable) -> Disposable - - /** - Schedules a periodic piece of work. - - - parameter state: State passed to the action to be executed. - - parameter startAfter: Period after which initial work should be run. - - parameter period: Period for running the work periodically. - - parameter action: Action to be executed. - - returns: The disposable object used to cancel the scheduled action (best effort). - */ - func schedulePeriodic(_ state: StateType, startAfter: RxTimeInterval, period: RxTimeInterval, action: @escaping (StateType) -> StateType) -> Disposable -} - -extension SchedulerType { - - /** - Periodic task will be emulated using recursive scheduling. - - - parameter state: Initial state passed to the action upon the first iteration. - - parameter startAfter: Period after which initial work should be run. - - parameter period: Period for running the work periodically. - - returns: The disposable object used to cancel the scheduled recurring action (best effort). - */ - public func schedulePeriodic(_ state: StateType, startAfter: RxTimeInterval, period: RxTimeInterval, action: @escaping (StateType) -> StateType) -> Disposable { - let schedule = SchedulePeriodicRecursive(scheduler: self, startAfter: startAfter, period: period, action: action, state: state) - - return schedule.start() - } - - func scheduleRecursive(_ state: State, dueTime: RxTimeInterval, action: @escaping (State, AnyRecursiveScheduler) -> Void) -> Disposable { - let scheduler = AnyRecursiveScheduler(scheduler: self, action: action) - - scheduler.schedule(state, dueTime: dueTime) - - return Disposables.create(with: scheduler.dispose) - } -} diff --git a/Pods/RxSwift/RxSwift/Schedulers/ConcurrentDispatchQueueScheduler.swift b/Pods/RxSwift/RxSwift/Schedulers/ConcurrentDispatchQueueScheduler.swift deleted file mode 100644 index 02c47c9..0000000 --- a/Pods/RxSwift/RxSwift/Schedulers/ConcurrentDispatchQueueScheduler.swift +++ /dev/null @@ -1,82 +0,0 @@ -// -// ConcurrentDispatchQueueScheduler.swift -// RxSwift -// -// Created by Krunoslav Zaher on 7/5/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import Dispatch -import Foundation - -/// Abstracts the work that needs to be performed on a specific `dispatch_queue_t`. You can also pass a serial dispatch queue, it shouldn't cause any problems. -/// -/// This scheduler is suitable when some work needs to be performed in background. -public class ConcurrentDispatchQueueScheduler: SchedulerType { - public typealias TimeInterval = Foundation.TimeInterval - public typealias Time = Date - - public var now : Date { - Date() - } - - let configuration: DispatchQueueConfiguration - - /// Constructs new `ConcurrentDispatchQueueScheduler` that wraps `queue`. - /// - /// - parameter queue: Target dispatch queue. - /// - parameter leeway: The amount of time, in nanoseconds, that the system will defer the timer. - public init(queue: DispatchQueue, leeway: DispatchTimeInterval = DispatchTimeInterval.nanoseconds(0)) { - self.configuration = DispatchQueueConfiguration(queue: queue, leeway: leeway) - } - - /// Convenience init for scheduler that wraps one of the global concurrent dispatch queues. - /// - /// - parameter qos: Target global dispatch queue, by quality of service class. - /// - parameter leeway: The amount of time, in nanoseconds, that the system will defer the timer. - public convenience init(qos: DispatchQoS, leeway: DispatchTimeInterval = DispatchTimeInterval.nanoseconds(0)) { - self.init(queue: DispatchQueue( - label: "rxswift.queue.\(qos)", - qos: qos, - attributes: [DispatchQueue.Attributes.concurrent], - target: nil), - leeway: leeway - ) - } - - /** - Schedules an action to be executed immediately. - - - parameter state: State passed to the action to be executed. - - parameter action: Action to be executed. - - returns: The disposable object used to cancel the scheduled action (best effort). - */ - public final func schedule(_ state: StateType, action: @escaping (StateType) -> Disposable) -> Disposable { - self.configuration.schedule(state, action: action) - } - - /** - Schedules an action to be executed. - - - parameter state: State passed to the action to be executed. - - parameter dueTime: Relative time after which to execute the action. - - parameter action: Action to be executed. - - returns: The disposable object used to cancel the scheduled action (best effort). - */ - public final func scheduleRelative(_ state: StateType, dueTime: RxTimeInterval, action: @escaping (StateType) -> Disposable) -> Disposable { - self.configuration.scheduleRelative(state, dueTime: dueTime, action: action) - } - - /** - Schedules a periodic piece of work. - - - parameter state: State passed to the action to be executed. - - parameter startAfter: Period after which initial work should be run. - - parameter period: Period for running the work periodically. - - parameter action: Action to be executed. - - returns: The disposable object used to cancel the scheduled action (best effort). - */ - public func schedulePeriodic(_ state: StateType, startAfter: RxTimeInterval, period: RxTimeInterval, action: @escaping (StateType) -> StateType) -> Disposable { - self.configuration.schedulePeriodic(state, startAfter: startAfter, period: period, action: action) - } -} diff --git a/Pods/RxSwift/RxSwift/Schedulers/ConcurrentMainScheduler.swift b/Pods/RxSwift/RxSwift/Schedulers/ConcurrentMainScheduler.swift deleted file mode 100644 index c438d7d..0000000 --- a/Pods/RxSwift/RxSwift/Schedulers/ConcurrentMainScheduler.swift +++ /dev/null @@ -1,87 +0,0 @@ -// -// ConcurrentMainScheduler.swift -// RxSwift -// -// Created by Krunoslav Zaher on 10/17/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import Dispatch -import Foundation - -/** -Abstracts work that needs to be performed on `MainThread`. In case `schedule` methods are called from main thread, it will perform action immediately without scheduling. - -This scheduler is optimized for `subscribeOn` operator. If you want to observe observable sequence elements on main thread using `observeOn` operator, -`MainScheduler` is more suitable for that purpose. -*/ -public final class ConcurrentMainScheduler : SchedulerType { - public typealias TimeInterval = Foundation.TimeInterval - public typealias Time = Date - - private let mainScheduler: MainScheduler - private let mainQueue: DispatchQueue - - /// - returns: Current time. - public var now: Date { - self.mainScheduler.now as Date - } - - private init(mainScheduler: MainScheduler) { - self.mainQueue = DispatchQueue.main - self.mainScheduler = mainScheduler - } - - /// Singleton instance of `ConcurrentMainScheduler` - public static let instance = ConcurrentMainScheduler(mainScheduler: MainScheduler.instance) - - /** - Schedules an action to be executed immediately. - - - parameter state: State passed to the action to be executed. - - parameter action: Action to be executed. - - returns: The disposable object used to cancel the scheduled action (best effort). - */ - public func schedule(_ state: StateType, action: @escaping (StateType) -> Disposable) -> Disposable { - if DispatchQueue.isMain { - return action(state) - } - - let cancel = SingleAssignmentDisposable() - - self.mainQueue.async { - if cancel.isDisposed { - return - } - - cancel.setDisposable(action(state)) - } - - return cancel - } - - /** - Schedules an action to be executed. - - - parameter state: State passed to the action to be executed. - - parameter dueTime: Relative time after which to execute the action. - - parameter action: Action to be executed. - - returns: The disposable object used to cancel the scheduled action (best effort). - */ - public final func scheduleRelative(_ state: StateType, dueTime: RxTimeInterval, action: @escaping (StateType) -> Disposable) -> Disposable { - self.mainScheduler.scheduleRelative(state, dueTime: dueTime, action: action) - } - - /** - Schedules a periodic piece of work. - - - parameter state: State passed to the action to be executed. - - parameter startAfter: Period after which initial work should be run. - - parameter period: Period for running the work periodically. - - parameter action: Action to be executed. - - returns: The disposable object used to cancel the scheduled action (best effort). - */ - public func schedulePeriodic(_ state: StateType, startAfter: RxTimeInterval, period: RxTimeInterval, action: @escaping (StateType) -> StateType) -> Disposable { - self.mainScheduler.schedulePeriodic(state, startAfter: startAfter, period: period, action: action) - } -} diff --git a/Pods/RxSwift/RxSwift/Schedulers/CurrentThreadScheduler.swift b/Pods/RxSwift/RxSwift/Schedulers/CurrentThreadScheduler.swift deleted file mode 100644 index 16a7dd3..0000000 --- a/Pods/RxSwift/RxSwift/Schedulers/CurrentThreadScheduler.swift +++ /dev/null @@ -1,131 +0,0 @@ -// -// CurrentThreadScheduler.swift -// RxSwift -// -// Created by Krunoslav Zaher on 8/30/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import Dispatch -import Foundation - -#if os(Linux) - fileprivate enum CurrentThreadSchedulerQueueKey { - fileprivate static let instance = "RxSwift.CurrentThreadScheduler.Queue" - } -#else - private class CurrentThreadSchedulerQueueKey: NSObject, NSCopying { - static let instance = CurrentThreadSchedulerQueueKey() - private override init() { - super.init() - } - - override var hash: Int { - return 0 - } - - public func copy(with zone: NSZone? = nil) -> Any { - return self - } - } -#endif - -/// Represents an object that schedules units of work on the current thread. -/// -/// This is the default scheduler for operators that generate elements. -/// -/// This scheduler is also sometimes called `trampoline scheduler`. -public class CurrentThreadScheduler : ImmediateSchedulerType { - typealias ScheduleQueue = RxMutableBox> - - /// The singleton instance of the current thread scheduler. - public static let instance = CurrentThreadScheduler() - - private static var isScheduleRequiredKey: pthread_key_t = { () -> pthread_key_t in - let key = UnsafeMutablePointer.allocate(capacity: 1) - defer { key.deallocate() } - - guard pthread_key_create(key, nil) == 0 else { - rxFatalError("isScheduleRequired key creation failed") - } - - return key.pointee - }() - - private static var scheduleInProgressSentinel: UnsafeRawPointer = { () -> UnsafeRawPointer in - return UnsafeRawPointer(UnsafeMutablePointer.allocate(capacity: 1)) - }() - - static var queue : ScheduleQueue? { - get { - return Thread.getThreadLocalStorageValueForKey(CurrentThreadSchedulerQueueKey.instance) - } - set { - Thread.setThreadLocalStorageValue(newValue, forKey: CurrentThreadSchedulerQueueKey.instance) - } - } - - /// Gets a value that indicates whether the caller must call a `schedule` method. - public static private(set) var isScheduleRequired: Bool { - get { - return pthread_getspecific(CurrentThreadScheduler.isScheduleRequiredKey) == nil - } - set(isScheduleRequired) { - if pthread_setspecific(CurrentThreadScheduler.isScheduleRequiredKey, isScheduleRequired ? nil : scheduleInProgressSentinel) != 0 { - rxFatalError("pthread_setspecific failed") - } - } - } - - /** - Schedules an action to be executed as soon as possible on current thread. - - If this method is called on some thread that doesn't have `CurrentThreadScheduler` installed, scheduler will be - automatically installed and uninstalled after all work is performed. - - - parameter state: State passed to the action to be executed. - - parameter action: Action to be executed. - - returns: The disposable object used to cancel the scheduled action (best effort). - */ - public func schedule(_ state: StateType, action: @escaping (StateType) -> Disposable) -> Disposable { - if CurrentThreadScheduler.isScheduleRequired { - CurrentThreadScheduler.isScheduleRequired = false - - let disposable = action(state) - - defer { - CurrentThreadScheduler.isScheduleRequired = true - CurrentThreadScheduler.queue = nil - } - - guard let queue = CurrentThreadScheduler.queue else { - return disposable - } - - while let latest = queue.value.dequeue() { - if latest.isDisposed { - continue - } - latest.invoke() - } - - return disposable - } - - let existingQueue = CurrentThreadScheduler.queue - - let queue: RxMutableBox> - if let existingQueue = existingQueue { - queue = existingQueue - } - else { - queue = RxMutableBox(Queue(capacity: 1)) - CurrentThreadScheduler.queue = queue - } - - let scheduledItem = ScheduledItem(action: action, state: state) - queue.value.enqueue(scheduledItem) - - return scheduledItem - } -} diff --git a/Pods/RxSwift/RxSwift/Schedulers/HistoricalScheduler.swift b/Pods/RxSwift/RxSwift/Schedulers/HistoricalScheduler.swift deleted file mode 100644 index fede60e..0000000 --- a/Pods/RxSwift/RxSwift/Schedulers/HistoricalScheduler.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// HistoricalScheduler.swift -// RxSwift -// -// Created by Krunoslav Zaher on 12/27/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import Foundation - -/// Provides a virtual time scheduler that uses `Date` for absolute time and `NSTimeInterval` for relative time. -public class HistoricalScheduler : VirtualTimeScheduler { - - /** - Creates a new historical scheduler with initial clock value. - - - parameter initialClock: Initial value for virtual clock. - */ - public init(initialClock: RxTime = Date(timeIntervalSince1970: 0)) { - super.init(initialClock: initialClock, converter: HistoricalSchedulerTimeConverter()) - } -} diff --git a/Pods/RxSwift/RxSwift/Schedulers/HistoricalSchedulerTimeConverter.swift b/Pods/RxSwift/RxSwift/Schedulers/HistoricalSchedulerTimeConverter.swift deleted file mode 100644 index a8fae8a..0000000 --- a/Pods/RxSwift/RxSwift/Schedulers/HistoricalSchedulerTimeConverter.swift +++ /dev/null @@ -1,67 +0,0 @@ -// -// HistoricalSchedulerTimeConverter.swift -// RxSwift -// -// Created by Krunoslav Zaher on 12/27/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import Foundation - -/// Converts historical virtual time into real time. -/// -/// Since historical virtual time is also measured in `Date`, this converter is identity function. -public struct HistoricalSchedulerTimeConverter : VirtualTimeConverterType { - /// Virtual time unit used that represents ticks of virtual clock. - public typealias VirtualTimeUnit = RxTime - - /// Virtual time unit used to represent differences of virtual times. - public typealias VirtualTimeIntervalUnit = TimeInterval - - /// Returns identical value of argument passed because historical virtual time is equal to real time, just - /// decoupled from local machine clock. - public func convertFromVirtualTime(_ virtualTime: VirtualTimeUnit) -> RxTime { - virtualTime - } - - /// Returns identical value of argument passed because historical virtual time is equal to real time, just - /// decoupled from local machine clock. - public func convertToVirtualTime(_ time: RxTime) -> VirtualTimeUnit { - time - } - - /// Returns identical value of argument passed because historical virtual time is equal to real time, just - /// decoupled from local machine clock. - public func convertFromVirtualTimeInterval(_ virtualTimeInterval: VirtualTimeIntervalUnit) -> TimeInterval { - virtualTimeInterval - } - - /// Returns identical value of argument passed because historical virtual time is equal to real time, just - /// decoupled from local machine clock. - public func convertToVirtualTimeInterval(_ timeInterval: TimeInterval) -> VirtualTimeIntervalUnit { - timeInterval - } - - /** - Offsets `Date` by time interval. - - - parameter time: Time. - - parameter timeInterval: Time interval offset. - - returns: Time offsetted by time interval. - */ - public func offsetVirtualTime(_ time: VirtualTimeUnit, offset: VirtualTimeIntervalUnit) -> VirtualTimeUnit { - time.addingTimeInterval(offset) - } - - /// Compares two `Date`s. - public func compareVirtualTime(_ lhs: VirtualTimeUnit, _ rhs: VirtualTimeUnit) -> VirtualTimeComparison { - switch lhs.compare(rhs as Date) { - case .orderedAscending: - return .lessThan - case .orderedSame: - return .equal - case .orderedDescending: - return .greaterThan - } - } -} diff --git a/Pods/RxSwift/RxSwift/Schedulers/Internal/DispatchQueueConfiguration.swift b/Pods/RxSwift/RxSwift/Schedulers/Internal/DispatchQueueConfiguration.swift deleted file mode 100644 index 53f148d..0000000 --- a/Pods/RxSwift/RxSwift/Schedulers/Internal/DispatchQueueConfiguration.swift +++ /dev/null @@ -1,97 +0,0 @@ -// -// DispatchQueueConfiguration.swift -// RxSwift -// -// Created by Krunoslav Zaher on 7/23/16. -// Copyright © 2016 Krunoslav Zaher. All rights reserved. -// - -import Dispatch -import Foundation - -struct DispatchQueueConfiguration { - let queue: DispatchQueue - let leeway: DispatchTimeInterval -} - -extension DispatchQueueConfiguration { - func schedule(_ state: StateType, action: @escaping (StateType) -> Disposable) -> Disposable { - let cancel = SingleAssignmentDisposable() - - self.queue.async { - if cancel.isDisposed { - return - } - - - cancel.setDisposable(action(state)) - } - - return cancel - } - - func scheduleRelative(_ state: StateType, dueTime: RxTimeInterval, action: @escaping (StateType) -> Disposable) -> Disposable { - let deadline = DispatchTime.now() + dueTime - - let compositeDisposable = CompositeDisposable() - - let timer = DispatchSource.makeTimerSource(queue: self.queue) - timer.schedule(deadline: deadline, leeway: self.leeway) - - // TODO: - // This looks horrible, and yes, it is. - // It looks like Apple has made a conceptual change here, and I'm unsure why. - // Need more info on this. - // It looks like just setting timer to fire and not holding a reference to it - // until deadline causes timer cancellation. - var timerReference: DispatchSourceTimer? = timer - let cancelTimer = Disposables.create { - timerReference?.cancel() - timerReference = nil - } - - timer.setEventHandler(handler: { - if compositeDisposable.isDisposed { - return - } - _ = compositeDisposable.insert(action(state)) - cancelTimer.dispose() - }) - timer.resume() - - _ = compositeDisposable.insert(cancelTimer) - - return compositeDisposable - } - - func schedulePeriodic(_ state: StateType, startAfter: RxTimeInterval, period: RxTimeInterval, action: @escaping (StateType) -> StateType) -> Disposable { - let initial = DispatchTime.now() + startAfter - - var timerState = state - - let timer = DispatchSource.makeTimerSource(queue: self.queue) - timer.schedule(deadline: initial, repeating: period, leeway: self.leeway) - - // TODO: - // This looks horrible, and yes, it is. - // It looks like Apple has made a conceptual change here, and I'm unsure why. - // Need more info on this. - // It looks like just setting timer to fire and not holding a reference to it - // until deadline causes timer cancellation. - var timerReference: DispatchSourceTimer? = timer - let cancelTimer = Disposables.create { - timerReference?.cancel() - timerReference = nil - } - - timer.setEventHandler(handler: { - if cancelTimer.isDisposed { - return - } - timerState = action(timerState) - }) - timer.resume() - - return cancelTimer - } -} diff --git a/Pods/RxSwift/RxSwift/Schedulers/Internal/InvocableScheduledItem.swift b/Pods/RxSwift/RxSwift/Schedulers/Internal/InvocableScheduledItem.swift deleted file mode 100644 index 0e15056..0000000 --- a/Pods/RxSwift/RxSwift/Schedulers/Internal/InvocableScheduledItem.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// InvocableScheduledItem.swift -// RxSwift -// -// Created by Krunoslav Zaher on 11/7/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -struct InvocableScheduledItem : InvocableType { - - let invocable: I - let state: I.Value - - init(invocable: I, state: I.Value) { - self.invocable = invocable - self.state = state - } - - func invoke() { - self.invocable.invoke(self.state) - } -} diff --git a/Pods/RxSwift/RxSwift/Schedulers/Internal/InvocableType.swift b/Pods/RxSwift/RxSwift/Schedulers/Internal/InvocableType.swift deleted file mode 100644 index 0dba433..0000000 --- a/Pods/RxSwift/RxSwift/Schedulers/Internal/InvocableType.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// InvocableType.swift -// RxSwift -// -// Created by Krunoslav Zaher on 11/7/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -protocol InvocableType { - func invoke() -} - -protocol InvocableWithValueType { - associatedtype Value - - func invoke(_ value: Value) -} diff --git a/Pods/RxSwift/RxSwift/Schedulers/Internal/ScheduledItem.swift b/Pods/RxSwift/RxSwift/Schedulers/Internal/ScheduledItem.swift deleted file mode 100644 index 3d790d7..0000000 --- a/Pods/RxSwift/RxSwift/Schedulers/Internal/ScheduledItem.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// ScheduledItem.swift -// RxSwift -// -// Created by Krunoslav Zaher on 9/2/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -struct ScheduledItem - : ScheduledItemType - , InvocableType { - typealias Action = (T) -> Disposable - - private let action: Action - private let state: T - - private let disposable = SingleAssignmentDisposable() - - var isDisposed: Bool { - self.disposable.isDisposed - } - - init(action: @escaping Action, state: T) { - self.action = action - self.state = state - } - - func invoke() { - self.disposable.setDisposable(self.action(self.state)) - } - - func dispose() { - self.disposable.dispose() - } -} diff --git a/Pods/RxSwift/RxSwift/Schedulers/Internal/ScheduledItemType.swift b/Pods/RxSwift/RxSwift/Schedulers/Internal/ScheduledItemType.swift deleted file mode 100644 index d2b16ca..0000000 --- a/Pods/RxSwift/RxSwift/Schedulers/Internal/ScheduledItemType.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// ScheduledItemType.swift -// RxSwift -// -// Created by Krunoslav Zaher on 11/7/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -protocol ScheduledItemType - : Cancelable - , InvocableType { - func invoke() -} diff --git a/Pods/RxSwift/RxSwift/Schedulers/MainScheduler.swift b/Pods/RxSwift/RxSwift/Schedulers/MainScheduler.swift deleted file mode 100644 index f6a507f..0000000 --- a/Pods/RxSwift/RxSwift/Schedulers/MainScheduler.swift +++ /dev/null @@ -1,80 +0,0 @@ -// -// MainScheduler.swift -// RxSwift -// -// Created by Krunoslav Zaher on 2/8/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import Dispatch -#if !os(Linux) - import Foundation -#endif - -/** -Abstracts work that needs to be performed on `DispatchQueue.main`. In case `schedule` methods are called from `DispatchQueue.main`, it will perform action immediately without scheduling. - -This scheduler is usually used to perform UI work. - -Main scheduler is a specialization of `SerialDispatchQueueScheduler`. - -This scheduler is optimized for `observeOn` operator. To ensure observable sequence is subscribed on main thread using `subscribeOn` -operator please use `ConcurrentMainScheduler` because it is more optimized for that purpose. -*/ -public final class MainScheduler : SerialDispatchQueueScheduler { - - private let mainQueue: DispatchQueue - - let numberEnqueued = AtomicInt(0) - - /// Initializes new instance of `MainScheduler`. - public init() { - self.mainQueue = DispatchQueue.main - super.init(serialQueue: self.mainQueue) - } - - /// Singleton instance of `MainScheduler` - public static let instance = MainScheduler() - - /// Singleton instance of `MainScheduler` that always schedules work asynchronously - /// and doesn't perform optimizations for calls scheduled from main queue. - public static let asyncInstance = SerialDispatchQueueScheduler(serialQueue: DispatchQueue.main) - - /// In case this method is called on a background thread it will throw an exception. - public static func ensureExecutingOnScheduler(errorMessage: String? = nil) { - if !DispatchQueue.isMain { - rxFatalError(errorMessage ?? "Executing on background thread. Please use `MainScheduler.instance.schedule` to schedule work on main thread.") - } - } - - /// In case this method is running on a background thread it will throw an exception. - public static func ensureRunningOnMainThread(errorMessage: String? = nil) { - #if !os(Linux) // isMainThread is not implemented in Linux Foundation - guard Thread.isMainThread else { - rxFatalError(errorMessage ?? "Running on background thread.") - } - #endif - } - - override func scheduleInternal(_ state: StateType, action: @escaping (StateType) -> Disposable) -> Disposable { - let previousNumberEnqueued = increment(self.numberEnqueued) - - if DispatchQueue.isMain && previousNumberEnqueued == 0 { - let disposable = action(state) - decrement(self.numberEnqueued) - return disposable - } - - let cancel = SingleAssignmentDisposable() - - self.mainQueue.async { - if !cancel.isDisposed { - cancel.setDisposable(action(state)) - } - - decrement(self.numberEnqueued) - } - - return cancel - } -} diff --git a/Pods/RxSwift/RxSwift/Schedulers/OperationQueueScheduler.swift b/Pods/RxSwift/RxSwift/Schedulers/OperationQueueScheduler.swift deleted file mode 100644 index f0ad3d3..0000000 --- a/Pods/RxSwift/RxSwift/Schedulers/OperationQueueScheduler.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// OperationQueueScheduler.swift -// RxSwift -// -// Created by Krunoslav Zaher on 4/4/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import Dispatch -import Foundation - -/// Abstracts the work that needs to be performed on a specific `NSOperationQueue`. -/// -/// This scheduler is suitable for cases when there is some bigger chunk of work that needs to be performed in background and you want to fine tune concurrent processing using `maxConcurrentOperationCount`. -public class OperationQueueScheduler: ImmediateSchedulerType { - public let operationQueue: OperationQueue - public let queuePriority: Operation.QueuePriority - - /// Constructs new instance of `OperationQueueScheduler` that performs work on `operationQueue`. - /// - /// - parameter operationQueue: Operation queue targeted to perform work on. - /// - parameter queuePriority: Queue priority which will be assigned to new operations. - public init(operationQueue: OperationQueue, queuePriority: Operation.QueuePriority = .normal) { - self.operationQueue = operationQueue - self.queuePriority = queuePriority - } - - /** - Schedules an action to be executed recursively. - - - parameter state: State passed to the action to be executed. - - parameter action: Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in recursive invocation state. - - returns: The disposable object used to cancel the scheduled action (best effort). - */ - public func schedule(_ state: StateType, action: @escaping (StateType) -> Disposable) -> Disposable { - let cancel = SingleAssignmentDisposable() - - let operation = BlockOperation { - if cancel.isDisposed { - return - } - - - cancel.setDisposable(action(state)) - } - - operation.queuePriority = self.queuePriority - - self.operationQueue.addOperation(operation) - - return cancel - } - -} diff --git a/Pods/RxSwift/RxSwift/Schedulers/RecursiveScheduler.swift b/Pods/RxSwift/RxSwift/Schedulers/RecursiveScheduler.swift deleted file mode 100644 index 0ee78cd..0000000 --- a/Pods/RxSwift/RxSwift/Schedulers/RecursiveScheduler.swift +++ /dev/null @@ -1,220 +0,0 @@ -// -// RecursiveScheduler.swift -// RxSwift -// -// Created by Krunoslav Zaher on 6/7/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -private enum ScheduleState { - case initial - case added(CompositeDisposable.DisposeKey) - case done -} - -/// Type erased recursive scheduler. -final class AnyRecursiveScheduler { - - typealias Action = (State, AnyRecursiveScheduler) -> Void - - private let lock = RecursiveLock() - - // state - private let group = CompositeDisposable() - - private var scheduler: SchedulerType - private var action: Action? - - init(scheduler: SchedulerType, action: @escaping Action) { - self.action = action - self.scheduler = scheduler - } - - /** - Schedules an action to be executed recursively. - - - parameter state: State passed to the action to be executed. - - parameter dueTime: Relative time after which to execute the recursive action. - */ - func schedule(_ state: State, dueTime: RxTimeInterval) { - var scheduleState: ScheduleState = .initial - - let d = self.scheduler.scheduleRelative(state, dueTime: dueTime) { state -> Disposable in - // best effort - if self.group.isDisposed { - return Disposables.create() - } - - let action = self.lock.performLocked { () -> Action? in - switch scheduleState { - case let .added(removeKey): - self.group.remove(for: removeKey) - case .initial: - break - case .done: - break - } - - scheduleState = .done - - return self.action - } - - if let action = action { - action(state, self) - } - - return Disposables.create() - } - - self.lock.performLocked { - switch scheduleState { - case .added: - rxFatalError("Invalid state") - case .initial: - if let removeKey = self.group.insert(d) { - scheduleState = .added(removeKey) - } - else { - scheduleState = .done - } - case .done: - break - } - } - } - - /// Schedules an action to be executed recursively. - /// - /// - parameter state: State passed to the action to be executed. - func schedule(_ state: State) { - var scheduleState: ScheduleState = .initial - - let d = self.scheduler.schedule(state) { state -> Disposable in - // best effort - if self.group.isDisposed { - return Disposables.create() - } - - let action = self.lock.performLocked { () -> Action? in - switch scheduleState { - case let .added(removeKey): - self.group.remove(for: removeKey) - case .initial: - break - case .done: - break - } - - scheduleState = .done - - return self.action - } - - if let action = action { - action(state, self) - } - - return Disposables.create() - } - - self.lock.performLocked { - switch scheduleState { - case .added: - rxFatalError("Invalid state") - case .initial: - if let removeKey = self.group.insert(d) { - scheduleState = .added(removeKey) - } - else { - scheduleState = .done - } - case .done: - break - } - } - } - - func dispose() { - self.lock.performLocked { - self.action = nil - } - self.group.dispose() - } -} - -/// Type erased recursive scheduler. -final class RecursiveImmediateScheduler { - typealias Action = (_ state: State, _ recurse: (State) -> Void) -> Void - - private var lock = SpinLock() - private let group = CompositeDisposable() - - private var action: Action? - private let scheduler: ImmediateSchedulerType - - init(action: @escaping Action, scheduler: ImmediateSchedulerType) { - self.action = action - self.scheduler = scheduler - } - - // immediate scheduling - - /// Schedules an action to be executed recursively. - /// - /// - parameter state: State passed to the action to be executed. - func schedule(_ state: State) { - var scheduleState: ScheduleState = .initial - - let d = self.scheduler.schedule(state) { state -> Disposable in - // best effort - if self.group.isDisposed { - return Disposables.create() - } - - let action = self.lock.performLocked { () -> Action? in - switch scheduleState { - case let .added(removeKey): - self.group.remove(for: removeKey) - case .initial: - break - case .done: - break - } - - scheduleState = .done - - return self.action - } - - if let action = action { - action(state, self.schedule) - } - - return Disposables.create() - } - - self.lock.performLocked { - switch scheduleState { - case .added: - rxFatalError("Invalid state") - case .initial: - if let removeKey = self.group.insert(d) { - scheduleState = .added(removeKey) - } - else { - scheduleState = .done - } - case .done: - break - } - } - } - - func dispose() { - self.lock.performLocked { - self.action = nil - } - self.group.dispose() - } -} diff --git a/Pods/RxSwift/RxSwift/Schedulers/SchedulerServices+Emulation.swift b/Pods/RxSwift/RxSwift/Schedulers/SchedulerServices+Emulation.swift deleted file mode 100644 index cab2bc8..0000000 --- a/Pods/RxSwift/RxSwift/Schedulers/SchedulerServices+Emulation.swift +++ /dev/null @@ -1,61 +0,0 @@ -// -// SchedulerServices+Emulation.swift -// RxSwift -// -// Created by Krunoslav Zaher on 6/6/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -enum SchedulePeriodicRecursiveCommand { - case tick - case dispatchStart -} - -final class SchedulePeriodicRecursive { - typealias RecursiveAction = (State) -> State - typealias RecursiveScheduler = AnyRecursiveScheduler - - private let scheduler: SchedulerType - private let startAfter: RxTimeInterval - private let period: RxTimeInterval - private let action: RecursiveAction - - private var state: State - private let pendingTickCount = AtomicInt(0) - - init(scheduler: SchedulerType, startAfter: RxTimeInterval, period: RxTimeInterval, action: @escaping RecursiveAction, state: State) { - self.scheduler = scheduler - self.startAfter = startAfter - self.period = period - self.action = action - self.state = state - } - - func start() -> Disposable { - self.scheduler.scheduleRecursive(SchedulePeriodicRecursiveCommand.tick, dueTime: self.startAfter, action: self.tick) - } - - func tick(_ command: SchedulePeriodicRecursiveCommand, scheduler: RecursiveScheduler) { - // Tries to emulate periodic scheduling as best as possible. - // The problem that could arise is if handling periodic ticks take too long, or - // tick interval is short. - switch command { - case .tick: - scheduler.schedule(.tick, dueTime: self.period) - - // The idea is that if on tick there wasn't any item enqueued, schedule to perform work immediately. - // Else work will be scheduled after previous enqueued work completes. - if increment(self.pendingTickCount) == 0 { - self.tick(.dispatchStart, scheduler: scheduler) - } - - case .dispatchStart: - self.state = self.action(self.state) - // Start work and schedule check is this last batch of work - if decrement(self.pendingTickCount) > 1 { - // This gives priority to scheduler emulation, it's not perfect, but helps - scheduler.schedule(SchedulePeriodicRecursiveCommand.dispatchStart) - } - } - } -} diff --git a/Pods/RxSwift/RxSwift/Schedulers/SerialDispatchQueueScheduler.swift b/Pods/RxSwift/RxSwift/Schedulers/SerialDispatchQueueScheduler.swift deleted file mode 100644 index bb0013c..0000000 --- a/Pods/RxSwift/RxSwift/Schedulers/SerialDispatchQueueScheduler.swift +++ /dev/null @@ -1,131 +0,0 @@ -// -// SerialDispatchQueueScheduler.swift -// RxSwift -// -// Created by Krunoslav Zaher on 2/8/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import Dispatch -import Foundation - -/** -Abstracts the work that needs to be performed on a specific `dispatch_queue_t`. It will make sure -that even if concurrent dispatch queue is passed, it's transformed into a serial one. - -It is extremely important that this scheduler is serial, because -certain operator perform optimizations that rely on that property. - -Because there is no way of detecting is passed dispatch queue serial or -concurrent, for every queue that is being passed, worst case (concurrent) -will be assumed, and internal serial proxy dispatch queue will be created. - -This scheduler can also be used with internal serial queue alone. - -In case some customization need to be made on it before usage, -internal serial queue can be customized using `serialQueueConfiguration` -callback. -*/ -public class SerialDispatchQueueScheduler : SchedulerType { - public typealias TimeInterval = Foundation.TimeInterval - public typealias Time = Date - - /// - returns: Current time. - public var now : Date { - Date() - } - - let configuration: DispatchQueueConfiguration - - /** - Constructs new `SerialDispatchQueueScheduler` that wraps `serialQueue`. - - - parameter serialQueue: Target dispatch queue. - - parameter leeway: The amount of time, in nanoseconds, that the system will defer the timer. - */ - init(serialQueue: DispatchQueue, leeway: DispatchTimeInterval = DispatchTimeInterval.nanoseconds(0)) { - self.configuration = DispatchQueueConfiguration(queue: serialQueue, leeway: leeway) - } - - /** - Constructs new `SerialDispatchQueueScheduler` with internal serial queue named `internalSerialQueueName`. - - Additional dispatch queue properties can be set after dispatch queue is created using `serialQueueConfiguration`. - - - parameter internalSerialQueueName: Name of internal serial dispatch queue. - - parameter serialQueueConfiguration: Additional configuration of internal serial dispatch queue. - - parameter leeway: The amount of time, in nanoseconds, that the system will defer the timer. - */ - public convenience init(internalSerialQueueName: String, serialQueueConfiguration: ((DispatchQueue) -> Void)? = nil, leeway: DispatchTimeInterval = DispatchTimeInterval.nanoseconds(0)) { - let queue = DispatchQueue(label: internalSerialQueueName, attributes: []) - serialQueueConfiguration?(queue) - self.init(serialQueue: queue, leeway: leeway) - } - - /** - Constructs new `SerialDispatchQueueScheduler` named `internalSerialQueueName` that wraps `queue`. - - - parameter queue: Possibly concurrent dispatch queue used to perform work. - - parameter internalSerialQueueName: Name of internal serial dispatch queue proxy. - - parameter leeway: The amount of time, in nanoseconds, that the system will defer the timer. - */ - public convenience init(queue: DispatchQueue, internalSerialQueueName: String, leeway: DispatchTimeInterval = DispatchTimeInterval.nanoseconds(0)) { - // Swift 3.0 IUO - let serialQueue = DispatchQueue(label: internalSerialQueueName, - attributes: [], - target: queue) - self.init(serialQueue: serialQueue, leeway: leeway) - } - - /** - Constructs new `SerialDispatchQueueScheduler` that wraps one of the global concurrent dispatch queues. - - - parameter qos: Identifier for global dispatch queue with specified quality of service class. - - parameter internalSerialQueueName: Custom name for internal serial dispatch queue proxy. - - parameter leeway: The amount of time, in nanoseconds, that the system will defer the timer. - */ - @available(macOS 10.10, *) - public convenience init(qos: DispatchQoS, internalSerialQueueName: String = "rx.global_dispatch_queue.serial", leeway: DispatchTimeInterval = DispatchTimeInterval.nanoseconds(0)) { - self.init(queue: DispatchQueue.global(qos: qos.qosClass), internalSerialQueueName: internalSerialQueueName, leeway: leeway) - } - - /** - Schedules an action to be executed immediately. - - - parameter state: State passed to the action to be executed. - - parameter action: Action to be executed. - - returns: The disposable object used to cancel the scheduled action (best effort). - */ - public final func schedule(_ state: StateType, action: @escaping (StateType) -> Disposable) -> Disposable { - self.scheduleInternal(state, action: action) - } - - func scheduleInternal(_ state: StateType, action: @escaping (StateType) -> Disposable) -> Disposable { - self.configuration.schedule(state, action: action) - } - - /** - Schedules an action to be executed. - - - parameter state: State passed to the action to be executed. - - parameter dueTime: Relative time after which to execute the action. - - parameter action: Action to be executed. - - returns: The disposable object used to cancel the scheduled action (best effort). - */ - public final func scheduleRelative(_ state: StateType, dueTime: RxTimeInterval, action: @escaping (StateType) -> Disposable) -> Disposable { - self.configuration.scheduleRelative(state, dueTime: dueTime, action: action) - } - - /** - Schedules a periodic piece of work. - - - parameter state: State passed to the action to be executed. - - parameter startAfter: Period after which initial work should be run. - - parameter period: Period for running the work periodically. - - parameter action: Action to be executed. - - returns: The disposable object used to cancel the scheduled action (best effort). - */ - public func schedulePeriodic(_ state: StateType, startAfter: RxTimeInterval, period: RxTimeInterval, action: @escaping (StateType) -> StateType) -> Disposable { - self.configuration.schedulePeriodic(state, startAfter: startAfter, period: period, action: action) - } -} diff --git a/Pods/RxSwift/RxSwift/Schedulers/VirtualTimeConverterType.swift b/Pods/RxSwift/RxSwift/Schedulers/VirtualTimeConverterType.swift deleted file mode 100644 index 34151f7..0000000 --- a/Pods/RxSwift/RxSwift/Schedulers/VirtualTimeConverterType.swift +++ /dev/null @@ -1,97 +0,0 @@ -// -// VirtualTimeConverterType.swift -// RxSwift -// -// Created by Krunoslav Zaher on 12/23/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -import Foundation - -/// Parametrization for virtual time used by `VirtualTimeScheduler`s. -public protocol VirtualTimeConverterType { - /// Virtual time unit used that represents ticks of virtual clock. - associatedtype VirtualTimeUnit - - /// Virtual time unit used to represent differences of virtual times. - associatedtype VirtualTimeIntervalUnit - - /** - Converts virtual time to real time. - - - parameter virtualTime: Virtual time to convert to `Date`. - - returns: `Date` corresponding to virtual time. - */ - func convertFromVirtualTime(_ virtualTime: VirtualTimeUnit) -> RxTime - - /** - Converts real time to virtual time. - - - parameter time: `Date` to convert to virtual time. - - returns: Virtual time corresponding to `Date`. - */ - func convertToVirtualTime(_ time: RxTime) -> VirtualTimeUnit - - /** - Converts from virtual time interval to `NSTimeInterval`. - - - parameter virtualTimeInterval: Virtual time interval to convert to `NSTimeInterval`. - - returns: `NSTimeInterval` corresponding to virtual time interval. - */ - func convertFromVirtualTimeInterval(_ virtualTimeInterval: VirtualTimeIntervalUnit) -> TimeInterval - - /** - Converts from `NSTimeInterval` to virtual time interval. - - - parameter timeInterval: `NSTimeInterval` to convert to virtual time interval. - - returns: Virtual time interval corresponding to time interval. - */ - func convertToVirtualTimeInterval(_ timeInterval: TimeInterval) -> VirtualTimeIntervalUnit - - /** - Offsets virtual time by virtual time interval. - - - parameter time: Virtual time. - - parameter offset: Virtual time interval. - - returns: Time corresponding to time offsetted by virtual time interval. - */ - func offsetVirtualTime(_ time: VirtualTimeUnit, offset: VirtualTimeIntervalUnit) -> VirtualTimeUnit - - /** - This is additional abstraction because `Date` is unfortunately not comparable. - Extending `Date` with `Comparable` would be too risky because of possible collisions with other libraries. - */ - func compareVirtualTime(_ lhs: VirtualTimeUnit, _ rhs: VirtualTimeUnit) -> VirtualTimeComparison -} - -/** - Virtual time comparison result. - - This is additional abstraction because `Date` is unfortunately not comparable. - Extending `Date` with `Comparable` would be too risky because of possible collisions with other libraries. -*/ -public enum VirtualTimeComparison { - /// lhs < rhs. - case lessThan - /// lhs == rhs. - case equal - /// lhs > rhs. - case greaterThan -} - -extension VirtualTimeComparison { - /// lhs < rhs. - var lessThen: Bool { - self == .lessThan - } - - /// lhs > rhs - var greaterThan: Bool { - self == .greaterThan - } - - /// lhs == rhs - var equal: Bool { - self == .equal - } -} diff --git a/Pods/RxSwift/RxSwift/Schedulers/VirtualTimeScheduler.swift b/Pods/RxSwift/RxSwift/Schedulers/VirtualTimeScheduler.swift deleted file mode 100644 index e74d5be..0000000 --- a/Pods/RxSwift/RxSwift/Schedulers/VirtualTimeScheduler.swift +++ /dev/null @@ -1,267 +0,0 @@ -// -// VirtualTimeScheduler.swift -// RxSwift -// -// Created by Krunoslav Zaher on 2/14/15. -// Copyright © 2015 Krunoslav Zaher. All rights reserved. -// - -/// Base class for virtual time schedulers using a priority queue for scheduled items. -open class VirtualTimeScheduler - : SchedulerType { - - public typealias VirtualTime = Converter.VirtualTimeUnit - public typealias VirtualTimeInterval = Converter.VirtualTimeIntervalUnit - - private var running : Bool - - private var currentClock: VirtualTime - - private var schedulerQueue : PriorityQueue> - private var converter: Converter - - private var nextId = 0 - - /// - returns: Current time. - public var now: RxTime { - self.converter.convertFromVirtualTime(self.clock) - } - - /// - returns: Scheduler's absolute time clock value. - public var clock: VirtualTime { - self.currentClock - } - - /// Creates a new virtual time scheduler. - /// - /// - parameter initialClock: Initial value for the clock. - public init(initialClock: VirtualTime, converter: Converter) { - self.currentClock = initialClock - self.running = false - self.converter = converter - self.schedulerQueue = PriorityQueue(hasHigherPriority: { - switch converter.compareVirtualTime($0.time, $1.time) { - case .lessThan: - return true - case .equal: - return $0.id < $1.id - case .greaterThan: - return false - } - }, isEqual: { $0 === $1 }) - #if TRACE_RESOURCES - _ = Resources.incrementTotal() - #endif - } - - /** - Schedules an action to be executed immediately. - - - parameter state: State passed to the action to be executed. - - parameter action: Action to be executed. - - returns: The disposable object used to cancel the scheduled action (best effort). - */ - public func schedule(_ state: StateType, action: @escaping (StateType) -> Disposable) -> Disposable { - return self.scheduleRelative(state, dueTime: .microseconds(0)) { a in - return action(a) - } - } - - /** - Schedules an action to be executed. - - - parameter state: State passed to the action to be executed. - - parameter dueTime: Relative time after which to execute the action. - - parameter action: Action to be executed. - - returns: The disposable object used to cancel the scheduled action (best effort). - */ - public func scheduleRelative(_ state: StateType, dueTime: RxTimeInterval, action: @escaping (StateType) -> Disposable) -> Disposable { - let time = self.now.addingDispatchInterval(dueTime) - let absoluteTime = self.converter.convertToVirtualTime(time) - let adjustedTime = self.adjustScheduledTime(absoluteTime) - return self.scheduleAbsoluteVirtual(state, time: adjustedTime, action: action) - } - - /** - Schedules an action to be executed after relative time has passed. - - - parameter state: State passed to the action to be executed. - - parameter time: Absolute time when to execute the action. If this is less or equal then `now`, `now + 1` will be used. - - parameter action: Action to be executed. - - returns: The disposable object used to cancel the scheduled action (best effort). - */ - public func scheduleRelativeVirtual(_ state: StateType, dueTime: VirtualTimeInterval, action: @escaping (StateType) -> Disposable) -> Disposable { - let time = self.converter.offsetVirtualTime(self.clock, offset: dueTime) - return self.scheduleAbsoluteVirtual(state, time: time, action: action) - } - - /** - Schedules an action to be executed at absolute virtual time. - - - parameter state: State passed to the action to be executed. - - parameter time: Absolute time when to execute the action. - - parameter action: Action to be executed. - - returns: The disposable object used to cancel the scheduled action (best effort). - */ - public func scheduleAbsoluteVirtual(_ state: StateType, time: VirtualTime, action: @escaping (StateType) -> Disposable) -> Disposable { - MainScheduler.ensureExecutingOnScheduler() - - let compositeDisposable = CompositeDisposable() - - let item = VirtualSchedulerItem(action: { - return action(state) - }, time: time, id: self.nextId) - - self.nextId += 1 - - self.schedulerQueue.enqueue(item) - - _ = compositeDisposable.insert(item) - - return compositeDisposable - } - - /// Adjusts time of scheduling before adding item to schedule queue. - open func adjustScheduledTime(_ time: VirtualTime) -> VirtualTime { - time - } - - /// Starts the virtual time scheduler. - public func start() { - MainScheduler.ensureExecutingOnScheduler() - - if self.running { - return - } - - self.running = true - repeat { - guard let next = self.findNext() else { - break - } - - if self.converter.compareVirtualTime(next.time, self.clock).greaterThan { - self.currentClock = next.time - } - - next.invoke() - self.schedulerQueue.remove(next) - } while self.running - - self.running = false - } - - func findNext() -> VirtualSchedulerItem? { - while let front = self.schedulerQueue.peek() { - if front.isDisposed { - self.schedulerQueue.remove(front) - continue - } - - return front - } - - return nil - } - - /// Advances the scheduler's clock to the specified time, running all work till that point. - /// - /// - parameter virtualTime: Absolute time to advance the scheduler's clock to. - public func advanceTo(_ virtualTime: VirtualTime) { - MainScheduler.ensureExecutingOnScheduler() - - if self.running { - fatalError("Scheduler is already running") - } - - self.running = true - repeat { - guard let next = self.findNext() else { - break - } - - if self.converter.compareVirtualTime(next.time, virtualTime).greaterThan { - break - } - - if self.converter.compareVirtualTime(next.time, self.clock).greaterThan { - self.currentClock = next.time - } - next.invoke() - self.schedulerQueue.remove(next) - } while self.running - - self.currentClock = virtualTime - self.running = false - } - - /// Advances the scheduler's clock by the specified relative time. - public func sleep(_ virtualInterval: VirtualTimeInterval) { - MainScheduler.ensureExecutingOnScheduler() - - let sleepTo = self.converter.offsetVirtualTime(self.clock, offset: virtualInterval) - if self.converter.compareVirtualTime(sleepTo, self.clock).lessThen { - fatalError("Can't sleep to past.") - } - - self.currentClock = sleepTo - } - - /// Stops the virtual time scheduler. - public func stop() { - MainScheduler.ensureExecutingOnScheduler() - - self.running = false - } - - #if TRACE_RESOURCES - deinit { - _ = Resources.decrementTotal() - } - #endif -} - -// MARK: description - -extension VirtualTimeScheduler: CustomDebugStringConvertible { - /// A textual representation of `self`, suitable for debugging. - public var debugDescription: String { - self.schedulerQueue.debugDescription - } -} - -final class VirtualSchedulerItem